diff --git a/FLD-Schichtplanung/sync-bundle-06.txt b/FLD-Schichtplanung/sync-bundle-06.txt index 6413de3..e5ac876 100644 --- a/FLD-Schichtplanung/sync-bundle-06.txt +++ b/FLD-Schichtplanung/sync-bundle-06.txt @@ -1,6 +1,6 @@ ### SYNC-TRANSFER 6/7 -- mit sync-entpacken.bat entpacken ### Base64 -### FILE: server.ps1 | 253352 +### FILE: server.ps1 | 253354 77u/cGFyYW0oDQogICAgW2ludF0kUG9ydCA9IDgwODEsDQogICAgW3N0cmluZ10kUm9vdFBhdGgg PSAnJywNCiAgICBbc3dpdGNoXSREZWJ1ZywNCiAgICBbc3dpdGNoXSROb0Jyb3dzZXINCikNCg0K IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 @@ -1707,2745 +1707,2745 @@ ZUxhc3RDaGVja1V0YyA9IFtkYXRldGltZV06OlV0Y05vdw0KICAgICRsb2NhbFZlciA9ICcwLjAu MCcNCiAgICAkX3ZmID0gSm9pbi1QYXRoICRSb290ICdWRVJTSU9OJw0KICAgIGlmIChUZXN0LVBh dGggLUxpdGVyYWxQYXRoICRfdmYpIHsgJGxvY2FsVmVyID0gKEdldC1Db250ZW50IC1MaXRlcmFs UGF0aCAkX3ZmIC1SYXcpLlRyaW0oKSB9DQogICAgdHJ5IHsNCiAgICAgICAgJHJ2ID0gKEludm9r -ZS1XZWJSZXF1ZXN0IC1VcmkgJ2h0dHBzOi8vZ2l0ZWEucmhpbm8ubnJ3L1JoaW5vL1N0YXR1c1F1 -b19VcGRhdGVzL3Jhdy9icmFuY2gvbWFpbi9GTEQtU2NoaWNodHBsYW51bmcvVkVSU0lPTicgYA0K -ICAgICAgICAgICAgICAgLVVzZUJhc2ljUGFyc2luZyAtVGltZW91dFNlYyAzIC1FcnJvckFjdGlv -biBTdG9wKS5Db250ZW50LlRyaW0oKQ0KICAgICAgICAkc2NyaXB0OlJlbW90ZVZlcnNpb24gICA9 -ICRydg0KICAgICAgICAkc2NyaXB0OlVwZGF0ZUF2YWlsYWJsZSA9IChbU3lzdGVtLlZlcnNpb25d -JHJ2IC1ndCBbU3lzdGVtLlZlcnNpb25dJGxvY2FsVmVyKQ0KICAgICAgICBXcml0ZS1Ib3N0ICIg -IFtVUERBVEUtQ0hFQ0tdIGxva2FsPSRsb2NhbFZlciByZW1vdGU9JHJ2IGF2YWlsYWJsZT0kKCRz -Y3JpcHQ6VXBkYXRlQXZhaWxhYmxlKSINCiAgICB9IGNhdGNoIHsNCiAgICAgICAgV3JpdGUtSG9z -dCAiICBbVVBEQVRFLUNIRUNLXSBuaWNodCBlcnJlaWNoYmFyICgkKCRfLkV4Y2VwdGlvbi5NZXNz -YWdlKSkiDQogICAgfQ0KfQ0KUmVmcmVzaC1VcGRhdGVDaGVjaw0KDQojID09PT09PT09PT09PT09 +ZS1XZWJSZXF1ZXN0IC1VcmkgJ2h0dHBzOi8vdXBkYXRlcy5yaGluby5ucncvcmhpbm8vU3RhdHVz +UXVvX1VwZGF0ZXMvcmF3L2JyYW5jaC9tYWluL0ZMRC1TY2hpY2h0cGxhbnVuZy9WRVJTSU9OJyBg +DQogICAgICAgICAgICAgICAtVXNlQmFzaWNQYXJzaW5nIC1UaW1lb3V0U2VjIDMgLUVycm9yQWN0 +aW9uIFN0b3ApLkNvbnRlbnQuVHJpbSgpDQogICAgICAgICRzY3JpcHQ6UmVtb3RlVmVyc2lvbiAg +ID0gJHJ2DQogICAgICAgICRzY3JpcHQ6VXBkYXRlQXZhaWxhYmxlID0gKFtTeXN0ZW0uVmVyc2lv +bl0kcnYgLWd0IFtTeXN0ZW0uVmVyc2lvbl0kbG9jYWxWZXIpDQogICAgICAgIFdyaXRlLUhvc3Qg +IiAgW1VQREFURS1DSEVDS10gbG9rYWw9JGxvY2FsVmVyIHJlbW90ZT0kcnYgYXZhaWxhYmxlPSQo +JHNjcmlwdDpVcGRhdGVBdmFpbGFibGUpIg0KICAgIH0gY2F0Y2ggew0KICAgICAgICBXcml0ZS1I +b3N0ICIgIFtVUERBVEUtQ0hFQ0tdIG5pY2h0IGVycmVpY2hiYXIgKCQoJF8uRXhjZXB0aW9uLk1l +c3NhZ2UpKSINCiAgICB9DQp9DQpSZWZyZXNoLVVwZGF0ZUNoZWNrDQoNCiMgPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 -PT09PT09DQojIEhUVFAtTElTVEVORVIgU1RBUlRFTg0KIyA9PT09PT09PT09PT09PT09PT09PT09 -PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K -DQokTGlzdGVuZXIgPSAkbnVsbA0KdHJ5IHsNCiAgICAkTGlzdGVuZXIgPSBOZXctT2JqZWN0IFN5 -c3RlbS5OZXQuSHR0cExpc3RlbmVyDQogICAgJExpc3RlbmVyLlByZWZpeGVzLkFkZCgiaHR0cDov -L2xvY2FsaG9zdDokUG9ydC8iKQ0KICAgICRMaXN0ZW5lci5TdGFydCgpDQogICAgV3JpdGUtU3Rh -cnR1cExvZyAiTGlzdGVuZXIgbGFldWZ0IGF1ZiBodHRwOi8vbG9jYWxob3N0OiRQb3J0Ig0KfSBj -YXRjaCB7DQogICAgV3JpdGUtU3RhcnR1cExvZyAiRkFUQUw6IExpc3RlbmVyIGtvbm50ZSBuaWNo -dCBnZXN0YXJ0ZXQgd2VyZGVuOiAkXyINCiAgICBXcml0ZS1TdGFydHVwTG9nICJNw7ZnbGljaGUg -VXJzYWNoZW46IFBvcnQgYmVsZWd0LCBmZWhsZW5kZSBVUkwtQUNMLCBGaXJld2FsbC4iDQogICAg -ZXhpdCAxDQp9DQoNCldyaXRlLUhvc3QgIkZMRC1QbGFudW5nIFNlcnZlciBhdWYgaHR0cDovL2xv -Y2FsaG9zdDokUG9ydCINCldyaXRlLUhvc3QgIlJvb3Q6ICRSb290Ig0KV3JpdGUtSG9zdCAiRGF0 -ZW46ICREYXRhRGlyIg0KDQojIC0tLSBCcm93c2VyIG9lZmZuZW4gLS0tDQppZiAoLW5vdCAkTm9C -cm93c2VyKSB7DQogICAgU3RhcnQtU2xlZXAgLU1pbGxpc2Vjb25kcyAzMDANCiAgICB0cnkgeyBT -dGFydC1Qcm9jZXNzICJodHRwOi8vbG9jYWxob3N0OiRQb3J0IiB9IGNhdGNoIHsgV3JpdGUtU3Rh -cnR1cExvZyAiQnJvd3Nlci1TdGFydCBmZWhsZ2VzY2hsYWdlbjogJF8iIH0NCn0NCg0KIyA9PT09 +PT09PT09PT0NCiMgSFRUUC1MSVNURU5FUiBTVEFSVEVODQojID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 -PT09PT09PT09PT09PT09PQ0KIyBSRVFVRVNULUxPT1ANCiMgPT09PT09PT09PT09PT09PT09PT09 -PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N -Cg0KdHJ5IHsNCiAgICB3aGlsZSAoJExpc3RlbmVyLklzTGlzdGVuaW5nKSB7DQogICAgICAgICRB -c3luY1Jlc3VsdCA9ICRMaXN0ZW5lci5CZWdpbkdldENvbnRleHQoJG51bGwsICRudWxsKQ0KICAg -ICAgICB3aGlsZSAoLW5vdCAkQXN5bmNSZXN1bHQuQXN5bmNXYWl0SGFuZGxlLldhaXRPbmUoMjAw -MCkpIHsNCiAgICAgICAgICAgICMgU2VsZi1LaWxsOiAzMHMgb2huZSBIZWFydGJlYXQgPSBUYWIg -b2RlciBCcm93c2VyIHp1ID0gU2VydmVyIGJlZW5kZW4NCiAgICAgICAgICAgICRFbGFwc2VkID0g -KChHZXQtRGF0ZSkgLSAkc2NyaXB0Okxhc3RIZWFydGJlYXQpLlRvdGFsU2Vjb25kcw0KICAgICAg -ICAgICAgaWYgKCRFbGFwc2VkIC1ndCAkc2NyaXB0OkhlYXJ0YmVhdFRpbWVvdXRTZWMpIHsNCiAg -ICAgICAgICAgICAgICBXcml0ZS1Ib3N0ICcnDQogICAgICAgICAgICAgICAgV3JpdGUtSG9zdCAn +DQoNCiRMaXN0ZW5lciA9ICRudWxsDQp0cnkgew0KICAgICRMaXN0ZW5lciA9IE5ldy1PYmplY3Qg +U3lzdGVtLk5ldC5IdHRwTGlzdGVuZXINCiAgICAkTGlzdGVuZXIuUHJlZml4ZXMuQWRkKCJodHRw +Oi8vbG9jYWxob3N0OiRQb3J0LyIpDQogICAgJExpc3RlbmVyLlN0YXJ0KCkNCiAgICBXcml0ZS1T +dGFydHVwTG9nICJMaXN0ZW5lciBsYWV1ZnQgYXVmIGh0dHA6Ly9sb2NhbGhvc3Q6JFBvcnQiDQp9 +IGNhdGNoIHsNCiAgICBXcml0ZS1TdGFydHVwTG9nICJGQVRBTDogTGlzdGVuZXIga29ubnRlIG5p +Y2h0IGdlc3RhcnRldCB3ZXJkZW46ICRfIg0KICAgIFdyaXRlLVN0YXJ0dXBMb2cgIk3DtmdsaWNo +ZSBVcnNhY2hlbjogUG9ydCBiZWxlZ3QsIGZlaGxlbmRlIFVSTC1BQ0wsIEZpcmV3YWxsLiINCiAg +ICBleGl0IDENCn0NCg0KV3JpdGUtSG9zdCAiRkxELVBsYW51bmcgU2VydmVyIGF1ZiBodHRwOi8v +bG9jYWxob3N0OiRQb3J0Ig0KV3JpdGUtSG9zdCAiUm9vdDogJFJvb3QiDQpXcml0ZS1Ib3N0ICJE +YXRlbjogJERhdGFEaXIiDQoNCiMgLS0tIEJyb3dzZXIgb2VmZm5lbiAtLS0NCmlmICgtbm90ICRO +b0Jyb3dzZXIpIHsNCiAgICBTdGFydC1TbGVlcCAtTWlsbGlzZWNvbmRzIDMwMA0KICAgIHRyeSB7 +IFN0YXJ0LVByb2Nlc3MgImh0dHA6Ly9sb2NhbGhvc3Q6JFBvcnQiIH0gY2F0Y2ggeyBXcml0ZS1T +dGFydHVwTG9nICJCcm93c2VyLVN0YXJ0IGZlaGxnZXNjaGxhZ2VuOiAkXyIgfQ0KfQ0KDQojID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 -PT09Jw0KICAgICAgICAgICAgICAgIFdyaXRlLUhvc3QgIiAgS2VpbiBIZWFydGJlYXQgc2VpdCAk -KFtpbnRdJEVsYXBzZWQpcyAtIFNlcnZlciB3aXJkIGJlZW5kZXQuIg0KICAgICAgICAgICAgICAg -IFdyaXRlLUhvc3QgJyAgKEJyb3dzZXItVGFiIG9kZXIgQnJvd3NlciB3dXJkZSBnZXNjaGxvc3Nl -biknDQogICAgICAgICAgICAgICAgV3JpdGUtSG9zdCAnPT09PT09PT09PT09PT09PT09PT09PT09 -PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Jw0KICAgICAgICAgICAgICAgIFdy -aXRlLVN0YXJ0dXBMb2cgIlNlbGYtS2lsbCBuYWNoICQoW2ludF0kRWxhcHNlZClzIG9obmUgSGVh -cnRiZWF0Ig0KICAgICAgICAgICAgICAgICRMaXN0ZW5lci5TdG9wKCkNCiAgICAgICAgICAgICAg -ICAkTGlzdGVuZXIuQ2xvc2UoKQ0KICAgICAgICAgICAgICAgIGV4aXQgMA0KICAgICAgICAgICAg -fQ0KICAgICAgICB9DQoNCiAgICAgICAgJENvbnRleHQgPSAkTGlzdGVuZXIuRW5kR2V0Q29udGV4 -dCgkQXN5bmNSZXN1bHQpDQogICAgICAgICRSZXEgPSAkQ29udGV4dC5SZXF1ZXN0DQogICAgICAg -ICRSZXMgPSAkQ29udGV4dC5SZXNwb25zZQ0KICAgICAgICAkTWV0aG9kID0gJFJlcS5IdHRwTWV0 -aG9kDQogICAgICAgICRSYXdQYXRoID0gJFJlcS5VcmwuQWJzb2x1dGVQYXRoDQogICAgICAgICRQ -YXRoID0gJFJhd1BhdGggICMgUXVlcnkgd2lyZCB2b24gSHR0cExpc3RlbmVyIHNlcGFyYXQgYmVy -ZWl0Z2VzdGVsbHQNCg0KICAgICAgICAjIEF1ZGl0LUlJLTIgRjM6IGR5bmFtaXNjaGUgQUNBTy1R -dWVsbGUgcHJvIFJlcXVlc3Qgc2V0emVuLiBBZGQtU2VjdXJpdHlIZWFkZXJzDQogICAgICAgICMg -bGllc3QgJHNjcmlwdDpDb3JzT3JpZ2luRHluYW1pYy4gV2hpdGVsaXN0IHBhc3NlbmQgenVtIENT -UkYtRmlsdGVyIHVudGVuLg0KICAgICAgICAkc2NyaXB0OlJlcU9yaWdpbkhlYWRlciA9ICRSZXEu -SGVhZGVyc1snT3JpZ2luJ10NCiAgICAgICAgJE9yaWdpbldoaXRlbGlzdCA9IEAoImh0dHA6Ly9s -b2NhbGhvc3Q6JFBvcnQiLCAiaHR0cDovLzEyNy4wLjAuMTokUG9ydCIpDQogICAgICAgIGlmICgk -c2NyaXB0OlJlcU9yaWdpbkhlYWRlciAtYW5kICgkT3JpZ2luV2hpdGVsaXN0IC1jb250YWlucyAk -c2NyaXB0OlJlcU9yaWdpbkhlYWRlcikpIHsNCiAgICAgICAgICAgICRzY3JpcHQ6Q29yc09yaWdp -bkR5bmFtaWMgPSAkc2NyaXB0OlJlcU9yaWdpbkhlYWRlcg0KICAgICAgICB9IGVsc2Ugew0KICAg -ICAgICAgICAgJHNjcmlwdDpDb3JzT3JpZ2luRHluYW1pYyA9ICRzY3JpcHQ6Q29yc09yaWdpbg0K -ICAgICAgICB9DQoNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09 -PT09PT09IENPUlMgUFJFRkxJR0hUID09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAg -aWYgKCRNZXRob2QgLWVxICdPUFRJT05TJykgew0KICAgICAgICAgICAgICAgIEFkZC1TZWN1cml0 -eUhlYWRlcnMgJFJlczsgJFJlcy5TdGF0dXNDb2RlID0gMjA0OyAkUmVzLkNsb3NlKCk7IGNvbnRp -bnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgQ1NSRi1TY2h1dHogZnVlciB3cml0 -aW5nIG1ldGhvZHM6IE9yaWdpbiBtdXNzIG1hdGNoZW4gb2RlciBmZWhsZW4uDQogICAgICAgICAg -ICAjIEJyb3dzZXIgc2VuZGVuIE9yaWdpbiBiZWkgQ3Jvc3MtU2l0ZS1QT1NUIHp3aW5nZW5kOyBi -ZWkgU2FtZS1TaXRlDQogICAgICAgICAgICAjIFJlcXVlc3RzIGlzdCBlciBnbGVpY2ggb2RlciBm -ZWhsdCAoQ0xJL2N1cmwpLiBBYndlaWNoZW5kZXIgT3JpZ2luDQogICAgICAgICAgICAjID0gQ3Jv -c3MtU2l0ZS1BbmdyaWZmIHZvbiBlaW5lbSBhbmRlcmVuIGxva2FsZW4gU2VydmljZSBhYmxlaG5l -bi4NCiAgICAgICAgICAgICMgTWlycm9yIHp1IHNlcnZlci5weToyMjE3LTIyMjguDQogICAgICAg -ICAgICBpZiAoJE1ldGhvZCAtaW4gQCgnUE9TVCcsJ1BVVCcsJ0RFTEVURScsJ1BBVENIJykpIHsN -CiAgICAgICAgICAgICAgICAkT3JpZ2luID0gJFJlcS5IZWFkZXJzWydPcmlnaW4nXQ0KICAgICAg -ICAgICAgICAgICMgVG9sZXJhbnRlcyBNYXRjaGluZzogbG9jYWxob3N0IFVORCAxMjcuMC4wLjEg -KFVzZXIga29lbm5lbg0KICAgICAgICAgICAgICAgICMgdmlhIEJvb2ttYXJrIGF1ZiBkaWUgTG9v -cGJhY2stSVAgZ2VsYW5kZXQgc2VpbikuIEJlaWRlDQogICAgICAgICAgICAgICAgIyBWYXJpYW50 -ZW4gemVpZ2VuIGF1ZiBkZW5zZWxiZW4gTGlzdGVuZXIsIGtlaW4gQ1NSRi1SaXNpa28uDQogICAg -ICAgICAgICAgICAgJE9yaWdpbkVybGF1YnQgPSBAKA0KICAgICAgICAgICAgICAgICAgICAiaHR0 -cDovL2xvY2FsaG9zdDokUG9ydCIsDQogICAgICAgICAgICAgICAgICAgICJodHRwOi8vMTI3LjAu -MC4xOiRQb3J0Ig0KICAgICAgICAgICAgICAgICkNCiAgICAgICAgICAgICAgICBpZiAoJE9yaWdp -biAtYW5kICgkT3JpZ2luRXJsYXVidCAtbm90Y29udGFpbnMgJE9yaWdpbikpIHsNCiAgICAgICAg -ICAgICAgICAgICAgRGVidWctTG9nICdTRUMnICJDU1JGOiAkTWV0aG9kICRQYXRoIHZvbiBPcmln -aW49JE9yaWdpbiBhYmdlbGVobnQiICdyZWQnDQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJy -b3IgJFJlcyAnQ3Jvc3MtT3JpZ2luLVJlcXVlc3QgYWJnZWxlaG50JyA0MDMNCiAgICAgICAgICAg -ICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAg -ICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IExJRkVDWUNMRSA9PT09PT09PT09PT09 -PT09PT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvaGVhcnRiZWF0JyAtYW5k -ICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgICRzY3JpcHQ6TGFzdEhlYXJ0 -YmVhdCA9IEdldC1EYXRlDQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsgc3RhdHVz -ID0gJ29rJyB9OyBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRo -IC1lcSAnL2FwaS9zaHV0ZG93bicgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAg -ICAgICAgICAjIEJlYWNvbiB2b20gQnJvd3NlciBiZWkgVGFiL1dpbmRvdy1DbG9zZS4gSGVhcnRi -ZWF0LVVociAyNXMNCiAgICAgICAgICAgICAgICAjIHp1cnVlY2tkcmVoZW4gLT4gU2VydmVyIHN0 -aXJidCBpbiA8PTVzIChrdXJ6ZSBSZWxvYWQtVG9sZXJhbnopLg0KICAgICAgICAgICAgICAgICRz -Y3JpcHQ6TGFzdEhlYXJ0YmVhdCA9IChHZXQtRGF0ZSkuQWRkU2Vjb25kcygtKCRzY3JpcHQ6SGVh -cnRiZWF0VGltZW91dFNlYyAtIDUpKQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7 -IHN0YXR1cyA9ICdzaHV0ZG93biBlaW5nZWxlaXRldCcgfTsgY29udGludWUNCiAgICAgICAgICAg -IH0NCg0KICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT0gSU5GTyA9PT09PT09PT09 -PT09PT09PT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvaW5mbycgLWFuZCAk -TWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgIFJlZnJlc2gtVXBkYXRlQ2hlY2sN -CiAgICAgICAgICAgICAgICAkUm9sbGVBa3R1ZWxsID0gR2V0LVVzZXJSb2xsZQ0KICAgICAgICAg -ICAgICAgIFNlbmQtSnNvbiAkUmVzIChbb3JkZXJlZF1Aew0KICAgICAgICAgICAgICAgICAgICBi -ZW51dHplciAgICAgICAgICAgID0gR2V0LUFrdHVlbGxlckJlbnV0emVyDQogICAgICAgICAgICAg -ICAgICAgIGlzdEFkbWluICAgICAgICAgICAgPSBUZXN0LUlzdEFkbWluDQogICAgICAgICAgICAg -ICAgICAgIGlzdFN1cGVyVXNlciAgICAgICAgPSBUZXN0LUlzdFN1cGVyVXNlcg0KICAgICAgICAg -ICAgICAgICAgICBpc3RGYWNoYXVmc2ljaHQgICAgID0gVGVzdC1Jc3RGYWNoYXVmc2ljaHQNCiAg -ICAgICAgICAgICAgICAgICAgcm9sbGUgICAgICAgICAgICAgICA9ICRSb2xsZUFrdHVlbGwNCiAg -ICAgICAgICAgICAgICAgICAgZGFyZlVlYmVyc2NocmVpYmVuICA9IFRlc3QtRGFyZlVlYmVyc2No -cmVpYmVuICRSb2xsZUFrdHVlbGwNCiAgICAgICAgICAgICAgICAgICAgc2VydmVyICAgICAgICAg -ICAgICA9ICJodHRwOi8vbG9jYWxob3N0OiRQb3J0Ig0KICAgICAgICAgICAgICAgICAgICB1cGRh -dGVBdmFpbGFibGUgICAgID0gJHNjcmlwdDpVcGRhdGVBdmFpbGFibGUNCiAgICAgICAgICAgICAg -ICAgICAgcmVtb3RlVmVyc2lvbiAgICAgICA9ICRzY3JpcHQ6UmVtb3RlVmVyc2lvbg0KICAgICAg -ICAgICAgICAgIH0pDQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0K -ICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT0gQURNSU4tQ09ORklHID09PT09PT09 -PT09PT09PT09PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbicgLWFu -ZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgICRBZG1pbiA9IFJlYWQtSnNv -bkZpbGUgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkQWRtaW4p -IHsgU2VuZC1FcnJvciAkUmVzICdhZG1pbi5qc29uIG5pY2h0IGdlZnVuZGVuJyA0MDQgfSBlbHNl -IHsgU2VuZC1Kc29uICRSZXMgJEFkbWluIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbicgLWFuZCAk -TWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFk -bWluKSkgeyBTZW5kLUVycm9yICRSZXMgJ0tlaW5lIEJlcmVjaHRpZ3VuZycgNDAzOyBjb250aW51 -ZSB9DQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0KICAgICAgICAgICAg -ICAgIGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAkUmVzICdBbmZyYWdlIHp1IGdy -b3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkRGF0YSA9ICRCb2R5IHwgQ29u -dmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgIFdyaXRlLUpzb25GaWxlICdhZG1pbi5qc29u -JyAkRGF0YQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2FkbWluLmNvbmZpZy5n -ZWFlbmRlcnQnIEB7IGJlcmVpY2ggPSAnYWRtaW4ta29uZmlndXJhdGlvbicgfQ0KICAgICAgICAg -ICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfTsgY29udGlu -dWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT0g -U1VQRVJVU0VSLVZFUldBTFRVTkcgPT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICBp -ZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL3N1cGVydXNlcicgLWFuZCAkTWV0aG9kIC1lcSAnUFVU -Jykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2Vu -ZC1FcnJvciAkUmVzICdOdXIgU3VwZXJVc2VyIGR1ZXJmZW4gU3VwZXJVc2VyIHZlcndhbHRlbicg -NDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0K -ICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAkUmVzICdB -bmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkRGF0ZW4g -PSBbb2JqZWN0W11dQCgkQm9keSB8IENvbnZlcnRGcm9tLUpzb24pICAjIEFycmF5LUVyaGFsdCB1 -bnRlciBQUyA1LjEgYXVjaCBiZWkgMSBFbGVtZW50DQogICAgICAgICAgICAgICAgJEFkbWluID0g -UmVhZC1Kc29uRmlsZSAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICBpZiAoJEFkbWluLlBT -T2JqZWN0LlByb3BlcnRpZXNbJ3N1cGVyVXNlciddKSB7DQogICAgICAgICAgICAgICAgICAgICRB -ZG1pbi5zdXBlclVzZXIgPSAkRGF0ZW4NCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAg -ICAgICAgICAgICAgICAkQWRtaW4gfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0 -eSAtTmFtZSAnc3VwZXJVc2VyJyAtVmFsdWUgJERhdGVuDQogICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgIFdyaXRlLUpzb25GaWxlICdhZG1pbi5qc29uJyAkQWRtaW4NCiAgICAgICAg -ICAgICAgICAkQW56YWhsID0gQCgkRGF0ZW4pLkNvdW50DQogICAgICAgICAgICAgICAgV3JpdGUt -TG9nRWludHJhZyAnc3VwZXJ1c2VyLmdlYWVuZGVydCcgQHsgYW56YWhsID0gJEFuemFobCB9DQog -ICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9 -OyBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09PT09PT09PT09 -PT09PT09PSBGQUNIQVVGU0lDSFRFTi1WRVJXQUxUVU5HIChQaGFzZSBCKSA9PT09PT09PT09PT09 -PT09PT09PT0NCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IFdPQ0hFTk5PVEla -IChXb2NoZW5wbGFuLUFuc2ljaHQsIHBlcnNpc3RlbnQgcHJvIEtXKSA9PT09PT09PT09PT09PT09 -PT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy93b2NoZW5ub3Rp -eicgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICAkQm9keSA9IFJl +PT09PT09PT09PT09PT09PT09DQojIFJFUVVFU1QtTE9PUA0KIyA9PT09PT09PT09PT09PT09PT09 +PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 +PQ0KDQp0cnkgew0KICAgIHdoaWxlICgkTGlzdGVuZXIuSXNMaXN0ZW5pbmcpIHsNCiAgICAgICAg +JEFzeW5jUmVzdWx0ID0gJExpc3RlbmVyLkJlZ2luR2V0Q29udGV4dCgkbnVsbCwgJG51bGwpDQog +ICAgICAgIHdoaWxlICgtbm90ICRBc3luY1Jlc3VsdC5Bc3luY1dhaXRIYW5kbGUuV2FpdE9uZSgy +MDAwKSkgew0KICAgICAgICAgICAgIyBTZWxmLUtpbGw6IDMwcyBvaG5lIEhlYXJ0YmVhdCA9IFRh +YiBvZGVyIEJyb3dzZXIgenUgPSBTZXJ2ZXIgYmVlbmRlbg0KICAgICAgICAgICAgJEVsYXBzZWQg +PSAoKEdldC1EYXRlKSAtICRzY3JpcHQ6TGFzdEhlYXJ0YmVhdCkuVG90YWxTZWNvbmRzDQogICAg +ICAgICAgICBpZiAoJEVsYXBzZWQgLWd0ICRzY3JpcHQ6SGVhcnRiZWF0VGltZW91dFNlYykgew0K +ICAgICAgICAgICAgICAgIFdyaXRlLUhvc3QgJycNCiAgICAgICAgICAgICAgICBXcml0ZS1Ib3N0 +ICc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 +PT09PT0nDQogICAgICAgICAgICAgICAgV3JpdGUtSG9zdCAiICBLZWluIEhlYXJ0YmVhdCBzZWl0 +ICQoW2ludF0kRWxhcHNlZClzIC0gU2VydmVyIHdpcmQgYmVlbmRldC4iDQogICAgICAgICAgICAg +ICAgV3JpdGUtSG9zdCAnICAoQnJvd3Nlci1UYWIgb2RlciBCcm93c2VyIHd1cmRlIGdlc2NobG9z +c2VuKScNCiAgICAgICAgICAgICAgICBXcml0ZS1Ib3N0ICc9PT09PT09PT09PT09PT09PT09PT09 +PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0nDQogICAgICAgICAgICAgICAg +V3JpdGUtU3RhcnR1cExvZyAiU2VsZi1LaWxsIG5hY2ggJChbaW50XSRFbGFwc2VkKXMgb2huZSBI +ZWFydGJlYXQiDQogICAgICAgICAgICAgICAgJExpc3RlbmVyLlN0b3AoKQ0KICAgICAgICAgICAg +ICAgICRMaXN0ZW5lci5DbG9zZSgpDQogICAgICAgICAgICAgICAgZXhpdCAwDQogICAgICAgICAg +ICB9DQogICAgICAgIH0NCg0KICAgICAgICAkQ29udGV4dCA9ICRMaXN0ZW5lci5FbmRHZXRDb250 +ZXh0KCRBc3luY1Jlc3VsdCkNCiAgICAgICAgJFJlcSA9ICRDb250ZXh0LlJlcXVlc3QNCiAgICAg +ICAgJFJlcyA9ICRDb250ZXh0LlJlc3BvbnNlDQogICAgICAgICRNZXRob2QgPSAkUmVxLkh0dHBN +ZXRob2QNCiAgICAgICAgJFJhd1BhdGggPSAkUmVxLlVybC5BYnNvbHV0ZVBhdGgNCiAgICAgICAg +JFBhdGggPSAkUmF3UGF0aCAgIyBRdWVyeSB3aXJkIHZvbiBIdHRwTGlzdGVuZXIgc2VwYXJhdCBi +ZXJlaXRnZXN0ZWxsdA0KDQogICAgICAgICMgQXVkaXQtSUktMiBGMzogZHluYW1pc2NoZSBBQ0FP +LVF1ZWxsZSBwcm8gUmVxdWVzdCBzZXR6ZW4uIEFkZC1TZWN1cml0eUhlYWRlcnMNCiAgICAgICAg +IyBsaWVzdCAkc2NyaXB0OkNvcnNPcmlnaW5EeW5hbWljLiBXaGl0ZWxpc3QgcGFzc2VuZCB6dW0g +Q1NSRi1GaWx0ZXIgdW50ZW4uDQogICAgICAgICRzY3JpcHQ6UmVxT3JpZ2luSGVhZGVyID0gJFJl +cS5IZWFkZXJzWydPcmlnaW4nXQ0KICAgICAgICAkT3JpZ2luV2hpdGVsaXN0ID0gQCgiaHR0cDov +L2xvY2FsaG9zdDokUG9ydCIsICJodHRwOi8vMTI3LjAuMC4xOiRQb3J0IikNCiAgICAgICAgaWYg +KCRzY3JpcHQ6UmVxT3JpZ2luSGVhZGVyIC1hbmQgKCRPcmlnaW5XaGl0ZWxpc3QgLWNvbnRhaW5z +ICRzY3JpcHQ6UmVxT3JpZ2luSGVhZGVyKSkgew0KICAgICAgICAgICAgJHNjcmlwdDpDb3JzT3Jp +Z2luRHluYW1pYyA9ICRzY3JpcHQ6UmVxT3JpZ2luSGVhZGVyDQogICAgICAgIH0gZWxzZSB7DQog +ICAgICAgICAgICAkc2NyaXB0OkNvcnNPcmlnaW5EeW5hbWljID0gJHNjcmlwdDpDb3JzT3JpZ2lu +DQogICAgICAgIH0NCg0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgIyA9PT09PT09PT09PT09 +PT09PT09PT0gQ09SUyBQUkVGTElHSFQgPT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAg +ICBpZiAoJE1ldGhvZCAtZXEgJ09QVElPTlMnKSB7DQogICAgICAgICAgICAgICAgQWRkLVNlY3Vy +aXR5SGVhZGVycyAkUmVzOyAkUmVzLlN0YXR1c0NvZGUgPSAyMDQ7ICRSZXMuQ2xvc2UoKTsgY29u +dGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBDU1JGLVNjaHV0eiBmdWVyIHdy +aXRpbmcgbWV0aG9kczogT3JpZ2luIG11c3MgbWF0Y2hlbiBvZGVyIGZlaGxlbi4NCiAgICAgICAg +ICAgICMgQnJvd3NlciBzZW5kZW4gT3JpZ2luIGJlaSBDcm9zcy1TaXRlLVBPU1QgendpbmdlbmQ7 +IGJlaSBTYW1lLVNpdGUNCiAgICAgICAgICAgICMgUmVxdWVzdHMgaXN0IGVyIGdsZWljaCBvZGVy +IGZlaGx0IChDTEkvY3VybCkuIEFid2VpY2hlbmRlciBPcmlnaW4NCiAgICAgICAgICAgICMgPSBD +cm9zcy1TaXRlLUFuZ3JpZmYgdm9uIGVpbmVtIGFuZGVyZW4gbG9rYWxlbiBTZXJ2aWNlIGFibGVo +bmVuLg0KICAgICAgICAgICAgIyBNaXJyb3IgenUgc2VydmVyLnB5OjIyMTctMjIyOC4NCiAgICAg +ICAgICAgIGlmICgkTWV0aG9kIC1pbiBAKCdQT1NUJywnUFVUJywnREVMRVRFJywnUEFUQ0gnKSkg +ew0KICAgICAgICAgICAgICAgICRPcmlnaW4gPSAkUmVxLkhlYWRlcnNbJ09yaWdpbiddDQogICAg +ICAgICAgICAgICAgIyBUb2xlcmFudGVzIE1hdGNoaW5nOiBsb2NhbGhvc3QgVU5EIDEyNy4wLjAu +MSAoVXNlciBrb2VubmVuDQogICAgICAgICAgICAgICAgIyB2aWEgQm9va21hcmsgYXVmIGRpZSBM +b29wYmFjay1JUCBnZWxhbmRldCBzZWluKS4gQmVpZGUNCiAgICAgICAgICAgICAgICAjIFZhcmlh +bnRlbiB6ZWlnZW4gYXVmIGRlbnNlbGJlbiBMaXN0ZW5lciwga2VpbiBDU1JGLVJpc2lrby4NCiAg +ICAgICAgICAgICAgICAkT3JpZ2luRXJsYXVidCA9IEAoDQogICAgICAgICAgICAgICAgICAgICJo +dHRwOi8vbG9jYWxob3N0OiRQb3J0IiwNCiAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly8xMjcu +MC4wLjE6JFBvcnQiDQogICAgICAgICAgICAgICAgKQ0KICAgICAgICAgICAgICAgIGlmICgkT3Jp +Z2luIC1hbmQgKCRPcmlnaW5FcmxhdWJ0IC1ub3Rjb250YWlucyAkT3JpZ2luKSkgew0KICAgICAg +ICAgICAgICAgICAgICBEZWJ1Zy1Mb2cgJ1NFQycgIkNTUkY6ICRNZXRob2QgJFBhdGggdm9uIE9y +aWdpbj0kT3JpZ2luIGFiZ2VsZWhudCIgJ3JlZCcNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1F +cnJvciAkUmVzICdDcm9zcy1PcmlnaW4tUmVxdWVzdCBhYmdlbGVobnQnIDQwMw0KICAgICAgICAg +ICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0K +ICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT0gTElGRUNZQ0xFID09PT09PT09PT09 +PT09PT09PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9oZWFydGJlYXQnIC1h +bmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgJHNjcmlwdDpMYXN0SGVh +cnRiZWF0ID0gR2V0LURhdGUNCiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAeyBzdGF0 +dXMgPSAnb2snIH07IGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBh +dGggLWVxICcvYXBpL3NodXRkb3duJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAg +ICAgICAgICAgICMgQmVhY29uIHZvbSBCcm93c2VyIGJlaSBUYWIvV2luZG93LUNsb3NlLiBIZWFy +dGJlYXQtVWhyIDI1cw0KICAgICAgICAgICAgICAgICMgenVydWVja2RyZWhlbiAtPiBTZXJ2ZXIg +c3RpcmJ0IGluIDw9NXMgKGt1cnplIFJlbG9hZC1Ub2xlcmFueikuDQogICAgICAgICAgICAgICAg +JHNjcmlwdDpMYXN0SGVhcnRiZWF0ID0gKEdldC1EYXRlKS5BZGRTZWNvbmRzKC0oJHNjcmlwdDpI +ZWFydGJlYXRUaW1lb3V0U2VjIC0gNSkpDQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMg +QHsgc3RhdHVzID0gJ3NodXRkb3duIGVpbmdlbGVpdGV0JyB9OyBjb250aW51ZQ0KICAgICAgICAg +ICAgfQ0KDQogICAgICAgICAgICAjID09PT09PT09PT09PT09PT09PT09PSBJTkZPID09PT09PT09 +PT09PT09PT09PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9pbmZvJyAtYW5k +ICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgUmVmcmVzaC1VcGRhdGVDaGVj +aw0KICAgICAgICAgICAgICAgICRSb2xsZUFrdHVlbGwgPSBHZXQtVXNlclJvbGxlDQogICAgICAg +ICAgICAgICAgU2VuZC1Kc29uICRSZXMgKFtvcmRlcmVkXUB7DQogICAgICAgICAgICAgICAgICAg +IGJlbnV0emVyICAgICAgICAgICAgPSBHZXQtQWt0dWVsbGVyQmVudXR6ZXINCiAgICAgICAgICAg +ICAgICAgICAgaXN0QWRtaW4gICAgICAgICAgICA9IFRlc3QtSXN0QWRtaW4NCiAgICAgICAgICAg +ICAgICAgICAgaXN0U3VwZXJVc2VyICAgICAgICA9IFRlc3QtSXN0U3VwZXJVc2VyDQogICAgICAg +ICAgICAgICAgICAgIGlzdEZhY2hhdWZzaWNodCAgICAgPSBUZXN0LUlzdEZhY2hhdWZzaWNodA0K +ICAgICAgICAgICAgICAgICAgICByb2xsZSAgICAgICAgICAgICAgID0gJFJvbGxlQWt0dWVsbA0K +ICAgICAgICAgICAgICAgICAgICBkYXJmVWViZXJzY2hyZWliZW4gID0gVGVzdC1EYXJmVWViZXJz +Y2hyZWliZW4gJFJvbGxlQWt0dWVsbA0KICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIgICAgICAg +ICAgICAgID0gImh0dHA6Ly9sb2NhbGhvc3Q6JFBvcnQiDQogICAgICAgICAgICAgICAgICAgIHVw +ZGF0ZUF2YWlsYWJsZSAgICAgPSAkc2NyaXB0OlVwZGF0ZUF2YWlsYWJsZQ0KICAgICAgICAgICAg +ICAgICAgICByZW1vdGVWZXJzaW9uICAgICAgID0gJHNjcmlwdDpSZW1vdGVWZXJzaW9uDQogICAg +ICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0K +DQogICAgICAgICAgICAjID09PT09PT09PT09PT09PT09PT09PSBBRE1JTi1DT05GSUcgPT09PT09 +PT09PT09PT09PT09PT09DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluJyAt +YW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgJEFkbWluID0gUmVhZC1K +c29uRmlsZSAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRBZG1p +bikgeyBTZW5kLUVycm9yICRSZXMgJ2FkbWluLmpzb24gbmljaHQgZ2VmdW5kZW4nIDQwNCB9IGVs +c2UgeyBTZW5kLUpzb24gJFJlcyAkQWRtaW4gfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQog +ICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluJyAtYW5k +ICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0 +QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlcyAnS2VpbmUgQmVyZWNodGlndW5nJyA0MDM7IGNvbnRp +bnVlIH0NCiAgICAgICAgICAgICAgICAkQm9keSA9IFJlYWQtQm9keSAkUmVxDQogICAgICAgICAg +ICAgICAgaWYgKCRudWxsIC1lcSAkQm9keSkgeyBTZW5kLUVycm9yICRSZXMgJ0FuZnJhZ2UgenUg +Z3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICREYXRhID0gJEJvZHkgfCBD +b252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgV3JpdGUtSnNvbkZpbGUgJ2FkbWluLmpz +b24nICREYXRhDQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnYWRtaW4uY29uZmln +LmdlYWVuZGVydCcgQHsgYmVyZWljaCA9ICdhZG1pbi1rb25maWd1cmF0aW9uJyB9DQogICAgICAg +ICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9OyBjb250 +aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09PT09PT09PT09PT09PT09 +PSBTVVBFUlVTRVItVkVSV0FMVFVORyA9PT09PT09PT09PT09PT09PT09PT0NCiAgICAgICAgICAg +IGlmICgkUGF0aCAtZXEgJy9hcGkvYWRtaW4vc3VwZXJ1c2VyJyAtYW5kICRNZXRob2QgLWVxICdQ +VVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBT +ZW5kLUVycm9yICRSZXMgJ051ciBTdXBlclVzZXIgZHVlcmZlbiBTdXBlclVzZXIgdmVyd2FsdGVu +JyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkQm9keSA9IFJlYWQtQm9keSAkUmVx +DQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkQm9keSkgeyBTZW5kLUVycm9yICRSZXMg +J0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICREYXRl +biA9IFtvYmplY3RbXV1AKCRCb2R5IHwgQ29udmVydEZyb20tSnNvbikgICMgQXJyYXktRXJoYWx0 +IHVudGVyIFBTIDUuMSBhdWNoIGJlaSAxIEVsZW1lbnQNCiAgICAgICAgICAgICAgICAkQWRtaW4g +PSBSZWFkLUpzb25GaWxlICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgIGlmICgkQWRtaW4u +UFNPYmplY3QuUHJvcGVydGllc1snc3VwZXJVc2VyJ10pIHsNCiAgICAgICAgICAgICAgICAgICAg +JEFkbWluLnN1cGVyVXNlciA9ICREYXRlbg0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAg +ICAgICAgICAgICAgICAgICRBZG1pbiB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3Bl +cnR5IC1OYW1lICdzdXBlclVzZXInIC1WYWx1ZSAkRGF0ZW4NCiAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgV3JpdGUtSnNvbkZpbGUgJ2FkbWluLmpzb24nICRBZG1pbg0KICAgICAg +ICAgICAgICAgICRBbnphaGwgPSBAKCREYXRlbikuQ291bnQNCiAgICAgICAgICAgICAgICBXcml0 +ZS1Mb2dFaW50cmFnICdzdXBlcnVzZXIuZ2VhZW5kZXJ0JyBAeyBhbnphaGwgPSAkQW56YWhsIH0N +CiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQn +IH07IGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT09PT09PT09 +PT09PT09PT09IEZBQ0hBVUZTSUNIVEVOLVZFUldBTFRVTkcgKFBoYXNlIEIpID09PT09PT09PT09 +PT09PT09PT09PQ0KICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT0gV09DSEVOTk9U +SVogKFdvY2hlbnBsYW4tQW5zaWNodCwgcGVyc2lzdGVudCBwcm8gS1cpID09PT09PT09PT09PT09 +PT09PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL3dvY2hlbm5v +dGl6JyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgICRCb2R5ID0g +UmVhZC1Cb2R5ICRSZXENCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRCb2R5KSB7IFNl +bmQtRXJyb3IgJFJlcyAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAg +ICAgICAgICAgdHJ5IHsgJEEgPSAkQm9keSB8IENvbnZlcnRGcm9tLUpzb24gfSBjYXRjaCB7IFNl +bmQtRXJyb3IgJFJlcyAnVW5ndWVsdGlnZXMgSlNPTicgNDAwOyBjb250aW51ZSB9DQogICAgICAg +ICAgICAgICAgJEt3S2V5ID0gaWYgKCRBLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2t3S2V5J10pIHsg +KFtzdHJpbmddJEEua3dLZXkpLlRyaW0oKSB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAg +JFRleHQgPSBpZiAoJEEuUFNPYmplY3QuUHJvcGVydGllc1sndGV4dCddKSB7IFtzdHJpbmddJEEu +dGV4dCB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgaWYgKCRLd0tleSAtbm90bWF0Y2gg +J15cZHs0fS1XXGR7Mn0kJykgeyBTZW5kLUVycm9yICRSZXMgJ2t3S2V5IHVuZ3VlbHRpZyAoZXJ3 +YXJ0ZXQ6IFlZWVktV25uKScgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgIyBWZXJn +YW5nZW5lIFdvY2hlbiBzY2hyZWliZ2VzY2h1ZXR6dA0KICAgICAgICAgICAgICAgIHRyeSB7DQog +ICAgICAgICAgICAgICAgICAgICRKYWhyID0gW2ludF0kS3dLZXkuU3Vic3RyaW5nKDAsIDQpDQog +ICAgICAgICAgICAgICAgICAgICRLd04gID0gW2ludF0kS3dLZXkuU3Vic3RyaW5nKDYsIDIpDQog +ICAgICAgICAgICAgICAgICAgICRKYW40ID0gW2RhdGV0aW1lXTo6bmV3KCRKYWhyLCAxLCA0KQ0K +ICAgICAgICAgICAgICAgICAgICAkVzFNbyA9ICRKYW40LkFkZERheXMoLShbaW50XSRKYW40LkRh +eU9mV2VlayAtIDEpKQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJEphbjQuRGF5T2ZXZWVrIC1l +cSBbU3lzdGVtLkRheU9mV2Vla106OlN1bmRheSkgeyAkVzFNbyA9ICRKYW40LkFkZERheXMoLTYp +IH0NCiAgICAgICAgICAgICAgICAgICAgJEt3U28gPSAkVzFNby5BZGREYXlzKCgkS3dOIC0gMSkg +KiA3ICsgNikNCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsgU2VuZC1FcnJvciAkUmVzICdrd0tl +eSB1bmd1ZWx0aWcnIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIGlmICgkS3dTby5E +YXRlIC1sdCAoR2V0LURhdGUpLkRhdGUpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJv +ciAkUmVzICdXb2NoZSBiZXJlaXRzIGFiZ2VsYXVmZW4gLSBOb3RpeiBuaWNodCBlZGl0aWVyYmFy +JyA0MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHRyeSB7 +DQogICAgICAgICAgICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicg +ew0KICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcgPSBSZWFkLUpzb25GaWxlICdwbGFu +dW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRQbGFudW5n +KSB7IHJldHVybiBAeyB0eXAgPSAnZXJyb3InOyBjb2RlID0gNDA0OyBtc2cgPSAncGxhbnVuZy5q +c29uIG5pY2h0IGdlZnVuZGVuJyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90 +ICRQbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3dvY2hlbm5vdGl6ZW4nXSkgew0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBO +b3RlUHJvcGVydHkgLU5hbWUgJ3dvY2hlbm5vdGl6ZW4nIC1WYWx1ZSAoTmV3LU9iamVjdCBQU09i +amVjdCkNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg +IGlmIChbc3RyaW5nXTo6SXNOdWxsT3JFbXB0eSgkVGV4dCkpIHsNCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICBpZiAoJFBsYW51bmcud29jaGVubm90aXplbi5QU09iamVjdC5Qcm9wZXJ0aWVz +WyRLd0tleV0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcud29j +aGVubm90aXplbi5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgkS3dLZXkpDQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFBsYW51bmcud29jaGVubm90aXplbi5QU09i +amVjdC5Qcm9wZXJ0aWVzWyRLd0tleV0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgJFBsYW51bmcud29jaGVubm90aXplbi4kS3dLZXkgPSAkVGV4dA0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQ +bGFudW5nLndvY2hlbm5vdGl6ZW4gfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0 +eSAtTmFtZSAkS3dLZXkgLVZhbHVlICRUZXh0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgIyBB +dWRpdC1JdGVyLUM6IEhNQUMtUmUtU2lnbiAtIHNvbnN0IGxvZXN0IEludGVncml0YWV0cy1DaGVj +ayBGZWhsYWxhcm0gYXVzLg0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtUGxhbnVuZ01p +dEludGVncml0YWV0ICRQbGFudW5nIEAoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu +IEB7IHR5cCA9ICdvaycgfQ0KICAgICAgICAgICAgICAgICAgICB9IHwgT3V0LU51bGwNCiAgICAg +ICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVz +ICIkXyIgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBX +cml0ZS1Mb2dFaW50cmFnICd3b2NoZW5ub3Rpei5nZWFlbmRlcnQnIEB7IGt3S2V5ID0gJEt3S2V5 +OyBsYWVuZ2UgPSAkVGV4dC5MZW5ndGggfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVz +IEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQog +ICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IFRBR0VT +REFURU4tT1ZFUlJJREUgRlVFUiBFSU5FTiBUQUcgKEIuMiBTVS1PdmVycmlkZSkgPT09PT09PT09 +PT09PT09PT09PT09DQogICAgICAgICAgICAjIFBPU1QgL2FwaS9wbGFudW5nL3RhZ2VzZGF0ZW4g +eyBkYXR1bSwgZGF0ZW4gfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5n +L3RhZ2VzZGF0ZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAg +JFJvbGxlID0gR2V0LVVzZXJSb2xsZQ0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURh +cmZVZWJlcnNjaHJlaWJlbiAkUm9sbGUpKSB7IFNlbmQtRXJyb3IgJFJlcyAnTnVyIFNVL0ZhY2hh +dWZzaWNodCBkYXJmIFRhZ2VzZGF0ZW4gYW5wYXNzZW4nIDQwMzsgY29udGludWUgfQ0KICAgICAg +ICAgICAgICAgICRCb2R5ID0gUmVhZC1Cb2R5ICRSZXENCiAgICAgICAgICAgICAgICBpZiAoJG51 +bGwgLWVxICRCb2R5KSB7IFNlbmQtRXJyb3IgJFJlcyAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBj +b250aW51ZSB9DQogICAgICAgICAgICAgICAgdHJ5IHsgJEEgPSAkQm9keSB8IENvbnZlcnRGcm9t +LUpzb24gfSBjYXRjaCB7IFNlbmQtRXJyb3IgJFJlcyAnVW5ndWVsdGlnZXMgSlNPTicgNDAwOyBj +b250aW51ZSB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJEEuZGF0dW0gLW9yICRudWxsIC1l +cSAkQS5kYXRlbikgeyBTZW5kLUVycm9yICRSZXMgJ2RhdHVtL2RhdGVuIGZlaGx0JyA0MDA7IGNv +bnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkRGF0dW0gPSBbc3RyaW5nXSRBLmRhdHVtDQogICAg +ICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgSW52b2tlLVdpdGhGaWxlTG9j +ayAncGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZyA9IFJl +YWQtSnNvbkZpbGUgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk +bnVsbCAtZXEgJFBsYW51bmcpIHsgcmV0dXJuIEB7IHR5cCA9ICdlcnJvcic7IGNvZGUgPSA0MDQ7 +IG1zZyA9ICdwbGFudW5nLmpzb24gbmljaHQgZ2VmdW5kZW4nIH0gfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgaWYgKC1ub3QgJFBsYW51bmcuUFNPYmplY3QuUHJvcGVydGllc1sndGFnZXNkYXRl +biddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcgfCBBZGQtTWVtYmVy +IC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAndGFnZXNkYXRlbicgLVZhbHVlIChOZXct +T2JqZWN0IFBTT2JqZWN0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgaWYgKCRQbGFudW5nLnRhZ2VzZGF0ZW4uUFNPYmplY3QuUHJvcGVydGllc1sk +RGF0dW1dKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcudGFnZXNkYXRl +bi4kRGF0dW0gPSAkQS5kYXRlbg0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy50YWdlc2RhdGVuIHwgQWRkLU1lbWJl +ciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJERhdHVtIC1WYWx1ZSAkQS5kYXRlbg0K +ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUt +UGxhbnVuZ01pdEludGVncml0YWV0ICRQbGFudW5nIEAoIEB7IGtpbmQgPSAndGFnZXNkYXRlbic7 +IGRhdHVtID0gJERhdHVtIH0gKQ0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHR5 +cCA9ICdvaycgfQ0KICAgICAgICAgICAgICAgICAgICB9IHwgT3V0LU51bGwNCiAgICAgICAgICAg +ICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzICIkXyIg +NTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1M +b2dFaW50cmFnICd0YWdlc2RhdGVuLm92ZXJyaWRlJyBAeyBkYXR1bSA9ICREYXR1bTsgcm9sbGUg +PSAkUm9sbGUgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7IHN0YXR1cyA9ICdn +ZXNwZWljaGVydCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoN +CiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IFJPVEFUSU9OLVNMT1QgKEIuMjog +a3VlbmZ0aWdlIFRlcm1pbmUgaW0gWnlrbHVzKSA9PT09PT09PT09PT09PT09PT09PT0NCiAgICAg +ICAgICAgICMgUE9TVCAvYXBpL2FkbWluL3JvdGF0aW9uLXNsb3QgeyBkYXR1bSwgZGF0ZW4gfQ0K +ICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9yb3RhdGlvbi1zbG90JyAtYW5k +ICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgICRSb2xsZSA9IEdldC1Vc2Vy +Um9sbGUNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJmVWViZXJzY2hyZWliZW4g +JFJvbGxlKSkgeyBTZW5kLUVycm9yICRSZXMgJ051ciBTVS9GYWNoYXVmc2ljaHQgZGFyZiBSb3Rh +dGlvbiBhZW5kZXJuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkQm9keSA9IFJl YWQtQm9keSAkUmVxDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkQm9keSkgeyBTZW5k LUVycm9yICRSZXMgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAg ICAgICAgIHRyeSB7ICRBID0gJEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uIH0gY2F0Y2ggeyBTZW5k LUVycm9yICRSZXMgJ1VuZ3VlbHRpZ2VzIEpTT04nIDQwMDsgY29udGludWUgfQ0KICAgICAgICAg -ICAgICAgICRLd0tleSA9IGlmICgkQS5QU09iamVjdC5Qcm9wZXJ0aWVzWydrd0tleSddKSB7IChb -c3RyaW5nXSRBLmt3S2V5KS5UcmltKCkgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICRU -ZXh0ID0gaWYgKCRBLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RleHQnXSkgeyBbc3RyaW5nXSRBLnRl -eHQgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgIGlmICgkS3dLZXkgLW5vdG1hdGNoICde -XGR7NH0tV1xkezJ9JCcpIHsgU2VuZC1FcnJvciAkUmVzICdrd0tleSB1bmd1ZWx0aWcgKGVyd2Fy -dGV0OiBZWVlZLVdubiknIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICMgVmVyZ2Fu -Z2VuZSBXb2NoZW4gc2NocmVpYmdlc2NodWV0enQNCiAgICAgICAgICAgICAgICB0cnkgew0KICAg -ICAgICAgICAgICAgICAgICAkSmFociA9IFtpbnRdJEt3S2V5LlN1YnN0cmluZygwLCA0KQ0KICAg -ICAgICAgICAgICAgICAgICAkS3dOICA9IFtpbnRdJEt3S2V5LlN1YnN0cmluZyg2LCAyKQ0KICAg -ICAgICAgICAgICAgICAgICAkSmFuNCA9IFtkYXRldGltZV06Om5ldygkSmFociwgMSwgNCkNCiAg -ICAgICAgICAgICAgICAgICAgJFcxTW8gPSAkSmFuNC5BZGREYXlzKC0oW2ludF0kSmFuNC5EYXlP -ZldlZWsgLSAxKSkNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRKYW40LkRheU9mV2VlayAtZXEg -W1N5c3RlbS5EYXlPZldlZWtdOjpTdW5kYXkpIHsgJFcxTW8gPSAkSmFuNC5BZGREYXlzKC02KSB9 -DQogICAgICAgICAgICAgICAgICAgICRLd1NvID0gJFcxTW8uQWRkRGF5cygoJEt3TiAtIDEpICog -NyArIDYpDQogICAgICAgICAgICAgICAgfSBjYXRjaCB7IFNlbmQtRXJyb3IgJFJlcyAna3dLZXkg -dW5ndWVsdGlnJyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBpZiAoJEt3U28uRGF0 -ZSAtbHQgKEdldC1EYXRlKS5EYXRlKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3Ig -JFJlcyAnV29jaGUgYmVyZWl0cyBhYmdlbGF1ZmVuIC0gTm90aXogbmljaHQgZWRpdGllcmJhcicg -NDAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB0cnkgew0K -ICAgICAgICAgICAgICAgICAgICBJbnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpzb24nIHsN -CiAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nID0gUmVhZC1Kc29uRmlsZSAncGxhbnVu -Zy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkUGxhbnVuZykg -eyByZXR1cm4gQHsgdHlwID0gJ2Vycm9yJzsgY29kZSA9IDQwNDsgbXNnID0gJ3BsYW51bmcuanNv -biBuaWNodCBnZWZ1bmRlbicgfSB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAk -UGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWyd3b2NoZW5ub3RpemVuJ10pIHsNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90 -ZVByb3BlcnR5IC1OYW1lICd3b2NoZW5ub3RpemVuJyAtVmFsdWUgKE5ldy1PYmplY3QgUFNPYmpl -Y3QpDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBp -ZiAoW3N0cmluZ106OklzTnVsbE9yRW1wdHkoJFRleHQpKSB7DQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgaWYgKCRQbGFudW5nLndvY2hlbm5vdGl6ZW4uUFNPYmplY3QuUHJvcGVydGllc1sk -S3dLZXldKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLndvY2hl -bm5vdGl6ZW4uUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJEt3S2V5KQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQbGFudW5nLndvY2hlbm5vdGl6ZW4uUFNPYmpl -Y3QuUHJvcGVydGllc1skS3dLZXldKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICRQbGFudW5nLndvY2hlbm5vdGl6ZW4uJEt3S2V5ID0gJFRleHQNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxh -bnVuZy53b2NoZW5ub3RpemVuIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkg -LU5hbWUgJEt3S2V5IC1WYWx1ZSAkVGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICMgQXVk -aXQtSXRlci1DOiBITUFDLVJlLVNpZ24gLSBzb25zdCBsb2VzdCBJbnRlZ3JpdGFldHMtQ2hlY2sg -RmVobGFsYXJtIGF1cy4NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLVBsYW51bmdNaXRJ -bnRlZ3JpdGFldCAkUGxhbnVuZyBAKCkNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBA -eyB0eXAgPSAnb2snIH0NCiAgICAgICAgICAgICAgICAgICAgfSB8IE91dC1OdWxsDQogICAgICAg -ICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAi -JF8iIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgV3Jp -dGUtTG9nRWludHJhZyAnd29jaGVubm90aXouZ2VhZW5kZXJ0JyBAeyBrd0tleSA9ICRLd0tleTsg -bGFlbmdlID0gJFRleHQuTGVuZ3RoIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBA -eyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAg -ICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09PT09PT09PT09PT09PT09PSBUQUdFU0RB -VEVOLU9WRVJSSURFIEZVRVIgRUlORU4gVEFHIChCLjIgU1UtT3ZlcnJpZGUpID09PT09PT09PT09 -PT09PT09PT09PQ0KICAgICAgICAgICAgIyBQT1NUIC9hcGkvcGxhbnVuZy90YWdlc2RhdGVuIHsg -ZGF0dW0sIGRhdGVuIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy90 -YWdlc2RhdGVuJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgICRS -b2xsZSA9IEdldC1Vc2VyUm9sbGUNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJm -VWViZXJzY2hyZWliZW4gJFJvbGxlKSkgeyBTZW5kLUVycm9yICRSZXMgJ051ciBTVS9GYWNoYXVm -c2ljaHQgZGFyZiBUYWdlc2RhdGVuIGFucGFzc2VuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAg -ICAgICAgICAkQm9keSA9IFJlYWQtQm9keSAkUmVxDQogICAgICAgICAgICAgICAgaWYgKCRudWxs -IC1lcSAkQm9keSkgeyBTZW5kLUVycm9yICRSZXMgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29u -dGludWUgfQ0KICAgICAgICAgICAgICAgIHRyeSB7ICRBID0gJEJvZHkgfCBDb252ZXJ0RnJvbS1K -c29uIH0gY2F0Y2ggeyBTZW5kLUVycm9yICRSZXMgJ1VuZ3VlbHRpZ2VzIEpTT04nIDQwMDsgY29u -dGludWUgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRBLmRhdHVtIC1vciAkbnVsbCAtZXEg -JEEuZGF0ZW4pIHsgU2VuZC1FcnJvciAkUmVzICdkYXR1bS9kYXRlbiBmZWhsdCcgNDAwOyBjb250 -aW51ZSB9DQogICAgICAgICAgICAgICAgJERhdHVtID0gW3N0cmluZ10kQS5kYXR1bQ0KICAgICAg -ICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxvY2sg -J3BsYW51bmcuanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcgPSBSZWFk -LUpzb25GaWxlICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51 -bGwgLWVxICRQbGFudW5nKSB7IHJldHVybiBAeyB0eXAgPSAnZXJyb3InOyBjb2RlID0gNDA0OyBt -c2cgPSAncGxhbnVuZy5qc29uIG5pY2h0IGdlZnVuZGVuJyB9IH0NCiAgICAgICAgICAgICAgICAg -ICAgICAgIGlmICgtbm90ICRQbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RhZ2VzZGF0ZW4n -XSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nIHwgQWRkLU1lbWJlciAt -TWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ3RhZ2VzZGF0ZW4nIC1WYWx1ZSAoTmV3LU9i -amVjdCBQU09iamVjdCkNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICAgICAgICAgIGlmICgkUGxhbnVuZy50YWdlc2RhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJERh -dHVtXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLnRhZ2VzZGF0ZW4u -JERhdHVtID0gJEEuZGF0ZW4NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcudGFnZXNkYXRlbiB8IEFkZC1NZW1iZXIg -LU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICREYXR1bSAtVmFsdWUgJEEuZGF0ZW4NCiAg -ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLVBs -YW51bmdNaXRJbnRlZ3JpdGFldCAkUGxhbnVuZyBAKCBAeyBraW5kID0gJ3RhZ2VzZGF0ZW4nOyBk -YXR1bSA9ICREYXR1bSB9ICkNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyB0eXAg -PSAnb2snIH0NCiAgICAgICAgICAgICAgICAgICAgfSB8IE91dC1OdWxsDQogICAgICAgICAgICAg -ICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAiJF8iIDUw -MzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9n -RWludHJhZyAndGFnZXNkYXRlbi5vdmVycmlkZScgQHsgZGF0dW0gPSAkRGF0dW07IHJvbGxlID0g -JFJvbGxlIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAeyBzdGF0dXMgPSAnZ2Vz -cGVpY2hlcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQog -ICAgICAgICAgICAjID09PT09PT09PT09PT09PT09PT09PSBST1RBVElPTi1TTE9UIChCLjI6IGt1 -ZW5mdGlnZSBUZXJtaW5lIGltIFp5a2x1cykgPT09PT09PT09PT09PT09PT09PT09DQogICAgICAg -ICAgICAjIFBPU1QgL2FwaS9hZG1pbi9yb3RhdGlvbi1zbG90IHsgZGF0dW0sIGRhdGVuIH0NCiAg -ICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvYWRtaW4vcm90YXRpb24tc2xvdCcgLWFuZCAk -TWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICAkUm9sbGUgPSBHZXQtVXNlclJv -bGxlDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZlVlYmVyc2NocmVpYmVuICRS -b2xsZSkpIHsgU2VuZC1FcnJvciAkUmVzICdOdXIgU1UvRmFjaGF1ZnNpY2h0IGRhcmYgUm90YXRp -b24gYWVuZGVybicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFk -LUJvZHkgJFJlcQ0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1F -cnJvciAkUmVzICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAg -ICAgICB0cnkgeyAkQSA9ICRCb2R5IHwgQ29udmVydEZyb20tSnNvbiB9IGNhdGNoIHsgU2VuZC1F -cnJvciAkUmVzICdVbmd1ZWx0aWdlcyBKU09OJyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAg -ICAgICBpZiAoLW5vdCAkQS5kYXR1bSAtb3IgJG51bGwgLWVxICRBLmRhdGVuKSB7IFNlbmQtRXJy -b3IgJFJlcyAnZGF0dW0vZGF0ZW4gZmVobHQnIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAg -ICAgICRBZG1pbiA9IFJlYWQtSnNvbkZpbGUgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAg -JFJvdCA9ICRudWxsDQogICAgICAgICAgICAgICAgaWYgKCRBZG1pbi5QU09iamVjdC5Qcm9wZXJ0 -aWVzWyd0YWdlc2RhdGVuUm90YXRpb24nXSkgeyAkUm90ID0gJEFkbWluLnRhZ2VzZGF0ZW5Sb3Rh -dGlvbiB9DQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkUm90IC1vciAtbm90ICRSb3Qu -UFNPYmplY3QuUHJvcGVydGllc1sndGFnZSddIC1vciBAKCRSb3QudGFnZSkuQ291bnQgLWVxIDAp -IHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzICdSb3RhdGlvbiBoYXQga2Vp -bmUgVGFnZScgNDAwOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICAkV29jaGVuID0gaWYgKCRSb3QuUFNPYmplY3QuUHJvcGVydGllc1snd29jaGVuQW56YWhsJ10p -IHsgW2ludF0kUm90LndvY2hlbkFuemFobCB9IGVsc2UgeyAzIH0NCiAgICAgICAgICAgICAgICAk -U3RhcnRTdHIgPSBpZiAoJFJvdC5QU09iamVjdC5Qcm9wZXJ0aWVzWydzdGFydERhdHVtJ10pIHsg -W3N0cmluZ10kUm90LnN0YXJ0RGF0dW0gfSBlbHNlIHsgJzIwMjYtMDEtMDUnIH0NCiAgICAgICAg -ICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkU3RhcnREID0gW2RhdGV0aW1lXTo6 -UGFyc2UoJFN0YXJ0U3RyKQ0KICAgICAgICAgICAgICAgICAgICAkWmllbEQgPSBbZGF0ZXRpbWVd -OjpQYXJzZShbc3RyaW5nXSRBLmRhdHVtKQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAg -ICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXMgJ0RhdHVtIHVuZ3VlbHRpZycgNDAwOyBj -b250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkTW9kdWx1cyA9ICRX -b2NoZW4gKiA3DQogICAgICAgICAgICAgICAgaWYgKCRNb2R1bHVzIC1sZSAwKSB7IFNlbmQtRXJy -b3IgJFJlcyAnUm90YXRpb24gaGF0IGtlaW5lIFRhZ2UnIDQwMDsgY29udGludWUgfQ0KICAgICAg -ICAgICAgICAgICREaWZmID0gW2ludF0oW21hdGhdOjpSb3VuZCgoJFppZWxEIC0gJFN0YXJ0RCku -VG90YWxEYXlzKSkNCiAgICAgICAgICAgICAgICAkSWR4ID0gKCgkRGlmZiAlICRNb2R1bHVzKSAr -ICRNb2R1bHVzKSAlICRNb2R1bHVzDQogICAgICAgICAgICAgICAgJFRhZ2UgPSBAKCRSb3QudGFn -ZSkNCiAgICAgICAgICAgICAgICBpZiAoJElkeCAtZ2UgJFRhZ2UuQ291bnQpIHsgJElkeCA9ICRJ -ZHggJSAkVGFnZS5Db3VudCB9DQogICAgICAgICAgICAgICAgJFRhZ2VbJElkeF0gPSAkQS5kYXRl -bg0KICAgICAgICAgICAgICAgICRSb3QudGFnZSA9ICRUYWdlDQogICAgICAgICAgICAgICAgJEFk -bWluLnRhZ2VzZGF0ZW5Sb3RhdGlvbiA9ICRSb3QNCiAgICAgICAgICAgICAgICBXcml0ZS1Kc29u -RmlsZSAnYWRtaW4uanNvbicgJEFkbWluDQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJh -ZyAncm90YXRpb24uc2xvdC5nZWFlbmRlcnQnIEB7IGRhdHVtID0gJEEuZGF0dW07IGlkeCA9ICRJ -ZHg7IHJvbGxlID0gJFJvbGxlIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAeyBz -dGF0dXMgPSAnZ2VzcGVpY2hlcnQnOyBpZHggPSAkSWR4IH0NCiAgICAgICAgICAgICAgICBjb250 -aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIE51ciBTdXBlclVzZXIgZGFyZiBk -aWUgTGlzdGUgYWVuZGVybiAtIHNvbnN0IGtvZW5udGVuIEZhY2hhdWZzaWNodGVuDQogICAgICAg -ICAgICAjIHNpY2ggZ2VnZW5zZWl0aWcgaGluenVmdWVnZW4gb2huZSBTdXBlclVzZXItWnVzdGlt -bXVuZy4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvYWRtaW4vZmFjaGF1ZnNpY2h0 -ZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAo -VGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlcyAnTnVyIFN1cGVyVXNlciBkdWVy -ZmVuIEZhY2hhdWZzaWNodGVuIHZlcndhbHRlbicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAg -ICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAt -ZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAkUmVzICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRp -bnVlIH0NCiAgICAgICAgICAgICAgICAkRGF0ZW4gPSBbb2JqZWN0W11dQCgkQm9keSB8IENvbnZl -cnRGcm9tLUpzb24pDQogICAgICAgICAgICAgICAgJEFkbWluID0gUmVhZC1Kc29uRmlsZSAnYWRt -aW4uanNvbicNCiAgICAgICAgICAgICAgICBpZiAoJEFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNb -J2ZhY2hhdWZzaWNodGVuJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgJEFkbWluLmZhY2hhdWZz -aWNodGVuID0gJERhdGVuDQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAg -ICAgICAgJEFkbWluIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUg -J2ZhY2hhdWZzaWNodGVuJyAtVmFsdWUgJERhdGVuDQogICAgICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgICAgIFdyaXRlLUpzb25GaWxlICdhZG1pbi5qc29uJyAkQWRtaW4NCiAgICAgICAgICAg -ICAgICBXcml0ZS1Mb2dFaW50cmFnICdmYWNoYXVmc2ljaHRlbi5nZWFlbmRlcnQnIEB7IGFuemFo -bCA9IEAoJERhdGVuKS5Db3VudCB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsg -c3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9OyBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAg -ICAgICAgICAjID09PT09PT09PT09PT09PT09PT09PSBGRUlFUlRBR0UgLyBGRVJJRU4gLyBTT05E -RVJURVJNSU5FID09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1l -cSAnL2FwaS9hZG1pbi9mZWllcnRhZ2UnIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAg -ICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzICdL -ZWluZSBCZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRCb2R5 -ID0gUmVhZC1Cb2R5ICRSZXENCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRCb2R5KSB7 -IFNlbmQtRXJyb3IgJFJlcyAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAg -ICAgICAgICAgICAgJERhdGVuID0gW29iamVjdFtdXUAoJEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29u -KSAgIyBBcnJheS1FcmhhbHQgdW50ZXIgUFMgNS4xIGF1Y2ggYmVpIDEgRWxlbWVudA0KICAgICAg -ICAgICAgICAgICRBZG1pbiA9IFJlYWQtSnNvbkZpbGUgJ2FkbWluLmpzb24nDQogICAgICAgICAg -ICAgICAgJEFkbWluLmZlaWVydGFnZSA9ICREYXRlbg0KICAgICAgICAgICAgICAgIFdyaXRlLUpz +ICAgICAgIGlmICgtbm90ICRBLmRhdHVtIC1vciAkbnVsbCAtZXEgJEEuZGF0ZW4pIHsgU2VuZC1F +cnJvciAkUmVzICdkYXR1bS9kYXRlbiBmZWhsdCcgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAg +ICAgICAgJEFkbWluID0gUmVhZC1Kc29uRmlsZSAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAg +ICAkUm90ID0gJG51bGwNCiAgICAgICAgICAgICAgICBpZiAoJEFkbWluLlBTT2JqZWN0LlByb3Bl +cnRpZXNbJ3RhZ2VzZGF0ZW5Sb3RhdGlvbiddKSB7ICRSb3QgPSAkQWRtaW4udGFnZXNkYXRlblJv +dGF0aW9uIH0NCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRSb3QgLW9yIC1ub3QgJFJv +dC5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0YWdlJ10gLW9yIEAoJFJvdC50YWdlKS5Db3VudCAtZXEg +MCkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXMgJ1JvdGF0aW9uIGhhdCBr +ZWluZSBUYWdlJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgICRXb2NoZW4gPSBpZiAoJFJvdC5QU09iamVjdC5Qcm9wZXJ0aWVzWyd3b2NoZW5BbnphaGwn +XSkgeyBbaW50XSRSb3Qud29jaGVuQW56YWhsIH0gZWxzZSB7IDMgfQ0KICAgICAgICAgICAgICAg +ICRTdGFydFN0ciA9IGlmICgkUm90LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3N0YXJ0RGF0dW0nXSkg +eyBbc3RyaW5nXSRSb3Quc3RhcnREYXR1bSB9IGVsc2UgeyAnMjAyNi0wMS0wNScgfQ0KICAgICAg +ICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRTdGFydEQgPSBbZGF0ZXRpbWVd +OjpQYXJzZSgkU3RhcnRTdHIpDQogICAgICAgICAgICAgICAgICAgICRaaWVsRCA9IFtkYXRldGlt +ZV06OlBhcnNlKFtzdHJpbmddJEEuZGF0dW0pDQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQog +ICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAnRGF0dW0gdW5ndWVsdGlnJyA0MDA7 +IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRNb2R1bHVzID0g +JFdvY2hlbiAqIDcNCiAgICAgICAgICAgICAgICBpZiAoJE1vZHVsdXMgLWxlIDApIHsgU2VuZC1F +cnJvciAkUmVzICdSb3RhdGlvbiBoYXQga2VpbmUgVGFnZScgNDAwOyBjb250aW51ZSB9DQogICAg +ICAgICAgICAgICAgJERpZmYgPSBbaW50XShbbWF0aF06OlJvdW5kKCgkWmllbEQgLSAkU3RhcnRE +KS5Ub3RhbERheXMpKQ0KICAgICAgICAgICAgICAgICRJZHggPSAoKCREaWZmICUgJE1vZHVsdXMp +ICsgJE1vZHVsdXMpICUgJE1vZHVsdXMNCiAgICAgICAgICAgICAgICAkVGFnZSA9IEAoJFJvdC50 +YWdlKQ0KICAgICAgICAgICAgICAgIGlmICgkSWR4IC1nZSAkVGFnZS5Db3VudCkgeyAkSWR4ID0g +JElkeCAlICRUYWdlLkNvdW50IH0NCiAgICAgICAgICAgICAgICAkVGFnZVskSWR4XSA9ICRBLmRh +dGVuDQogICAgICAgICAgICAgICAgJFJvdC50YWdlID0gJFRhZ2UNCiAgICAgICAgICAgICAgICAk +QWRtaW4udGFnZXNkYXRlblJvdGF0aW9uID0gJFJvdA0KICAgICAgICAgICAgICAgIFdyaXRlLUpz b25GaWxlICdhZG1pbi5qc29uJyAkQWRtaW4NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50 -cmFnICdmZWllcnRhZ2UuZ2VhZW5kZXJ0JyBAe30NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24g -JFJlcyBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH07IGNvbnRpbnVlDQogICAgICAgICAgICB9 -DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL2ZlcmllbicgLWFuZCAkTWV0 -aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFkbWlu -KSkgeyBTZW5kLUVycm9yICRSZXMgJ0tlaW5lIEJlcmVjaHRpZ3VuZycgNDAzOyBjb250aW51ZSB9 -DQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0KICAgICAgICAgICAgICAg -IGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAkUmVzICdBbmZyYWdlIHp1IGdyb3Nz -JyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkRGF0ZW4gPSBbb2JqZWN0W11dQCgk -Qm9keSB8IENvbnZlcnRGcm9tLUpzb24pICAjIEFycmF5LUVyaGFsdCB1bnRlciBQUyA1LjEgYXVj -aCBiZWkgMSBFbGVtZW50DQogICAgICAgICAgICAgICAgJEFkbWluID0gUmVhZC1Kc29uRmlsZSAn -YWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAkQWRtaW4uZmVyaWVuID0gJERhdGVuDQogICAg -ICAgICAgICAgICAgV3JpdGUtSnNvbkZpbGUgJ2FkbWluLmpzb24nICRBZG1pbg0KICAgICAgICAg -ICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2Zlcmllbi5nZWFlbmRlcnQnIEB7fQ0KICAgICAgICAg -ICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfTsgY29udGlu -dWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IEJF -U1BSRUNIVU5HU1ZPUkxBR0VOIChCLjQpID09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAg -ICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9iZXNwcmVjaHVuZ3N2b3JsYWdlbicgLWFuZCAk -TWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFk -bWluKSkgeyBTZW5kLUVycm9yICRSZXMgJ0tlaW5lIEJlcmVjaHRpZ3VuZycgNDAzOyBjb250aW51 -ZSB9DQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0KICAgICAgICAgICAg -ICAgIGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAkUmVzICdBbmZyYWdlIHp1IGdy -b3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkRGF0ZW4gPSBbb2JqZWN0W11d -QCgkQm9keSB8IENvbnZlcnRGcm9tLUpzb24pDQogICAgICAgICAgICAgICAgJEFkbWluID0gUmVh -ZC1Kc29uRmlsZSAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICBpZiAoJEFkbWluLlBTT2Jq -ZWN0LlByb3BlcnRpZXNbJ2Jlc3ByZWNodW5nc1ZvcmxhZ2VuJ10pIHsNCiAgICAgICAgICAgICAg -ICAgICAgJEFkbWluLmJlc3ByZWNodW5nc1ZvcmxhZ2VuID0gJERhdGVuDQogICAgICAgICAgICAg -ICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJEFkbWluIHwgQWRkLU1lbWJlciAtTWVt -YmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ2Jlc3ByZWNodW5nc1ZvcmxhZ2VuJyAtVmFsdWUg -JERhdGVuDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUpzb25GaWxl -ICdhZG1pbi5qc29uJyAkQWRtaW4NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdi -ZXNwcmVjaHVuZ3N2b3JsYWdlbi5nZWFlbmRlcnQnIEB7IGFuemFobCA9IEAoJERhdGVuKS5Db3Vu -dCB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsgc3RhdHVzID0gJ2dlc3BlaWNo -ZXJ0JyB9OyBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoJFBhdGgg -LWVxICcvYXBpL2FkbWluL3NvbmRlcnRlcm1pbmUnIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsN -CiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAk -UmVzICdLZWluZSBCZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg -ICRCb2R5ID0gUmVhZC1Cb2R5ICRSZXENCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRC -b2R5KSB7IFNlbmQtRXJyb3IgJFJlcyAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9 -DQogICAgICAgICAgICAgICAgJFJvaCA9IFtvYmplY3RbXV1AKCRCb2R5IHwgQ29udmVydEZyb20t -SnNvbikgICMgQXJyYXktRXJoYWx0IHVudGVyIFBTIDUuMSBhdWNoIGJlaSAxIEVsZW1lbnQNCiAg -ICAgICAgICAgICAgICAjIFdoaXRlbGlzdCAoQXVkaXQtSXRlci1DKTogbnVyIDExIGVybGF1YnRl -IEZlbGRlciBwcm8gRWludHJhZyBwZXJzaXN0aWVyZW4NCiAgICAgICAgICAgICAgICAkRXJsYXVi -dCA9IEAoJ2lkJywnZGF0dW0nLCdkYXR1bUJpcycsJ3RpdGVsJywndGV4dCcsJ2ljb24nLCd0eXAn -LCd3YXJuTW9kdXMnLCdrYXRlZ29yaWUnLCdsb2dvcycsJ2xvZ29EYXJzdGVsbHVuZycpDQogICAg -ICAgICAgICAgICAgJERhdGVuID0gQCgpDQogICAgICAgICAgICAgICAgZm9yZWFjaCAoJFJvaDEg -aW4gJFJvaCkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRSb2gxKSB7IGNv -bnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgJFNhdWJlciA9IFtvcmRlcmVkXUB7fQ0KICAg -ICAgICAgICAgICAgICAgICBmb3JlYWNoICgkRmVsZCBpbiAkRXJsYXVidCkgew0KICAgICAgICAg -ICAgICAgICAgICAgICAgaWYgKCRSb2gxLlBTT2JqZWN0LlByb3BlcnRpZXNbJEZlbGRdKSB7DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNhdWJlclskRmVsZF0gPSAkUm9oMS4kRmVsZA0K -ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgICAgICREYXRlbiArPSBbcHNjdXN0b21vYmplY3RdJFNhdWJlcg0KICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICAkRGF0ZW4gPSBbb2JqZWN0W11dJERhdGVuDQogICAg -ICAgICAgICAgICAgJEFkbWluID0gUmVhZC1Kc29uRmlsZSAnYWRtaW4uanNvbicNCiAgICAgICAg -ICAgICAgICBpZiAoJEFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3NvbmRlcnRlcm1pbmUnXSkg -ew0KICAgICAgICAgICAgICAgICAgICAkQWRtaW4uc29uZGVydGVybWluZSA9ICREYXRlbg0KICAg -ICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICRBZG1pbiB8IEFkZC1N -ZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICdzb25kZXJ0ZXJtaW5lJyAtVmFs -dWUgJERhdGVuDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUpzb25G -aWxlICdhZG1pbi5qc29uJyAkQWRtaW4NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFn -ICdzb25kZXJ0ZXJtaW5lLmdlYWVuZGVydCcgQHsgYW56YWhsID0gQCgkRGF0ZW4pLkNvdW50IH0N -CiAgICAgICAgICAgICAgICAkVXNlcm5hbWUgPSAkZW52OlVTRVJOQU1FDQogICAgICAgICAgICAg -ICAgJFJvbGxlID0gR2V0LVVzZXJSb2xsZQ0KICAgICAgICAgICAgICAgIEFkZC1DaGFuZ2VMb2dF -bnRyeSAnc29uZGVydGVybWluZScgJG51bGwgJG51bGwgJG51bGwgJFVzZXJuYW1lICRSb2xsZSBA -eyBhbnphaGwgPSBAKCREYXRlbikuQ291bnQgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAk -UmVzIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfTsgY29udGludWUNCiAgICAgICAgICAgIH0N -Cg0KICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT0gU1RBTkRPUlRFID09PT09PT09 -PT09PT09PT09PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9zdGFu -ZG9ydGUnIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5v -dCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzICdLZWluZSBCZXJlY2h0aWd1bmcn -IDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRCb2R5ID0gUmVhZC1Cb2R5ICRSZXEN -CiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRCb2R5KSB7IFNlbmQtRXJyb3IgJFJlcyAn -QW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJERhdGVu -ID0gW29iamVjdFtdXUAoJEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uKSAgIyBBcnJheS1FcmhhbHQg -dW50ZXIgUFMgNS4xIGF1Y2ggYmVpIDEgRWxlbWVudA0KICAgICAgICAgICAgICAgICRBZG1pbiA9 -IFJlYWQtSnNvbkZpbGUgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgaWYgKCRBZG1pbi5Q -U09iamVjdC5Qcm9wZXJ0aWVzWydzdGFuZG9ydGUnXSkgew0KICAgICAgICAgICAgICAgICAgICAk -QWRtaW4uc3RhbmRvcnRlID0gJERhdGVuDQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAg -ICAgICAgICAgICAgICAgJEFkbWluIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVy -dHkgLU5hbWUgJ3N0YW5kb3J0ZScgLVZhbHVlICREYXRlbg0KICAgICAgICAgICAgICAgIH0NCiAg -ICAgICAgICAgICAgICBXcml0ZS1Kc29uRmlsZSAnYWRtaW4uanNvbicgJEFkbWluDQogICAgICAg -ICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnc3RhbmRvcnRlLmdlYWVuZGVydCcgQHt9DQogICAg -ICAgICAgICAgICAgJFVzZXJuYW1lID0gJGVudjpVU0VSTkFNRQ0KICAgICAgICAgICAgICAgICRS -b2xsZSA9IEdldC1Vc2VyUm9sbGUNCiAgICAgICAgICAgICAgICBBZGQtQ2hhbmdlTG9nRW50cnkg -J3N0YW5kb3J0ZScgJG51bGwgJG51bGwgJG51bGwgJFVzZXJuYW1lICRSb2xsZSBAe30NCiAgICAg -ICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH07IGNv -bnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09 -PT09IEVJTlNURUxMVU5HRU4gPT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICBpZiAo -JFBhdGggLWVxICcvYXBpL2FkbWluL2VpbnN0ZWxsdW5nZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BV -VCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1F -cnJvciAkUmVzICdLZWluZSBCZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAg -ICAgICAgICRCb2R5ID0gUmVhZC1Cb2R5ICRSZXENCiAgICAgICAgICAgICAgICBpZiAoJG51bGwg -LWVxICRCb2R5KSB7IFNlbmQtRXJyb3IgJFJlcyAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250 -aW51ZSB9DQogICAgICAgICAgICAgICAgJERhdGVuID0gJEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29u -DQogICAgICAgICAgICAgICAgJEFkbWluID0gUmVhZC1Kc29uRmlsZSAnYWRtaW4uanNvbicNCiAg -ICAgICAgICAgICAgICAjIFdoaXRlbGlzdCBhbmFsb2cgenUgc2VydmVyLnB5OjI3NjEgLSBIZWFk -ZXItS29uZmlnICsgYWxsZQ0KICAgICAgICAgICAgICAgICMgVG9wLUxldmVsLUJyYW5kaW5nL0Vp -bnN0ZWxsdW5nZW4tRmVsZGVyLg0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRLZXkgaW4gQCgn -amFocicsJ2luYWt0aXZpdGFldE1pbnV0ZW4nLCdpbmZvdGV4dCcsJ3N1cHBvcnRpbmZvJywnc2No -bGllc3NpbmZvJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGFudW5n -c05hbWUnLCdwbGFudW5nc0t1cnonLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgJ2VyaW5uZXJ1bmcnLCdjdXN0b21Mb2dvJywnY3VzdG9tTG9nb0hvZWhlJywNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2ZXJiaW5kbGljaGtlaXRzZmVuc3RlcicsJ2Fs -bGdlbWVpbmVIaWxmZScsJ2JlZGllbnVuZ3NIaW53ZWlzZScsJ3dvY2hlbnBsYW5Lb3BmJywNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZWFkZXJLb25maWcnLCdoZWFkZXJM -YWJlbHMnLCdjb3VudGVyS29uZmlnJywnbWFya2VyS29uZmlnJywNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICd2b3JnYWJlQWxzUGlsbGUnLCdtZWRpZW5LYXRlZ29yaWVuJykp -IHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCREYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzWyRL -ZXldKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJEFkbWluLlBTT2JqZWN0LlByb3Bl -cnRpZXNbJEtleV0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQWRtaW4uJEtleSA9 -ICREYXRlbi4kS2V5DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICRBZG1pbiB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVBy -b3BlcnR5IC1OYW1lICRLZXkgLVZhbHVlICREYXRlbi4kS2V5DQogICAgICAgICAgICAgICAgICAg -ICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgV3JpdGUtSnNvbkZpbGUgJ2FkbWluLmpzb24nICRBZG1pbg0KICAgICAgICAgICAg -ICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2VpbnN0ZWxsdW5nZW4uZ2VhZW5kZXJ0JyBAe30NCiAgICAg -ICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH07IGNv -bnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09 -PT09IFBMQU5VTkcgPT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICBpZiAoJFBhdGgg -LWVxICcvYXBpL3BsYW51bmcnIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAg -ICAgICAkUGxhbnVuZyA9IFJlYWQtSnNvbkZpbGUgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAg -ICAgICBpZiAoJG51bGwgLWVxICRQbGFudW5nKSB7IFNlbmQtRXJyb3IgJFJlcyAncGxhbnVuZy5q -c29uIG5pY2h0IGdlZnVuZGVuJyA0MDQgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgIyBJ -bnRlZ3JpdGFldHMtQ2hlY2sgTklDSFQgaGllciBpbmxpbmUgLS0gZGVyIEZyb250ZW5kLXN5bmMt -Y2xpZW50DQogICAgICAgICAgICAgICAgICAgICMgcG9sbHQgL2FwaS9pbnRlZ3JpdGFldC9zdGF0 -dXMgc2VwYXJhdC4gSW5saW5lLUNoZWNrIHZlcmRvcHBlbHQNCiAgICAgICAgICAgICAgICAgICAg -IyBiZWkgamVkZW0gUGFnZS1Mb2FkIGRhcyBSZWFkK0l0ZXJhdGUtVm9sdW1lbiwgd2FzIGF1ZiBT -TUItDQogICAgICAgICAgICAgICAgICAgICMgU2hhcmUgKFE6KSBtZXJrbGljaCBibG9ja2llcnQg -dW5kIGltIFdvcnN0LUNhc2UgZGVuDQogICAgICAgICAgICAgICAgICAgICMgT3V0cHV0U3RyZWFt -LVdyaXRlIHRpbWVvdXRldCAoSFRUUC5TWVMgLyBCcm93c2VyLUFib3J0KS4NCiAgICAgICAgICAg -ICAgICAgICAgU2VuZC1Kc29uICRSZXMgJFBsYW51bmcNCiAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09 -PT09PT09PT09PT09PT09PT0gSU5URUdSSVRBRVQgKFBoYXNlIEcpID09PT09PT09PT09PT09PT09 -PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9pbnRlZ3JpdGFldC9zdGF0dXMn -IC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICAkZXJnID0gJG51bGwN -CiAgICAgICAgICAgICAgICB0cnkgeyAkZXJnID0gSW52b2tlLUludGVncml0YWV0UHJ1ZWZ1bmcg -JGZhbHNlIH0gY2F0Y2ggeyAkZXJnID0gQHsgb2sgPSAkZmFsc2U7IGZlaGxlciA9ICIkXyI7IHZl -cmxldHp1bmdlbiA9IEAoKSB9IH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyAkZXJn -DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlm -ICgkUGF0aCAtZXEgJy9hcGkvaW50ZWdyaXRhZXQvbmV1LXNpZ25pZXJlbicgLWFuZCAkTWV0aG9k -IC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVz -ZXIpKSB7IFNlbmQtRXJyb3IgJFJlcyAnTnVyIFN1cGVyVXNlciBkYXJmIG5ldSBzaWduaWVyZW4n -IDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICMgVmVyaWZ5IGlzdCBSRUFELU9OTFkg -dW5kIGxhZXVmdCBWT1IgZGVtIExvY2ssIGRhbWl0IGRlciBMb2NrDQogICAgICAgICAgICAgICAg -IyBzbyBrdXJ6IHdpZSBtb2VnbGljaCBnZWhhbHRlbiB3aXJkLiBSZXN1bHRhdCBhbHMNCiAgICAg -ICAgICAgICAgICAjIHZlcmxldHp1bmdlblp1dm9yIGluIFJlc3BvbnNlIOKAlCBGcm9udGVuZCB6 -ZWlndCBkYXMgaW0gVG9hc3QNCiAgICAgICAgICAgICAgICAjIChzeW5jLWNsaWVudC5qczoyNTIg -IkludGVncml0YWV0IG5ldSBzaWduaWVydCAoTiBWZXJsZXR6dW5nZW4NCiAgICAgICAgICAgICAg -ICAjIGF1ZmdlbG9lc3QpIikuIE1pcnJvciB6dSBzZXJ2ZXIucHk6MjI2My0yMjg1Lg0KICAgICAg -ICAgICAgICAgICRQbGFudW5nUHJlID0gUmVhZC1Kc29uRmlsZSAncGxhbnVuZy5qc29uJw0KICAg -ICAgICAgICAgICAgICRWZXJsZXR6dW5nZW5adXZvciA9IEAoKQ0KICAgICAgICAgICAgICAgIGlm -ICgkbnVsbCAtbmUgJFBsYW51bmdQcmUpIHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsgJFZl -cmxldHp1bmdlblp1dm9yID0gVmVyaWZ5LVBsYW51bmdJbnRlZ3JpdGFldCAkUGxhbnVuZ1ByZSB9 -IGNhdGNoIHsgJFZlcmxldHp1bmdlblp1dm9yID0gQCgpIH0NCiAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgJFN0YXJ0VHMgPSBHZXQtRGF0ZQ0KICAgICAgICAgICAgICAgIHRyeSB7 -DQogICAgICAgICAgICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicg -ew0KICAgICAgICAgICAgICAgICAgICAgICAgJFAgPSBSZWFkLUpzb25GaWxlICdwbGFudW5nLmpz -b24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICRQKSB7IFdyaXRlLVBs -YW51bmdNaXRJbnRlZ3JpdGFldCAkUCB9DQogICAgICAgICAgICAgICAgICAgIH0gNjAwMDAgfCBP -dXQtTnVsbA0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBX -cml0ZS1TdGFydHVwTG9nICJGRUhMRVIgbmV1LXNpZ25pZXJlbjogJF8gKCQoJF8uU2NyaXB0U3Rh -Y2tUcmFjZSkpIg0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXMgIk5ldS1TaWdu -aWVyZW4gZmVobGdlc2NobGFnZW46ICRfIiA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgICREYXVlck1zID0gW2ludF0oKEdldC1EYXRlKSAtICRTdGFydFRz -KS5Ub3RhbE1pbGxpc2Vjb25kcw0KICAgICAgICAgICAgICAgICRzY3JpcHQ6SW50ZWdyaXR5VmVy -aWZ5Q2FjaGUgPSAkbnVsbA0KICAgICAgICAgICAgICAgICRWekNvdW50ID0gQCgkVmVybGV0enVu -Z2VuWnV2b3IpLkNvdW50DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnaW50ZWdy -aXRhZXQubmV1X3NpZ25pZXJ0JyBAeyByb2xsZSA9IChHZXQtVXNlclJvbGxlKTsgZGF1ZXJNcyA9 -ICREYXVlck1zOyB2ZXJsZXR6dW5nZW5adXZvciA9ICRWekNvdW50IH0NCiAgICAgICAgICAgICAg -ICBTZW5kLUpzb24gJFJlcyBAeyBvayA9ICR0cnVlOyBkYXVlck1zID0gJERhdWVyTXM7IHZlcmxl -dHp1bmdlblp1dm9yID0gJFZ6Q291bnQgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAg -ICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IFpFTEwtTE9D -SyAoUGhhc2UgQTEpID09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgIyBQT1NUIC9h -cGkvbG9jay96ZWxsZSAgeyBkYXR1bSwgcGVyc29uSWQgfSAtPiB7IG9rLCB0b2tlbiwgZXhwaXJl -c0F0IH0gb2RlciA0MjMgeyBzcGVycmVyLCBzZWl0LCByb2xsZSB9DQogICAgICAgICAgICBpZiAo -JFBhdGggLWVxICcvYXBpL2xvY2svemVsbGUnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQog -ICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0KICAgICAgICAgICAgICAgIGlm -ICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAkUmVzICdBbmZyYWdlIHp1IGdyb3NzJyA0 -MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkQSA9ICRCb2R5IHwgQ29udmVydEZyb20t -SnNvbg0KICAgICAgICAgICAgICAgICREYXR1bSA9IFtzdHJpbmddJEEuZGF0dW0NCiAgICAgICAg -ICAgICAgICAkUGVyc29uSWQgPSBbc3RyaW5nXSRBLnBlcnNvbklkDQogICAgICAgICAgICAgICAg -aWYgKC1ub3QgKFRlc3QtTG9ja1NhZmVEYXR1bSAkRGF0dW0pIC1vciAtbm90IChUZXN0LUxvY2tT -YWZlSWQgJFBlcnNvbklkKSkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXMg -J1VuZ3VlbHRpZ2UgZGF0dW0vcGVyc29uSWQnIDQwMDsgY29udGludWUNCiAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgJFVzZXJuYW1lID0gJGVudjpVU0VSTkFNRQ0KICAgICAgICAg -ICAgICAgICRSb2xsZSA9IEdldC1Vc2VyUm9sbGUNCiAgICAgICAgICAgICAgICAkUmVzdWx0ID0g -QWNxdWlyZS1DZWxsTG9jayAkRGF0dW0gJFBlcnNvbklkICRVc2VybmFtZSAkUm9sbGUgJGZhbHNl -DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJFJlc3VsdC5vaykgew0KICAgICAgICAgICAgICAg -ICAgICBTZW5kLUpzb24gJFJlcyBAew0KICAgICAgICAgICAgICAgICAgICAgICAgZmVobGVyICAg -PSAnZ2VzcGVycnQnDQogICAgICAgICAgICAgICAgICAgICAgICBtZWxkdW5nICA9ICJXaXJkIGJl -YXJiZWl0ZXQgdm9uICQoJFJlc3VsdC5leGlzdGluZy51c2VybmFtZSkiDQogICAgICAgICAgICAg -ICAgICAgICAgICBzcGVycmVyICA9ICRSZXN1bHQuZXhpc3RpbmcudXNlcm5hbWUNCiAgICAgICAg -ICAgICAgICAgICAgICAgIHJvbGxlICAgID0gJFJlc3VsdC5leGlzdGluZy5yb2xsZQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgc2VpdCAgICAgPSAkUmVzdWx0LmV4aXN0aW5nLmxvY2tlZEF0DQog -ICAgICAgICAgICAgICAgICAgICAgICBrYW5uRm9yY2UgPSAoVGVzdC1EYXJmVWViZXJzY2hyZWli -ZW4gJFJvbGxlKQ0KICAgICAgICAgICAgICAgICAgICB9IDQyMw0KICAgICAgICAgICAgICAgICAg -ICBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24g -JFJlcyBAew0KICAgICAgICAgICAgICAgICAgICBvayAgICAgICA9ICR0cnVlDQogICAgICAgICAg -ICAgICAgICAgIHRva2VuICAgID0gJFJlc3VsdC5sb2NrLnRva2VuDQogICAgICAgICAgICAgICAg -ICAgIGRhdHVtICAgID0gJERhdHVtDQogICAgICAgICAgICAgICAgICAgIHBlcnNvbklkID0gJFBl -cnNvbklkDQogICAgICAgICAgICAgICAgICAgIHJvbGxlICAgID0gJFJvbGxlDQogICAgICAgICAg -ICAgICAgICAgIGxvY2tlZEF0ID0gJFJlc3VsdC5sb2NrLmxvY2tlZEF0DQogICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAg -ICAgICMgUE9TVCAvYXBpL2xvY2svemVsbGUvZm9yY2UgIHsgZGF0dW0sIHBlcnNvbklkIH0gLT4g -dWViZXJzY2hyZWlidCBmcmVtZGVuIExvY2sNCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9h -cGkvbG9jay96ZWxsZS9mb3JjZScgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAg +cmFnICdyb3RhdGlvbi5zbG90LmdlYWVuZGVydCcgQHsgZGF0dW0gPSAkQS5kYXR1bTsgaWR4ID0g +JElkeDsgcm9sbGUgPSAkUm9sbGUgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7 +IHN0YXR1cyA9ICdnZXNwZWljaGVydCc7IGlkeCA9ICRJZHggfQ0KICAgICAgICAgICAgICAgIGNv +bnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgTnVyIFN1cGVyVXNlciBkYXJm +IGRpZSBMaXN0ZSBhZW5kZXJuIC0gc29uc3Qga29lbm50ZW4gRmFjaGF1ZnNpY2h0ZW4NCiAgICAg +ICAgICAgICMgc2ljaCBnZWdlbnNlaXRpZyBoaW56dWZ1ZWdlbiBvaG5lIFN1cGVyVXNlci1adXN0 +aW1tdW5nLg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9mYWNoYXVmc2lj +aHRlbicgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90 +IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzICdOdXIgU3VwZXJVc2VyIGR1 +ZXJmZW4gRmFjaGF1ZnNpY2h0ZW4gdmVyd2FsdGVuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAg ICAgICAgICAkQm9keSA9IFJlYWQtQm9keSAkUmVxDQogICAgICAgICAgICAgICAgaWYgKCRudWxs IC1lcSAkQm9keSkgeyBTZW5kLUVycm9yICRSZXMgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29u -dGludWUgfQ0KICAgICAgICAgICAgICAgICRBID0gJEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQog -ICAgICAgICAgICAgICAgJERhdHVtID0gW3N0cmluZ10kQS5kYXR1bQ0KICAgICAgICAgICAgICAg -ICRQZXJzb25JZCA9IFtzdHJpbmddJEEucGVyc29uSWQNCiAgICAgICAgICAgICAgICBpZiAoLW5v -dCAoVGVzdC1Mb2NrU2FmZURhdHVtICREYXR1bSkgLW9yIC1ub3QgKFRlc3QtTG9ja1NhZmVJZCAk -UGVyc29uSWQpKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAnVW5ndWVs -dGlnZSBkYXR1bS9wZXJzb25JZCcgNDAwOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAg +dGludWUgfQ0KICAgICAgICAgICAgICAgICREYXRlbiA9IFtvYmplY3RbXV1AKCRCb2R5IHwgQ29u +dmVydEZyb20tSnNvbikNCiAgICAgICAgICAgICAgICAkQWRtaW4gPSBSZWFkLUpzb25GaWxlICdh +ZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgIGlmICgkQWRtaW4uUFNPYmplY3QuUHJvcGVydGll +c1snZmFjaGF1ZnNpY2h0ZW4nXSkgew0KICAgICAgICAgICAgICAgICAgICAkQWRtaW4uZmFjaGF1 +ZnNpY2h0ZW4gPSAkRGF0ZW4NCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAg +ICAgICAgICAkQWRtaW4gfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFt +ZSAnZmFjaGF1ZnNpY2h0ZW4nIC1WYWx1ZSAkRGF0ZW4NCiAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgV3JpdGUtSnNvbkZpbGUgJ2FkbWluLmpzb24nICRBZG1pbg0KICAgICAgICAg +ICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2ZhY2hhdWZzaWNodGVuLmdlYWVuZGVydCcgQHsgYW56 +YWhsID0gQCgkRGF0ZW4pLkNvdW50IH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBA +eyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH07IGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAg +ICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IEZFSUVSVEFHRSAvIEZFUklFTiAvIFNP +TkRFUlRFUk1JTkUgPT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICBpZiAoJFBhdGgg +LWVxICcvYXBpL2FkbWluL2ZlaWVydGFnZScgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAg +ICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXMg +J0tlaW5lIEJlcmVjaHRpZ3VuZycgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJEJv +ZHkgPSBSZWFkLUJvZHkgJFJlcQ0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJEJvZHkp +IHsgU2VuZC1FcnJvciAkUmVzICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAg +ICAgICAgICAgICAgICAkRGF0ZW4gPSBbb2JqZWN0W11dQCgkQm9keSB8IENvbnZlcnRGcm9tLUpz +b24pICAjIEFycmF5LUVyaGFsdCB1bnRlciBQUyA1LjEgYXVjaCBiZWkgMSBFbGVtZW50DQogICAg +ICAgICAgICAgICAgJEFkbWluID0gUmVhZC1Kc29uRmlsZSAnYWRtaW4uanNvbicNCiAgICAgICAg +ICAgICAgICAkQWRtaW4uZmVpZXJ0YWdlID0gJERhdGVuDQogICAgICAgICAgICAgICAgV3JpdGUt +SnNvbkZpbGUgJ2FkbWluLmpzb24nICRBZG1pbg0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0Vp +bnRyYWcgJ2ZlaWVydGFnZS5nZWFlbmRlcnQnIEB7fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNv +biAkUmVzIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfTsgY29udGludWUNCiAgICAgICAgICAg +IH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvYWRtaW4vZmVyaWVuJyAtYW5kICRN +ZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRt +aW4pKSB7IFNlbmQtRXJyb3IgJFJlcyAnS2VpbmUgQmVyZWNodGlndW5nJyA0MDM7IGNvbnRpbnVl +IH0NCiAgICAgICAgICAgICAgICAkQm9keSA9IFJlYWQtQm9keSAkUmVxDQogICAgICAgICAgICAg +ICAgaWYgKCRudWxsIC1lcSAkQm9keSkgeyBTZW5kLUVycm9yICRSZXMgJ0FuZnJhZ2UgenUgZ3Jv +c3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICREYXRlbiA9IFtvYmplY3RbXV1A +KCRCb2R5IHwgQ29udmVydEZyb20tSnNvbikgICMgQXJyYXktRXJoYWx0IHVudGVyIFBTIDUuMSBh +dWNoIGJlaSAxIEVsZW1lbnQNCiAgICAgICAgICAgICAgICAkQWRtaW4gPSBSZWFkLUpzb25GaWxl +ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICRBZG1pbi5mZXJpZW4gPSAkRGF0ZW4NCiAg +ICAgICAgICAgICAgICBXcml0ZS1Kc29uRmlsZSAnYWRtaW4uanNvbicgJEFkbWluDQogICAgICAg +ICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnZmVyaWVuLmdlYWVuZGVydCcgQHt9DQogICAgICAg +ICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9OyBjb250 +aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT0g +QkVTUFJFQ0hVTkdTVk9STEFHRU4gKEIuNCkgPT09PT09PT09PT09PT09PT09PT09DQogICAgICAg +ICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL2Jlc3ByZWNodW5nc3ZvcmxhZ2VuJyAtYW5k +ICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0 +QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlcyAnS2VpbmUgQmVyZWNodGlndW5nJyA0MDM7IGNvbnRp +bnVlIH0NCiAgICAgICAgICAgICAgICAkQm9keSA9IFJlYWQtQm9keSAkUmVxDQogICAgICAgICAg +ICAgICAgaWYgKCRudWxsIC1lcSAkQm9keSkgeyBTZW5kLUVycm9yICRSZXMgJ0FuZnJhZ2UgenUg +Z3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICREYXRlbiA9IFtvYmplY3Rb +XV1AKCRCb2R5IHwgQ29udmVydEZyb20tSnNvbikNCiAgICAgICAgICAgICAgICAkQWRtaW4gPSBS +ZWFkLUpzb25GaWxlICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgIGlmICgkQWRtaW4uUFNP +YmplY3QuUHJvcGVydGllc1snYmVzcHJlY2h1bmdzVm9ybGFnZW4nXSkgew0KICAgICAgICAgICAg +ICAgICAgICAkQWRtaW4uYmVzcHJlY2h1bmdzVm9ybGFnZW4gPSAkRGF0ZW4NCiAgICAgICAgICAg +ICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAkQWRtaW4gfCBBZGQtTWVtYmVyIC1N +ZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAnYmVzcHJlY2h1bmdzVm9ybGFnZW4nIC1WYWx1 +ZSAkRGF0ZW4NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgV3JpdGUtSnNvbkZp +bGUgJ2FkbWluLmpzb24nICRBZG1pbg0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcg +J2Jlc3ByZWNodW5nc3ZvcmxhZ2VuLmdlYWVuZGVydCcgQHsgYW56YWhsID0gQCgkRGF0ZW4pLkNv +dW50IH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAeyBzdGF0dXMgPSAnZ2VzcGVp +Y2hlcnQnIH07IGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmICgkUGF0 +aCAtZXEgJy9hcGkvYWRtaW4vc29uZGVydGVybWluZScgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykg +ew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVycm9y +ICRSZXMgJ0tlaW5lIEJlcmVjaHRpZ3VuZycgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAg +ICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEg +JEJvZHkpIHsgU2VuZC1FcnJvciAkUmVzICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVl +IH0NCiAgICAgICAgICAgICAgICAkUm9oID0gW29iamVjdFtdXUAoJEJvZHkgfCBDb252ZXJ0RnJv +bS1Kc29uKSAgIyBBcnJheS1FcmhhbHQgdW50ZXIgUFMgNS4xIGF1Y2ggYmVpIDEgRWxlbWVudA0K +ICAgICAgICAgICAgICAgICMgV2hpdGVsaXN0IChBdWRpdC1JdGVyLUMpOiBudXIgMTEgZXJsYXVi +dGUgRmVsZGVyIHBybyBFaW50cmFnIHBlcnNpc3RpZXJlbg0KICAgICAgICAgICAgICAgICRFcmxh +dWJ0ID0gQCgnaWQnLCdkYXR1bScsJ2RhdHVtQmlzJywndGl0ZWwnLCd0ZXh0JywnaWNvbicsJ3R5 +cCcsJ3dhcm5Nb2R1cycsJ2thdGVnb3JpZScsJ2xvZ29zJywnbG9nb0RhcnN0ZWxsdW5nJykNCiAg +ICAgICAgICAgICAgICAkRGF0ZW4gPSBAKCkNCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkUm9o +MSBpbiAkUm9oKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJFJvaDEpIHsg +Y29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAkU2F1YmVyID0gW29yZGVyZWRdQHt9DQog +ICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRGZWxkIGluICRFcmxhdWJ0KSB7DQogICAgICAg +ICAgICAgICAgICAgICAgICBpZiAoJFJvaDEuUFNPYmplY3QuUHJvcGVydGllc1skRmVsZF0pIHsN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkU2F1YmVyWyRGZWxkXSA9ICRSb2gxLiRGZWxk +DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICAgICAgJERhdGVuICs9IFtwc2N1c3RvbW9iamVjdF0kU2F1YmVyDQogICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICREYXRlbiA9IFtvYmplY3RbXV0kRGF0ZW4NCiAg +ICAgICAgICAgICAgICAkQWRtaW4gPSBSZWFkLUpzb25GaWxlICdhZG1pbi5qc29uJw0KICAgICAg +ICAgICAgICAgIGlmICgkQWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1snc29uZGVydGVybWluZSdd +KSB7DQogICAgICAgICAgICAgICAgICAgICRBZG1pbi5zb25kZXJ0ZXJtaW5lID0gJERhdGVuDQog +ICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJEFkbWluIHwgQWRk +LU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ3NvbmRlcnRlcm1pbmUnIC1W +YWx1ZSAkRGF0ZW4NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgV3JpdGUtSnNv +bkZpbGUgJ2FkbWluLmpzb24nICRBZG1pbg0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRy +YWcgJ3NvbmRlcnRlcm1pbmUuZ2VhZW5kZXJ0JyBAeyBhbnphaGwgPSBAKCREYXRlbikuQ291bnQg +fQ0KICAgICAgICAgICAgICAgICRVc2VybmFtZSA9ICRlbnY6VVNFUk5BTUUNCiAgICAgICAgICAg +ICAgICAkUm9sbGUgPSBHZXQtVXNlclJvbGxlDQogICAgICAgICAgICAgICAgQWRkLUNoYW5nZUxv +Z0VudHJ5ICdzb25kZXJ0ZXJtaW5lJyAkbnVsbCAkbnVsbCAkbnVsbCAkVXNlcm5hbWUgJFJvbGxl +IEB7IGFuemFobCA9IEAoJERhdGVuKS5Db3VudCB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29u +ICRSZXMgQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9OyBjb250aW51ZQ0KICAgICAgICAgICAg +fQ0KDQogICAgICAgICAgICAjID09PT09PT09PT09PT09PT09PT09PSBTVEFORE9SVEUgPT09PT09 +PT09PT09PT09PT09PT09DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL3N0 +YW5kb3J0ZScgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgt +bm90IChUZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXMgJ0tlaW5lIEJlcmVjaHRpZ3Vu +ZycgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJl +cQ0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAkUmVz +ICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkRGF0 +ZW4gPSBbb2JqZWN0W11dQCgkQm9keSB8IENvbnZlcnRGcm9tLUpzb24pICAjIEFycmF5LUVyaGFs +dCB1bnRlciBQUyA1LjEgYXVjaCBiZWkgMSBFbGVtZW50DQogICAgICAgICAgICAgICAgJEFkbWlu +ID0gUmVhZC1Kc29uRmlsZSAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICBpZiAoJEFkbWlu +LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3N0YW5kb3J0ZSddKSB7DQogICAgICAgICAgICAgICAgICAg +ICRBZG1pbi5zdGFuZG9ydGUgPSAkRGF0ZW4NCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAg +ICAgICAgICAgICAgICAgICAkQWRtaW4gfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9w +ZXJ0eSAtTmFtZSAnc3RhbmRvcnRlJyAtVmFsdWUgJERhdGVuDQogICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgIFdyaXRlLUpzb25GaWxlICdhZG1pbi5qc29uJyAkQWRtaW4NCiAgICAg +ICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdzdGFuZG9ydGUuZ2VhZW5kZXJ0JyBAe30NCiAg ICAgICAgICAgICAgICAkVXNlcm5hbWUgPSAkZW52OlVTRVJOQU1FDQogICAgICAgICAgICAgICAg -JFJvbGxlID0gR2V0LVVzZXJSb2xsZQ0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURh -cmZVZWJlcnNjaHJlaWJlbiAkUm9sbGUpKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJy -b3IgJFJlcyAnRm9yY2UtTG9jayBudXIgZnVlciBGYWNoYXVmc2ljaHQvU3VwZXJVc2VyJyA0MDM7 -IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICMgT3JpZ2luYWwt -T3duZXIgdm9yIEZvcmNlIGxlc2VuIC0tIGZ1ZXIgQXVkaXQtVHJhaWwgaW0gTG9nYnVjaC4NCiAg -ICAgICAgICAgICAgICAkRXhpc3RpbmdMb2NrRnVlckxvZyA9IFJlYWQtQ2VsbExvY2sgJERhdHVt -ICRQZXJzb25JZA0KICAgICAgICAgICAgICAgICRPcmlnaW5hbE93bmVyID0gaWYgKCRudWxsIC1u -ZSAkRXhpc3RpbmdMb2NrRnVlckxvZykgeyAkRXhpc3RpbmdMb2NrRnVlckxvZy51c2VybmFtZSB9 -IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAgICAgJFJlc3VsdCA9IEFjcXVpcmUtQ2VsbExv -Y2sgJERhdHVtICRQZXJzb25JZCAkVXNlcm5hbWUgJFJvbGxlICR0cnVlDQogICAgICAgICAgICAg -ICAgV3JpdGUtTG9nRWludHJhZyAnbG9jay5mb3JjZScgQHsNCiAgICAgICAgICAgICAgICAgICAg -ZGF0dW0gICAgICAgICA9ICREYXR1bQ0KICAgICAgICAgICAgICAgICAgICBwZXJzb25JZCAgICAg -ID0gJFBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgIHJvbGxlICAgICAgICAgPSAkUm9sbGUN -CiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxPd25lciA9ICRPcmlnaW5hbE93bmVyDQogICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7DQogICAgICAg -ICAgICAgICAgICAgIG9rICAgICAgID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgdG9rZW4g -ICAgPSAkUmVzdWx0LmxvY2sudG9rZW4NCiAgICAgICAgICAgICAgICAgICAgZGF0dW0gICAgPSAk -RGF0dW0NCiAgICAgICAgICAgICAgICAgICAgcGVyc29uSWQgPSAkUGVyc29uSWQNCiAgICAgICAg -ICAgICAgICAgICAgcm9sbGUgICAgPSAkUm9sbGUNCiAgICAgICAgICAgICAgICAgICAgbG9ja2Vk -QXQgPSAkUmVzdWx0LmxvY2subG9ja2VkQXQNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBQT1NUIC9hcGkv -bG9jay96ZWxsZS9oZWFydGJlYXQgIHsgdG9rZW4gfSAtPiBha3R1YWxpc2llcnQgbGFzdEJlYXQN -CiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvbG9jay96ZWxsZS9oZWFydGJlYXQnIC1h -bmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJv -ZHkgJFJlcQ0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1FcnJv -ciAkUmVzICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAg -ICAkQSA9ICRCb2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRUb2tlbiA9 -IGlmICgkQS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0b2tlbiddKSB7IFtzdHJpbmddJEEudG9rZW4g -fSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgIGlmIChbc3RyaW5nXTo6SXNOdWxsT3JXaGl0 -ZVNwYWNlKCRUb2tlbikpIHsgU2VuZC1FcnJvciAkUmVzICdUb2tlbiBmZWhsdCcgNDAwOyBjb250 -aW51ZSB9DQogICAgICAgICAgICAgICAgJFJlc3VsdCA9IFJlZnJlc2gtQ2VsbExvY2sgJFRva2Vu -DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJFJlc3VsdC5vaykgew0KICAgICAgICAgICAgICAg -ICAgICBTZW5kLUpzb24gJFJlcyBAeyBmZWhsZXIgPSAndW5iZWthbm50ZXJfbG9jayc7IG1lbGR1 -bmcgPSAnTG9jayBleGlzdGllcnQgbmljaHQgKG1laHIpLicgfSA0MDQNCiAgICAgICAgICAgICAg -ICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1K -c29uICRSZXMgQHsgb2sgPSAkdHJ1ZTsgbGFzdEJlYXQgPSAkUmVzdWx0LmxvY2subGFzdEJlYXQg +JFJvbGxlID0gR2V0LVVzZXJSb2xsZQ0KICAgICAgICAgICAgICAgIEFkZC1DaGFuZ2VMb2dFbnRy +eSAnc3RhbmRvcnRlJyAkbnVsbCAkbnVsbCAkbnVsbCAkVXNlcm5hbWUgJFJvbGxlIEB7fQ0KICAg +ICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfTsg +Y29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09 +PT09PT0gRUlOU1RFTExVTkdFTiA9PT09PT09PT09PT09PT09PT09PT0NCiAgICAgICAgICAgIGlm +ICgkUGF0aCAtZXEgJy9hcGkvYWRtaW4vZWluc3RlbGx1bmdlbicgLWFuZCAkTWV0aG9kIC1lcSAn +UFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFkbWluKSkgeyBTZW5k +LUVycm9yICRSZXMgJ0tlaW5lIEJlcmVjaHRpZ3VuZycgNDAzOyBjb250aW51ZSB9DQogICAgICAg +ICAgICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0KICAgICAgICAgICAgICAgIGlmICgkbnVs +bCAtZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAkUmVzICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNv +bnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkRGF0ZW4gPSAkQm9keSB8IENvbnZlcnRGcm9tLUpz +b24NCiAgICAgICAgICAgICAgICAkQWRtaW4gPSBSZWFkLUpzb25GaWxlICdhZG1pbi5qc29uJw0K +ICAgICAgICAgICAgICAgICMgV2hpdGVsaXN0IGFuYWxvZyB6dSBzZXJ2ZXIucHk6Mjc2MSAtIEhl +YWRlci1Lb25maWcgKyBhbGxlDQogICAgICAgICAgICAgICAgIyBUb3AtTGV2ZWwtQnJhbmRpbmcv +RWluc3RlbGx1bmdlbi1GZWxkZXIuDQogICAgICAgICAgICAgICAgZm9yZWFjaCAoJEtleSBpbiBA +KCdqYWhyJywnaW5ha3Rpdml0YWV0TWludXRlbicsJ2luZm90ZXh0Jywnc3VwcG9ydGluZm8nLCdz +Y2hsaWVzc2luZm8nLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYW51 +bmdzTmFtZScsJ3BsYW51bmdzS3VyeicsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAnZXJpbm5lcnVuZycsJ2N1c3RvbUxvZ28nLCdjdXN0b21Mb2dvSG9laGUnLA0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZlcmJpbmRsaWNoa2VpdHNmZW5zdGVyJywn +YWxsZ2VtZWluZUhpbGZlJywnYmVkaWVudW5nc0hpbndlaXNlJywnd29jaGVucGxhbktvcGYnLA0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hlYWRlcktvbmZpZycsJ2hlYWRl +ckxhYmVscycsJ2NvdW50ZXJLb25maWcnLCdtYXJrZXJLb25maWcnLA0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgJ3ZvcmdhYmVBbHNQaWxsZScsJ21lZGllbkthdGVnb3JpZW4n +KSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoJERhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXNb +JEtleV0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkQWRtaW4uUFNPYmplY3QuUHJv +cGVydGllc1skS2V5XSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRBZG1pbi4kS2V5 +ID0gJERhdGVuLiRLZXkNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgJEFkbWluIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3Rl +UHJvcGVydHkgLU5hbWUgJEtleSAtVmFsdWUgJERhdGVuLiRLZXkNCiAgICAgICAgICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICBXcml0ZS1Kc29uRmlsZSAnYWRtaW4uanNvbicgJEFkbWluDQogICAgICAgICAg +ICAgICAgV3JpdGUtTG9nRWludHJhZyAnZWluc3RlbGx1bmdlbi5nZWFlbmRlcnQnIEB7fQ0KICAg +ICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfTsg +Y29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09 +PT09PT0gUExBTlVORyA9PT09PT09PT09PT09PT09PT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0 +aCAtZXEgJy9hcGkvcGxhbnVuZycgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAg +ICAgICAgICRQbGFudW5nID0gUmVhZC1Kc29uRmlsZSAncGxhbnVuZy5qc29uJw0KICAgICAgICAg +ICAgICAgIGlmICgkbnVsbCAtZXEgJFBsYW51bmcpIHsgU2VuZC1FcnJvciAkUmVzICdwbGFudW5n +Lmpzb24gbmljaHQgZ2VmdW5kZW4nIDQwNCB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAj +IEludGVncml0YWV0cy1DaGVjayBOSUNIVCBoaWVyIGlubGluZSAtLSBkZXIgRnJvbnRlbmQtc3lu +Yy1jbGllbnQNCiAgICAgICAgICAgICAgICAgICAgIyBwb2xsdCAvYXBpL2ludGVncml0YWV0L3N0 +YXR1cyBzZXBhcmF0LiBJbmxpbmUtQ2hlY2sgdmVyZG9wcGVsdA0KICAgICAgICAgICAgICAgICAg +ICAjIGJlaSBqZWRlbSBQYWdlLUxvYWQgZGFzIFJlYWQrSXRlcmF0ZS1Wb2x1bWVuLCB3YXMgYXVm +IFNNQi0NCiAgICAgICAgICAgICAgICAgICAgIyBTaGFyZSAoUTopIG1lcmtsaWNoIGJsb2NraWVy +dCB1bmQgaW0gV29yc3QtQ2FzZSBkZW4NCiAgICAgICAgICAgICAgICAgICAgIyBPdXRwdXRTdHJl +YW0tV3JpdGUgdGltZW91dGV0IChIVFRQLlNZUyAvIEJyb3dzZXItQWJvcnQpLg0KICAgICAgICAg +ICAgICAgICAgICBTZW5kLUpzb24gJFJlcyAkUGxhbnVuZw0KICAgICAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09 +PT09PT09PT09PT09PT09PT09PSBJTlRFR1JJVEFFVCAoUGhhc2UgRykgPT09PT09PT09PT09PT09 +PT09PT09DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2ludGVncml0YWV0L3N0YXR1 +cycgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgICRlcmcgPSAkbnVs +bA0KICAgICAgICAgICAgICAgIHRyeSB7ICRlcmcgPSBJbnZva2UtSW50ZWdyaXRhZXRQcnVlZnVu +ZyAkZmFsc2UgfSBjYXRjaCB7ICRlcmcgPSBAeyBvayA9ICRmYWxzZTsgZmVobGVyID0gIiRfIjsg +dmVybGV0enVuZ2VuID0gQCgpIH0gfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzICRl +cmcNCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +aWYgKCRQYXRoIC1lcSAnL2FwaS9pbnRlZ3JpdGFldC9uZXUtc2lnbmllcmVuJyAtYW5kICRNZXRo +b2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVy +VXNlcikpIHsgU2VuZC1FcnJvciAkUmVzICdOdXIgU3VwZXJVc2VyIGRhcmYgbmV1IHNpZ25pZXJl +bicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgIyBWZXJpZnkgaXN0IFJFQUQtT05M +WSB1bmQgbGFldWZ0IFZPUiBkZW0gTG9jaywgZGFtaXQgZGVyIExvY2sNCiAgICAgICAgICAgICAg +ICAjIHNvIGt1cnogd2llIG1vZWdsaWNoIGdlaGFsdGVuIHdpcmQuIFJlc3VsdGF0IGFscw0KICAg +ICAgICAgICAgICAgICMgdmVybGV0enVuZ2VuWnV2b3IgaW4gUmVzcG9uc2Ug4oCUIEZyb250ZW5k +IHplaWd0IGRhcyBpbSBUb2FzdA0KICAgICAgICAgICAgICAgICMgKHN5bmMtY2xpZW50LmpzOjI1 +MiAiSW50ZWdyaXRhZXQgbmV1IHNpZ25pZXJ0IChOIFZlcmxldHp1bmdlbg0KICAgICAgICAgICAg +ICAgICMgYXVmZ2Vsb2VzdCkiKS4gTWlycm9yIHp1IHNlcnZlci5weToyMjYzLTIyODUuDQogICAg +ICAgICAgICAgICAgJFBsYW51bmdQcmUgPSBSZWFkLUpzb25GaWxlICdwbGFudW5nLmpzb24nDQog +ICAgICAgICAgICAgICAgJFZlcmxldHp1bmdlblp1dm9yID0gQCgpDQogICAgICAgICAgICAgICAg +aWYgKCRudWxsIC1uZSAkUGxhbnVuZ1ByZSkgew0KICAgICAgICAgICAgICAgICAgICB0cnkgeyAk +VmVybGV0enVuZ2VuWnV2b3IgPSBWZXJpZnktUGxhbnVuZ0ludGVncml0YWV0ICRQbGFudW5nUHJl +IH0gY2F0Y2ggeyAkVmVybGV0enVuZ2VuWnV2b3IgPSBAKCkgfQ0KICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICAkU3RhcnRUcyA9IEdldC1EYXRlDQogICAgICAgICAgICAgICAgdHJ5 +IHsNCiAgICAgICAgICAgICAgICAgICAgSW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29u +JyB7DQogICAgICAgICAgICAgICAgICAgICAgICAkUCA9IFJlYWQtSnNvbkZpbGUgJ3BsYW51bmcu +anNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJFApIHsgV3JpdGUt +UGxhbnVuZ01pdEludGVncml0YWV0ICRQIH0NCiAgICAgICAgICAgICAgICAgICAgfSA2MDAwMCB8 +IE91dC1OdWxsDQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAg +IFdyaXRlLVN0YXJ0dXBMb2cgIkZFSExFUiBuZXUtc2lnbmllcmVuOiAkXyAoJCgkXy5TY3JpcHRT +dGFja1RyYWNlKSkiDQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAiTmV1LVNp +Z25pZXJlbiBmZWhsZ2VzY2hsYWdlbjogJF8iIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgJERhdWVyTXMgPSBbaW50XSgoR2V0LURhdGUpIC0gJFN0YXJ0 +VHMpLlRvdGFsTWlsbGlzZWNvbmRzDQogICAgICAgICAgICAgICAgJHNjcmlwdDpJbnRlZ3JpdHlW +ZXJpZnlDYWNoZSA9ICRudWxsDQogICAgICAgICAgICAgICAgJFZ6Q291bnQgPSBAKCRWZXJsZXR6 +dW5nZW5adXZvcikuQ291bnQNCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdpbnRl +Z3JpdGFldC5uZXVfc2lnbmllcnQnIEB7IHJvbGxlID0gKEdldC1Vc2VyUm9sbGUpOyBkYXVlck1z +ID0gJERhdWVyTXM7IHZlcmxldHp1bmdlblp1dm9yID0gJFZ6Q291bnQgfQ0KICAgICAgICAgICAg +ICAgIFNlbmQtSnNvbiAkUmVzIEB7IG9rID0gJHRydWU7IGRhdWVyTXMgPSAkRGF1ZXJNczsgdmVy +bGV0enVuZ2VuWnV2b3IgPSAkVnpDb3VudCB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAg +ICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT0gWkVMTC1M +T0NLIChQaGFzZSBBMSkgPT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICAjIFBPU1Qg +L2FwaS9sb2NrL3plbGxlICB7IGRhdHVtLCBwZXJzb25JZCB9IC0+IHsgb2ssIHRva2VuLCBleHBp +cmVzQXQgfSBvZGVyIDQyMyB7IHNwZXJyZXIsIHNlaXQsIHJvbGxlIH0NCiAgICAgICAgICAgIGlm +ICgkUGF0aCAtZXEgJy9hcGkvbG9jay96ZWxsZScgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsN +CiAgICAgICAgICAgICAgICAkQm9keSA9IFJlYWQtQm9keSAkUmVxDQogICAgICAgICAgICAgICAg +aWYgKCRudWxsIC1lcSAkQm9keSkgeyBTZW5kLUVycm9yICRSZXMgJ0FuZnJhZ2UgenUgZ3Jvc3Mn +IDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRBID0gJEJvZHkgfCBDb252ZXJ0RnJv +bS1Kc29uDQogICAgICAgICAgICAgICAgJERhdHVtID0gW3N0cmluZ10kQS5kYXR1bQ0KICAgICAg +ICAgICAgICAgICRQZXJzb25JZCA9IFtzdHJpbmddJEEucGVyc29uSWQNCiAgICAgICAgICAgICAg +ICBpZiAoLW5vdCAoVGVzdC1Mb2NrU2FmZURhdHVtICREYXR1bSkgLW9yIC1ub3QgKFRlc3QtTG9j +a1NhZmVJZCAkUGVyc29uSWQpKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJl +cyAnVW5ndWVsdGlnZSBkYXR1bS9wZXJzb25JZCcgNDAwOyBjb250aW51ZQ0KICAgICAgICAgICAg +ICAgIH0NCiAgICAgICAgICAgICAgICAkVXNlcm5hbWUgPSAkZW52OlVTRVJOQU1FDQogICAgICAg +ICAgICAgICAgJFJvbGxlID0gR2V0LVVzZXJSb2xsZQ0KICAgICAgICAgICAgICAgICRSZXN1bHQg +PSBBY3F1aXJlLUNlbGxMb2NrICREYXR1bSAkUGVyc29uSWQgJFVzZXJuYW1lICRSb2xsZSAkZmFs +c2UNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkUmVzdWx0Lm9rKSB7DQogICAgICAgICAgICAg +ICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7DQogICAgICAgICAgICAgICAgICAgICAgICBmZWhsZXIg +ICA9ICdnZXNwZXJydCcNCiAgICAgICAgICAgICAgICAgICAgICAgIG1lbGR1bmcgID0gIldpcmQg +YmVhcmJlaXRldCB2b24gJCgkUmVzdWx0LmV4aXN0aW5nLnVzZXJuYW1lKSINCiAgICAgICAgICAg +ICAgICAgICAgICAgIHNwZXJyZXIgID0gJFJlc3VsdC5leGlzdGluZy51c2VybmFtZQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgcm9sbGUgICAgPSAkUmVzdWx0LmV4aXN0aW5nLnJvbGxlDQogICAg +ICAgICAgICAgICAgICAgICAgICBzZWl0ICAgICA9ICRSZXN1bHQuZXhpc3RpbmcubG9ja2VkQXQN +CiAgICAgICAgICAgICAgICAgICAgICAgIGthbm5Gb3JjZSA9IChUZXN0LURhcmZVZWJlcnNjaHJl +aWJlbiAkUm9sbGUpDQogICAgICAgICAgICAgICAgICAgIH0gNDIzDQogICAgICAgICAgICAgICAg +ICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNv +biAkUmVzIEB7DQogICAgICAgICAgICAgICAgICAgIG9rICAgICAgID0gJHRydWUNCiAgICAgICAg +ICAgICAgICAgICAgdG9rZW4gICAgPSAkUmVzdWx0LmxvY2sudG9rZW4NCiAgICAgICAgICAgICAg +ICAgICAgZGF0dW0gICAgPSAkRGF0dW0NCiAgICAgICAgICAgICAgICAgICAgcGVyc29uSWQgPSAk +UGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAgcm9sbGUgICAgPSAkUm9sbGUNCiAgICAgICAg +ICAgICAgICAgICAgbG9ja2VkQXQgPSAkUmVzdWx0LmxvY2subG9ja2VkQXQNCiAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAg +ICAgICAgIyBQT1NUIC9hcGkvbG9jay96ZWxsZS9mb3JjZSAgeyBkYXR1bSwgcGVyc29uSWQgfSAt +PiB1ZWJlcnNjaHJlaWJ0IGZyZW1kZW4gTG9jaw0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAn +L2FwaS9sb2NrL3plbGxlL2ZvcmNlJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAg +ICAgICAgICAgICRCb2R5ID0gUmVhZC1Cb2R5ICRSZXENCiAgICAgICAgICAgICAgICBpZiAoJG51 +bGwgLWVxICRCb2R5KSB7IFNlbmQtRXJyb3IgJFJlcyAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBj +b250aW51ZSB9DQogICAgICAgICAgICAgICAgJEEgPSAkQm9keSB8IENvbnZlcnRGcm9tLUpzb24N +CiAgICAgICAgICAgICAgICAkRGF0dW0gPSBbc3RyaW5nXSRBLmRhdHVtDQogICAgICAgICAgICAg +ICAgJFBlcnNvbklkID0gW3N0cmluZ10kQS5wZXJzb25JZA0KICAgICAgICAgICAgICAgIGlmICgt +bm90IChUZXN0LUxvY2tTYWZlRGF0dW0gJERhdHVtKSAtb3IgLW5vdCAoVGVzdC1Mb2NrU2FmZUlk +ICRQZXJzb25JZCkpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzICdVbmd1 +ZWx0aWdlIGRhdHVtL3BlcnNvbklkJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgICRVc2VybmFtZSA9ICRlbnY6VVNFUk5BTUUNCiAgICAgICAgICAgICAg +ICAkUm9sbGUgPSBHZXQtVXNlclJvbGxlDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3Qt +RGFyZlVlYmVyc2NocmVpYmVuICRSb2xsZSkpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1F +cnJvciAkUmVzICdGb3JjZS1Mb2NrIG51ciBmdWVyIEZhY2hhdWZzaWNodC9TdXBlclVzZXInIDQw +MzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIyBPcmlnaW5h +bC1Pd25lciB2b3IgRm9yY2UgbGVzZW4gLS0gZnVlciBBdWRpdC1UcmFpbCBpbSBMb2didWNoLg0K +ICAgICAgICAgICAgICAgICRFeGlzdGluZ0xvY2tGdWVyTG9nID0gUmVhZC1DZWxsTG9jayAkRGF0 +dW0gJFBlcnNvbklkDQogICAgICAgICAgICAgICAgJE9yaWdpbmFsT3duZXIgPSBpZiAoJG51bGwg +LW5lICRFeGlzdGluZ0xvY2tGdWVyTG9nKSB7ICRFeGlzdGluZ0xvY2tGdWVyTG9nLnVzZXJuYW1l +IH0gZWxzZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAkUmVzdWx0ID0gQWNxdWlyZS1DZWxs +TG9jayAkRGF0dW0gJFBlcnNvbklkICRVc2VybmFtZSAkUm9sbGUgJHRydWUNCiAgICAgICAgICAg +ICAgICBXcml0ZS1Mb2dFaW50cmFnICdsb2NrLmZvcmNlJyBAew0KICAgICAgICAgICAgICAgICAg +ICBkYXR1bSAgICAgICAgID0gJERhdHVtDQogICAgICAgICAgICAgICAgICAgIHBlcnNvbklkICAg +ICAgPSAkUGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAgcm9sbGUgICAgICAgICA9ICRSb2xs +ZQ0KICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbE93bmVyID0gJE9yaWdpbmFsT3duZXINCiAg +ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsNCiAgICAg +ICAgICAgICAgICAgICAgb2sgICAgICAgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICB0b2tl +biAgICA9ICRSZXN1bHQubG9jay50b2tlbg0KICAgICAgICAgICAgICAgICAgICBkYXR1bSAgICA9 +ICREYXR1bQ0KICAgICAgICAgICAgICAgICAgICBwZXJzb25JZCA9ICRQZXJzb25JZA0KICAgICAg +ICAgICAgICAgICAgICByb2xsZSAgICA9ICRSb2xsZQ0KICAgICAgICAgICAgICAgICAgICBsb2Nr +ZWRBdCA9ICRSZXN1bHQubG9jay5sb2NrZWRBdA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIFBPU1QgL2Fw +aS9sb2NrL3plbGxlL2hlYXJ0YmVhdCAgeyB0b2tlbiB9IC0+IGFrdHVhbGlzaWVydCBsYXN0QmVh +dA0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9sb2NrL3plbGxlL2hlYXJ0YmVhdCcg +LWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICAkQm9keSA9IFJlYWQt +Qm9keSAkUmVxDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkQm9keSkgeyBTZW5kLUVy +cm9yICRSZXMgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAg +ICAgICRBID0gJEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJFRva2Vu +ID0gaWYgKCRBLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Rva2VuJ10pIHsgW3N0cmluZ10kQS50b2tl +biB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgaWYgKFtzdHJpbmddOjpJc051bGxPcldo +aXRlU3BhY2UoJFRva2VuKSkgeyBTZW5kLUVycm9yICRSZXMgJ1Rva2VuIGZlaGx0JyA0MDA7IGNv +bnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkUmVzdWx0ID0gUmVmcmVzaC1DZWxsTG9jayAkVG9r +ZW4NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkUmVzdWx0Lm9rKSB7DQogICAgICAgICAgICAg +ICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7IGZlaGxlciA9ICd1bmJla2FubnRlcl9sb2NrJzsgbWVs +ZHVuZyA9ICdMb2NrIGV4aXN0aWVydCBuaWNodCAobWVocikuJyB9IDQwNA0KICAgICAgICAgICAg +ICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5k +LUpzb24gJFJlcyBAeyBvayA9ICR0cnVlOyBsYXN0QmVhdCA9ICRSZXN1bHQubG9jay5sYXN0QmVh +dCB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAg +ICAgIyBERUxFVEUgL2FwaS9sb2NrL3plbGxlICB7IHRva2VuIH0gLT4gTG9jayBmcmVpZ2ViZW4N +CiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvbG9jay96ZWxsZScgLWFuZCAkTWV0aG9k +IC1lcSAnREVMRVRFJykgew0KICAgICAgICAgICAgICAgICMgREVMRVRFLUJvZHkgbGVzZW4gKEh0 +dHBMaXN0ZW5lciB1bnRlcnN0dWV0enQgZGFzKQ0KICAgICAgICAgICAgICAgICRCb2R5ID0gUmVh +ZC1Cb2R5ICRSZXENCiAgICAgICAgICAgICAgICAkVG9rZW4gPSAkbnVsbA0KICAgICAgICAgICAg +ICAgIGlmICgkQm9keSkgew0KICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAg +ICAgICAgICAgICAgJEEgPSAkQm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAg +ICAgICAgICAgIGlmICgkQS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0b2tlbiddKSB7ICRUb2tlbiA9 +IFtzdHJpbmddJEEudG9rZW4gfQ0KICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHt9DQogICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICMgQXVjaCBRdWVyeS1TdHJpbmcgdW50ZXJz +dHVldHplbiwgZnVlciBzZW5kQmVhY29uLUZhZWxsZQ0KICAgICAgICAgICAgICAgIGlmIChbc3Ry +aW5nXTo6SXNOdWxsT3JXaGl0ZVNwYWNlKCRUb2tlbikgLWFuZCAkUmVxLlVybC5RdWVyeSkgew0K +ICAgICAgICAgICAgICAgICAgICAkUSA9IFtTeXN0ZW0uV2ViLkh0dHBVdGlsaXR5XTo6UGFyc2VR +dWVyeVN0cmluZygkUmVxLlVybC5RdWVyeSkNCiAgICAgICAgICAgICAgICAgICAgJFRva2VuID0g +W3N0cmluZ10kUVsndG9rZW4nXQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBp +ZiAoW3N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFjZSgkVG9rZW4pKSB7IFNlbmQtRXJyb3IgJFJl +cyAnVG9rZW4gZmVobHQnIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRSZXN1bHQg +PSBSZWxlYXNlLUNlbGxMb2NrICRUb2tlbg0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVz +IEB7IG9rID0gJFJlc3VsdC5vayB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAg +ICAgIH0NCg0KICAgICAgICAgICAgIyBHRVQgL2FwaS9sb2NrL3plbGxlbiAtPiBMaXN0ZSBhbGxl +ciBha3RpdmVuIExvY2tzIChmdWVyIExpdmUtSW5kaWNhdG9yLVJlbmRlcikNCiAgICAgICAgICAg +IGlmICgkUGF0aCAtZXEgJy9hcGkvbG9jay96ZWxsZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcp +IHsNCiAgICAgICAgICAgICAgICAkTG9ja3MgPSBHZXQtQWxsQWN0aXZlQ2VsbExvY2tzDQogICAg +ICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsgbG9ja3MgPSAkTG9ja3MgfQ0KICAgICAgICAg +ICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgR0VUIC9hcGkv +cGxhbnVuZy9jaGFuZ2VzP3NlaXQ9PGlzby10cz4gLT4gRGVsdGEtTGlzdGUgZnVlciBMaXZlLVN5 +bmMgKFBoYXNlIEE0KQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL2No +YW5nZXMnIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICAkUSA9IFtT +eXN0ZW0uV2ViLkh0dHBVdGlsaXR5XTo6UGFyc2VRdWVyeVN0cmluZygkUmVxLlVybC5RdWVyeSkN +CiAgICAgICAgICAgICAgICAkU2VpdCA9IFtzdHJpbmddJFFbJ3NlaXQnXQ0KICAgICAgICAgICAg +ICAgICRDaGFuZ2VzID0gR2V0LUNoYW5nZXNTaW5jZSAkU2VpdA0KICAgICAgICAgICAgICAgIFNl +bmQtSnNvbiAkUmVzIEB7DQogICAgICAgICAgICAgICAgICAgIHNlcnZlclRzID0gKEdldC1EYXRl +KS5Ub1VuaXZlcnNhbFRpbWUoKS5Ub1N0cmluZygnbycpDQogICAgICAgICAgICAgICAgICAgIGNo +YW5nZXMgID0gJENoYW5nZXMNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY29u +dGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBaZWxsZSBhZW5kZXJuDQogICAg +ICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvemVsbGUnIC1hbmQgJE1ldGhvZCAt +ZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0KICAg +ICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAkUmVzICdBbmZy +YWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkQSA9ICRCb2R5 +IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICREYXR1bSA9IFtzdHJpbmddJEEu +ZGF0dW0NCiAgICAgICAgICAgICAgICAkUGVyc29uSWQgPSBbc3RyaW5nXSRBLnBlcnNvbklkDQog +ICAgICAgICAgICAgICAgJFdlcnQgPSBpZiAoJEEud2VydCkgeyBbc3RyaW5nXSRBLndlcnQgfSBl +bHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICRIYXRQZmxpY2h0ID0gJEEuUFNPYmplY3QuUHJv +cGVydGllc1sncGZsaWNodCddDQogICAgICAgICAgICAgICAgJFBmbGljaHROZXUgPSBpZiAoJEhh +dFBmbGljaHQpIHsgW2Jvb2xdJEEucGZsaWNodCB9IGVsc2UgeyAkZmFsc2UgfQ0KICAgICAgICAg +ICAgICAgICRIYXRFcndhcnRldCA9ICRBLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2Vyd2FydGV0ZXJB +bHRlcldlcnQnXQ0KICAgICAgICAgICAgICAgICRFcndhcnRldCA9IGlmICgkSGF0RXJ3YXJ0ZXQp +IHsgW3N0cmluZ10kQS5lcndhcnRldGVyQWx0ZXJXZXJ0IH0gZWxzZSB7ICRudWxsIH0NCiAgICAg +ICAgICAgICAgICAkTG9ja1Rva2VuID0gaWYgKCRBLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2xvY2tU +b2tlbiddKSB7IFtzdHJpbmddJEEubG9ja1Rva2VuIH0gZWxzZSB7ICRudWxsIH0NCiAgICAgICAg +ICAgICAgICAkVXNlcm5hbWUgPSAkZW52OlVTRVJOQU1FDQogICAgICAgICAgICAgICAgJFJvbGxl +ID0gR2V0LVVzZXJSb2xsZQ0KICAgICAgICAgICAgICAgICREYXJmVWViZXJzY2hyZWliZW4gPSBU +ZXN0LURhcmZVZWJlcnNjaHJlaWJlbiAkUm9sbGUNCg0KICAgICAgICAgICAgICAgICRBZG1pbkZ1 +ZXJWRiA9IFJlYWQtSnNvbkZpbGUgJ2FkbWluLmpzb24nDQoNCiAgICAgICAgICAgICAgICAjIFdo +aXRlbGlzdCBnZWdlbiBhZG1pbi5zY2hpY2h0Y29kZXMgLS0gdmVyaGluZGVydCBPcnBoYW4tQ29k +ZXMgd2llDQogICAgICAgICAgICAgICAgIyBkaWUgJ2RmclUnLydkZnIvVScvJ2FiZyctVmFyaWFu +dHMsIGRpZSBoaXN0b3Jpc2NoIGR1cmNoIFRpcHBmZWhsZXINCiAgICAgICAgICAgICAgICAjIGlu +IGRpZSBEYXRlbiBnZWxhbmd0IHdhcmVuIChNaWdyYXRpb24gaW4gQXVkaXQtUGhhc2UtMikuIE1p +cnJvcg0KICAgICAgICAgICAgICAgICMgenUgc2VydmVyLnB5OjI5NDQtMjk1Mi4NCiAgICAgICAg +ICAgICAgICAkVmFsaWRDb2RlcyA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVy +aWMuSGFzaFNldFtzdHJpbmddDQogICAgICAgICAgICAgICAgW3ZvaWRdJFZhbGlkQ29kZXMuQWRk +KCcnKQ0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJEFkbWluRnVlclZGIC1hbmQgJEFk +bWluRnVlclZGLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3NjaGljaHRjb2RlcyddKSB7DQogICAgICAg +ICAgICAgICAgICAgIGZvcmVhY2ggKCRTYyBpbiAkQWRtaW5GdWVyVkYuc2NoaWNodGNvZGVzKSB7 +DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICRTYyAtYW5kICRTYy5QU09i +amVjdC5Qcm9wZXJ0aWVzWydjb2RlJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBb +dm9pZF0kVmFsaWRDb2Rlcy5BZGQoW3N0cmluZ10kU2MuY29kZSkNCiAgICAgICAgICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICBpZiAoLW5vdCAkVmFsaWRDb2Rlcy5Db250YWlucygkV2VydCkpIHsNCiAgICAg +ICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzICJVbmJla2FubnRlciBTY2hpY2h0Y29kZTog +JyRXZXJ0JyIgNDAwDQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAg +ICAgfQ0KDQogICAgICAgICAgICAgICAgIyBWZXJiaW5kbGljaGtlaXRzZmVuc3RlciAoRC4xKTog +cmVndWxhZXJlIFVzZXIga29lbm5lbiBUYWdlIGRhdm9yIG5pY2h0IGVkaXRpZXJlbg0KICAgICAg +ICAgICAgICAgIGlmICgkUm9sbGUgLWVxICd1c2VyJykgew0KICAgICAgICAgICAgICAgICAgICBp +ZiAoVGVzdC1EYXR1bUluVmVyYmluZGxpY2hrZWl0ICREYXR1bSAkQWRtaW5GdWVyVkYpIHsNCiAg +ICAgICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7DQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgZmVobGVyICAgICAgICAgID0gJ3ZlcmJpbmRsaWNoa2VpdHNmZW5zdGVyJw0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbGR1bmcgICAgICAgICA9ICdEYXR1bSBsaWVn +dCBpbSBWZXJiaW5kbGljaGtlaXRzZmVuc3RlciAtIGZ1ZXIgcmVndWxhZXJlIFVzZXIgbm9jaCBn +ZXNwZXJydC4nDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJzdGVyRnJlaWVyVGFnID0g +KEdldC1FcnN0ZXJGcmVpZXJUYWdJc28gJEFkbWluRnVlclZGKQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgfSA0MDMNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAjIFBlc3Np +bWlzdGljIENlbGwtTG9jayBwcnVlZmVuIChQaGFzZSBBKQ0KICAgICAgICAgICAgICAgICRFeGlz +dGluZ0xvY2sgPSBSZWFkLUNlbGxMb2NrICREYXR1bSAkUGVyc29uSWQNCiAgICAgICAgICAgICAg +ICBpZiAoJG51bGwgLW5lICRFeGlzdGluZ0xvY2spIHsNCiAgICAgICAgICAgICAgICAgICAgJFRv +a2VuUGFzc3QgPSAoJExvY2tUb2tlbiAtYW5kICRFeGlzdGluZ0xvY2sudG9rZW4gLWVxICRMb2Nr +VG9rZW4pDQogICAgICAgICAgICAgICAgICAgICRTZWxic3RMb2NrID0gKCRFeGlzdGluZ0xvY2su +dXNlcm5hbWUgLWllcSAkVXNlcm5hbWUpDQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRU +b2tlblBhc3N0IC1hbmQgLW5vdCAkU2VsYnN0TG9jayAtYW5kIC1ub3QgJERhcmZVZWJlcnNjaHJl +aWJlbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICBmZWhsZXIgID0gJ2dlc3BlcnJ0Jw0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIG1lbGR1bmcgPSAiRGllc2UgWmVsbGUgd2lyZCBnZXJhZGUgdm9uICQo +JEV4aXN0aW5nTG9jay51c2VybmFtZSkgYmVhcmJlaXRldC4iDQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgc3BlcnJlciA9ICRFeGlzdGluZ0xvY2sudXNlcm5hbWUNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICByb2xsZSAgID0gJEV4aXN0aW5nTG9jay5yb2xsZQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIHNlaXQgICAgPSAkRXhpc3RpbmdMb2NrLmxvY2tlZEF0DQogICAgICAg +ICAgICAgICAgICAgICAgICB9IDQyMw0KICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUN +CiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAg +ICAgICRMb2NrUmVzdWx0ID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAg +ICAgICAgICAgICAkTG9ja1Jlc3VsdCA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcuanNv +bicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcgPSBSZWFkLUpzb25GaWxlICdw +bGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRQbGFu +dW5nKSB7IHJldHVybiBAeyB0eXAgPSAnZXJyb3InOyBjb2RlID0gNDA0OyBtc2cgPSAncGxhbnVu +Zy5qc29uIG5pY2h0IGdlZnVuZGVuJyB9IH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgJEFs +dGVyV2VydCA9ICcnDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkUGxhbnVuZy5Q +U09iamVjdC5Qcm9wZXJ0aWVzWydlaW50cmFlZ2UnXSkgew0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICRQbGFudW5nIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5h +bWUgJ2VpbnRyYWVnZScgLVZhbHVlIChOZXctT2JqZWN0IFBTT2JqZWN0KQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJFBsYW51bmcu +ZWludHJhZWdlLlBTT2JqZWN0LlByb3BlcnRpZXNbJERhdHVtXSkgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICRQbGFudW5nLmVpbnRyYWVnZSB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUg +Tm90ZVByb3BlcnR5IC1OYW1lICREYXR1bSAtVmFsdWUgKE5ldy1PYmplY3QgUFNPYmplY3QpDQog +ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIGlmICgkUGxhbnVuZy5laW50cmFlZ2UuJERhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXNbJFBl +cnNvbklkXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQWx0ZXJXZXJ0ID0g +W3N0cmluZ10kUGxhbnVuZy5laW50cmFlZ2UuJERhdHVtLiRQZXJzb25JZA0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAg +ICAgICAgICAgICAgICAgIyBPcHRpbWlzdGljLUNvbmN1cnJlbmN5DQogICAgICAgICAgICAgICAg +ICAgICAgICBpZiAoJEhhdEVyd2FydGV0IC1hbmQgJEVyd2FydGV0IC1uZSAkQWx0ZXJXZXJ0KSB7 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHR5cCA9ICdrb25mbGlrdCc7 +IGFrdHVlbGwgPSAkQWx0ZXJXZXJ0IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAg +ICAgICAgICAgICAgICAgICAgICAgIyBQZmxpY2h0LU92ZXJyaWRlLUNoZWNrIChQaGFzZSBCKTog +YmVzdGVoZW5kZXMgcGZsaWNodD10cnVlIG51ciBTVS9GYWNoYXVmc2ljaHQNCiAgICAgICAgICAg +ICAgICAgICAgICAgICRBbHRlclBmbGljaHQgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICAgICAg +ICAgIGlmICgkUGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWydwZmxpY2h0J10gLWFuZCAkUGxh +bnVuZy5wZmxpY2h0LlBTT2JqZWN0LlByb3BlcnRpZXNbJERhdHVtXSkgew0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIGlmICgkUGxhbnVuZy5wZmxpY2h0LiREYXR1bS5QU09iamVjdC5Qcm9w +ZXJ0aWVzWyRQZXJzb25JZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEFs +dGVyUGZsaWNodCA9IFtib29sXSRQbGFudW5nLnBmbGljaHQuJERhdHVtLiRQZXJzb25JZA0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICAgICAgICAgICAgIGlmICgkQWx0ZXJQZmxpY2h0IC1hbmQgLW5vdCAkRGFyZlVl +YmVyc2NocmVpYmVuKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHR5 +cCA9ICdwZmxpY2h0Z2VzcGVycnQnOyBhbHRlcldlcnQgPSAkQWx0ZXJXZXJ0IH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICMgUGZsaWNodC1ORVUt +U2V0emVuOiBudXIgU1UvRmFjaGF1ZnNpY2h0DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo +JEhhdFBmbGljaHQgLWFuZCAkUGZsaWNodE5ldSAtYW5kIC1ub3QgJERhcmZVZWJlcnNjaHJlaWJl +bikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyB0eXAgPSAncGZsaWNo +dHNldHp1bmdWZXJib3RlbicgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAg +ICAgICAgICAgICAgICAgICBpZiAoW3N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFjZSgkV2VydCkp +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFBsYW51bmcuZWludHJhZWdlLiRE +YXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRQZXJzb25JZF0pIHsNCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgJFBsYW51bmcuZWludHJhZWdlLiREYXR1bS5QU09iamVjdC5Qcm9wZXJ0 +aWVzLlJlbW92ZSgkUGVyc29uSWQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICBpZiAoJFBsYW51bmcuZWludHJhZWdlLiREYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRQZXJz +b25JZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcuZWludHJh +ZWdlLiREYXR1bS4kUGVyc29uSWQgPSAkV2VydA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +IH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLmVpbnRy +YWVnZS4kRGF0dW0gfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAk +UGVyc29uSWQgLVZhbHVlICRXZXJ0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAjIFBmbGlj +aHQtRmxhZyBzZXBhcmF0IHZlcndhbHRlbg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1u +b3QgJFBsYW51bmcuUFNPYmplY3QuUHJvcGVydGllc1sncGZsaWNodCddKSB7DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgJFBsYW51bmcgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQ +cm9wZXJ0eSAtTmFtZSAncGZsaWNodCcgLVZhbHVlIChOZXctT2JqZWN0IFBTT2JqZWN0KQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJFdlcnRWb3Jo +YW5kZW4gPSAtbm90IFtzdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJFdlcnQpDQogICAgICAg +ICAgICAgICAgICAgICAgICAkU29sbFNldHplbiA9ICRIYXRQZmxpY2h0IC1hbmQgJFBmbGljaHRO +ZXUgLWFuZCAkV2VydFZvcmhhbmRlbg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRTb2xs +U2V0emVuKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJFBsYW51bmcu +cGZsaWNodC5QU09iamVjdC5Qcm9wZXJ0aWVzWyREYXR1bV0pIHsNCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgJFBsYW51bmcucGZsaWNodCB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUg +Tm90ZVByb3BlcnR5IC1OYW1lICREYXR1bSAtVmFsdWUgKE5ldy1PYmplY3QgUFNPYmplY3QpDQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +IGlmICgkUGxhbnVuZy5wZmxpY2h0LiREYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRQZXJzb25J +ZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcucGZsaWNodC4k +RGF0dW0uJFBlcnNvbklkID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs +c2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy5wZmxpY2h0LiRE +YXR1bSB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICRQZXJzb25J +ZCAtVmFsdWUgJHRydWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgICAgICAgICB9IGVsc2VpZiAoJEhhdFBmbGljaHQgLW9yIC1ub3QgJFdlcnRWb3JoYW5k +ZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFBsYW51bmcucGZsaWNodC5Q +U09iamVjdC5Qcm9wZXJ0aWVzWyREYXR1bV0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgaWYgKCRQbGFudW5nLnBmbGljaHQuJERhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXNbJFBl +cnNvbklkXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcu +cGZsaWNodC4kRGF0dW0uUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJFBlcnNvbklkKQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIGlmIChAKCRQbGFudW5nLnBmbGljaHQuJERhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXMp +LkNvdW50IC1lcSAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxh +bnVuZy5wZmxpY2h0LlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCREYXR1bSkNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgV3Jp +dGUtUGxhbnVuZ01pdEludGVncml0YWV0ICRQbGFudW5nIEAoDQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgQHsga2luZCA9ICdlaW50cmFlZ2UnOyBkYXR1bSA9ICREYXR1bTsgcGVyc29uSWQg +PSAkUGVyc29uSWQgfSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAeyBraW5kID0gJ3Bm +bGljaHQnOyAgIGRhdHVtID0gJERhdHVtOyBwZXJzb25JZCA9ICRQZXJzb25JZCB9DQogICAgICAg +ICAgICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgdHlw +ID0gJ29rJzsgYWx0ZXJXZXJ0ID0gJEFsdGVyV2VydDsgYWx0ZXJQZmxpY2h0ID0gJEFsdGVyUGZs +aWNodDsgcGxhbnVuZyA9ICRQbGFudW5nIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXMg +IiRfIiA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAg +aWYgKCRMb2NrUmVzdWx0LnR5cCAtZXEgJ2Vycm9yJykgeyBTZW5kLUVycm9yICRSZXMgJExvY2tS +ZXN1bHQubXNnICRMb2NrUmVzdWx0LmNvZGU7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBp +ZiAoJExvY2tSZXN1bHQudHlwIC1lcSAna29uZmxpa3QnKSB7DQogICAgICAgICAgICAgICAgICAg +IFNlbmQtSnNvbiAkUmVzIEB7DQogICAgICAgICAgICAgICAgICAgICAgICBmZWhsZXIgICAgICAg +ID0gJ2tvbmZsaWt0Jw0KICAgICAgICAgICAgICAgICAgICAgICAgbWVsZHVuZyAgICAgICA9ICdE +aWVzZSBaZWxsZSB3dXJkZSBpbnp3aXNjaGVuIGdlYWVuZGVydC4nDQogICAgICAgICAgICAgICAg +ICAgICAgICBha3R1ZWxsZXJXZXJ0ID0gJExvY2tSZXN1bHQuYWt0dWVsbA0KICAgICAgICAgICAg +ICAgICAgICB9IDQwOQ0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAg +ICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoJExvY2tSZXN1bHQudHlwIC1lcSAncGZsaWNodGdl +c3BlcnJ0Jykgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAew0KICAgICAg +ICAgICAgICAgICAgICAgICAgZmVobGVyICAgICAgICA9ICdwZmxpY2h0Z2VzcGVycnQnDQogICAg +ICAgICAgICAgICAgICAgICAgICBtZWxkdW5nICAgICAgID0gJ0RpZXNlIFplbGxlIGlzdCBhbHMg +UGZsaWNodC1TZXR6dW5nIG1hcmtpZXJ0LiBOdXIgRmFjaGF1ZnNpY2h0L1N1cGVyVXNlciBkYXJm +IHNpZSBhZW5kZXJuLicNCiAgICAgICAgICAgICAgICAgICAgICAgIGFrdHVlbGxlcldlcnQgPSAk +TG9ja1Jlc3VsdC5hbHRlcldlcnQNCiAgICAgICAgICAgICAgICAgICAgfSA0MDMNCiAgICAgICAg +ICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg +aWYgKCRMb2NrUmVzdWx0LnR5cCAtZXEgJ3BmbGljaHRzZXR6dW5nVmVyYm90ZW4nKSB7DQogICAg +ICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7DQogICAgICAgICAgICAgICAgICAgICAg +ICBmZWhsZXIgID0gJ3BmbGljaHRzZXR6dW5nVmVyYm90ZW4nDQogICAgICAgICAgICAgICAgICAg +ICAgICBtZWxkdW5nID0gJ1BmbGljaHQtU2V0enVuZ2VuIGtvZW5uZW4gbnVyIEZhY2hhdWZzaWNo +dC9TdXBlclVzZXIgdm9ybmVobWVuLicNCiAgICAgICAgICAgICAgICAgICAgfSA0MDMNCiAgICAg +ICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAg +ICAgICAkQWx0ZXJXZXJ0ICAgID0gJExvY2tSZXN1bHQuYWx0ZXJXZXJ0DQogICAgICAgICAgICAg +ICAgJEFsdGVyUGZsaWNodCA9ICRMb2NrUmVzdWx0LmFsdGVyUGZsaWNodA0KICAgICAgICAgICAg +ICAgICRQbGFudW5nICAgICAgPSAkTG9ja1Jlc3VsdC5wbGFudW5nDQogICAgICAgICAgICAgICAg +JElzdE92ZXJyaWRlICA9ICgkQWx0ZXJQZmxpY2h0IC1hbmQgJERhcmZVZWJlcnNjaHJlaWJlbikg +LW9yIGANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCRudWxsIC1uZSAkRXhpc3Rp +bmdMb2NrIC1hbmQgLW5vdCAoJEV4aXN0aW5nTG9jay51c2VybmFtZSAtaWVxICRVc2VybmFtZSkg +LWFuZCAkRGFyZlVlYmVyc2NocmVpYmVuKQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRy +YWcgJ3plbGxlLmdlYWVuZGVydCcgQHsNCiAgICAgICAgICAgICAgICAgICAgZGF0dW0gICAgID0g +JERhdHVtDQogICAgICAgICAgICAgICAgICAgIHBlcnNvbklkICA9ICRQZXJzb25JZA0KICAgICAg +ICAgICAgICAgICAgICBhbHRlcldlcnQgPSAkQWx0ZXJXZXJ0DQogICAgICAgICAgICAgICAgICAg +IG5ldWVyV2VydCA9ICRXZXJ0DQogICAgICAgICAgICAgICAgICAgIHBmbGljaHQgICA9IGlmICgk +SGF0UGZsaWNodCkgeyAkUGZsaWNodE5ldSB9IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAg +ICAgICAgIHJvbGxlICAgICA9ICRSb2xsZQ0KICAgICAgICAgICAgICAgICAgICBvdmVycmlkZSAg +PSAkSXN0T3ZlcnJpZGUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgQWRkLUNo +YW5nZUxvZ0VudHJ5ICd6ZWxsZScgJERhdHVtICRQZXJzb25JZCAkV2VydCAkVXNlcm5hbWUgJFJv +bGxlIEB7DQogICAgICAgICAgICAgICAgICAgIGFsdGVyV2VydCA9ICRBbHRlcldlcnQNCiAgICAg +ICAgICAgICAgICAgICAgcGZsaWNodCAgID0gaWYgKCRIYXRQZmxpY2h0KSB7ICRQZmxpY2h0TmV1 +IH0gZWxzZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGUgID0gJElzdE92 +ZXJyaWRlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgkQWx0ZXJXZXJ0 +IC1uZSAkV2VydCkgew0KICAgICAgICAgICAgICAgICAgICB0cnkgeyBOb3RpZnktQWVuZGVydW5n +ICRQbGFudW5nICRQZXJzb25JZCAkRGF0dW0gJEFsdGVyV2VydCAkV2VydCB9IGNhdGNoIHsgRGVi +dWctTG9nICdNQUlMJyAiRmVobGVyOiAkXyIgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICBTZW5kLUpzb24gJFJlcyBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnOyBhbHRlcldl +cnQgPSAkQWx0ZXJXZXJ0OyByb2xsZSA9ICRSb2xsZTsgb3ZlcnJpZGUgPSAkSXN0T3ZlcnJpZGUg fQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAg -ICMgREVMRVRFIC9hcGkvbG9jay96ZWxsZSAgeyB0b2tlbiB9IC0+IExvY2sgZnJlaWdlYmVuDQog -ICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2xvY2svemVsbGUnIC1hbmQgJE1ldGhvZCAt -ZXEgJ0RFTEVURScpIHsNCiAgICAgICAgICAgICAgICAjIERFTEVURS1Cb2R5IGxlc2VuIChIdHRw -TGlzdGVuZXIgdW50ZXJzdHVldHp0IGRhcykNCiAgICAgICAgICAgICAgICAkQm9keSA9IFJlYWQt -Qm9keSAkUmVxDQogICAgICAgICAgICAgICAgJFRva2VuID0gJG51bGwNCiAgICAgICAgICAgICAg -ICBpZiAoJEJvZHkpIHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAg +ICMgRkxEOiBEU00tVG9nZ2xlIChQaGFzZSBBNTogRmlsZS1Mb2NrICsgQ2hhbmdlLUxvZykNCiAg +ICAgICAgICAgICMgV2FyIGluIHNlcnZlci5wczEgYmlzaGVyIGdhciBuaWNodCB2b3JoYW5kZW4g +LSBudXIgc2VydmVyLnB5IGhhdHRlIGVzLg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2Fw +aS9wbGFudW5nL2RzbScgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAg +ICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzICdLZWluZSBCZXJl +Y2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRCb2R5ID0gUmVhZC1C +b2R5ICRSZXENCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRCb2R5KSB7IFNlbmQtRXJy +b3IgJFJlcyAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAg +ICAgJEEgPSAkQm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkRGF0dW0g +PSBbc3RyaW5nXSRBLmRhdHVtDQogICAgICAgICAgICAgICAgJEZsYWcgPSBbYm9vbF0kQS5ha3Rp +dg0KICAgICAgICAgICAgICAgIGlmIChbc3RyaW5nXTo6SXNOdWxsT3JXaGl0ZVNwYWNlKCREYXR1 +bSkpIHsgU2VuZC1FcnJvciAkUmVzICdkYXR1bSBmZWhsdCcgNDAwOyBjb250aW51ZSB9DQogICAg +ICAgICAgICAgICAgJFVzZXJuYW1lID0gJGVudjpVU0VSTkFNRQ0KICAgICAgICAgICAgICAgICRS +b2xsZSA9IEdldC1Vc2VyUm9sbGUNCiAgICAgICAgICAgICAgICAkTG9ja1Jlc3VsdCA9ICRudWxs +DQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJExvY2tSZXN1bHQg +PSBJbnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAgICAgICAgICAg +ICAgICAgICRQbGFudW5nID0gUmVhZC1Kc29uRmlsZSAncGxhbnVuZy5qc29uJw0KICAgICAgICAg +ICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkUGxhbnVuZykgeyByZXR1cm4gQHsgdHlwID0g +J2Vycm9yJzsgY29kZSA9IDQwNDsgbXNnID0gJ3BsYW51bmcuanNvbiBuaWNodCBnZWZ1bmRlbicg +fSB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkUGxhbnVuZy5QU09iamVjdC5Q +cm9wZXJ0aWVzWydkc20nXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5n +IHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ2RzbScgLVZhbHVl +IChOZXctT2JqZWN0IFBTT2JqZWN0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgJEFsdCA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAg +aWYgKCRQbGFudW5nLmRzbS5QU09iamVjdC5Qcm9wZXJ0aWVzWyREYXR1bV0pIHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAkQWx0ID0gW2Jvb2xdJFBsYW51bmcuZHNtLiREYXR1bQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRGbGFn +KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQbGFudW5nLmRzbS5QU09iamVj +dC5Qcm9wZXJ0aWVzWyREYXR1bV0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +JFBsYW51bmcuZHNtLiREYXR1bSA9ICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +fSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcuZHNtIHwg +QWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJERhdHVtIC1WYWx1ZSAk +dHJ1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg +ICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQbGFudW5nLmRz +bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyREYXR1bV0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgJFBsYW51bmcuZHNtLlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCREYXR1bSkN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1QbGFudW5nTWl0SW50ZWdyaXRhZXQgJFBs +YW51bmcgQCgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAeyBraW5kID0gJ2RzbSc7IGRh +dHVtID0gJERhdHVtIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICkNCiAgICAgICAgICAgICAg +ICAgICAgICAgIHJldHVybiBAeyB0eXAgPSAnb2snOyBhbHQgPSAkQWx0IH0NCiAgICAgICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAg +ICBTZW5kLUVycm9yICRSZXMgIiRfIiA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgIGlmICgkTG9ja1Jlc3VsdC50eXAgLWVxICdlcnJvcicpIHsgU2VuZC1F +cnJvciAkUmVzICRMb2NrUmVzdWx0Lm1zZyAkTG9ja1Jlc3VsdC5jb2RlOyBjb250aW51ZSB9DQog +ICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnZHNtLmdlYWVuZGVydCcgQHsgZGF0dW0g +PSAkRGF0dW07IGFrdGl2ID0gJEZsYWc7IHJvbGxlID0gJFJvbGxlIH0NCiAgICAgICAgICAgICAg +ICBBZGQtQ2hhbmdlTG9nRW50cnkgJ2RzbScgJERhdHVtICRudWxsIChbc3RyaW5nXSRGbGFnLlRv +U3RyaW5nKCkuVG9Mb3dlcigpKSAkVXNlcm5hbWUgJFJvbGxlIEB7DQogICAgICAgICAgICAgICAg +ICAgIGFrdGl2ID0gJEZsYWcNCiAgICAgICAgICAgICAgICAgICAgYWx0ICAgPSAkTG9ja1Jlc3Vs +dC5hbHQNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMg +QHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JzsgZGF0dW0gPSAkRGF0dW07IGFrdGl2ID0gJEZsYWcg +fQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAg +ICMgPT09PT09PT09PT09PT09PT09PT09IFpFTExFTi1CVUxLIChQaGFzZSBDOiBBdXRvRmlsbC1E +bkQpID09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgIyBQVVQgL2FwaS9wbGFudW5n +L3plbGxlbi1idWxrIHsgemVsbGVuOiBbe2RhdHVtLCBwZXJzb25JZCwgd2VydCwgZXJ3YXJ0ZXQs +IGxvY2tUb2tlbj99LCAuLi5dIH0NCiAgICAgICAgICAgICMgMjA3IE11bHRpLVN0YXR1czogeyBl +cmZvbGdyZWljaDpbXSwga29uZmxpa3RlOltdLCBnZXNwZXJydDpbXSwgdmVyYm90ZW46W10sIGZl +aGxlcjpbXSB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvemVsbGVu +LWJ1bGsnIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICAkQm9keSA9 +IFJlYWQtQm9keSAkUmVxDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkQm9keSkgeyBT +ZW5kLUVycm9yICRSZXMgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAg ICAgICAgICAgICRBID0gJEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAg -ICAgICAgICBpZiAoJEEuUFNPYmplY3QuUHJvcGVydGllc1sndG9rZW4nXSkgeyAkVG9rZW4gPSBb -c3RyaW5nXSRBLnRva2VuIH0NCiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7fQ0KICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAjIEF1Y2ggUXVlcnktU3RyaW5nIHVudGVyc3R1 -ZXR6ZW4sIGZ1ZXIgc2VuZEJlYWNvbi1GYWVsbGUNCiAgICAgICAgICAgICAgICBpZiAoW3N0cmlu -Z106OklzTnVsbE9yV2hpdGVTcGFjZSgkVG9rZW4pIC1hbmQgJFJlcS5VcmwuUXVlcnkpIHsNCiAg -ICAgICAgICAgICAgICAgICAgJFEgPSBbU3lzdGVtLldlYi5IdHRwVXRpbGl0eV06OlBhcnNlUXVl -cnlTdHJpbmcoJFJlcS5VcmwuUXVlcnkpDQogICAgICAgICAgICAgICAgICAgICRUb2tlbiA9IFtz -dHJpbmddJFFbJ3Rva2VuJ10NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYg -KFtzdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJFRva2VuKSkgeyBTZW5kLUVycm9yICRSZXMg -J1Rva2VuIGZlaGx0JyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkUmVzdWx0ID0g -UmVsZWFzZS1DZWxsTG9jayAkVG9rZW4NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBA -eyBvayA9ICRSZXN1bHQub2sgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAg -ICB9DQoNCiAgICAgICAgICAgICMgR0VUIC9hcGkvbG9jay96ZWxsZW4gLT4gTGlzdGUgYWxsZXIg -YWt0aXZlbiBMb2NrcyAoZnVlciBMaXZlLUluZGljYXRvci1SZW5kZXIpDQogICAgICAgICAgICBp -ZiAoJFBhdGggLWVxICcvYXBpL2xvY2svemVsbGVuJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7 -DQogICAgICAgICAgICAgICAgJExvY2tzID0gR2V0LUFsbEFjdGl2ZUNlbGxMb2Nrcw0KICAgICAg -ICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7IGxvY2tzID0gJExvY2tzIH0NCiAgICAgICAgICAg -ICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIEdFVCAvYXBpL3Bs -YW51bmcvY2hhbmdlcz9zZWl0PTxpc28tdHM+IC0+IERlbHRhLUxpc3RlIGZ1ZXIgTGl2ZS1TeW5j -IChQaGFzZSBBNCkNCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy9jaGFu -Z2VzJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgJFEgPSBbU3lz -dGVtLldlYi5IdHRwVXRpbGl0eV06OlBhcnNlUXVlcnlTdHJpbmcoJFJlcS5VcmwuUXVlcnkpDQog -ICAgICAgICAgICAgICAgJFNlaXQgPSBbc3RyaW5nXSRRWydzZWl0J10NCiAgICAgICAgICAgICAg -ICAkQ2hhbmdlcyA9IEdldC1DaGFuZ2VzU2luY2UgJFNlaXQNCiAgICAgICAgICAgICAgICBTZW5k -LUpzb24gJFJlcyBAew0KICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJUcyA9IChHZXQtRGF0ZSku -VG9Vbml2ZXJzYWxUaW1lKCkuVG9TdHJpbmcoJ28nKQ0KICAgICAgICAgICAgICAgICAgICBjaGFu -Z2VzICA9ICRDaGFuZ2VzDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRp -bnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgWmVsbGUgYWVuZGVybg0KICAgICAg -ICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL3plbGxlJyAtYW5kICRNZXRob2QgLWVx -ICdQT1NUJykgew0KICAgICAgICAgICAgICAgICRCb2R5ID0gUmVhZC1Cb2R5ICRSZXENCiAgICAg -ICAgICAgICAgICBpZiAoJG51bGwgLWVxICRCb2R5KSB7IFNlbmQtRXJyb3IgJFJlcyAnQW5mcmFn -ZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJEEgPSAkQm9keSB8 -IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkRGF0dW0gPSBbc3RyaW5nXSRBLmRh -dHVtDQogICAgICAgICAgICAgICAgJFBlcnNvbklkID0gW3N0cmluZ10kQS5wZXJzb25JZA0KICAg -ICAgICAgICAgICAgICRXZXJ0ID0gaWYgKCRBLndlcnQpIHsgW3N0cmluZ10kQS53ZXJ0IH0gZWxz -ZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAkSGF0UGZsaWNodCA9ICRBLlBTT2JqZWN0LlByb3Bl -cnRpZXNbJ3BmbGljaHQnXQ0KICAgICAgICAgICAgICAgICRQZmxpY2h0TmV1ID0gaWYgKCRIYXRQ -ZmxpY2h0KSB7IFtib29sXSRBLnBmbGljaHQgfSBlbHNlIHsgJGZhbHNlIH0NCiAgICAgICAgICAg -ICAgICAkSGF0RXJ3YXJ0ZXQgPSAkQS5QU09iamVjdC5Qcm9wZXJ0aWVzWydlcndhcnRldGVyQWx0 -ZXJXZXJ0J10NCiAgICAgICAgICAgICAgICAkRXJ3YXJ0ZXQgPSBpZiAoJEhhdEVyd2FydGV0KSB7 -IFtzdHJpbmddJEEuZXJ3YXJ0ZXRlckFsdGVyV2VydCB9IGVsc2UgeyAkbnVsbCB9DQogICAgICAg -ICAgICAgICAgJExvY2tUb2tlbiA9IGlmICgkQS5QU09iamVjdC5Qcm9wZXJ0aWVzWydsb2NrVG9r -ZW4nXSkgeyBbc3RyaW5nXSRBLmxvY2tUb2tlbiB9IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAg -ICAgICAgJFVzZXJuYW1lID0gJGVudjpVU0VSTkFNRQ0KICAgICAgICAgICAgICAgICRSb2xsZSA9 -IEdldC1Vc2VyUm9sbGUNCiAgICAgICAgICAgICAgICAkRGFyZlVlYmVyc2NocmVpYmVuID0gVGVz -dC1EYXJmVWViZXJzY2hyZWliZW4gJFJvbGxlDQoNCiAgICAgICAgICAgICAgICAkQWRtaW5GdWVy -VkYgPSBSZWFkLUpzb25GaWxlICdhZG1pbi5qc29uJw0KDQogICAgICAgICAgICAgICAgIyBXaGl0 -ZWxpc3QgZ2VnZW4gYWRtaW4uc2NoaWNodGNvZGVzIC0tIHZlcmhpbmRlcnQgT3JwaGFuLUNvZGVz -IHdpZQ0KICAgICAgICAgICAgICAgICMgZGllICdkZnJVJy8nZGZyL1UnLydhYmcnLVZhcmlhbnRz -LCBkaWUgaGlzdG9yaXNjaCBkdXJjaCBUaXBwZmVobGVyDQogICAgICAgICAgICAgICAgIyBpbiBk -aWUgRGF0ZW4gZ2VsYW5ndCB3YXJlbiAoTWlncmF0aW9uIGluIEF1ZGl0LVBoYXNlLTIpLiBNaXJy -b3INCiAgICAgICAgICAgICAgICAjIHp1IHNlcnZlci5weToyOTQ0LTI5NTIuDQogICAgICAgICAg -ICAgICAgJFZhbGlkQ29kZXMgPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmlj -Lkhhc2hTZXRbc3RyaW5nXQ0KICAgICAgICAgICAgICAgIFt2b2lkXSRWYWxpZENvZGVzLkFkZCgn -JykNCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICRBZG1pbkZ1ZXJWRiAtYW5kICRBZG1p -bkZ1ZXJWRi5QU09iamVjdC5Qcm9wZXJ0aWVzWydzY2hpY2h0Y29kZXMnXSkgew0KICAgICAgICAg -ICAgICAgICAgICBmb3JlYWNoICgkU2MgaW4gJEFkbWluRnVlclZGLnNjaGljaHRjb2Rlcykgew0K -ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkU2MgLWFuZCAkU2MuUFNPYmpl -Y3QuUHJvcGVydGllc1snY29kZSddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Zv -aWRdJFZhbGlkQ29kZXMuQWRkKFtzdHJpbmddJFNjLmNvZGUpDQogICAgICAgICAgICAgICAgICAg -ICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgaWYgKC1ub3QgJFZhbGlkQ29kZXMuQ29udGFpbnMoJFdlcnQpKSB7DQogICAgICAg -ICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAiVW5iZWthbm50ZXIgU2NoaWNodGNvZGU6ICck -V2VydCciIDQwMA0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAg -IH0NCg0KICAgICAgICAgICAgICAgICMgVmVyYmluZGxpY2hrZWl0c2ZlbnN0ZXIgKEQuMSk6IHJl -Z3VsYWVyZSBVc2VyIGtvZW5uZW4gVGFnZSBkYXZvciBuaWNodCBlZGl0aWVyZW4NCiAgICAgICAg -ICAgICAgICBpZiAoJFJvbGxlIC1lcSAndXNlcicpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYg -KFRlc3QtRGF0dW1JblZlcmJpbmRsaWNoa2VpdCAkRGF0dW0gJEFkbWluRnVlclZGKSB7DQogICAg -ICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAew0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIGZlaGxlciAgICAgICAgICA9ICd2ZXJiaW5kbGljaGtlaXRzZmVuc3RlcicNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICBtZWxkdW5nICAgICAgICAgPSAnRGF0dW0gbGllZ3Qg -aW0gVmVyYmluZGxpY2hrZWl0c2ZlbnN0ZXIgLSBmdWVyIHJlZ3VsYWVyZSBVc2VyIG5vY2ggZ2Vz -cGVycnQuJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyc3RlckZyZWllclRhZyA9IChH -ZXQtRXJzdGVyRnJlaWVyVGFnSXNvICRBZG1pbkZ1ZXJWRikNCiAgICAgICAgICAgICAgICAgICAg -ICAgIH0gNDAzDQogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgIyBQZXNzaW1p -c3RpYyBDZWxsLUxvY2sgcHJ1ZWZlbiAoUGhhc2UgQSkNCiAgICAgICAgICAgICAgICAkRXhpc3Rp -bmdMb2NrID0gUmVhZC1DZWxsTG9jayAkRGF0dW0gJFBlcnNvbklkDQogICAgICAgICAgICAgICAg -aWYgKCRudWxsIC1uZSAkRXhpc3RpbmdMb2NrKSB7DQogICAgICAgICAgICAgICAgICAgICRUb2tl -blBhc3N0ID0gKCRMb2NrVG9rZW4gLWFuZCAkRXhpc3RpbmdMb2NrLnRva2VuIC1lcSAkTG9ja1Rv -a2VuKQ0KICAgICAgICAgICAgICAgICAgICAkU2VsYnN0TG9jayA9ICgkRXhpc3RpbmdMb2NrLnVz -ZXJuYW1lIC1pZXEgJFVzZXJuYW1lKQ0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkVG9r -ZW5QYXNzdCAtYW5kIC1ub3QgJFNlbGJzdExvY2sgLWFuZCAtbm90ICREYXJmVWViZXJzY2hyZWli -ZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7DQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgZmVobGVyICA9ICdnZXNwZXJydCcNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICBtZWxkdW5nID0gIkRpZXNlIFplbGxlIHdpcmQgZ2VyYWRlIHZvbiAkKCRF -eGlzdGluZ0xvY2sudXNlcm5hbWUpIGJlYXJiZWl0ZXQuIg0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgIHNwZXJyZXIgPSAkRXhpc3RpbmdMb2NrLnVzZXJuYW1lDQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgcm9sbGUgICA9ICRFeGlzdGluZ0xvY2sucm9sbGUNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICBzZWl0ICAgID0gJEV4aXN0aW5nTG9jay5sb2NrZWRBdA0KICAgICAgICAg -ICAgICAgICAgICAgICAgfSA0MjMNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQog -ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAg +aWYgKC1ub3QgJEEuemVsbGVuIC1vciBAKCRBLnplbGxlbikuQ291bnQgLWVxIDApIHsNCiAgICAg +ICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzICd6ZWxsZW4tQXJyYXkgZmVobHQgb2RlciBs +ZWVyJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlm +IChAKCRBLnplbGxlbikuQ291bnQgLWd0IDUwMCkgew0KICAgICAgICAgICAgICAgICAgICBTZW5k +LUVycm9yICRSZXMgJ01heGltYWwgNTAwIFplbGxlbiBwcm8gQnVsay1SZXF1ZXN0JyA0MTM7IGNv +bnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRVc2VybmFtZSA9ICRl +bnY6VVNFUk5BTUUNCiAgICAgICAgICAgICAgICAkUm9sbGUgPSBHZXQtVXNlclJvbGxlDQogICAg +ICAgICAgICAgICAgJERhcmZVZWJlciA9IFRlc3QtRGFyZlVlYmVyc2NocmVpYmVuICRSb2xsZQ0K +DQogICAgICAgICAgICAgICAgIyBQcmUtQ2hlY2sgQ2VsbC1Mb2Nrcw0KICAgICAgICAgICAgICAg +ICRHZXNwZXJydCA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdA0KICAg +ICAgICAgICAgICAgIGZvcmVhY2ggKCR6IGluICRBLnplbGxlbikgew0KICAgICAgICAgICAgICAg +ICAgICAkZCA9IFtzdHJpbmddJHouZGF0dW07ICRwID0gW3N0cmluZ10kei5wZXJzb25JZA0KICAg +ICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkZCAtb3IgLW5vdCAkcCkgeyBjb250aW51ZSB9DQog +ICAgICAgICAgICAgICAgICAgICRMID0gUmVhZC1DZWxsTG9jayAkZCAkcA0KICAgICAgICAgICAg +ICAgICAgICBpZiAoJG51bGwgLW5lICRMKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkb3du +ID0gKCRMLnVzZXJuYW1lIC1pZXEgJFVzZXJuYW1lKQ0KICAgICAgICAgICAgICAgICAgICAgICAg +JHRva09rID0gJHouUFNPYmplY3QuUHJvcGVydGllc1snbG9ja1Rva2VuJ10gLWFuZCAkTC50b2tl +biAtZXEgW3N0cmluZ10kei5sb2NrVG9rZW4NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgt +bm90ICRvd24gLWFuZCAtbm90ICR0b2tPayAtYW5kIC1ub3QgJERhcmZVZWJlcikgew0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIFt2b2lkXSRHZXNwZXJydC5BZGQoQHsgZGF0dW0gPSAkZDsg +cGVyc29uSWQgPSAkcDsgc3BlcnJlciA9ICRMLnVzZXJuYW1lIH0pDQogICAgICAgICAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAg +ICAgICAgICAgICAgICAkRXJmb2xncmVpY2ggPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9u +cy5BcnJheUxpc3QNCiAgICAgICAgICAgICAgICAkS29uZmxpa3RlICAgPSBOZXctT2JqZWN0IFN5 +c3RlbS5Db2xsZWN0aW9ucy5BcnJheUxpc3QNCiAgICAgICAgICAgICAgICAkVmVyYm90ZW4gICAg +PSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9ucy5BcnJheUxpc3QNCiAgICAgICAgICAgICAg +ICAkRmVobGVyICAgICAgPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9ucy5BcnJheUxpc3QN +Cg0KICAgICAgICAgICAgICAgICRMb2NrUmVzdWx0ID0gJG51bGwNCiAgICAgICAgICAgICAgICB0 +cnkgew0KICAgICAgICAgICAgICAgICAgICAkTG9ja1Jlc3VsdCA9IEludm9rZS1XaXRoRmlsZUxv +Y2sgJ3BsYW51bmcuanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcgPSBS +ZWFkLUpzb25GaWxlICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo +JG51bGwgLWVxICRQbGFudW5nKSB7IHJldHVybiBAeyB0eXAgPSAnZXJyb3InOyBjb2RlID0gNDA0 +OyBtc2cgPSAncGxhbnVuZy5qc29uIG5pY2h0IGdlZnVuZGVuJyB9IH0NCiAgICAgICAgICAgICAg +ICAgICAgICAgIGlmICgtbm90ICRQbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VpbnRyYWVn +ZSddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcgfCBBZGQtTWVtYmVy +IC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAnZWludHJhZWdlJyAtVmFsdWUgKE5ldy1P +YmplY3QgUFNPYmplY3QpDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgICAgICAgICAkQWRtaW5GdWVyVkYgPSBSZWFkLUpzb25GaWxlICdhZG1pbi5qc29uJw0KICAg +ICAgICAgICAgICAgICAgICAgICAgJFBydWVmZVZlcmIgPSAoJFJvbGxlIC1lcSAndXNlcicpDQog +ICAgICAgICAgICAgICAgICAgICAgICAjIFdoaXRlbGlzdCBnZWdlbiBhZG1pbi5zY2hpY2h0Y29k +ZXMgKE1pcnJvciBzZXJ2ZXIucHk6MzEyMC0zMTIyKQ0KICAgICAgICAgICAgICAgICAgICAgICAg +JFZhbGlkQ29kZXMgPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkhhc2hT +ZXRbc3RyaW5nXQ0KICAgICAgICAgICAgICAgICAgICAgICAgW3ZvaWRdJFZhbGlkQ29kZXMuQWRk +KCcnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkQWRtaW5GdWVyVkYg +LWFuZCAkQWRtaW5GdWVyVkYuUFNPYmplY3QuUHJvcGVydGllc1snc2NoaWNodGNvZGVzJ10pIHsN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkU2MgaW4gJEFkbWluRnVlclZG +LnNjaGljaHRjb2Rlcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51 +bGwgLW5lICRTYyAtYW5kICRTYy5QU09iamVjdC5Qcm9wZXJ0aWVzWydjb2RlJ10pIHsNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lkXSRWYWxpZENvZGVzLkFkZChbc3Ry +aW5nXSRTYy5jb2RlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgJEJldHJvZmZlbmUgPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0 +aW9ucy5BcnJheUxpc3QNCiAgICAgICAgICAgICAgICAgICAgICAgICRHZXNwZXJydFNldCA9IEB7 +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGcgaW4gJEdlc3BlcnJ0KSB7ICRH +ZXNwZXJydFNldFsoJGcuZGF0dW0gKyAnfCcgKyAkZy5wZXJzb25JZCldID0gJHRydWUgfQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHogaW4gJEEuemVsbGVuKSB7DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgJGQgPSBbc3RyaW5nXSR6LmRhdHVtOyAkcCA9IFtzdHJpbmdd +JHoucGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkd2VydCA9IGlmICgkei53 +ZXJ0KSB7IFtzdHJpbmddJHoud2VydCB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgJGVyd2FydGV0ID0gaWYgKCR6LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2Vyd2FydGV0 +J10pIHsgW3N0cmluZ10kei5lcndhcnRldCB9IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgaWYgKC1ub3QgJGQgLW9yIC1ub3QgJHApIHsNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgW3ZvaWRdJEZlaGxlci5BZGQoQHsgZGF0dW0gPSAkZDsgcGVyc29u +SWQgPSAkcDsgZmVobGVyID0gJ2RhdHVtL3BlcnNvbklkIGZlaGx0JyB9KTsgY29udGludWUNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +aWYgKC1ub3QgJFZhbGlkQ29kZXMuQ29udGFpbnMoJHdlcnQpKSB7DQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIFt2b2lkXSRGZWhsZXIuQWRkKEB7IGRhdHVtID0gJGQ7IHBlcnNvbklk +ID0gJHA7IGZlaGxlciA9ICJVbmJla2FubnRlciBTY2hpY2h0Y29kZTogJyR3ZXJ0JyIgfSk7IGNv +bnRpbnVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIGlmICgkR2VzcGVycnRTZXRbKCRkICsgJ3wnICsgJHApXSkgeyBjb250aW51ZSB9 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQcnVlZmVWZXJiIC1hbmQgKFRlc3Qt +RGF0dW1JblZlcmJpbmRsaWNoa2VpdCAkZCAkQWRtaW5GdWVyVkYpKSB7DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIFt2b2lkXSRWZXJib3Rlbi5BZGQoQHsgZGF0dW0gPSAkZDsgcGVy +c29uSWQgPSAkcDsgZ3J1bmQgPSAndmVyYmluZGxpY2hrZWl0c2ZlbnN0ZXInIH0pOyBjb250aW51 +ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICBpZiAoLW5vdCAkUGxhbnVuZy5laW50cmFlZ2UuUFNPYmplY3QuUHJvcGVydGllc1skZF0p +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcuZWludHJhZWdlIHwg +QWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJGQgLVZhbHVlIChOZXct +T2JqZWN0IFBTT2JqZWN0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAkYWx0ID0gJycNCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICBpZiAoJFBsYW51bmcuZWludHJhZWdlLiRkLlBTT2JqZWN0LlByb3BlcnRpZXNbJHBdKSB7DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhbHQgPSBbc3RyaW5nXSRQbGFudW5nLmVp +bnRyYWVnZS4kZC4kcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg +ICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICRlcndhcnRldCAtYW5kICRlcndhcnRldCAt +bmUgJGFsdCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0kS29uZmxp +a3RlLkFkZChAeyBkYXR1bSA9ICRkOyBwZXJzb25JZCA9ICRwOyBha3R1ZWxsID0gJGFsdCB9KTsg +Y29udGludWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgJGFsdFBmID0gJGZhbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +aWYgKCRQbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3BmbGljaHQnXSAtYW5kICRQbGFudW5n +LnBmbGljaHQuUFNPYmplY3QuUHJvcGVydGllc1skZF0pIHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgaWYgKCRQbGFudW5nLnBmbGljaHQuJGQuUFNPYmplY3QuUHJvcGVydGllc1sk +cF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhbHRQZiA9IFtib29s +XSRQbGFudW5nLnBmbGljaHQuJGQuJHANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICBpZiAoJGFsdFBmIC1hbmQgLW5vdCAkRGFyZlVlYmVyKSB7DQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIFt2b2lkXSRWZXJib3Rlbi5BZGQoQHsgZGF0dW0gPSAkZDsgcGVyc29u +SWQgPSAkcDsgZ3J1bmQgPSAncGZsaWNodCcgfSk7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChbc3RyaW5nXTo6 +SXNOdWxsT3JXaGl0ZVNwYWNlKCR3ZXJ0KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICBpZiAoJFBsYW51bmcuZWludHJhZWdlLiRkLlBTT2JqZWN0LlByb3BlcnRpZXNbJHBdKSB7 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy5laW50cmFlZ2Uu +JGQuUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJHApDQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFBsYW51bmcuZWludHJhZWdlLiRkLlBTT2Jq +ZWN0LlByb3BlcnRpZXNbJHBdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAkUGxhbnVuZy5laW50cmFlZ2UuJGQuJHAgPSAkd2VydA0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +JFBsYW51bmcuZWludHJhZWdlLiRkIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVy +dHkgLU5hbWUgJHAgLVZhbHVlICR3ZXJ0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgW3ZvaWRdJEJldHJvZmZlbmUuQWRkKEB7IGtpbmQgPSAnZWludHJhZWdlJzsgZGF0dW0g +PSAkZDsgcGVyc29uSWQgPSAkcCB9KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lk +XSRFcmZvbGdyZWljaC5BZGQoQHsgZGF0dW0gPSAkZDsgcGVyc29uSWQgPSAkcDsgd2VydCA9ICR3 +ZXJ0OyBhbHRlcldlcnQgPSAkYWx0IH0pDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgICAgICAgICBpZiAoQCgkQmV0cm9mZmVuZSkuQ291bnQgLWd0IDApIHsNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1QbGFudW5nTWl0SW50ZWdyaXRhZXQgJFBs +YW51bmcgQCgkQmV0cm9mZmVuZSkNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgIHJldHVybiBAeyB0eXAgPSAnb2snIH0NCiAgICAgICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5k +LUVycm9yICRSZXMgIiRfIiA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgIGlmICgkTG9ja1Jlc3VsdC50eXAgLWVxICdlcnJvcicpIHsgU2VuZC1FcnJvciAk +UmVzICRMb2NrUmVzdWx0Lm1zZyAkTG9ja1Jlc3VsdC5jb2RlOyBjb250aW51ZSB9DQoNCiAgICAg +ICAgICAgICAgICBmb3JlYWNoICgkb2sgaW4gJEVyZm9sZ3JlaWNoKSB7DQogICAgICAgICAgICAg +ICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3plbGxlLmdlYWVuZGVydCcgQHsNCiAgICAgICAgICAg +ICAgICAgICAgICAgIGRhdHVtID0gJG9rLmRhdHVtOyBwZXJzb25JZCA9ICRvay5wZXJzb25JZA0K +ICAgICAgICAgICAgICAgICAgICAgICAgYWx0ZXJXZXJ0ID0gJG9rLmFsdGVyV2VydDsgbmV1ZXJX +ZXJ0ID0gJG9rLndlcnQNCiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGxlID0gJFJvbGxlOyBv +dmVycmlkZSA9ICRmYWxzZTsgYnVsayA9ICR0cnVlDQogICAgICAgICAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICAgICAgICAgQWRkLUNoYW5nZUxvZ0VudHJ5ICd6ZWxsZScgJG9rLmRhdHVtICRv +ay5wZXJzb25JZCAkb2sud2VydCAkVXNlcm5hbWUgJFJvbGxlIEB7DQogICAgICAgICAgICAgICAg +ICAgICAgICBhbHRlcldlcnQgPSAkb2suYWx0ZXJXZXJ0OyBidWxrID0gJHRydWUNCiAgICAgICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkc3RhdHVz +Q29kZSA9IGlmICgoQCgkS29uZmxpa3RlKS5Db3VudCArIEAoJFZlcmJvdGVuKS5Db3VudCArIEAo +JEdlc3BlcnJ0KS5Db3VudCArIEAoJEZlaGxlcikuQ291bnQpIC1ndCAwKSB7IDIwNyB9IGVsc2Ug +eyAyMDAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7DQogICAgICAgICAgICAg +ICAgICAgIHN0YXR1cyAgICAgID0gJ3ZlcmFyYmVpdGV0Jw0KICAgICAgICAgICAgICAgICAgICBl +cmZvbGdyZWljaCA9IEAoJEVyZm9sZ3JlaWNoKQ0KICAgICAgICAgICAgICAgICAgICBrb25mbGlr +dGUgICA9IEAoJEtvbmZsaWt0ZSkNCiAgICAgICAgICAgICAgICAgICAgZ2VzcGVycnQgICAgPSBA +KCRHZXNwZXJydCkNCiAgICAgICAgICAgICAgICAgICAgdmVyYm90ZW4gICAgPSBAKCRWZXJib3Rl +bikNCiAgICAgICAgICAgICAgICAgICAgZmVobGVyICAgICAgPSBAKCRGZWhsZXIpDQogICAgICAg +ICAgICAgICAgICAgIHJvbGxlICAgICAgID0gJFJvbGxlDQogICAgICAgICAgICAgICAgfSAkc3Rh +dHVzQ29kZQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAg +ICAgICAgICMgS29tbWVudGFyIHNldHplbi9sb2VzY2hlbiAoUGhhc2UgQTU6IEZpbGUtTG9jayAr +IE9wdGltaXN0aWMtQ29uY3VycmVuY3kgKyBDaGFuZ2UtTG9nKQ0KICAgICAgICAgICAgaWYgKCRQ +YXRoIC1lcSAnL2FwaS9wbGFudW5nL2tvbW1lbnRhcicgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcp +IHsNCiAgICAgICAgICAgICAgICAkQm9keSA9IFJlYWQtQm9keSAkUmVxDQogICAgICAgICAgICAg +ICAgaWYgKCRudWxsIC1lcSAkQm9keSkgeyBTZW5kLUVycm9yICRSZXMgJ0FuZnJhZ2UgenUgZ3Jv +c3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRBID0gJEJvZHkgfCBDb252ZXJ0 +RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJERhdHVtID0gW3N0cmluZ10kQS5kYXR1bQ0KICAg +ICAgICAgICAgICAgICRQZXJzb25JZCA9IFtzdHJpbmddJEEucGVyc29uSWQNCiAgICAgICAgICAg +ICAgICAkVGV4dCA9IGlmICgkQS50ZXh0KSB7IChbc3RyaW5nXSRBLnRleHQpLlRyaW0oKSB9IGVs +c2UgeyAnJyB9DQogICAgICAgICAgICAgICAgJEhhdEVyd2FydGV0ID0gJEEuUFNPYmplY3QuUHJv +cGVydGllc1snZXJ3YXJ0ZXRlckFsdGVyVGV4dCddDQogICAgICAgICAgICAgICAgJEVyd2FydGV0 +ID0gaWYgKCRIYXRFcndhcnRldCkgeyBbc3RyaW5nXSRBLmVyd2FydGV0ZXJBbHRlclRleHQgfSBl +bHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgICRVc2VybmFtZSA9ICRlbnY6VVNFUk5BTUUN +CiAgICAgICAgICAgICAgICAkUm9sbGUgPSBHZXQtVXNlclJvbGxlDQoNCiAgICAgICAgICAgICAg ICAkTG9ja1Jlc3VsdCA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAg ICAgICAgICAgJExvY2tSZXN1bHQgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpzb24n IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nID0gUmVhZC1Kc29uRmlsZSAncGxh bnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkUGxhbnVu ZykgeyByZXR1cm4gQHsgdHlwID0gJ2Vycm9yJzsgY29kZSA9IDQwNDsgbXNnID0gJ3BsYW51bmcu -anNvbiBuaWNodCBnZWZ1bmRlbicgfSB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICRBbHRl -cldlcnQgPSAnJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJFBsYW51bmcuUFNP -YmplY3QuUHJvcGVydGllc1snZWludHJhZWdlJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAkUGxhbnVuZyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1l -ICdlaW50cmFlZ2UnIC1WYWx1ZSAoTmV3LU9iamVjdCBQU09iamVjdCkNCiAgICAgICAgICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRQbGFudW5nLmVp -bnRyYWVnZS5QU09iamVjdC5Qcm9wZXJ0aWVzWyREYXR1bV0pIHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAkUGxhbnVuZy5laW50cmFlZ2UgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5v -dGVQcm9wZXJ0eSAtTmFtZSAkRGF0dW0gLVZhbHVlIChOZXctT2JqZWN0IFBTT2JqZWN0KQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICBpZiAoJFBsYW51bmcuZWludHJhZWdlLiREYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRQZXJz -b25JZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEFsdGVyV2VydCA9IFtz -dHJpbmddJFBsYW51bmcuZWludHJhZWdlLiREYXR1bS4kUGVyc29uSWQNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAg -ICAgICAgICAgICAgICMgT3B0aW1pc3RpYy1Db25jdXJyZW5jeQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgaWYgKCRIYXRFcndhcnRldCAtYW5kICRFcndhcnRldCAtbmUgJEFsdGVyV2VydCkgew0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyB0eXAgPSAna29uZmxpa3QnOyBh -a3R1ZWxsID0gJEFsdGVyV2VydCB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAg -ICAgICAgICAgICAgICAgICAgICMgUGZsaWNodC1PdmVycmlkZS1DaGVjayAoUGhhc2UgQik6IGJl -c3RlaGVuZGVzIHBmbGljaHQ9dHJ1ZSBudXIgU1UvRmFjaGF1ZnNpY2h0DQogICAgICAgICAgICAg -ICAgICAgICAgICAkQWx0ZXJQZmxpY2h0ID0gJGZhbHNlDQogICAgICAgICAgICAgICAgICAgICAg -ICBpZiAoJFBsYW51bmcuUFNPYmplY3QuUHJvcGVydGllc1sncGZsaWNodCddIC1hbmQgJFBsYW51 -bmcucGZsaWNodC5QU09iamVjdC5Qcm9wZXJ0aWVzWyREYXR1bV0pIHsNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICBpZiAoJFBsYW51bmcucGZsaWNodC4kRGF0dW0uUFNPYmplY3QuUHJvcGVy -dGllc1skUGVyc29uSWRdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRBbHRl -clBmbGljaHQgPSBbYm9vbF0kUGxhbnVuZy5wZmxpY2h0LiREYXR1bS4kUGVyc29uSWQNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgICAgICAgICBpZiAoJEFsdGVyUGZsaWNodCAtYW5kIC1ub3QgJERhcmZVZWJl -cnNjaHJlaWJlbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyB0eXAg -PSAncGZsaWNodGdlc3BlcnJ0JzsgYWx0ZXJXZXJ0ID0gJEFsdGVyV2VydCB9DQogICAgICAgICAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAjIFBmbGljaHQtTkVVLVNl -dHplbjogbnVyIFNVL0ZhY2hhdWZzaWNodA0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRI -YXRQZmxpY2h0IC1hbmQgJFBmbGljaHROZXUgLWFuZCAtbm90ICREYXJmVWViZXJzY2hyZWliZW4p -IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgdHlwID0gJ3BmbGljaHRz -ZXR6dW5nVmVyYm90ZW4nIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAg -ICAgICAgICAgICAgICAgaWYgKFtzdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJFdlcnQpKSB7 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQbGFudW5nLmVpbnRyYWVnZS4kRGF0 -dW0uUFNPYmplY3QuUHJvcGVydGllc1skUGVyc29uSWRdKSB7DQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICRQbGFudW5nLmVpbnRyYWVnZS4kRGF0dW0uUFNPYmplY3QuUHJvcGVydGll -cy5SZW1vdmUoJFBlcnNvbklkKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -aWYgKCRQbGFudW5nLmVpbnRyYWVnZS4kRGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skUGVyc29u -SWRdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLmVpbnRyYWVn -ZS4kRGF0dW0uJFBlcnNvbklkID0gJFdlcnQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 -IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy5laW50cmFl -Z2UuJERhdHVtIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJFBl -cnNvbklkIC1WYWx1ZSAkV2VydA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBQZmxpY2h0 -LUZsYWcgc2VwYXJhdCB2ZXJ3YWx0ZW4NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90 -ICRQbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3BmbGljaHQnXSkgew0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICRQbGFudW5nIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJv -cGVydHkgLU5hbWUgJ3BmbGljaHQnIC1WYWx1ZSAoTmV3LU9iamVjdCBQU09iamVjdCkNCiAgICAg -ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRXZXJ0Vm9yaGFu -ZGVuID0gLW5vdCBbc3RyaW5nXTo6SXNOdWxsT3JXaGl0ZVNwYWNlKCRXZXJ0KQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgJFNvbGxTZXR6ZW4gPSAkSGF0UGZsaWNodCAtYW5kICRQZmxpY2h0TmV1 -IC1hbmQgJFdlcnRWb3JoYW5kZW4NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkU29sbFNl -dHplbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRQbGFudW5nLnBm -bGljaHQuUFNPYmplY3QuUHJvcGVydGllc1skRGF0dW1dKSB7DQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICRQbGFudW5nLnBmbGljaHQgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5v -dGVQcm9wZXJ0eSAtTmFtZSAkRGF0dW0gLVZhbHVlIChOZXctT2JqZWN0IFBTT2JqZWN0KQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBp -ZiAoJFBsYW51bmcucGZsaWNodC4kRGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skUGVyc29uSWRd -KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLnBmbGljaHQuJERh -dHVtLiRQZXJzb25JZCA9ICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl -IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcucGZsaWNodC4kRGF0 -dW0gfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAkUGVyc29uSWQg -LVZhbHVlICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgfSBlbHNlaWYgKCRIYXRQZmxpY2h0IC1vciAtbm90ICRXZXJ0Vm9yaGFuZGVu -KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQbGFudW5nLnBmbGljaHQuUFNP -YmplY3QuUHJvcGVydGllc1skRGF0dW1dKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIGlmICgkUGxhbnVuZy5wZmxpY2h0LiREYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRQZXJz -b25JZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLnBm -bGljaHQuJERhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCRQZXJzb25JZCkNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICBpZiAoQCgkUGxhbnVuZy5wZmxpY2h0LiREYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzKS5D -b3VudCAtZXEgMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51 -bmcucGZsaWNodC5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgkRGF0dW0pDQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRl -LVBsYW51bmdNaXRJbnRlZ3JpdGFldCAkUGxhbnVuZyBAKA0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgIEB7IGtpbmQgPSAnZWludHJhZWdlJzsgZGF0dW0gPSAkRGF0dW07IHBlcnNvbklkID0g -JFBlcnNvbklkIH0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQHsga2luZCA9ICdwZmxp -Y2h0JzsgICBkYXR1bSA9ICREYXR1bTsgcGVyc29uSWQgPSAkUGVyc29uSWQgfQ0KICAgICAgICAg +anNvbiBuaWNodCBnZWZ1bmRlbicgfSB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgt +bm90ICRQbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2tvbW1lbnRhcmUnXSkgew0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBO +b3RlUHJvcGVydHkgLU5hbWUgJ2tvbW1lbnRhcmUnIC1WYWx1ZSAoTmV3LU9iamVjdCBQU09iamVj +dCkNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlm +ICgtbm90ICRQbGFudW5nLmtvbW1lbnRhcmUuUFNPYmplY3QuUHJvcGVydGllc1skRGF0dW1dKSB7 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcua29tbWVudGFyZSB8IEFkZC1N +ZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICREYXR1bSAtVmFsdWUgKE5ldy1P +YmplY3QgUFNPYmplY3QpDQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAg +ICAgICAgICAgICAgICRBbHRlclRleHQgPSAnJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYg +KCRQbGFudW5nLmtvbW1lbnRhcmUuJERhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXNbJFBlcnNvbklk +XSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRBbHRlckVpbnRyYWcgPSAkUGxhbnVu +Zy5rb21tZW50YXJlLiREYXR1bS4kUGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAjIEJhY2t3YXJkLUNvbXBhdDogYWx0ZXIgRWludHJhZyBrYW5uIFN0cmluZyBPREVSIHt0ZXh0 +LCBnZWFlbmRlcnRBbSwgZ2VhZW5kZXJ0Vm9ufSBzZWluDQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgaWYgKCRBbHRlckVpbnRyYWcgLWlzIFtzdHJpbmddKSB7DQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICRBbHRlclRleHQgPSAkQWx0ZXJFaW50cmFnDQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRBbHRlckVpbnRyYWcuUFNPYmplY3QuUHJvcGVydGll +c1sndGV4dCddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRBbHRlclRleHQg +PSBbc3RyaW5nXSRBbHRlckVpbnRyYWcudGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlm +ICgkSGF0RXJ3YXJ0ZXQgLWFuZCAkRXJ3YXJ0ZXQgLW5lICRBbHRlclRleHQpIHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgdHlwID0gJ2tvbmZsaWt0JzsgYWt0dWVsbCA9 +ICRBbHRlclRleHQgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAg +ICAgICAgICAgICBpZiAoJFRleHQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTmV1 +T2JqID0gW1BTQ3VzdG9tT2JqZWN0XUB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +IHRleHQgICAgICAgICA9ICRUZXh0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdl +YWVuZGVydEFtICA9IChHZXQtRGF0ZSAtRm9ybWF0ICd5eXl5LU1NLWRkIEhIOm1tOnNzJykNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VhZW5kZXJ0Vm9uID0gKEdldC1Ba3R1ZWxs +ZXJCZW51dHplcikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgaWYgKCRQbGFudW5nLmtvbW1lbnRhcmUuJERhdHVtLlBTT2JqZWN0LlBy +b3BlcnRpZXNbJFBlcnNvbklkXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk +UGxhbnVuZy5rb21tZW50YXJlLiREYXR1bS4kUGVyc29uSWQgPSAkTmV1T2JqDQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgJFBsYW51bmcua29tbWVudGFyZS4kRGF0dW0gfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5v +dGVQcm9wZXJ0eSAtTmFtZSAkUGVyc29uSWQgLVZhbHVlICROZXVPYmoNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIGlmICgkUGxhbnVuZy5rb21tZW50YXJlLiREYXR1bS5QU09i +amVjdC5Qcm9wZXJ0aWVzWyRQZXJzb25JZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgJFBsYW51bmcua29tbWVudGFyZS4kRGF0dW0uUFNPYmplY3QuUHJvcGVydGllcy5SZW1v +dmUoJFBlcnNvbklkKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg +ICAgICAgICAgICAgICAgICBpZiAoQCgkUGxhbnVuZy5rb21tZW50YXJlLiREYXR1bS5QU09iamVj +dC5Qcm9wZXJ0aWVzKS5Db3VudCAtZXEgMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAkUGxhbnVuZy5rb21tZW50YXJlLlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCREYXR1 +bSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1QbGFudW5nTWl0SW50ZWdyaXRhZXQg +JFBsYW51bmcgQCgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAeyBraW5kID0gJ2tvbW1l +bnRhcmUnOyBkYXR1bSA9ICREYXR1bTsgcGVyc29uSWQgPSAkUGVyc29uSWQgfQ0KICAgICAgICAg ICAgICAgICAgICAgICAgKQ0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHR5cCA9 -ICdvayc7IGFsdGVyV2VydCA9ICRBbHRlcldlcnQ7IGFsdGVyUGZsaWNodCA9ICRBbHRlclBmbGlj -aHQ7IHBsYW51bmcgPSAkUGxhbnVuZyB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzICIk -XyIgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlm -ICgkTG9ja1Jlc3VsdC50eXAgLWVxICdlcnJvcicpIHsgU2VuZC1FcnJvciAkUmVzICRMb2NrUmVz -dWx0Lm1zZyAkTG9ja1Jlc3VsdC5jb2RlOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgaWYg -KCRMb2NrUmVzdWx0LnR5cCAtZXEgJ2tvbmZsaWt0Jykgew0KICAgICAgICAgICAgICAgICAgICBT -ZW5kLUpzb24gJFJlcyBAew0KICAgICAgICAgICAgICAgICAgICAgICAgZmVobGVyICAgICAgICA9 -ICdrb25mbGlrdCcNCiAgICAgICAgICAgICAgICAgICAgICAgIG1lbGR1bmcgICAgICAgPSAnRGll -c2UgWmVsbGUgd3VyZGUgaW56d2lzY2hlbiBnZWFlbmRlcnQuJw0KICAgICAgICAgICAgICAgICAg -ICAgICAgYWt0dWVsbGVyV2VydCA9ICRMb2NrUmVzdWx0LmFrdHVlbGwNCiAgICAgICAgICAgICAg -ICAgICAgfSA0MDkNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgaWYgKCRMb2NrUmVzdWx0LnR5cCAtZXEgJ3BmbGljaHRnZXNw -ZXJydCcpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsNCiAgICAgICAg -ICAgICAgICAgICAgICAgIGZlaGxlciAgICAgICAgPSAncGZsaWNodGdlc3BlcnJ0Jw0KICAgICAg -ICAgICAgICAgICAgICAgICAgbWVsZHVuZyAgICAgICA9ICdEaWVzZSBaZWxsZSBpc3QgYWxzIFBm -bGljaHQtU2V0enVuZyBtYXJraWVydC4gTnVyIEZhY2hhdWZzaWNodC9TdXBlclVzZXIgZGFyZiBz -aWUgYWVuZGVybi4nDQogICAgICAgICAgICAgICAgICAgICAgICBha3R1ZWxsZXJXZXJ0ID0gJExv -Y2tSZXN1bHQuYWx0ZXJXZXJ0DQogICAgICAgICAgICAgICAgICAgIH0gNDAzDQogICAgICAgICAg -ICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlm -ICgkTG9ja1Jlc3VsdC50eXAgLWVxICdwZmxpY2h0c2V0enVuZ1ZlcmJvdGVuJykgew0KICAgICAg -ICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAew0KICAgICAgICAgICAgICAgICAgICAgICAg -ZmVobGVyICA9ICdwZmxpY2h0c2V0enVuZ1ZlcmJvdGVuJw0KICAgICAgICAgICAgICAgICAgICAg -ICAgbWVsZHVuZyA9ICdQZmxpY2h0LVNldHp1bmdlbiBrb2VubmVuIG51ciBGYWNoYXVmc2ljaHQv -U3VwZXJVc2VyIHZvcm5laG1lbi4nDQogICAgICAgICAgICAgICAgICAgIH0gNDAzDQogICAgICAg -ICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAg -ICAgJEFsdGVyV2VydCAgICA9ICRMb2NrUmVzdWx0LmFsdGVyV2VydA0KICAgICAgICAgICAgICAg -ICRBbHRlclBmbGljaHQgPSAkTG9ja1Jlc3VsdC5hbHRlclBmbGljaHQNCiAgICAgICAgICAgICAg -ICAkUGxhbnVuZyAgICAgID0gJExvY2tSZXN1bHQucGxhbnVuZw0KICAgICAgICAgICAgICAgICRJ -c3RPdmVycmlkZSAgPSAoJEFsdGVyUGZsaWNodCAtYW5kICREYXJmVWViZXJzY2hyZWliZW4pIC1v -ciBgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgkbnVsbCAtbmUgJEV4aXN0aW5n -TG9jayAtYW5kIC1ub3QgKCRFeGlzdGluZ0xvY2sudXNlcm5hbWUgLWllcSAkVXNlcm5hbWUpIC1h -bmQgJERhcmZVZWJlcnNjaHJlaWJlbikNCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFn -ICd6ZWxsZS5nZWFlbmRlcnQnIEB7DQogICAgICAgICAgICAgICAgICAgIGRhdHVtICAgICA9ICRE -YXR1bQ0KICAgICAgICAgICAgICAgICAgICBwZXJzb25JZCAgPSAkUGVyc29uSWQNCiAgICAgICAg -ICAgICAgICAgICAgYWx0ZXJXZXJ0ID0gJEFsdGVyV2VydA0KICAgICAgICAgICAgICAgICAgICBu -ZXVlcldlcnQgPSAkV2VydA0KICAgICAgICAgICAgICAgICAgICBwZmxpY2h0ICAgPSBpZiAoJEhh -dFBmbGljaHQpIHsgJFBmbGljaHROZXUgfSBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAg -ICAgICByb2xsZSAgICAgPSAkUm9sbGUNCiAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGUgID0g -JElzdE92ZXJyaWRlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIEFkZC1DaGFu -Z2VMb2dFbnRyeSAnemVsbGUnICREYXR1bSAkUGVyc29uSWQgJFdlcnQgJFVzZXJuYW1lICRSb2xs -ZSBAew0KICAgICAgICAgICAgICAgICAgICBhbHRlcldlcnQgPSAkQWx0ZXJXZXJ0DQogICAgICAg -ICAgICAgICAgICAgIHBmbGljaHQgICA9IGlmICgkSGF0UGZsaWNodCkgeyAkUGZsaWNodE5ldSB9 -IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlICA9ICRJc3RPdmVy -cmlkZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoJEFsdGVyV2VydCAt -bmUgJFdlcnQpIHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsgTm90aWZ5LUFlbmRlcnVuZyAk -UGxhbnVuZyAkUGVyc29uSWQgJERhdHVtICRBbHRlcldlcnQgJFdlcnQgfSBjYXRjaCB7IERlYnVn -LUxvZyAnTUFJTCcgIkZlaGxlcjogJF8iIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgU2VuZC1Kc29uICRSZXMgQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JzsgYWx0ZXJXZXJ0 -ID0gJEFsdGVyV2VydDsgcm9sbGUgPSAkUm9sbGU7IG92ZXJyaWRlID0gJElzdE92ZXJyaWRlIH0N -CiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAj -IEZMRDogRFNNLVRvZ2dsZSAoUGhhc2UgQTU6IEZpbGUtTG9jayArIENoYW5nZS1Mb2cpDQogICAg -ICAgICAgICAjIFdhciBpbiBzZXJ2ZXIucHMxIGJpc2hlciBnYXIgbmljaHQgdm9yaGFuZGVuIC0g -bnVyIHNlcnZlci5weSBoYXR0ZSBlcy4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkv -cGxhbnVuZy9kc20nIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAg +ICdvayc7IGFsdGVyVGV4dCA9ICRBbHRlclRleHQgfQ0KICAgICAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3Ig +JFJlcyAiJF8iIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAg +ICAgICBpZiAoJExvY2tSZXN1bHQudHlwIC1lcSAnZXJyb3InKSB7IFNlbmQtRXJyb3IgJFJlcyAk +TG9ja1Jlc3VsdC5tc2cgJExvY2tSZXN1bHQuY29kZTsgY29udGludWUgfQ0KICAgICAgICAgICAg +ICAgIGlmICgkTG9ja1Jlc3VsdC50eXAgLWVxICdrb25mbGlrdCcpIHsNCiAgICAgICAgICAgICAg +ICAgICAgU2VuZC1Kc29uICRSZXMgQHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZlaGxlciAg +ICAgICAgID0gJ2tvbmZsaWt0Jw0KICAgICAgICAgICAgICAgICAgICAgICAgbWVsZHVuZyAgICAg +ICAgPSAnS29tbWVudGFyIHd1cmRlIGluendpc2NoZW4gZ2VhZW5kZXJ0LicNCiAgICAgICAgICAg +ICAgICAgICAgICAgIGFrdHVlbGxlclRleHQgID0gJExvY2tSZXN1bHQuYWt0dWVsbA0KICAgICAg +ICAgICAgICAgICAgICB9IDQwOQ0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAg +ICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICRLdXJ6ID0gaWYgKCRUZXh0Lkxlbmd0aCAt +Z3QgMTAwKSB7ICRUZXh0LlN1YnN0cmluZygwLCAxMDApIH0gZWxzZSB7ICRUZXh0IH0NCiAgICAg +ICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdrb21tZW50YXIuZ2VhZW5kZXJ0JyBAew0KICAg +ICAgICAgICAgICAgICAgICBkYXR1bSAgICA9ICREYXR1bQ0KICAgICAgICAgICAgICAgICAgICBw +ZXJzb25JZCA9ICRQZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICB0ZXh0ICAgICA9ICRLdXJ6 +DQogICAgICAgICAgICAgICAgICAgIHJvbGxlICAgID0gJFJvbGxlDQogICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgIEFkZC1DaGFuZ2VMb2dFbnRyeSAna29tbWVudGFyJyAkRGF0dW0g +JFBlcnNvbklkICRUZXh0ICRVc2VybmFtZSAkUm9sbGUgQHsNCiAgICAgICAgICAgICAgICAgICAg +YWx0ZXJUZXh0ID0gJExvY2tSZXN1bHQuYWx0ZXJUZXh0DQogICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfQ0K +ICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMg +PT09PT09PT09PT09PT09PT09PT09IEJBQ0tVUFMgPT09PT09PT09PT09PT09PT09PT09DQogICAg +ICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvYmFja3VwcycgLWFuZCAkTWV0aG9k +IC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFkbWluKSkg +eyBTZW5kLUVycm9yICRSZXMgJ0tlaW5lIEJlcmVjaHRpZ3VuZycgNDAzOyBjb250aW51ZSB9DQog +ICAgICAgICAgICAgICAgJEVpbnRyYWVnZSA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25z +LkFycmF5TGlzdA0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRGIGluIEdldC1DaGlsZEl0ZW0g +LVBhdGggJERhdGFEaXIgLUZpbHRlciAncGxhbnVuZ19iYWNrdXBfKi5qc29uJyAtRmlsZSkgew0K +ICAgICAgICAgICAgICAgICAgICAkTmFtZSA9ICRGLk5hbWUNCiAgICAgICAgICAgICAgICAgICAg +JFR5cCA9IGlmICgkTmFtZSAtbGlrZSAnKmJhY2t1cF92b3JfZHVtbXlfKicpIHsgJ3ZvciBEdW1t +eWRhdGVuJyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYgKCROYW1lIC1saWtl +ICcqYmFja3VwX3Zvcl9yZXNldF8qJykgeyAndm9yIFJlc2V0JyB9DQogICAgICAgICAgICAgICAg +ICAgICAgICAgICBlbHNlaWYgKCROYW1lIC1saWtlICcqYmFja3VwX3Zvcl93aWVkZXJoZXJzdGVs +bHVuZ18qJykgeyAndm9yIFdpZWRlcmhlcnN0ZWxsdW5nJyB9DQogICAgICAgICAgICAgICAgICAg +ICAgICAgICBlbHNlIHsgJ21hbnVlbGwnIH0NCiAgICAgICAgICAgICAgICAgICAgW3ZvaWRdJEVp +bnRyYWVnZS5BZGQoW29yZGVyZWRdQHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVpbmFt +ZSAgPSAkTmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgZ3JvZXNzZSAgICA9ICRGLkxlbmd0 +aA0KICAgICAgICAgICAgICAgICAgICAgICAgZXJzdGVsbHRBbSA9ICRGLkxhc3RXcml0ZVRpbWUu +VG9TdHJpbmcoJ3l5eXktTU0tZGRUSEg6bW06c3MuZmZmZmZmZicpDQogICAgICAgICAgICAgICAg +ICAgICAgICB0eXAgICAgICAgID0gJFR5cA0KICAgICAgICAgICAgICAgICAgICB9KQ0KICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkU29ydGllcnQgPSBAKCRFaW50cmFlZ2UgfCBT +b3J0LU9iamVjdCAtUHJvcGVydHkgZXJzdGVsbHRBbSAtRGVzY2VuZGluZykNCiAgICAgICAgICAg +ICAgICAkSnNvbiA9IENvbnZlcnRUby1Kc29uIC1JbnB1dE9iamVjdCBAKCRTb3J0aWVydCkgLURl +cHRoIDUgLUNvbXByZXNzDQogICAgICAgICAgICAgICAgU2VuZC1Kc29uUmF3ICRSZXMgJEpzb24N +CiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBp +ZiAoJFBhdGggLWxpa2UgJy9hcGkvcGxhbnVuZy9iYWNrdXAvZG93bmxvYWQvKicgLWFuZCAkTWV0 +aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFkbWlu +KSkgeyBTZW5kLUVycm9yICRSZXMgJ0tlaW5lIEJlcmVjaHRpZ3VuZycgNDAzOyBjb250aW51ZSB9 +DQogICAgICAgICAgICAgICAgJE5hbWUgPSBbU3lzdGVtLldlYi5IdHRwVXRpbGl0eV06OlVybERl +Y29kZSgkUGF0aC5TdWJzdHJpbmcoJy9hcGkvcGxhbnVuZy9iYWNrdXAvZG93bmxvYWQvJy5MZW5n +dGgpKQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICgkTmFtZS5TdGFydHNXaXRoKCdwbGFudW5n +X2JhY2t1cF8nKSAtYW5kICROYW1lLkVuZHNXaXRoKCcuanNvbicpKSAtb3IgJE5hbWUuQ29udGFp +bnMoJy8nKSAtb3IgJE5hbWUuQ29udGFpbnMoJ1wnKSAtb3IgJE5hbWUuQ29udGFpbnMoJy4uJykp +IHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzICdVbmd1ZWx0aWdlciBEYXRl +aW5hbWUnIDQwMDsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg +JEZQYXRoID0gSm9pbi1QYXRoICREYXRhRGlyICROYW1lDQogICAgICAgICAgICAgICAgaWYgKC1u +b3QgKFRlc3QtUGF0aCAkRlBhdGgpKSB7IFNlbmQtRXJyb3IgJFJlcyAnQmFja3VwIG5pY2h0IGdl +ZnVuZGVuJyA0MDQ7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBTZW5kLUZpbGVBdHRhY2ht +ZW50ICRSZXMgJEZQYXRoICROYW1lDQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAg +ICAgIH0NCg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL2JhY2t1cCcg +LWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVz +dC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzICdLZWluZSBCZXJlY2h0aWd1bmcnIDQwMzsg +Y29udGludWUgfQ0KICAgICAgICAgICAgICAgICRQbGFudW5nUGF0aCA9IEpvaW4tUGF0aCAkRGF0 +YURpciAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LVBhdGgg +JFBsYW51bmdQYXRoKSkgeyBTZW5kLUVycm9yICRSZXMgJ3BsYW51bmcuanNvbiBuaWNodCBnZWZ1 +bmRlbicgNDA0OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJFRzID0gR2V0LURhdGUgLUZv +cm1hdCAneXl5eU1NZGRfSEhtbXNzJw0KICAgICAgICAgICAgICAgICRCYWNrdXBOYW1lID0gInBs +YW51bmdfYmFja3VwXyRUcy5qc29uIg0KICAgICAgICAgICAgICAgIENvcHktSXRlbSAtUGF0aCAk +UGxhbnVuZ1BhdGggLURlc3RpbmF0aW9uIChKb2luLVBhdGggJERhdGFEaXIgJEJhY2t1cE5hbWUp +IC1Gb3JjZQ0KICAgICAgICAgICAgICAgIEludm9rZS1CYWNrdXBSb3RhdGlvbiAncGxhbnVuZ19i +YWNrdXBfKi5qc29uJyAyMCAgIyBQaGFzZSBEMzogbWF4IDIwIGJlaGFsdGVuDQogICAgICAgICAg +ICAgICAgV3JpdGUtTG9nRWludHJhZyAnYmFja3VwLmVyc3RlbGx0JyBAeyBkYXRlaW5hbWUgPSAk +QmFja3VwTmFtZSB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsgc3RhdHVzID0g +J2Vyc3RlbGx0JzsgZGF0ZWluYW1lID0gJEJhY2t1cE5hbWUgfQ0KICAgICAgICAgICAgICAgIGNv +bnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkv +cGxhbnVuZy9iYWNrdXAvd2llZGVyaGVyc3RlbGxlbicgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcp +IHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJv +ciAkUmVzICdLZWluZSBCZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAg +ICAgICRCb2R5ID0gUmVhZC1Cb2R5ICRSZXENCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVx +ICRCb2R5KSB7IFNlbmQtRXJyb3IgJFJlcyAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51 +ZSB9DQogICAgICAgICAgICAgICAgJERhdGVuID0gJEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQog +ICAgICAgICAgICAgICAgJE5hbWUgPSBbc3RyaW5nXSREYXRlbi5kYXRlaW5hbWUNCiAgICAgICAg +ICAgICAgICBpZiAoLW5vdCAoJE5hbWUuU3RhcnRzV2l0aCgncGxhbnVuZ19iYWNrdXBfJykgLWFu +ZCAkTmFtZS5FbmRzV2l0aCgnLmpzb24nKSkgLW9yICROYW1lLkNvbnRhaW5zKCcvJykgLW9yICRO +YW1lLkNvbnRhaW5zKCdcJykgLW9yICROYW1lLkNvbnRhaW5zKCcuLicpKSB7DQogICAgICAgICAg +ICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAnVW5ndWVsdGlnZXIgRGF0ZWluYW1lJyA0MDA7IGNv +bnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRRdWVsbFBhdGggPSBK +b2luLVBhdGggJERhdGFEaXIgJE5hbWUNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Q +YXRoICRRdWVsbFBhdGgpKSB7IFNlbmQtRXJyb3IgJFJlcyAnQmFja3VwIG5pY2h0IGdlZnVuZGVu +JyA0MDQ7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkUGxhbnVuZ1BhdGggPSBKb2luLVBh +dGggJERhdGFEaXIgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAkVHMgPSBHZXQtRGF0 +ZSAtRm9ybWF0ICd5eXl5TU1kZF9ISG1tc3MnDQogICAgICAgICAgICAgICAgJFNpY2hlck5hbWUg +PSAicGxhbnVuZ19iYWNrdXBfdm9yX3dpZWRlcmhlcnN0ZWxsdW5nXyRUcy5qc29uIg0KICAgICAg +ICAgICAgICAgIGlmIChUZXN0LVBhdGggJFBsYW51bmdQYXRoKSB7DQogICAgICAgICAgICAgICAg +ICAgIENvcHktSXRlbSAtUGF0aCAkUGxhbnVuZ1BhdGggLURlc3RpbmF0aW9uIChKb2luLVBhdGgg +JERhdGFEaXIgJFNpY2hlck5hbWUpIC1Gb3JjZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICBDb3B5LUl0ZW0gLVBhdGggJFF1ZWxsUGF0aCAtRGVzdGluYXRpb24gJFBsYW51bmdQ +YXRoIC1Gb3JjZQ0KICAgICAgICAgICAgICAgIEludm9rZS1CYWNrdXBSb3RhdGlvbiAncGxhbnVu +Z19iYWNrdXBfKi5qc29uJyAyMA0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2Jh +Y2t1cC53aWVkZXJoZXJnZXN0ZWxsdCcgQHsgcXVlbGxlID0gJE5hbWU7IHNpY2hlcnVuZyA9ICRT +aWNoZXJOYW1lIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAeyBzdGF0dXMgPSAn +d2llZGVyaGVyZ2VzdGVsbHQnOyBzaWNoZXJ1bmcgPSAkU2ljaGVyTmFtZSB9DQogICAgICAgICAg +ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1l +cSAnL2FwaS9wbGFudW5nL2JhY2t1cC9sb2VzY2hlbicgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcp +IHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJv +ciAkUmVzICdLZWluZSBCZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAg +ICAgICRCb2R5ID0gUmVhZC1Cb2R5ICRSZXENCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVx +ICRCb2R5KSB7IFNlbmQtRXJyb3IgJFJlcyAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51 +ZSB9DQogICAgICAgICAgICAgICAgJERhdGVuID0gJEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQog +ICAgICAgICAgICAgICAgJE5hbWUgPSBbc3RyaW5nXSREYXRlbi5kYXRlaW5hbWUNCiAgICAgICAg +ICAgICAgICBpZiAoLW5vdCAoJE5hbWUuU3RhcnRzV2l0aCgncGxhbnVuZ19iYWNrdXBfJykgLWFu +ZCAkTmFtZS5FbmRzV2l0aCgnLmpzb24nKSkgLW9yICROYW1lLkNvbnRhaW5zKCcvJykgLW9yICRO +YW1lLkNvbnRhaW5zKCdcJykgLW9yICROYW1lLkNvbnRhaW5zKCcuLicpKSB7DQogICAgICAgICAg +ICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAnVW5ndWVsdGlnZXIgRGF0ZWluYW1lJyA0MDA7IGNv +bnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRGUGF0aCA9IEpvaW4t +UGF0aCAkRGF0YURpciAkTmFtZQ0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LVBhdGgg +JEZQYXRoKSkgeyBTZW5kLUVycm9yICRSZXMgJ0JhY2t1cCBuaWNodCBnZWZ1bmRlbicgNDA0OyBj +b250aW51ZSB9DQogICAgICAgICAgICAgICAgUmVtb3ZlLUl0ZW0gLVBhdGggJEZQYXRoIC1Gb3Jj +ZQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2JhY2t1cC5nZWxvZXNjaHQnIEB7 +IGRhdGVpbmFtZSA9ICROYW1lIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAeyBz +dGF0dXMgPSAnZ2Vsb2VzY2h0JyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAg +ICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT0gUEVSU09ORU4gPT09 +PT09PT09PT09PT09PT09PT09DQoNCiAgICAgICAgICAgICMgUGVyc29uIGFubGVnZW4NCiAgICAg +ICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGVyc29uZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BP +U1QnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQt +RXJyb3IgJFJlcyAnS2VpbmUgQmVyZWNodGlndW5nJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAg +ICAgICAgICAkQm9keSA9IFJlYWQtQm9keSAkUmVxDQogICAgICAgICAgICAgICAgJE5ldSA9ICRC +b2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRQbGFudW5nID0gUmVhZC1K +c29uRmlsZSAncGxhbnVuZy5qc29uJw0KDQogICAgICAgICAgICAgICAgJEFsbGUgPSBAKEdldC1Q +ZXJzb25lbkFycmF5ICRQbGFudW5nKQ0KICAgICAgICAgICAgICAgICRNYXhJZCA9IDANCiAgICAg +ICAgICAgICAgICBmb3JlYWNoICgkUCBpbiAkQWxsZSkgeyBpZiAoW2ludF0kUC5pZCAtZ3QgJE1h +eElkKSB7ICRNYXhJZCA9IFtpbnRdJFAuaWQgfSB9DQogICAgICAgICAgICAgICAgJE5ldWVJZCA9 +ICRNYXhJZCArIDENCg0KICAgICAgICAgICAgICAgICMgRWlucmVpaGVuOiB2b3IvbmFjaC91bnRl +bg0KICAgICAgICAgICAgICAgICRFaW5yZWloZW4gPSBpZiAoJE5ldS5laW5yZWloZW4pIHsgKFtz +dHJpbmddJE5ldS5laW5yZWloZW4pLlRvTG93ZXIoKSB9IGVsc2UgeyAndW50ZW4nIH0NCiAgICAg +ICAgICAgICAgICAkUmVmSWQgPSAkTmV1LnJlZmVyZW56SWQNCiAgICAgICAgICAgICAgICAkWmll +bFBvcyA9ICRudWxsDQoNCiAgICAgICAgICAgICAgICAkQWxsZVNvcnRpZXJ0ID0gQCgkQWxsZSB8 +IFNvcnQtT2JqZWN0IC1Qcm9wZXJ0eSBAe0V4cHJlc3Npb249e1tpbnRdKCRfLnBvc2l0aW9uKX07 +IEFzY2VuZGluZz0kdHJ1ZX0pDQoNCiAgICAgICAgICAgICAgICBpZiAoKCRFaW5yZWloZW4gLWVx +ICd2b3InIC1vciAkRWlucmVpaGVuIC1lcSAnbmFjaCcpIC1hbmQgJG51bGwgLW5lICRSZWZJZCkg +ew0KICAgICAgICAgICAgICAgICAgICAkUmVmUG9zID0gJG51bGwNCiAgICAgICAgICAgICAgICAg +ICAgZm9yZWFjaCAoJFAgaW4gJEFsbGVTb3J0aWVydCkgew0KICAgICAgICAgICAgICAgICAgICAg +ICAgaWYgKFtpbnRdJFAuaWQgLWVxIFtpbnRdJFJlZklkKSB7ICRSZWZQb3MgPSBbaW50XSRQLnBv +c2l0aW9uOyBicmVhayB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAg +ICAgaWYgKCRudWxsIC1uZSAkUmVmUG9zKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkWmll +bFBvcyA9IGlmICgkRWlucmVpaGVuIC1lcSAndm9yJykgeyAkUmVmUG9zIH0gZWxzZSB7ICRSZWZQ +b3MgKyAxIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRQIGluICRBbGxlU29y +dGllcnQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoW2ludF0kUC5wb3NpdGlv +biAtZ2UgJFppZWxQb3MpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFAucG9z +aXRpb24gPSBbaW50XSRQLnBvc2l0aW9uICsgMQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRaaWVsUG9zKSB7 +DQogICAgICAgICAgICAgICAgICAgICRNYXhQb3MgPSAwDQogICAgICAgICAgICAgICAgICAgIGZv +cmVhY2ggKCRQIGluICRBbGxlKSB7IGlmIChbaW50XSRQLnBvc2l0aW9uIC1ndCAkTWF4UG9zKSB7 +ICRNYXhQb3MgPSBbaW50XSRQLnBvc2l0aW9uIH0gfQ0KICAgICAgICAgICAgICAgICAgICAkWmll +bFBvcyA9ICRNYXhQb3MgKyAxDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAg +IyBBdWRpdC1JdGVyLUI6IG5hY2huYW1lIGlzdCBTb3VyY2Utb2YtVHJ1dGgsIG5hbWUgbnVyIEJh +Y2t3YXJkLUNvbXBhdC1GYWxsYmFjay4NCiAgICAgICAgICAgICAgICAkTmFjaG5hbWVOZXUgPSBp +ZiAoJE5ldS5QU09iamVjdC5Qcm9wZXJ0aWVzWyduYWNobmFtZSddIC1hbmQgLW5vdCBbc3RyaW5n +XTo6SXNOdWxsT3JXaGl0ZVNwYWNlKFtzdHJpbmddJE5ldS5uYWNobmFtZSkpIHsNCiAgICAgICAg +ICAgICAgICAgICAgW3N0cmluZ10kTmV1Lm5hY2huYW1lDQogICAgICAgICAgICAgICAgfSBlbHNl +aWYgKCROZXUuUFNPYmplY3QuUHJvcGVydGllc1snbmFtZSddKSB7DQogICAgICAgICAgICAgICAg +ICAgIFtzdHJpbmddJE5ldS5uYW1lDQogICAgICAgICAgICAgICAgfSBlbHNlIHsgJycgfQ0KDQog +ICAgICAgICAgICAgICAgJFBlcnNvbiA9IFtQU0N1c3RvbU9iamVjdF1Aew0KICAgICAgICAgICAg +ICAgICAgICBpZCAgICAgICAgICAgPSAkTmV1ZUlkDQogICAgICAgICAgICAgICAgICAgIGFrdGl2 +ICAgICAgICA9IGlmICgkbnVsbCAtbmUgJE5ldS5ha3RpdikgeyBbYm9vbF0kTmV1LmFrdGl2IH0g +ZWxzZSB7ICR0cnVlIH0NCiAgICAgICAgICAgICAgICAgICAgbmFjaG5hbWUgICAgID0gJE5hY2hu +YW1lTmV1DQogICAgICAgICAgICAgICAgICAgIHZvcm5hbWUgICAgICA9IGlmICgkTmV1LnZvcm5h +bWUpIHsgW3N0cmluZ10kTmV1LnZvcm5hbWUgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAg +ICAgICBkaWVuc3RncmFkICAgPSBpZiAoJE5ldS5kaWVuc3RncmFkKSB7IFtzdHJpbmddJE5ldS5k +aWVuc3RncmFkIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgZnVua3Rpb24gICAg +ID0gaWYgKCROZXUuZnVua3Rpb24pIHsgW3N0cmluZ10kTmV1LmZ1bmt0aW9uIH0gZWxzZSB7ICcn +IH0NCiAgICAgICAgICAgICAgICAgICAgb2UgICAgICAgICAgID0gaWYgKCROZXUub2UpIHsgW3N0 +cmluZ10kTmV1Lm9lIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgZGllbnN0bnVt +bWVyID0gaWYgKCROZXUuZGllbnN0bnVtbWVyKSB7IFtzdHJpbmddJE5ldS5kaWVuc3RudW1tZXIg +fSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICB0ZWxlZm9uICAgICAgPSBpZiAoJE5l +dS50ZWxlZm9uKSB7IFtzdHJpbmddJE5ldS50ZWxlZm9uIH0gZWxzZSB7ICcnIH0NCiAgICAgICAg +ICAgICAgICAgICAgcG9zaXRpb24gICAgID0gJFppZWxQb3MNCiAgICAgICAgICAgICAgICAgICAg +ZW1haWwgICAgICAgID0gaWYgKCROZXUuZW1haWwpIHsgW3N0cmluZ10kTmV1LmVtYWlsIH0gZWxz +ZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgbndLZW5udW5nICAgID0gaWYgKCROZXUubndL +ZW5udW5nKSB7IFtzdHJpbmddJE5ldS5ud0tlbm51bmcgfSBlbHNlIHsgJycgfQ0KICAgICAgICAg +ICAgICAgICAgICAjIEF1ZGl0LUZpbmRpbmcgRDE6IG9wdGlvbmFsZSBGZWxkZXIgbWl0IG51bGwt +RGVmYXVsdA0KICAgICAgICAgICAgICAgICAgICAjIHN0YXR0ICIiIChNaXJyb3Igc2VydmVyLnB5 +OjM0MDEtMzQwNSkuDQogICAgICAgICAgICAgICAgICAgIGdlYnVydHNkYXR1bSA9IGlmICgkTmV1 +LmdlYnVydHNkYXR1bSkgeyBbc3RyaW5nXSROZXUuZ2VidXJ0c2RhdHVtIH0gZWxzZSB7ICRudWxs +IH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAkUGxhbnVuZy5wZXJzb25l +biA9IEAoJEFsbGUgKyAkUGVyc29uKQ0KICAgICAgICAgICAgICAgIFdyaXRlLUpzb25GaWxlICdw +bGFudW5nLmpzb24nICRQbGFudW5nDQogICAgICAgICAgICAgICAgIyBBdXRvLVJvbGxlbi1TeW5j +IChER0wvMS5FQiAtPiBzdXBlclVzZXIsIDEuRUIgVi4gLT4gZmFjaGF1ZnNpY2h0ZW4pDQogICAg +ICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJEFkbWluID0gUmVhZC1Kc29u +RmlsZSAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgaWYgKFN5bmMtUm9sbGVuQXVz +UGVyc29uZW4gJFBsYW51bmcgJEFkbWluKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0 +ZS1Kc29uRmlsZSAnYWRtaW4uanNvbicgJEFkbWluDQogICAgICAgICAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICAgICB9IGNhdGNoIHsgV3JpdGUtV2FybmluZyAiUm9sbGVuLVN5bmMgbmFjaCBQ +ZXJzb24tQW5sYWdlIGZlaGxnZXNjaGxhZ2VuOiAkXyIgfQ0KICAgICAgICAgICAgICAgIFdyaXRl +LUxvZ0VpbnRyYWcgJ3BlcnNvbi5hbmdlbGVndCcgQHsgcGVyc29uSWQgPSAkTmV1ZUlkOyBuYWNo +bmFtZSA9ICIkKCROZXUudm9ybmFtZSkgJE5hY2huYW1lTmV1Ii5UcmltKCkgfQ0KICAgICAgICAg +ICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7IHN0YXR1cyA9ICdhbmdlbGVndCc7IGlkID0gJE5ldWVJ +ZDsgcG9zaXRpb24gPSAkWmllbFBvcyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAg +ICAgICAgIH0NCg0KICAgICAgICAgICAgIyBQZXJzb24gYWt0dWFsaXNpZXJlbg0KICAgICAgICAg +ICAgJFBlcnNvbk1hdGNoID0gW3JlZ2V4XTo6TWF0Y2goJFBhdGgsICdeL2FwaS9wZXJzb25lbi8o +XGQrKSQnKQ0KICAgICAgICAgICAgaWYgKCRQZXJzb25NYXRjaC5TdWNjZXNzIC1hbmQgJE1ldGhv +ZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikp +IHsgU2VuZC1FcnJvciAkUmVzICdLZWluZSBCZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0K +ICAgICAgICAgICAgICAgICRJZCA9IFtpbnRdJFBlcnNvbk1hdGNoLkdyb3Vwc1sxXS5WYWx1ZQ0K +ICAgICAgICAgICAgICAgICRCb2R5ID0gUmVhZC1Cb2R5ICRSZXENCiAgICAgICAgICAgICAgICAk +VXBkYXRlID0gJEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJFBsYW51 +bmcgPSBSZWFkLUpzb25GaWxlICdwbGFudW5nLmpzb24nDQoNCiAgICAgICAgICAgICAgICAjIEF1 +ZGl0LUl0ZXItQjogTGVnYWN5LW5hbWUgLT4gbmFjaG5hbWUgbWFwcGVuLCBkYW5uIG5hbWUgYXVz +IFVwZGF0ZSBlbnRmZXJuZW4NCiAgICAgICAgICAgICAgICBpZiAoJFVwZGF0ZS5QU09iamVjdC5Q +cm9wZXJ0aWVzWyduYW1lJ10gLWFuZCAtbm90ICRVcGRhdGUuUFNPYmplY3QuUHJvcGVydGllc1sn +bmFjaG5hbWUnXSkgew0KICAgICAgICAgICAgICAgICAgICAkVXBkYXRlIHwgQWRkLU1lbWJlciAt +TWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ25hY2huYW1lJyAtVmFsdWUgKFtzdHJpbmdd +JFVwZGF0ZS5uYW1lKQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoJFVw +ZGF0ZS5QU09iamVjdC5Qcm9wZXJ0aWVzWyduYW1lJ10pIHsNCiAgICAgICAgICAgICAgICAgICAg +JFVwZGF0ZS5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgnbmFtZScpDQogICAgICAgICAgICAg +ICAgfQ0KDQogICAgICAgICAgICAgICAgIyBBdWRpdC1GaW5kaW5nIEQxOiBvcHRpb25hbGUgRGF0 +dW1zLS9Ob3Rpei1GZWxkZXIgYXVmIG51bGwNCiAgICAgICAgICAgICAgICAjIG5vcm1hbGlzaWVy +ZW4gKE1pcnJvciBzZXJ2ZXIucHk6MzQzNS0zNDM4KS4NCiAgICAgICAgICAgICAgICBmb3JlYWNo +ICgkT3B0RmVsZCBpbiBAKCdnZWJ1cnRzZGF0dW0nLCdlbmREYXR1bScsJ2VyaW5uZXJ1bmdzTm90 +aXonKSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoJFVwZGF0ZS5QU09iamVjdC5Qcm9wZXJ0 +aWVzWyRPcHRGZWxkXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJFYgPSAkVXBkYXRlLigk +T3B0RmVsZCkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkViAtaXMgW3N0cmluZ10gLWFu +ZCBbc3RyaW5nXTo6SXNOdWxsT3JXaGl0ZVNwYWNlKCRWKSkgew0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICRVcGRhdGUuKCRPcHRGZWxkKSA9ICRudWxsDQogICAgICAgICAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAg +ICAgICAgICAgICAkR2VmdW5kZW4gPSAkZmFsc2UNCiAgICAgICAgICAgICAgICBmb3IgKCRpID0g +MDsgJGkgLWx0ICRQbGFudW5nLnBlcnNvbmVuLkNvdW50OyAkaSsrKSB7DQogICAgICAgICAgICAg +ICAgICAgIGlmIChbaW50XSRQbGFudW5nLnBlcnNvbmVuWyRpXS5pZCAtZXEgJElkKSB7DQogICAg +ICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkUHJvcCBpbiAkVXBkYXRlLlBTT2JqZWN0LlBy +b3BlcnRpZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFByb3AuTmFtZSAt +bmUgJ2lkJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFBsYW51bmcu +cGVyc29uZW5bJGldLlBTT2JqZWN0LlByb3BlcnRpZXNbJFByb3AuTmFtZV0pIHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLnBlcnNvbmVuWyRpXS4oJFByb3Au +TmFtZSkgPSAkUHJvcC5WYWx1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs +c2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcucGVyc29u +ZW5bJGldIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJFByb3Au +TmFtZSAtVmFsdWUgJFByb3AuVmFsdWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICMgTGVnYWN5LW5hbWUtRmVsZCBlbmRndWVsdGln +IGF1cyBQZXJzb24gZW50ZmVybmVuLCBmYWxscyBub2NoIHZvcmhhbmRlbg0KICAgICAgICAgICAg +ICAgICAgICAgICAgaWYgKCRQbGFudW5nLnBlcnNvbmVuWyRpXS5QU09iamVjdC5Qcm9wZXJ0aWVz +WyduYW1lJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTGVnYWN5TmFtZSA9IFtz +dHJpbmddJFBsYW51bmcucGVyc29uZW5bJGldLm5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICBpZiAoLW5vdCBbc3RyaW5nXTo6SXNOdWxsT3JXaGl0ZVNwYWNlKCRMZWdhY3lOYW1lKSAt +YW5kIGANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFtzdHJpbmddOjpJc051bGxP +cldoaXRlU3BhY2UoW3N0cmluZ10kUGxhbnVuZy5wZXJzb25lblskaV0ubmFjaG5hbWUpKSkgew0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFBsYW51bmcucGVyc29uZW5bJGld +LlBTT2JqZWN0LlByb3BlcnRpZXNbJ25hY2huYW1lJ10pIHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICRQbGFudW5nLnBlcnNvbmVuWyRpXS5uYWNobmFtZSA9ICRMZWdhY3lO +YW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy5wZXJzb25lblskaV0gfCBBZGQtTWVt +YmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAnbmFjaG5hbWUnIC1WYWx1ZSAkTGVn +YWN5TmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLnBl +cnNvbmVuWyRpXS5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgnbmFtZScpDQogICAgICAgICAg +ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAkR2VmdW5kZW4gPSAkdHJ1 +ZTsgYnJlYWsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICBpZiAoLW5vdCAkR2VmdW5kZW4pIHsgU2VuZC1FcnJvciAkUmVzICJQZXJzb24g +JElkIG5pY2h0IGdlZnVuZGVuIiA0MDQ7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBXcml0 +ZS1Kc29uRmlsZSAncGxhbnVuZy5qc29uJyAkUGxhbnVuZw0KICAgICAgICAgICAgICAgICMgQXV0 +by1Sb2xsZW4tU3luYyBuYWNoIEVkaXQgKEZ1bmt0aW9uIGthbm4gc2ljaCBnZWFlbmRlcnQgaGFi +ZW4pDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJEFkbWluID0g +UmVhZC1Kc29uRmlsZSAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgaWYgKFN5bmMt +Um9sbGVuQXVzUGVyc29uZW4gJFBsYW51bmcgJEFkbWluKSB7DQogICAgICAgICAgICAgICAgICAg +ICAgICBXcml0ZS1Kc29uRmlsZSAnYWRtaW4uanNvbicgJEFkbWluDQogICAgICAgICAgICAgICAg +ICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsgV3JpdGUtV2FybmluZyAiUm9sbGVuLVN5 +bmMgbmFjaCBQZXJzb24tRWRpdCBmZWhsZ2VzY2hsYWdlbjogJF8iIH0NCiAgICAgICAgICAgICAg +ICBXcml0ZS1Mb2dFaW50cmFnICdwZXJzb24uZ2VhZW5kZXJ0JyBAeyBwZXJzb25JZCA9ICRJZCB9 +DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsgc3RhdHVzID0gJ2FrdHVhbGlzaWVy +dCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAg +ICAgICMgUmVpaGVuZm9sZ2UgYWVuZGVybg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2Fw +aS9wZXJzb25lbi9yZWloZW5mb2xnZScgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAg +ICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXMgJ0tl +aW5lIEJlcmVjaHRpZ3VuZycgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJEJvZHkg +PSBSZWFkLUJvZHkgJFJlcQ0KICAgICAgICAgICAgICAgICRSZWloZW5mb2xnZSA9ICRCb2R5IHwg +Q29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRQbGFudW5nID0gUmVhZC1Kc29uRmls +ZSAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRSIGluICRSZWloZW5m +b2xnZSkgew0KICAgICAgICAgICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgLWx0ICRQbGFudW5n +LnBlcnNvbmVuLkNvdW50OyAkaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoW2lu +dF0kUGxhbnVuZy5wZXJzb25lblskaV0uaWQgLWVxIFtpbnRdJFIuaWQpIHsNCiAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAkUGxhbnVuZy5wZXJzb25lblskaV0ucG9zaXRpb24gPSBbaW50XSRS +LnBvc2l0aW9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAgICAg +ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICBXcml0ZS1Kc29uRmlsZSAncGxhbnVuZy5qc29uJyAkUGxhbnVuZw0K +ICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3BlcnNvbmVuLnJlaWhlbmZvbGdlLmdl +YWVuZGVydCcgQHt9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsgc3RhdHVzID0g +J2FrdHVhbGlzaWVydCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9 +DQoNCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IFNUQVRJU1RJSyA9PT09PT09 +PT09PT09PT09PT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvc3RhdGlzdGlr +JyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgSGFuZGxlLVN0YXRp +c3RpayAkUmVzDQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAg +ICAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT0gRFVNTVlEQVRFTiAvIFJFU0VUID09PT09 +PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5n +L2R1bW15ZGF0ZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAg aWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlcyAnS2VpbmUgQmVyZWNo -dGlndW5nJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkQm9keSA9IFJlYWQtQm9k -eSAkUmVxDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkQm9keSkgeyBTZW5kLUVycm9y -ICRSZXMgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg -ICRBID0gJEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJERhdHVtID0g -W3N0cmluZ10kQS5kYXR1bQ0KICAgICAgICAgICAgICAgICRGbGFnID0gW2Jvb2xdJEEuYWt0aXYN -CiAgICAgICAgICAgICAgICBpZiAoW3N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFjZSgkRGF0dW0p -KSB7IFNlbmQtRXJyb3IgJFJlcyAnZGF0dW0gZmVobHQnIDQwMDsgY29udGludWUgfQ0KICAgICAg -ICAgICAgICAgICRVc2VybmFtZSA9ICRlbnY6VVNFUk5BTUUNCiAgICAgICAgICAgICAgICAkUm9s -bGUgPSBHZXQtVXNlclJvbGxlDQogICAgICAgICAgICAgICAgJExvY2tSZXN1bHQgPSAkbnVsbA0K -ICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRMb2NrUmVzdWx0ID0g -SW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAgICAg -ICAgICAkUGxhbnVuZyA9IFJlYWQtSnNvbkZpbGUgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAg -ICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJFBsYW51bmcpIHsgcmV0dXJuIEB7IHR5cCA9ICdl -cnJvcic7IGNvZGUgPSA0MDQ7IG1zZyA9ICdwbGFudW5nLmpzb24gbmljaHQgZ2VmdW5kZW4nIH0g -fQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJFBsYW51bmcuUFNPYmplY3QuUHJv -cGVydGllc1snZHNtJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZyB8 -IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICdkc20nIC1WYWx1ZSAo -TmV3LU9iamVjdCBQU09iamVjdCkNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICAgICAgICAgICRBbHQgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgIGlm -ICgkUGxhbnVuZy5kc20uUFNPYmplY3QuUHJvcGVydGllc1skRGF0dW1dKSB7DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgJEFsdCA9IFtib29sXSRQbGFudW5nLmRzbS4kRGF0dW0NCiAgICAg -ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkRmxhZykg -ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkUGxhbnVuZy5kc20uUFNPYmplY3Qu -UHJvcGVydGllc1skRGF0dW1dKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQ -bGFudW5nLmRzbS4kRGF0dW0gPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g -ZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLmRzbSB8IEFk -ZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICREYXR1bSAtVmFsdWUgJHRy -dWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAg -ICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkUGxhbnVuZy5kc20u -UFNPYmplY3QuUHJvcGVydGllc1skRGF0dW1dKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICRQbGFudW5nLmRzbS5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgkRGF0dW0pDQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtUGxhbnVuZ01pdEludGVncml0YWV0ICRQbGFu -dW5nIEAoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQHsga2luZCA9ICdkc20nOyBkYXR1 -bSA9ICREYXR1bSB9DQogICAgICAgICAgICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICAg -ICAgICAgICByZXR1cm4gQHsgdHlwID0gJ29rJzsgYWx0ID0gJEFsdCB9DQogICAgICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAg -U2VuZC1FcnJvciAkUmVzICIkXyIgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAg -ICAgICAgICAgICAgICBpZiAoJExvY2tSZXN1bHQudHlwIC1lcSAnZXJyb3InKSB7IFNlbmQtRXJy -b3IgJFJlcyAkTG9ja1Jlc3VsdC5tc2cgJExvY2tSZXN1bHQuY29kZTsgY29udGludWUgfQ0KICAg -ICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2RzbS5nZWFlbmRlcnQnIEB7IGRhdHVtID0g -JERhdHVtOyBha3RpdiA9ICRGbGFnOyByb2xsZSA9ICRSb2xsZSB9DQogICAgICAgICAgICAgICAg -QWRkLUNoYW5nZUxvZ0VudHJ5ICdkc20nICREYXR1bSAkbnVsbCAoW3N0cmluZ10kRmxhZy5Ub1N0 -cmluZygpLlRvTG93ZXIoKSkgJFVzZXJuYW1lICRSb2xsZSBAew0KICAgICAgICAgICAgICAgICAg -ICBha3RpdiA9ICRGbGFnDQogICAgICAgICAgICAgICAgICAgIGFsdCAgID0gJExvY2tSZXN1bHQu -YWx0DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7 -IHN0YXR1cyA9ICdnZXNwZWljaGVydCc7IGRhdHVtID0gJERhdHVtOyBha3RpdiA9ICRGbGFnIH0N -CiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAj -ID09PT09PT09PT09PT09PT09PT09PSBaRUxMRU4tQlVMSyAoUGhhc2UgQzogQXV0b0ZpbGwtRG5E -KSA9PT09PT09PT09PT09PT09PT09PT0NCiAgICAgICAgICAgICMgUFVUIC9hcGkvcGxhbnVuZy96 -ZWxsZW4tYnVsayB7IHplbGxlbjogW3tkYXR1bSwgcGVyc29uSWQsIHdlcnQsIGVyd2FydGV0LCBs -b2NrVG9rZW4/fSwgLi4uXSB9DQogICAgICAgICAgICAjIDIwNyBNdWx0aS1TdGF0dXM6IHsgZXJm -b2xncmVpY2g6W10sIGtvbmZsaWt0ZTpbXSwgZ2VzcGVycnQ6W10sIHZlcmJvdGVuOltdLCBmZWhs -ZXI6W10gfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL3plbGxlbi1i -dWxrJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgJEJvZHkgPSBS -ZWFkLUJvZHkgJFJlcQ0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2Vu -ZC1FcnJvciAkUmVzICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAg -ICAgICAgICAkQSA9ICRCb2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgIGlm -ICgtbm90ICRBLnplbGxlbiAtb3IgQCgkQS56ZWxsZW4pLkNvdW50IC1lcSAwKSB7DQogICAgICAg -ICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAnemVsbGVuLUFycmF5IGZlaGx0IG9kZXIgbGVl -cicgNDAwOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAo -QCgkQS56ZWxsZW4pLkNvdW50IC1ndCA1MDApIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1F -cnJvciAkUmVzICdNYXhpbWFsIDUwMCBaZWxsZW4gcHJvIEJ1bGstUmVxdWVzdCcgNDEzOyBjb250 -aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkVXNlcm5hbWUgPSAkZW52 -OlVTRVJOQU1FDQogICAgICAgICAgICAgICAgJFJvbGxlID0gR2V0LVVzZXJSb2xsZQ0KICAgICAg -ICAgICAgICAgICREYXJmVWViZXIgPSBUZXN0LURhcmZVZWJlcnNjaHJlaWJlbiAkUm9sbGUNCg0K -ICAgICAgICAgICAgICAgICMgUHJlLUNoZWNrIENlbGwtTG9ja3MNCiAgICAgICAgICAgICAgICAk -R2VzcGVycnQgPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9ucy5BcnJheUxpc3QNCiAgICAg -ICAgICAgICAgICBmb3JlYWNoICgkeiBpbiAkQS56ZWxsZW4pIHsNCiAgICAgICAgICAgICAgICAg -ICAgJGQgPSBbc3RyaW5nXSR6LmRhdHVtOyAkcCA9IFtzdHJpbmddJHoucGVyc29uSWQNCiAgICAg -ICAgICAgICAgICAgICAgaWYgKC1ub3QgJGQgLW9yIC1ub3QgJHApIHsgY29udGludWUgfQ0KICAg -ICAgICAgICAgICAgICAgICAkTCA9IFJlYWQtQ2VsbExvY2sgJGQgJHANCiAgICAgICAgICAgICAg -ICAgICAgaWYgKCRudWxsIC1uZSAkTCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG93biA9 -ICgkTC51c2VybmFtZSAtaWVxICRVc2VybmFtZSkNCiAgICAgICAgICAgICAgICAgICAgICAgICR0 -b2tPayA9ICR6LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2xvY2tUb2tlbiddIC1hbmQgJEwudG9rZW4g -LWVxIFtzdHJpbmddJHoubG9ja1Rva2VuDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5v -dCAkb3duIC1hbmQgLW5vdCAkdG9rT2sgLWFuZCAtbm90ICREYXJmVWViZXIpIHsNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICBbdm9pZF0kR2VzcGVycnQuQWRkKEB7IGRhdHVtID0gJGQ7IHBl -cnNvbklkID0gJHA7IHNwZXJyZXIgPSAkTC51c2VybmFtZSB9KQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAg -ICAgICAgICAgICAgJEVyZm9sZ3JlaWNoID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMu -QXJyYXlMaXN0DQogICAgICAgICAgICAgICAgJEtvbmZsaWt0ZSAgID0gTmV3LU9iamVjdCBTeXN0 -ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0DQogICAgICAgICAgICAgICAgJFZlcmJvdGVuICAgID0g -TmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0DQogICAgICAgICAgICAgICAg -JEZlaGxlciAgICAgID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0DQoN +dGlndW5nJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBIYW5kbGUtRHVtbXlkYXRl +biAkUmVzDQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy9yZXNldCcgLWFuZCAkTWV0aG9kIC1lcSAn +UE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2Vu +ZC1FcnJvciAkUmVzICdLZWluZSBCZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0KICAgICAg +ICAgICAgICAgIEhhbmRsZS1SZXNldCAkUmVzDQogICAgICAgICAgICAgICAgY29udGludWUNCiAg +ICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT0gRkxEOiBT +Q0hJQ0hULUlNUE9SVCAoUGFzdGUtYmFzaWVydCkgPT09PT09PT09PT09PT09PT09PT09DQogICAg +ICAgICAgICAjIFNwaWVnZWwgenUgc2VydmVyLnB5IFBPU1QgL2FwaS9pbXBvcnQvc2NoaWNodGVu +L3VlYmVybmVobWVuLg0KICAgICAgICAgICAgIyBDbGllbnQgcGFyc3QgZGllIGdlcGFzdGV0ZW4g +RXhjZWwtRGF0ZW4gY2xpZW50c2VpdGlnIHVuZCBzY2hpY2t0DQogICAgICAgICAgICAjIGVpbnRy +YWVnZSArIHBmbGljaHQtRmxhZ3MgenVtIFNjaHJlaWJlbi4NCiAgICAgICAgICAgIGlmICgkUGF0 +aCAtZXEgJy9hcGkvaW1wb3J0L3NjaGljaHRlbi91ZWJlcm5laG1lbicgLWFuZCAkTWV0aG9kIC1l +cSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIp +KSB7IFNlbmQtRXJyb3IgJFJlcyAnTnVyIFN1cGVyVXNlciBkdWVyZmVuIGltcG9ydGllcmVuJyA0 +MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkQm9keSA9IFJlYWQtQm9keSAkUmVxDQog +ICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkQm9keSkgeyBTZW5kLUVycm9yICRSZXMgJ0Fu +ZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIHRyeSB7DQog +ICAgICAgICAgICAgICAgICAgICRQYXJhbSA9ICRCb2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAg +ICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRS +ZXMgJ1VuZ3VlbHRpZ2VzIEpTT04nIDQwMDsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQoN CiAgICAgICAgICAgICAgICAkTG9ja1Jlc3VsdCA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5 IHsNCiAgICAgICAgICAgICAgICAgICAgJExvY2tSZXN1bHQgPSBJbnZva2UtV2l0aEZpbGVMb2Nr ICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nID0gUmVh ZC1Kc29uRmlsZSAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRu dWxsIC1lcSAkUGxhbnVuZykgeyByZXR1cm4gQHsgdHlwID0gJ2Vycm9yJzsgY29kZSA9IDQwNDsg -bXNnID0gJ3BsYW51bmcuanNvbiBuaWNodCBnZWZ1bmRlbicgfSB9DQogICAgICAgICAgICAgICAg -ICAgICAgICBpZiAoLW5vdCAkUGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWydlaW50cmFlZ2Un -XSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nIHwgQWRkLU1lbWJlciAt -TWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ2VpbnRyYWVnZScgLVZhbHVlIChOZXctT2Jq -ZWN0IFBTT2JqZWN0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgJEFkbWluRnVlclZGID0gUmVhZC1Kc29uRmlsZSAnYWRtaW4uanNvbicNCiAgICAg -ICAgICAgICAgICAgICAgICAgICRQcnVlZmVWZXJiID0gKCRSb2xsZSAtZXEgJ3VzZXInKQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgIyBXaGl0ZWxpc3QgZ2VnZW4gYWRtaW4uc2NoaWNodGNvZGVz -IChNaXJyb3Igc2VydmVyLnB5OjMxMjAtMzEyMikNCiAgICAgICAgICAgICAgICAgICAgICAgICRW -YWxpZENvZGVzID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5IYXNoU2V0 -W3N0cmluZ10NCiAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lkXSRWYWxpZENvZGVzLkFkZCgn -JykNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJEFkbWluRnVlclZGIC1h -bmQgJEFkbWluRnVlclZGLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3NjaGljaHRjb2RlcyddKSB7DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJFNjIGluICRBZG1pbkZ1ZXJWRi5z -Y2hpY2h0Y29kZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxs -IC1uZSAkU2MgLWFuZCAkU2MuUFNPYmplY3QuUHJvcGVydGllc1snY29kZSddKSB7DQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0kVmFsaWRDb2Rlcy5BZGQoW3N0cmlu -Z10kU2MuY29kZSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICAgICAgICAgICRCZXRyb2ZmZW5lID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlv -bnMuQXJyYXlMaXN0DQogICAgICAgICAgICAgICAgICAgICAgICAkR2VzcGVycnRTZXQgPSBAe30N -CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRnIGluICRHZXNwZXJydCkgeyAkR2Vz -cGVycnRTZXRbKCRnLmRhdHVtICsgJ3wnICsgJGcucGVyc29uSWQpXSA9ICR0cnVlIH0NCiAgICAg -ICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR6IGluICRBLnplbGxlbikgew0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICRkID0gW3N0cmluZ10kei5kYXR1bTsgJHAgPSBbc3RyaW5nXSR6 -LnBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdlcnQgPSBpZiAoJHoud2Vy -dCkgeyBbc3RyaW5nXSR6LndlcnQgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICRlcndhcnRldCA9IGlmICgkei5QU09iamVjdC5Qcm9wZXJ0aWVzWydlcndhcnRldCdd -KSB7IFtzdHJpbmddJHouZXJ3YXJ0ZXQgfSBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIGlmICgtbm90ICRkIC1vciAtbm90ICRwKSB7DQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIFt2b2lkXSRGZWhsZXIuQWRkKEB7IGRhdHVtID0gJGQ7IHBlcnNvbklk -ID0gJHA7IGZlaGxlciA9ICdkYXR1bS9wZXJzb25JZCBmZWhsdCcgfSk7IGNvbnRpbnVlDQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm -ICgtbm90ICRWYWxpZENvZGVzLkNvbnRhaW5zKCR3ZXJ0KSkgew0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICBbdm9pZF0kRmVobGVyLkFkZChAeyBkYXR1bSA9ICRkOyBwZXJzb25JZCA9 -ICRwOyBmZWhsZXIgPSAiVW5iZWthbm50ZXIgU2NoaWNodGNvZGU6ICckd2VydCciIH0pOyBjb250 -aW51ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICBpZiAoJEdlc3BlcnJ0U2V0WygkZCArICd8JyArICRwKV0pIHsgY29udGludWUgfQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkUHJ1ZWZlVmVyYiAtYW5kIChUZXN0LURh -dHVtSW5WZXJiaW5kbGljaGtlaXQgJGQgJEFkbWluRnVlclZGKSkgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICBbdm9pZF0kVmVyYm90ZW4uQWRkKEB7IGRhdHVtID0gJGQ7IHBlcnNv -bklkID0gJHA7IGdydW5kID0gJ3ZlcmJpbmRsaWNoa2VpdHNmZW5zdGVyJyB9KTsgY29udGludWUN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgaWYgKC1ub3QgJFBsYW51bmcuZWludHJhZWdlLlBTT2JqZWN0LlByb3BlcnRpZXNbJGRdKSB7 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLmVpbnRyYWVnZSB8IEFk -ZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICRkIC1WYWx1ZSAoTmV3LU9i -amVjdCBQU09iamVjdCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgJGFsdCA9ICcnDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -aWYgKCRQbGFudW5nLmVpbnRyYWVnZS4kZC5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwXSkgew0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWx0ID0gW3N0cmluZ10kUGxhbnVuZy5laW50 -cmFlZ2UuJGQuJHANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkZXJ3YXJ0ZXQgLWFuZCAkZXJ3YXJ0ZXQgLW5l -ICRhbHQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZvaWRdJEtvbmZsaWt0 -ZS5BZGQoQHsgZGF0dW0gPSAkZDsgcGVyc29uSWQgPSAkcDsgYWt0dWVsbCA9ICRhbHQgfSk7IGNv -bnRpbnVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICRhbHRQZiA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm -ICgkUGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWydwZmxpY2h0J10gLWFuZCAkUGxhbnVuZy5w -ZmxpY2h0LlBTT2JqZWN0LlByb3BlcnRpZXNbJGRdKSB7DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIGlmICgkUGxhbnVuZy5wZmxpY2h0LiRkLlBTT2JqZWN0LlByb3BlcnRpZXNbJHBd -KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWx0UGYgPSBbYm9vbF0k -UGxhbnVuZy5wZmxpY2h0LiRkLiRwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgaWYgKCRhbHRQZiAtYW5kIC1ub3QgJERhcmZVZWJlcikgew0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICBbdm9pZF0kVmVyYm90ZW4uQWRkKEB7IGRhdHVtID0gJGQ7IHBlcnNvbklk -ID0gJHA7IGdydW5kID0gJ3BmbGljaHQnIH0pOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoW3N0cmluZ106Oklz -TnVsbE9yV2hpdGVTcGFjZSgkd2VydCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgaWYgKCRQbGFudW5nLmVpbnRyYWVnZS4kZC5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwXSkgew0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcuZWludHJhZWdlLiRk -LlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCRwKQ0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQbGFudW5nLmVpbnRyYWVnZS4kZC5QU09iamVj -dC5Qcm9wZXJ0aWVzWyRwXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -JFBsYW51bmcuZWludHJhZWdlLiRkLiRwID0gJHdlcnQNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQ -bGFudW5nLmVpbnRyYWVnZS4kZCB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5 -IC1OYW1lICRwIC1WYWx1ZSAkd2VydA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIFt2b2lkXSRCZXRyb2ZmZW5lLkFkZChAeyBraW5kID0gJ2VpbnRyYWVnZSc7IGRhdHVtID0g -JGQ7IHBlcnNvbklkID0gJHAgfSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0k -RXJmb2xncmVpY2guQWRkKEB7IGRhdHVtID0gJGQ7IHBlcnNvbklkID0gJHA7IHdlcnQgPSAkd2Vy -dDsgYWx0ZXJXZXJ0ID0gJGFsdCB9KQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgaWYgKEAoJEJldHJvZmZlbmUpLkNvdW50IC1ndCAwKSB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtUGxhbnVuZ01pdEludGVncml0YWV0ICRQbGFu -dW5nIEAoJEJldHJvZmZlbmUpDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgICAgICAgICByZXR1cm4gQHsgdHlwID0gJ29rJyB9DQogICAgICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1F -cnJvciAkUmVzICIkXyIgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICBpZiAoJExvY2tSZXN1bHQudHlwIC1lcSAnZXJyb3InKSB7IFNlbmQtRXJyb3IgJFJl -cyAkTG9ja1Jlc3VsdC5tc2cgJExvY2tSZXN1bHQuY29kZTsgY29udGludWUgfQ0KDQogICAgICAg -ICAgICAgICAgZm9yZWFjaCAoJG9rIGluICRFcmZvbGdyZWljaCkgew0KICAgICAgICAgICAgICAg -ICAgICBXcml0ZS1Mb2dFaW50cmFnICd6ZWxsZS5nZWFlbmRlcnQnIEB7DQogICAgICAgICAgICAg -ICAgICAgICAgICBkYXR1bSA9ICRvay5kYXR1bTsgcGVyc29uSWQgPSAkb2sucGVyc29uSWQNCiAg -ICAgICAgICAgICAgICAgICAgICAgIGFsdGVyV2VydCA9ICRvay5hbHRlcldlcnQ7IG5ldWVyV2Vy -dCA9ICRvay53ZXJ0DQogICAgICAgICAgICAgICAgICAgICAgICByb2xsZSA9ICRSb2xsZTsgb3Zl -cnJpZGUgPSAkZmFsc2U7IGJ1bGsgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgICAgIEFkZC1DaGFuZ2VMb2dFbnRyeSAnemVsbGUnICRvay5kYXR1bSAkb2su -cGVyc29uSWQgJG9rLndlcnQgJFVzZXJuYW1lICRSb2xsZSBAew0KICAgICAgICAgICAgICAgICAg -ICAgICAgYWx0ZXJXZXJ0ID0gJG9rLmFsdGVyV2VydDsgYnVsayA9ICR0cnVlDQogICAgICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHN0YXR1c0Nv -ZGUgPSBpZiAoKEAoJEtvbmZsaWt0ZSkuQ291bnQgKyBAKCRWZXJib3RlbikuQ291bnQgKyBAKCRH -ZXNwZXJydCkuQ291bnQgKyBAKCRGZWhsZXIpLkNvdW50KSAtZ3QgMCkgeyAyMDcgfSBlbHNlIHsg -MjAwIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAew0KICAgICAgICAgICAgICAg -ICAgICBzdGF0dXMgICAgICA9ICd2ZXJhcmJlaXRldCcNCiAgICAgICAgICAgICAgICAgICAgZXJm -b2xncmVpY2ggPSBAKCRFcmZvbGdyZWljaCkNCiAgICAgICAgICAgICAgICAgICAga29uZmxpa3Rl -ICAgPSBAKCRLb25mbGlrdGUpDQogICAgICAgICAgICAgICAgICAgIGdlc3BlcnJ0ICAgID0gQCgk -R2VzcGVycnQpDQogICAgICAgICAgICAgICAgICAgIHZlcmJvdGVuICAgID0gQCgkVmVyYm90ZW4p -DQogICAgICAgICAgICAgICAgICAgIGZlaGxlciAgICAgID0gQCgkRmVobGVyKQ0KICAgICAgICAg -ICAgICAgICAgICByb2xsZSAgICAgICA9ICRSb2xsZQ0KICAgICAgICAgICAgICAgIH0gJHN0YXR1 -c0NvZGUNCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAg -ICAgICAjIEtvbW1lbnRhciBzZXR6ZW4vbG9lc2NoZW4gKFBoYXNlIEE1OiBGaWxlLUxvY2sgKyBP -cHRpbWlzdGljLUNvbmN1cnJlbmN5ICsgQ2hhbmdlLUxvZykNCiAgICAgICAgICAgIGlmICgkUGF0 -aCAtZXEgJy9hcGkvcGxhbnVuZy9rb21tZW50YXInIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7 -DQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0KICAgICAgICAgICAgICAg -IGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAkUmVzICdBbmZyYWdlIHp1IGdyb3Nz -JyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkQSA9ICRCb2R5IHwgQ29udmVydEZy -b20tSnNvbg0KICAgICAgICAgICAgICAgICREYXR1bSA9IFtzdHJpbmddJEEuZGF0dW0NCiAgICAg -ICAgICAgICAgICAkUGVyc29uSWQgPSBbc3RyaW5nXSRBLnBlcnNvbklkDQogICAgICAgICAgICAg -ICAgJFRleHQgPSBpZiAoJEEudGV4dCkgeyAoW3N0cmluZ10kQS50ZXh0KS5UcmltKCkgfSBlbHNl -IHsgJycgfQ0KICAgICAgICAgICAgICAgICRIYXRFcndhcnRldCA9ICRBLlBTT2JqZWN0LlByb3Bl -cnRpZXNbJ2Vyd2FydGV0ZXJBbHRlclRleHQnXQ0KICAgICAgICAgICAgICAgICRFcndhcnRldCA9 -IGlmICgkSGF0RXJ3YXJ0ZXQpIHsgW3N0cmluZ10kQS5lcndhcnRldGVyQWx0ZXJUZXh0IH0gZWxz -ZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAkVXNlcm5hbWUgPSAkZW52OlVTRVJOQU1FDQog -ICAgICAgICAgICAgICAgJFJvbGxlID0gR2V0LVVzZXJSb2xsZQ0KDQogICAgICAgICAgICAgICAg -JExvY2tSZXN1bHQgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAg -ICAgICAgICRMb2NrUmVzdWx0ID0gSW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7 -DQogICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZyA9IFJlYWQtSnNvbkZpbGUgJ3BsYW51 -bmcuanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJFBsYW51bmcp -IHsgcmV0dXJuIEB7IHR5cCA9ICdlcnJvcic7IGNvZGUgPSA0MDQ7IG1zZyA9ICdwbGFudW5nLmpz -b24gbmljaHQgZ2VmdW5kZW4nIH0gfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5v -dCAkUGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWydrb21tZW50YXJlJ10pIHsNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90 -ZVByb3BlcnR5IC1OYW1lICdrb21tZW50YXJlJyAtVmFsdWUgKE5ldy1PYmplY3QgUFNPYmplY3Qp -DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo -LW5vdCAkUGxhbnVuZy5rb21tZW50YXJlLlBTT2JqZWN0LlByb3BlcnRpZXNbJERhdHVtXSkgew0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLmtvbW1lbnRhcmUgfCBBZGQtTWVt -YmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAkRGF0dW0gLVZhbHVlIChOZXctT2Jq -ZWN0IFBTT2JqZWN0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAg -ICAgICAgICAgICAkQWx0ZXJUZXh0ID0gJycNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk -UGxhbnVuZy5rb21tZW50YXJlLiREYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRQZXJzb25JZF0p -IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQWx0ZXJFaW50cmFnID0gJFBsYW51bmcu -a29tbWVudGFyZS4kRGF0dW0uJFBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -IyBCYWNrd2FyZC1Db21wYXQ6IGFsdGVyIEVpbnRyYWcga2FubiBTdHJpbmcgT0RFUiB7dGV4dCwg -Z2VhZW5kZXJ0QW0sIGdlYWVuZGVydFZvbn0gc2Vpbg0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIGlmICgkQWx0ZXJFaW50cmFnIC1pcyBbc3RyaW5nXSkgew0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAkQWx0ZXJUZXh0ID0gJEFsdGVyRWludHJhZw0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIH0gZWxzZWlmICgkQWx0ZXJFaW50cmFnLlBTT2JqZWN0LlByb3BlcnRpZXNb -J3RleHQnXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQWx0ZXJUZXh0ID0g -W3N0cmluZ10kQWx0ZXJFaW50cmFnLnRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo -JEhhdEVyd2FydGV0IC1hbmQgJEVyd2FydGV0IC1uZSAkQWx0ZXJUZXh0KSB7DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHR5cCA9ICdrb25mbGlrdCc7IGFrdHVlbGwgPSAk -QWx0ZXJUZXh0IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAg -ICAgICAgICAgaWYgKCRUZXh0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5ldU9i -aiA9IFtQU0N1c3RvbU9iamVjdF1Aew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 -ZXh0ICAgICAgICAgPSAkVGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZWFl -bmRlcnRBbSAgPSAoR2V0LURhdGUgLUZvcm1hdCAneXl5eS1NTS1kZCBISDptbTpzcycpDQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlYWVuZGVydFZvbiA9IChHZXQtQWt0dWVsbGVy -QmVudXR6ZXIpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIGlmICgkUGxhbnVuZy5rb21tZW50YXJlLiREYXR1bS5QU09iamVjdC5Qcm9w -ZXJ0aWVzWyRQZXJzb25JZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBs -YW51bmcua29tbWVudGFyZS4kRGF0dW0uJFBlcnNvbklkID0gJE5ldU9iag0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICRQbGFudW5nLmtvbW1lbnRhcmUuJERhdHVtIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3Rl -UHJvcGVydHkgLU5hbWUgJFBlcnNvbklkIC1WYWx1ZSAkTmV1T2JqDQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICBpZiAoJFBsYW51bmcua29tbWVudGFyZS4kRGF0dW0uUFNPYmpl -Y3QuUHJvcGVydGllc1skUGVyc29uSWRdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICRQbGFudW5nLmtvbW1lbnRhcmUuJERhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3Zl -KCRQZXJzb25JZCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgaWYgKEAoJFBsYW51bmcua29tbWVudGFyZS4kRGF0dW0uUFNPYmplY3Qu -UHJvcGVydGllcykuQ291bnQgLWVxIDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgJFBsYW51bmcua29tbWVudGFyZS5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgkRGF0dW0p -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtUGxhbnVuZ01pdEludGVncml0YWV0ICRQ -bGFudW5nIEAoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQHsga2luZCA9ICdrb21tZW50 -YXJlJzsgZGF0dW0gPSAkRGF0dW07IHBlcnNvbklkID0gJFBlcnNvbklkIH0NCiAgICAgICAgICAg -ICAgICAgICAgICAgICkNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyB0eXAgPSAn -b2snOyBhbHRlclRleHQgPSAkQWx0ZXJUZXh0IH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRS -ZXMgIiRfIiA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAg -ICAgaWYgKCRMb2NrUmVzdWx0LnR5cCAtZXEgJ2Vycm9yJykgeyBTZW5kLUVycm9yICRSZXMgJExv -Y2tSZXN1bHQubXNnICRMb2NrUmVzdWx0LmNvZGU7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAg -ICBpZiAoJExvY2tSZXN1bHQudHlwIC1lcSAna29uZmxpa3QnKSB7DQogICAgICAgICAgICAgICAg -ICAgIFNlbmQtSnNvbiAkUmVzIEB7DQogICAgICAgICAgICAgICAgICAgICAgICBmZWhsZXIgICAg -ICAgICA9ICdrb25mbGlrdCcNCiAgICAgICAgICAgICAgICAgICAgICAgIG1lbGR1bmcgICAgICAg -ID0gJ0tvbW1lbnRhciB3dXJkZSBpbnp3aXNjaGVuIGdlYWVuZGVydC4nDQogICAgICAgICAgICAg -ICAgICAgICAgICBha3R1ZWxsZXJUZXh0ICA9ICRMb2NrUmVzdWx0LmFrdHVlbGwNCiAgICAgICAg -ICAgICAgICAgICAgfSA0MDkNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAg -ICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAkS3VyeiA9IGlmICgkVGV4dC5MZW5ndGggLWd0 -IDEwMCkgeyAkVGV4dC5TdWJzdHJpbmcoMCwgMTAwKSB9IGVsc2UgeyAkVGV4dCB9DQogICAgICAg -ICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAna29tbWVudGFyLmdlYWVuZGVydCcgQHsNCiAgICAg -ICAgICAgICAgICAgICAgZGF0dW0gICAgPSAkRGF0dW0NCiAgICAgICAgICAgICAgICAgICAgcGVy -c29uSWQgPSAkUGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAgdGV4dCAgICAgPSAkS3Vyeg0K -ICAgICAgICAgICAgICAgICAgICByb2xsZSAgICA9ICRSb2xsZQ0KICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICBBZGQtQ2hhbmdlTG9nRW50cnkgJ2tvbW1lbnRhcicgJERhdHVtICRQ -ZXJzb25JZCAkVGV4dCAkVXNlcm5hbWUgJFJvbGxlIEB7DQogICAgICAgICAgICAgICAgICAgIGFs -dGVyVGV4dCA9ICRMb2NrUmVzdWx0LmFsdGVyVGV4dA0KICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAg -ICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09 -PT09PT09PT09PT09PT09PT09PSBCQUNLVVBTID09PT09PT09PT09PT09PT09PT09PQ0KICAgICAg -ICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL2JhY2t1cHMnIC1hbmQgJE1ldGhvZCAt -ZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsg -U2VuZC1FcnJvciAkUmVzICdLZWluZSBCZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0KICAg -ICAgICAgICAgICAgICRFaW50cmFlZ2UgPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9ucy5B -cnJheUxpc3QNCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkRiBpbiBHZXQtQ2hpbGRJdGVtIC1Q -YXRoICREYXRhRGlyIC1GaWx0ZXIgJ3BsYW51bmdfYmFja3VwXyouanNvbicgLUZpbGUpIHsNCiAg -ICAgICAgICAgICAgICAgICAgJE5hbWUgPSAkRi5OYW1lDQogICAgICAgICAgICAgICAgICAgICRU -eXAgPSBpZiAoJE5hbWUgLWxpa2UgJypiYWNrdXBfdm9yX2R1bW15XyonKSB7ICd2b3IgRHVtbXlk -YXRlbicgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmICgkTmFtZSAtbGlrZSAn -KmJhY2t1cF92b3JfcmVzZXRfKicpIHsgJ3ZvciBSZXNldCcgfQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgZWxzZWlmICgkTmFtZSAtbGlrZSAnKmJhY2t1cF92b3Jfd2llZGVyaGVyc3RlbGx1 -bmdfKicpIHsgJ3ZvciBXaWVkZXJoZXJzdGVsbHVuZycgfQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgZWxzZSB7ICdtYW51ZWxsJyB9DQogICAgICAgICAgICAgICAgICAgIFt2b2lkXSRFaW50 -cmFlZ2UuQWRkKFtvcmRlcmVkXUB7DQogICAgICAgICAgICAgICAgICAgICAgICBkYXRlaW5hbWUg -ID0gJE5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAgIGdyb2Vzc2UgICAgPSAkRi5MZW5ndGgN -CiAgICAgICAgICAgICAgICAgICAgICAgIGVyc3RlbGx0QW0gPSAkRi5MYXN0V3JpdGVUaW1lLlRv -U3RyaW5nKCd5eXl5LU1NLWRkVEhIOm1tOnNzLmZmZmZmZmYnKQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgdHlwICAgICAgICA9ICRUeXANCiAgICAgICAgICAgICAgICAgICAgfSkNCiAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgJFNvcnRpZXJ0ID0gQCgkRWludHJhZWdlIHwgU29y -dC1PYmplY3QgLVByb3BlcnR5IGVyc3RlbGx0QW0gLURlc2NlbmRpbmcpDQogICAgICAgICAgICAg -ICAgJEpzb24gPSBDb252ZXJ0VG8tSnNvbiAtSW5wdXRPYmplY3QgQCgkU29ydGllcnQpIC1EZXB0 -aCA1IC1Db21wcmVzcw0KICAgICAgICAgICAgICAgIFNlbmQtSnNvblJhdyAkUmVzICRKc29uDQog -ICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYg -KCRQYXRoIC1saWtlICcvYXBpL3BsYW51bmcvYmFja3VwL2Rvd25sb2FkLyonIC1hbmQgJE1ldGhv -ZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikp -IHsgU2VuZC1FcnJvciAkUmVzICdLZWluZSBCZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0K -ICAgICAgICAgICAgICAgICROYW1lID0gW1N5c3RlbS5XZWIuSHR0cFV0aWxpdHldOjpVcmxEZWNv -ZGUoJFBhdGguU3Vic3RyaW5nKCcvYXBpL3BsYW51bmcvYmFja3VwL2Rvd25sb2FkLycuTGVuZ3Ro -KSkNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoJE5hbWUuU3RhcnRzV2l0aCgncGxhbnVuZ19i -YWNrdXBfJykgLWFuZCAkTmFtZS5FbmRzV2l0aCgnLmpzb24nKSkgLW9yICROYW1lLkNvbnRhaW5z -KCcvJykgLW9yICROYW1lLkNvbnRhaW5zKCdcJykgLW9yICROYW1lLkNvbnRhaW5zKCcuLicpKSB7 -DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAnVW5ndWVsdGlnZXIgRGF0ZWlu -YW1lJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRG -UGF0aCA9IEpvaW4tUGF0aCAkRGF0YURpciAkTmFtZQ0KICAgICAgICAgICAgICAgIGlmICgtbm90 -IChUZXN0LVBhdGggJEZQYXRoKSkgeyBTZW5kLUVycm9yICRSZXMgJ0JhY2t1cCBuaWNodCBnZWZ1 -bmRlbicgNDA0OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgU2VuZC1GaWxlQXR0YWNobWVu -dCAkUmVzICRGUGF0aCAkTmFtZQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAg -ICB9DQoNCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy9iYWNrdXAnIC1h -bmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3Qt -SXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlcyAnS2VpbmUgQmVyZWNodGlndW5nJyA0MDM7IGNv -bnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkUGxhbnVuZ1BhdGggPSBKb2luLVBhdGggJERhdGFE -aXIgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1QYXRoICRQ -bGFudW5nUGF0aCkpIHsgU2VuZC1FcnJvciAkUmVzICdwbGFudW5nLmpzb24gbmljaHQgZ2VmdW5k -ZW4nIDQwNDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRUcyA9IEdldC1EYXRlIC1Gb3Jt -YXQgJ3l5eXlNTWRkX0hIbW1zcycNCiAgICAgICAgICAgICAgICAkQmFja3VwTmFtZSA9ICJwbGFu -dW5nX2JhY2t1cF8kVHMuanNvbiINCiAgICAgICAgICAgICAgICBDb3B5LUl0ZW0gLVBhdGggJFBs -YW51bmdQYXRoIC1EZXN0aW5hdGlvbiAoSm9pbi1QYXRoICREYXRhRGlyICRCYWNrdXBOYW1lKSAt -Rm9yY2UNCiAgICAgICAgICAgICAgICBJbnZva2UtQmFja3VwUm90YXRpb24gJ3BsYW51bmdfYmFj -a3VwXyouanNvbicgMjAgICMgUGhhc2UgRDM6IG1heCAyMCBiZWhhbHRlbg0KICAgICAgICAgICAg -ICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2JhY2t1cC5lcnN0ZWxsdCcgQHsgZGF0ZWluYW1lID0gJEJh -Y2t1cE5hbWUgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7IHN0YXR1cyA9ICdl -cnN0ZWxsdCc7IGRhdGVpbmFtZSA9ICRCYWNrdXBOYW1lIH0NCiAgICAgICAgICAgICAgICBjb250 -aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3Bs -YW51bmcvYmFja3VwL3dpZWRlcmhlcnN0ZWxsZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7 -DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3Ig -JFJlcyAnS2VpbmUgQmVyZWNodGlndW5nJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAg -ICAkQm9keSA9IFJlYWQtQm9keSAkUmVxDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAk -Qm9keSkgeyBTZW5kLUVycm9yICRSZXMgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUg -fQ0KICAgICAgICAgICAgICAgICREYXRlbiA9ICRCb2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAg -ICAgICAgICAgICAgICROYW1lID0gW3N0cmluZ10kRGF0ZW4uZGF0ZWluYW1lDQogICAgICAgICAg -ICAgICAgaWYgKC1ub3QgKCROYW1lLlN0YXJ0c1dpdGgoJ3BsYW51bmdfYmFja3VwXycpIC1hbmQg -JE5hbWUuRW5kc1dpdGgoJy5qc29uJykpIC1vciAkTmFtZS5Db250YWlucygnLycpIC1vciAkTmFt -ZS5Db250YWlucygnXCcpIC1vciAkTmFtZS5Db250YWlucygnLi4nKSkgew0KICAgICAgICAgICAg -ICAgICAgICBTZW5kLUVycm9yICRSZXMgJ1VuZ3VlbHRpZ2VyIERhdGVpbmFtZScgNDAwOyBjb250 -aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkUXVlbGxQYXRoID0gSm9p -bi1QYXRoICREYXRhRGlyICROYW1lDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtUGF0 -aCAkUXVlbGxQYXRoKSkgeyBTZW5kLUVycm9yICRSZXMgJ0JhY2t1cCBuaWNodCBnZWZ1bmRlbicg -NDA0OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJFBsYW51bmdQYXRoID0gSm9pbi1QYXRo -ICREYXRhRGlyICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgJFRzID0gR2V0LURhdGUg -LUZvcm1hdCAneXl5eU1NZGRfSEhtbXNzJw0KICAgICAgICAgICAgICAgICRTaWNoZXJOYW1lID0g -InBsYW51bmdfYmFja3VwX3Zvcl93aWVkZXJoZXJzdGVsbHVuZ18kVHMuanNvbiINCiAgICAgICAg -ICAgICAgICBpZiAoVGVzdC1QYXRoICRQbGFudW5nUGF0aCkgew0KICAgICAgICAgICAgICAgICAg -ICBDb3B5LUl0ZW0gLVBhdGggJFBsYW51bmdQYXRoIC1EZXN0aW5hdGlvbiAoSm9pbi1QYXRoICRE -YXRhRGlyICRTaWNoZXJOYW1lKSAtRm9yY2UNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgQ29weS1JdGVtIC1QYXRoICRRdWVsbFBhdGggLURlc3RpbmF0aW9uICRQbGFudW5nUGF0 -aCAtRm9yY2UNCiAgICAgICAgICAgICAgICBJbnZva2UtQmFja3VwUm90YXRpb24gJ3BsYW51bmdf -YmFja3VwXyouanNvbicgMjANCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdiYWNr -dXAud2llZGVyaGVyZ2VzdGVsbHQnIEB7IHF1ZWxsZSA9ICROYW1lOyBzaWNoZXJ1bmcgPSAkU2lj -aGVyTmFtZSB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsgc3RhdHVzID0gJ3dp -ZWRlcmhlcmdlc3RlbGx0Jzsgc2ljaGVydW5nID0gJFNpY2hlck5hbWUgfQ0KICAgICAgICAgICAg -ICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEg -Jy9hcGkvcGxhbnVuZy9iYWNrdXAvbG9lc2NoZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7 -DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3Ig -JFJlcyAnS2VpbmUgQmVyZWNodGlndW5nJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAg -ICAkQm9keSA9IFJlYWQtQm9keSAkUmVxDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAk -Qm9keSkgeyBTZW5kLUVycm9yICRSZXMgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUg -fQ0KICAgICAgICAgICAgICAgICREYXRlbiA9ICRCb2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAg -ICAgICAgICAgICAgICROYW1lID0gW3N0cmluZ10kRGF0ZW4uZGF0ZWluYW1lDQogICAgICAgICAg -ICAgICAgaWYgKC1ub3QgKCROYW1lLlN0YXJ0c1dpdGgoJ3BsYW51bmdfYmFja3VwXycpIC1hbmQg -JE5hbWUuRW5kc1dpdGgoJy5qc29uJykpIC1vciAkTmFtZS5Db250YWlucygnLycpIC1vciAkTmFt -ZS5Db250YWlucygnXCcpIC1vciAkTmFtZS5Db250YWlucygnLi4nKSkgew0KICAgICAgICAgICAg -ICAgICAgICBTZW5kLUVycm9yICRSZXMgJ1VuZ3VlbHRpZ2VyIERhdGVpbmFtZScgNDAwOyBjb250 -aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkRlBhdGggPSBKb2luLVBh -dGggJERhdGFEaXIgJE5hbWUNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1QYXRoICRG -UGF0aCkpIHsgU2VuZC1FcnJvciAkUmVzICdCYWNrdXAgbmljaHQgZ2VmdW5kZW4nIDQwNDsgY29u -dGludWUgfQ0KICAgICAgICAgICAgICAgIFJlbW92ZS1JdGVtIC1QYXRoICRGUGF0aCAtRm9yY2UN -CiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdiYWNrdXAuZ2Vsb2VzY2h0JyBAeyBk -YXRlaW5hbWUgPSAkTmFtZSB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsgc3Rh -dHVzID0gJ2dlbG9lc2NodCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAg -ICB9DQoNCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IFBFUlNPTkVOID09PT09 -PT09PT09PT09PT09PT09PQ0KDQogICAgICAgICAgICAjIFBlcnNvbiBhbmxlZ2VuDQogICAgICAg -ICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BlcnNvbmVuJyAtYW5kICRNZXRob2QgLWVxICdQT1NU -Jykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVy -cm9yICRSZXMgJ0tlaW5lIEJlcmVjaHRpZ3VuZycgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAg -ICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0KICAgICAgICAgICAgICAgICROZXUgPSAkQm9k -eSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkUGxhbnVuZyA9IFJlYWQtSnNv -bkZpbGUgJ3BsYW51bmcuanNvbicNCg0KICAgICAgICAgICAgICAgICRBbGxlID0gQChHZXQtUGVy -c29uZW5BcnJheSAkUGxhbnVuZykNCiAgICAgICAgICAgICAgICAkTWF4SWQgPSAwDQogICAgICAg -ICAgICAgICAgZm9yZWFjaCAoJFAgaW4gJEFsbGUpIHsgaWYgKFtpbnRdJFAuaWQgLWd0ICRNYXhJ -ZCkgeyAkTWF4SWQgPSBbaW50XSRQLmlkIH0gfQ0KICAgICAgICAgICAgICAgICROZXVlSWQgPSAk -TWF4SWQgKyAxDQoNCiAgICAgICAgICAgICAgICAjIEVpbnJlaWhlbjogdm9yL25hY2gvdW50ZW4N -CiAgICAgICAgICAgICAgICAkRWlucmVpaGVuID0gaWYgKCROZXUuZWlucmVpaGVuKSB7IChbc3Ry -aW5nXSROZXUuZWlucmVpaGVuKS5Ub0xvd2VyKCkgfSBlbHNlIHsgJ3VudGVuJyB9DQogICAgICAg -ICAgICAgICAgJFJlZklkID0gJE5ldS5yZWZlcmVueklkDQogICAgICAgICAgICAgICAgJFppZWxQ -b3MgPSAkbnVsbA0KDQogICAgICAgICAgICAgICAgJEFsbGVTb3J0aWVydCA9IEAoJEFsbGUgfCBT -b3J0LU9iamVjdCAtUHJvcGVydHkgQHtFeHByZXNzaW9uPXtbaW50XSgkXy5wb3NpdGlvbil9OyBB -c2NlbmRpbmc9JHRydWV9KQ0KDQogICAgICAgICAgICAgICAgaWYgKCgkRWlucmVpaGVuIC1lcSAn -dm9yJyAtb3IgJEVpbnJlaWhlbiAtZXEgJ25hY2gnKSAtYW5kICRudWxsIC1uZSAkUmVmSWQpIHsN -CiAgICAgICAgICAgICAgICAgICAgJFJlZlBvcyA9ICRudWxsDQogICAgICAgICAgICAgICAgICAg -IGZvcmVhY2ggKCRQIGluICRBbGxlU29ydGllcnQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAg -IGlmIChbaW50XSRQLmlkIC1lcSBbaW50XSRSZWZJZCkgeyAkUmVmUG9zID0gW2ludF0kUC5wb3Np -dGlvbjsgYnJlYWsgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg -IGlmICgkbnVsbCAtbmUgJFJlZlBvcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJFppZWxQ -b3MgPSBpZiAoJEVpbnJlaWhlbiAtZXEgJ3ZvcicpIHsgJFJlZlBvcyB9IGVsc2UgeyAkUmVmUG9z -ICsgMSB9DQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkUCBpbiAkQWxsZVNvcnRp -ZXJ0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFtpbnRdJFAucG9zaXRpb24g -LWdlICRaaWVsUG9zKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQLnBvc2l0 -aW9uID0gW2ludF0kUC5wb3NpdGlvbiArIDENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkWmllbFBvcykgew0K -ICAgICAgICAgICAgICAgICAgICAkTWF4UG9zID0gMA0KICAgICAgICAgICAgICAgICAgICBmb3Jl -YWNoICgkUCBpbiAkQWxsZSkgeyBpZiAoW2ludF0kUC5wb3NpdGlvbiAtZ3QgJE1heFBvcykgeyAk -TWF4UG9zID0gW2ludF0kUC5wb3NpdGlvbiB9IH0NCiAgICAgICAgICAgICAgICAgICAgJFppZWxQ -b3MgPSAkTWF4UG9zICsgMQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICMg -QXVkaXQtSXRlci1COiBuYWNobmFtZSBpc3QgU291cmNlLW9mLVRydXRoLCBuYW1lIG51ciBCYWNr -d2FyZC1Db21wYXQtRmFsbGJhY2suDQogICAgICAgICAgICAgICAgJE5hY2huYW1lTmV1ID0gaWYg -KCROZXUuUFNPYmplY3QuUHJvcGVydGllc1snbmFjaG5hbWUnXSAtYW5kIC1ub3QgW3N0cmluZ106 -OklzTnVsbE9yV2hpdGVTcGFjZShbc3RyaW5nXSROZXUubmFjaG5hbWUpKSB7DQogICAgICAgICAg -ICAgICAgICAgIFtzdHJpbmddJE5ldS5uYWNobmFtZQ0KICAgICAgICAgICAgICAgIH0gZWxzZWlm -ICgkTmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ25hbWUnXSkgew0KICAgICAgICAgICAgICAgICAg -ICBbc3RyaW5nXSROZXUubmFtZQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7ICcnIH0NCg0KICAg -ICAgICAgICAgICAgICRQZXJzb24gPSBbUFNDdXN0b21PYmplY3RdQHsNCiAgICAgICAgICAgICAg -ICAgICAgaWQgICAgICAgICAgID0gJE5ldWVJZA0KICAgICAgICAgICAgICAgICAgICBha3RpdiAg -ICAgICAgPSBpZiAoJG51bGwgLW5lICROZXUuYWt0aXYpIHsgW2Jvb2xdJE5ldS5ha3RpdiB9IGVs -c2UgeyAkdHJ1ZSB9DQogICAgICAgICAgICAgICAgICAgIG5hY2huYW1lICAgICA9ICROYWNobmFt -ZU5ldQ0KICAgICAgICAgICAgICAgICAgICB2b3JuYW1lICAgICAgPSBpZiAoJE5ldS52b3JuYW1l -KSB7IFtzdHJpbmddJE5ldS52b3JuYW1lIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAg -ICAgZGllbnN0Z3JhZCAgID0gaWYgKCROZXUuZGllbnN0Z3JhZCkgeyBbc3RyaW5nXSROZXUuZGll -bnN0Z3JhZCB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgIGZ1bmt0aW9uICAgICA9 -IGlmICgkTmV1LmZ1bmt0aW9uKSB7IFtzdHJpbmddJE5ldS5mdW5rdGlvbiB9IGVsc2UgeyAnJyB9 -DQogICAgICAgICAgICAgICAgICAgIG9lICAgICAgICAgICA9IGlmICgkTmV1Lm9lKSB7IFtzdHJp -bmddJE5ldS5vZSB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgIGRpZW5zdG51bW1l -ciA9IGlmICgkTmV1LmRpZW5zdG51bW1lcikgeyBbc3RyaW5nXSROZXUuZGllbnN0bnVtbWVyIH0g -ZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgdGVsZWZvbiAgICAgID0gaWYgKCROZXUu -dGVsZWZvbikgeyBbc3RyaW5nXSROZXUudGVsZWZvbiB9IGVsc2UgeyAnJyB9DQogICAgICAgICAg -ICAgICAgICAgIHBvc2l0aW9uICAgICA9ICRaaWVsUG9zDQogICAgICAgICAgICAgICAgICAgIGVt -YWlsICAgICAgICA9IGlmICgkTmV1LmVtYWlsKSB7IFtzdHJpbmddJE5ldS5lbWFpbCB9IGVsc2Ug -eyAnJyB9DQogICAgICAgICAgICAgICAgICAgIG53S2VubnVuZyAgICA9IGlmICgkTmV1Lm53S2Vu -bnVuZykgeyBbc3RyaW5nXSROZXUubndLZW5udW5nIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAg -ICAgICAgICAgIyBBdWRpdC1GaW5kaW5nIEQxOiBvcHRpb25hbGUgRmVsZGVyIG1pdCBudWxsLURl -ZmF1bHQNCiAgICAgICAgICAgICAgICAgICAgIyBzdGF0dCAiIiAoTWlycm9yIHNlcnZlci5weToz -NDAxLTM0MDUpLg0KICAgICAgICAgICAgICAgICAgICBnZWJ1cnRzZGF0dW0gPSBpZiAoJE5ldS5n -ZWJ1cnRzZGF0dW0pIHsgW3N0cmluZ10kTmV1LmdlYnVydHNkYXR1bSB9IGVsc2UgeyAkbnVsbCB9 -DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgJFBsYW51bmcucGVyc29uZW4g -PSBAKCRBbGxlICsgJFBlcnNvbikNCiAgICAgICAgICAgICAgICBXcml0ZS1Kc29uRmlsZSAncGxh -bnVuZy5qc29uJyAkUGxhbnVuZw0KICAgICAgICAgICAgICAgICMgQXV0by1Sb2xsZW4tU3luYyAo -REdMLzEuRUIgLT4gc3VwZXJVc2VyLCAxLkVCIFYuIC0+IGZhY2hhdWZzaWNodGVuKQ0KICAgICAg -ICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRBZG1pbiA9IFJlYWQtSnNvbkZp -bGUgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgICAgIGlmIChTeW5jLVJvbGxlbkF1c1Bl -cnNvbmVuICRQbGFudW5nICRBZG1pbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUt -SnNvbkZpbGUgJ2FkbWluLmpzb24nICRBZG1pbg0KICAgICAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgfSBjYXRjaCB7IFdyaXRlLVdhcm5pbmcgIlJvbGxlbi1TeW5jIG5hY2ggUGVy -c29uLUFubGFnZSBmZWhsZ2VzY2hsYWdlbjogJF8iIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1M -b2dFaW50cmFnICdwZXJzb24uYW5nZWxlZ3QnIEB7IHBlcnNvbklkID0gJE5ldWVJZDsgbmFjaG5h -bWUgPSAiJCgkTmV1LnZvcm5hbWUpICROYWNobmFtZU5ldSIuVHJpbSgpIH0NCiAgICAgICAgICAg -ICAgICBTZW5kLUpzb24gJFJlcyBAeyBzdGF0dXMgPSAnYW5nZWxlZ3QnOyBpZCA9ICROZXVlSWQ7 -IHBvc2l0aW9uID0gJFppZWxQb3MgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAg -ICAgICB9DQoNCiAgICAgICAgICAgICMgUGVyc29uIGFrdHVhbGlzaWVyZW4NCiAgICAgICAgICAg -ICRQZXJzb25NYXRjaCA9IFtyZWdleF06Ok1hdGNoKCRQYXRoLCAnXi9hcGkvcGVyc29uZW4vKFxk -KykkJykNCiAgICAgICAgICAgIGlmICgkUGVyc29uTWF0Y2guU3VjY2VzcyAtYW5kICRNZXRob2Qg -LWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7 -IFNlbmQtRXJyb3IgJFJlcyAnS2VpbmUgQmVyZWNodGlndW5nJyA0MDM7IGNvbnRpbnVlIH0NCiAg -ICAgICAgICAgICAgICAkSWQgPSBbaW50XSRQZXJzb25NYXRjaC5Hcm91cHNbMV0uVmFsdWUNCiAg -ICAgICAgICAgICAgICAkQm9keSA9IFJlYWQtQm9keSAkUmVxDQogICAgICAgICAgICAgICAgJFVw -ZGF0ZSA9ICRCb2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRQbGFudW5n -ID0gUmVhZC1Kc29uRmlsZSAncGxhbnVuZy5qc29uJw0KDQogICAgICAgICAgICAgICAgIyBBdWRp -dC1JdGVyLUI6IExlZ2FjeS1uYW1lIC0+IG5hY2huYW1lIG1hcHBlbiwgZGFubiBuYW1lIGF1cyBV -cGRhdGUgZW50ZmVybmVuDQogICAgICAgICAgICAgICAgaWYgKCRVcGRhdGUuUFNPYmplY3QuUHJv -cGVydGllc1snbmFtZSddIC1hbmQgLW5vdCAkVXBkYXRlLlBTT2JqZWN0LlByb3BlcnRpZXNbJ25h -Y2huYW1lJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgJFVwZGF0ZSB8IEFkZC1NZW1iZXIgLU1l -bWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICduYWNobmFtZScgLVZhbHVlIChbc3RyaW5nXSRV -cGRhdGUubmFtZSkNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKCRVcGRh -dGUuUFNPYmplY3QuUHJvcGVydGllc1snbmFtZSddKSB7DQogICAgICAgICAgICAgICAgICAgICRV -cGRhdGUuUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJ25hbWUnKQ0KICAgICAgICAgICAgICAg -IH0NCg0KICAgICAgICAgICAgICAgICMgQXVkaXQtRmluZGluZyBEMTogb3B0aW9uYWxlIERhdHVt -cy0vTm90aXotRmVsZGVyIGF1ZiBudWxsDQogICAgICAgICAgICAgICAgIyBub3JtYWxpc2llcmVu -IChNaXJyb3Igc2VydmVyLnB5OjM0MzUtMzQzOCkuDQogICAgICAgICAgICAgICAgZm9yZWFjaCAo -JE9wdEZlbGQgaW4gQCgnZ2VidXJ0c2RhdHVtJywnZW5kRGF0dW0nLCdlcmlubmVydW5nc05vdGl6 -JykpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRVcGRhdGUuUFNPYmplY3QuUHJvcGVydGll -c1skT3B0RmVsZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRWID0gJFVwZGF0ZS4oJE9w -dEZlbGQpDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFYgLWlzIFtzdHJpbmddIC1hbmQg -W3N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFjZSgkVikpIHsNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAkVXBkYXRlLigkT3B0RmVsZCkgPSAkbnVsbA0KICAgICAgICAgICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAg -ICAgICAgICAgJEdlZnVuZGVuID0gJGZhbHNlDQogICAgICAgICAgICAgICAgZm9yICgkaSA9IDA7 -ICRpIC1sdCAkUGxhbnVuZy5wZXJzb25lbi5Db3VudDsgJGkrKykgew0KICAgICAgICAgICAgICAg -ICAgICBpZiAoW2ludF0kUGxhbnVuZy5wZXJzb25lblskaV0uaWQgLWVxICRJZCkgew0KICAgICAg -ICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJFByb3AgaW4gJFVwZGF0ZS5QU09iamVjdC5Qcm9w -ZXJ0aWVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQcm9wLk5hbWUgLW5l -ICdpZCcpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQbGFudW5nLnBl -cnNvbmVuWyRpXS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRQcm9wLk5hbWVdKSB7DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy5wZXJzb25lblskaV0uKCRQcm9wLk5h -bWUpID0gJFByb3AuVmFsdWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl -IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLnBlcnNvbmVu -WyRpXSB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICRQcm9wLk5h -bWUgLVZhbHVlICRQcm9wLlZhbHVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0N +bXNnID0gJ3BsYW51bmcuanNvbiBuaWNodCBnZWZ1bmRlbicgfSB9DQoNCiAgICAgICAgICAgICAg +ICAgICAgICAgIGlmICgtbm90ICRQbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VpbnRyYWVn +ZSddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcgfCBBZGQtTWVtYmVy +IC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAnZWludHJhZWdlJyAtVmFsdWUgKE5ldy1P +YmplY3QgUFNPYmplY3QpDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgICAgICAgICBpZiAoLW5vdCAkUGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWydwZmxpY2h0 +J10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZyB8IEFkZC1NZW1iZXIg +LU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICdwZmxpY2h0JyAtVmFsdWUgKE5ldy1PYmpl +Y3QgUFNPYmplY3QpDQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAg +ICAgICAgICAgICMgQXVkaXQtSUktMSBGMTogU2NoaWNodGNvZGUtV2hpdGVsaXN0IGF1Y2ggaW0g +SW1wb3J0LVBmYWQuDQogICAgICAgICAgICAgICAgICAgICAgICAjIE1pcnJvciB6dSBzZXJ2ZXIu +cHk6MzU2NC0zNTY4Lg0KICAgICAgICAgICAgICAgICAgICAgICAgJEFkbWluRnVlckltcG9ydCA9 +IFJlYWQtSnNvbkZpbGUgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICAkVmFs +aWRDb2RlcyA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuSGFzaFNldFtz +dHJpbmddDQogICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0kVmFsaWRDb2Rlcy5BZGQoJycp +DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICRBZG1pbkZ1ZXJJbXBvcnQg +LWFuZCAkQWRtaW5GdWVySW1wb3J0LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3NjaGljaHRjb2Rlcydd +KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJFNjIGluICRBZG1pbkZ1 +ZXJJbXBvcnQuc2NoaWNodGNvZGVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +IGlmICgkbnVsbCAtbmUgJFNjIC1hbmQgJFNjLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2NvZGUnXSkg +ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZvaWRdJFZhbGlkQ29kZXMu +QWRkKFtzdHJpbmddJFNjLmNvZGUpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0N CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgICAgICAgICAjIExlZ2FjeS1uYW1lLUZlbGQgZW5kZ3VlbHRpZyBh -dXMgUGVyc29uIGVudGZlcm5lbiwgZmFsbHMgbm9jaCB2b3JoYW5kZW4NCiAgICAgICAgICAgICAg -ICAgICAgICAgIGlmICgkUGxhbnVuZy5wZXJzb25lblskaV0uUFNPYmplY3QuUHJvcGVydGllc1sn -bmFtZSddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJExlZ2FjeU5hbWUgPSBbc3Ry -aW5nXSRQbGFudW5nLnBlcnNvbmVuWyRpXS5uYW1lDQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgaWYgKC1ub3QgW3N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFjZSgkTGVnYWN5TmFtZSkgLWFu -ZCBgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChbc3RyaW5nXTo6SXNOdWxsT3JX -aGl0ZVNwYWNlKFtzdHJpbmddJFBsYW51bmcucGVyc29uZW5bJGldLm5hY2huYW1lKSkpIHsNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQbGFudW5nLnBlcnNvbmVuWyRpXS5Q -U09iamVjdC5Qcm9wZXJ0aWVzWyduYWNobmFtZSddKSB7DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAkUGxhbnVuZy5wZXJzb25lblskaV0ubmFjaG5hbWUgPSAkTGVnYWN5TmFt -ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcucGVyc29uZW5bJGldIHwgQWRkLU1lbWJl -ciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ25hY2huYW1lJyAtVmFsdWUgJExlZ2Fj -eU5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy5wZXJz -b25lblskaV0uUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJ25hbWUnKQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJEdlZnVuZGVuID0gJHRydWU7 -IGJyZWFrDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgaWYgKC1ub3QgJEdlZnVuZGVuKSB7IFNlbmQtRXJyb3IgJFJlcyAiUGVyc29uICRJ -ZCBuaWNodCBnZWZ1bmRlbiIgNDA0OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgV3JpdGUt -SnNvbkZpbGUgJ3BsYW51bmcuanNvbicgJFBsYW51bmcNCiAgICAgICAgICAgICAgICAjIEF1dG8t -Um9sbGVuLVN5bmMgbmFjaCBFZGl0IChGdW5rdGlvbiBrYW5uIHNpY2ggZ2VhZW5kZXJ0IGhhYmVu -KQ0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRBZG1pbiA9IFJl -YWQtSnNvbkZpbGUgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgICAgIGlmIChTeW5jLVJv -bGxlbkF1c1BlcnNvbmVuICRQbGFudW5nICRBZG1pbikgew0KICAgICAgICAgICAgICAgICAgICAg -ICAgV3JpdGUtSnNvbkZpbGUgJ2FkbWluLmpzb24nICRBZG1pbg0KICAgICAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7IFdyaXRlLVdhcm5pbmcgIlJvbGxlbi1TeW5j -IG5hY2ggUGVyc29uLUVkaXQgZmVobGdlc2NobGFnZW46ICRfIiB9DQogICAgICAgICAgICAgICAg -V3JpdGUtTG9nRWludHJhZyAncGVyc29uLmdlYWVuZGVydCcgQHsgcGVyc29uSWQgPSAkSWQgfQ0K -ICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7IHN0YXR1cyA9ICdha3R1YWxpc2llcnQn -IH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAg -ICAjIFJlaWhlbmZvbGdlIGFlbmRlcm4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkv -cGVyc29uZW4vcmVpaGVuZm9sZ2UnIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAg -ICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzICdLZWlu -ZSBCZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRCb2R5ID0g -UmVhZC1Cb2R5ICRSZXENCiAgICAgICAgICAgICAgICAkUmVpaGVuZm9sZ2UgPSAkQm9keSB8IENv -bnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkUGxhbnVuZyA9IFJlYWQtSnNvbkZpbGUg -J3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkUiBpbiAkUmVpaGVuZm9s -Z2UpIHsNCiAgICAgICAgICAgICAgICAgICAgZm9yICgkaSA9IDA7ICRpIC1sdCAkUGxhbnVuZy5w -ZXJzb25lbi5Db3VudDsgJGkrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFtpbnRd -JFBsYW51bmcucGVyc29uZW5bJGldLmlkIC1lcSBbaW50XSRSLmlkKSB7DQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgJFBsYW51bmcucGVyc29uZW5bJGldLnBvc2l0aW9uID0gW2ludF0kUi5w -b3NpdGlvbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrDQogICAgICAgICAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgV3JpdGUtSnNvbkZpbGUgJ3BsYW51bmcuanNvbicgJFBsYW51bmcNCiAg -ICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdwZXJzb25lbi5yZWloZW5mb2xnZS5nZWFl -bmRlcnQnIEB7fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7IHN0YXR1cyA9ICdh -a3R1YWxpc2llcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0K -DQogICAgICAgICAgICAjID09PT09PT09PT09PT09PT09PT09PSBTVEFUSVNUSUsgPT09PT09PT09 -PT09PT09PT09PT09DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3N0YXRpc3Rpaycg -LWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgIEhhbmRsZS1TdGF0aXN0 -aWsgJFJlcw0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAg -ICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IERVTU1ZREFURU4gLyBSRVNFVCA9PT09PT09 -PT09PT09PT09PT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy9k -dW1teWRhdGVuJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgIGlm -ICgtbm90IChUZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXMgJ0tlaW5lIEJlcmVjaHRp -Z3VuZycgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgSGFuZGxlLUR1bW15ZGF0ZW4g -JFJlcw0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAg -ICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvcmVzZXQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BP -U1QnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQt -RXJyb3IgJFJlcyAnS2VpbmUgQmVyZWNodGlndW5nJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAg -ICAgICAgICBIYW5kbGUtUmVzZXQgJFJlcw0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAg -ICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IEZMRDogU0NI -SUNIVC1JTVBPUlQgKFBhc3RlLWJhc2llcnQpID09PT09PT09PT09PT09PT09PT09PQ0KICAgICAg -ICAgICAgIyBTcGllZ2VsIHp1IHNlcnZlci5weSBQT1NUIC9hcGkvaW1wb3J0L3NjaGljaHRlbi91 -ZWJlcm5laG1lbi4NCiAgICAgICAgICAgICMgQ2xpZW50IHBhcnN0IGRpZSBnZXBhc3RldGVuIEV4 -Y2VsLURhdGVuIGNsaWVudHNlaXRpZyB1bmQgc2NoaWNrdA0KICAgICAgICAgICAgIyBlaW50cmFl -Z2UgKyBwZmxpY2h0LUZsYWdzIHp1bSBTY2hyZWliZW4uDQogICAgICAgICAgICBpZiAoJFBhdGgg -LWVxICcvYXBpL2ltcG9ydC9zY2hpY2h0ZW4vdWViZXJuZWhtZW4nIC1hbmQgJE1ldGhvZCAtZXEg -J1BPU1QnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkg -eyBTZW5kLUVycm9yICRSZXMgJ051ciBTdXBlclVzZXIgZHVlcmZlbiBpbXBvcnRpZXJlbicgNDAz -OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0KICAg -ICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAkUmVzICdBbmZy -YWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICB0cnkgew0KICAg -ICAgICAgICAgICAgICAgICAkUGFyYW0gPSAkQm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAg -ICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVz -ICdVbmd1ZWx0aWdlcyBKU09OJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KDQog -ICAgICAgICAgICAgICAgJExvY2tSZXN1bHQgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7 -DQogICAgICAgICAgICAgICAgICAgICRMb2NrUmVzdWx0ID0gSW52b2tlLVdpdGhGaWxlTG9jayAn -cGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZyA9IFJlYWQt -SnNvbkZpbGUgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVs -bCAtZXEgJFBsYW51bmcpIHsgcmV0dXJuIEB7IHR5cCA9ICdlcnJvcic7IGNvZGUgPSA0MDQ7IG1z -ZyA9ICdwbGFudW5nLmpzb24gbmljaHQgZ2VmdW5kZW4nIH0gfQ0KDQogICAgICAgICAgICAgICAg -ICAgICAgICBpZiAoLW5vdCAkUGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWydlaW50cmFlZ2Un -XSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nIHwgQWRkLU1lbWJlciAt -TWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ2VpbnRyYWVnZScgLVZhbHVlIChOZXctT2Jq -ZWN0IFBTT2JqZWN0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgaWYgKC1ub3QgJFBsYW51bmcuUFNPYmplY3QuUHJvcGVydGllc1sncGZsaWNodCdd -KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcgfCBBZGQtTWVtYmVyIC1N -ZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAncGZsaWNodCcgLVZhbHVlIChOZXctT2JqZWN0 -IFBTT2JqZWN0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAg -ICAgICAgICAjIEF1ZGl0LUlJLTEgRjE6IFNjaGljaHRjb2RlLVdoaXRlbGlzdCBhdWNoIGltIElt -cG9ydC1QZmFkLg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBNaXJyb3IgenUgc2VydmVyLnB5 -OjM1NjQtMzU2OC4NCiAgICAgICAgICAgICAgICAgICAgICAgICRBZG1pbkZ1ZXJJbXBvcnQgPSBS -ZWFkLUpzb25GaWxlICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgJFZhbGlk -Q29kZXMgPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkhhc2hTZXRbc3Ry -aW5nXQ0KICAgICAgICAgICAgICAgICAgICAgICAgW3ZvaWRdJFZhbGlkQ29kZXMuQWRkKCcnKQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkQWRtaW5GdWVySW1wb3J0IC1h -bmQgJEFkbWluRnVlckltcG9ydC5QU09iamVjdC5Qcm9wZXJ0aWVzWydzY2hpY2h0Y29kZXMnXSkg -ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRTYyBpbiAkQWRtaW5GdWVy -SW1wb3J0LnNjaGljaHRjb2Rlcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp -ZiAoJG51bGwgLW5lICRTYyAtYW5kICRTYy5QU09iamVjdC5Qcm9wZXJ0aWVzWydjb2RlJ10pIHsN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lkXSRWYWxpZENvZGVzLkFk -ZChbc3RyaW5nXSRTYy5jb2RlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0K -DQogICAgICAgICAgICAgICAgICAgICAgICAkQW56ID0gMDsgJE5PcnBoYW4gPSAwDQogICAgICAg -ICAgICAgICAgICAgICAgICBpZiAoJFBhcmFtLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VpbnRyYWVn -ZSddIC1hbmQgJG51bGwgLW5lICRQYXJhbS5laW50cmFlZ2UpIHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICBmb3JlYWNoICgkRGF0dW1Qcm9wIGluICRQYXJhbS5laW50cmFlZ2UuUFNPYmpl -Y3QuUHJvcGVydGllcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRGF0dW0g -PSAkRGF0dW1Qcm9wLk5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBpZE1h -cCA9ICREYXR1bVByb3AuVmFsdWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg -KC1ub3QgJFBsYW51bmcuZWludHJhZWdlLlBTT2JqZWN0LlByb3BlcnRpZXNbJERhdHVtXSkgew0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcuZWludHJhZWdlIHwg -QWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJERhdHVtIC1WYWx1ZSAo -TmV3LU9iamVjdCBQU09iamVjdCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkUGlkUHJvcCBpbiAkUGlk -TWFwLlBTT2JqZWN0LlByb3BlcnRpZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICRQZXJzb25JZCA9IFtzdHJpbmddJFBpZFByb3AuTmFtZQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgJFdlcnQgPSBbc3RyaW5nXSRQaWRQcm9wLlZhbHVlDQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkVmFsaWRDb2Rlcy5Db250 -YWlucygkV2VydCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk -Tk9ycGhhbisrDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu -dWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIGlmICgkUGxhbnVuZy5laW50cmFlZ2UuJERhdHVtLlBTT2Jq -ZWN0LlByb3BlcnRpZXNbJFBlcnNvbklkXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICRQbGFudW5nLmVpbnRyYWVnZS4kRGF0dW0uJFBlcnNvbklkID0gJFdlcnQN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcuZWludHJhZWdlLiREYXR1bSB8 -IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICRQZXJzb25JZCAtVmFs -dWUgJFdlcnQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRBbnorKw0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFBhcmFtLlBTT2Jq -ZWN0LlByb3BlcnRpZXNbJ3BmbGljaHQnXSAtYW5kICRudWxsIC1uZSAkUGFyYW0ucGZsaWNodCkg -ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCREYXR1bVByb3AgaW4gJFBh -cmFtLnBmbGljaHQuUFNPYmplY3QuUHJvcGVydGllcykgew0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAkRGF0dW0gPSAkRGF0dW1Qcm9wLk5hbWUNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgJFBpZE1hcCA9ICREYXR1bVByb3AuVmFsdWUNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgaWYgKC1ub3QgJFBsYW51bmcucGZsaWNodC5QU09iamVjdC5Qcm9wZXJ0 -aWVzWyREYXR1bV0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFu -dW5nLnBmbGljaHQgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAk -RGF0dW0gLVZhbHVlIChOZXctT2JqZWN0IFBTT2JqZWN0KQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRQ -aWRQcm9wIGluICRQaWRNYXAuUFNPYmplY3QuUHJvcGVydGllcykgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgJFBlcnNvbklkID0gW3N0cmluZ10kUGlkUHJvcC5OYW1lDQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRmxhZyA9ICRQaWRQcm9wLlZhbHVl -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJEZsYWcpIHsNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFBsYW51bmcucGZsaWNodC4k -RGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skUGVyc29uSWRdKSB7DQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLnBmbGljaHQuJERhdHVtLiRQZXJz -b25JZCA9ICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl -bHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51 -bmcucGZsaWNodC4kRGF0dW0gfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAt -TmFtZSAkUGVyc29uSWQgLVZhbHVlICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl -IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFBsYW51bmcu -cGZsaWNodC4kRGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skUGVyc29uSWRdKSB7DQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLnBmbGljaHQuJERh -dHVtLlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCRQZXJzb25JZCkNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAg -ICAgICAgICAgICAgICAgIFdyaXRlLVBsYW51bmdNaXRJbnRlZ3JpdGFldCAkUGxhbnVuZyAgICMg -QnVsay1PcDogYWxsZSBITUFDcyBuZXUNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBA -eyB0eXAgPSAnb2snOyBlaW50cmFlZ2UgPSAkQW56OyB1bmJla2FubnRlQ29kZXMgPSAkTk9ycGhh -biB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAg -ICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzICJVZWJlcm5haG1lLUZlaGxlcjogJF8i -IDUwMDsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZiAo -JExvY2tSZXN1bHQudHlwIC1lcSAnZXJyb3InKSB7IFNlbmQtRXJyb3IgJFJlcyAkTG9ja1Jlc3Vs -dC5tc2cgJExvY2tSZXN1bHQuY29kZTsgY29udGludWUgfQ0KDQogICAgICAgICAgICAgICAgV3Jp -dGUtTG9nRWludHJhZyAnc2NoaWNodGVuLmltcG9ydGllcnQnIEB7IGVpbnRyYWVnZSA9ICRMb2Nr -UmVzdWx0LmVpbnRyYWVnZTsgdW5iZWthbm50ZUNvZGVzID0gJExvY2tSZXN1bHQudW5iZWthbm50 -ZUNvZGVzIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAeyBzdGF0dXMgPSAndWVi -ZXJub21tZW4nOyBlaW50cmFlZ2UgPSAkTG9ja1Jlc3VsdC5laW50cmFlZ2U7IHVuYmVrYW5udGVD -b2RlcyA9ICRMb2NrUmVzdWx0LnVuYmVrYW5udGVDb2RlcyB9DQogICAgICAgICAgICAgICAgRGVi -dWctTG9nICdBUEknICJQT1NUIC9hcGkvaW1wb3J0L3NjaGljaHRlbi91ZWJlcm5laG1lbiAtPiAk -KCRMb2NrUmVzdWx0LmVpbnRyYWVnZSkgRWludHJhZWdlIGdlc2NocmllYmVuLCAkKCRMb2NrUmVz -dWx0LnVuYmVrYW5udGVDb2RlcykgdW5iZWthbm50ZSBDb2RlcyB2ZXJ3b3JmZW4iDQogICAgICAg -ICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PT09 -PT09PT09PT09PT09PT0gRkxEOiBFWENFTC1JTVBPUlQgKFZvcnNjaGF1KSA9PT09PT09PT09PT09 -PT09PT09PT0NCiAgICAgICAgICAgICMgU3BpZWdlbCB6dSBzZXJ2ZXIucHkgUE9TVCAvYXBpL2lt -cG9ydC9leGNlbC92b3JzY2hhdS4NCiAgICAgICAgICAgICMgQ2xpZW50IChCcm93c2VyLCBtaXQg -eGxzeC5mdWxsLm1pbi5qcyAvIFNoZWV0SlMpIHBhcnN0IGRpZQ0KICAgICAgICAgICAgIyBFeGNl -bC1Wb3JsYWdlIHVuZCBzY2hpY2t0IGRhcyBmZXJ0aWctZ2VwYXJzdGUgU2NoZW1hLg0KICAgICAg -ICAgICAgIyBTZXJ2ZXIgbGllZmVydCBudXIgZGVuIFBlcnNvbmVuLURpZmYgenVyIGFrdHVlbGxl -biBwbGFudW5nLmpzb24uDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2ltcG9ydC9l -eGNlbC92b3JzY2hhdScgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAg -ICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlcyAnTnVyIFN1 -cGVyVXNlciBkdWVyZmVuIGltcG9ydGllcmVuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAg -ICAgICAkQm9keSA9IFJlYWQtQm9keSAkUmVxDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1l -cSAkQm9keSkgeyBTZW5kLUVycm9yICRSZXMgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGlu -dWUgfQ0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRQYXJhbSA9 -ICRCb2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAg -ICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXMgJ1VuZ3VlbHRpZ2VzIEpTT04nIDQwMDsg -Y29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJFBh -cmFtLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3BlcnNvbmVuRXhjZWwnXSAtb3IgJG51bGwgLWVxICRQ -YXJhbS5wZXJzb25lbkV4Y2VsKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJl -cyAncGVyc29uZW5FeGNlbCAoQXJyYXkpIGZlaGx0JyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAg -ICAgICAgfQ0KICAgICAgICAgICAgICAgICRQZXJzb25lbkV4Y2VsID0gQCgkUGFyYW0ucGVyc29u -ZW5FeGNlbCkNCg0KICAgICAgICAgICAgICAgICRQbGFudW5nID0gUmVhZC1Kc29uRmlsZSAncGxh -bnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICRQZXJzb25lblBsYW51bmcgPSBAKCkNCiAgICAg -ICAgICAgICAgICBpZiAoJFBsYW51bmcgLWFuZCAkUGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVz -WydwZXJzb25lbiddKSB7DQogICAgICAgICAgICAgICAgICAgICRQZXJzb25lblBsYW51bmcgPSBA -KCRQbGFudW5nLnBlcnNvbmVuKQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAg -ICMgTWF0Y2gtSGV1cmlzdGlrOiBOYWNobmFtZSB6dWVyc3QsIGRhbm4gVm9ybmFtZSwgbWl0IERp -ZW5zdGdyYWQgYWxzDQogICAgICAgICAgICAgICAgIyBUaWVicmVha2VyLiBIYXJkLUZhaWwgd2Vu -biBiZWlkZSBOYWNobmFtZW4gZ2VzZXR6dCBhYmVyIHVudGVyc2NoaWVkbGljaC4NCiAgICAgICAg -ICAgICAgICAjIEdyZWVkeS0xOjEtWnVvcmRudW5nICh2ZXJoaW5kZXJ0IGRhc3MgendlaSBFeGNl -bC0nTGVuYScgYmVpZGUgYXVmDQogICAgICAgICAgICAgICAgIyBkaWUgZ2xlaWNoZSBwbGFudW5n -LUxlbmEgbGFuZGVuKS4NCiAgICAgICAgICAgICAgICAjIEluYWt0aXZlIFBlcnNvbmVuIHdlcmRl -biBlYmVuZmFsbHMgYmVydWVja3NpY2h0aWd0LCBzb25zdCB3dWVyZGVuDQogICAgICAgICAgICAg -ICAgIyB6dXZvciBkZWFrdGl2aWVydGUgUGVyc29uZW4gYmVpIFJlLUltcG9ydCBhbHMgJ25ldScg -YW5nZWxlZ3Qgc3RhdHQNCiAgICAgICAgICAgICAgICAjIHJlYWt0aXZpZXJ0LiBBa3RpdmUgYmVr -b21tZW4gKzAuNSBTY29yZS1Cb251cy4NCiAgICAgICAgICAgICAgICAkQWxsZVBsYW51bmcgPSBA -KCRQZXJzb25lblBsYW51bmcpDQoNCiAgICAgICAgICAgICAgICBmdW5jdGlvbiBHZXQtTmFtZVRv -a2VucygkTmFtZSkgew0KICAgICAgICAgICAgICAgICAgICAjIFNwbGl0IGJlaSBCaW5kZXN0cmlj -aCArIFdoaXRlc3BhY2UsIGxvd2VyY2FzZSwgbGVlcmUgcmF1cy4NCiAgICAgICAgICAgICAgICAg -ICAgIyAnUmVtdXMtQXJ0aHVyJyAtPiBAKCdyZW11cycsICdhcnRodXInKQ0KICAgICAgICAgICAg -ICAgICAgICAjIFVtbGF1dGUgKyBzcy1Ob3JtOiAnTXVlbGxlcicgbWF0Y2hlZCAnTcO8bGxlcics -ICdNYXJpc3MnICdNYXJpw58nLg0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkTmFtZSkg -eyByZXR1cm4gQCgpIH0NCiAgICAgICAgICAgICAgICAgICAgJHMgPSAoW3N0cmluZ10kTmFtZSku -VHJpbSgpLlRvTG93ZXIoKQ0KICAgICAgICAgICAgICAgICAgICAkcyA9ICRzIC1yZXBsYWNlICfD -pCcsJ2FlJyAtcmVwbGFjZSAnw7YnLCdvZScgLXJlcGxhY2UgJ8O8JywndWUnIC1yZXBsYWNlICfD -nycsJ3NzJw0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gQCgkcyAtc3BsaXQgJ1stXHNdKycg -fCBXaGVyZS1PYmplY3QgeyAkXyB9KQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAg -ICAgIGZ1bmN0aW9uIFRlc3QtTmFtZXNNYXRjaCgkQSwgJEIpIHsNCiAgICAgICAgICAgICAgICAg -ICAgIyBUcnVlIHdlbm4gZGllIFRva2VuLVNldHMgc2ljaCB1ZWJlcmxhcHBlbi4NCiAgICAgICAg -ICAgICAgICAgICAgJHRhID0gR2V0LU5hbWVUb2tlbnMgJEENCiAgICAgICAgICAgICAgICAgICAg -JHRiID0gR2V0LU5hbWVUb2tlbnMgJEINCiAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHRh -IC1vciAtbm90ICR0YikgeyByZXR1cm4gJGZhbHNlIH0NCiAgICAgICAgICAgICAgICAgICAgZm9y -ZWFjaCAoJHQgaW4gJHRhKSB7IGlmICgkdGIgLWNvbnRhaW5zICR0KSB7IHJldHVybiAkdHJ1ZSB9 -IH0NCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRmYWxzZQ0KICAgICAgICAgICAgICAgIH0N -Cg0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEdldC1QZXJzb25TY29yZSgkRXhjZWwsICRQbGFu -dW5nKSB7DQogICAgICAgICAgICAgICAgICAgICRlTiA9IChbc3RyaW5nXSRFeGNlbC5uYWNobmFt -ZSkuVHJpbSgpDQogICAgICAgICAgICAgICAgICAgICRlViA9IChbc3RyaW5nXSRFeGNlbC52b3Ju -YW1lKS5UcmltKCkNCiAgICAgICAgICAgICAgICAgICAgJGVEID0gKFtzdHJpbmddJEV4Y2VsLmRp -ZW5zdGdyYWQpLlRyaW0oKS5Ub0xvd2VyKCkNCiAgICAgICAgICAgICAgICAgICAgJHBOID0gaWYg -KCRQbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ25hY2huYW1lJ10pIHsgKFtzdHJpbmddJFBs -YW51bmcubmFjaG5hbWUpLlRyaW0oKSB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAg -ICRwViA9IGlmICgkUGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWyd2b3JuYW1lJ10pIHsgKFtz -dHJpbmddJFBsYW51bmcudm9ybmFtZSkuVHJpbSgpIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAg -ICAgICAgICAgJHBEID0gaWYgKCRQbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2RpZW5zdGdy -YWQnXSkgeyAoW3N0cmluZ10kUGxhbnVuZy5kaWVuc3RncmFkKS5UcmltKCkuVG9Mb3dlcigpIH0g -ZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgIyBIYXJkLUZhaWw6IGJlaWRlIE5hY2hu -YW1lbiBnZXNldHp0LCBhYmVyIGtlaW5lIFRva2VuLVVlYmVybGFwcHVuZw0KICAgICAgICAgICAg -ICAgICAgICBpZiAoJGVOIC1hbmQgJHBOIC1hbmQgLW5vdCAoVGVzdC1OYW1lc01hdGNoICRlTiAk -cE4pKSB7IHJldHVybiAwIH0NCiAgICAgICAgICAgICAgICAgICAgJG5NID0gKFRlc3QtTmFtZXNN -YXRjaCAkZU4gJHBOKQ0KICAgICAgICAgICAgICAgICAgICAkdk0gPSAoVGVzdC1OYW1lc01hdGNo -ICRlViAkcFYpDQogICAgICAgICAgICAgICAgICAgICRkTSA9ICgkZUQgLWFuZCAkcEQgLWFuZCAk -ZUQgLWVxICRwRCkNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRuTSAtYW5kICR2TSAtYW5kICRk -TSkgeyByZXR1cm4gNSB9ICAgIyBwZXJmZWt0DQogICAgICAgICAgICAgICAgICAgIGlmICgkbk0g -LWFuZCAkdk0pIHsgcmV0dXJuIDQgfSAgICAgICAgICAgICMgc2VociBzdGFyaw0KICAgICAgICAg -ICAgICAgICAgICBpZiAoJG5NIC1hbmQgJGRNKSB7IHJldHVybiAzIH0NCiAgICAgICAgICAgICAg -ICAgICAgaWYgKCRuTSkgeyByZXR1cm4gMyB9DQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90 -ICRwTiAtYW5kICR2TSAtYW5kICRkTSkgeyByZXR1cm4gMyB9DQogICAgICAgICAgICAgICAgICAg -IGlmICgtbm90ICRwTiAtYW5kICR2TSkgeyByZXR1cm4gMiB9DQogICAgICAgICAgICAgICAgICAg -IHJldHVybiAwDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgZnVuY3Rpb24g -R2V0LVBlcnNvbktvbXBha3QoJFApIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7DQog -ICAgICAgICAgICAgICAgICAgICAgICBpZCA9ICRQLmlkDQogICAgICAgICAgICAgICAgICAgICAg -ICB2b3JuYW1lID0gaWYgKCRQLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Zvcm5hbWUnXSkgeyAkUC52 -b3JuYW1lIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIG5hY2huYW1lID0g -aWYgKCRQLlBTT2JqZWN0LlByb3BlcnRpZXNbJ25hY2huYW1lJ10pIHsgJFAubmFjaG5hbWUgfSBl -bHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZGllbnN0Z3JhZCA9IGlmICgkUC5Q -U09iamVjdC5Qcm9wZXJ0aWVzWydkaWVuc3RncmFkJ10pIHsgJFAuZGllbnN0Z3JhZCB9IGVsc2Ug -eyAnJyB9DQogICAgICAgICAgICAgICAgICAgICAgICBmdW5rdGlvbiA9IGlmICgkUC5QU09iamVj -dC5Qcm9wZXJ0aWVzWydmdW5rdGlvbiddKSB7ICRQLmZ1bmt0aW9uIH0gZWxzZSB7ICcnIH0NCiAg -ICAgICAgICAgICAgICAgICAgICAgIGFrdGl2ID0gaWYgKCRQLlBTT2JqZWN0LlByb3BlcnRpZXNb -J2FrdGl2J10pIHsgJFAuYWt0aXYgfSBlbHNlIHsgJHRydWUgfQ0KICAgICAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgIyBQaGFzZSAxOiBhbGxl -IChzY29yZSwgZWksIHBpKS1QYWFyZS4gQWt0aXZlICswLjUgQm9udXMuDQogICAgICAgICAgICAg -ICAgJFBhYXJlID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0DQogICAg -ICAgICAgICAgICAgZm9yICgkZWkgPSAwOyAkZWkgLWx0ICRQZXJzb25lbkV4Y2VsLkNvdW50OyAk -ZWkrKykgew0KICAgICAgICAgICAgICAgICAgICBmb3IgKCRwaSA9IDA7ICRwaSAtbHQgJEFsbGVQ -bGFudW5nLkNvdW50OyAkcGkrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHMgPSBHZXQt -UGVyc29uU2NvcmUgJFBlcnNvbmVuRXhjZWxbJGVpXSAkQWxsZVBsYW51bmdbJHBpXQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgaWYgKCRzIC1ndCAwKSB7DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgJGlzdEFrdGl2ID0gLW5vdCAkQWxsZVBsYW51bmdbJHBpXS5QU09iamVjdC5Qcm9wZXJ0 -aWVzWydha3RpdiddIC1vciAkQWxsZVBsYW51bmdbJHBpXS5ha3RpdiAtZXEgJHRydWUNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGlzdEFrdGl2KSB7ICRzICs9IDAuNSB9DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgW3ZvaWRdJFBhYXJlLkFkZChAeyBzPSRzOyBlaT0kZWk7 -IHBpPSRwaSB9KQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICMgUGhhc2UgMjogZ3JlZWR5 -IG5hY2ggU2NvcmUgYWJzdGVpZ2VuZA0KICAgICAgICAgICAgICAgICRTb3J0ZWQgPSBAKCRQYWFy -ZSB8IFNvcnQtT2JqZWN0IC1Qcm9wZXJ0eSBAe0V4cHJlc3Npb249eyAtJF8ucyB9fSkNCiAgICAg -ICAgICAgICAgICAkRXhjZWxadVBsYW51bmcgPSBAe30NCiAgICAgICAgICAgICAgICAkUGxhbnVu -Z1VzZWQgPSBAe30NCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkcHAgaW4gJFNvcnRlZCkgew0K -ICAgICAgICAgICAgICAgICAgICBpZiAoJEV4Y2VsWnVQbGFudW5nLkNvbnRhaW5zS2V5KCRwcC5l -aSkpIHsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJFBsYW51bmdVc2VkLkNv -bnRhaW5zS2V5KCRwcC5waSkpIHsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAkRXhj -ZWxadVBsYW51bmdbJHBwLmVpXSA9IEB7IHBpID0gJHBwLnBpOyBzID0gJHBwLnMgfQ0KICAgICAg -ICAgICAgICAgICAgICAkUGxhbnVuZ1VzZWRbJHBwLnBpXSA9ICR0cnVlDQogICAgICAgICAgICAg -ICAgfQ0KDQogICAgICAgICAgICAgICAgJE1hdGNoID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVj -dGlvbnMuQXJyYXlMaXN0DQogICAgICAgICAgICAgICAgJE5ldSA9IE5ldy1PYmplY3QgU3lzdGVt -LkNvbGxlY3Rpb25zLkFycmF5TGlzdA0KICAgICAgICAgICAgICAgICRVbnNpY2hlciA9IE5ldy1P -YmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdA0KICAgICAgICAgICAgICAgICRFbnRm -ZXJudCA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdA0KDQogICAgICAg -ICAgICAgICAgIyBQaGFzZSAzOiBNZWhyZGV1dGlna2VpdHMtQ2hlY2sNCiAgICAgICAgICAgICAg -ICBmb3IgKCRlaSA9IDA7ICRlaSAtbHQgJFBlcnNvbmVuRXhjZWwuQ291bnQ7ICRlaSsrKSB7DQog -ICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRFeGNlbFp1UGxhbnVuZy5Db250YWluc0tleSgk -ZWkpKSB7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgJGcgPSAkRXhjZWxadVBsYW51 -bmdbJGVpXQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJGcucyAtbGUgMykgew0KICAgICAgICAg -ICAgICAgICAgICAgICAgJEFuZGVyZSA9IEAoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgZm9y -ICgkcGkgPSAwOyAkcGkgLWx0ICRBbGxlUGxhbnVuZy5Db3VudDsgJHBpKyspIHsNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICBpZiAoJHBpIC1lcSAkZy5waSkgeyBjb250aW51ZSB9DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQbGFudW5nVXNlZC5Db250YWluc0tleSgkcGkp -KSB7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2sgPSBHZXQtUGVy -c29uU2NvcmUgJFBlcnNvbmVuRXhjZWxbJGVpXSAkQWxsZVBsYW51bmdbJHBpXQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICRpc3RBID0gLW5vdCAkQWxsZVBsYW51bmdbJHBpXS5QU09iamVj -dC5Qcm9wZXJ0aWVzWydha3RpdiddIC1vciAkQWxsZVBsYW51bmdbJHBpXS5ha3RpdiAtZXEgJHRy -dWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHNrIC1ndCAwIC1hbmQgJGlzdEEp -IHsgJHNrICs9IDAuNSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRzayAtZXEg -JGcucykgeyAkQW5kZXJlICs9ICRwaSB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgICAgICAgICBpZiAoJEFuZGVyZS5Db3VudCAtZ3QgMCkgew0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICRLYW5kSWR4ID0gQCgkZy5waSkgKyAkQW5kZXJlDQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgJEthbmRPYmogPSBAKCkNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICBmb3JlYWNoICgkcGkgaW4gJEthbmRJZHgpIHsgJEthbmRPYmogKz0gKEdldC1QZXJz -b25Lb21wYWt0ICRBbGxlUGxhbnVuZ1skcGldKSB9DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgW3ZvaWRdJFVuc2ljaGVyLkFkZChAeyBleGNlbCA9ICRQZXJzb25lbkV4Y2VsWyRlaV07IGth -bmRpZGF0ZW4gPSAkS2FuZE9iaiB9KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRFeGNl -bFp1UGxhbnVuZy5SZW1vdmUoJGVpKSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAg -ICAgICAgICAjIFBoYXNlIDQ6IG1hdGNoICsgbmV1IGtsYXNzaWZpemllcmVuDQogICAgICAgICAg -ICAgICAgZm9yICgkZWkgPSAwOyAkZWkgLWx0ICRQZXJzb25lbkV4Y2VsLkNvdW50OyAkZWkrKykg -ew0KICAgICAgICAgICAgICAgICAgICBpZiAoJEV4Y2VsWnVQbGFudW5nLkNvbnRhaW5zS2V5KCRl -aSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRnID0gJEV4Y2VsWnVQbGFudW5nWyRlaV0N -CiAgICAgICAgICAgICAgICAgICAgICAgICRjb25maWRlbmNlID0gaWYgKCRnLnMgLWdlIDQpIHsg -J2hvY2gnIH0gZWxzZSB7ICdtaXR0ZWwnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lk -XSRNYXRjaC5BZGQoQHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlbCA9ICRQZXJz -b25lbkV4Y2VsWyRlaV0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFudW5nID0gKEdl -dC1QZXJzb25Lb21wYWt0ICRBbGxlUGxhbnVuZ1skZy5waV0pDQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgY29uZmlkZW5jZSA9ICRjb25maWRlbmNlDQogICAgICAgICAgICAgICAgICAgICAg -ICB9KQ0KICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoLW5vdCAoJFVuc2ljaGVyIHwgV2hl -cmUtT2JqZWN0IHsgJF8uZXhjZWwgLWVxICRQZXJzb25lbkV4Y2VsWyRlaV0gfSkpIHsNCiAgICAg -ICAgICAgICAgICAgICAgICAgIFt2b2lkXSROZXUuQWRkKEB7IGV4Y2VsID0gJFBlcnNvbmVuRXhj -ZWxbJGVpXSB9KQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQog -ICAgICAgICAgICAgICAgIyBQaGFzZSA1OiBlbnRmZXJudCA9IEFLVElWRSBwbGFudW5nIG9obmUg -TWF0Y2ggKGluYWt0aXZlIGJsZWliZW4gZWluZmFjaCBpbmFrdGl2KQ0KICAgICAgICAgICAgICAg -IGZvciAoJHBpID0gMDsgJHBpIC1sdCAkQWxsZVBsYW51bmcuQ291bnQ7ICRwaSsrKSB7DQogICAg -ICAgICAgICAgICAgICAgIGlmICgtbm90ICRQbGFudW5nVXNlZC5Db250YWluc0tleSgkcGkpKSB7 -DQogICAgICAgICAgICAgICAgICAgICAgICAkaXN0QWt0aXYgPSAtbm90ICRBbGxlUGxhbnVuZ1sk -cGldLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2FrdGl2J10gLW9yICRBbGxlUGxhbnVuZ1skcGldLmFr -dGl2IC1lcSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRpc3RBa3Rpdikgew0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lkXSRFbnRmZXJudC5BZGQoQHsgcGxhbnVu -ZyA9IChHZXQtUGVyc29uS29tcGFrdCAkQWxsZVBsYW51bmdbJHBpXSkgfSkNCiAgICAgICAgICAg -ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0N -Cg0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7DQogICAgICAgICAgICAgICAgICAg -IGphaHIgPSBpZiAoJFBhcmFtLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2phaHInXSkgeyAkUGFyYW0u -amFociB9IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAgICAgICAgIHBlcnNvbmVuID0gQHsN -CiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gQCgkTWF0Y2gpDQogICAgICAgICAgICAg -ICAgICAgICAgICBuZXUgPSBAKCROZXUpDQogICAgICAgICAgICAgICAgICAgICAgICBlbnRmZXJu -dCA9IEAoJEVudGZlcm50KQ0KICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWNoZXIgPSBAKCRV -bnNpY2hlcikNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBhbnph -aGwgPSBAew0KICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uZW5FeGNlbCA9ICRQZXJzb25l -bkV4Y2VsLkNvdW50DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgRGVidWctTG9nICdBUEknICJQT1NUIC9hcGkvaW1wb3J0L2V4Y2VsL3Zv -cnNjaGF1IC0+ICQoJFBlcnNvbmVuRXhjZWwuQ291bnQpIFBlcnNvbmVuLCBtYXRjaD0kKCRNYXRj -aC5Db3VudCkgbmV1PSQoJE5ldS5Db3VudCkgZW50ZmVybnQ9JCgkRW50ZmVybnQuQ291bnQpIHVu -c2ljaGVyPSQoJFVuc2ljaGVyLkNvdW50KSINCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAg -ICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09PT09PT09PT09PT09PT09PSBGTEQ6IEVY -Q0VMLUlNUE9SVCAoVWViZXJuYWhtZSkgPT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAg -ICAjIFNwaWVnZWwgenUgc2VydmVyLnB5IFBPU1QgL2FwaS9pbXBvcnQvZXhjZWwvdWViZXJuZWht -ZW4uDQogICAgICAgICAgICAjIEJvZHkgZW50aGFlbHQgZ2VwYXJzdGUgRXhjZWwtRGF0ZW4gKyBV -c2VyLUFrdGlvbmVuIGF1cyBkZW0gV2l6YXJkLg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAn -L2FwaS9pbXBvcnQvZXhjZWwvdWViZXJuZWhtZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7 -DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVy -cm9yICRSZXMgJ051ciBTdXBlclVzZXIgZHVlcmZlbiBpbXBvcnRpZXJlbicgNDAzOyBjb250aW51 -ZSB9DQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0KICAgICAgICAgICAg -ICAgIGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAkUmVzICdBbmZyYWdlIHp1IGdy -b3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAg -ICAgICAgICAkUGFyYW0gPSAkQm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAg -ICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzICdVbmd1ZWx0 -aWdlcyBKU09OJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAg -ICAgICAgJFBhcnNlZCA9ICRQYXJhbS5wYXJzZWREYXRlbg0KICAgICAgICAgICAgICAgICRBa3Rp -b25lbiA9IEAoJFBhcmFtLnBlcnNvbmVuQWt0aW9uZW4pDQogICAgICAgICAgICAgICAgJE9wdHMg -PSAkUGFyYW0udWViZXJuZWhtZW4NCiAgICAgICAgICAgICAgICAkT3B0U2NoaWNodGVuID0gaWYg -KCRPcHRzLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3NjaGljaHRlbiddKSB7IFtib29sXSRPcHRzLnNj -aGljaHRlbiB9IGVsc2UgeyAkdHJ1ZSB9DQogICAgICAgICAgICAgICAgJE9wdEtvbW1lbnRhcmUg -PSBpZiAoJE9wdHMuUFNPYmplY3QuUHJvcGVydGllc1sna29tbWVudGFyZSddKSB7IFtib29sXSRP -cHRzLmtvbW1lbnRhcmUgfSBlbHNlIHsgJHRydWUgfQ0KICAgICAgICAgICAgICAgICRPcHRTb25k -ZXJ0ZXJtaW5lID0gaWYgKCRPcHRzLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3NvbmRlcnRlcm1pbmUn -XSkgeyBbYm9vbF0kT3B0cy5zb25kZXJ0ZXJtaW5lIH0gZWxzZSB7ICR0cnVlIH0NCiAgICAgICAg -ICAgICAgICAkT3B0VGFnZXNkYXRlbiA9IGlmICgkT3B0cy5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0 -YWdlc2RhdGVuJ10pIHsgW2Jvb2xdJE9wdHMudGFnZXNkYXRlbiB9IGVsc2UgeyAkdHJ1ZSB9DQog -ICAgICAgICAgICAgICAgJE9wdFJlaWhlbmZvbGdlID0gaWYgKCRPcHRzLlBTT2JqZWN0LlByb3Bl -cnRpZXNbJ3JlaWhlbmZvbGdlJ10pIHsgW2Jvb2xdJE9wdHMucmVpaGVuZm9sZ2UgfSBlbHNlIHsg -JHRydWUgfQ0KDQogICAgICAgICAgICAgICAgJEV4Y2VsUGVyc29uZW4gPSBpZiAoJFBhcnNlZC5Q -U09iamVjdC5Qcm9wZXJ0aWVzWydwZXJzb25lbiddKSB7IEAoJFBhcnNlZC5wZXJzb25lbikgfSBl -bHNlIHsgQCgpIH0NCiAgICAgICAgICAgICAgICAkRXhjZWxFaW50cmFlZ2UgPSBpZiAoJFBhcnNl -ZC5QU09iamVjdC5Qcm9wZXJ0aWVzWydlaW50cmFlZ2UnXSkgeyAkUGFyc2VkLmVpbnRyYWVnZSB9 -IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAgICAgJEV4Y2VsUGZsaWNodCA9IGlmICgkUGFy -c2VkLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3BmbGljaHQnXSkgeyAkUGFyc2VkLnBmbGljaHQgfSBl -bHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgICRFeGNlbEtvbW1lbnRhcmUgPSBpZiAoJFBh -cnNlZC5QU09iamVjdC5Qcm9wZXJ0aWVzWydrb21tZW50YXJlJ10pIHsgJFBhcnNlZC5rb21tZW50 -YXJlIH0gZWxzZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAkRXhjZWxUZXJtaW5lID0gaWYg -KCRQYXJzZWQuUFNPYmplY3QuUHJvcGVydGllc1sndGVybWluZSddKSB7ICRQYXJzZWQudGVybWlu -ZSB9IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAgICAgJEV4Y2VsVGFnZXNkYXRlbiA9IGlm -ICgkUGFyc2VkLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RhZ2VzZGF0ZW4nXSkgeyAkUGFyc2VkLnRh -Z2VzZGF0ZW4gfSBlbHNlIHsgJG51bGwgfQ0KDQogICAgICAgICAgICAgICAgIyBFeGNlbC1Sb3cg -LT4gRXhjZWwtUGVyc29uIEhhc2htYXANCiAgICAgICAgICAgICAgICAkRXhjZWxCeVJvdyA9IEB7 -fQ0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRFeGNlbFBlcnNvbmVuKSB7DQogICAg -ICAgICAgICAgICAgICAgIGlmICgkcC5QU09iamVjdC5Qcm9wZXJ0aWVzWydleGNlbFJvdyddKSB7 -DQogICAgICAgICAgICAgICAgICAgICAgICAkRXhjZWxCeVJvd1tbaW50XSRwLmV4Y2VsUm93XSA9 -ICRwDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAg -ICAgICAgICAkSmV0enQgPSBHZXQtRGF0ZSAtRm9ybWF0ICd5eXl5LU1NLWRkIEhIOm1tOnNzJw0K -ICAgICAgICAgICAgICAgICRUcyA9IEdldC1EYXRlIC1Gb3JtYXQgJ3l5eXlNTWRkX0hIbW1zcycN -CiAgICAgICAgICAgICAgICAkQmFja3VwTmFtZSA9ICJwbGFudW5nX2JhY2t1cF92b3JfZXhjZWxf -aW1wb3J0XyRUcy5qc29uIg0KDQogICAgICAgICAgICAgICAgJExvY2tSZXN1bHQgPSAkbnVsbA0K -ICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRMb2NrUmVzdWx0ID0g -SW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAgICAg -ICAgICAkUGxhbnVuZyA9IFJlYWQtSnNvbkZpbGUgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAg -ICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJFBsYW51bmcpIHsgcmV0dXJuIEB7IHR5cCA9ICdl -cnJvcic7IGNvZGUgPSA0MDQ7IG1zZyA9ICdwbGFudW5nLmpzb24gbmljaHQgZ2VmdW5kZW4nIH0g -fQ0KICAgICAgICAgICAgICAgICAgICAgICAgIyBCYWNrdXAgdW50ZXIgZGVtIExvY2sNCiAgICAg -ICAgICAgICAgICAgICAgICAgICRQbGFudW5nUGF0aCA9IEpvaW4tUGF0aCAkRGF0YURpciAncGxh -bnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgQ29weS1JdGVtIC1QYXRoICRQbGFu -dW5nUGF0aCAtRGVzdGluYXRpb24gKEpvaW4tUGF0aCAkRGF0YURpciAkQmFja3VwTmFtZSkgLUZv -cmNlDQogICAgICAgICAgICAgICAgICAgICAgICBJbnZva2UtQmFja3VwUm90YXRpb24gJ3BsYW51 -bmdfYmFja3VwXyouanNvbicgMjANCg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3Qg -JFBsYW51bmcuUFNPYmplY3QuUHJvcGVydGllc1sncGVyc29uZW4nXSkgeyAkUGxhbnVuZyB8IEFk -ZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICdwZXJzb25lbicgLVZhbHVl -IEAoKSB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkUGxhbnVuZy5QU09iamVj -dC5Qcm9wZXJ0aWVzWydlaW50cmFlZ2UnXSkgeyAkUGxhbnVuZyB8IEFkZC1NZW1iZXIgLU1lbWJl -clR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICdlaW50cmFlZ2UnIC1WYWx1ZSAoTmV3LU9iamVjdCBQ -U09iamVjdCkgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJFBsYW51bmcuUFNP -YmplY3QuUHJvcGVydGllc1sncGZsaWNodCddKSB7ICRQbGFudW5nIHwgQWRkLU1lbWJlciAtTWVt -YmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ3BmbGljaHQnIC1WYWx1ZSAoTmV3LU9iamVjdCBQ -U09iamVjdCkgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJFBsYW51bmcuUFNP -YmplY3QuUHJvcGVydGllc1sna29tbWVudGFyZSddKSB7ICRQbGFudW5nIHwgQWRkLU1lbWJlciAt -TWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ2tvbW1lbnRhcmUnIC1WYWx1ZSAoTmV3LU9i -amVjdCBQU09iamVjdCkgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAjIFBlcnNvbmVuLUxp -c3RlIG11dGllcmVuDQogICAgICAgICAgICAgICAgICAgICAgICAkUGVyc29uZW5MaXN0ZSA9IE5l -dy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdA0KICAgICAgICAgICAgICAgICAg -ICAgICAgZm9yZWFjaCAoJHAgaW4gQCgkUGxhbnVuZy5wZXJzb25lbikpIHsgW3ZvaWRdJFBlcnNv -bmVuTGlzdGUuQWRkKCRwKSB9DQogICAgICAgICAgICAgICAgICAgICAgICAkTmV4dElkID0gMQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHAgaW4gJFBlcnNvbmVuTGlzdGUpIHsN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGllc1sn -aWQnXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaSA9IFtpbnRdJHAuaWQN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRpIC1nZSAkTmV4dElkKSB7ICRO -ZXh0SWQgPSAkaSArIDEgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgJEV4Y2VsUm93VG9Q -aWQgPSBAe30NCiAgICAgICAgICAgICAgICAgICAgICAgICROUGVyc29uZW5OZXUgPSAwOyAkTlBl -cnNvbmVuRGVha3QgPSAwOyAkTlBlcnNvbmVuQWt0dWFsaXNpZXJ0ID0gMA0KICAgICAgICAgICAg -ICAgICAgICAgICAgIyBwbGFudW5nLVBlcnNvbmVuLUxvb2t1cCBuYWNoIGlkIChmdWVyIG1hdGNo -LVVwZGF0ZXMpDQogICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZ0J5SWQgPSBAe30NCiAg -ICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRQZXJzb25lbkxpc3RlKSB7DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2lk -J10pIHsgJFBsYW51bmdCeUlkW1tpbnRdJHAuaWRdID0gJHAgfQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGEgaW4gJEFrdGlvbmVu -KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFrdCA9IFtzdHJpbmddJGEuYWt0aW9u -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRha3QgLWVxICdtYXRjaCcpIHsNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVyID0gW2ludF0kYS5leGNlbFJvdw0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWF0Y2hQaWQgPSBbaW50XSRhLnBsYW51bmdz -SWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBTY2hpY2h0ZW4gKyBLb21tZW50 -YXJlIHdlcmRlbiBJTU1FUiBpbXBvcnRpZXJ0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICMgKGF1Y2ggZnVlciBpbmFrdGl2ZSBQZXJzb25lbiAtIERhdGVuIHZlcmZ1ZWdiYXINCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmYWxscyBkaWUgUGVyc29uIHNwYWV0ZXIg -cmVha3RpdmllcnQgd2lyZCkuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZWFr -dCA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGEuUFNPYmpl -Y3QuUHJvcGVydGllc1sncmVha3RpdmllcmVuJ10pIHsgJHJlYWt0ID0gW2Jvb2xdJGEucmVha3Rp -dmllcmVuIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEV4Y2VsUm93VG9QaWRb -JGVyXSA9ICRtYXRjaFBpZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEV4Y2Vs -LUZlbGRlciBzcGllZ2VsbiwgYWJlciBOVVIgbGVlcmUgRmVsZGVyIHVlYmVyc2NocmVpYmVuDQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkRXhjZWxCeVJvdy5Db250YWluc0tl -eSgkZXIpIC1hbmQgJFBsYW51bmdCeUlkLkNvbnRhaW5zS2V5KCRtYXRjaFBpZCkpIHsNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlcCA9ICRFeGNlbEJ5Um93WyRlcl0NCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YXJnZXQgPSAkUGxhbnVuZ0J5SWRb -JG1hdGNoUGlkXQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGdlYWVuZGVy -dCA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSZWFrdGl2 -aWVyZW4gTlVSIHdlbm4gVXNlciBleHBsaXppdCBhbmdlZm9yZGVydA0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgJGlzdEFrdGl2ID0gLW5vdCAkdGFyZ2V0LlBTT2JqZWN0LlBy -b3BlcnRpZXNbJ2FrdGl2J10gLW9yICR0YXJnZXQuYWt0aXYgLWVxICR0cnVlDQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkaXN0QWt0aXYgLWFuZCAkcmVha3Qp -IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRhcmdldC5Q -U09iamVjdC5Qcm9wZXJ0aWVzWydha3RpdiddKSB7ICR0YXJnZXQuYWt0aXYgPSAkdHJ1ZSB9DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICR0YXJnZXQgfCBB -ZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAnYWt0aXYnIC1WYWx1ZSAk -dHJ1ZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGdlYWVuZGVy -dCA9ICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZmVsZCBpbiBAKCduYWNobmFt -ZScsICdkaWVuc3RncmFkJywgJ2Z1bmt0aW9uJykpIHsNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAkbmV1ID0gaWYgKCRlcC5QU09iamVjdC5Qcm9wZXJ0aWVzWyRmZWxk -XSkgeyAoW3N0cmluZ10kZXAuJGZlbGQpLlRyaW0oKSB9IGVsc2UgeyAnJyB9DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsdCA9IGlmICgkdGFyZ2V0LlBTT2JqZWN0 -LlByb3BlcnRpZXNbJGZlbGRdKSB7IChbc3RyaW5nXSR0YXJnZXQuJGZlbGQpLlRyaW0oKSB9IGVs -c2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRu -ZXUgLWFuZCAtbm90ICRhbHQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgaWYgKCR0YXJnZXQuUFNPYmplY3QuUHJvcGVydGllc1skZmVsZF0pIHsgJHRhcmdl -dC4kZmVsZCA9ICRuZXUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICBlbHNlIHsgJHRhcmdldCB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5 -IC1OYW1lICRmZWxkIC1WYWx1ZSAkbmV1IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgJGdlYWVuZGVydCA9ICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBMZWdhY3ktRmVsZCAnbmFt -ZScgYXVzIGFsdGVuIERhdGVuc3RhZW5kZW4gZW50ZmVybmVuIChBdWRpdC1JdGVyLUIpDQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRhcmdldC5QU09iamVjdC5Qcm9w -ZXJ0aWVzWyduYW1lJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAkdGFyZ2V0LlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCduYW1lJykNCiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZ2VhZW5kZXJ0ID0gJHRydWUNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIGlmICgkZ2VhZW5kZXJ0KSB7ICROUGVyc29uZW5Ba3R1YWxpc2llcnQrKyB9DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICB9IGVsc2VpZiAoJGFrdCAtZXEgJ25ldScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgJGVyID0gW2ludF0kYS5leGNlbFJvdw0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICBpZiAoLW5vdCAkRXhjZWxCeVJvdy5Db250YWluc0tleSgkZXIpKSB7IGNvbnRpbnVl -IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVwID0gJEV4Y2VsQnlSb3dbJGVy -XQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXhOYWNoID0gaWYgKCRlcC5QU09i -amVjdC5Qcm9wZXJ0aWVzWyduYWNobmFtZSddKSB7ICRlcC5uYWNobmFtZSB9IGVsc2UgeyAnJyB9 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2l6YXJkLVJhZGlvICJpbmFrdGl2 -IGltcG9ydGllcmVuIiByZXNwZWt0aWVyZW4gKEF1ZGl0LUl0ZXItQikNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgJEFrdGl2RmxhZyA9ICR0cnVlDQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWydha3RpdiddIC1hbmQgJG51 -bGwgLW5lICRhLmFrdGl2KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk -QWt0aXZGbGFnID0gW2Jvb2xdJGEuYWt0aXYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTmV1UGVyc29uID0gW1BTQ3Vz -dG9tT2JqZWN0XUB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9ICRO -ZXh0SWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFrdGl2ID0gJEFrdGl2 -RmxhZw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9ybmFtZSA9IGlmICgk -ZXAuUFNPYmplY3QuUHJvcGVydGllc1sndm9ybmFtZSddKSB7ICRlcC52b3JuYW1lIH0gZWxzZSB7 -ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hY2huYW1lID0gJGV4 -TmFjaA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGllbnN0Z3JhZCA9IGlm -ICgkZXAuUFNPYmplY3QuUHJvcGVydGllc1snZGllbnN0Z3JhZCddKSB7ICRlcC5kaWVuc3RncmFk -IH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmt0 -aW9uID0gaWYgKCRlcC5QU09iamVjdC5Qcm9wZXJ0aWVzWydmdW5rdGlvbiddKSB7ICRlcC5mdW5r -dGlvbiB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZvaWRdJFBlcnNvbmVuTGlzdGUuQWRkKCRO -ZXVQZXJzb24pDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nQnlJZFsk -TmV4dElkXSA9ICROZXVQZXJzb24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEV4 -Y2VsUm93VG9QaWRbJGVyXSA9ICROZXh0SWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgJE5leHRJZCsrDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICROUGVyc29uZW5O -ZXUrKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkYWt0IC1lcSAnZGVh -a3RpdmllcmVuJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGVha3RJZCA9 -IFtpbnRdJGEucGxhbnVuZ3NJZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Jl -YWNoICgkcCBpbiAkUGVyc29uZW5MaXN0ZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2lkJ10gLWFuZCBbaW50XSRwLmlk -IC1lcSAkZGVha3RJZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -IGlmICgkcC5QU09iamVjdC5Qcm9wZXJ0aWVzWydha3RpdiddKSB7ICRwLmFrdGl2ID0gJGZhbHNl -IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJHAgfCBB -ZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAnYWt0aXYnIC1WYWx1ZSAk -ZmFsc2UgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICROUGVyc29u -ZW5EZWFrdCsrDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBTY2hpY2h0ZW4g -KyBQZmxpY2h0DQogICAgICAgICAgICAgICAgICAgICAgICAkTkVpbnRyYWVnZSA9IDA7ICROUGZs -aWNodCA9IDA7ICROT3JwaGFuID0gMA0KICAgICAgICAgICAgICAgICAgICAgICAgIyBBdWRpdC1J -SS0xIEYxOiBTY2hpY2h0Y29kZS1XaGl0ZWxpc3QgYXVjaCBpbSBFeGNlbC1JbXBvcnQuDQogICAg -ICAgICAgICAgICAgICAgICAgICAjIE1pcnJvciB6dSBzZXJ2ZXIucHk6Mzc2Ni0zNzcwLg0KICAg -ICAgICAgICAgICAgICAgICAgICAgJEV4Y2VsVmFsaWRDb2RlcyA9IE5ldy1PYmplY3QgU3lzdGVt -LkNvbGxlY3Rpb25zLkdlbmVyaWMuSGFzaFNldFtzdHJpbmddDQogICAgICAgICAgICAgICAgICAg -ICAgICBbdm9pZF0kRXhjZWxWYWxpZENvZGVzLkFkZCgnJykNCiAgICAgICAgICAgICAgICAgICAg -ICAgIGlmICgkbnVsbCAtbmUgJEFkbWluIC1hbmQgJEFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNb -J3NjaGljaHRjb2RlcyddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAo -JFNjIGluICRBZG1pbi5zY2hpY2h0Y29kZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgaWYgKCRudWxsIC1uZSAkU2MgLWFuZCAkU2MuUFNPYmplY3QuUHJvcGVydGllc1snY29k -ZSddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0kRXhjZWxW -YWxpZENvZGVzLkFkZChbc3RyaW5nXSRTYy5jb2RlKQ0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRPcHRTY2hpY2h0ZW4gLWFu -ZCAkbnVsbCAtbmUgJEV4Y2VsRWludHJhZWdlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgZm9yZWFjaCAoJERhdHVtUHJvcCBpbiAkRXhjZWxFaW50cmFlZ2UuUFNPYmplY3QuUHJvcGVy -dGllcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRGF0dW0gPSAkRGF0dW1Q -cm9wLk5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJFBsYW51 -bmcuZWludHJhZWdlLlBTT2JqZWN0LlByb3BlcnRpZXNbJERhdHVtXSkgew0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcuZWludHJhZWdlIHwgQWRkLU1lbWJlciAt -TWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJERhdHVtIC1WYWx1ZSAoTmV3LU9iamVjdCBQ -U09iamVjdCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkUGlkUHJvcCBpbiAkRGF0dW1Qcm9wLlZhbHVl -LlBTT2JqZWN0LlByb3BlcnRpZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICRlciA9IFtpbnRdJFBpZFByb3AuTmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgaWYgKC1ub3QgJEV4Y2VsUm93VG9QaWQuQ29udGFpbnNLZXkoJGVyKSkgeyBjb250 -aW51ZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGlkU3RyID0gW3N0 -cmluZ10kRXhjZWxSb3dUb1BpZFskZXJdDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAkd2VydCA9IFtzdHJpbmddJFBpZFByb3AuVmFsdWUNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIGlmICgtbm90ICRFeGNlbFZhbGlkQ29kZXMuQ29udGFpbnMoJHdlcnQp -KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5PcnBoYW4rKw0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICBpZiAoJFBsYW51bmcuZWludHJhZWdlLiREYXR1bS5QU09iamVjdC5Qcm9wZXJ0 -aWVzWyRwaWRTdHJdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -JFBsYW51bmcuZWludHJhZWdlLiREYXR1bS4kcGlkU3RyID0gJHdlcnQNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgJFBsYW51bmcuZWludHJhZWdlLiREYXR1bSB8IEFkZC1NZW1iZXIgLU1l -bWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICRwaWRTdHIgLVZhbHVlICR3ZXJ0DQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAkTkVpbnRyYWVnZSsrDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgaWYgKCRudWxsIC1uZSAkRXhjZWxQZmxpY2h0KSB7DQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIGZvcmVhY2ggKCREYXR1bVByb3AgaW4gJEV4Y2VsUGZsaWNodC5QU09iamVj -dC5Qcm9wZXJ0aWVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRGF0 -dW0gPSAkRGF0dW1Qcm9wLk5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -IGlmICgtbm90ICRQbGFudW5nLnBmbGljaHQuUFNPYmplY3QuUHJvcGVydGllc1skRGF0dW1dKSB7 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcucGZsaWNo -dCB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICREYXR1bSAtVmFs -dWUgKE5ldy1PYmplY3QgUFNPYmplY3QpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkUGlk -UHJvcCBpbiAkRGF0dW1Qcm9wLlZhbHVlLlBTT2JqZWN0LlByb3BlcnRpZXMpIHsNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXIgPSBbaW50XSRQaWRQcm9wLk5hbWUN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkRXhjZWxS -b3dUb1BpZC5Db250YWluc0tleSgkZXIpKSB7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAkcGlkU3RyID0gW3N0cmluZ10kRXhjZWxSb3dUb1BpZFsk -ZXJdDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQaWRQcm9w -LlZhbHVlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm -ICgkUGxhbnVuZy5wZmxpY2h0LiREYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwaWRTdHJdKSB7 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVu -Zy5wZmxpY2h0LiREYXR1bS4kcGlkU3RyID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLnBmbGljaHQuJERhdHVtIHwgQWRkLU1lbWJl -ciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJHBpZFN0ciAtVmFsdWUgJHRydWUNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTlBmbGljaHQrKw0KICAgICAgICAgICAg +DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICRBbnogPSAwOyAkTk9ycGhhbiA9IDANCiAgICAg +ICAgICAgICAgICAgICAgICAgIGlmICgkUGFyYW0uUFNPYmplY3QuUHJvcGVydGllc1snZWludHJh +ZWdlJ10gLWFuZCAkbnVsbCAtbmUgJFBhcmFtLmVpbnRyYWVnZSkgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIGZvcmVhY2ggKCREYXR1bVByb3AgaW4gJFBhcmFtLmVpbnRyYWVnZS5QU09i +amVjdC5Qcm9wZXJ0aWVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICREYXR1 +bSA9ICREYXR1bVByb3AuTmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGlk +TWFwID0gJERhdHVtUHJvcC5WYWx1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp +ZiAoLW5vdCAkUGxhbnVuZy5laW50cmFlZ2UuUFNPYmplY3QuUHJvcGVydGllc1skRGF0dW1dKSB7 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy5laW50cmFlZ2Ug +fCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAkRGF0dW0gLVZhbHVl +IChOZXctT2JqZWN0IFBTT2JqZWN0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRQaWRQcm9wIGluICRQ +aWRNYXAuUFNPYmplY3QuUHJvcGVydGllcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgJFBlcnNvbklkID0gW3N0cmluZ10kUGlkUHJvcC5OYW1lDQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAkV2VydCA9IFtzdHJpbmddJFBpZFByb3AuVmFsdWUNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRWYWxpZENvZGVzLkNv +bnRhaW5zKCRXZXJ0KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICROT3JwaGFuKysNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250 +aW51ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQbGFudW5nLmVpbnRyYWVnZS4kRGF0dW0uUFNP +YmplY3QuUHJvcGVydGllc1skUGVyc29uSWRdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgJFBsYW51bmcuZWludHJhZWdlLiREYXR1bS4kUGVyc29uSWQgPSAkV2Vy +dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy5laW50cmFlZ2UuJERhdHVt +IHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJFBlcnNvbklkIC1W +YWx1ZSAkV2VydA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEFueisrDQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkUGFyYW0uUFNP +YmplY3QuUHJvcGVydGllc1sncGZsaWNodCddIC1hbmQgJG51bGwgLW5lICRQYXJhbS5wZmxpY2h0 +KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJERhdHVtUHJvcCBpbiAk +UGFyYW0ucGZsaWNodC5QU09iamVjdC5Qcm9wZXJ0aWVzKSB7DQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICREYXR1bSA9ICREYXR1bVByb3AuTmFtZQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAkUGlkTWFwID0gJERhdHVtUHJvcC5WYWx1ZQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkUGxhbnVuZy5wZmxpY2h0LlBTT2JqZWN0LlByb3Bl +cnRpZXNbJERhdHVtXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBs +YW51bmcucGZsaWNodCB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1l +ICREYXR1bSAtVmFsdWUgKE5ldy1PYmplY3QgUFNPYmplY3QpDQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAo +JFBpZFByb3AgaW4gJFBpZE1hcC5QU09iamVjdC5Qcm9wZXJ0aWVzKSB7DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAkUGVyc29uSWQgPSBbc3RyaW5nXSRQaWRQcm9wLk5hbWUN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRGbGFnID0gJFBpZFByb3AuVmFs +dWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkRmxhZykgew0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkUGxhbnVuZy5wZmxpY2h0 +LiREYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRQZXJzb25JZF0pIHsNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcucGZsaWNodC4kRGF0dW0uJFBl +cnNvbklkID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 +IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxh +bnVuZy5wZmxpY2h0LiREYXR1bSB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5 +IC1OYW1lICRQZXJzb25JZCAtVmFsdWUgJHRydWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs +c2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkUGxhbnVu +Zy5wZmxpY2h0LiREYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRQZXJzb25JZF0pIHsNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcucGZsaWNodC4k +RGF0dW0uUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJFBlcnNvbklkKQ0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAg -ICAgICAgICAgICAgICAgICAgIyBLb21tZW50YXJlDQogICAgICAgICAgICAgICAgICAgICAgICAk -TktvbW1lbnRhcmUgPSAwDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJE9wdEtvbW1lbnRh -cmUgLWFuZCAkbnVsbCAtbmUgJEV4Y2VsS29tbWVudGFyZSkgew0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIGZvcmVhY2ggKCREYXR1bVByb3AgaW4gJEV4Y2VsS29tbWVudGFyZS5QU09iamVj -dC5Qcm9wZXJ0aWVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICREYXR1bSA9 -ICREYXR1bVByb3AuTmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5v -dCAkUGxhbnVuZy5rb21tZW50YXJlLlBTT2JqZWN0LlByb3BlcnRpZXNbJERhdHVtXSkgew0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcua29tbWVudGFyZSB8IEFk -ZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICREYXR1bSAtVmFsdWUgKE5l -dy1PYmplY3QgUFNPYmplY3QpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJFBpZFByb3AgaW4gJERhdHVt -UHJvcC5WYWx1ZS5QU09iamVjdC5Qcm9wZXJ0aWVzKSB7DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAkZXIgPSBbaW50XSRQaWRQcm9wLk5hbWUNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRFeGNlbFJvd1RvUGlkLkNvbnRhaW5zS2V5KCRl -cikpIHsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBp -ZFN0ciA9IFtzdHJpbmddJEV4Y2VsUm93VG9QaWRbJGVyXQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgJEtvbU9iaiA9IFtQU0N1c3RvbU9iamVjdF1Aew0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSBbc3RyaW5nXSRQaWRQcm9wLlZhbHVl -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VhZW5kZXJ0QW0gPSAk -SmV0enQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZWFlbmRlcnRW -b24gPSAoR2V0LUFrdHVlbGxlckJlbnV0emVyKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQbGFu -dW5nLmtvbW1lbnRhcmUuJERhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXNbJHBpZFN0cl0pIHsNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy5rb21tZW50YXJl -LiREYXR1bS4kcGlkU3RyID0gJEtvbU9iag0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk -UGxhbnVuZy5rb21tZW50YXJlLiREYXR1bSB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVBy -b3BlcnR5IC1OYW1lICRwaWRTdHIgLVZhbHVlICRLb21PYmoNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRO -S29tbWVudGFyZSsrDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAg -ICAgICAgICAgICAgICAgICAgICMgUmVpaGVuZm9sZ2UNCiAgICAgICAgICAgICAgICAgICAgICAg -IGlmICgkT3B0UmVpaGVuZm9sZ2UpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRXhj -ZWxPcmRlclJvd3MgPSBAKCRBa3Rpb25lbiB8IFdoZXJlLU9iamVjdCB7IEAoJ21hdGNoJywnbmV1 -JykgLWNvbnRhaW5zICRfLmFrdGlvbiAtYW5kICRfLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2V4Y2Vs -Um93J10gfSB8IFNvcnQtT2JqZWN0IHsgW2ludF0kXy5leGNlbFJvdyB9KQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICRTb3J0UGlkcyA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25z -LkFycmF5TGlzdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRhIGluICRF -eGNlbE9yZGVyUm93cykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXIgPSBb -aW50XSRhLmV4Y2VsUm93DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkRXhj -ZWxSb3dUb1BpZC5Db250YWluc0tleSgkZXIpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAkc29ydElkID0gJEV4Y2VsUm93VG9QaWRbJGVyXQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJFNvcnRQaWRzLkNvbnRhaW5zKCRzb3J0SWQp -KSB7IFt2b2lkXSRTb3J0UGlkcy5BZGQoJHNvcnRJZCkgfQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICRCeUlkID0gQHt9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -Zm9yZWFjaCAoJHAgaW4gJFBlcnNvbmVuTGlzdGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2lkJ10pIHsgJEJ5SWRbW2ludF0k -cC5pZF0gPSAkcCB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICROZXVlTGlzdGUgPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9u -cy5BcnJheUxpc3QNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcGVyc0lk -IGluICRTb3J0UGlkcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJEJ5 -SWQuQ29udGFpbnNLZXkoJHBlcnNJZCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgIFt2b2lkXSROZXVlTGlzdGUuQWRkKCRCeUlkWyRwZXJzSWRdKQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgJEJ5SWQuUmVtb3ZlKCRwZXJzSWQpDQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSZXN0bGljaGUgUGVyc29uZW46IGFrdGl2ZSB6 -dWVyc3QNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUmVzdEFrdGl2ZSA9IEAoJEJ5SWQu -VmFsdWVzIHwgV2hlcmUtT2JqZWN0IHsgLW5vdCAkXy5QU09iamVjdC5Qcm9wZXJ0aWVzWydha3Rp -diddIC1vciAkXy5ha3RpdiAtZXEgJHRydWUgfSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAkUmVzdEluYWt0aXZlID0gQCgkQnlJZC5WYWx1ZXMgfCBXaGVyZS1PYmplY3QgeyAkXy5QU09i -amVjdC5Qcm9wZXJ0aWVzWydha3RpdiddIC1hbmQgJF8uYWt0aXYgLWVxICRmYWxzZSB9KQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRSZXN0QWt0aXZlKSB7IFt2 -b2lkXSROZXVlTGlzdGUuQWRkKCRwKSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y -ZWFjaCAoJHAgaW4gJFJlc3RJbmFrdGl2ZSkgeyBbdm9pZF0kTmV1ZUxpc3RlLkFkZCgkcCkgfQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgJ3Bvc2l0aW9uJyBmb3J0bGF1ZmVuZCBuZXUg -dmVyZ2ViZW4gKEZyb250ZW5kIHNvcnRpZXJ0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -IyBuYWNoIHAucG9zaXRpb24sIE5JQ0hUIG5hY2ggQXJyYXktUmVpaGVuZm9sZ2UpDQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgJHBvc0NvdW50ZXIgPSAxDQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgZm9yZWFjaCAoJHAgaW4gJE5ldWVMaXN0ZSkgew0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGllc1sncG9zaXRpb24nXSkgeyAk -cC5wb3NpdGlvbiA9ICRwb3NDb3VudGVyIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgZWxzZSB7ICRwIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUg -J3Bvc2l0aW9uJyAtVmFsdWUgJHBvc0NvdW50ZXIgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAkcG9zQ291bnRlcisrDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLnBlcnNvbmVuID0gQCgkTmV1ZUxpc3Rl -KQ0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAjIEF1Y2ggb2huZSBSZWloZW5mb2xnZS1VcGRhdGU6IG5ldWUgUGVyc29uZW4gYnJh -dWNoZW4gJ3Bvc2l0aW9uJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtYXhQb3MgPSAw -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHAgaW4gJFBlcnNvbmVuTGlz -dGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwLlBTT2JqZWN0LlBy -b3BlcnRpZXNbJ3Bvc2l0aW9uJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICRwcCA9IFtpbnRdKCRwLnBvc2l0aW9uIHwgRm9yRWFjaC1PYmplY3QgeyBpZiAoJF8pIHsg -JF8gfSBlbHNlIHsgMCB9IH0pDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp -ZiAoJHBwIC1ndCAkbWF4UG9zKSB7ICRtYXhQb3MgPSAkcHAgfQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRQZXJzb25lbkxpc3RlKSB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoYXRQb3MgPSAkZmFsc2UNCiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Bvc2l0aW9u -J10gLWFuZCAkcC5wb3NpdGlvbikgeyAkaGF0UG9zID0gJHRydWUgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkaGF0UG9zKSB7DQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAkbWF4UG9zKysNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgIGlmICgkcC5QU09iamVjdC5Qcm9wZXJ0aWVzWydwb3NpdGlvbiddKSB7ICRwLnBvc2l0 -aW9uID0gJG1heFBvcyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNl -IHsgJHAgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAncG9zaXRp -b24nIC1WYWx1ZSAkbWF4UG9zIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAkUGxhbnVuZy5wZXJzb25lbiA9IEAoJFBlcnNvbmVuTGlzdGUpDQogICAgICAgICAgICAgICAg -ICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICMgLS0tLSBUYWdlc2RhdGVuIC8g -U2NoaWNodHJvdGF0aW9uIGF1cyBFeGNlbC1SNC1SOSAtLS0tDQogICAgICAgICAgICAgICAgICAg -ICAgICAkTlJvdGF0aW9uU2xvdHMgPSAwDQogICAgICAgICAgICAgICAgICAgICAgICAkTlRhZ2Vz -ZGF0ZW5PdmVycmlkZXMgPSAwDQogICAgICAgICAgICAgICAgICAgICAgICAkQWRtaW5NdXRhdGVk -ID0gJG51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkT3B0VGFnZXNkYXRlbiAtYW5k -ICRudWxsIC1uZSAkRXhjZWxUYWdlc2RhdGVuKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgJHRkUHJvcHMgPSBAKCRFeGNlbFRhZ2VzZGF0ZW4uUFNPYmplY3QuUHJvcGVydGllcykNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRkUHJvcHMuQ291bnQgLWd0IDApIHsNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNvcnRlZERhdGVzID0gQCgkdGRQcm9wcyB8 -IEZvckVhY2gtT2JqZWN0IHsgJF8uTmFtZSB9IHwgU29ydC1PYmplY3QpDQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICRlcnN0ZXNEID0gW2RhdGV0aW1lXTo6UGFyc2VFeGFjdCgkc29y -dGVkRGF0ZXNbMF0sICd5eXl5LU1NLWRkJywgJG51bGwpDQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICRkb3cgPSBbaW50XSRlcnN0ZXNELkRheU9mV2Vlaw0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICBpZiAoJGRvdyAtZXEgMCkgeyAkb2Zmc2V0TW8gPSAxIH0gZWxzZSB7 -ICRvZmZzZXRNbyA9ICg4IC0gJGRvdykgJSA3IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgJG1vSWR4ID0gJG9mZnNldE1vDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICR3b2NoZW5BbnphaGwgPSAzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzbG90 -Q291bnQgPSAkd29jaGVuQW56YWhsICogNw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICBpZiAoJG1vSWR4ICsgJHNsb3RDb3VudCAtbGUgJHNvcnRlZERhdGVzLkNvdW50KSB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm90YXRpb25zVGFnZSA9IEAoKQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgkaSA9IDA7ICRpIC1sdCAkc2xv -dENvdW50OyAkaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -JHJvdGF0aW9uc1RhZ2UgKz0gJEV4Y2VsVGFnZXNkYXRlbi4oJHNvcnRlZERhdGVzWyRtb0lkeCAr -ICRpXSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICRBZG1pbk11dGF0ZWQgPSBSZWFkLUpzb25GaWxlICdh -ZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxs -IC1uZSAkQWRtaW5NdXRhdGVkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgaWYgKC1ub3QgJEFkbWluTXV0YXRlZC5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0YWdlc2Rh -dGVuUm90YXRpb24nXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAkQWRtaW5NdXRhdGVkIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkg -LU5hbWUgJ3RhZ2VzZGF0ZW5Sb3RhdGlvbicgLVZhbHVlIChOZXctT2JqZWN0IFBTT2JqZWN0KQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAkcm90ID0gJEFkbWluTXV0YXRlZC50YWdlc2RhdGVu -Um90YXRpb24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm90U3Rh -cnRJc28gPSAkc29ydGVkRGF0ZXNbJG1vSWR4XQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIGlmICgkcm90LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3dvY2hlbkFuemFobCdd -KSB7ICRyb3Qud29jaGVuQW56YWhsID0gJHdvY2hlbkFuemFobCB9IGVsc2UgeyAkcm90IHwgQWRk -LU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ3dvY2hlbkFuemFobCcgLVZh -bHVlICR3b2NoZW5BbnphaGwgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIGlmICgkcm90LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3N0YXJ0RGF0dW0nXSkgeyAkcm90LnN0 -YXJ0RGF0dW0gPSAkcm90U3RhcnRJc28gfSBlbHNlIHsgJHJvdCB8IEFkZC1NZW1iZXIgLU1lbWJl -clR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICdzdGFydERhdHVtJyAtVmFsdWUgJHJvdFN0YXJ0SXNv -IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHJvdC5QU09i -amVjdC5Qcm9wZXJ0aWVzWyd0YWdlJ10pIHsgJHJvdC50YWdlID0gQCgkcm90YXRpb25zVGFnZSkg -fSBlbHNlIHsgJHJvdCB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1l -ICd0YWdlJyAtVmFsdWUgQCgkcm90YXRpb25zVGFnZSkgfQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICROUm90YXRpb25TbG90cyA9ICRzbG90Q291bnQNCg0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgT3ZlcnJpZGUtUHJ1ZWZ1bmcNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkUGxhbnVuZy5Q -U09iamVjdC5Qcm9wZXJ0aWVzWyd0YWdlc2RhdGVuJ10pIHsNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBl -IE5vdGVQcm9wZXJ0eSAtTmFtZSAndGFnZXNkYXRlbicgLVZhbHVlIChOZXctT2JqZWN0IFBTT2Jq -ZWN0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWx0ZVByb3BzID0gQCgkUGxhbnVuZy50 -YWdlc2RhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXMgfCBXaGVyZS1PYmplY3Qgew0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkXy5WYWx1ZS5QU09iamVjdC5Qcm9w -ZXJ0aWVzWydfc3JjJ10gLWFuZCAkXy5WYWx1ZS5fc3JjIC1lcSAnZXhjZWwnDQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcHIgaW4gJGFsdGVQcm9wcykgeyAkUGxhbnVuZy50 -YWdlc2RhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCRwci5OYW1lKSB9DQoNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm90U3RhcnREID0gW2RhdGV0aW1l -XTo6UGFyc2VFeGFjdCgkcm90U3RhcnRJc28sICd5eXl5LU1NLWRkJywgJG51bGwpDQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHByb3AgaW4gJHRkUHJv -cHMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRhdHVt -SXNvID0gJHByb3AuTmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAkdGQgPSAkcHJvcC5WYWx1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAkZGF0dW1EID0gW2RhdGV0aW1lXTo6UGFyc2VFeGFjdCgkZGF0dW1Jc28sICd5 -eXl5LU1NLWRkJywgJG51bGwpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICRkaWZmRGF5cyA9ICgkZGF0dW1EIC0gJHJvdFN0YXJ0RCkuRGF5cw0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXN0T3ZlcnJpZGUgPSAkZmFsc2UN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRkaWZmRGF5 -cyAtbHQgMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgJGlzdE92ZXJyaWRlID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICRzbG90SWR4ID0gJGRpZmZEYXlzICUgJHNsb3RDb3VudA0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNsb3RUZCA9ICRyb3RhdGlv -bnNUYWdlWyRzbG90SWR4XQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgJGpzb25UZCA9ICR0ZCB8IENvbnZlcnRUby1Kc29uIC1Db21wcmVzcyAtRGVwdGgg -Ng0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGpzb25T -bG90ID0gJHNsb3RUZCB8IENvbnZlcnRUby1Kc29uIC1Db21wcmVzcyAtRGVwdGggNg0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRqc29uVGQgLW5l -ICRqc29uU2xvdCkgeyAkaXN0T3ZlcnJpZGUgPSAkdHJ1ZSB9DQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgaWYgKCRpc3RPdmVycmlkZSkgew0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRkTWFya2VkID0gJHRkIHwgQ29udmVydFRvLUpz -b24gLURlcHRoIDYgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAkdGRNYXJrZWQgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBl -IE5vdGVQcm9wZXJ0eSAtTmFtZSAnX3NyYycgLVZhbHVlICdleGNlbCcgLUZvcmNlDQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFBsYW51bmcudGFn -ZXNkYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzWyRkYXR1bUlzb10pIHsNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy50YWdlc2RhdGVu -LiRkYXR1bUlzbyA9ICR0ZE1hcmtlZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy50YWdlc2RhdGVuIHwgQWRkLU1lbWJlciAtTWVt -YmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJGRhdHVtSXNvIC1WYWx1ZSAkdGRNYXJrZWQNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICROVGFnZXNkYXRlbk92ZXJy -aWRlcysrDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9 -DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLVBsYW51bmdNaXRJbnRlZ3JpdGFldCAk -UGxhbnVuZyAgICMgQnVsay1PcDogYWxsZSBITUFDcyBuZXUNCg0KICAgICAgICAgICAgICAgICAg -ICAgICAgcmV0dXJuIEB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwID0gJ29rJw0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2t1cCA9ICRCYWNrdXBOYW1lDQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgcGVyc29uZW5OZXUgPSAkTlBlcnNvbmVuTmV1DQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgcGVyc29uZW5Ba3R1YWxpc2llcnQgPSAkTlBlcnNvbmVuQWt0 -dWFsaXNpZXJ0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uZW5EZWFrdGl2aWVy -dCA9ICROUGVyc29uZW5EZWFrdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVpbnRyYWVn -ZSA9ICRORWludHJhZWdlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGZsaWNodCA9ICRO -UGZsaWNodA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtvbW1lbnRhcmUgPSAkTktvbW1l -bnRhcmUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmJla2FubnRlQ29kZXMgPSAkTk9y -cGhhbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uU2xvdHMgPSAkTlJvdGF0 -aW9uU2xvdHMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdlc2RhdGVuT3ZlcnJpZGVz -ID0gJE5UYWdlc2RhdGVuT3ZlcnJpZGVzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRt -aW5NdXRhdGVkID0gJEFkbWluTXV0YXRlZA0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAg -ICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAiVWViZXJuYWhtZS1GZWhsZXI6ICRfIiA1MDA7IGNv -bnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgaWYgKCRMb2NrUmVz -dWx0LnR5cCAtZXEgJ2Vycm9yJykgeyBTZW5kLUVycm9yICRSZXMgJExvY2tSZXN1bHQubXNnICRM -b2NrUmVzdWx0LmNvZGU7IGNvbnRpbnVlIH0NCg0KICAgICAgICAgICAgICAgICMgU29uZGVydGVy -bWluZSBzZXBhcmF0IGluIGFkbWluLmpzb24gc2NocmVpYmVuIChrZWluIEhNQUMpLg0KICAgICAg -ICAgICAgICAgICMgRXJzdCBhbGxlIHZvcmhhbmRlbmVuICdzdF9leGNlbF8nLUVpbnRyYWVnZSBs -b2VzY2hlbiwgZGFubiBuZXVlDQogICAgICAgICAgICAgICAgIyBhbmxlZ2VuIC0gc29kYXNzIFJl -LUltcG9ydCBpZGVtcG90ZW50IGlzdCB1bmQgbmljaHQgZG9wcGVsdC4NCiAgICAgICAgICAgICAg -ICAjIFVzZXItVm9yZ2FiZSAoQXVkaXQtSXRlci1ELCBzeW5jIG1pdCBzZXJ2ZXIucHk6MzgyNyk6 -IEV4Y2VsLVplaWxlDQogICAgICAgICAgICAgICAgIyAoMjUtMjkpIHdpcmQgTklDSFQgbWVociBh -bHMgS2F0ZWdvcmllIGF1c2dld2VydGV0IC0gYWxsZSBUZXJtaW5lDQogICAgICAgICAgICAgICAg -IyBzaW5kICdoaW53ZWlzJyBtaXQgSWNvbiAnaW5mbycsIFVzZXIga2xhc3NpZml6aWVydCBzcGFl -dGVyIG1hbnVlbGwNCiAgICAgICAgICAgICAgICAjIGltIFRlcm1pbmUtVGFiLiBSZS1JbXBvcnQg -YmxlaWJ0IGRhbWl0IHN0cnVrdHVyLXN0YWJpbC4NCiAgICAgICAgICAgICAgICAkTlRlcm1pbmUg -PSAwDQogICAgICAgICAgICAgICAgaWYgKCRPcHRTb25kZXJ0ZXJtaW5lKSB7DQogICAgICAgICAg -ICAgICAgICAgICRBZG1pbiA9IGlmICgkbnVsbCAtbmUgJExvY2tSZXN1bHQuYWRtaW5NdXRhdGVk -KSB7ICRMb2NrUmVzdWx0LmFkbWluTXV0YXRlZCB9IGVsc2UgeyBSZWFkLUpzb25GaWxlICdhZG1p -bi5qc29uJyB9DQogICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJEFkbWluKSB7DQog -ICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkQWRtaW4uUFNPYmplY3QuUHJvcGVydGll -c1snc29uZGVydGVybWluZSddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEFkbWlu -IHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ3NvbmRlcnRlcm1p -bmUnIC1WYWx1ZSBAKCkNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICAgICAgICAgICMgQWx0ZSBFeGNlbC1JbXBvcnRlIGZpbHRlcm4NCiAgICAgICAgICAgICAgICAg -ICAgICAgICRTdExpc3RlID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0 -DQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcyBpbiBAKCRBZG1pbi5zb25kZXJ0 -ZXJtaW5lKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzaWQgPSBpZiAoJHMuUFNP -YmplY3QuUHJvcGVydGllc1snaWQnXSkgeyBbc3RyaW5nXSRzLmlkIH0gZWxzZSB7ICcnIH0NCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkc2lkLlN0YXJ0c1dpdGgoJ3N0X2V4 -Y2VsXycpKSB7IFt2b2lkXSRTdExpc3RlLkFkZCgkcykgfQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkRXhjZWxUZXJtaW5l -KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJERhdHVtUHJvcCBpbiAk -RXhjZWxUZXJtaW5lLlBTT2JqZWN0LlByb3BlcnRpZXMpIHsNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgJERhdHVtID0gJERhdHVtUHJvcC5OYW1lDQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIGZvcmVhY2ggKCR0IGluIEAoJERhdHVtUHJvcC5WYWx1ZSkpIHsNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpc3RTa2lwID0gJGZhbHNlDQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHQuUFNPYmplY3QuUHJvcGVydGllc1sn -c2tpcCddKSB7ICRpc3RTa2lwID0gW2Jvb2xdJHQuc2tpcCB9DQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICBpZiAoJGlzdFNraXApIHsgY29udGludWUgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgJHRpdGVsID0gaWYgKCR0LlBTT2JqZWN0LlByb3BlcnRp -ZXNbJ3RpdGVsJ10pIHsgKFtzdHJpbmddJHQudGl0ZWwpLlRyaW0oKSB9IGVsc2UgeyAnJyB9DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGV4dCA9IGlmICgkdC5QU09iamVj -dC5Qcm9wZXJ0aWVzWyd0ZXh0J10pIHsgKFtzdHJpbmddJHQudGV4dCkuVHJpbSgpIH0gZWxzZSB7 -ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICR0aXRl -bCAtYW5kIC1ub3QgJHRleHQpIHsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgaWYgKC1ub3QgJHRpdGVsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgJGVyc3RlID0gKCR0ZXh0IC1zcGxpdCAiYG4iLCAyKVswXQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aXRlbCA9IGlmICgkZXJzdGUuTGVu -Z3RoIC1ndCA2MCkgeyAkZXJzdGUuU3Vic3RyaW5nKDAsIDYwKSB9IGVsc2UgeyAkZXJzdGUgfQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIyBSYW5kb20tSGV4LUlEIGFuYWxvZyB6dSBQeXRob24gc2VjcmV0 -cy50b2tlbl9oZXgoNikgLSAxMiBIZXgtWmVpY2hlbi4NCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICRSYW5kSGV4ID0gW2d1aWRdOjpOZXdHdWlkKCkuVG9TdHJpbmcoJ04nKS5T -dWJzdHJpbmcoMCwgMTIpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTmV1 -ID0gW1BTQ3VzdG9tT2JqZWN0XUB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgaWQgPSAnc3RfZXhjZWxfJyArICRSYW5kSGV4DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgZGF0dW0gPSAkRGF0dW0NCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICB0aXRlbCA9ICR0aXRlbA0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIHRleHQgPSAkdGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIGljb24gPSAnaW5mbycgICAgICAgICMgZ2VuZXJpc2NoZXMgSGlud2Vpcy1J -Y29uLCBLRUlOIEVtb2ppDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -dHlwID0gJ2hpbndlaXMnDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -IyBLRUlOICdrYXRlZ29yaWUnLUZlbGQgLSBFeGNlbC1aZWlsZW4tTWFwcGluZyB3aXJkIGlnbm9y -aWVydA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgW3ZvaWRdJFN0TGlzdGUuQWRkKCROZXUpDQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTlRlcm1pbmUrKw0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgV3JpdGUtUGxhbnVuZ01pdEludGVncml0YWV0ICRQbGFudW5nICAg +IyBCdWxrLU9wOiBhbGxlIEhNQUNzIG5ldQ0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu +IEB7IHR5cCA9ICdvayc7IGVpbnRyYWVnZSA9ICRBbno7IHVuYmVrYW5udGVDb2RlcyA9ICROT3Jw +aGFuIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0K +ICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXMgIlVlYmVybmFobWUtRmVobGVyOiAk +XyIgNTAwOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlm +ICgkTG9ja1Jlc3VsdC50eXAgLWVxICdlcnJvcicpIHsgU2VuZC1FcnJvciAkUmVzICRMb2NrUmVz +dWx0Lm1zZyAkTG9ja1Jlc3VsdC5jb2RlOyBjb250aW51ZSB9DQoNCiAgICAgICAgICAgICAgICBX +cml0ZS1Mb2dFaW50cmFnICdzY2hpY2h0ZW4uaW1wb3J0aWVydCcgQHsgZWludHJhZWdlID0gJExv +Y2tSZXN1bHQuZWludHJhZWdlOyB1bmJla2FubnRlQ29kZXMgPSAkTG9ja1Jlc3VsdC51bmJla2Fu +bnRlQ29kZXMgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7IHN0YXR1cyA9ICd1 +ZWJlcm5vbW1lbic7IGVpbnRyYWVnZSA9ICRMb2NrUmVzdWx0LmVpbnRyYWVnZTsgdW5iZWthbm50 +ZUNvZGVzID0gJExvY2tSZXN1bHQudW5iZWthbm50ZUNvZGVzIH0NCiAgICAgICAgICAgICAgICBE +ZWJ1Zy1Mb2cgJ0FQSScgIlBPU1QgL2FwaS9pbXBvcnQvc2NoaWNodGVuL3VlYmVybmVobWVuIC0+ +ICQoJExvY2tSZXN1bHQuZWludHJhZWdlKSBFaW50cmFlZ2UgZ2VzY2hyaWViZW4sICQoJExvY2tS +ZXN1bHQudW5iZWthbm50ZUNvZGVzKSB1bmJla2FubnRlIENvZGVzIHZlcndvcmZlbiINCiAgICAg +ICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09 +PT09PT09PT09PT09PT09PSBGTEQ6IEVYQ0VMLUlNUE9SVCAoVm9yc2NoYXUpID09PT09PT09PT09 +PT09PT09PT09PQ0KICAgICAgICAgICAgIyBTcGllZ2VsIHp1IHNlcnZlci5weSBQT1NUIC9hcGkv +aW1wb3J0L2V4Y2VsL3ZvcnNjaGF1Lg0KICAgICAgICAgICAgIyBDbGllbnQgKEJyb3dzZXIsIG1p +dCB4bHN4LmZ1bGwubWluLmpzIC8gU2hlZXRKUykgcGFyc3QgZGllDQogICAgICAgICAgICAjIEV4 +Y2VsLVZvcmxhZ2UgdW5kIHNjaGlja3QgZGFzIGZlcnRpZy1nZXBhcnN0ZSBTY2hlbWEuDQogICAg +ICAgICAgICAjIFNlcnZlciBsaWVmZXJ0IG51ciBkZW4gUGVyc29uZW4tRGlmZiB6dXIgYWt0dWVs +bGVuIHBsYW51bmcuanNvbi4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvaW1wb3J0 +L2V4Y2VsL3ZvcnNjaGF1JyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAg +ICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzICdOdXIg +U3VwZXJVc2VyIGR1ZXJmZW4gaW1wb3J0aWVyZW4nIDQwMzsgY29udGludWUgfQ0KICAgICAgICAg +ICAgICAgICRCb2R5ID0gUmVhZC1Cb2R5ICRSZXENCiAgICAgICAgICAgICAgICBpZiAoJG51bGwg +LWVxICRCb2R5KSB7IFNlbmQtRXJyb3IgJFJlcyAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250 +aW51ZSB9DQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJFBhcmFt +ID0gJEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQog +ICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAnVW5ndWVsdGlnZXMgSlNPTicgNDAw +OyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAk +UGFyYW0uUFNPYmplY3QuUHJvcGVydGllc1sncGVyc29uZW5FeGNlbCddIC1vciAkbnVsbCAtZXEg +JFBhcmFtLnBlcnNvbmVuRXhjZWwpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAk +UmVzICdwZXJzb25lbkV4Y2VsIChBcnJheSkgZmVobHQnIDQwMDsgY29udGludWUNCiAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgJFBlcnNvbmVuRXhjZWwgPSBAKCRQYXJhbS5wZXJz +b25lbkV4Y2VsKQ0KDQogICAgICAgICAgICAgICAgJFBsYW51bmcgPSBSZWFkLUpzb25GaWxlICdw +bGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgJFBlcnNvbmVuUGxhbnVuZyA9IEAoKQ0KICAg +ICAgICAgICAgICAgIGlmICgkUGxhbnVuZyAtYW5kICRQbGFudW5nLlBTT2JqZWN0LlByb3BlcnRp +ZXNbJ3BlcnNvbmVuJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgJFBlcnNvbmVuUGxhbnVuZyA9 +IEAoJFBsYW51bmcucGVyc29uZW4pDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAg +ICAgIyBNYXRjaC1IZXVyaXN0aWs6IE5hY2huYW1lIHp1ZXJzdCwgZGFubiBWb3JuYW1lLCBtaXQg +RGllbnN0Z3JhZCBhbHMNCiAgICAgICAgICAgICAgICAjIFRpZWJyZWFrZXIuIEhhcmQtRmFpbCB3 +ZW5uIGJlaWRlIE5hY2huYW1lbiBnZXNldHp0IGFiZXIgdW50ZXJzY2hpZWRsaWNoLg0KICAgICAg +ICAgICAgICAgICMgR3JlZWR5LTE6MS1adW9yZG51bmcgKHZlcmhpbmRlcnQgZGFzcyB6d2VpIEV4 +Y2VsLSdMZW5hJyBiZWlkZSBhdWYNCiAgICAgICAgICAgICAgICAjIGRpZSBnbGVpY2hlIHBsYW51 +bmctTGVuYSBsYW5kZW4pLg0KICAgICAgICAgICAgICAgICMgSW5ha3RpdmUgUGVyc29uZW4gd2Vy +ZGVuIGViZW5mYWxscyBiZXJ1ZWNrc2ljaHRpZ3QsIHNvbnN0IHd1ZXJkZW4NCiAgICAgICAgICAg +ICAgICAjIHp1dm9yIGRlYWt0aXZpZXJ0ZSBQZXJzb25lbiBiZWkgUmUtSW1wb3J0IGFscyAnbmV1 +JyBhbmdlbGVndCBzdGF0dA0KICAgICAgICAgICAgICAgICMgcmVha3RpdmllcnQuIEFrdGl2ZSBi +ZWtvbW1lbiArMC41IFNjb3JlLUJvbnVzLg0KICAgICAgICAgICAgICAgICRBbGxlUGxhbnVuZyA9 +IEAoJFBlcnNvbmVuUGxhbnVuZykNCg0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEdldC1OYW1l +VG9rZW5zKCROYW1lKSB7DQogICAgICAgICAgICAgICAgICAgICMgU3BsaXQgYmVpIEJpbmRlc3Ry +aWNoICsgV2hpdGVzcGFjZSwgbG93ZXJjYXNlLCBsZWVyZSByYXVzLg0KICAgICAgICAgICAgICAg +ICAgICAjICdSZW11cy1BcnRodXInIC0+IEAoJ3JlbXVzJywgJ2FydGh1cicpDQogICAgICAgICAg +ICAgICAgICAgICMgVW1sYXV0ZSArIHNzLU5vcm06ICdNdWVsbGVyJyBtYXRjaGVkICdNw7xsbGVy +JywgJ01hcmlzcycgJ01hcmnDnycuDQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICROYW1l +KSB7IHJldHVybiBAKCkgfQ0KICAgICAgICAgICAgICAgICAgICAkcyA9IChbc3RyaW5nXSROYW1l +KS5UcmltKCkuVG9Mb3dlcigpDQogICAgICAgICAgICAgICAgICAgICRzID0gJHMgLXJlcGxhY2Ug +J8OkJywnYWUnIC1yZXBsYWNlICfDticsJ29lJyAtcmVwbGFjZSAnw7wnLCd1ZScgLXJlcGxhY2Ug +J8OfJywnc3MnDQogICAgICAgICAgICAgICAgICAgIHJldHVybiBAKCRzIC1zcGxpdCAnWy1cc10r +JyB8IFdoZXJlLU9iamVjdCB7ICRfIH0pDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAg +ICAgICAgZnVuY3Rpb24gVGVzdC1OYW1lc01hdGNoKCRBLCAkQikgew0KICAgICAgICAgICAgICAg +ICAgICAjIFRydWUgd2VubiBkaWUgVG9rZW4tU2V0cyBzaWNoIHVlYmVybGFwcGVuLg0KICAgICAg +ICAgICAgICAgICAgICAkdGEgPSBHZXQtTmFtZVRva2VucyAkQQ0KICAgICAgICAgICAgICAgICAg +ICAkdGIgPSBHZXQtTmFtZVRva2VucyAkQg0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAk +dGEgLW9yIC1ub3QgJHRiKSB7IHJldHVybiAkZmFsc2UgfQ0KICAgICAgICAgICAgICAgICAgICBm +b3JlYWNoICgkdCBpbiAkdGEpIHsgaWYgKCR0YiAtY29udGFpbnMgJHQpIHsgcmV0dXJuICR0cnVl +IH0gfQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGZhbHNlDQogICAgICAgICAgICAgICAg +fQ0KDQogICAgICAgICAgICAgICAgZnVuY3Rpb24gR2V0LVBlcnNvblNjb3JlKCRFeGNlbCwgJFBs +YW51bmcpIHsNCiAgICAgICAgICAgICAgICAgICAgJGVOID0gKFtzdHJpbmddJEV4Y2VsLm5hY2hu +YW1lKS5UcmltKCkNCiAgICAgICAgICAgICAgICAgICAgJGVWID0gKFtzdHJpbmddJEV4Y2VsLnZv +cm5hbWUpLlRyaW0oKQ0KICAgICAgICAgICAgICAgICAgICAkZUQgPSAoW3N0cmluZ10kRXhjZWwu +ZGllbnN0Z3JhZCkuVHJpbSgpLlRvTG93ZXIoKQ0KICAgICAgICAgICAgICAgICAgICAkcE4gPSBp +ZiAoJFBsYW51bmcuUFNPYmplY3QuUHJvcGVydGllc1snbmFjaG5hbWUnXSkgeyAoW3N0cmluZ10k +UGxhbnVuZy5uYWNobmFtZSkuVHJpbSgpIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAg +ICAgJHBWID0gaWYgKCRQbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Zvcm5hbWUnXSkgeyAo +W3N0cmluZ10kUGxhbnVuZy52b3JuYW1lKS5UcmltKCkgfSBlbHNlIHsgJycgfQ0KICAgICAgICAg +ICAgICAgICAgICAkcEQgPSBpZiAoJFBsYW51bmcuUFNPYmplY3QuUHJvcGVydGllc1snZGllbnN0 +Z3JhZCddKSB7IChbc3RyaW5nXSRQbGFudW5nLmRpZW5zdGdyYWQpLlRyaW0oKS5Ub0xvd2VyKCkg +fSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICAjIEhhcmQtRmFpbDogYmVpZGUgTmFj +aG5hbWVuIGdlc2V0enQsIGFiZXIga2VpbmUgVG9rZW4tVWViZXJsYXBwdW5nDQogICAgICAgICAg +ICAgICAgICAgIGlmICgkZU4gLWFuZCAkcE4gLWFuZCAtbm90IChUZXN0LU5hbWVzTWF0Y2ggJGVO +ICRwTikpIHsgcmV0dXJuIDAgfQ0KICAgICAgICAgICAgICAgICAgICAkbk0gPSAoVGVzdC1OYW1l +c01hdGNoICRlTiAkcE4pDQogICAgICAgICAgICAgICAgICAgICR2TSA9IChUZXN0LU5hbWVzTWF0 +Y2ggJGVWICRwVikNCiAgICAgICAgICAgICAgICAgICAgJGRNID0gKCRlRCAtYW5kICRwRCAtYW5k +ICRlRCAtZXEgJHBEKQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJG5NIC1hbmQgJHZNIC1hbmQg +JGRNKSB7IHJldHVybiA1IH0gICAjIHBlcmZla3QNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRu +TSAtYW5kICR2TSkgeyByZXR1cm4gNCB9ICAgICAgICAgICAgIyBzZWhyIHN0YXJrDQogICAgICAg +ICAgICAgICAgICAgIGlmICgkbk0gLWFuZCAkZE0pIHsgcmV0dXJuIDMgfQ0KICAgICAgICAgICAg +ICAgICAgICBpZiAoJG5NKSB7IHJldHVybiAzIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKC1u +b3QgJHBOIC1hbmQgJHZNIC1hbmQgJGRNKSB7IHJldHVybiAzIH0NCiAgICAgICAgICAgICAgICAg +ICAgaWYgKC1ub3QgJHBOIC1hbmQgJHZNKSB7IHJldHVybiAyIH0NCiAgICAgICAgICAgICAgICAg +ICAgcmV0dXJuIDANCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBmdW5jdGlv +biBHZXQtUGVyc29uS29tcGFrdCgkUCkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsN +CiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gJFAuaWQNCiAgICAgICAgICAgICAgICAgICAg +ICAgIHZvcm5hbWUgPSBpZiAoJFAuUFNPYmplY3QuUHJvcGVydGllc1sndm9ybmFtZSddKSB7ICRQ +LnZvcm5hbWUgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgbmFjaG5hbWUg +PSBpZiAoJFAuUFNPYmplY3QuUHJvcGVydGllc1snbmFjaG5hbWUnXSkgeyAkUC5uYWNobmFtZSB9 +IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgICAgICBkaWVuc3RncmFkID0gaWYgKCRQ +LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2RpZW5zdGdyYWQnXSkgeyAkUC5kaWVuc3RncmFkIH0gZWxz +ZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmt0aW9uID0gaWYgKCRQLlBTT2Jq +ZWN0LlByb3BlcnRpZXNbJ2Z1bmt0aW9uJ10pIHsgJFAuZnVua3Rpb24gfSBlbHNlIHsgJycgfQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgYWt0aXYgPSBpZiAoJFAuUFNPYmplY3QuUHJvcGVydGll +c1snYWt0aXYnXSkgeyAkUC5ha3RpdiB9IGVsc2UgeyAkdHJ1ZSB9DQogICAgICAgICAgICAgICAg +ICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAjIFBoYXNlIDE6IGFs +bGUgKHNjb3JlLCBlaSwgcGkpLVBhYXJlLiBBa3RpdmUgKzAuNSBCb251cy4NCiAgICAgICAgICAg +ICAgICAkUGFhcmUgPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9ucy5BcnJheUxpc3QNCiAg +ICAgICAgICAgICAgICBmb3IgKCRlaSA9IDA7ICRlaSAtbHQgJFBlcnNvbmVuRXhjZWwuQ291bnQ7 +ICRlaSsrKSB7DQogICAgICAgICAgICAgICAgICAgIGZvciAoJHBpID0gMDsgJHBpIC1sdCAkQWxs +ZVBsYW51bmcuQ291bnQ7ICRwaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkcyA9IEdl +dC1QZXJzb25TY29yZSAkUGVyc29uZW5FeGNlbFskZWldICRBbGxlUGxhbnVuZ1skcGldDQogICAg +ICAgICAgICAgICAgICAgICAgICBpZiAoJHMgLWd0IDApIHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAkaXN0QWt0aXYgPSAtbm90ICRBbGxlUGxhbnVuZ1skcGldLlBTT2JqZWN0LlByb3Bl +cnRpZXNbJ2FrdGl2J10gLW9yICRBbGxlUGxhbnVuZ1skcGldLmFrdGl2IC1lcSAkdHJ1ZQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkaXN0QWt0aXYpIHsgJHMgKz0gMC41IH0NCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0kUGFhcmUuQWRkKEB7IHM9JHM7IGVpPSRl +aTsgcGk9JHBpIH0pDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg +ICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIyBQaGFzZSAyOiBncmVl +ZHkgbmFjaCBTY29yZSBhYnN0ZWlnZW5kDQogICAgICAgICAgICAgICAgJFNvcnRlZCA9IEAoJFBh +YXJlIHwgU29ydC1PYmplY3QgLVByb3BlcnR5IEB7RXhwcmVzc2lvbj17IC0kXy5zIH19KQ0KICAg +ICAgICAgICAgICAgICRFeGNlbFp1UGxhbnVuZyA9IEB7fQ0KICAgICAgICAgICAgICAgICRQbGFu +dW5nVXNlZCA9IEB7fQ0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwcCBpbiAkU29ydGVkKSB7 +DQogICAgICAgICAgICAgICAgICAgIGlmICgkRXhjZWxadVBsYW51bmcuQ29udGFpbnNLZXkoJHBw +LmVpKSkgeyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgICAgIGlmICgkUGxhbnVuZ1VzZWQu +Q29udGFpbnNLZXkoJHBwLnBpKSkgeyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgICAgICRF +eGNlbFp1UGxhbnVuZ1skcHAuZWldID0gQHsgcGkgPSAkcHAucGk7IHMgPSAkcHAucyB9DQogICAg +ICAgICAgICAgICAgICAgICRQbGFudW5nVXNlZFskcHAucGldID0gJHRydWUNCiAgICAgICAgICAg +ICAgICB9DQoNCiAgICAgICAgICAgICAgICAkTWF0Y2ggPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xs +ZWN0aW9ucy5BcnJheUxpc3QNCiAgICAgICAgICAgICAgICAkTmV1ID0gTmV3LU9iamVjdCBTeXN0 +ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0DQogICAgICAgICAgICAgICAgJFVuc2ljaGVyID0gTmV3 +LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0DQogICAgICAgICAgICAgICAgJEVu +dGZlcm50ID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0DQoNCiAgICAg +ICAgICAgICAgICAjIFBoYXNlIDM6IE1laHJkZXV0aWdrZWl0cy1DaGVjaw0KICAgICAgICAgICAg +ICAgIGZvciAoJGVpID0gMDsgJGVpIC1sdCAkUGVyc29uZW5FeGNlbC5Db3VudDsgJGVpKyspIHsN +CiAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJEV4Y2VsWnVQbGFudW5nLkNvbnRhaW5zS2V5 +KCRlaSkpIHsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAkZyA9ICRFeGNlbFp1UGxh +bnVuZ1skZWldDQogICAgICAgICAgICAgICAgICAgIGlmICgkZy5zIC1sZSAzKSB7DQogICAgICAg +ICAgICAgICAgICAgICAgICAkQW5kZXJlID0gQCgpDQogICAgICAgICAgICAgICAgICAgICAgICBm +b3IgKCRwaSA9IDA7ICRwaSAtbHQgJEFsbGVQbGFudW5nLkNvdW50OyAkcGkrKykgew0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIGlmICgkcGkgLWVxICRnLnBpKSB7IGNvbnRpbnVlIH0NCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFBsYW51bmdVc2VkLkNvbnRhaW5zS2V5KCRw +aSkpIHsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzayA9IEdldC1Q +ZXJzb25TY29yZSAkUGVyc29uZW5FeGNlbFskZWldICRBbGxlUGxhbnVuZ1skcGldDQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgJGlzdEEgPSAtbm90ICRBbGxlUGxhbnVuZ1skcGldLlBTT2Jq +ZWN0LlByb3BlcnRpZXNbJ2FrdGl2J10gLW9yICRBbGxlUGxhbnVuZ1skcGldLmFrdGl2IC1lcSAk +dHJ1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkc2sgLWd0IDAgLWFuZCAkaXN0 +QSkgeyAkc2sgKz0gMC41IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHNrIC1l +cSAkZy5zKSB7ICRBbmRlcmUgKz0gJHBpIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICAgICAgICAgICAgIGlmICgkQW5kZXJlLkNvdW50IC1ndCAwKSB7DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgJEthbmRJZHggPSBAKCRnLnBpKSArICRBbmRlcmUNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAkS2FuZE9iaiA9IEAoKQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIGZvcmVhY2ggKCRwaSBpbiAkS2FuZElkeCkgeyAkS2FuZE9iaiArPSAoR2V0LVBl +cnNvbktvbXBha3QgJEFsbGVQbGFudW5nWyRwaV0pIH0NCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICBbdm9pZF0kVW5zaWNoZXIuQWRkKEB7IGV4Y2VsID0gJFBlcnNvbmVuRXhjZWxbJGVpXTsg +a2FuZGlkYXRlbiA9ICRLYW5kT2JqIH0pDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEV4 +Y2VsWnVQbGFudW5nLlJlbW92ZSgkZWkpIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAg +ICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAg +ICAgICAgICAgICMgUGhhc2UgNDogbWF0Y2ggKyBuZXUga2xhc3NpZml6aWVyZW4NCiAgICAgICAg +ICAgICAgICBmb3IgKCRlaSA9IDA7ICRlaSAtbHQgJFBlcnNvbmVuRXhjZWwuQ291bnQ7ICRlaSsr +KSB7DQogICAgICAgICAgICAgICAgICAgIGlmICgkRXhjZWxadVBsYW51bmcuQ29udGFpbnNLZXko +JGVpKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGcgPSAkRXhjZWxadVBsYW51bmdbJGVp +XQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGNvbmZpZGVuY2UgPSBpZiAoJGcucyAtZ2UgNCkg +eyAnaG9jaCcgfSBlbHNlIHsgJ21pdHRlbCcgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgW3Zv +aWRdJE1hdGNoLkFkZChAew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VsID0gJFBl +cnNvbmVuRXhjZWxbJGVpXQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW51bmcgPSAo +R2V0LVBlcnNvbktvbXBha3QgJEFsbGVQbGFudW5nWyRnLnBpXSkNCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICBjb25maWRlbmNlID0gJGNvbmZpZGVuY2UNCiAgICAgICAgICAgICAgICAgICAg +ICAgIH0pDQogICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgtbm90ICgkVW5zaWNoZXIgfCBX +aGVyZS1PYmplY3QgeyAkXy5leGNlbCAtZXEgJFBlcnNvbmVuRXhjZWxbJGVpXSB9KSkgew0KICAg +ICAgICAgICAgICAgICAgICAgICAgW3ZvaWRdJE5ldS5BZGQoQHsgZXhjZWwgPSAkUGVyc29uZW5F +eGNlbFskZWldIH0pDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoN +CiAgICAgICAgICAgICAgICAjIFBoYXNlIDU6IGVudGZlcm50ID0gQUtUSVZFIHBsYW51bmcgb2hu +ZSBNYXRjaCAoaW5ha3RpdmUgYmxlaWJlbiBlaW5mYWNoIGluYWt0aXYpDQogICAgICAgICAgICAg +ICAgZm9yICgkcGkgPSAwOyAkcGkgLWx0ICRBbGxlUGxhbnVuZy5Db3VudDsgJHBpKyspIHsNCiAg +ICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJFBsYW51bmdVc2VkLkNvbnRhaW5zS2V5KCRwaSkp +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRpc3RBa3RpdiA9IC1ub3QgJEFsbGVQbGFudW5n +WyRwaV0uUFNPYmplY3QuUHJvcGVydGllc1snYWt0aXYnXSAtb3IgJEFsbGVQbGFudW5nWyRwaV0u +YWt0aXYgLWVxICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGlzdEFrdGl2KSB7 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZvaWRdJEVudGZlcm50LkFkZChAeyBwbGFu +dW5nID0gKEdldC1QZXJzb25Lb21wYWt0ICRBbGxlUGxhbnVuZ1skcGldKSB9KQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg +fQ0KDQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsNCiAgICAgICAgICAgICAgICAg +ICAgamFociA9IGlmICgkUGFyYW0uUFNPYmplY3QuUHJvcGVydGllc1snamFociddKSB7ICRQYXJh +bS5qYWhyIH0gZWxzZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAgICAgcGVyc29uZW4gPSBA +ew0KICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBAKCRNYXRjaCkNCiAgICAgICAgICAg +ICAgICAgICAgICAgIG5ldSA9IEAoJE5ldSkNCiAgICAgICAgICAgICAgICAgICAgICAgIGVudGZl +cm50ID0gQCgkRW50ZmVybnQpDQogICAgICAgICAgICAgICAgICAgICAgICB1bnNpY2hlciA9IEAo +JFVuc2ljaGVyKQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGFu +emFobCA9IEB7DQogICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25lbkV4Y2VsID0gJFBlcnNv +bmVuRXhjZWwuQ291bnQNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICBEZWJ1Zy1Mb2cgJ0FQSScgIlBPU1QgL2FwaS9pbXBvcnQvZXhjZWwv +dm9yc2NoYXUgLT4gJCgkUGVyc29uZW5FeGNlbC5Db3VudCkgUGVyc29uZW4sIG1hdGNoPSQoJE1h +dGNoLkNvdW50KSBuZXU9JCgkTmV1LkNvdW50KSBlbnRmZXJudD0kKCRFbnRmZXJudC5Db3VudCkg +dW5zaWNoZXI9JCgkVW5zaWNoZXIuQ291bnQpIg0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQog +ICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IEZMRDog +RVhDRUwtSU1QT1JUIChVZWJlcm5haG1lKSA9PT09PT09PT09PT09PT09PT09PT0NCiAgICAgICAg +ICAgICMgU3BpZWdlbCB6dSBzZXJ2ZXIucHkgUE9TVCAvYXBpL2ltcG9ydC9leGNlbC91ZWJlcm5l +aG1lbi4NCiAgICAgICAgICAgICMgQm9keSBlbnRoYWVsdCBnZXBhcnN0ZSBFeGNlbC1EYXRlbiAr +IFVzZXItQWt0aW9uZW4gYXVzIGRlbSBXaXphcmQuDQogICAgICAgICAgICBpZiAoJFBhdGggLWVx +ICcvYXBpL2ltcG9ydC9leGNlbC91ZWJlcm5laG1lbicgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcp +IHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQt +RXJyb3IgJFJlcyAnTnVyIFN1cGVyVXNlciBkdWVyZmVuIGltcG9ydGllcmVuJyA0MDM7IGNvbnRp +bnVlIH0NCiAgICAgICAgICAgICAgICAkQm9keSA9IFJlYWQtQm9keSAkUmVxDQogICAgICAgICAg +ICAgICAgaWYgKCRudWxsIC1lcSAkQm9keSkgeyBTZW5kLUVycm9yICRSZXMgJ0FuZnJhZ2UgenUg +Z3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAg +ICAgICAgICAgICRQYXJhbSA9ICRCb2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAg +ICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXMgJ1VuZ3Vl +bHRpZ2VzIEpTT04nIDQwMDsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAg +ICAgICAgICAkUGFyc2VkID0gJFBhcmFtLnBhcnNlZERhdGVuDQogICAgICAgICAgICAgICAgJEFr +dGlvbmVuID0gQCgkUGFyYW0ucGVyc29uZW5Ba3Rpb25lbikNCiAgICAgICAgICAgICAgICAkT3B0 +cyA9ICRQYXJhbS51ZWJlcm5laG1lbg0KICAgICAgICAgICAgICAgICRPcHRTY2hpY2h0ZW4gPSBp +ZiAoJE9wdHMuUFNPYmplY3QuUHJvcGVydGllc1snc2NoaWNodGVuJ10pIHsgW2Jvb2xdJE9wdHMu +c2NoaWNodGVuIH0gZWxzZSB7ICR0cnVlIH0NCiAgICAgICAgICAgICAgICAkT3B0S29tbWVudGFy +ZSA9IGlmICgkT3B0cy5QU09iamVjdC5Qcm9wZXJ0aWVzWydrb21tZW50YXJlJ10pIHsgW2Jvb2xd +JE9wdHMua29tbWVudGFyZSB9IGVsc2UgeyAkdHJ1ZSB9DQogICAgICAgICAgICAgICAgJE9wdFNv +bmRlcnRlcm1pbmUgPSBpZiAoJE9wdHMuUFNPYmplY3QuUHJvcGVydGllc1snc29uZGVydGVybWlu +ZSddKSB7IFtib29sXSRPcHRzLnNvbmRlcnRlcm1pbmUgfSBlbHNlIHsgJHRydWUgfQ0KICAgICAg +ICAgICAgICAgICRPcHRUYWdlc2RhdGVuID0gaWYgKCRPcHRzLlBTT2JqZWN0LlByb3BlcnRpZXNb +J3RhZ2VzZGF0ZW4nXSkgeyBbYm9vbF0kT3B0cy50YWdlc2RhdGVuIH0gZWxzZSB7ICR0cnVlIH0N +CiAgICAgICAgICAgICAgICAkT3B0UmVpaGVuZm9sZ2UgPSBpZiAoJE9wdHMuUFNPYmplY3QuUHJv +cGVydGllc1sncmVpaGVuZm9sZ2UnXSkgeyBbYm9vbF0kT3B0cy5yZWloZW5mb2xnZSB9IGVsc2Ug +eyAkdHJ1ZSB9DQoNCiAgICAgICAgICAgICAgICAkRXhjZWxQZXJzb25lbiA9IGlmICgkUGFyc2Vk +LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3BlcnNvbmVuJ10pIHsgQCgkUGFyc2VkLnBlcnNvbmVuKSB9 +IGVsc2UgeyBAKCkgfQ0KICAgICAgICAgICAgICAgICRFeGNlbEVpbnRyYWVnZSA9IGlmICgkUGFy +c2VkLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VpbnRyYWVnZSddKSB7ICRQYXJzZWQuZWludHJhZWdl +IH0gZWxzZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAkRXhjZWxQZmxpY2h0ID0gaWYgKCRQ +YXJzZWQuUFNPYmplY3QuUHJvcGVydGllc1sncGZsaWNodCddKSB7ICRQYXJzZWQucGZsaWNodCB9 +IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAgICAgJEV4Y2VsS29tbWVudGFyZSA9IGlmICgk +UGFyc2VkLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2tvbW1lbnRhcmUnXSkgeyAkUGFyc2VkLmtvbW1l +bnRhcmUgfSBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgICRFeGNlbFRlcm1pbmUgPSBp +ZiAoJFBhcnNlZC5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0ZXJtaW5lJ10pIHsgJFBhcnNlZC50ZXJt +aW5lIH0gZWxzZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAkRXhjZWxUYWdlc2RhdGVuID0g +aWYgKCRQYXJzZWQuUFNPYmplY3QuUHJvcGVydGllc1sndGFnZXNkYXRlbiddKSB7ICRQYXJzZWQu +dGFnZXNkYXRlbiB9IGVsc2UgeyAkbnVsbCB9DQoNCiAgICAgICAgICAgICAgICAjIEV4Y2VsLVJv +dyAtPiBFeGNlbC1QZXJzb24gSGFzaG1hcA0KICAgICAgICAgICAgICAgICRFeGNlbEJ5Um93ID0g +QHt9DQogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHAgaW4gJEV4Y2VsUGVyc29uZW4pIHsNCiAg +ICAgICAgICAgICAgICAgICAgaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2V4Y2VsUm93J10p +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRFeGNlbEJ5Um93W1tpbnRdJHAuZXhjZWxSb3dd +ID0gJHANCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAg +ICAgICAgICAgICRKZXR6dCA9IEdldC1EYXRlIC1Gb3JtYXQgJ3l5eXktTU0tZGQgSEg6bW06c3Mn +DQogICAgICAgICAgICAgICAgJFRzID0gR2V0LURhdGUgLUZvcm1hdCAneXl5eU1NZGRfSEhtbXNz +Jw0KICAgICAgICAgICAgICAgICRCYWNrdXBOYW1lID0gInBsYW51bmdfYmFja3VwX3Zvcl9leGNl +bF9pbXBvcnRfJFRzLmpzb24iDQoNCiAgICAgICAgICAgICAgICAkTG9ja1Jlc3VsdCA9ICRudWxs +DQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJExvY2tSZXN1bHQg +PSBJbnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAgICAgICAgICAg +ICAgICAgICRQbGFudW5nID0gUmVhZC1Kc29uRmlsZSAncGxhbnVuZy5qc29uJw0KICAgICAgICAg +ICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkUGxhbnVuZykgeyByZXR1cm4gQHsgdHlwID0g +J2Vycm9yJzsgY29kZSA9IDQwNDsgbXNnID0gJ3BsYW51bmcuanNvbiBuaWNodCBnZWZ1bmRlbicg +fSB9DQogICAgICAgICAgICAgICAgICAgICAgICAjIEJhY2t1cCB1bnRlciBkZW0gTG9jaw0KICAg +ICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmdQYXRoID0gSm9pbi1QYXRoICREYXRhRGlyICdw +bGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBDb3B5LUl0ZW0gLVBhdGggJFBs +YW51bmdQYXRoIC1EZXN0aW5hdGlvbiAoSm9pbi1QYXRoICREYXRhRGlyICRCYWNrdXBOYW1lKSAt +Rm9yY2UNCiAgICAgICAgICAgICAgICAgICAgICAgIEludm9rZS1CYWNrdXBSb3RhdGlvbiAncGxh +bnVuZ19iYWNrdXBfKi5qc29uJyAyMA0KDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5v +dCAkUGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWydwZXJzb25lbiddKSB7ICRQbGFudW5nIHwg +QWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ3BlcnNvbmVuJyAtVmFs +dWUgQCgpIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRQbGFudW5nLlBTT2Jq +ZWN0LlByb3BlcnRpZXNbJ2VpbnRyYWVnZSddKSB7ICRQbGFudW5nIHwgQWRkLU1lbWJlciAtTWVt +YmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ2VpbnRyYWVnZScgLVZhbHVlIChOZXctT2JqZWN0 +IFBTT2JqZWN0KSB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkUGxhbnVuZy5Q +U09iamVjdC5Qcm9wZXJ0aWVzWydwZmxpY2h0J10pIHsgJFBsYW51bmcgfCBBZGQtTWVtYmVyIC1N +ZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAncGZsaWNodCcgLVZhbHVlIChOZXctT2JqZWN0 +IFBTT2JqZWN0KSB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkUGxhbnVuZy5Q +U09iamVjdC5Qcm9wZXJ0aWVzWydrb21tZW50YXJlJ10pIHsgJFBsYW51bmcgfCBBZGQtTWVtYmVy +IC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAna29tbWVudGFyZScgLVZhbHVlIChOZXct +T2JqZWN0IFBTT2JqZWN0KSB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICMgUGVyc29uZW4t +TGlzdGUgbXV0aWVyZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICRQZXJzb25lbkxpc3RlID0g +TmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0DQogICAgICAgICAgICAgICAg +ICAgICAgICBmb3JlYWNoICgkcCBpbiBAKCRQbGFudW5nLnBlcnNvbmVuKSkgeyBbdm9pZF0kUGVy +c29uZW5MaXN0ZS5BZGQoJHApIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICROZXh0SWQgPSAx +DQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcCBpbiAkUGVyc29uZW5MaXN0ZSkg +ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcC5QU09iamVjdC5Qcm9wZXJ0aWVz +WydpZCddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpID0gW2ludF0kcC5p +ZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGkgLWdlICROZXh0SWQpIHsg +JE5leHRJZCA9ICRpICsgMSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAkRXhjZWxSb3dU +b1BpZCA9IEB7fQ0KICAgICAgICAgICAgICAgICAgICAgICAgJE5QZXJzb25lbk5ldSA9IDA7ICRO +UGVyc29uZW5EZWFrdCA9IDA7ICROUGVyc29uZW5Ba3R1YWxpc2llcnQgPSAwDQogICAgICAgICAg +ICAgICAgICAgICAgICAjIHBsYW51bmctUGVyc29uZW4tTG9va3VwIG5hY2ggaWQgKGZ1ZXIgbWF0 +Y2gtVXBkYXRlcykNCiAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nQnlJZCA9IEB7fQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHAgaW4gJFBlcnNvbmVuTGlzdGUpIHsN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGllc1sn +aWQnXSkgeyAkUGxhbnVuZ0J5SWRbW2ludF0kcC5pZF0gPSAkcCB9DQogICAgICAgICAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkYSBpbiAkQWt0aW9u +ZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWt0ID0gW3N0cmluZ10kYS5ha3Rp +b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFrdCAtZXEgJ21hdGNoJykgew0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXIgPSBbaW50XSRhLmV4Y2VsUm93DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtYXRjaFBpZCA9IFtpbnRdJGEucGxhbnVu +Z3NJZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFNjaGljaHRlbiArIEtvbW1l +bnRhcmUgd2VyZGVuIElNTUVSIGltcG9ydGllcnQNCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIyAoYXVjaCBmdWVyIGluYWt0aXZlIFBlcnNvbmVuIC0gRGF0ZW4gdmVyZnVlZ2Jhcg0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZhbGxzIGRpZSBQZXJzb24gc3BhZXRl +ciByZWFrdGl2aWVydCB3aXJkKS4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJl +YWt0ID0gJGZhbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYS5QU09i +amVjdC5Qcm9wZXJ0aWVzWydyZWFrdGl2aWVyZW4nXSkgeyAkcmVha3QgPSBbYm9vbF0kYS5yZWFr +dGl2aWVyZW4gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRXhjZWxSb3dUb1Bp +ZFskZXJdID0gJG1hdGNoUGlkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRXhj +ZWwtRmVsZGVyIHNwaWVnZWxuLCBhYmVyIE5VUiBsZWVyZSBGZWxkZXIgdWViZXJzY2hyZWliZW4N +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRFeGNlbEJ5Um93LkNvbnRhaW5z +S2V5KCRlcikgLWFuZCAkUGxhbnVuZ0J5SWQuQ29udGFpbnNLZXkoJG1hdGNoUGlkKSkgew0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVwID0gJEV4Y2VsQnlSb3dbJGVyXQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRhcmdldCA9ICRQbGFudW5nQnlJ +ZFskbWF0Y2hQaWRdDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZ2VhZW5k +ZXJ0ID0gJGZhbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFJlYWt0 +aXZpZXJlbiBOVVIgd2VubiBVc2VyIGV4cGxpeml0IGFuZ2Vmb3JkZXJ0DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAkaXN0QWt0aXYgPSAtbm90ICR0YXJnZXQuUFNPYmplY3Qu +UHJvcGVydGllc1snYWt0aXYnXSAtb3IgJHRhcmdldC5ha3RpdiAtZXEgJHRydWUNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRpc3RBa3RpdiAtYW5kICRyZWFr +dCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGFyZ2V0 +LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2FrdGl2J10pIHsgJHRhcmdldC5ha3RpdiA9ICR0cnVlIH0N +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJHRhcmdldCB8 +IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICdha3RpdicgLVZhbHVl +ICR0cnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZ2VhZW5k +ZXJ0ID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmZWxkIGluIEAoJ25hY2hu +YW1lJywgJ2RpZW5zdGdyYWQnLCAnZnVua3Rpb24nKSkgew0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICRuZXUgPSBpZiAoJGVwLlBTT2JqZWN0LlByb3BlcnRpZXNbJGZl +bGRdKSB7IChbc3RyaW5nXSRlcC4kZmVsZCkuVHJpbSgpIH0gZWxzZSB7ICcnIH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWx0ID0gaWYgKCR0YXJnZXQuUFNPYmpl +Y3QuUHJvcGVydGllc1skZmVsZF0pIHsgKFtzdHJpbmddJHRhcmdldC4kZmVsZCkuVHJpbSgpIH0g +ZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo +JG5ldSAtYW5kIC1ub3QgJGFsdCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICBpZiAoJHRhcmdldC5QU09iamVjdC5Qcm9wZXJ0aWVzWyRmZWxkXSkgeyAkdGFy +Z2V0LiRmZWxkID0gJG5ldSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIGVsc2UgeyAkdGFyZ2V0IHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVy +dHkgLU5hbWUgJGZlbGQgLVZhbHVlICRuZXUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAkZ2VhZW5kZXJ0ID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIExlZ2FjeS1GZWxkICdu +YW1lJyBhdXMgYWx0ZW4gRGF0ZW5zdGFlbmRlbiBlbnRmZXJuZW4gKEF1ZGl0LUl0ZXItQikNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGFyZ2V0LlBTT2JqZWN0LlBy +b3BlcnRpZXNbJ25hbWUnXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICR0YXJnZXQuUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJ25hbWUnKQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRnZWFlbmRlcnQgPSAkdHJ1ZQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgaWYgKCRnZWFlbmRlcnQpIHsgJE5QZXJzb25lbkFrdHVhbGlzaWVydCsrIH0N +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIH0gZWxzZWlmICgkYWt0IC1lcSAnbmV1Jykgew0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAkZXIgPSBbaW50XSRhLmV4Y2VsUm93DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIGlmICgtbm90ICRFeGNlbEJ5Um93LkNvbnRhaW5zS2V5KCRlcikpIHsgY29udGlu +dWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXAgPSAkRXhjZWxCeVJvd1sk +ZXJdDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRleE5hY2ggPSBpZiAoJGVwLlBT +T2JqZWN0LlByb3BlcnRpZXNbJ25hY2huYW1lJ10pIHsgJGVwLm5hY2huYW1lIH0gZWxzZSB7ICcn +IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXaXphcmQtUmFkaW8gImluYWt0 +aXYgaW1wb3J0aWVyZW4iIHJlc3Bla3RpZXJlbiAoQXVkaXQtSXRlci1CKQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAkQWt0aXZGbGFnID0gJHRydWUNCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgaWYgKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2FrdGl2J10gLWFuZCAk +bnVsbCAtbmUgJGEuYWt0aXYpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICRBa3RpdkZsYWcgPSBbYm9vbF0kYS5ha3Rpdg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICROZXVQZXJzb24gPSBbUFND +dXN0b21PYmplY3RdQHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0g +JE5leHRJZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWt0aXYgPSAkQWt0 +aXZGbGFnDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b3JuYW1lID0gaWYg +KCRlcC5QU09iamVjdC5Qcm9wZXJ0aWVzWyd2b3JuYW1lJ10pIHsgJGVwLnZvcm5hbWUgfSBlbHNl +IHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFjaG5hbWUgPSAk +ZXhOYWNoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWVuc3RncmFkID0g +aWYgKCRlcC5QU09iamVjdC5Qcm9wZXJ0aWVzWydkaWVuc3RncmFkJ10pIHsgJGVwLmRpZW5zdGdy +YWQgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVu +a3Rpb24gPSBpZiAoJGVwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2Z1bmt0aW9uJ10pIHsgJGVwLmZ1 +bmt0aW9uIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0kUGVyc29uZW5MaXN0ZS5BZGQo +JE5ldVBlcnNvbikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmdCeUlk +WyROZXh0SWRdID0gJE5ldVBlcnNvbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk +RXhjZWxSb3dUb1BpZFskZXJdID0gJE5leHRJZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAkTmV4dElkKysNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5QZXJzb25l +bk5ldSsrDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRha3QgLWVxICdk +ZWFrdGl2aWVyZW4nKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkZWFrdElk +ID0gW2ludF0kYS5wbGFudW5nc0lkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv +cmVhY2ggKCRwIGluICRQZXJzb25lbkxpc3RlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGllc1snaWQnXSAtYW5kIFtpbnRdJHAu +aWQgLWVxICRkZWFrdElkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2FrdGl2J10pIHsgJHAuYWt0aXYgPSAkZmFs +c2UgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkcCB8 +IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICdha3RpdicgLVZhbHVl +ICRmYWxzZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5QZXJz +b25lbkRlYWt0KysNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh +aw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJEFkbWluLnNvbmRl -cnRlcm1pbmUgPSBAKCRTdExpc3RlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNv -bkZpbGUgJ2FkbWluLmpzb24nICRBZG1pbg0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgfSBlbHNlaWYgKCRudWxsIC1uZSAkTG9ja1Jlc3VsdC5hZG1pbk11dGF0ZWQgLWFu -ZCAkTG9ja1Jlc3VsdC5yb3RhdGlvblNsb3RzIC1ndCAwKSB7DQogICAgICAgICAgICAgICAgICAg -ICMgVGFnZXNkYXRlbiBoYXQgQWRtaW4gbXV0aWVydCwgYWJlciBrZWluIFNvbmRlcnRlcm1pbmUt -QmxvY2sgaGF0IGdlc2NocmllYmVuLg0KICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uRmls -ZSAnYWRtaW4uanNvbicgJExvY2tSZXN1bHQuYWRtaW5NdXRhdGVkDQogICAgICAgICAgICAgICAg -fQ0KDQogICAgICAgICAgICAgICAgIyBBdXRvLVJvbGxlbi1TeW5jIG5hY2ggRXhjZWwtSW1wb3J0 -IChuZXVlIFBlcnNvbmVuIG1pdCBER0wvMS5FQi8xLkVCIFYuIC0+IExpc3RlbikNCiAgICAgICAg -ICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZ0Z1ZXJTeW5jID0gUmVh -ZC1Kc29uRmlsZSAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAkQWRtaW5GdWVy -U3luYyA9IFJlYWQtSnNvbkZpbGUgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgICAgIGlm -IChTeW5jLVJvbGxlbkF1c1BlcnNvbmVuICRQbGFudW5nRnVlclN5bmMgJEFkbWluRnVlclN5bmMp -IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25GaWxlICdhZG1pbi5qc29uJyAk -QWRtaW5GdWVyU3luYw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBj -YXRjaCB7IFdyaXRlLVdhcm5pbmcgIlJvbGxlbi1TeW5jIG5hY2ggRXhjZWwtSW1wb3J0IGZlaGxn -ZXNjaGxhZ2VuOiAkXyIgfQ0KDQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnZXhj -ZWwuaW1wb3J0aWVydCcgQHsNCiAgICAgICAgICAgICAgICAgICAgYmFja3VwID0gJExvY2tSZXN1 -bHQuYmFja3VwDQogICAgICAgICAgICAgICAgICAgIHBlcnNvbmVuTmV1ID0gJExvY2tSZXN1bHQu -cGVyc29uZW5OZXUNCiAgICAgICAgICAgICAgICAgICAgcGVyc29uZW5Ba3R1YWxpc2llcnQgPSAk -TG9ja1Jlc3VsdC5wZXJzb25lbkFrdHVhbGlzaWVydA0KICAgICAgICAgICAgICAgICAgICBwZXJz -b25lbkRlYWt0aXZpZXJ0ID0gJExvY2tSZXN1bHQucGVyc29uZW5EZWFrdGl2aWVydA0KICAgICAg -ICAgICAgICAgICAgICBlaW50cmFlZ2UgPSAkTG9ja1Jlc3VsdC5laW50cmFlZ2UNCiAgICAgICAg -ICAgICAgICAgICAgcGZsaWNodCA9ICRMb2NrUmVzdWx0LnBmbGljaHQNCiAgICAgICAgICAgICAg -ICAgICAga29tbWVudGFyZSA9ICRMb2NrUmVzdWx0LmtvbW1lbnRhcmUNCiAgICAgICAgICAgICAg -ICAgICAgdW5iZWthbm50ZUNvZGVzID0gJExvY2tSZXN1bHQudW5iZWthbm50ZUNvZGVzDQogICAg -ICAgICAgICAgICAgICAgIHNvbmRlcnRlcm1pbmUgPSAkTlRlcm1pbmUNCiAgICAgICAgICAgICAg -ICAgICAgcm90YXRpb25TbG90cyA9ICRMb2NrUmVzdWx0LnJvdGF0aW9uU2xvdHMNCiAgICAgICAg -ICAgICAgICAgICAgdGFnZXNkYXRlbk92ZXJyaWRlcyA9ICRMb2NrUmVzdWx0LnRhZ2VzZGF0ZW5P -dmVycmlkZXMNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBTZW5kLUpzb24g -JFJlcyBAew0KICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAnb2snDQogICAgICAgICAgICAg -ICAgICAgIGJhY2t1cCA9ICRMb2NrUmVzdWx0LmJhY2t1cA0KICAgICAgICAgICAgICAgICAgICBh -bnphaGwgPSBAew0KICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uZW5OZXUgPSAkTG9ja1Jl -c3VsdC5wZXJzb25lbk5ldQ0KICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uZW5Ba3R1YWxp -c2llcnQgPSAkTG9ja1Jlc3VsdC5wZXJzb25lbkFrdHVhbGlzaWVydA0KICAgICAgICAgICAgICAg -ICAgICAgICAgcGVyc29uZW5EZWFrdGl2aWVydCA9ICRMb2NrUmVzdWx0LnBlcnNvbmVuRGVha3Rp -dmllcnQNCiAgICAgICAgICAgICAgICAgICAgICAgIGVpbnRyYWVnZSA9ICRMb2NrUmVzdWx0LmVp -bnRyYWVnZQ0KICAgICAgICAgICAgICAgICAgICAgICAgcGZsaWNodCA9ICRMb2NrUmVzdWx0LnBm -bGljaHQNCiAgICAgICAgICAgICAgICAgICAgICAgIGtvbW1lbnRhcmUgPSAkTG9ja1Jlc3VsdC5r -b21tZW50YXJlDQogICAgICAgICAgICAgICAgICAgICAgICB1bmJla2FubnRlQ29kZXMgPSAkTG9j -a1Jlc3VsdC51bmJla2FubnRlQ29kZXMNCiAgICAgICAgICAgICAgICAgICAgICAgIHNvbmRlcnRl -cm1pbmUgPSAkTlRlcm1pbmUNCiAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uU2xvdHMg -PSAkTG9ja1Jlc3VsdC5yb3RhdGlvblNsb3RzDQogICAgICAgICAgICAgICAgICAgICAgICB0YWdl -c2RhdGVuT3ZlcnJpZGVzID0gJExvY2tSZXN1bHQudGFnZXNkYXRlbk92ZXJyaWRlcw0KICAgICAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIERlYnVn -LUxvZyAnQVBJJyAiUE9TVCAvYXBpL2ltcG9ydC9leGNlbC91ZWJlcm5laG1lbiAtPiAkKCRMb2Nr -UmVzdWx0LmVpbnRyYWVnZSkgRWludHJhZWdlLCAkKCRMb2NrUmVzdWx0LmtvbW1lbnRhcmUpIEtv -bW1lbnRhcmUsICROVGVybWluZSBUZXJtaW5lLCBCYWNrdXA6ICQoJExvY2tSZXN1bHQuYmFja3Vw -KSINCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAg -ICAjID09PT09PT09PT09PT09PT09PT09PSBMT0dCVUNIID09PT09PT09PT09PT09PT09PT09PQ0K -ICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9sb2didWNoJyAtYW5kICRNZXRob2QgLWVx -ICdHRVQnKSB7DQogICAgICAgICAgICAgICAgIyBBZG1pbi1HdWFyZDogTG9nYnVjaCBlbnRoYWVs -dCBwZXJzb25lbmJlem9nZW5lIERhdGVuDQogICAgICAgICAgICAgICAgIyAoU2NoaWNodGFlbmRl -cnVuZ2VuIHBybyBVc2VyIG1pdCBhbHRlbS9uZXVlbSBXZXJ0KS4gSW0NCiAgICAgICAgICAgICAg -ICAjIEZyb250ZW5kIG51ciBmdWVyIFN1cGVyVXNlciBvZGVyIEFkbWluIHNpY2h0YmFyDQogICAg -ICAgICAgICAgICAgIyAoZGFyZkxvZ2J1Y2hUYWIoKSBpbiBqcy9jb3JlL3Blcm1pc3Npb25zLmpz -OjI1MykuIE1pcnJvcg0KICAgICAgICAgICAgICAgICMgenUgc2VydmVyLnB5OjIxMzQtMjEzOS4N -CiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAk -UmVzICdLZWluZSBCZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg -ICRMb2dQYXRoID0gSm9pbi1QYXRoICREYXRhRGlyICdsb2didWNoLmpzb24nDQogICAgICAgICAg -ICAgICAgJEVpbnRyYWVnZSA9IEAoKQ0KICAgICAgICAgICAgICAgIGlmIChUZXN0LVBhdGggJExv -Z1BhdGgpIHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAg -ICAgICRMb2dDb250ZW50ID0gW1N5c3RlbS5JTy5GaWxlXTo6UmVhZEFsbFRleHQoJExvZ1BhdGgs -IFtTeXN0ZW0uVGV4dC5FbmNvZGluZ106OlVURjgpLlRyaW0oKQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgaWYgKCRMb2dDb250ZW50Lkxlbmd0aCAtZ3QgMSkgew0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICRQYXJzZWQgPSAkTG9nQ29udGVudCB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICRQYXJzZWQpIHsgJEVpbnRyYWVn -ZSA9IEAoJFBhcnNlZCkgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLVN0YXJ0dXBM -b2cgIkxvZ2J1Y2gtUmVhZC1GZWhsZXI6ICRfIC0tIGxpZWZlcmUgbGVlcmUgTGlzdGUiDQogICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIyBQ -UyA1LjEgdW53cmFwcGVkIEAoKSB1bmQgU2luZ2xlLUVsZW1lbnQtQXJyYXlzIGluIENvbnZlcnRU -by1Kc29uIC0tDQogICAgICAgICAgICAgICAgIyBkYWhlciBTb25kZXJwZmFkZS4gRnJvbnRlbmQg -ZXJ3YXJ0ZXQgaW1tZXIgZWluIEpTT04tQXJyYXkuDQogICAgICAgICAgICAgICAgaWYgKCRFaW50 -cmFlZ2UuQ291bnQgLWVxIDApIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uUmF3ICRS -ZXMgJ1tdJw0KICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkRWludHJhZWdlLkNvdW50IC1lcSAx -KSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvblJhdyAkUmVzICgnWycgKyAoQ29udmVy -dFRvLUpzb24gLUlucHV0T2JqZWN0ICRFaW50cmFlZ2VbMF0gLURlcHRoIDI1IC1Db21wcmVzcykg -KyAnXScpDQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgU2Vu -ZC1Kc29uUmF3ICRSZXMgKENvbnZlcnRUby1Kc29uIC1JbnB1dE9iamVjdCAkRWludHJhZWdlIC1E -ZXB0aCAyNSAtQ29tcHJlc3MpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNv -bnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09 -PT09IE1FRElFTjogTGlzdGUgPT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICBpZiAo -JFBhdGggLWVxICcvYXBpL21lZGllbicgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAg -ICAgICAgICAgICMgQmVpbSBlcnN0ZW4gQXVmcnVmIFN5c3RlbS1NZWRpZW4gYXVzIC9pbWFnZXMv -IGVpbm1hbGlnIGltcG9ydGllcmVuLg0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAg -ICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxvY2sgJ21lZGllbi5qc29uJyB7IEludm9rZS1NZWRp -ZW5TeXN0ZW1JbXBvcnRGYWxsc05vZXRpZyB8IE91dC1OdWxsIH0gfCBPdXQtTnVsbA0KICAgICAg -ICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBEZWJ1Zy1Mb2cgJ0FQSScg -InN5c3RlbS1pbXBvcnQgc2tpcHBlZDogJF8iDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAg -ICAgICAgICRNZXRhID0gUmVhZC1NZWRpZW5NZXRhDQogICAgICAgICAgICAgICAgJE1lZGllbkxp -c3RlID0gaWYgKCRNZXRhLm1lZGllbikgeyBAKCRNZXRhLm1lZGllbikgfSBlbHNlIHsgQCgpIH0N -CiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAeyBtZWRpZW4gPSAkTWVkaWVuTGlzdGU7 -IGthdGVnb3JpZW4gPSAoR2V0LU1lZGllbkthdGVnb3JpZUtleXMpIH0NCiAgICAgICAgICAgICAg -ICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09PT09PT09PT09 -PT09PT09PSBNRURJRU46IERhdGVpIGF1c2xpZWZlcm4gPT09PT09PT09PT09PT09PT09PT09DQog -ICAgICAgICAgICBpZiAoJFBhdGguU3RhcnRzV2l0aCgnL2FwaS9tZWRpZW4vZGF0ZWkvJykgLWFu -ZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgICRNaWQgPSAkUGF0aC5TdWJz -dHJpbmcoJFBhdGguTGFzdEluZGV4T2YoJy8nKSArIDEpDQogICAgICAgICAgICAgICAgJE1ldGEg -PSBSZWFkLU1lZGllbk1ldGENCiAgICAgICAgICAgICAgICAkRWludHJhZyA9ICRudWxsDQogICAg -ICAgICAgICAgICAgaWYgKCRNZXRhLm1lZGllbikgew0KICAgICAgICAgICAgICAgICAgICBmb3Jl -YWNoICgkbSBpbiBAKCRNZXRhLm1lZGllbikpIHsgaWYgKCRtLmlkIC1lcSAkTWlkKSB7ICRFaW50 -cmFnID0gJG07IGJyZWFrIH0gfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBp -ZiAoJG51bGwgLWVxICRFaW50cmFnKSB7IFNlbmQtRXJyb3IgJFJlcyAnTmljaHQgZ2VmdW5kZW4n -IDQwNDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICREYXRlaSA9IEdldC1NZWRpZW5QZmFk -ICRFaW50cmFnDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtUGF0aCAkRGF0ZWkpKSB7 -IFNlbmQtRXJyb3IgJFJlcyAnRGF0ZWkgbmljaHQgdm9yaGFuZGVuJyA0MDQ7IGNvbnRpbnVlIH0N -CiAgICAgICAgICAgICAgICBTZW5kLUZpbGUgJFJlcyAkRGF0ZWkNCiAgICAgICAgICAgICAgICBj -b250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09PT09PT09PT09PT09 -PT09PSBNRURJRU46IFVwbG9hZCAoQmFzZTY0LUpTT04pID09PT09PT09PT09PT09PT09PT09PQ0K -ICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9tZWRpZW4nIC1hbmQgJE1ldGhvZCAtZXEg -J1BPU1QnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkg -eyBTZW5kLUVycm9yICRSZXMgJ051ciBTdXBlclVzZXIgZGFyZiBNZWRpZW4gaG9jaGxhZGVuJyA0 -MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkQm9keSA9IFJlYWQtQm9keSAkUmVxDQog -ICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkQm9keSkgeyBTZW5kLUVycm9yICRSZXMgJ0Fu -ZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIHRyeSB7ICRB -ID0gJEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uIH0gY2F0Y2ggeyBTZW5kLUVycm9yICRSZXMgJ1Vu -Z3VlbHRpZ2VzIEpTT04nIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRLYXRlZ29y -aWUgPSAoW3N0cmluZ10kQS5rYXRlZ29yaWUpLlRvTG93ZXIoKS5UcmltKCkNCiAgICAgICAgICAg -ICAgICBpZiAoLW5vdCAoKEdldC1NZWRpZW5LYXRlZ29yaWVLZXlzKSAtY29udGFpbnMgJEthdGVn -b3JpZSkpIHsgU2VuZC1FcnJvciAkUmVzICdVbmd1ZWx0aWdlIEthdGVnb3JpZScgNDAwOyBjb250 -aW51ZSB9DQogICAgICAgICAgICAgICAgJE1pbWUgPSAoW3N0cmluZ10kQS5taW1lVHlwZSkuVG9M -b3dlcigpLlRyaW0oKQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRzY3JpcHQ6TWVkaWVuRXJs -YXVidGVNaW1lcy5Db250YWluc0tleSgkTWltZSkpIHsgU2VuZC1FcnJvciAkUmVzICdEYXRlaXR5 -cCBuaWNodCBlcmxhdWJ0JyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkQmV6ZWlj -aG51bmcgPSAoW3N0cmluZ10kQS5iZXplaWNobnVuZykuVHJpbSgpDQogICAgICAgICAgICAgICAg -aWYgKFtzdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJEJlemVpY2hudW5nKSkgeyBTZW5kLUVy -cm9yICRSZXMgJ0JlemVpY2hudW5nIGZlaGx0JyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAg -ICAgICAkRGF0YUI2NCA9IGlmICgkQS5kYXRhKSB7IFtzdHJpbmddJEEuZGF0YSB9IGVsc2UgeyAn -JyB9DQogICAgICAgICAgICAgICAgaWYgKCREYXRhQjY0LlN0YXJ0c1dpdGgoJ2RhdGE6JykpIHsN -CiAgICAgICAgICAgICAgICAgICAgJGlkeCA9ICREYXRhQjY0LkluZGV4T2YoJywnKQ0KICAgICAg -ICAgICAgICAgICAgICBpZiAoJGlkeCAtZ2UgMCkgeyAkRGF0YUI2NCA9ICREYXRhQjY0LlN1YnN0 -cmluZygkaWR4ICsgMSkgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB0cnkg -eyAkUm9oQnl0ZXMgPSBbU3lzdGVtLkNvbnZlcnRdOjpGcm9tQmFzZTY0U3RyaW5nKCREYXRhQjY0 -KSB9IGNhdGNoIHsgU2VuZC1FcnJvciAkUmVzICdCYXNlNjQgdW5ndWVsdGlnJyA0MDA7IGNvbnRp -bnVlIH0NCiAgICAgICAgICAgICAgICBpZiAoJFJvaEJ5dGVzLkxlbmd0aCAtZ3QgJHNjcmlwdDpN -ZWRpZW5NYXhCeXRlcykgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXMgIkRh -dGVpIHp1IGdyb3NzIChtYXggJChbTWF0aF06OkZsb29yKCRzY3JpcHQ6TWVkaWVuTWF4Qnl0ZXMg -LyAxTUIpKSBNQikiIDQxMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgJEV4dCA9ICRzY3JpcHQ6TWVkaWVuRXJsYXVidGVNaW1lc1skTWltZV0NCiAgICAgICAg -ICAgICAgICAkTWlkID0gTmV3LU1lZGllbklkDQogICAgICAgICAgICAgICAgIyBSb3V0aW5nOiBX -ZW5uIEltYWdlcy88a2F0Pi8gYWxzIERpc2stT3JkbmVyIGV4aXN0aWVydCAtPiBkb3J0IGhpbnNj -aHJlaWJlbg0KICAgICAgICAgICAgICAgICMgbWl0IHNhbml0aXNpZXJ0ZW0gT3JpZ2luYWwtRGF0 -ZWluYW1lbiArIGBwZmFkYCBpbSBFaW50cmFnIHNldHplbi4NCiAgICAgICAgICAgICAgICAjIFNv -bnN0IEZhbGxiYWNrIGF1ZiBkYXRhL21lZGllbi88a2F0Pi88aWQ+LjxleHQ+Lg0KICAgICAgICAg -ICAgICAgICRJbWFnZXNEaXIgPSBHZXQtTWVkaWVuSW1hZ2VzT3JkbmVyICRLYXRlZ29yaWUNCiAg -ICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICRJbWFnZXNEaXIpIHsNCiAgICAgICAgICAgICAg -ICAgICAgJFVwbG9hZE5hbWUgPSBpZiAoJEEuZGF0ZWluYW1lKSB7IFtzdHJpbmddJEEuZGF0ZWlu -YW1lIH0gZWxzZSB7ICRCZXplaWNobnVuZyB9DQogICAgICAgICAgICAgICAgICAgICRCYXNlID0g -R2V0LU1lZGllbkJhc2VuYW1lQXVzVXBsb2FkICRVcGxvYWROYW1lDQogICAgICAgICAgICAgICAg -ICAgICRaaWVsID0gR2V0LU1lZGllbkZyZWllckRhdGVpbmFtZSAkSW1hZ2VzRGlyICRCYXNlICRF -eHQNCiAgICAgICAgICAgICAgICAgICAgW1N5c3RlbS5JTy5GaWxlXTo6V3JpdGVBbGxCeXRlcygk -WmllbCwgJFJvaEJ5dGVzKQ0KICAgICAgICAgICAgICAgICAgICAkWmllbE5hbWUgPSBbU3lzdGVt -LklPLlBhdGhdOjpHZXRGaWxlTmFtZSgkWmllbCkNCiAgICAgICAgICAgICAgICAgICAgJEVpbnRy -YWcgPSBbb3JkZXJlZF1Aew0KICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSAkTWlkDQogICAg -ICAgICAgICAgICAgICAgICAgICBrYXRlZ29yaWUgPSAkS2F0ZWdvcmllDQogICAgICAgICAgICAg -ICAgICAgICAgICBiZXplaWNobnVuZyA9ICRCZXplaWNobnVuZw0KICAgICAgICAgICAgICAgICAg -ICAgICAgZGF0ZWluYW1lID0gJFppZWxOYW1lDQogICAgICAgICAgICAgICAgICAgICAgICBtaW1l -VHlwZSA9ICRNaW1lDQogICAgICAgICAgICAgICAgICAgICAgICBncm9lc3NlID0gJFJvaEJ5dGVz -Lkxlbmd0aA0KICAgICAgICAgICAgICAgICAgICAgICAgcGZhZCA9ICcvaW1hZ2VzLycgKyAkS2F0 -ZWdvcmllICsgJy8nICsgJFppZWxOYW1lDQogICAgICAgICAgICAgICAgICAgICAgICBob2NoZ2Vs -YWRlbkFtID0gKEdldC1EYXRlIC1Gb3JtYXQgJ3l5eXktTU0tZGQgSEg6bW06c3MnKQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgaG9jaGdlbGFkZW5Wb24gPSAoR2V0LUFrdHVlbGxlckJlbnV0emVy -KQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAg -ICAgICAgICAgICAgICAgJEthdERpciA9IEpvaW4tUGF0aCAoR2V0LU1lZGllbkRpcikgJEthdGVn -b3JpZQ0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1QYXRoICRLYXREaXIpKSB7 -IE5ldy1JdGVtIC1JdGVtVHlwZSBEaXJlY3RvcnkgLVBhdGggJEthdERpciAtRm9yY2UgfCBPdXQt -TnVsbCB9DQogICAgICAgICAgICAgICAgICAgICRaaWVsID0gSm9pbi1QYXRoICRLYXREaXIgKCRN -aWQgKyAkRXh0KQ0KICAgICAgICAgICAgICAgICAgICBbU3lzdGVtLklPLkZpbGVdOjpXcml0ZUFs -bEJ5dGVzKCRaaWVsLCAkUm9oQnl0ZXMpDQogICAgICAgICAgICAgICAgICAgICRFaW50cmFnID0g -W29yZGVyZWRdQHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gJE1pZA0KICAgICAgICAg -ICAgICAgICAgICAgICAga2F0ZWdvcmllID0gJEthdGVnb3JpZQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgYmV6ZWljaG51bmcgPSAkQmV6ZWljaG51bmcNCiAgICAgICAgICAgICAgICAgICAgICAg -IGRhdGVpbmFtZSA9IGlmICgkQS5kYXRlaW5hbWUpIHsgKFtzdHJpbmddJEEuZGF0ZWluYW1lKS5U -cmltKCkuU3Vic3RyaW5nKDAsIFtNYXRoXTo6TWluKChbc3RyaW5nXSRBLmRhdGVpbmFtZSkuTGVu -Z3RoLCAyMDApKSB9IGVsc2UgeyAoJE1pZCArICRFeHQpIH0NCiAgICAgICAgICAgICAgICAgICAg -ICAgIG1pbWVUeXBlID0gJE1pbWUNCiAgICAgICAgICAgICAgICAgICAgICAgIGdyb2Vzc2UgPSAk -Um9oQnl0ZXMuTGVuZ3RoDQogICAgICAgICAgICAgICAgICAgICAgICBob2NoZ2VsYWRlbkFtID0g -KEdldC1EYXRlIC1Gb3JtYXQgJ3l5eXktTU0tZGQgSEg6bW06c3MnKQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgaG9jaGdlbGFkZW5Wb24gPSAoR2V0LUFrdHVlbGxlckJlbnV0emVyKQ0KICAgICAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHRyeSB7 -DQogICAgICAgICAgICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxvY2sgJ21lZGllbi5qc29uJyB7 -DQogICAgICAgICAgICAgICAgICAgICAgICAkTWV0YSA9IFJlYWQtTWVkaWVuTWV0YQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJE1ldGEubWVkaWVuKSB7ICRNZXRhID0gW1BTQ3Vz -dG9tT2JqZWN0XUB7IG1lZGllbiA9IEAoKSB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRM -aXN0ZSA9IEAoJE1ldGEubWVkaWVuKSArIFtQU0N1c3RvbU9iamVjdF0kRWludHJhZw0KICAgICAg -ICAgICAgICAgICAgICAgICAgJE1ldGEgPSBbUFNDdXN0b21PYmplY3RdQHsgbWVkaWVuID0gJExp -c3RlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLU1lZGllbk1ldGEgJE1ldGENCiAg -ICAgICAgICAgICAgICAgICAgfSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgfSBjYXRjaCB7 -DQogICAgICAgICAgICAgICAgICAgIGlmIChUZXN0LVBhdGggJFppZWwpIHsgUmVtb3ZlLUl0ZW0g -JFppZWwgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUgfQ0KICAgICAgICAgICAgICAgICAg -ICBTZW5kLUVycm9yICRSZXMgIiRfIiA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0K -ICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ21lZGllbi5ob2NoZ2VsYWRlbicgQHsg -aWQgPSAkTWlkOyBrYXRlZ29yaWUgPSAkS2F0ZWdvcmllOyBiZXplaWNobnVuZyA9ICRCZXplaWNo -bnVuZzsgZ3JvZXNzZSA9ICRSb2hCeXRlcy5MZW5ndGg7IG1pbWVUeXBlID0gJE1pbWUgfQ0KICAg -ICAgICAgICAgICAgICRVc2VybmFtZSA9ICRlbnY6VVNFUk5BTUUNCiAgICAgICAgICAgICAgICAk -Um9sbGUgPSBHZXQtVXNlclJvbGxlDQogICAgICAgICAgICAgICAgQWRkLUNoYW5nZUxvZ0VudHJ5 -ICdtZWRpZW4nICRudWxsICRudWxsICRudWxsICRVc2VybmFtZSAkUm9sbGUgQHsgYWt0aW9uID0g -J2hvY2hnZWxhZGVuJzsgaWQgPSAkTWlkOyBrYXRlZ29yaWUgPSAkS2F0ZWdvcmllOyBiZXplaWNo -bnVuZyA9ICRCZXplaWNobnVuZyB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsg -c3RhdHVzID0gJ2dlc3BlaWNoZXJ0JzsgbWVkaXVtID0gJEVpbnRyYWcgfSAyMDENCiAgICAgICAg -ICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09PT09 -PT09PT09PT09PT09PSBNRURJRU46IFVtYmVuZW5uZW4gLyBWZXJzY2hpZWJlbiAvIERhdGVpIGVy -c2V0emVuID09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoLlN0YXJ0 -c1dpdGgoJy9hcGkvbWVkaWVuLycpIC1hbmQgJE1ldGhvZCAtZXEgJ1BBVENIJyAtYW5kIC1ub3Qg -JFBhdGguU3RhcnRzV2l0aCgnL2FwaS9tZWRpZW4vZGF0ZWkvJykpIHsNCiAgICAgICAgICAgICAg -ICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlcyAnTnVyIFN1 -cGVyVXNlciBkYXJmIE1lZGllbiBhZW5kZXJuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAg -ICAgICAkTWlkID0gJFBhdGguU3Vic3RyaW5nKCRQYXRoLkxhc3RJbmRleE9mKCcvJykgKyAxKQ0K -ICAgICAgICAgICAgICAgICRCb2R5ID0gUmVhZC1Cb2R5ICRSZXENCiAgICAgICAgICAgICAgICBp -ZiAoJG51bGwgLWVxICRCb2R5KSB7IFNlbmQtRXJyb3IgJFJlcyAnQW5mcmFnZSB6dSBncm9zcycg -NDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgdHJ5IHsgJEEgPSAkQm9keSB8IENvbnZl -cnRGcm9tLUpzb24gfSBjYXRjaCB7IFNlbmQtRXJyb3IgJFJlcyAnVW5ndWVsdGlnZXMgSlNPTicg -NDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJE5ldWVCZXogPSBpZiAoJEEuUFNPYmpl -Y3QuUHJvcGVydGllc1snYmV6ZWljaG51bmcnXSkgeyBbc3RyaW5nXSRBLmJlemVpY2hudW5nIH0g -ZWxzZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAkTmV1ZUthdCA9IGlmICgkQS5QU09iamVj -dC5Qcm9wZXJ0aWVzWydrYXRlZ29yaWUnXSkgeyAoW3N0cmluZ10kQS5rYXRlZ29yaWUpLlRvTG93 -ZXIoKS5UcmltKCkgfSBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAt -bmUgJE5ldWVLYXQgLWFuZCAtbm90ICgoR2V0LU1lZGllbkthdGVnb3JpZUtleXMpIC1jb250YWlu -cyAkTmV1ZUthdCkpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzICdVbmd1 -ZWx0aWdlIEthdGVnb3JpZScgNDAwOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICAjIE9wdGlvbmFsOiBEYXRlaS1JbmhhbHQgYXVzdGF1c2NoZW4gKCJEYXRlaSBl -cnNldHplbiItQWt0aW9uKQ0KICAgICAgICAgICAgICAgICROZXVlRGF0YUI2NCA9IGlmICgkQS5Q -U09iamVjdC5Qcm9wZXJ0aWVzWydkYXRhJ10pIHsgW3N0cmluZ10kQS5kYXRhIH0gZWxzZSB7ICRu -dWxsIH0NCiAgICAgICAgICAgICAgICAkTmV1ZU1pbWUgICAgPSBpZiAoJEEuUFNPYmplY3QuUHJv -cGVydGllc1snbWltZVR5cGUnXSkgeyAoW3N0cmluZ10kQS5taW1lVHlwZSkuVG9Mb3dlcigpLlRy -aW0oKSB9IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAgICAgJE5ldWVyRGF0ZWluYW1lID0g -aWYgKCRBLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2RhdGVpbmFtZSddKSB7IChbc3RyaW5nXSRBLmRh -dGVpbmFtZSkuVHJpbSgpIH0gZWxzZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAkTmV1ZUJ5 -dGVzID0gJG51bGwNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCBbc3RyaW5nXTo6SXNOdWxsT3JX -aGl0ZVNwYWNlKCROZXVlRGF0YUI2NCkpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3Qg -JE5ldWVNaW1lKSB7IFNlbmQtRXJyb3IgJFJlcyAnbWltZVR5cGUgZmVobHQgenVtIERhdGVpLUVy -c2V0emVuJyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHNj -cmlwdDpNZWRpZW5FcmxhdWJ0ZU1pbWVzLkNvbnRhaW5zS2V5KCROZXVlTWltZSkpIHsgU2VuZC1F -cnJvciAkUmVzICdEYXRlaXR5cCBuaWNodCBlcmxhdWJ0JyA0MDA7IGNvbnRpbnVlIH0NCiAgICAg -ICAgICAgICAgICAgICAgaWYgKCROZXVlRGF0YUI2NC5TdGFydHNXaXRoKCdkYXRhOicpKSB7DQog -ICAgICAgICAgICAgICAgICAgICAgICAkaWR4ID0gJE5ldWVEYXRhQjY0LkluZGV4T2YoJywnKQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRpZHggLWdlIDApIHsgJE5ldWVEYXRhQjY0ID0g -JE5ldWVEYXRhQjY0LlN1YnN0cmluZygkaWR4ICsgMSkgfQ0KICAgICAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgICAgIHRyeSB7ICROZXVlQnl0ZXMgPSBbU3lzdGVtLkNvbnZlcnRd -OjpGcm9tQmFzZTY0U3RyaW5nKCROZXVlRGF0YUI2NCkgfSBjYXRjaCB7IFNlbmQtRXJyb3IgJFJl -cyAnQmFzZTY0IHVuZ3VlbHRpZycgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgICAg -IGlmICgkTmV1ZUJ5dGVzLkxlbmd0aCAtZ3QgJHNjcmlwdDpNZWRpZW5NYXhCeXRlcykgew0KICAg -ICAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzICJEYXRlaSB6dSBncm9zcyAobWF4 -ICQoW01hdGhdOjpGbG9vcigkc2NyaXB0Ok1lZGllbk1heEJ5dGVzIC8gMU1CKSkgTUIpIiA0MTM7 -IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgJHNjcmlwdDpVcGRhdGVkRWludHJhZyA9ICRudWxsOyAkc2NyaXB0OkZvdW5k -ID0gJGZhbHNlOyAkc2NyaXB0OkFlbmRlcnVuZ2VuID0gQHt9DQogICAgICAgICAgICAgICAgdHJ5 +ICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAjIFNjaGljaHRl +biArIFBmbGljaHQNCiAgICAgICAgICAgICAgICAgICAgICAgICRORWludHJhZWdlID0gMDsgJE5Q +ZmxpY2h0ID0gMDsgJE5PcnBoYW4gPSAwDQogICAgICAgICAgICAgICAgICAgICAgICAjIEF1ZGl0 +LUlJLTEgRjE6IFNjaGljaHRjb2RlLVdoaXRlbGlzdCBhdWNoIGltIEV4Y2VsLUltcG9ydC4NCiAg +ICAgICAgICAgICAgICAgICAgICAgICMgTWlycm9yIHp1IHNlcnZlci5weTozNzY2LTM3NzAuDQog +ICAgICAgICAgICAgICAgICAgICAgICAkRXhjZWxWYWxpZENvZGVzID0gTmV3LU9iamVjdCBTeXN0 +ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5IYXNoU2V0W3N0cmluZ10NCiAgICAgICAgICAgICAgICAg +ICAgICAgIFt2b2lkXSRFeGNlbFZhbGlkQ29kZXMuQWRkKCcnKQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgaWYgKCRudWxsIC1uZSAkQWRtaW4gLWFuZCAkQWRtaW4uUFNPYmplY3QuUHJvcGVydGll +c1snc2NoaWNodGNvZGVzJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNo +ICgkU2MgaW4gJEFkbWluLnNjaGljaHRjb2Rlcykgew0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICBpZiAoJG51bGwgLW5lICRTYyAtYW5kICRTYy5QU09iamVjdC5Qcm9wZXJ0aWVzWydj +b2RlJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lkXSRFeGNl +bFZhbGlkQ29kZXMuQWRkKFtzdHJpbmddJFNjLmNvZGUpDQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJE9wdFNjaGljaHRlbiAt +YW5kICRudWxsIC1uZSAkRXhjZWxFaW50cmFlZ2UpIHsNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICBmb3JlYWNoICgkRGF0dW1Qcm9wIGluICRFeGNlbEVpbnRyYWVnZS5QU09iamVjdC5Qcm9w +ZXJ0aWVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICREYXR1bSA9ICREYXR1 +bVByb3AuTmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkUGxh +bnVuZy5laW50cmFlZ2UuUFNPYmplY3QuUHJvcGVydGllc1skRGF0dW1dKSB7DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy5laW50cmFlZ2UgfCBBZGQtTWVtYmVy +IC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAkRGF0dW0gLVZhbHVlIChOZXctT2JqZWN0 +IFBTT2JqZWN0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRQaWRQcm9wIGluICREYXR1bVByb3AuVmFs +dWUuUFNPYmplY3QuUHJvcGVydGllcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgJGVyID0gW2ludF0kUGlkUHJvcC5OYW1lDQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICBpZiAoLW5vdCAkRXhjZWxSb3dUb1BpZC5Db250YWluc0tleSgkZXIpKSB7IGNv +bnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwaWRTdHIgPSBb +c3RyaW5nXSRFeGNlbFJvd1RvUGlkWyRlcl0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICR3ZXJ0ID0gW3N0cmluZ10kUGlkUHJvcC5WYWx1ZQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJEV4Y2VsVmFsaWRDb2Rlcy5Db250YWlucygkd2Vy +dCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTk9ycGhhbisr +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIGlmICgkUGxhbnVuZy5laW50cmFlZ2UuJERhdHVtLlBTT2JqZWN0LlByb3Bl +cnRpZXNbJHBpZFN0cl0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAkUGxhbnVuZy5laW50cmFlZ2UuJERhdHVtLiRwaWRTdHIgPSAkd2VydA0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAkUGxhbnVuZy5laW50cmFlZ2UuJERhdHVtIHwgQWRkLU1lbWJlciAt +TWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJHBpZFN0ciAtVmFsdWUgJHdlcnQNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICRORWludHJhZWdlKysNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICBpZiAoJG51bGwgLW5lICRFeGNlbFBmbGljaHQpIHsNCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgZm9yZWFjaCAoJERhdHVtUHJvcCBpbiAkRXhjZWxQZmxpY2h0LlBTT2Jq +ZWN0LlByb3BlcnRpZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRE +YXR1bSA9ICREYXR1bVByb3AuTmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgaWYgKC1ub3QgJFBsYW51bmcucGZsaWNodC5QU09iamVjdC5Qcm9wZXJ0aWVzWyREYXR1bV0p +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy5wZmxp +Y2h0IHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJERhdHVtIC1W +YWx1ZSAoTmV3LU9iamVjdCBQU09iamVjdCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRQ +aWRQcm9wIGluICREYXR1bVByb3AuVmFsdWUuUFNPYmplY3QuUHJvcGVydGllcykgew0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlciA9IFtpbnRdJFBpZFByb3AuTmFt +ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRFeGNl +bFJvd1RvUGlkLkNvbnRhaW5zS2V5KCRlcikpIHsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICRwaWRTdHIgPSBbc3RyaW5nXSRFeGNlbFJvd1RvUGlk +WyRlcl0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFBpZFBy +b3AuVmFsdWUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +aWYgKCRQbGFudW5nLnBmbGljaHQuJERhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXNbJHBpZFN0cl0p +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFu +dW5nLnBmbGljaHQuJERhdHVtLiRwaWRTdHIgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcucGZsaWNodC4kRGF0dW0gfCBBZGQtTWVt +YmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAkcGlkU3RyIC1WYWx1ZSAkdHJ1ZQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICROUGZsaWNodCsrDQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAg +ICAgICAgICAgICAgICAgICAgICAjIEtvbW1lbnRhcmUNCiAgICAgICAgICAgICAgICAgICAgICAg +ICROS29tbWVudGFyZSA9IDANCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkT3B0S29tbWVu +dGFyZSAtYW5kICRudWxsIC1uZSAkRXhjZWxLb21tZW50YXJlKSB7DQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgZm9yZWFjaCAoJERhdHVtUHJvcCBpbiAkRXhjZWxLb21tZW50YXJlLlBTT2Jq +ZWN0LlByb3BlcnRpZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJERhdHVt +ID0gJERhdHVtUHJvcC5OYW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgt +bm90ICRQbGFudW5nLmtvbW1lbnRhcmUuUFNPYmplY3QuUHJvcGVydGllc1skRGF0dW1dKSB7DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy5rb21tZW50YXJlIHwg +QWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJERhdHVtIC1WYWx1ZSAo +TmV3LU9iamVjdCBQU09iamVjdCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkUGlkUHJvcCBpbiAkRGF0 +dW1Qcm9wLlZhbHVlLlBTT2JqZWN0LlByb3BlcnRpZXMpIHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICRlciA9IFtpbnRdJFBpZFByb3AuTmFtZQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJEV4Y2VsUm93VG9QaWQuQ29udGFpbnNLZXko +JGVyKSkgeyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk +cGlkU3RyID0gW3N0cmluZ10kRXhjZWxSb3dUb1BpZFskZXJdDQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAkS29tT2JqID0gW1BTQ3VzdG9tT2JqZWN0XUB7DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IFtzdHJpbmddJFBpZFByb3AuVmFs +dWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZWFlbmRlcnRBbSA9 +ICRKZXR6dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlYWVuZGVy +dFZvbiA9IChHZXQtQWt0dWVsbGVyQmVudXR6ZXIpDQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFBs +YW51bmcua29tbWVudGFyZS4kRGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skcGlkU3RyXSkgew0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLmtvbW1lbnRh +cmUuJERhdHVtLiRwaWRTdHIgPSAkS29tT2JqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICRQbGFudW5nLmtvbW1lbnRhcmUuJERhdHVtIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3Rl +UHJvcGVydHkgLU5hbWUgJHBpZFN0ciAtVmFsdWUgJEtvbU9iag0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +JE5Lb21tZW50YXJlKysNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAg +ICAgICAgICAgICAgICAgICAgICAgIyBSZWloZW5mb2xnZQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgaWYgKCRPcHRSZWloZW5mb2xnZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRF +eGNlbE9yZGVyUm93cyA9IEAoJEFrdGlvbmVuIHwgV2hlcmUtT2JqZWN0IHsgQCgnbWF0Y2gnLCdu +ZXUnKSAtY29udGFpbnMgJF8uYWt0aW9uIC1hbmQgJF8uUFNPYmplY3QuUHJvcGVydGllc1snZXhj +ZWxSb3cnXSB9IHwgU29ydC1PYmplY3QgeyBbaW50XSRfLmV4Y2VsUm93IH0pDQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgJFNvcnRQaWRzID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlv +bnMuQXJyYXlMaXN0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGEgaW4g +JEV4Y2VsT3JkZXJSb3dzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlciA9 +IFtpbnRdJGEuZXhjZWxSb3cNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRF +eGNlbFJvd1RvUGlkLkNvbnRhaW5zS2V5KCRlcikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICRzb3J0SWQgPSAkRXhjZWxSb3dUb1BpZFskZXJdDQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkU29ydFBpZHMuQ29udGFpbnMoJHNvcnRJ +ZCkpIHsgW3ZvaWRdJFNvcnRQaWRzLkFkZCgkc29ydElkKSB9DQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgJEJ5SWQgPSBAe30NCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICBmb3JlYWNoICgkcCBpbiAkUGVyc29uZW5MaXN0ZSkgew0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGllc1snaWQnXSkgeyAkQnlJZFtbaW50 +XSRwLmlkXSA9ICRwIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgJE5ldWVMaXN0ZSA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rp +b25zLkFycmF5TGlzdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwZXJz +SWQgaW4gJFNvcnRQaWRzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk +QnlJZC5Db250YWluc0tleSgkcGVyc0lkKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgW3ZvaWRdJE5ldWVMaXN0ZS5BZGQoJEJ5SWRbJHBlcnNJZF0pDQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAkQnlJZC5SZW1vdmUoJHBlcnNJZCkNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFJlc3RsaWNoZSBQZXJzb25lbjogYWt0aXZl +IHp1ZXJzdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRSZXN0QWt0aXZlID0gQCgkQnlJ +ZC5WYWx1ZXMgfCBXaGVyZS1PYmplY3QgeyAtbm90ICRfLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2Fr +dGl2J10gLW9yICRfLmFrdGl2IC1lcSAkdHJ1ZSB9KQ0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICRSZXN0SW5ha3RpdmUgPSBAKCRCeUlkLlZhbHVlcyB8IFdoZXJlLU9iamVjdCB7ICRfLlBT +T2JqZWN0LlByb3BlcnRpZXNbJ2FrdGl2J10gLWFuZCAkXy5ha3RpdiAtZXEgJGZhbHNlIH0pDQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHAgaW4gJFJlc3RBa3RpdmUpIHsg +W3ZvaWRdJE5ldWVMaXN0ZS5BZGQoJHApIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBm +b3JlYWNoICgkcCBpbiAkUmVzdEluYWt0aXZlKSB7IFt2b2lkXSROZXVlTGlzdGUuQWRkKCRwKSB9 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAncG9zaXRpb24nIGZvcnRsYXVmZW5kIG5l +dSB2ZXJnZWJlbiAoRnJvbnRlbmQgc29ydGllcnQNCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAjIG5hY2ggcC5wb3NpdGlvbiwgTklDSFQgbmFjaCBBcnJheS1SZWloZW5mb2xnZSkNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAkcG9zQ291bnRlciA9IDENCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICBmb3JlYWNoICgkcCBpbiAkTmV1ZUxpc3RlKSB7DQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIGlmICgkcC5QU09iamVjdC5Qcm9wZXJ0aWVzWydwb3NpdGlvbiddKSB7 +ICRwLnBvc2l0aW9uID0gJHBvc0NvdW50ZXIgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICBlbHNlIHsgJHAgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFt +ZSAncG9zaXRpb24nIC1WYWx1ZSAkcG9zQ291bnRlciB9DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICRwb3NDb3VudGVyKysNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcucGVyc29uZW4gPSBAKCROZXVlTGlz +dGUpDQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICMgQXVjaCBvaG5lIFJlaWhlbmZvbGdlLVVwZGF0ZTogbmV1ZSBQZXJzb25lbiBi +cmF1Y2hlbiAncG9zaXRpb24nDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1heFBvcyA9 +IDANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcCBpbiAkUGVyc29uZW5M +aXN0ZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHAuUFNPYmplY3Qu +UHJvcGVydGllc1sncG9zaXRpb24nXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgJHBwID0gW2ludF0oJHAucG9zaXRpb24gfCBGb3JFYWNoLU9iamVjdCB7IGlmICgkXykg +eyAkXyB9IGVsc2UgeyAwIH0gfSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +IGlmICgkcHAgLWd0ICRtYXhQb3MpIHsgJG1heFBvcyA9ICRwcCB9DQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHAgaW4gJFBlcnNvbmVuTGlzdGUpIHsNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGhhdFBvcyA9ICRmYWxzZQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGllc1sncG9zaXRp +b24nXSAtYW5kICRwLnBvc2l0aW9uKSB7ICRoYXRQb3MgPSAkdHJ1ZSB9DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRoYXRQb3MpIHsNCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICRtYXhQb3MrKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Bvc2l0aW9uJ10pIHsgJHAucG9z +aXRpb24gPSAkbWF4UG9zIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs +c2UgeyAkcCB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICdwb3Np +dGlvbicgLVZhbHVlICRtYXhQb3MgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICRQbGFudW5nLnBlcnNvbmVuID0gQCgkUGVyc29uZW5MaXN0ZSkNCiAgICAgICAgICAgICAg +ICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgIyAtLS0tIFRhZ2VzZGF0ZW4g +LyBTY2hpY2h0cm90YXRpb24gYXVzIEV4Y2VsLVI0LVI5IC0tLS0NCiAgICAgICAgICAgICAgICAg +ICAgICAgICROUm90YXRpb25TbG90cyA9IDANCiAgICAgICAgICAgICAgICAgICAgICAgICROVGFn +ZXNkYXRlbk92ZXJyaWRlcyA9IDANCiAgICAgICAgICAgICAgICAgICAgICAgICRBZG1pbk11dGF0 +ZWQgPSAkbnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRPcHRUYWdlc2RhdGVuIC1h +bmQgJG51bGwgLW5lICRFeGNlbFRhZ2VzZGF0ZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAkdGRQcm9wcyA9IEAoJEV4Y2VsVGFnZXNkYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzKQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGRQcm9wcy5Db3VudCAtZ3QgMCkgew0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc29ydGVkRGF0ZXMgPSBAKCR0ZFByb3Bz +IHwgRm9yRWFjaC1PYmplY3QgeyAkXy5OYW1lIH0gfCBTb3J0LU9iamVjdCkNCiAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgJGVyc3Rlc0QgPSBbZGF0ZXRpbWVdOjpQYXJzZUV4YWN0KCRz +b3J0ZWREYXRlc1swXSwgJ3l5eXktTU0tZGQnLCAkbnVsbCkNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgJGRvdyA9IFtpbnRdJGVyc3Rlc0QuRGF5T2ZXZWVrDQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIGlmICgkZG93IC1lcSAwKSB7ICRvZmZzZXRNbyA9IDEgfSBlbHNl +IHsgJG9mZnNldE1vID0gKDggLSAkZG93KSAlIDcgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAkbW9JZHggPSAkb2Zmc2V0TW8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgJHdvY2hlbkFuemFobCA9IDMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNs +b3RDb3VudCA9ICR3b2NoZW5BbnphaGwgKiA3DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIGlmICgkbW9JZHggKyAkc2xvdENvdW50IC1sZSAkc29ydGVkRGF0ZXMuQ291bnQpIHsNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb3RhdGlvbnNUYWdlID0gQCgpDQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgLWx0ICRz +bG90Q291bnQ7ICRpKyspIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAkcm90YXRpb25zVGFnZSArPSAkRXhjZWxUYWdlc2RhdGVuLigkc29ydGVkRGF0ZXNbJG1vSWR4 +ICsgJGldKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgJEFkbWluTXV0YXRlZCA9IFJlYWQtSnNvbkZpbGUg +J2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51 +bGwgLW5lICRBZG1pbk11dGF0ZWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICBpZiAoLW5vdCAkQWRtaW5NdXRhdGVkLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RhZ2Vz +ZGF0ZW5Sb3RhdGlvbiddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICRBZG1pbk11dGF0ZWQgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0 +eSAtTmFtZSAndGFnZXNkYXRlblJvdGF0aW9uJyAtVmFsdWUgKE5ldy1PYmplY3QgUFNPYmplY3Qp +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb3QgPSAkQWRtaW5NdXRhdGVkLnRhZ2VzZGF0 +ZW5Sb3RhdGlvbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb3RT +dGFydElzbyA9ICRzb3J0ZWREYXRlc1skbW9JZHhdDQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgaWYgKCRyb3QuUFNPYmplY3QuUHJvcGVydGllc1snd29jaGVuQW56YWhs +J10pIHsgJHJvdC53b2NoZW5BbnphaGwgPSAkd29jaGVuQW56YWhsIH0gZWxzZSB7ICRyb3QgfCBB +ZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAnd29jaGVuQW56YWhsJyAt +VmFsdWUgJHdvY2hlbkFuemFobCB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgaWYgKCRyb3QuUFNPYmplY3QuUHJvcGVydGllc1snc3RhcnREYXR1bSddKSB7ICRyb3Qu +c3RhcnREYXR1bSA9ICRyb3RTdGFydElzbyB9IGVsc2UgeyAkcm90IHwgQWRkLU1lbWJlciAtTWVt +YmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ3N0YXJ0RGF0dW0nIC1WYWx1ZSAkcm90U3RhcnRJ +c28gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcm90LlBT +T2JqZWN0LlByb3BlcnRpZXNbJ3RhZ2UnXSkgeyAkcm90LnRhZ2UgPSBAKCRyb3RhdGlvbnNUYWdl +KSB9IGVsc2UgeyAkcm90IHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5h +bWUgJ3RhZ2UnIC1WYWx1ZSBAKCRyb3RhdGlvbnNUYWdlKSB9DQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgJE5Sb3RhdGlvblNsb3RzID0gJHNsb3RDb3VudA0KDQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBPdmVycmlkZS1QcnVlZnVuZw0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRQbGFudW5n +LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RhZ2VzZGF0ZW4nXSkgew0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5 +cGUgTm90ZVByb3BlcnR5IC1OYW1lICd0YWdlc2RhdGVuJyAtVmFsdWUgKE5ldy1PYmplY3QgUFNP +YmplY3QpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhbHRlUHJvcHMgPSBAKCRQbGFudW5n +LnRhZ2VzZGF0ZW4uUFNPYmplY3QuUHJvcGVydGllcyB8IFdoZXJlLU9iamVjdCB7DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRfLlZhbHVlLlBTT2JqZWN0LlBy +b3BlcnRpZXNbJ19zcmMnXSAtYW5kICRfLlZhbHVlLl9zcmMgLWVxICdleGNlbCcNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwciBpbiAkYWx0ZVByb3BzKSB7ICRQbGFudW5n +LnRhZ2VzZGF0ZW4uUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJHByLk5hbWUpIH0NCg0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb3RTdGFydEQgPSBbZGF0ZXRp +bWVdOjpQYXJzZUV4YWN0KCRyb3RTdGFydElzbywgJ3l5eXktTU0tZGQnLCAkbnVsbCkNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcHJvcCBpbiAkdGRQ +cm9wcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGF0 +dW1Jc28gPSAkcHJvcC5OYW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICR0ZCA9ICRwcm9wLlZhbHVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICRkYXR1bUQgPSBbZGF0ZXRpbWVdOjpQYXJzZUV4YWN0KCRkYXR1bUlzbywg +J3l5eXktTU0tZGQnLCAkbnVsbCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgJGRpZmZEYXlzID0gKCRkYXR1bUQgLSAkcm90U3RhcnREKS5EYXlzDQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpc3RPdmVycmlkZSA9ICRmYWxz +ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGRpZmZE +YXlzIC1sdCAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAkaXN0T3ZlcnJpZGUgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgJHNsb3RJZHggPSAkZGlmZkRheXMgJSAkc2xvdENvdW50DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2xvdFRkID0gJHJvdGF0 +aW9uc1RhZ2VbJHNsb3RJZHhdDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAkanNvblRkID0gJHRkIHwgQ29udmVydFRvLUpzb24gLUNvbXByZXNzIC1EZXB0 +aCA2DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkanNv +blNsb3QgPSAkc2xvdFRkIHwgQ29udmVydFRvLUpzb24gLUNvbXByZXNzIC1EZXB0aCA2DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGpzb25UZCAt +bmUgJGpzb25TbG90KSB7ICRpc3RPdmVycmlkZSA9ICR0cnVlIH0NCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICBpZiAoJGlzdE92ZXJyaWRlKSB7DQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGRNYXJrZWQgPSAkdGQgfCBDb252ZXJ0VG8t +SnNvbiAtRGVwdGggNiB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICR0ZE1hcmtlZCB8IEFkZC1NZW1iZXIgLU1lbWJlclR5 +cGUgTm90ZVByb3BlcnR5IC1OYW1lICdfc3JjJyAtVmFsdWUgJ2V4Y2VsJyAtRm9yY2UNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkUGxhbnVuZy50 +YWdlc2RhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJGRhdHVtSXNvXSkgew0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLnRhZ2VzZGF0 +ZW4uJGRhdHVtSXNvID0gJHRkTWFya2VkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLnRhZ2VzZGF0ZW4gfCBBZGQtTWVtYmVyIC1N +ZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAkZGF0dW1Jc28gLVZhbHVlICR0ZE1hcmtlZA0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5UYWdlc2RhdGVuT3Zl +cnJpZGVzKysNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg +IH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtUGxhbnVuZ01pdEludGVncml0YWV0 +ICRQbGFudW5nICAgIyBCdWxrLU9wOiBhbGxlIEhNQUNzIG5ldQ0KDQogICAgICAgICAgICAgICAg +ICAgICAgICByZXR1cm4gQHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXAgPSAnb2sn +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja3VwID0gJEJhY2t1cE5hbWUNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25lbk5ldSA9ICROUGVyc29uZW5OZXUNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25lbkFrdHVhbGlzaWVydCA9ICROUGVyc29uZW5B +a3R1YWxpc2llcnQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25lbkRlYWt0aXZp +ZXJ0ID0gJE5QZXJzb25lbkRlYWt0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWludHJh +ZWdlID0gJE5FaW50cmFlZ2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZmxpY2h0ID0g +JE5QZmxpY2h0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAga29tbWVudGFyZSA9ICROS29t +bWVudGFyZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuYmVrYW5udGVDb2RlcyA9ICRO +T3JwaGFuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb25TbG90cyA9ICROUm90 +YXRpb25TbG90cw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ2VzZGF0ZW5PdmVycmlk +ZXMgPSAkTlRhZ2VzZGF0ZW5PdmVycmlkZXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBh +ZG1pbk11dGF0ZWQgPSAkQWRtaW5NdXRhdGVkDQogICAgICAgICAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAg +ICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzICJVZWJlcm5haG1lLUZlaGxlcjogJF8iIDUwMDsg +Y29udGludWUNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZiAoJExvY2tS +ZXN1bHQudHlwIC1lcSAnZXJyb3InKSB7IFNlbmQtRXJyb3IgJFJlcyAkTG9ja1Jlc3VsdC5tc2cg +JExvY2tSZXN1bHQuY29kZTsgY29udGludWUgfQ0KDQogICAgICAgICAgICAgICAgIyBTb25kZXJ0 +ZXJtaW5lIHNlcGFyYXQgaW4gYWRtaW4uanNvbiBzY2hyZWliZW4gKGtlaW4gSE1BQykuDQogICAg +ICAgICAgICAgICAgIyBFcnN0IGFsbGUgdm9yaGFuZGVuZW4gJ3N0X2V4Y2VsXyctRWludHJhZWdl +IGxvZXNjaGVuLCBkYW5uIG5ldWUNCiAgICAgICAgICAgICAgICAjIGFubGVnZW4gLSBzb2Rhc3Mg +UmUtSW1wb3J0IGlkZW1wb3RlbnQgaXN0IHVuZCBuaWNodCBkb3BwZWx0Lg0KICAgICAgICAgICAg +ICAgICMgVXNlci1Wb3JnYWJlIChBdWRpdC1JdGVyLUQsIHN5bmMgbWl0IHNlcnZlci5weTozODI3 +KTogRXhjZWwtWmVpbGUNCiAgICAgICAgICAgICAgICAjICgyNS0yOSkgd2lyZCBOSUNIVCBtZWhy +IGFscyBLYXRlZ29yaWUgYXVzZ2V3ZXJ0ZXQgLSBhbGxlIFRlcm1pbmUNCiAgICAgICAgICAgICAg +ICAjIHNpbmQgJ2hpbndlaXMnIG1pdCBJY29uICdpbmZvJywgVXNlciBrbGFzc2lmaXppZXJ0IHNw +YWV0ZXIgbWFudWVsbA0KICAgICAgICAgICAgICAgICMgaW0gVGVybWluZS1UYWIuIFJlLUltcG9y +dCBibGVpYnQgZGFtaXQgc3RydWt0dXItc3RhYmlsLg0KICAgICAgICAgICAgICAgICROVGVybWlu +ZSA9IDANCiAgICAgICAgICAgICAgICBpZiAoJE9wdFNvbmRlcnRlcm1pbmUpIHsNCiAgICAgICAg +ICAgICAgICAgICAgJEFkbWluID0gaWYgKCRudWxsIC1uZSAkTG9ja1Jlc3VsdC5hZG1pbk11dGF0 +ZWQpIHsgJExvY2tSZXN1bHQuYWRtaW5NdXRhdGVkIH0gZWxzZSB7IFJlYWQtSnNvbkZpbGUgJ2Fk +bWluLmpzb24nIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkQWRtaW4pIHsN +CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRBZG1pbi5QU09iamVjdC5Qcm9wZXJ0 +aWVzWydzb25kZXJ0ZXJtaW5lJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQWRt +aW4gfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAnc29uZGVydGVy +bWluZScgLVZhbHVlIEAoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgIyBBbHRlIEV4Y2VsLUltcG9ydGUgZmlsdGVybg0KICAgICAgICAgICAgICAg +ICAgICAgICAgJFN0TGlzdGUgPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9ucy5BcnJheUxp +c3QNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRzIGluIEAoJEFkbWluLnNvbmRl +cnRlcm1pbmUpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNpZCA9IGlmICgkcy5Q +U09iamVjdC5Qcm9wZXJ0aWVzWydpZCddKSB7IFtzdHJpbmddJHMuaWQgfSBlbHNlIHsgJycgfQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRzaWQuU3RhcnRzV2l0aCgnc3Rf +ZXhjZWxfJykpIHsgW3ZvaWRdJFN0TGlzdGUuQWRkKCRzKSB9DQogICAgICAgICAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICRFeGNlbFRlcm1p +bmUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkRGF0dW1Qcm9wIGlu +ICRFeGNlbFRlcm1pbmUuUFNPYmplY3QuUHJvcGVydGllcykgew0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAkRGF0dW0gPSAkRGF0dW1Qcm9wLk5hbWUNCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgZm9yZWFjaCAoJHQgaW4gQCgkRGF0dW1Qcm9wLlZhbHVlKSkgew0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlzdFNraXAgPSAkZmFsc2UNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdC5QU09iamVjdC5Qcm9wZXJ0aWVz +Wydza2lwJ10pIHsgJGlzdFNraXAgPSBbYm9vbF0kdC5za2lwIH0NCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIGlmICgkaXN0U2tpcCkgeyBjb250aW51ZSB9DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAkdGl0ZWwgPSBpZiAoJHQuUFNPYmplY3QuUHJvcGVy +dGllc1sndGl0ZWwnXSkgeyAoW3N0cmluZ10kdC50aXRlbCkuVHJpbSgpIH0gZWxzZSB7ICcnIH0N +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0ZXh0ID0gaWYgKCR0LlBTT2Jq +ZWN0LlByb3BlcnRpZXNbJ3RleHQnXSkgeyAoW3N0cmluZ10kdC50ZXh0KS5UcmltKCkgfSBlbHNl +IHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHRp +dGVsIC1hbmQgLW5vdCAkdGV4dCkgeyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICBpZiAoLW5vdCAkdGl0ZWwpIHsNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAkZXJzdGUgPSAoJHRleHQgLXNwbGl0ICJgbiIsIDIpWzBdDQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRpdGVsID0gaWYgKCRlcnN0ZS5M +ZW5ndGggLWd0IDYwKSB7ICRlcnN0ZS5TdWJzdHJpbmcoMCwgNjApIH0gZWxzZSB7ICRlcnN0ZSB9 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAjIFJhbmRvbS1IZXgtSUQgYW5hbG9nIHp1IFB5dGhvbiBzZWNy +ZXRzLnRva2VuX2hleCg2KSAtIDEyIEhleC1aZWljaGVuLg0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgJFJhbmRIZXggPSBbZ3VpZF06Ok5ld0d1aWQoKS5Ub1N0cmluZygnTicp +LlN1YnN0cmluZygwLCAxMikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRO +ZXUgPSBbUFNDdXN0b21PYmplY3RdQHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICBpZCA9ICdzdF9leGNlbF8nICsgJFJhbmRIZXgNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICBkYXR1bSA9ICREYXR1bQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIHRpdGVsID0gJHRpdGVsDQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgdGV4dCA9ICR0ZXh0DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgaWNvbiA9ICdpbmZvJyAgICAgICAgIyBnZW5lcmlzY2hlcyBIaW53ZWlz +LUljb24sIEtFSU4gRW1vamkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICB0eXAgPSAnaGlud2VpcycNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAjIEtFSU4gJ2thdGVnb3JpZSctRmVsZCAtIEV4Y2VsLVplaWxlbi1NYXBwaW5nIHdpcmQgaWdu +b3JpZXJ0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0kU3RMaXN0ZS5BZGQoJE5ldSkNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICROVGVybWluZSsrDQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAkQWRtaW4uc29u +ZGVydGVybWluZSA9IEAoJFN0TGlzdGUpDQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1K +c29uRmlsZSAnYWRtaW4uanNvbicgJEFkbWluDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICB9IGVsc2VpZiAoJG51bGwgLW5lICRMb2NrUmVzdWx0LmFkbWluTXV0YXRlZCAt +YW5kICRMb2NrUmVzdWx0LnJvdGF0aW9uU2xvdHMgLWd0IDApIHsNCiAgICAgICAgICAgICAgICAg +ICAgIyBUYWdlc2RhdGVuIGhhdCBBZG1pbiBtdXRpZXJ0LCBhYmVyIGtlaW4gU29uZGVydGVybWlu +ZS1CbG9jayBoYXQgZ2VzY2hyaWViZW4uDQogICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25G +aWxlICdhZG1pbi5qc29uJyAkTG9ja1Jlc3VsdC5hZG1pbk11dGF0ZWQNCiAgICAgICAgICAgICAg +ICB9DQoNCiAgICAgICAgICAgICAgICAjIEF1dG8tUm9sbGVuLVN5bmMgbmFjaCBFeGNlbC1JbXBv +cnQgKG5ldWUgUGVyc29uZW4gbWl0IERHTC8xLkVCLzEuRUIgVi4gLT4gTGlzdGVuKQ0KICAgICAg +ICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRQbGFudW5nRnVlclN5bmMgPSBS +ZWFkLUpzb25GaWxlICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICRBZG1pbkZ1 +ZXJTeW5jID0gUmVhZC1Kc29uRmlsZSAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAg +aWYgKFN5bmMtUm9sbGVuQXVzUGVyc29uZW4gJFBsYW51bmdGdWVyU3luYyAkQWRtaW5GdWVyU3lu +Yykgew0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbkZpbGUgJ2FkbWluLmpzb24n +ICRBZG1pbkZ1ZXJTeW5jDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9 +IGNhdGNoIHsgV3JpdGUtV2FybmluZyAiUm9sbGVuLVN5bmMgbmFjaCBFeGNlbC1JbXBvcnQgZmVo +bGdlc2NobGFnZW46ICRfIiB9DQoNCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdl +eGNlbC5pbXBvcnRpZXJ0JyBAew0KICAgICAgICAgICAgICAgICAgICBiYWNrdXAgPSAkTG9ja1Jl +c3VsdC5iYWNrdXANCiAgICAgICAgICAgICAgICAgICAgcGVyc29uZW5OZXUgPSAkTG9ja1Jlc3Vs +dC5wZXJzb25lbk5ldQ0KICAgICAgICAgICAgICAgICAgICBwZXJzb25lbkFrdHVhbGlzaWVydCA9 +ICRMb2NrUmVzdWx0LnBlcnNvbmVuQWt0dWFsaXNpZXJ0DQogICAgICAgICAgICAgICAgICAgIHBl +cnNvbmVuRGVha3RpdmllcnQgPSAkTG9ja1Jlc3VsdC5wZXJzb25lbkRlYWt0aXZpZXJ0DQogICAg +ICAgICAgICAgICAgICAgIGVpbnRyYWVnZSA9ICRMb2NrUmVzdWx0LmVpbnRyYWVnZQ0KICAgICAg +ICAgICAgICAgICAgICBwZmxpY2h0ID0gJExvY2tSZXN1bHQucGZsaWNodA0KICAgICAgICAgICAg +ICAgICAgICBrb21tZW50YXJlID0gJExvY2tSZXN1bHQua29tbWVudGFyZQ0KICAgICAgICAgICAg +ICAgICAgICB1bmJla2FubnRlQ29kZXMgPSAkTG9ja1Jlc3VsdC51bmJla2FubnRlQ29kZXMNCiAg +ICAgICAgICAgICAgICAgICAgc29uZGVydGVybWluZSA9ICROVGVybWluZQ0KICAgICAgICAgICAg +ICAgICAgICByb3RhdGlvblNsb3RzID0gJExvY2tSZXN1bHQucm90YXRpb25TbG90cw0KICAgICAg +ICAgICAgICAgICAgICB0YWdlc2RhdGVuT3ZlcnJpZGVzID0gJExvY2tSZXN1bHQudGFnZXNkYXRl +bk92ZXJyaWRlcw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIFNlbmQtSnNv +biAkUmVzIEB7DQogICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9ICdvaycNCiAgICAgICAgICAg +ICAgICAgICAgYmFja3VwID0gJExvY2tSZXN1bHQuYmFja3VwDQogICAgICAgICAgICAgICAgICAg +IGFuemFobCA9IEB7DQogICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25lbk5ldSA9ICRMb2Nr +UmVzdWx0LnBlcnNvbmVuTmV1DQogICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25lbkFrdHVh +bGlzaWVydCA9ICRMb2NrUmVzdWx0LnBlcnNvbmVuQWt0dWFsaXNpZXJ0DQogICAgICAgICAgICAg +ICAgICAgICAgICBwZXJzb25lbkRlYWt0aXZpZXJ0ID0gJExvY2tSZXN1bHQucGVyc29uZW5EZWFr +dGl2aWVydA0KICAgICAgICAgICAgICAgICAgICAgICAgZWludHJhZWdlID0gJExvY2tSZXN1bHQu +ZWludHJhZWdlDQogICAgICAgICAgICAgICAgICAgICAgICBwZmxpY2h0ID0gJExvY2tSZXN1bHQu +cGZsaWNodA0KICAgICAgICAgICAgICAgICAgICAgICAga29tbWVudGFyZSA9ICRMb2NrUmVzdWx0 +LmtvbW1lbnRhcmUNCiAgICAgICAgICAgICAgICAgICAgICAgIHVuYmVrYW5udGVDb2RlcyA9ICRM +b2NrUmVzdWx0LnVuYmVrYW5udGVDb2Rlcw0KICAgICAgICAgICAgICAgICAgICAgICAgc29uZGVy +dGVybWluZSA9ICROVGVybWluZQ0KICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb25TbG90 +cyA9ICRMb2NrUmVzdWx0LnJvdGF0aW9uU2xvdHMNCiAgICAgICAgICAgICAgICAgICAgICAgIHRh +Z2VzZGF0ZW5PdmVycmlkZXMgPSAkTG9ja1Jlc3VsdC50YWdlc2RhdGVuT3ZlcnJpZGVzDQogICAg +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgRGVi +dWctTG9nICdBUEknICJQT1NUIC9hcGkvaW1wb3J0L2V4Y2VsL3VlYmVybmVobWVuIC0+ICQoJExv +Y2tSZXN1bHQuZWludHJhZWdlKSBFaW50cmFlZ2UsICQoJExvY2tSZXN1bHQua29tbWVudGFyZSkg +S29tbWVudGFyZSwgJE5UZXJtaW5lIFRlcm1pbmUsIEJhY2t1cDogJCgkTG9ja1Jlc3VsdC5iYWNr +dXApIg0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAg +ICAgICMgPT09PT09PT09PT09PT09PT09PT09IExPR0JVQ0ggPT09PT09PT09PT09PT09PT09PT09 +DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2xvZ2J1Y2gnIC1hbmQgJE1ldGhvZCAt +ZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICAjIEFkbWluLUd1YXJkOiBMb2didWNoIGVudGhh +ZWx0IHBlcnNvbmVuYmV6b2dlbmUgRGF0ZW4NCiAgICAgICAgICAgICAgICAjIChTY2hpY2h0YWVu +ZGVydW5nZW4gcHJvIFVzZXIgbWl0IGFsdGVtL25ldWVtIFdlcnQpLiBJbQ0KICAgICAgICAgICAg +ICAgICMgRnJvbnRlbmQgbnVyIGZ1ZXIgU3VwZXJVc2VyIG9kZXIgQWRtaW4gc2ljaHRiYXINCiAg +ICAgICAgICAgICAgICAjIChkYXJmTG9nYnVjaFRhYigpIGluIGpzL2NvcmUvcGVybWlzc2lvbnMu +anM6MjUzKS4gTWlycm9yDQogICAgICAgICAgICAgICAgIyB6dSBzZXJ2ZXIucHk6MjEzNC0yMTM5 +Lg0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVycm9y +ICRSZXMgJ0tlaW5lIEJlcmVjaHRpZ3VuZycgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAg +ICAgJExvZ1BhdGggPSBKb2luLVBhdGggJERhdGFEaXIgJ2xvZ2J1Y2guanNvbicNCiAgICAgICAg +ICAgICAgICAkRWludHJhZWdlID0gQCgpDQogICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAk +TG9nUGF0aCkgew0KICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAg +ICAgICAgJExvZ0NvbnRlbnQgPSBbU3lzdGVtLklPLkZpbGVdOjpSZWFkQWxsVGV4dCgkTG9nUGF0 +aCwgW1N5c3RlbS5UZXh0LkVuY29kaW5nXTo6VVRGOCkuVHJpbSgpDQogICAgICAgICAgICAgICAg +ICAgICAgICBpZiAoJExvZ0NvbnRlbnQuTGVuZ3RoIC1ndCAxKSB7DQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgJFBhcnNlZCA9ICRMb2dDb250ZW50IHwgQ29udmVydEZyb20tSnNvbg0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJFBhcnNlZCkgeyAkRWludHJh +ZWdlID0gQCgkUGFyc2VkKSB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtU3RhcnR1 +cExvZyAiTG9nYnVjaC1SZWFkLUZlaGxlcjogJF8gLS0gbGllZmVyZSBsZWVyZSBMaXN0ZSINCiAg +ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAj +IFBTIDUuMSB1bndyYXBwZWQgQCgpIHVuZCBTaW5nbGUtRWxlbWVudC1BcnJheXMgaW4gQ29udmVy +dFRvLUpzb24gLS0NCiAgICAgICAgICAgICAgICAjIGRhaGVyIFNvbmRlcnBmYWRlLiBGcm9udGVu +ZCBlcndhcnRldCBpbW1lciBlaW4gSlNPTi1BcnJheS4NCiAgICAgICAgICAgICAgICBpZiAoJEVp +bnRyYWVnZS5Db3VudCAtZXEgMCkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25SYXcg +JFJlcyAnW10nDQogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRFaW50cmFlZ2UuQ291bnQgLWVx +IDEpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uUmF3ICRSZXMgKCdbJyArIChDb252 +ZXJ0VG8tSnNvbiAtSW5wdXRPYmplY3QgJEVpbnRyYWVnZVswXSAtRGVwdGggMjUgLUNvbXByZXNz +KSArICddJykNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBT +ZW5kLUpzb25SYXcgJFJlcyAoQ29udmVydFRvLUpzb24gLUlucHV0T2JqZWN0ICRFaW50cmFlZ2Ug +LURlcHRoIDI1IC1Db21wcmVzcykNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg +Y29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09 +PT09PT0gTUVESUVOOiBMaXN0ZSA9PT09PT09PT09PT09PT09PT09PT0NCiAgICAgICAgICAgIGlm +ICgkUGF0aCAtZXEgJy9hcGkvbWVkaWVuJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAg +ICAgICAgICAgICAgIyBCZWltIGVyc3RlbiBBdWZydWYgU3lzdGVtLU1lZGllbiBhdXMgL2ltYWdl +cy8gZWlubWFsaWcgaW1wb3J0aWVyZW4uDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAg +ICAgICAgICAgICAgSW52b2tlLVdpdGhGaWxlTG9jayAnbWVkaWVuLmpzb24nIHsgSW52b2tlLU1l +ZGllblN5c3RlbUltcG9ydEZhbGxzTm9ldGlnIHwgT3V0LU51bGwgfSB8IE91dC1OdWxsDQogICAg +ICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIERlYnVnLUxvZyAnQVBJ +JyAic3lzdGVtLWltcG9ydCBza2lwcGVkOiAkXyINCiAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgJE1ldGEgPSBSZWFkLU1lZGllbk1ldGENCiAgICAgICAgICAgICAgICAkTWVkaWVu +TGlzdGUgPSBpZiAoJE1ldGEubWVkaWVuKSB7IEAoJE1ldGEubWVkaWVuKSB9IGVsc2UgeyBAKCkg +fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7IG1lZGllbiA9ICRNZWRpZW5MaXN0 +ZTsga2F0ZWdvcmllbiA9IChHZXQtTWVkaWVuS2F0ZWdvcmllS2V5cykgfQ0KICAgICAgICAgICAg +ICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT09PT09PT09 +PT09PT09PT09IE1FRElFTjogRGF0ZWkgYXVzbGllZmVybiA9PT09PT09PT09PT09PT09PT09PT0N +CiAgICAgICAgICAgIGlmICgkUGF0aC5TdGFydHNXaXRoKCcvYXBpL21lZGllbi9kYXRlaS8nKSAt +YW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgJE1pZCA9ICRQYXRoLlN1 +YnN0cmluZygkUGF0aC5MYXN0SW5kZXhPZignLycpICsgMSkNCiAgICAgICAgICAgICAgICAkTWV0 +YSA9IFJlYWQtTWVkaWVuTWV0YQ0KICAgICAgICAgICAgICAgICRFaW50cmFnID0gJG51bGwNCiAg +ICAgICAgICAgICAgICBpZiAoJE1ldGEubWVkaWVuKSB7DQogICAgICAgICAgICAgICAgICAgIGZv +cmVhY2ggKCRtIGluIEAoJE1ldGEubWVkaWVuKSkgeyBpZiAoJG0uaWQgLWVxICRNaWQpIHsgJEVp +bnRyYWcgPSAkbTsgYnJlYWsgfSB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +IGlmICgkbnVsbCAtZXEgJEVpbnRyYWcpIHsgU2VuZC1FcnJvciAkUmVzICdOaWNodCBnZWZ1bmRl +bicgNDA0OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJERhdGVpID0gR2V0LU1lZGllblBm +YWQgJEVpbnRyYWcNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1QYXRoICREYXRlaSkp +IHsgU2VuZC1FcnJvciAkUmVzICdEYXRlaSBuaWNodCB2b3JoYW5kZW4nIDQwNDsgY29udGludWUg +fQ0KICAgICAgICAgICAgICAgIFNlbmQtRmlsZSAkUmVzICREYXRlaQ0KICAgICAgICAgICAgICAg +IGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09 +PT09PT09IE1FRElFTjogVXBsb2FkIChCYXNlNjQtSlNPTikgPT09PT09PT09PT09PT09PT09PT09 +DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL21lZGllbicgLWFuZCAkTWV0aG9kIC1l +cSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIp +KSB7IFNlbmQtRXJyb3IgJFJlcyAnTnVyIFN1cGVyVXNlciBkYXJmIE1lZGllbiBob2NobGFkZW4n +IDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRCb2R5ID0gUmVhZC1Cb2R5ICRSZXEN +CiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRCb2R5KSB7IFNlbmQtRXJyb3IgJFJlcyAn +QW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgdHJ5IHsg +JEEgPSAkQm9keSB8IENvbnZlcnRGcm9tLUpzb24gfSBjYXRjaCB7IFNlbmQtRXJyb3IgJFJlcyAn +VW5ndWVsdGlnZXMgSlNPTicgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJEthdGVn +b3JpZSA9IChbc3RyaW5nXSRBLmthdGVnb3JpZSkuVG9Mb3dlcigpLlRyaW0oKQ0KICAgICAgICAg +ICAgICAgIGlmICgtbm90ICgoR2V0LU1lZGllbkthdGVnb3JpZUtleXMpIC1jb250YWlucyAkS2F0 +ZWdvcmllKSkgeyBTZW5kLUVycm9yICRSZXMgJ1VuZ3VlbHRpZ2UgS2F0ZWdvcmllJyA0MDA7IGNv +bnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkTWltZSA9IChbc3RyaW5nXSRBLm1pbWVUeXBlKS5U +b0xvd2VyKCkuVHJpbSgpDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJHNjcmlwdDpNZWRpZW5F +cmxhdWJ0ZU1pbWVzLkNvbnRhaW5zS2V5KCRNaW1lKSkgeyBTZW5kLUVycm9yICRSZXMgJ0RhdGVp +dHlwIG5pY2h0IGVybGF1YnQnIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRCZXpl +aWNobnVuZyA9IChbc3RyaW5nXSRBLmJlemVpY2hudW5nKS5UcmltKCkNCiAgICAgICAgICAgICAg +ICBpZiAoW3N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFjZSgkQmV6ZWljaG51bmcpKSB7IFNlbmQt +RXJyb3IgJFJlcyAnQmV6ZWljaG51bmcgZmVobHQnIDQwMDsgY29udGludWUgfQ0KICAgICAgICAg +ICAgICAgICREYXRhQjY0ID0gaWYgKCRBLmRhdGEpIHsgW3N0cmluZ10kQS5kYXRhIH0gZWxzZSB7 +ICcnIH0NCiAgICAgICAgICAgICAgICBpZiAoJERhdGFCNjQuU3RhcnRzV2l0aCgnZGF0YTonKSkg +ew0KICAgICAgICAgICAgICAgICAgICAkaWR4ID0gJERhdGFCNjQuSW5kZXhPZignLCcpDQogICAg +ICAgICAgICAgICAgICAgIGlmICgkaWR4IC1nZSAwKSB7ICREYXRhQjY0ID0gJERhdGFCNjQuU3Vi +c3RyaW5nKCRpZHggKyAxKSB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHRy +eSB7ICRSb2hCeXRlcyA9IFtTeXN0ZW0uQ29udmVydF06OkZyb21CYXNlNjRTdHJpbmcoJERhdGFC +NjQpIH0gY2F0Y2ggeyBTZW5kLUVycm9yICRSZXMgJ0Jhc2U2NCB1bmd1ZWx0aWcnIDQwMDsgY29u +dGludWUgfQ0KICAgICAgICAgICAgICAgIGlmICgkUm9oQnl0ZXMuTGVuZ3RoIC1ndCAkc2NyaXB0 +Ok1lZGllbk1heEJ5dGVzKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAi +RGF0ZWkgenUgZ3Jvc3MgKG1heCAkKFtNYXRoXTo6Rmxvb3IoJHNjcmlwdDpNZWRpZW5NYXhCeXRl +cyAvIDFNQikpIE1CKSIgNDEzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICAkRXh0ID0gJHNjcmlwdDpNZWRpZW5FcmxhdWJ0ZU1pbWVzWyRNaW1lXQ0KICAgICAg +ICAgICAgICAgICRNaWQgPSBOZXctTWVkaWVuSWQNCiAgICAgICAgICAgICAgICAjIFJvdXRpbmc6 +IFdlbm4gSW1hZ2VzLzxrYXQ+LyBhbHMgRGlzay1PcmRuZXIgZXhpc3RpZXJ0IC0+IGRvcnQgaGlu +c2NocmVpYmVuDQogICAgICAgICAgICAgICAgIyBtaXQgc2FuaXRpc2llcnRlbSBPcmlnaW5hbC1E +YXRlaW5hbWVuICsgYHBmYWRgIGltIEVpbnRyYWcgc2V0emVuLg0KICAgICAgICAgICAgICAgICMg +U29uc3QgRmFsbGJhY2sgYXVmIGRhdGEvbWVkaWVuLzxrYXQ+LzxpZD4uPGV4dD4uDQogICAgICAg +ICAgICAgICAgJEltYWdlc0RpciA9IEdldC1NZWRpZW5JbWFnZXNPcmRuZXIgJEthdGVnb3JpZQ0K +ICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJEltYWdlc0Rpcikgew0KICAgICAgICAgICAg +ICAgICAgICAkVXBsb2FkTmFtZSA9IGlmICgkQS5kYXRlaW5hbWUpIHsgW3N0cmluZ10kQS5kYXRl +aW5hbWUgfSBlbHNlIHsgJEJlemVpY2hudW5nIH0NCiAgICAgICAgICAgICAgICAgICAgJEJhc2Ug +PSBHZXQtTWVkaWVuQmFzZW5hbWVBdXNVcGxvYWQgJFVwbG9hZE5hbWUNCiAgICAgICAgICAgICAg +ICAgICAgJFppZWwgPSBHZXQtTWVkaWVuRnJlaWVyRGF0ZWluYW1lICRJbWFnZXNEaXIgJEJhc2Ug +JEV4dA0KICAgICAgICAgICAgICAgICAgICBbU3lzdGVtLklPLkZpbGVdOjpXcml0ZUFsbEJ5dGVz +KCRaaWVsLCAkUm9oQnl0ZXMpDQogICAgICAgICAgICAgICAgICAgICRaaWVsTmFtZSA9IFtTeXN0 +ZW0uSU8uUGF0aF06OkdldEZpbGVOYW1lKCRaaWVsKQ0KICAgICAgICAgICAgICAgICAgICAkRWlu +dHJhZyA9IFtvcmRlcmVkXUB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZCA9ICRNaWQNCiAg +ICAgICAgICAgICAgICAgICAgICAgIGthdGVnb3JpZSA9ICRLYXRlZ29yaWUNCiAgICAgICAgICAg +ICAgICAgICAgICAgIGJlemVpY2hudW5nID0gJEJlemVpY2hudW5nDQogICAgICAgICAgICAgICAg +ICAgICAgICBkYXRlaW5hbWUgPSAkWmllbE5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAgIG1p +bWVUeXBlID0gJE1pbWUNCiAgICAgICAgICAgICAgICAgICAgICAgIGdyb2Vzc2UgPSAkUm9oQnl0 +ZXMuTGVuZ3RoDQogICAgICAgICAgICAgICAgICAgICAgICBwZmFkID0gJy9pbWFnZXMvJyArICRL +YXRlZ29yaWUgKyAnLycgKyAkWmllbE5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAgIGhvY2hn +ZWxhZGVuQW0gPSAoR2V0LURhdGUgLUZvcm1hdCAneXl5eS1NTS1kZCBISDptbTpzcycpDQogICAg +ICAgICAgICAgICAgICAgICAgICBob2NoZ2VsYWRlblZvbiA9IChHZXQtQWt0dWVsbGVyQmVudXR6 +ZXIpDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAg +ICAgICAgICAgICAgICAgICAkS2F0RGlyID0gSm9pbi1QYXRoIChHZXQtTWVkaWVuRGlyKSAkS2F0 +ZWdvcmllDQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LVBhdGggJEthdERpcikp +IHsgTmV3LUl0ZW0gLUl0ZW1UeXBlIERpcmVjdG9yeSAtUGF0aCAkS2F0RGlyIC1Gb3JjZSB8IE91 +dC1OdWxsIH0NCiAgICAgICAgICAgICAgICAgICAgJFppZWwgPSBKb2luLVBhdGggJEthdERpciAo +JE1pZCArICRFeHQpDQogICAgICAgICAgICAgICAgICAgIFtTeXN0ZW0uSU8uRmlsZV06OldyaXRl +QWxsQnl0ZXMoJFppZWwsICRSb2hCeXRlcykNCiAgICAgICAgICAgICAgICAgICAgJEVpbnRyYWcg +PSBbb3JkZXJlZF1Aew0KICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSAkTWlkDQogICAgICAg +ICAgICAgICAgICAgICAgICBrYXRlZ29yaWUgPSAkS2F0ZWdvcmllDQogICAgICAgICAgICAgICAg +ICAgICAgICBiZXplaWNobnVuZyA9ICRCZXplaWNobnVuZw0KICAgICAgICAgICAgICAgICAgICAg +ICAgZGF0ZWluYW1lID0gaWYgKCRBLmRhdGVpbmFtZSkgeyAoW3N0cmluZ10kQS5kYXRlaW5hbWUp +LlRyaW0oKS5TdWJzdHJpbmcoMCwgW01hdGhdOjpNaW4oKFtzdHJpbmddJEEuZGF0ZWluYW1lKS5M +ZW5ndGgsIDIwMCkpIH0gZWxzZSB7ICgkTWlkICsgJEV4dCkgfQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgbWltZVR5cGUgPSAkTWltZQ0KICAgICAgICAgICAgICAgICAgICAgICAgZ3JvZXNzZSA9 +ICRSb2hCeXRlcy5MZW5ndGgNCiAgICAgICAgICAgICAgICAgICAgICAgIGhvY2hnZWxhZGVuQW0g +PSAoR2V0LURhdGUgLUZvcm1hdCAneXl5eS1NTS1kZCBISDptbTpzcycpDQogICAgICAgICAgICAg +ICAgICAgICAgICBob2NoZ2VsYWRlblZvbiA9IChHZXQtQWt0dWVsbGVyQmVudXR6ZXIpDQogICAg +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgdHJ5 IHsNCiAgICAgICAgICAgICAgICAgICAgSW52b2tlLVdpdGhGaWxlTG9jayAnbWVkaWVuLmpzb24n IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRNZXRhID0gUmVhZC1NZWRpZW5NZXRhDQogICAg -ICAgICAgICAgICAgICAgICAgICAkTmV1ZUxpc3RlID0gQCgpDQogICAgICAgICAgICAgICAgICAg -ICAgICBmb3JlYWNoICgkbSBpbiBAKCRNZXRhLm1lZGllbikpIHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICBpZiAoJG0uaWQgLWVxICRNaWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgJHNjcmlwdDpGb3VuZCA9ICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICRBbHRLYXQgPSAkbS5rYXRlZ29yaWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgaWYgKCRudWxsIC1uZSAkTmV1ZUJleiAtYW5kICROZXVlQmV6LlRyaW0oKSAtbmUgJG0u -YmV6ZWljaG51bmcpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRiZXog -PSAkTmV1ZUJlei5UcmltKCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm -ICgkYmV6Lkxlbmd0aCAtZ3QgMjAwKSB7ICRiZXogPSAkYmV6LlN1YnN0cmluZygwLCAyMDApIH0N -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtLmJlemVpY2hudW5nID0gJGJl -eg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjcmlwdDpBZW5kZXJ1bmdl -blsnYmV6ZWljaG51bmcnXSA9ICRiZXoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICROZXVlS2F0 -IC1hbmQgJE5ldWVLYXQgLW5lICRBbHRLYXQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICRJc3RTeXN0ZW0gPSAkbS5QU09iamVjdC5Qcm9wZXJ0aWVzWydwZmFkJ10gLWFu -ZCAtbm90IFtzdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoW3N0cmluZ10kbS5wZmFkKQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRJc3RTeXN0ZW0pIHsNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFN5c3RlbS1NZWRpdW06IG51ciBN -ZXRhLUthdGVnb3JpZSB3ZWNoc2VsbiwgRGF0ZWkgYmxlaWJ0IGltIC9pbWFnZXMvLU9yZG5lcg0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtLmthdGVnb3JpZSA9ICRO -ZXVlS2F0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRBbHQgPSBHZXQtTWVkaWVuUGZh -ZCAkbQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtLmthdGVnb3Jp -ZSA9ICROZXVlS2F0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5l -dSA9IEdldC1NZWRpZW5QZmFkICRtDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgJE5ldURpciA9IFNwbGl0LVBhdGggLVBhcmVudCAkTmV1DQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGgg -JE5ldURpcikpIHsgTmV3LUl0ZW0gLUl0ZW1UeXBlIERpcmVjdG9yeSAtUGF0aCAkTmV1RGlyIC1G -b3JjZSB8IE91dC1OdWxsIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkQWx0KSB7IE1vdmUtSXRlbSAtTGl0ZXJhbFBh -dGggJEFsdCAtRGVzdGluYXRpb24gJE5ldSAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNj -cmlwdDpBZW5kZXJ1bmdlblsna2F0ZWdvcmllJ10gPSAiJEFsdEthdCAtPiAkTmV1ZUthdCINCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAjIERhdGVpLVJlcGxhY2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -aWYgKCRudWxsIC1uZSAkTmV1ZUJ5dGVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAkTmV1ZXJFeHQgPSAkc2NyaXB0Ok1lZGllbkVybGF1YnRlTWltZXNbJE5ldWVNaW1l -XQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEthdCA9IGlmICgkbS5rYXRl -Z29yaWUpIHsgW3N0cmluZ10kbS5rYXRlZ29yaWUgfSBlbHNlIHsgJ3NvbnN0aWdlcycgfQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEltYWdlc0RpcjIgPSBHZXQtTWVkaWVu -SW1hZ2VzT3JkbmVyICRLYXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRI -YXRQZmFkID0gJG0uUFNPYmplY3QuUHJvcGVydGllc1sncGZhZCddIC1hbmQgLW5vdCBbc3RyaW5n -XTo6SXNOdWxsT3JXaGl0ZVNwYWNlKFtzdHJpbmddJG0ucGZhZCkNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICRaaWVsSW5JbWFnZXMgPSAkSGF0UGZhZCAtb3IgKCRudWxsIC1u -ZSAkSW1hZ2VzRGlyMikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk -WmllbEluSW1hZ2VzIC1hbmQgJG51bGwgLW5lICRJbWFnZXNEaXIyKSB7DQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBbHRlIERhdGVpIGJlc2VpdGlnZW4NCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJEhhdFBmYWQpIHsNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEFsdEQgPSBKb2luLVBhdGgg -JHNjcmlwdDpSb290ICgoW3N0cmluZ10kbS5wZmFkKS5UcmltU3RhcnQoJy8nKSkNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQWx0RCA9IEdldC1NZWRpZW5QZmFkICRtDQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRBbHREIC1QYXRo -VHlwZSBMZWFmKSB7IFJlbW92ZS1JdGVtIC1MaXRlcmFsUGF0aCAkQWx0RCAtRm9yY2UgLUVycm9y -QWN0aW9uIFNpbGVudGx5Q29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIH0gY2F0Y2gge30NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAjIE5ldWVuIFppZWxuYW1lbiB3w6RobGVuDQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgaWYgKCRIYXRQZmFkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICRTdGVtID0gW1N5c3RlbS5JTy5QYXRoXTo6R2V0RmlsZU5hbWVX -aXRob3V0RXh0ZW5zaW9uKFtzdHJpbmddJG0ucGZhZCkNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgJFppZWxEID0gSm9pbi1QYXRoICRJbWFnZXNEaXIyICgkU3Rl -bSArICROZXVlckV4dCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 -IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVXBs -b2FkTmFtZTIgPSBpZiAoJE5ldWVyRGF0ZWluYW1lKSB7ICROZXVlckRhdGVpbmFtZSB9IGVsc2Ug -eyBbc3RyaW5nXSRtLmJlemVpY2hudW5nIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgJEJhc2UyID0gR2V0LU1lZGllbkJhc2VuYW1lQXVzVXBsb2FkICRVcGxv -YWROYW1lMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkWmll -bEQgPSBHZXQtTWVkaWVuRnJlaWVyRGF0ZWluYW1lICRJbWFnZXNEaXIyICRCYXNlMiAkTmV1ZXJF -eHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1N5c3RlbS5JTy5GaWxlXTo6V3JpdGVBbGxC -eXRlcygkWmllbEQsICROZXVlQnl0ZXMpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgJFppZWxOYW1lMiA9IFtTeXN0ZW0uSU8uUGF0aF06OkdldEZpbGVOYW1lKCRaaWVs -RCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG0uUFNPYmpl -Y3QuUHJvcGVydGllc1sncGZhZCddKSB7ICRtLnBmYWQgPSAnL2ltYWdlcy8nICsgJEthdCArICcv -JyArICRaaWVsTmFtZTIgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -IGVsc2UgeyAkbSB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICdw -ZmFkJyAtVmFsdWUgKCcvaW1hZ2VzLycgKyAkS2F0ICsgJy8nICsgJFppZWxOYW1lMikgfQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtLmRhdGVpbmFtZSA9IGlmICgk -TmV1ZXJEYXRlaW5hbWUpIHsgJE5ldWVyRGF0ZWluYW1lLlN1YnN0cmluZygwLCBbTWF0aF06Ok1p -bigkTmV1ZXJEYXRlaW5hbWUuTGVuZ3RoLCAyMDApKSB9IGVsc2UgeyAkWmllbE5hbWUyIH0NCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbS5taW1lVHlwZSA9ICROZXVl -TWltZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtLmdyb2Vzc2Ug -PSAkTmV1ZUJ5dGVzLkxlbmd0aA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIGlmICgkbS5QU09iamVjdC5Qcm9wZXJ0aWVzWydzeXN0ZW0nXSkgeyAkbS5QU09iamVjdC5Q -cm9wZXJ0aWVzLlJlbW92ZSgnc3lzdGVtJykgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICRtLmhvY2hnZWxhZGVuQW0gPSAoR2V0LURhdGUgLUZvcm1hdCAneXl5eS1N -TS1kZCBISDptbTpzcycpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -JG0uaG9jaGdlbGFkZW5Wb24gPSAoR2V0LUFrdHVlbGxlckJlbnV0emVyKQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6QWVuZGVydW5nZW5bJ2RhdGVpJ10g -PSAiJE5ldWVNaW1lICQoJE5ldWVCeXRlcy5MZW5ndGgpIEIiDQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICMgZGF0YS9tZWRpZW4tUGZhZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIGlmICgtbm90ICRIYXRQZmFkKSB7DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICRBbHREID0gR2V0LU1lZGllblBmYWQgJG0NCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQ -YXRoICRBbHREIC1QYXRoVHlwZSBMZWFmKSB7IFJlbW92ZS1JdGVtIC1MaXRlcmFsUGF0aCAkQWx0 -RCAtRm9yY2UgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHt9DQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIGlmICgkbS5QU09iamVjdC5Qcm9wZXJ0aWVzWydwZmFkJ10pIHsgJG0uUFNPYmpl -Y3QuUHJvcGVydGllcy5SZW1vdmUoJ3BmYWQnKSB9DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgaWYgKCRtLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3N5c3RlbSddKSB7ICRt -LlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCdzeXN0ZW0nKSB9DQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgJG0ubWltZVR5cGUgPSAkTmV1ZU1pbWUNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJE5ldWVyRGF0ZWluYW1lKSB7DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtLmRhdGVpbmFtZSA9 -ICROZXVlckRhdGVpbmFtZS5TdWJzdHJpbmcoMCwgW01hdGhdOjpNaW4oJE5ldWVyRGF0ZWluYW1l -Lkxlbmd0aCwgMjAwKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG0uZ3JvZXNzZSA9ICRO -ZXVlQnl0ZXMuTGVuZ3RoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -JG0uaG9jaGdlbGFkZW5BbSA9IChHZXQtRGF0ZSAtRm9ybWF0ICd5eXl5LU1NLWRkIEhIOm1tOnNz -JykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbS5ob2NoZ2VsYWRl -blZvbiA9IChHZXQtQWt0dWVsbGVyQmVudXR6ZXIpDQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgJFppZWxEID0gR2V0LU1lZGllblBmYWQgJG0NCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAkWmllbERpciA9IFNwbGl0LVBhdGggLVBhcmVudCAk -WmllbEQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAo -VGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkWmllbERpcikpIHsgTmV3LUl0ZW0gLUl0ZW1UeXBlIERp -cmVjdG9yeSAtUGF0aCAkWmllbERpciAtRm9yY2UgfCBPdXQtTnVsbCB9DQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgW1N5c3RlbS5JTy5GaWxlXTo6V3JpdGVBbGxCeXRl -cygkWmllbEQsICROZXVlQnl0ZXMpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgJHNjcmlwdDpBZW5kZXJ1bmdlblsnZGF0ZWknXSA9ICIkTmV1ZU1pbWUgJCgkTmV1ZUJ5 -dGVzLkxlbmd0aCkgQiINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAkc2NyaXB0OlVwZGF0ZWRFaW50cmFnID0gJG0NCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5ldWVMaXN0ZSArPSAkbQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRz -Y3JpcHQ6Rm91bmQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1NZWRpZW5N -ZXRhIChbUFNDdXN0b21PYmplY3RdQHsgbWVkaWVuID0gJE5ldWVMaXN0ZSB9KQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9IHwgT3V0LU51bGwNCiAgICAg -ICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVz -ICIkXyIgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBp -ZiAoLW5vdCAkc2NyaXB0OkZvdW5kKSB7IFNlbmQtRXJyb3IgJFJlcyAnTmljaHQgZ2VmdW5kZW4n -IDQwNDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ21lZGll -bi5nZWFlbmRlcnQnIEB7IGlkID0gJE1pZDsgYmV6ZWljaG51bmcgPSAkc2NyaXB0OlVwZGF0ZWRF -aW50cmFnLmJlemVpY2hudW5nOyBrYXRlZ29yaWUgPSAkc2NyaXB0OlVwZGF0ZWRFaW50cmFnLmth -dGVnb3JpZSB9DQogICAgICAgICAgICAgICAgJFVzZXJuYW1lID0gJGVudjpVU0VSTkFNRQ0KICAg -ICAgICAgICAgICAgICRSb2xsZSA9IEdldC1Vc2VyUm9sbGUNCiAgICAgICAgICAgICAgICBBZGQt -Q2hhbmdlTG9nRW50cnkgJ21lZGllbicgJG51bGwgJG51bGwgJG51bGwgJFVzZXJuYW1lICRSb2xs -ZSBAeyBha3Rpb24gPSAnZ2VhZW5kZXJ0JzsgaWQgPSAkTWlkOyBiZXplaWNobnVuZyA9ICRzY3Jp -cHQ6VXBkYXRlZEVpbnRyYWcuYmV6ZWljaG51bmc7IGthdGVnb3JpZSA9ICRzY3JpcHQ6VXBkYXRl -ZEVpbnRyYWcua2F0ZWdvcmllIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAeyBz -dGF0dXMgPSAnZ2VzcGVpY2hlcnQnOyBtZWRpdW0gPSAkc2NyaXB0OlVwZGF0ZWRFaW50cmFnIH0N -CiAgICAgICAgICAgICAgICAkc2NyaXB0OkZvdW5kID0gJGZhbHNlOyAkc2NyaXB0OlVwZGF0ZWRF -aW50cmFnID0gJG51bGwNCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0K -DQogICAgICAgICAgICAjID09PT09PT09PT09PT09PT09PT09PSBNRURJRU46IExvZXNjaGVuID09 -PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoLlN0YXJ0c1dpdGgoJy9h -cGkvbWVkaWVuLycpIC1hbmQgJE1ldGhvZCAtZXEgJ0RFTEVURScgLWFuZCAtbm90ICRQYXRoLlN0 -YXJ0c1dpdGgoJy9hcGkvbWVkaWVuL2RhdGVpLycpKSB7DQogICAgICAgICAgICAgICAgaWYgKC1u -b3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRSZXMgJ051ciBTdXBlclVzZXIg -ZGFyZiBNZWRpZW4gbG9lc2NoZW4nIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRN -aWQgPSAkUGF0aC5TdWJzdHJpbmcoJFBhdGguTGFzdEluZGV4T2YoJy8nKSArIDEpDQogICAgICAg -ICAgICAgICAgJHNjcmlwdDpGb3VuZCA9ICRmYWxzZTsgJHNjcmlwdDpHZWxvZXNjaHRlckVpbnRy -YWcgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgIElu -dm9rZS1XaXRoRmlsZUxvY2sgJ21lZGllbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAg -ICAkTWV0YSA9IFJlYWQtTWVkaWVuTWV0YQ0KICAgICAgICAgICAgICAgICAgICAgICAgJE5ldWVM -aXN0ZSA9IEAoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJG0gaW4gQCgkTWV0 -YS5tZWRpZW4pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRtLmlkIC1lcSAk -TWlkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6Rm91bmQgPSAk -dHJ1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NyaXB0OkdlbG9lc2NodGVy -RWludHJhZyA9ICRtDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRGlzay1EYXRl -aSBudXIgc2Nob25lbiwgd2VubiBPcmlnaW5hbC1TeXN0ZW0tQXNzZXQgKHN5c3RlbT0kdHJ1ZSku -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVXNlci1VcGxvYWRzIG1pdCBgcGZh -ZGAgKGluIEltYWdlcy88a2F0Pi8pIHdlcmRlbiBtaXQgZ2Vsb2VzY2h0Lg0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAkSXN0U3lzdGVtQXNzZXQgPSAkbS5QU09iamVjdC5Qcm9wZXJ0 -aWVzWydzeXN0ZW0nXSAtYW5kIFtib29sXSRtLnN5c3RlbQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICBpZiAoLW5vdCAkSXN0U3lzdGVtQXNzZXQpIHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICREYXRlaSA9IEdldC1NZWRpZW5QZmFkICRtDQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkRGF0 -ZWkgLVBhdGhUeXBlIExlYWYpIHsgUmVtb3ZlLUl0ZW0gLUxpdGVyYWxQYXRoICREYXRlaSAtRXJy +ICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkTWV0YS5tZWRpZW4pIHsgJE1ldGEgPSBbUFND +dXN0b21PYmplY3RdQHsgbWVkaWVuID0gQCgpIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAg +JExpc3RlID0gQCgkTWV0YS5tZWRpZW4pICsgW1BTQ3VzdG9tT2JqZWN0XSRFaW50cmFnDQogICAg +ICAgICAgICAgICAgICAgICAgICAkTWV0YSA9IFtQU0N1c3RvbU9iamVjdF1AeyBtZWRpZW4gPSAk +TGlzdGUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtTWVkaWVuTWV0YSAkTWV0YQ0K +ICAgICAgICAgICAgICAgICAgICB9IHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICB9IGNhdGNo +IHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAkWmllbCkgeyBSZW1vdmUtSXRl +bSAkWmllbCAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZSB9DQogICAgICAgICAgICAgICAg +ICAgIFNlbmQtRXJyb3IgJFJlcyAiJF8iIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnbWVkaWVuLmhvY2hnZWxhZGVuJyBA +eyBpZCA9ICRNaWQ7IGthdGVnb3JpZSA9ICRLYXRlZ29yaWU7IGJlemVpY2hudW5nID0gJEJlemVp +Y2hudW5nOyBncm9lc3NlID0gJFJvaEJ5dGVzLkxlbmd0aDsgbWltZVR5cGUgPSAkTWltZSB9DQog +ICAgICAgICAgICAgICAgJFVzZXJuYW1lID0gJGVudjpVU0VSTkFNRQ0KICAgICAgICAgICAgICAg +ICRSb2xsZSA9IEdldC1Vc2VyUm9sbGUNCiAgICAgICAgICAgICAgICBBZGQtQ2hhbmdlTG9nRW50 +cnkgJ21lZGllbicgJG51bGwgJG51bGwgJG51bGwgJFVzZXJuYW1lICRSb2xsZSBAeyBha3Rpb24g +PSAnaG9jaGdlbGFkZW4nOyBpZCA9ICRNaWQ7IGthdGVnb3JpZSA9ICRLYXRlZ29yaWU7IGJlemVp +Y2hudW5nID0gJEJlemVpY2hudW5nIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBA +eyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnOyBtZWRpdW0gPSAkRWludHJhZyB9IDIwMQ0KICAgICAg +ICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT09 +PT09PT09PT09PT09PT09IE1FRElFTjogVW1iZW5lbm5lbiAvIFZlcnNjaGllYmVuIC8gRGF0ZWkg +ZXJzZXR6ZW4gPT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICBpZiAoJFBhdGguU3Rh +cnRzV2l0aCgnL2FwaS9tZWRpZW4vJykgLWFuZCAkTWV0aG9kIC1lcSAnUEFUQ0gnIC1hbmQgLW5v +dCAkUGF0aC5TdGFydHNXaXRoKCcvYXBpL21lZGllbi9kYXRlaS8nKSkgew0KICAgICAgICAgICAg +ICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzICdOdXIg +U3VwZXJVc2VyIGRhcmYgTWVkaWVuIGFlbmRlcm4nIDQwMzsgY29udGludWUgfQ0KICAgICAgICAg +ICAgICAgICRNaWQgPSAkUGF0aC5TdWJzdHJpbmcoJFBhdGguTGFzdEluZGV4T2YoJy8nKSArIDEp +DQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0KICAgICAgICAgICAgICAg +IGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAkUmVzICdBbmZyYWdlIHp1IGdyb3Nz +JyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICB0cnkgeyAkQSA9ICRCb2R5IHwgQ29u +dmVydEZyb20tSnNvbiB9IGNhdGNoIHsgU2VuZC1FcnJvciAkUmVzICdVbmd1ZWx0aWdlcyBKU09O +JyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkTmV1ZUJleiA9IGlmICgkQS5QU09i +amVjdC5Qcm9wZXJ0aWVzWydiZXplaWNobnVuZyddKSB7IFtzdHJpbmddJEEuYmV6ZWljaG51bmcg +fSBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgICROZXVlS2F0ID0gaWYgKCRBLlBTT2Jq +ZWN0LlByb3BlcnRpZXNbJ2thdGVnb3JpZSddKSB7IChbc3RyaW5nXSRBLmthdGVnb3JpZSkuVG9M +b3dlcigpLlRyaW0oKSB9IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAgICAgaWYgKCRudWxs +IC1uZSAkTmV1ZUthdCAtYW5kIC1ub3QgKChHZXQtTWVkaWVuS2F0ZWdvcmllS2V5cykgLWNvbnRh +aW5zICROZXVlS2F0KSkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXMgJ1Vu +Z3VlbHRpZ2UgS2F0ZWdvcmllJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgICMgT3B0aW9uYWw6IERhdGVpLUluaGFsdCBhdXN0YXVzY2hlbiAoIkRhdGVp +IGVyc2V0emVuIi1Ba3Rpb24pDQogICAgICAgICAgICAgICAgJE5ldWVEYXRhQjY0ID0gaWYgKCRB +LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2RhdGEnXSkgeyBbc3RyaW5nXSRBLmRhdGEgfSBlbHNlIHsg +JG51bGwgfQ0KICAgICAgICAgICAgICAgICROZXVlTWltZSAgICA9IGlmICgkQS5QU09iamVjdC5Q +cm9wZXJ0aWVzWydtaW1lVHlwZSddKSB7IChbc3RyaW5nXSRBLm1pbWVUeXBlKS5Ub0xvd2VyKCku +VHJpbSgpIH0gZWxzZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAkTmV1ZXJEYXRlaW5hbWUg +PSBpZiAoJEEuUFNPYmplY3QuUHJvcGVydGllc1snZGF0ZWluYW1lJ10pIHsgKFtzdHJpbmddJEEu +ZGF0ZWluYW1lKS5UcmltKCkgfSBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgICROZXVl +Qnl0ZXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIGlmICgtbm90IFtzdHJpbmddOjpJc051bGxP +cldoaXRlU3BhY2UoJE5ldWVEYXRhQjY0KSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5v +dCAkTmV1ZU1pbWUpIHsgU2VuZC1FcnJvciAkUmVzICdtaW1lVHlwZSBmZWhsdCB6dW0gRGF0ZWkt +RXJzZXR6ZW4nIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAk +c2NyaXB0Ok1lZGllbkVybGF1YnRlTWltZXMuQ29udGFpbnNLZXkoJE5ldWVNaW1lKSkgeyBTZW5k +LUVycm9yICRSZXMgJ0RhdGVpdHlwIG5pY2h0IGVybGF1YnQnIDQwMDsgY29udGludWUgfQ0KICAg +ICAgICAgICAgICAgICAgICBpZiAoJE5ldWVEYXRhQjY0LlN0YXJ0c1dpdGgoJ2RhdGE6JykpIHsN +CiAgICAgICAgICAgICAgICAgICAgICAgICRpZHggPSAkTmV1ZURhdGFCNjQuSW5kZXhPZignLCcp +DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGlkeCAtZ2UgMCkgeyAkTmV1ZURhdGFCNjQg +PSAkTmV1ZURhdGFCNjQuU3Vic3RyaW5nKCRpZHggKyAxKSB9DQogICAgICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsgJE5ldWVCeXRlcyA9IFtTeXN0ZW0uQ29udmVy +dF06OkZyb21CYXNlNjRTdHJpbmcoJE5ldWVEYXRhQjY0KSB9IGNhdGNoIHsgU2VuZC1FcnJvciAk +UmVzICdCYXNlNjQgdW5ndWVsdGlnJyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAg +ICAgaWYgKCROZXVlQnl0ZXMuTGVuZ3RoIC1ndCAkc2NyaXB0Ok1lZGllbk1heEJ5dGVzKSB7DQog +ICAgICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXMgIkRhdGVpIHp1IGdyb3NzICht +YXggJChbTWF0aF06OkZsb29yKCRzY3JpcHQ6TWVkaWVuTWF4Qnl0ZXMgLyAxTUIpKSBNQikiIDQx +MzsgY29udGludWUNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICAgICAkc2NyaXB0OlVwZGF0ZWRFaW50cmFnID0gJG51bGw7ICRzY3JpcHQ6Rm91 +bmQgPSAkZmFsc2U7ICRzY3JpcHQ6QWVuZGVydW5nZW4gPSBAe30NCiAgICAgICAgICAgICAgICB0 +cnkgew0KICAgICAgICAgICAgICAgICAgICBJbnZva2UtV2l0aEZpbGVMb2NrICdtZWRpZW4uanNv +bicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJE1ldGEgPSBSZWFkLU1lZGllbk1ldGENCiAg +ICAgICAgICAgICAgICAgICAgICAgICROZXVlTGlzdGUgPSBAKCkNCiAgICAgICAgICAgICAgICAg +ICAgICAgIGZvcmVhY2ggKCRtIGluIEAoJE1ldGEubWVkaWVuKSkgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIGlmICgkbS5pZCAtZXEgJE1pZCkgew0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAkc2NyaXB0OkZvdW5kID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgJEFsdEthdCA9ICRtLmthdGVnb3JpZQ0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICBpZiAoJG51bGwgLW5lICROZXVlQmV6IC1hbmQgJE5ldWVCZXouVHJpbSgpIC1uZSAk +bS5iZXplaWNobnVuZykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGJl +eiA9ICROZXVlQmV6LlRyaW0oKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +aWYgKCRiZXouTGVuZ3RoIC1ndCAyMDApIHsgJGJleiA9ICRiZXouU3Vic3RyaW5nKDAsIDIwMCkg +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG0uYmV6ZWljaG51bmcgPSAk +YmV6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NyaXB0OkFlbmRlcnVu +Z2VuWydiZXplaWNobnVuZyddID0gJGJleg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJE5ldWVL +YXQgLWFuZCAkTmV1ZUthdCAtbmUgJEFsdEthdCkgew0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgJElzdFN5c3RlbSA9ICRtLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3BmYWQnXSAt +YW5kIC1ub3QgW3N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFjZShbc3RyaW5nXSRtLnBmYWQpDQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJElzdFN5c3RlbSkgew0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgU3lzdGVtLU1lZGl1bTogbnVy +IE1ldGEtS2F0ZWdvcmllIHdlY2hzZWxuLCBEYXRlaSBibGVpYnQgaW0gL2ltYWdlcy8tT3JkbmVy +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG0ua2F0ZWdvcmllID0g +JE5ldWVLYXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEFsdCA9IEdldC1NZWRpZW5Q +ZmFkICRtDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG0ua2F0ZWdv +cmllID0gJE5ldWVLYXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk +TmV1ID0gR2V0LU1lZGllblBmYWQgJG0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAkTmV1RGlyID0gU3BsaXQtUGF0aCAtUGFyZW50ICROZXUNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0 +aCAkTmV1RGlyKSkgeyBOZXctSXRlbSAtSXRlbVR5cGUgRGlyZWN0b3J5IC1QYXRoICROZXVEaXIg +LUZvcmNlIHwgT3V0LU51bGwgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRBbHQpIHsgTW92ZS1JdGVtIC1MaXRlcmFs +UGF0aCAkQWx0IC1EZXN0aW5hdGlvbiAkTmV1IC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk +c2NyaXB0OkFlbmRlcnVuZ2VuWydrYXRlZ29yaWUnXSA9ICIkQWx0S2F0IC0+ICROZXVlS2F0Ig0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICMgRGF0ZWktUmVwbGFjZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICBpZiAoJG51bGwgLW5lICROZXVlQnl0ZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICROZXVlckV4dCA9ICRzY3JpcHQ6TWVkaWVuRXJsYXVidGVNaW1lc1skTmV1ZU1p +bWVdDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkS2F0ID0gaWYgKCRtLmth +dGVnb3JpZSkgeyBbc3RyaW5nXSRtLmthdGVnb3JpZSB9IGVsc2UgeyAnc29uc3RpZ2VzJyB9DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSW1hZ2VzRGlyMiA9IEdldC1NZWRp +ZW5JbWFnZXNPcmRuZXIgJEthdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +JEhhdFBmYWQgPSAkbS5QU09iamVjdC5Qcm9wZXJ0aWVzWydwZmFkJ10gLWFuZCAtbm90IFtzdHJp +bmddOjpJc051bGxPcldoaXRlU3BhY2UoW3N0cmluZ10kbS5wZmFkKQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgJFppZWxJbkltYWdlcyA9ICRIYXRQZmFkIC1vciAoJG51bGwg +LW5lICRJbWFnZXNEaXIyKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg +KCRaaWVsSW5JbWFnZXMgLWFuZCAkbnVsbCAtbmUgJEltYWdlc0RpcjIpIHsNCiAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFsdGUgRGF0ZWkgYmVzZWl0aWdlbg0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkSGF0UGZhZCkgew0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQWx0RCA9IEpvaW4tUGF0 +aCAkc2NyaXB0OlJvb3QgKChbc3RyaW5nXSRtLnBmYWQpLlRyaW1TdGFydCgnLycpKQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRBbHREID0gR2V0LU1lZGllblBmYWQgJG0N +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJEFsdEQgLVBh +dGhUeXBlIExlYWYpIHsgUmVtb3ZlLUl0ZW0gLUxpdGVyYWxQYXRoICRBbHREIC1Gb3JjZSAtRXJy b3JBY3Rpb24gU2lsZW50bHlDb250aW51ZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAkTmV1ZUxpc3RlICs9ICRtDQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgaWYgKCRzY3JpcHQ6Rm91bmQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBX -cml0ZS1NZWRpZW5NZXRhIChbUFNDdXN0b21PYmplY3RdQHsgbWVkaWVuID0gJE5ldWVMaXN0ZSB9 -KQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9IHwgT3V0 -LU51bGwNCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2Vu -ZC1FcnJvciAkUmVzICIkXyIgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICBpZiAoLW5vdCAkc2NyaXB0OkZvdW5kKSB7IFNlbmQtRXJyb3IgJFJlcyAnTmlj -aHQgZ2VmdW5kZW4nIDQwNDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0Vp -bnRyYWcgJ21lZGllbi5nZWxvZXNjaHQnIEB7IGlkID0gJE1pZDsga2F0ZWdvcmllID0gJHNjcmlw -dDpHZWxvZXNjaHRlckVpbnRyYWcua2F0ZWdvcmllOyBiZXplaWNobnVuZyA9ICRzY3JpcHQ6R2Vs -b2VzY2h0ZXJFaW50cmFnLmJlemVpY2hudW5nIH0NCiAgICAgICAgICAgICAgICAkVXNlcm5hbWUg -PSAkZW52OlVTRVJOQU1FDQogICAgICAgICAgICAgICAgJFJvbGxlID0gR2V0LVVzZXJSb2xsZQ0K -ICAgICAgICAgICAgICAgIEFkZC1DaGFuZ2VMb2dFbnRyeSAnbWVkaWVuJyAkbnVsbCAkbnVsbCAk -bnVsbCAkVXNlcm5hbWUgJFJvbGxlIEB7IGFrdGlvbiA9ICdnZWxvZXNjaHQnOyBpZCA9ICRNaWQ7 -IGthdGVnb3JpZSA9ICRzY3JpcHQ6R2Vsb2VzY2h0ZXJFaW50cmFnLmthdGVnb3JpZTsgYmV6ZWlj -aG51bmcgPSAkc2NyaXB0OkdlbG9lc2NodGVyRWludHJhZy5iZXplaWNobnVuZyB9DQogICAgICAg -ICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsgc3RhdHVzID0gJ2dlbG9lc2NodCcgfQ0KICAgICAg -ICAgICAgICAgICRzY3JpcHQ6Rm91bmQgPSAkZmFsc2U7ICRzY3JpcHQ6R2Vsb2VzY2h0ZXJFaW50 -cmFnID0gJG51bGwNCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQog -ICAgICAgICAgICAjID09PT09PT09PT09PT09PT09PT09PSBTVEFUSVNDSEUgREFURUlFTiA9PT09 -PT09PT09PT09PT09PT09PT0NCiAgICAgICAgICAgICRSZWxQYXRoID0gJFBhdGguVHJpbVN0YXJ0 -KCcvJykNCiAgICAgICAgICAgIGlmIChbc3RyaW5nXTo6SXNOdWxsT3JXaGl0ZVNwYWNlKCRSZWxQ -YXRoKSkgeyAkUmVsUGF0aCA9ICdpbmRleC5odG1sJyB9DQogICAgICAgICAgICAkU2FmZVBhdGgg -PSBSZXNvbHZlLVNhZmVQYXRoICRSZWxQYXRoDQogICAgICAgICAgICBpZiAoJG51bGwgLWVxICRT -YWZlUGF0aCkgeyBTZW5kLUVycm9yICRSZXMgJ1p1Z3JpZmYgdmVyd2VpZ2VydCcgNDAzOyBjb250 -aW51ZSB9DQogICAgICAgICAgICBpZiAoKFRlc3QtUGF0aCAkU2FmZVBhdGgpIC1hbmQgLW5vdCAo -R2V0LUl0ZW0gJFNhZmVQYXRoKS5QU0lzQ29udGFpbmVyKSB7DQogICAgICAgICAgICAgICAgU2Vu -ZC1GaWxlICRSZXMgJFNhZmVQYXRoDQogICAgICAgICAgICB9IGVsc2VpZiAoJFJlbFBhdGggLWVx -ICdpbmRleC5odG1sJykgew0KICAgICAgICAgICAgICAgICMgRGlhZ25vc2UtU2VpdGUgc3RhdHQg -NDA0IC0gemVpZ3QgZGlyZWt0IGltIEJyb3dzZXIsIHdhcyBsb3MgaXN0DQogICAgICAgICAgICAg -ICAgJF9kaWFnSW5oYWx0ID0gJycNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAg -ICAgICAgICAkX2RpYWdGaWxlcyA9IEdldC1DaGlsZEl0ZW0gLVBhdGggJFJvb3QgLUZvcmNlIC1F -cnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlIHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgMzAgfCBG -b3JFYWNoLU9iamVjdCB7ICc8bGk+JyArIFtTeXN0ZW0uV2ViLkh0dHBVdGlsaXR5XTo6SHRtbEVu -Y29kZSgkXy5OYW1lKSArICc8L2xpPicgfQ0KICAgICAgICAgICAgICAgICAgICAkX2RpYWdJbmhh -bHQgPSAkX2RpYWdGaWxlcyAtam9pbiAiYG4iDQogICAgICAgICAgICAgICAgfSBjYXRjaCB7ICRf -ZGlhZ0luaGFsdCA9ICc8bGk+KFZlcnplaWNobmlzIG5pY2h0IGxlc2Jhcik8L2xpPicgfQ0KICAg -ICAgICAgICAgICAgICRfZGlhZ0h0bWwgPSBAIg0KPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGhlYWQ+ -PG1ldGEgY2hhcnNldD0idXRmLTgiPjx0aXRsZT5GTEQtU2VydmVyOiBpbmRleC5odG1sIG5pY2h0 -IGdlZnVuZGVuPC90aXRsZT4NCjxzdHlsZT5ib2R5e2ZvbnQtZmFtaWx5OlNlZ29lIFVJLHNhbnMt -c2VyaWY7YmFja2dyb3VuZDojZmFmYWZhO2NvbG9yOiMyMjI7cGFkZGluZzozMnB4O21heC13aWR0 -aDo3ODBweDttYXJnaW46YXV0b30NCmgxe2NvbG9yOiNiNzFjMWN9Y29kZXtiYWNrZ3JvdW5kOiNl -ZWU7cGFkZGluZzoycHggNnB4O2JvcmRlci1yYWRpdXM6M3B4fQ0KLmJveHtiYWNrZ3JvdW5kOiNm -ZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO3BhZGRpbmc6MTZweCAyMHB4O2JvcmRlci1yYWRpdXM6 -NHB4O21hcmdpbjoxNHB4IDB9DQoubGFiZWx7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiM1NTV9dWx7 -Zm9udC1zaXplOjEzcHh9PC9zdHlsZT48L2hlYWQ+PGJvZHk+DQo8aDE+RkxELVNlcnZlcjogaW5k -ZXguaHRtbCBuaWNodCBnZWZ1bmRlbjwvaDE+DQo8cD5EZXIgU2VydmVyIGxhZXVmdCwga2FubiBh -YmVyIHVudGVyIGRlbSBrb25maWd1cmllcnRlbiBBcHAtUm9vdCBrZWluZSA8Y29kZT5pbmRleC5o -dG1sPC9jb2RlPiBmaW5kZW4uPC9wPg0KPGRpdiBjbGFzcz0iYm94Ij4NCiAgPGRpdj48c3BhbiBj -bGFzcz0ibGFiZWwiPkFrdHVlbGwgZ2VudXR6dGVyIFJvb3QtUGZhZDo8L3NwYW4+PGJyPjxjb2Rl -PiRSb290PC9jb2RlPjwvZGl2Pg0KICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjhweCI+PHNwYW4g -Y2xhc3M9ImxhYmVsIj5RdWVsbGU6PC9zcGFuPiAkX3Jvb3RTcmM8L2Rpdj4NCiAgPGRpdiBzdHls -ZT0ibWFyZ2luLXRvcDo4cHgiPjxzcGFuIGNsYXNzPSJsYWJlbCI+Um9vdFBhdGgtUGFyYW06PC9z -cGFuPiA8Y29kZT4kKFtTeXN0ZW0uV2ViLkh0dHBVdGlsaXR5XTo6SHRtbEVuY29kZSgkUm9vdFBh -dGgpKTwvY29kZT48L2Rpdj4NCiAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDo4cHgiPjxzcGFuIGNs -YXNzPSJsYWJlbCI+UFNTY3JpcHRSb290Ojwvc3Bhbj4gPGNvZGU+JChbU3lzdGVtLldlYi5IdHRw -VXRpbGl0eV06Okh0bWxFbmNvZGUoJFBTU2NyaXB0Um9vdCkpPC9jb2RlPjwvZGl2Pg0KPC9kaXY+ -DQo8ZGl2IGNsYXNzPSJib3giPg0KICA8ZGl2IGNsYXNzPSJsYWJlbCI+SW5oYWx0IGRlcyBSb290 -LVBmYWRzIChtYXggMzAgRWludHJhZWdlKTo8L2Rpdj4NCiAgPHVsPiRfZGlhZ0luaGFsdDwvdWw+ -DQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImJveCI+DQogIDxkaXYgY2xhc3M9ImxhYmVsIj5OYWVjaHN0 -ZSBTY2hyaXR0ZTo8L2Rpdj4NCiAgPG9sPg0KICAgIDxsaT5QcnVlZmUsIG9iIGltIGdlbmFubnRl -biBSb290LVBmYWQgZGllIERhdGVpIDxjb2RlPmluZGV4Lmh0bWw8L2NvZGU+IGxpZWd0LjwvbGk+ -DQogICAgPGxpPkZhbGxzIG5pY2h0OiBCYXQgYXVzIGRlbSBrb3JyZWt0ZW4gQXBwLU9yZG5lciBz -dGFydGVuIChuaWNodCBhdXMgZGVtIE5XLUhvbWUpLjwvbGk+DQogICAgPGxpPkZhbGxzIGRpZSBC -YXQgaW0gcmljaHRpZ2VuIE9yZG5lciBsaWVndDogU2lkZWNhci1EYXRlaSA8Y29kZT5hcHBfcm9v -dC50eHQ8L2NvZGU+IG5lYmVuIGRlbSBsb2thbGVuIDxjb2RlPnNlcnZlci5wczE8L2NvZGU+IHBy -dWVmZW4uPC9saT4NCiAgICA8bGk+Vm9sbHN0YWVuZGlnZXIgVHJhY2U6IDxjb2RlPiVURU1QJVxG -TERfc2VydmVyLmxvZzwvY29kZT4gYnp3LiA8Y29kZT4lVVNFUlBST0ZJTEUlXERlc2t0b3BcRkxE -X0ZFSExFUi5sb2c8L2NvZGU+LjwvbGk+DQogIDwvb2w+DQo8L2Rpdj4NCjwvYm9keT48L2h0bWw+ -DQoiQA0KICAgICAgICAgICAgICAgICRfYnl0ZXMgPSBbU3lzdGVtLlRleHQuRW5jb2RpbmddOjpV -VEY4LkdldEJ5dGVzKCRfZGlhZ0h0bWwpDQogICAgICAgICAgICAgICAgQWRkLVNlY3VyaXR5SGVh -ZGVycyAkUmVzDQogICAgICAgICAgICAgICAgJFJlcy5Db250ZW50VHlwZSA9ICd0ZXh0L2h0bWw7 -IGNoYXJzZXQ9dXRmLTgnDQogICAgICAgICAgICAgICAgJFJlcy5TdGF0dXNDb2RlID0gNTAzDQog -ICAgICAgICAgICAgICAgJFJlcy5Db250ZW50TGVuZ3RoNjQgPSAkX2J5dGVzLkxlbmd0aA0KICAg -ICAgICAgICAgICAgIFdyaXRlLVJlc3BvbnNlQnVmZmVyICRSZXMgJF9ieXRlcw0KICAgICAgICAg -ICAgICAgIFdyaXRlLVN0YXJ0dXBMb2cgIkRJQUctU2VpdGUgYXVzZ2VsaWVmZXJ0IChpbmRleC5o -dG1sIHVudGVyICckUm9vdCcgZmVobHQpIg0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAg -ICAgICAgICBTZW5kLUVycm9yICRSZXMgIk5pY2h0IGdlZnVuZGVuOiAkUmVsUGF0aCIgNDA0DQog -ICAgICAgICAgICB9DQoNCiAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAjIFBoYXNlIEQ1 -OiBlcnJvcklkLVVVSUQgKyBTdGFja3RyYWNlIGlucyBMb2csIE5JQ0hUIGluIFJlc3BvbnNlDQog -ICAgICAgICAgICAkZXJyb3JJZCA9IE5ldy1FcnJvcklkDQogICAgICAgICAgICAkZGV0YWlsICA9 -ICIkXyB8IFplaWxlICQoJF8uSW52b2NhdGlvbkluZm8uU2NyaXB0TGluZU51bWJlcikgfCAkKCRf -Lkludm9jYXRpb25JbmZvLkxpbmUuVHJpbSgpKSINCiAgICAgICAgICAgIFdyaXRlLVN0YXJ0dXBM -b2cgIlJFUVVFU1QtRkVITEVSICRNZXRob2QgJFBhdGggZXJyb3JJZD0kZXJyb3JJZCA6ICRkZXRh -aWwiDQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7 -DQogICAgICAgICAgICAgICAgICAgIGZlaGxlciAgPSAnaW50ZXJuZXJfc2VydmVyZmVobGVyJw0K -ICAgICAgICAgICAgICAgICAgICBtZWxkdW5nID0gJ0ludGVybmVyIFNlcnZlcmZlaGxlciAtIGJp -dHRlIG1pdCBkZXIgZXJyb3JJZCBhbiBTdXBlclVzZXIgbWVsZGVuLicNCiAgICAgICAgICAgICAg -ICAgICAgZXJyb3JJZCA9ICRlcnJvcklkDQogICAgICAgICAgICAgICAgfSA1MDANCiAgICAgICAg -ICAgIH0gY2F0Y2gge30NCiAgICAgICAgfQ0KICAgIH0NCn0gZmluYWxseSB7DQogICAgaWYgKCRM -aXN0ZW5lciAtYW5kICRMaXN0ZW5lci5Jc0xpc3RlbmluZykgeyAkTGlzdGVuZXIuU3RvcCgpIH0N -CiAgICBXcml0ZS1TdGFydHVwTG9nICdTZXJ2ZXIgYmVlbmRldC4nDQp9DQo= +ICAgICAgICAgICAgfSBjYXRjaCB7fQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICMgTmV1ZW4gWmllbG5hbWVuIHfDpGhsZW4NCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICBpZiAoJEhhdFBmYWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgJFN0ZW0gPSBbU3lzdGVtLklPLlBhdGhdOjpHZXRGaWxlTmFt +ZVdpdGhvdXRFeHRlbnNpb24oW3N0cmluZ10kbS5wZmFkKQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAkWmllbEQgPSBKb2luLVBhdGggJEltYWdlc0RpcjIgKCRT +dGVtICsgJE5ldWVyRXh0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +IH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRV +cGxvYWROYW1lMiA9IGlmICgkTmV1ZXJEYXRlaW5hbWUpIHsgJE5ldWVyRGF0ZWluYW1lIH0gZWxz +ZSB7IFtzdHJpbmddJG0uYmV6ZWljaG51bmcgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAkQmFzZTIgPSBHZXQtTWVkaWVuQmFzZW5hbWVBdXNVcGxvYWQgJFVw +bG9hZE5hbWUyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRa +aWVsRCA9IEdldC1NZWRpZW5GcmVpZXJEYXRlaW5hbWUgJEltYWdlc0RpcjIgJEJhc2UyICROZXVl +ckV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbU3lzdGVtLklPLkZpbGVdOjpXcml0ZUFs +bEJ5dGVzKCRaaWVsRCwgJE5ldWVCeXRlcykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAkWmllbE5hbWUyID0gW1N5c3RlbS5JTy5QYXRoXTo6R2V0RmlsZU5hbWUoJFpp +ZWxEKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbS5QU09i +amVjdC5Qcm9wZXJ0aWVzWydwZmFkJ10pIHsgJG0ucGZhZCA9ICcvaW1hZ2VzLycgKyAkS2F0ICsg +Jy8nICsgJFppZWxOYW1lMiB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgZWxzZSB7ICRtIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUg +J3BmYWQnIC1WYWx1ZSAoJy9pbWFnZXMvJyArICRLYXQgKyAnLycgKyAkWmllbE5hbWUyKSB9DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG0uZGF0ZWluYW1lID0gaWYg +KCROZXVlckRhdGVpbmFtZSkgeyAkTmV1ZXJEYXRlaW5hbWUuU3Vic3RyaW5nKDAsIFtNYXRoXTo6 +TWluKCROZXVlckRhdGVpbmFtZS5MZW5ndGgsIDIwMCkpIH0gZWxzZSB7ICRaaWVsTmFtZTIgfQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtLm1pbWVUeXBlID0gJE5l +dWVNaW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG0uZ3JvZXNz +ZSA9ICROZXVlQnl0ZXMuTGVuZ3RoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgaWYgKCRtLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3N5c3RlbSddKSB7ICRtLlBTT2JqZWN0 +LlByb3BlcnRpZXMuUmVtb3ZlKCdzeXN0ZW0nKSB9DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgJG0uaG9jaGdlbGFkZW5BbSA9IChHZXQtRGF0ZSAtRm9ybWF0ICd5eXl5 +LU1NLWRkIEhIOm1tOnNzJykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAkbS5ob2NoZ2VsYWRlblZvbiA9IChHZXQtQWt0dWVsbGVyQmVudXR6ZXIpDQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjcmlwdDpBZW5kZXJ1bmdlblsnZGF0ZWkn +XSA9ICIkTmV1ZU1pbWUgJCgkTmV1ZUJ5dGVzLkxlbmd0aCkgQiINCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIyBkYXRhL21lZGllbi1QZmFkDQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgaWYgKC1ub3QgJEhhdFBmYWQpIHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgJEFsdEQgPSBHZXQtTWVkaWVuUGZhZCAkbQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJh +bFBhdGggJEFsdEQgLVBhdGhUeXBlIExlYWYpIHsgUmVtb3ZlLUl0ZW0gLUxpdGVyYWxQYXRoICRB +bHREIC1Gb3JjZSAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZSB9DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge30NCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgaWYgKCRtLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3BmYWQnXSkgeyAkbS5QU09i +amVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgncGZhZCcpIH0NCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICBpZiAoJG0uUFNPYmplY3QuUHJvcGVydGllc1snc3lzdGVtJ10pIHsg +JG0uUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJ3N5c3RlbScpIH0NCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAkbS5taW1lVHlwZSA9ICROZXVlTWltZQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkTmV1ZXJEYXRlaW5hbWUpIHsN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG0uZGF0ZWluYW1l +ID0gJE5ldWVyRGF0ZWluYW1lLlN1YnN0cmluZygwLCBbTWF0aF06Ok1pbigkTmV1ZXJEYXRlaW5h +bWUuTGVuZ3RoLCAyMDApKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbS5ncm9lc3NlID0g +JE5ldWVCeXRlcy5MZW5ndGgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAkbS5ob2NoZ2VsYWRlbkFtID0gKEdldC1EYXRlIC1Gb3JtYXQgJ3l5eXktTU0tZGQgSEg6bW06 +c3MnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtLmhvY2hnZWxh +ZGVuVm9uID0gKEdldC1Ba3R1ZWxsZXJCZW51dHplcikNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAkWmllbEQgPSBHZXQtTWVkaWVuUGZhZCAkbQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRaaWVsRGlyID0gU3BsaXQtUGF0aCAtUGFyZW50 +ICRaaWVsRA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90 +IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRaaWVsRGlyKSkgeyBOZXctSXRlbSAtSXRlbVR5cGUg +RGlyZWN0b3J5IC1QYXRoICRaaWVsRGlyIC1Gb3JjZSB8IE91dC1OdWxsIH0NCiAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbU3lzdGVtLklPLkZpbGVdOjpXcml0ZUFsbEJ5 +dGVzKCRaaWVsRCwgJE5ldWVCeXRlcykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAkc2NyaXB0OkFlbmRlcnVuZ2VuWydkYXRlaSddID0gIiROZXVlTWltZSAkKCROZXVl +Qnl0ZXMuTGVuZ3RoKSBCIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICRzY3JpcHQ6VXBkYXRlZEVpbnRyYWcgPSAkbQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTmV1ZUxpc3RlICs9ICRt +DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo +JHNjcmlwdDpGb3VuZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLU1lZGll +bk1ldGEgKFtQU0N1c3RvbU9iamVjdF1AeyBtZWRpZW4gPSAkTmV1ZUxpc3RlIH0pDQogICAgICAg +ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0gfCBPdXQtTnVsbA0KICAg +ICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRS +ZXMgIiRfIiA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +IGlmICgtbm90ICRzY3JpcHQ6Rm91bmQpIHsgU2VuZC1FcnJvciAkUmVzICdOaWNodCBnZWZ1bmRl +bicgNDA0OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnbWVk +aWVuLmdlYWVuZGVydCcgQHsgaWQgPSAkTWlkOyBiZXplaWNobnVuZyA9ICRzY3JpcHQ6VXBkYXRl +ZEVpbnRyYWcuYmV6ZWljaG51bmc7IGthdGVnb3JpZSA9ICRzY3JpcHQ6VXBkYXRlZEVpbnRyYWcu +a2F0ZWdvcmllIH0NCiAgICAgICAgICAgICAgICAkVXNlcm5hbWUgPSAkZW52OlVTRVJOQU1FDQog +ICAgICAgICAgICAgICAgJFJvbGxlID0gR2V0LVVzZXJSb2xsZQ0KICAgICAgICAgICAgICAgIEFk +ZC1DaGFuZ2VMb2dFbnRyeSAnbWVkaWVuJyAkbnVsbCAkbnVsbCAkbnVsbCAkVXNlcm5hbWUgJFJv +bGxlIEB7IGFrdGlvbiA9ICdnZWFlbmRlcnQnOyBpZCA9ICRNaWQ7IGJlemVpY2hudW5nID0gJHNj +cmlwdDpVcGRhdGVkRWludHJhZy5iZXplaWNobnVuZzsga2F0ZWdvcmllID0gJHNjcmlwdDpVcGRh +dGVkRWludHJhZy5rYXRlZ29yaWUgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7 +IHN0YXR1cyA9ICdnZXNwZWljaGVydCc7IG1lZGl1bSA9ICRzY3JpcHQ6VXBkYXRlZEVpbnRyYWcg +fQ0KICAgICAgICAgICAgICAgICRzY3JpcHQ6Rm91bmQgPSAkZmFsc2U7ICRzY3JpcHQ6VXBkYXRl +ZEVpbnRyYWcgPSAkbnVsbA0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9 +DQoNCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IE1FRElFTjogTG9lc2NoZW4g +PT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICBpZiAoJFBhdGguU3RhcnRzV2l0aCgn +L2FwaS9tZWRpZW4vJykgLWFuZCAkTWV0aG9kIC1lcSAnREVMRVRFJyAtYW5kIC1ub3QgJFBhdGgu +U3RhcnRzV2l0aCgnL2FwaS9tZWRpZW4vZGF0ZWkvJykpIHsNCiAgICAgICAgICAgICAgICBpZiAo +LW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlcyAnTnVyIFN1cGVyVXNl +ciBkYXJmIE1lZGllbiBsb2VzY2hlbicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAg +JE1pZCA9ICRQYXRoLlN1YnN0cmluZygkUGF0aC5MYXN0SW5kZXhPZignLycpICsgMSkNCiAgICAg +ICAgICAgICAgICAkc2NyaXB0OkZvdW5kID0gJGZhbHNlOyAkc2NyaXB0OkdlbG9lc2NodGVyRWlu +dHJhZyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAg +SW52b2tlLVdpdGhGaWxlTG9jayAnbWVkaWVuLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgICRNZXRhID0gUmVhZC1NZWRpZW5NZXRhDQogICAgICAgICAgICAgICAgICAgICAgICAkTmV1 +ZUxpc3RlID0gQCgpDQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkbSBpbiBAKCRN +ZXRhLm1lZGllbikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG0uaWQgLWVx +ICRNaWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjcmlwdDpGb3VuZCA9 +ICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6R2Vsb2VzY2h0 +ZXJFaW50cmFnID0gJG0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBEaXNrLURh +dGVpIG51ciBzY2hvbmVuLCB3ZW5uIE9yaWdpbmFsLVN5c3RlbS1Bc3NldCAoc3lzdGVtPSR0cnVl +KS4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBVc2VyLVVwbG9hZHMgbWl0IGBw +ZmFkYCAoaW4gSW1hZ2VzLzxrYXQ+Lykgd2VyZGVuIG1pdCBnZWxvZXNjaHQuDQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICRJc3RTeXN0ZW1Bc3NldCA9ICRtLlBTT2JqZWN0LlByb3Bl +cnRpZXNbJ3N5c3RlbSddIC1hbmQgW2Jvb2xdJG0uc3lzdGVtDQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIGlmICgtbm90ICRJc3RTeXN0ZW1Bc3NldCkgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgJERhdGVpID0gR2V0LU1lZGllblBmYWQgJG0NCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRE +YXRlaSAtUGF0aFR5cGUgTGVhZikgeyBSZW1vdmUtSXRlbSAtTGl0ZXJhbFBhdGggJERhdGVpIC1F +cnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICROZXVlTGlzdGUgKz0gJG0NCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg +ICAgICAgICBpZiAoJHNjcmlwdDpGb3VuZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +IFdyaXRlLU1lZGllbk1ldGEgKFtQU0N1c3RvbU9iamVjdF1AeyBtZWRpZW4gPSAkTmV1ZUxpc3Rl +IH0pDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0gfCBP +dXQtTnVsbA0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBT +ZW5kLUVycm9yICRSZXMgIiRfIiA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgIGlmICgtbm90ICRzY3JpcHQ6Rm91bmQpIHsgU2VuZC1FcnJvciAkUmVzICdO +aWNodCBnZWZ1bmRlbicgNDA0OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9n +RWludHJhZyAnbWVkaWVuLmdlbG9lc2NodCcgQHsgaWQgPSAkTWlkOyBrYXRlZ29yaWUgPSAkc2Ny +aXB0OkdlbG9lc2NodGVyRWludHJhZy5rYXRlZ29yaWU7IGJlemVpY2hudW5nID0gJHNjcmlwdDpH +ZWxvZXNjaHRlckVpbnRyYWcuYmV6ZWljaG51bmcgfQ0KICAgICAgICAgICAgICAgICRVc2VybmFt +ZSA9ICRlbnY6VVNFUk5BTUUNCiAgICAgICAgICAgICAgICAkUm9sbGUgPSBHZXQtVXNlclJvbGxl +DQogICAgICAgICAgICAgICAgQWRkLUNoYW5nZUxvZ0VudHJ5ICdtZWRpZW4nICRudWxsICRudWxs +ICRudWxsICRVc2VybmFtZSAkUm9sbGUgQHsgYWt0aW9uID0gJ2dlbG9lc2NodCc7IGlkID0gJE1p +ZDsga2F0ZWdvcmllID0gJHNjcmlwdDpHZWxvZXNjaHRlckVpbnRyYWcua2F0ZWdvcmllOyBiZXpl +aWNobnVuZyA9ICRzY3JpcHQ6R2Vsb2VzY2h0ZXJFaW50cmFnLmJlemVpY2hudW5nIH0NCiAgICAg +ICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAeyBzdGF0dXMgPSAnZ2Vsb2VzY2h0JyB9DQogICAg +ICAgICAgICAgICAgJHNjcmlwdDpGb3VuZCA9ICRmYWxzZTsgJHNjcmlwdDpHZWxvZXNjaHRlckVp +bnRyYWcgPSAkbnVsbA0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoN +CiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IFNUQVRJU0NIRSBEQVRFSUVOID09 +PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgJFJlbFBhdGggPSAkUGF0aC5UcmltU3Rh +cnQoJy8nKQ0KICAgICAgICAgICAgaWYgKFtzdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJFJl +bFBhdGgpKSB7ICRSZWxQYXRoID0gJ2luZGV4Lmh0bWwnIH0NCiAgICAgICAgICAgICRTYWZlUGF0 +aCA9IFJlc29sdmUtU2FmZVBhdGggJFJlbFBhdGgNCiAgICAgICAgICAgIGlmICgkbnVsbCAtZXEg +JFNhZmVQYXRoKSB7IFNlbmQtRXJyb3IgJFJlcyAnWnVncmlmZiB2ZXJ3ZWlnZXJ0JyA0MDM7IGNv +bnRpbnVlIH0NCiAgICAgICAgICAgIGlmICgoVGVzdC1QYXRoICRTYWZlUGF0aCkgLWFuZCAtbm90 +IChHZXQtSXRlbSAkU2FmZVBhdGgpLlBTSXNDb250YWluZXIpIHsNCiAgICAgICAgICAgICAgICBT +ZW5kLUZpbGUgJFJlcyAkU2FmZVBhdGgNCiAgICAgICAgICAgIH0gZWxzZWlmICgkUmVsUGF0aCAt +ZXEgJ2luZGV4Lmh0bWwnKSB7DQogICAgICAgICAgICAgICAgIyBEaWFnbm9zZS1TZWl0ZSBzdGF0 +dCA0MDQgLSB6ZWlndCBkaXJla3QgaW0gQnJvd3Nlciwgd2FzIGxvcyBpc3QNCiAgICAgICAgICAg +ICAgICAkX2RpYWdJbmhhbHQgPSAnJw0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAg +ICAgICAgICAgICRfZGlhZ0ZpbGVzID0gR2V0LUNoaWxkSXRlbSAtUGF0aCAkUm9vdCAtRm9yY2Ug +LUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUgfCBTZWxlY3QtT2JqZWN0IC1GaXJzdCAzMCB8 +IEZvckVhY2gtT2JqZWN0IHsgJzxsaT4nICsgW1N5c3RlbS5XZWIuSHR0cFV0aWxpdHldOjpIdG1s +RW5jb2RlKCRfLk5hbWUpICsgJzwvbGk+JyB9DQogICAgICAgICAgICAgICAgICAgICRfZGlhZ0lu +aGFsdCA9ICRfZGlhZ0ZpbGVzIC1qb2luICJgbiINCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsg +JF9kaWFnSW5oYWx0ID0gJzxsaT4oVmVyemVpY2huaXMgbmljaHQgbGVzYmFyKTwvbGk+JyB9DQog +ICAgICAgICAgICAgICAgJF9kaWFnSHRtbCA9IEAiDQo8IWRvY3R5cGUgaHRtbD48aHRtbD48aGVh +ZD48bWV0YSBjaGFyc2V0PSJ1dGYtOCI+PHRpdGxlPkZMRC1TZXJ2ZXI6IGluZGV4Lmh0bWwgbmlj +aHQgZ2VmdW5kZW48L3RpdGxlPg0KPHN0eWxlPmJvZHl7Zm9udC1mYW1pbHk6U2Vnb2UgVUksc2Fu +cy1zZXJpZjtiYWNrZ3JvdW5kOiNmYWZhZmE7Y29sb3I6IzIyMjtwYWRkaW5nOjMycHg7bWF4LXdp +ZHRoOjc4MHB4O21hcmdpbjphdXRvfQ0KaDF7Y29sb3I6I2I3MWMxY31jb2Rle2JhY2tncm91bmQ6 +I2VlZTtwYWRkaW5nOjJweCA2cHg7Ym9yZGVyLXJhZGl1czozcHh9DQouYm94e2JhY2tncm91bmQ6 +I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzoxNnB4IDIwcHg7Ym9yZGVyLXJhZGl1 +czo0cHg7bWFyZ2luOjE0cHggMH0NCi5sYWJlbHtmb250LXdlaWdodDo2MDA7Y29sb3I6IzU1NX11 +bHtmb250LXNpemU6MTNweH08L3N0eWxlPjwvaGVhZD48Ym9keT4NCjxoMT5GTEQtU2VydmVyOiBp +bmRleC5odG1sIG5pY2h0IGdlZnVuZGVuPC9oMT4NCjxwPkRlciBTZXJ2ZXIgbGFldWZ0LCBrYW5u +IGFiZXIgdW50ZXIgZGVtIGtvbmZpZ3VyaWVydGVuIEFwcC1Sb290IGtlaW5lIDxjb2RlPmluZGV4 +Lmh0bWw8L2NvZGU+IGZpbmRlbi48L3A+DQo8ZGl2IGNsYXNzPSJib3giPg0KICA8ZGl2PjxzcGFu +IGNsYXNzPSJsYWJlbCI+QWt0dWVsbCBnZW51dHp0ZXIgUm9vdC1QZmFkOjwvc3Bhbj48YnI+PGNv +ZGU+JFJvb3Q8L2NvZGU+PC9kaXY+DQogIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6OHB4Ij48c3Bh +biBjbGFzcz0ibGFiZWwiPlF1ZWxsZTo8L3NwYW4+ICRfcm9vdFNyYzwvZGl2Pg0KICA8ZGl2IHN0 +eWxlPSJtYXJnaW4tdG9wOjhweCI+PHNwYW4gY2xhc3M9ImxhYmVsIj5Sb290UGF0aC1QYXJhbTo8 +L3NwYW4+IDxjb2RlPiQoW1N5c3RlbS5XZWIuSHR0cFV0aWxpdHldOjpIdG1sRW5jb2RlKCRSb290 +UGF0aCkpPC9jb2RlPjwvZGl2Pg0KICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjhweCI+PHNwYW4g +Y2xhc3M9ImxhYmVsIj5QU1NjcmlwdFJvb3Q6PC9zcGFuPiA8Y29kZT4kKFtTeXN0ZW0uV2ViLkh0 +dHBVdGlsaXR5XTo6SHRtbEVuY29kZSgkUFNTY3JpcHRSb290KSk8L2NvZGU+PC9kaXY+DQo8L2Rp +dj4NCjxkaXYgY2xhc3M9ImJveCI+DQogIDxkaXYgY2xhc3M9ImxhYmVsIj5JbmhhbHQgZGVzIFJv +b3QtUGZhZHMgKG1heCAzMCBFaW50cmFlZ2UpOjwvZGl2Pg0KICA8dWw+JF9kaWFnSW5oYWx0PC91 +bD4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iYm94Ij4NCiAgPGRpdiBjbGFzcz0ibGFiZWwiPk5hZWNo +c3RlIFNjaHJpdHRlOjwvZGl2Pg0KICA8b2w+DQogICAgPGxpPlBydWVmZSwgb2IgaW0gZ2VuYW5u +dGVuIFJvb3QtUGZhZCBkaWUgRGF0ZWkgPGNvZGU+aW5kZXguaHRtbDwvY29kZT4gbGllZ3QuPC9s +aT4NCiAgICA8bGk+RmFsbHMgbmljaHQ6IEJhdCBhdXMgZGVtIGtvcnJla3RlbiBBcHAtT3JkbmVy +IHN0YXJ0ZW4gKG5pY2h0IGF1cyBkZW0gTlctSG9tZSkuPC9saT4NCiAgICA8bGk+RmFsbHMgZGll +IEJhdCBpbSByaWNodGlnZW4gT3JkbmVyIGxpZWd0OiBTaWRlY2FyLURhdGVpIDxjb2RlPmFwcF9y +b290LnR4dDwvY29kZT4gbmViZW4gZGVtIGxva2FsZW4gPGNvZGU+c2VydmVyLnBzMTwvY29kZT4g +cHJ1ZWZlbi48L2xpPg0KICAgIDxsaT5Wb2xsc3RhZW5kaWdlciBUcmFjZTogPGNvZGU+JVRFTVAl +XEZMRF9zZXJ2ZXIubG9nPC9jb2RlPiBiencuIDxjb2RlPiVVU0VSUFJPRklMRSVcRGVza3RvcFxG +TERfRkVITEVSLmxvZzwvY29kZT4uPC9saT4NCiAgPC9vbD4NCjwvZGl2Pg0KPC9ib2R5PjwvaHRt +bD4NCiJADQogICAgICAgICAgICAgICAgJF9ieXRlcyA9IFtTeXN0ZW0uVGV4dC5FbmNvZGluZ106 +OlVURjguR2V0Qnl0ZXMoJF9kaWFnSHRtbCkNCiAgICAgICAgICAgICAgICBBZGQtU2VjdXJpdHlI +ZWFkZXJzICRSZXMNCiAgICAgICAgICAgICAgICAkUmVzLkNvbnRlbnRUeXBlID0gJ3RleHQvaHRt +bDsgY2hhcnNldD11dGYtOCcNCiAgICAgICAgICAgICAgICAkUmVzLlN0YXR1c0NvZGUgPSA1MDMN +CiAgICAgICAgICAgICAgICAkUmVzLkNvbnRlbnRMZW5ndGg2NCA9ICRfYnl0ZXMuTGVuZ3RoDQog +ICAgICAgICAgICAgICAgV3JpdGUtUmVzcG9uc2VCdWZmZXIgJFJlcyAkX2J5dGVzDQogICAgICAg +ICAgICAgICAgV3JpdGUtU3RhcnR1cExvZyAiRElBRy1TZWl0ZSBhdXNnZWxpZWZlcnQgKGluZGV4 +Lmh0bWwgdW50ZXIgJyRSb290JyBmZWhsdCkiDQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAg +ICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAiTmljaHQgZ2VmdW5kZW46ICRSZWxQYXRoIiA0MDQN +CiAgICAgICAgICAgIH0NCg0KICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICMgUGhhc2Ug +RDU6IGVycm9ySWQtVVVJRCArIFN0YWNrdHJhY2UgaW5zIExvZywgTklDSFQgaW4gUmVzcG9uc2UN +CiAgICAgICAgICAgICRlcnJvcklkID0gTmV3LUVycm9ySWQNCiAgICAgICAgICAgICRkZXRhaWwg +ID0gIiRfIHwgWmVpbGUgJCgkXy5JbnZvY2F0aW9uSW5mby5TY3JpcHRMaW5lTnVtYmVyKSB8ICQo +JF8uSW52b2NhdGlvbkluZm8uTGluZS5UcmltKCkpIg0KICAgICAgICAgICAgV3JpdGUtU3RhcnR1 +cExvZyAiUkVRVUVTVC1GRUhMRVIgJE1ldGhvZCAkUGF0aCBlcnJvcklkPSRlcnJvcklkIDogJGRl +dGFpbCINCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMg +QHsNCiAgICAgICAgICAgICAgICAgICAgZmVobGVyICA9ICdpbnRlcm5lcl9zZXJ2ZXJmZWhsZXIn +DQogICAgICAgICAgICAgICAgICAgIG1lbGR1bmcgPSAnSW50ZXJuZXIgU2VydmVyZmVobGVyIC0g +Yml0dGUgbWl0IGRlciBlcnJvcklkIGFuIFN1cGVyVXNlciBtZWxkZW4uJw0KICAgICAgICAgICAg +ICAgICAgICBlcnJvcklkID0gJGVycm9ySWQNCiAgICAgICAgICAgICAgICB9IDUwMA0KICAgICAg +ICAgICAgfSBjYXRjaCB7fQ0KICAgICAgICB9DQogICAgfQ0KfSBmaW5hbGx5IHsNCiAgICBpZiAo +JExpc3RlbmVyIC1hbmQgJExpc3RlbmVyLklzTGlzdGVuaW5nKSB7ICRMaXN0ZW5lci5TdG9wKCkg +fQ0KICAgIFdyaXRlLVN0YXJ0dXBMb2cgJ1NlcnZlciBiZWVuZGV0LicNCn0NCg== ### FILE: style.css | 163105 LyogPT09IFZJMyBER0wtUGxhbnVuZyDigJQgU3R5bGVzaGVldCAoRXhjZWwtdHJldWVzIExheW91 dCkgPT09ICovCgoqLCAqOjpiZWZvcmUsICo6OmFmdGVyIHsgYm94LXNpemluZzogYm9yZGVyLWJv