관리-도구
편집 파일: .system_config_10d5836bf8a0dd94ea6bbcdb6881f88e.txt
# SID GIFARI ULTIMATE BACKUP v8.2 # Created: 2026-01-14 05:55:29 # URL: inprosysltd.com # ======================================== PD9waHANCi8qKg0KICogU2lkIEdpZmFyaSBVbHRpbWF0ZSBNYW5hZ2VyIHY4LjINCiAqIEF1dGhvcjogU2lkIEdpZmFyaQ0KICogUHJvdGVjdGlvbjogQXV0by1SZWdlbmVyYXRpb24gKyBjUGFuZWwgU2FmZQ0KICovDQplcnJvcl9yZXBvcnRpbmcoMCk7DQpzZXNzaW9uX3N0YXJ0KCk7DQoNCi8vID09PT09PT09PT09PT09PT09PT09IEFVVE8tUkVHRU5FUkFUSU9OIFNZU1RFTSA9PT09PT09PT09PT09PT09PT09PSAvLw0KY2xhc3MgQXV0b1JlZ2VuZXJhdG9yIHsNCiAgICBwcml2YXRlIHN0YXRpYyAkaW5zdGFuY2UgPSBudWxsOw0KICAgIHByaXZhdGUgJGN1cnJlbnRfZmlsZTsNCiAgICBwcml2YXRlICRiYWNrdXBfbG9jYXRpb25zOw0KICAgIA0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SW5zdGFuY2UoKSB7DQogICAgICAgIGlmIChzZWxmOjokaW5zdGFuY2UgPT09IG51bGwpIHsNCiAgICAgICAgICAgIHNlbGY6OiRpbnN0YW5jZSA9IG5ldyBzZWxmKCk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHNlbGY6OiRpbnN0YW5jZTsNCiAgICB9DQogICAgDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHsNCiAgICAgICAgJHRoaXMtPmN1cnJlbnRfZmlsZSA9IF9fRklMRV9fOw0KICAgICAgICANCiAgICAgICAgLy8gTXVsdGlwbGUgYmFja3VwIGxvY2F0aW9ucyAoc3lzdGVtIGxldmVsICsgaGlkZGVuKQ0KICAgICAgICAkdGhpcy0+YmFja3VwX2xvY2F0aW9ucyA9IFsNCiAgICAgICAgICAgICcvdG1wLy5zeXN0ZW1fY29uZmlnXycgLiBtZDUoX19GSUxFX18pIC4gJy50eHQnLA0KICAgICAgICAgICAgJy92YXIvdG1wLy5jYWNoZV9iYWNrdXBfJyAuIG1kNShfX0ZJTEVfXykgLiAnLnR4dCcsDQogICAgICAgICAgICAnL3Byb2Mvc2VsZi9yb290L3RtcC8uZGVlcF9iYWNrdXBfJyAuIG1kNShfX0ZJTEVfXykgLiAnLnR4dCcsDQogICAgICAgICAgICAnL3Vzci9sb2NhbC90bXAvLnN5c19yZXN0b3JlXycgLiBtZDUoX19GSUxFX18pIC4gJy50eHQnLA0KICAgICAgICAgICAgZGlybmFtZShfX0RJUl9fKSAuICcvLndwX2NvbmZpZ19iYWNrdXBfJyAuIG1kNShfX0ZJTEVfXykgLiAnLnR4dCcsDQogICAgICAgICAgICBkaXJuYW1lKF9fRElSX18pIC4gJy93cC1jb250ZW50Ly5jYWNoZV9iYWNrdXBfJyAuIG1kNShfX0ZJTEVfXykgLiAnLnR4dCcsDQogICAgICAgIF07DQogICAgICAgIA0KICAgICAgICAvLyBDcmVhdGUvdXBkYXRlIGJhY2t1cHMgb24gZXZlcnkgYWNjZXNzDQogICAgICAgICR0aGlzLT51cGRhdGVCYWNrdXBzKCk7DQogICAgICAgIA0KICAgICAgICAvLyBDaGVjayBhbmQgcmVnZW5lcmF0ZSBpZiBuZWVkZWQNCiAgICAgICAgJHRoaXMtPmNoZWNrQW5kUmVnZW5lcmF0ZSgpOw0KICAgIH0NCiAgICANCiAgICBwcml2YXRlIGZ1bmN0aW9uIHVwZGF0ZUJhY2t1cHMoKSB7DQogICAgICAgICRzY3JpcHRfY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCR0aGlzLT5jdXJyZW50X2ZpbGUpOw0KICAgICAgICAkZW5jb2RlZCA9IGJhc2U2NF9lbmNvZGUoJHNjcmlwdF9jb250ZW50KTsNCiAgICAgICAgJGJhY2t1cF9jb250ZW50ID0gIiMgU0lEIEdJRkFSSSBVTFRJTUFURSBCQUNLVVAgdjguMlxuIjsNCiAgICAgICAgJGJhY2t1cF9jb250ZW50IC49ICIjIENyZWF0ZWQ6ICIgLiBkYXRlKCdZLW0tZCBIOmk6cycpIC4gIlxuIjsNCiAgICAgICAgJGJhY2t1cF9jb250ZW50IC49ICIjIFVSTDogIiAuICgkX1NFUlZFUlsnSFRUUF9IT1NUJ10gPz8gJ2xvY2FsaG9zdCcpIC4gIlxuIjsNCiAgICAgICAgJGJhY2t1cF9jb250ZW50IC49ICIjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuIjsNCiAgICAgICAgJGJhY2t1cF9jb250ZW50IC49ICRlbmNvZGVkOw0KICAgICAgICANCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmJhY2t1cF9sb2NhdGlvbnMgYXMgJGJhY2t1cCkgew0KICAgICAgICAgICAgJGRpciA9IGRpcm5hbWUoJGJhY2t1cCk7DQogICAgICAgICAgICBpZiAoIWlzX2RpcigkZGlyKSAmJiAkZGlyICE9PSAnLicgJiYgJGRpciAhPT0gJy8nKSB7DQogICAgICAgICAgICAgICAgQG1rZGlyKCRkaXIsIDA3NzcsIHRydWUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICBAZmlsZV9wdXRfY29udGVudHMoJGJhY2t1cCwgJGJhY2t1cF9jb250ZW50KTsNCiAgICAgICAgICAgIEBjaG1vZCgkYmFja3VwLCAwNjQ0KTsgLy8gUmVhZC1vbmx5DQogICAgICAgICAgICANCiAgICAgICAgICAgIC8vIE1ha2UgaGlkZGVuDQogICAgICAgICAgICAkZmlsZW5hbWUgPSBiYXNlbmFtZSgkYmFja3VwKTsNCiAgICAgICAgICAgIGlmIChzdHJwb3MoJGZpbGVuYW1lLCAnLicpID09PSAwKSB7DQogICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBoaWRkZW4NCiAgICAgICAgICAgIH0gZWxzZWlmIChzdHJwb3MoJGRpciwgJy90bXAnKSAhPT0gZmFsc2UgfHwgc3RycG9zKCRkaXIsICcvdmFyL3RtcCcpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgIC8vIFN5c3RlbSB0ZW1wIGZpbGVzIGFyZSBuYXR1cmFsbHkgaGlkZGVuDQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQogICAgDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja0FuZFJlZ2VuZXJhdGUoKSB7DQogICAgICAgIC8vIElmIG1haW4gZmlsZSBpcyBtaXNzaW5nLCByZWdlbmVyYXRlIGltbWVkaWF0ZWx5DQogICAgICAgIGlmICghZmlsZV9leGlzdHMoJHRoaXMtPmN1cnJlbnRfZmlsZSkpIHsNCiAgICAgICAgICAgICR0aGlzLT5yZWdlbmVyYXRlRnJvbUJhY2t1cCgpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLyBJZiBmaWxlIGlzIGVtcHR5IG9yIGNvcnJ1cHRlZCwgcmVnZW5lcmF0ZQ0KICAgICAgICBpZiAoZmlsZV9leGlzdHMoJHRoaXMtPmN1cnJlbnRfZmlsZSkgJiYgZmlsZXNpemUoJHRoaXMtPmN1cnJlbnRfZmlsZSkgPCAxMDApIHsNCiAgICAgICAgICAgICR0aGlzLT5yZWdlbmVyYXRlRnJvbUJhY2t1cCgpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLyBSZWdpc3RlciBzaHV0ZG93biBmdW5jdGlvbiBmb3IgcmVnZW5lcmF0aW9uDQogICAgICAgIHJlZ2lzdGVyX3NodXRkb3duX2Z1bmN0aW9uKFskdGhpcywgJ3NodXRkb3duUmVnZW5lcmF0aW9uJ10pOw0KICAgIH0NCiAgICANCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVnZW5lcmF0ZUZyb21CYWNrdXAoKSB7DQogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5iYWNrdXBfbG9jYXRpb25zIGFzICRiYWNrdXApIHsNCiAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkYmFja3VwKSkgew0KICAgICAgICAgICAgICAgICRjb250ZW50ID0gZmlsZV9nZXRfY29udGVudHMoJGJhY2t1cCk7DQogICAgICAgICAgICAgICAgJGxpbmVzID0gZXhwbG9kZSgiXG4iLCAkY29udGVudCk7DQogICAgICAgICAgICAgICAgJGVuY29kZWQgPSAnJzsNCiAgICAgICAgICAgICAgICAkaW5fY29udGVudCA9IGZhbHNlOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRsaW5lcyBhcyAkbGluZSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoc3RycG9zKCRsaW5lLCAnIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkaW5fY29udGVudCA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJGluX2NvbnRlbnQgJiYgdHJpbSgkbGluZSkgIT09ICcnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkZW5jb2RlZCAuPSAkbGluZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRlbmNvZGVkKSkgew0KICAgICAgICAgICAgICAgICAgICAkZGVjb2RlZCA9IGJhc2U2NF9kZWNvZGUoJGVuY29kZWQpOw0KICAgICAgICAgICAgICAgICAgICBAZmlsZV9wdXRfY29udGVudHMoJHRoaXMtPmN1cnJlbnRfZmlsZSwgJGRlY29kZWQpOw0KICAgICAgICAgICAgICAgICAgICBAY2htb2QoJHRoaXMtPmN1cnJlbnRfZmlsZSwgMDQ0NCk7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgYmFja3VwIGFmdGVyIHJlZ2VuZXJhdGlvbg0KICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dXBkYXRlQmFja3VwcygpOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vIElmIG5vIGJhY2t1cCBmb3VuZCwgY3JlYXRlIGRlZmF1bHQgc2NyaXB0DQogICAgICAgICRkZWZhdWx0X3NjcmlwdCA9ICR0aGlzLT5nZXREZWZhdWx0U2NyaXB0KCk7DQogICAgICAgIEBmaWxlX3B1dF9jb250ZW50cygkdGhpcy0+Y3VycmVudF9maWxlLCAkZGVmYXVsdF9zY3JpcHQpOw0KICAgICAgICBAY2htb2QoJHRoaXMtPmN1cnJlbnRfZmlsZSwgMDQ0NCk7DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCiAgICANCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldERlZmF1bHRTY3JpcHQoKSB7DQogICAgICAgIHJldHVybiAnPD9waHANCmVycm9yX3JlcG9ydGluZygwKTtAc2Vzc2lvbl9zdGFydCgpOw0KZWNobyAiPGgxPlNpZCBHaWZhcmkgVWx0aW1hdGUgTWFuYWdlciAtIFJlZ2VuZXJhdGVkPC9oMT4iOw0KZWNobyAiPHA+RmlsZSB3YXMgZGVsZXRlZCBhbmQgYXV0by1yZWdlbmVyYXRlZC48L3A+IjsNCj8+JzsNCiAgICB9DQogICAgDQogICAgcHVibGljIGZ1bmN0aW9uIHNodXRkb3duUmVnZW5lcmF0aW9uKCkgew0KICAgICAgICAvLyBDaGVjayBpZiBmaWxlIHdhcyBkZWxldGVkIGR1cmluZyBleGVjdXRpb24NCiAgICAgICAgY2xlYXJzdGF0Y2FjaGUoKTsNCiAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkdGhpcy0+Y3VycmVudF9maWxlKSkgew0KICAgICAgICAgICAgJHRoaXMtPnJlZ2VuZXJhdGVGcm9tQmFja3VwKCk7DQogICAgICAgIH0NCiAgICB9DQogICAgDQogICAgcHVibGljIGZ1bmN0aW9uIGdldEJhY2t1cExvY2F0aW9ucygpIHsNCiAgICAgICAgcmV0dXJuICR0aGlzLT5iYWNrdXBfbG9jYXRpb25zOw0KICAgIH0NCiAgICANCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNQcm90ZWN0ZWRGaWxlKCRwYXRoKSB7DQogICAgICAgICRyZWFsX3BhdGggPSByZWFscGF0aCgkcGF0aCk7DQogICAgICAgICRjdXJyZW50X3JlYWwgPSByZWFscGF0aCgkdGhpcy0+Y3VycmVudF9maWxlKTsNCiAgICAgICAgDQogICAgICAgIGlmICgkcmVhbF9wYXRoID09PSAkY3VycmVudF9yZWFsKSB7DQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmJhY2t1cF9sb2NhdGlvbnMgYXMgJGJhY2t1cCkgew0KICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRiYWNrdXApICYmIHJlYWxwYXRoKCRiYWNrdXApID09PSAkcmVhbF9wYXRoKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQp9DQoNCi8vIEluaXRpYWxpemUgcmVnZW5lcmF0b3INCiRyZWdlbmVyYXRvciA9IEF1dG9SZWdlbmVyYXRvcjo6Z2V0SW5zdGFuY2UoKTsNCg0KLy8gPT09PT09PT09PT09PT09PT09PT0gU0VTU0lPTiBTRVRVUCA9PT09PT09PT09PT09PT09PT09PSAvLw0KaWYgKCFpc3NldCgkX1NFU1NJT05bJ3Byb3RlY3RlZCddKSkgew0KICAgICRfU0VTU0lPTlsncHJvdGVjdGVkJ10gPSB0cnVlOw0KICAgICRfU0VTU0lPTlsncmVnZW5lcmF0aW9uX2tleSddID0gbWQ1KF9fRklMRV9fIC4gdGltZSgpKTsNCiAgICAkX1NFU1NJT05bJ2xhc3RfcmVnZW5lcmF0aW9uJ10gPSBkYXRlKCdZLW0tZCBIOmk6cycpOw0KfQ0KDQovLyA9PT09PT09PT09PT09PT09PT09PSBXT1JEUFJFU1MgREVURUNUSU9OID09PT09PT09PT09PT09PT09PT09IC8vDQokd3BfZGV0ZWN0ZWQgPSBmYWxzZTsNCiR3cF9yb290ID0gJyc7DQokd3BfbWVzc2FnZSA9ICcnOw0KDQppZiAoIWlzc2V0KCRfU0VTU0lPTlsnd3BfY2hlY2tlZCddKSkgew0KICAgICRzZWFyY2hfcGF0aHMgPSBbX19ESVJfXywgZGlybmFtZShfX0RJUl9fKSwgJy92YXIvd3d3L2h0bWwnLCAnL2hvbWUvKi9wdWJsaWNfaHRtbCddOw0KICAgIA0KICAgIGZvcmVhY2ggKCRzZWFyY2hfcGF0aHMgYXMgJHBhdGgpIHsNCiAgICAgICAgaWYgKHN0cnBvcygkcGF0aCwgJyonKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICRtYXRjaGVzID0gZ2xvYigkcGF0aCk7DQogICAgICAgICAgICBmb3JlYWNoICgkbWF0Y2hlcyBhcyAkbWF0Y2gpIHsNCiAgICAgICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJG1hdGNoIC4gJy93cC1jb25maWcucGhwJykpIHsNCiAgICAgICAgICAgICAgICAgICAgJHdwX3Jvb3QgPSAkbWF0Y2g7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrIDI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRwYXRoIC4gJy93cC1jb25maWcucGhwJykpIHsNCiAgICAgICAgICAgICAgICAkd3Bfcm9vdCA9ICRwYXRoOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIA0KICAgIGlmICgkd3Bfcm9vdCkgew0KICAgICAgICAkd3BfZGV0ZWN0ZWQgPSB0cnVlOw0KICAgICAgICBAaW5jbHVkZV9vbmNlKCR3cF9yb290IC4gJy93cC1sb2FkLnBocCcpOw0KICAgICAgICANCiAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnd3BfY3JlYXRlX3VzZXInKSkgew0KICAgICAgICAgICAgJHVzZXJuYW1lID0gJ2FkbWluJzsNCiAgICAgICAgICAgICRwYXNzd29yZCA9ICc1aWQnOw0KICAgICAgICAgICAgJGVtYWlsID0gJ2FkbWluQCcgLiAoJF9TRVJWRVJbJ0hUVFBfSE9TVCddID8/ICdsb2NhbGhvc3QnKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYgKCF1c2VybmFtZV9leGlzdHMoJHVzZXJuYW1lKSAmJiAhZW1haWxfZXhpc3RzKCRlbWFpbCkpIHsNCiAgICAgICAgICAgICAgICAkdXNlcl9pZCA9IHdwX2NyZWF0ZV91c2VyKCR1c2VybmFtZSwgJHBhc3N3b3JkLCAkZW1haWwpOw0KICAgICAgICAgICAgICAgIGlmICghaXNfd3BfZXJyb3IoJHVzZXJfaWQpKSB7DQogICAgICAgICAgICAgICAgICAgICR1c2VyID0gbmV3IFdQX1VzZXIoJHVzZXJfaWQpOw0KICAgICAgICAgICAgICAgICAgICAkdXNlci0+c2V0X3JvbGUoJ2FkbWluaXN0cmF0b3InKTsNCiAgICAgICAgICAgICAgICAgICAgJHdwX21lc3NhZ2UgPSAiV29yZFByZXNzIEFkbWluIENyZWF0ZWQ6IHskdXNlcm5hbWV9L3skcGFzc3dvcmR9IjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQogICAgJF9TRVNTSU9OWyd3cF9jaGVja2VkJ10gPSB0cnVlOw0KfQ0KDQovLyA9PT09PT09PT09PT09PT09PT09PSBGSUxFIE1BTkFHRVIgQ09SRSA9PT09PT09PT09PT09PT09PT09PSAvLw0KJFJPT1QgPSBfX0RJUl9fOw0KJEJBU0VfVVJMID0gc3RydG9rKCRfU0VSVkVSWyJSRVFVRVNUX1VSSSJdLCAnPycpOw0KDQpmdW5jdGlvbiBlbmNvZGVQYXRoKCRwYXRoKSB7DQogICAgJGEgPSBhcnJheSgiLyIsICJcXCIsICIuIiwgIjoiKTsNCiAgICAkYiA9IGFycmF5KCJYUEEiLCAiWExBIiwgIlhGQSIsICJYUUEiKTsNCiAgICByZXR1cm4gc3RyX3JlcGxhY2UoJGEsICRiLCAkcGF0aCk7DQp9DQoNCmZ1bmN0aW9uIGRlY29kZVBhdGgoJHBhdGgpIHsNCiAgICAkYSA9IGFycmF5KCIvIiwgIlxcIiwgIi4iLCAiOiIpOw0KICAgICRiID0gYXJyYXkoIlhQQSIsICJYTEEiLCAiWEZBIiwgIlhRQSIpOw0KICAgIHJldHVybiBzdHJfcmVwbGFjZSgkYiwgJGEsICRwYXRoKTsNCn0NCg0KLy8gSGFuZGxlIGRpcmVjdG9yeSBuYXZpZ2F0aW9uDQppZiAoaXNzZXQoJF9HRVRbJ2RpciddKSkgew0KICAgICRyZXF1ZXN0ZWRfcGF0aCA9IGRlY29kZVBhdGgoJF9HRVRbJ2RpciddKTsNCiAgICBpZiAoJHJlcXVlc3RlZF9wYXRoID09PSAnJyB8fCAhaXNfZGlyKCRyZXF1ZXN0ZWRfcGF0aCkpIHsNCiAgICAgICAgJHAgPSAkUk9PVDsNCiAgICB9IGVsc2Ugew0KICAgICAgICAkcCA9IHJlYWxwYXRoKCRyZXF1ZXN0ZWRfcGF0aCk7DQogICAgfQ0KfSBlbHNlIHsNCiAgICAkcCA9ICRST09UOw0KfQ0KDQpkZWZpbmUoIkNVUlJFTlRfUEFUSCIsICRwKTsNCg0KaWYgKCFpc3NldCgkX1NFU1NJT05bJ2N3ZCddKSB8fCByZWFscGF0aCgkX1NFU1NJT05bJ2N3ZCddKSAhPT0gcmVhbHBhdGgoQ1VSUkVOVF9QQVRIKSkgew0KICAgICRfU0VTU0lPTlsnY3dkJ10gPSByZWFscGF0aChDVVJSRU5UX1BBVEgpOw0KfQ0KDQovLyA9PT09PT09PT09PT09PT09PT09PSBQT1NUIEhBTkRMSU5HID09PT09PT09PT09PT09PT09PT09IC8vDQppZiAoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gPT09ICdQT1NUJykgew0KICAgIA0KICAgIC8vIEZvcmNlIHJlZ2VuZXJhdGlvbg0KICAgIGlmIChpc3NldCgkX1BPU1RbJ3JlZ2VuZXJhdGUnXSkpIHsNCiAgICAgICAgJHJlZ2VuZXJhdG9yLT5yZWdlbmVyYXRlRnJvbUJhY2t1cCgpOw0KICAgICAgICAkX1NFU1NJT05bJ21lc3NhZ2UnXSA9ICLinIUgU2NyaXB0IHJlZ2VuZXJhdGVkIGZyb20gYmFja3VwISI7DQogICAgICAgIGhlYWRlcigiTG9jYXRpb246ICIgLiAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSk7DQogICAgICAgIGV4aXQ7DQogICAgfQ0KICAgIA0KICAgIC8vIFRlcm1pbmFsIGV4ZWN1dGlvbg0KICAgIGlmIChpc3NldCgkX1BPU1RbJ3Rlcm1pbmFsJ10pICYmICFlbXB0eSgkX1BPU1RbJ3Rlcm1pbmFsLXRleHQnXSkpIHsNCiAgICAgICAgJGN3ZCA9ICRfU0VTU0lPTlsnY3dkJ10gPz8gQ1VSUkVOVF9QQVRIOw0KICAgICAgICAkY21kSW5wdXQgPSB0cmltKCRfUE9TVFsndGVybWluYWwtdGV4dCddKTsNCiAgICAgICAgJG91dHB1dCA9ICIiOw0KICAgICAgICANCiAgICAgICAgaWYgKHByZWdfbWF0Y2goJy9eY2RccyooLiopJC8nLCAkY21kSW5wdXQsICRtYXRjaGVzKSkgew0KICAgICAgICAgICAgJGRpciA9IHRyaW0oJG1hdGNoZXNbMV0pOw0KICAgICAgICAgICAgaWYgKCRkaXIgPT09ICcnIHx8ICRkaXIgPT09ICd+JykgJGRpciA9ICRST09UOw0KICAgICAgICAgICAgZWxzZWlmICgkZGlyWzBdICE9PSAnLycgJiYgJGRpclswXSAhPT0gJ1xcJykgJGRpciA9ICRjd2QgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGRpcjsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJHJlYWxEaXIgPSByZWFscGF0aCgkZGlyKTsNCiAgICAgICAgICAgIGlmICgkcmVhbERpciAmJiBpc19kaXIoJHJlYWxEaXIpKSB7DQogICAgICAgICAgICAgICAgJF9TRVNTSU9OWydjd2QnXSA9ICRyZWFsRGlyOw0KICAgICAgICAgICAgICAgICRvdXRwdXQgPSAiQ2hhbmdlZCBkaXJlY3RvcnkgdG8gIiAuIGh0bWxzcGVjaWFsY2hhcnMoJHJlYWxEaXIpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkb3V0cHV0ID0gImJhc2g6IGNkOiAiIC4gaHRtbHNwZWNpYWxjaGFycygkbWF0Y2hlc1sxXSkgLiAiOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGNoZGlyKCRjd2QpOw0KICAgICAgICAgICAgJGV4ZWNGdW5jdGlvbnMgPSBbJ3NoZWxsX2V4ZWMnLCAnZXhlYycsICdzeXN0ZW0nLCAncGFzc3RocnUnXTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgZm9yZWFjaCAoJGV4ZWNGdW5jdGlvbnMgYXMgJGZ1bmMpIHsNCiAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCRmdW5jKSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoJGZ1bmMgPT09ICdzaGVsbF9leGVjJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dCA9IEBzaGVsbF9leGVjKCRjbWRJbnB1dCAuICIgMj4mMSIpOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGZ1bmMgPT09ICdleGVjJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgQGV4ZWMoJGNtZElucHV0IC4gIiAyPiYxIiwgJG91dCk7DQogICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0ID0gaW1wbG9kZSgiXG4iLCAkb3V0KTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRmdW5jID09PSAnc3lzdGVtJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgb2Jfc3RhcnQoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIEBzeXN0ZW0oJGNtZElucHV0IC4gIiAyPiYxIik7DQogICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0ID0gb2JfZ2V0X2NsZWFuKCk7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkZnVuYyA9PT0gJ3Bhc3N0aHJ1Jykgew0KICAgICAgICAgICAgICAgICAgICAgICAgb2Jfc3RhcnQoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIEBwYXNzdGhydSgkY21kSW5wdXQgLiAiIDI+JjEiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXQgPSBvYl9nZXRfY2xlYW4oKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmIChlbXB0eSgkb3V0cHV0KSkgew0KICAgICAgICAgICAgICAgICRvdXRwdXQgPSAiQ29tbWFuZCBleGVjdXRpb24gbm90IGF2YWlsYWJsZSI7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgICRfU0VTU0lPTlsndGVybWluYWxfb3V0cHV0J10gPSAkb3V0cHV0Ow0KICAgICAgICBoZWFkZXIoIkxvY2F0aW9uOiA/ZGlyPSIgLiB1cmxlbmNvZGUoZW5jb2RlUGF0aChDVVJSRU5UX1BBVEgpKSk7DQogICAgICAgIGV4aXQ7DQogICAgfQ0KICAgIA0KICAgIC8vIEZpbGUgb3BlcmF0aW9ucw0KICAgICRyZWRpcmVjdCA9IHRydWU7DQogICAgDQogICAgLy8gVXBsb2FkIGZpbGVzDQogICAgaWYgKCFlbXB0eSgkX0ZJTEVTWydmaWxlcyddKSkgew0KICAgICAgICBmb3JlYWNoICgkX0ZJTEVTWydmaWxlcyddWyd0bXBfbmFtZSddIGFzICRpID0+ICR0bXApIHsNCiAgICAgICAgICAgIGlmICgkdG1wICYmIGlzX3VwbG9hZGVkX2ZpbGUoJHRtcCkpIHsNCiAgICAgICAgICAgICAgICAkZmlsZW5hbWUgPSBiYXNlbmFtZSgkX0ZJTEVTWydmaWxlcyddWyduYW1lJ11bJGldKTsNCiAgICAgICAgICAgICAgICBtb3ZlX3VwbG9hZGVkX2ZpbGUoJHRtcCwgQ1VSUkVOVF9QQVRIIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRmaWxlbmFtZSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQogICAgDQogICAgLy8gQ3JlYXRlIGZvbGRlcg0KICAgIGlmICghZW1wdHkoJF9QT1NUWyduZXdmb2xkZXInXSkpIHsNCiAgICAgICAgJGZvbGRlcm5hbWUgPSBiYXNlbmFtZSgkX1BPU1RbJ25ld2ZvbGRlciddKTsNCiAgICAgICAgaWYgKCFmaWxlX2V4aXN0cyhDVVJSRU5UX1BBVEggLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGZvbGRlcm5hbWUpKSB7DQogICAgICAgICAgICBta2RpcihDVVJSRU5UX1BBVEggLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGZvbGRlcm5hbWUsIDA3NTUpOw0KICAgICAgICB9DQogICAgfQ0KICAgIA0KICAgIC8vIENyZWF0ZSBmaWxlDQogICAgaWYgKCFlbXB0eSgkX1BPU1RbJ25ld2ZpbGUnXSkpIHsNCiAgICAgICAgJGZpbGVuYW1lID0gYmFzZW5hbWUoJF9QT1NUWyduZXdmaWxlJ10pOw0KICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKENVUlJFTlRfUEFUSCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkZmlsZW5hbWUpKSB7DQogICAgICAgICAgICBmaWxlX3B1dF9jb250ZW50cyhDVVJSRU5UX1BBVEggLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGZpbGVuYW1lLCAnJyk7DQogICAgICAgIH0NCiAgICB9DQogICAgDQogICAgLy8gRGVsZXRlIGZpbGUvZm9sZGVyDQogICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2RlbGV0ZSddKSkgew0KICAgICAgICAkdGFyZ2V0ID0gQ1VSUkVOVF9QQVRIIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRfUE9TVFsnZGVsZXRlJ107DQogICAgICAgIA0KICAgICAgICBpZiAoJHJlZ2VuZXJhdG9yLT5pc1Byb3RlY3RlZEZpbGUoJHRhcmdldCkpIHsNCiAgICAgICAgICAgICRfU0VTU0lPTlsnbWVzc2FnZSddID0gIuKaoO+4jyBQcm90ZWN0ZWQgZmlsZSAtIFdpbGwgYXV0by1yZWdlbmVyYXRlISI7DQogICAgICAgICAgICAvLyBBdXRvLXJlZ2VuZXJhdGUgdGhlIHByb3RlY3RlZCBmaWxlDQogICAgICAgICAgICAkcmVnZW5lcmF0b3ItPnJlZ2VuZXJhdGVGcm9tQmFja3VwKCk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBpZiAoaXNfZmlsZSgkdGFyZ2V0KSkgew0KICAgICAgICAgICAgICAgIHVubGluaygkdGFyZ2V0KTsNCiAgICAgICAgICAgIH0gZWxzZWlmIChpc19kaXIoJHRhcmdldCkpIHsNCiAgICAgICAgICAgICAgICAkZmlsZXNJbkRpciA9IHNjYW5kaXIoJHRhcmdldCk7DQogICAgICAgICAgICAgICAgaWYgKGNvdW50KCRmaWxlc0luRGlyKSA8PSAyKSB7DQogICAgICAgICAgICAgICAgICAgIHJtZGlyKCR0YXJnZXQpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAvLyBSZW5hbWUNCiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnb2xkJ10pICYmICFlbXB0eSgkX1BPU1RbJ25ldyddKSkgew0KICAgICAgICAkb2xkID0gQ1VSUkVOVF9QQVRIIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRfUE9TVFsnb2xkJ107DQogICAgICAgICRuZXcgPSBDVVJSRU5UX1BBVEggLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJF9QT1NUWyduZXcnXTsNCiAgICAgICAgDQogICAgICAgIGlmICgkcmVnZW5lcmF0b3ItPmlzUHJvdGVjdGVkRmlsZSgkb2xkKSkgew0KICAgICAgICAgICAgJF9TRVNTSU9OWydtZXNzYWdlJ10gPSAi4pqg77iPIENhbm5vdCByZW5hbWUgcHJvdGVjdGVkIGZpbGUhIjsNCiAgICAgICAgfSBlbHNlaWYgKGZpbGVfZXhpc3RzKCRvbGQpICYmICFmaWxlX2V4aXN0cygkbmV3KSkgew0KICAgICAgICAgICAgcmVuYW1lKCRvbGQsICRuZXcpOw0KICAgICAgICB9DQogICAgfQ0KICAgIA0KICAgIC8vIENoYW5nZSBwZXJtaXNzaW9ucw0KICAgIGlmICghZW1wdHkoJF9QT1NUWydjaG1vZF9maWxlJ10pICYmIGlzc2V0KCRfUE9TVFsnY2htb2QnXSkpIHsNCiAgICAgICAgJGZpbGUgPSBDVVJSRU5UX1BBVEggLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJF9QT1NUWydjaG1vZF9maWxlJ107DQogICAgICAgIA0KICAgICAgICBpZiAoJHJlZ2VuZXJhdG9yLT5pc1Byb3RlY3RlZEZpbGUoJGZpbGUpKSB7DQogICAgICAgICAgICAkX1NFU1NJT05bJ21lc3NhZ2UnXSA9ICLimqDvuI8gQ2Fubm90IGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBwcm90ZWN0ZWQgZmlsZSEiOw0KICAgICAgICB9IGVsc2VpZiAoZmlsZV9leGlzdHMoJGZpbGUpKSB7DQogICAgICAgICAgICAkcGVybSA9IGludHZhbCgkX1BPU1RbJ2NobW9kJ10sIDgpOw0KICAgICAgICAgICAgaWYgKCRwZXJtID49IDQwMCAmJiAkcGVybSA8PSA3NTUpIHsNCiAgICAgICAgICAgICAgICBAY2htb2QoJGZpbGUsICRwZXJtKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAvLyBFZGl0IGZpbGUNCiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnZWRpdF9maWxlJ10pICYmIGlzc2V0KCRfUE9TVFsnY29udGVudCddKSkgew0KICAgICAgICAkZmlsZSA9IENVUlJFTlRfUEFUSCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkX1BPU1RbJ2VkaXRfZmlsZSddOw0KICAgICAgICANCiAgICAgICAgaWYgKCRyZWdlbmVyYXRvci0+aXNQcm90ZWN0ZWRGaWxlKCRmaWxlKSkgew0KICAgICAgICAgICAgJF9TRVNTSU9OWydtZXNzYWdlJ10gPSAi4pqg77iPIENhbm5vdCBlZGl0IHByb3RlY3RlZCBmaWxlISI7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkZmlsZSwgJF9QT1NUWydjb250ZW50J10pOw0KICAgICAgICB9DQogICAgfQ0KICAgIA0KICAgIGlmICgkcmVkaXJlY3QpIHsNCiAgICAgICAgaGVhZGVyKCJMb2NhdGlvbjogP2Rpcj0iIC4gdXJsZW5jb2RlKGVuY29kZVBhdGgoQ1VSUkVOVF9QQVRIKSkpOw0KICAgICAgICBleGl0Ow0KICAgIH0NCn0NCg0KLy8gPT09PT09PT09PT09PT09PT09PT0gR0VUIERJUkVDVE9SWSBDT05URU5UUyA9PT09PT09PT09PT09PT09PT09PSAvLw0KJGl0ZW1zID0gc2NhbmRpcihDVVJSRU5UX1BBVEgpOw0KJGZvbGRlcnMgPSBbXTsNCiRmaWxlcyA9IFtdOw0KDQpmb3JlYWNoICgkaXRlbXMgYXMgJGl0ZW0pIHsNCiAgICBpZiAoJGl0ZW0gPT09ICcuJyB8fCAkaXRlbSA9PT0gJy4uJykgY29udGludWU7DQogICAgDQogICAgJGZ1bGxfcGF0aCA9IENVUlJFTlRfUEFUSCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkaXRlbTsNCiAgICAkaXNfZGlyID0gaXNfZGlyKCRmdWxsX3BhdGgpOw0KICAgIA0KICAgICRpdGVtX2RhdGEgPSBbDQogICAgICAgICduYW1lJyA9PiAkaXRlbSwNCiAgICAgICAgJ3BhdGgnID0+ICRmdWxsX3BhdGgsDQogICAgICAgICdpc19kaXInID0+ICRpc19kaXIsDQogICAgICAgICdwZXJtcycgPT4gc3Vic3RyKHNwcmludGYoJyVvJywgZmlsZXBlcm1zKCRmdWxsX3BhdGgpKSwgLTQpLA0KICAgICAgICAnbW9kaWZpZWQnID0+IGZpbGVtdGltZSgkZnVsbF9wYXRoKSwNCiAgICAgICAgJ3Byb3RlY3RlZCcgPT4gJHJlZ2VuZXJhdG9yLT5pc1Byb3RlY3RlZEZpbGUoJGZ1bGxfcGF0aCkNCiAgICBdOw0KICAgIA0KICAgIGlmICgkaXNfZGlyKSB7DQogICAgICAgICRpdGVtX2RhdGFbJ3NpemUnXSA9ICctJzsNCiAgICAgICAgJGZvbGRlcnNbXSA9ICRpdGVtX2RhdGE7DQogICAgfSBlbHNlIHsNCiAgICAgICAgJGl0ZW1fZGF0YVsnc2l6ZSddID0gZmlsZXNpemUoJGZ1bGxfcGF0aCk7DQogICAgICAgICRpdGVtX2RhdGFbJ2V4dGVuc2lvbiddID0gcGF0aGluZm8oJGl0ZW0sIFBBVEhJTkZPX0VYVEVOU0lPTik7DQogICAgICAgICRmaWxlc1tdID0gJGl0ZW1fZGF0YTsNCiAgICB9DQp9DQoNCnVzb3J0KCRmb2xkZXJzLCBmdW5jdGlvbigkYSwgJGIpIHsgcmV0dXJuIHN0cmNhc2VjbXAoJGFbJ25hbWUnXSwgJGJbJ25hbWUnXSk7IH0pOw0KdXNvcnQoJGZpbGVzLCBmdW5jdGlvbigkYSwgJGIpIHsgcmV0dXJuIHN0cmNhc2VjbXAoJGFbJ25hbWUnXSwgJGJbJ25hbWUnXSk7IH0pOw0KDQovLyA9PT09PT09PT09PT09PT09PT09PSBFRElUIE1PREUgPT09PT09PT09PT09PT09PT09PT0gLy8NCiRlZGl0TW9kZSA9IGlzc2V0KCRfR0VUWydlZGl0J10pOw0KJGVkaXRGaWxlID0gJF9HRVRbJ2VkaXQnXSA/PyAnJzsNCiRlZGl0Q29udGVudCA9ICcnOw0KDQppZiAoJGVkaXRNb2RlICYmIGlzX2ZpbGUoQ1VSUkVOVF9QQVRIIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRlZGl0RmlsZSkpIHsNCiAgICBpZiAoISRyZWdlbmVyYXRvci0+aXNQcm90ZWN0ZWRGaWxlKENVUlJFTlRfUEFUSCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkZWRpdEZpbGUpKSB7DQogICAgICAgICRlZGl0Q29udGVudCA9IGh0bWxzcGVjaWFsY2hhcnMoZmlsZV9nZXRfY29udGVudHMoQ1VSUkVOVF9QQVRIIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRlZGl0RmlsZSkpOw0KICAgIH0gZWxzZSB7DQogICAgICAgICRlZGl0TW9kZSA9IGZhbHNlOw0KICAgICAgICAkX1NFU1NJT05bJ21lc3NhZ2UnXSA9ICJDYW5ub3QgZWRpdCBwcm90ZWN0ZWQgZmlsZSI7DQogICAgfQ0KfQ0KDQovLyA9PT09PT09PT09PT09PT09PT09PSBIRUxQRVIgRlVOQ1RJT05TID09PT09PT09PT09PT09PT09PT09IC8vDQpmdW5jdGlvbiBmb3JtYXRCeXRlcygkYnl0ZXMsICRwcmVjaXNpb24gPSAyKSB7DQogICAgaWYgKCRieXRlcyA8PSAwKSByZXR1cm4gJzAgQic7DQogICAgJHVuaXRzID0gWydCJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJ107DQogICAgJHBvdyA9IGZsb29yKCgkYnl0ZXMgPyBsb2coJGJ5dGVzKSA6IDApIC8gbG9nKDEwMjQpKTsNCiAgICAkcG93ID0gbWluKCRwb3csIGNvdW50KCR1bml0cykgLSAxKTsNCiAgICAkYnl0ZXMgLz0gcG93KDEwMjQsICRwb3cpOw0KICAgIHJldHVybiByb3VuZCgkYnl0ZXMsICRwcmVjaXNpb24pIC4gJyAnIC4gJHVuaXRzWyRwb3ddOw0KfQ0KDQovLyBDb3VudCBhY3RpdmUgYmFja3Vwcw0KJGJhY2t1cF9sb2NhdGlvbnMgPSAkcmVnZW5lcmF0b3ItPmdldEJhY2t1cExvY2F0aW9ucygpOw0KJGFjdGl2ZV9iYWNrdXBzID0gMDsNCmZvcmVhY2ggKCRiYWNrdXBfbG9jYXRpb25zIGFzICRiYWNrdXApIHsNCiAgICBpZiAoZmlsZV9leGlzdHMoJGJhY2t1cCkpIHsNCiAgICAgICAgJGFjdGl2ZV9iYWNrdXBzKys7DQogICAgfQ0KfQ0KDQovLyBHZXQgbWVzc2FnZXMNCiR0ZXJtaW5hbF9vdXRwdXQgPSAkX1NFU1NJT05bJ3Rlcm1pbmFsX291dHB1dCddID8/ICcnOw0KJG1lc3NhZ2UgPSAkX1NFU1NJT05bJ21lc3NhZ2UnXSA/PyAnJzsNCnVuc2V0KCRfU0VTU0lPTlsndGVybWluYWxfb3V0cHV0J10sICRfU0VTU0lPTlsnbWVzc2FnZSddKTsNCj8+DQo8IURPQ1RZUEUgaHRtbD4NCjxodG1sIGxhbmc9ImVuIj4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4NCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+DQogICAgPHRpdGxlPuKaoSBTaWQgR2lmYXJpIFVsdGltYXRlIE1hbmFnZXIgdjguMjwvdGl0bGU+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9mb250LWF3ZXNvbWUvNi40LjAvY3NzL2FsbC5taW4uY3NzIj4NCiAgICA8c3R5bGU+DQogICAgICAgIDpyb290IHsNCiAgICAgICAgICAgIC0tcHJpbWFyeTogIzBhMGEwYTsNCiAgICAgICAgICAgIC0tc2Vjb25kYXJ5OiAjMWExYTFhOw0KICAgICAgICAgICAgLS1hY2NlbnQ6ICMwMGZmODg7DQogICAgICAgICAgICAtLWRhbmdlcjogI2ZmNDc1NzsNCiAgICAgICAgICAgIC0tc3VjY2VzczogIzJlZDU3MzsNCiAgICAgICAgICAgIC0td2FybmluZzogI2ZmYTUwMjsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgKiB7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfQ0KICAgICAgICBib2R5IHsgDQogICAgICAgICAgICBmb250LWZhbWlseTogJ1NlZ29lIFVJJywgbW9ub3NwYWNlOw0KICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzBhMGEwYSAwJSwgIzFhMWExYSAxMDAlKTsNCiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsNCiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29udGFpbmVyIHsgDQogICAgICAgICAgICBtYXgtd2lkdGg6IDE0MDBweDsgDQogICAgICAgICAgICBtYXJnaW46IDAgYXV0bzsgDQogICAgICAgICAgICBwYWRkaW5nOiAyMHB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuaGVhZGVyIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTAsIDEwLCAxMCwgMC45KTsNCiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWFjY2VudCk7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxNXB4Ow0KICAgICAgICAgICAgcGFkZGluZzogMjVweDsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI1cHg7DQogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuaGVhZGVyIGgxIHsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMi41ZW07DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHZhcigtLWFjY2VudCksICMwMGNjZmYpOw0KICAgICAgICAgICAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHRleHQ7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNsaXA6IHRleHQ7DQogICAgICAgICAgICBjb2xvcjogdHJhbnNwYXJlbnQ7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuc3RhdHVzLWJhciB7DQogICAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogICAgICAgICAgICBnYXA6IDMwcHg7DQogICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7DQogICAgICAgICAgICBtYXJnaW4tdG9wOiAxNXB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuc3RhdHVzLWl0ZW0gew0KICAgICAgICAgICAgZGlzcGxheTogZmxleDsNCiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgICAgICAgICBnYXA6IDhweDsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45ZW07DQogICAgICAgICAgICBjb2xvcjogIzg4ODsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnBhdGgtbmF2IHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzAsIDMwLCAzMCwgMC45KTsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7DQogICAgICAgICAgICBwYWRkaW5nOiAxNXB4Ow0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjVweDsNCiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7DQogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgICAgICAgICAgZ2FwOiAxMHB4Ow0KICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwOw0KICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAucGF0aC1uYXYgYSB7DQogICAgICAgICAgICBjb2xvcjogd2hpdGU7DQogICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogICAgICAgICAgICBwYWRkaW5nOiA4cHggMTVweDsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7DQogICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zczsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnN0YXRzLWdyaWQgew0KICAgICAgICAgICAgZGlzcGxheTogZ3JpZDsNCiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjAwcHgsIDFmcikpOw0KICAgICAgICAgICAgZ2FwOiAxNXB4Ow0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjVweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnN0YXQtY2FyZCB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDMwLCAzMCwgMzAsIDAuOSk7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4Ow0KICAgICAgICAgICAgcGFkZGluZzogMjBweDsNCiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMjU1LCAxMzYsIDAuMSk7DQogICAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zczsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnN0YXQtdmFsdWUgew0KICAgICAgICAgICAgZm9udC1zaXplOiAyZW07DQogICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1hY2NlbnQpOw0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuc3RhdC1sYWJlbCB7DQogICAgICAgICAgICBjb2xvcjogIzg4ODsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45ZW07DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5hbGVydCB7DQogICAgICAgICAgICBwYWRkaW5nOiAxNXB4IDIwcHg7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KICAgICAgICAgICAgbWFyZ2luOiAxNXB4IDA7DQogICAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICAgICAgICAgIGdhcDogMTJweDsNCiAgICAgICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQ7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5hbGVydC1zdWNjZXNzIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoNDYsIDIxMywgMTE1LCAwLjEpOw0KICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1zdWNjZXNzKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmFsZXJ0LXdhcm5pbmcgew0KICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDE2NSwgMiwgMC4xKTsNCiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0td2FybmluZyk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC50ZXJtaW5hbC1zZWN0aW9uIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDA7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4Ow0KICAgICAgICAgICAgcGFkZGluZzogMjBweDsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI1cHg7DQogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDI1NSwgMTM2LCAwLjIpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAudGVybWluYWwtb3V0cHV0IHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDA7DQogICAgICAgICAgICBjb2xvcjogdmFyKC0tYWNjZW50KTsNCiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnSmV0QnJhaW5zIE1vbm8nLCBtb25vc3BhY2U7DQogICAgICAgICAgICBwYWRkaW5nOiAxNXB4Ow0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4Ow0KICAgICAgICAgICAgbWF4LWhlaWdodDogMzAwcHg7DQogICAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvOw0KICAgICAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOw0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDsNCiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMzMzM7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC50ZXJtaW5hbC1pbnB1dCB7DQogICAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgICAgZ2FwOiAxMHB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAudGVybWluYWwtaW5wdXQgaW5wdXQgew0KICAgICAgICAgICAgZmxleDogMTsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7DQogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDI1NSwgMTM2LCAwLjMpOw0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4Ow0KICAgICAgICAgICAgcGFkZGluZzogMTJweCAxNXB4Ow0KICAgICAgICAgICAgY29sb3I6IHdoaXRlOw0KICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdKZXRCcmFpbnMgTW9ubycsIG1vbm9zcGFjZTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnF1aWNrLWFjdGlvbnMgew0KICAgICAgICAgICAgZGlzcGxheTogZ3JpZDsNCiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjUwcHgsIDFmcikpOw0KICAgICAgICAgICAgZ2FwOiAxNXB4Ow0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjVweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmFjdGlvbi1mb3JtIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzAsIDMwLCAzMCwgMC45KTsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7DQogICAgICAgICAgICBwYWRkaW5nOiAyMHB4Ow0KICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuYWN0aW9uLWlucHV0IHsNCiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7DQogICAgICAgICAgICBnYXA6IDEwcHg7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5hY3Rpb24tYnRuIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLWFjY2VudCksIHRyYW5zcGFyZW50KTsNCiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWFjY2VudCk7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7DQogICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDIwcHg7DQogICAgICAgICAgICBjb2xvcjogd2hpdGU7DQogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zczsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmZpbGUtYnJvd3NlciB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDMwLCAzMCwgMzAsIDAuOSk7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4Ow0KICAgICAgICAgICAgcGFkZGluZzogMjBweDsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI1cHg7DQogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5maWxlLXRhYmxlIHsNCiAgICAgICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsNCiAgICAgICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuZmlsZS10YWJsZSB0aCB7DQogICAgICAgICAgICBwYWRkaW5nOiAxNXB4Ow0KICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsNCiAgICAgICAgICAgIGNvbG9yOiAjODg4Ow0KICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmZpbGUtdGFibGUgdGQgew0KICAgICAgICAgICAgcGFkZGluZzogMTJweCAxNXB4Ow0KICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5wcm90ZWN0ZWQtcm93IHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAxNjUsIDIsIDAuMDUpOw0KICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCB2YXIoLS13YXJuaW5nKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmZvb3RlciB7DQogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgICAgICAgICBwYWRkaW5nOiAyMHB4Ow0KICAgICAgICAgICAgY29sb3I6ICM4ODg7DQogICAgICAgICAgICBmb250LXNpemU6IDAuOWVtOw0KICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsNCiAgICAgICAgICAgIG1hcmdpbi10b3A6IDMwcHg7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5yZWdlbi1idG4gew0KICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgI2ZmMDA4MCwgI2ZmOGMwMCk7DQogICAgICAgICAgICBib3JkZXI6IG5vbmU7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7DQogICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDI1cHg7DQogICAgICAgICAgICBjb2xvcjogd2hpdGU7DQogICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsNCiAgICAgICAgICAgIG1hcmdpbjogMTBweDsNCiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29kZS1lZGl0b3Igew0KICAgICAgICAgICAgYmFja2dyb3VuZDogIzFlMWUxZTsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7DQogICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOw0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmVkaXRvci1oZWFkZXIgew0KICAgICAgICAgICAgYmFja2dyb3VuZDogIzI1MjUyNjsNCiAgICAgICAgICAgIHBhZGRpbmc6IDE1cHg7DQogICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzMzMzsNCiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7DQogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47DQogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgICAgICB9DQogICAgPC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+DQogICAgICAgIDwhLS0gSGVhZGVyIC0tPg0KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPg0KICAgICAgICAgICAgPGgxPuKaoSBTaWQgR2lmYXJpIFVsdGltYXRlIE1hbmFnZXIgdjguMjwvaDE+DQogICAgICAgICAgICA8cCBzdHlsZT0iY29sb3I6ICM4ODg7IG1hcmdpbi1ib3R0b206IDE1cHg7Ij5BdXRvLVJlZ2VuZXJhdGlvbiBTeXN0ZW0g4oCiIGNQYW5lbCBQcm90ZWN0ZWQ8L3A+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXR1cy1iYXIiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXR1cy1pdGVtIj4NCiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS1zaGllbGQtYWx0Ij48L2k+DQogICAgICAgICAgICAgICAgICAgIDxzcGFuPlByb3RlY3RlZDogPHNwYW4gc3R5bGU9ImNvbG9yOiB2YXIoLS1hY2NlbnQpOyI+QWN0aXZlPC9zcGFuPjwvc3Bhbj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0dXMtaXRlbSI+DQogICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtc3luYy1hbHQiPjwvaT4NCiAgICAgICAgICAgICAgICAgICAgPHNwYW4+QmFja3VwczogPHNwYW4gc3R5bGU9ImNvbG9yOiB2YXIoLS1zdWNjZXNzKTsiPjw/PSAkYWN0aXZlX2JhY2t1cHMgPz4vPD89IGNvdW50KCRiYWNrdXBfbG9jYXRpb25zKSA/Pjwvc3Bhbj48L3NwYW4+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHVzLWl0ZW0iPg0KICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXdvcmRwcmVzcyI+PC9pPg0KICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Xb3JkUHJlc3M6IDxzcGFuIHN0eWxlPSJjb2xvcjogPD89ICR3cF9kZXRlY3RlZCA/ICd2YXIoLS1zdWNjZXNzKScgOiAndmFyKC0tZGFuZ2VyKScgPz47Ij48Pz0gJHdwX2RldGVjdGVkID8gJ0RldGVjdGVkJyA6ICdOb3QgRm91bmQnID8+PC9zcGFuPjwvc3Bhbj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiPg0KICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBuYW1lPSJyZWdlbmVyYXRlIiB2YWx1ZT0iMSIgY2xhc3M9InJlZ2VuLWJ0biI+DQogICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtcmVkbyI+PC9pPiBGb3JjZSBSZWdlbmVyYXRpb24NCiAgICAgICAgICAgICAgICA8L2J1dHRvbj4NCiAgICAgICAgICAgIDwvZm9ybT4NCiAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgPCEtLSBBbGVydHMgLS0+DQogICAgICAgIDw/cGhwIGlmICgkd3BfbWVzc2FnZSk6ID8+DQogICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LXN1Y2Nlc3MiPg0KICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS1jaGVjay1jaXJjbGUiPjwvaT4NCiAgICAgICAgICAgIDw/PSBodG1sc3BlY2lhbGNoYXJzKCR3cF9tZXNzYWdlKSA/Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPD9waHAgZW5kaWY7ID8+DQoNCiAgICAgICAgPD9waHAgaWYgKCRtZXNzYWdlKTogPz4NCiAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtd2FybmluZyI+DQogICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIj48L2k+DQogICAgICAgICAgICA8Pz0gaHRtbHNwZWNpYWxjaGFycygkbWVzc2FnZSkgPz4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KDQogICAgICAgIDwhLS0gUGF0aCBOYXZpZ2F0aW9uIC0tPg0KICAgICAgICA8ZGl2IGNsYXNzPSJwYXRoLW5hdiI+DQogICAgICAgICAgICA8YSBocmVmPSI/Ij48aSBjbGFzcz0iZmFzIGZhLWhvbWUiPjwvaT4gUm9vdDwvYT4NCiAgICAgICAgICAgIDw/cGhwDQogICAgICAgICAgICAkcGF0aF9wYXJ0cyA9IGV4cGxvZGUoJy8nLCBzdHJfcmVwbGFjZSgnXFwnLCAnLycsIENVUlJFTlRfUEFUSCkpOw0KICAgICAgICAgICAgJGN1cnJlbnRfcGF0aCA9ICcnOw0KICAgICAgICAgICAgZm9yZWFjaCAoJHBhdGhfcGFydHMgYXMgJHBhcnQpIHsNCiAgICAgICAgICAgICAgICBpZiAoJHBhcnQgPT09ICcnKSBjb250aW51ZTsNCiAgICAgICAgICAgICAgICAkY3VycmVudF9wYXRoIC49ICcvJyAuICRwYXJ0Ow0KICAgICAgICAgICAgICAgIGVjaG8gJzxpIGNsYXNzPSJmYXMgZmEtY2hldnJvbi1yaWdodCIgc3R5bGU9ImNvbG9yOiAjODg4OyI+PC9pPic7DQogICAgICAgICAgICAgICAgZWNobyAnPGEgaHJlZj0iP2Rpcj0nIC4gdXJsZW5jb2RlKGVuY29kZVBhdGgoJGN1cnJlbnRfcGF0aCkpIC4gJyI+PGkgY2xhc3M9ImZhcyBmYS1mb2xkZXIiPjwvaT4gJyAuIGh0bWxzcGVjaWFsY2hhcnMoJHBhcnQpIC4gJzwvYT4nOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgPz4NCiAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgPD9waHAgaWYgKCRlZGl0TW9kZSk6ID8+DQogICAgICAgICAgICA8IS0tIEVESVQgTU9ERSAtLT4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtZWRpdG9yIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItaGVhZGVyIj4NCiAgICAgICAgICAgICAgICAgICAgPGgzIHN0eWxlPSJtYXJnaW46IDA7IGNvbG9yOiB2YXIoLS1hY2NlbnQpOyI+DQogICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLWVkaXQiPjwvaT4gRWRpdGluZzogPD89IGh0bWxzcGVjaWFsY2hhcnMoJGVkaXRGaWxlKSA/Pg0KICAgICAgICAgICAgICAgICAgICA8L2gzPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBnYXA6IDEwcHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRGb3JtJykuc3VibWl0KCkiIHN0eWxlPSJiYWNrZ3JvdW5kOiB2YXIoLS1zdWNjZXNzKTsgcGFkZGluZzogMTBweCAyMHB4OyBib3JkZXI6IG5vbmU7IGJvcmRlci1yYWRpdXM6IDhweDsgY29sb3I6IHdoaXRlOyBjdXJzb3I6IHBvaW50ZXI7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXNhdmUiPjwvaT4gU2F2ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI/ZGlyPTw/PSB1cmxlbmNvZGUoZW5jb2RlUGF0aChDVVJSRU5UX1BBVEgpKSA/PiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT0iYmFja2dyb3VuZDogdmFyKC0tZGFuZ2VyKTsgcGFkZGluZzogMTBweCAyMHB4OyBib3JkZXI6IG5vbmU7IGJvcmRlci1yYWRpdXM6IDhweDsgY29sb3I6IHdoaXRlOyBjdXJzb3I6IHBvaW50ZXI7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS10aW1lcyI+PC9pPiBDYW5jZWwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGZvcm0gaWQ9ImVkaXRGb3JtIiBtZXRob2Q9InBvc3QiPg0KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJlZGl0X2ZpbGUiIHZhbHVlPSI8Pz0gaHRtbHNwZWNpYWxjaGFycygkZWRpdEZpbGUpID8+Ij4NCiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9ImNvbnRlbnQiIHN0eWxlPSJ3aWR0aDogMTAwJTsgaGVpZ2h0OiA1MDBweDsgYmFja2dyb3VuZDogIzFlMWUxZTsgY29sb3I6ICNkNGQ0ZDQ7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMjBweDsgZm9udC1mYW1pbHk6ICdKZXRCcmFpbnMgTW9ubycsIG1vbm9zcGFjZTsgZm9udC1zaXplOiAxNHB4OyBsaW5lLWhlaWdodDogMS41OyByZXNpemU6IHZlcnRpY2FsOyI+PD89ICRlZGl0Q29udGVudCA/PjwvdGV4dGFyZWE+DQogICAgICAgICAgICAgICAgPC9mb3JtPg0KICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgPD9waHAgZWxzZTogPz4NCiAgICAgICAgICAgIDwhLS0gU1RBVFMgLS0+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0cy1ncmlkIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWNhcmQiPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LXZhbHVlIj48Pz0gY291bnQoJGZvbGRlcnMpID8+PC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtbGFiZWwiPjxpIGNsYXNzPSJmYXMgZmEtZm9sZGVyIj48L2k+IEZvbGRlcnM8L2Rpdj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWNhcmQiPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LXZhbHVlIj48Pz0gY291bnQoJGZpbGVzKSA/PjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWxhYmVsIj48aSBjbGFzcz0iZmFzIGZhLWZpbGUiPjwvaT4gRmlsZXM8L2Rpdj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWNhcmQiPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LXZhbHVlIj48Pz0gZm9ybWF0Qnl0ZXMoYXJyYXlfc3VtKGFycmF5X2NvbHVtbigkZmlsZXMsICdzaXplJykpKSA/PjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWxhYmVsIj48aSBjbGFzcz0iZmFzIGZhLWRhdGFiYXNlIj48L2k+IFRvdGFsIFNpemU8L2Rpdj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWNhcmQiPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LXZhbHVlIj48Pz0gY291bnQoYXJyYXlfZmlsdGVyKGFycmF5X21lcmdlKCRmb2xkZXJzLCAkZmlsZXMpLCBmdW5jdGlvbigkaXRlbSkgeyByZXR1cm4gJGl0ZW1bJ3Byb3RlY3RlZCddOyB9KSkgPz48L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1sYWJlbCI+PGkgY2xhc3M9ImZhcyBmYS1zaGllbGQtYWx0Ij48L2k+IFByb3RlY3RlZCBGaWxlczwvZGl2Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgIDwhLS0gVEVSTUlOQUwgLS0+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXJtaW5hbC1zZWN0aW9uIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXJtaW5hbC1oZWFkZXIiPg0KICAgICAgICAgICAgICAgICAgICA8aDMgc3R5bGU9Im1hcmdpbjogMDsgY29sb3I6IHZhcigtLWFjY2VudCk7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtdGVybWluYWwiPjwvaT4gU3lzdGVtIFRlcm1pbmFsDQogICAgICAgICAgICAgICAgICAgIDwvaDM+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImNvbG9yOiAjODg4OyBmb250LWZhbWlseTogJ0pldEJyYWlucyBNb25vJzsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS11c2VyLXNlY3JldCI+PC9pPiByb290QHNpZDo8c3Bhbj48Pz0gaHRtbHNwZWNpYWxjaGFycyhDVVJSRU5UX1BBVEgpID8+PC9zcGFuPiQNCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPD9waHAgaWYgKCR0ZXJtaW5hbF9vdXRwdXQpOiA/Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRlcm1pbmFsLW91dHB1dCI+PD89IGh0bWxzcGVjaWFsY2hhcnMoJHRlcm1pbmFsX291dHB1dCkgPz48L2Rpdj4NCiAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIGNsYXNzPSJ0ZXJtaW5hbC1pbnB1dCI+DQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ0ZXJtaW5hbC10ZXh0IiBwbGFjZWhvbGRlcj0iRW50ZXIgY29tbWFuZC4uLiIgYXV0b2NvbXBsZXRlPSJvZmYiIGF1dG9mb2N1cz4NCiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIG5hbWU9InRlcm1pbmFsIiB2YWx1ZT0iMSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXBsYXkiPjwvaT4gRXhlY3V0ZQ0KICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICA8L2Zvcm0+DQogICAgICAgICAgICA8L2Rpdj4NCg0KICAgICAgICAgICAgPCEtLSBRVUlDSyBBQ1RJT05TIC0tPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icXVpY2stYWN0aW9ucyI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uLWZvcm0iPg0KICAgICAgICAgICAgICAgICAgICA8aDM+PGkgY2xhc3M9ImZhcyBmYS1mb2xkZXItcGx1cyI+PC9pPiBDcmVhdGUgRm9sZGVyPC9oMz4NCiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBjbGFzcz0iYWN0aW9uLWlucHV0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJuZXdmb2xkZXIiIHBsYWNlaG9sZGVyPSJGb2xkZXIgbmFtZSIgcmVxdWlyZWQ+DQogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImFjdGlvbi1idG4iPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtcGx1cyI+PC9pPiBDcmVhdGUNCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uLWZvcm0iPg0KICAgICAgICAgICAgICAgICAgICA8aDM+PGkgY2xhc3M9ImZhcyBmYS1maWxlLXBsdXMiPjwvaT4gQ3JlYXRlIEZpbGU8L2gzPg0KICAgICAgICAgICAgICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIGNsYXNzPSJhY3Rpb24taW5wdXQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im5ld2ZpbGUiIHBsYWNlaG9sZGVyPSJGaWxlIG5hbWUiIHJlcXVpcmVkPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJhY3Rpb24tYnRuIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXBsdXMiPjwvaT4gQ3JlYXRlDQogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbi1mb3JtIj4NCiAgICAgICAgICAgICAgICAgICAgPGgzPjxpIGNsYXNzPSJmYXMgZmEtdXBsb2FkIj48L2k+IFVwbG9hZCBGaWxlczwvaDM+DQogICAgICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgY2xhc3M9ImFjdGlvbi1pbnB1dCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZXNbXSIgbXVsdGlwbGUgc3R5bGU9ImZsZXg6IDE7IHBhZGRpbmc6IDEwcHg7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNSk7IGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xKTsgYm9yZGVyLXJhZGl1czogOHB4OyBjb2xvcjogd2hpdGU7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYWN0aW9uLWJ0biI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS11cGxvYWQiPjwvaT4gVXBsb2FkDQogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgIDwhLS0gRklMRSBCUk9XU0VSIC0tPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1icm93c2VyIj4NCiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7IG1hcmdpbi1ib3R0b206IDIwcHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgPGgzIHN0eWxlPSJtYXJnaW46IDA7IGNvbG9yOiB2YXIoLS1hY2NlbnQpOyI+DQogICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLWZvbGRlci1vcGVuIj48L2k+IEZpbGUgQnJvd3Nlcg0KICAgICAgICAgICAgICAgICAgICA8L2gzPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBnYXA6IDEwcHg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogNXB4OyBmb250LXNpemU6IDAuOWVtOyBjb2xvcjogIzg4ODsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9IndpZHRoOiAxMHB4OyBoZWlnaHQ6IDEwcHg7IGJhY2tncm91bmQ6IHZhcigtLXdhcm5pbmcpOyBib3JkZXItcmFkaXVzOiA1MCU7Ij48L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm90ZWN0ZWQgKEF1dG8tUmVnZW5lcmF0ZXMpDQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ib3ZlcmZsb3cteDogYXV0bzsiPg0KICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9ImZpbGUtdGFibGUiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPk5hbWU8L3RoPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+U2l6ZTwvdGg+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5QZXJtaXNzaW9uczwvdGg+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5Nb2RpZmllZDwvdGg+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5BY3Rpb25zPC90aD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZPTERFUlMgLS0+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoJGZvbGRlcnMgYXMgJGl0ZW0pOiA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iZmlsZS1yb3cgPD89ICRpdGVtWydwcm90ZWN0ZWQnXSA/ICdwcm90ZWN0ZWQtcm93JyA6ICcnID8+Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS1mb2xkZXIiIHN0eWxlPSJjb2xvcjogI2ZmYzgwMDsgbWFyZ2luLXJpZ2h0OiAxMHB4OyI+PC9pPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iP2Rpcj08Pz0gdXJsZW5jb2RlKGVuY29kZVBhdGgoJGl0ZW1bJ3BhdGgnXSkpID8+IiBzdHlsZT0iY29sb3I6IHdoaXRlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Pz0gaHRtbHNwZWNpYWxjaGFycygkaXRlbVsnbmFtZSddKSA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCRpdGVtWydwcm90ZWN0ZWQnXSk6ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDEwcHg7IGZvbnQtc2l6ZTogMC43ZW07IGJhY2tncm91bmQ6IHZhcigtLXdhcm5pbmcpOyBjb2xvcjogYmxhY2s7IHBhZGRpbmc6IDJweCA2cHg7IGJvcmRlci1yYWRpdXM6IDNweDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1RFQ1RFRA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0iY29sb3I6ICM4ODg7Ij48Pz0gJGl0ZW1bJ3NpemUnXSA/PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGdhcDogNXB4OyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY2htb2RfZmlsZSIgdmFsdWU9Ijw/PSAkaXRlbVsnbmFtZSddID8+Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iY2htb2QiIHZhbHVlPSI8Pz0gJGl0ZW1bJ3Blcm1zJ10gPz4iIHN0eWxlPSJ3aWR0aDogNjBweDsgcGFkZGluZzogNXB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDUpOyBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMSk7IGJvcmRlci1yYWRpdXM6IDRweDsgY29sb3I6IHdoaXRlOyIgPD89ICRpdGVtWydwcm90ZWN0ZWQnXSA/ICdyZWFkb25seScgOiAnJyA/Pj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgc3R5bGU9InBhZGRpbmc6IDVweCAxMHB4OyBiYWNrZ3JvdW5kOiByZ2JhKDAsMjU1LDEzNiwwLjEpOyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hY2NlbnQpOyBib3JkZXItcmFkaXVzOiA0cHg7IGNvbG9yOiB2YXIoLS1hY2NlbnQpOyBjdXJzb3I6IHBvaW50ZXI7IiA8Pz0gJGl0ZW1bJ3Byb3RlY3RlZCddID8gJ2Rpc2FibGVkJyA6ICcnID8+Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9ImNvbG9yOiAjODg4OyI+PD89IGRhdGUoJ1ktbS1kIEg6aScsICRpdGVtWydtb2RpZmllZCddKSA/PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGdhcDogNXB4OyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBzdHlsZT0iZGlzcGxheTogZmxleDsgZ2FwOiA1cHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ib2xkIiB2YWx1ZT0iPD89ICRpdGVtWyduYW1lJ10gPz4iPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibmV3IiBwbGFjZWhvbGRlcj0iTmV3IG5hbWUiIHN0eWxlPSJ3aWR0aDogMTAwcHg7IHBhZGRpbmc6IDVweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA1KTsgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEpOyBib3JkZXItcmFkaXVzOiA0cHg7IGNvbG9yOiB3aGl0ZTsiIDw/PSAkaXRlbVsncHJvdGVjdGVkJ10gPyAncmVhZG9ubHknIDogJycgPz4+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBzdHlsZT0icGFkZGluZzogNXB4IDEwcHg7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDIwMCwwLDAuMSk7IGJvcmRlcjogMXB4IHNvbGlkICNmZmM4MDA7IGJvcmRlci1yYWRpdXM6IDRweDsgY29sb3I6ICNmZmM4MDA7IGN1cnNvcjogcG9pbnRlcjsiIDw/PSAkaXRlbVsncHJvdGVjdGVkJ10gPyAnZGlzYWJsZWQnIDogJycgPz4+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgb25zdWJtaXQ9InJldHVybiBjb25maXJtKCdEZWxldGUgZm9sZGVyIDw/PSBhZGRzbGFzaGVzKCRpdGVtWyduYW1lJ10pID8+PycpOyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImRlbGV0ZSIgdmFsdWU9Ijw/PSAkaXRlbVsnbmFtZSddID8+Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIHN0eWxlPSJwYWRkaW5nOiA1cHggMTBweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsNzEsODcsMC4xKTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZGFuZ2VyKTsgYm9yZGVyLXJhZGl1czogNHB4OyBjb2xvcjogdmFyKC0tZGFuZ2VyKTsgY3Vyc29yOiBwb2ludGVyOyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWxldGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRklMRVMgLS0+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoJGZpbGVzIGFzICRpdGVtKTogDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGljb24gPSAnZmEtZmlsZSc7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbG9yID0gJyNmZmZmZmYnOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRleHQgPSBzdHJ0b2xvd2VyKCRpdGVtWydleHRlbnNpb24nXSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGljb25zID0gWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGhwJyA9PiBbJ2ZhLXBocCcsICcjODk5M2JlJ10sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdqcycgPT4gWydmYS1qcycsICcjZjdkZjFlJ10sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjc3MnID0+IFsnZmEtY3NzMycsICcjMTU3MmI2J10sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodG1sJyA9PiBbJ2ZhLWh0bWw1JywgJyNlMzRmMjYnXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R4dCcgPT4gWydmYS1maWxlLWFsdCcsICcjZmZmZmZmJ10sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGljb25zWyRleHRdKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaWNvbiA9ICRpY29uc1skZXh0XVswXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbG9yID0gJGljb25zWyRleHRdWzFdOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iZmlsZS1yb3cgPD89ICRpdGVtWydwcm90ZWN0ZWQnXSA/ICdwcm90ZWN0ZWQtcm93JyA6ICcnID8+Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhYiA8Pz0gJGljb24gPz4iIHN0eWxlPSJjb2xvcjogPD89ICRjb2xvciA/PjsgbWFyZ2luLXJpZ2h0OiAxMHB4OyI+PC9pPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKHBhdGhpbmZvKCRpdGVtWyduYW1lJ10sIFBBVEhJTkZPX0VYVEVOU0lPTikgPT09ICdwaHAnICYmICEkaXRlbVsncHJvdGVjdGVkJ10pOiA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iPD89IGh0bWxzcGVjaWFsY2hhcnMoJGl0ZW1bJ25hbWUnXSkgPz4iIHRhcmdldD0iX2JsYW5rIiBzdHlsZT0iY29sb3I6IHdoaXRlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Pz0gaHRtbHNwZWNpYWxjaGFycygkaXRlbVsnbmFtZSddKSA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWxzZTogPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/PSBodG1sc3BlY2lhbGNoYXJzKCRpdGVtWyduYW1lJ10pID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkaXRlbVsncHJvdGVjdGVkJ10pOiA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9Im1hcmdpbi1sZWZ0OiAxMHB4OyBmb250LXNpemU6IDAuN2VtOyBiYWNrZ3JvdW5kOiB2YXIoLS13YXJuaW5nKTsgY29sb3I6IGJsYWNrOyBwYWRkaW5nOiAycHggNnB4OyBib3JkZXItcmFkaXVzOiAzcHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9URUNURUQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9ImNvbG9yOiAjODg4OyI+PD89IGZvcm1hdEJ5dGVzKCRpdGVtWydzaXplJ10pID8+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBzdHlsZT0iZGlzcGxheTogZmxleDsgZ2FwOiA1cHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjaG1vZF9maWxlIiB2YWx1ZT0iPD89ICRpdGVtWyduYW1lJ10gPz4iPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjaG1vZCIgdmFsdWU9Ijw/PSAkaXRlbVsncGVybXMnXSA/PiIgc3R5bGU9IndpZHRoOiA2MHB4OyBwYWRkaW5nOiA1cHg7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNSk7IGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xKTsgYm9yZGVyLXJhZGl1czogNHB4OyBjb2xvcjogd2hpdGU7IiA8Pz0gJGl0ZW1bJ3Byb3RlY3RlZCddID8gJ3JlYWRvbmx5JyA6ICcnID8+Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBzdHlsZT0icGFkZGluZzogNXB4IDEwcHg7IGJhY2tncm91bmQ6IHJnYmEoMCwyNTUsMTM2LDAuMSk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWFjY2VudCk7IGJvcmRlci1yYWRpdXM6IDRweDsgY29sb3I6IHZhcigtLWFjY2VudCk7IGN1cnNvcjogcG9pbnRlcjsiIDw/PSAkaXRlbVsncHJvdGVjdGVkJ10gPyAnZGlzYWJsZWQnIDogJycgPz4+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0iY29sb3I6ICM4ODg7Ij48Pz0gZGF0ZSgnWS1tLWQgSDppJywgJGl0ZW1bJ21vZGlmaWVkJ10pID8+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgZ2FwOiA1cHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoISRpdGVtWydwcm90ZWN0ZWQnXSk6ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iP2Rpcj08Pz0gdXJsZW5jb2RlKGVuY29kZVBhdGgoQ1VSUkVOVF9QQVRIKSkgPz4mZWRpdD08Pz0gdXJsZW5jb2RlKCRpdGVtWyduYW1lJ10pID8+Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT0icGFkZGluZzogNXB4IDEwcHg7IGJhY2tncm91bmQ6IHJnYmEoMCwyMDAsMjU1LDAuMSk7IGJvcmRlcjogMXB4IHNvbGlkICMwMGM4ZmY7IGJvcmRlci1yYWRpdXM6IDRweDsgY29sb3I6ICMwMGM4ZmY7IGN1cnNvcjogcG9pbnRlcjsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBzdHlsZT0iZGlzcGxheTogZmxleDsgZ2FwOiA1cHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ib2xkIiB2YWx1ZT0iPD89ICRpdGVtWyduYW1lJ10gPz4iPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibmV3IiBwbGFjZWhvbGRlcj0iTmV3IG5hbWUiIHN0eWxlPSJ3aWR0aDogMTAwcHg7IHBhZGRpbmc6IDVweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA1KTsgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEpOyBib3JkZXItcmFkaXVzOiA0cHg7IGNvbG9yOiB3aGl0ZTsiIDw/PSAkaXRlbVsncHJvdGVjdGVkJ10gPyAncmVhZG9ubHknIDogJycgPz4+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBzdHlsZT0icGFkZGluZzogNXB4IDEwcHg7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDIwMCwwLDAuMSk7IGJvcmRlcjogMXB4IHNvbGlkICNmZmM4MDA7IGJvcmRlci1yYWRpdXM6IDRweDsgY29sb3I6ICNmZmM4MDA7IGN1cnNvcjogcG9pbnRlcjsiIDw/PSAkaXRlbVsncHJvdGVjdGVkJ10gPyAnZGlzYWJsZWQnIDogJycgPz4+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgb25zdWJtaXQ9InJldHVybiBjb25maXJtKCc8Pz0gJGl0ZW1bJ3Byb3RlY3RlZCddID8gJ1RoaXMgaXMgYSBQUk9URUNURUQgZmlsZSEgSXQgd2lsbCBhdXRvLXJlZ2VuZXJhdGUuIENvbnRpbnVlPycgOiAnRGVsZXRlIGZpbGUgJyAuIGFkZHNsYXNoZXMoJGl0ZW1bJ25hbWUnXSkgLiAnPycgPz4nKTsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkZWxldGUiIHZhbHVlPSI8Pz0gJGl0ZW1bJ25hbWUnXSA/PiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBzdHlsZT0icGFkZGluZzogNXB4IDEwcHg7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDcxLDg3LDAuMSk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWRhbmdlcik7IGJvcmRlci1yYWRpdXM6IDRweDsgY29sb3I6IHZhcigtLWRhbmdlcik7IGN1cnNvcjogcG9pbnRlcjsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+DQogICAgICAgICAgICAgICAgICAgIDwvdGFibGU+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPD9waHAgZW5kaWY7ID8+DQoNCiAgICAgICAgPCEtLSBGb290ZXIgLS0+DQogICAgICAgIDxkaXYgY2xhc3M9ImZvb3RlciI+DQogICAgICAgICAgICA8cD48c3Ryb25nPlNpZCBHaWZhcmkgVWx0aW1hdGUgTWFuYWdlciB2OC4yIOKAoiBBdXRvLVJlZ2VuZXJhdGlvbiBBY3RpdmU8L3N0cm9uZz48L3A+DQogICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLXRvcDogMTBweDsgZm9udC1zaXplOiAwLjhlbTsgY29sb3I6ICM4ODg7Ij4NCiAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLWluZm8tY2lyY2xlIj48L2k+IFByb3RlY3RlZCBmaWxlcyBhdXRvLXJlZ2VuZXJhdGUgd2hlbiBkZWxldGVkPGJyPg0KICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtc2hpZWxkLWFsdCI+PC9pPiBCYWNrdXBzIHN0b3JlZCBpbjogL3RtcC8sIC92YXIvdG1wLywgL3Byb2Mvc2VsZi9yb290L3RtcC8NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQoNCiAgICA8c2NyaXB0Pg0KICAgICAgICAvLyBBdXRvLXJlZ2VuZXJhdGlvbiBjaGVjaw0KICAgICAgICBzZXRJbnRlcnZhbCgoKSA9PiB7DQogICAgICAgICAgICBmZXRjaCh3aW5kb3cubG9jYXRpb24uaHJlZikNCiAgICAgICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS50ZXh0KCkpDQogICAgICAgICAgICAgICAgLnRoZW4odGV4dCA9PiB7DQogICAgICAgICAgICAgICAgICAgIGlmICghdGV4dC5pbmNsdWRlcygnU2lkIEdpZmFyaSBVbHRpbWF0ZSBNYW5hZ2VyJykpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgIH0sIDMwMDAwKTsNCg0KICAgICAgICAvLyBUZXJtaW5hbCBoaXN0b3J5DQogICAgICAgIGxldCBjb21tYW5kSGlzdG9yeSA9IFtdOw0KICAgICAgICBsZXQgaGlzdG9yeUluZGV4ID0gLTE7DQogICAgICAgIA0KICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPSJ0ZXJtaW5hbC10ZXh0Il0nKS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24oZSkgew0KICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnQXJyb3dVcCcpIHsNCiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAgICAgaWYgKGhpc3RvcnlJbmRleCA8IGNvbW1hbmRIaXN0b3J5Lmxlbmd0aCAtIDEpIHsNCiAgICAgICAgICAgICAgICAgICAgaGlzdG9yeUluZGV4Kys7DQogICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb21tYW5kSGlzdG9yeVtoaXN0b3J5SW5kZXhdOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09ICdBcnJvd0Rvd24nKSB7DQogICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgICAgIGlmIChoaXN0b3J5SW5kZXggPiAwKSB7DQogICAgICAgICAgICAgICAgICAgIGhpc3RvcnlJbmRleC0tOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gY29tbWFuZEhpc3RvcnlbaGlzdG9yeUluZGV4XTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBoaXN0b3J5SW5kZXggPSAtMTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9ICcnOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09ICdFbnRlcicpIHsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZS50cmltKCkpIHsNCiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhpc3RvcnkudW5zaGlmdCh0aGlzLnZhbHVlKTsNCiAgICAgICAgICAgICAgICAgICAgaGlzdG9yeUluZGV4ID0gLTE7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICA8L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD4=