box/02/js/瓜子.js
2025-02-05 22:03:12 +08:00

1 line
38 KiB
JavaScript

dmFyIHJ1bGUgPSB7CiAgICB0aXRsZTogJ+eTnOWtkCcsCiAgICBob3N0OiAnaHR0cHM6Ly9hcGkuOHV0ZHRjcS5jb20nLAogICAgdXJsOiAnL0FwcC9JbmRleExpc3QvaW5kZXhMaXN0JywKICAgIC8vICAgaG9tZVVybDogJ2h0dHA6Ly8xMjQuMjIyLjExNi41L2hvbWVkYXRhL2hvbWUuanNvbicsCiAgICBzZWFyY2hVcmw6ICcvQXBwL0luZGV4L2ZpbmRNb3JlVm9kIyoqJywKICAgIHNlYXJjaGFibGU6IDIsCiAgICBxdWlja1NlYXJjaDogMSwKICAgIGZpbHRlcmFibGU6IDEsCiAgICBjbGFzc19uYW1lOiAn55S15b2xJueUteinhuWJpybliqjmvKsm57u86Im6JuefreWJpycsCiAgICBjbGFzc191cmw6ICcxJjImNCYzJjY0JywKICAgIGZpbHRlcjonSDRzSUFBQUFBQUFBQSsyYTdVNGFRUlNHLzNzVmh0L2JaSGY1V25vcmpXbG80WWZwaHdscUUyTk10R29MV0lzbUZiUmkycVlxb0JneHRWVlI4R1oyZHVVdU9tY2hmdUR1REhJMnhKaEQ0aEdZeVR6djdobG01N3laNmFGaC9ncG9nZWZETDV5MzhKcStmdWMwdmtsTzhlWkFQSldNQjVTN1RlL2o3NUplYlIvaWJ5ZVRkOFoxSC85bU1CaUpMWlpiOCtXdXNXN0doQzVxNEY3anpQMytRc2gycWJYeFNRanBkTUdTV3JzYjF1bWhrTlRwZ3I2bVhNMDZhNHF2cWQwRlM3S3FKYnY1VlVneUx4ZnNSc0hLSHlvcys5TmF1dVIzVTJITkU3YlpVS3lGSFAvRTBoWEYrclBtZk9FTXAvQS8rSFMxZE9UODI3bTBjd2QyWmdPdnRyQmpGYXRDdFowdTZGei9xSERwNGx5M3UyQko1bW1STFJmTStuZHh1cGRyckw2cldQa2FUd0xiK3NWdmVBM3ViYXRTdGJaMitCMkdBZERUYnZHZmVaNFg2MmgzdVUrNjg4M0k5YWRiQ3R4WG9xbGtQT1cxRXJtMVBlS1ZTRmYxa0JEaGRQQ0JFcFJSZ241UWRCbEY5NE9peVNpYUh4UlZSdkVqKzFwTVF1RWRmS0FZTW9yaEJ5VXFvMFQ5b0VSa2xBaWFvcW5QdERBN081YVJ3Z29QSVFoQkNEb0VEUUorYXFncTU1dm52eVVTVkpYalZHQ3FRRmRCaHdxS1ZOQ21SaUJFSVJnUThITXAxb3NzTFJaVEZSNDBDRHFFSUlRUWhEQ0VDSVFvQkFNQ1hwYlJteXdEWkJrZ3l3QlpCc2d5UUpZQnNneVFaWUFzQTJRWmVGblc1ckZWcUloVDZPTnpjWHp5bGRkajBhWHBFVDhWV2Jac05vcDI1ck9JRTBabjUyUFZ6cTlLS0hvTWZUSDVJc3VVSkpnSWxtS25qNno1UlFrbGlxYVVWdG5adVlSaW9CTXp0MkxONWlVVWZGNHlKZmtkMDFUMHhhVFh6WHBHaHRGOCtNblkzMlNaQ2VLbldYMlBOZFprdnhuMFRiUG5tcTN2VGRuVm9DZWFuVDIwRzN1eW42WkxidnBlb2NkU0U1NUx0RXRiZjJ1MGZYN0JWdExDTlRyeGNqU0JmN3dWWjNseEtlSEVFNG1KVVg2RlBzRHMrUU1KYlB6MVdBcVBhdTJ2czdUWUh2SkdlVTBONTkxSWUweisxSDgwZmx1eHhyN1V5VzhqdjQzOE5rOFMrVzJEOE51Z2doT25rL3kyTGdyNWJRK2trTjlHZnB1ckJQTGJIaUtML0xhQitXMmJEYk5lWXBtUzBEN1EvZGszeXpCQmZ6Yk5Na3pJbngyekRJTTNFSjE5ckF5RDlsemFtMWdaQnUzdFdYOVAySFplaHNHYmU4Nm1XSVpCdTN2WHUzQ2h0ZU9DNlhzeElHc0hBWHM2MWs2SXJKMHVDRms3bmlTeWR0eEpaTzE0NkNCcnh4TkMxZzVaTzBJS1dUdmRGTEoyYmtrZ2E0ZXNuWUZhTyticEFWVEMyYkoxc1M4ODU0QS9nOUkyS3VRazlER1U0WTcxSWtlNWVFbDlKNHRLYndUczZaVGVRU3E5dXlCVWVudVNxUFIySjFIcDdhR0RTbTlQQ0pYZVZIb0xLVlI2ZDFPbzlMNGxnVXB2S3IwSGU2ckMyUmZ6aXU0cUk5eWw2K2lERlhDcUlsZnJnWVErVzhIM2YzeGoxZ1BKcCtNVlBaQmNUbGowUFN1b3hrZkFua0NOUHpUekgrU3RQeENzUkFBQScsCiAgICAvLyBsaW1pdDogNiwKICAgIC8vZG91YmxlOiBmYWxzZSwKICAgIHBsYXlfcGFyc2U6IHRydWUsCiAgICBsYXp5OiAkanMudG9TdHJpbmcoKCkgPT4gewogICAgICAgIGxldCBkID0gW107CiAgICAgICAgLy9jb25zb2xlLmxvZygid2FuZ3poaT09PSIraW5wdXQpCiAgICAgICAgdmFyIHZvZF9pZCA9IGlucHV0LnNwbGl0KCIvIilbMF07CiAgICAgICAgdmFyIHZ1cmxfaWQgPSBpbnB1dC5zcGxpdCgiLyIpWzFdOwogICAgICAgIHZhciByZXNvbHV0aW9uPWlucHV0LnNwbGl0KCI/IilbMV0KICAgICAgICBmdW5jdGlvbiBFbmNyeXB0KHBsYWluVGV4dCkgewogICAgICAgICAgICBsZXQga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoIm12WEJTVzdla3JlSXROc1QiKTsKICAgICAgICAgICAgbGV0IGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoIjJVM0lySkw4c3pBS3AwRmoiKTsKICAgICAgICAgICAgLy8g5bCG5paH5pys5Yqg5a+G5Li6IEFFUy9DQkMvUEtDUzVQYWRkaW5nIOagvOW8jwogICAgICAgICAgICBsZXQgZW5jcnlwdGVkID0gQ3J5cHRvSlMuQUVTLmVuY3J5cHQocGxhaW5UZXh0LCBrZXksIHsKICAgICAgICAgICAgICAgIGl2OiBpdiwKICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLAogICAgICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgLy8g6I635Y+W5Yqg5a+G57uT5p6c5bm26L2s5Li6IEhleCDmoLzlvI8KICAgICAgICAgICAgbGV0IGVuY3J5cHRlZEhleCA9IGVuY3J5cHRlZC5jaXBoZXJ0ZXh0LnRvU3RyaW5nKENyeXB0b0pTLmVuYy5IZXgpOwogICAgICAgICAgICByZXR1cm4gZW5jcnlwdGVkSGV4LnRvVXBwZXJDYXNlKCk7IC8vIOi/lOWbnuWkp+WGmSBIZXgg5qC85byPCiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIERlY3J5cHQod29yZCwga2V5LCBpdikgewogICAgICAgICAgICBsZXQgZW5jcnlwdGVkSGV4U3RyID0gQ3J5cHRvSlMuZW5jLkhleC5wYXJzZSh3b3JkKTsKCiAgICAgICAgICAgIC8vIOS9v+eUqEFFUy9DQkMvUEtDUzVQYWRkaW5n5qih5byP6L+b6KGM6Kej5a+GCiAgICAgICAgICAgIGxldCBkZWNyeXB0ID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoewogICAgICAgICAgICAgICAgY2lwaGVydGV4dDogZW5jcnlwdGVkSGV4U3RyCiAgICAgICAgICAgIH0sIGtleSwgewogICAgICAgICAgICAgICAgaXY6IGl2LAogICAgICAgICAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsIC8vIOS9v+eUqENCQ+aooeW8jwogICAgICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3IC8vIOS9v+eUqFBLQ1MjN+Whq+WFhQogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIC8vIOWwhuino+WvhuWQjueahOaVsOaNrui9rOaNouS4uuWOn+Wni+aWh+acrAogICAgICAgICAgICBsZXQgZGVjcnlwdGVkU3RyID0gZGVjcnlwdC50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7CgogICAgICAgICAgICAvLyDov5Tlm57op6Plr4blkI7nmoTmlofmnKwKICAgICAgICAgICAgcmV0dXJuIGRlY3J5cHRlZFN0cjsKICAgICAgICB9CiAgICAgICAgdmFyIHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMDsgLy9sb2codGltZXN0YW1wKQogICAgICAgIHZhciB0ID0gdGltZXN0YW1wLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVswXTsgLy9sb2codCkKICAgICAgICB2YXIgcmVxdWVzdF9rZXkgPSBKU09OLnN0cmluZ2lmeSh7CiAgICAgICAgICAgICJkb21haW5fdHlwZSI6ICI4IiwKICAgICAgICAgICAgInZvZF9pZCI6IHZvZF9pZCwKICAgICAgICAgICAgInR5cGUiOiAicGxheSIsCiAgICAgICAgICAgICJyZXNvbHV0aW9uIjogcmVzb2x1dGlvbiwKICAgICAgICAgICAgInZ1cmxfaWQiOiB2dXJsX2lkCiAgICAgICAgfSk7IC8vbG9nKHJlcXVlc3Rfa2V5KQogICAgICAgIHZhciByZXF1ZXN0X2tleTIgPSBFbmNyeXB0KHJlcXVlc3Rfa2V5KTsgLy9sb2cocmVxdWVzdF9rZXkyKQogICAgICAgIHZhciBzaWduYXR1cmUgPSAndG9rZW5faWQ9LHRva2VuPTFiZTg2ZThlMThhOWZhMThiMmI4ZDU0MzI2OTlkYWQwLmFjMDA4ZWQ2NTBmZDA4N2JmYmVjZjJmZGE5ZDgyZTk4MzUyNTNlZjI0ODQzZTZiMThmY2QxMjhiMTA3NjM0OTdiY2Y5ZDUzZTk1OWY1Mzc3Y2RlMDM4YzIwY2NmOWQxN2Y2MDRjOWI4YmI2ZTYxMDQxZGVmODY3MjliMmZjNzQwOGJkMjQxZTIzYzIxM2FjNTdmMDIyNmVlNjU2ZTJiYjBhNTgzYWUwZTRmM2JmNmM2YWI2YzQ5MGM5YTZmMGQ4Y2RmZDM2NmFhY2Y1ZDgzMTkzNjcxYThmNzdjZDFhZjFmZjJlOTE0NWRlOTJlYzQzZWM4N2NmNGJkYzU2M2Y2ZTkxOWZlMzI4NjFiMGU5M2IxMThlYzM3ZDgwMzVmYmIzYy41OWRkMDVjNWQ5YThhZTcyNjUyODc4MzEyODIxOGYxNWZlNmYyYzBjODE0NWVkZGFiMTEyYjM3NGZjZmUzZDc5LHBob25lX3R5cGU9MSxyZXF1ZXN0X2tleT0nICsgcmVxdWVzdF9rZXkyICsgJyxhcHBfaWQ9MSx0aW1lPScgKyB0ICsgJyxrZXlzPVpIOGdwZHA5YnhqdUcyTks5N3NvbDNvN1Vpeis5ZVZFYVZNbEUyRmszajdFUmVzTTNZSG5FQ1pVSDdCT05OVGpweTdSVk5pL1lpbUd1TllyaUM3Q21zd3Y0UE5ZaUZZenc5UWhscVpLd05mQ002SVVwRlowVDRyWng4Rzc4emt2MnROVmJmWUM0cU5RZWRHaTA3bldaMzNkbFN1VnhST1ZmWTVKeE9XSE1JMD0qJnp2ZHZkdmRkYmZpa2trdW10bWR3cXBwcD98NFkhcyEyYnInOyAvL2xvZyhzaWduYXR1cmUpCiAgICAgICAgdmFyIHNpZ25hdHVyZTIgPSBtZDUoc2lnbmF0dXJlKTsgLy9sb2coc2lnbmF0dXJlMikKICAgICAgICB2YXIgYm9keSA9ICd0b2tlbj0xYmU4NmU4ZTE4YTlmYTE4YjJiOGQ1NDMyNjk5ZGFkMC5hYzAwOGVkNjUwZmQwODdiZmJlY2YyZmRhOWQ4MmU5ODM1MjUzZWYyNDg0M2U2YjE4ZmNkMTI4YjEwNzYzNDk3YmNmOWQ1M2U5NTlmNTM3N2NkZTAzOGMyMGNjZjlkMTdmNjA0YzliOGJiNmU2MTA0MWRlZjg2NzI5YjJmYzc0MDhiZDI0MWUyM2MyMTNhYzU3ZjAyMjZlZTY1NmUyYmIwYTU4M2FlMGU0ZjNiZjZjNmFiNmM0OTBjOWE2ZjBkOGNkZmQzNjZhYWNmNWQ4MzE5MzY3MWE4Zjc3Y2QxYWYxZmYyZTkxNDVkZTkyZWM0M2VjODdjZjRiZGM1NjNmNmU5MTlmZTMyODYxYjBlOTNiMTE4ZWMzN2Q4MDM1ZmJiM2MuNTlkZDA1YzVkOWE4YWU3MjY1Mjg3ODMxMjgyMThmMTVmZTZmMmMwYzgxNDVlZGRhYjExMmIzNzRmY2ZlM2Q3OSZ0b2tlbl9pZD0mcGhvbmVfdHlwZT0xJnRpbWU9JyArIHQgKyAnJnBob25lX21vZGVsPXhpYW9taS0yMjAyMTIxMXJjJmtleXM9Wkg4Z3BkcDlieGp1RzJOSzk3c29sM283VWl6JTJCOWVWRWFWTWxFMkZrM2o3RVJlc00zWUhuRUNaVUg3Qk9OTlRqcHk3UlZOaSUyRllpbUd1TllyaUM3Q21zd3Y0UE5ZaUZZenc5UWhscVpLd05mQ002SVVwRlowVDRyWng4Rzc4emt2MnROVmJmWUM0cU5RZWRHaTA3bldaMzNkbFN1VnhST1ZmWTVKeE9XSE1JMCUzRCZyZXF1ZXN0X2tleT0nICsgcmVxdWVzdF9rZXkyICsgJyZzaWduYXR1cmU9JyArIHNpZ25hdHVyZTIgKyAnJmFwcF9pZD0xJmFkX3ZlcnNpb249MSc7IC8vbG9nKGJvZHkpCgogICAgICAgIHZhciBodG1sID0gZmV0Y2goJ2h0dHBzOi8vYXBpLjh1dGR0Y3EuY29tL0FwcC9SZXNvdXJjZS9WdXJsRGV0YWlsL3Nob3dPbmUnLCB7CiAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAgICdDYWNoZS1Db250cm9sJzogJ25vLWNhY2hlJywKICAgICAgICAgICAgICAgICdWZXJzaW9uJzogJzI0MDYwMjUnLAogICAgICAgICAgICAgICAgJ1BhY2thZ2VOYW1lJzogJ2NvbS51ZjA3NmJmMGMyNDYucWU0MzlmMGQ1ZS5tOGFhZjU2YjcyNWEuaWZlYjY0NzM0NmYnLAogICAgICAgICAgICAgICAgJ1Zlcic6ICcxLjkuMicsCiAgICAgICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL2FwaS44dXRkdGNxLmNvbScsCiAgICAgICAgICAgICAgICAnWC1DdXN0b21lci1DbGllbnQtSXAnOiAnMTI3LjAuMC4xJywKICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywKICAgICAgICAgICAgICAgICdIb3N0JzogJ2FwaS44dXRkdGNxLmNvbScsCiAgICAgICAgICAgICAgICAnQ29ubmVjdGlvbic6ICdLZWVwLUFsaXZlJywKICAgICAgICAgICAgICAgIC8vJ0FjY2VwdC1FbmNvZGluZyc6ICdnemlwJywKICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogJ29raHR0cC8zLjEyLjAnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGJvZHk6IGJvZHksCiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLCAgICAgICAgICAgCiAgICAgICAgICAgIHJlamVjdENvZGluZzogdHJ1ZQogICAgICAgIH0pOyAvL2xvZyhodG1sKQoKICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2UoaHRtbCkuZGF0YTsKICAgICAgICAvLyAvL2NvbnNvbGUubG9nKCJkZGRkZGQ9PT09PSIrSlNPTi5zdHJpbmdpZnkoZGF0YSkpCiAgICAgICAgdmFyIHJlc3BvbnNlX2tleSA9IGRhdGEucmVzcG9uc2Vfa2V5OyAvL2xvZyhyZXNwb25zZV9rZXkpCiAgICAgICAgdmFyIGtleXMgPSBkYXRhLmtleXM7IC8vbG9nKGtleXMpCgogICAgICAgIHZhciBib2R5a2V5ID0gIk1JSUNkZ0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQW1Bd2dnSmNBZ0VBQW9HQWU2aEtyV0xpMXpRbWpUVDFvemJFNFFkRmVKR054dWJ4bGQ2R3JGR3hpbXhmTXNNQjZCcEpocGNUb3VBcXl3QUZwcGlLZXRVQkJiWHdZc1lVMXdOcjY0OFhWbVBtQ01DeTRyWTh2ZGxpRm5iTVVqMDg2RFU2Wisvb1hCZFdVMy9iMUcwRE4zRTl3VUxSU3djS1pUM3dqL2NDSTF2c0NtM2dqMlI1U3FrQTlZMENBd0VBQVFLQmdBSkgrNEN4VjAvekJWY0xpQkNIdlNBTm0wbDdIZXR5YlRoL2oycDBZMXNUWHJvNEFMd0FhQ1RVZXFkQmpXaUxTbzlsTndESEZ5cTh6WDkwK2dOeGE3YzVFcWNXVjlGbWxWWHI4VmhmQnpjWm8xblhlTmRYRlQ3dFEyeWFoL29kdGRjeCt2Uk1TR0pkMXQvNWs1YkRkOXdBdllkSURibE1BZyt3aUtLWjVLY2RBa0VBMWNDYWtFTjROZXhrRjV0SFBSclI2WE9ZL1hIZmtxWHhFaE1xbU5iQjlVMzRzYVRKbkxXSUhDOElYeXM2UW16ejMwVHR6Q2p1T3FLUlJ5K0ZNTTRUZHdKQkFKUVpGUGpzR0MrUnFjRzVVdlZNaU1QaG53ZS9iWEVlaFNoSzg2eUpLL2cvVWlLck84N2gzYUV1NWdjSnFCeWdUcTNCQkJvSDJtZDNwci9XK2hVTVdCc0NRUUNoZmhUSXJkRGluS2k2bFJ4cmRCbm4wT2hqZzJjd3VxSzV6elU5cC9OK1M5eDdDazh3VUk1M0RLbThqVUpFOFdBRzdXTGovb0NPV0VoK2ljNk5Jd1RkQWtFQWowWDhuaHg2QVhzZ0NZUnFsMWtsYnF0Vm1MOCs5NUtaSzdQbkxXRy9JZmpRVXkzcFBHb1NhWjdmZHF1RzhicThveWY1K2R6akUvb1RYY0J5Uys2WFJRSkFQLzVjaXkxYkwzTmhVaHNhT1Z5NTVNSFhuUGpkY1RYMEZhTGkreWJYWklmSVEyUDRyYjE5bVZxMWZlTWJDWGh6K0wxckc4b2F0NWxZS2ZwZThrODNaQT09IjsgLy9sb2coYm9keWtleSkKICAgICAgICB2YXIgYm9keWtleWl2ID0gSlNPTi5wYXJzZShSU0EuZGVjb2RlKGtleXMsIGJvZHlrZXkpKTsgLy9sb2coYm9keWtleWl2KQogICAgICAgIHZhciBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShib2R5a2V5aXYua2V5KTsgLy9sb2coa2V5KQogICAgICAgIHZhciBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGJvZHlrZXlpdi5pdik7IC8vbG9nKGl2KQogICAgICAgIHZhciBodG1sMiA9IERlY3J5cHQocmVzcG9uc2Vfa2V5LCBrZXksIGl2KTsgLy9sb2coaHRtbDIpCiAgICAgICAgdmFyIHVybCA9IEpTT04ucGFyc2UoaHRtbDIpLnVybDsgLy9sb2codXJsKQogICAgICAgIGlucHV0ID0gewogICAgICAgICAgICB1cmw6IHVybCwKICAgICAgICAgICAgcGFyc2U6IDAsCiAgICAgICAgICAgIGhlYWRlcjogcnVsZS5oZWFkZXJzCiAgICAgICAgfQogICAgICAgIHNldFJlc3VsdChkKQogICAgfSksCiAgICAvLyAgIOaOqOiNkDogJGpzLnRvU3RyaW5nKCgpID0+IHsKICAgIC8vICAgICBsZXQgZCA9IFtdOwogICAgLy8gICAgIGxldCBkYXRhID0gSlNPTi5wYXJzZShyZXF1ZXN0KGlucHV0KSkKICAgIC8vICAgICBkYXRhLmZvckVhY2goaXRlbSA9PiB7CiAgICAvLyAgICAgICBpdGVtLmRhdGFzLmZvckVhY2goaXQgPT4gewogICAgLy8gICAgICAgICBsZXQgaWQgPSBgaHR0cDovLzExNC4xMzIuNTUuMjMvYmwvbWIvYXBpLnBocC9wcm92aWRlL3ZvZC8/YWM9dmlkZW9saXN0JndkPSR7aXQudGl0bGV9JmA7CiAgICAvLyAgICAgICAgIGQucHVzaCh7CiAgICAvLyAgICAgICAgICAgdXJsOiBpZCwKICAgIC8vICAgICAgICAgICB0aXRsZTogaXQudGl0bGUsCiAgICAvLyAgICAgICAgICAgaW1nOiBpdC5waWMsCiAgICAvLyAgICAgICAgICAgZGVzYzogaXQuYWNyLAogICAgLy8gICAgICAgICB9KQogICAgLy8gICAgICAgfSk7CiAgICAvLyAgICAgfSk7CiAgICAvLyAgICAgc2V0UmVzdWx0KGQpCiAgICAvLyAgIH0pLAogICAg5LiA57qnOiAkanMudG9TdHJpbmcoKCkgPT4gewogICAgICAgIGxldCBkID0gW107CiAgICAgICAgZnVuY3Rpb24gRW5jcnlwdChwbGFpblRleHQpIHsKICAgICAgICAgICAgbGV0IGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKCJtdlhCU1c3ZWtyZUl0TnNUIik7CiAgICAgICAgICAgIGxldCBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKCIyVTNJckpMOHN6QUtwMEZqIik7CiAgICAgICAgICAgIC8vIOWwhuaWh+acrOWKoOWvhuS4uiBBRVMvQ0JDL1BLQ1M1UGFkZGluZyDmoLzlvI8KICAgICAgICAgICAgbGV0IGVuY3J5cHRlZCA9IENyeXB0b0pTLkFFUy5lbmNyeXB0KHBsYWluVGV4dCwga2V5LCB7CiAgICAgICAgICAgICAgICBpdjogaXYsCiAgICAgICAgICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQywKICAgICAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzNwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIC8vIOiOt+WPluWKoOWvhue7k+aenOW5tui9rOS4uiBIZXgg5qC85byPCiAgICAgICAgICAgIGxldCBlbmNyeXB0ZWRIZXggPSBlbmNyeXB0ZWQuY2lwaGVydGV4dC50b1N0cmluZyhDcnlwdG9KUy5lbmMuSGV4KTsKICAgICAgICAgICAgcmV0dXJuIGVuY3J5cHRlZEhleC50b1VwcGVyQ2FzZSgpOyAvLyDov5Tlm57lpKflhpkgSGV4IOagvOW8jwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBEZWNyeXB0KHdvcmQsIGtleSwgaXYpIHsKICAgICAgICAgICAgbGV0IGVuY3J5cHRlZEhleFN0ciA9IENyeXB0b0pTLmVuYy5IZXgucGFyc2Uod29yZCk7CgogICAgICAgICAgICAvLyDkvb/nlKhBRVMvQ0JDL1BLQ1M1UGFkZGluZ+aooeW8j+i/m+ihjOino+WvhgogICAgICAgICAgICBsZXQgZGVjcnlwdCA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KHsKICAgICAgICAgICAgICAgIGNpcGhlcnRleHQ6IGVuY3J5cHRlZEhleFN0cgogICAgICAgICAgICB9LCBrZXksIHsKICAgICAgICAgICAgICAgIGl2OiBpdiwKICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLCAvLyDkvb/nlKhDQkPmqKHlvI8KICAgICAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzNyAvLyDkvb/nlKhQS0NTIzfloavlhYUKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAvLyDlsIbop6Plr4blkI7nmoTmlbDmja7ovazmjaLkuLrljp/lp4vmlofmnKwKICAgICAgICAgICAgbGV0IGRlY3J5cHRlZFN0ciA9IGRlY3J5cHQudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpOwoKICAgICAgICAgICAgLy8g6L+U5Zue6Kej5a+G5ZCO55qE5paH5pysCiAgICAgICAgICAgIHJldHVybiBkZWNyeXB0ZWRTdHI7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGdldGJvZHkzKGtleSwgdCkgewogICAgICAgICAgICB2YXIgc2lnbmF0dXJlID0gJ3Rva2VuX2lkPSx0b2tlbj0xYmU4NmU4ZTE4YTlmYTE4YjJiOGQ1NDMyNjk5ZGFkMC5hYzAwOGVkNjUwZmQwODdiZmJlY2YyZmRhOWQ4MmU5ODM1MjUzZWYyNDg0M2U2YjE4ZmNkMTI4YjEwNzYzNDk3YmNmOWQ1M2U5NTlmNTM3N2NkZTAzOGMyMGNjZjlkMTdmNjA0YzliOGJiNmU2MTA0MWRlZjg2NzI5YjJmYzc0MDhiZDI0MWUyM2MyMTNhYzU3ZjAyMjZlZTY1NmUyYmIwYTU4M2FlMGU0ZjNiZjZjNmFiNmM0OTBjOWE2ZjBkOGNkZmQzNjZhYWNmNWQ4MzE5MzY3MWE4Zjc3Y2QxYWYxZmYyZTkxNDVkZTkyZWM0M2VjODdjZjRiZGM1NjNmNmU5MTlmZTMyODYxYjBlOTNiMTE4ZWMzN2Q4MDM1ZmJiM2MuNTlkZDA1YzVkOWE4YWU3MjY1Mjg3ODMxMjgyMThmMTVmZTZmMmMwYzgxNDVlZGRhYjExMmIzNzRmY2ZlM2Q3OSxwaG9uZV90eXBlPTEscmVxdWVzdF9rZXk9JyArIGtleSArICcsYXBwX2lkPTEsdGltZT0nICsgdCArICcsa2V5cz1xRHBvdEUyYmVkaW1LM1FHcWx5VjVpZVhYQzNFaGFQTFErSU9KeUhuSGZsQ2o1dy83RVNLN0ZneXdNdnJnanhieDBHa2xFRkxJNCtKc2hneVNlNjMzT0lSc3R1a3R3ZGlDeTNDVCtmTFNwdXhCSkRJbGZYUURhZUgzaWcxd2lCMEpzWjYwMVhIaUZ3ZUdNdTR0WmZuU3BIZzNPbm9MNm56L3V1clVpZjJPSzQ9KiZ6dmR2ZHZkZGJmaWtra3VtdG1kd3FwcHA/fDRZIXMhMmJyJzsgLy9sb2coc2lnbmF0dXJlKQogICAgICAgICAgICB2YXIgc2lnbmF0dXJlMiA9IG1kNShzaWduYXR1cmUpLnRvVXBwZXJDYXNlKCk7IC8vbG9nKHNpZ25hdHVyZTIpCiAgICAgICAgICAgIHZhciBib2R5ID0gJ3Rva2VuPTFiZTg2ZThlMThhOWZhMThiMmI4ZDU0MzI2OTlkYWQwLmFjMDA4ZWQ2NTBmZDA4N2JmYmVjZjJmZGE5ZDgyZTk4MzUyNTNlZjI0ODQzZTZiMThmY2QxMjhiMTA3NjM0OTdiY2Y5ZDUzZTk1OWY1Mzc3Y2RlMDM4YzIwY2NmOWQxN2Y2MDRjOWI4YmI2ZTYxMDQxZGVmODY3MjliMmZjNzQwOGJkMjQxZTIzYzIxM2FjNTdmMDIyNmVlNjU2ZTJiYjBhNTgzYWUwZTRmM2JmNmM2YWI2YzQ5MGM5YTZmMGQ4Y2RmZDM2NmFhY2Y1ZDgzMTkzNjcxYThmNzdjZDFhZjFmZjJlOTE0NWRlOTJlYzQzZWM4N2NmNGJkYzU2M2Y2ZTkxOWZlMzI4NjFiMGU5M2IxMThlYzM3ZDgwMzVmYmIzYy41OWRkMDVjNWQ5YThhZTcyNjUyODc4MzEyODIxOGYxNWZlNmYyYzBjODE0NWVkZGFiMTEyYjM3NGZjZmUzZDc5JnRva2VuX2lkPSZwaG9uZV90eXBlPTEmdGltZT0nICsgdCArICcmcGhvbmVfbW9kZWw9eGlhb21pLTIyMDIxMjExcmMma2V5cz1xRHBvdEUyYmVkaW1LM1FHcWx5VjVpZVhYQzNFaGFQTFElMkJJT0p5SG5IZmxDajV3JTJGN0VTSzdGZ3l3TXZyZ2p4YngwR2tsRUZMSTQlMkJKc2hneVNlNjMzT0lSc3R1a3R3ZGlDeTNDVCUyQmZMU3B1eEJKRElsZlhRRGFlSDNpZzF3aUIwSnNaNjAxWEhpRndlR011NHRaZm5TcEhnM09ub0w2bnolMkZ1dXJVaWYyT0s0JTNEJnJlcXVlc3Rfa2V5PScgKyBrZXkgKyAnJnNpZ25hdHVyZT0nICsgc2lnbmF0dXJlMiArICcmYXBwX2lkPTEmYWRfdmVyc2lvbj0xJzsKICAgICAgICAgICAgcmV0dXJuIGJvZHkKICAgICAgICB9CiAgICAgICAgY29uc3QgYm9keWtleSA9ICJNSUlDZGdJQkFEQU5CZ2txaGtpRzl3MEJBUUVGQUFTQ0FtQXdnZ0pjQWdFQUFvR0FlNmhLcldMaTF6UW1qVFQxb3piRTRRZEZlSkdOeHVieGxkNkdyRkd4aW14Zk1zTUI2QnBKaHBjVG91QXF5d0FGcHBpS2V0VUJCYlh3WXNZVTF3TnI2NDhYVm1QbUNNQ3k0clk4dmRsaUZuYk1VajA4NkRVNlorL29YQmRXVTMvYjFHMEROM0U5d1VMUlN3Y0taVDN3ai9jQ0kxdnNDbTNnajJSNVNxa0E5WTBDQXdFQUFRS0JnQUpIKzRDeFYwL3pCVmNMaUJDSHZTQU5tMGw3SGV0eWJUaC9qMnAwWTFzVFhybzRBTHdBYUNUVWVxZEJqV2lMU285bE53REhGeXE4elg5MCtnTnhhN2M1RXFjV1Y5Rm1sVlhyOFZoZkJ6Y1pvMW5YZU5kWEZUN3RRMnlhaC9vZHRkY3grdlJNU0dKZDF0LzVrNWJEZDl3QXZZZElEYmxNQWcrd2lLS1o1S2NkQWtFQTFjQ2FrRU40TmV4a0Y1dEhQUnJSNlhPWS9YSGZrcVh4RWhNcW1OYkI5VTM0c2FUSm5MV0lIQzhJWHlzNlFtenozMFR0ekNqdU9xS1JSeStGTU00VGR3SkJBSlFaRlBqc0dDK1JxY0c1VXZWTWlNUGhud2UvYlhFZWhTaEs4NnlKSy9nL1VpS3JPODdoM2FFdTVnY0pxQnlnVHEzQkJCb0gybWQzcHIvVytoVU1XQnNDUVFDaGZoVElyZERpbktpNmxSeHJkQm5uME9oamcyY3d1cUs1enpVOXAvTitTOXg3Q2s4d1VJNTNES204alVKRThXQUc3V0xqL29DT1dFaCtpYzZOSXdUZEFrRUFqMFg4bmh4NkFYc2dDWVJxbDFrbGJxdFZtTDgrOTVLWks3UG5MV0cvSWZqUVV5M3BQR29TYVo3ZmRxdUc4YnE4b3lmNStkempFL29UWGNCeVMrNlhSUUpBUC81Y2l5MWJMM05oVWhzYU9WeTU1TUhYblBqZGNUWDBGYUxpK3liWFpJZklRMlA0cmIxOW1WcTFmZU1iQ1hoeitMMXJHOG9hdDVsWUtmcGU4azgzWkE9PSI7CiAgICAgICAgZnVuY3Rpb24gZ2V0aHRtbCh1LCBib2R5LCBoZWFkZXJzKSB7CiAgICAgICAgICAgIHZhciBoZCA9IGZldGNoKHUsIHsKICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsCiAgICAgICAgICAgICAgICBib2R5OiBib2R5LAogICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCiAgICAgICAgICAgICAgICByZWplY3RDb2Rpbmc6IHRydWUKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHZhciBiYW5uZXIgPSBKU09OLnBhcnNlKGhkKS5kYXRhOwogICAgICAgICAgICB2YXIgcmVzcG9uc2Vfa2V5ID0gYmFubmVyLnJlc3BvbnNlX2tleTsgLy9sb2coKQogICAgICAgICAgICB2YXIga2V5cyA9IGJhbm5lci5rZXlzOyAvL2xvZyhrZXlzKQogICAgICAgICAgICB2YXIgYm9keWtleWl2ID0gSlNPTi5wYXJzZShSU0EuZGVjb2RlKGtleXMsIGJvZHlrZXkpKTsKICAgICAgICAgICAgdmFyIGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGJvZHlrZXlpdi5rZXkpOwogICAgICAgICAgICB2YXIgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShib2R5a2V5aXYuaXYpOwogICAgICAgICAgICB2YXIgaHRtbCA9IERlY3J5cHQocmVzcG9uc2Vfa2V5LCBrZXksIGl2KTsKICAgICAgICAgICAgcmV0dXJuIGh0bWwKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gaHFzdWIoTVlfQ0FURSkgewogICAgICAgICAgICB2YXIgc3VicyA9IFsiNSIsICIxMiIsICIzMCIsICIyMiIsICIiXQogICAgICAgICAgICB2YXIgdGlkcyA9IFsiMSIsICIyIiwgIjQiLCAiMyIsICI2NCJdCiAgICAgICAgICAgIGxldCBpbmRleCA9IHRpZHMuaW5kZXhPZihNWV9DQVRFKTsKICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHN1YnNbaW5kZXhdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAiIjsgLy8g5oiW6ICF5qC55o2u6ZyA6KaB6L+U5Zue5YW25LuW5YC8CiAgICAgICAgfQogICAgICAgIHZhciBoZWFkZXJzID0gewogICAgICAgICAgICAnQ2FjaGUtQ29udHJvbCc6ICduby1jYWNoZScsCiAgICAgICAgICAgICdWZXJzaW9uJzogJzI0MDYwMjUnLAogICAgICAgICAgICAnUGFja2FnZU5hbWUnOiAnY29tLnVmMDc2YmYwYzI0Ni5xZTQzOWYwZDVlLm04YWFmNTZiNzI1YS5pZmViNjQ3MzQ2ZicsCiAgICAgICAgICAgICdWZXInOiAnMS45LjInLAogICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL2FwaS44dXRkdGNxLmNvbScsCiAgICAgICAgICAgICdYLUN1c3RvbWVyLUNsaWVudC1JcCc6ICcxMjcuMC4wLjEnLAogICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsCiAgICAgICAgICAgICdIb3N0JzogJ2FwaS44dXRkdGNxLmNvbScsCiAgICAgICAgICAgICdDb25uZWN0aW9uJzogJ0tlZXAtQWxpdmUnLAogICAgICAgICAgICAvLydBY2NlcHQtRW5jb2RpbmcnOiAnZ3ppcCcsCiAgICAgICAgICAgICdVc2VyLUFnZW50JzogJ29raHR0cC8zLjEyLjAnCiAgICAgICAgfQogICAgICAgIHZhciB0aWQgPSBNWV9DQVRFOwogICAgICAgIHZhciBzdWIgPSBocXN1YihNWV9DQVRFKQogICAgICAgIHZhciB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDA7CiAgICAgICAgdmFyIHQgPSB0aW1lc3RhbXAudG9TdHJpbmcoKS5zcGxpdCgnLicpWzBdOwogICAgICAgIHZhciByZXF1ZXN0X2tleSA9IEpTT04uc3RyaW5naWZ5KHsgImFyZWEiOiAoTVlfRkwuYXJlYSB8fCAwKS50b1N0cmluZygpLCAic3ViIjogKE1ZX0ZMLnN1YiB8fCBzdWIpLnRvU3RyaW5nKCksICJ5ZWFyIjogKE1ZX0ZMLnllYXIgfHwgMCkudG9TdHJpbmcoKSwgInBhZ2VTaXplIjogIjMwIiwgInNvcnQiOiAoTVlfRkwuc29ydCB8fCAiZF9pZCIpLnRvU3RyaW5nKCksICJwYWdlIjogTVlfUEFHRSwgInRpZCI6IHRpZCB9KTsKICAgICAgICB2YXIgcmVxdWVzdF9rZXkyID0gRW5jcnlwdChyZXF1ZXN0X2tleSk7CiAgICAgICAgdmFyIGJvZHkgPSBnZXRib2R5MyhyZXF1ZXN0X2tleTIsIHQpCiAgICAgICAgdmFyIGh0bWwyID0gZ2V0aHRtbCgiaHR0cHM6Ly9hcGkuOHV0ZHRjcS5jb20vQXBwL0luZGV4TGlzdC9pbmRleExpc3QiLCBib2R5LCBoZWFkZXJzKQogICAgICAgIC8vY29uc29sZS5sb2coInR0dHR0bGllYj09IitodG1sMikKICAgICAgICB2YXIgbGlzdCA9IEpTT04ucGFyc2UoaHRtbDIpLmxpc3Q7IC8vbG9nKGxpc3QpCiAgICAgICAgbGlzdC5mb3JFYWNoKGRhdGEgPT4gewogICAgICAgICAgICBkLnB1c2goewogICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEudm9kX25hbWUsCiAgICAgICAgICAgICAgICBkZXNjOiBkYXRhLnZvZF9jb250aW51ID09IDAgPyAn55S15b2xJyA6ICfmm7TmlrDoh7MnK2RhdGEudm9kX2NvbnRpbnUrJ+mbhicsCiAgICAgICAgICAgICAgICB5ZWFyOiBkYXRhLnZvZF9zY3JvZSwKICAgICAgICAgICAgICAgIGltZzogZGF0YS52b2RfcGljLAogICAgICAgICAgICAgICAgdXJsOiBgJHtkYXRhLnZvZF9pZH0vJHtkYXRhLnZvZF9jb250aW51fWAsCiAgICAgICAgICAgIH0pCiAgICAgICAgfSkKICAgICAgICBzZXRSZXN1bHQoZCkKICAgIH0pLAogICAg5LqM57qnOiAkanMudG9TdHJpbmcoKCkgPT4gewogICAgICAgIC8vIHZhciBkID0gW107CiAgICAgICAgZnVuY3Rpb24gRW5jcnlwdChwbGFpblRleHQpIHsKICAgICAgICAgICAgbGV0IGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKCJtdlhCU1c3ZWtyZUl0TnNUIik7CiAgICAgICAgICAgIGxldCBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKCIyVTNJckpMOHN6QUtwMEZqIik7CiAgICAgICAgICAgIC8vIOWwhuaWh+acrOWKoOWvhuS4uiBBRVMvQ0JDL1BLQ1M1UGFkZGluZyDmoLzlvI8KICAgICAgICAgICAgbGV0IGVuY3J5cHRlZCA9IENyeXB0b0pTLkFFUy5lbmNyeXB0KHBsYWluVGV4dCwga2V5LCB7CiAgICAgICAgICAgICAgICBpdjogaXYsCiAgICAgICAgICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQywKICAgICAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzNwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIC8vIOiOt+WPluWKoOWvhue7k+aenOW5tui9rOS4uiBIZXgg5qC85byPCiAgICAgICAgICAgIGxldCBlbmNyeXB0ZWRIZXggPSBlbmNyeXB0ZWQuY2lwaGVydGV4dC50b1N0cmluZyhDcnlwdG9KUy5lbmMuSGV4KTsKICAgICAgICAgICAgcmV0dXJuIGVuY3J5cHRlZEhleC50b1VwcGVyQ2FzZSgpOyAvLyDov5Tlm57lpKflhpkgSGV4IOagvOW8jwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBEZWNyeXB0KHdvcmQsIGtleSwgaXYpIHsKICAgICAgICAgICAgbGV0IGVuY3J5cHRlZEhleFN0ciA9IENyeXB0b0pTLmVuYy5IZXgucGFyc2Uod29yZCk7CgogICAgICAgICAgICAvLyDkvb/nlKhBRVMvQ0JDL1BLQ1M1UGFkZGluZ+aooeW8j+i/m+ihjOino+WvhgogICAgICAgICAgICBsZXQgZGVjcnlwdCA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KHsKICAgICAgICAgICAgICAgIGNpcGhlcnRleHQ6IGVuY3J5cHRlZEhleFN0cgogICAgICAgICAgICB9LCBrZXksIHsKICAgICAgICAgICAgICAgIGl2OiBpdiwKICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLCAvLyDkvb/nlKhDQkPmqKHlvI8KICAgICAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzNyAvLyDkvb/nlKhQS0NTIzfloavlhYUKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAvLyDlsIbop6Plr4blkI7nmoTmlbDmja7ovazmjaLkuLrljp/lp4vmlofmnKwKICAgICAgICAgICAgbGV0IGRlY3J5cHRlZFN0ciA9IGRlY3J5cHQudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpOwoKICAgICAgICAgICAgLy8g6L+U5Zue6Kej5a+G5ZCO55qE5paH5pysCiAgICAgICAgICAgIHJldHVybiBkZWNyeXB0ZWRTdHI7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGdldGJvZHkyKGtleSwgdCkgewogICAgICAgICAgICB2YXIgc2lnbmF0dXJlID0gJ3Rva2VuX2lkPSx0b2tlbj0xYmU4NmU4ZTE4YTlmYTE4YjJiOGQ1NDMyNjk5ZGFkMC5hYzAwOGVkNjUwZmQwODdiZmJlY2YyZmRhOWQ4MmU5ODM1MjUzZWYyNDg0M2U2YjE4ZmNkMTI4YjEwNzYzNDk3YmNmOWQ1M2U5NTlmNTM3N2NkZTAzOGMyMGNjZjlkMTdmNjA0YzliOGJiNmU2MTA0MWRlZjg2NzI5YjJmYzc0MDhiZDI0MWUyM2MyMTNhYzU3ZjAyMjZlZTY1NmUyYmIwYTU4M2FlMGU0ZjNiZjZjNmFiNmM0OTBjOWE2ZjBkOGNkZmQzNjZhYWNmNWQ4MzE5MzY3MWE4Zjc3Y2QxYWYxZmYyZTkxNDVkZTkyZWM0M2VjODdjZjRiZGM1NjNmNmU5MTlmZTMyODYxYjBlOTNiMTE4ZWMzN2Q4MDM1ZmJiM2MuNTlkZDA1YzVkOWE4YWU3MjY1Mjg3ODMxMjgyMThmMTVmZTZmMmMwYzgxNDVlZGRhYjExMmIzNzRmY2ZlM2Q3OSxwaG9uZV90eXBlPTEscmVxdWVzdF9rZXk9JyArIGtleSArICcsYXBwX2lkPTEsdGltZT0nICsgdCArICcsa2V5cz1RbXhpNWNpV1hiUXprcjdvK1NVTmlVdVF4UUVmOC9BVnlVV1k0VC9CR2hjWEJJVXo0bk95SEJHZjlBNEtiTTBpS0YzeXA5TTdXQVkwcnJzNVB6ZFRBT0I0NXBsY1Myelowd1VpYmNYdUdKMjlWVkdSV0tHd0U5enUydkx3aGZnalRhYURwWG80cmJ5KzdHeFhUa3R6Sm14dm5lT1VkWWVIaStQWnNUaGx2UEk9KiZ6dmR2ZHZkZGJmaWtra3VtdG1kd3FwcHA/fDRZIXMhMmJyJzsgLy9sb2coc2lnbmF0dXJlKQogICAgICAgICAgICB2YXIgc2lnbmF0dXJlMiA9IG1kNShzaWduYXR1cmUpOyAvL2xvZyhzaWduYXR1cmUyKQogICAgICAgICAgICB2YXIgYm9keSA9ICd0b2tlbj0xYmU4NmU4ZTE4YTlmYTE4YjJiOGQ1NDMyNjk5ZGFkMC5hYzAwOGVkNjUwZmQwODdiZmJlY2YyZmRhOWQ4MmU5ODM1MjUzZWYyNDg0M2U2YjE4ZmNkMTI4YjEwNzYzNDk3YmNmOWQ1M2U5NTlmNTM3N2NkZTAzOGMyMGNjZjlkMTdmNjA0YzliOGJiNmU2MTA0MWRlZjg2NzI5YjJmYzc0MDhiZDI0MWUyM2MyMTNhYzU3ZjAyMjZlZTY1NmUyYmIwYTU4M2FlMGU0ZjNiZjZjNmFiNmM0OTBjOWE2ZjBkOGNkZmQzNjZhYWNmNWQ4MzE5MzY3MWE4Zjc3Y2QxYWYxZmYyZTkxNDVkZTkyZWM0M2VjODdjZjRiZGM1NjNmNmU5MTlmZTMyODYxYjBlOTNiMTE4ZWMzN2Q4MDM1ZmJiM2MuNTlkZDA1YzVkOWE4YWU3MjY1Mjg3ODMxMjgyMThmMTVmZTZmMmMwYzgxNDVlZGRhYjExMmIzNzRmY2ZlM2Q3OSZ0b2tlbl9pZD0mcGhvbmVfdHlwZT0xJnRpbWU9JyArIHQgKyAnJnBob25lX21vZGVsPXhpYW9taS0yMjAyMTIxMXJjJmtleXM9UW14aTVjaVdYYlF6a3I3byUyQlNVTmlVdVF4UUVmOCUyRkFWeVVXWTRUJTJGQkdoY1hCSVV6NG5PeUhCR2Y5QTRLYk0waUtGM3lwOU03V0FZMHJyczVQemRUQU9CNDVwbGNTMnpaMHdVaWJjWHVHSjI5VlZHUldLR3dFOXp1MnZMd2hmZ2pUYWFEcFhvNHJieSUyQjdHeFhUa3R6Sm14dm5lT1VkWWVIaSUyQlBac1RobHZQSSUzRCZyZXF1ZXN0X2tleT0nICsga2V5ICsgJyZzaWduYXR1cmU9JyArIHNpZ25hdHVyZTIgKyAnJmFwcF9pZD0xJmFkX3ZlcnNpb249MSc7IC8vbG9nKGJvZHkpCiAgICAgICAgICAgIHJldHVybiBib2R5CiAgICAgICAgfQogICAgICAgIGNvbnN0IGJvZHlrZXkgPSAiTUlJQ2RnSUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NBbUF3Z2dKY0FnRUFBb0dBZTZoS3JXTGkxelFtalRUMW96YkU0UWRGZUpHTnh1YnhsZDZHckZHeGlteGZNc01CNkJwSmhwY1RvdUFxeXdBRnBwaUtldFVCQmJYd1lzWVUxd05yNjQ4WFZtUG1DTUN5NHJZOHZkbGlGbmJNVWowODZEVTZaKy9vWEJkV1UzL2IxRzBETjNFOXdVTFJTd2NLWlQzd2ovY0NJMXZzQ20zZ2oyUjVTcWtBOVkwQ0F3RUFBUUtCZ0FKSCs0Q3hWMC96QlZjTGlCQ0h2U0FObTBsN0hldHliVGgvajJwMFkxc1RYcm80QUx3QWFDVFVlcWRCaldpTFNvOWxOd0RIRnlxOHpYOTArZ054YTdjNUVxY1dWOUZtbFZYcjhWaGZCemNabzFuWGVOZFhGVDd0UTJ5YWgvb2R0ZGN4K3ZSTVNHSmQxdC81azViRGQ5d0F2WWRJRGJsTUFnK3dpS0taNUtjZEFrRUExY0Nha0VONE5leGtGNXRIUFJyUjZYT1kvWEhma3FYeEVoTXFtTmJCOVUzNHNhVEpuTFdJSEM4SVh5czZRbXp6MzBUdHpDanVPcUtSUnkrRk1NNFRkd0pCQUpRWkZQanNHQytScWNHNVV2Vk1pTVBobndlL2JYRWVoU2hLODZ5SksvZy9VaUtyTzg3aDNhRXU1Z2NKcUJ5Z1RxM0JCQm9IMm1kM3ByL1craFVNV0JzQ1FRQ2hmaFRJcmREaW5LaTZsUnhyZEJubjBPaGpnMmN3dXFLNXp6VTlwL04rUzl4N0NrOHdVSTUzREttOGpVSkU4V0FHN1dMai9vQ09XRWgraWM2Tkl3VGRBa0VBajBYOG5oeDZBWHNnQ1lScWwxa2xicXRWbUw4Kzk1S1pLN1BuTFdHL0lmalFVeTNwUEdvU2FaN2ZkcXVHOGJxOG95ZjUrZHpqRS9vVFhjQnlTKzZYUlFKQVAvNWNpeTFiTDNOaFVoc2FPVnk1NU1IWG5QamRjVFgwRmFMaSt5YlhaSWZJUTJQNHJiMTltVnExZmVNYkNYaHorTDFyRzhvYXQ1bFlLZnBlOGs4M1pBPT0iOwogICAgICAgIGZ1bmN0aW9uIGdldGh0bWwodSwgYm9keSwgaGVhZGVycykgewogICAgICAgICAgICB2YXIgaGQgPSBmZXRjaCh1LCB7CiAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLAogICAgICAgICAgICAgICAgYm9keTogYm9keSwKICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAogICAgICAgICAgICAgICAgcmVqZWN0Q29kaW5nOiB0cnVlCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB2YXIgYmFubmVyID0gSlNPTi5wYXJzZShoZCkuZGF0YTsKICAgICAgICAgICAgdmFyIHJlc3BvbnNlX2tleSA9IGJhbm5lci5yZXNwb25zZV9rZXk7IC8vbG9nKCkKICAgICAgICAgICAgdmFyIGtleXMgPSBiYW5uZXIua2V5czsgLy9sb2coa2V5cykKICAgICAgICAgICAgdmFyIGJvZHlrZXlpdiA9IEpTT04ucGFyc2UoUlNBLmRlY29kZShrZXlzLCBib2R5a2V5KSk7CiAgICAgICAgICAgIHZhciBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShib2R5a2V5aXYua2V5KTsKICAgICAgICAgICAgdmFyIGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoYm9keWtleWl2Lml2KTsKICAgICAgICAgICAgdmFyIGh0bWwgPSBEZWNyeXB0KHJlc3BvbnNlX2tleSwga2V5LCBpdik7CiAgICAgICAgICAgIHJldHVybiBodG1sCiAgICAgICAgfQogICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7CiAgICAgICAgICAgICdDYWNoZS1Db250cm9sJzogJ25vLWNhY2hlJywKICAgICAgICAgICAgJ1ZlcnNpb24nOiAnMjQwNjAyNScsCiAgICAgICAgICAgICdQYWNrYWdlTmFtZSc6ICdjb20udWYwNzZiZjBjMjQ2LnFlNDM5ZjBkNWUubThhYWY1NmI3MjVhLmlmZWI2NDczNDZmJywKICAgICAgICAgICAgJ1Zlcic6ICcxLjkuMicsCiAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vYXBpLjh1dGR0Y3EuY29tJywKICAgICAgICAgICAgJ1gtQ3VzdG9tZXItQ2xpZW50LUlwJzogJzEyNy4wLjAuMScsCiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywKICAgICAgICAgICAgJ0hvc3QnOiAnYXBpLjh1dGR0Y3EuY29tJywKICAgICAgICAgICAgJ0Nvbm5lY3Rpb24nOiAnS2VlcC1BbGl2ZScsCiAgICAgICAgICAgIC8vJ0FjY2VwdC1FbmNvZGluZyc6ICdnemlwJywKICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiAnb2todHRwLzMuMTIuMCcKICAgICAgICB9CiAgICAgICAgLy8gdmFyIE1ZX1VSTCA9IE1ZX1VSTC5zcGxpdCgiIyMiKVsxXTsgLy9sb2coTVlfVVJMKQogICAgICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZSgnaHR0cHM6Ly9hcGkuOHV0ZHRjcS5jb20vJywgJycpOwogICAgICAgIC8vY29uc29sZS5sb2coImlucHV0LS0tLT09PT0iK2lucHV0KQoKICAgICAgICAvLyB2YXIgdm9kX2NvbnRpbnUgPSBpbnB1dC5zcGxpdCgiLyIpWzFdOyAvL2xvZyh2b2RfaWQpCiAgICAgICAgdmFyIHZvZF9pZCA9IGlucHV0LnNwbGl0KCIvIilbMF07CiAgICAgICAgLy9jb25zb2xlLmxvZygidm9kLS0tLT09PT0iK3ZvZF9pZCkKICAgICAgICB2YXIgdGltZXN0YW1wID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwOwogICAgICAgIHZhciB0ID0gdGltZXN0YW1wLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVswXTsKICAgICAgICB2YXIgcmVxdWVzdF9rZXkgPSBKU09OLnN0cmluZ2lmeSh7CiAgICAgICAgICAgICJ0b2tlbl9pZCI6ICIzOTM2NjgiLAogICAgICAgICAgICAidm9kX2lkIjogdm9kX2lkLAogICAgICAgICAgICAibW9iaWxlX3RpbWUiOiB0LAogICAgICAgICAgICAidG9rZW4iOiAiMWJlODZlOGUxOGE5ZmExOGIyYjhkNTQzMjY5OWRhZDAuYWMwMDhlZDY1MGZkMDg3YmZiZWNmMmZkYTlkODJlOTgzNTI1M2VmMjQ4NDNlNmIxOGZjZDEyOGIxMDc2MzQ5N2JjZjlkNTNlOTU5ZjUzNzdjZGUwMzhjMjBjY2Y5ZDE3ZjYwNGM5YjhiYjZlNjEwNDFkZWY4NjcyOWIyZmM3NDA4YmQyNDFlMjNjMjEzYWM1N2YwMjI2ZWU2NTZlMmJiMGE1ODNhZTBlNGYzYmY2YzZhYjZjNDkwYzlhNmYwZDhjZGZkMzY2YWFjZjVkODMxOTM2NzFhOGY3N2NkMWFmMWZmMmU5MTQ1ZGU5MmVjNDNlYzg3Y2Y0YmRjNTYzZjZlOTE5ZmUzMjg2MWIwZTkzYjExOGVjMzdkODAzNWZiYjNjLjU5ZGQwNWM1ZDlhOGFlNzI2NTI4NzgzMTI4MjE4ZjE1ZmU2ZjJjMGM4MTQ1ZWRkYWIxMTJiMzc0ZmNmZTNkNzkiCiAgICAgICAgfSk7CiAgICAgICAgdmFyIHJlcXVlc3Rfa2V5MiA9IEVuY3J5cHQocmVxdWVzdF9rZXkpOwogICAgICAgIHZhciBib2R5ID0gZ2V0Ym9keTIocmVxdWVzdF9rZXkyLCB0KQogICAgICAgIHZhciBodG1sID0gZ2V0aHRtbCgiaHR0cHM6Ly9hcGkuOHV0ZHRjcS5jb20vQXBwL0luZGV4UGxheS9wbGF5SW5mbyIsIGJvZHksIGhlYWRlcnMpCiAgICAgICAgdmFyIGRhdGEyID0gSlNPTi5wYXJzZShodG1sKS52b2RJbmZvOyAvL2NvbnNvbGUubG9nKCJod3Vkd3VkZy09PT09IitKU09OLnN0cmluZ2lmeShkYXRhMikpCiAgICAgICAgdmFyIHJlcXVlc3Rfa2V5MyA9IEpTT04uc3RyaW5naWZ5KHsKICAgICAgICAgICAgInZ1cmxfY2xvdWRfaWQiOiAiMiIsCiAgICAgICAgICAgICJ2b2RfZF9pZCI6IHZvZF9pZAogICAgICAgIH0pOyAvL2xvZyhyZXF1ZXN0X2tleTMpCiAgICAgICAgdmFyIHJlcXVlc3Rfa2V5NCA9IEVuY3J5cHQocmVxdWVzdF9rZXkzKTsgLy9sb2cocmVxdWVzdF9rZXk0KQogICAgICAgIHZhciBib2R5MiA9IGdldGJvZHkyKHJlcXVlc3Rfa2V5NCwgdCkKCiAgICAgICAgdmFyIGh0bWwzID0gZ2V0aHRtbCgiaHR0cHM6Ly9hcGkuOHV0ZHRjcS5jb20vQXBwL1Jlc291cmNlL1Z1cmwvc2hvdyIsIGJvZHkyLCBoZWFkZXJzKTsgLy9sb2coaHRtbDMpCgogICAgICAgIHZhciBsaXN0ID0gSlNPTi5wYXJzZShodG1sMykubGlzdDsKICAgICAgICBsZXQgbm5ubW0gPSBbXTsKICAgICAgICBsaXN0LmZvckVhY2goaXRlbSA9PiB7CiAgICAgICAgICAgIC8vIOiOt+WPlnBsYXnlr7nosaHnmoTmiYDmnInlgLwKICAgICAgICAgICAgY29uc3QgcGxheVBhcmFtcyA9IE9iamVjdC52YWx1ZXMoaXRlbS5wbGF5KTsKICAgICAgICAgICAgbGV0IGxhc3RQYXJhbSA9IG51bGw7CgogICAgICAgICAgICAvLyDku47mlbDnu4TnmoTmnIDlkI7kuIDkuKrlhYPntKDlvIDlp4vvvIzlkJHliY3mn6Xmib7vvIznm7TliLDmib7liLDkuIDkuKrpnZ7nqbrnmoRwYXJhbeWAvAogICAgICAgICAgICBmb3IgKGxldCBpID0gcGxheVBhcmFtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICAgICAgICAgICAgaWYgKHBsYXlQYXJhbXNbaV0ucGFyYW0pIHsKICAgICAgICAgICAgICAgICAgICBsYXN0UGFyYW0gPSBwbGF5UGFyYW1zW2ldLnBhcmFtOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyDkvb/nlKjmraPliJnooajovr7lvI/ljLnphY12dXJsX2lkCiAgICAgICAgICAgIGNvbnN0IHZ1cmxJZE1hdGNoID0gbGFzdFBhcmFtLm1hdGNoKC92dXJsX2lkPShcZCspLyk7CiAgICAgICAgICAgIGNvbnN0IHJlc29sdXRpb249bGFzdFBhcmFtLm1hdGNoKC9yZXNvbHV0aW9uPShcZCspLyk7CiAgICAgICAgICAgIC8vIOWmguaenOWMuemFjeaIkOWKn++8jOWwhnRpdGxl5ZKMdnVybF9pZOe7hOWQiOWQjnB1c2jliLByZXN1bHTmlbDnu4QKICAgICAgICAgICAgaWYgKHZ1cmxJZE1hdGNoKSB7CiAgICAgICAgICAgICAgICBubm5tbS5wdXNoKGAke2l0ZW0udGl0bGV9JCR7dm9kX2lkfS8ke3Z1cmxJZE1hdGNoWzFdfT8ke3Jlc29sdXRpb25bMV19YCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBWT0QgPSB7CiAgICAgICAgICAgIHRpdGxlOiBkYXRhMi52b2RfbmFtZSwKICAgICAgICAgICAgdHlwZTogZGF0YTIudmlkZW9UYWcudG9TdHJpbmcoKSwKICAgICAgICAgICAgZGVzYzogZGF0YTIudm9kX3VzZV9jb250ZW50LAogICAgICAgICAgICB2b2RfYWN0b3I6IGRhdGEyLnZvZF9hY3RvciwKICAgICAgICAgICAgdm9kX2FyZWE6IGRhdGEyLnZvZF9hcmVhLAogICAgICAgICAgICB2b2RfZGlyZWN0b3I6IGRhdGEyLnZvZF9kaXJlY3RvciwKICAgICAgICAgICAgaW1nOiBkYXRhMi52b2RfcGljLAogICAgICAgICAgICB2b2RfcGxheV9mcm9tOiAn5ou+5YWJ5ZeR55Oc5a2QJywKICAgICAgICAgICAgdm9kX3BsYXlfdXJsOiBubm5tbS5qb2luKCcjJykKICAgICAgICB9CiAgICB9KSwKICAgIOaQnOe0ojogJGpzLnRvU3RyaW5nKCgpID0+IHsKICAgICAgICBsZXQgZCA9IFtdOwogICAgICAgIGZ1bmN0aW9uIEVuY3J5cHQocGxhaW5UZXh0KSB7CiAgICAgICAgICAgIGxldCBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSgibXZYQlNXN2VrcmVJdE5zVCIpOwogICAgICAgICAgICBsZXQgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSgiMlUzSXJKTDhzekFLcDBGaiIpOwogICAgICAgICAgICAvLyDlsIbmlofmnKzliqDlr4bkuLogQUVTL0NCQy9QS0NTNVBhZGRpbmcg5qC85byPCiAgICAgICAgICAgIGxldCBlbmNyeXB0ZWQgPSBDcnlwdG9KUy5BRVMuZW5jcnlwdChwbGFpblRleHQsIGtleSwgewogICAgICAgICAgICAgICAgaXY6IGl2LAogICAgICAgICAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsCiAgICAgICAgICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczcKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAvLyDojrflj5bliqDlr4bnu5PmnpzlubbovazkuLogSGV4IOagvOW8jwogICAgICAgICAgICBsZXQgZW5jcnlwdGVkSGV4ID0gZW5jcnlwdGVkLmNpcGhlcnRleHQudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkhleCk7CiAgICAgICAgICAgIHJldHVybiBlbmNyeXB0ZWRIZXgudG9VcHBlckNhc2UoKTsgLy8g6L+U5Zue5aSn5YaZIEhleCDmoLzlvI8KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gRGVjcnlwdCh3b3JkLCBrZXksIGl2KSB7CiAgICAgICAgICAgIGxldCBlbmNyeXB0ZWRIZXhTdHIgPSBDcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHdvcmQpOwoKICAgICAgICAgICAgLy8g5L2/55SoQUVTL0NCQy9QS0NTNVBhZGRpbmfmqKHlvI/ov5vooYzop6Plr4YKICAgICAgICAgICAgbGV0IGRlY3J5cHQgPSBDcnlwdG9KUy5BRVMuZGVjcnlwdCh7CiAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0OiBlbmNyeXB0ZWRIZXhTdHIKICAgICAgICAgICAgfSwga2V5LCB7CiAgICAgICAgICAgICAgICBpdjogaXYsCiAgICAgICAgICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQywgLy8g5L2/55SoQ0JD5qih5byPCiAgICAgICAgICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczcgLy8g5L2/55SoUEtDUyM35aGr5YWFCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgLy8g5bCG6Kej5a+G5ZCO55qE5pWw5o2u6L2s5o2i5Li65Y6f5aeL5paH5pysCiAgICAgICAgICAgIGxldCBkZWNyeXB0ZWRTdHIgPSBkZWNyeXB0LnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTsKCiAgICAgICAgICAgIC8vIOi/lOWbnuino+WvhuWQjueahOaWh+acrAogICAgICAgICAgICByZXR1cm4gZGVjcnlwdGVkU3RyOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBnZXRib2R5MyhrZXksIHQpIHsKICAgICAgICAgICAgdmFyIHNpZ25hdHVyZSA9ICd0b2tlbl9pZD0sdG9rZW49MWJlODZlOGUxOGE5ZmExOGIyYjhkNTQzMjY5OWRhZDAuYWMwMDhlZDY1MGZkMDg3YmZiZWNmMmZkYTlkODJlOTgzNTI1M2VmMjQ4NDNlNmIxOGZjZDEyOGIxMDc2MzQ5N2JjZjlkNTNlOTU5ZjUzNzdjZGUwMzhjMjBjY2Y5ZDE3ZjYwNGM5YjhiYjZlNjEwNDFkZWY4NjcyOWIyZmM3NDA4YmQyNDFlMjNjMjEzYWM1N2YwMjI2ZWU2NTZlMmJiMGE1ODNhZTBlNGYzYmY2YzZhYjZjNDkwYzlhNmYwZDhjZGZkMzY2YWFjZjVkODMxOTM2NzFhOGY3N2NkMWFmMWZmMmU5MTQ1ZGU5MmVjNDNlYzg3Y2Y0YmRjNTYzZjZlOTE5ZmUzMjg2MWIwZTkzYjExOGVjMzdkODAzNWZiYjNjLjU5ZGQwNWM1ZDlhOGFlNzI2NTI4NzgzMTI4MjE4ZjE1ZmU2ZjJjMGM4MTQ1ZWRkYWIxMTJiMzc0ZmNmZTNkNzkscGhvbmVfdHlwZT0xLHJlcXVlc3Rfa2V5PScgKyBrZXkgKyAnLGFwcF9pZD0xLHRpbWU9JyArIHQgKyAnLGtleXM9cURwb3RFMmJlZGltSzNRR3FseVY1aWVYWEMzRWhhUExRK0lPSnlIbkhmbENqNXcvN0VTSzdGZ3l3TXZyZ2p4YngwR2tsRUZMSTQrSnNoZ3lTZTYzM09JUnN0dWt0d2RpQ3kzQ1QrZkxTcHV4QkpESWxmWFFEYWVIM2lnMXdpQjBKc1o2MDFYSGlGd2VHTXU0dFpmblNwSGczT25vTDZuei91dXJVaWYyT0s0PSomenZkdmR2ZGRiZmlra2t1bXRtZHdxcHBwP3w0WSFzITJicic7IC8vbG9nKHNpZ25hdHVyZSkKICAgICAgICAgICAgdmFyIHNpZ25hdHVyZTIgPSBtZDUoc2lnbmF0dXJlKTsgLy9sb2coc2lnbmF0dXJlMikKICAgICAgICAgICAgdmFyIGJvZHkgPSAndG9rZW49MWJlODZlOGUxOGE5ZmExOGIyYjhkNTQzMjY5OWRhZDAuYWMwMDhlZDY1MGZkMDg3YmZiZWNmMmZkYTlkODJlOTgzNTI1M2VmMjQ4NDNlNmIxOGZjZDEyOGIxMDc2MzQ5N2JjZjlkNTNlOTU5ZjUzNzdjZGUwMzhjMjBjY2Y5ZDE3ZjYwNGM5YjhiYjZlNjEwNDFkZWY4NjcyOWIyZmM3NDA4YmQyNDFlMjNjMjEzYWM1N2YwMjI2ZWU2NTZlMmJiMGE1ODNhZTBlNGYzYmY2YzZhYjZjNDkwYzlhNmYwZDhjZGZkMzY2YWFjZjVkODMxOTM2NzFhOGY3N2NkMWFmMWZmMmU5MTQ1ZGU5MmVjNDNlYzg3Y2Y0YmRjNTYzZjZlOTE5ZmUzMjg2MWIwZTkzYjExOGVjMzdkODAzNWZiYjNjLjU5ZGQwNWM1ZDlhOGFlNzI2NTI4NzgzMTI4MjE4ZjE1ZmU2ZjJjMGM4MTQ1ZWRkYWIxMTJiMzc0ZmNmZTNkNzkmdG9rZW5faWQ9JnBob25lX3R5cGU9MSZ0aW1lPScgKyB0ICsgJyZwaG9uZV9tb2RlbD14aWFvbWktMjIwMjEyMTFyYyZrZXlzPXFEcG90RTJiZWRpbUszUUdxbHlWNWllWFhDM0VoYVBMUSUyQklPSnlIbkhmbENqNXclMkY3RVNLN0ZneXdNdnJnanhieDBHa2xFRkxJNCUyQkpzaGd5U2U2MzNPSVJzdHVrdHdkaUN5M0NUJTJCZkxTcHV4QkpESWxmWFFEYWVIM2lnMXdpQjBKc1o2MDFYSGlGd2VHTXU0dFpmblNwSGczT25vTDZueiUyRnV1clVpZjJPSzQlM0QmcmVxdWVzdF9rZXk9JyArIGtleSArICcmc2lnbmF0dXJlPScgKyBzaWduYXR1cmUyICsgJyZhcHBfaWQ9MSZhZF92ZXJzaW9uPTEnOwogICAgICAgICAgICByZXR1cm4gYm9keQogICAgICAgIH0KICAgICAgICBjb25zdCBib2R5a2V5ID0gIk1JSUNkZ0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQW1Bd2dnSmNBZ0VBQW9HQWU2aEtyV0xpMXpRbWpUVDFvemJFNFFkRmVKR054dWJ4bGQ2R3JGR3hpbXhmTXNNQjZCcEpocGNUb3VBcXl3QUZwcGlLZXRVQkJiWHdZc1lVMXdOcjY0OFhWbVBtQ01DeTRyWTh2ZGxpRm5iTVVqMDg2RFU2Wisvb1hCZFdVMy9iMUcwRE4zRTl3VUxSU3djS1pUM3dqL2NDSTF2c0NtM2dqMlI1U3FrQTlZMENBd0VBQVFLQmdBSkgrNEN4VjAvekJWY0xpQkNIdlNBTm0wbDdIZXR5YlRoL2oycDBZMXNUWHJvNEFMd0FhQ1RVZXFkQmpXaUxTbzlsTndESEZ5cTh6WDkwK2dOeGE3YzVFcWNXVjlGbWxWWHI4VmhmQnpjWm8xblhlTmRYRlQ3dFEyeWFoL29kdGRjeCt2Uk1TR0pkMXQvNWs1YkRkOXdBdllkSURibE1BZyt3aUtLWjVLY2RBa0VBMWNDYWtFTjROZXhrRjV0SFBSclI2WE9ZL1hIZmtxWHhFaE1xbU5iQjlVMzRzYVRKbkxXSUhDOElYeXM2UW16ejMwVHR6Q2p1T3FLUlJ5K0ZNTTRUZHdKQkFKUVpGUGpzR0MrUnFjRzVVdlZNaU1QaG53ZS9iWEVlaFNoSzg2eUpLL2cvVWlLck84N2gzYUV1NWdjSnFCeWdUcTNCQkJvSDJtZDNwci9XK2hVTVdCc0NRUUNoZmhUSXJkRGluS2k2bFJ4cmRCbm4wT2hqZzJjd3VxSzV6elU5cC9OK1M5eDdDazh3VUk1M0RLbThqVUpFOFdBRzdXTGovb0NPV0VoK2ljNk5Jd1RkQWtFQWowWDhuaHg2QVhzZ0NZUnFsMWtsYnF0Vm1MOCs5NUtaSzdQbkxXRy9JZmpRVXkzcFBHb1NhWjdmZHF1RzhicThveWY1K2R6akUvb1RYY0J5Uys2WFJRSkFQLzVjaXkxYkwzTmhVaHNhT1Z5NTVNSFhuUGpkY1RYMEZhTGkreWJYWklmSVEyUDRyYjE5bVZxMWZlTWJDWGh6K0wxckc4b2F0NWxZS2ZwZThrODNaQT09IjsKICAgICAgICBmdW5jdGlvbiBnZXRodG1sKHUsIGJvZHksIGhlYWRlcnMpIHsKICAgICAgICAgICAgdmFyIGhkID0gZmV0Y2godSwgewogICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycywKICAgICAgICAgICAgICAgIGJvZHk6IGJvZHksCiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJywKICAgICAgICAgICAgICAgIHJlamVjdENvZGluZzogdHJ1ZQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdmFyIGJhbm5lciA9IEpTT04ucGFyc2UoaGQpLmRhdGE7CiAgICAgICAgICAgIHZhciByZXNwb25zZV9rZXkgPSBiYW5uZXIucmVzcG9uc2Vfa2V5OyAvL2xvZygpCiAgICAgICAgICAgIC8vY29uc29sZS5sb2coInJlc3BvbnNlX2tleT09IityZXNwb25zZV9rZXkpCiAgICAgICAgICAgIHZhciBrZXlzID0gYmFubmVyLmtleXM7IC8vbG9nKGtleXMpCiAgICAgICAgICAgIHZhciBib2R5a2V5aXYgPSBKU09OLnBhcnNlKFJTQS5kZWNvZGUoa2V5cywgYm9keWtleSkpOwogICAgICAgICAgICAvL2NvbnNvbGUubG9nKCJyc2F4eHh4PT0iK0pTT04uc3RyaW5naWZ5KGJvZHlrZXlpdikpCiAgICAgICAgICAgIHZhciBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShib2R5a2V5aXYua2V5KTsKICAgICAgICAgICAgdmFyIGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoYm9keWtleWl2Lml2KTsKICAgICAgICAgICAgdmFyIGh0bWwgPSBEZWNyeXB0KHJlc3BvbnNlX2tleSwga2V5LCBpdik7CiAgICAgICAgICAgIC8vY29uc29sZS5sb2coIm5za2pzbndramRuZWpkPT09cXF4eHhxPSIrSlNPTi5zdHJpbmdpZnkoaHRtbCkpCiAgICAgICAgICAgIHJldHVybiBodG1sCiAgICAgICAgfQogICAgICAgIHZhciB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDA7CiAgICAgICAgdmFyIHQgPSB0aW1lc3RhbXAudG9TdHJpbmcoKS5zcGxpdCgnLicpWzBdOwogICAgICAgIHZhciB1cmwgPSBpbnB1dC5zcGxpdCgiIyIpWzBdOy8vdXJsCiAgICAgICAgdmFyIHJlcXVlc3Rfa2V5MTEgPSBpbnB1dC5zcGxpdCgiIyIpWzFdCgogICAgICAgIHZhciByZXF1ZXN0X2tleSA9IEpTT04uc3RyaW5naWZ5KHsgImtleXdvcmRzIjogcmVxdWVzdF9rZXkxMSwgIm9yZGVyX3ZhbCI6ICIxIiB9KQogICAgICAgIC8vY29uc29sZS5sb2coIm5za2pzbndramRuZWpkPT09cXF4eHhxPXR0dHQiK3JlcXVlc3Rfa2V5KQogICAgICAgIHZhciByZXF1ZXN0X2tleTIgPSBFbmNyeXB0KHJlcXVlc3Rfa2V5KTsKICAgICAgICB2YXIgYm9keSA9IGdldGJvZHkzKHJlcXVlc3Rfa2V5MiwgdCkKICAgICAgICB2YXIgaGVhZGVycyA9IHsKICAgICAgICAgICAgJ0NhY2hlLUNvbnRyb2wnOiAnbm8tY2FjaGUnLAogICAgICAgICAgICAnVmVyc2lvbic6ICcyNDA2MDI1JywKICAgICAgICAgICAgJ1BhY2thZ2VOYW1lJzogJ2NvbS51ZjA3NmJmMGMyNDYucWU0MzlmMGQ1ZS5tOGFhZjU2YjcyNWEuaWZlYjY0NzM0NmYnLAogICAgICAgICAgICAnVmVyJzogJzEuOS4yJywKICAgICAgICAgICAgJ1JlZmVyZXInOiAnaHR0cHM6Ly9hcGkuOHV0ZHRjcS5jb20nLAogICAgICAgICAgICAnWC1DdXN0b21lci1DbGllbnQtSXAnOiAnMTI3LjAuMC4xJywKICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLAogICAgICAgICAgICAnSG9zdCc6ICdhcGkuOHV0ZHRjcS5jb20nLAogICAgICAgICAgICAnQ29ubmVjdGlvbic6ICdLZWVwLUFsaXZlJywKICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiAnb2todHRwLzMuMTIuMCcKICAgICAgICB9CiAgICAgICAgdmFyIGh0bWwgPSBnZXRodG1sKHVybCwgYm9keSwgaGVhZGVycykKICAgICAgICAvL2NvbnNvbGUubG9nKCJuc2tqc253a2pkbmVqZD09PT0iK2h0bWwpCgogICAgICAgIHZhciBsaXN0ID0gSlNPTi5wYXJzZShodG1sKS5saXN0OyAvL2xvZyhsaXN0KQogICAgICAgIC8vY29uc29sZS5sb2coIm5za2pzbndramRuZWpkPT09cXFxcXE9IitsaXN0KQogICAgICAgIGxpc3QuZm9yRWFjaChkYXRhID0+IHsKICAgICAgICAgICAgZC5wdXNoKHsKICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhLnZvZF9uYW1lLAogICAgICAgICAgICAgICAgZGVzYzogZGF0YS52b2RfY29udGludSA9PSAwID8gJ+eUteW9sScgOiAn5pu05paw6IezJytkYXRhLnZvZF9jb250aW51Kyfpm4YnLAogICAgICAgICAgICAgICAgY29udGVudDogZGF0YS52b2RfYWRkdGltZSwKICAgICAgICAgICAgICAgIGltZzogZGF0YS52b2RfcGljLAogICAgICAgICAgICAgICAgdXJsOiBgJHtkYXRhLnZvZF9pZH0vJHtkYXRhLnZvZF9jb250aW51fWAsCiAgICAgICAgICAgIH0pCiAgICAgICAgfSkKICAgICAgICBzZXRSZXN1bHQoZCkKICAgIH0pLAp9