diff --git a/VI3DGL/sync-bundle-03.txt b/VI3DGL/sync-bundle-03.txt index 7e5c690..81ff7d7 100644 --- a/VI3DGL/sync-bundle-03.txt +++ b/VI3DGL/sync-bundle-03.txt @@ -6676,7 +6676,7 @@ U2VydmVyIG1hbnVlbGwgc3RhcnRlbi4iIC1Gb3JlZ3JvdW5kQ29sb3IgWWVsbG93Cn0KCldyaXRl LUhvc3QgIiIKV3JpdGUtSG9zdCAiPT09IFJvbGxiYWNrIGFiZ2VzY2hsb3NzZW4gPT09IiAtRm9y ZWdyb3VuZENvbG9yIEdyZWVuCldyaXRlLUhvc3QgIiAgICBXaWVkZXJoZXJnZXN0ZWxsdDogJCgk Y2hvc2VuLk5hbWUpIiAtRm9yZWdyb3VuZENvbG9yIEN5YW4K -### FILE: server.ps1 | 241203 +### FILE: server.ps1 | 242309 IyBTdGFuZDogMjAyNi0wNS0xNA0KcGFyYW0oDQogICAgW2ludF0kUG9ydCA9IDgwODAsDQogICAg W3N0cmluZ10kUm9vdFBhdGggPSAnJywNCiAgICAjIE9wdGlvbmFsZXMgendlaXRlcyBSb290IGZ1 ZXIgZ2VtZWluc2FtZSBEYXRlbiAoYWRtaW4uanNvbiBldGMuKS4gV2Vubg0KICAgICMgZ2VzZXR6 @@ -8315,2600 +8315,2620 @@ anNvbicgfCBPdXQtTnVsbDsgTG9nLUFwaSAnUFJFV0FSTSBwbGFudW5nLmpzb24gb2snIH0gY2F0 Y2ggeyBMb2ctQXBpICgnUFJFV0FSTSBwbGFudW5nLmpzb24gRkVITEVSOiB7MH0nIC1mICRfLkV4 Y2VwdGlvbi5NZXNzYWdlKSB9DQoNCiMgPT09IFVwZGF0ZS1DaGVjayA9PT0NCiRzY3JpcHQ6VXBk YXRlQXZhaWxhYmxlICAgPSAkZmFsc2UNCiRzY3JpcHQ6UmVtb3RlVmVyc2lvbiAgICAgPSAnJw0K -JHNjcmlwdDpVcGRhdGVMYXN0Q2hlY2tVdGMgPSBbZGF0ZXRpbWVdOjpNaW5WYWx1ZQ0KDQpmdW5j -dGlvbiBSZWZyZXNoLVVwZGF0ZUNoZWNrIHsNCiAgICBpZiAoKFtkYXRldGltZV06OlV0Y05vdyAt -ICRzY3JpcHQ6VXBkYXRlTGFzdENoZWNrVXRjKS5Ub3RhbE1pbnV0ZXMgLWx0IDYwKSB7IHJldHVy -biB9DQogICAgJHNjcmlwdDpVcGRhdGVMYXN0Q2hlY2tVdGMgPSBbZGF0ZXRpbWVdOjpVdGNOb3cN -CiAgICAkbG9jYWxWZXIgPSAnMC4wLjAnDQogICAgJF92ZiA9IEpvaW4tUGF0aCAkUm9vdCAnVkVS -U0lPTicNCiAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkX3ZmKSB7ICRsb2NhbFZlciA9 -IChHZXQtQ29udGVudCAtTGl0ZXJhbFBhdGggJF92ZiAtUmF3KS5UcmltKCkgfQ0KICAgIHRyeSB7 -DQogICAgICAgICRydiA9IChJbnZva2UtV2ViUmVxdWVzdCAtVXJpICdodHRwczovL3VwZGF0ZXMu -cmhpbm8ubnJ3L3JoaW5vL1N0YXR1c1F1b19VcGRhdGVzL3Jhdy9icmFuY2gvbWFpbi9WSTNER0wv -VkVSU0lPTicgYA0KICAgICAgICAgICAgICAgLVVzZUJhc2ljUGFyc2luZyAtVGltZW91dFNlYyAz -IC1FcnJvckFjdGlvbiBTdG9wKS5Db250ZW50LlRyaW0oKQ0KICAgICAgICAkc2NyaXB0OlJlbW90 -ZVZlcnNpb24gICA9ICRydg0KICAgICAgICAkc2NyaXB0OlVwZGF0ZUF2YWlsYWJsZSA9IChbU3lz -dGVtLlZlcnNpb25dJHJ2IC1ndCBbU3lzdGVtLlZlcnNpb25dJGxvY2FsVmVyKQ0KICAgICAgICBM -b2ctQXBpICgiVVBEQVRFLUNIRUNLOiBsb2thbD0kbG9jYWxWZXIgcmVtb3RlPSRydiBhdmFpbGFi -bGU9JCgkc2NyaXB0OlVwZGF0ZUF2YWlsYWJsZSkiKQ0KICAgIH0gY2F0Y2ggew0KICAgICAgICBM -b2ctQXBpICgiVVBEQVRFLUNIRUNLOiBuaWNodCBlcnJlaWNoYmFyICgkKCRfLkV4Y2VwdGlvbi5N -ZXNzYWdlKSkiKQ0KICAgIH0NCn0NClJlZnJlc2gtVXBkYXRlQ2hlY2sNCg0KIyBJbml0aWFsLVNu -YXBzaG90IGRlciBPZmZsaW5lLVdvY2hlbnBsYW4uaHRtbCBiZWltIFN0YXJ0IHJlZ2VuZXJpZXJl -bg0KIyAoYXVjaCB3ZW5uIHNlaXQgZGVtIGxldHp0ZW4gTGF1ZiBuaWNodHMgZ2VhZW5kZXJ0IHd1 -cmRlLCBoYXQgc2ljaCB6LkIuDQojIGRhcyBEYXR1bSB2ZXJzY2hvYmVuIHVuZCBkZXIgSGV1dGUt -TWFya2VyIHplaWd0IHNvbnN0IGRpZSBhbHRlIFdvY2hlKS4NCnRyeSB7IEdlbmVyYXRlLVdvY2hl -bnBsYW5TbmFwc2hvdCB8IE91dC1OdWxsIH0gY2F0Y2ggeyBMb2ctQXBpICgnU05BUFNIT1QgKGlu -aXRpYWwpIEZFSExFUjogezB9JyAtZiAkXy5FeGNlcHRpb24uTWVzc2FnZSkgfQ0KDQojIC0tLSBT -ZXJ2ZXIgc3RhcnRlbiAtLS0NCiRMaXN0ZW5lciA9IE5ldy1PYmplY3QgU3lzdGVtLk5ldC5IdHRw -TGlzdGVuZXINCiRMaXN0ZW5lci5QcmVmaXhlcy5BZGQoImh0dHA6Ly9sb2NhbGhvc3Q6JFBvcnQv -IikNCnRyeSB7DQogICAgJExpc3RlbmVyLlN0YXJ0KCkNCn0gY2F0Y2ggew0KICAgIFdyaXRlLUhv -c3QgKCdGRUhMRVI6IExpc3RlbmVyIGF1ZiBQb3J0IHswfSBrYW5uIG5pY2h0IHN0YXJ0ZW4uJyAt -ZiAkUG9ydCkgLUZvcmVncm91bmRDb2xvciBSZWQNCiAgICBXcml0ZS1Ib3N0ICRfDQogICAgTG9n -LUFwaSAoJ0xJU1RFTkVSIEZFSExFUjogezB9JyAtZiAkXy5FeGNlcHRpb24uTWVzc2FnZSkNCiAg -ICBTdGFydC1TbGVlcCAtU2Vjb25kcyA1DQogICAgZXhpdCAxDQp9DQoNCldyaXRlLUhvc3QgKCdW -STMgREdMLVBsYW51bmcgYXVmIGh0dHA6Ly9sb2NhbGhvc3Q6ezB9JyAtZiAkUG9ydCkNCldyaXRl -LUhvc3QgKCdSb290OiAgICB7MH0nIC1mICRSb290KQ0KV3JpdGUtSG9zdCAoJ0RhdGFEaXI6IHsw -fScgLWYgJERhdGFEaXIpDQpXcml0ZS1Ib3N0ICgnTG9nOiAgICAgezB9JyAtZiAkc2NyaXB0OkFw -aUxvZykNCg0KIyAtLS0gSGVhcnRiZWF0LVdhdGNoZG9nIC0tLQ0KJFdhdGNoZG9nVGltZXIgPSBO -ZXctT2JqZWN0IFN5c3RlbS5UaW1lcnMuVGltZXINCiRXYXRjaGRvZ1RpbWVyLkludGVydmFsID0g -NTAwMA0KJFdhdGNoZG9nVGltZXIuQXV0b1Jlc2V0ID0gJHRydWUNClJlZ2lzdGVyLU9iamVjdEV2 -ZW50IC1JbnB1dE9iamVjdCAkV2F0Y2hkb2dUaW1lciAtRXZlbnROYW1lIEVsYXBzZWQgLUFjdGlv -biB7DQogICAgJGVsYXBzZWQgPSAoR2V0LURhdGUpIC0gJHNjcmlwdDpMYXN0SGVhcnRiZWF0DQog -ICAgaWYgKCRlbGFwc2VkLlRvdGFsU2Vjb25kcyAtZ3QgMzApIHsNCiAgICAgICAgaWYgKC1ub3Qg -JHNjcmlwdDpTaHV0ZG93blBlbmRpbmcpIHsNCiAgICAgICAgICAgICRzY3JpcHQ6U2h1dGRvd25Q -ZW5kaW5nID0gJHRydWUNCiAgICAgICAgfSBlbHNlaWYgKCRlbGFwc2VkLlRvdGFsU2Vjb25kcyAt -Z3QgMzUpIHsNCiAgICAgICAgICAgICRMaXN0ZW5lci5TdG9wKCkNCiAgICAgICAgICAgIFtFbnZp -cm9ubWVudF06OkV4aXQoMCkNCiAgICAgICAgfQ0KICAgIH0NCn0gfCBPdXQtTnVsbA0KJFdhdGNo -ZG9nVGltZXIuU3RhcnQoKQ0KDQojIC0tLSBSZXF1ZXN0LUxvb3AgLS0tDQp0cnkgew0KICAgIHdo -aWxlICgkTGlzdGVuZXIuSXNMaXN0ZW5pbmcpIHsNCiAgICAgICAgJEFzeW5jUmVzdWx0ID0gJExp -c3RlbmVyLkJlZ2luR2V0Q29udGV4dCgkbnVsbCwgJG51bGwpDQogICAgICAgIHdoaWxlICgtbm90 -ICRBc3luY1Jlc3VsdC5Bc3luY1dhaXRIYW5kbGUuV2FpdE9uZSgxMDAwKSkgeyB9DQogICAgICAg -ICRDb250ZXh0ID0gJExpc3RlbmVyLkVuZEdldENvbnRleHQoJEFzeW5jUmVzdWx0KQ0KICAgICAg -ICAkUmVxdWVzdCA9ICRDb250ZXh0LlJlcXVlc3QNCiAgICAgICAgJFJlc3BvbnNlID0gJENvbnRl -eHQuUmVzcG9uc2UNCiAgICAgICAgJE1ldGhvZCA9ICRSZXF1ZXN0Lkh0dHBNZXRob2QNCiAgICAg -ICAgJFBhdGggPSAkUmVxdWVzdC5VcmwuQWJzb2x1dGVQYXRoDQogICAgICAgIExvZy1BcGkgKCdS -RVEgezB9IHsxfScgLWYgJE1ldGhvZCwgJFBhdGgpDQoNCiAgICAgICAgdHJ5IHsNCiAgICAgICAg -ICAgICMgPT09PT0gQ09SUyBQcmVmbGlnaHQgPT09PT0NCiAgICAgICAgICAgIGlmICgkTWV0aG9k -IC1lcSAnT1BUSU9OUycpIHsNCiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuU3RhdHVzQ29kZSA9 -IDIwNA0KICAgICAgICAgICAgICAgIEFkZC1TZWN1cml0eUhlYWRlcnMgJFJlc3BvbnNlDQogICAg -ICAgICAgICAgICAgJFJlc3BvbnNlLk91dHB1dFN0cmVhbS5DbG9zZSgpDQogICAgICAgICAgICAg -ICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PSBTWVNURU0g -PT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvaGVhcnRiZWF0JyAtYW5kICRN -ZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgICMgT3JpZ2luLUNoZWNrIChTcHJp -bnQgMSDigJQgU2ljaGVyaGVpdHMtTm90YnJlbXNlIDIwMjYtMDUtMjgpOg0KICAgICAgICAgICAg -ICAgICMgSGVhcnRiZWF0IGFremVwdGllcnQgbnVyIFJlcXVlc3RzIHZvbiBkZXIgZWlnZW5lbiBB -cHAuIEFuZGVyZQ0KICAgICAgICAgICAgICAgICMgbG9rYWxlIFByb3plc3NlIGtvZW5udGVuIHNv -bnN0IHBlciBMb29wIGRpZSBBdXRvLVNodXRkb3duLUxvZ2lrDQogICAgICAgICAgICAgICAgIyB1 -bWdlaGVuIG9kZXIgZGVuIFNlcnZlciBiZXd1c3N0IGFtIExlYmVuIGhhbHRlbi4gQnJvd3NlciBz -ZW5kZXQNCiAgICAgICAgICAgICAgICAjIE9yaWdpbiBhdXRvbWF0aXNjaDsgZmVobGVuZGVyIEhl -YWRlciB3aXJkIHRvbGVyaWVyZW4gKHNlbmRCZWFjb24NCiAgICAgICAgICAgICAgICAjIGluIG1h -bmNoZW4gQnJvd3Nlcm4pLCBhYmVyIEZBTFNDSEVSIE9yaWdpbiB3aXJkIGFiZ2VsZWhudC4NCiAg -ICAgICAgICAgICAgICAkb3JpZ2luID0gJFJlcXVlc3QuSGVhZGVyc1snT3JpZ2luJ10NCiAgICAg -ICAgICAgICAgICBpZiAoJG9yaWdpbiAtYW5kICRvcmlnaW4gLW5lICRzY3JpcHQ6Q29yc09yaWdp -bikgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnT3JpZ2luIG5p -Y2h0IGVybGF1YnQnIDQwMw0KICAgICAgICAgICAgICAgICAgICBMb2ctQXBpICgnSEVBUlRCRUFU -IDQwMyBPcmlnaW49ezB9JyAtZiAkb3JpZ2luKQ0KICAgICAgICAgICAgICAgICAgICBjb250aW51 -ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkc2NyaXB0Okxhc3RIZWFydGJl -YXQgPSBHZXQtRGF0ZQ0KICAgICAgICAgICAgICAgICRzY3JpcHQ6U2h1dGRvd25QZW5kaW5nID0g -JGZhbHNlDQogICAgICAgICAgICAgICAgIyBhZG1pblZlcnNpb24gLyBwbGFudW5nVmVyc2lvbjog -bXRpbWUgYWxzIFRpY2tzLiBFcmxhdWJ0IGRlbQ0KICAgICAgICAgICAgICAgICMgQ2xpZW50LCBS -ZWNodGUtIGJ6dy4gUGVyc29uZW4tQWVuZGVydW5nZW4gaW0gSGludGVyZ3J1bmQgenUNCiAgICAg -ICAgICAgICAgICAjIGVya2VubmVuIHVuZCBaLnJlY2h0ZS9aLnBsYW51bmcgbmV1IHp1IGxhZGVu -LCBvaG5lIGRhc3MgZGVyDQogICAgICAgICAgICAgICAgIyBVc2VyIEY1IGRydWVja2VuIG11c3Mu -IHBsYW51bmdWZXJzaW9uIGRlY2t0IGluc2Jlc29uZGVyZQ0KICAgICAgICAgICAgICAgICMgZWRp -dFJlY2h0ZS9zZWhlbi1VcGRhdGVzIGFiLCBkaWUgZGVyIExpdmUtU3luYy1EZWx0YSBuaWNodA0K -ICAgICAgICAgICAgICAgICMgbGllZmVydCAoQ2hlcnJ5LVBpY2sgMWFlZmUyNiBCdWcgIzMpLg0K -ICAgICAgICAgICAgICAgICRhZG1pblZlciAgID0gMA0KICAgICAgICAgICAgICAgICRwbGFudW5n -VmVyID0gMA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRhZG1p -bkZpbGUgPSBKb2luLVBhdGggJERhdGFEaXIgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAg -ICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRhZG1pbkZpbGUpIHsNCiAgICAgICAgICAg -ICAgICAgICAgICAgICRhZG1pblZlciA9IChHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJGFkbWluRmls -ZSkuTGFzdFdyaXRlVGltZVV0Yy5UaWNrcw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgICAgICRwbGFudW5nRmlsZSA9IEpvaW4tUGF0aCAkRGF0YURpciAncGxhbnVuZy5q -c29uJw0KICAgICAgICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkcGxh -bnVuZ0ZpbGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nVmVyID0gKEdldC1J -dGVtIC1MaXRlcmFsUGF0aCAkcGxhbnVuZ0ZpbGUpLkxhc3RXcml0ZVRpbWVVdGMuVGlja3MNCiAg -ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2gge30NCiAgICAgICAg -ICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdvayc7IGFkbWlu -VmVyc2lvbiA9ICRhZG1pblZlcjsgcGxhbnVuZ1ZlcnNpb24gPSAkcGxhbnVuZ1ZlciB9DQogICAg -ICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0 -aCAtZXEgJy9hcGkvc2h1dGRvd24nIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAg -ICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnc2h1dGRvd24n -IH0NCiAgICAgICAgICAgICAgICBTdGFydC1TbGVlcCAtTWlsbGlzZWNvbmRzIDMwMA0KICAgICAg -ICAgICAgICAgICRMaXN0ZW5lci5TdG9wKCkNCiAgICAgICAgICAgICAgICBbRW52aXJvbm1lbnRd -OjpFeGl0KDApDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBp -L2luZm8nIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICBSZWZyZXNo -LVVwZGF0ZUNoZWNrDQogICAgICAgICAgICAgICAgJHIgPSBHZXQtUmVjaHRlDQogICAgICAgICAg -ICAgICAgJGluZm9PYmogPSBAew0KICAgICAgICAgICAgICAgICAgICBiZW51dHplciAgICAgICAg -ICAgICAgICA9ICIkRG9tYWluXCRVc2VybmFtZSINCiAgICAgICAgICAgICAgICAgICAgcm9sbGUg -ICAgICAgICAgICAgICAgICAgPSAkci5yb2xsZQ0KICAgICAgICAgICAgICAgICAgICBpc3RTdXBl -clVzZXIgICAgICAgICAgICA9ICRyLmlzdFN1cGVyVXNlcg0KICAgICAgICAgICAgICAgICAgICBp -c3RGYWNoYXVmc2ljaHQgICAgICAgICA9ICRyLmlzdEZhY2hhdWZzaWNodA0KICAgICAgICAgICAg -ICAgICAgICBpc3RHZXNhbXR2ZXJhbnR3b3J0bGljaCA9ICRyLmlzdEdlc2FtdHZlcmFudHdvcnRs -aWNoDQogICAgICAgICAgICAgICAgICAgIHNlaGVuICAgICAgICAgICAgICAgICAgID0gJHIuc2Vo -ZW4NCiAgICAgICAgICAgICAgICAgICAgYWRtaW5TdWJ0YWJzICAgICAgICAgICAgPSAkci5hZG1p -blN1YnRhYnMNCiAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGlrQmVyZWljaGUgICAgICAgPSAk -ci5zdGF0aXN0aWtCZXJlaWNoZQ0KICAgICAgICAgICAgICAgICAgICBlZGl0aWVyZW4gICAgICAg -ICAgICAgICA9ICRyLmVkaXRpZXJlbiAgICMgbnVsbCBiZWkgU3VwZXJVc2VyID0gImFsbGVzIGVy -bGF1YnQiDQogICAgICAgICAgICAgICAgICAgIG1laW5lUGVyc29uSWQgICAgICAgICAgID0gJHIu -bWVpbmVQZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIgICAgICAgICAgICAgICAg -ICA9ICRzY3JpcHQ6Q29yc09yaWdpbg0KICAgICAgICAgICAgICAgICAgICB1cGRhdGVBdmFpbGFi -bGUgICAgICAgICA9ICRzY3JpcHQ6VXBkYXRlQXZhaWxhYmxlDQogICAgICAgICAgICAgICAgICAg -IHJlbW90ZVZlcnNpb24gICAgICAgICAgID0gJHNjcmlwdDpSZW1vdGVWZXJzaW9uDQogICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgJGlu -Zm9PYmoNCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAg -ICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9kZWJ1ZycgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0K -ICAgICAgICAgICAgICAgICRkYXQgPSBAeyBSb290ID0gJFJvb3Q7IERhdGFEaXIgPSAkRGF0YURp -cjsgRmlsZXMgPSBAe30gfQ0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmIGluICdhZG1pbi5q -c29uJywncGxhbnVuZy5qc29uJywnbG9nYnVjaC5qc29uJykgew0KICAgICAgICAgICAgICAgICAg -ICAkZnAgPSBKb2luLVBhdGggJERhdGFEaXIgJGYNCiAgICAgICAgICAgICAgICAgICAgJGluZm8g -PSBAeyBleGlzdHMgPSAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkZnApIH0NCiAgICAgICAgICAg -ICAgICAgICAgaWYgKCRpbmZvLmV4aXN0cykgeyAkaW5mby5zaXplID0gKEdldC1JdGVtIC1MaXRl -cmFsUGF0aCAkZnApLkxlbmd0aCB9DQogICAgICAgICAgICAgICAgICAgICRkYXQuRmlsZXNbJGZd -ID0gJGluZm8NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIyBSZWNodGUtSW5m -byAod2ljaHRpZyBmdWVyIEFkbWluLVRhYi1TaWNodGJhcmtlaXQpDQogICAgICAgICAgICAgICAg -JGRhdC5CZW51dHplciA9ICIkRG9tYWluXCRVc2VybmFtZSINCiAgICAgICAgICAgICAgICB0cnkg -ew0KICAgICAgICAgICAgICAgICAgICAkciA9IEdldC1SZWNodGUNCiAgICAgICAgICAgICAgICAg -ICAgJGRhdC5SZWNodGUgPSBAew0KICAgICAgICAgICAgICAgICAgICAgICAgcm9sbGUgICAgICAg -ICAgID0gJHIucm9sbGUNCiAgICAgICAgICAgICAgICAgICAgICAgIGlzdFN1cGVyVXNlciAgICA9 -ICRyLmlzdFN1cGVyVXNlcg0KICAgICAgICAgICAgICAgICAgICAgICAgaXN0RmFjaGF1ZnNpY2h0 -ID0gJHIuaXN0RmFjaGF1ZnNpY2h0DQogICAgICAgICAgICAgICAgICAgICAgICBzZWhlbiAgICAg -ICAgICAgPSAkci5zZWhlbg0KICAgICAgICAgICAgICAgICAgICAgICAgbWVpbmVQZXJzb25JZCAg -ID0gJHIubWVpbmVQZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgICRkYXQuUmVjaHRlID0gQHsgZmVobGVy -ID0gJF8uRXhjZXB0aW9uLk1lc3NhZ2UgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg -ICAgICAjIEFkbWluLmpzb24gS3VyemNoZWNrDQogICAgICAgICAgICAgICAgJGFkbWluT2JqID0g -UmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAt -ZXEgJGFkbWluT2JqKSB7DQogICAgICAgICAgICAgICAgICAgICRkYXQuQWRtaW5Kc29uTGVzYmFy -ID0gJGZhbHNlDQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAg -JGFuelNVID0gMA0KICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluT2JqLnN1cGVyVXNlcikg -eyAkYW56U1UgPSBAKCRhZG1pbk9iai5zdXBlclVzZXIpLkNvdW50IH0NCiAgICAgICAgICAgICAg -ICAgICAgJHN1S2VubnVuZ2VuID0gQCgpDQogICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW5P -Ymouc3VwZXJVc2VyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcyBpbiBA -KCRhZG1pbk9iai5zdXBlclVzZXIpKSB7ICRzdUtlbm51bmdlbiArPSBbc3RyaW5nXSRzLm53S2Vu -bnVuZyB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJGRhdC5B -ZG1pbkpzb25MZXNiYXIgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICAkZGF0LlN1cGVyVXNl -ckFuemFobCA9ICRhbnpTVQ0KICAgICAgICAgICAgICAgICAgICAkZGF0LlN1cGVyVXNlcktlbm51 -bmdlbiA9ICRzdUtlbm51bmdlbg0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBT -ZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlICRkYXQNCiAgICAgICAgICAgICAgICBjb250aW51ZQ0K -ICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09IFNZTkMtQ0hFQ0sgPT09PT0NCiAg -ICAgICAgICAgICMgVmVyZ2xlaWNodCBwcm8gV2ViLUFzc2V0IGRpZSBEYXRlaS1Hcm9lc3NlIGlu -IGRlciBTb3VyY2UgKGdlcHVsbHRlcw0KICAgICAgICAgICAgIyBSZXBvLCAkc2NyaXB0OkFzc2V0 -RmFsbGJhY2spIGdlZ2VuIGRpZSBEYXRlaS1Hcm9lc3NlIGltIEFzc2V0LUNhY2hlDQogICAgICAg -ICAgICAjICgkUm9vdCwgUm9ib2NvcHktWmllbCkuIEVya2VubnQgdW52b2xsc3RhZW5kaWdlIFJv -Ym9jb3B5LVVlYmVyLQ0KICAgICAgICAgICAgIyB0cmFndW5nZW4sIHZlcmFsdGV0ZSBBc3NldC1D -YWNoZXMgdW5kIGZlaGxlbmRlIERhdGVpZW4uDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcv -YXBpL3N5bmMtY2hlY2svZGF0ZWllbicgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAg -ICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXNwb25z -ZSAnS2VpbmUgQWRtaW4tUmVjaHRlJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBp -ZiAoLW5vdCAkc2NyaXB0OkFzc2V0RmFsbGJhY2spIHsNCiAgICAgICAgICAgICAgICAgICAgU2Vu -ZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAew0KICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSAk -ZmFsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgIGZlaGxlciA9ICdBc3NldEZhbGxiYWNrIG5p -Y2h0IGtvbmZpZ3VyaWVydCDigJQgU291cmNlLVBmYWQgdW5iZWthbm50LCBWZXJnbGVpY2ggbmlj -aHQgbW9lZ2xpY2guIChTZXJ2ZXIgd3VyZGUgb2huZSAtQXNzZXRGYWxsYmFjayBnZXN0YXJ0ZXQu -KScNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0K -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkd2ViRXh0ID0gJy5qcycsJy5jc3Mn -LCcuaHRtbCcsJy5pY28nLCcucG5nJywnLmpwZycsJy5qcGVnJywnLnN2ZycNCiAgICAgICAgICAg -ICAgICAkaWdub3JpZXJlVG9wID0gQCgnLmdpdCcsJ2RvY3MnLCdkZXYnLCd0ZXN0cycsJ2RhdGEn -LCdjYWNoZScpDQogICAgICAgICAgICAgICAgJGRhdGVpZW4gPSBAKCkNCiAgICAgICAgICAgICAg -ICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkYWxsZSA9IEdldC1DaGlsZEl0ZW0gLUxpdGVy -YWxQYXRoICRzY3JpcHQ6QXNzZXRGYWxsYmFjayAtUmVjdXJzZSAtRmlsZSAtRXJyb3JBY3Rpb24g -U2lsZW50bHlDb250aW51ZQ0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZiBpbiAkYWxs -ZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHJlbCA9ICRmLkZ1bGxOYW1lLlN1YnN0cmlu -Zygkc2NyaXB0OkFzc2V0RmFsbGJhY2suTGVuZ3RoICsgMSkgLXJlcGxhY2UgJ1xcJywgJy8nDQog -ICAgICAgICAgICAgICAgICAgICAgICAkdG9wID0gKCRyZWwgLXNwbGl0ICcvJylbMF0NCiAgICAg -ICAgICAgICAgICAgICAgICAgIGlmICgkaWdub3JpZXJlVG9wIC1jb250YWlucyAkdG9wKSB7IGNv -bnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRleHQgPSAkZi5FeHRlbnNpb24uVG9M -b3dlcigpDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHdlYkV4dCAtbm90Y29udGFpbnMg -JGV4dCkgeyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAkZGF0ZWllbiArPSAk -cmVsDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgIyBkYXRhLy1T -b25kZXJmYWVsbGU6IG51ciBkaWUgendlaSBUYXJuLU1hcmt1cHMsIGFsbGVzIGFuZGVyZQ0KICAg -ICAgICAgICAgICAgICAgICAjIGxpZWd0IGltIERhdGFEaXIgKGFkbWluLmpzb24vcGxhbnVuZy5q -c29uLy4uLikgdW5kIHdpcmQgbmljaHQNCiAgICAgICAgICAgICAgICAgICAgIyBpbiBkZW4gQXNz -ZXQtQ2FjaGUga29waWVydC4NCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGV4dHJhIGlu -ICdkYXRhL21haW5mcmFtZS5odG1sJywnZGF0YS9zYW5pdGl6ZXIuaHRtbCcpIHsNCiAgICAgICAg -ICAgICAgICAgICAgICAgICRzcmNFeHRyYSA9IEpvaW4tUGF0aCAkc2NyaXB0OkFzc2V0RmFsbGJh -Y2sgJGV4dHJhDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFs -UGF0aCAkc3JjRXh0cmEpIHsgJGRhdGVpZW4gKz0gJGV4dHJhIH0NCiAgICAgICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5k -LUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IG9rID0gJGZhbHNlOyBmZWhsZXIgPSAoJ1NvdXJjZS1W -ZXJ6ZWljaG5pcyBuaWNodCBsZXNiYXI6ICcgKyAkXy5FeGNlcHRpb24uTWVzc2FnZSkgfQ0KICAg -ICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg -ICAgICAkZGF0ZWllbiA9ICRkYXRlaWVuIHwgU29ydC1PYmplY3QgLVVuaXF1ZQ0KICAgICAgICAg -ICAgICAgICRlaW50cmFlZ2UgPSBAKCkNCiAgICAgICAgICAgICAgICAkYW56T2sgPSAwOyAkYW56 -RGlmZiA9IDA7ICRhbnpGZWhsdEFzc2V0ID0gMDsgJGFuekZlaGx0U291cmNlID0gMA0KICAgICAg -ICAgICAgICAgIGZvcmVhY2ggKCRyZWwgaW4gJGRhdGVpZW4pIHsNCiAgICAgICAgICAgICAgICAg -ICAgJGFzc2V0UGZhZCAgPSBKb2luLVBhdGggJFJvb3QgJHJlbA0KICAgICAgICAgICAgICAgICAg -ICAkc291cmNlUGZhZCA9IEpvaW4tUGF0aCAkc2NyaXB0OkFzc2V0RmFsbGJhY2sgJHJlbA0KICAg -ICAgICAgICAgICAgICAgICAkYXNzZXRCeXRlcyAgPSAkbnVsbA0KICAgICAgICAgICAgICAgICAg -ICAkc291cmNlQnl0ZXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRo -IC1MaXRlcmFsUGF0aCAkYXNzZXRQZmFkKSAgeyAkYXNzZXRCeXRlcyAgPSAoR2V0LUl0ZW0gLUxp -dGVyYWxQYXRoICRhc3NldFBmYWQpLkxlbmd0aCB9DQogICAgICAgICAgICAgICAgICAgIGlmIChU -ZXN0LVBhdGggLUxpdGVyYWxQYXRoICRzb3VyY2VQZmFkKSB7ICRzb3VyY2VCeXRlcyA9IChHZXQt -SXRlbSAtTGl0ZXJhbFBhdGggJHNvdXJjZVBmYWQpLkxlbmd0aCB9DQogICAgICAgICAgICAgICAg -ICAgICRzdGF0dXMgPSAndW5iZWthbm50Jw0KICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwg -LWVxICRzb3VyY2VCeXRlcyAtYW5kICRudWxsIC1lcSAkYXNzZXRCeXRlcykgeyAkc3RhdHVzID0g -J2JlaWRlX2ZlaGxlbicgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlaWYgKCRudWxsIC1lcSAk -YXNzZXRCeXRlcykgIHsgJHN0YXR1cyA9ICdhc3NldF9mZWhsdCc7ICAkYW56RmVobHRBc3NldCsr -IH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZWlmICgkbnVsbCAtZXEgJHNvdXJjZUJ5dGVzKSB7 -ICRzdGF0dXMgPSAnc291cmNlX2ZlaGx0JzsgJGFuekZlaGx0U291cmNlKysgfQ0KICAgICAgICAg -ICAgICAgICAgICBlbHNlaWYgKCRhc3NldEJ5dGVzIC1lcSAkc291cmNlQnl0ZXMpIHsgJHN0YXR1 -cyA9ICdvayc7ICRhbnpPaysrIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRzdGF0dXMg -PSAnZ3JvZXNzZV9kaWZmJzsgJGFuekRpZmYrKyB9DQogICAgICAgICAgICAgICAgICAgICRlaW50 -cmFlZ2UgKz0gW29yZGVyZWRdQHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHBmYWQgICAgICAg -ID0gJHJlbA0KICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlQnl0ZXMgPSAkc291cmNlQnl0 -ZXMNCiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2V0Qnl0ZXMgID0gJGFzc2V0Qnl0ZXMNCiAg -ICAgICAgICAgICAgICAgICAgICAgIGRpZmZCeXRlcyAgID0gaWYgKCRudWxsIC1uZSAkc291cmNl -Qnl0ZXMgLWFuZCAkbnVsbCAtbmUgJGFzc2V0Qnl0ZXMpIHsgJGFzc2V0Qnl0ZXMgLSAkc291cmNl -Qnl0ZXMgfSBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzICAg -ICAgPSAkc3RhdHVzDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAew0KICAgICAgICAgICAg -ICAgICAgICBvayAgICAgICAgICA9ICR0cnVlDQogICAgICAgICAgICAgICAgICAgIHNvdXJjZVJv -b3QgID0gJHNjcmlwdDpBc3NldEZhbGxiYWNrDQogICAgICAgICAgICAgICAgICAgIGFzc2V0Um9v -dCAgID0gJFJvb3QNCiAgICAgICAgICAgICAgICAgICAgYW56YWhsICAgICAgPSAkZWludHJhZWdl -LkNvdW50DQogICAgICAgICAgICAgICAgICAgIGFuek9rICAgICAgID0gJGFuek9rDQogICAgICAg -ICAgICAgICAgICAgIGFuekRpZmYgICAgID0gJGFuekRpZmYNCiAgICAgICAgICAgICAgICAgICAg -YW56RmVobHRBc3NldCAgPSAkYW56RmVobHRBc3NldA0KICAgICAgICAgICAgICAgICAgICBhbnpG -ZWhsdFNvdXJjZSA9ICRhbnpGZWhsdFNvdXJjZQ0KICAgICAgICAgICAgICAgICAgICBkYXRlaWVu -ICAgICA9ICRlaW50cmFlZ2UNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY29u -dGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PSBBRE1JTiA9PT09PQ0K -ICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbicgLWFuZCAkTWV0aG9kIC1lcSAn -R0VUJykgew0KICAgICAgICAgICAgICAgICR0eHQgPSBSZWFkLVRleHRGaWxlICdhZG1pbi5qc29u -Jw0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJHR4dCkgeyBTZW5kLUVycm9yICRSZXNw -b25zZSAnYWRtaW4uanNvbiBuaWNodCBnZWZ1bmRlbicgNDA0IH0NCiAgICAgICAgICAgICAgICBl -bHNlIHsgU2VuZC1Kc29uVGV4dCAkUmVzcG9uc2UgJHR4dCB9DQogICAgICAgICAgICAgICAgY29u -dGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvYWRt -aW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAo -VGVzdC1EYXJmQmVyZWljaCAnYWRtaW5pc3RyYXRpb24nKSkgeyBTZW5kLUVycm9yICRSZXNwb25z -ZSAnS2VpbmUgQWRtaW4tUmVjaHRlJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAk -Ym9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5 -KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVl -IH0NCiAgICAgICAgICAgICAgICAkZGF0ZW4gPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAg -ICAgICAgICAgICAgICBpZiAoJGRhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2FkbWluS2VubnVu -Z2VuJ10pIHsgJGRhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCdhZG1pbktlbm51bmdl -bicpIH0NCiAgICAgICAgICAgICAgICAjIFBTLTUuMS1VbndyYXAtU2NodXR6OiBhbGxlIExpc3Rl -bi1GZWxkZXIsIGRpZSBkZXIgQ2xpZW50IHVudGVyDQogICAgICAgICAgICAgICAgIyBBRE1JTl9M -SVNUX0ZFTERFUiBmdWVocnQsIHNlcnZlci1zZWl0aWcgYWxzIEFycmF5cyBlcnp3aW5nZW4uDQog -ICAgICAgICAgICAgICAgIyBTb25zdCB3ZXJkZW4gTGlzdGVuIG1pdCBudXIgZWluZW0gRWxlbWVu -dCB2b20gUG93ZXJTaGVsbC1KU09OLQ0KICAgICAgICAgICAgICAgICMgUm91bmR0cmlwIHp1bSBF -aW56ZWwtT2JqZWt0IGVudHBhY2t0IHVuZCBjbGllbnQtc2VpdGlnIGtvbW10DQogICAgICAgICAg -ICAgICAgIyBhZG1pbkxpc3Rlbk5vcm1hbGlzaWVyZW4gZ2dmLiB6dSBzcGFldCAoei5CLiBuYWNo -IEhvdC1SZWxvYWQpLg0KICAgICAgICAgICAgICAgIE5vcm1hbGlzaWVyZS1BZG1pbkxpc3RlbiAk -ZGF0ZW4NCiAgICAgICAgICAgICAgICAjIFNlcnZlci1zZWl0aWdlIFJpY2gtVGV4dC1TYW5pdGlz -aWVydW5nIChTdG9yZWQtWFNTLVNjaHV0eikuDQogICAgICAgICAgICAgICAgSW52b2tlLUFkbWlu -UmljaHRleHRTYW5pdGl6ZSAkZGF0ZW4NCiAgICAgICAgICAgICAgICAkaXN0U1UgPSBUZXN0LUlz -dFN1cGVyVXNlcg0KICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0KICAgICAg -ICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSBJbnZv -a2UtV2l0aEZpbGVMb2NrICdhZG1pbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAj -IE51ciBTdXBlclVzZXIgZGFyZiBkaWUgUm9sbGVuLUxpc3RlbiBzdXBlclVzZXIvZmFjaGF1ZnNp -Y2h0DQogICAgICAgICAgICAgICAgICAgICAgICAjIHVlYmVyIC9hcGkvYWRtaW4gYWVuZGVybiDi -gJQgc29uc3Qga29lbm50ZSBqZW1hbmQgc2ljaCBzZWxic3QNCiAgICAgICAgICAgICAgICAgICAg -ICAgICMgenVtIFN1cGVyVXNlciBiZWZvZXJkZXJuIHVuZCBkYW1pdCBkaWUgc2VwYXJhdGVuIEd1 -YXJkcyBhdWYNCiAgICAgICAgICAgICAgICAgICAgICAgICMgL2FwaS9hZG1pbi9zdXBlcnVzZXIg -Ynp3LiAvYXBpL2FkbWluL2ZhY2hhdWZzaWNodCB1bWdlaGVuLg0KICAgICAgICAgICAgICAgICAg -ICAgICAgIyBhZG1pbktlbm51bmdlbiBpc3QgZ2VuZXJlbGwgYWJnZXNjaGFmZnQgdW5kIHdpcmQg -ZW50ZmVybnQuDQogICAgICAgICAgICAgICAgICAgICAgICAjIFJlYWQgZGVyIGFsdGVuIFdlcnRl -IG11c3MgSU5ORVJIQUxCIGRlcyBMb2NrcyBwYXNzaWVyZW4sDQogICAgICAgICAgICAgICAgICAg -ICAgICAjIGRhbWl0IGRpZSBTVS9GYWNoYXVmc2ljaHQtTGlzdGVuIGF0b21hciBlcmhhbHRlbiBi -bGVpYmVuLg0KICAgICAgICAgICAgICAgICAgICAgICAgJGFsdCA9IFJlYWQtSnNvbk9iamVjdCAn -YWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRpc3RTVSkgew0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmZWxkIGluICdzdXBlclVzZXIn -LCdmYWNoYXVmc2ljaHQnLCdkaXJla3Rpb25zbGVpdHVuZycsJ2Z1ZWhydW5nc3N0ZWxsZScpIHsN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhbHQgLWFuZCAkYWx0LlBTT2Jq -ZWN0LlByb3BlcnRpZXNbJGZlbGRdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICBpZiAoJGRhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJGZlbGRdKSB7ICRkYXRlbi4kZmVs -ZCA9ICRhbHQuJGZlbGQgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz -ZSB7ICRkYXRlbiB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJGZlbGQgLU5vdGVQcm9w -ZXJ0eVZhbHVlICRhbHQuJGZlbGQgLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgfSBlbHNlaWYgKCRkYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzWyRmZWxkXSkgew0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRhdGVuLlBTT2JqZWN0LlByb3BlcnRp -ZXMuUmVtb3ZlKCRmZWxkKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgIyBLZXktVW5pb246IG5pY2h0IG1pdGdlc2VuZGV0ZSBUb3At -TGV2ZWwtS2V5cyBlcmhhbHRlbi4NCiAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lkXShNZXJn -ZS1BZG1pbktleXMgJGFsdCAkZGF0ZW4pDQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1K -c29uT2JqZWN0ICdhZG1pbi5qc29uJyAkZGF0ZW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAg -ICAgICAgICAgcmV0dXJuIEB7IG9rID0gJHRydWUgfQ0KICAgICAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3Ig -JFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAg -ICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNlbmQt -RXJyb3IgJFJlc3BvbnNlICRsb2NrRXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3RhdHVzOyBj -b250aW51ZSB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnYWRtaW4uZ2VhZW5k -ZXJ0JyBAe30NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0 -YXR1cyA9ICdnZXNwZWljaGVydCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAg -ICAgICB9DQoNCiAgICAgICAgICAgICMgU3VwZXItVXNlci1MaXN0ZTogbnVyIFN1cGVyVXNlciBk -YXJmIFN1cGVyVXNlciB2ZXJ3YWx0ZW4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkv -YWRtaW4vc3VwZXJ1c2VyJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAg -ICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAn -TnVyIFN1cGVyVXNlciBkdWVyZmVuIFN1cGVyVXNlciB2ZXJ3YWx0ZW4nIDQwMzsgY29udGludWUg -fQ0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAg -ICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUg -Z3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICMgQCguLi4pIGVyendpbmd0 -IEFycmF5IGF1Y2ggYmVpIDEgRWxlbWVudCAoUFMgNS4xIGVudHBhY2t0IHNvbnN0IHp1IEVpbnpl -bC1PYmpla3QsDQogICAgICAgICAgICAgICAgIyBkYW5uIHdpcmQgZGllIExpc3RlIGluIGFkbWlu -Lmpzb24genVtIE9iamVrdCBkZWdlbmVyaWVydCAtPiBDbGllbnQtRmVobGVyKS4NCiAgICAgICAg -ICAgICAgICAkYm9keU9iaiA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAg -ICAgICRkYXRlbiA9IFtvYmplY3RbXV1AKCRib2R5T2JqKQ0KICAgICAgICAgICAgICAgICRsb2Nr -RXJnZWJuaXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAg -ICAgICRsb2NrRXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdhZG1pbi5qc29uJyB7DQog -ICAgICAgICAgICAgICAgICAgICAgICAkYWRtaW4gPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpz -b24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbikgeyByZXR1 -cm4gQHsgb2sgPSAkZmFsc2U7IHN0YXR1cyA9IDUwMDsgbXNnID0gJ2FkbWluLmpzb24gbmljaHQg -bGVzYmFyJyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICR3aXBlTXNnID0gVGVzdC1XaXBl -U2NodXR6ICdzdXBlclVzZXInICRkYXRlbiAkYWRtaW4gJFJlcXVlc3QgJGJvZHlPYmoNCiAgICAg -ICAgICAgICAgICAgICAgICAgIGlmICgkd2lwZU1zZykgeyByZXR1cm4gQHsgb2sgPSAkZmFsc2U7 -IHN0YXR1cyA9IDQwOTsgbXNnID0gJHdpcGVNc2cgfSB9DQogICAgICAgICAgICAgICAgICAgICAg -ICAjIEFsdGUgTGlzdGUgdm9yIGRlbSBPdmVyd3JpdGUgc25hcHNob3R0ZW4g4oCUIHdpciBicmF1 -Y2hlbg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBzaWUgbmFjaCBkZW0gTG9jayBmdWVyIGRp -ZSBEaWZmLUJlcmVjaG51bmcgKG1haWx0byBiZWkNCiAgICAgICAgICAgICAgICAgICAgICAgICMg -U1UgcmVpbi9yYXVzKS4NCiAgICAgICAgICAgICAgICAgICAgICAgICRhbHRTVSA9IEAoKQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydzdXBl -clVzZXInXSkgeyAkYWx0U1UgPSBbb2JqZWN0W11dQCgkYWRtaW4uc3VwZXJVc2VyKSB9DQogICAg -ICAgICAgICAgICAgICAgICAgICBbdm9pZF0oQmFja3VwLUFkbWluSnNvbiAnc3VwZXJVc2VyJykN -CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1sn -c3VwZXJVc2VyJ10pIHsgJGFkbWluLnN1cGVyVXNlciA9ICRkYXRlbiB9DQogICAgICAgICAgICAg -ICAgICAgICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAn -c3VwZXJVc2VyJyAtTm90ZVByb3BlcnR5VmFsdWUgJGRhdGVuIC1Gb3JjZSB9DQogICAgICAgICAg -ICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJyAkYWRtaW4gfCBPdXQt -TnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IG9rID0gJHRydWU7IGFsdCA9 -ICRhbHRTVSB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNo -IHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxl -cjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -IGlmICgtbm90ICRsb2NrRXJnZWJuaXMub2spIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tF -cmdlYm5pcy5tc2cgJGxvY2tFcmdlYm5pcy5zdGF0dXM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAg -ICAgICAjIERpZmYgYWx0L25ldSBuYWNoIG53S2VubnVuZy4gU1UtUmVpbi9SYXVzIGxvZXN0IG1h -aWx0byB2aWEgQ2xpZW50IGF1cw0KICAgICAgICAgICAgICAgICMgKFZlcmFudHdvcnR1bmdzLVVl -YmVyZ2FuZyBWb3JsYWdlICdyb2xsZV92ZXJhbnR3b3J0dW5nJykuDQogICAgICAgICAgICAgICAg -JG1haWx0b0RpZmZzID0gR2V0LVJvbGxlRGlmZnMgJGxvY2tFcmdlYm5pcy5hbHQgJGRhdGVuICdT -dXBlclVzZXInICRmYWxzZQ0KICAgICAgICAgICAgICAgICMgYW56YWhsIG1pdGdlYmVuIOKAlCBk -ZXIgTG9nYnVjaC1DbGllbnQgbGllc3QgZS5hbnphaGw7IG9obmUgZGFzDQogICAgICAgICAgICAg -ICAgIyBGZWxkIGJsaWViIGRpZSBEZXRhaWwtU3BhbHRlIGJlaSBTVS1MaXN0ZW5hZW5kZXJ1bmdl -biBsZWVyDQogICAgICAgICAgICAgICAgIyAoZmFjaGF1ZnNpY2h0LmdlYWVuZGVydCB1bnRlbiBt -YWNodCBlcyBnZW5hdXNvKS4NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdzdXBl -clVzZXIuZ2VhZW5kZXJ0JyBAeyBhbnphaGwgPSAkZGF0ZW4uQ291bnQ7IGRpZmZzID0gJG1haWx0 -b0RpZmZzLkNvdW50IH0NCiAgICAgICAgICAgICAgICAkcmVzcCA9IEB7IHN0YXR1cyA9ICdnZXNw -ZWljaGVydCcgfQ0KICAgICAgICAgICAgICAgIGlmICgkbWFpbHRvRGlmZnMuQ291bnQgLWd0IDAp -IHsNCiAgICAgICAgICAgICAgICAgICAgIyBQUy01LjEtVW53cmFwLVNjaHV0ejogQCgkeCkgZXJ6 -d2luZ3QgQXJyYXkgYXVjaCBiZWkgMSBFbGVtZW50Lg0KICAgICAgICAgICAgICAgICAgICAkcmVz -cFsnX2JyYXVjaHRfbWFpbHRvJ10gPSBbb3JkZXJlZF1AeyB0cmlnZ2VyID0gJ3JvbGxlX3ZlcmFu -dHdvcnR1bmcnOyBkaWZmcyA9IFtvYmplY3RbXV1AKCRtYWlsdG9EaWZmcykgfQ0KICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlICRyZXNw -DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAg -IyBGYWNoYXVmc2ljaHQtTGlzdGU6IG51ciBTdXBlclVzZXIgZGFyZiBGYWNoYXVmc2ljaHQgdmVy -d2FsdGVuDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL2ZhY2hhdWZzaWNo -dCcgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChU -ZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051ciBTdXBlclVzZXIg -ZHVlcmZlbiBGYWNoYXVmc2ljaHQgdmVyd2FsdGVuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAg -ICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgt -bm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7 -IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYm9keU9iaiA9ICRib2R5IHwgQ29udmVydEZy -b20tSnNvbg0KICAgICAgICAgICAgICAgICRkYXRlbiA9IFtvYmplY3RbXV1AKCRib2R5T2JqKQ0K -ICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRy -eSB7DQogICAgICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVM -b2NrICdhZG1pbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAkYWRtaW4gPSBSZWFk -LUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51 -bGwgLWVxICRhZG1pbikgeyByZXR1cm4gQHsgb2sgPSAkZmFsc2U7IHN0YXR1cyA9IDUwMDsgbXNn -ID0gJ2FkbWluLmpzb24gbmljaHQgbGVzYmFyJyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAg -ICR3aXBlTXNnID0gVGVzdC1XaXBlU2NodXR6ICdmYWNoYXVmc2ljaHQnICRkYXRlbiAkYWRtaW4g -JFJlcXVlc3QgJGJvZHlPYmoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkd2lwZU1zZykg -eyByZXR1cm4gQHsgb2sgPSAkZmFsc2U7IHN0YXR1cyA9IDQwOTsgbXNnID0gJHdpcGVNc2cgfSB9 -DQogICAgICAgICAgICAgICAgICAgICAgICAkYWx0RkEgPSBAKCkNCiAgICAgICAgICAgICAgICAg -ICAgICAgIGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1snZmFjaGF1ZnNpY2h0J10pIHsg -JGFsdEZBID0gW29iamVjdFtdXUAoJGFkbWluLmZhY2hhdWZzaWNodCkgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgW3ZvaWRdKEJhY2t1cC1BZG1pbkpzb24gJ2ZhY2hhdWZzaWNodCcpDQogICAg -ICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2ZhY2hh -dWZzaWNodCddKSB7ICRhZG1pbi5mYWNoYXVmc2ljaHQgPSAkZGF0ZW4gfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgZWxzZSB7ICRhZG1pbiB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUg -J2ZhY2hhdWZzaWNodCcgLU5vdGVQcm9wZXJ0eVZhbHVlICRkYXRlbiAtRm9yY2UgfQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnYWRtaW4uanNvbicgJGFkbWluIHwg -T3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyBvayA9ICR0cnVlOyBh -bHQgPSAkYWx0RkEgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBj -YXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1G -ZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg -ICAgICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICRs -b2NrRXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3RhdHVzOyBjb250aW51ZSB9DQogICAgICAg -ICAgICAgICAgIyBGYWNoYXVmc2ljaHQtRGlmZjogdHJlbm50IG1haWx0by13dWVyZGlnZSBWZXJh -bnR3b3J0dW5ncy0NCiAgICAgICAgICAgICAgICAjIFVlYmVyZ2FlbmdlIChHZXNhbXR2ZXJhbnR3 -b3J0bGljaCByZWluL3JhdXMpIHZvbSByZXN0bGljaGVuDQogICAgICAgICAgICAgICAgIyBSb2xs -ZW4tVXBkYXRlcyAoRkEgaGluenUvcmF1cyBvaG5lIEdlc2FtdCwgb2RlciBTZWhlbi1GbGFnLQ0K -ICAgICAgICAgICAgICAgICMgV2VjaHNlbCkuIEVyc3RlIGZsaWXDn2VuIGluIGRlbiBtYWlsdG8t -VHJpZ2dlciwgZGVyIFJlc3Qgd2lyZA0KICAgICAgICAgICAgICAgICMgenUgSW4tQXBwLUhpbndl -aXNlbi4NCiAgICAgICAgICAgICAgICAkZmFBdXN3ZXJ0dW5nID0gR2V0LUZhY2hhdWZzaWNodERp -ZmZzICRsb2NrRXJnZWJuaXMuYWx0ICRkYXRlbg0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0Vp -bnRyYWcgJ2ZhY2hhdWZzaWNodC5nZWFlbmRlcnQnIEB7IGFuemFobCA9ICRkYXRlbi5Db3VudDsg -bWFpbHRvID0gJGZhQXVzd2VydHVuZy5tYWlsdG9EaWZmcy5Db3VudDsgaGlud2Vpc2UgPSAkZmFB -dXN3ZXJ0dW5nLmhpbndlaXNEaWZmcy5Db3VudCB9DQogICAgICAgICAgICAgICAgZm9yZWFjaCAo -JGggaW4gJGZhQXVzd2VydHVuZy5oaW53ZWlzRGlmZnMpIHsNCiAgICAgICAgICAgICAgICAgICAg -TmV3LUhpbndlaXMgJ3JvbGxlX2dlYWVuZGVydCcgJGggKEdldC1Ba3R1ZWxsZXJCZW51dHplcikg -fCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkcmVzcCA9IEB7 -IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfQ0KICAgICAgICAgICAgICAgIGlmICgkZmFBdXN3ZXJ0 -dW5nLm1haWx0b0RpZmZzLkNvdW50IC1ndCAwKSB7DQogICAgICAgICAgICAgICAgICAgICMgUFMt -NS4xLVVud3JhcC1TY2h1dHo6IEAoJHgpIGVyendpbmd0IEFycmF5IGF1Y2ggYmVpIDEgRWxlbWVu -dC4NCiAgICAgICAgICAgICAgICAgICAgJHJlc3BbJ19icmF1Y2h0X21haWx0byddID0gW29yZGVy -ZWRdQHsgdHJpZ2dlciA9ICdyb2xsZV92ZXJhbnR3b3J0dW5nJzsgZGlmZnMgPSBbb2JqZWN0W11d -QCgkZmFBdXN3ZXJ0dW5nLm1haWx0b0RpZmZzKSB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgJHJlc3ANCiAgICAgICAgICAgICAg -ICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIERpcmVrdGlvbnNsZWl0 -dW5nICsgRnVlaHJ1bmdzc3RlbGxlIChnbGVpY2hlcyBTY2hlbWEgd2llDQogICAgICAgICAgICAj -IEZhY2hhdWZzaWNodCwgbnVyIHNlcGFyYXRlIExpc3RlbikuIEJlaWRlIFJvdXRlbiB0ZWlsZW4g -ZGllDQogICAgICAgICAgICAjIGdsZWljaGUgTG9naWs6IFNVLW9ubHkgUFVULCBCYWNrdXAsIFNj -aHJlaWJlbiwgRGlmZnMgenUNCiAgICAgICAgICAgICMgSW4tQXBwLUhpbndlaXNlbiB1bXNldHpl -bi4NCiAgICAgICAgICAgIGlmICgoJFBhdGggLWVxICcvYXBpL2FkbWluL2RpcmVrdGlvbnNsZWl0 -dW5nJyAtb3IgJFBhdGggLWVxICcvYXBpL2FkbWluL2Z1ZWhydW5nc3N0ZWxsZScpIC1hbmQgJE1l -dGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBl -clVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIGR1ZXJmZW4gUm9s -bGVuIHZlcndhbHRlbicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGZlbGROYW1l -ID0gaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9kaXJla3Rpb25zbGVpdHVuZycpIHsgJ2RpcmVr -dGlvbnNsZWl0dW5nJyB9IGVsc2UgeyAnZnVlaHJ1bmdzc3RlbGxlJyB9DQogICAgICAgICAgICAg -ICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAk -Ym9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250 -aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHlPYmogPSAkYm9keSB8IENvbnZlcnRGcm9tLUpz -b24NCiAgICAgICAgICAgICAgICAkZGF0ZW4gPSBbb2JqZWN0W11dQCgkYm9keU9iaikNCiAgICAg -ICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0K -ICAgICAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gSW52b2tlLVdpdGhGaWxlTG9jayAn -YWRtaW4uanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGFkbWluID0gUmVhZC1Kc29u -T2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1l -cSAkYWRtaW4pIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBzdGF0dXMgPSA1MDA7IG1zZyA9ICdh -ZG1pbi5qc29uIG5pY2h0IGxlc2JhcicgfSB9DQogICAgICAgICAgICAgICAgICAgICAgICAkYWx0 -ID0gQCgpDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3Bl -cnRpZXNbJGZlbGROYW1lXSkgeyAkYWx0ID0gW29iamVjdFtdXUAoJGFkbWluLiRmZWxkTmFtZSkg -fQ0KICAgICAgICAgICAgICAgICAgICAgICAgW3ZvaWRdKEJhY2t1cC1BZG1pbkpzb24gJGZlbGRO -YW1lKQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0 -aWVzWyRmZWxkTmFtZV0pIHsgJGFkbWluLiRmZWxkTmFtZSA9ICRkYXRlbiB9DQogICAgICAgICAg -ICAgICAgICAgICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFt -ZSAkZmVsZE5hbWUgLU5vdGVQcm9wZXJ0eVZhbHVlICRkYXRlbiAtRm9yY2UgfQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnYWRtaW4uanNvbicgJGFkbWluIHwgT3V0 -LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyBvayA9ICR0cnVlOyBhbHQg -PSAkYWx0IH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2gg -ew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVy -OiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg -aWYgKC1ub3QgJGxvY2tFcmdlYm5pcy5vaykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAkbG9ja0Vy -Z2VibmlzLm1zZyAkbG9ja0VyZ2VibmlzLnN0YXR1czsgY29udGludWUgfQ0KICAgICAgICAgICAg -ICAgIFdyaXRlLUxvZ0VpbnRyYWcgKCRmZWxkTmFtZSArICcuZ2VhZW5kZXJ0JykgQHsgYW56YWhs -ID0gJGRhdGVuLkNvdW50IH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3Bv -bnNlIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVl -DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgQmV6ZWljaG51bmdlbjogT2JqZWt0IChN -YXAga2V5LT5sYWJlbCkuIExlZXJlcyBPYmpla3QgPSBSZXNldC4NCiAgICAgICAgICAgIGlmICgk -UGF0aCAtZXEgJy9hcGkvYWRtaW4vYmV6ZWljaG51bmdlbicgLWFuZCAkTWV0aG9kIC1lcSAnUFVU -Jykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVy -cm9yICRSZXNwb25zZSAnS2VpbmUgQWRtaW4tUmVjaHRlJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAg -ICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlm -ICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0 -MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkZGF0ZW4gPSAkYm9keSB8IENvbnZlcnRG -cm9tLUpzb24NCiAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gJG51bGwNCiAgICAgICAg -ICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gSW52b2tl -LVdpdGhGaWxlTG9jayAnYWRtaW4uanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGFk -bWluID0gUmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICAg -ICAgaWYgKCRudWxsIC1lcSAkYWRtaW4pIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBzdGF0dXMg -PSA1MDA7IG1zZyA9ICdhZG1pbi5qc29uIG5pY2h0IGxlc2JhcicgfSB9DQogICAgICAgICAgICAg -ICAgICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2JlemVpY2hudW5nZW4n -XSkgeyAkYWRtaW4uYmV6ZWljaG51bmdlbiA9ICRkYXRlbiB9DQogICAgICAgICAgICAgICAgICAg -ICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAnYmV6ZWlj -aG51bmdlbicgLU5vdGVQcm9wZXJ0eVZhbHVlICRkYXRlbiAtRm9yY2UgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnYWRtaW4uanNvbicgJGFkbWluIHwgT3V0LU51 -bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyBvayA9ICR0cnVlIH0NCiAgICAg -ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAg -ICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29u -dGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGxvY2tF -cmdlYm5pcy5vaykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAkbG9ja0VyZ2VibmlzLm1zZyAkbG9j -a0VyZ2VibmlzLnN0YXR1czsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0Vp -bnRyYWcgJ2JlemVpY2hudW5nZW4uZ2VhZW5kZXJ0JyBAe30NCiAgICAgICAgICAgICAgICBTZW5k -LUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfQ0KICAgICAg -ICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgU3RhdGlz -dGlrLUJhdWthc3RlbiAoc2VsYnN0Z2ViYXV0ZSBLYWNoZWxuKSArIFN1cGVyVXNlci1MYXlvdXQt -UmFzdGVyLg0KICAgICAgICAgICAgIyBHYXRlIGJld3Vzc3QgU1UgT0RFUiBHZXNhbXR2ZXJhbnR3 -b3J0bGljaCAobmljaHQgVGVzdC1Jc3RBZG1pbikg4oCUIGRlcg0KICAgICAgICAgICAgIyBCdWls -ZGVyIGxlYnQgaW0gU3RhdGlzdGlrLVRhYiB1bmQgbXVzcyBhdWNoIGZ1ZXIgR2VzYW10dmVyYW50 -d29ydGxpY2hlDQogICAgICAgICAgICAjIG9obmUgYWRtaW5pc3RyYXRpb24tWnVnYW5nIHNwZWlj -aGVyYmFyIHNlaW4uIFBhcnRpYWwtTWVyZ2UgbnVyIGRlcg0KICAgICAgICAgICAgIyBiZWlkZW4g -YmVrYW5udGVuIEtleXM7IGJlaWRlIGFscyBbb2JqZWN0W11dIHp3aW5nZW4gKFBTLTUuMS1Vbndy -YXApLg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9zdGF0aXN0aWsnIC1h -bmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICAkciA9IEdldC1SZWNodGUN -CiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoKFRlc3QtSXN0QWRtaW4pIC1vciAkci5pc3RHZXNh -bXR2ZXJhbnR3b3J0bGljaCkpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVz -cG9uc2UgJ051ciBBZG1pbnMgdW5kIEdlc2FtdHZlcmFudHdvcnRsaWNoZSBkdWVyZmVuIFN0YXRp -c3Rpay1LYWNoZWxuIGFlbmRlcm4nIDQwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAg -ICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9z -cycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGRhdGVuID0gJGJvZHkgfCBDb252 -ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGhhdEthY2hlbG4gPSAoJG51bGwgLW5lICRk -YXRlbiAtYW5kICRkYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydzdGF0aXN0aWtLYWNoZWxuJ10p -DQogICAgICAgICAgICAgICAgJGhhdExheW91dCAgPSAoJG51bGwgLW5lICRkYXRlbiAtYW5kICRk -YXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydzdGF0aXN0aWtMYXlvdXQnXSkNCiAgICAgICAgICAg -ICAgICAkbG9ja0VyZ2VibmlzID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAg -ICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gSW52b2tlLVdpdGhGaWxlTG9jayAnYWRtaW4u -anNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGFkbWluID0gUmVhZC1Kc29uT2JqZWN0 -ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkYWRt -aW4pIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBzdGF0dXMgPSA1MDA7IG1zZyA9ICdhZG1pbi5q -c29uIG5pY2h0IGxlc2JhcicgfSB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGhhdEth -Y2hlbG4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkayA9IFtvYmplY3RbXV1AKCRk -YXRlbi5zdGF0aXN0aWtLYWNoZWxuKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk -YWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1snc3RhdGlzdGlrS2FjaGVsbiddKSB7ICRhZG1pbi5z -dGF0aXN0aWtLYWNoZWxuID0gJGsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug -eyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdzdGF0aXN0aWtLYWNoZWxu -JyAtTm90ZVByb3BlcnR5VmFsdWUgJGsgLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkaGF0TGF5b3V0KSB7DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgJGwgPSBbb2JqZWN0W11dQCgkZGF0ZW4uc3RhdGlzdGlrTGF5b3V0 -KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVy -dGllc1snc3RhdGlzdGlrTGF5b3V0J10pIHsgJGFkbWluLnN0YXRpc3Rpa0xheW91dCA9ICRsIH0N -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1lbWJlciAt -Tm90ZVByb3BlcnR5TmFtZSAnc3RhdGlzdGlrTGF5b3V0JyAtTm90ZVByb3BlcnR5VmFsdWUgJGwg -LUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg -ICAgIFdyaXRlLUpzb25PYmplY3QgJ2FkbWluLmpzb24nICRhZG1pbiB8IE91dC1OdWxsDQogICAg -ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZSB9DQogICAgICAgICAgICAg +JHNjcmlwdDpVcGRhdGVMYXN0Q2hlY2tVdGMgPSBbZGF0ZXRpbWVdOjpNaW5WYWx1ZQ0KDQojIEJl +aG9lcmRlbi1Qcm94eSB2ZXJsYW5ndCBBdXRoZW50aWZpemllcnVuZyAtPiBvaG5lIG1pdGdlc2No +aWNrdGUgV2luZG93cy0NCiMgQ3JlZGVudGlhbHMgYW50d29ydGV0IGVyIG1pdCAoNDA3KSBQcm94 +eWF1dGhlbnRpZml6aWVydW5nIGVyZm9yZGVybGljaCwgdW5kDQojIEpFREVSIGF1c2dlaGVuZGUg +SFRUUFMtUmVxdWVzdCAoVXBkYXRlLUNoZWNrLCBzcGFldGVyIFVwZGF0ZS1Eb3dubG9hZCkNCiMg +c2NoZWl0ZXJ0LiBEZW0gU3lzdGVtLVByb3h5IGVpbm1hbGlnIGRpZSBhbmdlbWVsZGV0ZW4gRG9t +YWVuZW4tQ3JlZGVudGlhbHMNCiMgKE5lZ290aWF0ZS9OVExNIGRlcyBsYXVmZW5kZW4gQmVudXR6 +ZXJzKSBtaXRnZWJlbi4gV2lya3QgZ2xvYmFsIGZ1ZXINCiMgSW52b2tlLVdlYlJlcXVlc3QvV2Vi +Q2xpZW50IHVlYmVyIERlZmF1bHRXZWJQcm94eS4NCnRyeSB7DQogICAgJHN5c1Byb3h5ID0gW1N5 +c3RlbS5OZXQuV2ViUmVxdWVzdF06OkdldFN5c3RlbVdlYlByb3h5KCkNCiAgICBpZiAoJHN5c1By +b3h5KSB7DQogICAgICAgICRzeXNQcm94eS5DcmVkZW50aWFscyA9IFtTeXN0ZW0uTmV0LkNyZWRl +bnRpYWxDYWNoZV06OkRlZmF1bHROZXR3b3JrQ3JlZGVudGlhbHMNCiAgICAgICAgW1N5c3RlbS5O +ZXQuV2ViUmVxdWVzdF06OkRlZmF1bHRXZWJQcm94eSA9ICRzeXNQcm94eQ0KICAgICAgICBMb2ct +QXBpICdQUk9YWTogU3lzdGVtLVByb3h5IG1pdCBhbmdlbWVsZGV0ZW4gV2luZG93cy1DcmVkZW50 +aWFscyBrb25maWd1cmllcnQuJw0KICAgIH0NCn0gY2F0Y2ggew0KICAgIExvZy1BcGkgKCdQUk9Y +WS1TRVRVUCBGRUhMRVIgKFVwZGF0ZS1DaGVjayBldnRsLiBvaG5lIFByb3h5LUF1dGgpOiB7MH0n +IC1mICRfLkV4Y2VwdGlvbi5NZXNzYWdlKQ0KfQ0KDQpmdW5jdGlvbiBSZWZyZXNoLVVwZGF0ZUNo +ZWNrIHsNCiAgICBpZiAoKFtkYXRldGltZV06OlV0Y05vdyAtICRzY3JpcHQ6VXBkYXRlTGFzdENo +ZWNrVXRjKS5Ub3RhbE1pbnV0ZXMgLWx0IDYwKSB7IHJldHVybiB9DQogICAgJHNjcmlwdDpVcGRh +dGVMYXN0Q2hlY2tVdGMgPSBbZGF0ZXRpbWVdOjpVdGNOb3cNCiAgICAkbG9jYWxWZXIgPSAnMC4w +LjAnDQogICAgJF92ZiA9IEpvaW4tUGF0aCAkUm9vdCAnVkVSU0lPTicNCiAgICBpZiAoVGVzdC1Q +YXRoIC1MaXRlcmFsUGF0aCAkX3ZmKSB7ICRsb2NhbFZlciA9IChHZXQtQ29udGVudCAtTGl0ZXJh +bFBhdGggJF92ZiAtUmF3KS5UcmltKCkgfQ0KICAgIHRyeSB7DQogICAgICAgICMgUHJveHktQXV0 +aCBsYWV1ZnQgdWViZXIgZGllIG9iZW4gZ2xvYmFsIGdlc2V0enRlbiBEZWZhdWx0V2ViUHJveHkt +DQogICAgICAgICMgQ3JlZGVudGlhbHMuIFRpbWVvdXRTZWMgZ3Jvc3N6dWVnaWdlciAoOCBzdGF0 +dCAzIHMpLCB3ZWlsIGRlciBOVExNLQ0KICAgICAgICAjIEhhbmRzaGFrZSBkdXJjaCBkZW4gUHJv +eHkgbGFlbmdlciBkYXVlcm4ga2Fubi4NCiAgICAgICAgJHJ2ID0gKEludm9rZS1XZWJSZXF1ZXN0 +IC1VcmkgJ2h0dHBzOi8vdXBkYXRlcy5yaGluby5ucncvcmhpbm8vU3RhdHVzUXVvX1VwZGF0ZXMv +cmF3L2JyYW5jaC9tYWluL1ZJM0RHTC9WRVJTSU9OJyBgDQogICAgICAgICAgICAgICAtVXNlQmFz +aWNQYXJzaW5nIC1UaW1lb3V0U2VjIDggLUVycm9yQWN0aW9uIFN0b3ApLkNvbnRlbnQuVHJpbSgp +DQogICAgICAgICRzY3JpcHQ6UmVtb3RlVmVyc2lvbiAgID0gJHJ2DQogICAgICAgICRzY3JpcHQ6 +VXBkYXRlQXZhaWxhYmxlID0gKFtTeXN0ZW0uVmVyc2lvbl0kcnYgLWd0IFtTeXN0ZW0uVmVyc2lv +bl0kbG9jYWxWZXIpDQogICAgICAgIExvZy1BcGkgKCJVUERBVEUtQ0hFQ0s6IGxva2FsPSRsb2Nh +bFZlciByZW1vdGU9JHJ2IGF2YWlsYWJsZT0kKCRzY3JpcHQ6VXBkYXRlQXZhaWxhYmxlKSIpDQog +ICAgfSBjYXRjaCB7DQogICAgICAgIExvZy1BcGkgKCJVUERBVEUtQ0hFQ0s6IG5pY2h0IGVycmVp +Y2hiYXIgKCQoJF8uRXhjZXB0aW9uLk1lc3NhZ2UpKSIpDQogICAgfQ0KfQ0KUmVmcmVzaC1VcGRh +dGVDaGVjaw0KDQojIEluaXRpYWwtU25hcHNob3QgZGVyIE9mZmxpbmUtV29jaGVucGxhbi5odG1s +IGJlaW0gU3RhcnQgcmVnZW5lcmllcmVuDQojIChhdWNoIHdlbm4gc2VpdCBkZW0gbGV0enRlbiBM +YXVmIG5pY2h0cyBnZWFlbmRlcnQgd3VyZGUsIGhhdCBzaWNoIHouQi4NCiMgZGFzIERhdHVtIHZl +cnNjaG9iZW4gdW5kIGRlciBIZXV0ZS1NYXJrZXIgemVpZ3Qgc29uc3QgZGllIGFsdGUgV29jaGUp +Lg0KdHJ5IHsgR2VuZXJhdGUtV29jaGVucGxhblNuYXBzaG90IHwgT3V0LU51bGwgfSBjYXRjaCB7 +IExvZy1BcGkgKCdTTkFQU0hPVCAoaW5pdGlhbCkgRkVITEVSOiB7MH0nIC1mICRfLkV4Y2VwdGlv +bi5NZXNzYWdlKSB9DQoNCiMgLS0tIFNlcnZlciBzdGFydGVuIC0tLQ0KJExpc3RlbmVyID0gTmV3 +LU9iamVjdCBTeXN0ZW0uTmV0Lkh0dHBMaXN0ZW5lcg0KJExpc3RlbmVyLlByZWZpeGVzLkFkZCgi +aHR0cDovL2xvY2FsaG9zdDokUG9ydC8iKQ0KdHJ5IHsNCiAgICAkTGlzdGVuZXIuU3RhcnQoKQ0K +fSBjYXRjaCB7DQogICAgV3JpdGUtSG9zdCAoJ0ZFSExFUjogTGlzdGVuZXIgYXVmIFBvcnQgezB9 +IGthbm4gbmljaHQgc3RhcnRlbi4nIC1mICRQb3J0KSAtRm9yZWdyb3VuZENvbG9yIFJlZA0KICAg +IFdyaXRlLUhvc3QgJF8NCiAgICBMb2ctQXBpICgnTElTVEVORVIgRkVITEVSOiB7MH0nIC1mICRf +LkV4Y2VwdGlvbi5NZXNzYWdlKQ0KICAgIFN0YXJ0LVNsZWVwIC1TZWNvbmRzIDUNCiAgICBleGl0 +IDENCn0NCg0KV3JpdGUtSG9zdCAoJ1ZJMyBER0wtUGxhbnVuZyBhdWYgaHR0cDovL2xvY2FsaG9z +dDp7MH0nIC1mICRQb3J0KQ0KV3JpdGUtSG9zdCAoJ1Jvb3Q6ICAgIHswfScgLWYgJFJvb3QpDQpX +cml0ZS1Ib3N0ICgnRGF0YURpcjogezB9JyAtZiAkRGF0YURpcikNCldyaXRlLUhvc3QgKCdMb2c6 +ICAgICB7MH0nIC1mICRzY3JpcHQ6QXBpTG9nKQ0KDQojIC0tLSBIZWFydGJlYXQtV2F0Y2hkb2cg +LS0tDQokV2F0Y2hkb2dUaW1lciA9IE5ldy1PYmplY3QgU3lzdGVtLlRpbWVycy5UaW1lcg0KJFdh +dGNoZG9nVGltZXIuSW50ZXJ2YWwgPSA1MDAwDQokV2F0Y2hkb2dUaW1lci5BdXRvUmVzZXQgPSAk +dHJ1ZQ0KUmVnaXN0ZXItT2JqZWN0RXZlbnQgLUlucHV0T2JqZWN0ICRXYXRjaGRvZ1RpbWVyIC1F +dmVudE5hbWUgRWxhcHNlZCAtQWN0aW9uIHsNCiAgICAkZWxhcHNlZCA9IChHZXQtRGF0ZSkgLSAk +c2NyaXB0Okxhc3RIZWFydGJlYXQNCiAgICBpZiAoJGVsYXBzZWQuVG90YWxTZWNvbmRzIC1ndCAz +MCkgew0KICAgICAgICBpZiAoLW5vdCAkc2NyaXB0OlNodXRkb3duUGVuZGluZykgew0KICAgICAg +ICAgICAgJHNjcmlwdDpTaHV0ZG93blBlbmRpbmcgPSAkdHJ1ZQ0KICAgICAgICB9IGVsc2VpZiAo +JGVsYXBzZWQuVG90YWxTZWNvbmRzIC1ndCAzNSkgew0KICAgICAgICAgICAgJExpc3RlbmVyLlN0 +b3AoKQ0KICAgICAgICAgICAgW0Vudmlyb25tZW50XTo6RXhpdCgwKQ0KICAgICAgICB9DQogICAg +fQ0KfSB8IE91dC1OdWxsDQokV2F0Y2hkb2dUaW1lci5TdGFydCgpDQoNCiMgLS0tIFJlcXVlc3Qt +TG9vcCAtLS0NCnRyeSB7DQogICAgd2hpbGUgKCRMaXN0ZW5lci5Jc0xpc3RlbmluZykgew0KICAg +ICAgICAkQXN5bmNSZXN1bHQgPSAkTGlzdGVuZXIuQmVnaW5HZXRDb250ZXh0KCRudWxsLCAkbnVs +bCkNCiAgICAgICAgd2hpbGUgKC1ub3QgJEFzeW5jUmVzdWx0LkFzeW5jV2FpdEhhbmRsZS5XYWl0 +T25lKDEwMDApKSB7IH0NCiAgICAgICAgJENvbnRleHQgPSAkTGlzdGVuZXIuRW5kR2V0Q29udGV4 +dCgkQXN5bmNSZXN1bHQpDQogICAgICAgICRSZXF1ZXN0ID0gJENvbnRleHQuUmVxdWVzdA0KICAg +ICAgICAkUmVzcG9uc2UgPSAkQ29udGV4dC5SZXNwb25zZQ0KICAgICAgICAkTWV0aG9kID0gJFJl +cXVlc3QuSHR0cE1ldGhvZA0KICAgICAgICAkUGF0aCA9ICRSZXF1ZXN0LlVybC5BYnNvbHV0ZVBh +dGgNCiAgICAgICAgTG9nLUFwaSAoJ1JFUSB7MH0gezF9JyAtZiAkTWV0aG9kLCAkUGF0aCkNCg0K +ICAgICAgICB0cnkgew0KICAgICAgICAgICAgIyA9PT09PSBDT1JTIFByZWZsaWdodCA9PT09PQ0K +ICAgICAgICAgICAgaWYgKCRNZXRob2QgLWVxICdPUFRJT05TJykgew0KICAgICAgICAgICAgICAg +ICRSZXNwb25zZS5TdGF0dXNDb2RlID0gMjA0DQogICAgICAgICAgICAgICAgQWRkLVNlY3VyaXR5 +SGVhZGVycyAkUmVzcG9uc2UNCiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuT3V0cHV0U3RyZWFt +LkNsb3NlKCkNCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAg +ICAgICAgICAjID09PT09IFNZU1RFTSA9PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAn +L2FwaS9oZWFydGJlYXQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAg +ICAgIyBPcmlnaW4tQ2hlY2sgKFNwcmludCAxIOKAlCBTaWNoZXJoZWl0cy1Ob3RicmVtc2UgMjAy +Ni0wNS0yOCk6DQogICAgICAgICAgICAgICAgIyBIZWFydGJlYXQgYWt6ZXB0aWVydCBudXIgUmVx +dWVzdHMgdm9uIGRlciBlaWdlbmVuIEFwcC4gQW5kZXJlDQogICAgICAgICAgICAgICAgIyBsb2th +bGUgUHJvemVzc2Uga29lbm50ZW4gc29uc3QgcGVyIExvb3AgZGllIEF1dG8tU2h1dGRvd24tTG9n +aWsNCiAgICAgICAgICAgICAgICAjIHVtZ2VoZW4gb2RlciBkZW4gU2VydmVyIGJld3Vzc3QgYW0g +TGViZW4gaGFsdGVuLiBCcm93c2VyIHNlbmRldA0KICAgICAgICAgICAgICAgICMgT3JpZ2luIGF1 +dG9tYXRpc2NoOyBmZWhsZW5kZXIgSGVhZGVyIHdpcmQgdG9sZXJpZXJlbiAoc2VuZEJlYWNvbg0K +ICAgICAgICAgICAgICAgICMgaW4gbWFuY2hlbiBCcm93c2VybiksIGFiZXIgRkFMU0NIRVIgT3Jp +Z2luIHdpcmQgYWJnZWxlaG50Lg0KICAgICAgICAgICAgICAgICRvcmlnaW4gPSAkUmVxdWVzdC5I +ZWFkZXJzWydPcmlnaW4nXQ0KICAgICAgICAgICAgICAgIGlmICgkb3JpZ2luIC1hbmQgJG9yaWdp +biAtbmUgJHNjcmlwdDpDb3JzT3JpZ2luKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJy +b3IgJFJlc3BvbnNlICdPcmlnaW4gbmljaHQgZXJsYXVidCcgNDAzDQogICAgICAgICAgICAgICAg +ICAgIExvZy1BcGkgKCdIRUFSVEJFQVQgNDAzIE9yaWdpbj17MH0nIC1mICRvcmlnaW4pDQogICAg +ICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgICRzY3JpcHQ6TGFzdEhlYXJ0YmVhdCA9IEdldC1EYXRlDQogICAgICAgICAgICAgICAgJHNj +cmlwdDpTaHV0ZG93blBlbmRpbmcgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICAjIGFkbWluVmVy +c2lvbiAvIHBsYW51bmdWZXJzaW9uOiBtdGltZSBhbHMgVGlja3MuIEVybGF1YnQgZGVtDQogICAg +ICAgICAgICAgICAgIyBDbGllbnQsIFJlY2h0ZS0gYnp3LiBQZXJzb25lbi1BZW5kZXJ1bmdlbiBp +bSBIaW50ZXJncnVuZCB6dQ0KICAgICAgICAgICAgICAgICMgZXJrZW5uZW4gdW5kIFoucmVjaHRl +L1oucGxhbnVuZyBuZXUgenUgbGFkZW4sIG9obmUgZGFzcyBkZXINCiAgICAgICAgICAgICAgICAj +IFVzZXIgRjUgZHJ1ZWNrZW4gbXVzcy4gcGxhbnVuZ1ZlcnNpb24gZGVja3QgaW5zYmVzb25kZXJl +DQogICAgICAgICAgICAgICAgIyBlZGl0UmVjaHRlL3NlaGVuLVVwZGF0ZXMgYWIsIGRpZSBkZXIg +TGl2ZS1TeW5jLURlbHRhIG5pY2h0DQogICAgICAgICAgICAgICAgIyBsaWVmZXJ0IChDaGVycnkt +UGljayAxYWVmZTI2IEJ1ZyAjMykuDQogICAgICAgICAgICAgICAgJGFkbWluVmVyICAgPSAwDQog +ICAgICAgICAgICAgICAgJHBsYW51bmdWZXIgPSAwDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAg +ICAgICAgICAgICAgICAgICAgJGFkbWluRmlsZSA9IEpvaW4tUGF0aCAkRGF0YURpciAnYWRtaW4u +anNvbicNCiAgICAgICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGFk +bWluRmlsZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGFkbWluVmVyID0gKEdldC1JdGVt +IC1MaXRlcmFsUGF0aCAkYWRtaW5GaWxlKS5MYXN0V3JpdGVUaW1lVXRjLlRpY2tzDQogICAgICAg +ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJHBsYW51bmdGaWxlID0gSm9pbi1Q +YXRoICREYXRhRGlyICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgIGlmIChUZXN0 +LVBhdGggLUxpdGVyYWxQYXRoICRwbGFudW5nRmlsZSkgew0KICAgICAgICAgICAgICAgICAgICAg +ICAgJHBsYW51bmdWZXIgPSAoR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRwbGFudW5nRmlsZSkuTGFz +dFdyaXRlVGltZVV0Yy5UaWNrcw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgfSBjYXRjaCB7fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2Ug +QHsgc3RhdHVzID0gJ29rJzsgYWRtaW5WZXJzaW9uID0gJGFkbWluVmVyOyBwbGFudW5nVmVyc2lv +biA9ICRwbGFudW5nVmVyIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9zaHV0ZG93bicgLWFuZCAkTWV0aG9k +IC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNl +IEB7IHN0YXR1cyA9ICdzaHV0ZG93bicgfQ0KICAgICAgICAgICAgICAgIFN0YXJ0LVNsZWVwIC1N +aWxsaXNlY29uZHMgMzAwDQogICAgICAgICAgICAgICAgJExpc3RlbmVyLlN0b3AoKQ0KICAgICAg +ICAgICAgICAgIFtFbnZpcm9ubWVudF06OkV4aXQoMCkNCiAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvaW5mbycgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0K +ICAgICAgICAgICAgICAgIFJlZnJlc2gtVXBkYXRlQ2hlY2sNCiAgICAgICAgICAgICAgICAkciA9 +IEdldC1SZWNodGUNCiAgICAgICAgICAgICAgICAkaW5mb09iaiA9IEB7DQogICAgICAgICAgICAg +ICAgICAgIGJlbnV0emVyICAgICAgICAgICAgICAgID0gIiREb21haW5cJFVzZXJuYW1lIg0KICAg +ICAgICAgICAgICAgICAgICByb2xsZSAgICAgICAgICAgICAgICAgICA9ICRyLnJvbGxlDQogICAg +ICAgICAgICAgICAgICAgIGlzdFN1cGVyVXNlciAgICAgICAgICAgID0gJHIuaXN0U3VwZXJVc2Vy +DQogICAgICAgICAgICAgICAgICAgIGlzdEZhY2hhdWZzaWNodCAgICAgICAgID0gJHIuaXN0RmFj +aGF1ZnNpY2h0DQogICAgICAgICAgICAgICAgICAgIGlzdEdlc2FtdHZlcmFudHdvcnRsaWNoID0g +JHIuaXN0R2VzYW10dmVyYW50d29ydGxpY2gNCiAgICAgICAgICAgICAgICAgICAgc2VoZW4gICAg +ICAgICAgICAgICAgICAgPSAkci5zZWhlbg0KICAgICAgICAgICAgICAgICAgICBhZG1pblN1YnRh +YnMgICAgICAgICAgICA9ICRyLmFkbWluU3VidGFicw0KICAgICAgICAgICAgICAgICAgICBzdGF0 +aXN0aWtCZXJlaWNoZSAgICAgICA9ICRyLnN0YXRpc3Rpa0JlcmVpY2hlDQogICAgICAgICAgICAg +ICAgICAgIGVkaXRpZXJlbiAgICAgICAgICAgICAgID0gJHIuZWRpdGllcmVuICAgIyBudWxsIGJl +aSBTdXBlclVzZXIgPSAiYWxsZXMgZXJsYXVidCINCiAgICAgICAgICAgICAgICAgICAgbWVpbmVQ +ZXJzb25JZCAgICAgICAgICAgPSAkci5tZWluZVBlcnNvbklkDQogICAgICAgICAgICAgICAgICAg +IHNlcnZlciAgICAgICAgICAgICAgICAgID0gJHNjcmlwdDpDb3JzT3JpZ2luDQogICAgICAgICAg +ICAgICAgICAgIHVwZGF0ZUF2YWlsYWJsZSAgICAgICAgID0gJHNjcmlwdDpVcGRhdGVBdmFpbGFi +bGUNCiAgICAgICAgICAgICAgICAgICAgcmVtb3RlVmVyc2lvbiAgICAgICAgICAgPSAkc2NyaXB0 +OlJlbW90ZVZlcnNpb24NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1K +c29uT2JqZWN0ICRSZXNwb25zZSAkaW5mb09iag0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQog +ICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2RlYnVnJyAtYW5k +ICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgJGRhdCA9IEB7IFJvb3QgPSAk +Um9vdDsgRGF0YURpciA9ICREYXRhRGlyOyBGaWxlcyA9IEB7fSB9DQogICAgICAgICAgICAgICAg +Zm9yZWFjaCAoJGYgaW4gJ2FkbWluLmpzb24nLCdwbGFudW5nLmpzb24nLCdsb2didWNoLmpzb24n +KSB7DQogICAgICAgICAgICAgICAgICAgICRmcCA9IEpvaW4tUGF0aCAkRGF0YURpciAkZg0KICAg +ICAgICAgICAgICAgICAgICAkaW5mbyA9IEB7IGV4aXN0cyA9IChUZXN0LVBhdGggLUxpdGVyYWxQ +YXRoICRmcCkgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJGluZm8uZXhpc3RzKSB7ICRpbmZv +LnNpemUgPSAoR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRmcCkuTGVuZ3RoIH0NCiAgICAgICAgICAg +ICAgICAgICAgJGRhdC5GaWxlc1skZl0gPSAkaW5mbw0KICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICAjIFJlY2h0ZS1JbmZvICh3aWNodGlnIGZ1ZXIgQWRtaW4tVGFiLVNpY2h0YmFy +a2VpdCkNCiAgICAgICAgICAgICAgICAkZGF0LkJlbnV0emVyID0gIiREb21haW5cJFVzZXJuYW1l +Ig0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRyID0gR2V0LVJl +Y2h0ZQ0KICAgICAgICAgICAgICAgICAgICAkZGF0LlJlY2h0ZSA9IEB7DQogICAgICAgICAgICAg +ICAgICAgICAgICByb2xsZSAgICAgICAgICAgPSAkci5yb2xsZQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgaXN0U3VwZXJVc2VyICAgID0gJHIuaXN0U3VwZXJVc2VyDQogICAgICAgICAgICAgICAg +ICAgICAgICBpc3RGYWNoYXVmc2ljaHQgPSAkci5pc3RGYWNoYXVmc2ljaHQNCiAgICAgICAgICAg +ICAgICAgICAgICAgIHNlaGVuICAgICAgICAgICA9ICRyLnNlaGVuDQogICAgICAgICAgICAgICAg +ICAgICAgICBtZWluZVBlcnNvbklkICAgPSAkci5tZWluZVBlcnNvbklkDQogICAgICAgICAgICAg ICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAg -U2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQog -ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRsb2NrRXJnZWJuaXMu -b2spIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cgJGxvY2tFcmdlYm5p -cy5zdGF0dXM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdz -dGF0aXN0aWsuY29uZmlnLmdlYWVuZGVydCcgQHt9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29u -T2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAg -ICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIFN0YW5kYXJkcmVj -aHRlIChyZWd1bGFlcmUgVXNlcik6IGdlZ2Vuc2VpdGlnZSBQbGFudW5nIGplIERpZW5zdGdydXBw -ZS8NCiAgICAgICAgICAgICMgU3RhbmRvcnQuIFNVLW9ubHkuIFdpcmQgaW4gR2V0LVJlY2h0ZSBh -ZGRpdGl2IGluIGVkaXRpZXJlbiBlaW5nZXdvYmVuLg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1l -cSAnL2FwaS9hZG1pbi9zdGFuZGFyZHJlY2h0ZScgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0K -ICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJv -ciAkUmVzcG9uc2UgJ051ciBTdXBlclVzZXIgZHVlcmZlbiBTdGFuZGFyZHJlY2h0ZSBhZW5kZXJu -JyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVx -dWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3Bv -bnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAk -ZGF0ZW4gPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkZ2cgPSBA -KCk7IGlmICgkZGF0ZW4gLWFuZCAkZGF0ZW4uUFNPYmplY3QuUHJvcGVydGllc1snZ2VnZW5zZWl0 -aWdHcnVwcGVuJ10pICAgeyAkZ2cgPSBbc3RyaW5nW11dQCgkZGF0ZW4uZ2VnZW5zZWl0aWdHcnVw -cGVuICAgfCBGb3JFYWNoLU9iamVjdCB7IFtzdHJpbmddJF8gfSkgfQ0KICAgICAgICAgICAgICAg -ICRncyA9IEAoKTsgaWYgKCRkYXRlbiAtYW5kICRkYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydn -ZWdlbnNlaXRpZ1N0YW5kb3J0ZSddKSB7ICRncyA9IFtzdHJpbmdbXV1AKCRkYXRlbi5nZWdlbnNl -aXRpZ1N0YW5kb3J0ZSB8IEZvckVhY2gtT2JqZWN0IHsgW3N0cmluZ10kXyB9KSB9DQogICAgICAg -ICAgICAgICAgJHNyID0gQHsgZ2VnZW5zZWl0aWdHcnVwcGVuID0gJGdnOyBnZWdlbnNlaXRpZ1N0 -YW5kb3J0ZSA9ICRncyB9DQogICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9ICRudWxsDQog -ICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9 -IEludm9rZS1XaXRoRmlsZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAg -ICAgICRhZG1pbiA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAg -ICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGFkbWluKSB7IHJldHVybiBAeyBvayA9ICRmYWxzZTsg -c3RhdHVzID0gNTAwOyBtc2cgPSAnYWRtaW4uanNvbiBuaWNodCBsZXNiYXInIH0gfQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydzdGFuZGFy -ZFJlY2h0ZSddKSB7ICRhZG1pbi5zdGFuZGFyZFJlY2h0ZSA9ICRzciB9DQogICAgICAgICAgICAg -ICAgICAgICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAn -c3RhbmRhcmRSZWNodGUnIC1Ob3RlUHJvcGVydHlWYWx1ZSAkc3IgLUZvcmNlIH0NCiAgICAgICAg -ICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ2FkbWluLmpzb24nICRhZG1pbiB8IE91 +JGRhdC5SZWNodGUgPSBAeyBmZWhsZXIgPSAkXy5FeGNlcHRpb24uTWVzc2FnZSB9DQogICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICMgQWRtaW4uanNvbiBLdXJ6Y2hlY2sNCiAgICAg +ICAgICAgICAgICAkYWRtaW5PYmogPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAg +ICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkYWRtaW5PYmopIHsNCiAgICAgICAgICAgICAgICAg +ICAgJGRhdC5BZG1pbkpzb25MZXNiYXIgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICB9IGVsc2Ug +ew0KICAgICAgICAgICAgICAgICAgICAkYW56U1UgPSAwDQogICAgICAgICAgICAgICAgICAgIGlm +ICgkYWRtaW5PYmouc3VwZXJVc2VyKSB7ICRhbnpTVSA9IEAoJGFkbWluT2JqLnN1cGVyVXNlciku +Q291bnQgfQ0KICAgICAgICAgICAgICAgICAgICAkc3VLZW5udW5nZW4gPSBAKCkNCiAgICAgICAg +ICAgICAgICAgICAgaWYgKCRhZG1pbk9iai5zdXBlclVzZXIpIHsNCiAgICAgICAgICAgICAgICAg +ICAgICAgIGZvcmVhY2ggKCRzIGluIEAoJGFkbWluT2JqLnN1cGVyVXNlcikpIHsgJHN1S2VubnVu +Z2VuICs9IFtzdHJpbmddJHMubndLZW5udW5nIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgICAgICAkZGF0LkFkbWluSnNvbkxlc2JhciA9ICR0cnVlDQogICAgICAgICAg +ICAgICAgICAgICRkYXQuU3VwZXJVc2VyQW56YWhsID0gJGFuelNVDQogICAgICAgICAgICAgICAg +ICAgICRkYXQuU3VwZXJVc2VyS2VubnVuZ2VuID0gJHN1S2VubnVuZ2VuDQogICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgJGRhdA0KICAg +ICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09 +PT0gU1lOQy1DSEVDSyA9PT09PQ0KICAgICAgICAgICAgIyBWZXJnbGVpY2h0IHBybyBXZWItQXNz +ZXQgZGllIERhdGVpLUdyb2Vzc2UgaW4gZGVyIFNvdXJjZSAoZ2VwdWxsdGVzDQogICAgICAgICAg +ICAjIFJlcG8sICRzY3JpcHQ6QXNzZXRGYWxsYmFjaykgZ2VnZW4gZGllIERhdGVpLUdyb2Vzc2Ug +aW0gQXNzZXQtQ2FjaGUNCiAgICAgICAgICAgICMgKCRSb290LCBSb2JvY29weS1aaWVsKS4gRXJr +ZW5udCB1bnZvbGxzdGFlbmRpZ2UgUm9ib2NvcHktVWViZXItDQogICAgICAgICAgICAjIHRyYWd1 +bmdlbiwgdmVyYWx0ZXRlIEFzc2V0LUNhY2hlcyB1bmQgZmVobGVuZGUgRGF0ZWllbi4NCiAgICAg +ICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvc3luYy1jaGVjay9kYXRlaWVuJyAtYW5kICRNZXRo +b2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4p +KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBBZG1pbi1SZWNodGUnIDQwMzsgY29udGlu +dWUgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRzY3JpcHQ6QXNzZXRGYWxsYmFjaykgew0K +ICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7DQogICAgICAg +ICAgICAgICAgICAgICAgICBvayA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgZmVo +bGVyID0gJ0Fzc2V0RmFsbGJhY2sgbmljaHQga29uZmlndXJpZXJ0IOKAlCBTb3VyY2UtUGZhZCB1 +bmJla2FubnQsIFZlcmdsZWljaCBuaWNodCBtb2VnbGljaC4gKFNlcnZlciB3dXJkZSBvaG5lIC1B +c3NldEZhbGxiYWNrIGdlc3RhcnRldC4pJw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +ICR3ZWJFeHQgPSAnLmpzJywnLmNzcycsJy5odG1sJywnLmljbycsJy5wbmcnLCcuanBnJywnLmpw +ZWcnLCcuc3ZnJw0KICAgICAgICAgICAgICAgICRpZ25vcmllcmVUb3AgPSBAKCcuZ2l0JywnZG9j +cycsJ2RldicsJ3Rlc3RzJywnZGF0YScsJ2NhY2hlJykNCiAgICAgICAgICAgICAgICAkZGF0ZWll +biA9IEAoKQ0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRhbGxl +ID0gR2V0LUNoaWxkSXRlbSAtTGl0ZXJhbFBhdGggJHNjcmlwdDpBc3NldEZhbGxiYWNrIC1SZWN1 +cnNlIC1GaWxlIC1FcnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlDQogICAgICAgICAgICAgICAg +ICAgIGZvcmVhY2ggKCRmIGluICRhbGxlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkcmVs +ID0gJGYuRnVsbE5hbWUuU3Vic3RyaW5nKCRzY3JpcHQ6QXNzZXRGYWxsYmFjay5MZW5ndGggKyAx +KSAtcmVwbGFjZSAnXFwnLCAnLycNCiAgICAgICAgICAgICAgICAgICAgICAgICR0b3AgPSAoJHJl +bCAtc3BsaXQgJy8nKVswXQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRpZ25vcmllcmVU +b3AgLWNvbnRhaW5zICR0b3ApIHsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg +JGV4dCA9ICRmLkV4dGVuc2lvbi5Ub0xvd2VyKCkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlm +ICgkd2ViRXh0IC1ub3Rjb250YWlucyAkZXh0KSB7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAg +ICAgICAgICAgICRkYXRlaWVuICs9ICRyZWwNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgICAgICAjIGRhdGEvLVNvbmRlcmZhZWxsZTogbnVyIGRpZSB6d2VpIFRhcm4tTWFy +a3VwcywgYWxsZXMgYW5kZXJlDQogICAgICAgICAgICAgICAgICAgICMgbGllZ3QgaW0gRGF0YURp +ciAoYWRtaW4uanNvbi9wbGFudW5nLmpzb24vLi4uKSB1bmQgd2lyZCBuaWNodA0KICAgICAgICAg +ICAgICAgICAgICAjIGluIGRlbiBBc3NldC1DYWNoZSBrb3BpZXJ0Lg0KICAgICAgICAgICAgICAg +ICAgICBmb3JlYWNoICgkZXh0cmEgaW4gJ2RhdGEvbWFpbmZyYW1lLmh0bWwnLCdkYXRhL3Nhbml0 +aXplci5odG1sJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHNyY0V4dHJhID0gSm9pbi1Q +YXRoICRzY3JpcHQ6QXNzZXRGYWxsYmFjayAkZXh0cmENCiAgICAgICAgICAgICAgICAgICAgICAg +IGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRzcmNFeHRyYSkgeyAkZGF0ZWllbiArPSAkZXh0 +cmEgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQog +ICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgb2sgPSAkZmFs +c2U7IGZlaGxlciA9ICgnU291cmNlLVZlcnplaWNobmlzIG5pY2h0IGxlc2JhcjogJyArICRfLkV4 +Y2VwdGlvbi5NZXNzYWdlKSB9DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRkYXRlaWVuID0gJGRhdGVpZW4gfCBTb3J0LU9i +amVjdCAtVW5pcXVlDQogICAgICAgICAgICAgICAgJGVpbnRyYWVnZSA9IEAoKQ0KICAgICAgICAg +ICAgICAgICRhbnpPayA9IDA7ICRhbnpEaWZmID0gMDsgJGFuekZlaGx0QXNzZXQgPSAwOyAkYW56 +RmVobHRTb3VyY2UgPSAwDQogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHJlbCBpbiAkZGF0ZWll +bikgew0KICAgICAgICAgICAgICAgICAgICAkYXNzZXRQZmFkICA9IEpvaW4tUGF0aCAkUm9vdCAk +cmVsDQogICAgICAgICAgICAgICAgICAgICRzb3VyY2VQZmFkID0gSm9pbi1QYXRoICRzY3JpcHQ6 +QXNzZXRGYWxsYmFjayAkcmVsDQogICAgICAgICAgICAgICAgICAgICRhc3NldEJ5dGVzICA9ICRu +dWxsDQogICAgICAgICAgICAgICAgICAgICRzb3VyY2VCeXRlcyA9ICRudWxsDQogICAgICAgICAg +ICAgICAgICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRhc3NldFBmYWQpICB7ICRhc3Nl +dEJ5dGVzICA9IChHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJGFzc2V0UGZhZCkuTGVuZ3RoIH0NCiAg +ICAgICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHNvdXJjZVBmYWQp +IHsgJHNvdXJjZUJ5dGVzID0gKEdldC1JdGVtIC1MaXRlcmFsUGF0aCAkc291cmNlUGZhZCkuTGVu +Z3RoIH0NCiAgICAgICAgICAgICAgICAgICAgJHN0YXR1cyA9ICd1bmJla2FubnQnDQogICAgICAg +ICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJHNvdXJjZUJ5dGVzIC1hbmQgJG51bGwgLWVxICRh +c3NldEJ5dGVzKSB7ICRzdGF0dXMgPSAnYmVpZGVfZmVobGVuJyB9DQogICAgICAgICAgICAgICAg +ICAgIGVsc2VpZiAoJG51bGwgLWVxICRhc3NldEJ5dGVzKSAgeyAkc3RhdHVzID0gJ2Fzc2V0X2Zl +aGx0JzsgICRhbnpGZWhsdEFzc2V0KysgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlaWYgKCRu +dWxsIC1lcSAkc291cmNlQnl0ZXMpIHsgJHN0YXR1cyA9ICdzb3VyY2VfZmVobHQnOyAkYW56RmVo +bHRTb3VyY2UrKyB9DQogICAgICAgICAgICAgICAgICAgIGVsc2VpZiAoJGFzc2V0Qnl0ZXMgLWVx +ICRzb3VyY2VCeXRlcykgeyAkc3RhdHVzID0gJ29rJzsgJGFuek9rKysgfQ0KICAgICAgICAgICAg +ICAgICAgICBlbHNlIHsgJHN0YXR1cyA9ICdncm9lc3NlX2RpZmYnOyAkYW56RGlmZisrIH0NCiAg +ICAgICAgICAgICAgICAgICAgJGVpbnRyYWVnZSArPSBbb3JkZXJlZF1Aew0KICAgICAgICAgICAg +ICAgICAgICAgICAgcGZhZCAgICAgICAgPSAkcmVsDQogICAgICAgICAgICAgICAgICAgICAgICBz +b3VyY2VCeXRlcyA9ICRzb3VyY2VCeXRlcw0KICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXRC +eXRlcyAgPSAkYXNzZXRCeXRlcw0KICAgICAgICAgICAgICAgICAgICAgICAgZGlmZkJ5dGVzICAg +PSBpZiAoJG51bGwgLW5lICRzb3VyY2VCeXRlcyAtYW5kICRudWxsIC1uZSAkYXNzZXRCeXRlcykg +eyAkYXNzZXRCeXRlcyAtICRzb3VyY2VCeXRlcyB9IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAg +ICAgICAgICAgICAgICBzdGF0dXMgICAgICA9ICRzdGF0dXMNCiAgICAgICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJl +c3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgIG9rICAgICAgICAgID0gJHRydWUNCiAgICAg +ICAgICAgICAgICAgICAgc291cmNlUm9vdCAgPSAkc2NyaXB0OkFzc2V0RmFsbGJhY2sNCiAgICAg +ICAgICAgICAgICAgICAgYXNzZXRSb290ICAgPSAkUm9vdA0KICAgICAgICAgICAgICAgICAgICBh +bnphaGwgICAgICA9ICRlaW50cmFlZ2UuQ291bnQNCiAgICAgICAgICAgICAgICAgICAgYW56T2sg +ICAgICAgPSAkYW56T2sNCiAgICAgICAgICAgICAgICAgICAgYW56RGlmZiAgICAgPSAkYW56RGlm +Zg0KICAgICAgICAgICAgICAgICAgICBhbnpGZWhsdEFzc2V0ICA9ICRhbnpGZWhsdEFzc2V0DQog +ICAgICAgICAgICAgICAgICAgIGFuekZlaGx0U291cmNlID0gJGFuekZlaGx0U291cmNlDQogICAg +ICAgICAgICAgICAgICAgIGRhdGVpZW4gICAgID0gJGVpbnRyYWVnZQ0KICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAg +ICAjID09PT09IEFETUlOID09PT09DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2Fk +bWluJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgJHR4dCA9IFJl +YWQtVGV4dEZpbGUgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAk +dHh0KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdhZG1pbi5qc29uIG5pY2h0IGdlZnVuZGVuJyA0 +MDQgfQ0KICAgICAgICAgICAgICAgIGVsc2UgeyBTZW5kLUpzb25UZXh0ICRSZXNwb25zZSAkdHh0 +IH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +aWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbicgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAg +ICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURhcmZCZXJlaWNoICdhZG1pbmlzdHJhdGlvbicp +KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBBZG1pbi1SZWNodGUnIDQwMzsgY29udGlu +dWUgfQ0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAg +ICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2Ug +enUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRkYXRlbiA9ICRib2R5 +IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgIGlmICgkZGF0ZW4uUFNPYmplY3Qu +UHJvcGVydGllc1snYWRtaW5LZW5udW5nZW4nXSkgeyAkZGF0ZW4uUFNPYmplY3QuUHJvcGVydGll +cy5SZW1vdmUoJ2FkbWluS2VubnVuZ2VuJykgfQ0KICAgICAgICAgICAgICAgICMgUFMtNS4xLVVu +d3JhcC1TY2h1dHo6IGFsbGUgTGlzdGVuLUZlbGRlciwgZGllIGRlciBDbGllbnQgdW50ZXINCiAg +ICAgICAgICAgICAgICAjIEFETUlOX0xJU1RfRkVMREVSIGZ1ZWhydCwgc2VydmVyLXNlaXRpZyBh +bHMgQXJyYXlzIGVyendpbmdlbi4NCiAgICAgICAgICAgICAgICAjIFNvbnN0IHdlcmRlbiBMaXN0 +ZW4gbWl0IG51ciBlaW5lbSBFbGVtZW50IHZvbSBQb3dlclNoZWxsLUpTT04tDQogICAgICAgICAg +ICAgICAgIyBSb3VuZHRyaXAgenVtIEVpbnplbC1PYmpla3QgZW50cGFja3QgdW5kIGNsaWVudC1z +ZWl0aWcga29tbXQNCiAgICAgICAgICAgICAgICAjIGFkbWluTGlzdGVuTm9ybWFsaXNpZXJlbiBn +Z2YuIHp1IHNwYWV0ICh6LkIuIG5hY2ggSG90LVJlbG9hZCkuDQogICAgICAgICAgICAgICAgTm9y +bWFsaXNpZXJlLUFkbWluTGlzdGVuICRkYXRlbg0KICAgICAgICAgICAgICAgICMgU2VydmVyLXNl +aXRpZ2UgUmljaC1UZXh0LVNhbml0aXNpZXJ1bmcgKFN0b3JlZC1YU1MtU2NodXR6KS4NCiAgICAg +ICAgICAgICAgICBJbnZva2UtQWRtaW5SaWNodGV4dFNhbml0aXplICRkYXRlbg0KICAgICAgICAg +ICAgICAgICRpc3RTVSA9IFRlc3QtSXN0U3VwZXJVc2VyDQogICAgICAgICAgICAgICAgJGxvY2tF +cmdlYm5pcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAg +ICAgJGxvY2tFcmdlYm5pcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAg +ICAgICAgICAgICAgICAgICAgICAgICMgTnVyIFN1cGVyVXNlciBkYXJmIGRpZSBSb2xsZW4tTGlz +dGVuIHN1cGVyVXNlci9mYWNoYXVmc2ljaHQNCiAgICAgICAgICAgICAgICAgICAgICAgICMgdWVi +ZXIgL2FwaS9hZG1pbiBhZW5kZXJuIOKAlCBzb25zdCBrb2VubnRlIGplbWFuZCBzaWNoIHNlbGJz +dA0KICAgICAgICAgICAgICAgICAgICAgICAgIyB6dW0gU3VwZXJVc2VyIGJlZm9lcmRlcm4gdW5k +IGRhbWl0IGRpZSBzZXBhcmF0ZW4gR3VhcmRzIGF1Zg0KICAgICAgICAgICAgICAgICAgICAgICAg +IyAvYXBpL2FkbWluL3N1cGVydXNlciBiencuIC9hcGkvYWRtaW4vZmFjaGF1ZnNpY2h0IHVtZ2Vo +ZW4uDQogICAgICAgICAgICAgICAgICAgICAgICAjIGFkbWluS2VubnVuZ2VuIGlzdCBnZW5lcmVs +bCBhYmdlc2NoYWZmdCB1bmQgd2lyZCBlbnRmZXJudC4NCiAgICAgICAgICAgICAgICAgICAgICAg +ICMgUmVhZCBkZXIgYWx0ZW4gV2VydGUgbXVzcyBJTk5FUkhBTEIgZGVzIExvY2tzIHBhc3NpZXJl +biwNCiAgICAgICAgICAgICAgICAgICAgICAgICMgZGFtaXQgZGllIFNVL0ZhY2hhdWZzaWNodC1M +aXN0ZW4gYXRvbWFyIGVyaGFsdGVuIGJsZWliZW4uDQogICAgICAgICAgICAgICAgICAgICAgICAk +YWx0ID0gUmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICAg +ICAgaWYgKC1ub3QgJGlzdFNVKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFj +aCAoJGZlbGQgaW4gJ3N1cGVyVXNlcicsJ2ZhY2hhdWZzaWNodCcsJ2RpcmVrdGlvbnNsZWl0dW5n +JywnZnVlaHJ1bmdzc3RlbGxlJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp +ZiAoJGFsdCAtYW5kICRhbHQuUFNPYmplY3QuUHJvcGVydGllc1skZmVsZF0pIHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZGF0ZW4uUFNPYmplY3QuUHJvcGVydGll +c1skZmVsZF0pIHsgJGRhdGVuLiRmZWxkID0gJGFsdC4kZmVsZCB9DQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJGRhdGVuIHwgQWRkLU1lbWJlciAtTm90ZVByb3Bl +cnR5TmFtZSAkZmVsZCAtTm90ZVByb3BlcnR5VmFsdWUgJGFsdC4kZmVsZCAtRm9yY2UgfQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGRhdGVuLlBTT2JqZWN0LlBy +b3BlcnRpZXNbJGZlbGRdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk +ZGF0ZW4uUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJGZlbGQpDQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAjIEtleS1Vbmlvbjog +bmljaHQgbWl0Z2VzZW5kZXRlIFRvcC1MZXZlbC1LZXlzIGVyaGFsdGVuLg0KICAgICAgICAgICAg +ICAgICAgICAgICAgW3ZvaWRdKE1lcmdlLUFkbWluS2V5cyAkYWx0ICRkYXRlbikNCiAgICAgICAg +ICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ2FkbWluLmpzb24nICRkYXRlbiB8IE91 dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZSB9DQog ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAg ICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7 IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRs b2NrRXJnZWJuaXMub2spIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cg JGxvY2tFcmdlYm5pcy5zdGF0dXM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1M -b2dFaW50cmFnICdzdGFuZGFyZHJlY2h0ZS5nZWFlbmRlcnQnIEB7fQ0KICAgICAgICAgICAgICAg +b2dFaW50cmFnICdhZG1pbi5nZWFlbmRlcnQnIEB7fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNv +bk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9DQogICAgICAgICAg +ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBTdXBlci1Vc2Vy +LUxpc3RlOiBudXIgU3VwZXJVc2VyIGRhcmYgU3VwZXJVc2VyIHZlcndhbHRlbg0KICAgICAgICAg +ICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9zdXBlcnVzZXInIC1hbmQgJE1ldGhvZCAtZXEg +J1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7 +IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIGR1ZXJmZW4gU3VwZXJVc2VyIHZl +cndhbHRlbicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJv +ZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9y +ICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAg +ICAgICAgIyBAKC4uLikgZXJ6d2luZ3QgQXJyYXkgYXVjaCBiZWkgMSBFbGVtZW50IChQUyA1LjEg +ZW50cGFja3Qgc29uc3QgenUgRWluemVsLU9iamVrdCwNCiAgICAgICAgICAgICAgICAjIGRhbm4g +d2lyZCBkaWUgTGlzdGUgaW4gYWRtaW4uanNvbiB6dW0gT2JqZWt0IGRlZ2VuZXJpZXJ0IC0+IENs +aWVudC1GZWhsZXIpLg0KICAgICAgICAgICAgICAgICRib2R5T2JqID0gJGJvZHkgfCBDb252ZXJ0 +RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGRhdGVuID0gW29iamVjdFtdXUAoJGJvZHlPYmop +DQogICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9ICRudWxsDQogICAgICAgICAgICAgICAg +dHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9IEludm9rZS1XaXRoRmls +ZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRhZG1pbiA9IFJl +YWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk +bnVsbCAtZXEgJGFkbWluKSB7IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3RhdHVzID0gNTAwOyBt +c2cgPSAnYWRtaW4uanNvbiBuaWNodCBsZXNiYXInIH0gfQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgJHdpcGVNc2cgPSBUZXN0LVdpcGVTY2h1dHogJ3N1cGVyVXNlcicgJGRhdGVuICRhZG1pbiAk +UmVxdWVzdCAkYm9keU9iag0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR3aXBlTXNnKSB7 +IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3RhdHVzID0gNDA5OyBtc2cgPSAkd2lwZU1zZyB9IH0N +CiAgICAgICAgICAgICAgICAgICAgICAgICMgQWx0ZSBMaXN0ZSB2b3IgZGVtIE92ZXJ3cml0ZSBz +bmFwc2hvdHRlbiDigJQgd2lyIGJyYXVjaGVuDQogICAgICAgICAgICAgICAgICAgICAgICAjIHNp +ZSBuYWNoIGRlbSBMb2NrIGZ1ZXIgZGllIERpZmYtQmVyZWNobnVuZyAobWFpbHRvIGJlaQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgIyBTVSByZWluL3JhdXMpLg0KICAgICAgICAgICAgICAgICAg +ICAgICAgJGFsdFNVID0gQCgpDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBT +T2JqZWN0LlByb3BlcnRpZXNbJ3N1cGVyVXNlciddKSB7ICRhbHRTVSA9IFtvYmplY3RbXV1AKCRh +ZG1pbi5zdXBlclVzZXIpIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lkXShCYWNrdXAt +QWRtaW5Kc29uICdzdXBlclVzZXInKQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhZG1p +bi5QU09iamVjdC5Qcm9wZXJ0aWVzWydzdXBlclVzZXInXSkgeyAkYWRtaW4uc3VwZXJVc2VyID0g +JGRhdGVuIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQtTWVt +YmVyIC1Ob3RlUHJvcGVydHlOYW1lICdzdXBlclVzZXInIC1Ob3RlUHJvcGVydHlWYWx1ZSAkZGF0 +ZW4gLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ2Fk +bWluLmpzb24nICRhZG1pbiB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1 +cm4gQHsgb2sgPSAkdHJ1ZTsgYWx0ID0gJGFsdFNVIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9y +ICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGxvY2tFcmdlYm5pcy5vaykgeyBTZW5k +LUVycm9yICRSZXNwb25zZSAkbG9ja0VyZ2VibmlzLm1zZyAkbG9ja0VyZ2VibmlzLnN0YXR1czsg +Y29udGludWUgfQ0KICAgICAgICAgICAgICAgICMgRGlmZiBhbHQvbmV1IG5hY2ggbndLZW5udW5n +LiBTVS1SZWluL1JhdXMgbG9lc3QgbWFpbHRvIHZpYSBDbGllbnQgYXVzDQogICAgICAgICAgICAg +ICAgIyAoVmVyYW50d29ydHVuZ3MtVWViZXJnYW5nIFZvcmxhZ2UgJ3JvbGxlX3ZlcmFudHdvcnR1 +bmcnKS4NCiAgICAgICAgICAgICAgICAkbWFpbHRvRGlmZnMgPSBHZXQtUm9sbGVEaWZmcyAkbG9j +a0VyZ2VibmlzLmFsdCAkZGF0ZW4gJ1N1cGVyVXNlcicgJGZhbHNlDQogICAgICAgICAgICAgICAg +IyBhbnphaGwgbWl0Z2ViZW4g4oCUIGRlciBMb2didWNoLUNsaWVudCBsaWVzdCBlLmFuemFobDsg +b2huZSBkYXMNCiAgICAgICAgICAgICAgICAjIEZlbGQgYmxpZWIgZGllIERldGFpbC1TcGFsdGUg +YmVpIFNVLUxpc3RlbmFlbmRlcnVuZ2VuIGxlZXINCiAgICAgICAgICAgICAgICAjIChmYWNoYXVm +c2ljaHQuZ2VhZW5kZXJ0IHVudGVuIG1hY2h0IGVzIGdlbmF1c28pLg0KICAgICAgICAgICAgICAg +IFdyaXRlLUxvZ0VpbnRyYWcgJ3N1cGVyVXNlci5nZWFlbmRlcnQnIEB7IGFuemFobCA9ICRkYXRl +bi5Db3VudDsgZGlmZnMgPSAkbWFpbHRvRGlmZnMuQ291bnQgfQ0KICAgICAgICAgICAgICAgICRy +ZXNwID0gQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9DQogICAgICAgICAgICAgICAgaWYgKCRt +YWlsdG9EaWZmcy5Db3VudCAtZ3QgMCkgew0KICAgICAgICAgICAgICAgICAgICAjIFBTLTUuMS1V +bndyYXAtU2NodXR6OiBAKCR4KSBlcnp3aW5ndCBBcnJheSBhdWNoIGJlaSAxIEVsZW1lbnQuDQog +ICAgICAgICAgICAgICAgICAgICRyZXNwWydfYnJhdWNodF9tYWlsdG8nXSA9IFtvcmRlcmVkXUB7 +IHRyaWdnZXIgPSAncm9sbGVfdmVyYW50d29ydHVuZyc7IGRpZmZzID0gW29iamVjdFtdXUAoJG1h +aWx0b0RpZmZzKSB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNv +bk9iamVjdCAkUmVzcG9uc2UgJHJlc3ANCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAg +ICAgICAgfQ0KDQogICAgICAgICAgICAjIEZhY2hhdWZzaWNodC1MaXN0ZTogbnVyIFN1cGVyVXNl +ciBkYXJmIEZhY2hhdWZzaWNodCB2ZXJ3YWx0ZW4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEg +Jy9hcGkvYWRtaW4vZmFjaGF1ZnNpY2h0JyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAg +ICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRS +ZXNwb25zZSAnTnVyIFN1cGVyVXNlciBkdWVyZmVuIEZhY2hhdWZzaWNodCB2ZXJ3YWx0ZW4nIDQw +MzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0 +DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2Ug +J0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRib2R5 +T2JqID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGRhdGVuID0g +W29iamVjdFtdXUAoJGJvZHlPYmopDQogICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9ICRu +dWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGxvY2tFcmdl +Ym5pcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAgICAgICAgICAgICAg +ICAgICAgICAgICRhZG1pbiA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAgICAgICAg +ICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGFkbWluKSB7IHJldHVybiBAeyBvayA9ICRm +YWxzZTsgc3RhdHVzID0gNTAwOyBtc2cgPSAnYWRtaW4uanNvbiBuaWNodCBsZXNiYXInIH0gfQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgJHdpcGVNc2cgPSBUZXN0LVdpcGVTY2h1dHogJ2ZhY2hh +dWZzaWNodCcgJGRhdGVuICRhZG1pbiAkUmVxdWVzdCAkYm9keU9iag0KICAgICAgICAgICAgICAg +ICAgICAgICAgaWYgKCR3aXBlTXNnKSB7IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3RhdHVzID0g +NDA5OyBtc2cgPSAkd2lwZU1zZyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRhbHRGQSA9 +IEAoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0 +aWVzWydmYWNoYXVmc2ljaHQnXSkgeyAkYWx0RkEgPSBbb2JqZWN0W11dQCgkYWRtaW4uZmFjaGF1 +ZnNpY2h0KSB9DQogICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0oQmFja3VwLUFkbWluSnNv +biAnZmFjaGF1ZnNpY2h0JykNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNP +YmplY3QuUHJvcGVydGllc1snZmFjaGF1ZnNpY2h0J10pIHsgJGFkbWluLmZhY2hhdWZzaWNodCA9 +ICRkYXRlbiB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1l +bWJlciAtTm90ZVByb3BlcnR5TmFtZSAnZmFjaGF1ZnNpY2h0JyAtTm90ZVByb3BlcnR5VmFsdWUg +JGRhdGVuIC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0 +ICdhZG1pbi5qc29uJyAkYWRtaW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAg +cmV0dXJuIEB7IG9rID0gJHRydWU7IGFsdCA9ICRhbHRGQSB9DQogICAgICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1F +cnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRsb2NrRXJnZWJuaXMub2spIHsg +U2VuZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cgJGxvY2tFcmdlYm5pcy5zdGF0 +dXM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAjIEZhY2hhdWZzaWNodC1EaWZmOiB0cmVu +bnQgbWFpbHRvLXd1ZXJkaWdlIFZlcmFudHdvcnR1bmdzLQ0KICAgICAgICAgICAgICAgICMgVWVi +ZXJnYWVuZ2UgKEdlc2FtdHZlcmFudHdvcnRsaWNoIHJlaW4vcmF1cykgdm9tIHJlc3RsaWNoZW4N +CiAgICAgICAgICAgICAgICAjIFJvbGxlbi1VcGRhdGVzIChGQSBoaW56dS9yYXVzIG9obmUgR2Vz +YW10LCBvZGVyIFNlaGVuLUZsYWctDQogICAgICAgICAgICAgICAgIyBXZWNoc2VsKS4gRXJzdGUg +ZmxpZcOfZW4gaW4gZGVuIG1haWx0by1UcmlnZ2VyLCBkZXIgUmVzdCB3aXJkDQogICAgICAgICAg +ICAgICAgIyB6dSBJbi1BcHAtSGlud2Vpc2VuLg0KICAgICAgICAgICAgICAgICRmYUF1c3dlcnR1 +bmcgPSBHZXQtRmFjaGF1ZnNpY2h0RGlmZnMgJGxvY2tFcmdlYm5pcy5hbHQgJGRhdGVuDQogICAg +ICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnZmFjaGF1ZnNpY2h0LmdlYWVuZGVydCcgQHsg +YW56YWhsID0gJGRhdGVuLkNvdW50OyBtYWlsdG8gPSAkZmFBdXN3ZXJ0dW5nLm1haWx0b0RpZmZz +LkNvdW50OyBoaW53ZWlzZSA9ICRmYUF1c3dlcnR1bmcuaGlud2Vpc0RpZmZzLkNvdW50IH0NCiAg +ICAgICAgICAgICAgICBmb3JlYWNoICgkaCBpbiAkZmFBdXN3ZXJ0dW5nLmhpbndlaXNEaWZmcykg +ew0KICAgICAgICAgICAgICAgICAgICBOZXctSGlud2VpcyAncm9sbGVfZ2VhZW5kZXJ0JyAkaCAo +R2V0LUFrdHVlbGxlckJlbnV0emVyKSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgICRyZXNwID0gQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9DQogICAgICAg +ICAgICAgICAgaWYgKCRmYUF1c3dlcnR1bmcubWFpbHRvRGlmZnMuQ291bnQgLWd0IDApIHsNCiAg +ICAgICAgICAgICAgICAgICAgIyBQUy01LjEtVW53cmFwLVNjaHV0ejogQCgkeCkgZXJ6d2luZ3Qg +QXJyYXkgYXVjaCBiZWkgMSBFbGVtZW50Lg0KICAgICAgICAgICAgICAgICAgICAkcmVzcFsnX2Jy +YXVjaHRfbWFpbHRvJ10gPSBbb3JkZXJlZF1AeyB0cmlnZ2VyID0gJ3JvbGxlX3ZlcmFudHdvcnR1 +bmcnOyBkaWZmcyA9IFtvYmplY3RbXV1AKCRmYUF1c3dlcnR1bmcubWFpbHRvRGlmZnMpIH0NCiAg +ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25z +ZSAkcmVzcA0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAg +ICAgICAgICMgRGlyZWt0aW9uc2xlaXR1bmcgKyBGdWVocnVuZ3NzdGVsbGUgKGdsZWljaGVzIFNj +aGVtYSB3aWUNCiAgICAgICAgICAgICMgRmFjaGF1ZnNpY2h0LCBudXIgc2VwYXJhdGUgTGlzdGVu +KS4gQmVpZGUgUm91dGVuIHRlaWxlbiBkaWUNCiAgICAgICAgICAgICMgZ2xlaWNoZSBMb2dpazog +U1Utb25seSBQVVQsIEJhY2t1cCwgU2NocmVpYmVuLCBEaWZmcyB6dQ0KICAgICAgICAgICAgIyBJ +bi1BcHAtSGlud2Vpc2VuIHVtc2V0emVuLg0KICAgICAgICAgICAgaWYgKCgkUGF0aCAtZXEgJy9h +cGkvYWRtaW4vZGlyZWt0aW9uc2xlaXR1bmcnIC1vciAkUGF0aCAtZXEgJy9hcGkvYWRtaW4vZnVl +aHJ1bmdzc3RlbGxlJykgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAg +IGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051 +ciBTdXBlclVzZXIgZHVlcmZlbiBSb2xsZW4gdmVyd2FsdGVuJyA0MDM7IGNvbnRpbnVlIH0NCiAg +ICAgICAgICAgICAgICAkZmVsZE5hbWUgPSBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL2RpcmVr +dGlvbnNsZWl0dW5nJykgeyAnZGlyZWt0aW9uc2xlaXR1bmcnIH0gZWxzZSB7ICdmdWVocnVuZ3Nz +dGVsbGUnIH0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAg +ICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZy +YWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYm9keU9iaiA9 +ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRkYXRlbiA9IFtvYmpl +Y3RbXV1AKCRib2R5T2JqKQ0KICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0K +ICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMg +PSBJbnZva2UtV2l0aEZpbGVMb2NrICdhZG1pbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAg +ICAgICAkYWRtaW4gPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAg +ICAgICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbikgeyByZXR1cm4gQHsgb2sgPSAkZmFsc2U7 +IHN0YXR1cyA9IDUwMDsgbXNnID0gJ2FkbWluLmpzb24gbmljaHQgbGVzYmFyJyB9IH0NCiAgICAg +ICAgICAgICAgICAgICAgICAgICRhbHQgPSBAKCkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlm +ICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1skZmVsZE5hbWVdKSB7ICRhbHQgPSBbb2JqZWN0 +W11dQCgkYWRtaW4uJGZlbGROYW1lKSB9DQogICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0o +QmFja3VwLUFkbWluSnNvbiAkZmVsZE5hbWUpDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo +JGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJGZlbGROYW1lXSkgeyAkYWRtaW4uJGZlbGROYW1l +ID0gJGRhdGVuIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQt +TWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICRmZWxkTmFtZSAtTm90ZVByb3BlcnR5VmFsdWUgJGRh +dGVuIC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdh +ZG1pbi5qc29uJyAkYWRtaW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0 +dXJuIEB7IG9rID0gJHRydWU7IGFsdCA9ICRhbHQgfQ0KICAgICAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3Ig +JFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAg +ICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNlbmQt +RXJyb3IgJFJlc3BvbnNlICRsb2NrRXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3RhdHVzOyBj +b250aW51ZSB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAoJGZlbGROYW1lICsg +Jy5nZWFlbmRlcnQnKSBAeyBhbnphaGwgPSAkZGF0ZW4uQ291bnQgfQ0KICAgICAgICAgICAgICAg IFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9DQog -ICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBF -LU1haWwtVm9ybGFnZW46IE9iamVrdCAobmljaHQgQXJyYXkpIOKAlCBlaWdlbmVyIEhhbmRsZXIu -DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL2VtYWlsdm9ybGFnZW4nIC1h -bmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1J -c3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScgNDAz -OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QN -CiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAn -QW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGRhdGVu -ID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgIyBSaWNoLVRleHQt -Qm9keSBqZSBWb3JsYWdlIHNlcnZlcnNlaXRpZyBiZXJlaW5pZ2VuIChTdG9yZWQtWFNTKS4NCiAg -ICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICRkYXRlbikgew0KICAgICAgICAgICAgICAgICAg -ICBmb3JlYWNoICgkcCBpbiAkZGF0ZW4uUFNPYmplY3QuUHJvcGVydGllcykgew0KICAgICAgICAg -ICAgICAgICAgICAgICAgJHYgPSAkcC5WYWx1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYg -KCRudWxsIC1uZSAkdiAtYW5kICR2LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RleHQnXSAtYW5kICgk -di50ZXh0IC1pcyBbc3RyaW5nXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdi50 -ZXh0ID0gQ29udmVydFRvLVNhZmVSaWNoSHRtbCAkdi50ZXh0DQogICAgICAgICAgICAgICAgICAg -ICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgJGxvY2tFcmdlYm5pcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAg -ICAgICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ2Fk -bWluLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRhZG1pbiA9IFJlYWQtSnNvbk9i -amVjdCAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEg -JGFkbWluKSB7IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3RhdHVzID0gNTAwOyBtc2cgPSAnYWRt -aW4uanNvbiBuaWNodCBsZXNiYXInIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRh -ZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydlbWFpbFZvcmxhZ2VuJ10pIHsgJGFkbWluLmVtYWls -Vm9ybGFnZW4gPSAkZGF0ZW4gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRhZG1p -biB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ2VtYWlsVm9ybGFnZW4nIC1Ob3RlUHJv -cGVydHlWYWx1ZSAkZGF0ZW4gLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRl -LUpzb25PYmplY3QgJ2FkbWluLmpzb24nICRhZG1pbiB8IE91dC1OdWxsDQogICAgICAgICAgICAg -ICAgICAgICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZSB9DQogICAgICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJv -ciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAg -ICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRsb2NrRXJnZWJuaXMub2spIHsgU2Vu -ZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cgJGxvY2tFcmdlYm5pcy5zdGF0dXM7 -IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdlbWFpbHZvcmxh -Z2VuLmdlYWVuZGVydCcgQHt9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNw -b25zZSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51 -ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIEUtTWFpbC1UcmlnZ2VyLUtvbmZpZyAo -cHJvIFRyaWdnZXI6IGFrdGl2ICsgRW1wZmFlbmdlci1UYWdzKSDigJQNCiAgICAgICAgICAgICMg -YXVzc2NobGllc3NsaWNoIFN0ZXVlcnVuZyBmdWVyIGRlbiBGcm9udGVuZC1tYWlsdG86LURpc3Bh -dGNoZXIuDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL2VtYWlsdHJpZ2dl -cicgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChU -ZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQWRtaW4tUmVjaHRl -JyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVx -dWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3Bv -bnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAk -ZGF0ZW4gPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkbG9ja0Vy -Z2VibmlzID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAg -ICAkbG9ja0VyZ2VibmlzID0gSW52b2tlLVdpdGhGaWxlTG9jayAnYWRtaW4uanNvbicgew0KICAg -ICAgICAgICAgICAgICAgICAgICAgJGFkbWluID0gUmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29u -Jw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkYWRtaW4pIHsgcmV0dXJu -IEB7IG9rID0gJGZhbHNlOyBzdGF0dXMgPSA1MDA7IG1zZyA9ICdhZG1pbi5qc29uIG5pY2h0IGxl -c2JhcicgfSB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlBy -b3BlcnRpZXNbJ2VtYWlsVHJpZ2dlciddKSB7ICRhZG1pbi5lbWFpbFRyaWdnZXIgPSAkZGF0ZW4g -fQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRhZG1pbiB8IEFkZC1NZW1iZXIgLU5v -dGVQcm9wZXJ0eU5hbWUgJ2VtYWlsVHJpZ2dlcicgLU5vdGVQcm9wZXJ0eVZhbHVlICRkYXRlbiAt -Rm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnYWRtaW4u -anNvbicgJGFkbWluIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBA -eyBvayA9ICR0cnVlIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0g -Y2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2st -RmVobGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgaWYgKC1ub3QgJGxvY2tFcmdlYm5pcy5vaykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAk -bG9ja0VyZ2VibmlzLm1zZyAkbG9ja0VyZ2VibmlzLnN0YXR1czsgY29udGludWUgfQ0KICAgICAg -ICAgICAgICAgICRhbnogPSBpZiAoJGRhdGVuKSB7ICgkZGF0ZW4uUFNPYmplY3QuUHJvcGVydGll -cyB8IE1lYXN1cmUtT2JqZWN0KS5Db3VudCB9IGVsc2UgeyAwIH0NCiAgICAgICAgICAgICAgICBX -cml0ZS1Mb2dFaW50cmFnICdlbWFpbHRyaWdnZXIuZ2VhZW5kZXJ0JyBAeyBhbnphaGxfdHJpZ2dl -ciA9ICRhbnogfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsg -c3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAg -ICAgICAgIH0NCg0KICAgICAgICAgICAgJGFkbWluS2V5cyA9IEB7DQogICAgICAgICAgICAgICAg -Jy9hcGkvYWRtaW4vZmVpZXJ0YWdlJyAgICAgID0gJ2ZlaWVydGFnZScNCiAgICAgICAgICAgICAg -ICAnL2FwaS9hZG1pbi9mZXJpZW4nICAgICAgICAgPSAnZmVyaWVuJw0KICAgICAgICAgICAgICAg -ICcvYXBpL2FkbWluL3NvbmRlcnRlcm1pbmUnICA9ICdzb25kZXJ0ZXJtaW5lJw0KICAgICAgICAg -ICAgICAgICcvYXBpL2FkbWluL3N0YW5kb3J0ZScgICAgICA9ICdzdGFuZG9ydGUnDQogICAgICAg -ICAgICB9DQogICAgICAgICAgICBpZiAoJGFkbWluS2V5cy5Db250YWluc0tleSgkUGF0aCkgLWFu -ZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlz -dEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQWRtaW4tUmVjaHRlJyA0MDM7 -IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0K -ICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdB -bmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAka2V5ID0g -JGFkbWluS2V5c1skUGF0aF0NCiAgICAgICAgICAgICAgICAjIEAoLi4uKSBlcnp3aW5ndCBBcnJh -eSBhdWNoIGJlaSAxIEVsZW1lbnQgKFBTIDUuMSBlbnRwYWNrdCBzb25zdCkuDQogICAgICAgICAg -ICAgICAgJGJvZHlPYmogPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAg -ICAkZGF0ZW4gPSBbb2JqZWN0W11dQCgkYm9keU9iaikNCiAgICAgICAgICAgICAgICAjIHNvbmRl -cnRlcm1pbmUgdHJhZ2VuIFJpY2gtVGV4dCAodGV4dCkg4oCUIHNlcnZlcnNlaXRpZyBiZXJlaW5p -Z2VuLg0KICAgICAgICAgICAgICAgIGlmICgka2V5IC1lcSAnc29uZGVydGVybWluZScpIHsNCiAg -ICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGUgaW4gJGRhdGVuKSB7DQogICAgICAgICAgICAg -ICAgICAgICAgICBpZiAoJG51bGwgLW5lICRlIC1hbmQgJGUuUFNPYmplY3QuUHJvcGVydGllc1sn -dGV4dCddIC1hbmQgKCRlLnRleHQgLWlzIFtzdHJpbmddKSkgew0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICRlLnRleHQgPSBDb252ZXJ0VG8tU2FmZVJpY2hIdG1sICRlLnRleHQNCiAgICAg -ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgIH0NCiAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gJG51bGwNCiAgICAgICAgICAg -ICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gSW52b2tlLVdp -dGhGaWxlTG9jayAnYWRtaW4uanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGFkbWlu -ID0gUmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAg -aWYgKCRudWxsIC1lcSAkYWRtaW4pIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBzdGF0dXMgPSA1 -MDA7IG1zZyA9ICdhZG1pbi5qc29uIG5pY2h0IGxlc2JhcicgfSB9DQogICAgICAgICAgICAgICAg -ICAgICAgICAkd2lwZU1zZyA9IFRlc3QtV2lwZVNjaHV0eiAka2V5ICRkYXRlbiAkYWRtaW4gJFJl -cXVlc3QgJGJvZHlPYmoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkd2lwZU1zZykgeyBy -ZXR1cm4gQHsgb2sgPSAkZmFsc2U7IHN0YXR1cyA9IDQwOTsgbXNnID0gJHdpcGVNc2cgfSB9DQog -ICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0oQmFja3VwLUFkbWluSnNvbiAka2V5KQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWyRrZXld -KSB7ICRhZG1pbi4ka2V5ID0gJGRhdGVuIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug -eyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICRrZXkgLU5vdGVQcm9wZXJ0 -eVZhbHVlICRkYXRlbiAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNv -bk9iamVjdCAnYWRtaW4uanNvbicgJGFkbWluIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAg -ICAgICAgIHJldHVybiBAeyBvayA9ICR0cnVlIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRS -ZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGxvY2tFcmdlYm5pcy5vaykgeyBTZW5kLUVy -cm9yICRSZXNwb25zZSAkbG9ja0VyZ2VibmlzLm1zZyAkbG9ja0VyZ2VibmlzLnN0YXR1czsgY29u -dGludWUgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgIiRrZXkuZ2VhZW5kZXJ0 -IiBAe30NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1 -cyA9ICdnZXNwZWljaGVydCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAg -ICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL2VpbnN0ZWxsdW5nZW4n -IC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVz -dC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScg -NDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVl -c3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25z -ZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGRh -dGVuID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgIyBSaWNoLVRl -eHQgc2VydmVyc2VpdGlnIHNhbml0aXNpZXJlbiDigJQgZGllc2VyIFBmYWQgc3BlaWNoZXJ0DQog -ICAgICAgICAgICAgICAgIyBpbmZvdGV4dC9oaWxmZXRleHQvYmVkaWVudW5nc3RleHRlL2ltcHJl -c3N1bS9zdXBwb3J0aW5mby8NCiAgICAgICAgICAgICAgICAjIHNjaGxpZXNzaW5mbywgd2FyIGFi -ZXIgYmlzaGVyIGFtIFNlcnZlci1TYW5pdGl6ZXIgdm9yYmVpIChkZXINCiAgICAgICAgICAgICAg -ICAjIG51ciBhbSBWb2xsLVBVVCAvYXBpL2FkbWluIGhpbmcpLiBTY2h1dHogZ2VnZW4gbWFuaXB1 -bGllcnRlbg0KICAgICAgICAgICAgICAgICMgQ2xpZW50IC8gRGlyZWt0LUFQSS1DYWxsLg0KICAg -ICAgICAgICAgICAgIEludm9rZS1BZG1pblJpY2h0ZXh0U2FuaXRpemUgJGRhdGVuDQogICAgICAg -ICAgICAgICAgJGxvY2tFcmdlYm5pcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAg -ICAgICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ2Fk -bWluLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRhZG1pbiA9IFJlYWQtSnNvbk9i -amVjdCAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEg -JGFkbWluKSB7IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3RhdHVzID0gNTAwOyBtc2cgPSAnYWRt -aW4uanNvbiBuaWNodCBsZXNiYXInIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFj -aCAoJGsgaW4gJ2phaHInLCdpbmZvdGV4dCcsJ3N1cHBvcnRpbmZvJywnc2NobGllc3NpbmZvJywn -aGlsZmV0ZXh0JywnYmVkaWVudW5nc3RleHRlJywncGFwaWVya29yYlRhZ2VBdWZiZXdhaHJ1bmcn -LCdlbWFpbEF1dG9Eb21haW4nLCdhdmF0YXJHcm9lc3NlJywnaW1wcmVzc3VtJywnc3VwcG9ydE1h -aWxUZXh0JywnZWRpdG9yVHJpZ2dlcicpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBp -ZiAoJGRhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJGtdKSB7DQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1ska10pIHsgJGFkbWlu -LiRrID0gJGRhdGVuLiRrIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7 -ICRhZG1pbiB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJGsgLU5vdGVQcm9wZXJ0eVZh -bHVlICRkYXRlbi4kayAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAg -ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICMgZWRpdG9y -VHJpZ2dlciBpc3QgZWluIEVudW0g4oCUIGZyZW1kZSBXZXJ0ZSAoRGlyZWt0LUFQSSkgYXVmDQog -ICAgICAgICAgICAgICAgICAgICAgICAjIGRlbiBEZWZhdWx0IGtsZW1tZW4sIGRhbWl0IG5pZSBN -dWVsbCBpbiBhZG1pbi5qc29uIGxhbmRldC4NCiAgICAgICAgICAgICAgICAgICAgICAgICRldFZh -bCA9IGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1snZWRpdG9yVHJpZ2dlciddKSB7IFtz -dHJpbmddJGFkbWluLmVkaXRvclRyaWdnZXIgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgaWYgKEAoJ3JlY2h0cycsJ2xpbmtzJywnbWl0dGUnLCdkb3BwZWwnKSAtbm90Y29u -dGFpbnMgJGV0VmFsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5Q -U09iamVjdC5Qcm9wZXJ0aWVzWydlZGl0b3JUcmlnZ2VyJ10pIHsgJGFkbWluLmVkaXRvclRyaWdn -ZXIgPSAncmVjaHRzJyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRhZG1p -biB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ2VkaXRvclRyaWdnZXInIC1Ob3RlUHJv -cGVydHlWYWx1ZSAncmVjaHRzJyAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnYWRtaW4uanNvbicgJGFk -bWluIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyBvayA9ICR0 -cnVlIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0K -ICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAk -XyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYg -KC1ub3QgJGxvY2tFcmdlYm5pcy5vaykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAkbG9ja0VyZ2Vi -bmlzLm1zZyAkbG9ja0VyZ2VibmlzLnN0YXR1czsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg -IFdyaXRlLUxvZ0VpbnRyYWcgJ2VpbnN0ZWxsdW5nZW4uZ2VhZW5kZXJ0JyBAe30NCiAgICAgICAg -ICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVy -dCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAg -ICAgICMgPT09PT0gUExBTlVORyA9PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2Fw -aS9wbGFudW5nJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgJHR4 -dCA9IFJlYWQtVGV4dEZpbGUgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICBpZiAoJG51 -bGwgLWVxICR0eHQpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ3BsYW51bmcuanNvbiBuaWNodCBn -ZWZ1bmRlbicgNDA0IH0NCiAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAg -ICAgIyBWZXJzaW9ucy1TdGVtcGVsIChtdGltZS1UaWNrcykgZnVlciBvcHRpbWlzdGlzY2hlIFNw -ZXJyZSBkZXMNCiAgICAgICAgICAgICAgICAgICAgIyBFeGNlbC1JbXBvcnRzLiBEZXIgQ2xpZW50 -IHNjaGlja3QgaWhuIGJlaW0gUFVUIHp1cnVlY2suDQogICAgICAgICAgICAgICAgICAgIHRyeSB7 -DQogICAgICAgICAgICAgICAgICAgICAgICAkcHBWID0gSm9pbi1QYXRoICREYXRhRGlyICdwbGFu -dW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFs -UGF0aCAkcHBWKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFJlc3BvbnNlLkhlYWRl -cnMuQWRkKCdYLVBsYW51bmctVmVyc2lvbicsIFtzdHJpbmddKEdldC1JdGVtIC1MaXRlcmFsUGF0 -aCAkcHBWKS5MYXN0V3JpdGVUaW1lVXRjLlRpY2tzKQ0KICAgICAgICAgICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHt9DQogICAgICAgICAgICAgICAgICAgIFNl -bmQtSnNvblRleHQgJFJlc3BvbnNlICR0eHQNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEg -Jy9hcGkvcGxhbnVuZycgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAg -IGlmICgtbm90IChUZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUg -QWRtaW4tUmVjaHRlJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJl -YWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQt -RXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAg -ICAgICAgICAgICAjIFJlYWQtTW9kaWZ5LVdyaXRlIGF0b21hciBpbiBkZXIgZ2xlaWNoZW4gU3Bl -cnJlIHdpZSBkaWUgRWluemVsLQ0KICAgICAgICAgICAgICAgICMgemVsbC1FbmRwb2ludHMsIGRh -bWl0IGRlciBWb2xsLUltcG9ydCBuaWNodCBtaXQgcGFyYWxsZWxlbg0KICAgICAgICAgICAgICAg -ICMgWmVsbC1TY2hyZWlidm9yZ2FlbmdlbiB2ZXJ6YWhudC4gT3B0aW9uYWxlciBWZXJzaW9ucy1D -aGVjaw0KICAgICAgICAgICAgICAgICMgKG9wdGltaXN0aXNjaGUgTmViZW5sYWV1Zmlna2VpdCk6 -IGhhdCBkZXIgQ2xpZW50IGVpbmVuDQogICAgICAgICAgICAgICAgIyBJZi1QbGFudW5nLVZlcnNp -b24tSGVhZGVyIGdlc2NoaWNrdCB1bmQgc3RpbW10IGRlciBuaWNodCBtZWhyDQogICAgICAgICAg -ICAgICAgIyBtaXQgZGVtIGFrdHVlbGxlbiBTdGFuZCB1ZWJlcmVpbiwgd3VyZGUgendpc2NoZW56 -ZWl0bGljaA0KICAgICAgICAgICAgICAgICMgZ2VzY2hyaWViZW4gLT4gNDA5LCBOSUNIVFMgd2ly -ZCB1ZWJlcnNjaHJpZWJlbi4NCiAgICAgICAgICAgICAgICAkZXJ3YXJ0ZXRlVmVyc2lvbiA9ICRS -ZXF1ZXN0LkhlYWRlcnNbJ0lmLVBsYW51bmctVmVyc2lvbiddDQogICAgICAgICAgICAgICAgJGxv -Y2tFcmdlYm5pcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAg -ICAgICAgJGxvY2tFcmdlYm5pcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicg -ew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRlcndhcnRldGVWZXJzaW9uKSB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgJHBwViA9IEpvaW4tUGF0aCAkRGF0YURpciAncGxhbnVu -Zy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRha3R1ZWxsZVZlcnNpb24gPSAn -Jw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRo -ICRwcFYpIHsgJGFrdHVlbGxlVmVyc2lvbiA9IFtzdHJpbmddKEdldC1JdGVtIC1MaXRlcmFsUGF0 -aCAkcHBWKS5MYXN0V3JpdGVUaW1lVXRjLlRpY2tzIH0NCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICBpZiAoJGFrdHVlbGxlVmVyc2lvbiAtbmUgJGVyd2FydGV0ZVZlcnNpb24pIHsNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHR5cCA9ICdrb25mbGlrdCc7IGFr -dHVlbGwgPSAkYWt0dWVsbGVWZXJzaW9uIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0 -ZS1UZXh0RmlsZSAncGxhbnVuZy5qc29uJyAkYm9keSB8IE91dC1OdWxsDQogICAgICAgICAgICAg -ICAgICAgICAgICByZXR1cm4gQHsgdHlwID0gJ29rJyB9DQogICAgICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJv -ciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAg -ICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgkbG9ja0VyZ2VibmlzLnR5cCAtZXEgJ2tvbmZs -aWt0Jykgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7 -DQogICAgICAgICAgICAgICAgICAgICAgICBmZWhsZXIgICAgICAgICAgPSAna29uZmxpa3QnDQog -ICAgICAgICAgICAgICAgICAgICAgICBtZWxkdW5nICAgICAgICAgPSAnRGllIFBsYW51bmcgd3Vy -ZGUgendpc2NoZW56ZWl0bGljaCB2b24gZWluZXIgYW5kZXJlbiBQZXJzb24gZ2VhZW5kZXJ0LicN -CiAgICAgICAgICAgICAgICAgICAgICAgIGFrdHVlbGxlVmVyc2lvbiA9ICRsb2NrRXJnZWJuaXMu -YWt0dWVsbA0KICAgICAgICAgICAgICAgICAgICB9IDQwOQ0KICAgICAgICAgICAgICAgICAgICBj -b250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmpl -Y3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfQ0KICAgICAgICAgICAgICAg -IGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBp -L3BsYW51bmcvemVsbGUnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAg -ICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAk -Ym9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250 -aW51ZSB9DQogICAgICAgICAgICAgICAgJGEgPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAg -ICAgICAgICAgICAgICAkZGF0dW0gPSAkYS5kYXR1bQ0KICAgICAgICAgICAgICAgICRwZXJzb25J -ZCA9IFtzdHJpbmddJGEucGVyc29uSWQNCiAgICAgICAgICAgICAgICAkd2VydCA9IGlmICgkYS5Q -U09iamVjdC5Qcm9wZXJ0aWVzWyd3ZXJ0J10pIHsgJGEud2VydCB9IGVsc2UgeyAnJyB9DQogICAg -ICAgICAgICAgICAgIyBPcHRpbWlzdGljLUNvbmN1cnJlbmN5OiBXZW5uIGRlciBDbGllbnQgc2Vp -bmVuIHp1bGV0enQgZ2VzZWhlbmVuDQogICAgICAgICAgICAgICAgIyBXZXJ0IG1pdGxpZWZlcnQs -IHBydWVmZW4gd2lyIHZvciBkZW0gU2NocmVpYmVuIG9iIGRlciBTZXJ2ZXINCiAgICAgICAgICAg -ICAgICAjIG5vY2ggZGVuc2VsYmVuIFN0YW5kIGhhdC4gTWlzbWF0Y2ggLT4gNDA5IG1pdCBha3R1 -ZWxsZXJXZXJ0Lg0KICAgICAgICAgICAgICAgICRoYXRFcndhcnRldCA9ICRhLlBTT2JqZWN0LlBy -b3BlcnRpZXNbJ2Vyd2FydGV0ZXJBbHRlcldlcnQnXQ0KICAgICAgICAgICAgICAgICRlcndhcnRl -dCA9IGlmICgkaGF0RXJ3YXJ0ZXQpIHsgW3N0cmluZ10kYS5lcndhcnRldGVyQWx0ZXJXZXJ0IH0g -ZWxzZSB7ICRudWxsIH0NCg0KICAgICAgICAgICAgICAgICMgRWRpdC1SZWNodCBnZWdlbiBha3R1 -ZWxsZW4gU3RhbmQgcHJ1ZWZlbiAobm9jaCBvaG5lIExvY2sg4oCUIG51ciBMb29rdXApDQogICAg -ICAgICAgICAgICAgJHBsYW51bmdDaGVjayA9IFJlYWQtSnNvbk9iamVjdCAncGxhbnVuZy5qc29u -Jw0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJHBsYW51bmdDaGVjaykgeyBTZW5kLUVy -cm9yICRSZXNwb25zZSAncGxhbnVuZy5qc29uIG5pY2h0IGdlZnVuZGVuJyA0MDQ7IGNvbnRpbnVl -IH0NCiAgICAgICAgICAgICAgICAkemllbFBlcnNvbiA9ICRudWxsDQogICAgICAgICAgICAgICAg -aWYgKCRwbGFudW5nQ2hlY2sucGVyc29uZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgZm9yZWFj -aCAoJHBwIGluIEAoJHBsYW51bmdDaGVjay5wZXJzb25lbikpIHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgIGlmIChbc3RyaW5nXSRwcC5pZCAtZXEgJHBlcnNvbklkKSB7ICR6aWVsUGVyc29uID0g -JHBwOyBicmVhayB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZlplbGxlRWRpdGllcmVuICR6aWVsUGVy -c29uKSkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUg -QmVyZWNodGlndW5nIGZ1ZXIgZGllc2UgWmVsbGUnIDQwMzsgY29udGludWUNCiAgICAgICAgICAg -ICAgICB9DQoNCiAgICAgICAgICAgICAgICAjIFJlYWQtTW9kaWZ5LVdyaXRlIGF0b21hciBpbiBM -b2NrOg0KICAgICAgICAgICAgICAgICRjbGllbnRRdWl0dGllcnQgPSAoJGEuUFNPYmplY3QuUHJv -cGVydGllc1sndW50ZXJiZXNldHp1bmdTY2hpY2h0J10gLWFuZCAkYS51bnRlcmJlc2V0enVuZ1Nj -aGljaHQpDQogICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9ICRudWxsDQogICAgICAgICAg -ICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9IEludm9rZS1X -aXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHBs -YW51bmcgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAg -ICAgICAgIGlmICgkbnVsbCAtZXEgJHBsYW51bmcpIHsgcmV0dXJuIEB7IHR5cCA9ICdlcnJvcic7 -IGNvZGUgPSA0MDQ7IG1zZyA9ICdwbGFudW5nLmpzb24gbmljaHQgZ2VmdW5kZW4nIH0gfQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHBsYW51bmcuUFNPYmplY3QuUHJvcGVydGll -c1snZWludHJhZWdlJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZyB8 -IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ2VpbnRyYWVnZScgLU5vdGVQcm9wZXJ0eVZh -bHVlIChOZXctT2JqZWN0IFBTT2JqZWN0KSAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRwbGFudW5nLmVpbnRyYWVnZS5Q -U09iamVjdC5Qcm9wZXJ0aWVzWyRkYXR1bV0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAkcGxhbnVuZy5laW50cmFlZ2UgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICRkYXR1 -bSAtTm90ZVByb3BlcnR5VmFsdWUgKE5ldy1PYmplY3QgUFNPYmplY3QpIC1Gb3JjZQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGFsdGVyID0gJycN -CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcGxhbnVuZy5laW50cmFlZ2UuJGRhdHVtLlBT -T2JqZWN0LlByb3BlcnRpZXNbJHBlcnNvbklkXSkgeyAkYWx0ZXIgPSBbc3RyaW5nXSRwbGFudW5n -LmVpbnRyYWVnZS4kZGF0dW0uJHBlcnNvbklkIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAg -IyBPcHRpbWlzdGljLUNvbmN1cnJlbmN5LUNoZWNrDQogICAgICAgICAgICAgICAgICAgICAgICBp -ZiAoJGhhdEVyd2FydGV0IC1hbmQgJGVyd2FydGV0IC1uZSAkYWx0ZXIpIHsNCiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICByZXR1cm4gQHsgdHlwID0gJ2tvbmZsaWt0JzsgYWt0dWVsbCA9ICRh -bHRlciB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAg -ICAgICMgRnVlaHJ1bmdzLVVudGVyYmVzZXR6dW5nIChWZXJiaW5kbGljaGtlaXRzZmVuc3Rlcikg -LSBnbGVpY2hlcyBQcmluemlwIHdpZSB2b3JoZXIsDQogICAgICAgICAgICAgICAgICAgICAgICAj -IGpldHp0IGFiZXIgZ2VnZW4gZGVuIGdlbG9ja3RlbiBTdGFuZC4NCiAgICAgICAgICAgICAgICAg -ICAgICAgIGlmICgtbm90ICRjbGllbnRRdWl0dGllcnQgLWFuZCAoVGVzdC1JblZlcmJpbmRsaWNo -a2VpdCAkZGF0dW0pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsdGVTY2hpY2h0 -ID0gR2V0LUZ1ZWhydW5nc1NjaGljaHRMZXR0ZXIgJGFsdGVyDQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgJG5ldWVTY2hpY2h0ID0gR2V0LUZ1ZWhydW5nc1NjaGljaHRMZXR0ZXIgJHdlcnQN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFsdGVTY2hpY2h0IC1hbmQgJGFsdGVT -Y2hpY2h0IC1uZSAkbmV1ZVNjaGljaHQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgJGFrdHVlbGxDb3VudCA9IEdldC1GdWVocnVuZ3NDb3VudCAkcGxhbnVuZyAkZGF0dW0gJGFs -dGVTY2hpY2h0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoJGFrdHVlbGxD -b3VudCAtIDEpIC1sdCAyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy -ZXR1cm4gQHsgdHlwID0gJ3VudGVyYmVzZXR6dW5nJzsgc2NoaWNodCA9ICRhbHRlU2NoaWNodDsg -YWt0dWVsbENvdW50ID0gJGFrdHVlbGxDb3VudDsgYWx0ZXIgPSAkYWx0ZXIgfQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo -LW5vdCAkd2VydCAtb3IgW3N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFjZSgkd2VydCkpIHsNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBsYW51bmcuZWludHJhZWdlLiRkYXR1bS5Q -U09iamVjdC5Qcm9wZXJ0aWVzWyRwZXJzb25JZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgJHBsYW51bmcuZWludHJhZWdlLiRkYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzLlJl -bW92ZSgkcGVyc29uSWQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo -JHBsYW51bmcuZWludHJhZWdlLiRkYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwZXJzb25JZF0p -IHsgJHBsYW51bmcuZWludHJhZWdlLiRkYXR1bS4kcGVyc29uSWQgPSAkd2VydCB9DQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRwbGFudW5nLmVpbnRyYWVnZS4kZGF0dW0gfCBB -ZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICRwZXJzb25JZCAtTm90ZVByb3BlcnR5VmFsdWUg -JHdlcnQgLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicgJHBsYW51bmcgfCBPdXQt -TnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHR5cCA9ICdvayc7IGFsdGVy -ID0gJGFsdGVyIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0 -Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVo -bGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAg -ICAgICBpZiAoJGxvY2tFcmdlYm5pcy50eXAgLWVxICdlcnJvcicpIHsgU2VuZC1FcnJvciAkUmVz -cG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cgJGxvY2tFcmdlYm5pcy5jb2RlOyBjb250aW51ZSB9DQog -ICAgICAgICAgICAgICAgaWYgKCRsb2NrRXJnZWJuaXMudHlwIC1lcSAna29uZmxpa3QnKSB7DQog -ICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAgICAg -ICAgICAgICAgICAgICAgIGZlaGxlciAgICAgICAgPSAna29uZmxpa3QnDQogICAgICAgICAgICAg -ICAgICAgICAgICBtZWxkdW5nICAgICAgID0gJ0RpZXNlIFplbGxlIHd1cmRlIGluendpc2NoZW4g -Z2VhZW5kZXJ0LicNCiAgICAgICAgICAgICAgICAgICAgICAgIGFrdHVlbGxlcldlcnQgPSAkbG9j -a0VyZ2VibmlzLmFrdHVlbGwNCiAgICAgICAgICAgICAgICAgICAgfSA0MDkNCiAgICAgICAgICAg -ICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYg -KCRsb2NrRXJnZWJuaXMudHlwIC1lcSAndW50ZXJiZXNldHp1bmcnKSB7DQogICAgICAgICAgICAg -ICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAgICAgICAgICAgICAgICAg -ICAgIGZlaGxlciAgICAgICAgID0gJ0Z1ZWhydW5ncy1VbnRlcmJlc2V0enVuZycNCiAgICAgICAg -ICAgICAgICAgICAgICAgIGtvbmZsaWt0VHlwICAgID0gJ3VudGVyYmVzZXR6dW5nJw0KICAgICAg -ICAgICAgICAgICAgICAgICAgc2NoaWNodCAgICAgICAgPSAkbG9ja0VyZ2VibmlzLnNjaGljaHQN -CiAgICAgICAgICAgICAgICAgICAgICAgIGFrdHVlbGxDb3VudCAgID0gJGxvY2tFcmdlYm5pcy5h -a3R1ZWxsQ291bnQNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVyV2VydCAgICAgID0gJGxv -Y2tFcmdlYm5pcy5hbHRlcg0KICAgICAgICAgICAgICAgICAgICAgICAgbmV1ZXJXZXJ0ICAgICAg -PSAkd2VydA0KICAgICAgICAgICAgICAgICAgICB9IDQwOQ0KICAgICAgICAgICAgICAgICAgICBj -b250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICRhbHRlciA9ICRs -b2NrRXJnZWJuaXMuYWx0ZXINCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICd6ZWxs -ZS5nZWFlbmRlcnQnIEB7IGRhdHVtID0gJGRhdHVtOyBwZXJzb25JZCA9ICRwZXJzb25JZDsgYWx0 -ZXJXZXJ0ID0gIiRhbHRlciI7IG5ldWVyV2VydCA9ICIkd2VydCIgfQ0KICAgICAgICAgICAgICAg -ICMgTGl2ZS1TeW5jOiBDaGFuZ2UtTG9nIGZ1ZXIgZGVuIHN5bmMtd29ya2VyLg0KICAgICAgICAg -ICAgICAgIEFkZC1DaGFuZ2VMb2dFaW50cmFnICd6ZWxsZScgQHsNCiAgICAgICAgICAgICAgICAg -ICAgZGF0dW0gICAgPSAkZGF0dW0NCiAgICAgICAgICAgICAgICAgICAgcGVyc29uSWQgPSAkcGVy -c29uSWQNCiAgICAgICAgICAgICAgICAgICAgYWx0ICAgICAgPSAiJGFsdGVyIg0KICAgICAgICAg -ICAgICAgICAgICBuZXUgICAgICA9ICIkd2VydCINCiAgICAgICAgICAgICAgICB9DQoNCiAgICAg -ICAgICAgICAgICAjIFVudGVyYmVzZXR6dW5ncy1RdWl0dHVuZzogZXh0cmEgTG9nYnVjaC1FaW50 -cmFnLCBkZW4gRmFjaGF1ZnNpY2h0L1dMIHNlaGVuIHNvbGwNCiAgICAgICAgICAgICAgICBpZiAo -JGEuUFNPYmplY3QuUHJvcGVydGllc1sndW50ZXJiZXNldHp1bmdTY2hpY2h0J10gLWFuZCAkYS51 -bnRlcmJlc2V0enVuZ1NjaGljaHQpIHsNCiAgICAgICAgICAgICAgICAgICAgJHNjaGljaHRMZXR0 -ZXIgPSBbc3RyaW5nXSRhLnVudGVyYmVzZXR6dW5nU2NoaWNodA0KICAgICAgICAgICAgICAgICAg -ICAkc2NoaWNodFRleHQgPSBzd2l0Y2ggKCRzY2hpY2h0TGV0dGVyKSB7DQogICAgICAgICAgICAg -ICAgICAgICAgICAnRicgeyAnRnJ1ZWhzY2hpY2h0JyB9DQogICAgICAgICAgICAgICAgICAgICAg -ICAnUycgeyAnU3BhZXRzY2hpY2h0JyB9DQogICAgICAgICAgICAgICAgICAgICAgICAnTicgeyAn -TmFjaHRzY2hpY2h0JyB9DQogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IHsgJHNjaGlj -aHRMZXR0ZXIgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICRv -ZVR4dCA9ICcnDQogICAgICAgICAgICAgICAgICAgIGlmICgkemllbFBlcnNvbiAtYW5kICR6aWVs -UGVyc29uLlBTT2JqZWN0LlByb3BlcnRpZXNbJ29lJ10pIHsgJG9lVHh0ID0gW3N0cmluZ10kemll -bFBlcnNvbi5vZSB9DQogICAgICAgICAgICAgICAgICAgICRuYW1lVHh0ID0gJycNCiAgICAgICAg -ICAgICAgICAgICAgaWYgKCR6aWVsUGVyc29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAk -dm4gPSAnJzsgaWYgKCR6aWVsUGVyc29uLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Zvcm5hbWUnXSkg -eyAkdm4gPSBbc3RyaW5nXSR6aWVsUGVyc29uLnZvcm5hbWUgfQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgJG5hbWVUeHQgPSAoIiR2biAkKCR6aWVsUGVyc29uLm5hbWUpIikuVHJpbSgpDQogICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAn -dW50ZXJiZXNldHp1bmcucXVpdHRpZXJ0JyBAew0KICAgICAgICAgICAgICAgICAgICAgICAgZGF0 -dW0gICAgID0gJGRhdHVtDQogICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25JZCAgPSAkcGVy -c29uSWQNCiAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNvbiAgICA9ICRuYW1lVHh0DQogICAg -ICAgICAgICAgICAgICAgICAgICBvZSAgICAgICAgPSAkb2VUeHQNCiAgICAgICAgICAgICAgICAg -ICAgICAgIHNjaGljaHQgICA9ICRzY2hpY2h0VGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAg -YWx0ZXJXZXJ0ID0gIiRhbHRlciINCiAgICAgICAgICAgICAgICAgICAgICAgIG5ldWVyV2VydCA9 -ICIkd2VydCINCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICAjIFBoYXNlIEQuMyAoMjAyNi0wNS0yMSk6IHdlbm4gZGllIEtyYW5rbWVsZHVu -ZyB6dXJ1ZWNrZ2Vub21tZW4NCiAgICAgICAgICAgICAgICAjIHdpcmQgKGFsdGVyIFdlcnQgd2Fy -IGtyL0t1ciwgbmV1ZXIgV2VydCBpc3QgZXMgbmljaHQgbWVociksDQogICAgICAgICAgICAgICAg -IyBlbnRmZXJuZW4gd2lyIGRlbiBvZmZlbmVuIEhpbndlaXMg4oCUIHNvbnN0IGlzdCBlciBiaXMg -enUNCiAgICAgICAgICAgICAgICAjIDMwIFRhZ2UgcHJhZXNlbnQsIG9id29obCBkYXMgRXJlaWdu -aXMgZXJsZWRpZ3QgaXN0Lg0KICAgICAgICAgICAgICAgIGlmICgoJGFsdGVyIC1lcSAna3InIC1v -ciAkYWx0ZXIgLWVxICdLdXInKSAtYW5kICgkd2VydCAtbmUgJ2tyJyAtYW5kICR3ZXJ0IC1uZSAn -S3VyJykpIHsNCiAgICAgICAgICAgICAgICAgICAgUmVtb3ZlLU9mZmVuZUtyYW5rbWVsZHVuZ3NI -aW53ZWlzZSAkcGVyc29uSWQgJGRhdHVtDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgICMgSGlud2Vpcy1UcmlnZ2VyOiBLcmFua21lbGR1bmcgZXJ6ZXVndCBlaW5lbiBJbi1BcHAt -SGlud2Vpcw0KICAgICAgICAgICAgICAgICMgZnVlciBTVSArIEdlc2FtdHZlcmFudHdvcnRsaWNo -ZSAoU2NoaWNodGxvY2ggaW0gTW9kYWwgZGlyZWt0DQogICAgICAgICAgICAgICAgIyBhZHJlc3Np -ZXJiYXIgdmlhICJLYW5kaWRhdGVuIGFuc2NocmVpYmVuIi1CdXR0b24pLg0KICAgICAgICAgICAg -ICAgIGlmICgkd2VydCAtZXEgJ2tyJyAtb3IgJHdlcnQgLWVxICdLdXInKSB7DQogICAgICAgICAg -ICAgICAgICAgICRrbU5hbWUgPSAnJw0KICAgICAgICAgICAgICAgICAgICBpZiAoJHppZWxQZXJz -b24pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRrdm4gPSAnJzsgaWYgKCR6aWVsUGVyc29u -LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Zvcm5hbWUnXSkgeyAka3ZuID0gW3N0cmluZ10kemllbFBl -cnNvbi52b3JuYW1lIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRrbU5hbWUgPSAoIiRrdm4g -JCgkemllbFBlcnNvbi5uYW1lKSIpLlRyaW0oKQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgICAgICRrbUdydXBwZSA9ICcnDQogICAgICAgICAgICAgICAgICAgIGlmICgk -emllbFBlcnNvbiAtYW5kICR6aWVsUGVyc29uLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2dydXBwZSdd -KSB7ICRrbUdydXBwZSA9IFtzdHJpbmddJHppZWxQZXJzb24uZ3J1cHBlIH0NCiAgICAgICAgICAg -ICAgICAgICAgJGttU2NoaWNodExldHRlciA9ICcnDQogICAgICAgICAgICAgICAgICAgIGlmICgi -JGFsdGVyIiAtbWF0Y2ggJ14oW0ZTTl0pLScpIHsgJGttU2NoaWNodExldHRlciA9ICRNYXRjaGVz -WzFdIH0NCiAgICAgICAgICAgICAgICAgICAgTmV3LUhpbndlaXMgJ2tyYW5rbWVsZHVuZycgKFtv -cmRlcmVkXUB7DQogICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25faWQgICAgPSAkcGVyc29u -SWQNCiAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNvbl9uYW1lICA9ICRrbU5hbWUNCiAgICAg -ICAgICAgICAgICAgICAgICAgIGdydXBwZSAgICAgICA9ICRrbUdydXBwZQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgZGF0dW0gICAgICAgID0gJGRhdHVtDQogICAgICAgICAgICAgICAgICAgICAg -ICBzY2hpY2h0Q29kZSAgPSAiJGFsdGVyIg0KICAgICAgICAgICAgICAgICAgICAgICAgc2NoaWNo -dEt1cnogID0gJGttU2NoaWNodExldHRlcg0KICAgICAgICAgICAgICAgICAgICAgICAgY29kZSAg -ICAgICAgID0gIiR3ZXJ0Ig0KICAgICAgICAgICAgICAgICAgICB9KSAoR2V0LUFrdHVlbGxlckJl -bnV0emVyKSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNl -bmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JzsgYWx0ZXJX -ZXJ0ID0gJGFsdGVyIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0K -ICAgICAgICAgICAgIyBCdWxrLVNjaHJlaWJlbiBtZWhyZXJlciBaZWxsZW4gaW4gZWluZW0gU2No -cml0dCDigJQgYXVmZ2VydWZlbg0KICAgICAgICAgICAgIyB2b20gRXhjZWwtRnVlbGwtR3JpZmYu -IFNwYXJ0IHBybyBEcmFnIGJpcyB6dSAxMDArIEhUVFAtUm91bmR0cmlwcw0KICAgICAgICAgICAg -IyB1bmQgRGF0ZWktU2NocmVpYnZvcmdhZW5nZS4gUGVybWlzc2lvbi1DaGVjayBwcm8gWmVsbGUs -IGVpbg0KICAgICAgICAgICAgIyBlaW56aWdlciBMb2didWNoLUVpbnRyYWcgZmFzc3QgZGllIEFr -dGlvbiB6dXNhbW1lbi4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy96 -ZWxsZW4tYnVsaycgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICAk +ICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBC +ZXplaWNobnVuZ2VuOiBPYmpla3QgKE1hcCBrZXktPmxhYmVsKS4gTGVlcmVzIE9iamVrdCA9IFJl +c2V0Lg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9iZXplaWNobnVuZ2Vu +JyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRl +c3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBBZG1pbi1SZWNodGUn +IDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1 +ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9u +c2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRk +YXRlbiA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRsb2NrRXJn +ZWJuaXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAg +ICRsb2NrRXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdhZG1pbi5qc29uJyB7DQogICAg +ICAgICAgICAgICAgICAgICAgICAkYWRtaW4gPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24n +DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbikgeyByZXR1cm4g +QHsgb2sgPSAkZmFsc2U7IHN0YXR1cyA9IDUwMDsgbXNnID0gJ2FkbWluLmpzb24gbmljaHQgbGVz +YmFyJyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNPYmplY3QuUHJv +cGVydGllc1snYmV6ZWljaG51bmdlbiddKSB7ICRhZG1pbi5iZXplaWNobnVuZ2VuID0gJGRhdGVu +IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1O +b3RlUHJvcGVydHlOYW1lICdiZXplaWNobnVuZ2VuJyAtTm90ZVByb3BlcnR5VmFsdWUgJGRhdGVu +IC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdhZG1p +bi5qc29uJyAkYWRtaW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu +IEB7IG9rID0gJHRydWUgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg +fSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9j +ay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNl +ICRsb2NrRXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3RhdHVzOyBjb250aW51ZSB9DQogICAg +ICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnYmV6ZWljaG51bmdlbi5nZWFlbmRlcnQnIEB7 +fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0g +J2dlc3BlaWNoZXJ0JyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0N +Cg0KICAgICAgICAgICAgIyBTdGF0aXN0aWstQmF1a2FzdGVuIChzZWxic3RnZWJhdXRlIEthY2hl +bG4pICsgU3VwZXJVc2VyLUxheW91dC1SYXN0ZXIuDQogICAgICAgICAgICAjIEdhdGUgYmV3dXNz +dCBTVSBPREVSIEdlc2FtdHZlcmFudHdvcnRsaWNoIChuaWNodCBUZXN0LUlzdEFkbWluKSDigJQg +ZGVyDQogICAgICAgICAgICAjIEJ1aWxkZXIgbGVidCBpbSBTdGF0aXN0aWstVGFiIHVuZCBtdXNz +IGF1Y2ggZnVlciBHZXNhbXR2ZXJhbnR3b3J0bGljaGUNCiAgICAgICAgICAgICMgb2huZSBhZG1p +bmlzdHJhdGlvbi1adWdhbmcgc3BlaWNoZXJiYXIgc2Vpbi4gUGFydGlhbC1NZXJnZSBudXIgZGVy +DQogICAgICAgICAgICAjIGJlaWRlbiBiZWthbm50ZW4gS2V5czsgYmVpZGUgYWxzIFtvYmplY3Rb +XV0gendpbmdlbiAoUFMtNS4xLVVud3JhcCkuDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcv +YXBpL2FkbWluL3N0YXRpc3RpaycgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAg +ICAgICAgICRyID0gR2V0LVJlY2h0ZQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICgoVGVzdC1J +c3RBZG1pbikgLW9yICRyLmlzdEdlc2FtdHZlcmFudHdvcnRsaWNoKSkgew0KICAgICAgICAgICAg +ICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnTnVyIEFkbWlucyB1bmQgR2VzYW10dmVyYW50 +d29ydGxpY2hlIGR1ZXJmZW4gU3RhdGlzdGlrLUthY2hlbG4gYWVuZGVybicgNDAzOyBjb250aW51 +ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAk +UmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJl +c3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAg +ICAkZGF0ZW4gPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkaGF0 +S2FjaGVsbiA9ICgkbnVsbCAtbmUgJGRhdGVuIC1hbmQgJGRhdGVuLlBTT2JqZWN0LlByb3BlcnRp +ZXNbJ3N0YXRpc3Rpa0thY2hlbG4nXSkNCiAgICAgICAgICAgICAgICAkaGF0TGF5b3V0ICA9ICgk +bnVsbCAtbmUgJGRhdGVuIC1hbmQgJGRhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3N0YXRpc3Rp +a0xheW91dCddKQ0KICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0KICAgICAg +ICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSBJbnZv +a2UtV2l0aEZpbGVMb2NrICdhZG1pbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAk +YWRtaW4gPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgICAg +ICAgICBpZiAoJG51bGwgLWVxICRhZG1pbikgeyByZXR1cm4gQHsgb2sgPSAkZmFsc2U7IHN0YXR1 +cyA9IDUwMDsgbXNnID0gJ2FkbWluLmpzb24gbmljaHQgbGVzYmFyJyB9IH0NCiAgICAgICAgICAg +ICAgICAgICAgICAgIGlmICgkaGF0S2FjaGVsbikgew0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICRrID0gW29iamVjdFtdXUAoJGRhdGVuLnN0YXRpc3Rpa0thY2hlbG4pDQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydzdGF0aXN0 +aWtLYWNoZWxuJ10pIHsgJGFkbWluLnN0YXRpc3Rpa0thY2hlbG4gPSAkayB9DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgZWxzZSB7ICRhZG1pbiB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0 +eU5hbWUgJ3N0YXRpc3Rpa0thY2hlbG4nIC1Ob3RlUHJvcGVydHlWYWx1ZSAkayAtRm9yY2UgfQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRo +YXRMYXlvdXQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbCA9IFtvYmplY3RbXV1A +KCRkYXRlbi5zdGF0aXN0aWtMYXlvdXQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg +KCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydzdGF0aXN0aWtMYXlvdXQnXSkgeyAkYWRtaW4u +c3RhdGlzdGlrTGF5b3V0ID0gJGwgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug +eyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdzdGF0aXN0aWtMYXlvdXQn +IC1Ob3RlUHJvcGVydHlWYWx1ZSAkbCAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnYWRtaW4uanNvbicg +JGFkbWluIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyBvayA9 +ICR0cnVlIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2gg +ew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVy +OiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg +aWYgKC1ub3QgJGxvY2tFcmdlYm5pcy5vaykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAkbG9ja0Vy +Z2VibmlzLm1zZyAkbG9ja0VyZ2VibmlzLnN0YXR1czsgY29udGludWUgfQ0KICAgICAgICAgICAg +ICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3N0YXRpc3Rpay5jb25maWcuZ2VhZW5kZXJ0JyBAe30NCiAg +ICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZXNw +ZWljaGVydCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAg +ICAgICAgICAgICMgU3RhbmRhcmRyZWNodGUgKHJlZ3VsYWVyZSBVc2VyKTogZ2VnZW5zZWl0aWdl +IFBsYW51bmcgamUgRGllbnN0Z3J1cHBlLw0KICAgICAgICAgICAgIyBTdGFuZG9ydC4gU1Utb25s +eS4gV2lyZCBpbiBHZXQtUmVjaHRlIGFkZGl0aXYgaW4gZWRpdGllcmVuIGVpbmdld29iZW4uDQog +ICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL3N0YW5kYXJkcmVjaHRlJyAtYW5k +ICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0 +U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnTnVyIFN1cGVyVXNlciBkdWVyZmVu +IFN0YW5kYXJkcmVjaHRlIGFlbmRlcm4nIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg +ICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJv +ZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGlu +dWUgfQ0KICAgICAgICAgICAgICAgICRkYXRlbiA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0K +ICAgICAgICAgICAgICAgICRnZyA9IEAoKTsgaWYgKCRkYXRlbiAtYW5kICRkYXRlbi5QU09iamVj +dC5Qcm9wZXJ0aWVzWydnZWdlbnNlaXRpZ0dydXBwZW4nXSkgICB7ICRnZyA9IFtzdHJpbmdbXV1A +KCRkYXRlbi5nZWdlbnNlaXRpZ0dydXBwZW4gICB8IEZvckVhY2gtT2JqZWN0IHsgW3N0cmluZ10k +XyB9KSB9DQogICAgICAgICAgICAgICAgJGdzID0gQCgpOyBpZiAoJGRhdGVuIC1hbmQgJGRhdGVu +LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2dlZ2Vuc2VpdGlnU3RhbmRvcnRlJ10pIHsgJGdzID0gW3N0 +cmluZ1tdXUAoJGRhdGVuLmdlZ2Vuc2VpdGlnU3RhbmRvcnRlIHwgRm9yRWFjaC1PYmplY3QgeyBb +c3RyaW5nXSRfIH0pIH0NCiAgICAgICAgICAgICAgICAkc3IgPSBAeyBnZWdlbnNlaXRpZ0dydXBw +ZW4gPSAkZ2c7IGdlZ2Vuc2VpdGlnU3RhbmRvcnRlID0gJGdzIH0NCiAgICAgICAgICAgICAgICAk +bG9ja0VyZ2VibmlzID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAg +ICAgICAgICAkbG9ja0VyZ2VibmlzID0gSW52b2tlLVdpdGhGaWxlTG9jayAnYWRtaW4uanNvbicg +ew0KICAgICAgICAgICAgICAgICAgICAgICAgJGFkbWluID0gUmVhZC1Kc29uT2JqZWN0ICdhZG1p +bi5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkYWRtaW4pIHsg +cmV0dXJuIEB7IG9rID0gJGZhbHNlOyBzdGF0dXMgPSA1MDA7IG1zZyA9ICdhZG1pbi5qc29uIG5p +Y2h0IGxlc2JhcicgfSB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBTT2Jq +ZWN0LlByb3BlcnRpZXNbJ3N0YW5kYXJkUmVjaHRlJ10pIHsgJGFkbWluLnN0YW5kYXJkUmVjaHRl +ID0gJHNyIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQtTWVt +YmVyIC1Ob3RlUHJvcGVydHlOYW1lICdzdGFuZGFyZFJlY2h0ZScgLU5vdGVQcm9wZXJ0eVZhbHVl +ICRzciAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAn +YWRtaW4uanNvbicgJGFkbWluIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJl +dHVybiBAeyBvayA9ICR0cnVlIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAo +IkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgaWYgKC1ub3QgJGxvY2tFcmdlYm5pcy5vaykgeyBTZW5kLUVycm9yICRSZXNw +b25zZSAkbG9ja0VyZ2VibmlzLm1zZyAkbG9ja0VyZ2VibmlzLnN0YXR1czsgY29udGludWUgfQ0K +ICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3N0YW5kYXJkcmVjaHRlLmdlYWVuZGVy +dCcgQHt9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0 +dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAg +ICAgfQ0KDQogICAgICAgICAgICAjIEUtTWFpbC1Wb3JsYWdlbjogT2JqZWt0IChuaWNodCBBcnJh +eSkg4oCUIGVpZ2VuZXIgSGFuZGxlci4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkv +YWRtaW4vZW1haWx2b3JsYWdlbicgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAg +ICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAn +S2VpbmUgQWRtaW4tUmVjaHRlJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYm9k +eSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7 +IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0N +CiAgICAgICAgICAgICAgICAkZGF0ZW4gPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAg +ICAgICAgICAgICAjIFJpY2gtVGV4dC1Cb2R5IGplIFZvcmxhZ2Ugc2VydmVyc2VpdGlnIGJlcmVp +bmlnZW4gKFN0b3JlZC1YU1MpLg0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJGRhdGVu +KSB7DQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRkYXRlbi5QU09iamVjdC5Q +cm9wZXJ0aWVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkdiA9ICRwLlZhbHVlDQogICAg +ICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICR2IC1hbmQgJHYuUFNPYmplY3QuUHJv +cGVydGllc1sndGV4dCddIC1hbmQgKCR2LnRleHQgLWlzIFtzdHJpbmddKSkgew0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICR2LnRleHQgPSBDb252ZXJ0VG8tU2FmZVJpY2hIdG1sICR2LnRl +eHQNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gJG51bGwNCiAg +ICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0g +SW52b2tlLVdpdGhGaWxlTG9jayAnYWRtaW4uanNvbicgew0KICAgICAgICAgICAgICAgICAgICAg +ICAgJGFkbWluID0gUmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAg +ICAgICAgICAgaWYgKCRudWxsIC1lcSAkYWRtaW4pIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBz +dGF0dXMgPSA1MDA7IG1zZyA9ICdhZG1pbi5qc29uIG5pY2h0IGxlc2JhcicgfSB9DQogICAgICAg +ICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VtYWlsVm9y +bGFnZW4nXSkgeyAkYWRtaW4uZW1haWxWb3JsYWdlbiA9ICRkYXRlbiB9DQogICAgICAgICAgICAg +ICAgICAgICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAn +ZW1haWxWb3JsYWdlbicgLU5vdGVQcm9wZXJ0eVZhbHVlICRkYXRlbiAtRm9yY2UgfQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnYWRtaW4uanNvbicgJGFkbWluIHwg +T3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyBvayA9ICR0cnVlIH0N +CiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAg +ICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUw +MzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3Qg +JGxvY2tFcmdlYm5pcy5vaykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAkbG9ja0VyZ2VibmlzLm1z +ZyAkbG9ja0VyZ2VibmlzLnN0YXR1czsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIFdyaXRl +LUxvZ0VpbnRyYWcgJ2VtYWlsdm9ybGFnZW4uZ2VhZW5kZXJ0JyBAe30NCiAgICAgICAgICAgICAg +ICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfQ0K +ICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMg +RS1NYWlsLVRyaWdnZXItS29uZmlnIChwcm8gVHJpZ2dlcjogYWt0aXYgKyBFbXBmYWVuZ2VyLVRh +Z3MpIOKAlA0KICAgICAgICAgICAgIyBhdXNzY2hsaWVzc2xpY2ggU3RldWVydW5nIGZ1ZXIgZGVu +IEZyb250ZW5kLW1haWx0bzotRGlzcGF0Y2hlci4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEg +Jy9hcGkvYWRtaW4vZW1haWx0cmlnZ2VyJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAg +ICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlc3Bv +bnNlICdLZWluZSBBZG1pbi1SZWNodGUnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg +ICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJv +ZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGlu +dWUgfQ0KICAgICAgICAgICAgICAgICRkYXRlbiA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0K +ICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRy +eSB7DQogICAgICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVM +b2NrICdhZG1pbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAkYWRtaW4gPSBSZWFk +LUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51 +bGwgLWVxICRhZG1pbikgeyByZXR1cm4gQHsgb2sgPSAkZmFsc2U7IHN0YXR1cyA9IDUwMDsgbXNn +ID0gJ2FkbWluLmpzb24gbmljaHQgbGVzYmFyJyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAg +IGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1snZW1haWxUcmlnZ2VyJ10pIHsgJGFkbWlu +LmVtYWlsVHJpZ2dlciA9ICRkYXRlbiB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsg +JGFkbWluIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAnZW1haWxUcmlnZ2VyJyAtTm90 +ZVByb3BlcnR5VmFsdWUgJGRhdGVuIC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICBX +cml0ZS1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJyAkYWRtaW4gfCBPdXQtTnVsbA0KICAgICAgICAg +ICAgICAgICAgICAgICAgcmV0dXJuIEB7IG9rID0gJHRydWUgfQ0KICAgICAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQt +RXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7 +IFNlbmQtRXJyb3IgJFJlc3BvbnNlICRsb2NrRXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3Rh +dHVzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGFueiA9IGlmICgkZGF0ZW4pIHsgKCRk +YXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzIHwgTWVhc3VyZS1PYmplY3QpLkNvdW50IH0gZWxzZSB7 +IDAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2VtYWlsdHJpZ2dlci5nZWFl +bmRlcnQnIEB7IGFuemFobF90cmlnZ2VyID0gJGFueiB9DQogICAgICAgICAgICAgICAgU2VuZC1K +c29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAg +ICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkYWRtaW5LZXlz +ID0gQHsNCiAgICAgICAgICAgICAgICAnL2FwaS9hZG1pbi9mZWllcnRhZ2UnICAgICAgPSAnZmVp +ZXJ0YWdlJw0KICAgICAgICAgICAgICAgICcvYXBpL2FkbWluL2ZlcmllbicgICAgICAgICA9ICdm +ZXJpZW4nDQogICAgICAgICAgICAgICAgJy9hcGkvYWRtaW4vc29uZGVydGVybWluZScgID0gJ3Nv +bmRlcnRlcm1pbmUnDQogICAgICAgICAgICAgICAgJy9hcGkvYWRtaW4vc3RhbmRvcnRlJyAgICAg +ID0gJ3N0YW5kb3J0ZScNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkYWRtaW5LZXlz +LkNvbnRhaW5zS2V5KCRQYXRoKSAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAg +ICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdL +ZWluZSBBZG1pbi1SZWNodGUnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRib2R5 +ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsg +U2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0K +ICAgICAgICAgICAgICAgICRrZXkgPSAkYWRtaW5LZXlzWyRQYXRoXQ0KICAgICAgICAgICAgICAg +ICMgQCguLi4pIGVyendpbmd0IEFycmF5IGF1Y2ggYmVpIDEgRWxlbWVudCAoUFMgNS4xIGVudHBh +Y2t0IHNvbnN0KS4NCiAgICAgICAgICAgICAgICAkYm9keU9iaiA9ICRib2R5IHwgQ29udmVydEZy +b20tSnNvbg0KICAgICAgICAgICAgICAgICRkYXRlbiA9IFtvYmplY3RbXV1AKCRib2R5T2JqKQ0K +ICAgICAgICAgICAgICAgICMgc29uZGVydGVybWluZSB0cmFnZW4gUmljaC1UZXh0ICh0ZXh0KSDi +gJQgc2VydmVyc2VpdGlnIGJlcmVpbmlnZW4uDQogICAgICAgICAgICAgICAgaWYgKCRrZXkgLWVx +ICdzb25kZXJ0ZXJtaW5lJykgew0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZSBpbiAk +ZGF0ZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJGUgLWFuZCAk +ZS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0ZXh0J10gLWFuZCAoJGUudGV4dCAtaXMgW3N0cmluZ10p +KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGUudGV4dCA9IENvbnZlcnRUby1TYWZl +UmljaEh0bWwgJGUudGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRsb2NrRXJnZWJu +aXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRs +b2NrRXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdhZG1pbi5qc29uJyB7DQogICAgICAg +ICAgICAgICAgICAgICAgICAkYWRtaW4gPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQog +ICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbikgeyByZXR1cm4gQHsg +b2sgPSAkZmFsc2U7IHN0YXR1cyA9IDUwMDsgbXNnID0gJ2FkbWluLmpzb24gbmljaHQgbGVzYmFy +JyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICR3aXBlTXNnID0gVGVzdC1XaXBlU2NodXR6 +ICRrZXkgJGRhdGVuICRhZG1pbiAkUmVxdWVzdCAkYm9keU9iag0KICAgICAgICAgICAgICAgICAg +ICAgICAgaWYgKCR3aXBlTXNnKSB7IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3RhdHVzID0gNDA5 +OyBtc2cgPSAkd2lwZU1zZyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lkXShCYWNr +dXAtQWRtaW5Kc29uICRrZXkpDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBT +T2JqZWN0LlByb3BlcnRpZXNbJGtleV0pIHsgJGFkbWluLiRrZXkgPSAkZGF0ZW4gfQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgZWxzZSB7ICRhZG1pbiB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0 +eU5hbWUgJGtleSAtTm90ZVByb3BlcnR5VmFsdWUgJGRhdGVuIC1Gb3JjZSB9DQogICAgICAgICAg +ICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJyAkYWRtaW4gfCBPdXQt +TnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IG9rID0gJHRydWUgfQ0KICAg +ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAg +ICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBj +b250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkbG9j +a0VyZ2VibmlzLm9rKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICRsb2NrRXJnZWJuaXMubXNnICRs +b2NrRXJnZWJuaXMuc3RhdHVzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9n +RWludHJhZyAiJGtleS5nZWFlbmRlcnQiIEB7fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9i +amVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9DQogICAgICAgICAgICAg +ICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9h +cGkvYWRtaW4vZWluc3RlbGx1bmdlbicgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAg +ICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXNwb25z +ZSAnS2VpbmUgQWRtaW4tUmVjaHRlJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAk Ym9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5 KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVl -IH0NCiAgICAgICAgICAgICAgICAkYSA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAg -ICAgICAgICAgICRlaW50cmFlZ2UgPSBAKCRhLmVpbnRyYWVnZSkNCiAgICAgICAgICAgICAgICBp -ZiAoLW5vdCAkZWludHJhZWdlIC1vciAkZWludHJhZWdlLkNvdW50IC1lcSAwKSB7DQogICAgICAg -ICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ29rJzsg -b2sgPSAwOyBhYmdlbGVobnQgPSBAKCkgfQ0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0K -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAjIFJlYWQtTW9kaWZ5LVdyaXRlIGF0 -b21hciBpbiBkZXIgRGF0ZWktU3BlcnJlIOKAlCB3aWUgZGVyIEVpbnplbC0NCiAgICAgICAgICAg -ICAgICAjIHplbGwtRW5kcG9pbnQuIE9obmUgTG9jayBrYW5uIGVpbiBwYXJhbGxlbGVyIEVkaXQv -QnVsayAoYXVjaA0KICAgICAgICAgICAgICAgICMgYXVzIGVpbmVtIGFuZGVyZW4gU2VydmVyLVBy -b3plc3MgYXVmIGRlbXNlbGJlbiBTaGFyZSkgZGVuDQogICAgICAgICAgICAgICAgIyBnZXJhZGUg -Z2VsZXNlbmVuIEdlc2FtdHN0YW5kIHVlYmVyc2NocmVpYmVuIChMb3N0IFVwZGF0ZSB1ZWJlcg0K -ICAgICAgICAgICAgICAgICMgZGllIEdBTlpFIERhdGVpKS4gTG9nYnVjaCArIExpdmUtU3luYyBs -YXVmZW4gTkFDSCBkZXIgU3BlcnJlLA0KICAgICAgICAgICAgICAgICMgdW0gZ2VzY2hhY2h0ZWx0 -ZSBMb2NrcyAobG9nYnVjaC9jaGFuZ2VzKSB6dSB2ZXJtZWlkZW4uDQogICAgICAgICAgICAgICAg -JHJlcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAg -JHJlcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicgew0KICAgICAgICAgICAg -ICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicNCiAg -ICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJHBsYW51bmcpIHsgcmV0dXJuIEB7 -IHR5cCA9ICdlcnJvcic7IGNvZGUgPSA0MDQ7IG1zZyA9ICdwbGFudW5nLmpzb24gbmljaHQgZ2Vm -dW5kZW4nIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHBsYW51bmcuUFNP -YmplY3QuUHJvcGVydGllc1snZWludHJhZWdlJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAkcGxhbnVuZyB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ2VpbnRyYWVnZScg -LU5vdGVQcm9wZXJ0eVZhbHVlIChbUFNDdXN0b21PYmplY3RdQHt9KSAtRm9yY2UNCiAgICAgICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICMgUGVyc29uZW4tTWFw -IGVpbm1hbCBhdWZiYXVlbiDigJQgUGVybWlzc2lvbi1DaGVjayBwcm8NCiAgICAgICAgICAgICAg -ICAgICAgICAgICMgRWludHJhZyBvaG5lIFJlc2NhbiBkZXIgUGVyc29uZW5saXN0ZS4NCiAgICAg -ICAgICAgICAgICAgICAgICAgICRwZXJzb25NYXAgPSBAe30NCiAgICAgICAgICAgICAgICAgICAg -ICAgIGlmICgkcGxhbnVuZy5wZXJzb25lbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -IGZvcmVhY2ggKCRwcCBpbiBAKCRwbGFudW5nLnBlcnNvbmVuKSkgeyAkcGVyc29uTWFwW1tzdHJp -bmddJHBwLmlkXSA9ICRwcCB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgICAgICAgICAkb2tDb3VudCA9IDANCiAgICAgICAgICAgICAgICAgICAgICAgICRhYmdl -bGVobnQgPSBAKCkNCiAgICAgICAgICAgICAgICAgICAgICAgICRlcnN0ZXNQaWQgPSAkbnVsbA0K -ICAgICAgICAgICAgICAgICAgICAgICAgJGVyc3Rlc1dlcnQgPSAkbnVsbA0KICAgICAgICAgICAg -ICAgICAgICAgICAgJGVyc3Rlc0RhdHVtID0gJG51bGwNCiAgICAgICAgICAgICAgICAgICAgICAg -ICRsZXR6dGVzRGF0dW0gPSAkbnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgIyBhbHRlV2Vy -dGUtTWFwIGZ1ZXIgTG9nYnVjaC1SZXN0b3JlOiBLZXkgPSAiPGRhdHVtPnw8cGVyc29uSWQ+Ii4N -CiAgICAgICAgICAgICAgICAgICAgICAgICRhbHRlV2VydGUgPSBAe30NCiAgICAgICAgICAgICAg -ICAgICAgICAgICMgc3luY0VpbnRyYWVnZTogcHJvIGdlbXV0aWVydGVyIFplbGxlIGVpbiBFaW50 -cmFnIGZ1ZXINCiAgICAgICAgICAgICAgICAgICAgICAgICMgZGVuIExpdmUtU3luYy1DaGFuZ2Ut -TG9nIChGb3JtYXQgd2llIFNpbmdsZS1DZWxsKS4NCiAgICAgICAgICAgICAgICAgICAgICAgICRz -eW5jRWludHJhZWdlID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0DQog -ICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZSBpbiAkZWludHJhZWdlKSB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgJGRhdHVtID0gW3N0cmluZ10kZS5kYXR1bQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICRwZXJzb25JZCA9IFtzdHJpbmddJGUucGVyc29uSWQNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAkd2VydCA9IGlmICgkZS5QU09iamVjdC5Qcm9wZXJ0 -aWVzWyd3ZXJ0J10gLWFuZCAkbnVsbCAtbmUgJGUud2VydCkgeyBbc3RyaW5nXSRlLndlcnQgfSBl -bHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRkYXR1bSAt -b3IgLW5vdCAkcGVyc29uSWQpIHsgJGFiZ2VsZWhudCArPSBAeyBkYXR1bSA9ICRkYXR1bTsgcGVy -c29uSWQgPSAkcGVyc29uSWQ7IGdydW5kID0gJ3Vudm9sbHN0YWVuZGlnJyB9OyBjb250aW51ZSB9 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHppZWxQZXJzb24gPSAkcGVyc29uTWFwWyRw -ZXJzb25JZF0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJm -WmVsbGVFZGl0aWVyZW4gJHppZWxQZXJzb24pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICRhYmdlbGVobnQgKz0gQHsgZGF0dW0gPSAkZGF0dW07IHBlcnNvbklkID0gJHBlcnNv -bklkOyBncnVuZCA9ICdrZWluLXJlY2h0JyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIGlmICgtbm90ICRwbGFudW5nLmVpbnRyYWVnZS5QU09iamVjdC5Qcm9w -ZXJ0aWVzWyRkYXR1bV0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51 -bmcuZWludHJhZWdlIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkZGF0dW0gLU5vdGVQ -cm9wZXJ0eVZhbHVlIChbUFNDdXN0b21PYmplY3RdQHt9KSAtRm9yY2UNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBbHRlbiBXZXJ0 -IG1lcmtlbiBCRVZPUiB3aXIgZGllIFplbGxlIHVlYmVyc2NocmVpYmVuLg0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICRhbHRlcldlcnQgPSAnJw0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIGlmICgkcGxhbnVuZy5laW50cmFlZ2UuJGRhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXNbJHBl -cnNvbklkXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWx0ZXJXZXJ0ID0g -W3N0cmluZ10kcGxhbnVuZy5laW50cmFlZ2UuJGRhdHVtLiRwZXJzb25JZA0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWx0ZVdlcnRl -WygiezB9fHsxfSIgLWYgJGRhdHVtLCAkcGVyc29uSWQpXSA9ICRhbHRlcldlcnQNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICBpZiAoW3N0cmluZ106OklzTnVsbE9yRW1wdHkoJHdlcnQpKSB7 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcGxhbnVuZy5laW50cmFlZ2Uu -JGRhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXNbJHBlcnNvbklkXSkgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcuZWludHJhZWdlLiRkYXR1bS5QU09iamVjdC5Q -cm9wZXJ0aWVzLlJlbW92ZSgkcGVyc29uSWQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICBpZiAoJHBsYW51bmcuZWludHJhZWdlLiRkYXR1bS5QU09iamVj -dC5Qcm9wZXJ0aWVzWyRwZXJzb25JZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICRwbGFudW5nLmVpbnRyYWVnZS4kZGF0dW0uJHBlcnNvbklkID0gJHdlcnQNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICRwbGFudW5nLmVpbnRyYWVnZS4kZGF0dW0gfCBBZGQtTWVtYmVyIC1O -b3RlUHJvcGVydHlOYW1lICRwZXJzb25JZCAtTm90ZVByb3BlcnR5VmFsdWUgJHdlcnQgLUZvcmNl -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9rQ291bnQrKw0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGVyc3Rlc1BpZCkgeyAkZXJzdGVz -UGlkID0gJHBlcnNvbklkOyAkZXJzdGVzV2VydCA9ICR3ZXJ0OyAkZXJzdGVzRGF0dW0gPSAkZGF0 -dW0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsZXR6dGVzRGF0dW0gPSAkZGF0dW0N -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0kc3luY0VpbnRyYWVnZS5BZGQoQHsg -ZGF0dW0gPSAkZGF0dW07IHBlcnNvbklkID0gJHBlcnNvbklkOyBhbHQgPSAiJGFsdGVyV2VydCI7 -IG5ldSA9ICIkd2VydCIgfSkNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg -ICAgICAgICAgICAgICMgRGF0ZWkgbnVyIHNjaHJlaWJlbiwgd2VubiB0YXRzYWVjaGxpY2ggd2Fz -IGdlYWVuZGVydCB3dXJkZS4NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkb2tDb3VudCAt -Z3QgMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3Bs -YW51bmcuanNvbicgJHBsYW51bmcgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHR5cCA9ICdvayc7IG9rQ291bnQg -PSAkb2tDb3VudDsgYWJnZWxlaG50ID0gJGFiZ2VsZWhudDsgZXJzdGVzUGlkID0gJGVyc3Rlc1Bp -ZDsgZXJzdGVzV2VydCA9ICRlcnN0ZXNXZXJ0OyBlcnN0ZXNEYXR1bSA9ICRlcnN0ZXNEYXR1bTsg -bGV0enRlc0RhdHVtID0gJGxldHp0ZXNEYXR1bTsgYWx0ZVdlcnRlID0gJGFsdGVXZXJ0ZTsgc3lu -Y0VpbnRyYWVnZSA9ICRzeW5jRWludHJhZWdlIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRS -ZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgaWYgKCRyZXMudHlwIC1lcSAnZXJyb3InKSB7IFNlbmQtRXJy -b3IgJFJlc3BvbnNlICRyZXMubXNnICRyZXMuY29kZTsgY29udGludWUgfQ0KICAgICAgICAgICAg -ICAgICMgTG9nYnVjaCArIExpdmUtU3luYyBOQUNIIGRlbSBMb2NrIChrZWluIGdlc2NoYWNodGVs -dGVzIExvY2spLg0KICAgICAgICAgICAgICAgIGlmICgkcmVzLm9rQ291bnQgLWd0IDApIHsNCiAg -ICAgICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnemVsbGVuLmJ1bGsuZ2VhZW5kZXJ0 -JyBAew0KICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uSWQgICAgPSAkcmVzLmVyc3Rlc1Bp -ZA0KICAgICAgICAgICAgICAgICAgICAgICAgd2VydCAgICAgICAgPSAkcmVzLmVyc3Rlc1dlcnQN -CiAgICAgICAgICAgICAgICAgICAgICAgIGFuemFobCAgICAgID0gJHJlcy5va0NvdW50DQogICAg -ICAgICAgICAgICAgICAgICAgICBlcnN0ZXJUYWcgICA9ICRyZXMuZXJzdGVzRGF0dW0NCiAgICAg -ICAgICAgICAgICAgICAgICAgIGxldHp0ZXJUYWcgID0gJHJlcy5sZXR6dGVzRGF0dW0NCiAgICAg -ICAgICAgICAgICAgICAgICAgIGFiZ2VsZWhudCAgID0gJHJlcy5hYmdlbGVobnQuQ291bnQNCiAg -ICAgICAgICAgICAgICAgICAgICAgICMgUmVzdG9yZS1QYXlsb2FkOiBwcm8gWmVsbGUgZGVyIFdl -cnQgdm9yIGRlciBBZW5kZXJ1bmcuDQogICAgICAgICAgICAgICAgICAgICAgICBhbHRlV2VydGUg -ICA9ICRyZXMuYWx0ZVdlcnRlDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICAgICAgIyBMaXZlLVN5bmM6IHBybyBaZWxsZSBlaW4gJ3plbGxlJy1FaW50cmFnIGlucyBjaGFu -Z2VzLmpzb24uDQogICAgICAgICAgICAgICAgICAgIEFkZC1DaGFuZ2VMb2dFaW50cmFlZ2UgJ3pl -bGxlJyAkcmVzLnN5bmNFaW50cmFlZ2UNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnb2snOyBvayA9ICRyZXMu -b2tDb3VudDsgYWJnZWxlaG50ID0gQCgkcmVzLmFiZ2VsZWhudCkgfQ0KICAgICAgICAgICAgICAg -IGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICAjIFBPU1QgL2FwaS9wbGFudW5n -L2tvbW1lbnRhcg0KICAgICAgICAgICAgIyBIYWVuZ3QgZWluZW4gbmV1ZW4gS29tbWVudGFyIGFu -IGRpZSBMaXN0ZSBmdWVyIChkYXR1bSxwZXJzb25JZCkgYW4uDQogICAgICAgICAgICAjIFNjaGVt -YS1NaWdyYXRpb24gKGxhenkpOiB2b3JoYW5kZW5lciBTdHJpbmcgb2RlciBPYmpla3QtRWludHJh -ZyB3aXJkDQogICAgICAgICAgICAjIGJlaW0gZXJzdGVuIFNjaHJlaWJlbiBpbiBlaW5lIExpc3Rl -IGtvbnZlcnRpZXJ0LiBMZWVyZXIgVGV4dCB3aXJkDQogICAgICAgICAgICAjIGFiZ2VsZWhudCDi -gJQgTG9lc2NoZW4gZWluemVsbmVyIEtvbW1lbnRhcmUgbGFldWZ0IHVlYmVyIGRlbiBERUxFVEUt -DQogICAgICAgICAgICAjIEVuZHB1bmt0IChtaXQgS29tbWVudGFyLUlEKSwgZGFzIExvZXNjaGVu -IGdhbnplciBMaXN0ZW4gaXN0IHVlYmVyDQogICAgICAgICAgICAjIGRpZSBBUEkgbmljaHQgbWVo -ciBtb2VnbGljaCAodmVyc2VoZW50bGljaGVyIFZlcmx1c3QgYXVzZ2VzY2hsb3NzZW4pLg0KICAg -ICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL2tvbW1lbnRhcicgLWFuZCAkTWV0 -aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVx -dWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3Bv -bnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAk -YSA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRkYXR1bSA9ICRh -LmRhdHVtDQogICAgICAgICAgICAgICAgJHBlcnNvbklkID0gW3N0cmluZ10kYS5wZXJzb25JZA0K -ICAgICAgICAgICAgICAgICR0ZXh0ID0gaWYgKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RleHQn -XSkgeyAoIiQoJGEudGV4dCkiKS5UcmltKCkgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAg -IGlmICgtbm90ICR0ZXh0KSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3Bv -bnNlICdMZWVyZXIgS29tbWVudGFyIOKAlCBiaXR0ZSBERUxFVEUgL2FwaS9wbGFudW5nL2tvbW1l -bnRhciBmdWVyIExvZXNjaGVuIHZlcndlbmRlbicgNDAwDQogICAgICAgICAgICAgICAgICAgIGNv -bnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICMgRWRpdC1SZWNodCB2 -b3IgTG9jayBwcnVlZmVuDQogICAgICAgICAgICAgICAgJHBsYW51bmdDaGVjayA9IFJlYWQtSnNv -bk9iamVjdCAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJHBs -YW51bmdDaGVjaykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAncGxhbnVuZy5qc29uIG5pY2h0IGdl -ZnVuZGVuJyA0MDQ7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkemllbFBlcnNvbiA9ICRu -dWxsDQogICAgICAgICAgICAgICAgaWYgKCRwbGFudW5nQ2hlY2sucGVyc29uZW4pIHsNCiAgICAg -ICAgICAgICAgICAgICAgZm9yZWFjaCAoJHBwIGluIEAoJHBsYW51bmdDaGVjay5wZXJzb25lbikp -IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChbc3RyaW5nXSRwcC5pZCAtZXEgJHBlcnNv -bklkKSB7ICR6aWVsUGVyc29uID0gJHBwOyBicmVhayB9DQogICAgICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZlpl -bGxlRWRpdGllcmVuICR6aWVsUGVyc29uKSkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVy -cm9yICRSZXNwb25zZSAnS2VpbmUgQmVyZWNodGlndW5nIGZ1ZXIgZGllc2VuIEtvbW1lbnRhcicg -NDAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkamV0enQg -PSAoR2V0LURhdGUpLlRvU3RyaW5nKCdvJykgICMgSVNPIDg2MDEgbWl0IFplaXR6b25lDQogICAg -ICAgICAgICAgICAgJGJlbnV0emVyID0gIiREb21haW5cJFVzZXJuYW1lIg0KICAgICAgICAgICAg -ICAgICRuZXVlSWQgPSAna18nICsgKFtEYXRlVGltZU9mZnNldF06Ok5vdy5Ub1VuaXhUaW1lTWls -bGlzZWNvbmRzKCkpICsgJ18nICsgKEdldC1SYW5kb20gLU1heGltdW0gOTk5OTkpDQogICAgICAg -ICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJG51bGwgPSBJbnZva2UtV2l0aEZp -bGVMb2NrICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5n -ID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAg -ICBpZiAoJG51bGwgLWVxICRwbGFudW5nKSB7IHJldHVybiAkbnVsbCB9DQogICAgICAgICAgICAg -ICAgICAgICAgICBpZiAoLW5vdCAkcGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWydrb21tZW50 -YXJlJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZyB8IEFkZC1NZW1i -ZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ2tvbW1lbnRhcmUnIC1Ob3RlUHJvcGVydHlWYWx1ZSAoTmV3 -LU9iamVjdCBQU09iamVjdCkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcGxhbnVuZy5rb21tZW50YXJlLlBTT2JqZWN0 -LlByb3BlcnRpZXNbJGRhdHVtXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFu -dW5nLmtvbW1lbnRhcmUgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICRkYXR1bSAtTm90 -ZVByb3BlcnR5VmFsdWUgKE5ldy1PYmplY3QgUFNPYmplY3QpIC1Gb3JjZQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgIyBBa3R1ZWxsZSBMaXN0ZSBo -ZXJhdXN6aWVoZW4gKyBnZ2YuIGF1cyBBbHRzY2hlbWEgbWlncmllcmVuLg0KICAgICAgICAgICAg -ICAgICAgICAgICAgIyBMaXN0ZSBpc3QgY2hyb25vbG9naXNjaCAoYWVsdGVzdGUgenVlcnN0KSwg -ZGVyIG5ldWUNCiAgICAgICAgICAgICAgICAgICAgICAgICMgRWludHJhZyB3aXJkIGhpbnRlbiBh -bmdlaGFlbmd0Lg0KICAgICAgICAgICAgICAgICAgICAgICAgJGxpc3RlID0gTmV3LU9iamVjdCBT -eXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0W29iamVjdF0NCiAgICAgICAgICAgICAgICAg -ICAgICAgIGlmICgkcGxhbnVuZy5rb21tZW50YXJlLiRkYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVz -WyRwZXJzb25JZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdm9yaCA9ICRwbGFu -dW5nLmtvbW1lbnRhcmUuJGRhdHVtLiRwZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIGlmICgkdm9yaCAtaXMgW3N0cmluZ10gLWFuZCAkdm9yaCkgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAjIEFsdGVyIFN0cmluZy1FaW50cmFnIOKAlCBlaW4gRWxlbWVudCBv -aG5lIE1ldGENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxpc3RlLkFkZChbUFND -dXN0b21PYmplY3RdQHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkICAg -ICAgICAgICA9ICdrX2xlZ2FjeV8nICsgKEdldC1SYW5kb20gLU1heGltdW0gOTk5OTkpDQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ICAgICAgICAgPSAkdm9yaA0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VhZW5kZXJ0QW0gID0gJG51bGwNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlYWVuZGVydFZvbiA9ICRudWxsDQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pIHwgT3V0LU51bGwNCiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJHZvcmggLWlzIFthcnJheV0gLW9yICgkdm9yaCAt -aXMgW1N5c3RlbS5Db2xsZWN0aW9ucy5JRW51bWVyYWJsZV0gLWFuZCAtbm90ICgkdm9yaCAtaXMg -W3N0cmluZ10pKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFNjaG9uIGVp -biBBcnJheSAobmV1ZXMgU2NoZW1hKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm -b3JlYWNoICgkZSBpbiBAKCR2b3JoKSkgeyAkbGlzdGUuQWRkKCRlKSB8IE91dC1OdWxsIH0NCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJHZvcmggLWFuZCAkdm9yaC5QU09i -amVjdC5Qcm9wZXJ0aWVzWyd0ZXh0J10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIyBBbHRlcyBPYmpla3QtU2NoZW1hIHsgdGV4dCwgZ2VhZW5kZXJ0QW0sIGdlYWVuZGVydFZv -biB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtaWdJZCA9IGlmICgkdm9yaC5Q -U09iamVjdC5Qcm9wZXJ0aWVzWydpZCddKSB7IFtzdHJpbmddJHZvcmguaWQgfSBlbHNlIHsgJ2tf -bGVnYWN5XycgKyAoR2V0LVJhbmRvbSAtTWF4aW11bSA5OTk5OSkgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAkbGlzdGUuQWRkKFtQU0N1c3RvbU9iamVjdF1Aew0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgICAgICAgICAgID0gJG1pZ0lkDQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ICAgICAgICAgPSBbc3RyaW5nXSR2b3Jo -LnRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlYWVuZGVydEFtICA9 -IGlmICgkdm9yaC5QU09iamVjdC5Qcm9wZXJ0aWVzWydnZWFlbmRlcnRBbSddKSAgeyAkdm9yaC5n -ZWFlbmRlcnRBbSB9ICBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgZ2VhZW5kZXJ0Vm9uID0gaWYgKCR2b3JoLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2dl -YWVuZGVydFZvbiddKSB7ICR2b3JoLmdlYWVuZGVydFZvbiB9IGVsc2UgeyAkbnVsbCB9DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgICAgICAgICAkbGlzdGUuQWRkKFtQU0N1c3RvbU9iamVjdF1Aew0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIGlkICAgICAgICAgICA9ICRuZXVlSWQNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICB0ZXh0ICAgICAgICAgPSAkdGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -IGdlYWVuZGVydEFtICA9ICRqZXR6dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlYWVu -ZGVydFZvbiA9ICRiZW51dHplcg0KICAgICAgICAgICAgICAgICAgICAgICAgfSkgfCBPdXQtTnVs -bA0KICAgICAgICAgICAgICAgICAgICAgICAgIyBadXJ1ZWNrIGFscyBBcnJheSAoUFMtU2VyaWFs -aXNpZXJ1bmcpDQogICAgICAgICAgICAgICAgICAgICAgICAkYXJyID0gQCgkbGlzdGUuVG9BcnJh -eSgpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwbGFudW5nLmtvbW1lbnRhcmUuJGRh +IH0NCiAgICAgICAgICAgICAgICAkZGF0ZW4gPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAg +ICAgICAgICAgICAgICAjIFJpY2gtVGV4dCBzZXJ2ZXJzZWl0aWcgc2FuaXRpc2llcmVuIOKAlCBk +aWVzZXIgUGZhZCBzcGVpY2hlcnQNCiAgICAgICAgICAgICAgICAjIGluZm90ZXh0L2hpbGZldGV4 +dC9iZWRpZW51bmdzdGV4dGUvaW1wcmVzc3VtL3N1cHBvcnRpbmZvLw0KICAgICAgICAgICAgICAg +ICMgc2NobGllc3NpbmZvLCB3YXIgYWJlciBiaXNoZXIgYW0gU2VydmVyLVNhbml0aXplciB2b3Ji +ZWkgKGRlcg0KICAgICAgICAgICAgICAgICMgbnVyIGFtIFZvbGwtUFVUIC9hcGkvYWRtaW4gaGlu +ZykuIFNjaHV0eiBnZWdlbiBtYW5pcHVsaWVydGVuDQogICAgICAgICAgICAgICAgIyBDbGllbnQg +LyBEaXJla3QtQVBJLUNhbGwuDQogICAgICAgICAgICAgICAgSW52b2tlLUFkbWluUmljaHRleHRT +YW5pdGl6ZSAkZGF0ZW4NCiAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gJG51bGwNCiAg +ICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0g +SW52b2tlLVdpdGhGaWxlTG9jayAnYWRtaW4uanNvbicgew0KICAgICAgICAgICAgICAgICAgICAg +ICAgJGFkbWluID0gUmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAg +ICAgICAgICAgaWYgKCRudWxsIC1lcSAkYWRtaW4pIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBz +dGF0dXMgPSA1MDA7IG1zZyA9ICdhZG1pbi5qc29uIG5pY2h0IGxlc2JhcicgfSB9DQogICAgICAg +ICAgICAgICAgICAgICAgICBmb3JlYWNoICgkayBpbiAnamFocicsJ2luZm90ZXh0Jywnc3VwcG9y +dGluZm8nLCdzY2hsaWVzc2luZm8nLCdoaWxmZXRleHQnLCdiZWRpZW51bmdzdGV4dGUnLCdwYXBp +ZXJrb3JiVGFnZUF1ZmJld2FocnVuZycsJ2VtYWlsQXV0b0RvbWFpbicsJ2F2YXRhckdyb2Vzc2Un +LCdpbXByZXNzdW0nLCdzdXBwb3J0TWFpbFRleHQnLCdlZGl0b3JUcmlnZ2VyJykgew0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIGlmICgkZGF0ZW4uUFNPYmplY3QuUHJvcGVydGllc1ska10p +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Q +cm9wZXJ0aWVzWyRrXSkgeyAkYWRtaW4uJGsgPSAkZGF0ZW4uJGsgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5 +TmFtZSAkayAtTm90ZVByb3BlcnR5VmFsdWUgJGRhdGVuLiRrIC1Gb3JjZSB9DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgIyBlZGl0b3JUcmlnZ2VyIGlzdCBlaW4gRW51bSDigJQgZnJlbWRlIFdl +cnRlIChEaXJla3QtQVBJKSBhdWYNCiAgICAgICAgICAgICAgICAgICAgICAgICMgZGVuIERlZmF1 +bHQga2xlbW1lbiwgZGFtaXQgbmllIE11ZWxsIGluIGFkbWluLmpzb24gbGFuZGV0Lg0KICAgICAg +ICAgICAgICAgICAgICAgICAgJGV0VmFsID0gaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVz +WydlZGl0b3JUcmlnZ2VyJ10pIHsgW3N0cmluZ10kYWRtaW4uZWRpdG9yVHJpZ2dlciB9IGVsc2Ug +eyAnJyB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoQCgncmVjaHRzJywnbGlua3MnLCdt +aXR0ZScsJ2RvcHBlbCcpIC1ub3Rjb250YWlucyAkZXRWYWwpIHsNCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VkaXRvclRyaWdnZXIn +XSkgeyAkYWRtaW4uZWRpdG9yVHJpZ2dlciA9ICdyZWNodHMnIH0NCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAn +ZWRpdG9yVHJpZ2dlcicgLU5vdGVQcm9wZXJ0eVZhbHVlICdyZWNodHMnIC1Gb3JjZSB9DQogICAg +ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29u +T2JqZWN0ICdhZG1pbi5qc29uJyAkYWRtaW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAg +ICAgICAgcmV0dXJuIEB7IG9rID0gJHRydWUgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJl +c3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNlbmQtRXJy +b3IgJFJlc3BvbnNlICRsb2NrRXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3RhdHVzOyBjb250 +aW51ZSB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnZWluc3RlbGx1bmdlbi5n +ZWFlbmRlcnQnIEB7fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2Ug +QHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAg +ICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PSBQTEFOVU5HID09PT09DQogICAgICAg +ICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcnIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcp +IHsNCiAgICAgICAgICAgICAgICAkdHh0ID0gUmVhZC1UZXh0RmlsZSAncGxhbnVuZy5qc29uJw0K +ICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJHR4dCkgeyBTZW5kLUVycm9yICRSZXNwb25z +ZSAncGxhbnVuZy5qc29uIG5pY2h0IGdlZnVuZGVuJyA0MDQgfQ0KICAgICAgICAgICAgICAgIGVs +c2Ugew0KICAgICAgICAgICAgICAgICAgICAjIFZlcnNpb25zLVN0ZW1wZWwgKG10aW1lLVRpY2tz +KSBmdWVyIG9wdGltaXN0aXNjaGUgU3BlcnJlIGRlcw0KICAgICAgICAgICAgICAgICAgICAjIEV4 +Y2VsLUltcG9ydHMuIERlciBDbGllbnQgc2NoaWNrdCBpaG4gYmVpbSBQVVQgenVydWVjay4NCiAg +ICAgICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwcFYgPSBK +b2luLVBhdGggJERhdGFEaXIgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAg +IGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRwcFYpIHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAkUmVzcG9uc2UuSGVhZGVycy5BZGQoJ1gtUGxhbnVuZy1WZXJzaW9uJywgW3N0cmlu +Z10oR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRwcFYpLkxhc3RXcml0ZVRpbWVVdGMuVGlja3MpDQog +ICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge30N +CiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uVGV4dCAkUmVzcG9uc2UgJHR4dA0KICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nJyAtYW5kICRNZXRob2QgLWVxICdQ +VVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQt +RXJyb3IgJFJlc3BvbnNlICdLZWluZSBBZG1pbi1SZWNodGUnIDQwMzsgY29udGludWUgfQ0KICAg +ICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAg +aWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3Mn +IDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICMgUmVhZC1Nb2RpZnktV3JpdGUgYXRv +bWFyIGluIGRlciBnbGVpY2hlbiBTcGVycmUgd2llIGRpZSBFaW56ZWwtDQogICAgICAgICAgICAg +ICAgIyB6ZWxsLUVuZHBvaW50cywgZGFtaXQgZGVyIFZvbGwtSW1wb3J0IG5pY2h0IG1pdCBwYXJh +bGxlbGVuDQogICAgICAgICAgICAgICAgIyBaZWxsLVNjaHJlaWJ2b3JnYWVuZ2VuIHZlcnphaG50 +LiBPcHRpb25hbGVyIFZlcnNpb25zLUNoZWNrDQogICAgICAgICAgICAgICAgIyAob3B0aW1pc3Rp +c2NoZSBOZWJlbmxhZXVmaWdrZWl0KTogaGF0IGRlciBDbGllbnQgZWluZW4NCiAgICAgICAgICAg +ICAgICAjIElmLVBsYW51bmctVmVyc2lvbi1IZWFkZXIgZ2VzY2hpY2t0IHVuZCBzdGltbXQgZGVy +IG5pY2h0IG1laHINCiAgICAgICAgICAgICAgICAjIG1pdCBkZW0gYWt0dWVsbGVuIFN0YW5kIHVl +YmVyZWluLCB3dXJkZSB6d2lzY2hlbnplaXRsaWNoDQogICAgICAgICAgICAgICAgIyBnZXNjaHJp +ZWJlbiAtPiA0MDksIE5JQ0hUUyB3aXJkIHVlYmVyc2NocmllYmVuLg0KICAgICAgICAgICAgICAg +ICRlcndhcnRldGVWZXJzaW9uID0gJFJlcXVlc3QuSGVhZGVyc1snSWYtUGxhbnVuZy1WZXJzaW9u +J10NCiAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gJG51bGwNCiAgICAgICAgICAgICAg +ICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gSW52b2tlLVdpdGhG +aWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGVy +d2FydGV0ZVZlcnNpb24pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHBWID0gSm9p +bi1QYXRoICREYXRhRGlyICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgJGFrdHVlbGxlVmVyc2lvbiA9ICcnDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg +KFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHBwVikgeyAkYWt0dWVsbGVWZXJzaW9uID0gW3N0cmlu +Z10oR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRwcFYpLkxhc3RXcml0ZVRpbWVVdGMuVGlja3MgfQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWt0dWVsbGVWZXJzaW9uIC1uZSAkZXJ3 +YXJ0ZXRlVmVyc2lvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g +QHsgdHlwID0gJ2tvbmZsaWt0JzsgYWt0dWVsbCA9ICRha3R1ZWxsZVZlcnNpb24gfQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICAgICAgICAgIFdyaXRlLVRleHRGaWxlICdwbGFudW5nLmpzb24nICRib2R5IHwg +T3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyB0eXAgPSAnb2snIH0N +CiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAg +ICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUw +MzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKCRsb2Nr +RXJnZWJuaXMudHlwIC1lcSAna29uZmxpa3QnKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQt +SnNvbk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZlaGxlciAg +ICAgICAgICA9ICdrb25mbGlrdCcNCiAgICAgICAgICAgICAgICAgICAgICAgIG1lbGR1bmcgICAg +ICAgICA9ICdEaWUgUGxhbnVuZyB3dXJkZSB6d2lzY2hlbnplaXRsaWNoIHZvbiBlaW5lciBhbmRl +cmVuIFBlcnNvbiBnZWFlbmRlcnQuJw0KICAgICAgICAgICAgICAgICAgICAgICAgYWt0dWVsbGVW +ZXJzaW9uID0gJGxvY2tFcmdlYm5pcy5ha3R1ZWxsDQogICAgICAgICAgICAgICAgICAgIH0gNDA5 +DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlc3BlaWNo +ZXJ0JyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy96ZWxsZScgLWFuZCAkTWV0aG9kIC1lcSAn +UE9TVCcpIHsNCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAg +ICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZy +YWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYSA9ICRib2R5 +IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRkYXR1bSA9ICRhLmRhdHVtDQog +ICAgICAgICAgICAgICAgJHBlcnNvbklkID0gW3N0cmluZ10kYS5wZXJzb25JZA0KICAgICAgICAg +ICAgICAgICR3ZXJ0ID0gaWYgKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3dlcnQnXSkgeyAkYS53 +ZXJ0IH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAjIE9wdGltaXN0aWMtQ29uY3VycmVu +Y3k6IFdlbm4gZGVyIENsaWVudCBzZWluZW4genVsZXR6dCBnZXNlaGVuZW4NCiAgICAgICAgICAg +ICAgICAjIFdlcnQgbWl0bGllZmVydCwgcHJ1ZWZlbiB3aXIgdm9yIGRlbSBTY2hyZWliZW4gb2Ig +ZGVyIFNlcnZlcg0KICAgICAgICAgICAgICAgICMgbm9jaCBkZW5zZWxiZW4gU3RhbmQgaGF0LiBN +aXNtYXRjaCAtPiA0MDkgbWl0IGFrdHVlbGxlcldlcnQuDQogICAgICAgICAgICAgICAgJGhhdEVy +d2FydGV0ID0gJGEuUFNPYmplY3QuUHJvcGVydGllc1snZXJ3YXJ0ZXRlckFsdGVyV2VydCddDQog +ICAgICAgICAgICAgICAgJGVyd2FydGV0ID0gaWYgKCRoYXRFcndhcnRldCkgeyBbc3RyaW5nXSRh +LmVyd2FydGV0ZXJBbHRlcldlcnQgfSBlbHNlIHsgJG51bGwgfQ0KDQogICAgICAgICAgICAgICAg +IyBFZGl0LVJlY2h0IGdlZ2VuIGFrdHVlbGxlbiBTdGFuZCBwcnVlZmVuIChub2NoIG9obmUgTG9j +ayDigJQgbnVyIExvb2t1cCkNCiAgICAgICAgICAgICAgICAkcGxhbnVuZ0NoZWNrID0gUmVhZC1K +c29uT2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAk +cGxhbnVuZ0NoZWNrKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdwbGFudW5nLmpzb24gbmljaHQg +Z2VmdW5kZW4nIDQwNDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICR6aWVsUGVyc29uID0g +JG51bGwNCiAgICAgICAgICAgICAgICBpZiAoJHBsYW51bmdDaGVjay5wZXJzb25lbikgew0KICAg +ICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcHAgaW4gQCgkcGxhbnVuZ0NoZWNrLnBlcnNvbmVu +KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFtzdHJpbmddJHBwLmlkIC1lcSAkcGVy +c29uSWQpIHsgJHppZWxQZXJzb24gPSAkcHA7IGJyZWFrIH0NCiAgICAgICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJm +WmVsbGVFZGl0aWVyZW4gJHppZWxQZXJzb24pKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQt +RXJyb3IgJFJlc3BvbnNlICdLZWluZSBCZXJlY2h0aWd1bmcgZnVlciBkaWVzZSBaZWxsZScgNDAz +OyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICMgUmVhZC1N +b2RpZnktV3JpdGUgYXRvbWFyIGluIExvY2s6DQogICAgICAgICAgICAgICAgJGNsaWVudFF1aXR0 +aWVydCA9ICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd1bnRlcmJlc2V0enVuZ1NjaGljaHQnXSAt +YW5kICRhLnVudGVyYmVzZXR6dW5nU2NoaWNodCkNCiAgICAgICAgICAgICAgICAkbG9ja0VyZ2Vi +bmlzID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAk +bG9ja0VyZ2VibmlzID0gSW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAg +ICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZyA9IFJlYWQtSnNvbk9iamVjdCAncGxhbnVuZy5q +c29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkcGxhbnVuZykgeyBy +ZXR1cm4gQHsgdHlwID0gJ2Vycm9yJzsgY29kZSA9IDQwNDsgbXNnID0gJ3BsYW51bmcuanNvbiBu +aWNodCBnZWZ1bmRlbicgfSB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcGxh +bnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWydlaW50cmFlZ2UnXSkgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICRwbGFudW5nIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAnZWlu +dHJhZWdlJyAtTm90ZVByb3BlcnR5VmFsdWUgKE5ldy1PYmplY3QgUFNPYmplY3QpIC1Gb3JjZQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1u +b3QgJHBsYW51bmcuZWludHJhZWdlLlBTT2JqZWN0LlByb3BlcnRpZXNbJGRhdHVtXSkgew0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nLmVpbnRyYWVnZSB8IEFkZC1NZW1iZXIg +LU5vdGVQcm9wZXJ0eU5hbWUgJGRhdHVtIC1Ob3RlUHJvcGVydHlWYWx1ZSAoTmV3LU9iamVjdCBQ +U09iamVjdCkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgICAgICAgICAkYWx0ZXIgPSAnJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwbGFu +dW5nLmVpbnRyYWVnZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skcGVyc29uSWRdKSB7ICRh +bHRlciA9IFtzdHJpbmddJHBsYW51bmcuZWludHJhZWdlLiRkYXR1bS4kcGVyc29uSWQgfQ0KDQog +ICAgICAgICAgICAgICAgICAgICAgICAjIE9wdGltaXN0aWMtQ29uY3VycmVuY3ktQ2hlY2sNCiAg +ICAgICAgICAgICAgICAgICAgICAgIGlmICgkaGF0RXJ3YXJ0ZXQgLWFuZCAkZXJ3YXJ0ZXQgLW5l +ICRhbHRlcikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyB0eXAgPSAn +a29uZmxpa3QnOyBha3R1ZWxsID0gJGFsdGVyIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0N +Cg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBGdWVocnVuZ3MtVW50ZXJiZXNldHp1bmcgKFZl +cmJpbmRsaWNoa2VpdHNmZW5zdGVyKSAtIGdsZWljaGVzIFByaW56aXAgd2llIHZvcmhlciwNCiAg +ICAgICAgICAgICAgICAgICAgICAgICMgamV0enQgYWJlciBnZWdlbiBkZW4gZ2Vsb2NrdGVuIFN0 +YW5kLg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJGNsaWVudFF1aXR0aWVydCAt +YW5kIChUZXN0LUluVmVyYmluZGxpY2hrZWl0ICRkYXR1bSkpIHsNCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAkYWx0ZVNjaGljaHQgPSBHZXQtRnVlaHJ1bmdzU2NoaWNodExldHRlciAkYWx0 +ZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbmV1ZVNjaGljaHQgPSBHZXQtRnVlaHJ1 +bmdzU2NoaWNodExldHRlciAkd2VydA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk +YWx0ZVNjaGljaHQgLWFuZCAkYWx0ZVNjaGljaHQgLW5lICRuZXVlU2NoaWNodCkgew0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAkYWt0dWVsbENvdW50ID0gR2V0LUZ1ZWhydW5nc0Nv +dW50ICRwbGFudW5nICRkYXR1bSAkYWx0ZVNjaGljaHQNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgaWYgKCgkYWt0dWVsbENvdW50IC0gMSkgLWx0IDIpIHsNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyB0eXAgPSAndW50ZXJiZXNldHp1bmcnOyBz +Y2hpY2h0ID0gJGFsdGVTY2hpY2h0OyBha3R1ZWxsQ291bnQgPSAkYWt0dWVsbENvdW50OyBhbHRl +ciA9ICRhbHRlciB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAg +ICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICR3ZXJ0IC1vciBbc3RyaW5nXTo6SXNOdWxsT3JX +aGl0ZVNwYWNlKCR3ZXJ0KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcGxh +bnVuZy5laW50cmFlZ2UuJGRhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXNbJHBlcnNvbklkXSkgew0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZy5laW50cmFlZ2UuJGRhdHVt +LlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCRwZXJzb25JZCkNCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIGlmICgkcGxhbnVuZy5laW50cmFlZ2UuJGRhdHVtLlBTT2JqZWN0 +LlByb3BlcnRpZXNbJHBlcnNvbklkXSkgeyAkcGxhbnVuZy5laW50cmFlZ2UuJGRhdHVtLiRwZXJz +b25JZCA9ICR3ZXJ0IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJHBsYW51 +bmcuZWludHJhZWdlLiRkYXR1bSB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJHBlcnNv +bklkIC1Ob3RlUHJvcGVydHlWYWx1ZSAkd2VydCAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAncGxhbnVu +Zy5qc29uJyAkcGxhbnVuZyB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1 +cm4gQHsgdHlwID0gJ29rJzsgYWx0ZXIgPSAkYWx0ZXIgfQ0KICAgICAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJy +b3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAg +ICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlmICgkbG9ja0VyZ2VibmlzLnR5cCAtZXEgJ2Vy +cm9yJykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAkbG9ja0VyZ2VibmlzLm1zZyAkbG9ja0VyZ2Vi +bmlzLmNvZGU7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBpZiAoJGxvY2tFcmdlYm5pcy50 +eXAgLWVxICdrb25mbGlrdCcpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0 +ICRSZXNwb25zZSBAew0KICAgICAgICAgICAgICAgICAgICAgICAgZmVobGVyICAgICAgICA9ICdr +b25mbGlrdCcNCiAgICAgICAgICAgICAgICAgICAgICAgIG1lbGR1bmcgICAgICAgPSAnRGllc2Ug +WmVsbGUgd3VyZGUgaW56d2lzY2hlbiBnZWFlbmRlcnQuJw0KICAgICAgICAgICAgICAgICAgICAg +ICAgYWt0dWVsbGVyV2VydCA9ICRsb2NrRXJnZWJuaXMuYWt0dWVsbA0KICAgICAgICAgICAgICAg +ICAgICB9IDQwOQ0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICBpZiAoJGxvY2tFcmdlYm5pcy50eXAgLWVxICd1bnRlcmJlc2V0 +enVuZycpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBA +ew0KICAgICAgICAgICAgICAgICAgICAgICAgZmVobGVyICAgICAgICAgPSAnRnVlaHJ1bmdzLVVu +dGVyYmVzZXR6dW5nJw0KICAgICAgICAgICAgICAgICAgICAgICAga29uZmxpa3RUeXAgICAgPSAn +dW50ZXJiZXNldHp1bmcnDQogICAgICAgICAgICAgICAgICAgICAgICBzY2hpY2h0ICAgICAgICA9 +ICRsb2NrRXJnZWJuaXMuc2NoaWNodA0KICAgICAgICAgICAgICAgICAgICAgICAgYWt0dWVsbENv +dW50ICAgPSAkbG9ja0VyZ2VibmlzLmFrdHVlbGxDb3VudA0KICAgICAgICAgICAgICAgICAgICAg +ICAgYWx0ZXJXZXJ0ICAgICAgPSAkbG9ja0VyZ2VibmlzLmFsdGVyDQogICAgICAgICAgICAgICAg +ICAgICAgICBuZXVlcldlcnQgICAgICA9ICR3ZXJ0DQogICAgICAgICAgICAgICAgICAgIH0gNDA5 +DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KDQogICAg +ICAgICAgICAgICAgJGFsdGVyID0gJGxvY2tFcmdlYm5pcy5hbHRlcg0KICAgICAgICAgICAgICAg +IFdyaXRlLUxvZ0VpbnRyYWcgJ3plbGxlLmdlYWVuZGVydCcgQHsgZGF0dW0gPSAkZGF0dW07IHBl +cnNvbklkID0gJHBlcnNvbklkOyBhbHRlcldlcnQgPSAiJGFsdGVyIjsgbmV1ZXJXZXJ0ID0gIiR3 +ZXJ0IiB9DQogICAgICAgICAgICAgICAgIyBMaXZlLVN5bmM6IENoYW5nZS1Mb2cgZnVlciBkZW4g +c3luYy13b3JrZXIuDQogICAgICAgICAgICAgICAgQWRkLUNoYW5nZUxvZ0VpbnRyYWcgJ3plbGxl +JyBAew0KICAgICAgICAgICAgICAgICAgICBkYXR1bSAgICA9ICRkYXR1bQ0KICAgICAgICAgICAg +ICAgICAgICBwZXJzb25JZCA9ICRwZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICBhbHQgICAg +ICA9ICIkYWx0ZXIiDQogICAgICAgICAgICAgICAgICAgIG5ldSAgICAgID0gIiR3ZXJ0Ig0KICAg +ICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICMgVW50ZXJiZXNldHp1bmdzLVF1aXR0 +dW5nOiBleHRyYSBMb2didWNoLUVpbnRyYWcsIGRlbiBGYWNoYXVmc2ljaHQvV0wgc2VoZW4gc29s +bA0KICAgICAgICAgICAgICAgIGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd1bnRlcmJlc2V0 +enVuZ1NjaGljaHQnXSAtYW5kICRhLnVudGVyYmVzZXR6dW5nU2NoaWNodCkgew0KICAgICAgICAg +ICAgICAgICAgICAkc2NoaWNodExldHRlciA9IFtzdHJpbmddJGEudW50ZXJiZXNldHp1bmdTY2hp +Y2h0DQogICAgICAgICAgICAgICAgICAgICRzY2hpY2h0VGV4dCA9IHN3aXRjaCAoJHNjaGljaHRM +ZXR0ZXIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICdGJyB7ICdGcnVlaHNjaGljaHQnIH0N +CiAgICAgICAgICAgICAgICAgICAgICAgICdTJyB7ICdTcGFldHNjaGljaHQnIH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgICdOJyB7ICdOYWNodHNjaGljaHQnIH0NCiAgICAgICAgICAgICAgICAg +ICAgICAgIGRlZmF1bHQgeyAkc2NoaWNodExldHRlciB9DQogICAgICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICAgICAgJG9lVHh0ID0gJycNCiAgICAgICAgICAgICAgICAgICAgaWYg +KCR6aWVsUGVyc29uIC1hbmQgJHppZWxQZXJzb24uUFNPYmplY3QuUHJvcGVydGllc1snb2UnXSkg +eyAkb2VUeHQgPSBbc3RyaW5nXSR6aWVsUGVyc29uLm9lIH0NCiAgICAgICAgICAgICAgICAgICAg +JG5hbWVUeHQgPSAnJw0KICAgICAgICAgICAgICAgICAgICBpZiAoJHppZWxQZXJzb24pIHsNCiAg +ICAgICAgICAgICAgICAgICAgICAgICR2biA9ICcnOyBpZiAoJHppZWxQZXJzb24uUFNPYmplY3Qu +UHJvcGVydGllc1sndm9ybmFtZSddKSB7ICR2biA9IFtzdHJpbmddJHppZWxQZXJzb24udm9ybmFt +ZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAkbmFtZVR4dCA9ICgiJHZuICQoJHppZWxQZXJz +b24ubmFtZSkiKS5UcmltKCkNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +ICAgICBXcml0ZS1Mb2dFaW50cmFnICd1bnRlcmJlc2V0enVuZy5xdWl0dGllcnQnIEB7DQogICAg +ICAgICAgICAgICAgICAgICAgICBkYXR1bSAgICAgPSAkZGF0dW0NCiAgICAgICAgICAgICAgICAg +ICAgICAgIHBlcnNvbklkICA9ICRwZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICAgICAgcGVy +c29uICAgID0gJG5hbWVUeHQNCiAgICAgICAgICAgICAgICAgICAgICAgIG9lICAgICAgICA9ICRv +ZVR4dA0KICAgICAgICAgICAgICAgICAgICAgICAgc2NoaWNodCAgID0gJHNjaGljaHRUZXh0DQog +ICAgICAgICAgICAgICAgICAgICAgICBhbHRlcldlcnQgPSAiJGFsdGVyIg0KICAgICAgICAgICAg +ICAgICAgICAgICAgbmV1ZXJXZXJ0ID0gIiR3ZXJ0Ig0KICAgICAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICMgUGhhc2UgRC4zICgyMDI2LTA1LTIx +KTogd2VubiBkaWUgS3JhbmttZWxkdW5nIHp1cnVlY2tnZW5vbW1lbg0KICAgICAgICAgICAgICAg +ICMgd2lyZCAoYWx0ZXIgV2VydCB3YXIga3IvS3VyLCBuZXVlciBXZXJ0IGlzdCBlcyBuaWNodCBt +ZWhyKSwNCiAgICAgICAgICAgICAgICAjIGVudGZlcm5lbiB3aXIgZGVuIG9mZmVuZW4gSGlud2Vp +cyDigJQgc29uc3QgaXN0IGVyIGJpcyB6dQ0KICAgICAgICAgICAgICAgICMgMzAgVGFnZSBwcmFl +c2VudCwgb2J3b2hsIGRhcyBFcmVpZ25pcyBlcmxlZGlndCBpc3QuDQogICAgICAgICAgICAgICAg +aWYgKCgkYWx0ZXIgLWVxICdrcicgLW9yICRhbHRlciAtZXEgJ0t1cicpIC1hbmQgKCR3ZXJ0IC1u +ZSAna3InIC1hbmQgJHdlcnQgLW5lICdLdXInKSkgew0KICAgICAgICAgICAgICAgICAgICBSZW1v +dmUtT2ZmZW5lS3JhbmttZWxkdW5nc0hpbndlaXNlICRwZXJzb25JZCAkZGF0dW0NCiAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgIyBIaW53ZWlzLVRyaWdnZXI6IEtyYW5rbWVsZHVu +ZyBlcnpldWd0IGVpbmVuIEluLUFwcC1IaW53ZWlzDQogICAgICAgICAgICAgICAgIyBmdWVyIFNV +ICsgR2VzYW10dmVyYW50d29ydGxpY2hlIChTY2hpY2h0bG9jaCBpbSBNb2RhbCBkaXJla3QNCiAg +ICAgICAgICAgICAgICAjIGFkcmVzc2llcmJhciB2aWEgIkthbmRpZGF0ZW4gYW5zY2hyZWliZW4i +LUJ1dHRvbikuDQogICAgICAgICAgICAgICAgaWYgKCR3ZXJ0IC1lcSAna3InIC1vciAkd2VydCAt +ZXEgJ0t1cicpIHsNCiAgICAgICAgICAgICAgICAgICAgJGttTmFtZSA9ICcnDQogICAgICAgICAg +ICAgICAgICAgIGlmICgkemllbFBlcnNvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGt2 +biA9ICcnOyBpZiAoJHppZWxQZXJzb24uUFNPYmplY3QuUHJvcGVydGllc1sndm9ybmFtZSddKSB7 +ICRrdm4gPSBbc3RyaW5nXSR6aWVsUGVyc29uLnZvcm5hbWUgfQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgJGttTmFtZSA9ICgiJGt2biAkKCR6aWVsUGVyc29uLm5hbWUpIikuVHJpbSgpDQogICAg +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJGttR3J1cHBlID0gJycNCiAg +ICAgICAgICAgICAgICAgICAgaWYgKCR6aWVsUGVyc29uIC1hbmQgJHppZWxQZXJzb24uUFNPYmpl +Y3QuUHJvcGVydGllc1snZ3J1cHBlJ10pIHsgJGttR3J1cHBlID0gW3N0cmluZ10kemllbFBlcnNv +bi5ncnVwcGUgfQ0KICAgICAgICAgICAgICAgICAgICAka21TY2hpY2h0TGV0dGVyID0gJycNCiAg +ICAgICAgICAgICAgICAgICAgaWYgKCIkYWx0ZXIiIC1tYXRjaCAnXihbRlNOXSktJykgeyAka21T +Y2hpY2h0TGV0dGVyID0gJE1hdGNoZXNbMV0gfQ0KICAgICAgICAgICAgICAgICAgICBOZXctSGlu +d2VpcyAna3JhbmttZWxkdW5nJyAoW29yZGVyZWRdQHsNCiAgICAgICAgICAgICAgICAgICAgICAg +IHBlcnNvbl9pZCAgICA9ICRwZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29u +X25hbWUgID0gJGttTmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgZ3J1cHBlICAgICAgID0g +JGttR3J1cHBlDQogICAgICAgICAgICAgICAgICAgICAgICBkYXR1bSAgICAgICAgPSAkZGF0dW0N +CiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGljaHRDb2RlICA9ICIkYWx0ZXIiDQogICAgICAg +ICAgICAgICAgICAgICAgICBzY2hpY2h0S3VyeiAgPSAka21TY2hpY2h0TGV0dGVyDQogICAgICAg +ICAgICAgICAgICAgICAgICBjb2RlICAgICAgICAgPSAiJHdlcnQiDQogICAgICAgICAgICAgICAg +ICAgIH0pIChHZXQtQWt0dWVsbGVyQmVudXR6ZXIpIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMg +PSAnZ2VzcGVpY2hlcnQnOyBhbHRlcldlcnQgPSAkYWx0ZXIgfQ0KICAgICAgICAgICAgICAgIGNv +bnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICAjIEJ1bGstU2NocmVpYmVuIG1laHJl +cmVyIFplbGxlbiBpbiBlaW5lbSBTY2hyaXR0IOKAlCBhdWZnZXJ1ZmVuDQogICAgICAgICAgICAj +IHZvbSBFeGNlbC1GdWVsbC1HcmlmZi4gU3BhcnQgcHJvIERyYWcgYmlzIHp1IDEwMCsgSFRUUC1S +b3VuZHRyaXBzDQogICAgICAgICAgICAjIHVuZCBEYXRlaS1TY2hyZWlidm9yZ2FlbmdlLiBQZXJt +aXNzaW9uLUNoZWNrIHBybyBaZWxsZSwgZWluDQogICAgICAgICAgICAjIGVpbnppZ2VyIExvZ2J1 +Y2gtRWludHJhZyBmYXNzdCBkaWUgQWt0aW9uIHp1c2FtbWVuLg0KICAgICAgICAgICAgaWYgKCRQ +YXRoIC1lcSAnL2FwaS9wbGFudW5nL3plbGxlbi1idWxrJyAtYW5kICRNZXRob2QgLWVxICdQT1NU +Jykgew0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAg +ICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2Ug +enUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRhID0gJGJvZHkgfCBD +b252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGVpbnRyYWVnZSA9IEAoJGEuZWludHJh +ZWdlKQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRlaW50cmFlZ2UgLW9yICRlaW50cmFlZ2Uu +Q291bnQgLWVxIDApIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNw +b25zZSBAeyBzdGF0dXMgPSAnb2snOyBvayA9IDA7IGFiZ2VsZWhudCA9IEAoKSB9DQogICAgICAg +ICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +ICMgUmVhZC1Nb2RpZnktV3JpdGUgYXRvbWFyIGluIGRlciBEYXRlaS1TcGVycmUg4oCUIHdpZSBk +ZXIgRWluemVsLQ0KICAgICAgICAgICAgICAgICMgemVsbC1FbmRwb2ludC4gT2huZSBMb2NrIGth +bm4gZWluIHBhcmFsbGVsZXIgRWRpdC9CdWxrIChhdWNoDQogICAgICAgICAgICAgICAgIyBhdXMg +ZWluZW0gYW5kZXJlbiBTZXJ2ZXItUHJvemVzcyBhdWYgZGVtc2VsYmVuIFNoYXJlKSBkZW4NCiAg +ICAgICAgICAgICAgICAjIGdlcmFkZSBnZWxlc2VuZW4gR2VzYW10c3RhbmQgdWViZXJzY2hyZWli +ZW4gKExvc3QgVXBkYXRlIHVlYmVyDQogICAgICAgICAgICAgICAgIyBkaWUgR0FOWkUgRGF0ZWkp +LiBMb2didWNoICsgTGl2ZS1TeW5jIGxhdWZlbiBOQUNIIGRlciBTcGVycmUsDQogICAgICAgICAg +ICAgICAgIyB1bSBnZXNjaGFjaHRlbHRlIExvY2tzIChsb2didWNoL2NoYW5nZXMpIHp1IHZlcm1l +aWRlbi4NCiAgICAgICAgICAgICAgICAkcmVzID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkg +ew0KICAgICAgICAgICAgICAgICAgICAkcmVzID0gSW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVu +Zy5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZyA9IFJlYWQtSnNvbk9i +amVjdCAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1l +cSAkcGxhbnVuZykgeyByZXR1cm4gQHsgdHlwID0gJ2Vycm9yJzsgY29kZSA9IDQwNDsgbXNnID0g +J3BsYW51bmcuanNvbiBuaWNodCBnZWZ1bmRlbicgfSB9DQogICAgICAgICAgICAgICAgICAgICAg +ICBpZiAoLW5vdCAkcGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWydlaW50cmFlZ2UnXSkgew0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nIHwgQWRkLU1lbWJlciAtTm90ZVBy +b3BlcnR5TmFtZSAnZWludHJhZWdlJyAtTm90ZVByb3BlcnR5VmFsdWUgKFtQU0N1c3RvbU9iamVj +dF1Ae30pIC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgIyBQZXJzb25lbi1NYXAgZWlubWFsIGF1ZmJhdWVuIOKAlCBQZXJtaXNzaW9uLUNo +ZWNrIHBybw0KICAgICAgICAgICAgICAgICAgICAgICAgIyBFaW50cmFnIG9obmUgUmVzY2FuIGRl +ciBQZXJzb25lbmxpc3RlLg0KICAgICAgICAgICAgICAgICAgICAgICAgJHBlcnNvbk1hcCA9IEB7 +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwbGFudW5nLnBlcnNvbmVuKSB7DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHBwIGluIEAoJHBsYW51bmcucGVyc29u +ZW4pKSB7ICRwZXJzb25NYXBbW3N0cmluZ10kcHAuaWRdID0gJHBwIH0NCiAgICAgICAgICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRva0NvdW50ID0gMA0KICAgICAg +ICAgICAgICAgICAgICAgICAgJGFiZ2VsZWhudCA9IEAoKQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgJGVyc3Rlc1BpZCA9ICRudWxsDQogICAgICAgICAgICAgICAgICAgICAgICAkZXJzdGVzV2Vy +dCA9ICRudWxsDQogICAgICAgICAgICAgICAgICAgICAgICAkZXJzdGVzRGF0dW0gPSAkbnVsbA0K +ICAgICAgICAgICAgICAgICAgICAgICAgJGxldHp0ZXNEYXR1bSA9ICRudWxsDQogICAgICAgICAg +ICAgICAgICAgICAgICAjIGFsdGVXZXJ0ZS1NYXAgZnVlciBMb2didWNoLVJlc3RvcmU6IEtleSA9 +ICI8ZGF0dW0+fDxwZXJzb25JZD4iLg0KICAgICAgICAgICAgICAgICAgICAgICAgJGFsdGVXZXJ0 +ZSA9IEB7fQ0KICAgICAgICAgICAgICAgICAgICAgICAgIyBzeW5jRWludHJhZWdlOiBwcm8gZ2Vt +dXRpZXJ0ZXIgWmVsbGUgZWluIEVpbnRyYWcgZnVlcg0KICAgICAgICAgICAgICAgICAgICAgICAg +IyBkZW4gTGl2ZS1TeW5jLUNoYW5nZS1Mb2cgKEZvcm1hdCB3aWUgU2luZ2xlLUNlbGwpLg0KICAg +ICAgICAgICAgICAgICAgICAgICAgJHN5bmNFaW50cmFlZ2UgPSBOZXctT2JqZWN0IFN5c3RlbS5D +b2xsZWN0aW9ucy5BcnJheUxpc3QNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRl +IGluICRlaW50cmFlZ2UpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGF0dW0gPSBb +c3RyaW5nXSRlLmRhdHVtDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBlcnNvbklkID0g +W3N0cmluZ10kZS5wZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3ZXJ0ID0g +aWYgKCRlLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3dlcnQnXSAtYW5kICRudWxsIC1uZSAkZS53ZXJ0 +KSB7IFtzdHJpbmddJGUud2VydCB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgaWYgKC1ub3QgJGRhdHVtIC1vciAtbm90ICRwZXJzb25JZCkgeyAkYWJnZWxlaG50ICs9 +IEB7IGRhdHVtID0gJGRhdHVtOyBwZXJzb25JZCA9ICRwZXJzb25JZDsgZ3J1bmQgPSAndW52b2xs +c3RhZW5kaWcnIH07IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkemll +bFBlcnNvbiA9ICRwZXJzb25NYXBbJHBlcnNvbklkXQ0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIGlmICgtbm90IChUZXN0LURhcmZaZWxsZUVkaXRpZXJlbiAkemllbFBlcnNvbikpIHsNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFiZ2VsZWhudCArPSBAeyBkYXR1bSA9ICRk +YXR1bTsgcGVyc29uSWQgPSAkcGVyc29uSWQ7IGdydW5kID0gJ2tlaW4tcmVjaHQnIH0NCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHBsYW51bmcu +ZWludHJhZWdlLlBTT2JqZWN0LlByb3BlcnRpZXNbJGRhdHVtXSkgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAkcGxhbnVuZy5laW50cmFlZ2UgfCBBZGQtTWVtYmVyIC1Ob3RlUHJv +cGVydHlOYW1lICRkYXR1bSAtTm90ZVByb3BlcnR5VmFsdWUgKFtQU0N1c3RvbU9iamVjdF1Ae30p +IC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAjIEFsdGVuIFdlcnQgbWVya2VuIEJFVk9SIHdpciBkaWUgWmVsbGUgdWViZXJz +Y2hyZWliZW4uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsdGVyV2VydCA9ICcnDQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwbGFudW5nLmVpbnRyYWVnZS4kZGF0dW0u +UFNPYmplY3QuUHJvcGVydGllc1skcGVyc29uSWRdKSB7DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICRhbHRlcldlcnQgPSBbc3RyaW5nXSRwbGFudW5nLmVpbnRyYWVnZS4kZGF0dW0u +JHBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICRhbHRlV2VydGVbKCJ7MH18ezF9IiAtZiAkZGF0dW0sICRwZXJzb25JZCld +ID0gJGFsdGVyV2VydA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChbc3RyaW5nXTo6 +SXNOdWxsT3JFbXB0eSgkd2VydCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +aWYgKCRwbGFudW5nLmVpbnRyYWVnZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skcGVyc29u +SWRdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZy5laW50 +cmFlZ2UuJGRhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCRwZXJzb25JZCkNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +IH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcGxhbnVuZy5l +aW50cmFlZ2UuJGRhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXNbJHBlcnNvbklkXSkgew0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcuZWludHJhZWdlLiRkYXR1bS4k +cGVyc29uSWQgPSAkd2VydA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug +ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcuZWludHJhZWdl +LiRkYXR1bSB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJHBlcnNvbklkIC1Ob3RlUHJv +cGVydHlWYWx1ZSAkd2VydCAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAkb2tDb3VudCsrDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1l +cSAkZXJzdGVzUGlkKSB7ICRlcnN0ZXNQaWQgPSAkcGVyc29uSWQ7ICRlcnN0ZXNXZXJ0ID0gJHdl +cnQ7ICRlcnN0ZXNEYXR1bSA9ICRkYXR1bSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +JGxldHp0ZXNEYXR1bSA9ICRkYXR1bQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lk +XSRzeW5jRWludHJhZWdlLkFkZChAeyBkYXR1bSA9ICRkYXR1bTsgcGVyc29uSWQgPSAkcGVyc29u +SWQ7IGFsdCA9ICIkYWx0ZXJXZXJ0IjsgbmV1ID0gIiR3ZXJ0IiB9KQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgIyBEYXRlaSBudXIgc2NocmVpYmVu +LCB3ZW5uIHRhdHNhZWNobGljaCB3YXMgZ2VhZW5kZXJ0IHd1cmRlLg0KICAgICAgICAgICAgICAg +ICAgICAgICAgaWYgKCRva0NvdW50IC1ndCAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgV3JpdGUtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJyAkcGxhbnVuZyB8IE91dC1OdWxsDQog +ICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g +QHsgdHlwID0gJ29rJzsgb2tDb3VudCA9ICRva0NvdW50OyBhYmdlbGVobnQgPSAkYWJnZWxlaG50 +OyBlcnN0ZXNQaWQgPSAkZXJzdGVzUGlkOyBlcnN0ZXNXZXJ0ID0gJGVyc3Rlc1dlcnQ7IGVyc3Rl +c0RhdHVtID0gJGVyc3Rlc0RhdHVtOyBsZXR6dGVzRGF0dW0gPSAkbGV0enRlc0RhdHVtOyBhbHRl +V2VydGUgPSAkYWx0ZVdlcnRlOyBzeW5jRWludHJhZWdlID0gJHN5bmNFaW50cmFlZ2UgfQ0KICAg +ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAg +ICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBj +b250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoJHJlcy50eXAg +LWVxICdlcnJvcicpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJHJlcy5tc2cgJHJlcy5jb2RlOyBj +b250aW51ZSB9DQogICAgICAgICAgICAgICAgIyBMb2didWNoICsgTGl2ZS1TeW5jIE5BQ0ggZGVt +IExvY2sgKGtlaW4gZ2VzY2hhY2h0ZWx0ZXMgTG9jaykuDQogICAgICAgICAgICAgICAgaWYgKCRy +ZXMub2tDb3VudCAtZ3QgMCkgew0KICAgICAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFn +ICd6ZWxsZW4uYnVsay5nZWFlbmRlcnQnIEB7DQogICAgICAgICAgICAgICAgICAgICAgICBwZXJz +b25JZCAgICA9ICRyZXMuZXJzdGVzUGlkDQogICAgICAgICAgICAgICAgICAgICAgICB3ZXJ0ICAg +ICAgICA9ICRyZXMuZXJzdGVzV2VydA0KICAgICAgICAgICAgICAgICAgICAgICAgYW56YWhsICAg +ICAgPSAkcmVzLm9rQ291bnQNCiAgICAgICAgICAgICAgICAgICAgICAgIGVyc3RlclRhZyAgID0g +JHJlcy5lcnN0ZXNEYXR1bQ0KICAgICAgICAgICAgICAgICAgICAgICAgbGV0enRlclRhZyAgPSAk +cmVzLmxldHp0ZXNEYXR1bQ0KICAgICAgICAgICAgICAgICAgICAgICAgYWJnZWxlaG50ICAgPSAk +cmVzLmFiZ2VsZWhudC5Db3VudA0KICAgICAgICAgICAgICAgICAgICAgICAgIyBSZXN0b3JlLVBh +eWxvYWQ6IHBybyBaZWxsZSBkZXIgV2VydCB2b3IgZGVyIEFlbmRlcnVuZy4NCiAgICAgICAgICAg +ICAgICAgICAgICAgIGFsdGVXZXJ0ZSAgID0gJHJlcy5hbHRlV2VydGUNCiAgICAgICAgICAgICAg +ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAjIExpdmUtU3luYzogcHJvIFplbGxlIGVpbiAn +emVsbGUnLUVpbnRyYWcgaW5zIGNoYW5nZXMuanNvbi4NCiAgICAgICAgICAgICAgICAgICAgQWRk +LUNoYW5nZUxvZ0VpbnRyYWVnZSAnemVsbGUnICRyZXMuc3luY0VpbnRyYWVnZQ0KICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0 +YXR1cyA9ICdvayc7IG9rID0gJHJlcy5va0NvdW50OyBhYmdlbGVobnQgPSBAKCRyZXMuYWJnZWxl +aG50KSB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICMgUE9TVCAvYXBpL3BsYW51bmcva29tbWVudGFyDQogICAgICAgICAgICAjIEhhZW5ndCBl +aW5lbiBuZXVlbiBLb21tZW50YXIgYW4gZGllIExpc3RlIGZ1ZXIgKGRhdHVtLHBlcnNvbklkKSBh +bi4NCiAgICAgICAgICAgICMgU2NoZW1hLU1pZ3JhdGlvbiAobGF6eSk6IHZvcmhhbmRlbmVyIFN0 +cmluZyBvZGVyIE9iamVrdC1FaW50cmFnIHdpcmQNCiAgICAgICAgICAgICMgYmVpbSBlcnN0ZW4g +U2NocmVpYmVuIGluIGVpbmUgTGlzdGUga29udmVydGllcnQuIExlZXJlciBUZXh0IHdpcmQNCiAg +ICAgICAgICAgICMgYWJnZWxlaG50IOKAlCBMb2VzY2hlbiBlaW56ZWxuZXIgS29tbWVudGFyZSBs +YWV1ZnQgdWViZXIgZGVuIERFTEVURS0NCiAgICAgICAgICAgICMgRW5kcHVua3QgKG1pdCBLb21t +ZW50YXItSUQpLCBkYXMgTG9lc2NoZW4gZ2FuemVyIExpc3RlbiBpc3QgdWViZXINCiAgICAgICAg +ICAgICMgZGllIEFQSSBuaWNodCBtZWhyIG1vZWdsaWNoICh2ZXJzZWhlbnRsaWNoZXIgVmVybHVz +dCBhdXNnZXNjaGxvc3NlbikuDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51 +bmcva29tbWVudGFyJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAg +ICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJv +ZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGlu +dWUgfQ0KICAgICAgICAgICAgICAgICRhID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAg +ICAgICAgICAgICAgJGRhdHVtID0gJGEuZGF0dW0NCiAgICAgICAgICAgICAgICAkcGVyc29uSWQg +PSBbc3RyaW5nXSRhLnBlcnNvbklkDQogICAgICAgICAgICAgICAgJHRleHQgPSBpZiAoJGEuUFNP +YmplY3QuUHJvcGVydGllc1sndGV4dCddKSB7ICgiJCgkYS50ZXh0KSIpLlRyaW0oKSB9IGVsc2Ug +eyAnJyB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJHRleHQpIHsNCiAgICAgICAgICAgICAg +ICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0xlZXJlciBLb21tZW50YXIg4oCUIGJpdHRlIERF +TEVURSAvYXBpL3BsYW51bmcva29tbWVudGFyIGZ1ZXIgTG9lc2NoZW4gdmVyd2VuZGVuJyA0MDAN +CiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgIyBFZGl0LVJlY2h0IHZvciBMb2NrIHBydWVmZW4NCiAgICAgICAgICAgICAgICAk +cGxhbnVuZ0NoZWNrID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAg +ICAgICAgaWYgKCRudWxsIC1lcSAkcGxhbnVuZ0NoZWNrKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNl +ICdwbGFudW5nLmpzb24gbmljaHQgZ2VmdW5kZW4nIDQwNDsgY29udGludWUgfQ0KICAgICAgICAg +ICAgICAgICR6aWVsUGVyc29uID0gJG51bGwNCiAgICAgICAgICAgICAgICBpZiAoJHBsYW51bmdD +aGVjay5wZXJzb25lbikgew0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcHAgaW4gQCgk +cGxhbnVuZ0NoZWNrLnBlcnNvbmVuKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFtz +dHJpbmddJHBwLmlkIC1lcSAkcGVyc29uSWQpIHsgJHppZWxQZXJzb24gPSAkcHA7IGJyZWFrIH0N +CiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg +ICBpZiAoLW5vdCAoVGVzdC1EYXJmWmVsbGVFZGl0aWVyZW4gJHppZWxQZXJzb24pKSB7DQogICAg +ICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBCZXJlY2h0aWd1bmcg +ZnVlciBkaWVzZW4gS29tbWVudGFyJyA0MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgICRqZXR6dCA9IChHZXQtRGF0ZSkuVG9TdHJpbmcoJ28nKSAgIyBJU08g +ODYwMSBtaXQgWmVpdHpvbmUNCiAgICAgICAgICAgICAgICAkYmVudXR6ZXIgPSAiJERvbWFpblwk +VXNlcm5hbWUiDQogICAgICAgICAgICAgICAgJG5ldWVJZCA9ICdrXycgKyAoW0RhdGVUaW1lT2Zm +c2V0XTo6Tm93LlRvVW5peFRpbWVNaWxsaXNlY29uZHMoKSkgKyAnXycgKyAoR2V0LVJhbmRvbSAt +TWF4aW11bSA5OTk5OSkNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAg +ICAkbnVsbCA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicgew0KICAgICAgICAg +ICAgICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicN +CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJHBsYW51bmcpIHsgcmV0dXJu +ICRudWxsIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRwbGFudW5nLlBTT2Jq +ZWN0LlByb3BlcnRpZXNbJ2tvbW1lbnRhcmUnXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICRwbGFudW5nIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAna29tbWVudGFyZScg +LU5vdGVQcm9wZXJ0eVZhbHVlIChOZXctT2JqZWN0IFBTT2JqZWN0KSAtRm9yY2UNCiAgICAgICAg +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRwbGFu +dW5nLmtvbW1lbnRhcmUuUFNPYmplY3QuUHJvcGVydGllc1skZGF0dW1dKSB7DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgJHBsYW51bmcua29tbWVudGFyZSB8IEFkZC1NZW1iZXIgLU5vdGVQ +cm9wZXJ0eU5hbWUgJGRhdHVtIC1Ob3RlUHJvcGVydHlWYWx1ZSAoTmV3LU9iamVjdCBQU09iamVj +dCkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg +ICAgICAjIEFrdHVlbGxlIExpc3RlIGhlcmF1c3ppZWhlbiArIGdnZi4gYXVzIEFsdHNjaGVtYSBt +aWdyaWVyZW4uDQogICAgICAgICAgICAgICAgICAgICAgICAjIExpc3RlIGlzdCBjaHJvbm9sb2dp +c2NoIChhZWx0ZXN0ZSB6dWVyc3QpLCBkZXIgbmV1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAg +IyBFaW50cmFnIHdpcmQgaGludGVuIGFuZ2VoYWVuZ3QuDQogICAgICAgICAgICAgICAgICAgICAg +ICAkbGlzdGUgPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3Rbb2Jq +ZWN0XQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwbGFudW5nLmtvbW1lbnRhcmUuJGRh dHVtLlBTT2JqZWN0LlByb3BlcnRpZXNbJHBlcnNvbklkXSkgew0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICRwbGFudW5nLmtvbW1lbnRhcmUuJGRhdHVtLiRwZXJzb25JZCA9ICRhcnINCiAg -ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgJHBsYW51bmcua29tbWVudGFyZS4kZGF0dW0gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlO -YW1lICRwZXJzb25JZCAtTm90ZVByb3BlcnR5VmFsdWUgJGFyciAtRm9yY2UNCiAgICAgICAgICAg -ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3Qg -J3BsYW51bmcuanNvbicgJHBsYW51bmcgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAg -ICAgcmV0dXJuICRudWxsDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9 -IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2Nr -LUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAg -ICAgICAgICMgUmVkYWN0aW9uIHdpZSBiZWkga29tbWVudGFyLmdlbG9lc2NodCAoU3ByaW50IDEg -4oCUIFNpY2hlcmhlaXRzLQ0KICAgICAgICAgICAgICAgICMgTm90YnJlbXNlIDIwMjYtMDUtMjgp -OiBWb2xsdGV4dCBibGVpYnQgaW4gcGxhbnVuZy5qc29uIChkb3J0DQogICAgICAgICAgICAgICAg -IyBlZGl0aWVyYmFyL2xvZXNjaGJhciksIGRhcyBMb2didWNoIGJla29tbXQgbnVyIFZvcnNjaGF1 -ICsgTGFlbmdlLg0KICAgICAgICAgICAgICAgICMgVmVybWVpZGV0IFBJSS1FY2hvLCB3ZW5uIGVp -biBLb21tZW50YXIgc3BhZXRlciBnZWxvZXNjaHQgd2lyZA0KICAgICAgICAgICAgICAgICMgYWJl -ciBpbSBMb2cgaW1tZXIgbm9jaCBrb21wbGV0dCBsaWVzdCBzdGVodC4NCiAgICAgICAgICAgICAg -ICAkdGV4dFZvcnNjaGF1ID0gJHRleHQNCiAgICAgICAgICAgICAgICBpZiAoJHRleHRWb3JzY2hh -dS5MZW5ndGggLWd0IDQwKSB7ICR0ZXh0Vm9yc2NoYXUgPSAkdGV4dFZvcnNjaGF1LlN1YnN0cmlu -ZygwLCA0MCkgKyAn4oCmJyB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAna29t -bWVudGFyLmhpbnp1Z2VmdWVndCcgQHsNCiAgICAgICAgICAgICAgICAgICAgZGF0dW0gICAgICAg -ICA9ICRkYXR1bQ0KICAgICAgICAgICAgICAgICAgICBwZXJzb25JZCAgICAgID0gJHBlcnNvbklk -DQogICAgICAgICAgICAgICAgICAgIGtvbW1lbnRhcklkICAgPSAkbmV1ZUlkDQogICAgICAgICAg -ICAgICAgICAgIHRleHRWb3JzY2hhdSAgPSAkdGV4dFZvcnNjaGF1DQogICAgICAgICAgICAgICAg -ICAgIHRleHRMYWVuZ2UgICAgPSAkdGV4dC5MZW5ndGgNCiAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgQWRkLUNoYW5nZUxvZ0VpbnRyYWcgJ2tvbW1lbnRhcicgQHsNCiAgICAgICAg -ICAgICAgICAgICAgZGF0dW0gICAgPSAkZGF0dW0NCiAgICAgICAgICAgICAgICAgICAgcGVyc29u -SWQgPSAkcGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAga29tbWVudGFySWQgPSAkbmV1ZUlk -DQogICAgICAgICAgICAgICAgICAgICMgTGl2ZS1TeW5jIGJyYXVjaHQgZGVuIFRleHQgbmljaHQg -4oCUIG5hZWNoc3RlciBSZW5kZXIgbGFlZHQNCiAgICAgICAgICAgICAgICAgICAgIyBpaG4gYXVz -IHBsYW51bmcuanNvbi4gTnVyIE1ldGFkYXRlbiBmdWVyIEFrdGl2aXRhZXRzLUFuemVpZ2UuDQog -ICAgICAgICAgICAgICAgICAgIHplaXRzdGVtcGVsID0gJGpldHp0DQogICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAgICAg -ICAgICAgICAgICAgc3RhdHVzICAgICAgID0gJ2hpbnp1Z2VmdWVndCcNCiAgICAgICAgICAgICAg -ICAgICAga29tbWVudGFySWQgID0gJG5ldWVJZA0KICAgICAgICAgICAgICAgICAgICBnZWFlbmRl -cnRBbSAgPSAkamV0enQNCiAgICAgICAgICAgICAgICAgICAgZ2VhZW5kZXJ0Vm9uID0gJGJlbnV0 -emVyDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAg -ICAgICB9DQoNCiAgICAgICAgICAgICMgREVMRVRFIC9hcGkvcGxhbnVuZy9rb21tZW50YXINCiAg -ICAgICAgICAgICMgQm9keTogeyBkYXR1bSwgcGVyc29uSWQsIGtvbW1lbnRhcklkIH0NCiAgICAg -ICAgICAgICMgQmVyZWNodGlndW5nOiBTdXBlclVzZXIgb2RlciBHZXNhbXR2ZXJhbnR3b3J0bGlj -aGUuIEFuZGVyZSBSb2xsZW4NCiAgICAgICAgICAgICMgYmVrb21tZW4gNDAzIOKAlCBhdWNoIGRl -ciBWZXJmYXNzZXIgc2VsYnN0IGRhcmYgbmljaHQgbG9lc2NoZW4NCiAgICAgICAgICAgICMgKGJl -d3Vzc3RlIERlc2lnbmVudHNjaGVpZHVuZzogS29tbWVudGFyLVZlcmxhdWYgaXN0IENocm9uaWsp -Lg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL2tvbW1lbnRhcicgLWFu -ZCAkTWV0aG9kIC1lcSAnREVMRVRFJykgew0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1C +ICAgICAgICAgICR2b3JoID0gJHBsYW51bmcua29tbWVudGFyZS4kZGF0dW0uJHBlcnNvbklkDQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR2b3JoIC1pcyBbc3RyaW5nXSAtYW5kICR2 +b3JoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWx0ZXIgU3RyaW5nLUVp +bnRyYWcg4oCUIGVpbiBFbGVtZW50IG9obmUgTWV0YQ0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAkbGlzdGUuQWRkKFtQU0N1c3RvbU9iamVjdF1Aew0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgaWQgICAgICAgICAgID0gJ2tfbGVnYWN5XycgKyAoR2V0LVJhbmRv +bSAtTWF4aW11bSA5OTk5OSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl +eHQgICAgICAgICA9ICR2b3JoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn +ZWFlbmRlcnRBbSAgPSAkbnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +Z2VhZW5kZXJ0Vm9uID0gJG51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkg +fCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkdm9yaCAt +aXMgW2FycmF5XSAtb3IgKCR2b3JoIC1pcyBbU3lzdGVtLkNvbGxlY3Rpb25zLklFbnVtZXJhYmxl +XSAtYW5kIC1ub3QgKCR2b3JoIC1pcyBbc3RyaW5nXSkpKSB7DQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICMgU2Nob24gZWluIEFycmF5IChuZXVlcyBTY2hlbWEpDQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRlIGluIEAoJHZvcmgpKSB7ICRsaXN0ZS5B +ZGQoJGUpIHwgT3V0LU51bGwgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlm +ICgkdm9yaCAtYW5kICR2b3JoLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RleHQnXSkgew0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFsdGVzIE9iamVrdC1TY2hlbWEgeyB0ZXh0LCBn +ZWFlbmRlcnRBbSwgZ2VhZW5kZXJ0Vm9uIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgJG1pZ0lkID0gaWYgKCR2b3JoLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2lkJ10pIHsgW3N0cmlu +Z10kdm9yaC5pZCB9IGVsc2UgeyAna19sZWdhY3lfJyArIChHZXQtUmFuZG9tIC1NYXhpbXVtIDk5 +OTk5KSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaXN0ZS5BZGQoW1BTQ3Vz +dG9tT2JqZWN0XUB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCAgICAg +ICAgICAgPSAkbWlnSWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQg +ICAgICAgICA9IFtzdHJpbmddJHZvcmgudGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgZ2VhZW5kZXJ0QW0gID0gaWYgKCR2b3JoLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2dl +YWVuZGVydEFtJ10pICB7ICR2b3JoLmdlYWVuZGVydEFtIH0gIGVsc2UgeyAkbnVsbCB9DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZWFlbmRlcnRWb24gPSBpZiAoJHZvcmgu +UFNPYmplY3QuUHJvcGVydGllc1snZ2VhZW5kZXJ0Vm9uJ10pIHsgJHZvcmguZ2VhZW5kZXJ0Vm9u +IH0gZWxzZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgfCBP +dXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRsaXN0ZS5BZGQoW1BTQ3VzdG9tT2Jq +ZWN0XUB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgICAgICAgICAgID0gJG5ldWVJ +ZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgICAgICAgICA9ICR0ZXh0DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgZ2VhZW5kZXJ0QW0gID0gJGpldHp0DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgZ2VhZW5kZXJ0Vm9uID0gJGJlbnV0emVyDQogICAgICAgICAgICAg +ICAgICAgICAgICB9KSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICAjIFp1cnVl +Y2sgYWxzIEFycmF5IChQUy1TZXJpYWxpc2llcnVuZykNCiAgICAgICAgICAgICAgICAgICAgICAg +ICRhcnIgPSBAKCRsaXN0ZS5Ub0FycmF5KCkpDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo +JHBsYW51bmcua29tbWVudGFyZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skcGVyc29uSWRd +KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcua29tbWVudGFyZS4kZGF0 +dW0uJHBlcnNvbklkID0gJGFycg0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZy5rb21tZW50YXJlLiRkYXR1bSB8IEFk +ZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJHBlcnNvbklkIC1Ob3RlUHJvcGVydHlWYWx1ZSAk +YXJyIC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgV3JpdGUtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJyAkcGxhbnVuZyB8IE91dC1OdWxs +DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJG51bGwNCiAgICAgICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5k +LUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIyBSZWRhY3Rpb24gd2llIGJlaSBrb21tZW50 +YXIuZ2Vsb2VzY2h0IChTcHJpbnQgMSDigJQgU2ljaGVyaGVpdHMtDQogICAgICAgICAgICAgICAg +IyBOb3RicmVtc2UgMjAyNi0wNS0yOCk6IFZvbGx0ZXh0IGJsZWlidCBpbiBwbGFudW5nLmpzb24g +KGRvcnQNCiAgICAgICAgICAgICAgICAjIGVkaXRpZXJiYXIvbG9lc2NoYmFyKSwgZGFzIExvZ2J1 +Y2ggYmVrb21tdCBudXIgVm9yc2NoYXUgKyBMYWVuZ2UuDQogICAgICAgICAgICAgICAgIyBWZXJt +ZWlkZXQgUElJLUVjaG8sIHdlbm4gZWluIEtvbW1lbnRhciBzcGFldGVyIGdlbG9lc2NodCB3aXJk +DQogICAgICAgICAgICAgICAgIyBhYmVyIGltIExvZyBpbW1lciBub2NoIGtvbXBsZXR0IGxpZXN0 +IHN0ZWh0Lg0KICAgICAgICAgICAgICAgICR0ZXh0Vm9yc2NoYXUgPSAkdGV4dA0KICAgICAgICAg +ICAgICAgIGlmICgkdGV4dFZvcnNjaGF1Lkxlbmd0aCAtZ3QgNDApIHsgJHRleHRWb3JzY2hhdSA9 +ICR0ZXh0Vm9yc2NoYXUuU3Vic3RyaW5nKDAsIDQwKSArICfigKYnIH0NCiAgICAgICAgICAgICAg +ICBXcml0ZS1Mb2dFaW50cmFnICdrb21tZW50YXIuaGluenVnZWZ1ZWd0JyBAew0KICAgICAgICAg +ICAgICAgICAgICBkYXR1bSAgICAgICAgID0gJGRhdHVtDQogICAgICAgICAgICAgICAgICAgIHBl +cnNvbklkICAgICAgPSAkcGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAga29tbWVudGFySWQg +ICA9ICRuZXVlSWQNCiAgICAgICAgICAgICAgICAgICAgdGV4dFZvcnNjaGF1ICA9ICR0ZXh0Vm9y +c2NoYXUNCiAgICAgICAgICAgICAgICAgICAgdGV4dExhZW5nZSAgICA9ICR0ZXh0Lkxlbmd0aA0K +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBBZGQtQ2hhbmdlTG9nRWludHJhZyAn +a29tbWVudGFyJyBAew0KICAgICAgICAgICAgICAgICAgICBkYXR1bSAgICA9ICRkYXR1bQ0KICAg +ICAgICAgICAgICAgICAgICBwZXJzb25JZCA9ICRwZXJzb25JZA0KICAgICAgICAgICAgICAgICAg +ICBrb21tZW50YXJJZCA9ICRuZXVlSWQNCiAgICAgICAgICAgICAgICAgICAgIyBMaXZlLVN5bmMg +YnJhdWNodCBkZW4gVGV4dCBuaWNodCDigJQgbmFlY2hzdGVyIFJlbmRlciBsYWVkdA0KICAgICAg +ICAgICAgICAgICAgICAjIGlobiBhdXMgcGxhbnVuZy5qc29uLiBOdXIgTWV0YWRhdGVuIGZ1ZXIg +QWt0aXZpdGFldHMtQW56ZWlnZS4NCiAgICAgICAgICAgICAgICAgICAgemVpdHN0ZW1wZWwgPSAk +amV0enQNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0 +ICRSZXNwb25zZSBAew0KICAgICAgICAgICAgICAgICAgICBzdGF0dXMgICAgICAgPSAnaGluenVn +ZWZ1ZWd0Jw0KICAgICAgICAgICAgICAgICAgICBrb21tZW50YXJJZCAgPSAkbmV1ZUlkDQogICAg +ICAgICAgICAgICAgICAgIGdlYWVuZGVydEFtICA9ICRqZXR6dA0KICAgICAgICAgICAgICAgICAg +ICBnZWFlbmRlcnRWb24gPSAkYmVudXR6ZXINCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBERUxFVEUgL2Fw +aS9wbGFudW5nL2tvbW1lbnRhcg0KICAgICAgICAgICAgIyBCb2R5OiB7IGRhdHVtLCBwZXJzb25J +ZCwga29tbWVudGFySWQgfQ0KICAgICAgICAgICAgIyBCZXJlY2h0aWd1bmc6IFN1cGVyVXNlciBv +ZGVyIEdlc2FtdHZlcmFudHdvcnRsaWNoZS4gQW5kZXJlIFJvbGxlbg0KICAgICAgICAgICAgIyBi +ZWtvbW1lbiA0MDMg4oCUIGF1Y2ggZGVyIFZlcmZhc3NlciBzZWxic3QgZGFyZiBuaWNodCBsb2Vz +Y2hlbg0KICAgICAgICAgICAgIyAoYmV3dXNzdGUgRGVzaWduZW50c2NoZWlkdW5nOiBLb21tZW50 +YXItVmVybGF1ZiBpc3QgQ2hyb25paykuDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBp +L3BsYW51bmcva29tbWVudGFyJyAtYW5kICRNZXRob2QgLWVxICdERUxFVEUnKSB7DQogICAgICAg +ICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAo +LW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEz +OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGEgPSAkYm9keSB8IENvbnZlcnRGcm9tLUpz +b24NCiAgICAgICAgICAgICAgICAkZGF0dW0gPSAkYS5kYXR1bQ0KICAgICAgICAgICAgICAgICRw +ZXJzb25JZCA9IFtzdHJpbmddJGEucGVyc29uSWQNCiAgICAgICAgICAgICAgICAka29tbWVudGFy +SWQgPSBbc3RyaW5nXSRhLmtvbW1lbnRhcklkDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGRh +dHVtIC1vciAtbm90ICRwZXJzb25JZCAtb3IgLW5vdCAka29tbWVudGFySWQpIHsNCiAgICAgICAg +ICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ2RhdHVtLCBwZXJzb25JZCB1bmQga29t +bWVudGFySWQgc2luZCBQZmxpY2h0JyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgICRyID0gR2V0LVJlY2h0ZQ0KICAgICAgICAgICAgICAgIGlmICgtbm90 +ICgkci5pc3RTdXBlclVzZXIgLW9yICRyLmlzdEdlc2FtdHZlcmFudHdvcnRsaWNoKSkgew0KICAg +ICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnTnVyIFN1cGVyVXNlciB1bmQg +R2VzYW10dmVyYW50d29ydGxpY2hlIGR1ZXJmZW4gS29tbWVudGFyZSBsb2VzY2hlbicgNDAzDQog +ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAg +ICAgICAgICRnZWxvZXNjaHRlclRleHQgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQog +ICAgICAgICAgICAgICAgICAgICRlcmcgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpz +b24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nID0gUmVhZC1Kc29uT2JqZWN0 +ICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRw +bGFudW5nIC1vciAtbm90ICRwbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2tvbW1lbnRhcmUn +XSkgeyByZXR1cm4gQHsgdGV4dCA9ICRudWxsIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAg +aWYgKC1ub3QgJHBsYW51bmcua29tbWVudGFyZS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRkYXR1bV0p +IHsgcmV0dXJuIEB7IHRleHQgPSAkbnVsbCB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlm +ICgtbm90ICRwbGFudW5nLmtvbW1lbnRhcmUuJGRhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXNbJHBl +cnNvbklkXSkgeyByZXR1cm4gQHsgdGV4dCA9ICRudWxsIH0gfQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgJHZvcmggPSAkcGxhbnVuZy5rb21tZW50YXJlLiRkYXR1bS4kcGVyc29uSWQNCiAgICAg +ICAgICAgICAgICAgICAgICAgICMgQ29tcGF0IGZ1ZXIgQWx0LUZvcm1hdGUgKFNwcmludCAzIOKA +lCBEcmlmdC9Sb2J1c3RoZWl0DQogICAgICAgICAgICAgICAgICAgICAgICAjIDIwMjYtMDUtMjgp +OiBDbGllbnQga2VubnplaWNobmV0IFN0cmluZy0gb2RlciBTaW5nbGUtDQogICAgICAgICAgICAg +ICAgICAgICAgICAjIE9iamVjdC1vaG5lLUlEIEVpbnRyYWVnZSBpbiBrb21tZW50YXJMaXN0ZSgp +IG1pdA0KICAgICAgICAgICAgICAgICAgICAgICAgIyBTZW50aW5lbC1JRCAna19sZWdhY3knLiBE +RUxFVEUgbWl0IGRpZXNlciBJRCBnZWdlbg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBlaW5l +biBBbHQtRWludHJhZyA9IGtvbXBsZXR0ZXIgRWludHJhZyB3aXJkIGVudGZlcm50DQogICAgICAg +ICAgICAgICAgICAgICAgICAjIChNaWdyYXRpb24gKyBMb2VzY2h1bmcgaW4gZWluZW0gU2Nocml0 +dCkuDQogICAgICAgICAgICAgICAgICAgICAgICAkdHJlZmZlciA9ICRudWxsDQogICAgICAgICAg +ICAgICAgICAgICAgICAkbmV1ZUxpc3RlID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMu +R2VuZXJpYy5MaXN0W29iamVjdF0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdm9yaCAt +aXMgW3N0cmluZ10gLWFuZCAkdm9yaCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm +ICgka29tbWVudGFySWQgLWVxICdrX2xlZ2FjeScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgJHRyZWZmZXIgPSBbUFNDdXN0b21PYmplY3RdQHsgdGV4dCA9ICR2b3JoIH0NCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICByZXR1cm4gQHsgdGV4dCA9ICRudWxsOyBmZWhsZXIgPSAna29tbWVudGFyTmlj +aHRHZWZ1bmRlbicgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg +ICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxpc3Rl +ID0gQCgpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR2b3JoIC1pcyBbYXJyYXld +IC1vciAoJHZvcmggLWlzIFtTeXN0ZW0uQ29sbGVjdGlvbnMuSUVudW1lcmFibGVdIC1hbmQgLW5v +dCAoJHZvcmggLWlzIFtzdHJpbmddKSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgJGxpc3RlID0gQCgkdm9yaCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Vp +ZiAoJHZvcmggLWFuZCAkdm9yaC5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0ZXh0J10pIHsNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsdElkID0gaWYgKCR2b3JoLlBTT2JqZWN0LlBy +b3BlcnRpZXNbJ2lkJ10pIHsgW3N0cmluZ10kdm9yaC5pZCB9IGVsc2UgeyAnJyB9DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRhbHRJZCkgew0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRrb21tZW50YXJJZCAtZXEgJ2tfbGVnYWN5Jykg +ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0cmVmZmVyID0gJHZv +cmgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHRleHQgPSAkbnVsbDsg +ZmVobGVyID0gJ2tvbW1lbnRhck5pY2h0R2VmdW5kZW4nIH0NCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaXN0ZSA9IEAoJHZvcmgp +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHRyZWZmZXIp +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGUgaW4gJGxpc3Rl +KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZWlkID0gaWYgKCRlIC1h +bmQgJGUuUFNPYmplY3QuUHJvcGVydGllc1snaWQnXSkgeyBbc3RyaW5nXSRlLmlkIH0gZWxzZSB7 +ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZWlkIC1lcSAk +a29tbWVudGFySWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk +dHJlZmZlciA9ICRlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug +ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXVlTGlzdGUuQWRk +KCRlKSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAg +ICBpZiAoLW5vdCAkdHJlZmZlcikgeyByZXR1cm4gQHsgdGV4dCA9ICRudWxsOyBmZWhsZXIgPSAn +a29tbWVudGFyTmljaHRHZWZ1bmRlbicgfSB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo +JG5ldWVMaXN0ZS5Db3VudCAtZXEgMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg +TGV0enRlciBLb21tZW50YXIgZW50ZmVybnQgLT4gUHJvcGVydHkga29tcGxldHQgcmF1cw0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nLmtvbW1lbnRhcmUuJGRhdHVtLlBTT2Jq +ZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCRwZXJzb25JZCkNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAjIExlZXJlciBUYWdlcy1CdWNrZXQgYXVmcmFldW1lbg0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICR0YWdQcm9wcyA9IEAoJHBsYW51bmcua29tbWVudGFyZS4kZGF0dW0uUFNPYmpl +Y3QuUHJvcGVydGllcykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRhZ1Byb3Bz +LkNvdW50IC1lcSAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5n +LmtvbW1lbnRhcmUuUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJGRhdHVtKQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcua29tbWVudGFyZS4kZGF0dW0uJHBl +cnNvbklkID0gQCgkbmV1ZUxpc3RlLlRvQXJyYXkoKSkNCiAgICAgICAgICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51bmcuanNv +bicgJHBsYW51bmcgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgJGVudGZlcm50 +VGV4dCA9IGlmICgkdHJlZmZlci5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0ZXh0J10pIHsgW3N0cmlu +Z10kdHJlZmZlci50ZXh0IH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHJl +dHVybiBAeyB0ZXh0ID0gJGVudGZlcm50VGV4dCB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICAgICAgICAgaWYgKCRlcmcuZmVobGVyKSB7DQogICAgICAgICAgICAgICAgICAg +ICAgICBpZiAoJGVyZy5mZWhsZXIgLWVxICdrb21tZW50YXJOaWNodEdlZnVuZGVuJykgew0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLb21tZW50YXIg +bWl0IGRpZXNlciBJRCBuaWNodCBnZWZ1bmRlbicgNDA0OyBjb250aW51ZQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg +ICRnZWxvZXNjaHRlclRleHQgPSAkZXJnLnRleHQNCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsN +CiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjog +JF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICMg +UmVkYWN0aW9uIChTcHJpbnQgMSDigJQgU2ljaGVyaGVpdHMtTm90YnJlbXNlIDIwMjYtMDUtMjgp +Og0KICAgICAgICAgICAgICAgICMgUElJLVNjaHV0ei4gRnJ1ZWhlciBsYW5kZXRlIGRlciB2b2xs +c3RhZW5kaWdlIEtvbW1lbnRhci1UZXh0IGltDQogICAgICAgICAgICAgICAgIyBMb2didWNoIOKA +lCB3ZW5uIGRlciBLb21tZW50YXIgS3JhbmtoZWl0cy0vRGlzemlwbGluYXItSW5mbyBlbnRoaWVs +dCwNCiAgICAgICAgICAgICAgICAjIGxlYnRlIHNpZSBuYWNoICdMb2VzY2hlbicgd2VpdGVyIGlt +IExvZy4gSmV0enQgbnVyIExhZW5nZSArIGt1cnplcg0KICAgICAgICAgICAgICAgICMgQXVzenVn +ICg0MCBaZWljaGVuKSwgZ2VudWcgZnVlciBOYWNodm9sbHppZWhiYXJrZWl0IG9obmUgVm9sbHRl +eHQuDQogICAgICAgICAgICAgICAgJHRleHRWb3JzY2hhdSA9ICcnDQogICAgICAgICAgICAgICAg +aWYgKCRnZWxvZXNjaHRlclRleHQpIHsNCiAgICAgICAgICAgICAgICAgICAgJGt1cnogPSAkZ2Vs +b2VzY2h0ZXJUZXh0DQogICAgICAgICAgICAgICAgICAgIGlmICgka3Vyei5MZW5ndGggLWd0IDQw +KSB7ICRrdXJ6ID0gJGt1cnouU3Vic3RyaW5nKDAsIDQwKSArICfigKYnIH0NCiAgICAgICAgICAg +ICAgICAgICAgJHRleHRWb3JzY2hhdSA9ICRrdXJ6DQogICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgICR0ZXh0TGFlbmdlID0gaWYgKCRnZWxvZXNjaHRlclRleHQpIHsgJGdlbG9lc2No +dGVyVGV4dC5MZW5ndGggfSBlbHNlIHsgMCB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWlu +dHJhZyAna29tbWVudGFyLmdlbG9lc2NodCcgQHsNCiAgICAgICAgICAgICAgICAgICAgZGF0dW0g +ICAgICAgICA9ICRkYXR1bQ0KICAgICAgICAgICAgICAgICAgICBwZXJzb25JZCAgICAgID0gJHBl +cnNvbklkDQogICAgICAgICAgICAgICAgICAgIGtvbW1lbnRhcklkICAgPSAka29tbWVudGFySWQN +CiAgICAgICAgICAgICAgICAgICAgdGV4dFZvcnNjaGF1ICA9ICR0ZXh0Vm9yc2NoYXUNCiAgICAg +ICAgICAgICAgICAgICAgdGV4dExhZW5nZSAgICA9ICR0ZXh0TGFlbmdlDQogICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgIEFkZC1DaGFuZ2VMb2dFaW50cmFnICdrb21tZW50YXInIEB7 +DQogICAgICAgICAgICAgICAgICAgIGRhdHVtICAgID0gJGRhdHVtDQogICAgICAgICAgICAgICAg +ICAgIHBlcnNvbklkID0gJHBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgIGtvbW1lbnRhcklk +ID0gJGtvbW1lbnRhcklkDQogICAgICAgICAgICAgICAgICAgICMgTGl2ZS1TeW5jLUNoYW5uZWwg +YnJhdWNodCBkZW4gVGV4dCBuaWNodCDigJQgQnJvd3NlciBsYWVkdA0KICAgICAgICAgICAgICAg +ICAgICAjIGJlaSBuYWVjaHN0ZW0gUmVuZGVyIGVoIGF1cyBwbGFudW5nLmpzb24gKHdvIGRlciBF +aW50cmFnDQogICAgICAgICAgICAgICAgICAgICMgd2VnIGlzdCkuIEhpZXIgbnVyIE1ldGFkYXRl +biBmdWVyIEFrdGl2aXRhZXRzLUFuemVpZ2UuDQogICAgICAgICAgICAgICAgICAgIG5ldSAgICAg +ID0gJycNCiAgICAgICAgICAgICAgICAgICAgemVpdHN0ZW1wZWwgPSAoR2V0LURhdGUpLlRvU3Ry +aW5nKCdvJykNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2Jq +ZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2Vsb2VzY2h0Jzsga29tbWVudGFySWQgPSAka29t +bWVudGFySWQgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAg +ICAgICAgICAgICMgPT09PT0gUEVSU09ORU4gPT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAt +ZXEgJy9hcGkvcGVyc29uZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAg +ICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdL +ZWluZSBBZG1pbi1SZWNodGUnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRib2R5 +ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsg +U2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0K +ICAgICAgICAgICAgICAgICRuZXUgPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAg +ICAgICAgICAjIFJlYWQtTW9kaWZ5LVdyaXRlIGF0b21hciBpbiBkZXIgRGF0ZWktU3BlcnJlLiBX +aWNodGlnIG5pY2h0IG51cg0KICAgICAgICAgICAgICAgICMgZ2VnZW4gTG9zdCBVcGRhdGVzLCBz +b25kZXJuIGdlZ2VuIGRpZSBtYXhJZC1SYWNlOiB6d2VpIHBhcmFsbGVsZQ0KICAgICAgICAgICAg +ICAgICMgUGVyc29uZW4tQW5sYWdlbiB3dWVyZGVuIHNvbnN0IGRpZXNlbGJlIG1heElkIGxlc2Vu +IHVuZCBJREVOVElTQ0hFDQogICAgICAgICAgICAgICAgIyBJRHMgdmVyZ2ViZW4gKGRvcHBlbHRl +IFBlcnNvbmVuLUlEcyA9IGtvcnJ1cHRlciBTdGF0ZSkuDQogICAgICAgICAgICAgICAgJHBlcnNS +ZXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgJHBlcnNS +ZXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAgICAgICAg +ICAkcGxhbnVuZyA9IFJlYWQtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAg +ICAgICRtYXhJZCA9IDANCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkcCBpbiAkcGxhbnVuZy5w +ZXJzb25lbikgeyBpZiAoJHAuaWQgLWd0ICRtYXhJZCkgeyAkbWF4SWQgPSAkcC5pZCB9IH0NCiAg +ICAgICAgICAgICAgICAkbmV1ZUlkID0gJG1heElkICsgMQ0KDQogICAgICAgICAgICAgICAgIyBF +aW5yZWlodW5ncy1Mb2dpazogInVudGVuIiAoRGVmYXVsdCksICJ2b3IiIG9kZXIgIm5hY2giIGVp +bmVyIFJlZmVyZW56cGVyc29uDQogICAgICAgICAgICAgICAgJGVpbnJlaWhlbiA9ICd1bnRlbicN +CiAgICAgICAgICAgICAgICBpZiAoJG5ldS5QU09iamVjdC5Qcm9wZXJ0aWVzWydlaW5yZWloZW4n +XSAtYW5kICRuZXUuZWlucmVpaGVuKSB7ICRlaW5yZWloZW4gPSAoW3N0cmluZ10kbmV1LmVpbnJl +aWhlbikuVG9Mb3dlcigpIH0NCiAgICAgICAgICAgICAgICAkcmVmSWQgPSAkbnVsbA0KICAgICAg +ICAgICAgICAgIGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3JlZmVyZW56SWQnXSAtYW5k +ICRudWxsIC1uZSAkbmV1LnJlZmVyZW56SWQpIHsgJHJlZklkID0gW2ludF0kbmV1LnJlZmVyZW56 +SWQgfQ0KDQogICAgICAgICAgICAgICAgJHppZWxQb3MgPSAkbnVsbA0KICAgICAgICAgICAgICAg +IGlmICgoJGVpbnJlaWhlbiAtZXEgJ3ZvcicgLW9yICRlaW5yZWloZW4gLWVxICduYWNoJykgLWFu +ZCAkbnVsbCAtbmUgJHJlZklkKSB7DQogICAgICAgICAgICAgICAgICAgICRyZWZQb3MgPSAkbnVs +bA0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcCBpbiAkcGxhbnVuZy5wZXJzb25lbikg +ew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFtpbnRdJHAuaWQgLWVxICRyZWZJZCkgew0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZWZQb3MgPSBpZiAoJHAuUFNPYmplY3QuUHJv +cGVydGllc1sncG9zaXRpb24nXSAtYW5kICRwLnBvc2l0aW9uKSB7IFtpbnRdJHAucG9zaXRpb24g +fSBlbHNlIHsgMCB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAg +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +ICAgICBpZiAoJG51bGwgLW5lICRyZWZQb3MpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR6 +aWVsUG9zID0gaWYgKCRlaW5yZWloZW4gLWVxICd2b3InKSB7ICRyZWZQb3MgfSBlbHNlIHsgJHJl +ZlBvcyArIDEgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgIyBQb3NpdGlvbmVuIGFiIHppZWxQ +b3MgdW0gMSBuYWNoIGhpbnRlbiBzY2hpZWJlbg0KICAgICAgICAgICAgICAgICAgICAgICAgZm9y +ZWFjaCAoJHAgaW4gJHBsYW51bmcucGVyc29uZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAkcHAgPSBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGllc1sncG9zaXRpb24nXSAtYW5kICRw +LnBvc2l0aW9uKSB7IFtpbnRdJHAucG9zaXRpb24gfSBlbHNlIHsgMCB9DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgaWYgKCRwcCAtZ2UgJHppZWxQb3MpIHsNCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Bvc2l0aW9uJ10pIHsg +JHAucG9zaXRpb24gPSAkcHAgKyAxIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ZWxzZSB7ICRwIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAncG9zaXRpb24nIC1Ob3Rl +UHJvcGVydHlWYWx1ZSAoJHBwICsgMSkgLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkemllbFBv +cykgew0KICAgICAgICAgICAgICAgICAgICAkbWF4UG9zID0gMA0KICAgICAgICAgICAgICAgICAg +ICBmb3JlYWNoICgkcCBpbiAkcGxhbnVuZy5wZXJzb25lbikgeyAkcG9zID0gaWYgKCRwLnBvc2l0 +aW9uKSB7IFtpbnRdJHAucG9zaXRpb24gfSBlbHNlIHsgMCB9OyBpZiAoJHBvcyAtZ3QgJG1heFBv +cykgeyAkbWF4UG9zID0gJHBvcyB9IH0NCiAgICAgICAgICAgICAgICAgICAgJHppZWxQb3MgPSAk +bWF4UG9zICsgMQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICRwZXJzb24g +PSBbb3JkZXJlZF1Aew0KICAgICAgICAgICAgICAgICAgICBpZCA9ICRuZXVlSWQNCiAgICAgICAg +ICAgICAgICAgICAgYWt0aXYgPSBpZiAoJG5ldS5QU09iamVjdC5Qcm9wZXJ0aWVzWydha3Rpdidd +KSB7ICRuZXUuYWt0aXYgfSBlbHNlIHsgJHRydWUgfQ0KICAgICAgICAgICAgICAgICAgICBuYW1l +ID0gJG5ldS5uYW1lDQogICAgICAgICAgICAgICAgICAgIHZvcm5hbWUgPSBpZiAoJG5ldS5QU09i +amVjdC5Qcm9wZXJ0aWVzWyd2b3JuYW1lJ10pIHsgJG5ldS52b3JuYW1lIH0gZWxzZSB7ICcnIH0N +CiAgICAgICAgICAgICAgICAgICAgZGllbnN0Z3JhZCA9IGlmICgkbmV1LlBTT2JqZWN0LlByb3Bl +cnRpZXNbJ2RpZW5zdGdyYWQnXSkgeyAkbmV1LmRpZW5zdGdyYWQgfSBlbHNlIHsgJycgfQ0KICAg +ICAgICAgICAgICAgICAgICBmdW5rdGlvbiA9IGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNb +J2Z1bmt0aW9uJ10pIHsgJG5ldS5mdW5rdGlvbiB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAg +ICAgICAgIGdydXBwZSA9IGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2dydXBwZSddKSB7 +ICRuZXUuZ3J1cHBlIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgb2UgPSBpZiAo +JG5ldS5QU09iamVjdC5Qcm9wZXJ0aWVzWydvZSddKSB7ICRuZXUub2UgfSBlbHNlIHsgJycgfQ0K +ICAgICAgICAgICAgICAgICAgICBkaWVuc3RudW1tZXIgPSBpZiAoJG5ldS5QU09iamVjdC5Qcm9w +ZXJ0aWVzWydkaWVuc3RudW1tZXInXSkgeyAkbmV1LmRpZW5zdG51bW1lciB9IGVsc2UgeyAnJyB9 +DQogICAgICAgICAgICAgICAgICAgIHRlbGVmb24gPSBpZiAoJG5ldS5QU09iamVjdC5Qcm9wZXJ0 +aWVzWyd0ZWxlZm9uJ10pIHsgJG5ldS50ZWxlZm9uIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAg +ICAgICAgICAgcG9zaXRpb24gPSAkemllbFBvcw0KICAgICAgICAgICAgICAgICAgICBlbWFpbCA9 +IGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VtYWlsJ10pIHsgJG5ldS5lbWFpbCB9IGVs +c2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgIG53S2VubnVuZyA9IGlmICgkbmV1LlBTT2Jq +ZWN0LlByb3BlcnRpZXNbJ253S2VubnVuZyddKSB7ICRuZXUubndLZW5udW5nIH0gZWxzZSB7ICcn +IH0NCiAgICAgICAgICAgICAgICAgICAgZ2VidXJ0c2RhdHVtID0gaWYgKCRuZXUuUFNPYmplY3Qu +UHJvcGVydGllc1snZ2VidXJ0c2RhdHVtJ10pIHsgJG5ldS5nZWJ1cnRzZGF0dW0gfSBlbHNlIHsg +JycgfQ0KICAgICAgICAgICAgICAgICAgICBlbERnbFF1YWxpZml6aWVydCA9IGlmICgkbmV1LlBT +T2JqZWN0LlByb3BlcnRpZXNbJ2VsRGdsUXVhbGlmaXppZXJ0J10pIHsgW2Jvb2xdJG5ldS5lbERn +bFF1YWxpZml6aWVydCB9IGVsc2UgeyAkZmFsc2UgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICAjIE1hcmtlciBmdWVyIFBlcnNvbmVuLCBkaWUgcGVyIEV4Y2VsLUltcG9ydCBm +cmlzY2ggYW5nZWxlZ3QNCiAgICAgICAgICAgICAgICAjIHd1cmRlbi4gUGVyc29uYWx2ZXJ3YWx0 +dW5nIGJsZW5kZXQgc2llIGltIE5ldWltcG9ydC1CbG9jaw0KICAgICAgICAgICAgICAgICMgb2Jl +biBlaW4sIGJpcyBkYXMgRmxhZyBtYW51ZWxsIHdlZ2dlc2V0enQgd2lyZCAoRXJsZWRpZ3QtDQog +ICAgICAgICAgICAgICAgIyBCdXR0b24pIG9kZXIgZGFzIGxldHp0ZSBQZmxpY2h0ZmVsZCAoRGll +bnN0Z3J1cHBlKSBnZXBmbGVndA0KICAgICAgICAgICAgICAgICMgaXN0IHVuZCBkZXIgVXNlciBh +dWYgIkJsb2NrIGxlZXJlbiIga2xpY2t0Lg0KICAgICAgICAgICAgICAgIGlmICgkbmV1LlBTT2Jq +ZWN0LlByb3BlcnRpZXNbJ2ltcG9ydE5ldUFtJ10gLWFuZCAkbmV1LmltcG9ydE5ldUFtKSB7DQog +ICAgICAgICAgICAgICAgICAgICRwZXJzb25bJ2ltcG9ydE5ldUFtJ10gPSBbc3RyaW5nXSRuZXUu +aW1wb3J0TmV1QW0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHBsYW51bmcu +cGVyc29uZW4gKz0gW1BTQ3VzdG9tT2JqZWN0XSRwZXJzb24NCiAgICAgICAgICAgICAgICBXcml0 +ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRwbGFudW5nIHwgT3V0LU51bGwNCiAgICAgICAg +ICAgICAgICByZXR1cm4gQHsgbmV1ZUlkID0gJG5ldWVJZDsgemllbFBvcyA9ICR6aWVsUG9zOyBl +aW5yZWloZW4gPSAkZWlucmVpaGVuIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgi +TG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdwZXJzb24uYW5nZWxlZ3QnIEB7IHBlcnNvbklk +ID0gJHBlcnNSZXMubmV1ZUlkOyBuYW1lID0gIiQoJG5ldS52b3JuYW1lKSAkKCRuZXUubmFtZSki +LlRyaW0oKTsgZWlucmVpaGVuID0gJHBlcnNSZXMuZWlucmVpaGVuOyBwb3NpdGlvbiA9ICRwZXJz +UmVzLnppZWxQb3MgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2Ug +QHsgc3RhdHVzID0gJ2FuZ2VsZWd0JzsgaWQgPSAkcGVyc1Jlcy5uZXVlSWQ7IHBvc2l0aW9uID0g +JHBlcnNSZXMuemllbFBvcyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAg +IH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtbWF0Y2ggJ14vYXBpL3BlcnNvbmVuLyhcZCspJCcg +LWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0 +LUlzdEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQWRtaW4tUmVjaHRlJyA0 +MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkcGVyc29uSWQgPSBbaW50XSRNYXRjaGVz +WzFdDQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAg +ICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6 +dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJHVwZGF0ZSA9ICRib2R5 +IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICMgQXVkaXQtUGhhc2UgQS4zICgy +MDI2LTA1LTIxKTogUHJpdmlsZWdpZW4tU2NodXR6LiBSZWluZQ0KICAgICAgICAgICAgICAgICMg +RmFjaGF1ZnNpY2h0LUFkbWlucyAoc2VoZW4uYWRtaW5pc3RyYXRpb249dHJ1ZSwgYWJlciBrZWlu +IFNVKQ0KICAgICAgICAgICAgICAgICMgZHVlcmZlbiBTdGFtbWRhdGVuIGVkaXRpZXJlbiwgYWJl +ciBLRUlORSBTaWNodGJhcmtlaXRzLQ0KICAgICAgICAgICAgICAgICMgT3ZlcnJpZGVzIChgc2Vo +ZW5gKSBvZGVyIGVkaXRpZXItUmVjaHRlIChgZWRpdFJlY2h0ZWApIHNldHplbg0KICAgICAgICAg +ICAgICAgICMg4oCUIHNvbnN0IGtvZW5udGVuIHNpZSBzaWNoIExvZ2J1Y2gtL1N0YXRpc3Rpay1T +aWNodCBzZWxic3QNCiAgICAgICAgICAgICAgICAjIGZyZWlzY2hhbHRlbi4gUGVyIERldlRvb2xz +LW1hbmlwdWxpZXJ0ZXMgUGF5bG9hZCBhYmZhbmdlbi4NCiAgICAgICAgICAgICAgICBpZiAoLW5v +dCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICgkdXBkYXRl +LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3NlaGVuJ10pICAgICAgeyAkdXBkYXRlLlBTT2JqZWN0LlBy +b3BlcnRpZXMuUmVtb3ZlKCdzZWhlbicpIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKCR1cGRh +dGUuUFNPYmplY3QuUHJvcGVydGllc1snZWRpdFJlY2h0ZSddKSB7ICR1cGRhdGUuUFNPYmplY3Qu +UHJvcGVydGllcy5SZW1vdmUoJ2VkaXRSZWNodGUnKSB9DQogICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgICRwdXRSZXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAg +ICAgICAgICAgICAgJHB1dFJlcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicg +ew0KICAgICAgICAgICAgICAgICRwbGFudW5nID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpz +b24nDQogICAgICAgICAgICAgICAgJGdlZnVuZGVuICAgPSAkZmFsc2UNCiAgICAgICAgICAgICAg +ICAkYWx0ZVdlcnRlICA9IEB7fQ0KICAgICAgICAgICAgICAgICRwZXJzb25OYW1lID0gJycNCiAg +ICAgICAgICAgICAgICBmb3JlYWNoICgkcCBpbiAkcGxhbnVuZy5wZXJzb25lbikgew0KICAgICAg +ICAgICAgICAgICAgICBpZiAoJHAuaWQgLWVxICRwZXJzb25JZCkgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgJHBlcnNvbk5hbWUgPSAoKCIkKCRwLnZvcm5hbWUpICQoJHAubmFtZSkiKS5Ucmlt +KCkpDQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcHJvcCBpbiAkdXBkYXRlLlBT +T2JqZWN0LlByb3BlcnRpZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBy +b3AuTmFtZSAtbmUgJ2lkJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWx0 +ZVdlcnRlWyRwcm9wLk5hbWVdID0gaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJHByb3AuTmFt +ZV0pIHsgJHAuKCRwcm9wLk5hbWUpIH0gZWxzZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJHByb3AuTmFtZV0pIHsg +JHAuKCRwcm9wLk5hbWUpID0gJHByb3AuVmFsdWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICBlbHNlIHsgJHAgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICRwcm9wLk5h +bWUgLU5vdGVQcm9wZXJ0eVZhbHVlICRwcm9wLlZhbHVlIC1Gb3JjZSB9DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgJGdlZnVuZGVuID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgICAgIGJy +ZWFrDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgaWYgKC1ub3QgJGdlZnVuZGVuKSB7IHJldHVybiBAeyBnZWZ1bmRlbiA9ICRmYWxzZSB9 +IH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRwbGFu +dW5nIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICByZXR1cm4gQHsgZ2VmdW5kZW4gPSAkdHJ1 +ZTsgYWx0ZVdlcnRlID0gJGFsdGVXZXJ0ZTsgcGVyc29uTmFtZSA9ICRwZXJzb25OYW1lIH0NCiAg +ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAg +ICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250 +aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcHV0UmVz +LmdlZnVuZGVuKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICJQZXJzb24gJHBlcnNvbklkIG5pY2h0 +IGdlZnVuZGVuIiA0MDQ7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYWx0ZVdlcnRlICA9 +ICRwdXRSZXMuYWx0ZVdlcnRlDQogICAgICAgICAgICAgICAgJHBlcnNvbk5hbWUgPSAkcHV0UmVz +LnBlcnNvbk5hbWUNCg0KICAgICAgICAgICAgICAgICMgRGlmZi1EaWN0IOKAlCBudXIgRmVsZGVy +LCBpbiBkZW5lbiBzaWNoIGRlciBXZXJ0IHRhdHNhZWNobGljaA0KICAgICAgICAgICAgICAgICMg +Z2VhZW5kZXJ0IGhhdC4gSlNPTi1zdGFiaWxlIFZlcmdsZWljaHNiYXNpcy4NCiAgICAgICAgICAg +ICAgICAkZ2VhZW5kZXJ0ID0gW29yZGVyZWRdQHt9DQogICAgICAgICAgICAgICAgZm9yZWFjaCAo +JHByb3AgaW4gJHVwZGF0ZS5QU09iamVjdC5Qcm9wZXJ0aWVzKSB7DQogICAgICAgICAgICAgICAg +ICAgIGlmICgkcHJvcC5OYW1lIC1lcSAnaWQnKSB7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAg +ICAgICAgJGFsdFZhbCAgPSAkYWx0ZVdlcnRlWyRwcm9wLk5hbWVdDQogICAgICAgICAgICAgICAg +ICAgICRuZXVWYWwgID0gJHByb3AuVmFsdWUNCiAgICAgICAgICAgICAgICAgICAgJGFsdEpzb24g +PSAoJGFsdFZhbCB8IENvbnZlcnRUby1Kc29uIC1Db21wcmVzcyAtRGVwdGggOCkNCiAgICAgICAg +ICAgICAgICAgICAgJG5ldUpzb24gPSAoJG5ldVZhbCB8IENvbnZlcnRUby1Kc29uIC1Db21wcmVz +cyAtRGVwdGggOCkNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRhbHRKc29uIC1uZSAkbmV1SnNv +bikgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGdlYWVuZGVydFskcHJvcC5OYW1lXSA9IFtv +cmRlcmVkXUB7IGFsdCA9ICRhbHRWYWw7IG5ldSA9ICRuZXVWYWwgfQ0KICAgICAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWlu +dHJhZyAncGVyc29uLmdlYWVuZGVydCcgKFtvcmRlcmVkXUB7DQogICAgICAgICAgICAgICAgICAg +IHBlcnNvbklkICA9ICRwZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICBuYW1lICAgICAgPSAk +cGVyc29uTmFtZQ0KICAgICAgICAgICAgICAgICAgICBnZWFlbmRlcnQgPSAkZ2VhZW5kZXJ0DQog +ICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgICAjIEhpbndlaXMtVHJpZ2dlcjogSWRl +bnRpdGFldHMtQWVuZGVydW5nIChud0tlbm51bmcgLyBlbWFpbCkgYmVrb21tdA0KICAgICAgICAg +ICAgICAgICMgZWluZW4gSW4tQXBwLUhpbndlaXMgZnVlciBTVSArIEdlc2FtdHZlcmFudHdvcnRs +aWNoZS4gUHJvIEZlbGQgZWluDQogICAgICAgICAgICAgICAgIyBlaWdlbmVyIEVpbnRyYWcsIGRh +bWl0IGRhcyBNb2RhbCBsZXNiYXIgYmxlaWJ0Lg0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRm +ZWxkIGluIEAoJ253S2VubnVuZycsICdlbWFpbCcpKSB7DQogICAgICAgICAgICAgICAgICAgIGlm +ICgkZ2VhZW5kZXJ0LkNvbnRhaW5zKCRmZWxkKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAg +JGRpZmYgPSAkZ2VhZW5kZXJ0WyRmZWxkXQ0KICAgICAgICAgICAgICAgICAgICAgICAgTmV3LUhp +bndlaXMgJ2lkZW50aXRhZXRfZ2VhZW5kZXJ0JyAoW29yZGVyZWRdQHsNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICBwZXJzb25faWQgICA9ICRwZXJzb25JZA0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIHBlcnNvbl9uYW1lID0gJHBlcnNvbk5hbWUNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICBmZWxkICAgICAgICA9ICRmZWxkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +YWx0ZXJfd2VydCAgPSAiJCgkZGlmZi5hbHQpIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +IG5ldWVyX3dlcnQgID0gIiQoJGRpZmYubmV1KSINCiAgICAgICAgICAgICAgICAgICAgICAgIH0p +IChHZXQtQWt0dWVsbGVyQmVudXR6ZXIpIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJl +c3BvbnNlIEB7IHN0YXR1cyA9ICdha3R1YWxpc2llcnQnIH0NCiAgICAgICAgICAgICAgICBjb250 +aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIyBERUxFVEUgL2FwaS9wZXJzb25lbi97 +aWR9ICAgICAgICAgICAgLT4gU29mdC1EZWxldGUgKGdlbG9lc2NodEFtIGdlc2V0enQsIFBlcnNv +biBibGVpYnQgaW0gRGF0ZW5zYXR6IGZ1ZXIgUGFwaWVya29yYi1SdWVja2hvbHVuZykNCiAgICAg +ICAgICAgICMgREVMRVRFIC9hcGkvcGVyc29uZW4ve2lkfT9lbmRndWVsdGlnPTEgLT4gSGFyZC1E +ZWxldGUgKFBlcnNvbiBrb21wbGV0dCBlbnRmZXJuZW4sIEVpbnRyYWVnZS9Lb21tZW50YXJlIHZl +cndhaXNlbikNCiAgICAgICAgICAgICMgVm9yIGRlbSBTb2Z0LURlbGV0ZSB3ZXJkZW4gaW0gc2Vs +YmVuIFp1ZyBiZXJlaXRzIFBhcGllcmtvcmItRWludHJhZWdlIGF1ZmdlcmFldW10LCBkaWUgYWVs +dGVyIGFscw0KICAgICAgICAgICAgIyBhZG1pbi5wYXBpZXJrb3JiVGFnZUF1ZmJld2FocnVuZyAo +RGVmYXVsdCAzMCBUYWdlKSBzaW5kLiBTbyBibGVpYnQgZGVyIERhdGVuc2F0eiBzY2hsYW5rLCBv +aG5lDQogICAgICAgICAgICAjIGVpbmVuIHNlcGFyYXRlbiBDcm9uLUpvYiB6dSBicmF1Y2hlbi4N +CiAgICAgICAgICAgIGlmICgkUGF0aCAtbWF0Y2ggJ14vYXBpL3BlcnNvbmVuLyhcZCspJCcgLWFu +ZCAkTWV0aG9kIC1lcSAnREVMRVRFJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0 +LUlzdEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQWRtaW4tUmVjaHRlJyA0 +MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkcGVyc29uSWQgPSBbaW50XSRNYXRjaGVz +WzFdDQogICAgICAgICAgICAgICAgJGVuZGd1ZWx0aWcgPSAkZmFsc2UNCiAgICAgICAgICAgICAg +ICBpZiAoJFJlcXVlc3QuVXJsLlF1ZXJ5KSB7DQogICAgICAgICAgICAgICAgICAgICRxID0gW1N5 +c3RlbS5XZWIuSHR0cFV0aWxpdHldOjpQYXJzZVF1ZXJ5U3RyaW5nKCRSZXF1ZXN0LlVybC5RdWVy +eSkNCiAgICAgICAgICAgICAgICAgICAgJGVuZGd1ZWx0aWcgPSAoW3N0cmluZ10kcVsnZW5kZ3Vl +bHRpZyddKSAtZXEgJzEnDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRkZWxS +ZXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgJGRlbFJl +cyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicgew0KICAgICAgICAgICAgICAg +ICRwbGFudW5nID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAg +ICAgJGFkbWluICAgPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAg +ICAgJGF1ZmJld2FocnVuZyA9IDMwDQogICAgICAgICAgICAgICAgaWYgKCRhZG1pbiAtYW5kICRh +ZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydwYXBpZXJrb3JiVGFnZUF1ZmJld2FocnVuZyddKSB7 +DQogICAgICAgICAgICAgICAgICAgIHRyeSB7ICRhdWZiZXdhaHJ1bmcgPSBbaW50XSRhZG1pbi5w +YXBpZXJrb3JiVGFnZUF1ZmJld2FocnVuZyB9IGNhdGNoIHt9DQogICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgICRqZXR6dCA9IChHZXQtRGF0ZSkuVG9TdHJpbmcoJ28nKQ0KICAgICAg +ICAgICAgICAgICRwZXJzb25OYW1lID0gJycNCiAgICAgICAgICAgICAgICAkZ2VmdW5kZW4gPSAk +ZmFsc2UNCiAgICAgICAgICAgICAgICAkbmV1ZVBlcnNvbmVuID0gQCgpDQogICAgICAgICAgICAg +ICAgZm9yZWFjaCAoJHAgaW4gJHBsYW51bmcucGVyc29uZW4pIHsNCiAgICAgICAgICAgICAgICAg +ICAgaWYgKCRwLmlkIC1lcSAkcGVyc29uSWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRn +ZWZ1bmRlbiA9ICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAgICAkcGVyc29uTmFtZSA9ICgo +IiQoJHAudm9ybmFtZSkgJCgkcC5uYW1lKSIpLlRyaW0oKSkNCiAgICAgICAgICAgICAgICAgICAg +ICAgIGlmICgkZW5kZ3VlbHRpZykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSGFy +ZC1EZWxldGU6IHVlYmVyc3ByaW5nZW4sIFBlcnNvbiBmbGllZ3QgcmF1cw0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug +ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcC5QU09iamVjdC5Qcm9wZXJ0aWVz +WydnZWxvZXNjaHRBbSddKSB7ICRwLmdlbG9lc2NodEFtID0gJGpldHp0IH0NCiAgICAgICAgICAg +ICAgICAgICAgICAgICAgICBlbHNlIHsgJHAgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1l +ICdnZWxvZXNjaHRBbScgLU5vdGVQcm9wZXJ0eVZhbHVlICRqZXR6dCAtRm9yY2UgfQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICRuZXVlUGVyc29uZW4gKz0gJHANCiAgICAgICAgICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAg +ICAgICAgICAgICMgQXV0by1QdXJnZTogU29mdC1EZWxldGVkLVBlcnNvbmVuLCBkZXJlbiBnZWxv +ZXNjaHRBbSBhZWx0ZXINCiAgICAgICAgICAgICAgICAgICAgICAgICMgYWxzICRhdWZiZXdhaHJ1 +bmcgVGFnZSBpc3QsIHdlcmRlbiBoaWVyIGVuZGd1ZWx0aWcgZW50ZmVybnQuDQogICAgICAgICAg +ICAgICAgICAgICAgICAkcHVyZ2UgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgIGlm +ICgkcC5QU09iamVjdC5Qcm9wZXJ0aWVzWydnZWxvZXNjaHRBbSddIC1hbmQgJHAuZ2Vsb2VzY2h0 +QW0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAkYWx0ZXIgPSBbZGF0ZXRpbWVdJHAuZ2Vsb2VzY2h0QW0NCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChOZXctVGltZVNwYW4gLVN0YXJ0ICRhbHRl +ciAtRW5kIChHZXQtRGF0ZSkpLlRvdGFsRGF5cyAtZ3QgJGF1ZmJld2FocnVuZykgeyAkcHVyZ2Ug +PSAkdHJ1ZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7fQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHB1 +cmdlKSB7ICRuZXVlUGVyc29uZW4gKz0gJHAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRnZWZ1bmRlbikgeyByZXR1 +cm4gQHsgZ2VmdW5kZW4gPSAkZmFsc2UgfSB9DQogICAgICAgICAgICAgICAgJHBsYW51bmcucGVy +c29uZW4gPSBbb2JqZWN0W11dQCgkbmV1ZVBlcnNvbmVuKQ0KICAgICAgICAgICAgICAgIFdyaXRl +LUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicgJHBsYW51bmcgfCBPdXQtTnVsbA0KICAgICAgICAg +ICAgICAgIHJldHVybiBAeyBnZWZ1bmRlbiA9ICR0cnVlOyBwZXJzb25OYW1lID0gJHBlcnNvbk5h +bWU7IGpldHp0ID0gJGpldHp0IH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg +fSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9j +ay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICBpZiAoLW5vdCAkZGVsUmVzLmdlZnVuZGVuKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNl +ICJQZXJzb24gJHBlcnNvbklkIG5pY2h0IGdlZnVuZGVuIiA0MDQ7IGNvbnRpbnVlIH0NCiAgICAg +ICAgICAgICAgICAkcGVyc29uTmFtZSA9ICRkZWxSZXMucGVyc29uTmFtZQ0KICAgICAgICAgICAg +ICAgICRqZXR6dCA9ICRkZWxSZXMuamV0enQNCiAgICAgICAgICAgICAgICBpZiAoJGVuZGd1ZWx0 +aWcpIHsNCiAgICAgICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAncGVyc29uLmVuZGd1 +ZWx0aWcuZ2Vsb2VzY2h0JyBAeyBwZXJzb25JZCA9ICRwZXJzb25JZDsgbmFtZSA9ICRwZXJzb25O +YW1lIH0NCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBXcml0 +ZS1Mb2dFaW50cmFnICdwZXJzb24uaW4ucGFwaWVya29yYicgQHsgcGVyc29uSWQgPSAkcGVyc29u +SWQ7IG5hbWUgPSAkcGVyc29uTmFtZTsgZ2Vsb2VzY2h0QW0gPSAkamV0enQgfQ0KICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0 +YXR1cyA9ICdnZWxvZXNjaHQnOyBtb2R1cyA9IGlmICgkZW5kZ3VlbHRpZykgeyAnZW5kZ3VlbHRp +ZycgfSBlbHNlIHsgJ3BhcGllcmtvcmInIH0gfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQog +ICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BlcnNvbmVuL3Jl +aWhlbmZvbGdlJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYg +KC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBBZG1p +bi1SZWNodGUnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1C b2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJv ciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAg -ICAgICAgICRhID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGRh -dHVtID0gJGEuZGF0dW0NCiAgICAgICAgICAgICAgICAkcGVyc29uSWQgPSBbc3RyaW5nXSRhLnBl -cnNvbklkDQogICAgICAgICAgICAgICAgJGtvbW1lbnRhcklkID0gW3N0cmluZ10kYS5rb21tZW50 -YXJJZA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRkYXR1bSAtb3IgLW5vdCAkcGVyc29uSWQg -LW9yIC1ub3QgJGtvbW1lbnRhcklkKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3Ig -JFJlc3BvbnNlICdkYXR1bSwgcGVyc29uSWQgdW5kIGtvbW1lbnRhcklkIHNpbmQgUGZsaWNodCcg -NDAwOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkciA9IEdl -dC1SZWNodGUNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoJHIuaXN0U3VwZXJVc2VyIC1vciAk -ci5pc3RHZXNhbXR2ZXJhbnR3b3J0bGljaCkpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1F -cnJvciAkUmVzcG9uc2UgJ051ciBTdXBlclVzZXIgdW5kIEdlc2FtdHZlcmFudHdvcnRsaWNoZSBk -dWVyZmVuIEtvbW1lbnRhcmUgbG9lc2NoZW4nIDQwMw0KICAgICAgICAgICAgICAgICAgICBjb250 -aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkZ2Vsb2VzY2h0ZXJUZXh0 -ID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkZXJn -ID0gSW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAg -ICAgICAgICAkcGxhbnVuZyA9IFJlYWQtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJw0KICAgICAg -ICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkcGxhbnVuZyAtb3IgLW5vdCAkcGxhbnVu -Zy5QU09iamVjdC5Qcm9wZXJ0aWVzWydrb21tZW50YXJlJ10pIHsgcmV0dXJuIEB7IHRleHQgPSAk -bnVsbCB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRwbGFudW5nLmtvbW1l -bnRhcmUuUFNPYmplY3QuUHJvcGVydGllc1skZGF0dW1dKSB7IHJldHVybiBAeyB0ZXh0ID0gJG51 -bGwgfSB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcGxhbnVuZy5rb21tZW50 -YXJlLiRkYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwZXJzb25JZF0pIHsgcmV0dXJuIEB7IHRl -eHQgPSAkbnVsbCB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICR2b3JoID0gJHBsYW51bmcu -a29tbWVudGFyZS4kZGF0dW0uJHBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgICAgICAjIENv -bXBhdCBmdWVyIEFsdC1Gb3JtYXRlIChTcHJpbnQgMyDigJQgRHJpZnQvUm9idXN0aGVpdA0KICAg -ICAgICAgICAgICAgICAgICAgICAgIyAyMDI2LTA1LTI4KTogQ2xpZW50IGtlbm56ZWljaG5ldCBT -dHJpbmctIG9kZXIgU2luZ2xlLQ0KICAgICAgICAgICAgICAgICAgICAgICAgIyBPYmplY3Qtb2hu -ZS1JRCBFaW50cmFlZ2UgaW4ga29tbWVudGFyTGlzdGUoKSBtaXQNCiAgICAgICAgICAgICAgICAg -ICAgICAgICMgU2VudGluZWwtSUQgJ2tfbGVnYWN5Jy4gREVMRVRFIG1pdCBkaWVzZXIgSUQgZ2Vn -ZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICMgZWluZW4gQWx0LUVpbnRyYWcgPSBrb21wbGV0 -dGVyIEVpbnRyYWcgd2lyZCBlbnRmZXJudA0KICAgICAgICAgICAgICAgICAgICAgICAgIyAoTWln -cmF0aW9uICsgTG9lc2NodW5nIGluIGVpbmVtIFNjaHJpdHQpLg0KICAgICAgICAgICAgICAgICAg -ICAgICAgJHRyZWZmZXIgPSAkbnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgJG5ldWVMaXN0 -ZSA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdFtvYmplY3RdDQog -ICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHZvcmggLWlzIFtzdHJpbmddIC1hbmQgJHZvcmgp -IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGtvbW1lbnRhcklkIC1lcSAna19s -ZWdhY3knKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0cmVmZmVyID0gW1BT -Q3VzdG9tT2JqZWN0XUB7IHRleHQgPSAkdm9yaCB9DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHRl -eHQgPSAkbnVsbDsgZmVobGVyID0gJ2tvbW1lbnRhck5pY2h0R2VmdW5kZW4nIH0NCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaXN0ZSA9IEAoKQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIGlmICgkdm9yaCAtaXMgW2FycmF5XSAtb3IgKCR2b3JoIC1pcyBbU3lzdGVt -LkNvbGxlY3Rpb25zLklFbnVtZXJhYmxlXSAtYW5kIC1ub3QgKCR2b3JoIC1pcyBbc3RyaW5nXSkp -KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaXN0ZSA9IEAoJHZvcmgpDQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCR2b3JoIC1hbmQgJHZvcmguUFNP -YmplY3QuUHJvcGVydGllc1sndGV4dCddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICRhbHRJZCA9IGlmICgkdm9yaC5QU09iamVjdC5Qcm9wZXJ0aWVzWydpZCddKSB7IFtzdHJp -bmddJHZvcmguaWQgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICBpZiAoLW5vdCAkYWx0SWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -IGlmICgka29tbWVudGFySWQgLWVxICdrX2xlZ2FjeScpIHsNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAkdHJlZmZlciA9ICR2b3JoDQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIHJldHVybiBAeyB0ZXh0ID0gJG51bGw7IGZlaGxlciA9ICdrb21tZW50YXJOaWNo -dEdlZnVuZGVuJyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAkbGlzdGUgPSBAKCR2b3JoKQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIGlmICgtbm90ICR0cmVmZmVyKSB7DQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIGZvcmVhY2ggKCRlIGluICRsaXN0ZSkgew0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgJGVpZCA9IGlmICgkZSAtYW5kICRlLlBTT2JqZWN0LlByb3BlcnRp -ZXNbJ2lkJ10pIHsgW3N0cmluZ10kZS5pZCB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICBpZiAoJGVpZCAtZXEgJGtvbW1lbnRhcklkKSB7DQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRyZWZmZXIgPSAkZQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAkbmV1ZUxpc3RlLkFkZCgkZSkgfCBPdXQtTnVsbA0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHRyZWZmZXIpIHsg -cmV0dXJuIEB7IHRleHQgPSAkbnVsbDsgZmVobGVyID0gJ2tvbW1lbnRhck5pY2h0R2VmdW5kZW4n -IH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRuZXVlTGlzdGUuQ291bnQgLWVxIDAp -IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIExldHp0ZXIgS29tbWVudGFyIGVudGZl -cm50IC0+IFByb3BlcnR5IGtvbXBsZXR0IHJhdXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAkcGxhbnVuZy5rb21tZW50YXJlLiRkYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgk -cGVyc29uSWQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBMZWVyZXIgVGFnZXMtQnVj -a2V0IGF1ZnJhZXVtZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGFnUHJvcHMgPSBA -KCRwbGFudW5nLmtvbW1lbnRhcmUuJGRhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXMpDQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgaWYgKCR0YWdQcm9wcy5Db3VudCAtZXEgMCkgew0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZy5rb21tZW50YXJlLlBTT2JqZWN0LlBy -b3BlcnRpZXMuUmVtb3ZlKCRkYXR1bSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICRwbGFudW5nLmtvbW1lbnRhcmUuJGRhdHVtLiRwZXJzb25JZCA9IEAoJG5ldWVMaXN0ZS5U -b0FycmF5KCkpDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg -ICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRwbGFudW5nIHwgT3V0LU51bGwN -CiAgICAgICAgICAgICAgICAgICAgICAgICRlbnRmZXJudFRleHQgPSBpZiAoJHRyZWZmZXIuUFNP -YmplY3QuUHJvcGVydGllc1sndGV4dCddKSB7IFtzdHJpbmddJHRyZWZmZXIudGV4dCB9IGVsc2Ug -eyAnJyB9DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgdGV4dCA9ICRlbnRmZXJu -dFRleHQgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmICgk -ZXJnLmZlaGxlcikgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRlcmcuZmVobGVyIC1l -cSAna29tbWVudGFyTmljaHRHZWZ1bmRlbicpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICBTZW5kLUVycm9yICRSZXNwb25zZSAnS29tbWVudGFyIG1pdCBkaWVzZXIgSUQgbmljaHQgZ2Vm -dW5kZW4nIDQwNDsgY29udGludWUNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkZ2Vsb2VzY2h0ZXJUZXh0ID0gJGVy -Zy50ZXh0DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNl -bmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAg -ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAjIFJlZGFjdGlvbiAoU3ByaW50IDEg4oCU -IFNpY2hlcmhlaXRzLU5vdGJyZW1zZSAyMDI2LTA1LTI4KToNCiAgICAgICAgICAgICAgICAjIFBJ -SS1TY2h1dHouIEZydWVoZXIgbGFuZGV0ZSBkZXIgdm9sbHN0YWVuZGlnZSBLb21tZW50YXItVGV4 -dCBpbQ0KICAgICAgICAgICAgICAgICMgTG9nYnVjaCDigJQgd2VubiBkZXIgS29tbWVudGFyIEty -YW5raGVpdHMtL0Rpc3ppcGxpbmFyLUluZm8gZW50aGllbHQsDQogICAgICAgICAgICAgICAgIyBs -ZWJ0ZSBzaWUgbmFjaCAnTG9lc2NoZW4nIHdlaXRlciBpbSBMb2cuIEpldHp0IG51ciBMYWVuZ2Ug -KyBrdXJ6ZXINCiAgICAgICAgICAgICAgICAjIEF1c3p1ZyAoNDAgWmVpY2hlbiksIGdlbnVnIGZ1 -ZXIgTmFjaHZvbGx6aWVoYmFya2VpdCBvaG5lIFZvbGx0ZXh0Lg0KICAgICAgICAgICAgICAgICR0 -ZXh0Vm9yc2NoYXUgPSAnJw0KICAgICAgICAgICAgICAgIGlmICgkZ2Vsb2VzY2h0ZXJUZXh0KSB7 -DQogICAgICAgICAgICAgICAgICAgICRrdXJ6ID0gJGdlbG9lc2NodGVyVGV4dA0KICAgICAgICAg -ICAgICAgICAgICBpZiAoJGt1cnouTGVuZ3RoIC1ndCA0MCkgeyAka3VyeiA9ICRrdXJ6LlN1YnN0 -cmluZygwLCA0MCkgKyAn4oCmJyB9DQogICAgICAgICAgICAgICAgICAgICR0ZXh0Vm9yc2NoYXUg -PSAka3Vyeg0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkdGV4dExhZW5nZSA9 -IGlmICgkZ2Vsb2VzY2h0ZXJUZXh0KSB7ICRnZWxvZXNjaHRlclRleHQuTGVuZ3RoIH0gZWxzZSB7 -IDAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2tvbW1lbnRhci5nZWxvZXNj -aHQnIEB7DQogICAgICAgICAgICAgICAgICAgIGRhdHVtICAgICAgICAgPSAkZGF0dW0NCiAgICAg -ICAgICAgICAgICAgICAgcGVyc29uSWQgICAgICA9ICRwZXJzb25JZA0KICAgICAgICAgICAgICAg -ICAgICBrb21tZW50YXJJZCAgID0gJGtvbW1lbnRhcklkDQogICAgICAgICAgICAgICAgICAgIHRl -eHRWb3JzY2hhdSAgPSAkdGV4dFZvcnNjaGF1DQogICAgICAgICAgICAgICAgICAgIHRleHRMYWVu -Z2UgICAgPSAkdGV4dExhZW5nZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBB -ZGQtQ2hhbmdlTG9nRWludHJhZyAna29tbWVudGFyJyBAew0KICAgICAgICAgICAgICAgICAgICBk -YXR1bSAgICA9ICRkYXR1bQ0KICAgICAgICAgICAgICAgICAgICBwZXJzb25JZCA9ICRwZXJzb25J -ZA0KICAgICAgICAgICAgICAgICAgICBrb21tZW50YXJJZCA9ICRrb21tZW50YXJJZA0KICAgICAg -ICAgICAgICAgICAgICAjIExpdmUtU3luYy1DaGFubmVsIGJyYXVjaHQgZGVuIFRleHQgbmljaHQg -4oCUIEJyb3dzZXIgbGFlZHQNCiAgICAgICAgICAgICAgICAgICAgIyBiZWkgbmFlY2hzdGVtIFJl -bmRlciBlaCBhdXMgcGxhbnVuZy5qc29uICh3byBkZXIgRWludHJhZw0KICAgICAgICAgICAgICAg -ICAgICAjIHdlZyBpc3QpLiBIaWVyIG51ciBNZXRhZGF0ZW4gZnVlciBBa3Rpdml0YWV0cy1Bbnpl -aWdlLg0KICAgICAgICAgICAgICAgICAgICBuZXUgICAgICA9ICcnDQogICAgICAgICAgICAgICAg -ICAgIHplaXRzdGVtcGVsID0gKEdldC1EYXRlKS5Ub1N0cmluZygnbycpDQogICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVz -ID0gJ2dlbG9lc2NodCc7IGtvbW1lbnRhcklkID0gJGtvbW1lbnRhcklkIH0NCiAgICAgICAgICAg -ICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09IFBFUlNP -TkVOID09PT09DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BlcnNvbmVuJyAtYW5k -ICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlz -dEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQWRtaW4tUmVjaHRlJyA0MDM7 -IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0K -ICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdB -bmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkbmV1ID0g -JGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgIyBSZWFkLU1vZGlmeS1X -cml0ZSBhdG9tYXIgaW4gZGVyIERhdGVpLVNwZXJyZS4gV2ljaHRpZyBuaWNodCBudXINCiAgICAg -ICAgICAgICAgICAjIGdlZ2VuIExvc3QgVXBkYXRlcywgc29uZGVybiBnZWdlbiBkaWUgbWF4SWQt -UmFjZTogendlaSBwYXJhbGxlbGUNCiAgICAgICAgICAgICAgICAjIFBlcnNvbmVuLUFubGFnZW4g -d3VlcmRlbiBzb25zdCBkaWVzZWxiZSBtYXhJZCBsZXNlbiB1bmQgSURFTlRJU0NIRQ0KICAgICAg -ICAgICAgICAgICMgSURzIHZlcmdlYmVuIChkb3BwZWx0ZSBQZXJzb25lbi1JRHMgPSBrb3JydXB0 -ZXIgU3RhdGUpLg0KICAgICAgICAgICAgICAgICRwZXJzUmVzID0gJG51bGwNCiAgICAgICAgICAg -ICAgICB0cnkgew0KICAgICAgICAgICAgICAgICRwZXJzUmVzID0gSW52b2tlLVdpdGhGaWxlTG9j -ayAncGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFkLUpzb25P -YmplY3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAkbWF4SWQgPSAwDQogICAgICAg -ICAgICAgICAgZm9yZWFjaCAoJHAgaW4gJHBsYW51bmcucGVyc29uZW4pIHsgaWYgKCRwLmlkIC1n -dCAkbWF4SWQpIHsgJG1heElkID0gJHAuaWQgfSB9DQogICAgICAgICAgICAgICAgJG5ldWVJZCA9 -ICRtYXhJZCArIDENCg0KICAgICAgICAgICAgICAgICMgRWlucmVpaHVuZ3MtTG9naWs6ICJ1bnRl -biIgKERlZmF1bHQpLCAidm9yIiBvZGVyICJuYWNoIiBlaW5lciBSZWZlcmVuenBlcnNvbg0KICAg -ICAgICAgICAgICAgICRlaW5yZWloZW4gPSAndW50ZW4nDQogICAgICAgICAgICAgICAgaWYgKCRu -ZXUuUFNPYmplY3QuUHJvcGVydGllc1snZWlucmVpaGVuJ10gLWFuZCAkbmV1LmVpbnJlaWhlbikg -eyAkZWlucmVpaGVuID0gKFtzdHJpbmddJG5ldS5laW5yZWloZW4pLlRvTG93ZXIoKSB9DQogICAg -ICAgICAgICAgICAgJHJlZklkID0gJG51bGwNCiAgICAgICAgICAgICAgICBpZiAoJG5ldS5QU09i -amVjdC5Qcm9wZXJ0aWVzWydyZWZlcmVueklkJ10gLWFuZCAkbnVsbCAtbmUgJG5ldS5yZWZlcmVu -eklkKSB7ICRyZWZJZCA9IFtpbnRdJG5ldS5yZWZlcmVueklkIH0NCg0KICAgICAgICAgICAgICAg -ICR6aWVsUG9zID0gJG51bGwNCiAgICAgICAgICAgICAgICBpZiAoKCRlaW5yZWloZW4gLWVxICd2 -b3InIC1vciAkZWlucmVpaGVuIC1lcSAnbmFjaCcpIC1hbmQgJG51bGwgLW5lICRyZWZJZCkgew0K -ICAgICAgICAgICAgICAgICAgICAkcmVmUG9zID0gJG51bGwNCiAgICAgICAgICAgICAgICAgICAg -Zm9yZWFjaCAoJHAgaW4gJHBsYW51bmcucGVyc29uZW4pIHsNCiAgICAgICAgICAgICAgICAgICAg -ICAgIGlmIChbaW50XSRwLmlkIC1lcSAkcmVmSWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAkcmVmUG9zID0gaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Bvc2l0aW9uJ10gLWFu -ZCAkcC5wb3NpdGlvbikgeyBbaW50XSRwLnBvc2l0aW9uIH0gZWxzZSB7IDAgfQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIGJyZWFrDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkcmVm -UG9zKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkemllbFBvcyA9IGlmICgkZWlucmVpaGVu -IC1lcSAndm9yJykgeyAkcmVmUG9zIH0gZWxzZSB7ICRyZWZQb3MgKyAxIH0NCiAgICAgICAgICAg -ICAgICAgICAgICAgICMgUG9zaXRpb25lbiBhYiB6aWVsUG9zIHVtIDEgbmFjaCBoaW50ZW4gc2No -aWViZW4NCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRwbGFudW5nLnBl -cnNvbmVuKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBwID0gaWYgKCRwLlBTT2Jq -ZWN0LlByb3BlcnRpZXNbJ3Bvc2l0aW9uJ10gLWFuZCAkcC5wb3NpdGlvbikgeyBbaW50XSRwLnBv -c2l0aW9uIH0gZWxzZSB7IDAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcHAg -LWdlICR6aWVsUG9zKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcC5Q -U09iamVjdC5Qcm9wZXJ0aWVzWydwb3NpdGlvbiddKSB7ICRwLnBvc2l0aW9uID0gJHBwICsgMSB9 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkcCB8IEFkZC1NZW1iZXIg -LU5vdGVQcm9wZXJ0eU5hbWUgJ3Bvc2l0aW9uJyAtTm90ZVByb3BlcnR5VmFsdWUgKCRwcCArIDEp -IC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJHppZWxQb3MpIHsNCiAgICAgICAgICAgICAgICAg -ICAgJG1heFBvcyA9IDANCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHAgaW4gJHBsYW51 -bmcucGVyc29uZW4pIHsgJHBvcyA9IGlmICgkcC5wb3NpdGlvbikgeyBbaW50XSRwLnBvc2l0aW9u -IH0gZWxzZSB7IDAgfTsgaWYgKCRwb3MgLWd0ICRtYXhQb3MpIHsgJG1heFBvcyA9ICRwb3MgfSB9 -DQogICAgICAgICAgICAgICAgICAgICR6aWVsUG9zID0gJG1heFBvcyArIDENCiAgICAgICAgICAg -ICAgICB9DQoNCiAgICAgICAgICAgICAgICAkcGVyc29uID0gW29yZGVyZWRdQHsNCiAgICAgICAg -ICAgICAgICAgICAgaWQgPSAkbmV1ZUlkDQogICAgICAgICAgICAgICAgICAgIGFrdGl2ID0gaWYg -KCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1snYWt0aXYnXSkgeyAkbmV1LmFrdGl2IH0gZWxzZSB7 -ICR0cnVlIH0NCiAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICRuZXUubmFtZQ0KICAgICAgICAg -ICAgICAgICAgICB2b3JuYW1lID0gaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1sndm9ybmFt -ZSddKSB7ICRuZXUudm9ybmFtZSB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgIGRp -ZW5zdGdyYWQgPSBpZiAoJG5ldS5QU09iamVjdC5Qcm9wZXJ0aWVzWydkaWVuc3RncmFkJ10pIHsg -JG5ldS5kaWVuc3RncmFkIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgZnVua3Rp -b24gPSBpZiAoJG5ldS5QU09iamVjdC5Qcm9wZXJ0aWVzWydmdW5rdGlvbiddKSB7ICRuZXUuZnVu -a3Rpb24gfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICBncnVwcGUgPSBpZiAoJG5l -dS5QU09iamVjdC5Qcm9wZXJ0aWVzWydncnVwcGUnXSkgeyAkbmV1LmdydXBwZSB9IGVsc2UgeyAn -JyB9DQogICAgICAgICAgICAgICAgICAgIG9lID0gaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGll -c1snb2UnXSkgeyAkbmV1Lm9lIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgZGll -bnN0bnVtbWVyID0gaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1snZGllbnN0bnVtbWVyJ10p -IHsgJG5ldS5kaWVuc3RudW1tZXIgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICB0 -ZWxlZm9uID0gaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1sndGVsZWZvbiddKSB7ICRuZXUu -dGVsZWZvbiB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gJHpp -ZWxQb3MNCiAgICAgICAgICAgICAgICAgICAgZW1haWwgPSBpZiAoJG5ldS5QU09iamVjdC5Qcm9w -ZXJ0aWVzWydlbWFpbCddKSB7ICRuZXUuZW1haWwgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAg -ICAgICAgICBud0tlbm51bmcgPSBpZiAoJG5ldS5QU09iamVjdC5Qcm9wZXJ0aWVzWydud0tlbm51 -bmcnXSkgeyAkbmV1Lm53S2VubnVuZyB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAg -IGdlYnVydHNkYXR1bSA9IGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2dlYnVydHNkYXR1 -bSddKSB7ICRuZXUuZ2VidXJ0c2RhdHVtIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAg -ICAgZWxEZ2xRdWFsaWZpemllcnQgPSBpZiAoJG5ldS5QU09iamVjdC5Qcm9wZXJ0aWVzWydlbERn -bFF1YWxpZml6aWVydCddKSB7IFtib29sXSRuZXUuZWxEZ2xRdWFsaWZpemllcnQgfSBlbHNlIHsg -JGZhbHNlIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIyBNYXJrZXIgZnVl -ciBQZXJzb25lbiwgZGllIHBlciBFeGNlbC1JbXBvcnQgZnJpc2NoIGFuZ2VsZWd0DQogICAgICAg -ICAgICAgICAgIyB3dXJkZW4uIFBlcnNvbmFsdmVyd2FsdHVuZyBibGVuZGV0IHNpZSBpbSBOZXVp -bXBvcnQtQmxvY2sNCiAgICAgICAgICAgICAgICAjIG9iZW4gZWluLCBiaXMgZGFzIEZsYWcgbWFu -dWVsbCB3ZWdnZXNldHp0IHdpcmQgKEVybGVkaWd0LQ0KICAgICAgICAgICAgICAgICMgQnV0dG9u -KSBvZGVyIGRhcyBsZXR6dGUgUGZsaWNodGZlbGQgKERpZW5zdGdydXBwZSkgZ2VwZmxlZ3QNCiAg -ICAgICAgICAgICAgICAjIGlzdCB1bmQgZGVyIFVzZXIgYXVmICJCbG9jayBsZWVyZW4iIGtsaWNr -dC4NCiAgICAgICAgICAgICAgICBpZiAoJG5ldS5QU09iamVjdC5Qcm9wZXJ0aWVzWydpbXBvcnRO -ZXVBbSddIC1hbmQgJG5ldS5pbXBvcnROZXVBbSkgew0KICAgICAgICAgICAgICAgICAgICAkcGVy -c29uWydpbXBvcnROZXVBbSddID0gW3N0cmluZ10kbmV1LmltcG9ydE5ldUFtDQogICAgICAgICAg -ICAgICAgfQ0KICAgICAgICAgICAgICAgICRwbGFudW5nLnBlcnNvbmVuICs9IFtQU0N1c3RvbU9i -amVjdF0kcGVyc29uDQogICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAncGxhbnVuZy5q -c29uJyAkcGxhbnVuZyB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgcmV0dXJuIEB7IG5ldWVJ -ZCA9ICRuZXVlSWQ7IHppZWxQb3MgPSAkemllbFBvczsgZWlucmVpaGVuID0gJGVpbnJlaWhlbiB9 -DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAg -ICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsg -Y29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWlu -dHJhZyAncGVyc29uLmFuZ2VsZWd0JyBAeyBwZXJzb25JZCA9ICRwZXJzUmVzLm5ldWVJZDsgbmFt -ZSA9ICIkKCRuZXUudm9ybmFtZSkgJCgkbmV1Lm5hbWUpIi5UcmltKCk7IGVpbnJlaWhlbiA9ICRw -ZXJzUmVzLmVpbnJlaWhlbjsgcG9zaXRpb24gPSAkcGVyc1Jlcy56aWVsUG9zIH0NCiAgICAgICAg -ICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdhbmdlbGVndCc7 -IGlkID0gJHBlcnNSZXMubmV1ZUlkOyBwb3NpdGlvbiA9ICRwZXJzUmVzLnppZWxQb3MgfQ0KICAg -ICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBh -dGggLW1hdGNoICdeL2FwaS9wZXJzb25lbi8oXGQrKSQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcp -IHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJv -ciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9DQogICAgICAg -ICAgICAgICAgJHBlcnNvbklkID0gW2ludF0kTWF0Y2hlc1sxXQ0KICAgICAgICAgICAgICAgICRi +ICAgICAgICRyZWloZW5mb2xnZSA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAg +ICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxvY2sgJ3Bs +YW51bmcuanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFkLUpz +b25PYmplY3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2gg +KCRyIGluICRyZWloZW5mb2xnZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVh +Y2ggKCRwIGluICRwbGFudW5nLnBlcnNvbmVuKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIGlmICgkcC5pZCAtZXEgJHIuaWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIGlmICgkcC5QU09iamVjdC5Qcm9wZXJ0aWVzWydwb3NpdGlvbiddKSB7ICRwLnBv +c2l0aW9uID0gJHIucG9zaXRpb24gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgZWxzZSB7ICRwIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAncG9zaXRpb24nIC1O +b3RlUHJvcGVydHlWYWx1ZSAkci5wb3NpdGlvbiAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51bmcuanNv +bicgJHBsYW51bmcgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICB9IHwgT3V0LU51bGwN +CiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJv +ciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAg +ICAgICAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3BlcnNvbmVuLnJlaWhl +bmZvbGdlLmdlYWVuZGVydCcgQHt9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRS +ZXNwb25zZSBAeyBzdGF0dXMgPSAnYWt0dWFsaXNpZXJ0JyB9DQogICAgICAgICAgICAgICAgY29u +dGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PSBISU5XRUlTRSAoSW4t +QXBwLUJhbm5lci9Nb2RhbC1TeXN0ZW0pID09PT09DQogICAgICAgICAgICAjIEdFVCAgL2FwaS9o +aW53ZWlzZSAgICAgICAgICAgIC0+IG9mZmVuZSBIaW53ZWlzZSBmdWVyIGRlbiBlaW5nZWxvZ2d0 +ZW4gVXNlcg0KICAgICAgICAgICAgIyBQT1NUIC9hcGkvaGlud2Vpc2Uve2lkfS9rZW5udG5pcyAt +PiBLZW5udG5pc25haG1lIHNldHplbg0KICAgICAgICAgICAgIyBHRVQgIC9hcGkvaGlud2Vpc2Uv +dWViZXJzaWNodCAtPiBTVS1vbmx5LCB2b2xsc3RhZW5kaWdlIFNpY2h0IGlua2wuIExlc2UtU3Rh +dHVzDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2hpbndlaXNlJyAtYW5kICRNZXRo +b2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgIyBHYXRlZDogbnVyIEVtcGZhZW5nZXIg +KFNVIG9kZXIgR2VzYW10dmVyYW50d29ydGxpY2gpIGR1ZXJmZW4gdWViZXJoYXVwdCBmcmFnZW4N +CiAgICAgICAgICAgICAgICAkciA9IEdldC1SZWNodGUNCiAgICAgICAgICAgICAgICBpZiAoLW5v +dCAoJHIuaXN0U3VwZXJVc2VyIC1vciAkci5pc3RHZXNhbXR2ZXJhbnR3b3J0bGljaCkpIHsNCiAg +ICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBoaW53ZWlzZSA9 +IEAoKSB9DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgIEludm9rZS1IaW53ZWlzUHJ1bmluZw0KICAgICAgICAgICAgICAgICRo +ID0gUmVhZC1Kc29uT2JqZWN0ICdoaW53ZWlzZS5qc29uJw0KICAgICAgICAgICAgICAgIGlmICgk +bnVsbCAtZXEgJGggLW9yIC1ub3QgJGguUFNPYmplY3QuUHJvcGVydGllc1snaGlud2Vpc2UnXSkg +ew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IGhpbndl +aXNlID0gQCgpIH0NCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgJG9mZmVuID0gQCgpDQogICAgICAgICAgICAgICAgZm9yZWFj +aCAoJGVpbnRyYWcgaW4gQCgkaC5oaW53ZWlzZSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJGlz +dEVtcGZhZW5nZXIgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICAgICAgJGlzdEdlbGVzZW4gICAg +PSAkZmFsc2UNCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHAgaW4gJGVpbnRyYWcua2Vu +bnRuaXNuYWhtZW4uUFNPYmplY3QuUHJvcGVydGllcykgew0KICAgICAgICAgICAgICAgICAgICAg +ICAgaWYgKFRlc3QtTWF0Y2hLZW5udW5nIChbc3RyaW5nXSRwLk5hbWUpKSB7DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgJGlzdEVtcGZhZW5nZXIgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJHAuVmFsdWUpIHsgJGlzdEdlbGVzZW4gPSAkdHJ1 +ZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAo +JGlzdEVtcGZhZW5nZXIgLWFuZCAtbm90ICRpc3RHZWxlc2VuKSB7ICRvZmZlbiArPSAkZWludHJh +ZyB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAk +UmVzcG9uc2UgQHsgaGlud2Vpc2UgPSBbb2JqZWN0W11dJG9mZmVuIH0NCiAgICAgICAgICAgICAg +ICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1tYXRjaCAn +Xi9hcGkvaGlud2Vpc2UvKFxkKykva2VubnRuaXMkJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykg +ew0KICAgICAgICAgICAgICAgICRoaW53ZWlzSWQgPSBbaW50XSRNYXRjaGVzWzFdDQogICAgICAg +ICAgICAgICAgJHIgPSBHZXQtUmVjaHRlDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKCRyLmlz +dFN1cGVyVXNlciAtb3IgJHIuaXN0R2VzYW10dmVyYW50d29ydGxpY2gpKSB7DQogICAgICAgICAg +ICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBCZXJlY2h0aWd1bmcnIDQwMzsg +Y29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHNjcmlwdDpoaW53 +ZWlzS2VubnRuaXNHZXNldHp0ID0gJGZhbHNlDQogICAgICAgICAgICAgICAgJHNjcmlwdDpoaW53 +ZWlzS2VubnRuaXNUeXAgPSAkbnVsbA0KICAgICAgICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxv +Y2sgJ2hpbndlaXNlLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgJGggPSBSZWFkLUpzb25P +YmplY3QgJ2hpbndlaXNlLmpzb24nDQogICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEg +JGggLW9yIC1ub3QgJGguUFNPYmplY3QuUHJvcGVydGllc1snaGlud2Vpc2UnXSkgeyByZXR1cm4g +fQ0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZWludHJhZyBpbiBAKCRoLmhpbndlaXNl +KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFtpbnRdJGVpbnRyYWcuaWQgLW5lICRo +aW53ZWlzSWQpIHsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgIyBFcnN0IGRl +biBNYXRjaC1TbG90IGVybWl0dGVsbiwgZGFubiBhdXNzZXJoYWxiIGRlcg0KICAgICAgICAgICAg +ICAgICAgICAgICAgIyBQcm9wZXJ0eS1FbnVtZXJhdGlvbiBpbi1wbGFjZSBzZXR6ZW4gKFBTIDUu +MSBtYWcgZGFzDQogICAgICAgICAgICAgICAgICAgICAgICAjIE1vZGlmaXppZXJlbiB3YWVocmVu +ZCBmb3JlYWNoIG5pY2h0IGltbWVyKS4NCiAgICAgICAgICAgICAgICAgICAgICAgICRtYXRjaE5h +bWUgPSAkbnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHAgaW4gJGVpbnRy +YWcua2VubnRuaXNuYWhtZW4uUFNPYmplY3QuUHJvcGVydGllcykgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIGlmIChUZXN0LU1hdGNoS2VubnVuZyAoW3N0cmluZ10kcC5OYW1lKSkgeyAk +bWF0Y2hOYW1lID0gJHAuTmFtZTsgYnJlYWsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRtYXRjaE5hbWUpIHsNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAkdHMgPSAoR2V0LURhdGUpLlRvVW5pdmVyc2FsVGltZSgpLlRvU3RyaW5n +KCd5eXl5LU1NLWRkVEhIOm1tOnNzWicpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVp +bnRyYWcua2VubnRuaXNuYWhtZW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICRtYXRj +aE5hbWUgLU5vdGVQcm9wZXJ0eVZhbHVlICR0cyAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAkc2NyaXB0OmhpbndlaXNLZW5udG5pc0dlc2V0enQgPSAkdHJ1ZQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIGlmICgkZWludHJhZy5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0eXAn +XSkgeyAkc2NyaXB0OmhpbndlaXNLZW5udG5pc1R5cCA9IFtzdHJpbmddJGVpbnRyYWcudHlwIH0N +CiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr +DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKCRzY3JpcHQ6 +aGlud2Vpc0tlbm50bmlzR2VzZXR6dCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUt +SnNvbk9iamVjdCAnaGlud2Vpc2UuanNvbicgJGggfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgfSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgJGdl +c2V0enQgPSBbYm9vbF0kc2NyaXB0OmhpbndlaXNLZW5udG5pc0dlc2V0enQNCiAgICAgICAgICAg +ICAgICAka2VubnRuaXNUeXAgPSAkc2NyaXB0OmhpbndlaXNLZW5udG5pc1R5cA0KICAgICAgICAg +ICAgICAgICRzY3JpcHQ6aGlud2Vpc0tlbm50bmlzR2VzZXR6dCA9ICRmYWxzZQ0KICAgICAgICAg +ICAgICAgICRzY3JpcHQ6aGlud2Vpc0tlbm50bmlzVHlwID0gJG51bGwNCiAgICAgICAgICAgICAg +ICBpZiAoLW5vdCAkZ2VzZXR6dCkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRS +ZXNwb25zZSAiSGlud2VpcyAkaGlud2Vpc0lkIG5pY2h0IGdlZnVuZGVuIG9kZXIgbmljaHQgZnVl +ciBTaWUgYmVzdGltbXQiIDQwNDsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgJGxvZ0ZlbGRlciA9IEB7IGhpbndlaXNJZCA9ICRoaW53ZWlzSWQgfQ0KICAgICAg +ICAgICAgICAgIGlmICgka2VubnRuaXNUeXApIHsgJGxvZ0ZlbGRlclsndHlwJ10gPSAka2VubnRu +aXNUeXAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2hpbndlaXMua2VubnRu +aXMnICRsb2dGZWxkZXINCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNl +IEB7IHN0YXR1cyA9ICdrZW5udG5pc19nZXNldHp0JyB9DQogICAgICAgICAgICAgICAgY29udGlu +dWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvaGlud2Vp +c2UvdWViZXJzaWNodCcgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAg +IGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051 +ciBTdXBlclVzZXInIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIEludm9rZS1IaW53 +ZWlzUHJ1bmluZw0KICAgICAgICAgICAgICAgICRoID0gUmVhZC1Kc29uT2JqZWN0ICdoaW53ZWlz +ZS5qc29uJw0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGggLW9yIC1ub3QgJGguUFNP +YmplY3QuUHJvcGVydGllc1snaGlud2Vpc2UnXSkgew0KICAgICAgICAgICAgICAgICAgICBTZW5k +LUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IGhpbndlaXNlID0gQCgpIH0NCiAgICAgICAgICAgICAg +ICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1K +c29uT2JqZWN0ICRSZXNwb25zZSBAeyBoaW53ZWlzZSA9IFtvYmplY3RbXV1AKCRoLmhpbndlaXNl +KSB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAg +ICAgIyA9PT09PSBNSVRURUlMVU5HRU4gKFNwcmludCBELTNiLCAyMDI2LTA1LTI5KSA9PT09PQ0K +ICAgICAgICAgICAgIyBWb20gU1UgbWFudWVsbCBnZXBmbGVndGVzIEhpbndlaXMtTW9kYWwtU3lz +dGVtIChzZXBhcmF0IHZvbg0KICAgICAgICAgICAgIyAvYXBpL2hpbndlaXNlLCBkYXMgaXN0IG51 +ciBmdWVyIFN5c3RlbS1FcmVpZ25pc3NlIFNVL0dWKS4NCiAgICAgICAgICAgICMgU2NoZW1hICsg +RmlsdGVydW5nLUxvZ2lrIGdlc3BpZWdlbHQgYXVzIGRldi9zZXJ2ZXIucHk6DQogICAgICAgICAg +ICAjICAgX21pdHRlaWx1bmdlbl9mdWVyX2FrdHVlbGxlbl91c2VyKCkgYnp3LiBfcGVyc29uX2F1 +c19waWQoKS4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvbWl0dGVpbHVuZ2VuJyAt +YW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0 +ICRSZXNwb25zZSBAeyBtaXR0ZWlsdW5nZW4gPSAoR2V0LU1pdHRlaWx1bmdlbkZ1ZXJBa3R1ZWxs +ZW5Vc2VyKSB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvbWl0dGVpbHVuZ2VuL2FsbGUnIC1hbmQgJE1ldGhv +ZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVz +ZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyJyA0MDM7IGNvbnRpbnVl +IH0NCiAgICAgICAgICAgICAgICAkbSA9IFJlYWQtSnNvbk9iamVjdCAnbWl0dGVpbHVuZ2VuLmpz +b24nDQogICAgICAgICAgICAgICAgJGxpc3RlID0gQCgpDQogICAgICAgICAgICAgICAgaWYgKCRu +dWxsIC1uZSAkbSAtYW5kICRtLlBTT2JqZWN0LlByb3BlcnRpZXNbJ21pdHRlaWx1bmdlbiddKSB7 +DQogICAgICAgICAgICAgICAgICAgICRsaXN0ZSA9IEAoJG0ubWl0dGVpbHVuZ2VuKQ0KICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7 +IG1pdHRlaWx1bmdlbiA9IFtvYmplY3RbXV0kbGlzdGUgfQ0KICAgICAgICAgICAgICAgIGNvbnRp +bnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL21pdHRl +aWx1bmdlbicgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAo +LW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3Vw +ZXJVc2VyIGR1ZXJmZW4gTWl0dGVpbHVuZ2VuIGFubGVnZW4nIDQwMzsgY29udGludWUgfQ0KICAg +ICAgICAgICAgICAgICRyYXcgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBp +ZiAoLW5vdCAkcmF3KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdCb2R5IGZlaGx0JyA0MDA7IGNv +bnRpbnVlIH0NCiAgICAgICAgICAgICAgICB0cnkgeyAkYm9keSA9ICRyYXcgfCBDb252ZXJ0RnJv +bS1Kc29uIH0gY2F0Y2ggeyBTZW5kLUVycm9yICRSZXNwb25zZSAnVW5ndWVsdGlnZXMgSlNPTicg +NDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgIyBTZXJ2ZXItc2VpdGlnZSBTYW5pdGlz +aWVydW5nIChTdG9yZWQtWFNTKTogdGl0ZWwgKyB0ZXh0IHdlcmRlbg0KICAgICAgICAgICAgICAg +ICMgaW0gQ2xpZW50IHZpYSBpbm5lckhUTUwgZ2VyZW5kZXJ0Lg0KICAgICAgICAgICAgICAgICR0 +aXRlbCA9IENvbnZlcnRUby1TYWZlUmljaEh0bWwgKChbc3RyaW5nXSgkYm9keS50aXRlbCkpLlRy +aW0oKSkNCiAgICAgICAgICAgICAgICAkdGV4dCAgPSBDb252ZXJ0VG8tU2FmZVJpY2hIdG1sICgo +W3N0cmluZ10oJGJvZHkudGV4dCkpLlRyaW0oKSkNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAk +dGl0ZWwpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1RpdGVsIGlzdCBQZmxpY2h0ZmVsZCcgNDAw +OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJHRleHQpICB7IFNlbmQtRXJy +b3IgJFJlc3BvbnNlICdUZXh0IGlzdCBQZmxpY2h0ZmVsZCcgIDQwMDsgY29udGludWUgfQ0KICAg +ICAgICAgICAgICAgICRyYW5kID0gLWpvaW4gKCg0OC4uNTcpICsgKDk3Li4xMjIpIHwgR2V0LVJh +bmRvbSAtQ291bnQgNiB8IEZvckVhY2gtT2JqZWN0IHsgW2NoYXJdJF8gfSkNCiAgICAgICAgICAg +ICAgICAkbXMgPSBbaW50NjRdKFtEYXRlVGltZU9mZnNldF06OlV0Y05vdy5Ub1VuaXhUaW1lTWls +bGlzZWNvbmRzKCkpDQogICAgICAgICAgICAgICAgJG5ldWVJZCA9ICJtXyR7bXN9XyR7cmFuZH0i +DQogICAgICAgICAgICAgICAgJGVtcGZEZWZhdWx0ID0gW3BzY3VzdG9tb2JqZWN0XUB7DQogICAg +ICAgICAgICAgICAgICAgIGFsbGUgPSAkdHJ1ZTsgcGVyc29uZW4gPSBAKCk7IGdydXBwZW4gPSBA +KCk7IHJvbGxlbiA9IEAoKQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkZW1w +ZiA9IGlmICgkYm9keS5QU09iamVjdC5Qcm9wZXJ0aWVzWydlbXBmYWVuZ2VyJ10pIHsgJGJvZHku +ZW1wZmFlbmdlciB9IGVsc2UgeyAkZW1wZkRlZmF1bHQgfQ0KICAgICAgICAgICAgICAgICRuZXUg +PSBbcHNjdXN0b21vYmplY3RdQHsNCiAgICAgICAgICAgICAgICAgICAgaWQgICAgICAgICAgID0g +JG5ldWVJZA0KICAgICAgICAgICAgICAgICAgICB0aXRlbCAgICAgICAgPSAkdGl0ZWwNCiAgICAg +ICAgICAgICAgICAgICAgdGV4dCAgICAgICAgID0gJHRleHQNCiAgICAgICAgICAgICAgICAgICAg +dGh1bWJuYWlsICAgID0gaWYgKCRib2R5LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RodW1ibmFpbCdd +KSB7ICRib2R5LnRodW1ibmFpbCB9IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAgICAgICAg +IHBkZiAgICAgICAgICA9IGlmICgkYm9keS5QU09iamVjdC5Qcm9wZXJ0aWVzWydwZGYnXSkgICAg +ICAgeyAkYm9keS5wZGYgfSAgICAgICBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgICAg +ICB0cmlnZ2VyICAgICAgPSBpZiAoJGJvZHkuUFNPYmplY3QuUHJvcGVydGllc1sndHJpZ2dlcidd +IC1hbmQgJGJvZHkudHJpZ2dlcikgeyBbc3RyaW5nXSRib2R5LnRyaWdnZXIgfSBlbHNlIHsgJ2Vp +bm1hbCcgfQ0KICAgICAgICAgICAgICAgICAgICBiaXNEYXR1bSAgICAgPSBpZiAoJGJvZHkuUFNP +YmplY3QuUHJvcGVydGllc1snYmlzRGF0dW0nXSkgIHsgJGJvZHkuYmlzRGF0dW0gfSAgZWxzZSB7 +ICRudWxsIH0NCiAgICAgICAgICAgICAgICAgICAgZW1wZmFlbmdlciAgID0gJGVtcGYNCiAgICAg +ICAgICAgICAgICAgICAgZXJzdGVsbHRBbSAgID0gKEdldC1EYXRlKS5Ub1VuaXZlcnNhbFRpbWUo +KS5Ub1N0cmluZygneXl5eS1NTS1kZFRISDptbTpzc1onKQ0KICAgICAgICAgICAgICAgICAgICBl +cnN0ZWxsdFZvbiAgPSAoR2V0LUFrdHVlbGxlckJlbnV0emVyKQ0KICAgICAgICAgICAgICAgICAg +ICBnZWFlbmRlcnRBbSAgPSAkbnVsbA0KICAgICAgICAgICAgICAgICAgICBnZWFlbmRlcnRWb24g +PSAkbnVsbA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBJbnZva2UtV2l0aEZp +bGVMb2NrICdtaXR0ZWlsdW5nZW4uanNvbicgew0KICAgICAgICAgICAgICAgICAgICAkbSA9IFJl +YWQtSnNvbk9iamVjdCAnbWl0dGVpbHVuZ2VuLmpzb24nDQogICAgICAgICAgICAgICAgICAgIGlm +ICgkbnVsbCAtZXEgJG0pIHsgJG0gPSBbcHNjdXN0b21vYmplY3RdQHsgbWl0dGVpbHVuZ2VuID0g +QCgpOyBnZWxlc2VuID0gW3BzY3VzdG9tb2JqZWN0XUB7fSB9IH0NCiAgICAgICAgICAgICAgICAg +ICAgaWYgKC1ub3QgJG0uUFNPYmplY3QuUHJvcGVydGllc1snbWl0dGVpbHVuZ2VuJ10pIHsNCiAg +ICAgICAgICAgICAgICAgICAgICAgICRtIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSBt +aXR0ZWlsdW5nZW4gLU5vdGVQcm9wZXJ0eVZhbHVlIEAoKSAtRm9yY2UNCiAgICAgICAgICAgICAg +ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkbS5QU09iamVjdC5Qcm9wZXJ0 +aWVzWydnZWxlc2VuJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRtIHwgQWRkLU1lbWJl +ciAtTm90ZVByb3BlcnR5TmFtZSBnZWxlc2VuIC1Ob3RlUHJvcGVydHlWYWx1ZSAoW3BzY3VzdG9t +b2JqZWN0XUB7fSkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg +ICAgICAgIyBuZXVlc3RlIG9iZW4NCiAgICAgICAgICAgICAgICAgICAgJG0ubWl0dGVpbHVuZ2Vu +ID0gQCgkbmV1KSArIEAoJG0ubWl0dGVpbHVuZ2VuKQ0KICAgICAgICAgICAgICAgICAgICBXcml0 +ZS1Kc29uT2JqZWN0ICdtaXR0ZWlsdW5nZW4uanNvbicgJG0gfCBPdXQtTnVsbA0KICAgICAgICAg +ICAgICAgIH0gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ21p +dHRlaWx1bmcuYW5nZWxlZ3QnIEB7IGlkID0gJG5ldWVJZDsgdGl0ZWwgPSAkdGl0ZWwgfQ0KICAg +ICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2FuZ2Vs +ZWd0JzsgbWl0dGVpbHVuZyA9ICRuZXUgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAg +ICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLW1hdGNoICdeL2FwaS9taXR0ZWlsdW5n +ZW4vKFtcdy1dKykkJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAg +aWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnTnVy +IFN1cGVyVXNlcicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJG1pZCA9ICRNYXRj +aGVzWzFdDQogICAgICAgICAgICAgICAgJHJhdyA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAg +ICAgICAgICAgIGlmICgtbm90ICRyYXcpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0JvZHkgZmVo +bHQnIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIHRyeSB7ICRib2R5ID0gJHJhdyB8 +IENvbnZlcnRGcm9tLUpzb24gfSBjYXRjaCB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0 +aWdlcyBKU09OJyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkc2NyaXB0Om1pdHRl +aWx1bmdHZWZ1bmRlbiA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICRzY3JpcHQ6bWl0dGVpbHVu +Z1ppZWwgPSAkbnVsbA0KICAgICAgICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxvY2sgJ21pdHRl +aWx1bmdlbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICRtID0gUmVhZC1Kc29uT2JqZWN0 +ICdtaXR0ZWlsdW5nZW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAk +bSAtb3IgLW5vdCAkbS5QU09iamVjdC5Qcm9wZXJ0aWVzWydtaXR0ZWlsdW5nZW4nXSkgeyByZXR1 +cm4gfQ0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZWludHJhZyBpbiBAKCRtLm1pdHRl +aWx1bmdlbikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChbc3RyaW5nXSRlaW50cmFn +LmlkIC1uZSAkbWlkKSB7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVh +Y2ggKCRmZWxkIGluICd0aXRlbCcsJ3RleHQnLCd0aHVtYm5haWwnLCdwZGYnLCd0cmlnZ2VyJywn +YmlzRGF0dW0nLCdlbXBmYWVuZ2VyJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm +ICgkYm9keS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRmZWxkXSkgew0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAkd2VydCA9ICRib2R5LiRmZWxkDQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIGlmICgoJGZlbGQgLWVxICd0aXRlbCcgLW9yICRmZWxkIC1lcSAndGV4dCcpIC1h +bmQgKCR3ZXJ0IC1pcyBbc3RyaW5nXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICR3ZXJ0ID0gQ29udmVydFRvLVNhZmVSaWNoSHRtbCAkd2VydA0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRl +aW50cmFnIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkZmVsZCAtTm90ZVByb3BlcnR5 +VmFsdWUgJHdlcnQgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGVpbnRyYWcgfCBB +ZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lIGdlYWVuZGVydEFtICAtTm90ZVByb3BlcnR5VmFs +dWUgKChHZXQtRGF0ZSkuVG9Vbml2ZXJzYWxUaW1lKCkuVG9TdHJpbmcoJ3l5eXktTU0tZGRUSEg6 +bW06c3NaJykpIC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGVpbnRyYWcgfCBBZGQt +TWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lIGdlYWVuZGVydFZvbiAtTm90ZVByb3BlcnR5VmFsdWUg +KEdldC1Ba3R1ZWxsZXJCZW51dHplcikgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICAk +c2NyaXB0Om1pdHRlaWx1bmdHZWZ1bmRlbiA9ICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAg +ICAkc2NyaXB0Om1pdHRlaWx1bmdaaWVsID0gJGVpbnRyYWcNCiAgICAgICAgICAgICAgICAgICAg +ICAgIGJyZWFrDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYg +KCRzY3JpcHQ6bWl0dGVpbHVuZ0dlZnVuZGVuKSB7IFdyaXRlLUpzb25PYmplY3QgJ21pdHRlaWx1 +bmdlbi5qc29uJyAkbSB8IE91dC1OdWxsIH0NCiAgICAgICAgICAgICAgICB9IHwgT3V0LU51bGwN +CiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkc2NyaXB0Om1pdHRlaWx1bmdHZWZ1bmRlbikgew0K +ICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAiTWl0dGVpbHVuZyAkbWlk +IG5pY2h0IGdlZnVuZGVuIiA0MDQ7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgICR6aWVsID0gJHNjcmlwdDptaXR0ZWlsdW5nWmllbA0KICAgICAgICAgICAgICAg +ICRzY3JpcHQ6bWl0dGVpbHVuZ0dlZnVuZGVuID0gJGZhbHNlOyAkc2NyaXB0Om1pdHRlaWx1bmda +aWVsID0gJG51bGwNCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdtaXR0ZWlsdW5n +LmdlYWVuZGVydCcgQHsgaWQgPSAkbWlkIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmpl +Y3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZWFlbmRlcnQnOyBtaXR0ZWlsdW5nID0gJHppZWwg +fQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBp +ZiAoJFBhdGggLW1hdGNoICdeL2FwaS9taXR0ZWlsdW5nZW4vKFtcdy1dKykkJyAtYW5kICRNZXRo +b2QgLWVxICdERUxFVEUnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3Vw +ZXJVc2VyKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnTnVyIFN1cGVyVXNlcicgNDAzOyBjb250 +aW51ZSB9DQogICAgICAgICAgICAgICAgJG1pZCA9ICRNYXRjaGVzWzFdDQogICAgICAgICAgICAg +ICAgJHNjcmlwdDptaXR0ZWlsdW5nR2Vsb2VzY2h0ID0gJGZhbHNlDQogICAgICAgICAgICAgICAg +SW52b2tlLVdpdGhGaWxlTG9jayAnbWl0dGVpbHVuZ2VuLmpzb24nIHsNCiAgICAgICAgICAgICAg +ICAgICAgJG0gPSBSZWFkLUpzb25PYmplY3QgJ21pdHRlaWx1bmdlbi5qc29uJw0KICAgICAgICAg +ICAgICAgICAgICBpZiAoJG51bGwgLWVxICRtIC1vciAtbm90ICRtLlBTT2JqZWN0LlByb3BlcnRp +ZXNbJ21pdHRlaWx1bmdlbiddKSB7IHJldHVybiB9DQogICAgICAgICAgICAgICAgICAgICR2b3Jo +ZXIgPSBAKCRtLm1pdHRlaWx1bmdlbikNCiAgICAgICAgICAgICAgICAgICAgJG5hY2hoZXIgPSBA +KCR2b3JoZXIgfCBXaGVyZS1PYmplY3QgeyBbc3RyaW5nXSRfLmlkIC1uZSAkbWlkIH0pDQogICAg +ICAgICAgICAgICAgICAgIGlmICgkdm9yaGVyLkNvdW50IC1lcSAkbmFjaGhlci5Db3VudCkgeyBy +ZXR1cm4gfQ0KICAgICAgICAgICAgICAgICAgICAkbS5taXR0ZWlsdW5nZW4gPSAkbmFjaGhlcg0K +ICAgICAgICAgICAgICAgICAgICAjIGdlbGVzZW4tRWludHJhZWdlIGZ1ZXIgZGllc2UgTWl0dGVp +bHVuZyBhdWZyYWV1bWVuDQogICAgICAgICAgICAgICAgICAgIGlmICgkbS5QU09iamVjdC5Qcm9w +ZXJ0aWVzWydnZWxlc2VuJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRw +IGluIEAoJG0uZ2VsZXNlbi5QU09iamVjdC5Qcm9wZXJ0aWVzKSkgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIGlmICgkcC5WYWx1ZS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRtaWRdKSB7DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwLlZhbHVlLlBTT2JqZWN0LlByb3BlcnRp +ZXMuUmVtb3ZlKCRtaWQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg +ICAgIFdyaXRlLUpzb25PYmplY3QgJ21pdHRlaWx1bmdlbi5qc29uJyAkbSB8IE91dC1OdWxsDQog +ICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6bWl0dGVpbHVuZ0dlbG9lc2NodCA9ICR0cnVlDQog +ICAgICAgICAgICAgICAgfSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJHNj +cmlwdDptaXR0ZWlsdW5nR2Vsb2VzY2h0KSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJy +b3IgJFJlc3BvbnNlICJNaXR0ZWlsdW5nICRtaWQgbmljaHQgZ2VmdW5kZW4iIDQwNDsgY29udGlu +dWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHNjcmlwdDptaXR0ZWlsdW5n +R2Vsb2VzY2h0ID0gJGZhbHNlDQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnbWl0 +dGVpbHVuZy5nZWxvZXNjaHQnIEB7IGlkID0gJG1pZCB9DQogICAgICAgICAgICAgICAgU2VuZC1K +c29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2Vsb2VzY2h0JyB9DQogICAgICAgICAg +ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICMgUE9TVCAvYXBpL21p +dHRlaWx1bmdlbi91cGxvYWQg4oCUIFNVLW9ubHksIEJpbGQgKDIgTUIpIG9kZXIgUERGICgxMCBN +QikNCiAgICAgICAgICAgICMgQm9keTogeyJhcnQiOiAiYmlsZCJ8InBkZiIsICJkYXRlaW5hbWUi +OiAieC5wbmciLCAiZGF0YVVybCI6ICJkYXRhOi4uLiJ9DQogICAgICAgICAgICBpZiAoJFBhdGgg +LWVxICcvYXBpL21pdHRlaWx1bmdlbi91cGxvYWQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7 +DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVy +cm9yICRSZXNwb25zZSAnTnVyIFN1cGVyVXNlciBkdWVyZmVuIE1pdHRlaWx1bmdzLUFuaGFlbmdl +IGhvY2hsYWRlbicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgIyAxNCBNQiBNYXhT +aXplLCB3ZWlsIDEwTUIgUERGIGJhc2U2NC1jb2RpZXJ0IH4xMy40IE1CIFBheWxvYWQgd2lyZA0K +ICAgICAgICAgICAgICAgICRyYXcgPSBSZWFkLUJvZHkgJFJlcXVlc3QgLU1heFNpemUgMTRNQg0K +ICAgICAgICAgICAgICAgIGlmICgtbm90ICRyYXcpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0Fu +ZnJhZ2UgenUgZ3Jvc3MgKG1heCAxNCBNQiknIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAg +ICAgIHRyeSB7ICRib2R5ID0gJHJhdyB8IENvbnZlcnRGcm9tLUpzb24gfSBjYXRjaCB7IFNlbmQt +RXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0aWdlcyBKU09OJyA0MDA7IGNvbnRpbnVlIH0NCiAgICAg +ICAgICAgICAgICAkYXJ0ID0gKFtzdHJpbmddJGJvZHkuYXJ0KS5Ub0xvd2VyKCkNCiAgICAgICAg +ICAgICAgICAkZGF0YVVybCA9IFtzdHJpbmddJGJvZHkuZGF0YVVybA0KICAgICAgICAgICAgICAg +IGlmICgkYXJ0IC1uZSAnYmlsZCcgLWFuZCAkYXJ0IC1uZSAncGRmJykgew0KICAgICAgICAgICAg +ICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnYXJ0IG11c3MgImJpbGQiIG9kZXIgInBkZiIg +c2VpbicgNDAwOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAk +ZXh0ID0gJG51bGw7ICRtYXhCeXRlcyA9IDANCiAgICAgICAgICAgICAgICBpZiAoJGFydCAtZXEg +J2JpbGQnKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICgkZGF0YVVybCAtbWF0Y2ggJ15kYXRh +OmltYWdlLyhqcGVnfGpwZ3xwbmd8d2VicCk7YmFzZTY0LCcpIHsNCiAgICAgICAgICAgICAgICAg +ICAgICAgICRleHQgPSAoJE1hdGNoZXNbMV0gLXJlcGxhY2UgJ2pwZWcnLCdqcGcnKQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgJG1heEJ5dGVzID0gMiAqIDEwMjQgKiAxMDI0DQogICAgICAgICAg +ICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRS +ZXNwb25zZSAnQmlsZDogZXJ3YXJ0ZXQgZGF0YTppbWFnZS8oanBlZ3xwbmd8d2VicCk7YmFzZTY0 +LC4uLicgNDAwOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRkYXRhVXJsIC1saWtlICdkYXRh +OmFwcGxpY2F0aW9uL3BkZjtiYXNlNjQsKicpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRl +eHQgPSAncGRmJw0KICAgICAgICAgICAgICAgICAgICAgICAgJG1heEJ5dGVzID0gMTAgKiAxMDI0 +ICogMTAyNA0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAg +ICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1BERjogZXJ3YXJ0ZXQgZGF0YTphcHBsaWNhdGlv +bi9wZGY7YmFzZTY0LC4uLicgNDAwOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRiYXNlNjQgPSAkZGF0YVVybCAtcmVw +bGFjZSAnXmRhdGE6W147XSs7YmFzZTY0LCcsICcnDQogICAgICAgICAgICAgICAgdHJ5IHsgJGJ5 +dGVzID0gW1N5c3RlbS5Db252ZXJ0XTo6RnJvbUJhc2U2NFN0cmluZygkYmFzZTY0KSB9DQogICAg +ICAgICAgICAgICAgY2F0Y2ggeyBTZW5kLUVycm9yICRSZXNwb25zZSAnVW5ndWVsdGlnZSBiYXNl +NjQtRGF0ZW4nIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIGlmICgkYnl0ZXMuTGVu +Z3RoIC1ndCAkbWF4Qnl0ZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgJGxpbWl0S2IgPSBbaW50 +XSgkbWF4Qnl0ZXMgLyAxMDI0KQ0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNw +b25zZSAiJGFydCB6dSBncm9zcyAobWF4ICRsaW1pdEtiIEtCKSIgNDEzOyBjb250aW51ZQ0KICAg +ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkdXBsb2FkRGlyID0gSm9pbi1QYXRoICRE +YXRhRGlyICd1cGxvYWRzJyB8IEpvaW4tUGF0aCAtQ2hpbGRQYXRoICdtaXR0ZWlsdW5nZW4nDQog +ICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHVwbG9hZERp +cikpIHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsgTmV3LUl0ZW0gLUl0ZW1UeXBlIERpcmVj +dG9yeSAtUGF0aCAkdXBsb2FkRGlyIC1Gb3JjZSB8IE91dC1OdWxsIH0gY2F0Y2gge30NCiAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHJhbmQgPSAtam9pbiAoKDQ4Li41NykgKyAo +OTcuLjEyMikgfCBHZXQtUmFuZG9tIC1Db3VudCA2IHwgRm9yRWFjaC1PYmplY3QgeyBbY2hhcl0k +XyB9KQ0KICAgICAgICAgICAgICAgICRtcyA9IFtpbnQ2NF0oW0RhdGVUaW1lT2Zmc2V0XTo6VXRj +Tm93LlRvVW5peFRpbWVNaWxsaXNlY29uZHMoKSkNCiAgICAgICAgICAgICAgICAkZmlsZW5hbWUg +PSAibV8ke21zfV8ke3JhbmR9LiRleHQiDQogICAgICAgICAgICAgICAgJHppZWxQZmFkID0gSm9p +bi1QYXRoICR1cGxvYWREaXIgJGZpbGVuYW1lDQogICAgICAgICAgICAgICAgW1N5c3RlbS5JTy5G +aWxlXTo6V3JpdGVBbGxCeXRlcygkemllbFBmYWQsICRieXRlcykNCiAgICAgICAgICAgICAgICAj +IEtlaW5lIEFDTC1SZXN0cmljdGlvbjogVXBsb2FkcyBzaW5kIGZ1ZXIgZGllIEVtcGZhZW5nZXIt +DQogICAgICAgICAgICAgICAgIyBHcnVwcGUgKG1hbnVlbGwgdm9tIFNVIHZlcnRlaWx0KSBnZWRh +Y2h0LCBuaWNodCBnZWhlaW0uDQogICAgICAgICAgICAgICAgJHJlbFBmYWQgPSAiL2RhdGEvdXBs +b2Fkcy9taXR0ZWlsdW5nZW4vJGZpbGVuYW1lIg0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0Vp +bnRyYWcgJ21pdHRlaWx1bmcudXBsb2FkJyBAeyBhcnQgPSAkYXJ0OyBkYXRlaSA9ICRmaWxlbmFt +ZTsgYnl0ZXMgPSAkYnl0ZXMuTGVuZ3RoIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmpl +Y3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdvayc7IHBmYWQgPSAkcmVsUGZhZDsgYnl0ZXMgPSAk +Ynl0ZXMuTGVuZ3RoIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0K +DQogICAgICAgICAgICBpZiAoJFBhdGggLW1hdGNoICdeL2FwaS9taXR0ZWlsdW5nZW4vKFtcdy1d +Kykva2VubnRuaXMkJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAg +ICRtaWQgPSAkTWF0Y2hlc1sxXQ0KICAgICAgICAgICAgICAgICRyID0gR2V0LVJlY2h0ZQ0KICAg +ICAgICAgICAgICAgICRwaWQgPSAkci5tZWluZVBlcnNvbklkDQogICAgICAgICAgICAgICAgaWYg +KCRudWxsIC1lcSAkcGlkKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBQZXJzb24genVn +ZW9yZG5ldCcgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJHNjcmlwdDptaXR0ZWls +dW5nS2VubnRuaXNPSyA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxv +Y2sgJ21pdHRlaWx1bmdlbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICRtID0gUmVhZC1K +c29uT2JqZWN0ICdtaXR0ZWlsdW5nZW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRu +dWxsIC1lcSAkbSAtb3IgLW5vdCAkbS5QU09iamVjdC5Qcm9wZXJ0aWVzWydtaXR0ZWlsdW5nZW4n +XSkgeyByZXR1cm4gfQ0KICAgICAgICAgICAgICAgICAgICAkZXhpc3RpZXJ0ID0gQCgkbS5taXR0 +ZWlsdW5nZW4gfCBXaGVyZS1PYmplY3QgeyBbc3RyaW5nXSRfLmlkIC1lcSAkbWlkIH0pLkNvdW50 +IC1ndCAwDQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRleGlzdGllcnQpIHsgcmV0dXJu +IH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJG0uUFNPYmplY3QuUHJvcGVydGllc1sn +Z2VsZXNlbiddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkbSB8IEFkZC1NZW1iZXIgLU5v +dGVQcm9wZXJ0eU5hbWUgZ2VsZXNlbiAtTm90ZVByb3BlcnR5VmFsdWUgKFtwc2N1c3RvbW9iamVj +dF1Ae30pIC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg +ICRwaWRTdHIgPSBbc3RyaW5nXSRwaWQNCiAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJG0u +Z2VsZXNlbi5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwaWRTdHJdKSB7DQogICAgICAgICAgICAgICAg +ICAgICAgICAkbS5nZWxlc2VuIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkcGlkU3Ry +IC1Ob3RlUHJvcGVydHlWYWx1ZSAoW3BzY3VzdG9tb2JqZWN0XUB7fSkgLUZvcmNlDQogICAgICAg +ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJGhldXRlID0gKEdldC1EYXRlKS5U +b1N0cmluZygneXl5eS1NTS1kZCcpDQogICAgICAgICAgICAgICAgICAgICRtLmdlbGVzZW4uJHBp +ZFN0ciB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJG1pZCAtTm90ZVByb3BlcnR5VmFs +dWUgJGhldXRlIC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdt +aXR0ZWlsdW5nZW4uanNvbicgJG0gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAkc2Ny +aXB0Om1pdHRlaWx1bmdLZW5udG5pc09LID0gJHRydWUNCiAgICAgICAgICAgICAgICB9IHwgT3V0 +LU51bGwNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkc2NyaXB0Om1pdHRlaWx1bmdLZW5udG5p +c09LKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICJNaXR0ZWls +dW5nICRtaWQgbmljaHQgZ2VmdW5kZW4iIDQwNDsgY29udGludWUNCiAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgJHNjcmlwdDptaXR0ZWlsdW5nS2VubnRuaXNPSyA9ICRmYWxzZQ0K +ICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2tl +bm50bmlzX2dlc2V0enQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAg +fQ0KDQogICAgICAgICAgICAjID09PT09IEJBQ0tVUFMgPT09PT0NCiAgICAgICAgICAgICMgQmFj +a3VwLU5hbWluZyAoZ2V0YXJudCwgaW4gZGF0YS9jYWNoZS8pOg0KICAgICAgICAgICAgIyAtIHNu +YXBfPHRzPi5iYWsgID0gQnVuZGxlIChwbGFudW5nK2FkbWluKSAtLSBtYW51ZWxsZSBCYWNrdXBz +ICsgU2ljaGVydW5nZW4NCiAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgIHZvciBXaWVk +ZXJoZXJzdGVsbHVuZw0KICAgICAgICAgICAgIyAtIGxlZ188dHM+LmJhayAgID0gTnVyIFBsYW51 +bmcgLS0gTGVnYWN5LUJhY2t1cHMgKyBBdXRvLVNpY2hlcnVuZ2VuDQogICAgICAgICAgICAjICAg +ICAgICAgICAgICAgICAgICB2b3IgUmVzZXQvRHVtbXlkYXRlbg0KICAgICAgICAgICAgIyAtIGNm +Z188dHM+XzxoaW53ZWlzPi5iYWsgPSBhZG1pbi5qc29uLUF1dG8tQmFja3VwcyAoQmFja3VwLUFk +bWluSnNvbikNCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy9iYWNrdXAn +IC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRl +c3QtRGFyZkJlcmVpY2ggJ2JhY2t1cHMnKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUg +QmVyZWNodGlndW5nIChCYWNrdXBzKScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAg +JHBsYW51bmdQYXRoID0gSm9pbi1QYXRoICREYXRhRGlyICdwbGFudW5nLmpzb24nDQogICAgICAg +ICAgICAgICAgaWYgKC1ub3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHBsYW51bmdQYXRoKSkg +eyBTZW5kLUVycm9yICRSZXNwb25zZSAnUGxhbnVuZyBuaWNodCBnZWZ1bmRlbicgNDA0OyBjb250 +aW51ZSB9DQogICAgICAgICAgICAgICAgJHBsYW51bmdPYmogPSBSZWFkLUpzb25PYmplY3QgJ3Bs +YW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAkYWRtaW5PYmogICA9IFJlYWQtSnNvbk9iamVj +dCAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbk9iaikg +eyAkYWRtaW5PYmogPSBOZXctT2JqZWN0IFBTT2JqZWN0IH0NCiAgICAgICAgICAgICAgICAkdHMg +PSBHZXQtRGF0ZSAtRm9ybWF0ICd5eXl5TU1kZF9ISG1tc3MnDQogICAgICAgICAgICAgICAgJGJu +YW1lID0gInNuYXBfJHRzLmJhayINCiAgICAgICAgICAgICAgICAkYnVuZGxlID0gW29yZGVyZWRd +QHsNCiAgICAgICAgICAgICAgICAgICAgZm9ybWF0ICA9ICd2aTMtYmFja3VwLXYxJw0KICAgICAg +ICAgICAgICAgICAgICB0cyAgICAgID0gJHRzDQogICAgICAgICAgICAgICAgICAgIHBsYW51bmcg +PSAkcGxhbnVuZ09iag0KICAgICAgICAgICAgICAgICAgICBhZG1pbiAgID0gJGFkbWluT2JqDQog +ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRqc29uID0gJGJ1bmRsZSB8IENvbnZl +cnRUby1Kc29uIC1EZXB0aCAzMA0KICAgICAgICAgICAgICAgICRjYWNoZURpciA9IEpvaW4tUGF0 +aCAkRGF0YURpciAnY2FjaGUnDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtUGF0aCAt +TGl0ZXJhbFBhdGggJGNhY2hlRGlyKSkgeyBOZXctSXRlbSAtSXRlbVR5cGUgRGlyZWN0b3J5IC1Q +YXRoICRjYWNoZURpciAtRm9yY2UgfCBPdXQtTnVsbCB9DQogICAgICAgICAgICAgICAgV3JpdGUt +QmFja3VwQnl0ZXMgKEpvaW4tUGF0aCAkY2FjaGVEaXIgJGJuYW1lKSAkanNvbg0KICAgICAgICAg +ICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2JhY2t1cC5lcnN0ZWxsdCcgQHsgZGF0ZWluYW1lID0g +JGJuYW1lOyBpbmhhbHQgPSAncGxhbnVuZythZG1pbicgfQ0KICAgICAgICAgICAgICAgIFNlbmQt +SnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2Vyc3RlbGx0JzsgZGF0ZWluYW1lID0g +JGJuYW1lIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL2JhY2t1cHMnIC1hbmQgJE1ldGhvZCAt +ZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJmQmVyZWljaCAn +YmFja3VwcycpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBCZXJlY2h0aWd1bmcgKEJh +Y2t1cHMpJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkZWludHJhZWdlID0gQCgp +DQogICAgICAgICAgICAgICAgJGNhY2hlRGlyID0gSm9pbi1QYXRoICREYXRhRGlyICdjYWNoZScN +CiAgICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkY2FjaGVEaXIpIHsN +CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJG11c3RlciBpbiAnc25hcF8qLmJhaycsJ2xl +Z18qLmJhaycpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIEdldC1DaGlsZEl0ZW0gLUxpdGVy +YWxQYXRoICRjYWNoZURpciAtRmlsdGVyICRtdXN0ZXIgLUZpbGUgLUVycm9yQWN0aW9uIFNpbGVu +dGx5Q29udGludWUgfCBGb3JFYWNoLU9iamVjdCB7DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgJG5hbWUgPSAkXy5OYW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHR5cCA9IGlm +ICgkbmFtZSAtbWF0Y2ggJ192b3JfZHVtbXlfJykgeyAndm9yIER1bW15ZGF0ZW4nIH0NCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZiAoJG5hbWUgLW1hdGNoICdfdm9yX3Jl +c2V0XycpIHsgJ3ZvciBSZXNldCcgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ZWxzZWlmICgkbmFtZSAtbWF0Y2ggJ192b3Jfd2llZGVyaGVyc3RlbGx1bmdfJykgeyAndm9yIFdp +ZWRlcmhlcnN0ZWxsdW5nJyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNl +IHsgJ21hbnVlbGwnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYnVuZGxlID0gJG5h +bWUuU3RhcnRzV2l0aCgnc25hcF8nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlaW50 +cmFlZ2UgKz0gW29yZGVyZWRdQHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0 +ZWluYW1lICAgPSAkbmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm9lc3Nl +ICAgICA9ICRfLkxlbmd0aA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnN0ZWxs +dEFtICA9ICRfLkxhc3RXcml0ZVRpbWUuVG9TdHJpbmcoJ3MnKQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICB0eXAgICAgICAgICA9ICR0eXANCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgaW5oYWx0ICAgICAgPSBpZiAoJGJ1bmRsZSkgeyAnS29tcGxldHQgKFBsYW51bmcg +KyBBZG1pbiknIH0gZWxzZSB7ICdOdXIgUGxhbnVuZycgfQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICBpc3RCdW5kbGUgICA9ICRidW5kbGUNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGVpbnRyYWVnZSA9IEAoJGVpbnRy +YWVnZSB8IFNvcnQtT2JqZWN0IC1Qcm9wZXJ0eSBlcnN0ZWxsdEFtIC1EZXNjZW5kaW5nKQ0KICAg +ICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgJGVpbnRyYWVnZQ0KICAgICAg +ICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGgg +LW1hdGNoICdeL2FwaS9wbGFudW5nL2JhY2t1cC9kb3dubG9hZC8oLispJCcgLWFuZCAkTWV0aG9k +IC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURhcmZCZXJlaWNo +ICdiYWNrdXBzJykpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRpZ3VuZyAo +QmFja3VwcyknIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRuYW1lID0gJE1hdGNo +ZXNbMV0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoJG5hbWUgLW1hdGNoICdeKHNuYXBffGxl +Z18pWzAtOV9hLXpBLVpdK1wuYmFrJCcpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0 +aWdlciBEYXRlaW5hbWUnIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRmcCA9IEpv +aW4tUGF0aCAkRGF0YURpciAoJ2NhY2hlLycgKyAkbmFtZSkNCiAgICAgICAgICAgICAgICBpZiAo +LW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkZnApKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNl +ICdCYWNrdXAgbmljaHQgZ2VmdW5kZW4nIDQwNDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg +ICRrbGFydGV4dCA9IFJlYWQtQmFja3VwVGV4dCAkZnANCiAgICAgICAgICAgICAgICBpZiAoJG51 +bGwgLWVxICRrbGFydGV4dCkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQmFja3VwLURhdGVpIGtv +bm50ZSBuaWNodCBnZWxlc2VuIHdlcmRlbicgNTAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAg +ICAgJGJ5dGVzID0gW1N5c3RlbS5UZXh0LkVuY29kaW5nXTo6VVRGOC5HZXRCeXRlcygka2xhcnRl +eHQpDQogICAgICAgICAgICAgICAgJFJlc3BvbnNlLlN0YXR1c0NvZGUgPSAyMDANCiAgICAgICAg +ICAgICAgICAkUmVzcG9uc2UuQ29udGVudFR5cGUgPSAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNl +dD11dGYtOCcNCiAgICAgICAgICAgICAgICBBZGQtU2VjdXJpdHlIZWFkZXJzICRSZXNwb25zZQ0K +ICAgICAgICAgICAgICAgICRSZXNwb25zZS5IZWFkZXJzLkFkZCgnQ29udGVudC1EaXNwb3NpdGlv +bicsICJhdHRhY2htZW50OyBmaWxlbmFtZT1gIiRuYW1lYCIiKQ0KICAgICAgICAgICAgICAgICRS +ZXNwb25zZS5Db250ZW50TGVuZ3RoNjQgPSAkYnl0ZXMuTGVuZ3RoDQogICAgICAgICAgICAgICAg +JFJlc3BvbnNlLk91dHB1dFN0cmVhbS5Xcml0ZSgkYnl0ZXMsIDAsICRieXRlcy5MZW5ndGgpDQog +ICAgICAgICAgICAgICAgJFJlc3BvbnNlLk91dHB1dFN0cmVhbS5DbG9zZSgpDQogICAgICAgICAg +ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEg +Jy9hcGkvcGxhbnVuZy9iYWNrdXAvd2llZGVyaGVyc3RlbGxlbicgLWFuZCAkTWV0aG9kIC1lcSAn +UE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJmQmVyZWljaCAnYmFj +a3VwcycpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBCZXJlY2h0aWd1bmcgKEJhY2t1 +cHMpJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAk +UmVxdWVzdA0KICAgICAgICAgICAgICAgICRkYXRlbiA9ICRib2R5IHwgQ29udmVydEZyb20tSnNv +bg0KICAgICAgICAgICAgICAgICRuYW1lID0gIiQoJGRhdGVuLmRhdGVpbmFtZSkiDQogICAgICAg +ICAgICAgICAgaWYgKC1ub3QgKCRuYW1lIC1tYXRjaCAnXihzbmFwX3xsZWdfKVswLTlfYS16QS1a +XStcLmJhayQnKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnVW5ndWVsdGlnZXIgRGF0ZWluYW1l +JyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkY2FjaGVEaXIgPSBKb2luLVBhdGgg +JERhdGFEaXIgJ2NhY2hlJw0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LVBhdGggLUxp +dGVyYWxQYXRoICRjYWNoZURpcikpIHsgTmV3LUl0ZW0gLUl0ZW1UeXBlIERpcmVjdG9yeSAtUGF0 +aCAkY2FjaGVEaXIgLUZvcmNlIHwgT3V0LU51bGwgfQ0KICAgICAgICAgICAgICAgICRxdWVsbCA9 +IEpvaW4tUGF0aCAkY2FjaGVEaXIgJG5hbWUNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVz +dC1QYXRoIC1MaXRlcmFsUGF0aCAkcXVlbGwpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdCYWNr +dXAgbmljaHQgZ2VmdW5kZW4nIDQwNDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICR0cyA9 +IEdldC1EYXRlIC1Gb3JtYXQgJ3l5eXlNTWRkX0hIbW1zcycNCiAgICAgICAgICAgICAgICAkc2lj +aGVyID0gInNuYXBfdm9yX3dpZWRlcmhlcnN0ZWxsdW5nXyR0cy5iYWsiDQogICAgICAgICAgICAg +ICAgIyBTaWNoZXJoZWl0cy1CdW5kbGUgZGVyIGFrdHVlbGxlbiBEYXRlbiB2b3IgVWViZXJzY2hy +ZWliZW4uDQogICAgICAgICAgICAgICAgJHNpY2hlckJ1bmRsZSA9IFtvcmRlcmVkXUB7DQogICAg +ICAgICAgICAgICAgICAgIGZvcm1hdCAgPSAndmkzLWJhY2t1cC12MScNCiAgICAgICAgICAgICAg +ICAgICAgdHMgICAgICA9ICR0cw0KICAgICAgICAgICAgICAgICAgICBwbGFudW5nID0gKFJlYWQt +SnNvbk9iamVjdCAncGxhbnVuZy5qc29uJykNCiAgICAgICAgICAgICAgICAgICAgYWRtaW4gICA9 +IChSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nKQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICBXcml0ZS1CYWNrdXBCeXRlcyAoSm9pbi1QYXRoICRjYWNoZURpciAkc2ljaGVy +KSAoJHNpY2hlckJ1bmRsZSB8IENvbnZlcnRUby1Kc29uIC1EZXB0aCAzMCkNCg0KICAgICAgICAg +ICAgICAgICRxdWVsbEluaGFsdCA9IFJlYWQtQmFja3VwVGV4dCAkcXVlbGwNCiAgICAgICAgICAg +ICAgICBpZiAoJG51bGwgLWVxICRxdWVsbEluaGFsdCkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAn +QmFja3VwLURhdGVpIGtvbm50ZSBuaWNodCBnZWxlc2VuIHdlcmRlbicgNTAwOyBjb250aW51ZSB9 +DQogICAgICAgICAgICAgICAgdHJ5IHsgJHF1ZWxsRGF0ZW4gPSAkcXVlbGxJbmhhbHQgfCBDb252 +ZXJ0RnJvbS1Kc29uIH0gY2F0Y2ggeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQmFja3VwLURhdGVp +IG5pY2h0IHBhcnNpZXJiYXInIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICR3aWVk +ZXJoZXJnZXN0ZWxsdCA9IEAoKQ0KICAgICAgICAgICAgICAgIGlmICgkcXVlbGxEYXRlbiAtYW5k +ICRxdWVsbERhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2Zvcm1hdCddIC1hbmQgIiQoJHF1ZWxs +RGF0ZW4uZm9ybWF0KSIuU3RhcnRzV2l0aCgndmkzLWJhY2t1cCcpKSB7DQogICAgICAgICAgICAg +ICAgICAgIGlmICgkcXVlbGxEYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydwbGFudW5nJ10pIHsN +CiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicg +JHF1ZWxsRGF0ZW4ucGxhbnVuZyB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICAk +d2llZGVyaGVyZ2VzdGVsbHQgKz0gJ3BsYW51bmcnDQogICAgICAgICAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICAgICAgICAgaWYgKCRxdWVsbERhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2Fk +bWluJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ2FkbWlu +Lmpzb24nICRxdWVsbERhdGVuLmFkbWluIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAg +ICAgICR3aWVkZXJoZXJnZXN0ZWxsdCArPSAnYWRtaW4nDQogICAgICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAjIExlZ2FjeS1G +b3JtYXQgKG51ciBwbGFudW5nLmpzb24tSW5oYWx0KS4NCiAgICAgICAgICAgICAgICAgICAgV3Jp +dGUtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJyAkcXVlbGxEYXRlbiB8IE91dC1OdWxsDQogICAg +ICAgICAgICAgICAgICAgICR3aWVkZXJoZXJnZXN0ZWxsdCArPSAncGxhbnVuZycNCiAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnYmFja3VwLndpZWRl +cmhlcmdlc3RlbGx0JyBAeyBxdWVsbGUgPSAkbmFtZTsgc2ljaGVydW5nID0gJHNpY2hlcjsgaW5o +YWx0ID0gKCR3aWVkZXJoZXJnZXN0ZWxsdCAtam9pbiAnKycpIH0NCiAgICAgICAgICAgICAgICBO +ZXctSGlud2VpcyAnYmFja3VwX3dpZWRlcmhlcmdlc3RlbGx0JyAoW29yZGVyZWRdQHsNCiAgICAg +ICAgICAgICAgICAgICAgYmFja3VwICAgID0gJG5hbWUNCiAgICAgICAgICAgICAgICAgICAgc2lj +aGVydW5nID0gJHNpY2hlcg0KICAgICAgICAgICAgICAgICAgICBpbmhhbHQgICAgPSAoJHdpZWRl +cmhlcmdlc3RlbGx0IC1qb2luICcrJykNCiAgICAgICAgICAgICAgICB9KSAoR2V0LUFrdHVlbGxl +ckJlbnV0emVyKSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRS +ZXNwb25zZSBAeyBzdGF0dXMgPSAnd2llZGVyaGVyZ2VzdGVsbHQnOyBzaWNoZXJ1bmcgPSAkc2lj +aGVyOyBpbmhhbHQgPSAkd2llZGVyaGVyZ2VzdGVsbHQgfQ0KICAgICAgICAgICAgICAgIGNvbnRp +bnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51 +bmcvYmFja3VwL2xvZXNjaGVuJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAg +ICAgICAgIGlmICgtbm90IChUZXN0LURhcmZCZXJlaWNoICdiYWNrdXBzJykpIHsgU2VuZC1FcnJv +ciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRpZ3VuZyAoQmFja3VwcyknIDQwMzsgY29udGludWUg +fQ0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAg +ICAgICAgJGRhdGVuID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAg +JG5hbWUgPSAiJCgkZGF0ZW4uZGF0ZWluYW1lKSINCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAo +JG5hbWUgLW1hdGNoICdeKHNuYXBffGxlZ18pWzAtOV9hLXpBLVpdK1wuYmFrJCcpKSB7IFNlbmQt +RXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0aWdlciBEYXRlaW5hbWUnIDQwMDsgY29udGludWUgfQ0K +ICAgICAgICAgICAgICAgICRmcCA9IEpvaW4tUGF0aCAkRGF0YURpciAoJ2NhY2hlLycgKyAkbmFt +ZSkNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkZnAp +KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdCYWNrdXAgbmljaHQgZ2VmdW5kZW4nIDQwNDsgY29u +dGludWUgfQ0KICAgICAgICAgICAgICAgIFJlbW92ZS1JdGVtIC1MaXRlcmFsUGF0aCAkZnAgLUZv +cmNlDQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnYmFja3VwLmdlbG9lc2NodCcg +QHsgZGF0ZWluYW1lID0gJG5hbWUgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAk +UmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlbG9lc2NodCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRp +bnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT0gUkVTRVQgLyBEVU1NWURB +VEVOID09PT09DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvcmVzZXQn +IC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRl +c3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnTnVyIFN1cGVyVXNlciBk +dWVyZmVuIGRpZSBQbGFudW5nIHp1cnVlY2tzZXR6ZW4nIDQwMzsgY29udGludWUgfQ0KICAgICAg +ICAgICAgICAgICRwbGFudW5nUGF0aCA9IEpvaW4tUGF0aCAkRGF0YURpciAncGxhbnVuZy5qc29u +Jw0KICAgICAgICAgICAgICAgICRiYWNrdXBOYW1lID0gJG51bGwNCiAgICAgICAgICAgICAgICBp +ZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkcGxhbnVuZ1BhdGgpIHsNCiAgICAgICAgICAgICAg +ICAgICAgJHRzID0gR2V0LURhdGUgLUZvcm1hdCAneXl5eU1NZGRfSEhtbXNzJw0KICAgICAgICAg +ICAgICAgICAgICAkY2FjaGVEaXIgPSBKb2luLVBhdGggJERhdGFEaXIgJ2NhY2hlJw0KICAgICAg +ICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkY2FjaGVEaXIp +KSB7IE5ldy1JdGVtIC1JdGVtVHlwZSBEaXJlY3RvcnkgLVBhdGggJGNhY2hlRGlyIC1Gb3JjZSB8 +IE91dC1OdWxsIH0NCiAgICAgICAgICAgICAgICAgICAgIyBSZXN0YXVyaWVyYmFyZXIgTmFtZSAo +cGxhbnVuZ19iYWNrdXBfdm9yX3Jlc2V0XyouanNvbikgc3RhdHQNCiAgICAgICAgICAgICAgICAg +ICAgIyAuYmFrIC0+IHdpcmQgdm9tIEJhY2t1cHMtVGFiIGdlbGlzdGV0IHVuZCBrYW5uIHdpZWRl +cmhlcmdlc3RlbGx0DQogICAgICAgICAgICAgICAgICAgICMgd2VyZGVuLiBGcnVlaGVyIHp1ZGVt +IG5pY2h0IGFuIGRlbiBDbGllbnQgenVydWVja2dlZ2ViZW4NCiAgICAgICAgICAgICAgICAgICAg +IyAtPiAiQmFja3VwOiB1bmRlZmluZWQiIGluIGRlciBVSS4NCiAgICAgICAgICAgICAgICAgICAg +JGJhY2t1cE5hbWUgPSAicGxhbnVuZ19iYWNrdXBfdm9yX3Jlc2V0XyR0cy5qc29uIg0KICAgICAg +ICAgICAgICAgICAgICBDb3B5LUl0ZW0gLUxpdGVyYWxQYXRoICRwbGFudW5nUGF0aCAtRGVzdGlu +YXRpb24gKEpvaW4tUGF0aCAkY2FjaGVEaXIgJGJhY2t1cE5hbWUpDQogICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgICRwbGFudW5nID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpz +b24nDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkcGxhbnVuZykgew0KICAgICAgICAg +ICAgICAgICAgICBpZiAoJHBsYW51bmcuUFNPYmplY3QuUHJvcGVydGllc1snZWludHJhZWdlJ10p +IHsgJHBsYW51bmcuZWludHJhZWdlID0gTmV3LU9iamVjdCBQU09iamVjdCB9DQogICAgICAgICAg +ICAgICAgICAgIGlmICgkcGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWydrb21tZW50YXJlJ10p +IHsgJHBsYW51bmcua29tbWVudGFyZSA9IE5ldy1PYmplY3QgUFNPYmplY3QgfQ0KICAgICAgICAg +ICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRwbGFudW5nIHwgT3V0 +LU51bGwNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJh +ZyAncGxhbnVuZy5yZXNldCcgQHt9DQogICAgICAgICAgICAgICAgTmV3LUhpbndlaXMgJ3BsYW51 +bmdfcmVzZXQnIChbb3JkZXJlZF1Aew0KICAgICAgICAgICAgICAgICAgICBoaW53ZWlzID0gJ0Vp +bnRyYWVnZSB1bmQgS29tbWVudGFyZSB3dXJkZW4gZ2Vsb2VzY2h0OyBTaWNoZXJ1bmcgbGllZ3Qg +aW4gZGF0YS9jYWNoZS8uJw0KICAgICAgICAgICAgICAgIH0pIChHZXQtQWt0dWVsbGVyQmVudXR6 +ZXIpIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNl +IEB7IHN0YXR1cyA9ICd6dXJ1ZWNrZ2VzZXR6dCc7IGJhY2t1cCA9ICRiYWNrdXBOYW1lIH0NCiAg +ICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQ +YXRoIC1lcSAnL2FwaS9wbGFudW5nL2R1bW15ZGF0ZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1Qn +KSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5k +LUVycm9yICRSZXNwb25zZSAnTnVyIFN1cGVyVXNlciBkdWVyZmVuIER1bW15ZGF0ZW4gZWluc3Bp +ZWxlbicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9u +c2UgJ0R1bW15ZGF0ZW4gbnVyIGltIERlYnVnLVNlcnZlciAoZGV2L3NlcnZlci5weSkgaW1wbGVt +ZW50aWVydC4nIDUwMQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoN +CiAgICAgICAgICAgICMgUE9TVCAvYXBpL2FkbWluL3Byb3Rva29sbC1sb2VzY2hlbg0KICAgICAg +ICAgICAgIyBFaW5tYWwtUmVzZXQgZnVlciBMb2didWNoICsgQVBJLUxvZy4gU2V0enQgbG9nYnVj +aC5qc29uIGF1ZiBbXSwNCiAgICAgICAgICAgICMgbG9lc2NodCBkaWUgQVBJLUxvZy1EYXRlaSBh +dXMgJVRFTVAlLCB1bmQgc2NocmVpYnQgZWluZW4gZWluemlnZW4NCiAgICAgICAgICAgICMgbmV1 +ZW4gTG9nYnVjaC1FaW50cmFnIChwcm90b2tvbGwuZ2Vsb2VzY2h0KSwgZGFtaXQgZGFzIEVyZWln +bmlzDQogICAgICAgICAgICAjIHNlbGJzdCBuYWNodm9sbHppZWhiYXIgYmxlaWJ0Lg0KICAgICAg +ICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9wcm90b2tvbGwtbG9lc2NoZW4nIC1hbmQg +JE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0 +U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnTnVyIFN1cGVyVXNlciBkdWVyZmVu +IGRhcyBQcm90b2tvbGwgbG9lc2NoZW4nIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg +ICR2b3JoZXIgPSBSZWFkLUpzb25PYmplY3QgJ2xvZ2J1Y2guanNvbicNCiAgICAgICAgICAgICAg +ICAkYW56YWhsVm9yaGVyID0gMA0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJHZvcmhl +cikgew0KICAgICAgICAgICAgICAgICAgICAkYW56YWhsVm9yaGVyID0gQCgkdm9yaGVyKS5Db3Vu +dA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICds +b2didWNoLmpzb24nIEAoKSB8IE91dC1OdWxsDQoNCiAgICAgICAgICAgICAgICAkYXBpTG9nQnl0 +ZXMgPSAwDQogICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHNjcmlw +dDpBcGlMb2cpIHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAg +ICAgICAgICRhcGlMb2dCeXRlcyA9IChHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJHNjcmlwdDpBcGlM +b2cpLkxlbmd0aA0KICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlLUl0ZW0gLUxpdGVyYWxQ +YXRoICRzY3JpcHQ6QXBpTG9nIC1Gb3JjZSAtRXJyb3JBY3Rpb24gU3RvcA0KICAgICAgICAgICAg +ICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICMgRGF0ZWkgZXZ0bC4g +bm9jaCBvZmZlbjsgaWdub3JpZXJlbiwgTG9nYnVjaCBpc3QgZGllIHdpY2h0aWdlcmUgU3B1cg0K +ICAgICAgICAgICAgICAgICAgICAgICAgJGFwaUxvZ0J5dGVzID0gLTENCiAgICAgICAgICAgICAg +ICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0Vp +bnRyYWcgJ3Byb3Rva29sbC5nZWxvZXNjaHQnIEB7DQogICAgICAgICAgICAgICAgICAgIGxvZ2J1 +Y2hFaW50cmFlZ2VWb3JoZXIgPSAkYW56YWhsVm9yaGVyDQogICAgICAgICAgICAgICAgICAgIGFw +aUxvZ0J5dGVzICAgICAgICAgICAgPSAkYXBpTG9nQnl0ZXMNCiAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAew0KICAgICAgICAgICAg +ICAgICAgICBzdGF0dXMgICAgICAgICAgICAgICAgID0gJ2dlbG9lc2NodCcNCiAgICAgICAgICAg +ICAgICAgICAgbG9nYnVjaEVpbnRyYWVnZVZvcmhlciA9ICRhbnphaGxWb3JoZXINCiAgICAgICAg +ICAgICAgICAgICAgYXBpTG9nQnl0ZXMgICAgICAgICAgICA9ICRhcGlMb2dCeXRlcw0KICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQog +ICAgICAgICAgICAjID09PT09IFNUQVRJU1RJSyAvIExPR0JVQ0ggPT09PT0NCiAgICAgICAgICAg +IGlmICgkUGF0aCAtZXEgJy9hcGkvc3RhdGlzdGlrJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7 +DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVpY2ggJ3N0YXRpc3Rpaycp +KSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBCZXJl +Y2h0aWd1bmcgKFN0YXRpc3RpayknIDQwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicN +CiAgICAgICAgICAgICAgICAkYWRtaW4gICA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicN +CiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIChHZXQtU3RhdGlzdGlr +RGF0YSAkcGxhbnVuZyAkYWRtaW4pDQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAg +ICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvbG9nYnVjaCcgLWFuZCAkTWV0 +aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURhcmZCZXJl +aWNoICdsb2didWNoJykpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9u +c2UgJ0tlaW5lIEJlcmVjaHRpZ3VuZyAoTG9nYnVjaCknIDQwMzsgY29udGludWUNCiAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uVGV4dCAkUmVzcG9uc2UgKEdldC1M +b2didWNoVGV4dCkNCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQog +ICAgICAgICAgICAjID09PT09PT09PT09PT09PT09PT09PSBaRUxMLUxPQ0sgKyBDSEFOR0VTIChM +aXZlLVN5bmMpID09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgIyBQT1NUIC9hcGkv +bG9jay96ZWxsZSAgeyBkYXR1bSwgcGVyc29uSWQgfSAtPiB7IG9rLCB0b2tlbiwgLi4uIH0gb2Rl +ciA0MjMgeyBzcGVycmVyLCAuLi4gfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9s +b2NrL3plbGxlJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgICRi b2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkp IHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUg -fQ0KICAgICAgICAgICAgICAgICR1cGRhdGUgPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAg -ICAgICAgICAgICAgICAjIEF1ZGl0LVBoYXNlIEEuMyAoMjAyNi0wNS0yMSk6IFByaXZpbGVnaWVu -LVNjaHV0ei4gUmVpbmUNCiAgICAgICAgICAgICAgICAjIEZhY2hhdWZzaWNodC1BZG1pbnMgKHNl -aGVuLmFkbWluaXN0cmF0aW9uPXRydWUsIGFiZXIga2VpbiBTVSkNCiAgICAgICAgICAgICAgICAj -IGR1ZXJmZW4gU3RhbW1kYXRlbiBlZGl0aWVyZW4sIGFiZXIgS0VJTkUgU2ljaHRiYXJrZWl0cy0N -CiAgICAgICAgICAgICAgICAjIE92ZXJyaWRlcyAoYHNlaGVuYCkgb2RlciBlZGl0aWVyLVJlY2h0 -ZSAoYGVkaXRSZWNodGVgKSBzZXR6ZW4NCiAgICAgICAgICAgICAgICAjIOKAlCBzb25zdCBrb2Vu -bnRlbiBzaWUgc2ljaCBMb2didWNoLS9TdGF0aXN0aWstU2ljaHQgc2VsYnN0DQogICAgICAgICAg -ICAgICAgIyBmcmVpc2NoYWx0ZW4uIFBlciBEZXZUb29scy1tYW5pcHVsaWVydGVzIFBheWxvYWQg -YWJmYW5nZW4uDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkg -ew0KICAgICAgICAgICAgICAgICAgICBpZiAoJHVwZGF0ZS5QU09iamVjdC5Qcm9wZXJ0aWVzWydz -ZWhlbiddKSAgICAgIHsgJHVwZGF0ZS5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgnc2VoZW4n -KSB9DQogICAgICAgICAgICAgICAgICAgIGlmICgkdXBkYXRlLlBTT2JqZWN0LlByb3BlcnRpZXNb -J2VkaXRSZWNodGUnXSkgeyAkdXBkYXRlLlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCdlZGl0 -UmVjaHRlJykgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkcHV0UmVzID0g -JG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICRwdXRSZXMgPSBJ -bnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAgICAgICAgICAkcGxh -bnVuZyA9IFJlYWQtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICRn -ZWZ1bmRlbiAgID0gJGZhbHNlDQogICAgICAgICAgICAgICAgJGFsdGVXZXJ0ZSAgPSBAe30NCiAg -ICAgICAgICAgICAgICAkcGVyc29uTmFtZSA9ICcnDQogICAgICAgICAgICAgICAgZm9yZWFjaCAo -JHAgaW4gJHBsYW51bmcucGVyc29uZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRwLmlk -IC1lcSAkcGVyc29uSWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwZXJzb25OYW1lID0g -KCgiJCgkcC52b3JuYW1lKSAkKCRwLm5hbWUpIikuVHJpbSgpKQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgZm9yZWFjaCAoJHByb3AgaW4gJHVwZGF0ZS5QU09iamVjdC5Qcm9wZXJ0aWVzKSB7DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwcm9wLk5hbWUgLW5lICdpZCcpIHsNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsdGVXZXJ0ZVskcHJvcC5OYW1lXSA9IGlm -ICgkcC5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwcm9wLk5hbWVdKSB7ICRwLigkcHJvcC5OYW1lKSB9 -IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcC5Q -U09iamVjdC5Qcm9wZXJ0aWVzWyRwcm9wLk5hbWVdKSB7ICRwLigkcHJvcC5OYW1lKSA9ICRwcm9w -LlZhbHVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRwIHwgQWRk -LU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkcHJvcC5OYW1lIC1Ob3RlUHJvcGVydHlWYWx1ZSAk -cHJvcC5WYWx1ZSAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRnZWZ1bmRlbiA9 -ICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRnZWZ1bmRl -bikgeyByZXR1cm4gQHsgZ2VmdW5kZW4gPSAkZmFsc2UgfSB9DQogICAgICAgICAgICAgICAgV3Jp -dGUtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJyAkcGxhbnVuZyB8IE91dC1OdWxsDQogICAgICAg -ICAgICAgICAgcmV0dXJuIEB7IGdlZnVuZGVuID0gJHRydWU7IGFsdGVXZXJ0ZSA9ICRhbHRlV2Vy -dGU7IHBlcnNvbk5hbWUgPSAkcGVyc29uTmFtZSB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNw -b25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJHB1dFJlcy5nZWZ1bmRlbikgeyBTZW5kLUVycm9y -ICRSZXNwb25zZSAiUGVyc29uICRwZXJzb25JZCBuaWNodCBnZWZ1bmRlbiIgNDA0OyBjb250aW51 -ZSB9DQogICAgICAgICAgICAgICAgJGFsdGVXZXJ0ZSAgPSAkcHV0UmVzLmFsdGVXZXJ0ZQ0KICAg -ICAgICAgICAgICAgICRwZXJzb25OYW1lID0gJHB1dFJlcy5wZXJzb25OYW1lDQoNCiAgICAgICAg -ICAgICAgICAjIERpZmYtRGljdCDigJQgbnVyIEZlbGRlciwgaW4gZGVuZW4gc2ljaCBkZXIgV2Vy -dCB0YXRzYWVjaGxpY2gNCiAgICAgICAgICAgICAgICAjIGdlYWVuZGVydCBoYXQuIEpTT04tc3Rh -YmlsZSBWZXJnbGVpY2hzYmFzaXMuDQogICAgICAgICAgICAgICAgJGdlYWVuZGVydCA9IFtvcmRl -cmVkXUB7fQ0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwcm9wIGluICR1cGRhdGUuUFNPYmpl -Y3QuUHJvcGVydGllcykgew0KICAgICAgICAgICAgICAgICAgICBpZiAoJHByb3AuTmFtZSAtZXEg -J2lkJykgeyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgICAgICRhbHRWYWwgID0gJGFsdGVX -ZXJ0ZVskcHJvcC5OYW1lXQ0KICAgICAgICAgICAgICAgICAgICAkbmV1VmFsICA9ICRwcm9wLlZh -bHVlDQogICAgICAgICAgICAgICAgICAgICRhbHRKc29uID0gKCRhbHRWYWwgfCBDb252ZXJ0VG8t -SnNvbiAtQ29tcHJlc3MgLURlcHRoIDgpDQogICAgICAgICAgICAgICAgICAgICRuZXVKc29uID0g -KCRuZXVWYWwgfCBDb252ZXJ0VG8tSnNvbiAtQ29tcHJlc3MgLURlcHRoIDgpDQogICAgICAgICAg -ICAgICAgICAgIGlmICgkYWx0SnNvbiAtbmUgJG5ldUpzb24pIHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgICRnZWFlbmRlcnRbJHByb3AuTmFtZV0gPSBbb3JkZXJlZF1AeyBhbHQgPSAkYWx0VmFs -OyBuZXUgPSAkbmV1VmFsIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -IH0NCg0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3BlcnNvbi5nZWFlbmRlcnQn -IChbb3JkZXJlZF1Aew0KICAgICAgICAgICAgICAgICAgICBwZXJzb25JZCAgPSAkcGVyc29uSWQN -CiAgICAgICAgICAgICAgICAgICAgbmFtZSAgICAgID0gJHBlcnNvbk5hbWUNCiAgICAgICAgICAg -ICAgICAgICAgZ2VhZW5kZXJ0ID0gJGdlYWVuZGVydA0KICAgICAgICAgICAgICAgIH0pDQogICAg -ICAgICAgICAgICAgIyBIaW53ZWlzLVRyaWdnZXI6IElkZW50aXRhZXRzLUFlbmRlcnVuZyAobndL -ZW5udW5nIC8gZW1haWwpIGJla29tbXQNCiAgICAgICAgICAgICAgICAjIGVpbmVuIEluLUFwcC1I -aW53ZWlzIGZ1ZXIgU1UgKyBHZXNhbXR2ZXJhbnR3b3J0bGljaGUuIFBybyBGZWxkIGVpbg0KICAg -ICAgICAgICAgICAgICMgZWlnZW5lciBFaW50cmFnLCBkYW1pdCBkYXMgTW9kYWwgbGVzYmFyIGJs -ZWlidC4NCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkZmVsZCBpbiBAKCdud0tlbm51bmcnLCAn -ZW1haWwnKSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoJGdlYWVuZGVydC5Db250YWlucygk -ZmVsZCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRkaWZmID0gJGdlYWVuZGVydFskZmVs -ZF0NCiAgICAgICAgICAgICAgICAgICAgICAgIE5ldy1IaW53ZWlzICdpZGVudGl0YWV0X2dlYWVu -ZGVydCcgKFtvcmRlcmVkXUB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uX2lk -ICAgPSAkcGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25fbmFtZSA9 -ICRwZXJzb25OYW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVsZCAgICAgICAgPSAk -ZmVsZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVyX3dlcnQgID0gIiQoJGRpZmYu -YWx0KSINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXVlcl93ZXJ0ICA9ICIkKCRkaWZm -Lm5ldSkiDQogICAgICAgICAgICAgICAgICAgICAgICB9KSAoR2V0LUFrdHVlbGxlckJlbnV0emVy -KSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnYWt0 -dWFsaXNpZXJ0JyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAg -ICAgICAgICAgICMgREVMRVRFIC9hcGkvcGVyc29uZW4ve2lkfSAgICAgICAgICAgIC0+IFNvZnQt -RGVsZXRlIChnZWxvZXNjaHRBbSBnZXNldHp0LCBQZXJzb24gYmxlaWJ0IGltIERhdGVuc2F0eiBm -dWVyIFBhcGllcmtvcmItUnVlY2tob2x1bmcpDQogICAgICAgICAgICAjIERFTEVURSAvYXBpL3Bl -cnNvbmVuL3tpZH0/ZW5kZ3VlbHRpZz0xIC0+IEhhcmQtRGVsZXRlIChQZXJzb24ga29tcGxldHQg -ZW50ZmVybmVuLCBFaW50cmFlZ2UvS29tbWVudGFyZSB2ZXJ3YWlzZW4pDQogICAgICAgICAgICAj -IFZvciBkZW0gU29mdC1EZWxldGUgd2VyZGVuIGltIHNlbGJlbiBadWcgYmVyZWl0cyBQYXBpZXJr -b3JiLUVpbnRyYWVnZSBhdWZnZXJhZXVtdCwgZGllIGFlbHRlciBhbHMNCiAgICAgICAgICAgICMg -YWRtaW4ucGFwaWVya29yYlRhZ2VBdWZiZXdhaHJ1bmcgKERlZmF1bHQgMzAgVGFnZSkgc2luZC4g -U28gYmxlaWJ0IGRlciBEYXRlbnNhdHogc2NobGFuaywgb2huZQ0KICAgICAgICAgICAgIyBlaW5l -biBzZXBhcmF0ZW4gQ3Jvbi1Kb2IgenUgYnJhdWNoZW4uDQogICAgICAgICAgICBpZiAoJFBhdGgg -LW1hdGNoICdeL2FwaS9wZXJzb25lbi8oXGQrKSQnIC1hbmQgJE1ldGhvZCAtZXEgJ0RFTEVURScp -IHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJv -ciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9DQogICAgICAg -ICAgICAgICAgJHBlcnNvbklkID0gW2ludF0kTWF0Y2hlc1sxXQ0KICAgICAgICAgICAgICAgICRl -bmRndWVsdGlnID0gJGZhbHNlDQogICAgICAgICAgICAgICAgaWYgKCRSZXF1ZXN0LlVybC5RdWVy -eSkgew0KICAgICAgICAgICAgICAgICAgICAkcSA9IFtTeXN0ZW0uV2ViLkh0dHBVdGlsaXR5XTo6 -UGFyc2VRdWVyeVN0cmluZygkUmVxdWVzdC5VcmwuUXVlcnkpDQogICAgICAgICAgICAgICAgICAg -ICRlbmRndWVsdGlnID0gKFtzdHJpbmddJHFbJ2VuZGd1ZWx0aWcnXSkgLWVxICcxJw0KICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkZGVsUmVzID0gJG51bGwNCiAgICAgICAgICAg -ICAgICB0cnkgew0KICAgICAgICAgICAgICAgICRkZWxSZXMgPSBJbnZva2UtV2l0aEZpbGVMb2Nr -ICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAgICAgICAgICAkcGxhbnVuZyA9IFJlYWQtSnNvbk9i -amVjdCAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICRhZG1pbiAgID0gUmVhZC1Kc29u -T2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICRhdWZiZXdhaHJ1bmcgPSAzMA0K -ICAgICAgICAgICAgICAgIGlmICgkYWRtaW4gLWFuZCAkYWRtaW4uUFNPYmplY3QuUHJvcGVydGll -c1sncGFwaWVya29yYlRhZ2VBdWZiZXdhaHJ1bmcnXSkgew0KICAgICAgICAgICAgICAgICAgICB0 -cnkgeyAkYXVmYmV3YWhydW5nID0gW2ludF0kYWRtaW4ucGFwaWVya29yYlRhZ2VBdWZiZXdhaHJ1 -bmcgfSBjYXRjaCB7fQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkamV0enQg -PSAoR2V0LURhdGUpLlRvU3RyaW5nKCdvJykNCiAgICAgICAgICAgICAgICAkcGVyc29uTmFtZSA9 -ICcnDQogICAgICAgICAgICAgICAgJGdlZnVuZGVuID0gJGZhbHNlDQogICAgICAgICAgICAgICAg -JG5ldWVQZXJzb25lbiA9IEAoKQ0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRwbGFu -dW5nLnBlcnNvbmVuKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICgkcC5pZCAtZXEgJHBlcnNv -bklkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkZ2VmdW5kZW4gPSAkdHJ1ZQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgJHBlcnNvbk5hbWUgPSAoKCIkKCRwLnZvcm5hbWUpICQoJHAubmFt -ZSkiKS5UcmltKCkpDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGVuZGd1ZWx0aWcpIHsN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEhhcmQtRGVsZXRlOiB1ZWJlcnNwcmluZ2Vu -LCBQZXJzb24gZmxpZWd0IHJhdXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51 -ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGllc1snZ2Vsb2VzY2h0QW0nXSkgeyAkcC5n -ZWxvZXNjaHRBbSA9ICRqZXR6dCB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7 -ICRwIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAnZ2Vsb2VzY2h0QW0nIC1Ob3RlUHJv -cGVydHlWYWx1ZSAkamV0enQgLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAk -bmV1ZVBlcnNvbmVuICs9ICRwDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAjIEF1dG8tUHVyZ2U6 -IFNvZnQtRGVsZXRlZC1QZXJzb25lbiwgZGVyZW4gZ2Vsb2VzY2h0QW0gYWVsdGVyDQogICAgICAg -ICAgICAgICAgICAgICAgICAjIGFscyAkYXVmYmV3YWhydW5nIFRhZ2UgaXN0LCB3ZXJkZW4gaGll -ciBlbmRndWVsdGlnIGVudGZlcm50Lg0KICAgICAgICAgICAgICAgICAgICAgICAgJHB1cmdlID0g -JGZhbHNlDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGll -c1snZ2Vsb2VzY2h0QW0nXSAtYW5kICRwLmdlbG9lc2NodEFtKSB7DQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsdGVy -ID0gW2RhdGV0aW1lXSRwLmdlbG9lc2NodEFtDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIGlmICgoTmV3LVRpbWVTcGFuIC1TdGFydCAkYWx0ZXIgLUVuZCAoR2V0LURhdGUpKS5Ub3Rh -bERheXMgLWd0ICRhdWZiZXdhaHJ1bmcpIHsgJHB1cmdlID0gJHRydWUgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIH0gY2F0Y2gge30NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAg -ICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRwdXJnZSkgeyAkbmV1ZVBlcnNvbmVuICs9 -ICRwIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICBpZiAoLW5vdCAkZ2VmdW5kZW4pIHsgcmV0dXJuIEB7IGdlZnVuZGVuID0gJGZhbHNl -IH0gfQ0KICAgICAgICAgICAgICAgICRwbGFudW5nLnBlcnNvbmVuID0gW29iamVjdFtdXUAoJG5l -dWVQZXJzb25lbikNCiAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpz -b24nICRwbGFudW5nIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICByZXR1cm4gQHsgZ2VmdW5k -ZW4gPSAkdHJ1ZTsgcGVyc29uTmFtZSA9ICRwZXJzb25OYW1lOyBqZXR6dCA9ICRqZXR6dCB9DQog -ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAg -ICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29u -dGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGRlbFJl -cy5nZWZ1bmRlbikgeyBTZW5kLUVycm9yICRSZXNwb25zZSAiUGVyc29uICRwZXJzb25JZCBuaWNo -dCBnZWZ1bmRlbiIgNDA0OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJHBlcnNvbk5hbWUg -PSAkZGVsUmVzLnBlcnNvbk5hbWUNCiAgICAgICAgICAgICAgICAkamV0enQgPSAkZGVsUmVzLmpl -dHp0DQogICAgICAgICAgICAgICAgaWYgKCRlbmRndWVsdGlnKSB7DQogICAgICAgICAgICAgICAg -ICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3BlcnNvbi5lbmRndWVsdGlnLmdlbG9lc2NodCcgQHsgcGVy -c29uSWQgPSAkcGVyc29uSWQ7IG5hbWUgPSAkcGVyc29uTmFtZSB9DQogICAgICAgICAgICAgICAg -fSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAncGVyc29uLmlu -LnBhcGllcmtvcmInIEB7IHBlcnNvbklkID0gJHBlcnNvbklkOyBuYW1lID0gJHBlcnNvbk5hbWU7 -IGdlbG9lc2NodEFtID0gJGpldHp0IH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2Vsb2VzY2h0JzsgbW9k -dXMgPSBpZiAoJGVuZGd1ZWx0aWcpIHsgJ2VuZGd1ZWx0aWcnIH0gZWxzZSB7ICdwYXBpZXJrb3Ji -JyB9IH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAg -ICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wZXJzb25lbi9yZWloZW5mb2xnZScgLWFuZCAkTWV0aG9k -IC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFkbWluKSkg -eyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQWRtaW4tUmVjaHRlJyA0MDM7IGNvbnRpbnVl -IH0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAg -ICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1 -IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkcmVpaGVuZm9sZ2UgPSAk -Ym9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAg -ICAgICAgICAgICBJbnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAg -ICAgICAgICAgICAgICAgICRwbGFudW5nID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24n -DQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkciBpbiAkcmVpaGVuZm9sZ2UpIHsN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcCBpbiAkcGxhbnVuZy5wZXJz -b25lbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHAuaWQgLWVxICRy -LmlkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHAuUFNPYmpl -Y3QuUHJvcGVydGllc1sncG9zaXRpb24nXSkgeyAkcC5wb3NpdGlvbiA9ICRyLnBvc2l0aW9uIH0N -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkcCB8IEFkZC1NZW1i -ZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ3Bvc2l0aW9uJyAtTm90ZVByb3BlcnR5VmFsdWUgJHIucG9z -aXRpb24gLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg -ICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRwbGFudW5nIHwgT3V0LU51bGwN -CiAgICAgICAgICAgICAgICAgICAgfSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgfSBjYXRj -aCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhs -ZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICBXcml0ZS1Mb2dFaW50cmFnICdwZXJzb25lbi5yZWloZW5mb2xnZS5nZWFlbmRlcnQnIEB7fQ0K -ICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2Fr -dHVhbGlzaWVydCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoN -CiAgICAgICAgICAgICMgPT09PT0gSElOV0VJU0UgKEluLUFwcC1CYW5uZXIvTW9kYWwtU3lzdGVt -KSA9PT09PQ0KICAgICAgICAgICAgIyBHRVQgIC9hcGkvaGlud2Vpc2UgICAgICAgICAgICAtPiBv -ZmZlbmUgSGlud2Vpc2UgZnVlciBkZW4gZWluZ2Vsb2dndGVuIFVzZXINCiAgICAgICAgICAgICMg -UE9TVCAvYXBpL2hpbndlaXNlL3tpZH0va2VubnRuaXMgLT4gS2VubnRuaXNuYWhtZSBzZXR6ZW4N -CiAgICAgICAgICAgICMgR0VUICAvYXBpL2hpbndlaXNlL3VlYmVyc2ljaHQgLT4gU1Utb25seSwg -dm9sbHN0YWVuZGlnZSBTaWNodCBpbmtsLiBMZXNlLVN0YXR1cw0KICAgICAgICAgICAgaWYgKCRQ -YXRoIC1lcSAnL2FwaS9oaW53ZWlzZScgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAg -ICAgICAgICAgICMgR2F0ZWQ6IG51ciBFbXBmYWVuZ2VyIChTVSBvZGVyIEdlc2FtdHZlcmFudHdv -cnRsaWNoKSBkdWVyZmVuIHVlYmVyaGF1cHQgZnJhZ2VuDQogICAgICAgICAgICAgICAgJHIgPSBH -ZXQtUmVjaHRlDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKCRyLmlzdFN1cGVyVXNlciAtb3Ig -JHIuaXN0R2VzYW10dmVyYW50d29ydGxpY2gpKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQt -SnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgaGlud2Vpc2UgPSBAKCkgfQ0KICAgICAgICAgICAgICAg -ICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBJbnZva2Ut -SGlud2Vpc1BydW5pbmcNCiAgICAgICAgICAgICAgICAkaCA9IFJlYWQtSnNvbk9iamVjdCAnaGlu -d2Vpc2UuanNvbicNCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRoIC1vciAtbm90ICRo -LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2hpbndlaXNlJ10pIHsNCiAgICAgICAgICAgICAgICAgICAg -U2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBoaW53ZWlzZSA9IEAoKSB9DQogICAgICAgICAg -ICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRv -ZmZlbiA9IEAoKQ0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRlaW50cmFnIGluIEAoJGguaGlu -d2Vpc2UpKSB7DQogICAgICAgICAgICAgICAgICAgICRpc3RFbXBmYWVuZ2VyID0gJGZhbHNlDQog -ICAgICAgICAgICAgICAgICAgICRpc3RHZWxlc2VuICAgID0gJGZhbHNlDQogICAgICAgICAgICAg -ICAgICAgIGZvcmVhY2ggKCRwIGluICRlaW50cmFnLmtlbm50bmlzbmFobWVuLlBTT2JqZWN0LlBy -b3BlcnRpZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUZXN0LU1hdGNoS2VubnVu -ZyAoW3N0cmluZ10kcC5OYW1lKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpc3RF -bXBmYWVuZ2VyID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwg -LW5lICRwLlZhbHVlKSB7ICRpc3RHZWxlc2VuID0gJHRydWUgfQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIGJyZWFrDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKCRpc3RFbXBmYWVuZ2VyIC1hbmQgLW5v -dCAkaXN0R2VsZXNlbikgeyAkb2ZmZW4gKz0gJGVpbnRyYWcgfQ0KICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IGhpbndlaXNlID0g -W29iamVjdFtdXSRvZmZlbiB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAg -IH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtbWF0Y2ggJ14vYXBpL2hpbndlaXNlLyhcZCspL2tl -bm50bmlzJCcgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICAkaGlu -d2Vpc0lkID0gW2ludF0kTWF0Y2hlc1sxXQ0KICAgICAgICAgICAgICAgICRyID0gR2V0LVJlY2h0 -ZQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICgkci5pc3RTdXBlclVzZXIgLW9yICRyLmlzdEdl -c2FtdHZlcmFudHdvcnRsaWNoKSkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRS -ZXNwb25zZSAnS2VpbmUgQmVyZWNodGlndW5nJyA0MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgICRzY3JpcHQ6aGlud2Vpc0tlbm50bmlzR2VzZXR6dCA9ICRm -YWxzZQ0KICAgICAgICAgICAgICAgICRzY3JpcHQ6aGlud2Vpc0tlbm50bmlzVHlwID0gJG51bGwN -CiAgICAgICAgICAgICAgICBJbnZva2UtV2l0aEZpbGVMb2NrICdoaW53ZWlzZS5qc29uJyB7DQog -ICAgICAgICAgICAgICAgICAgICRoID0gUmVhZC1Kc29uT2JqZWN0ICdoaW53ZWlzZS5qc29uJw0K -ICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRoIC1vciAtbm90ICRoLlBTT2JqZWN0 -LlByb3BlcnRpZXNbJ2hpbndlaXNlJ10pIHsgcmV0dXJuIH0NCiAgICAgICAgICAgICAgICAgICAg -Zm9yZWFjaCAoJGVpbnRyYWcgaW4gQCgkaC5oaW53ZWlzZSkpIHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgIGlmIChbaW50XSRlaW50cmFnLmlkIC1uZSAkaGlud2Vpc0lkKSB7IGNvbnRpbnVlIH0N -CiAgICAgICAgICAgICAgICAgICAgICAgICMgRXJzdCBkZW4gTWF0Y2gtU2xvdCBlcm1pdHRlbG4s -IGRhbm4gYXVzc2VyaGFsYiBkZXINCiAgICAgICAgICAgICAgICAgICAgICAgICMgUHJvcGVydHkt -RW51bWVyYXRpb24gaW4tcGxhY2Ugc2V0emVuIChQUyA1LjEgbWFnIGRhcw0KICAgICAgICAgICAg -ICAgICAgICAgICAgIyBNb2RpZml6aWVyZW4gd2FlaHJlbmQgZm9yZWFjaCBuaWNodCBpbW1lciku -DQogICAgICAgICAgICAgICAgICAgICAgICAkbWF0Y2hOYW1lID0gJG51bGwNCiAgICAgICAgICAg -ICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRlaW50cmFnLmtlbm50bmlzbmFobWVuLlBTT2Jq -ZWN0LlByb3BlcnRpZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVGVzdC1N -YXRjaEtlbm51bmcgKFtzdHJpbmddJHAuTmFtZSkpIHsgJG1hdGNoTmFtZSA9ICRwLk5hbWU7IGJy -ZWFrIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg -IGlmICgkbWF0Y2hOYW1lKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRzID0gKEdl -dC1EYXRlKS5Ub1VuaXZlcnNhbFRpbWUoKS5Ub1N0cmluZygneXl5eS1NTS1kZFRISDptbTpzc1on -KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlaW50cmFnLmtlbm50bmlzbmFobWVuIHwg -QWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkbWF0Y2hOYW1lIC1Ob3RlUHJvcGVydHlWYWx1 -ZSAkdHMgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjcmlwdDpoaW53ZWlz -S2VubnRuaXNHZXNldHp0ID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo -JGVpbnRyYWcuUFNPYmplY3QuUHJvcGVydGllc1sndHlwJ10pIHsgJHNjcmlwdDpoaW53ZWlzS2Vu -bnRuaXNUeXAgPSBbc3RyaW5nXSRlaW50cmFnLnR5cCB9DQogICAgICAgICAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgICAgIGlmICgkc2NyaXB0OmhpbndlaXNLZW5udG5pc0dlc2V0enQp -IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ2hpbndlaXNlLmpz -b24nICRoIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -IH0gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICRnZXNldHp0ID0gW2Jvb2xdJHNjcmlwdDpo -aW53ZWlzS2VubnRuaXNHZXNldHp0DQogICAgICAgICAgICAgICAgJGtlbm50bmlzVHlwID0gJHNj -cmlwdDpoaW53ZWlzS2VubnRuaXNUeXANCiAgICAgICAgICAgICAgICAkc2NyaXB0OmhpbndlaXNL -ZW5udG5pc0dlc2V0enQgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICAkc2NyaXB0OmhpbndlaXNL -ZW5udG5pc1R5cCA9ICRudWxsDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGdlc2V0enQpIHsN -CiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgIkhpbndlaXMgJGhpbndl -aXNJZCBuaWNodCBnZWZ1bmRlbiBvZGVyIG5pY2h0IGZ1ZXIgU2llIGJlc3RpbW10IiA0MDQ7IGNv -bnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRsb2dGZWxkZXIgPSBA -eyBoaW53ZWlzSWQgPSAkaGlud2Vpc0lkIH0NCiAgICAgICAgICAgICAgICBpZiAoJGtlbm50bmlz -VHlwKSB7ICRsb2dGZWxkZXJbJ3R5cCddID0gJGtlbm50bmlzVHlwIH0NCiAgICAgICAgICAgICAg -ICBXcml0ZS1Mb2dFaW50cmFnICdoaW53ZWlzLmtlbm50bmlzJyAkbG9nRmVsZGVyDQogICAgICAg -ICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAna2VubnRuaXNf -Z2VzZXR6dCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAg -ICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2hpbndlaXNlL3VlYmVyc2ljaHQnIC1hbmQgJE1l -dGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBl -clVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyJyA0MDM7IGNvbnRp -bnVlIH0NCiAgICAgICAgICAgICAgICBJbnZva2UtSGlud2Vpc1BydW5pbmcNCiAgICAgICAgICAg -ICAgICAkaCA9IFJlYWQtSnNvbk9iamVjdCAnaGlud2Vpc2UuanNvbicNCiAgICAgICAgICAgICAg -ICBpZiAoJG51bGwgLWVxICRoIC1vciAtbm90ICRoLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2hpbndl -aXNlJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBA -eyBoaW53ZWlzZSA9IEAoKSB9DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsg -aGlud2Vpc2UgPSBbb2JqZWN0W11dQCgkaC5oaW53ZWlzZSkgfQ0KICAgICAgICAgICAgICAgIGNv -bnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT0gTUlUVEVJTFVOR0VO -IChTcHJpbnQgRC0zYiwgMjAyNi0wNS0yOSkgPT09PT0NCiAgICAgICAgICAgICMgVm9tIFNVIG1h -bnVlbGwgZ2VwZmxlZ3RlcyBIaW53ZWlzLU1vZGFsLVN5c3RlbSAoc2VwYXJhdCB2b24NCiAgICAg -ICAgICAgICMgL2FwaS9oaW53ZWlzZSwgZGFzIGlzdCBudXIgZnVlciBTeXN0ZW0tRXJlaWduaXNz -ZSBTVS9HVikuDQogICAgICAgICAgICAjIFNjaGVtYSArIEZpbHRlcnVuZy1Mb2dpayBnZXNwaWVn -ZWx0IGF1cyBkZXYvc2VydmVyLnB5Og0KICAgICAgICAgICAgIyAgIF9taXR0ZWlsdW5nZW5fZnVl -cl9ha3R1ZWxsZW5fdXNlcigpIGJ6dy4gX3BlcnNvbl9hdXNfcGlkKCkuDQogICAgICAgICAgICBp -ZiAoJFBhdGggLWVxICcvYXBpL21pdHRlaWx1bmdlbicgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykg -ew0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgbWl0dGVpbHVu -Z2VuID0gKEdldC1NaXR0ZWlsdW5nZW5GdWVyQWt0dWVsbGVuVXNlcikgfQ0KICAgICAgICAgICAg -ICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcv -YXBpL21pdHRlaWx1bmdlbi9hbGxlJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAg -ICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRSZXNw -b25zZSAnTnVyIFN1cGVyVXNlcicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJG0g -PSBSZWFkLUpzb25PYmplY3QgJ21pdHRlaWx1bmdlbi5qc29uJw0KICAgICAgICAgICAgICAgICRs -aXN0ZSA9IEAoKQ0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJG0gLWFuZCAkbS5QU09i -amVjdC5Qcm9wZXJ0aWVzWydtaXR0ZWlsdW5nZW4nXSkgew0KICAgICAgICAgICAgICAgICAgICAk -bGlzdGUgPSBAKCRtLm1pdHRlaWx1bmdlbikNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBtaXR0ZWlsdW5nZW4gPSBbb2JqZWN0 -W11dJGxpc3RlIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9taXR0ZWlsdW5nZW4nIC1hbmQgJE1ldGhvZCAt -ZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2Vy -KSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnTnVyIFN1cGVyVXNlciBkdWVyZmVuIE1pdHRlaWx1 -bmdlbiBhbmxlZ2VuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkcmF3ID0gUmVh -ZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJHJhdykgeyBTZW5kLUVy -cm9yICRSZXNwb25zZSAnQm9keSBmZWhsdCcgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAg -ICAgdHJ5IHsgJGJvZHkgPSAkcmF3IHwgQ29udmVydEZyb20tSnNvbiB9IGNhdGNoIHsgU2VuZC1F -cnJvciAkUmVzcG9uc2UgJ1VuZ3VlbHRpZ2VzIEpTT04nIDQwMDsgY29udGludWUgfQ0KICAgICAg -ICAgICAgICAgICMgU2VydmVyLXNlaXRpZ2UgU2FuaXRpc2llcnVuZyAoU3RvcmVkLVhTUyk6IHRp -dGVsICsgdGV4dCB3ZXJkZW4NCiAgICAgICAgICAgICAgICAjIGltIENsaWVudCB2aWEgaW5uZXJI -VE1MIGdlcmVuZGVydC4NCiAgICAgICAgICAgICAgICAkdGl0ZWwgPSBDb252ZXJ0VG8tU2FmZVJp -Y2hIdG1sICgoW3N0cmluZ10oJGJvZHkudGl0ZWwpKS5UcmltKCkpDQogICAgICAgICAgICAgICAg -JHRleHQgID0gQ29udmVydFRvLVNhZmVSaWNoSHRtbCAoKFtzdHJpbmddKCRib2R5LnRleHQpKS5U -cmltKCkpDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJHRpdGVsKSB7IFNlbmQtRXJyb3IgJFJl -c3BvbnNlICdUaXRlbCBpc3QgUGZsaWNodGZlbGQnIDQwMDsgY29udGludWUgfQ0KICAgICAgICAg -ICAgICAgIGlmICgtbm90ICR0ZXh0KSAgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnVGV4dCBpc3Qg -UGZsaWNodGZlbGQnICA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkcmFuZCA9IC1q -b2luICgoNDguLjU3KSArICg5Ny4uMTIyKSB8IEdldC1SYW5kb20gLUNvdW50IDYgfCBGb3JFYWNo -LU9iamVjdCB7IFtjaGFyXSRfIH0pDQogICAgICAgICAgICAgICAgJG1zID0gW2ludDY0XShbRGF0 -ZVRpbWVPZmZzZXRdOjpVdGNOb3cuVG9Vbml4VGltZU1pbGxpc2Vjb25kcygpKQ0KICAgICAgICAg -ICAgICAgICRuZXVlSWQgPSAibV8ke21zfV8ke3JhbmR9Ig0KICAgICAgICAgICAgICAgICRlbXBm -RGVmYXVsdCA9IFtwc2N1c3RvbW9iamVjdF1Aew0KICAgICAgICAgICAgICAgICAgICBhbGxlID0g -JHRydWU7IHBlcnNvbmVuID0gQCgpOyBncnVwcGVuID0gQCgpOyByb2xsZW4gPSBAKCkNCiAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGVtcGYgPSBpZiAoJGJvZHkuUFNPYmplY3Qu -UHJvcGVydGllc1snZW1wZmFlbmdlciddKSB7ICRib2R5LmVtcGZhZW5nZXIgfSBlbHNlIHsgJGVt -cGZEZWZhdWx0IH0NCiAgICAgICAgICAgICAgICAkbmV1ID0gW3BzY3VzdG9tb2JqZWN0XUB7DQog -ICAgICAgICAgICAgICAgICAgIGlkICAgICAgICAgICA9ICRuZXVlSWQNCiAgICAgICAgICAgICAg -ICAgICAgdGl0ZWwgICAgICAgID0gJHRpdGVsDQogICAgICAgICAgICAgICAgICAgIHRleHQgICAg -ICAgICA9ICR0ZXh0DQogICAgICAgICAgICAgICAgICAgIHRodW1ibmFpbCAgICA9IGlmICgkYm9k -eS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0aHVtYm5haWwnXSkgeyAkYm9keS50aHVtYm5haWwgfSBl -bHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgICAgICBwZGYgICAgICAgICAgPSBpZiAoJGJv -ZHkuUFNPYmplY3QuUHJvcGVydGllc1sncGRmJ10pICAgICAgIHsgJGJvZHkucGRmIH0gICAgICAg -ZWxzZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlciAgICAgID0gaWYgKCRi -b2R5LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RyaWdnZXInXSAtYW5kICRib2R5LnRyaWdnZXIpIHsg -W3N0cmluZ10kYm9keS50cmlnZ2VyIH0gZWxzZSB7ICdlaW5tYWwnIH0NCiAgICAgICAgICAgICAg -ICAgICAgYmlzRGF0dW0gICAgID0gaWYgKCRib2R5LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2Jpc0Rh -dHVtJ10pICB7ICRib2R5LmJpc0RhdHVtIH0gIGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAg -ICAgICAgIGVtcGZhZW5nZXIgICA9ICRlbXBmDQogICAgICAgICAgICAgICAgICAgIGVyc3RlbGx0 -QW0gICA9IChHZXQtRGF0ZSkuVG9Vbml2ZXJzYWxUaW1lKCkuVG9TdHJpbmcoJ3l5eXktTU0tZGRU -SEg6bW06c3NaJykNCiAgICAgICAgICAgICAgICAgICAgZXJzdGVsbHRWb24gID0gKEdldC1Ba3R1 -ZWxsZXJCZW51dHplcikNCiAgICAgICAgICAgICAgICAgICAgZ2VhZW5kZXJ0QW0gID0gJG51bGwN -CiAgICAgICAgICAgICAgICAgICAgZ2VhZW5kZXJ0Vm9uID0gJG51bGwNCiAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgSW52b2tlLVdpdGhGaWxlTG9jayAnbWl0dGVpbHVuZ2VuLmpz -b24nIHsNCiAgICAgICAgICAgICAgICAgICAgJG0gPSBSZWFkLUpzb25PYmplY3QgJ21pdHRlaWx1 -bmdlbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRtKSB7ICRtID0g -W3BzY3VzdG9tb2JqZWN0XUB7IG1pdHRlaWx1bmdlbiA9IEAoKTsgZ2VsZXNlbiA9IFtwc2N1c3Rv -bW9iamVjdF1Ae30gfSB9DQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRtLlBTT2JqZWN0 -LlByb3BlcnRpZXNbJ21pdHRlaWx1bmdlbiddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAk -bSB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgbWl0dGVpbHVuZ2VuIC1Ob3RlUHJvcGVy -dHlWYWx1ZSBAKCkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICAgICAgaWYgKC1ub3QgJG0uUFNPYmplY3QuUHJvcGVydGllc1snZ2VsZXNlbiddKSB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAkbSB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgZ2Vs -ZXNlbiAtTm90ZVByb3BlcnR5VmFsdWUgKFtwc2N1c3RvbW9iamVjdF1Ae30pIC1Gb3JjZQ0KICAg -ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICMgbmV1ZXN0ZSBvYmVuDQog -ICAgICAgICAgICAgICAgICAgICRtLm1pdHRlaWx1bmdlbiA9IEAoJG5ldSkgKyBAKCRtLm1pdHRl -aWx1bmdlbikNCiAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnbWl0dGVpbHVu -Z2VuLmpzb24nICRtIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICB9IHwgT3V0LU51bGwNCiAg -ICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdtaXR0ZWlsdW5nLmFuZ2VsZWd0JyBAeyBp -ZCA9ICRuZXVlSWQ7IHRpdGVsID0gJHRpdGVsIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25P -YmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdhbmdlbGVndCc7IG1pdHRlaWx1bmcgPSAkbmV1 -IH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -aWYgKCRQYXRoIC1tYXRjaCAnXi9hcGkvbWl0dGVpbHVuZ2VuLyhbXHctXSspJCcgLWFuZCAkTWV0 -aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVy -VXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051ciBTdXBlclVzZXInIDQwMzsgY29udGlu -dWUgfQ0KICAgICAgICAgICAgICAgICRtaWQgPSAkTWF0Y2hlc1sxXQ0KICAgICAgICAgICAgICAg -ICRyYXcgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcmF3 -KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdCb2R5IGZlaGx0JyA0MDA7IGNvbnRpbnVlIH0NCiAg -ICAgICAgICAgICAgICB0cnkgeyAkYm9keSA9ICRyYXcgfCBDb252ZXJ0RnJvbS1Kc29uIH0gY2F0 -Y2ggeyBTZW5kLUVycm9yICRSZXNwb25zZSAnVW5ndWVsdGlnZXMgSlNPTicgNDAwOyBjb250aW51 -ZSB9DQogICAgICAgICAgICAgICAgJHNjcmlwdDptaXR0ZWlsdW5nR2VmdW5kZW4gPSAkZmFsc2UN -CiAgICAgICAgICAgICAgICAkc2NyaXB0Om1pdHRlaWx1bmdaaWVsID0gJG51bGwNCiAgICAgICAg -ICAgICAgICBJbnZva2UtV2l0aEZpbGVMb2NrICdtaXR0ZWlsdW5nZW4uanNvbicgew0KICAgICAg -ICAgICAgICAgICAgICAkbSA9IFJlYWQtSnNvbk9iamVjdCAnbWl0dGVpbHVuZ2VuLmpzb24nDQog -ICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJG0gLW9yIC1ub3QgJG0uUFNPYmplY3Qu -UHJvcGVydGllc1snbWl0dGVpbHVuZ2VuJ10pIHsgcmV0dXJuIH0NCiAgICAgICAgICAgICAgICAg -ICAgZm9yZWFjaCAoJGVpbnRyYWcgaW4gQCgkbS5taXR0ZWlsdW5nZW4pKSB7DQogICAgICAgICAg -ICAgICAgICAgICAgICBpZiAoW3N0cmluZ10kZWludHJhZy5pZCAtbmUgJG1pZCkgeyBjb250aW51 -ZSB9DQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZmVsZCBpbiAndGl0ZWwnLCd0 -ZXh0JywndGh1bWJuYWlsJywncGRmJywndHJpZ2dlcicsJ2Jpc0RhdHVtJywnZW1wZmFlbmdlcicp -IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGJvZHkuUFNPYmplY3QuUHJvcGVy -dGllc1skZmVsZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdlcnQgPSAk -Ym9keS4kZmVsZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCRmZWxkIC1l -cSAndGl0ZWwnIC1vciAkZmVsZCAtZXEgJ3RleHQnKSAtYW5kICgkd2VydCAtaXMgW3N0cmluZ10p -KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkd2VydCA9IENvbnZlcnRU -by1TYWZlUmljaEh0bWwgJHdlcnQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZWludHJhZyB8IEFkZC1NZW1iZXIgLU5v -dGVQcm9wZXJ0eU5hbWUgJGZlbGQgLU5vdGVQcm9wZXJ0eVZhbHVlICR3ZXJ0IC1Gb3JjZQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAg -ICAgICAgICAgICAgICAgICAgICAgICRlaW50cmFnIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5 -TmFtZSBnZWFlbmRlcnRBbSAgLU5vdGVQcm9wZXJ0eVZhbHVlICgoR2V0LURhdGUpLlRvVW5pdmVy -c2FsVGltZSgpLlRvU3RyaW5nKCd5eXl5LU1NLWRkVEhIOm1tOnNzWicpKSAtRm9yY2UNCiAgICAg -ICAgICAgICAgICAgICAgICAgICRlaW50cmFnIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFt -ZSBnZWFlbmRlcnRWb24gLU5vdGVQcm9wZXJ0eVZhbHVlIChHZXQtQWt0dWVsbGVyQmVudXR6ZXIp -IC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHNjcmlwdDptaXR0ZWlsdW5nR2VmdW5k -ZW4gPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHNjcmlwdDptaXR0ZWlsdW5nWmll -bCA9ICRlaW50cmFnDQogICAgICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmICgkc2NyaXB0Om1pdHRlaWx1bmdHZWZ1 -bmRlbikgeyBXcml0ZS1Kc29uT2JqZWN0ICdtaXR0ZWlsdW5nZW4uanNvbicgJG0gfCBPdXQtTnVs -bCB9DQogICAgICAgICAgICAgICAgfSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgaWYgKC1u -b3QgJHNjcmlwdDptaXR0ZWlsdW5nR2VmdW5kZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgU2Vu -ZC1FcnJvciAkUmVzcG9uc2UgIk1pdHRlaWx1bmcgJG1pZCBuaWNodCBnZWZ1bmRlbiIgNDA0OyBj -b250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkemllbCA9ICRzY3Jp -cHQ6bWl0dGVpbHVuZ1ppZWwNCiAgICAgICAgICAgICAgICAkc2NyaXB0Om1pdHRlaWx1bmdHZWZ1 -bmRlbiA9ICRmYWxzZTsgJHNjcmlwdDptaXR0ZWlsdW5nWmllbCA9ICRudWxsDQogICAgICAgICAg -ICAgICAgV3JpdGUtTG9nRWludHJhZyAnbWl0dGVpbHVuZy5nZWFlbmRlcnQnIEB7IGlkID0gJG1p -ZCB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMg -PSAnZ2VhZW5kZXJ0JzsgbWl0dGVpbHVuZyA9ICR6aWVsIH0NCiAgICAgICAgICAgICAgICBjb250 -aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1tYXRjaCAnXi9hcGkv -bWl0dGVpbHVuZ2VuLyhbXHctXSspJCcgLWFuZCAkTWV0aG9kIC1lcSAnREVMRVRFJykgew0KICAg -ICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAk -UmVzcG9uc2UgJ051ciBTdXBlclVzZXInIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg -ICRtaWQgPSAkTWF0Y2hlc1sxXQ0KICAgICAgICAgICAgICAgICRzY3JpcHQ6bWl0dGVpbHVuZ0dl -bG9lc2NodCA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxvY2sgJ21p -dHRlaWx1bmdlbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICRtID0gUmVhZC1Kc29uT2Jq -ZWN0ICdtaXR0ZWlsdW5nZW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1l -cSAkbSAtb3IgLW5vdCAkbS5QU09iamVjdC5Qcm9wZXJ0aWVzWydtaXR0ZWlsdW5nZW4nXSkgeyBy -ZXR1cm4gfQ0KICAgICAgICAgICAgICAgICAgICAkdm9yaGVyID0gQCgkbS5taXR0ZWlsdW5nZW4p -DQogICAgICAgICAgICAgICAgICAgICRuYWNoaGVyID0gQCgkdm9yaGVyIHwgV2hlcmUtT2JqZWN0 -IHsgW3N0cmluZ10kXy5pZCAtbmUgJG1pZCB9KQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJHZv -cmhlci5Db3VudCAtZXEgJG5hY2hoZXIuQ291bnQpIHsgcmV0dXJuIH0NCiAgICAgICAgICAgICAg -ICAgICAgJG0ubWl0dGVpbHVuZ2VuID0gJG5hY2hoZXINCiAgICAgICAgICAgICAgICAgICAgIyBn -ZWxlc2VuLUVpbnRyYWVnZSBmdWVyIGRpZXNlIE1pdHRlaWx1bmcgYXVmcmFldW1lbg0KICAgICAg -ICAgICAgICAgICAgICBpZiAoJG0uUFNPYmplY3QuUHJvcGVydGllc1snZ2VsZXNlbiddKSB7DQog -ICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcCBpbiBAKCRtLmdlbGVzZW4uUFNPYmpl -Y3QuUHJvcGVydGllcykpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHAuVmFs -dWUuUFNPYmplY3QuUHJvcGVydGllc1skbWlkXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAkcC5WYWx1ZS5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgkbWlkKQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdt -aXR0ZWlsdW5nZW4uanNvbicgJG0gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAkc2Ny -aXB0Om1pdHRlaWx1bmdHZWxvZXNjaHQgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgIH0gfCBPdXQt -TnVsbA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRzY3JpcHQ6bWl0dGVpbHVuZ0dlbG9lc2No -dCkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAiTWl0dGVpbHVu -ZyAkbWlkIG5pY2h0IGdlZnVuZGVuIiA0MDQ7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0K -ICAgICAgICAgICAgICAgICRzY3JpcHQ6bWl0dGVpbHVuZ0dlbG9lc2NodCA9ICRmYWxzZQ0KICAg -ICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ21pdHRlaWx1bmcuZ2Vsb2VzY2h0JyBAeyBp -ZCA9ICRtaWQgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsg -c3RhdHVzID0gJ2dlbG9lc2NodCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAg -ICAgICB9DQogICAgICAgICAgICAjIFBPU1QgL2FwaS9taXR0ZWlsdW5nZW4vdXBsb2FkIOKAlCBT -VS1vbmx5LCBCaWxkICgyIE1CKSBvZGVyIFBERiAoMTAgTUIpDQogICAgICAgICAgICAjIEJvZHk6 -IHsiYXJ0IjogImJpbGQifCJwZGYiLCAiZGF0ZWluYW1lIjogIngucG5nIiwgImRhdGFVcmwiOiAi -ZGF0YTouLi4ifQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9taXR0ZWlsdW5nZW4v -dXBsb2FkJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgIGlmICgt -bm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051ciBTdXBl -clVzZXIgZHVlcmZlbiBNaXR0ZWlsdW5ncy1BbmhhZW5nZSBob2NobGFkZW4nIDQwMzsgY29udGlu -dWUgfQ0KICAgICAgICAgICAgICAgICMgMTQgTUIgTWF4U2l6ZSwgd2VpbCAxME1CIFBERiBiYXNl -NjQtY29kaWVydCB+MTMuNCBNQiBQYXlsb2FkIHdpcmQNCiAgICAgICAgICAgICAgICAkcmF3ID0g -UmVhZC1Cb2R5ICRSZXF1ZXN0IC1NYXhTaXplIDE0TUINCiAgICAgICAgICAgICAgICBpZiAoLW5v -dCAkcmF3KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzIChtYXggMTQg -TUIpJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICB0cnkgeyAkYm9keSA9ICRyYXcg -fCBDb252ZXJ0RnJvbS1Kc29uIH0gY2F0Y2ggeyBTZW5kLUVycm9yICRSZXNwb25zZSAnVW5ndWVs -dGlnZXMgSlNPTicgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGFydCA9IChbc3Ry -aW5nXSRib2R5LmFydCkuVG9Mb3dlcigpDQogICAgICAgICAgICAgICAgJGRhdGFVcmwgPSBbc3Ry -aW5nXSRib2R5LmRhdGFVcmwNCiAgICAgICAgICAgICAgICBpZiAoJGFydCAtbmUgJ2JpbGQnIC1h -bmQgJGFydCAtbmUgJ3BkZicpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVz -cG9uc2UgJ2FydCBtdXNzICJiaWxkIiBvZGVyICJwZGYiIHNlaW4nIDQwMDsgY29udGludWUNCiAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGV4dCA9ICRudWxsOyAkbWF4Qnl0ZXMg -PSAwDQogICAgICAgICAgICAgICAgaWYgKCRhcnQgLWVxICdiaWxkJykgew0KICAgICAgICAgICAg -ICAgICAgICBpZiAoJGRhdGFVcmwgLW1hdGNoICdeZGF0YTppbWFnZS8oanBlZ3xqcGd8cG5nfHdl -YnApO2Jhc2U2NCwnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkZXh0ID0gKCRNYXRjaGVz -WzFdIC1yZXBsYWNlICdqcGVnJywnanBnJykNCiAgICAgICAgICAgICAgICAgICAgICAgICRtYXhC -eXRlcyA9IDIgKiAxMDI0ICogMTAyNA0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAg -ICAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0JpbGQ6IGVyd2FydGV0 -IGRhdGE6aW1hZ2UvKGpwZWd8cG5nfHdlYnApO2Jhc2U2NCwuLi4nIDQwMDsgY29udGludWUNCiAg -ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAg -ICAgICAgICAgIGlmICgkZGF0YVVybCAtbGlrZSAnZGF0YTphcHBsaWNhdGlvbi9wZGY7YmFzZTY0 -LConKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkZXh0ID0gJ3BkZicNCiAgICAgICAgICAg -ICAgICAgICAgICAgICRtYXhCeXRlcyA9IDEwICogMTAyNCAqIDEwMjQNCiAgICAgICAgICAgICAg -ICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3Bv -bnNlICdQREY6IGVyd2FydGV0IGRhdGE6YXBwbGljYXRpb24vcGRmO2Jhc2U2NCwuLi4nIDQwMDsg -Y29udGludWUNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICAkYmFzZTY0ID0gJGRhdGFVcmwgLXJlcGxhY2UgJ15kYXRhOlteO10rO2Jhc2U2 -NCwnLCAnJw0KICAgICAgICAgICAgICAgIHRyeSB7ICRieXRlcyA9IFtTeXN0ZW0uQ29udmVydF06 -OkZyb21CYXNlNjRTdHJpbmcoJGJhc2U2NCkgfQ0KICAgICAgICAgICAgICAgIGNhdGNoIHsgU2Vu -ZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3VlbHRpZ2UgYmFzZTY0LURhdGVuJyA0MDA7IGNvbnRpbnVl -IH0NCiAgICAgICAgICAgICAgICBpZiAoJGJ5dGVzLkxlbmd0aCAtZ3QgJG1heEJ5dGVzKSB7DQog -ICAgICAgICAgICAgICAgICAgICRsaW1pdEtiID0gW2ludF0oJG1heEJ5dGVzIC8gMTAyNCkNCiAg -ICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgIiRhcnQgenUgZ3Jvc3MgKG1h -eCAkbGltaXRLYiBLQikiIDQxMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgJHVwbG9hZERpciA9IEpvaW4tUGF0aCAkRGF0YURpciAndXBsb2FkcycgfCBKb2lu -LVBhdGggLUNoaWxkUGF0aCAnbWl0dGVpbHVuZ2VuJw0KICAgICAgICAgICAgICAgIGlmICgtbm90 -IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICR1cGxvYWREaXIpKSB7DQogICAgICAgICAgICAgICAg -ICAgIHRyeSB7IE5ldy1JdGVtIC1JdGVtVHlwZSBEaXJlY3RvcnkgLVBhdGggJHVwbG9hZERpciAt -Rm9yY2UgfCBPdXQtTnVsbCB9IGNhdGNoIHt9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAg -ICAgICAgICRyYW5kID0gLWpvaW4gKCg0OC4uNTcpICsgKDk3Li4xMjIpIHwgR2V0LVJhbmRvbSAt -Q291bnQgNiB8IEZvckVhY2gtT2JqZWN0IHsgW2NoYXJdJF8gfSkNCiAgICAgICAgICAgICAgICAk -bXMgPSBbaW50NjRdKFtEYXRlVGltZU9mZnNldF06OlV0Y05vdy5Ub1VuaXhUaW1lTWlsbGlzZWNv -bmRzKCkpDQogICAgICAgICAgICAgICAgJGZpbGVuYW1lID0gIm1fJHttc31fJHtyYW5kfS4kZXh0 -Ig0KICAgICAgICAgICAgICAgICR6aWVsUGZhZCA9IEpvaW4tUGF0aCAkdXBsb2FkRGlyICRmaWxl -bmFtZQ0KICAgICAgICAgICAgICAgIFtTeXN0ZW0uSU8uRmlsZV06OldyaXRlQWxsQnl0ZXMoJHpp -ZWxQZmFkLCAkYnl0ZXMpDQogICAgICAgICAgICAgICAgIyBLZWluZSBBQ0wtUmVzdHJpY3Rpb246 -IFVwbG9hZHMgc2luZCBmdWVyIGRpZSBFbXBmYWVuZ2VyLQ0KICAgICAgICAgICAgICAgICMgR3J1 -cHBlIChtYW51ZWxsIHZvbSBTVSB2ZXJ0ZWlsdCkgZ2VkYWNodCwgbmljaHQgZ2VoZWltLg0KICAg -ICAgICAgICAgICAgICRyZWxQZmFkID0gIi9kYXRhL3VwbG9hZHMvbWl0dGVpbHVuZ2VuLyRmaWxl -bmFtZSINCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdtaXR0ZWlsdW5nLnVwbG9h -ZCcgQHsgYXJ0ID0gJGFydDsgZGF0ZWkgPSAkZmlsZW5hbWU7IGJ5dGVzID0gJGJ5dGVzLkxlbmd0 -aCB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMg -PSAnb2snOyBwZmFkID0gJHJlbFBmYWQ7IGJ5dGVzID0gJGJ5dGVzLkxlbmd0aCB9DQogICAgICAg -ICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKCRQYXRo -IC1tYXRjaCAnXi9hcGkvbWl0dGVpbHVuZ2VuLyhbXHctXSspL2tlbm50bmlzJCcgLWFuZCAkTWV0 -aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICAkbWlkID0gJE1hdGNoZXNbMV0NCiAg -ICAgICAgICAgICAgICAkciA9IEdldC1SZWNodGUNCiAgICAgICAgICAgICAgICAkcGlkID0gJHIu -bWVpbmVQZXJzb25JZA0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJHBpZCkgeyBTZW5k -LUVycm9yICRSZXNwb25zZSAnS2VpbmUgUGVyc29uIHp1Z2VvcmRuZXQnIDQwMzsgY29udGludWUg -fQ0KICAgICAgICAgICAgICAgICRzY3JpcHQ6bWl0dGVpbHVuZ0tlbm50bmlzT0sgPSAkZmFsc2UN -CiAgICAgICAgICAgICAgICBJbnZva2UtV2l0aEZpbGVMb2NrICdtaXR0ZWlsdW5nZW4uanNvbicg -ew0KICAgICAgICAgICAgICAgICAgICAkbSA9IFJlYWQtSnNvbk9iamVjdCAnbWl0dGVpbHVuZ2Vu -Lmpzb24nDQogICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJG0gLW9yIC1ub3QgJG0u -UFNPYmplY3QuUHJvcGVydGllc1snbWl0dGVpbHVuZ2VuJ10pIHsgcmV0dXJuIH0NCiAgICAgICAg -ICAgICAgICAgICAgJGV4aXN0aWVydCA9IEAoJG0ubWl0dGVpbHVuZ2VuIHwgV2hlcmUtT2JqZWN0 -IHsgW3N0cmluZ10kXy5pZCAtZXEgJG1pZCB9KS5Db3VudCAtZ3QgMA0KICAgICAgICAgICAgICAg -ICAgICBpZiAoLW5vdCAkZXhpc3RpZXJ0KSB7IHJldHVybiB9DQogICAgICAgICAgICAgICAgICAg -IGlmICgtbm90ICRtLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2dlbGVzZW4nXSkgew0KICAgICAgICAg -ICAgICAgICAgICAgICAgJG0gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lIGdlbGVzZW4g -LU5vdGVQcm9wZXJ0eVZhbHVlIChbcHNjdXN0b21vYmplY3RdQHt9KSAtRm9yY2UNCiAgICAgICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkcGlkU3RyID0gW3N0cmluZ10kcGlk -DQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRtLmdlbGVzZW4uUFNPYmplY3QuUHJvcGVy -dGllc1skcGlkU3RyXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG0uZ2VsZXNlbiB8IEFk -ZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJHBpZFN0ciAtTm90ZVByb3BlcnR5VmFsdWUgKFtw -c2N1c3RvbW9iamVjdF1Ae30pIC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgICAgICRoZXV0ZSA9IChHZXQtRGF0ZSkuVG9TdHJpbmcoJ3l5eXktTU0tZGQnKQ0K -ICAgICAgICAgICAgICAgICAgICAkbS5nZWxlc2VuLiRwaWRTdHIgfCBBZGQtTWVtYmVyIC1Ob3Rl -UHJvcGVydHlOYW1lICRtaWQgLU5vdGVQcm9wZXJ0eVZhbHVlICRoZXV0ZSAtRm9yY2UNCiAgICAg -ICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnbWl0dGVpbHVuZ2VuLmpzb24nICRtIHwg -T3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgJHNjcmlwdDptaXR0ZWlsdW5nS2VubnRuaXNP -SyA9ICR0cnVlDQogICAgICAgICAgICAgICAgfSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAg -aWYgKC1ub3QgJHNjcmlwdDptaXR0ZWlsdW5nS2VubnRuaXNPSykgew0KICAgICAgICAgICAgICAg -ICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAiTWl0dGVpbHVuZyAkbWlkIG5pY2h0IGdlZnVuZGVu -IiA0MDQ7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRzY3Jp -cHQ6bWl0dGVpbHVuZ0tlbm50bmlzT0sgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICBTZW5kLUpz -b25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdrZW5udG5pc19nZXNldHp0JyB9DQogICAg -ICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09 -PSBCQUNLVVBTID09PT09DQogICAgICAgICAgICAjIEJhY2t1cC1OYW1pbmcgKGdldGFybnQsIGlu -IGRhdGEvY2FjaGUvKToNCiAgICAgICAgICAgICMgLSBzbmFwXzx0cz4uYmFrICA9IEJ1bmRsZSAo -cGxhbnVuZythZG1pbikgLS0gbWFudWVsbGUgQmFja3VwcyArIFNpY2hlcnVuZ2VuDQogICAgICAg -ICAgICAjICAgICAgICAgICAgICAgICAgICB2b3IgV2llZGVyaGVyc3RlbGx1bmcNCiAgICAgICAg -ICAgICMgLSBsZWdfPHRzPi5iYWsgICA9IE51ciBQbGFudW5nIC0tIExlZ2FjeS1CYWNrdXBzICsg -QXV0by1TaWNoZXJ1bmdlbg0KICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgdm9yIFJl -c2V0L0R1bW15ZGF0ZW4NCiAgICAgICAgICAgICMgLSBjZmdfPHRzPl88aGlud2Vpcz4uYmFrID0g -YWRtaW4uanNvbi1BdXRvLUJhY2t1cHMgKEJhY2t1cC1BZG1pbkpzb24pDQogICAgICAgICAgICBp -ZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvYmFja3VwJyAtYW5kICRNZXRob2QgLWVxICdQT1NU -Jykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURhcmZCZXJlaWNoICdiYWNrdXBz -JykpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRpZ3VuZyAoQmFja3Vwcykn -IDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRwbGFudW5nUGF0aCA9IEpvaW4tUGF0 -aCAkRGF0YURpciAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0 -LVBhdGggLUxpdGVyYWxQYXRoICRwbGFudW5nUGF0aCkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2Ug -J1BsYW51bmcgbmljaHQgZ2VmdW5kZW4nIDQwNDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg -ICRwbGFudW5nT2JqID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAg -ICAgICAgJGFkbWluT2JqICAgPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAg -ICAgICAgICAgaWYgKCRudWxsIC1lcSAkYWRtaW5PYmopIHsgJGFkbWluT2JqID0gTmV3LU9iamVj -dCBQU09iamVjdCB9DQogICAgICAgICAgICAgICAgJHRzID0gR2V0LURhdGUgLUZvcm1hdCAneXl5 -eU1NZGRfSEhtbXNzJw0KICAgICAgICAgICAgICAgICRibmFtZSA9ICJzbmFwXyR0cy5iYWsiDQog -ICAgICAgICAgICAgICAgJGJ1bmRsZSA9IFtvcmRlcmVkXUB7DQogICAgICAgICAgICAgICAgICAg -IGZvcm1hdCAgPSAndmkzLWJhY2t1cC12MScNCiAgICAgICAgICAgICAgICAgICAgdHMgICAgICA9 -ICR0cw0KICAgICAgICAgICAgICAgICAgICBwbGFudW5nID0gJHBsYW51bmdPYmoNCiAgICAgICAg -ICAgICAgICAgICAgYWRtaW4gICA9ICRhZG1pbk9iag0KICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICAkanNvbiA9ICRidW5kbGUgfCBDb252ZXJ0VG8tSnNvbiAtRGVwdGggMzANCiAg -ICAgICAgICAgICAgICAkY2FjaGVEaXIgPSBKb2luLVBhdGggJERhdGFEaXIgJ2NhY2hlJw0KICAg -ICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRjYWNoZURpcikp -IHsgTmV3LUl0ZW0gLUl0ZW1UeXBlIERpcmVjdG9yeSAtUGF0aCAkY2FjaGVEaXIgLUZvcmNlIHwg -T3V0LU51bGwgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUJhY2t1cEJ5dGVzIChKb2luLVBhdGgg -JGNhY2hlRGlyICRibmFtZSkgJGpzb24NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFn -ICdiYWNrdXAuZXJzdGVsbHQnIEB7IGRhdGVpbmFtZSA9ICRibmFtZTsgaW5oYWx0ID0gJ3BsYW51 -bmcrYWRtaW4nIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7 -IHN0YXR1cyA9ICdlcnN0ZWxsdCc7IGRhdGVpbmFtZSA9ICRibmFtZSB9DQogICAgICAgICAgICAg -ICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9h -cGkvcGxhbnVuZy9iYWNrdXBzJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAg -ICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVpY2ggJ2JhY2t1cHMnKSkgeyBTZW5kLUVycm9y -ICRSZXNwb25zZSAnS2VpbmUgQmVyZWNodGlndW5nIChCYWNrdXBzKScgNDAzOyBjb250aW51ZSB9 -DQogICAgICAgICAgICAgICAgJGVpbnRyYWVnZSA9IEAoKQ0KICAgICAgICAgICAgICAgICRjYWNo -ZURpciA9IEpvaW4tUGF0aCAkRGF0YURpciAnY2FjaGUnDQogICAgICAgICAgICAgICAgaWYgKFRl -c3QtUGF0aCAtTGl0ZXJhbFBhdGggJGNhY2hlRGlyKSB7DQogICAgICAgICAgICAgICAgICAgIGZv -cmVhY2ggKCRtdXN0ZXIgaW4gJ3NuYXBfKi5iYWsnLCdsZWdfKi5iYWsnKSB7DQogICAgICAgICAg -ICAgICAgICAgICAgICBHZXQtQ2hpbGRJdGVtIC1MaXRlcmFsUGF0aCAkY2FjaGVEaXIgLUZpbHRl -ciAkbXVzdGVyIC1GaWxlIC1FcnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlIHwgRm9yRWFjaC1P -YmplY3Qgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuYW1lID0gJF8uTmFtZQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICR0eXAgPSBpZiAoJG5hbWUgLW1hdGNoICdfdm9yX2R1 -bW15XycpIHsgJ3ZvciBEdW1teWRhdGVuJyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICBlbHNlaWYgKCRuYW1lIC1tYXRjaCAnX3Zvcl9yZXNldF8nKSB7ICd2b3IgUmVzZXQnIH0N -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZiAoJG5hbWUgLW1hdGNoICdf -dm9yX3dpZWRlcmhlcnN0ZWxsdW5nXycpIHsgJ3ZvciBXaWVkZXJoZXJzdGVsbHVuZycgfQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICdtYW51ZWxsJyB9DQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgJGJ1bmRsZSA9ICRuYW1lLlN0YXJ0c1dpdGgoJ3NuYXBfJykN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZWludHJhZWdlICs9IFtvcmRlcmVkXUB7DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVpbmFtZSAgID0gJG5hbWUNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvZXNzZSAgICAgPSAkXy5MZW5ndGgNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJzdGVsbHRBbSAgPSAkXy5MYXN0V3JpdGVUaW1l -LlRvU3RyaW5nKCdzJykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwICAgICAg -ICAgPSAkdHlwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGFsdCAgICAgID0g -aWYgKCRidW5kbGUpIHsgJ0tvbXBsZXR0IChQbGFudW5nICsgQWRtaW4pJyB9IGVsc2UgeyAnTnVy -IFBsYW51bmcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXN0QnVuZGxlICAg -PSAkYnVuZGxlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgICRlaW50cmFlZ2UgPSBAKCRlaW50cmFlZ2UgfCBTb3J0LU9iamVjdCAtUHJv -cGVydHkgZXJzdGVsbHRBbSAtRGVzY2VuZGluZykNCiAgICAgICAgICAgICAgICBTZW5kLUpzb25P -YmplY3QgJFJlc3BvbnNlICRlaW50cmFlZ2UNCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1tYXRjaCAnXi9hcGkvcGxhbnVuZy9i -YWNrdXAvZG93bmxvYWQvKC4rKSQnIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAg -ICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJmQmVyZWljaCAnYmFja3VwcycpKSB7IFNlbmQtRXJy -b3IgJFJlc3BvbnNlICdLZWluZSBCZXJlY2h0aWd1bmcgKEJhY2t1cHMpJyA0MDM7IGNvbnRpbnVl -IH0NCiAgICAgICAgICAgICAgICAkbmFtZSA9ICRNYXRjaGVzWzFdDQogICAgICAgICAgICAgICAg -aWYgKC1ub3QgKCRuYW1lIC1tYXRjaCAnXihzbmFwX3xsZWdfKVswLTlfYS16QS1aXStcLmJhayQn -KSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnVW5ndWVsdGlnZXIgRGF0ZWluYW1lJyA0MDA7IGNv -bnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkZnAgPSBKb2luLVBhdGggJERhdGFEaXIgKCdjYWNo -ZS8nICsgJG5hbWUpDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtUGF0aCAtTGl0ZXJh -bFBhdGggJGZwKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQmFja3VwIG5pY2h0IGdlZnVuZGVu -JyA0MDQ7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAka2xhcnRleHQgPSBSZWFkLUJhY2t1 -cFRleHQgJGZwDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAka2xhcnRleHQpIHsgU2Vu -ZC1FcnJvciAkUmVzcG9uc2UgJ0JhY2t1cC1EYXRlaSBrb25udGUgbmljaHQgZ2VsZXNlbiB3ZXJk -ZW4nIDUwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRieXRlcyA9IFtTeXN0ZW0uVGV4 -dC5FbmNvZGluZ106OlVURjguR2V0Qnl0ZXMoJGtsYXJ0ZXh0KQ0KICAgICAgICAgICAgICAgICRS -ZXNwb25zZS5TdGF0dXNDb2RlID0gMjAwDQogICAgICAgICAgICAgICAgJFJlc3BvbnNlLkNvbnRl -bnRUeXBlID0gJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnDQogICAgICAgICAgICAg -ICAgQWRkLVNlY3VyaXR5SGVhZGVycyAkUmVzcG9uc2UNCiAgICAgICAgICAgICAgICAkUmVzcG9u -c2UuSGVhZGVycy5BZGQoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAiYXR0YWNobWVudDsgZmlsZW5h -bWU9YCIkbmFtZWAiIikNCiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuQ29udGVudExlbmd0aDY0 -ID0gJGJ5dGVzLkxlbmd0aA0KICAgICAgICAgICAgICAgICRSZXNwb25zZS5PdXRwdXRTdHJlYW0u -V3JpdGUoJGJ5dGVzLCAwLCAkYnl0ZXMuTGVuZ3RoKQ0KICAgICAgICAgICAgICAgICRSZXNwb25z -ZS5PdXRwdXRTdHJlYW0uQ2xvc2UoKQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAg -ICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvYmFja3VwL3dp -ZWRlcmhlcnN0ZWxsZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAg -ICAgaWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVpY2ggJ2JhY2t1cHMnKSkgeyBTZW5kLUVycm9yICRS -ZXNwb25zZSAnS2VpbmUgQmVyZWNodGlndW5nIChCYWNrdXBzKScgNDAzOyBjb250aW51ZSB9DQog -ICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAg -ICAkZGF0ZW4gPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkbmFt -ZSA9ICIkKCRkYXRlbi5kYXRlaW5hbWUpIg0KICAgICAgICAgICAgICAgIGlmICgtbm90ICgkbmFt -ZSAtbWF0Y2ggJ14oc25hcF98bGVnXylbMC05X2EtekEtWl0rXC5iYWskJykpIHsgU2VuZC1FcnJv -ciAkUmVzcG9uc2UgJ1VuZ3VlbHRpZ2VyIERhdGVpbmFtZScgNDAwOyBjb250aW51ZSB9DQogICAg -ICAgICAgICAgICAgJGNhY2hlRGlyID0gSm9pbi1QYXRoICREYXRhRGlyICdjYWNoZScNCiAgICAg -ICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkY2FjaGVEaXIpKSB7 -IE5ldy1JdGVtIC1JdGVtVHlwZSBEaXJlY3RvcnkgLVBhdGggJGNhY2hlRGlyIC1Gb3JjZSB8IE91 -dC1OdWxsIH0NCiAgICAgICAgICAgICAgICAkcXVlbGwgPSBKb2luLVBhdGggJGNhY2hlRGlyICRu -YW1lDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHF1 -ZWxsKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQmFja3VwIG5pY2h0IGdlZnVuZGVuJyA0MDQ7 -IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkdHMgPSBHZXQtRGF0ZSAtRm9ybWF0ICd5eXl5 -TU1kZF9ISG1tc3MnDQogICAgICAgICAgICAgICAgJHNpY2hlciA9ICJzbmFwX3Zvcl93aWVkZXJo -ZXJzdGVsbHVuZ18kdHMuYmFrIg0KICAgICAgICAgICAgICAgICMgU2ljaGVyaGVpdHMtQnVuZGxl -IGRlciBha3R1ZWxsZW4gRGF0ZW4gdm9yIFVlYmVyc2NocmVpYmVuLg0KICAgICAgICAgICAgICAg -ICRzaWNoZXJCdW5kbGUgPSBbb3JkZXJlZF1Aew0KICAgICAgICAgICAgICAgICAgICBmb3JtYXQg -ID0gJ3ZpMy1iYWNrdXAtdjEnDQogICAgICAgICAgICAgICAgICAgIHRzICAgICAgPSAkdHMNCiAg -ICAgICAgICAgICAgICAgICAgcGxhbnVuZyA9IChSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNv -bicpDQogICAgICAgICAgICAgICAgICAgIGFkbWluICAgPSAoUmVhZC1Kc29uT2JqZWN0ICdhZG1p -bi5qc29uJykNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgV3JpdGUtQmFja3Vw -Qnl0ZXMgKEpvaW4tUGF0aCAkY2FjaGVEaXIgJHNpY2hlcikgKCRzaWNoZXJCdW5kbGUgfCBDb252 -ZXJ0VG8tSnNvbiAtRGVwdGggMzApDQoNCiAgICAgICAgICAgICAgICAkcXVlbGxJbmhhbHQgPSBS -ZWFkLUJhY2t1cFRleHQgJHF1ZWxsDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkcXVl -bGxJbmhhbHQpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0JhY2t1cC1EYXRlaSBrb25udGUgbmlj -aHQgZ2VsZXNlbiB3ZXJkZW4nIDUwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIHRyeSB7 -ICRxdWVsbERhdGVuID0gJHF1ZWxsSW5oYWx0IHwgQ29udmVydEZyb20tSnNvbiB9IGNhdGNoIHsg -U2VuZC1FcnJvciAkUmVzcG9uc2UgJ0JhY2t1cC1EYXRlaSBuaWNodCBwYXJzaWVyYmFyJyA0MDA7 -IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkd2llZGVyaGVyZ2VzdGVsbHQgPSBAKCkNCiAg -ICAgICAgICAgICAgICBpZiAoJHF1ZWxsRGF0ZW4gLWFuZCAkcXVlbGxEYXRlbi5QU09iamVjdC5Q -cm9wZXJ0aWVzWydmb3JtYXQnXSAtYW5kICIkKCRxdWVsbERhdGVuLmZvcm1hdCkiLlN0YXJ0c1dp -dGgoJ3ZpMy1iYWNrdXAnKSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoJHF1ZWxsRGF0ZW4u -UFNPYmplY3QuUHJvcGVydGllc1sncGxhbnVuZyddKSB7DQogICAgICAgICAgICAgICAgICAgICAg -ICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRxdWVsbERhdGVuLnBsYW51bmcgfCBP -dXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgJHdpZWRlcmhlcmdlc3RlbGx0ICs9ICdw -bGFudW5nJw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmICgk -cXVlbGxEYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydhZG1pbiddKSB7DQogICAgICAgICAgICAg -ICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJyAkcXVlbGxEYXRlbi5hZG1p -biB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICAkd2llZGVyaGVyZ2VzdGVsbHQg -Kz0gJ2FkbWluJw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNl -IHsNCiAgICAgICAgICAgICAgICAgICAgIyBMZWdhY3ktRm9ybWF0IChudXIgcGxhbnVuZy5qc29u -LUluaGFsdCkuDQogICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51bmcu -anNvbicgJHF1ZWxsRGF0ZW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAkd2llZGVy -aGVyZ2VzdGVsbHQgKz0gJ3BsYW51bmcnDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2JhY2t1cC53aWVkZXJoZXJnZXN0ZWxsdCcgQHsgcXVlbGxl -ID0gJG5hbWU7IHNpY2hlcnVuZyA9ICRzaWNoZXI7IGluaGFsdCA9ICgkd2llZGVyaGVyZ2VzdGVs -bHQgLWpvaW4gJysnKSB9DQogICAgICAgICAgICAgICAgTmV3LUhpbndlaXMgJ2JhY2t1cF93aWVk -ZXJoZXJnZXN0ZWxsdCcgKFtvcmRlcmVkXUB7DQogICAgICAgICAgICAgICAgICAgIGJhY2t1cCAg -ICA9ICRuYW1lDQogICAgICAgICAgICAgICAgICAgIHNpY2hlcnVuZyA9ICRzaWNoZXINCiAgICAg -ICAgICAgICAgICAgICAgaW5oYWx0ICAgID0gKCR3aWVkZXJoZXJnZXN0ZWxsdCAtam9pbiAnKycp -DQogICAgICAgICAgICAgICAgfSkgKEdldC1Ba3R1ZWxsZXJCZW51dHplcikgfCBPdXQtTnVsbA0K -ICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ3dp -ZWRlcmhlcmdlc3RlbGx0Jzsgc2ljaGVydW5nID0gJHNpY2hlcjsgaW5oYWx0ID0gJHdpZWRlcmhl -cmdlc3RlbGx0IH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL2JhY2t1cC9sb2VzY2hlbicgLWFu -ZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1E -YXJmQmVyZWljaCAnYmFja3VwcycpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBCZXJl -Y2h0aWd1bmcgKEJhY2t1cHMpJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYm9k -eSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgICRkYXRlbiA9ICRib2R5IHwg -Q29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRuYW1lID0gIiQoJGRhdGVuLmRhdGVp -bmFtZSkiDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKCRuYW1lIC1tYXRjaCAnXihzbmFwX3xs -ZWdfKVswLTlfYS16QS1aXStcLmJhayQnKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnVW5ndWVs -dGlnZXIgRGF0ZWluYW1lJyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkZnAgPSBK -b2luLVBhdGggJERhdGFEaXIgKCdjYWNoZS8nICsgJG5hbWUpDQogICAgICAgICAgICAgICAgaWYg -KC1ub3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGZwKSkgeyBTZW5kLUVycm9yICRSZXNwb25z -ZSAnQmFja3VwIG5pY2h0IGdlZnVuZGVuJyA0MDQ7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAg -ICBSZW1vdmUtSXRlbSAtTGl0ZXJhbFBhdGggJGZwIC1Gb3JjZQ0KICAgICAgICAgICAgICAgIFdy -aXRlLUxvZ0VpbnRyYWcgJ2JhY2t1cC5nZWxvZXNjaHQnIEB7IGRhdGVpbmFtZSA9ICRuYW1lIH0N -CiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdn -ZWxvZXNjaHQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQog -ICAgICAgICAgICAjID09PT09IFJFU0VUIC8gRFVNTVlEQVRFTiA9PT09PQ0KICAgICAgICAgICAg -aWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL3Jlc2V0JyAtYW5kICRNZXRob2QgLWVxICdQT1NU -Jykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2Vu -ZC1FcnJvciAkUmVzcG9uc2UgJ051ciBTdXBlclVzZXIgZHVlcmZlbiBkaWUgUGxhbnVuZyB6dXJ1 -ZWNrc2V0emVuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkcGxhbnVuZ1BhdGgg -PSBKb2luLVBhdGggJERhdGFEaXIgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAkYmFj -a3VwTmFtZSA9ICRudWxsDQogICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBh -dGggJHBsYW51bmdQYXRoKSB7DQogICAgICAgICAgICAgICAgICAgICR0cyA9IEdldC1EYXRlIC1G -b3JtYXQgJ3l5eXlNTWRkX0hIbW1zcycNCiAgICAgICAgICAgICAgICAgICAgJGNhY2hlRGlyID0g -Sm9pbi1QYXRoICREYXRhRGlyICdjYWNoZScNCiAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3Qg -KFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGNhY2hlRGlyKSkgeyBOZXctSXRlbSAtSXRlbVR5cGUg -RGlyZWN0b3J5IC1QYXRoICRjYWNoZURpciAtRm9yY2UgfCBPdXQtTnVsbCB9DQogICAgICAgICAg -ICAgICAgICAgICMgUmVzdGF1cmllcmJhcmVyIE5hbWUgKHBsYW51bmdfYmFja3VwX3Zvcl9yZXNl -dF8qLmpzb24pIHN0YXR0DQogICAgICAgICAgICAgICAgICAgICMgLmJhayAtPiB3aXJkIHZvbSBC -YWNrdXBzLVRhYiBnZWxpc3RldCB1bmQga2FubiB3aWVkZXJoZXJnZXN0ZWxsdA0KICAgICAgICAg -ICAgICAgICAgICAjIHdlcmRlbi4gRnJ1ZWhlciB6dWRlbSBuaWNodCBhbiBkZW4gQ2xpZW50IHp1 -cnVlY2tnZWdlYmVuDQogICAgICAgICAgICAgICAgICAgICMgLT4gIkJhY2t1cDogdW5kZWZpbmVk -IiBpbiBkZXIgVUkuDQogICAgICAgICAgICAgICAgICAgICRiYWNrdXBOYW1lID0gInBsYW51bmdf -YmFja3VwX3Zvcl9yZXNldF8kdHMuanNvbiINCiAgICAgICAgICAgICAgICAgICAgQ29weS1JdGVt -IC1MaXRlcmFsUGF0aCAkcGxhbnVuZ1BhdGggLURlc3RpbmF0aW9uIChKb2luLVBhdGggJGNhY2hl -RGlyICRiYWNrdXBOYW1lKQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkcGxh -bnVuZyA9IFJlYWQtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgIGlm -ICgkbnVsbCAtbmUgJHBsYW51bmcpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRwbGFudW5n -LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VpbnRyYWVnZSddKSB7ICRwbGFudW5nLmVpbnRyYWVnZSA9 -IE5ldy1PYmplY3QgUFNPYmplY3QgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJHBsYW51bmcu -UFNPYmplY3QuUHJvcGVydGllc1sna29tbWVudGFyZSddKSB7ICRwbGFudW5nLmtvbW1lbnRhcmUg -PSBOZXctT2JqZWN0IFBTT2JqZWN0IH0NCiAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9i -amVjdCAncGxhbnVuZy5qc29uJyAkcGxhbnVuZyB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3BsYW51bmcucmVzZXQnIEB7fQ0K -ICAgICAgICAgICAgICAgIE5ldy1IaW53ZWlzICdwbGFudW5nX3Jlc2V0JyAoW29yZGVyZWRdQHsN -CiAgICAgICAgICAgICAgICAgICAgaGlud2VpcyA9ICdFaW50cmFlZ2UgdW5kIEtvbW1lbnRhcmUg -d3VyZGVuIGdlbG9lc2NodDsgU2ljaGVydW5nIGxpZWd0IGluIGRhdGEvY2FjaGUvLicNCiAgICAg -ICAgICAgICAgICB9KSAoR2V0LUFrdHVlbGxlckJlbnV0emVyKSB8IE91dC1OdWxsDQogICAgICAg -ICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnenVydWVja2dl -c2V0enQnOyBiYWNrdXAgPSAkYmFja3VwTmFtZSB9DQogICAgICAgICAgICAgICAgY29udGludWUN -CiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy9k -dW1teWRhdGVuJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgIGlm -ICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051ciBT -dXBlclVzZXIgZHVlcmZlbiBEdW1teWRhdGVuIGVpbnNwaWVsZW4nIDQwMzsgY29udGludWUgfQ0K -ICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdEdW1teWRhdGVuIG51ciBpbSBE -ZWJ1Zy1TZXJ2ZXIgKGRldi9zZXJ2ZXIucHkpIGltcGxlbWVudGllcnQuJyA1MDENCiAgICAgICAg -ICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIFBPU1QgL2Fw -aS9hZG1pbi9wcm90b2tvbGwtbG9lc2NoZW4NCiAgICAgICAgICAgICMgRWlubWFsLVJlc2V0IGZ1 -ZXIgTG9nYnVjaCArIEFQSS1Mb2cuIFNldHp0IGxvZ2J1Y2guanNvbiBhdWYgW10sDQogICAgICAg -ICAgICAjIGxvZXNjaHQgZGllIEFQSS1Mb2ctRGF0ZWkgYXVzICVURU1QJSwgdW5kIHNjaHJlaWJ0 -IGVpbmVuIGVpbnppZ2VuDQogICAgICAgICAgICAjIG5ldWVuIExvZ2J1Y2gtRWludHJhZyAocHJv -dG9rb2xsLmdlbG9lc2NodCksIGRhbWl0IGRhcyBFcmVpZ25pcw0KICAgICAgICAgICAgIyBzZWxi -c3QgbmFjaHZvbGx6aWVoYmFyIGJsZWlidC4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9h -cGkvYWRtaW4vcHJvdG9rb2xsLWxvZXNjaGVuJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0K -ICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJv -ciAkUmVzcG9uc2UgJ051ciBTdXBlclVzZXIgZHVlcmZlbiBkYXMgUHJvdG9rb2xsIGxvZXNjaGVu -JyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkdm9yaGVyID0gUmVhZC1Kc29uT2Jq -ZWN0ICdsb2didWNoLmpzb24nDQogICAgICAgICAgICAgICAgJGFuemFobFZvcmhlciA9IDANCiAg -ICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICR2b3JoZXIpIHsNCiAgICAgICAgICAgICAgICAg -ICAgJGFuemFobFZvcmhlciA9IEAoJHZvcmhlcikuQ291bnQNCiAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnbG9nYnVjaC5qc29uJyBAKCkgfCBPdXQt -TnVsbA0KDQogICAgICAgICAgICAgICAgJGFwaUxvZ0J5dGVzID0gMA0KICAgICAgICAgICAgICAg -IGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRzY3JpcHQ6QXBpTG9nKSB7DQogICAgICAgICAg -ICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkYXBpTG9nQnl0ZXMgPSAo -R2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRzY3JpcHQ6QXBpTG9nKS5MZW5ndGgNCiAgICAgICAgICAg -ICAgICAgICAgICAgIFJlbW92ZS1JdGVtIC1MaXRlcmFsUGF0aCAkc2NyaXB0OkFwaUxvZyAtRm9y -Y2UgLUVycm9yQWN0aW9uIFN0b3ANCiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAjIERhdGVpIGV2dGwuIG5vY2ggb2ZmZW47IGlnbm9yaWVyZW4s -IExvZ2J1Y2ggaXN0IGRpZSB3aWNodGlnZXJlIFNwdXINCiAgICAgICAgICAgICAgICAgICAgICAg -ICRhcGlMb2dCeXRlcyA9IC0xDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICB9DQoNCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdwcm90b2tvbGwuZ2Vsb2Vz -Y2h0JyBAew0KICAgICAgICAgICAgICAgICAgICBsb2didWNoRWludHJhZWdlVm9yaGVyID0gJGFu -emFobFZvcmhlcg0KICAgICAgICAgICAgICAgICAgICBhcGlMb2dCeXRlcyAgICAgICAgICAgID0g -JGFwaUxvZ0J5dGVzDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNv -bk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAgICAgICAgICAgICAgICAgc3RhdHVzICAgICAgICAg -ICAgICAgICA9ICdnZWxvZXNjaHQnDQogICAgICAgICAgICAgICAgICAgIGxvZ2J1Y2hFaW50cmFl -Z2VWb3JoZXIgPSAkYW56YWhsVm9yaGVyDQogICAgICAgICAgICAgICAgICAgIGFwaUxvZ0J5dGVz -ICAgICAgICAgICAgPSAkYXBpTG9nQnl0ZXMNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PSBTVEFU -SVNUSUsgLyBMT0dCVUNIID09PT09DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3N0 -YXRpc3RpaycgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgIGlmICgt -bm90IChUZXN0LURhcmZCZXJlaWNoICdzdGF0aXN0aWsnKSkgew0KICAgICAgICAgICAgICAgICAg -ICBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQmVyZWNodGlndW5nIChTdGF0aXN0aWspJyA0 -MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRwbGFudW5n -ID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgJGFkbWlu -ICAgPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgU2VuZC1K -c29uT2JqZWN0ICRSZXNwb25zZSAoR2V0LVN0YXRpc3Rpa0RhdGEgJHBsYW51bmcgJGFkbWluKQ0K -ICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAo -JFBhdGggLWVxICcvYXBpL2xvZ2J1Y2gnIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAg -ICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJmQmVyZWljaCAnbG9nYnVjaCcpKSB7DQogICAg -ICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBCZXJlY2h0aWd1bmcg -KExvZ2J1Y2gpJyA0MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgIFNlbmQtSnNvblRleHQgJFJlc3BvbnNlIChHZXQtTG9nYnVjaFRleHQpDQogICAgICAgICAg -ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PT09PT09 -PT09PT09PT09PT0gWkVMTC1MT0NLICsgQ0hBTkdFUyAoTGl2ZS1TeW5jKSA9PT09PT09PT09PT09 -PT09PT09PT0NCiAgICAgICAgICAgICMgUE9TVCAvYXBpL2xvY2svemVsbGUgIHsgZGF0dW0sIHBl -cnNvbklkIH0gLT4geyBvaywgdG9rZW4sIC4uLiB9IG9kZXIgNDIzIHsgc3BlcnJlciwgLi4uIH0N -CiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvbG9jay96ZWxsZScgLWFuZCAkTWV0aG9k -IC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVz -dA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNl -ICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYSA9 -ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRkYXR1bSA9IFtzdHJp -bmddJGEuZGF0dW0NCiAgICAgICAgICAgICAgICAkcGVyc29uSWQgPSBbc3RyaW5nXSRhLnBlcnNv -bklkDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtTG9ja1NhZmVEYXR1bSAkZGF0dW0p -IC1vciAtbm90IChUZXN0LUxvY2tTYWZlSWQgJHBlcnNvbklkKSkgew0KICAgICAgICAgICAgICAg -ICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnVW5ndWVsdGlnZSBkYXR1bS9wZXJzb25JZCcgNDAw -OyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkdXNlciA9IEdl -dC1Ba3R1ZWxsZXJCZW51dHplcg0KICAgICAgICAgICAgICAgICRyb2xsZSA9IChHZXQtUmVjaHRl -KS5yb2xsZQ0KICAgICAgICAgICAgICAgICRyZXMgPSBBY3F1aXJlLUNlbGxMb2NrICRkYXR1bSAk -cGVyc29uSWQgJHVzZXIgJHJvbGxlICRmYWxzZQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRy -ZXMub2spIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBA -ew0KICAgICAgICAgICAgICAgICAgICAgICAgZmVobGVyICAgID0gJ2dlc3BlcnJ0Jw0KICAgICAg -ICAgICAgICAgICAgICAgICAgbWVsZHVuZyAgID0gIldpcmQgYmVhcmJlaXRldCB2b24gJCgkcmVz -LmV4aXN0aW5nLnVzZXJuYW1lKSINCiAgICAgICAgICAgICAgICAgICAgICAgIHNwZXJyZXIgICA9 -ICRyZXMuZXhpc3RpbmcudXNlcm5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGxlICAg -ICA9ICRyZXMuZXhpc3Rpbmcucm9sbGUNCiAgICAgICAgICAgICAgICAgICAgICAgIHNlaXQgICAg -ICA9ICRyZXMuZXhpc3RpbmcubG9ja2VkQXQNCiAgICAgICAgICAgICAgICAgICAgICAgIGthbm5G -b3JjZSA9IChUZXN0LURhcmZMb2NrVWViZXJzY2hyZWliZW4pDQogICAgICAgICAgICAgICAgICAg -IH0gNDIzDQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0K -ICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAgICAgICAg -ICAgICAgICAgb2sgICAgICAgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICB0b2tlbiAgICA9 -ICRyZXMubG9jay50b2tlbg0KICAgICAgICAgICAgICAgICAgICBkYXR1bSAgICA9ICRkYXR1bQ0K -ICAgICAgICAgICAgICAgICAgICBwZXJzb25JZCA9ICRwZXJzb25JZA0KICAgICAgICAgICAgICAg -ICAgICByb2xsZSAgICA9ICRyb2xsZQ0KICAgICAgICAgICAgICAgICAgICBsb2NrZWRBdCA9ICRy -ZXMubG9jay5sb2NrZWRBdA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBjb250 -aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIFBPU1QgL2FwaS9sb2NrL3plbGxl -L2ZvcmNlICB7IGRhdHVtLCBwZXJzb25JZCB9IC0+IHVlYmVyc2NocmVpYnQgZnJlbWRlbiBMb2Nr -DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2xvY2svemVsbGUvZm9yY2UnIC1hbmQg -JE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFy -ZkxvY2tVZWJlcnNjaHJlaWJlbikpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAk -UmVzcG9uc2UgJ0ZvcmNlLUxvY2sgbnVyIGZ1ZXIgRmFjaGF1ZnNpY2h0L1N1cGVyVXNlcicgNDAz -OyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJl -YWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQt -RXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAg -ICAgICAgICAgICAkYSA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAg -ICRkYXR1bSA9IFtzdHJpbmddJGEuZGF0dW0NCiAgICAgICAgICAgICAgICAkcGVyc29uSWQgPSBb -c3RyaW5nXSRhLnBlcnNvbklkDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtTG9ja1Nh -ZmVEYXR1bSAkZGF0dW0pIC1vciAtbm90IChUZXN0LUxvY2tTYWZlSWQgJHBlcnNvbklkKSkgew0K -ICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnVW5ndWVsdGlnZSBkYXR1 -bS9wZXJzb25JZCcgNDAwOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg -ICAgICAkdXNlciA9IEdldC1Ba3R1ZWxsZXJCZW51dHplcg0KICAgICAgICAgICAgICAgICRyb2xs -ZSA9IChHZXQtUmVjaHRlKS5yb2xsZQ0KICAgICAgICAgICAgICAgICRyZXMgPSBBY3F1aXJlLUNl -bGxMb2NrICRkYXR1bSAkcGVyc29uSWQgJHVzZXIgJHJvbGxlICR0cnVlDQogICAgICAgICAgICAg -ICAgV3JpdGUtTG9nRWludHJhZyAnbG9jay5mb3JjZScgQHsgZGF0dW0gPSAkZGF0dW07IHBlcnNv -bklkID0gJHBlcnNvbklkOyByb2xsZSA9ICRyb2xsZSB9DQogICAgICAgICAgICAgICAgU2VuZC1K -c29uT2JqZWN0ICRSZXNwb25zZSBAew0KICAgICAgICAgICAgICAgICAgICBvayAgICAgICA9ICR0 -cnVlDQogICAgICAgICAgICAgICAgICAgIHRva2VuICAgID0gJHJlcy5sb2NrLnRva2VuDQogICAg -ICAgICAgICAgICAgICAgIGRhdHVtICAgID0gJGRhdHVtDQogICAgICAgICAgICAgICAgICAgIHBl -cnNvbklkID0gJHBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgIHJvbGxlICAgID0gJHJvbGxl -DQogICAgICAgICAgICAgICAgICAgIGxvY2tlZEF0ID0gJHJlcy5sb2NrLmxvY2tlZEF0DQogICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoN -CiAgICAgICAgICAgICMgUE9TVCAvYXBpL2xvY2svemVsbGUvaGVhcnRiZWF0ICB7IHRva2VuIH0g -LT4gYWt0dWFsaXNpZXJ0IGxhc3RCZWF0DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBp -L2xvY2svemVsbGUvaGVhcnRiZWF0JyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAg -ICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYg -KC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQx -MzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRhID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1K -c29uDQogICAgICAgICAgICAgICAgJHRva2VuID0gaWYgKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNb -J3Rva2VuJ10pIHsgW3N0cmluZ10kYS50b2tlbiB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAg -ICAgaWYgKFtzdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJHRva2VuKSkgeyBTZW5kLUVycm9y -ICRSZXNwb25zZSAnVG9rZW4gZmVobHQnIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg -ICRyZXMgPSBSZWZyZXNoLUNlbGxMb2NrICR0b2tlbg0KICAgICAgICAgICAgICAgIGlmICgtbm90 -ICRyZXMub2spIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25z -ZSBAeyBmZWhsZXIgPSAndW5iZWthbm50ZXJfbG9jayc7IG1lbGR1bmcgPSAnTG9jayBleGlzdGll -cnQgbmljaHQgKG1laHIpLicgfSA0MDQNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25z -ZSBAeyBvayA9ICR0cnVlOyBsYXN0QmVhdCA9ICRyZXMubG9jay5sYXN0QmVhdCB9DQogICAgICAg -ICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBERUxFVEUg -L2FwaS9sb2NrL3plbGxlICB7IHRva2VuIH0gLT4gTG9jayBmcmVpZ2ViZW4gKGF1Y2ggdmlhIFF1 -ZXJ5LVN0cmluZyBmdWVyIHNlbmRCZWFjb24pDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcv -YXBpL2xvY2svemVsbGUnIC1hbmQgJE1ldGhvZCAtZXEgJ0RFTEVURScpIHsNCiAgICAgICAgICAg -ICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgICR0b2tlbiA9 -ICRudWxsDQogICAgICAgICAgICAgICAgaWYgKCRib2R5KSB7DQogICAgICAgICAgICAgICAgICAg -IHRyeSB7ICRhID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uOyBpZiAoJGEuUFNPYmplY3QuUHJv -cGVydGllc1sndG9rZW4nXSkgeyAkdG9rZW4gPSBbc3RyaW5nXSRhLnRva2VuIH0gfSBjYXRjaCB7 -fQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoW3N0cmluZ106OklzTnVs -bE9yV2hpdGVTcGFjZSgkdG9rZW4pIC1hbmQgJFJlcXVlc3QuVXJsLlF1ZXJ5KSB7DQogICAgICAg -ICAgICAgICAgICAgICRxID0gW1N5c3RlbS5XZWIuSHR0cFV0aWxpdHldOjpQYXJzZVF1ZXJ5U3Ry -aW5nKCRSZXF1ZXN0LlVybC5RdWVyeSkNCiAgICAgICAgICAgICAgICAgICAgJHRva2VuID0gW3N0 -cmluZ10kcVsndG9rZW4nXQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAo -W3N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFjZSgkdG9rZW4pKSB7IFNlbmQtRXJyb3IgJFJlc3Bv -bnNlICdUb2tlbiBmZWhsdCcgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJHJlcyA9 -IFJlbGVhc2UtQ2VsbExvY2sgJHRva2VuDQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0 -ICRSZXNwb25zZSBAeyBvayA9ICRyZXMub2sgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQog -ICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgR0VUIC9hcGkvbG9jay96ZWxsZW4gLT4gTGlz -dGUgYWxsZXIgYWt0aXZlbiBMb2NrcyAoZnVlciBMaXZlLUluZGljYXRvcikNCiAgICAgICAgICAg -IGlmICgkUGF0aCAtZXEgJy9hcGkvbG9jay96ZWxsZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcp -IHsNCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IGxvY2tzID0g -KEdldC1BbGxBY3RpdmVDZWxsTG9ja3MpIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAg -ICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIFBPU1QgL2FwaS92ZXJhbnR3b3J0dW5nL2F1Zmdl -cnVlY2t0IOKAlCBTdGF0aXN0aWstQ2FwdHVyZSBmdWVyIGRlbg0KICAgICAgICAgICAgIyAiRWlu -Z2VzcHJ1bmdlbiItQmFsa2VuIGluIGRlciBTY2hpY2h0dmVydGVpbHVuZy4gV2lyZCB2b20gQ2xp -ZW50DQogICAgICAgICAgICAjIGdlZmV1ZXJ0LCBzb2JhbGQgamVtYW5kIGlubmVyaGFsYiBkZXIg -MTQtVGFnZS1WZXJiaW5kbGljaGtlaXQgbmV1DQogICAgICAgICAgICAjIGluIGRpZSBUb3AtMiAo -MS4vMi4gVkkzLURHTCkgZWluZXIgU2NoaWNodCBhdWZydWVja3Qg4oCUIGFsc28NCiAgICAgICAg -ICAgICMgYXVzc2VycGxhbm1hZXNzaWcgVmVyYW50d29ydHVuZyB1ZWJlcm5pbW10Lg0KICAgICAg -ICAgICAgIyBCb2R5OiB7IHBlcnNvbklkLCBkYXR1bSwgc2NoaWNodCwgc3R1ZmUsIHZvcmhlcldl -cnQsIGF1c2xvZXNlclBlcnNvbklkIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkv -dmVyYW50d29ydHVuZy9hdWZnZXJ1ZWNrdCcgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAg -ICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAg -IGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3Nz -JyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICB0cnkgeyAkYSA9ICRib2R5IHwgQ29u -dmVydEZyb20tSnNvbiB9IGNhdGNoIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3VlbHRpZ2Vz -IEpTT04nIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRwaWQgPSBpZiAoJGEuUFNP -YmplY3QuUHJvcGVydGllc1sncGVyc29uSWQnXSkgeyBbc3RyaW5nXSRhLnBlcnNvbklkIH0gZWxz -ZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAkZGF0ID0gaWYgKCRhLlBTT2JqZWN0LlByb3BlcnRp -ZXNbJ2RhdHVtJ10pIHsgW3N0cmluZ10kYS5kYXR1bSB9IGVsc2UgeyAnJyB9DQogICAgICAgICAg -ICAgICAgaWYgKC1ub3QgJHBpZCAtb3IgLW5vdCAkZGF0KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNl -ICdwZXJzb25JZC9kYXR1bSBmZWhsdCcgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAg -JGZlbGRlciA9IFtvcmRlcmVkXUB7DQogICAgICAgICAgICAgICAgICAgIHBlcnNvbklkICAgPSAk -cGlkDQogICAgICAgICAgICAgICAgICAgIGRhdHVtICAgICAgPSAkZGF0DQogICAgICAgICAgICAg -ICAgICAgIHNjaGljaHQgICAgPSBpZiAoJGEuUFNPYmplY3QuUHJvcGVydGllc1snc2NoaWNodCdd -KSB7IFtzdHJpbmddJGEuc2NoaWNodCB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAg -IHN0dWZlICAgICAgPSBpZiAoJGEuUFNPYmplY3QuUHJvcGVydGllc1snc3R1ZmUnXSkgeyBbaW50 -XSRhLnN0dWZlIH0gZWxzZSB7IDAgfQ0KICAgICAgICAgICAgICAgICAgICB2b3JoZXJXZXJ0ID0g -aWYgKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3ZvcmhlcldlcnQnXSkgeyBbc3RyaW5nXSRhLnZv -cmhlcldlcnQgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICBpZiAoJGEuUFNPYmplY3QuUHJvcGVydGllc1snYXVzbG9lc2VyUGVyc29uSWQnXSkgew0KICAg -ICAgICAgICAgICAgICAgICAkZmVsZGVyWydhdXNsb2VzZXJQZXJzb25JZCddID0gW3N0cmluZ10k -YS5hdXNsb2VzZXJQZXJzb25JZA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBX -cml0ZS1Mb2dFaW50cmFnICd2ZXJhbnR3b3J0dW5nLmVpbmdlc3BydW5nZW4nICRmZWxkZXINCiAg -ICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IG9rID0gJHRydWUgfQ0K -ICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCg0KICAgICAgICAgICAg -IyBHRVQgL2FwaS9wbGFudW5nL2NoYW5nZXM/c2VpdD08aXNvLXRzPiAtPiBEZWx0YS1MaXN0ZSBm -dWVyIExpdmUtU3luYw0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL2No -YW5nZXMnIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICAkcSA9IFtT -eXN0ZW0uV2ViLkh0dHBVdGlsaXR5XTo6UGFyc2VRdWVyeVN0cmluZygkUmVxdWVzdC5VcmwuUXVl -cnkpDQogICAgICAgICAgICAgICAgJGxvZyA9IFJlYWQtSnNvbk9iamVjdCAnY2hhbmdlcy5qc29u -Jw0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGxvZyAtb3IgLW5vdCAoJGxvZyAtaXMg -W2FycmF5XSkpIHsgJGxvZyA9IEAoKSB9DQogICAgICAgICAgICAgICAgJG1heFNlcSA9IEdldC1N -YXhDaGFuZ2VTZXEgJGxvZw0KICAgICAgICAgICAgICAgIGlmICgkcS5BbGxLZXlzIC1jb250YWlu -cyAnc2VpdF9zZXEnKSB7DQogICAgICAgICAgICAgICAgICAgICMgTmV1ZXIgcmFjZS1mcmVpZXIg -c2VxLUN1cnNvciAoQ2hhbmdlcyArIHNlcnZlclNlcSBhdXMNCiAgICAgICAgICAgICAgICAgICAg -IyBERU1TRUxCRU4gUmVhZCkuIExlZXJlciBzZWl0X3NlcSA9IEVyc3QtU3luYyAtPiBudXIgQ3Vy -c29yLg0KICAgICAgICAgICAgICAgICAgICAkcmF3ID0gW3N0cmluZ10kcVsnc2VpdF9zZXEnXQ0K -ICAgICAgICAgICAgICAgICAgICBpZiAoW3N0cmluZ106OklzTnVsbE9yRW1wdHkoJHJhdykpIHsN -CiAgICAgICAgICAgICAgICAgICAgICAgICRjaGFuZ2VzID0gQCgpDQogICAgICAgICAgICAgICAg -ICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkc3EgPSAwOyBbdm9pZF1baW50 -XTo6VHJ5UGFyc2UoJHJhdywgW3JlZl0kc3EpDQogICAgICAgICAgICAgICAgICAgICAgICAkY2hh -bmdlcyA9IEAoJGxvZyB8IFdoZXJlLU9iamVjdCB7ICRudWxsIC1uZSAkXy5zZXEgLWFuZCBbaW50 -XSRfLnNlcSAtZ3QgJHNxIH0pDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAew0KICAgICAgICAgICAgICAgICAgICAg -ICAgc2VydmVyVHMgID0gKEdldC1EYXRlKS5Ub1VuaXZlcnNhbFRpbWUoKS5Ub1N0cmluZygnbycp -DQogICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJTZXEgPSAkbWF4U2VxDQogICAgICAgICAg -ICAgICAgICAgICAgICBjaGFuZ2VzICAgPSBbb2JqZWN0W11dJGNoYW5nZXMNCiAgICAgICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAg -ICMgQmFja3dhcmQtY29tcGF0OiBhbHRlciBXYWxsLUNsb2NrLUN1cnNvciAoYWx0ZSBDbGllbnRz -KS4NCiAgICAgICAgICAgICAgICAgICAgJHNlaXQgPSBbc3RyaW5nXSRxWydzZWl0J10NCiAgICAg -ICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAew0KICAgICAgICAgICAg -ICAgICAgICAgICAgc2VydmVyVHMgID0gKEdldC1EYXRlKS5Ub1VuaXZlcnNhbFRpbWUoKS5Ub1N0 -cmluZygnbycpDQogICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJTZXEgPSAkbWF4U2VxDQog -ICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzICAgPSAoR2V0LUNoYW5nZXNTaW5jZSAkc2Vp -dCkNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg -ICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09IFByb2Zp -bGJpbGRlciAoQXZhdGFyZSkgPT09PT0NCiAgICAgICAgICAgICMgRGF0ZWk6ICREYXRhRGlyL2F2 -YXRhcnMvPGlkPi5qcGcgICAoSlBFRywgdm9tIENsaWVudCBhdWYgMjAweDIwMA0KICAgICAgICAg -ICAgIyBoZXJ1bnRlcmdlcmVjaG5ldCwgdWVibGljaCA1LTI1IEtCKS4NCiAgICAgICAgICAgICMN -CiAgICAgICAgICAgICMgQmVyZWNodGlndW5nOg0KICAgICAgICAgICAgIyAgIFBPU1QvREVMRVRF -OiBTVS9GQSBPREVSIGVpZ2VuZSBQZXJzb25JZCAoU2VsZi1TZXJ2aWNlKS4NCiAgICAgICAgICAg -ICMgICBHRVQ6ICAgICAgICAgYWxsZSBlaW5nZWxvZ2d0ZW4gVXNlciAoaW0gR3JpZCBzaWNodGJh -cikuDQogICAgICAgICAgICAjDQogICAgICAgICAgICAjIFBPU1QtQm9keTogeyAiZGF0YVVybCI6 -ICJkYXRhOmltYWdlL2pwZWc7YmFzZTY0LDwuLi4+IiB9DQogICAgICAgICAgICAjIDI1MCBLQiBo -YXJ0ZXIgQ2FwIChkZWZlbnNpdiDigJQgQ2xpZW50IHNjaGlja3QgdHlwaXNjaCA8MzAgS0IpLg0K -ICAgICAgICAgICAgaWYgKCRQYXRoIC1tYXRjaCAnXi9hcGkvcGVyc29uZW4vKFxkKykvYXZhdGFy -JCcpIHsNCiAgICAgICAgICAgICAgICAkcGVyc29uSWQgPSAkbWF0Y2hlc1sxXQ0KICAgICAgICAg -ICAgICAgICRyID0gR2V0LVJlY2h0ZQ0KICAgICAgICAgICAgICAgICRpc3RFaWdlbiA9ICgkbnVs -bCAtbmUgJHIubWVpbmVQZXJzb25JZCAtYW5kIFtpbnRdJHBlcnNvbklkIC1lcSBbaW50XSRyLm1l -aW5lUGVyc29uSWQpDQogICAgICAgICAgICAgICAgJGlzdEJlcmVjaHRpZ3QgPSAoVGVzdC1Jc3RB -ZG1pbikgLW9yICRpc3RFaWdlbg0KICAgICAgICAgICAgICAgICRhdmF0YXJEaXIgPSBKb2luLVBh -dGggJERhdGFEaXIgJ2F2YXRhcnMnDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtUGF0 -aCAtTGl0ZXJhbFBhdGggJGF2YXRhckRpcikpIHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsg -TmV3LUl0ZW0gLUl0ZW1UeXBlIERpcmVjdG9yeSAtUGF0aCAkYXZhdGFyRGlyIC1Gb3JjZSB8IE91 -dC1OdWxsIH0gY2F0Y2gge30NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGF2 -YXRhckZpbGUgPSBKb2luLVBhdGggJGF2YXRhckRpciAoJHBlcnNvbklkICsgJy5qcGcnKQ0KICAg -ICAgICAgICAgICAgIGlmICgkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICAg -ICAgaWYgKC1ub3QgJGlzdEJlcmVjaHRpZ3QpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5l -IEJlcmVjaHRpZ3VuZycgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgICAgICRib2R5 -ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5 -KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVl -IH0NCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRv -YmogPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAgICAgICAgICRk -YXRhVXJsID0gW3N0cmluZ10kb2JqLmRhdGFVcmwNCiAgICAgICAgICAgICAgICAgICAgICAgIGlm -ICgtbm90ICRkYXRhVXJsIC1vciAtbm90ICRkYXRhVXJsLlN0YXJ0c1dpdGgoJ2RhdGE6aW1hZ2Uv -JykpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAn -VW5ndWVsdGlnZXMgQmlsZGZvcm1hdCAoZXJ3YXJ0ZSBkYXRhOmltYWdlLy4uLjtiYXNlNjQsLi4u -KScgNDAwOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgJGJhc2U2NCA9ICRkYXRhVXJsIC1yZXBsYWNlICdeZGF0YTppbWFnZS9bYS16 -QS1aXSs7YmFzZTY0LCcsICcnDQogICAgICAgICAgICAgICAgICAgICAgICAkYnl0ZXMgPSBbU3lz -dGVtLkNvbnZlcnRdOjpGcm9tQmFzZTY0U3RyaW5nKCRiYXNlNjQpDQogICAgICAgICAgICAgICAg -ICAgICAgICBpZiAoJGJ5dGVzLkxlbmd0aCAtZ3QgMjYyMTQ0KSB7IFNlbmQtRXJyb3IgJFJlc3Bv -bnNlICdCaWxkIHp1IGdyb3NzIChtYXggMjUwIEtCKScgNDEzOyBjb250aW51ZSB9DQogICAgICAg -ICAgICAgICAgICAgICAgICBbU3lzdGVtLklPLkZpbGVdOjpXcml0ZUFsbEJ5dGVzKCRhdmF0YXJG -aWxlLCAkYnl0ZXMpDQogICAgICAgICAgICAgICAgICAgICAgICAjIGF2YXRhclRzIGluIHBsYW51 -bmcuanNvbiBzZXR6ZW4sIGRhbWl0IGRlciBDYWNoZS1CdXN0ZXINCiAgICAgICAgICAgICAgICAg -ICAgICAgICMgbmFjaCBSZWxvYWQgYmVrYW5udCBpc3QgKENsaWVudCBoYWVuZ3QgP3RzPTxhdmF0 -YXJUcz4NCiAgICAgICAgICAgICAgICAgICAgICAgICMgYW4gZGllIEJpbGQtVVJMKS4NCiAgICAg -ICAgICAgICAgICAgICAgICAgICR0cyA9IFtsb25nXShbRGF0ZVRpbWVPZmZzZXRdOjpVdGNOb3cu -VG9Vbml4VGltZU1pbGxpc2Vjb25kcygpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgSW52b2tl -LVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICRwbGFudW5nIC1hbmQgJHBsYW51bmcucGVy -c29uZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHAgaW4g -JHBsYW51bmcucGVyc29uZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -IGlmIChbc3RyaW5nXSRwLmlkIC1lcSBbc3RyaW5nXSRwZXJzb25JZCkgew0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcC5QU09iamVjdC5Qcm9wZXJ0aWVzWydh -dmF0YXJUcyddKSB7ICRwLmF2YXRhclRzID0gJHRzIH0NCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICBlbHNlIHsgJHAgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1l -ICdhdmF0YXJUcycgLU5vdGVQcm9wZXJ0eVZhbHVlICR0cyAtRm9yY2UgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrDQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAncGxhbnVuZy5qc29u -JyAkcGxhbnVuZyB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgfSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAg -ICBXcml0ZS1Mb2dFaW50cmFnICdhdmF0YXIuZ2VzZXR6dCcgQHsgcGVyc29uSWQgPSAkcGVyc29u -SWQ7IGJ5dGVzID0gJGJ5dGVzLkxlbmd0aCB9DQogICAgICAgICAgICAgICAgICAgICAgICBTZW5k -LUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCc7IGJ5dGVzID0g -JGJ5dGVzLkxlbmd0aDsgYXZhdGFyVHMgPSAkdHMgfQ0KICAgICAgICAgICAgICAgICAgICB9IGNh -dGNoIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiQXZh -dGFyLVVwbG9hZCBmZWhsZ2VzY2hsYWdlbjogIiArICRfLkV4Y2VwdGlvbi5NZXNzYWdlKSA1MDAN -CiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAg -ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoJE1ldGhvZCAtZXEgJ0RFTEVURScp -IHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJGlzdEJlcmVjaHRpZ3QpIHsgU2VuZC1F -cnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRpZ3VuZycgNDAzOyBjb250aW51ZSB9DQogICAg -ICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoVGVzdC1Q -YXRoIC1MaXRlcmFsUGF0aCAkYXZhdGFyRmlsZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIFJlbW92ZS1JdGVtIC1MaXRlcmFsUGF0aCAkYXZhdGFyRmlsZSAtRm9yY2UgLUVycm9yQWN0 -aW9uIFNpbGVudGx5Q29udGludWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1M -b2dFaW50cmFnICdhdmF0YXIuZW50ZmVybnQnIEB7IHBlcnNvbklkID0gJHBlcnNvbklkIH0NCiAg -ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIEludm9rZS1X -aXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICRwbGFudW5nID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkcGxhbnVuZyAtYW5kICRwbGFudW5nLnBlcnNv -bmVuKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRw -bGFudW5nLnBlcnNvbmVuKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp -ZiAoW3N0cmluZ10kcC5pZCAtZXEgW3N0cmluZ10kcGVyc29uSWQgLWFuZCAkcC5QU09iamVjdC5Q -cm9wZXJ0aWVzWydhdmF0YXJUcyddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgJHAuUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJ2F2YXRhclRzJykNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51 -bmcuanNvbicgJHBsYW51bmcgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAg -ICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2Vsb2VzY2h0 -JyB9DQogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICAg -ICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJBdmF0YXItTG9lc2NoZW4gZmVobGdlc2NobGFnZW46 -ICIgKyAkXy5FeGNlcHRpb24uTWVzc2FnZSkgNTAwDQogICAgICAgICAgICAgICAgICAgIH0NCiAg -ICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICB9DQogICAgICAgICAgICAjIEF2YXRhci1TdGF0aWMtU2VydmluZzogL2RhdGEvYXZhdGFycy88 -aWQ+LmpwZyBsaWVzdCBkaXJla3QgYXVzDQogICAgICAgICAgICAjICREYXRhRGlyL2F2YXRhcnMv -LiBCZXd1c3N0IGVpZ2VuZXIgUGZhZCBzdGF0dCB1ZWJlciBSZXNvbHZlLQ0KICAgICAgICAgICAg -IyBTYWZlUGF0aCwgd2VpbCBkb3J0IGRlciBBc3NldC1DYWNoZS1Sb290IGdlbnV0enQgd2lyZCAo -QXZhdGFyZQ0KICAgICAgICAgICAgIyBsaWVnZW4gYWJlciB1bnRlciBEYXRhRGlyKS4NCiAgICAg -ICAgICAgIGlmICgkUGF0aCAtbWF0Y2ggJ14vZGF0YS9hdmF0YXJzLyhcZCspXC5qcGckJyAtYW5k -ICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgJGF2YXRhckZpbGUgPSBKb2lu -LVBhdGggKEpvaW4tUGF0aCAkRGF0YURpciAnYXZhdGFycycpICgkbWF0Y2hlc1sxXSArICcuanBn -JykNCiAgICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkYXZhdGFyRmls -ZSAtUGF0aFR5cGUgTGVhZikgew0KICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9IFtTeXN0 -ZW0uSU8uRmlsZV06OlJlYWRBbGxCeXRlcygkYXZhdGFyRmlsZSkNCiAgICAgICAgICAgICAgICAg -ICAgJFJlc3BvbnNlLlN0YXR1c0NvZGUgPSAyMDANCiAgICAgICAgICAgICAgICAgICAgJFJlc3Bv -bnNlLkNvbnRlbnRUeXBlID0gJ2ltYWdlL2pwZWcnDQogICAgICAgICAgICAgICAgICAgIEFkZC1T -ZWN1cml0eUhlYWRlcnMgJFJlc3BvbnNlDQogICAgICAgICAgICAgICAgICAgICRSZXNwb25zZS5D -b250ZW50TGVuZ3RoNjQgPSAkY29udGVudC5MZW5ndGgNCiAgICAgICAgICAgICAgICAgICAgJFJl -c3BvbnNlLk91dHB1dFN0cmVhbS5Xcml0ZSgkY29udGVudCwgMCwgJGNvbnRlbnQuTGVuZ3RoKQ0K -ICAgICAgICAgICAgICAgICAgICAkUmVzcG9uc2UuT3V0cHV0U3RyZWFtLkNsb3NlKCkNCiAgICAg -ICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNw -b25zZSAoIkF2YXRhciBuaWNodCBnZWZ1bmRlbjogIiArICRQYXRoKSA0MDQNCiAgICAgICAgICAg -ICAgICB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAg -ICAgICAgIyA9PT09PSBTdGF0aXNjaGUgRGF0ZWllbiA9PT09PQ0KICAgICAgICAgICAgaWYgKCRQ -YXRoIC1lcSAnLycgLW9yICRQYXRoIC1lcSAnJykgeyAkUGF0aCA9ICcvaW5kZXguaHRtbCcgfQ0K -ICAgICAgICAgICAgJFJlbFBhdGggPSAkUGF0aC5UcmltU3RhcnQoJy8nKQ0KICAgICAgICAgICAg -IyBkYXRhLy1EaXJla3R6dWdyaWZmLUdhdGUgKFNwcmludCAxIOKAlCBTaWNoZXJoZWl0cy1Ob3Ri -cmVtc2UgMjAyNi0wNS0yOCk6DQogICAgICAgICAgICAjIEdFVCAvZGF0YS9hZG1pbi5qc29uICh1 -bmQgcGxhbnVuZy5qc29uLCBsb2didWNoLmpzb24sIGhpbndlaXNlLmpzb24sDQogICAgICAgICAg -ICAjIGNoYW5nZXMuanNvbiwgc293aWUgYWxsZSBCYWNrdXAtRGF0ZWllbikgbGllZmVydGUgdm9y -aGVyIFJvaC1KU09OIE9ITkUNCiAgICAgICAgICAgICMgQXV0aC1DaGVjay4gQXZhdGFyLVN1YnBm -YWQgd2lyZCBvYmVuIHNlcGFyYXQgZ2Vyb3V0ZXQuIEFsbGVzIGFuZGVyZQ0KICAgICAgICAgICAg -IyB1bnRlciAvZGF0YS8gZGFyZiBOVVIgZHVyY2ggZWluZSBleHBsaXppdGUgV2hpdGVsaXN0IChT -dGF0aXN0aWstIHVuZA0KICAgICAgICAgICAgIyBMb2didWNoLVRhcm4tTWFya3Vwcywgd2VpdGVy -IHVudGVuIGdlZ2F0ZWQpLiBTb25zdCA0MDQuDQogICAgICAgICAgICAjIE1pdHRlaWx1bmdzLVVw -bG9hZHMgKFNwcmludCBELTNiLCAyMDI2LTA1LTI5KTogdm9tIFNVIGhvY2hnZWxhZGVuZQ0KICAg -ICAgICAgICAgIyBCaWxkZXIgKyBQREZzIHVudGVyIGRhdGEvdXBsb2Fkcy9taXR0ZWlsdW5nZW4v -bV88dHM+XzxyYW5kPi48ZXh0Pi4NCiAgICAgICAgICAgICMgRW5kdW5ncy1XaGl0ZWxpc3QgdmVy -aGluZGVydCBDb2RlLVNtdWdnbGluZyB1ZWJlciBkZW4gUGZhZC4NCiAgICAgICAgICAgICRpc3RN -aXR0ZWlsdW5nVXBsb2FkID0gKCRSZWxQYXRoIC1tYXRjaCAnXmRhdGEvdXBsb2Fkcy9taXR0ZWls -dW5nZW4vbV9cZCtfW2EtejAtOV0rXC4oanBnfHBuZ3x3ZWJwfHBkZikkJykNCiAgICAgICAgICAg -IGlmICgkUmVsUGF0aCAtbGlrZSAnZGF0YS8qJyAtYW5kDQogICAgICAgICAgICAgICAgJFJlbFBh -dGggLW5lICdkYXRhL21haW5mcmFtZS5odG1sJyAtYW5kDQogICAgICAgICAgICAgICAgJFJlbFBh -dGggLW5lICdkYXRhL3Nhbml0aXplci5odG1sJyAtYW5kDQogICAgICAgICAgICAgICAgLW5vdCAk -aXN0TWl0dGVpbHVuZ1VwbG9hZCkgew0KICAgICAgICAgICAgICAgIExvZy1BcGkgKCdHQVRFIDQw -NCB7MH0gKGRhdGEvLURpcmVrdHp1Z3JpZmYgYmxvY2tpZXJ0KScgLWYgJFJlbFBhdGgpDQogICAg -ICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJVbmJla2FubnRlciBFbmRwdW5rdDog -JE1ldGhvZCAkUGF0aCIpIDQwNA0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAg -ICB9DQogICAgICAgICAgICAjIFZlcnNjaGxlaWVydW5ncy1GaWx0ZXI6IGRhcyBTdGF0aXN0aWst -IHVuZCBMb2didWNoLU1vZHVsIHNhbXQNCiAgICAgICAgICAgICMgTWFya3VwLUZyYWdtZW50IHdl -cmRlbiBudXIgYW4gQmVyZWNodGlndGUgYXVzZ2VsaWVmZXJ0Lg0KICAgICAgICAgICAgIyBEaXJl -a3RlciBadWdyaWZmIGR1cmNoIFVuYmVyZWNodGlndGUgKEJyb3dzZXItVVJMLUVpbmdhYmUsDQog -ICAgICAgICAgICAjIFNvdXJjZS1TdG9lYmVybikgYmVrb21tdCA0MDQg4oCUIHdpZSBiZWkgamVk -ZW0gbmljaHQgZXhpc3RpZXJlbmRlbg0KICAgICAgICAgICAgIyBQZmFkLCBrZWluIFN0YXR1c2Nv -ZGUtVmVycmF0Lg0KICAgICAgICAgICAgaWYgKCRSZWxQYXRoIC1lcSAnanMvc3RhdGlzdGlrLmpz -JyAtb3IgJFJlbFBhdGggLWVxICdkYXRhL21haW5mcmFtZS5odG1sJykgew0KICAgICAgICAgICAg -ICAgIGlmICgtbm90IChUZXN0LURhcmZCZXJlaWNoICdzdGF0aXN0aWsnKSkgew0KICAgICAgICAg -ICAgICAgICAgICBMb2ctQXBpICgnR0FURSA0MDQgezB9IChrZWluIFN0YXRpc3Rpay1SZWNodCkn -IC1mICRSZWxQYXRoKQ0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAo +fQ0KICAgICAgICAgICAgICAgICRhID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAg +ICAgICAgICAgJGRhdHVtID0gW3N0cmluZ10kYS5kYXR1bQ0KICAgICAgICAgICAgICAgICRwZXJz +b25JZCA9IFtzdHJpbmddJGEucGVyc29uSWQNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVz +dC1Mb2NrU2FmZURhdHVtICRkYXR1bSkgLW9yIC1ub3QgKFRlc3QtTG9ja1NhZmVJZCAkcGVyc29u +SWQpKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0 +aWdlIGRhdHVtL3BlcnNvbklkJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgICR1c2VyID0gR2V0LUFrdHVlbGxlckJlbnV0emVyDQogICAgICAgICAgICAg +ICAgJHJvbGxlID0gKEdldC1SZWNodGUpLnJvbGxlDQogICAgICAgICAgICAgICAgJHJlcyA9IEFj +cXVpcmUtQ2VsbExvY2sgJGRhdHVtICRwZXJzb25JZCAkdXNlciAkcm9sbGUgJGZhbHNlDQogICAg +ICAgICAgICAgICAgaWYgKC1ub3QgJHJlcy5vaykgew0KICAgICAgICAgICAgICAgICAgICBTZW5k +LUpzb25PYmplY3QgJFJlc3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgICAgICBmZWhsZXIg +ICAgPSAnZ2VzcGVycnQnDQogICAgICAgICAgICAgICAgICAgICAgICBtZWxkdW5nICAgPSAiV2ly +ZCBiZWFyYmVpdGV0IHZvbiAkKCRyZXMuZXhpc3RpbmcudXNlcm5hbWUpIg0KICAgICAgICAgICAg +ICAgICAgICAgICAgc3BlcnJlciAgID0gJHJlcy5leGlzdGluZy51c2VybmFtZQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgcm9sbGUgICAgID0gJHJlcy5leGlzdGluZy5yb2xsZQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgc2VpdCAgICAgID0gJHJlcy5leGlzdGluZy5sb2NrZWRBdA0KICAgICAg +ICAgICAgICAgICAgICAgICAga2FubkZvcmNlID0gKFRlc3QtRGFyZkxvY2tVZWJlcnNjaHJlaWJl +bikNCiAgICAgICAgICAgICAgICAgICAgfSA0MjMNCiAgICAgICAgICAgICAgICAgICAgY29udGlu +dWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRS +ZXNwb25zZSBAew0KICAgICAgICAgICAgICAgICAgICBvayAgICAgICA9ICR0cnVlDQogICAgICAg +ICAgICAgICAgICAgIHRva2VuICAgID0gJHJlcy5sb2NrLnRva2VuDQogICAgICAgICAgICAgICAg +ICAgIGRhdHVtICAgID0gJGRhdHVtDQogICAgICAgICAgICAgICAgICAgIHBlcnNvbklkID0gJHBl +cnNvbklkDQogICAgICAgICAgICAgICAgICAgIHJvbGxlICAgID0gJHJvbGxlDQogICAgICAgICAg +ICAgICAgICAgIGxvY2tlZEF0ID0gJHJlcy5sb2NrLmxvY2tlZEF0DQogICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAg +ICMgUE9TVCAvYXBpL2xvY2svemVsbGUvZm9yY2UgIHsgZGF0dW0sIHBlcnNvbklkIH0gLT4gdWVi +ZXJzY2hyZWlidCBmcmVtZGVuIExvY2sNCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkv +bG9jay96ZWxsZS9mb3JjZScgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAg +ICAgICBpZiAoLW5vdCAoVGVzdC1EYXJmTG9ja1VlYmVyc2NocmVpYmVuKSkgew0KICAgICAgICAg +ICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnRm9yY2UtTG9jayBudXIgZnVlciBGYWNo +YXVmc2ljaHQvU3VwZXJVc2VyJyA0MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAg +aWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3Mn +IDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRhID0gJGJvZHkgfCBDb252ZXJ0RnJv +bS1Kc29uDQogICAgICAgICAgICAgICAgJGRhdHVtID0gW3N0cmluZ10kYS5kYXR1bQ0KICAgICAg +ICAgICAgICAgICRwZXJzb25JZCA9IFtzdHJpbmddJGEucGVyc29uSWQNCiAgICAgICAgICAgICAg +ICBpZiAoLW5vdCAoVGVzdC1Mb2NrU2FmZURhdHVtICRkYXR1bSkgLW9yIC1ub3QgKFRlc3QtTG9j +a1NhZmVJZCAkcGVyc29uSWQpKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJl +c3BvbnNlICdVbmd1ZWx0aWdlIGRhdHVtL3BlcnNvbklkJyA0MDA7IGNvbnRpbnVlDQogICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICR1c2VyID0gR2V0LUFrdHVlbGxlckJlbnV0emVy +DQogICAgICAgICAgICAgICAgJHJvbGxlID0gKEdldC1SZWNodGUpLnJvbGxlDQogICAgICAgICAg +ICAgICAgJHJlcyA9IEFjcXVpcmUtQ2VsbExvY2sgJGRhdHVtICRwZXJzb25JZCAkdXNlciAkcm9s +bGUgJHRydWUNCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdsb2NrLmZvcmNlJyBA +eyBkYXR1bSA9ICRkYXR1bTsgcGVyc29uSWQgPSAkcGVyc29uSWQ7IHJvbGxlID0gJHJvbGxlIH0N +CiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7DQogICAgICAgICAg +ICAgICAgICAgIG9rICAgICAgID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgdG9rZW4gICAg +PSAkcmVzLmxvY2sudG9rZW4NCiAgICAgICAgICAgICAgICAgICAgZGF0dW0gICAgPSAkZGF0dW0N +CiAgICAgICAgICAgICAgICAgICAgcGVyc29uSWQgPSAkcGVyc29uSWQNCiAgICAgICAgICAgICAg +ICAgICAgcm9sbGUgICAgPSAkcm9sbGUNCiAgICAgICAgICAgICAgICAgICAgbG9ja2VkQXQgPSAk +cmVzLmxvY2subG9ja2VkQXQNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY29u +dGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBQT1NUIC9hcGkvbG9jay96ZWxs +ZS9oZWFydGJlYXQgIHsgdG9rZW4gfSAtPiBha3R1YWxpc2llcnQgbGFzdEJlYXQNCiAgICAgICAg +ICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvbG9jay96ZWxsZS9oZWFydGJlYXQnIC1hbmQgJE1ldGhv +ZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVl +c3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25z +ZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGEg +PSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkdG9rZW4gPSBpZiAo +JGEuUFNPYmplY3QuUHJvcGVydGllc1sndG9rZW4nXSkgeyBbc3RyaW5nXSRhLnRva2VuIH0gZWxz +ZSB7ICcnIH0NCiAgICAgICAgICAgICAgICBpZiAoW3N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFj +ZSgkdG9rZW4pKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdUb2tlbiBmZWhsdCcgNDAwOyBjb250 +aW51ZSB9DQogICAgICAgICAgICAgICAgJHJlcyA9IFJlZnJlc2gtQ2VsbExvY2sgJHRva2VuDQog +ICAgICAgICAgICAgICAgaWYgKC1ub3QgJHJlcy5vaykgew0KICAgICAgICAgICAgICAgICAgICBT +ZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IGZlaGxlciA9ICd1bmJla2FubnRlcl9sb2NrJzsg +bWVsZHVuZyA9ICdMb2NrIGV4aXN0aWVydCBuaWNodCAobWVocikuJyB9IDQwNA0KICAgICAgICAg +ICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBT +ZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IG9rID0gJHRydWU7IGxhc3RCZWF0ID0gJHJlcy5s +b2NrLmxhc3RCZWF0IH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0K +DQogICAgICAgICAgICAjIERFTEVURSAvYXBpL2xvY2svemVsbGUgIHsgdG9rZW4gfSAtPiBMb2Nr +IGZyZWlnZWJlbiAoYXVjaCB2aWEgUXVlcnktU3RyaW5nIGZ1ZXIgc2VuZEJlYWNvbikNCiAgICAg +ICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvbG9jay96ZWxsZScgLWFuZCAkTWV0aG9kIC1lcSAn +REVMRVRFJykgew0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQog +ICAgICAgICAgICAgICAgJHRva2VuID0gJG51bGwNCiAgICAgICAgICAgICAgICBpZiAoJGJvZHkp +IHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsgJGEgPSAkYm9keSB8IENvbnZlcnRGcm9tLUpz +b247IGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0b2tlbiddKSB7ICR0b2tlbiA9IFtzdHJp +bmddJGEudG9rZW4gfSB9IGNhdGNoIHt9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgIGlmIChbc3RyaW5nXTo6SXNOdWxsT3JXaGl0ZVNwYWNlKCR0b2tlbikgLWFuZCAkUmVxdWVz +dC5VcmwuUXVlcnkpIHsNCiAgICAgICAgICAgICAgICAgICAgJHEgPSBbU3lzdGVtLldlYi5IdHRw +VXRpbGl0eV06OlBhcnNlUXVlcnlTdHJpbmcoJFJlcXVlc3QuVXJsLlF1ZXJ5KQ0KICAgICAgICAg +ICAgICAgICAgICAkdG9rZW4gPSBbc3RyaW5nXSRxWyd0b2tlbiddDQogICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgIGlmIChbc3RyaW5nXTo6SXNOdWxsT3JXaGl0ZVNwYWNlKCR0b2tl +bikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1Rva2VuIGZlaGx0JyA0MDA7IGNvbnRpbnVlIH0N +CiAgICAgICAgICAgICAgICAkcmVzID0gUmVsZWFzZS1DZWxsTG9jayAkdG9rZW4NCiAgICAgICAg +ICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IG9rID0gJHJlcy5vayB9DQogICAg +ICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBHRVQg +L2FwaS9sb2NrL3plbGxlbiAtPiBMaXN0ZSBhbGxlciBha3RpdmVuIExvY2tzIChmdWVyIExpdmUt +SW5kaWNhdG9yKQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9sb2NrL3plbGxlbicg +LWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVj +dCAkUmVzcG9uc2UgQHsgbG9ja3MgPSAoR2V0LUFsbEFjdGl2ZUNlbGxMb2NrcykgfQ0KICAgICAg +ICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgUE9TVCAv +YXBpL3ZlcmFudHdvcnR1bmcvYXVmZ2VydWVja3Qg4oCUIFN0YXRpc3Rpay1DYXB0dXJlIGZ1ZXIg +ZGVuDQogICAgICAgICAgICAjICJFaW5nZXNwcnVuZ2VuIi1CYWxrZW4gaW4gZGVyIFNjaGljaHR2 +ZXJ0ZWlsdW5nLiBXaXJkIHZvbSBDbGllbnQNCiAgICAgICAgICAgICMgZ2VmZXVlcnQsIHNvYmFs +ZCBqZW1hbmQgaW5uZXJoYWxiIGRlciAxNC1UYWdlLVZlcmJpbmRsaWNoa2VpdCBuZXUNCiAgICAg +ICAgICAgICMgaW4gZGllIFRvcC0yICgxLi8yLiBWSTMtREdMKSBlaW5lciBTY2hpY2h0IGF1ZnJ1 +ZWNrdCDigJQgYWxzbw0KICAgICAgICAgICAgIyBhdXNzZXJwbGFubWFlc3NpZyBWZXJhbnR3b3J0 +dW5nIHVlYmVybmltbXQuDQogICAgICAgICAgICAjIEJvZHk6IHsgcGVyc29uSWQsIGRhdHVtLCBz +Y2hpY2h0LCBzdHVmZSwgdm9yaGVyV2VydCwgYXVzbG9lc2VyUGVyc29uSWQgfQ0KICAgICAgICAg +ICAgaWYgKCRQYXRoIC1lcSAnL2FwaS92ZXJhbnR3b3J0dW5nL2F1ZmdlcnVlY2t0JyAtYW5kICRN +ZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRS +ZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVz +cG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg +IHRyeSB7ICRhID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uIH0gY2F0Y2ggeyBTZW5kLUVycm9y +ICRSZXNwb25zZSAnVW5ndWVsdGlnZXMgSlNPTicgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAg +ICAgICAgJHBpZCA9IGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWydwZXJzb25JZCddKSB7IFtz +dHJpbmddJGEucGVyc29uSWQgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICRkYXQgPSBp +ZiAoJGEuUFNPYmplY3QuUHJvcGVydGllc1snZGF0dW0nXSkgeyBbc3RyaW5nXSRhLmRhdHVtIH0g +ZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcGlkIC1vciAtbm90ICRkYXQp +IHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ3BlcnNvbklkL2RhdHVtIGZlaGx0JyA0MDA7IGNvbnRp +bnVlIH0NCiAgICAgICAgICAgICAgICAkZmVsZGVyID0gW29yZGVyZWRdQHsNCiAgICAgICAgICAg +ICAgICAgICAgcGVyc29uSWQgICA9ICRwaWQNCiAgICAgICAgICAgICAgICAgICAgZGF0dW0gICAg +ICA9ICRkYXQNCiAgICAgICAgICAgICAgICAgICAgc2NoaWNodCAgICA9IGlmICgkYS5QU09iamVj +dC5Qcm9wZXJ0aWVzWydzY2hpY2h0J10pIHsgW3N0cmluZ10kYS5zY2hpY2h0IH0gZWxzZSB7ICcn +IH0NCiAgICAgICAgICAgICAgICAgICAgc3R1ZmUgICAgICA9IGlmICgkYS5QU09iamVjdC5Qcm9w +ZXJ0aWVzWydzdHVmZSddKSB7IFtpbnRdJGEuc3R1ZmUgfSBlbHNlIHsgMCB9DQogICAgICAgICAg +ICAgICAgICAgIHZvcmhlcldlcnQgPSBpZiAoJGEuUFNPYmplY3QuUHJvcGVydGllc1sndm9yaGVy +V2VydCddKSB7IFtzdHJpbmddJGEudm9yaGVyV2VydCB9IGVsc2UgeyAnJyB9DQogICAgICAgICAg +ICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWydhdXNs +b2VzZXJQZXJzb25JZCddKSB7DQogICAgICAgICAgICAgICAgICAgICRmZWxkZXJbJ2F1c2xvZXNl +clBlcnNvbklkJ10gPSBbc3RyaW5nXSRhLmF1c2xvZXNlclBlcnNvbklkDQogICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3ZlcmFudHdvcnR1bmcuZWlu +Z2VzcHJ1bmdlbicgJGZlbGRlcg0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVz +cG9uc2UgQHsgb2sgPSAkdHJ1ZSB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAg +ICAgIH0NCg0KDQogICAgICAgICAgICAjIEdFVCAvYXBpL3BsYW51bmcvY2hhbmdlcz9zZWl0PTxp +c28tdHM+IC0+IERlbHRhLUxpc3RlIGZ1ZXIgTGl2ZS1TeW5jDQogICAgICAgICAgICBpZiAoJFBh +dGggLWVxICcvYXBpL3BsYW51bmcvY2hhbmdlcycgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0K +ICAgICAgICAgICAgICAgICRxID0gW1N5c3RlbS5XZWIuSHR0cFV0aWxpdHldOjpQYXJzZVF1ZXJ5 +U3RyaW5nKCRSZXF1ZXN0LlVybC5RdWVyeSkNCiAgICAgICAgICAgICAgICAkbG9nID0gUmVhZC1K +c29uT2JqZWN0ICdjaGFuZ2VzLmpzb24nDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAk +bG9nIC1vciAtbm90ICgkbG9nIC1pcyBbYXJyYXldKSkgeyAkbG9nID0gQCgpIH0NCiAgICAgICAg +ICAgICAgICAkbWF4U2VxID0gR2V0LU1heENoYW5nZVNlcSAkbG9nDQogICAgICAgICAgICAgICAg +aWYgKCRxLkFsbEtleXMgLWNvbnRhaW5zICdzZWl0X3NlcScpIHsNCiAgICAgICAgICAgICAgICAg +ICAgIyBOZXVlciByYWNlLWZyZWllciBzZXEtQ3Vyc29yIChDaGFuZ2VzICsgc2VydmVyU2VxIGF1 +cw0KICAgICAgICAgICAgICAgICAgICAjIERFTVNFTEJFTiBSZWFkKS4gTGVlcmVyIHNlaXRfc2Vx +ID0gRXJzdC1TeW5jIC0+IG51ciBDdXJzb3IuDQogICAgICAgICAgICAgICAgICAgICRyYXcgPSBb +c3RyaW5nXSRxWydzZWl0X3NlcSddDQogICAgICAgICAgICAgICAgICAgIGlmIChbc3RyaW5nXTo6 +SXNOdWxsT3JFbXB0eSgkcmF3KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGNoYW5nZXMg +PSBAKCkNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgICRzcSA9IDA7IFt2b2lkXVtpbnRdOjpUcnlQYXJzZSgkcmF3LCBbcmVmXSRzcSkNCiAgICAg +ICAgICAgICAgICAgICAgICAgICRjaGFuZ2VzID0gQCgkbG9nIHwgV2hlcmUtT2JqZWN0IHsgJG51 +bGwgLW5lICRfLnNlcSAtYW5kIFtpbnRdJF8uc2VxIC1ndCAkc3EgfSkNCiAgICAgICAgICAgICAg +ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7 +DQogICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJUcyAgPSAoR2V0LURhdGUpLlRvVW5pdmVy +c2FsVGltZSgpLlRvU3RyaW5nKCdvJykNCiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlclNl +cSA9ICRtYXhTZXENCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMgICA9IFtvYmplY3Rb +XV0kY2hhbmdlcw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNl +IHsNCiAgICAgICAgICAgICAgICAgICAgIyBCYWNrd2FyZC1jb21wYXQ6IGFsdGVyIFdhbGwtQ2xv +Y2stQ3Vyc29yIChhbHRlIENsaWVudHMpLg0KICAgICAgICAgICAgICAgICAgICAkc2VpdCA9IFtz +dHJpbmddJHFbJ3NlaXQnXQ0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJl +c3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJUcyAgPSAoR2V0LURhdGUp +LlRvVW5pdmVyc2FsVGltZSgpLlRvU3RyaW5nKCdvJykNCiAgICAgICAgICAgICAgICAgICAgICAg +IHNlcnZlclNlcSA9ICRtYXhTZXENCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMgICA9 +IChHZXQtQ2hhbmdlc1NpbmNlICRzZWl0KQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAg +ICAgICAgICAgICMgPT09PT0gUHJvZmlsYmlsZGVyIChBdmF0YXJlKSA9PT09PQ0KICAgICAgICAg +ICAgIyBEYXRlaTogJERhdGFEaXIvYXZhdGFycy88aWQ+LmpwZyAgIChKUEVHLCB2b20gQ2xpZW50 +IGF1ZiAyMDB4MjAwDQogICAgICAgICAgICAjIGhlcnVudGVyZ2VyZWNobmV0LCB1ZWJsaWNoIDUt +MjUgS0IpLg0KICAgICAgICAgICAgIw0KICAgICAgICAgICAgIyBCZXJlY2h0aWd1bmc6DQogICAg +ICAgICAgICAjICAgUE9TVC9ERUxFVEU6IFNVL0ZBIE9ERVIgZWlnZW5lIFBlcnNvbklkIChTZWxm +LVNlcnZpY2UpLg0KICAgICAgICAgICAgIyAgIEdFVDogICAgICAgICBhbGxlIGVpbmdlbG9nZ3Rl +biBVc2VyIChpbSBHcmlkIHNpY2h0YmFyKS4NCiAgICAgICAgICAgICMNCiAgICAgICAgICAgICMg +UE9TVC1Cb2R5OiB7ICJkYXRhVXJsIjogImRhdGE6aW1hZ2UvanBlZztiYXNlNjQsPC4uLj4iIH0N +CiAgICAgICAgICAgICMgMjUwIEtCIGhhcnRlciBDYXAgKGRlZmVuc2l2IOKAlCBDbGllbnQgc2No +aWNrdCB0eXBpc2NoIDwzMCBLQikuDQogICAgICAgICAgICBpZiAoJFBhdGggLW1hdGNoICdeL2Fw +aS9wZXJzb25lbi8oXGQrKS9hdmF0YXIkJykgew0KICAgICAgICAgICAgICAgICRwZXJzb25JZCA9 +ICRtYXRjaGVzWzFdDQogICAgICAgICAgICAgICAgJHIgPSBHZXQtUmVjaHRlDQogICAgICAgICAg +ICAgICAgJGlzdEVpZ2VuID0gKCRudWxsIC1uZSAkci5tZWluZVBlcnNvbklkIC1hbmQgW2ludF0k +cGVyc29uSWQgLWVxIFtpbnRdJHIubWVpbmVQZXJzb25JZCkNCiAgICAgICAgICAgICAgICAkaXN0 +QmVyZWNodGlndCA9IChUZXN0LUlzdEFkbWluKSAtb3IgJGlzdEVpZ2VuDQogICAgICAgICAgICAg +ICAgJGF2YXRhckRpciA9IEpvaW4tUGF0aCAkRGF0YURpciAnYXZhdGFycycNCiAgICAgICAgICAg +ICAgICBpZiAoLW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkYXZhdGFyRGlyKSkgew0KICAg +ICAgICAgICAgICAgICAgICB0cnkgeyBOZXctSXRlbSAtSXRlbVR5cGUgRGlyZWN0b3J5IC1QYXRo +ICRhdmF0YXJEaXIgLUZvcmNlIHwgT3V0LU51bGwgfSBjYXRjaCB7fQ0KICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICAkYXZhdGFyRmlsZSA9IEpvaW4tUGF0aCAkYXZhdGFyRGlyICgk +cGVyc29uSWQgKyAnLmpwZycpDQogICAgICAgICAgICAgICAgaWYgKCRNZXRob2QgLWVxICdQT1NU +Jykgew0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkaXN0QmVyZWNodGlndCkgeyBTZW5k +LUVycm9yICRSZXNwb25zZSAnS2VpbmUgQmVyZWNodGlndW5nJyA0MDM7IGNvbnRpbnVlIH0NCiAg +ICAgICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAg +ICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2Ug +enUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAg +ICAgICAgICAgICAgICAgICAgICAgJG9iaiA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAg +ICAgICAgICAgICAgICAgICAgICAgJGRhdGFVcmwgPSBbc3RyaW5nXSRvYmouZGF0YVVybA0KICAg +ICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJGRhdGFVcmwgLW9yIC1ub3QgJGRhdGFVcmwu +U3RhcnRzV2l0aCgnZGF0YTppbWFnZS8nKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0aWdlcyBCaWxkZm9ybWF0IChlcndhcnRlIGRh +dGE6aW1hZ2UvLi4uO2Jhc2U2NCwuLi4pJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAkYmFzZTY0ID0gJGRhdGFVcmwgLXJl +cGxhY2UgJ15kYXRhOmltYWdlL1thLXpBLVpdKztiYXNlNjQsJywgJycNCiAgICAgICAgICAgICAg +ICAgICAgICAgICRieXRlcyA9IFtTeXN0ZW0uQ29udmVydF06OkZyb21CYXNlNjRTdHJpbmcoJGJh +c2U2NCkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYnl0ZXMuTGVuZ3RoIC1ndCAyNjIx +NDQpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0JpbGQgenUgZ3Jvc3MgKG1heCAyNTAgS0IpJyA0 +MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFtTeXN0ZW0uSU8uRmlsZV06 +OldyaXRlQWxsQnl0ZXMoJGF2YXRhckZpbGUsICRieXRlcykNCiAgICAgICAgICAgICAgICAgICAg +ICAgICMgYXZhdGFyVHMgaW4gcGxhbnVuZy5qc29uIHNldHplbiwgZGFtaXQgZGVyIENhY2hlLUJ1 +c3Rlcg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBuYWNoIFJlbG9hZCBiZWthbm50IGlzdCAo +Q2xpZW50IGhhZW5ndCA/dHM9PGF2YXRhclRzPg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBh +biBkaWUgQmlsZC1VUkwpLg0KICAgICAgICAgICAgICAgICAgICAgICAgJHRzID0gW2xvbmddKFtE +YXRlVGltZU9mZnNldF06OlV0Y05vdy5Ub1VuaXhUaW1lTWlsbGlzZWNvbmRzKCkpDQogICAgICAg +ICAgICAgICAgICAgICAgICBJbnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpzb24nIHsNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZyA9IFJlYWQtSnNvbk9iamVjdCAncGxh +bnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJHBs +YW51bmcgLWFuZCAkcGxhbnVuZy5wZXJzb25lbikgew0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICBmb3JlYWNoICgkcCBpbiAkcGxhbnVuZy5wZXJzb25lbikgew0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFtzdHJpbmddJHAuaWQgLWVxIFtzdHJpbmddJHBl +cnNvbklkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRw +LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2F2YXRhclRzJ10pIHsgJHAuYXZhdGFyVHMgPSAkdHMgfQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkcCB8IEFkZC1N +ZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ2F2YXRhclRzJyAtTm90ZVByb3BlcnR5VmFsdWUgJHRz +IC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1K +c29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRwbGFudW5nIHwgT3V0LU51bGwNCiAgICAgICAgICAg +ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9IHwgT3V0LU51bGwN +CiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2F2YXRhci5nZXNldHp0 +JyBAeyBwZXJzb25JZCA9ICRwZXJzb25JZDsgYnl0ZXMgPSAkYnl0ZXMuTGVuZ3RoIH0NCiAgICAg +ICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0g +J2dlc3BlaWNoZXJ0JzsgYnl0ZXMgPSAkYnl0ZXMuTGVuZ3RoOyBhdmF0YXJUcyA9ICR0cyB9DQog +ICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICAgICAgU2Vu +ZC1FcnJvciAkUmVzcG9uc2UgKCJBdmF0YXItVXBsb2FkIGZlaGxnZXNjaGxhZ2VuOiAiICsgJF8u +RXhjZXB0aW9uLk1lc3NhZ2UpIDUwMA0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlm +ICgkTWV0aG9kIC1lcSAnREVMRVRFJykgew0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAk +aXN0QmVyZWNodGlndCkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQmVyZWNodGlndW5n +JyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAg +ICAgICAgICAgICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRhdmF0YXJGaWxlKSB7DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlLUl0ZW0gLUxpdGVyYWxQYXRoICRhdmF0 +YXJGaWxlIC1Gb3JjZSAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2F2YXRhci5lbnRmZXJudCcgQHsgcGVy +c29uSWQgPSAkcGVyc29uSWQgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgSW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51 +bmcuanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICRwbGFu +dW5nIC1hbmQgJHBsYW51bmcucGVyc29uZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgZm9yZWFjaCAoJHAgaW4gJHBsYW51bmcucGVyc29uZW4pIHsNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIGlmIChbc3RyaW5nXSRwLmlkIC1lcSBbc3RyaW5nXSRwZXJz +b25JZCAtYW5kICRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2F2YXRhclRzJ10pIHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcC5QU09iamVjdC5Qcm9wZXJ0aWVzLlJl +bW92ZSgnYXZhdGFyVHMnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +IGJyZWFrDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +V3JpdGUtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJyAkcGxhbnVuZyB8IE91dC1OdWxsDQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfSB8IE91 +dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNl +IEB7IHN0YXR1cyA9ICdnZWxvZXNjaHQnIH0NCiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7 +DQogICAgICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkF2YXRhci1M +b2VzY2hlbiBmZWhsZ2VzY2hsYWdlbjogIiArICRfLkV4Y2VwdGlvbi5NZXNzYWdlKSA1MDANCiAg +ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICMgQXZhdGFyLVN0YXRpYy1T +ZXJ2aW5nOiAvZGF0YS9hdmF0YXJzLzxpZD4uanBnIGxpZXN0IGRpcmVrdCBhdXMNCiAgICAgICAg +ICAgICMgJERhdGFEaXIvYXZhdGFycy8uIEJld3Vzc3QgZWlnZW5lciBQZmFkIHN0YXR0IHVlYmVy +IFJlc29sdmUtDQogICAgICAgICAgICAjIFNhZmVQYXRoLCB3ZWlsIGRvcnQgZGVyIEFzc2V0LUNh +Y2hlLVJvb3QgZ2VudXR6dCB3aXJkIChBdmF0YXJlDQogICAgICAgICAgICAjIGxpZWdlbiBhYmVy +IHVudGVyIERhdGFEaXIpLg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1tYXRjaCAnXi9kYXRhL2F2 +YXRhcnMvKFxkKylcLmpwZyQnIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAg +ICAgICAkYXZhdGFyRmlsZSA9IEpvaW4tUGF0aCAoSm9pbi1QYXRoICREYXRhRGlyICdhdmF0YXJz +JykgKCRtYXRjaGVzWzFdICsgJy5qcGcnKQ0KICAgICAgICAgICAgICAgIGlmIChUZXN0LVBhdGgg +LUxpdGVyYWxQYXRoICRhdmF0YXJGaWxlIC1QYXRoVHlwZSBMZWFmKSB7DQogICAgICAgICAgICAg +ICAgICAgICRjb250ZW50ID0gW1N5c3RlbS5JTy5GaWxlXTo6UmVhZEFsbEJ5dGVzKCRhdmF0YXJG +aWxlKQ0KICAgICAgICAgICAgICAgICAgICAkUmVzcG9uc2UuU3RhdHVzQ29kZSA9IDIwMA0KICAg +ICAgICAgICAgICAgICAgICAkUmVzcG9uc2UuQ29udGVudFR5cGUgPSAnaW1hZ2UvanBlZycNCiAg +ICAgICAgICAgICAgICAgICAgQWRkLVNlY3VyaXR5SGVhZGVycyAkUmVzcG9uc2UNCiAgICAgICAg +ICAgICAgICAgICAgJFJlc3BvbnNlLkNvbnRlbnRMZW5ndGg2NCA9ICRjb250ZW50Lkxlbmd0aA0K +ICAgICAgICAgICAgICAgICAgICAkUmVzcG9uc2UuT3V0cHV0U3RyZWFtLldyaXRlKCRjb250ZW50 +LCAwLCAkY29udGVudC5MZW5ndGgpDQogICAgICAgICAgICAgICAgICAgICRSZXNwb25zZS5PdXRw +dXRTdHJlYW0uQ2xvc2UoKQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAg +ICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiQXZhdGFyIG5pY2h0IGdlZnVuZGVuOiAiICsg +JFBhdGgpIDQwNA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0K +ICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09IFN0YXRpc2NoZSBEYXRlaWVuID09 +PT09DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvJyAtb3IgJFBhdGggLWVxICcnKSB7ICRQ +YXRoID0gJy9pbmRleC5odG1sJyB9DQogICAgICAgICAgICAkUmVsUGF0aCA9ICRQYXRoLlRyaW1T +dGFydCgnLycpDQogICAgICAgICAgICAjIGRhdGEvLURpcmVrdHp1Z3JpZmYtR2F0ZSAoU3ByaW50 +IDEg4oCUIFNpY2hlcmhlaXRzLU5vdGJyZW1zZSAyMDI2LTA1LTI4KToNCiAgICAgICAgICAgICMg +R0VUIC9kYXRhL2FkbWluLmpzb24gKHVuZCBwbGFudW5nLmpzb24sIGxvZ2J1Y2guanNvbiwgaGlu +d2Vpc2UuanNvbiwNCiAgICAgICAgICAgICMgY2hhbmdlcy5qc29uLCBzb3dpZSBhbGxlIEJhY2t1 +cC1EYXRlaWVuKSBsaWVmZXJ0ZSB2b3JoZXIgUm9oLUpTT04gT0hORQ0KICAgICAgICAgICAgIyBB +dXRoLUNoZWNrLiBBdmF0YXItU3VicGZhZCB3aXJkIG9iZW4gc2VwYXJhdCBnZXJvdXRldC4gQWxs +ZXMgYW5kZXJlDQogICAgICAgICAgICAjIHVudGVyIC9kYXRhLyBkYXJmIE5VUiBkdXJjaCBlaW5l +IGV4cGxpeml0ZSBXaGl0ZWxpc3QgKFN0YXRpc3Rpay0gdW5kDQogICAgICAgICAgICAjIExvZ2J1 +Y2gtVGFybi1NYXJrdXBzLCB3ZWl0ZXIgdW50ZW4gZ2VnYXRlZCkuIFNvbnN0IDQwNC4NCiAgICAg +ICAgICAgICMgTWl0dGVpbHVuZ3MtVXBsb2FkcyAoU3ByaW50IEQtM2IsIDIwMjYtMDUtMjkpOiB2 +b20gU1UgaG9jaGdlbGFkZW5lDQogICAgICAgICAgICAjIEJpbGRlciArIFBERnMgdW50ZXIgZGF0 +YS91cGxvYWRzL21pdHRlaWx1bmdlbi9tXzx0cz5fPHJhbmQ+LjxleHQ+Lg0KICAgICAgICAgICAg +IyBFbmR1bmdzLVdoaXRlbGlzdCB2ZXJoaW5kZXJ0IENvZGUtU211Z2dsaW5nIHVlYmVyIGRlbiBQ +ZmFkLg0KICAgICAgICAgICAgJGlzdE1pdHRlaWx1bmdVcGxvYWQgPSAoJFJlbFBhdGggLW1hdGNo +ICdeZGF0YS91cGxvYWRzL21pdHRlaWx1bmdlbi9tX1xkK19bYS16MC05XStcLihqcGd8cG5nfHdl +YnB8cGRmKSQnKQ0KICAgICAgICAgICAgaWYgKCRSZWxQYXRoIC1saWtlICdkYXRhLyonIC1hbmQN +CiAgICAgICAgICAgICAgICAkUmVsUGF0aCAtbmUgJ2RhdGEvbWFpbmZyYW1lLmh0bWwnIC1hbmQN +CiAgICAgICAgICAgICAgICAkUmVsUGF0aCAtbmUgJ2RhdGEvc2FuaXRpemVyLmh0bWwnIC1hbmQN +CiAgICAgICAgICAgICAgICAtbm90ICRpc3RNaXR0ZWlsdW5nVXBsb2FkKSB7DQogICAgICAgICAg +ICAgICAgTG9nLUFwaSAoJ0dBVEUgNDA0IHswfSAoZGF0YS8tRGlyZWt0enVncmlmZiBibG9ja2ll +cnQpJyAtZiAkUmVsUGF0aCkNCiAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAo IlVuYmVrYW5udGVyIEVuZHB1bmt0OiAkTWV0aG9kICRQYXRoIikgNDA0DQogICAgICAgICAgICAg -ICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlaWYg -KCRSZWxQYXRoIC1lcSAnanMvbG9nYnVjaC5qcycgLW9yICRSZWxQYXRoIC1lcSAnZGF0YS9zYW5p -dGl6ZXIuaHRtbCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJmQmVyZWlj -aCAnbG9nYnVjaCcpKSB7DQogICAgICAgICAgICAgICAgICAgIExvZy1BcGkgKCdHQVRFIDQwNCB7 -MH0gKGtlaW4gTG9nYnVjaC1SZWNodCknIC1mICRSZWxQYXRoKQ0KICAgICAgICAgICAgICAgICAg -ICBTZW5kLUVycm9yICRSZXNwb25zZSAoIlVuYmVrYW5udGVyIEVuZHB1bmt0OiAkTWV0aG9kICRQ -YXRoIikgNDA0DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJEZpbGVQYXRoID0gUmVzb2x2ZS1TYWZlUGF0 -aCAkUmVsUGF0aA0KICAgICAgICAgICAgJHZvbkZhbGxiYWNrID0gJGZhbHNlDQogICAgICAgICAg -ICAjIFNoYXJlLUZhbGxiYWNrOiB3ZW5uIGRpZSBEYXRlaSBsb2thbCBmZWhsdCAoei5CLiB4bHN4 -LmZ1bGwubWluLmpzDQogICAgICAgICAgICAjIHdpcmQgYmV3dXNzdCBuaWNodCBpbiBkZW4gQ2xp -ZW50LUNhY2hlIGtvcGllcnQpLCB2ZXJzdWNoZSBzaWUNCiAgICAgICAgICAgICMgdm9tIGtvbmZp -Z3VyaWVydGVuIEFzc2V0RmFsbGJhY2stUGZhZCBuYWNoenVsYWRlbi4NCiAgICAgICAgICAgIGlm -ICgoLW5vdCAkRmlsZVBhdGggLW9yIC1ub3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJEZpbGVQ -YXRoIC1QYXRoVHlwZSBMZWFmKSkgLWFuZCAkc2NyaXB0OkFzc2V0RmFsbGJhY2spIHsNCiAgICAg -ICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkZmFsbGJhY2tUcnkgPSBKb2lu -LVBhdGggJHNjcmlwdDpBc3NldEZhbGxiYWNrICRSZWxQYXRoDQogICAgICAgICAgICAgICAgICAg -ICRmYWxsYmFja05vcm0gPSBbU3lzdGVtLklPLlBhdGhdOjpHZXRGdWxsUGF0aCgkZmFsbGJhY2tU -cnkpDQogICAgICAgICAgICAgICAgICAgICRmYWxsYmFja1Jvb3ROb3JtID0gW1N5c3RlbS5JTy5Q -YXRoXTo6R2V0RnVsbFBhdGgoJHNjcmlwdDpBc3NldEZhbGxiYWNrKQ0KICAgICAgICAgICAgICAg -ICAgICBpZiAoJGZhbGxiYWNrTm9ybS5TdGFydHNXaXRoKCRmYWxsYmFja1Jvb3ROb3JtLCBbU3lz -dGVtLlN0cmluZ0NvbXBhcmlzb25dOjpPcmRpbmFsSWdub3JlQ2FzZSkgLWFuZA0KICAgICAgICAg -ICAgICAgICAgICAgICAgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGZhbGxiYWNrTm9ybSAtUGF0 -aFR5cGUgTGVhZikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRGaWxlUGF0aCA9ICRmYWxs -YmFja05vcm0NCiAgICAgICAgICAgICAgICAgICAgICAgICR2b25GYWxsYmFjayA9ICR0cnVlDQog -ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAg -ICAgICAgICAgICAgTG9nLUFwaSAoJ0ZBTExCQUNLLUZFSExFUiB7MH06IHsxfScgLWYgJFJlbFBh -dGgsICRfLkV4Y2VwdGlvbi5NZXNzYWdlKQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg -IH0NCiAgICAgICAgICAgIGlmICgkRmlsZVBhdGggLWFuZCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0 -aCAkRmlsZVBhdGggLVBhdGhUeXBlIExlYWYpKSB7DQogICAgICAgICAgICAgICAgJGV4dCA9IFtT -eXN0ZW0uSU8uUGF0aF06OkdldEV4dGVuc2lvbigkRmlsZVBhdGgpLlRvTG93ZXIoKQ0KICAgICAg -ICAgICAgICAgICRtaW1lID0gaWYgKCRNaW1lVHlwZXMuQ29udGFpbnNLZXkoJGV4dCkpIHsgJE1p -bWVUeXBlc1skZXh0XSB9IGVsc2UgeyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyB9DQogICAg -ICAgICAgICAgICAgJGNvbnRlbnQgPSBbU3lzdGVtLklPLkZpbGVdOjpSZWFkQWxsQnl0ZXMoJEZp -bGVQYXRoKQ0KICAgICAgICAgICAgICAgICRSZXNwb25zZS5TdGF0dXNDb2RlID0gMjAwDQogICAg -ICAgICAgICAgICAgJFJlc3BvbnNlLkNvbnRlbnRUeXBlID0gJG1pbWUNCiAgICAgICAgICAgICAg -ICBBZGQtU2VjdXJpdHlIZWFkZXJzICRSZXNwb25zZQ0KICAgICAgICAgICAgICAgICRSZXNwb25z -ZS5Db250ZW50TGVuZ3RoNjQgPSAkY29udGVudC5MZW5ndGgNCiAgICAgICAgICAgICAgICAkUmVz -cG9uc2UuT3V0cHV0U3RyZWFtLldyaXRlKCRjb250ZW50LCAwLCAkY29udGVudC5MZW5ndGgpDQog -ICAgICAgICAgICAgICAgJFJlc3BvbnNlLk91dHB1dFN0cmVhbS5DbG9zZSgpDQogICAgICAgICAg -ICAgICAgaWYgKCR2b25GYWxsYmFjaykgeyBMb2ctQXBpICgnRklMRSAyMDAgezB9IChGYWxsYmFj -aywgezF9IEJ5dGVzKScgLWYgJFJlbFBhdGgsICRjb250ZW50Lkxlbmd0aCkgfQ0KICAgICAgICAg -ICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBMb2ctQXBpICgnRklMRSA0MDQgezB9ICh3ZWRl -ciBpbSBSb290IG5vY2ggdWViZXIgQXNzZXRGYWxsYmFjayBnZWZ1bmRlbiknIC1mICRSZWxQYXRo -KQ0KICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiVW5iZWthbm50ZXIgRW5k -cHVua3Q6ICRNZXRob2QgJFBhdGgiKSA0MDQNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAg -ICAgICBjYXRjaCB7DQogICAgICAgICAgICBMb2ctQXBpICgnRVhDRVBUSU9OIHswfSB7MX06IHsy -fScgLWYgJE1ldGhvZCwgJFBhdGgsICRfLkV4Y2VwdGlvbi5NZXNzYWdlKQ0KICAgICAgICAgICAg -dHJ5IHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJF8uRXhjZXB0aW9uLk1lc3NhZ2UgNTAwIH0gY2F0 -Y2gge30NCiAgICAgICAgfQ0KICAgIH0NCn0NCmNhdGNoIHsNCiAgICBXcml0ZS1Ib3N0ICgnU2Vy -dmVyLUZlaGxlcjogezB9JyAtZiAkXy5FeGNlcHRpb24uTWVzc2FnZSkNCiAgICBMb2ctQXBpICgn -TUFJTi1MT09QIEVYQ0VQVElPTjogezB9JyAtZiAkXy5FeGNlcHRpb24uTWVzc2FnZSkNCn0NCmZp -bmFsbHkgew0KICAgICRXYXRjaGRvZ1RpbWVyLlN0b3AoKQ0KICAgIGlmICgkTGlzdGVuZXIuSXNM -aXN0ZW5pbmcpIHsgJExpc3RlbmVyLlN0b3AoKSB9DQogICAgTG9nLUFwaSAnU0hVVERPV04nDQog -ICAgV3JpdGUtSG9zdCAnU2VydmVyIGJlZW5kZXQuJw0KfQ0K +ICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICMgVmVyc2NobGVpZXJ1bmdz +LUZpbHRlcjogZGFzIFN0YXRpc3Rpay0gdW5kIExvZ2J1Y2gtTW9kdWwgc2FtdA0KICAgICAgICAg +ICAgIyBNYXJrdXAtRnJhZ21lbnQgd2VyZGVuIG51ciBhbiBCZXJlY2h0aWd0ZSBhdXNnZWxpZWZl +cnQuDQogICAgICAgICAgICAjIERpcmVrdGVyIFp1Z3JpZmYgZHVyY2ggVW5iZXJlY2h0aWd0ZSAo +QnJvd3Nlci1VUkwtRWluZ2FiZSwNCiAgICAgICAgICAgICMgU291cmNlLVN0b2ViZXJuKSBiZWtv +bW10IDQwNCDigJQgd2llIGJlaSBqZWRlbSBuaWNodCBleGlzdGllcmVuZGVuDQogICAgICAgICAg +ICAjIFBmYWQsIGtlaW4gU3RhdHVzY29kZS1WZXJyYXQuDQogICAgICAgICAgICBpZiAoJFJlbFBh +dGggLWVxICdqcy9zdGF0aXN0aWsuanMnIC1vciAkUmVsUGF0aCAtZXEgJ2RhdGEvbWFpbmZyYW1l +Lmh0bWwnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVpY2ggJ3N0 +YXRpc3RpaycpKSB7DQogICAgICAgICAgICAgICAgICAgIExvZy1BcGkgKCdHQVRFIDQwNCB7MH0g +KGtlaW4gU3RhdGlzdGlrLVJlY2h0KScgLWYgJFJlbFBhdGgpDQogICAgICAgICAgICAgICAgICAg +IFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiVW5iZWthbm50ZXIgRW5kcHVua3Q6ICRNZXRob2QgJFBh +dGgiKSA0MDQNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICB9IGVsc2VpZiAoJFJlbFBhdGggLWVxICdqcy9sb2didWNoLmpzJyAtb3Ig +JFJlbFBhdGggLWVxICdkYXRhL3Nhbml0aXplci5odG1sJykgew0KICAgICAgICAgICAgICAgIGlm +ICgtbm90IChUZXN0LURhcmZCZXJlaWNoICdsb2didWNoJykpIHsNCiAgICAgICAgICAgICAgICAg +ICAgTG9nLUFwaSAoJ0dBVEUgNDA0IHswfSAoa2VpbiBMb2didWNoLVJlY2h0KScgLWYgJFJlbFBh +dGgpDQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiVW5iZWthbm50 +ZXIgRW5kcHVua3Q6ICRNZXRob2QgJFBhdGgiKSA0MDQNCiAgICAgICAgICAgICAgICAgICAgY29u +dGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkRmls +ZVBhdGggPSBSZXNvbHZlLVNhZmVQYXRoICRSZWxQYXRoDQogICAgICAgICAgICAkdm9uRmFsbGJh +Y2sgPSAkZmFsc2UNCiAgICAgICAgICAgICMgU2hhcmUtRmFsbGJhY2s6IHdlbm4gZGllIERhdGVp +IGxva2FsIGZlaGx0ICh6LkIuIHhsc3guZnVsbC5taW4uanMNCiAgICAgICAgICAgICMgd2lyZCBi +ZXd1c3N0IG5pY2h0IGluIGRlbiBDbGllbnQtQ2FjaGUga29waWVydCksIHZlcnN1Y2hlIHNpZQ0K +ICAgICAgICAgICAgIyB2b20ga29uZmlndXJpZXJ0ZW4gQXNzZXRGYWxsYmFjay1QZmFkIG5hY2h6 +dWxhZGVuLg0KICAgICAgICAgICAgaWYgKCgtbm90ICRGaWxlUGF0aCAtb3IgLW5vdCAoVGVzdC1Q +YXRoIC1MaXRlcmFsUGF0aCAkRmlsZVBhdGggLVBhdGhUeXBlIExlYWYpKSAtYW5kICRzY3JpcHQ6 +QXNzZXRGYWxsYmFjaykgew0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAg +ICAgICRmYWxsYmFja1RyeSA9IEpvaW4tUGF0aCAkc2NyaXB0OkFzc2V0RmFsbGJhY2sgJFJlbFBh +dGgNCiAgICAgICAgICAgICAgICAgICAgJGZhbGxiYWNrTm9ybSA9IFtTeXN0ZW0uSU8uUGF0aF06 +OkdldEZ1bGxQYXRoKCRmYWxsYmFja1RyeSkNCiAgICAgICAgICAgICAgICAgICAgJGZhbGxiYWNr +Um9vdE5vcm0gPSBbU3lzdGVtLklPLlBhdGhdOjpHZXRGdWxsUGF0aCgkc2NyaXB0OkFzc2V0RmFs +bGJhY2spDQogICAgICAgICAgICAgICAgICAgIGlmICgkZmFsbGJhY2tOb3JtLlN0YXJ0c1dpdGgo +JGZhbGxiYWNrUm9vdE5vcm0sIFtTeXN0ZW0uU3RyaW5nQ29tcGFyaXNvbl06Ok9yZGluYWxJZ25v +cmVDYXNlKSAtYW5kDQogICAgICAgICAgICAgICAgICAgICAgICAoVGVzdC1QYXRoIC1MaXRlcmFs +UGF0aCAkZmFsbGJhY2tOb3JtIC1QYXRoVHlwZSBMZWFmKSkgew0KICAgICAgICAgICAgICAgICAg +ICAgICAgJEZpbGVQYXRoID0gJGZhbGxiYWNrTm9ybQ0KICAgICAgICAgICAgICAgICAgICAgICAg +JHZvbkZhbGxiYWNrID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBMb2ctQXBpICgnRkFMTEJBQ0stRkVI +TEVSIHswfTogezF9JyAtZiAkUmVsUGF0aCwgJF8uRXhjZXB0aW9uLk1lc3NhZ2UpDQogICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRGaWxlUGF0aCAtYW5k +IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRGaWxlUGF0aCAtUGF0aFR5cGUgTGVhZikpIHsNCiAg +ICAgICAgICAgICAgICAkZXh0ID0gW1N5c3RlbS5JTy5QYXRoXTo6R2V0RXh0ZW5zaW9uKCRGaWxl +UGF0aCkuVG9Mb3dlcigpDQogICAgICAgICAgICAgICAgJG1pbWUgPSBpZiAoJE1pbWVUeXBlcy5D +b250YWluc0tleSgkZXh0KSkgeyAkTWltZVR5cGVzWyRleHRdIH0gZWxzZSB7ICdhcHBsaWNhdGlv +bi9vY3RldC1zdHJlYW0nIH0NCiAgICAgICAgICAgICAgICAkY29udGVudCA9IFtTeXN0ZW0uSU8u +RmlsZV06OlJlYWRBbGxCeXRlcygkRmlsZVBhdGgpDQogICAgICAgICAgICAgICAgJFJlc3BvbnNl +LlN0YXR1c0NvZGUgPSAyMDANCiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuQ29udGVudFR5cGUg +PSAkbWltZQ0KICAgICAgICAgICAgICAgIEFkZC1TZWN1cml0eUhlYWRlcnMgJFJlc3BvbnNlDQog +ICAgICAgICAgICAgICAgJFJlc3BvbnNlLkNvbnRlbnRMZW5ndGg2NCA9ICRjb250ZW50Lkxlbmd0 +aA0KICAgICAgICAgICAgICAgICRSZXNwb25zZS5PdXRwdXRTdHJlYW0uV3JpdGUoJGNvbnRlbnQs +IDAsICRjb250ZW50Lkxlbmd0aCkNCiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuT3V0cHV0U3Ry +ZWFtLkNsb3NlKCkNCiAgICAgICAgICAgICAgICBpZiAoJHZvbkZhbGxiYWNrKSB7IExvZy1BcGkg +KCdGSUxFIDIwMCB7MH0gKEZhbGxiYWNrLCB7MX0gQnl0ZXMpJyAtZiAkUmVsUGF0aCwgJGNvbnRl +bnQuTGVuZ3RoKSB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIExvZy1B +cGkgKCdGSUxFIDQwNCB7MH0gKHdlZGVyIGltIFJvb3Qgbm9jaCB1ZWJlciBBc3NldEZhbGxiYWNr +IGdlZnVuZGVuKScgLWYgJFJlbFBhdGgpDQogICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVz +cG9uc2UgKCJVbmJla2FubnRlciBFbmRwdW5rdDogJE1ldGhvZCAkUGF0aCIpIDQwNA0KICAgICAg +ICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGNhdGNoIHsNCiAgICAgICAgICAgIExvZy1BcGkg +KCdFWENFUFRJT04gezB9IHsxfTogezJ9JyAtZiAkTWV0aG9kLCAkUGF0aCwgJF8uRXhjZXB0aW9u +Lk1lc3NhZ2UpDQogICAgICAgICAgICB0cnkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAkXy5FeGNl +cHRpb24uTWVzc2FnZSA1MDAgfSBjYXRjaCB7fQ0KICAgICAgICB9DQogICAgfQ0KfQ0KY2F0Y2gg +ew0KICAgIFdyaXRlLUhvc3QgKCdTZXJ2ZXItRmVobGVyOiB7MH0nIC1mICRfLkV4Y2VwdGlvbi5N +ZXNzYWdlKQ0KICAgIExvZy1BcGkgKCdNQUlOLUxPT1AgRVhDRVBUSU9OOiB7MH0nIC1mICRfLkV4 +Y2VwdGlvbi5NZXNzYWdlKQ0KfQ0KZmluYWxseSB7DQogICAgJFdhdGNoZG9nVGltZXIuU3RvcCgp +DQogICAgaWYgKCRMaXN0ZW5lci5Jc0xpc3RlbmluZykgeyAkTGlzdGVuZXIuU3RvcCgpIH0NCiAg +ICBMb2ctQXBpICdTSFVURE9XTicNCiAgICBXcml0ZS1Ib3N0ICdTZXJ2ZXIgYmVlbmRldC4nDQp9 +DQo= ### FILE: stop.bat | 1307 QGVjaG8gb2ZmDQpzZXRsb2NhbCBlbmFibGVkZWxheWVkZXhwYW5zaW9uDQpjaGNwIDY1MDAxID5u dWwgMj4mMQ0KdGl0bGUgVkkzIERHTC1QbGFudW5nIC0gU3RvcA0KDQo6OiA9PT09PT09PT09PT09