From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Frank Crawford To: git-commits@fedoraproject.org Subject: [rpms/hash-slinger] epel10.2: Upgrade to new upstream version and fixes for tlsa Date: Fri, 31 Jul 2026 05:38:12 GMT Message-ID: <178547629200.1.17294160241213518592.rpms-hash-slinger-7e2a19182d19@fedoraproject.org> List-ID: X-Git-Repo: rpms/hash-slinger X-Git-Branch: epel10.2 X-Git-Rev: 7e2a19182d19b40843aa4b814b9cd30335f8fb9d QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvaGFzaC1zbGluZ2Vy CkJyYW5jaCA6IGVwZWwxMC4yCkNvbW1pdCA6IDdlMmExOTE4MmQxOWI0MDg0M2FhNGI4MTRiOWNk MzAzMzVmOGZiOWQKQXV0aG9yIDogRnJhbmsgQ3Jhd2ZvcmQgPGZyYW5rQGNyYXdmb3JkLmVtdS5p ZC5hdT4KRGF0ZSAgIDogMjAyNi0wNy0zMVQxNDoyMTo0MCsxMDowMApTdGF0cyAgOiArOTMzLy00 IGluIDMgZmlsZShzKQpVUkwgICAgOiBodHRwczovL3NyYy5mZWRvcmFwcm9qZWN0Lm9yZy9ycG1z L2hhc2gtc2xpbmdlci9jLzdlMmExOTE4MmQxOWI0MDg0M2FhNGI4MTRiOWNkMzAzMzVmOGZiOWQ/ YnJhbmNoPWVwZWwxMC4yCgpMb2c6ClVwZ3JhZGUgdG8gbmV3IHVwc3RyZWFtIHZlcnNpb24gYW5k IGZpeGVzIGZvciB0bHNhCgotLS0KZGlmZiAtLWdpdCBhL2hhc2gtc2xpbmdlci5zcGVjIGIvaGFz aC1zbGluZ2VyLnNwZWMKaW5kZXggNzliOWQyNy4uOWYxODgxNiAxMDA2NDQKLS0tIGEvaGFzaC1z bGluZ2VyLnNwZWMKKysrIGIvaGFzaC1zbGluZ2VyLnNwZWMKQEAgLTIsMjAgKzIsMzUgQEAKIAog U3VtbWFyeTogR2VuZXJhdGUgYW5kIHZlcmlmeSB2YXJpb3VzIEROUyByZWNvcmRzIHN1Y2ggYXMg U1NIRlAsIFRMU0EgYW5kIE9QRU5QR1BLRVkKIE5hbWU6IGhhc2gtc2xpbmdlcgotVmVyc2lvbjog My41Ci1SZWxlYXNlOiAxJXs/ZGlzdH0KK1ZlcnNpb246IDMuNgorUmVsZWFzZTogMiV7P2Rpc3R9 CiBMaWNlbnNlOiBHUEwtMi4wLW9yLWxhdGVyCiBVcmw6ICBodHRwczovL2dpdGh1Yi5jb20vbGV0 b2Ftcy8le25hbWV9LwotU291cmNlOiAgJXt1cmx9YXJjaGl2ZS8le3ZlcnNpb259LyV7bmFtZX0t JXt2ZXJzaW9ufS50YXIuZ3oKK1NvdXJjZTA6ICAle3VybH1hcmNoaXZlLyV7dmVyc2lvbn0vJXtu YW1lfS0le3ZlcnNpb259LnRhci5negorIyBiYWNrIHBvcnQgdGxzYSBmcm9tIHYzLjQgZm9yIFJI RUwgc3lzdGVtcyBhcyBweXRob24gPCAzLjEzIGV4Y2VwdCBSSEVMMTAKKyMgaHR0cHM6Ly9naXRo dWIuY29tL2xldG9hbXMvaGFzaC1zbGluZ2VyL2lzc3Vlcy81NAorU291cmNlMTogIHRsc2EtdjMu NAogJWlmICV7d2l0aCBtYW59CiAjIE9ubHkgdG8gcmVnZW5lcmF0ZSB0aGUgbWFuIHBhZ2UsIHdo aWNoIGlzIHNoaXBwZWQgcGVyIGRlZmF1bHQKIEJ1aWxkcmVxdWlyZXM6IHhtbHRvCiAlZW5kaWYK IEJ1aWxkUmVxdWlyZXM6IHB5dGhvbjMtZGV2ZWwsIG1ha2UKKyVpZiAwJXs/cmhlbH0gJiYgMCV7 P3JoZWx9IDw9IDkKIFJlcXVpcmVzOiBweXRob24zID49IDMuNAorJWVsc2UKKyVpZiAwJXs/cmhl bH0gPT0gMTAKKyMgVGhpcyBpcyBub3QgcXVpdGUgcmlnaHQgZm9yIHRsc2EsIGJ1dCB3aWxsIHdv cmsgZm9yIG1vc3QgdXNlcworUmVxdWlyZXM6IHB5dGhvbjMgPj0gMy4xMgorJWVsc2UKK1JlcXVp cmVzOiBweXRob24zID49IDMuMTMKKyVlbmRpZgorJWVuZGlmCiBSZXF1aXJlczogcHl0aG9uMy1k bnMsIHB5dGhvbjMtdW5ib3VuZAogUmVxdWlyZXM6IG9wZW5zc2gtY2xpZW50cyA+PSA0LCBweXRo b24zLWdudXBnID49IDAuMy43CiBSZXF1aXJlczogcHl0aG9uMy1jcnlwdG9ncmFwaHkKKyVpZiAw JXs/cmhlbH0gJiYgMCV7P3JoZWx9IDw9IDkKK1JlcXVpcmVzOiBweXRob24zLW0yY3J5cHRvCisl ZW5kaWYKIEJ1aWxkQXJjaDogbm9hcmNoCiBPYnNvbGV0ZXM6IHNzaGZwIDwgMi4wCiBQcm92aWRl czogc3NoZnAgID0gJXt2ZXJzaW9ufQpAQCAtMzUsNiArNTAsOSBAQCBUaGlzIHBhY2thZ2UgaGFz IGluY29ycG9yYXRlZCB0aGUgb2xkICdzc2hmcCcgYW5kICdzd2VkZScgY29tbWFuZHMvcGFja2Fn ZXMKIAogJXByZXAKICVhdXRvc2V0dXAgLXAxCislaWYgMCV7P3JoZWx9ICYmIDAlez9yaGVsfSA8 PSA5CitjcCAle1NPVVJDRTF9IHRsc2EKKyVlbmRpZgogCiAlYnVpbGQKICVtYWtlX2J1aWxkIGFs bApAQCAtNDksNiArNjcsMTUgQEAgVGhpcyBwYWNrYWdlIGhhcyBpbmNvcnBvcmF0ZWQgdGhlIG9s ZCAnc3NoZnAnIGFuZCAnc3dlZGUnIGNvbW1hbmRzL3BhY2thZ2VzCiAlZG9jICV7X21hbmRpcn0v bWFuMS8qCiAKICVjaGFuZ2Vsb2cKKyogRnJpIEp1bCAzMSAyMDI2IEZyYW5rIENyYXdmb3JkIDxm cmFua0BjcmF3Zm9yZC5lbXUuaWQuYXU+IC0gMy42LTIKKy0gQmFja3BvcnQgdGxzYSBmcm9tIHYz LjQgZm9yIG9sZGVyIFJIRUwgc3lzdGVtcyBhcyBweXRob24gPCAzLjEzCisKKyogU2F0IEp1bCAy NSAyMDI2IEZyYW5rIENyYXdmb3JkIDxmcmFua0BjcmF3Zm9yZC5lbXUuaWQuYXU+IC0gMy42LTEK Ky0gVXBkYXRlZCB0byAzLjYKKworKiBUaHUgSnVsIDE2IDIwMjYgRmVkb3JhIFJlbGVhc2UgRW5n aW5lZXJpbmcgPHJlbGVuZ0BmZWRvcmFwcm9qZWN0Lm9yZz4gLSAzLjUtMgorLSBSZWJ1aWx0IGZv ciBodHRwczovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvRmVkb3JhXzQ1X01hc3NfUmVidWlsZAor CiAqIFR1ZSBGZWIgMjQgMjAyNiBGcmFuayBDcmF3Zm9yZCA8ZnJhbmtAY3Jhd2ZvcmQuZW11Lmlk LmF1PiAtIDMuNS0xCiAtIFVwZGF0ZWQgdG8gMy41CiAtIFJlZW5hYmxlIHRsc2EgdXNpbmcgcHl0 aG9uMy1jcnlwdG9ncmFwaHkgLSBCWjIzMTgzMDYgYW5kIEJaMjM2NzExNQoKZGlmZiAtLWdpdCBh L3NvdXJjZXMgYi9zb3VyY2VzCmluZGV4IGNhODgwYzQuLmJkZGNlNzEgMTAwNjQ0Ci0tLSBhL3Nv dXJjZXMKKysrIGIvc291cmNlcwpAQCAtMSArMSBAQAotU0hBNTEyIChoYXNoLXNsaW5nZXItMy41 LnRhci5neikgPSBhYzMwY2ZmYTBkYmI4MzM4OWYyMTUxMDAwMzVhZGU4NDBmOGZjOTQ3ZThmNjI1 ZTE4MDY4ZmE2ZDJhYzQ5YzVlN2Y1YmU2Y2QyNDdmNzBmNDZjNzM0NzJjYzEzNzQ0Mzk0NGMyMGQ3 Yjc2NmZjY2JiY2I1NzUyNGI4ODg3YTQzMQorU0hBNTEyIChoYXNoLXNsaW5nZXItMy42LnRhci5n eikgPSA3NjcxODEwNzNjZmU0ZGUzZWZhMDViMjVhZDMxZDUyNTgxNDIwNjM0ZDE0MmM5ZDg0M2M5 MmIzYjc1MjExOGEzYzNiYTIyM2NhMGM3MjI3MTg4ZjAyYjg5Zjg5OWQ3ZmQ1YzFmMTdkNDMzZmU2 MWRhZTc5NjYwNzU1ZjNjMzIzMgoKZGlmZiAtLWdpdCBhL3Rsc2EtdjMuNCBiL3Rsc2EtdjMuNApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGJmNDI0Ci0tLSAvZGV2L251bGwK KysrIGIvdGxzYS12My40CkBAIC0wLDAgKzEsOTAyIEBACisjIS91c3IvYmluL3B5dGhvbjMKKwor IyB0bHNhIC0gQSB0b29sIHRvIGNyZWF0ZSBEQU5FL1RMU0EgcmVjb3Jkcy4gKGNhbGxlZCAnc3dl ZGUnIGJlZm9yZSkKKyMKKyMgVGhpcyB0b29sIGlzIGxvb3NseSBiYXNlZCBvbiB0aGUgJ2RhbmUn IHByb2dyYW0gaW4gdGhlIHNzaGZwIHBhY2thZ2UgYnkgUGF1bAorIyBXb3V0ZXJzIGFuZCBDaHJp c3RvcGhlciBPbGFoCisjCisjIENvcHlyaWdodCAyMDEyIFBpZXRlciBMZXhpcyA8cGlldGVyLmxl eGlzQG9zMy5ubD4KKyMgQ29weXJpZ2h0IDIwMTQgUGF1bCBXb3V0ZXJzIDxwd291dGVyc0ByZWRo YXQuY29tPgorIyBDb3B5cmlnaHQgMjAxNS0yMDE5IERpcmsgU3RvZWNrZXIgPGhhc2hzbGluZ2Vy QGRzdG9lY2tlci5kZT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg b3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisj IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwg d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmts aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworVkVS U0lPTj0iMy40IgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBzb2NrZXQKK2ltcG9y dCB1bmJvdW5kCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHJlCitmcm9tIE0yQ3J5cHRvIGlt cG9ydCBYNTA5LCBTU0wsIEJJTywgbTIKK2Zyb20gYmluYXNjaWkgaW1wb3J0IGIyYV9oZXgKK2Zy b20gaGFzaGxpYiBpbXBvcnQgc2hhMjU2LCBzaGE1MTIKK2Zyb20gaXBhZGRyZXNzIGltcG9ydCBJ UHY0QWRkcmVzcywgSVB2NkFkZHJlc3MKKworUk9PVEtFWT0ibm9uZSIKK2NhdWxkcm9uID0gKCAi L3Zhci9saWIvdW5ib3VuZC9yb290LmFuY2hvciIsICIvdmFyL2xpYi91bmJvdW5kL3Jvb3Qua2V5 IiwgIi9ldGMvdW5ib3VuZC9yb290LmtleSIsICIvdXNyL3NoYXJlL2Rucy9yb290LmtleSIgKQor Zm9yIHJvb3QgaW4gY2F1bGRyb246CisJaWYgb3MucGF0aC5pc2ZpbGUocm9vdCk6CisJCVJPT1RL RVk9cm9vdAorCQlicmVhaworCitkZWYgZ2VuVExTQShob3N0bmFtZSwgcHJvdG9jb2wsIHBvcnQs IGNlcnRpZmljYXRlLCBvdXRwdXQ9J3JmYycsIHVzYWdlPTEsIHNlbGVjdG9yPTAsIG10eXBlPTEp OgorCSIiIlRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIGEgVExTQVJlY29yZCBvYmplY3QgdXNpbmcg dGhlIGRhdGEgcGFzc2VkIGluIHRoZSBwYXJhbWV0ZXJzLAorCWl0IHRoZW4gdmFsaWRhdGVzIHRo ZSByZWNvcmQgYW5kIHJldHVybnMgdGhlIFJSIGFzIGEgc3RyaW5nLgorCSIiIgorCSMgY2hlY2sg aWYgdmFsaWQgdmFycyB3ZXJlIHBhc3NlZAorCWlmIGhvc3RuYW1lWy0xXSAhPSAnLic6CisJCWhv c3RuYW1lICs9ICcuJworCisJIyBDcmVhdGUgdGhlIHJlY29yZCB3aXRob3V0IGEgY2VydGlmaWNh dGUKKwlpZiBwb3J0ID09ICcqJzoKKwkJcmVjb3JkID0gVExTQVJlY29yZChuYW1lPSclcy5fJXMu JXMnJShwb3J0LHByb3RvY29sLGhvc3RuYW1lKSwgdXNhZ2U9dXNhZ2UsIHNlbGVjdG9yPXNlbGVj dG9yLCBtdHlwZT1tdHlwZSwgY2VydCA9JycpCisJZWxzZToKKwkJcmVjb3JkID0gVExTQVJlY29y ZChuYW1lPSdfJXMuXyVzLiVzJyUocG9ydCxwcm90b2NvbCxob3N0bmFtZSksIHVzYWdlPXVzYWdl LCBzZWxlY3Rvcj1zZWxlY3RvciwgbXR5cGU9bXR5cGUsIGNlcnQgPScnKQorCSMgQ2hlY2sgaWYg dGhlIHJlY29yZCBpcyB2YWxpZAorCWlmIHJlY29yZC5pc1ZhbGlkOgorCQlpZiByZWNvcmQuc2Vs ZWN0b3IgPT0gMDoKKwkJCSMgSGFzaCB0aGUgRnVsbCBjZXJ0aWZpY2F0ZQorCQkJcmVjb3JkLmNl cnQgPSBnZXRIYXNoKGNlcnRpZmljYXRlLCByZWNvcmQubXR5cGUpCisJCWVsc2U6CisJCQkjIEhh c2ggb25seSB0aGUgU3ViamVjdFB1YmxpY0tleUluZm8KKwkJCXJlY29yZC5jZXJ0ID0gZ2V0SGFz aChjZXJ0aWZpY2F0ZS5nZXRfcHVia2V5KCksIHJlY29yZC5tdHlwZSkKKworCXJlY29yZC5pc1Zh bGlkKHJhaXNlRXhjZXB0aW9uPVRydWUpCisKKwlpZiBvdXRwdXQgPT0gJ2dlbmVyaWMnOgorCQly ZXR1cm4gcmVjb3JkLmdldFJlY29yZChnZW5lcmljPVRydWUpCisJcmV0dXJuIHJlY29yZC5nZXRS ZWNvcmQoKQorCitkZWYgZ2VuUmVjb3Jkcyhob3N0bmFtZSwgYWRkcmVzcywgcHJvdG9jb2wsIHBv cnQsIGNoYWluLCBvdXRwdXQ9J3JmYycsIHVzYWdlPTEsIHNlbGVjdG9yPTAsIG10eXBlPTEpOgor CWNlcnQgPSBOb25lCisJY2hhaW5lZCA9IGNoZWNrQ2hhaW5MaW5rKGNoYWluKVswXQorCWlmIG5v dCBjaGFpbmVkOgorCQlwcmludCgiV0FSTjogQ2VydGlmaWNhdGVzIGRvbid0IGNoYWluIikKKwlj ZXJ0c2xlZnQgPSBsZW4oY2hhaW4pCisJZm9yIGNoYWluY2VydCBpbiBjaGFpbjoKKwkJY2VydHNs ZWZ0IC09IDEKKwkJaWYgdXNhZ2UgPT0gMSBvciB1c2FnZSA9PSAzOgorCQkJIyBUaGUgZmlyc3Qg Y2VydCBpcyB0aGUgZW5kLWVudGl0eSBjZXJ0CisJCQlwcmludCgnR290IGEgY2VydGlmaWNhdGUg Zm9yICVzIHdpdGggU3ViamVjdDogJXMnICUgKGFkZHJlc3MsIGNoYWluY2VydC5nZXRfc3ViamVj dCgpKSkKKwkJCWNlcnQgPSBjaGFpbmNlcnQKKwkJCWJyZWFrCisJCWVsc2U6CisJCQlpZiAodXNh Z2UgPT0gMCBhbmQgY2hhaW5jZXJ0LmNoZWNrX2NhKCkpIG9yIHVzYWdlID09IDI6CisJCQkJaWYg Y2VydHNsZWZ0OiAjIGRvbid0IGFzayBmb3IgdGhlIGxhc3Qgb25lCisJCQkJCXN5cy5zdGRvdXQu d3JpdGUoJ0dvdCBhIGNlcnRpZmljYXRlIHdpdGggdGhlIGZvbGxvd2luZyBTdWJqZWN0OlxuXHQl c1xuVXNlIHRoaXMgYXMgY2VydGlmaWNhdGUgdG8gbWF0Y2g/IFt5L05dICcgJSBjaGFpbmNlcnQu Z2V0X3N1YmplY3QoKSkKKwkJCQkJaW5wdXRfb2sgPSBGYWxzZQorCQkJCQl3aGlsZSBub3QgaW5w dXRfb2s6CisJCQkJCQl1c2VyX2lucHV0ID0gaW5wdXQoKQorCQkJCQkJaWYgdXNlcl9pbnB1dCBp biBbJycsJ24nLCdOJ106CisJCQkJCQkJaW5wdXRfb2s9VHJ1ZQorCQkJCQkJZWxpZiB1c2VyX2lu cHV0IGluIFsneScsICdZJ106CisJCQkJCQkJaW5wdXRfb2sgPSBUcnVlCisJCQkJCQkJY2VydCA9 IGNoYWluY2VydAorCQkJCQkJZWxzZToKKwkJCQkJCQlzeXMuc3Rkb3V0LndyaXRlKCdQbGVhc2Ug YW5zd2VyIFkgb3IgTicpCisJCQkJZWxzZToKKwkJCQkJcHJpbnQoJ1VzaW5nIGNlcnRpZmljYXRl IHdpdGggdGhlIGZvbGxvd2luZyBTdWJqZWN0OlxuXHQlc1xuJyAlIGNoYWluY2VydC5nZXRfc3Vi amVjdCgpKQorCQkJCQljZXJ0ID0gY2hhaW5jZXJ0CisJCQlpZiBjZXJ0OgorCQkJCWJyZWFrCisK KwlpZiBjZXJ0OiAjIFByaW50IHRoZSByZXF1ZXN0ZWQgcmVjb3JkcyBiYXNlZCBvbiB0aGUgcmV0 cmlldmVkIGNlcnRpZmljYXRlcworCQlpZiBvdXRwdXQgPT0gJ2JvdGgnOgorCQkJcHJpbnQoZ2Vu VExTQShob3N0bmFtZSwgcHJvdG9jb2wsIHBvcnQsIGNlcnQsICdkcmFmdCcsIHVzYWdlLCBzZWxl Y3RvciwgbXR5cGUpKQorCQkJcHJpbnQoZ2VuVExTQShob3N0bmFtZSwgcHJvdG9jb2wsIHBvcnQs IGNlcnQsICdyZmMnLCB1c2FnZSwgc2VsZWN0b3IsIG10eXBlKSkKKwkJZWxzZToKKwkJCXByaW50 KGdlblRMU0EoaG9zdG5hbWUsIHByb3RvY29sLCBwb3J0LCBjZXJ0LCBvdXRwdXQsIHVzYWdlLCBz ZWxlY3RvciwgbXR5cGUpKQorCisJIyBDbGVhciB0aGUgY2VydCBmcm9tIG1lbW9yeSAodG8gc3Rv cCBNMkNyeXB0byBmcm9tIHNlZ2ZhdWx0aW5nKQorCWNlcnQ9Tm9uZQorCitkZWYgZ2V0QShob3N0 bmFtZSwgc2VjdXJlPVRydWUpOgorCSIiIkdldHMgYSBsaXN0IG9mIEEgcmVjb3JkcyBmb3IgaG9z dG5hbWUsIHJldHVybnMgYSBsaXN0IG9mIEFSZWNvcmRzIiIiCisJcmVjb3JkcyA9IFtdCisJdHJ5 OgorCQlyZWNvcmRzID0gZ2V0UmVjb3Jkcyhob3N0bmFtZSwgcnJ0eXBlPSdBJywgc2VjdXJlPXNl Y3VyZSkKKwlleGNlcHQgSW5zZWN1cmVMb29rdXBFeGNlcHRpb24gYXMgZToKKwkJcHJpbnQoc3Ry KGUpKQorCWV4Y2VwdCBETlNMb29rdXBFcnJvciBhcyBlOgorCQlwcmludCgnVW5hYmxlIHRvIHJl c29sdmUgJXM6ICVzJyAlIChob3N0bmFtZSwgc3RyKGUpKSkKKwlyZXQgPSBbXQorCWZvciByZWNv cmQgaW4gcmVjb3JkczoKKwkJcmV0LmFwcGVuZChBUmVjb3JkKGhvc3RuYW1lLCBzdHIoSVB2NEFk ZHJlc3MoaW50KGIyYV9oZXgocmVjb3JkKSwxNikpKSkpCisJcmV0dXJuIHJldAorCitkZWYgZ2V0 QUFBQShob3N0bmFtZSwgc2VjdXJlPVRydWUpOgorCSIiIkdldHMgYSBsaXN0IG9mIEFBQUEgcmVj b3JkcyBmb3IgaG9zdG5hbWUsIHJldHVybnMgYSBsaXN0IG9mIEFBQUFSZWNvcmRzIiIiCisJcmVj b3JkcyA9IFtdCisJdHJ5OgorCQlyZWNvcmRzID0gZ2V0UmVjb3Jkcyhob3N0bmFtZSwgcnJ0eXBl PSdBQUFBJywgc2VjdXJlPXNlY3VyZSkKKwlleGNlcHQgSW5zZWN1cmVMb29rdXBFeGNlcHRpb24g YXMgZToKKwkJcHJpbnQoc3RyKGUpKQorCWV4Y2VwdCBETlNMb29rdXBFcnJvciBhcyBlOgorCQlw cmludCgnVW5hYmxlIHRvIHJlc29sdmUgJXM6ICVzJyAlIChob3N0bmFtZSwgc3RyKGUpKSkKKwly ZXQgPSBbXQorCWZvciByZWNvcmQgaW4gcmVjb3JkczoKKwkJcmV0LmFwcGVuZChBQUFBUmVjb3Jk KGhvc3RuYW1lLCBzdHIoSVB2NkFkZHJlc3MoaW50KGIyYV9oZXgocmVjb3JkKSwxNikpKSkpCisJ cmV0dXJuIHJldAorCitkZWYgZ2V0VmVyaWZpY2F0aW9uRXJyb3JSZWFzb24obnVtKToKKwkiIiJU aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIFg1MDkgRXJyb3IgYmFzZWQgb24g aW50KG51bSkKKwkiIiIKKwkjIFRoZXNlIHdlcmUgdGFrZW4gZnJvbSB0aGUgTTJDcnlwdG8ubTIg Y29kZQorCXJldHVybiB7Cis1MDogIlg1MDlfVl9FUlJfQVBQTElDQVRJT05fVkVSSUZJQ0FUSU9O IiwKKzIyOiAiWDUwOV9WX0VSUl9DRVJUX0NIQUlOX1RPT19MT05HIiwKKzEwOiAiWDUwOV9WX0VS Ul9DRVJUX0hBU19FWFBJUkVEIiwKKzk6ICAiWDUwOV9WX0VSUl9DRVJUX05PVF9ZRVRfVkFMSUQi LAorMjg6ICJYNTA5X1ZfRVJSX0NFUlRfUkVKRUNURUQiLAorMjM6ICJYNTA5X1ZfRVJSX0NFUlRf UkVWT0tFRCIsCis3OiAgIlg1MDlfVl9FUlJfQ0VSVF9TSUdOQVRVUkVfRkFJTFVSRSIsCisyNzog Ilg1MDlfVl9FUlJfQ0VSVF9VTlRSVVNURUQiLAorMTI6ICJYNTA5X1ZfRVJSX0NSTF9IQVNfRVhQ SVJFRCIsCisxMTogIlg1MDlfVl9FUlJfQ1JMX05PVF9ZRVRfVkFMSUQiLAorODogICJYNTA5X1Zf RVJSX0NSTF9TSUdOQVRVUkVfRkFJTFVSRSIsCisxODogIlg1MDlfVl9FUlJfREVQVEhfWkVST19T RUxGX1NJR05FRF9DRVJUIiwKKzE0OiAiWDUwOV9WX0VSUl9FUlJPUl9JTl9DRVJUX05PVF9BRlRF Ul9GSUVMRCIsCisxMzogIlg1MDlfVl9FUlJfRVJST1JfSU5fQ0VSVF9OT1RfQkVGT1JFX0ZJRUxE IiwKKzE1OiAiWDUwOV9WX0VSUl9FUlJPUl9JTl9DUkxfTEFTVF9VUERBVEVfRklFTEQiLAorMTY6 ICJYNTA5X1ZfRVJSX0VSUk9SX0lOX0NSTF9ORVhUX1VQREFURV9GSUVMRCIsCisyNDogIlg1MDlf Vl9FUlJfSU5WQUxJRF9DQSIsCisyNjogIlg1MDlfVl9FUlJfSU5WQUxJRF9QVVJQT1NFIiwKKzE3 OiAiWDUwOV9WX0VSUl9PVVRfT0ZfTUVNIiwKKzI1OiAiWDUwOV9WX0VSUl9QQVRIX0xFTkdUSF9F WENFRURFRCIsCisxOTogIlg1MDlfVl9FUlJfU0VMRl9TSUdORURfQ0VSVF9JTl9DSEFJTiIsCis2 OiAgIlg1MDlfVl9FUlJfVU5BQkxFX1RPX0RFQ09ERV9JU1NVRVJfUFVCTElDX0tFWSIsCis0OiAg Ilg1MDlfVl9FUlJfVU5BQkxFX1RPX0RFQ1JZUFRfQ0VSVF9TSUdOQVRVUkUiLAorNTogICJYNTA5 X1ZfRVJSX1VOQUJMRV9UT19ERUNSWVBUX0NSTF9TSUdOQVRVUkUiLAorMzogICJYNTA5X1ZfRVJS X1VOQUJMRV9UT19HRVRfQ1JMIiwKKzI6ICAiWDUwOV9WX0VSUl9VTkFCTEVfVE9fR0VUX0lTU1VF Ul9DRVJUIiwKKzIwOiAiWDUwOV9WX0VSUl9VTkFCTEVfVE9fR0VUX0lTU1VFUl9DRVJUX0xPQ0FM TFkiLAorMjE6ICJYNTA5X1ZfRVJSX1VOQUJMRV9UT19WRVJJRllfTEVBRl9TSUdOQVRVUkUiLAor MDogICJYNTA5X1ZfT0sifVtpbnQobnVtKV0KKworZGVmIGdldFJlY29yZHMoaG9zdG5hbWUsIHJy dHlwZT0nQScsIHNlY3VyZT1UcnVlLCBub3Jlc29sdmVyPUZhbHNlKToKKwkiIiJEbyBhIGxvb2t1 cCBvZiBhIG5hbWUgYW5kIGEgcnJ0eXBlLCByZXR1cm5zIGEgbGlzdCBvZiBiaW5hcnkgY29kZWQg c3RyaW5ncy4gT25seSBxdWVyaWVzIGZvciBycl9jbGFzcyBJTi4iIiIKKwlnbG9iYWwgcmVzb2x2 Y29uZgorCWN0eCA9IHVuYm91bmQudWJfY3R4KCkKKwlpZiBvcy5wYXRoLmlzZmlsZShST09US0VZ KToKKwkJIyBmaWxlIGZvcm1hdCBndWVzc2luZyAtIHVuYm91bmQgc2hvdWxkIGRlYWwgd2l0aCB0 aGlzIDooCisJCXRyeToKKwkJCWN0eC5hZGRfdGFfZmlsZShST09US0VZKQorCQlleGNlcHQ6CisJ CQl1bmJvdW5kLnViX2N0eF90cnVzdGVka2V5cyhjdHgsUk9PVEtFWSkKKwkjIFVzZSB0aGUgbG9j YWwgY2FjaGUgYW5kIGVtdWxhdGUgL2V0Yy9ob3N0cworCWN0eC5ob3N0cygiL2V0Yy9ob3N0cyIp CisJaWYgcmVzb2x2Y29uZiBhbmQgbm90IG5vcmVzb2x2ZXI6CisJCWN0eC5yZXNvbHZjb25mKHJl c29sdmNvbmYpCisKKwlpZiBycnR5cGUgPT0gNTI6CisJCXJydHlwZXN0ciA9ICJUTFNBIgorCWVs c2U6CisJCXJydHlwZXN0ciA9IHJydHlwZQorCWlmIHR5cGUocnJ0eXBlKSA9PSBzdHI6CisJCWlm ICdSUl9UWVBFXycgKyBycnR5cGUgaW4gZGlyKHVuYm91bmQpOgorCQkJcnJ0eXBlID0gZ2V0YXR0 cih1bmJvdW5kLCAnUlJfVFlQRV8nICsgcnJ0eXBlKQorCQllbHNlOgorCQkJcmFpc2UgRXhjZXB0 aW9uKCdFcnJvcjogdW5rbm93biBSUiBUWVBFOiAlcy4nICUgcnJ0eXBlKQorCWVsaWYgdHlwZShy cnR5cGUpICE9IGludDoKKwkJcmFpc2UgRXhjZXB0aW9uKCdFcnJvcjogcnJ0eXBlIGluIHdyb25n IGZvcm1hdCwgbmVpdGhlciBpbnQgbm9yIHN0ci4nKQorCisJc3RhdHVzLCByZXN1bHQgPSBjdHgu cmVzb2x2ZShob3N0bmFtZSwgcnJ0eXBlPXJydHlwZSkKKwlpZiBzdGF0dXMgPT0gMCBhbmQgcmVz dWx0LmhhdmVkYXRhOgorCQlpZiBub3QgcmVzdWx0LnNlY3VyZToKKwkJCWlmIHNlY3VyZToKKwkJ CQlpZiBub3Qgbm9yZXNvbHZlciBhbmQgcmVzb2x2Y29uZjoKKwkJCQkJcmV0dmFsID0gZ2V0UmVj b3Jkcyhob3N0bmFtZSwgcnJ0eXBlLCBzZWN1cmUsIFRydWUpCisJCQkJCXByaW50KCdXYXJuaW5n OiBpbml0aWFsIHF1ZXJ5IHVzaW5nIHJlc29sdmVyIGNvbmZpZyBmaWxlIHdhcyBub3Qgc2VjdXJl ICh0cnkgb3B0aW9uIC0tcmVzb2x2Y29uZj0iIikuJywgZmlsZT1zeXMuc3RkZXJyKQorCQkJCQly ZXNvbHZjb25mID0gTm9uZQorCQkJCQlyZXR1cm4gcmV0dmFsCisJCQkJIyBUaGUgZGF0YSBpcyBp bnNlY3VyZSBhbmQgYSBzZWN1cmUgbG9va3VwIHdhcyByZXF1ZXN0ZWQKKwkJCQlyYWlzZSBJbnNl Y3VyZUxvb2t1cEV4Y2VwdGlvbignRXJyb3I6IEFuc3dlciB3YXMgbm90IEROU1NFQy1zZWN1cmUn KQorCQkJZWxzZToKKwkJCQlwcmludCgnV2FybmluZzogcXVlcnkgZGF0YSBpcyBub3Qgc2VjdXJl LicsIGZpbGU9c3lzLnN0ZGVycikKKwkJIyBJZiB3ZSBhcmUgaGVyZSB0aGUgZGF0YSB3YXMgZWl0 aGVyIHNlY3VyZSBvciBpbnNlY3VyZSBkYXRhIGlzIGFjY2VwdGVkCisJCXJldHVybiByZXN1bHQu ZGF0YS5yYXcKKwllbHNlOgorCQlyYWlzZSBETlNMb29rdXBFcnJvcignVW5zdWNjZXNzZnVsIERO UyBsb29rdXAgb3Igbm8gZGF0YSByZXR1cm5lZCBmb3IgcnJ0eXBlICVzICglcykuJyAlIChycnR5 cGVzdHIsIHJydHlwZSkpCisKKyMgaWRlbnRpY2FsIHRvIENvbm5lY3Rpb24uY29ubmVjdCgpIGV4 Y2VwdCBmb3IgdGhlIGxhc3QgcGFyYW1ldGVyCitkZWYgc3NsU3RhcnRUTFNDb25uZWN0KGNvbm5l Y3Rpb24sIGFkZHIsIHN0YXJ0dGxzPU5vbmUpOgorICAgICAgICBjb25uZWN0aW9uLnNvY2tldC5j b25uZWN0KGFkZHIpCisgICAgICAgIGNvbm5lY3Rpb24uYWRkciA9IGFkZHIKKyAgICAgICAgaWYg c3RhcnR0bHM6CisgICAgICAgICAgICAjIHByaW1pdGl2ZSBtZXRob2QsIG5vIGVycm9yIGNoZWNr cyB5ZXQKKyAgICAgICAgICAgIGlmIHN0YXJ0dGxzID09ICJzbXRwIjoKKyAgICAgICAgICAgICAg ICBkYXRhID0gY29ubmVjdGlvbi5zb2NrZXQucmVjdig1MDApCisgICAgICAgICAgICAgICAgY29u bmVjdGlvbi5zb2NrZXQuc2VuZCgiRUhMTyBNMkNyeXB0b1xyXG4iLmVuY29kZSgnYXNjaWknKSkK KyAgICAgICAgICAgICAgICBkYXRhID0gY29ubmVjdGlvbi5zb2NrZXQucmVjdig1MDApCisgICAg ICAgICAgICAgICAgY29ubmVjdGlvbi5zb2NrZXQuc2VuZCgiU1RBUlRUTFNcclxuIi5lbmNvZGUo J2FzY2lpJykpCisgICAgICAgICAgICAgICAgZGF0YSA9IGNvbm5lY3Rpb24uc29ja2V0LnJlY3Yo NTAwKQorICAgICAgICAgICAgZWxpZiBzdGFydHRscyA9PSAiaW1hcCI6CisgICAgICAgICAgICAg ICAgZGF0YSA9IGNvbm5lY3Rpb24uc29ja2V0LnJlY3YoNTAwKQorICAgICAgICAgICAgICAgIGNv bm5lY3Rpb24uc29ja2V0LnNlbmQoIi4gU1RBUlRUTFNcclxuIi5lbmNvZGUoJ2FzY2lpJykpCisg ICAgICAgICAgICAgICAgZGF0YSA9IGNvbm5lY3Rpb24uc29ja2V0LnJlY3YoNTAwKQorICAgICAg ICAgICAgZWxpZiBzdGFydHRscyA9PSAiZnRwIjoKKyAgICAgICAgICAgICAgICBkYXRhID0gY29u bmVjdGlvbi5zb2NrZXQucmVjdig1MDApCisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5zb2Nr ZXQuc2VuZCgiQVVUSCBUTFNcclxuIi5lbmNvZGUoJ2FzY2lpJykpCisgICAgICAgICAgICAgICAg ZGF0YSA9IGNvbm5lY3Rpb24uc29ja2V0LnJlY3YoNTAwKQorICAgICAgICAgICAgZWxpZiBzdGFy dHRscyA9PSAicG9wMyI6CisgICAgICAgICAgICAgICAgZGF0YSA9IGNvbm5lY3Rpb24uc29ja2V0 LnJlY3YoNTAwKQorICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uc29ja2V0LnNlbmQoIlNUTFNc clxuIi5lbmNvZGUoJ2FzY2lpJykpCisgICAgICAgICAgICAgICAgZGF0YSA9IGNvbm5lY3Rpb24u c29ja2V0LnJlY3YoNTAwKQorICAgICAgICBjb25uZWN0aW9uLnNldHVwX3NzbCgpCisgICAgICAg IGNvbm5lY3Rpb24uc2V0X2Nvbm5lY3Rfc3RhdGUoKQorICAgICAgICByZXQgPSBjb25uZWN0aW9u LmNvbm5lY3Rfc3NsKCkKKyAgICAgICAgY2hlY2sgPSBnZXRhdHRyKGNvbm5lY3Rpb24sICdwb3N0 Q29ubmVjdGlvbkNoZWNrJywgY29ubmVjdGlvbi5jbGllbnRQb3N0Q29ubmVjdGlvbkNoZWNrKQor ICAgICAgICBpZiBjaGVjayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIG5vdCBjaGVjayhj b25uZWN0aW9uLmdldF9wZWVyX2NlcnQoKSwgY29ubmVjdGlvbi5hZGRyWzBdKToKKyAgICAgICAg ICAgICAgICByYWlzZSBDaGVja2VyLlNTTFZlcmlmaWNhdGlvbkVycm9yKCdwb3N0IGNvbm5lY3Rp b24gY2hlY2sgZmFpbGVkJykKKyAgICAgICAgcmV0dXJuIHJldAorCitkZWYgZ2V0SGFzaChjZXJ0 aWZpY2F0ZSwgbXR5cGUpOgorCSIiIkhhc2hlcyB0aGUgY2VydGlmaWNhdGUgYmFzZWQgb24gdGhl IG10eXBlLgorCVRoZSBjZXJ0aWZpY2F0ZSBzaG91bGQgYmUgYW4gTTJDcnlwdG8uWDUwOS5YNTA5 IG9iamVjdCAob3IgdGhlIHJlc3VsdCBvZiB0aGUgZ2V0X3B1YmtleSgpIGZ1bmN0aW9uIG9uIHNh aWQgb2JqZWN0KQorCSIiIgorCWNlcnRpZmljYXRlID0gY2VydGlmaWNhdGUuYXNfZGVyKCkKKwlp ZiBtdHlwZSA9PSAwOgorCQlyZXR1cm4gY2VydGlmaWNhdGUuaGV4KCkKKwllbGlmIG10eXBlID09 IDE6CisJCXJldHVybiBzaGEyNTYoY2VydGlmaWNhdGUpLmhleGRpZ2VzdCgpCisJZWxpZiBtdHlw ZSA9PSAyOgorCQlyZXR1cm4gc2hhNTEyKGNlcnRpZmljYXRlKS5oZXhkaWdlc3QoKQorCWVsc2U6 CisJCXJhaXNlIEV4Y2VwdGlvbignbXR5cGUgc2hvdWxkIGJlIDAsMSwyJykKKworZGVmIGdldFRM U0EoaG9zdG5hbWUsIHBvcnQ9NDQzLCBwcm90b2NvbD0ndGNwJywgc2VjdXJlPVRydWUpOgorCSIi IgorCVRoaXMgZnVuY3Rpb24gdHJpZXMgdG8gZG8gYSBzZWN1cmUgbG9va3VwIG9mIHRoZSBUTFNB IHJlY29yZC4KKwlBdCB0aGUgbW9tZW50IGl0IHJlcXVlc3RzIHRoZSBUWVBFNTIgcmVjb3JkIGFu ZCBwYXJzZXMgaXQgaW50byBhICd2YWxpZCcgVExTQSByZWNvcmQKKwlJdCByZXR1cm5zIGEgbGlz dCBvZiBUTFNBUmVjb3JkIG9iamVjdHMKKwkiIiIKKwlpZiBob3N0bmFtZVstMV0gIT0gJy4nOgor CQlob3N0bmFtZSArPSAnLicKKworCWlmIG5vdCBwcm90b2NvbC5sb3dlcigpIGluIFsndGNwJywg J3VkcCcsICdzY3RwJ106CisJCXJhaXNlIEV4Y2VwdGlvbignRXJyb3I6IHVua25vd24gcHJvdG9j b2w6ICVzLiBTaG91bGQgYmUgb25lIG9mIHRjcCwgdWRwIG9yIHNjdHAnICUgcHJvdG9jb2wpCisJ dHJ5OgorCQlpZiBwb3J0ID09ICcqJzoKKwkJCXJlY29yZHMgPSBnZXRSZWNvcmRzKCcqLl8lcy4l cycgJSAocHJvdG9jb2wubG93ZXIoKSwgaG9zdG5hbWUpLCBycnR5cGU9NTIsIHNlY3VyZT1zZWN1 cmUpCisJCWVsc2U6CisJCQlyZWNvcmRzID0gZ2V0UmVjb3JkcygnXyVzLl8lcy4lcycgJSAocG9y dCwgcHJvdG9jb2wubG93ZXIoKSwgaG9zdG5hbWUpLCBycnR5cGU9NTIsIHNlY3VyZT1zZWN1cmUp CisJZXhjZXB0IEluc2VjdXJlTG9va3VwRXhjZXB0aW9uIGFzIGU6CisJCXByaW50KHN0cihlKSkK KwkJc3lzLmV4aXQoMSkKKwlleGNlcHQgRE5TTG9va3VwRXJyb3IgYXMgZToKKwkJcHJpbnQoJ1Vu YWJsZSB0byByZXNvbHZlICVzOiAlcycgJSAoaG9zdG5hbWUsIHN0cihlKSkpCisJCXN5cy5leGl0 KDEpCisJcmV0ID0gW10KKwlmb3IgcmVjb3JkIGluIHJlY29yZHM6CisJCWhleGRhdGEgPSBiMmFf aGV4KHJlY29yZCkKKwkJaWYgcG9ydCA9PSAnKic6CisJCQlyZXQuYXBwZW5kKFRMU0FSZWNvcmQo JyouXyVzLiVzJyAlIChwcm90b2NvbC5sb3dlcigpLCBob3N0bmFtZSksIGludChoZXhkYXRhWzA6 Ml0sMTYpLCBpbnQoaGV4ZGF0YVsyOjRdLDE2KSwgaW50KGhleGRhdGFbNDo2XSwxNiksIGhleGRh dGFbNjpdLmRlY29kZSgnYXNjaWknKSkpCisJCWVsc2U6CisJCQlyZXQuYXBwZW5kKFRMU0FSZWNv cmQoJ18lcy5fJXMuJXMnICUgKHBvcnQsIHByb3RvY29sLmxvd2VyKCksIGhvc3RuYW1lKSwgaW50 KGhleGRhdGFbMDoyXSwxNiksIGludChoZXhkYXRhWzI6NF0sMTYpLCBpbnQoaGV4ZGF0YVs0OjZd LDE2KSwgaGV4ZGF0YVs2Ol0uZGVjb2RlKCdhc2NpaScpKSkKKwlyZXR1cm4gcmV0CisKK2RlZiB2 ZXJpZnlDZXJ0TWF0Y2gocmVjb3JkLCBjZXJ0KToKKwkiIiIKKwlWZXJpZnkgdGhlIGNlcnRpZmlj YXRlIHdpdGggdGhlIHJlY29yZC4KKwlyZWNvcmQgc2hvdWxkIGJlIGEgVExTQVJlY29yZCBhbmQg Y2VydCBzaG91bGQgYmUgYSBNMkNyeXB0by5YNTA5Llg1MDkKKwkiIiIKKwlpZiBub3QgaXNpbnN0 YW5jZShjZXJ0LCBYNTA5Llg1MDkpOgorCQlyZXR1cm4KKwlpZiBub3QgaXNpbnN0YW5jZShyZWNv cmQsIFRMU0FSZWNvcmQpOgorCQlyZXR1cm4KKworCWlmIHJlY29yZC5zZWxlY3RvciA9PSAxOgor CQljZXJ0aGFzaCA9IGdldEhhc2goY2VydC5nZXRfcHVia2V5KCksIHJlY29yZC5tdHlwZSkKKwll bHNlOgorCQljZXJ0aGFzaCA9IGdldEhhc2goY2VydCwgcmVjb3JkLm10eXBlKQorCisJaWYgbm90 IGNlcnRoYXNoOgorCQlyZXR1cm4KKworCWlmIGNlcnRoYXNoID09IHJlY29yZC5jZXJ0OgorCQly ZXR1cm4gVHJ1ZQorCWVsc2U6CisJCXJldHVybiBGYWxzZQorCitkZWYgdmVyaWZ5Q2VydE5hbWVX aXRoSG9zdE5hbWUoY2VydCwgaG9zdG5hbWUsIHdpdGhfbXNnPUZhbHNlKToKKwkiIiJWZXJpZnkg dGhlIG5hbWUgb24gdGhlIGNlcnRpZmljYXRlIHdpdGggYSBob3N0bmFtZSwgd2UgbmVlZCB0aGlz IGJlY2F1c2Ugd2UgZ2V0IHRoZSBjZXJ0IGJhc2VkIG9uIElQIGFkZHJlc3MgYW5kIHRodXNseSBj YW5ub3QgcmVseSBvbiBNMkNyeXB0byB0byB2ZXJpZnkgdGhpcyIiIgorCWlmIG5vdCBpc2luc3Rh bmNlKGNlcnQsIFg1MDkuWDUwOSk6CisJCXJldHVybgorCWlmIG5vdCBpc2luc3RhbmNlKGhvc3Ru YW1lLCBzdHIpOgorCQlyZXR1cm4KKworCWlmIGhvc3RuYW1lWy0xXSA9PSAnLic6CisJCWhvc3Ru YW1lID0gaG9zdG5hbWVbMDotMV0KKwlob3N0bmFtZSA9IGhvc3RuYW1lLmxvd2VyKCkKKworCWNl cnRuYW1lcyA9IFtdCisJZm9yIGVudHJ5IGluIHN0cihjZXJ0LmdldF9zdWJqZWN0KCkpLmxvd2Vy KCkuc3BsaXQoIi8iKToKKwkJaWYgZW50cnkuc3RhcnRzd2l0aCgiY249Iik6CisJCQljZXJ0bmFt ZXMuYXBwZW5kKGVudHJ5WzM6XSkKKwl0cnk6CisJCWZvciB2YWx1ZSBpbiByZS5zcGxpdCgiLCA/ IiwgY2VydC5nZXRfZXh0KCdzdWJqZWN0QWx0TmFtZScpLmdldF92YWx1ZSgpLmxvd2VyKCkpOgor CQkJaWYgdmFsdWUuc3RhcnRzd2l0aCgiZG5zOiIpOgorCQkJCWNlcnRuYW1lcy5hcHBlbmQodmFs dWVbNDpdKQorCWV4Y2VwdDoKKwkJcGFzcworCWlmIGhvc3RuYW1lIGluIGNlcnRuYW1lczoKKwkJ cmV0dXJuIFRydWUKKwlmb3IgY2VydG5hbWUgaW4gY2VydG5hbWVzOgorCQlpZiBjZXJ0bmFtZVsw XSA9PSAnKicgYW5kIGhvc3RuYW1lLmVuZHN3aXRoKGNlcnRuYW1lWzE6XSk6CisJCQlyZXR1cm4g VHJ1ZQorCisJaWYgd2l0aF9tc2c6CisJCXByaW50KCdXQVJOSU5HOiBOYW1lIG9uIHRoZSBjZXJ0 aWZpY2F0ZSAoU3ViamVjdDogJXMsIFN1YmplY3RBbHROYW1lOiAlcykgZG9lc25cJ3QgbWF0Y2gg cmVxdWVzdGVkIGhvc3RuYW1lICglcykuJyAlIChzdHIoY2VydC5nZXRfc3ViamVjdCgpKSwgY2Vy dC5nZXRfZXh0KCdzdWJqZWN0QWx0TmFtZScpLmdldF92YWx1ZSgpLCBob3N0bmFtZSkpCisJcmV0 dXJuIEZhbHNlCisKK2RlZiBjaGVja0NoYWluTGluayhjaGFpbiwgcmVjb3JkPU5vbmUpOgorCXBy ZXZpb3VzX2lzc3VlciA9IE5vbmUKKwljaGFpbmVkID0gVHJ1ZQorCW1hdGNoZWQgPSBOb25lCisJ Zm9yIGNlcnQgaW4gY2hhaW46CisJCWlmIHByZXZpb3VzX2lzc3VlcjoKKwkJCWlmIG5vdCBzdHIo cHJldmlvdXNfaXNzdWVyKSA9PSBzdHIoY2VydC5nZXRfc3ViamVjdCgpKTogIyBUaGUgY2hhaW4g Y2Fubm90IGJlIHZhbGlkCisJCQkJY2hhaW5lZCA9IEZhbHNlCisJCQkJYnJlYWsKKwkJcHJldmlv dXNfaXNzdWVyID0gY2VydC5nZXRfaXNzdWVyKCkKKwkJaWYgcmVjb3JkIGFuZCB2ZXJpZnlDZXJ0 TWF0Y2gocmVjb3JkLCBjZXJ0KToKKwkJCW1hdGNoZWQgPSBjZXJ0CisJcmV0dXJuIGNoYWluZWQs IG1hdGNoZWQKKworZGVmIGdldExvY2FsQ2hhaW4oZmlsZW5hbWUsIGRlYnVnKToKKwkiIiJSZXR1 cm5zIGxpc3Qgb2YgTTJDcnlwdG8uWDUwOS5YNTA5IG9iamVjdHMgYW5kIHZlcmlmaWNhdGlvbiBy ZXN1bHQiIiIKKwljaGFpbiA9IFtdCisJYmlvID0gQklPLm9wZW5maWxlKGZpbGVuYW1lKQorCUVy ciA9IE5vbmUKKwl3aGlsZSBUcnVlOgorCQl0cnk6CisJCQljcHRyID0gbTIueDUwOV9yZWFkX3Bl bShiaW8uX3B0cigpKQorCQlleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisJCQlFcnIgPSBlCisJCQli cmVhazsKKwkJaWYgbm90IGNwdHI6CisJCQlicmVhaworCQljaGFpbi5hcHBlbmQoWDUwOS5YNTA5 KGNwdHIsIF9weWZyZWU9MSkpCisJaWYgbm90IGNoYWluOgorCQlpZiBFcnI6CisJCQlyYWlzZQor CQllbHNlOgorCQkJcmFpc2UgRXhjZXB0aW9uKCJDb3VsZCBub3QgbG9hZCAlcyIgJSBmaWxlbmFt ZSkKKwkjIEZJWE1FIC0gaXMgdGhpcyBwb3NzaWJsZSB1c2luZyB0aGUgbGlicmFyeSAod2l0aG91 dCBhIGNhbGwgdG8gb3BlbnNzbCB0b29sKT8KKwljbWQgPSBbIm9wZW5zc2wiLCAidmVyaWZ5Iiwg ZmlsZW5hbWVdCisJcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzdGRvdXQ9c3VicHJv Y2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorCShzdGRvdXQsIHN0ZGVycikgPSBw cm9jZXNzLmNvbW11bmljYXRlKCkKKwlpZiBkZWJ1ZzoKKwkJcHJpbnQoc3RkZXJyLCBmaWxlPXN5 cy5zdGRlcnIpCisJaWYgc3Rkb3V0LmVuZHN3aXRoKGIiT0tcbiIpOgorCQl2ZXJpZnlfcmVzdWx0 ID0gMAorCWVsc2U6CisJCXZlcmlmeV9yZXN1bHQgPSAiJXMlcyIgJSAoc3Rkb3V0LCBzdGRlcnIp CisJcmV0dXJuIGNoYWluLCB2ZXJpZnlfcmVzdWx0CisKK2RlZiB1c2FnZVRleHQodXNhZ2UpOgor CW5hbWVzID0gWyJQS0lYLUNBIiwgIlBLSVgtRUUiLCAiREFORS1UQSIsICJEQU5FLUVFIl0KKwly ZXR1cm4gIlVzYWdlICVkIFslc10iICUgKHVzYWdlLCBuYW1lc1t1c2FnZV0pCisKK2RlZiB2ZXJp ZnlDaGFpbihyZWNvcmQsIGNoYWluLCB2ZXJpZnlfcmVzdWx0LCBwcmVfZXhpdCwgbG9jYWwsIHNv dXJjZSk6CisJc291cmNlID0gIiVzIGZvciAlcyIgJSAocmVjb3JkLmdldFNob3J0VGV4dCgpLCBz b3VyY2UpCisJaWYgbG9jYWw6CisJCXRleHRfY2VydCA9ICJMb2NhbCBjZXJ0aWZpY2F0ZSIKKwkJ dGV4dF9jaGFpbiA9ICJjZXJ0aWZpY2F0ZSBpbiB0aGUgbG9jYWwgY2VydGlmaWNhdGUgY2hhaW4i CisJZWxzZToKKwkJdGV4dF9jZXJ0ID0gIkNlcnRpZmljYXRlIG9mZmVyZWQgYnkgdGhlIHNlcnZl ciIKKwkJdGV4dF9jaGFpbiA9ICJjZXJ0aWZpY2F0ZSBpbiB0aGUgY2VydGlmaWNhdGUgY2hhaW4g b2ZmZXJlZCBieSB0aGUgc2VydmVyIgorCisJaWYgbm90IHZlcmlmeUNlcnROYW1lV2l0aEhvc3RO YW1lKGNlcnQ9Y2hhaW5bMF0sIGhvc3RuYW1lPXN0cihhcmdzLmhvc3QpLCB3aXRoX21zZz1UcnVl KToKKwkJIyBUaGUgbmFtZSBvbiB0aGUgY2VydCBkb2Vzbid0IG1hdGNoIHRoZSBob3N0bmFtZS4u LiB3ZSBkb24ndCB2ZXJpZnkgdGhlIFRMU0EgcmVjb3JkCisJCXByaW50KCdDYXV0aW9uOiAlcyBk b2VzIG5vdCBtYXRjaCBob3N0bmFtZSAoJXMpJyAlICh0ZXh0X2NlcnQsIHNvdXJjZSkpCisJdXQg PSB1c2FnZVRleHQocmVjb3JkLnVzYWdlKQorCWlmIHJlY29yZC51c2FnZSA9PSAxOiAjIEVuZC1o b3N0IGNlcnQKKwkJY2hhaW5lZCwgbWF0Y2hlZCA9IGNoZWNrQ2hhaW5MaW5rKChjaGFpblswXSwp LCByZWNvcmQpCisJCWlmIG5vdCBjaGFpbmVkOgorCQkJcHJpbnQoIldBUk46IENlcnRpZmljYXRl cyBkb24ndCBjaGFpbiIpCisJCWlmIG1hdGNoZWQ6CisJCQlpZiB2ZXJpZnlfcmVzdWx0ID09IDA6 ICMgVGhlIGNlcnQgY2hhaW5zIHRvIGEgdmFsaWQgQ0EgY2VydCBhY2NvcmRpbmcgdG8gdGhlIHN5 c3RlbS1jZXJ0aWZpY2F0ZXMKKwkJCQlwcmludCgnU1VDQ0VTUyAoJXMpOiAlcyBtYXRjaGVzIHRo ZSBvbmUgbWVudGlvbmVkIGluIHRoZSBUTFNBIHJlY29yZCBhbmQgY2hhaW5zIHRvIGEgdmFsaWQg Q0EgY2VydGlmaWNhdGUgKCVzKScgJSAodXQsIHRleHRfY2VydCwgc291cmNlKSkKKwkJCWVsc2U6 CisJCQkJaWYgbG9jYWw6CisJCQkJCXJlYXNvbiA9IHZlcmlmeV9yZXN1bHQKKwkJCQllbHNlOgor CQkJCQlyZWFzb24gPSBnZXRWZXJpZmljYXRpb25FcnJvclJlYXNvbih2ZXJpZnlfcmVzdWx0KQor CQkJCXByaW50KCdGQUlMICglcyk6ICVzIG1hdGNoZXMgdGhlIG9uZSBtZW50aW9uZWQgaW4gdGhl IFRMU0EgcmVjb3JkIGJ1dCB0aGUgZm9sbG93aW5nIGVycm9yIHdhcyByYWlzZWQgZHVyaW5nIFBL SVggdmFsaWRhdGlvbiAoJXMpOiAlcycgJSAodXQsIHRleHRfY2VydCwgc291cmNlLCByZWFzb24p KQorCQkJCWlmIHByZV9leGl0ID09IDA6IHByZV9leGl0ID0gMgorCQkJaWYgYXJncy5kZWJ1Zzog cHJpbnQoJ1RoZSBtYXRjaGVkIGNlcnRpZmljYXRlIGhhcyBTdWJqZWN0OiAlcycgJSBjZXJ0Lmdl dF9zdWJqZWN0KCkpCisJCWVsc2U6CisJCQlwcmludCgnRkFJTDogJXMgZG9lcyBub3QgbWF0Y2gg dGhlIFRMU0EgcmVjb3JkICglcyknICUgKHRleHRfY2VydCwgc291cmNlKSkKKwkJCWlmIHByZV9l eGl0ID09IDA6IHByZV9leGl0ID0gMgorCisJZWxpZiByZWNvcmQudXNhZ2UgPT0gMDogIyBDQSBj b25zdHJhaW50CisJCSMgRklYTUU6IERvZXMgbmVpdGhlciBoYW5kbGUgY2hhaW4gZGF0YSBpbiBm dWxsIGNlcnQgVExTQSByZWNvcmRzICh0eXBlIDApIGNvcnJlY3RseQorCQkjIG5vciBoYW5kbGVz IHNob3J0IGNlcnRpZmljYXRpb24gY2hhaW5zCisJCSMgSW4gdGhlc2UgY2FzZSB0aGUgY2hhaW4g c2hvdWxkIGJlIGNvbXBsZXRlZCB3aXRoIG1pc3NpbmcgcmVjb3JkcyBlaXRoZXIKKwkJIyBmcm9t IFRMU0Egb3IgbG9jYWwgY2VydGlmaWNhdGUgc3RvcmUKKworCQkjIFJlbW92ZSB0aGUgZmlyc3Qg KD0gRW5kLUVudGl0eSBjZXJ0KSBmcm9tIHRoZSBjaGFpbgorCQljaGFpbmVkLCBtYXRjaGVkID0g Y2hlY2tDaGFpbkxpbmsoY2hhaW5bMTpdLCByZWNvcmQpCisJCWlmIG5vdCBjaGFpbmVkOgorCQkJ cHJpbnQoIldBUk46IENlcnRpZmljYXRlcyBkb24ndCBjaGFpbiIpCisJCWlmIG1hdGNoZWQ6CisJ CQlpZiBjZXJ0LmNoZWNrX2NhKCk6CisJCQkJaWYgdmVyaWZ5X3Jlc3VsdCA9PSAwOgorCQkJCQlw cmludCgnU1VDQ0VTUyAoJXMpOiBBICVzIG1hdGNoZXMgdGhlIG9uZSBtZW50aW9uZWQgaW4gdGhl IFRMU0EgcmVjb3JkIGFuZCBpcyBhIENBIGNlcnRpZmljYXRlICglcyknICUgKHV0LCB0ZXh0X2No YWluLCBzb3VyY2UpKQorCQkJCWVsc2U6CisJCQkJCWlmIGxvY2FsOgorCQkJCQkJcmVhc29uID0g dmVyaWZ5X3Jlc3VsdAorCQkJCQllbHNlOgorCQkJCQkJcmVhc29uID0gZ2V0VmVyaWZpY2F0aW9u RXJyb3JSZWFzb24odmVyaWZ5X3Jlc3VsdCkKKwkJCQkJcHJpbnQoJ0ZBSUwgKCVzKTogQSAlcyBt YXRjaGVzIHRoZSBvbmUgbWVudGlvbmVkIGluIHRoZSBUTFNBIHJlY29yZCBhbmQgaXMgYSBDQSBj ZXJ0aWZpY2F0ZSwgYnV0IHRoZSBmb2xsb3dpbmcgZXJyb3Igd2FzIHJhaXNlZCBkdXJpbmcgUEtJ WCB2YWxpZGF0aW9uICglcyk6ICVzJyAlICh1dCwgdGV4dF9jaGFpbiwgc291cmNlLCByZWFzb24p KQorCQkJCQlpZiBwcmVfZXhpdCA9PSAwOiBwcmVfZXhpdCA9IDIKKwkJCWVsc2U6CisJCQkJcHJp bnQoJ0ZBSUwgKCVzKTogQSAlcyBtYXRjaGVzIHRoZSBvbmUgbWVudGlvbmVkIGluIHRoZSBUTFNB IHJlY29yZCBidXQgaXMgbm90IGEgQ0EgY2VydGlmaWNhdGUgKCVzKScgJSAodXQsIHRleHRfY2hh aW4sIHNvdXJjZSkpCisJCQkJaWYgcHJlX2V4aXQgPT0gMDogcHJlX2V4aXQgPSAyCisJCQlpZiBh cmdzLmRlYnVnOiBwcmludCgnVGhlIG1hdGNoZWQgY2VydGlmaWNhdGUgaGFzIFN1YmplY3Q6ICVz JyAlIGNlcnQuZ2V0X3N1YmplY3QoKSkKKwkJZWxzZToKKwkJCXByaW50KCdGQUlMICglcyk6IE5v ICVzIG1hdGNoZXMgdGhlIFRMU0EgcmVjb3JkICglcyknICUgKHV0LCB0ZXh0X2NoYWluLCBzb3Vy Y2UpKQorCQkJaWYgcHJlX2V4aXQgPT0gMDogcHJlX2V4aXQgPSAyCisKKwllbGlmIHJlY29yZC51 c2FnZSA9PSAyOiAjIFVzYWdlIDIsIHVzZSB0aGUgY2VydCBpbiB0aGUgcmVjb3JkIGFzIHRydXN0 IGFuY2hvcgorCQkjIEZJWE1FOiBEb2VzIG5vdCBoYW5kbGUgY2hhaW4gZGF0YSBpbiBmdWxsIGNl cnQgVExTQSByZWNvcmRzICh0eXBlIDApIGNvcnJlY3RseQorCQkjIEluIHRoaXMgY2FzZSB0aGUg Y2hhaW4gc2hvdWxkIGJlIGNvbXBsZXRlZCB3aXRoIG1pc3NpbmcgcmVjb3JkcyBpZiBjaGFpbiBp cworCQkjIG5vdCBjb21wbGV0ZQorCQljaGFpbmVkLCBtYXRjaGVkID0gY2hlY2tDaGFpbkxpbmso Y2hhaW4sIHJlY29yZCkKKwkJaWYgbWF0Y2hlZDoKKwkJCWlmIG5vdCBjaGFpbmVkOgorCQkJCXBy aW50KCJXQVJOOiBDZXJ0aWZpY2F0ZXMgZG9uJ3QgY2hhaW4iKQorCQkJcHJpbnQoJ1NVQ0NFU1Mg KCVzKTogQSAlcyAoaW5jbHVkaW5nIHRoZSBlbmQtZW50aXR5IGNlcnRpZmljYXRlKSBtYXRjaGVz IHRoZSBUTFNBIHJlY29yZCAoJXMpJyAlICh1dCwgdGV4dF9jaGFpbiwgc291cmNlKSkKKwkJCWlm IGFyZ3MuZGVidWc6IHByaW50KCdUaGUgbWF0Y2hlZCBjZXJ0aWZpY2F0ZSBoYXMgU3ViamVjdDog JXMnICUgbWF0Y2hlZC5nZXRfc3ViamVjdCgpKQorCQllbHNlOgorCQkJaWYgbm90IGNoYWluZWQ6 CisJCQkJcHJpbnQoIkZBSUw6IENlcnRpZmljYXRlcyBkb24ndCBjaGFpbiIpCisJCQlwcmludCgn RkFJTCAoJXMpOiBObyAlcyAoaW5jbHVkaW5nIHRoZSBlbmQtZW50aXR5IGNlcnRpZmljYXRlKSBt YXRjaGVzIHRoZSBUTFNBIHJlY29yZCAoJXMpJyAlICh1dCwgdGV4dF9jaGFpbiwgc291cmNlKSkK KwkJCWlmIHByZV9leGl0ID09IDA6IHByZV9leGl0ID0gMgorCisJZWxpZiByZWNvcmQudXNhZ2Ug PT0gMzogIyBFRSBjZXJ0IE1VU1QgbWF0Y2gKKwkJY2hhaW5lZCwgbWF0Y2hlZCA9IGNoZWNrQ2hh aW5MaW5rKChjaGFpblswXSwpLCByZWNvcmQpCisJCWlmIG5vdCBjaGFpbmVkOgorCQkJcHJpbnQo IldBUk46IENlcnRpZmljYXRlcyBkb24ndCBjaGFpbiIpCisJCWlmIG1hdGNoZWQ6CisJCQlwcmlu dCgnU1VDQ0VTUyAoJXMpOiAlcyBtYXRjaGVzIHRoZSBUTFNBIHJlY29yZCAoJXMpJyAlICh1dCwg dGV4dF9jZXJ0LCBzb3VyY2UpKQorCQkJaWYgYXJncy5kZWJ1ZzogcHJpbnQoJ1RoZSBtYXRjaGVk IGNlcnRpZmljYXRlIGhhcyBTdWJqZWN0OiAlcycgJSBjaGFpblswXS5nZXRfc3ViamVjdCgpKQor CQllbHNlOgorCQkJcHJpbnQoJ0ZBSUwgKCVzKTogJXMgZG9lcyBub3QgbWF0Y2ggdGhlIFRMU0Eg cmVjb3JkICglcyknICUgKHV0LCB0ZXh0X2NlcnQsIHNvdXJjZSkpCisJCQlpZiBwcmVfZXhpdCA9 PSAwOiBwcmVfZXhpdCA9IDIKKwlyZXR1cm4gcHJlX2V4aXQKKworY2xhc3MgVExTQVJlY29yZDoK KwkiIiJXaGVuIGluc3RhbmNpYXRlZCwgdGhpcyBjbGFzcyBjb250YWlucyBhbGwgdGhlIGZpZWxk cyBvZiBhIFRMU0EgcmVjb3JkLgorCSIiIgorCWRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB1c2Fn ZSwgc2VsZWN0b3IsIG10eXBlLCBjZXJ0KToKKwkJciIiIm5hbWUgaXMgdGhlIG5hbWUgb2YgdGhl IFJSIGluIHRoZSBmb3JtYXQ6IC9eKF9cZHsxLDV9fFwqKVwuXyh0Y3B8dWRwfHNjdHApXC4oW2Et ejAtOV0qXC4pezIsfSQvCisJCXVzYWdlLCBzZWxlY3RvciBhbmQgbXR5cGUgc2hvdWxkIGJlIGFu IGludGVnZXIKKwkJY2VydCBzaG91bGQgYmUgYSBoZXhpZGVjaW1hbCBzdHJpbmcgcmVwcmVzZW50 aW5nIHRoZSBjZXJ0aWZpY2F0ZSB0byBiZSBtYXRjaGVkIGZpZWxkCisJCSIiIgorCQl0cnk6CisJ CQlzZWxmLnJydHlwZSA9IDUyICAgICMgVExTQSBwZXIgaHR0cHM6Ly93d3cuaWFuYS5vcmcvYXNz aWdubWVudHMvZG5zLXBhcmFtZXRlcnMKKwkJCXNlbGYucnJjbGFzcyA9IDEgICAgIyBJTgorCQkJ c2VsZi5uYW1lID0gc3RyKG5hbWUpCisJCQlzZWxmLnVzYWdlID0gaW50KHVzYWdlKQorCQkJc2Vs Zi5zZWxlY3RvciA9IGludChzZWxlY3RvcikKKwkJCXNlbGYubXR5cGUgPSBpbnQobXR5cGUpCisJ CQlzZWxmLmNlcnQgPSBjZXJ0CisJCWV4Y2VwdDoKKwkJCXJhaXNlIEV4Y2VwdGlvbignSW52YWxp ZCB2YWx1ZSBwYXNzZWQsIHVuYWJsZSB0byBjcmVhdGUgYSBUTFNBUmVjb3JkJykKKworCWRlZiBn ZXRSZWNvcmQoc2VsZiwgZ2VuZXJpYz1GYWxzZSk6CisJCSIiIlJldHVybnMgdGhlIFJSIHN0cmlu ZyBvZiB0aGlzIFRMU0FSZWNvcmQsIGVpdGhlciBpbiByZmMgKGRlZmF1bHQpIG9yIGdlbmVyaWMg Zm9ybWF0IiIiCisJCWlmIGdlbmVyaWM6CisJCQlyZXR1cm4gciclcyBJTiBUWVBFNTIgXCMgJXMg JXMlcyVzJXMnICUgKHNlbGYubmFtZSwgKGxlbihzZWxmLmNlcnQpLy8yKSszICwgc2VsZi5fdG9I ZXgoc2VsZi51c2FnZSksIHNlbGYuX3RvSGV4KHNlbGYuc2VsZWN0b3IpLCBzZWxmLl90b0hleChz ZWxmLm10eXBlKSwgc2VsZi5jZXJ0KQorCQlyZXR1cm4gJyVzIElOIFRMU0EgJXMgJXMgJXMgJXMn ICUgKHNlbGYubmFtZSwgc2VsZi51c2FnZSwgc2VsZi5zZWxlY3Rvciwgc2VsZi5tdHlwZSwgc2Vs Zi5jZXJ0KQorCisJZGVmIF90b0hleChzZWxmLCB2YWwpOgorCQkiIiJIZWxwZXIgZnVuY3Rpb24g dG8gY3JlYXRlIGhleCBzdHJpbmdzIGZyb20gaW50ZWdlcnMiIiIKKwkJcmV0dXJuICIlMC4yeCIg JSB2YWwKKworCWRlZiBpc1ZhbGlkKHNlbGYsIHJhaXNlRXhjZXB0aW9uPUZhbHNlKToKKwkJIiIi Q2hlY2sgd2hldGhlciBhbGwgZmllbGRzIGluIHRoZSBUTFNBIHJlY29yZCBhcmUgY29uZm9ybWlu ZyB0byB0aGUgc3BlYyBhbmQgY2hlY2sgaWYgdGhlIHBvcnQsIHByb3RvY29sIGFuZCBuYW1lIGFy ZSBnb29kIiIiCisJCWVyciA9W10KKwkJdHJ5OgorCQkJaWYgbm90IDEgPD0gaW50KHNlbGYuZ2V0 UG9ydCgpKSA8PSA2NTUzNToKKwkJCQllcnIuYXBwZW5kKCdQb3J0ICVzIG5vdCB3aXRoaW4gY29y cmVjdCByYW5nZSAoMSA8PSBwb3J0IDw9IDY1NTM1KScgJSBzZWxmLmdldFBvcnQoKSkKKwkJZXhj ZXB0OgorCQkJaWYgc2VsZi5nZXRQb3J0KCkgIT0gJyonOgorCQkJCWVyci5hcHBlbmQoJ1BvcnQg JXMgbm90IGEgbnVtYmVyJyAlIHNlbGYuZ2V0UG9ydCgpKQorCQlpZiBub3Qgc2VsZi51c2FnZSBp biBbMCwxLDIsM106CisJCQllcnIuYXBwZW5kKCdVc2FnZTogaW52YWxpZCAoJXMgaXMgbm90IG9u ZSBvZiAwIFtQS0lYLUNBXSwgMSBbUEtJWC1FRV0sIDIgW0RBTkUtVEFdIG9yIDMgW0RBTkUtRUVd KScgJSBzZWxmLnVzYWdlKQorCQlpZiBub3Qgc2VsZi5zZWxlY3RvciBpbiBbMCwxXToKKwkJCWVy ci5hcHBlbmQoJ1NlbGVjdG9yOiBpbnZhbGlkICglcyBpcyBub3Qgb25lIG9mIDAgW0NlcnRdIG9y IDEgW1NQS0ldKScgJSBzZWxmLnNlbGVjdG9yKQorCQlpZiBub3Qgc2VsZi5tdHlwZSBpbiBbMCwx LDJdOgorCQkJZXJyLmFwcGVuZCgnTWF0Y2hpbmcgVHlwZTogaW52YWxpZCAoJXMgaXMgbm90IG9u ZSBvZiAwIFtGVUxMXSwgMSBbU0hBLTI1Nl0gb3IgMiBbU0hBLTUxMl0pJyAlIHNlbGYubXR5cGUp CisJCWlmIG5vdCBzZWxmLmlzTmFtZVZhbGlkKCk6CisJCQllcnIuYXBwZW5kKCdOYW1lICglcykg aXMgbm90IGluIHRoZSBjb3JyZWN0IGZvcm1hdDogX3BvcnRudW1iZXIuX3RyYW5zcG9ydHByb3Rv Y29sLmhvc3RuYW1lLmRvbS4nICUgc2VsZi5uYW1lKQorCQkjIEEgY2VydGlmaWNhdGUgbGVuZ3Ro IG9mIDAgaXMgYWNjZXB0ZWQKKwkJaWYgc2VsZi5tdHlwZSBpbiBbMSwyXSBhbmQgbGVuKHNlbGYu Y2VydCkgIT0gMDoKKwkJCWlmIG5vdCBsZW4oc2VsZi5jZXJ0KSA9PSB7MTo2NCwyOjEyOH1bc2Vs Zi5tdHlwZV06CisJCQkJZXJyLmFwcGVuZCgnQ2VydGlmaWNhdGUgZm9yIEFzc29jaWF0aW9uOiBp bnZhbGlkIChIYXNoIGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBoYXNoLXR5cGUgaW4gTWF0Y2hpbmcg VHlwZSglcykpJyAlIHsxOidTSEEtMjU2JywyOidTSEEtNTEyJ31bc2VsZi5tdHlwZV0pCisJCWlm IGxlbihlcnIpICE9IDA6CisJCQlpZiBub3QgcmFpc2VFeGNlcHRpb246CisJCQkJcmV0dXJuIEZh bHNlCisJCQllbHNlOgorCQkJCW1zZyA9ICdUaGUgVExTQSByZWNvcmQgaXMgaW52YWxpZC4nCisJ CQkJZm9yIGVycm9yIGluIGVycjoKKwkJCQkJbXNnICs9ICdcblx0JXMnICUgZXJyb3IKKwkJCQly YWlzZSBSZWNvcmRWYWxpZGl0eUV4Y2VwdGlvbihtc2cpCisJCWVsc2U6CisJCQlyZXR1cm4gVHJ1 ZQorCisJZGVmIGlzTmFtZVZhbGlkKHNlbGYpOgorCQkiIiJDaGVjayBpZiB0aGUgbmFtZSBpZiBp biB0aGUgY29ycmVjdCBmb3JtYXQiIiIKKwkJaWYgbm90IHJlLm1hdGNoKHInXihfXGR7MSw1fXxc KilcLl8odGNwfHVkcHxzY3RwKVwuKFstYS16MC05XSpcLil7Mix9JCcsIHNlbGYubmFtZSk6CisJ CQlyZXR1cm4gRmFsc2UKKwkJcmV0dXJuIFRydWUKKworCWRlZiBnZXRQcm90b2NvbChzZWxmKToK KwkJIiIiUmV0dXJucyB0aGUgcHJvdG9jb2wgYmFzZWQgb24gdGhlIG5hbWUiIiIKKwkJcmV0dXJu IHJlLnNwbGl0KHInXC4nLCBzZWxmLm5hbWUpWzFdWzE6XQorCisJZGVmIGdldFBvcnQoc2VsZik6 CisJCSIiIlJldHVybnMgdGhlIHBvcnQgYmFzZWQgb24gdGhlIG5hbWUiIiIKKwkJaWYgcmUuc3Bs aXQocidcLicsIHNlbGYubmFtZSlbMF1bMF0gPT0gJyonOgorCQkJcmV0dXJuICcqJworCQllbHNl OgorCQkJcmV0dXJuIHJlLnNwbGl0KHInXC4nLCBzZWxmLm5hbWUpWzBdWzE6XQorCisJZGVmIGdl dFNob3J0VGV4dChzZWxmKToKKwkJcmV0dXJuICIlZCAlZCAlZCAlLjhzLi4uIiAlIChzZWxmLnVz YWdlLCBzZWxmLnNlbGVjdG9yLCBzZWxmLm10eXBlLCBzZWxmLmNlcnQpCisKK2NsYXNzIEFSZWNv cmQ6CisJIiIiQW4gb2JqZWN0IHJlcHJlc2VudGluZyBhbiBBIFJlY29yZCAoSVB2NCBhZGRyZXNz KSIiIgorCWRlZiBfX2luaXRfXyhzZWxmLCBob3N0bmFtZSwgYWRkcmVzcyk6CisJCXNlbGYucnJ0 eXBlID0gMQorCQlzZWxmLmhvc3RuYW1lID0gaG9zdG5hbWUKKwkJc2VsZi5hZGRyZXNzID0gYWRk cmVzcworCisJZGVmIF9fc3RyX18oc2VsZik6CisJCXJldHVybiBzZWxmLmFkZHJlc3MKKworCWRl ZiBpc1ZhbGlkKHNlbGYpOgorCQl0cnk6CisJCQlJUHY0QWRkcmVzcyhzZWxmLmFkZHJlc3MpCisJ CQlyZXR1cm4gVHJ1ZQorCQlleGNlcHQ6CisJCQlyZXR1cm4gRmFsc2UKKworY2xhc3MgQUFBQVJl Y29yZDoKKwkiIiJBbiBvYmplY3QgcmVwcmVzZW50aW5nIGFuIEFBQUEgUmVjb3JkIChJUHY2IGFk ZHJlc3MpIiIiCisJZGVmIF9faW5pdF9fKHNlbGYsIGhvc3RuYW1lLCBhZGRyZXNzKToKKwkJc2Vs Zi5ycnR5cGUgPSAyOAorCQlzZWxmLmhvc3RuYW1lID0gaG9zdG5hbWUKKwkJc2VsZi5hZGRyZXNz ID0gYWRkcmVzcworCisJZGVmIF9fc3RyX18oc2VsZik6CisJCXJldHVybiBzZWxmLmFkZHJlc3MK KworCWRlZiBpc1ZhbGlkKHNlbGYpOgorCQl0cnk6CisJCQlJUHY2QWRkcmVzcyhzZWxmLmFkZHJl c3MpCisJCQlyZXR1cm4gVHJ1ZQorCQlleGNlcHQ6CisJCQlyZXR1cm4gRmFsc2UKKworIyBFeGNl cHRpb25zCitjbGFzcyBSZWNvcmRWYWxpZGl0eUV4Y2VwdGlvbihFeGNlcHRpb24pOgorCXBhc3MK KworY2xhc3MgSW5zZWN1cmVMb29rdXBFeGNlcHRpb24oRXhjZXB0aW9uKToKKwlwYXNzCisKK2Ns YXNzIEROU0xvb2t1cEVycm9yKEV4Y2VwdGlvbik6CisJcGFzcworCitpZiBfX25hbWVfXyA9PSAn X19tYWluX18nOgorCWltcG9ydCBhcmdwYXJzZQorCSMgY3JlYXRlIHRoZSBwYXJzZXIKKwlwYXJz ZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nQ3JlYXRlIGFuZCB2ZXJp ZnkgVExTQSByZWNvcmRzLicsIGVwaWxvZz0nRm9yIGJ1Z3MuIHNlZSB0bHNhQG5vaGF0cy5jYScp CisKKwkjIENhdmVhdDogRm9yIFRMU0EgdmFsaWRhdGlvbiwgdGhpcyBwcm9ncmFtIGNoYXNlcyB0 aHJvdWdoIHRoZSBjZXJ0aWZpY2F0ZSBjaGFpbiBvZmZlcmVkIGJ5IHRoZSBzZXJ2ZXIsIG5vdCBp dHMgbG9jYWwgY2VydGlmaWNhdGVzLicKKwlwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXZlcmlmeScs Jy12JywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nVmVyaWZ5IGEgVExTQSByZWNvcmQsIGV4 aXQgMCB3aGVuIGFsbCBUTFNBIHJlY29yZHMgYXJlIG1hdGNoZWQsIGV4aXQgMiB3aGVuIGEgcmVj b3JkIGRvZXMgbm90IG1hdGNoIHRoZSByZWNlaXZlZCBjZXJ0aWZpY2F0ZSwgZXhpdCAxIG9uIGVy cm9yLicpCisKKwlwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWNyZWF0ZScsJy1jJywgYWN0aW9uPSdz dG9yZV90cnVlJywgaGVscD0nQ3JlYXRlIGEgVExTQSByZWNvcmQnKQorCXBhcnNlci5hZGRfYXJn dW1lbnQoJy0tdmVyc2lvbicsIGFjdGlvbj0ndmVyc2lvbicsIHZlcnNpb249J3Rsc2EgdmVyc2lv bjogJXMnJVZFUlNJT04sIGhlbHA9J3Nob3cgdmVyc2lvbiBhbmQgZXhpdCcpCisKKwlwYXJzZXIu YWRkX2FyZ3VtZW50KCctNCcsICctLWlwdjQnLCBkZXN0PSdpcHY0JywgYWN0aW9uPSdzdG9yZV90 cnVlJyxoZWxwPSd1c2UgaXB2NCBuZXR3b3JraW5nIG9ubHknKQorCXBhcnNlci5hZGRfYXJndW1l bnQoJy02JywgJy0taXB2NicsIGRlc3Q9J2lwdjYnLCBhY3Rpb249J3N0b3JlX3RydWUnLGhlbHA9 J3VzZSBpcHY2IG5ldHdvcmtpbmcgb25seScpCisJcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1pbnNl Y3VyZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9J0FsbG93IHVz ZSBvZiBub24tZG5zc2VjIHNlY3VyZWQgYW5zd2VycycpCisJcGFyc2VyLmFkZF9hcmd1bWVudCgn LS1yZXNvbHZjb25mJywgbWV0YXZhcj0nL1BBVEgvVE8vUkVTT0xWLkNPTkYnLCBhY3Rpb249J3N0 b3JlJywgZGVmYXVsdD0nL2V0Yy9yZXNvbHYuY29uZicsIGhlbHA9J1VzZSBhIHJlY3Vyc2l2ZSBy ZXNvbHZlciBsaXN0ZWQgaW4gYSByZXNvbHYuY29uZiBmaWxlIChkZWZhdWx0OiAvZXRjL3Jlc29s di5jb25mKScpCisJcGFyc2VyLmFkZF9hcmd1bWVudCgnaG9zdCcsIG1ldGF2YXI9Imhvc3RuYW1l IikKKworCXBhcnNlci5hZGRfYXJndW1lbnQoJy0tcG9ydCcsICctcCcsIGFjdGlvbj0nc3RvcmUn LCBkZWZhdWx0PSc0NDMnLCBoZWxwPSdUaGUgcG9ydCwgb3IgXCcqXCcgd2hlcmUgcnVubmluZyBU TFMgaXMgbG9jYXRlZCAoZGVmYXVsdDogJShkZWZhdWx0KXMpLicpCisJcGFyc2VyLmFkZF9hcmd1 bWVudCgnLS1zdGFydHRscycsICctdCcsIGFjdGlvbj0nc3RvcmUnLCBjaG9pY2VzPVsnbm8nLCAn c210cCcsICdpbWFwJywgJ3BvcDMnLCAnZnRwJ10sIGhlbHA9J1Byb3RvY29sIG5lZWRzIHNwZWNp YWwgc3RhcnQgcHJvY2VkdXJlLCByZXF1aXJlcyBwcm90b2NvbCBuYW1lLicpCisJcGFyc2VyLmFk ZF9hcmd1bWVudCgnLS1wcm90b2NvbCcsIGFjdGlvbj0nc3RvcmUnLCBjaG9pY2VzPVsndGNwJywn dWRwJywnc2N0cCddLCBkZWZhdWx0PSd0Y3AnLCBoZWxwPSdUaGUgcHJvdG9jb2wgdGhlIFRMUyBz ZXJ2aWNlIGlzIHVzaW5nIChkZWZhdWx0OiAlKGRlZmF1bHQpcykuJykKKwlwYXJzZXIuYWRkX2Fy Z3VtZW50KCctLW9ubHktcnInLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdPbmx5IHZlcmlm eSB0aGF0IHRoZSBUTFNBIHJlc291cmNlIHJlY29yZCBpcyBjb3JyZWN0IChkbyBub3QgY2hlY2sg Y2VydGlmaWNhdGUpJykKKwlwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXJvb3RrZXknLCBtZXRhdmFy PScvUEFUSC9UTy9ST09ULktFWScsIGFjdGlvbj0nc3RvcmUnLCBoZWxwPSdTcGVjaWZ5IGZpbGUg bG9jYXRpb24gY29udGFpbmluZyB0aGUgRE5TU0VDIHJvb3Qga2V5JykKKworCWlmIG9zLnBhdGgu aXNkaXIoIi9ldGMvcGtpL3Rscy9jZXJ0cy8iKToKKwkJY2FkaXIgPSAiL2V0Yy9wa2kvdGxzL2Nl cnRzLyIKKwllbGlmIG9zLnBhdGguaXNkaXIoIi9ldGMvc3NsL2NlcnRzLyIpOgorCQljYWRpciA9 ICIvZXRjL3NzbC9jZXJ0cy8iCisJZWxzZToKKwkJY2FkaXIgPSAiLiIKKwkJcHJpbnQgKCJ3YXJu aW5nOiBubyBzeXN0ZW0gd2lkZSBDQWRpciBmb3VuZCwgdXNpbmcgY3VycmVudCBkaXJlY3Rvcnki KQorCisJcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1jYS1jZXJ0JywgbWV0YXZhcj0nL1BBVEgvVE8v Q0VSVFNUT1JFJywgYWN0aW9uPSdzdG9yZScsIGRlZmF1bHQgPSBjYWRpciwgaGVscD0nUGF0aCB0 byBhIENBIGNlcnRpZmljYXRlIG9yIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGNlcnRpZmlj YXRlcyAoZGVmYXVsdDogJShkZWZhdWx0KXMpJykKKwlwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWRl YnVnJywgJy1kJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nUHJpbnQgZGV0YWlscyBwbHVz IHRoZSByZXN1bHQgb2YgdGhlIHZhbGlkYXRpb24nKQorCXBhcnNlci5hZGRfYXJndW1lbnQoJy0t cXVpZXQnLCAnLXEnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdJZ25vcmVkIGZvciBiYWNr d2FyZHMgY29tcGF0aWJpbGl0eScpCisKKwlwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWNlcnRpZmlj YXRlJywgaGVscD0nVGhlIGNlcnRpZmljYXRlIHVzZWQgZm9yIHRoZSBob3N0LiBJZiBjZXJ0aWZp Y2F0ZSBpcyBlbXB0eSwgdGhlIGNlcnRpZmljYXRlIHdpbGwgYmUgZG93bmxvYWRlZCBmcm9tIHRo ZSBzZXJ2ZXInKQorCXBhcnNlci5hZGRfYXJndW1lbnQoJy0tb3V0cHV0JywgJy1vJywgYWN0aW9u PSdzdG9yZScsIGRlZmF1bHQ9J3JmYycsIGNob2ljZXM9WydnZW5lcmljJywncmZjJywnYm90aCdd LCBoZWxwPSdUaGUgdHlwZSBvZiBvdXRwdXQuIEdlbmVyaWMgKFJGQyAzNTk3LCBUWVBFNTIpLCBS RkMgKFRMU0EpIG9yIGJvdGggKGRlZmF1bHQ6ICUoZGVmYXVsdClzKS4nKQorCisJIyBVc2FnZSBv ZiB0aGUgY2VydGlmaWNhdGUKKwlwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXVzYWdlJywgJy11Jywg YWN0aW9uPSdzdG9yZScsIHR5cGU9aW50LCBkZWZhdWx0PTMsIGNob2ljZXM9WzAsMSwyLDNdLCBo ZWxwPSdUaGUgVXNhZ2Ugb2YgdGhlIENlcnRpZmljYXRlIGZvciBBc3NvY2lhdGlvbi4gXCcwXCcg Zm9yIENBIFtQS0lYLUNBXSwgXCcxXCcgZm9yIEVuZCBFbnRpdHkgW1BLSVgtRUVdLCBcJzJcJyBm b3IgdHJ1c3QtYW5jaG9yIFtEQU5FLVRBXSwgXCczXCcgZm9yIE9OTFkgRW5kLUVudGl0eSBtYXRj aCBbREFORS1FRV0gKGRlZmF1bHQ6ICUoZGVmYXVsdClzKS4nKQorCXBhcnNlci5hZGRfYXJndW1l bnQoJy0tc2VsZWN0b3InLCAnLXMnLCBhY3Rpb249J3N0b3JlJywgdHlwZT1pbnQsIGRlZmF1bHQ9 MCwgY2hvaWNlcz1bMCwxXSwgaGVscD0nVGhlIFNlbGVjdG9yIGZvciB0aGUgQ2VydGlmaWNhdGUg Zm9yIEFzc29jaWF0aW9uLiBcJzBcJyBmb3IgRnVsbCBDZXJ0aWZpY2F0ZSBbQ2VydF0sIFwnMVwn IGZvciBTdWJqZWN0UHVibGljS2V5SW5mbyBbU1BLSV0gKGRlZmF1bHQ6ICUoZGVmYXVsdClzKS4n KQorCXBhcnNlci5hZGRfYXJndW1lbnQoJy0tbXR5cGUnLCAnLW0nLCBhY3Rpb249J3N0b3JlJywg dHlwZT1pbnQsIGRlZmF1bHQ9MSwgY2hvaWNlcz1bMCwxLDJdLCBoZWxwPSdUaGUgTWF0Y2hpbmcg VHlwZSBvZiB0aGUgQ2VydGlmaWNhdGUgZm9yIEFzc29jaWF0aW9uLiBcJzBcJyBmb3IgRXhhY3Qg bWF0Y2gsIFwnMVwnIGZvciBTSEEtMjU2IGhhc2gsIFwnMlwnIGZvciBTSEEtNTEyIChkZWZhdWx0 OiAlKGRlZmF1bHQpcykuJykKKworCWFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKwlpZiBh cmdzLnJvb3RrZXk6CisJCWlmIG9zLnBhdGguaXNmaWxlKGFyZ3Mucm9vdGtleSk6CisJCQlST09U S0VZID0gYXJncy5yb290a2V5CisJCWVsc2U6CisJCQlwcmludCgiaWdub3JlZCBzcGVjaWZpZWQg bm9uLWV4aXN0aW5nIHJvb3RrZXkgZmlsZSAlcyIlYXJncy5yb290a2V5KQorCisJIyBjaGVjayB3 aGV0aGVyIGl0J3MgQVNDSUkgb3IgbmVlZHMgdG8gYmUgY29udmVydGVkIGludG8gUHVubnljb2Rl CisJdHJ5OgorCQlhcmdzLmhvc3QuZW5jb2RlKCdhc2NpaScpCisJZXhjZXB0IFVuaWNvZGVFbmNv ZGVFcnJvcjoKKwkJYXJncy5ob3N0ID0gc3RyKGFyZ3MuaG9zdC5lbmNvZGUoJ2lkbmEnKSwgJ3V0 Zi04JykKKworCWlmIGFyZ3MuaG9zdFstMV0gIT0gJy4nOgorCQlhcmdzLmhvc3QgKz0gJy4nCisJ c25paG9zdCA9IGFyZ3MuaG9zdFswOi0xXQorCisJaWYgbm90IGFyZ3Muc3RhcnR0bHM6CisJCWlm IGFyZ3MucG9ydCA9PSAiMjUiIG9yIGFyZ3MucG9ydCA9PSAiNTg3IjoKKwkJCWFyZ3Muc3RhcnR0 bHMgPSAic210cCIKKwkJZWxpZiBhcmdzLnBvcnQgPT0gIjE0MyI6CisJCQlhcmdzLnN0YXJ0dGxz ID0gImltYXAiCisJCWVsaWYgYXJncy5wb3J0ID09ICIxMTAiOgorCQkJYXJncy5zdGFydHRscyA9 ICJwb3AzIgorCQllbGlmIGFyZ3MucG9ydCA9PSAiMjEiOgorCQkJYXJncy5zdGFydHRscyA9ICJm dHAiCisJZWxpZiBhcmdzLnN0YXJ0dGxzID09ICJubyI6CisJCWFyZ3Muc3RhcnR0bHMgPSBOb25l CisKKwlnbG9iYWwgcmVzb2x2Y29uZgorCWlmIGFyZ3MucmVzb2x2Y29uZjoKKwkJaWYgb3MucGF0 aC5pc2ZpbGUoYXJncy5yZXNvbHZjb25mKToKKwkJCXJlc29sdmNvbmYgPSBhcmdzLnJlc29sdmNv bmYKKwkJZWxzZToKKwkJCXByaW50KCclcyBpcyBub3QgYSBmaWxlLiBVbmFibGUgdG8gdXNlIGl0 IGFzIHJlc29sdi5jb25mJyAlIGFyZ3MucmVzb2x2Y29uZiwgZmlsZT1zeXMuc3Rkb3V0KQorCQkJ c3lzLmV4aXQoMSkKKwllbHNlOgorCQlyZXNvbHZjb25mID0gTm9uZQorCisJIyBub3Qgb3BlcmF0 aW9ucyBhcmUgZnVuIQorCXNlY3VyZSA9IG5vdCBhcmdzLmluc2VjdXJlCisKKwlpZiBhcmdzLnZl cmlmeToKKwkJcmVjb3JkcyA9IGdldFRMU0EoYXJncy5ob3N0LCBhcmdzLnBvcnQsIGFyZ3MucHJv dG9jb2wsIHNlY3VyZSkKKwkJaWYgbGVuKHJlY29yZHMpID09IDA6CisJCQlzeXMuZXhpdCgxKQor CQlwcmVfZXhpdCA9IDAKKwkJZm9yIHJlY29yZCBpbiByZWNvcmRzOgorCQkJIyBGaXJzdCwgY2hl Y2sgaWYgdGhlIGZpcnN0IHRocmVlIGZpZWxkcyBoYXZlIGNvcnJlY3QgdmFsdWVzLgorCQkJaWYg YXJncy5kZWJ1ZzoKKwkJCQlwcmludCgnUmVjZWl2ZWQgdGhlIGZvbGxvd2luZyByZWNvcmQgZm9y IG5hbWUgJXM6JyAlIHJlY29yZC5uYW1lKQorCQkJCXByaW50KCdcdFVzYWdlOlx0XHRcdFx0JWQg KCVzKScgJSAocmVjb3JkLnVzYWdlLCB7MDonQ0EgQ29uc3RyYWludCBbUEtJWC1DQV0nLCAxOidF bmQtRW50aXR5IENvbnN0cmFpbnQgKyBjaGFpbiB0byBDQSBbUEtJWC1FRV0nLCAyOidUcnVzdCBB bmNob3IgW0RBTkUtVEFdJywgMzonRW5kLUVudGl0eSBbREFORS1FRV0nfS5nZXQocmVjb3JkLnVz YWdlLCAnSU5WQUxJRCcpKSkKKwkJCQlwcmludCgnXHRTZWxlY3RvcjpcdFx0XHQlZCAoJXMpJyAl IChyZWNvcmQuc2VsZWN0b3IsIHswOidDZXJ0aWZpY2F0ZSBbQ2VydF0nLCAxOidTdWJqZWN0UHVi bGljS2V5SW5mbyBbU1BLSV0nfS5nZXQocmVjb3JkLnNlbGVjdG9yLCAnSU5WQUxJRCcpKSkKKwkJ CQlwcmludCgnXHRNYXRjaGluZyBUeXBlOlx0XHRcdCVkICglcyknICUgKHJlY29yZC5tdHlwZSwg ezA6J0Z1bGwgQ2VydGlmaWNhdGUnLCAxOidTSEEtMjU2JywgMjonU0hBLTUxMid9LmdldChyZWNv cmQubXR5cGUsICdJTlZBTElEJykpKQorCQkJCXByaW50KCdcdENlcnRpZmljYXRlIGZvciBBc3Nv Y2lhdGlvbjpcdCVzJyAlIHJlY29yZC5jZXJ0KQorCisJCQl0cnk6CisJCQkJcmVjb3JkLmlzVmFs aWQocmFpc2VFeGNlcHRpb249VHJ1ZSkKKwkJCWV4Y2VwdCBSZWNvcmRWYWxpZGl0eUV4Y2VwdGlv biBhcyBlOgorCQkJCXByaW50KCdFcnJvcjogJXMnICUgc3RyKGUpLCBmaWxlPXN5cy5zdGRlcnIp CisJCQkJY29udGludWUKKwkJCWVsc2U6CisJCQkJaWYgYXJncy5kZWJ1ZzoKKwkJCQkJcHJpbnQo J1RoaXMgcmVjb3JkIGlzIHZhbGlkICh3ZWxsLWZvcm1lZCkuJykKKworCQkJaWYgYXJncy5vbmx5 X3JyOgorCQkJCSMgR28gdG8gdGhlIG5leHQgcmVjb3JkCisJCQkJY29udGludWUKKworCQkJIyBX aGVuIHdlIGFyZSBoZXJlLCBUaGUgdXNlciBhbHNvIHdhbnRzIHRvIHZlcmlmeSB0aGUgY2VydGlm aWNhdGVzIHdpdGggdGhlIHJlY29yZAorCQkJaWYgYXJncy5wcm90b2NvbCAhPSAndGNwJzoKKwkJ CQlwcmludCgnT25seSBTU0wgb3ZlciBUQ1AgaXMgc3VwcG9ydGVkIChzb3JyeSknLCBmaWxlPXN5 cy5zdGRlcnIpCisJCQkJc3lzLmV4aXQoMCkKKworCQkJaWYgYXJncy5kZWJ1ZzoKKwkJCQlwcmlu dCgnQXR0ZW1wdGluZyB0byB2ZXJpZnkgdGhlIHJlY29yZCB3aXRoIHRoZSBUTFMgc2VydmljZS4u LicpCisKKwkJCWlmIG5vdCBhcmdzLmlwdjQgYW5kIG5vdCBhcmdzLmlwdjY6CisJCQkJYWRkcmVz c2VzID0gZ2V0QShhcmdzLmhvc3QsIHNlY3VyZT1zZWN1cmUpICsgZ2V0QUFBQShhcmdzLmhvc3Qs IHNlY3VyZT1zZWN1cmUpCisJCQllbGlmIGFyZ3MuaXB2NDoKKwkJCQlhZGRyZXNzZXMgPSBnZXRB KGFyZ3MuaG9zdCwgc2VjdXJlPXNlY3VyZSkKKwkJCWVsc2U6CisJCQkJYWRkcmVzc2VzID0gZ2V0 QUFBQShhcmdzLmhvc3QsIHNlY3VyZT1zZWN1cmUpCisKKwkJCWlmIGFyZ3MuY2VydGlmaWNhdGU6 CisJCQkJdHJ5OgorCQkJCQljaGFpbiwgdmVyaWZ5X3Jlc3VsdCA9IGdldExvY2FsQ2hhaW4oYXJn cy5jZXJ0aWZpY2F0ZSwgYXJncy5kZWJ1ZykKKwkJCQkJcHJlX2V4aXQgPSB2ZXJpZnlDaGFpbihy ZWNvcmQsIGNoYWluLCB2ZXJpZnlfcmVzdWx0LCBwcmVfZXhpdCwgVHJ1ZSwgYXJncy5jZXJ0aWZp Y2F0ZSkKKwkJCQlleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisJCQkJCXByaW50KCdDb3VsZCBub3Qg dmVyaWZ5IGxvY2FsIGNlcnRpZmljYXRlOiAlcy4nICUgZSkKKwkJCQkJc3lzLmV4aXQoMCkKKwkJ CWZvciBhZGRyZXNzIGluIGFkZHJlc3NlczoKKwkJCQlpZiBhcmdzLmRlYnVnOgorCQkJCQlwcmlu dCgnR290IHRoZSBmb2xsb3dpbmcgSVA6ICVzJyAlIHN0cihhZGRyZXNzKSkKKwkJCQkjIFdlIGRv IHRoZSBjZXJ0aWZpY2F0ZSBoYW5kbGluZyBoZXJlLCBhcyBNMkNyeXB0byBrZWVwcyBzZWdmYXVs dGluZyB3aGVuIHdlIGRvIGl0IGluIGEgbWV0aG9kCisJCQkJY3R4ID0gU1NMLkNvbnRleHQoKQor CQkJCWlmIG9zLnBhdGguaXNmaWxlKGFyZ3MuY2FfY2VydCk6CisJCQkJCWlmIGN0eC5sb2FkX3Zl cmlmeV9sb2NhdGlvbnMoY2FmaWxlPWFyZ3MuY2FfY2VydCkgIT0gMTogcmFpc2UgRXhjZXB0aW9u KCdObyBDQSBjZXJ0JykKKwkJCQllbGlmIG9zLnBhdGguZXhpc3RzKGFyZ3MuY2FfY2VydCk6CisJ CQkJCWlmIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FwYXRoPWFyZ3MuY2FfY2VydCkgIT0g MTogcmFpc2UgRXhjZXB0aW9uKCdObyBDQSBjZXJ0cycpCisJCQkJZWxzZToKKwkJCQkJcHJpbnQo JyVzIGlzIG5laXRoZXIgYSBmaWxlIG5vciBhIGRpcmVjdG9yeSwgdW5hYmxlIHRvIGNvbnRpbnVl JyAlIGFyZ3MuY2FfY2VydCwgZmlsZT1zeXMuc3RkZXJyKQorCQkJCQlzeXMuZXhpdCgxKQorCQkJ CSMgRG9uJ3QgZXJyb3Igd2hlbiB0aGUgdmVyaWZpY2F0aW9uIGZhaWxzIGluIHRoZSBTU0wgaGFu ZHNoYWtlCisJCQkJY3R4LnNldF92ZXJpZnkoU1NMLnZlcmlmeV9ub25lLCBkZXB0aD05KQorCQkJ CWlmIGlzaW5zdGFuY2UoYWRkcmVzcywgQUFBQVJlY29yZCk6CisJCQkJCXNvY2sgPSBzb2NrZXQu c29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfU1RSRUFNKQorCQkJCQlzb2NrLnNl dHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCisJCQkJ ZWxzZToKKwkJCQkJc29jayA9IE5vbmUKKwkJCQljb25uZWN0aW9uID0gU1NMLkNvbm5lY3Rpb24o Y3R4LCBzb2NrPXNvY2spCisJCQkJdHJ5OgorCQkJCQljb25uZWN0aW9uLnNldF90bHNleHRfaG9z dF9uYW1lKHNuaWhvc3QpCisJCQkJCWlmKGFyZ3MuZGVidWcpOgorCQkJCQkJcHJpbnQoJ0RpZCBz ZXQgc2VydmVybmFtZSAlcycgJSBzbmlob3N0KQorCQkJCWV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoK KwkJCQkJcHJpbnQoJ0NvdWxkIG5vdCBzZXQgU05JIChvbGQgTTJDcnlwdG8gdmVyc2lvbj8pJykK KwkJCQlleGNlcHQ6CisJCQkJCXByaW50KCdDb3VsZCBub3Qgc2V0IFNOSScpCisJCQkJdHJ5Ogor CQkJCQlpZiBhcmdzLnN0YXJ0dGxzOgorCQkJCQkJc3NsU3RhcnRUTFNDb25uZWN0KGNvbm5lY3Rp b24sIChzdHIoYWRkcmVzcyksIGludChhcmdzLnBvcnQpKSwgYXJncy5zdGFydHRscykKKwkJCQkJ CSNjb25uZWN0aW9uLmNvbm5lY3QoKHN0cihhZGRyZXNzKSwgaW50KGFyZ3MucG9ydCkpLCBhcmdz LnN0YXJ0dGxzKQorCQkJCQllbHNlOgorCQkJCQkJY29ubmVjdGlvbi5jb25uZWN0KChzdHIoYWRk cmVzcyksIGludChhcmdzLnBvcnQpKSkKKwkJCQkjZXhjZXB0IFR5cGVFcnJvcjoKKwkJCQkjCXBy aW50ICdDYW5ub3QgY29ubmVjdCB0byAlcyAob2xkIE0yQ3J5cHRvIHZlcnNpb24gbm90IHN1cHBv cnRpbmcgc3RhcnQgc2NyaXB0PyknICUgYWRkcmVzcworCQkJCSMJY29udGludWUKKwkJCQlleGNl cHQgU1NMLkNoZWNrZXIuV3JvbmdIb3N0IGFzIGU6CisJCQkJCSMgVGhlIG5hbWUgb24gdGhlIHJl bW90ZSBjZXJ0IGRvZXNuJ3QgbWF0Y2ggdGhlIGhvc3RuYW1lIGJlY2F1c2Ugd2UgY29ubmVjdCBv biBJUCwgbm90IGhvc3RuYW1lIChhcyB3ZSB3YW50IHNlY3VyZSBsb29rdXApCisJCQkJCXBhc3MK KwkJCQlleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisJCQkJCXByaW50KCdDYW5ub3QgY29ubmVj dCB0byAlczogJXMnICUgKGFkZHJlc3MsIHN0cihlKSkpCisJCQkJCWNvbnRpbnVlCisJCQkJY2hh aW4gPSBjb25uZWN0aW9uLmdldF9wZWVyX2NlcnRfY2hhaW4oKQorCQkJCXZlcmlmeV9yZXN1bHQg PSBjb25uZWN0aW9uLmdldF92ZXJpZnlfcmVzdWx0KCkKKworCQkJCSMgR29vZCwgbm93IGxldCdz IHZlcmlmeQorCQkJCXByZV9leGl0ID0gdmVyaWZ5Q2hhaW4ocmVjb3JkLCBjaGFpbiwgdmVyaWZ5 X3Jlc3VsdCwgcHJlX2V4aXQsIEZhbHNlLCBhZGRyZXNzKQorCQkJCSMgQ2xlYW51cCwganVzdCBp biBjYXNlCisJCQkJY29ubmVjdGlvbi5jbGVhcigpCisJCQkJY29ubmVjdGlvbi5jbG9zZSgpCisJ CQkJY3R4LmNsb3NlKCkKKworCQkJIyBFTkQgZm9yIGFkZHJlc3MgaW4gYWRkcmVzc2VzCisJCSMg RU5EIGZvciByZWNvcmQgaW4gcmVjb3JkcworCQlzeXMuZXhpdChwcmVfZXhpdCkKKwkjIEVORCBp ZiBhcmdzLnZlcmlmeQorCisJZWxzZTogIyB3ZSB3YW50IHRvIGNyZWF0ZQorCQljZXJ0ID0gTm9u ZQorCQlpZiBub3QgYXJncy5jZXJ0aWZpY2F0ZToKKwkJCWlmIGFyZ3MucHJvdG9jb2wgIT0gJ3Rj cCc6CisJCQkJcHJpbnQoJ09ubHkgU1NMIG92ZXIgVENQIGlzIHN1cHBvcnRlZCAoc29ycnkpJywg ZmlsZT1zeXMuc3RkZXJyKQorCQkJCXN5cy5leGl0KDEpCisJCQlpZiBhcmdzLmRlYnVnOgorCQkJ CXByaW50KCdObyBjZXJ0aWZpY2F0ZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmRsaW5lLCBhdHRl bXB0aW5nIHRvIHJldHJpZXZlIGl0IGZyb20gdGhlIHNlcnZlciAlcycgJSAoYXJncy5ob3N0KSkK KwkJCWNvbm5lY3Rpb25fcG9ydCA9IGFyZ3MucG9ydAorCQkJaWYgYXJncy5wb3J0ID09ICcqJzoK KwkJCQlzeXMuc3Rkb3V0LndyaXRlKCdUaGUgcG9ydCBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmRs aW5lIGlzICosIHBsZWFzZSBzcGVjaWZ5IHRoZSBwb3J0IG9mIHRoZSBUTFMgc2VydmljZSBvbiAl cyAoNDQzKTogJyAlIGFyZ3MuaG9zdCkKKwkJCQlpbnB1dF9vayA9IEZhbHNlCisJCQkJd2hpbGUg bm90IGlucHV0X29rOgorCQkJCQl1c2VyX2lucHV0ID0gaW5wdXQoKQorCQkJCQlpZiB1c2VyX2lu cHV0ID09ICcnOgorCQkJCQkJY29ubmVjdGlvbl9wb3J0ID0gNDQzCisJCQkJCQlicmVhaworCQkJ CQl0cnk6CisJCQkJCQlpZiAxIDw9IGludCh1c2VyX2lucHV0KSA8PSA2NTUzNToKKwkJCQkJCQlj b25uZWN0aW9uX3BvcnQgPSB1c2VyX2lucHV0CisJCQkJCQkJaW5wdXRfb2sgPSBUcnVlCisJCQkJ CWV4Y2VwdDoKKwkJCQkJCXN5cy5zdGRvdXQud3JpdGUoJ1BvcnQgJXMgbm90IG51bWVyaWNhbCBv ciB3aXRoaW4gY29ycmVjdCByYW5nZSAoMSA8PSBwb3J0IDw9IDY1NTM1KSwgdHJ5IGFnYWluICho aXQgZW50ZXIgZm9yIGRlZmF1bHQgNDQzKTogJyAlIHVzZXJfaW5wdXQpCisJCQkjIEdldCB0aGUg YWRkcmVzcyByZWNvcmRzIGZvciB0aGUgaG9zdAorCQkJdHJ5OgorCQkJCSNhZGRyZXNzZXMgPSBn ZXRBKGFyZ3MuaG9zdCwgc2VjdXJlPXNlY3VyZSkgKyBnZXRBQUFBKGFyZ3MuaG9zdCwgc2VjdXJl PXNlY3VyZSkKKwkJCQlpZiBub3QgYXJncy5pcHY0IGFuZCBub3QgYXJncy5pcHY2OgorCQkJCQlh ZGRyZXNzZXMgPSBnZXRBKGFyZ3MuaG9zdCwgc2VjdXJlPXNlY3VyZSkgKyBnZXRBQUFBKGFyZ3Mu aG9zdCwgc2VjdXJlPXNlY3VyZSkKKworCQkJCWVsaWYgYXJncy5pcHY0OgorCQkJCQlhZGRyZXNz ZXMgPSBnZXRBKGFyZ3MuaG9zdCwgc2VjdXJlPXNlY3VyZSkKKwkJCQllbHNlOgorCQkJCQlhZGRy ZXNzZXMgPSBnZXRBQUFBKGFyZ3MuaG9zdCwgc2VjdXJlPXNlY3VyZSkKKworCQkJZXhjZXB0IElu c2VjdXJlTG9va3VwRXhjZXB0aW9uIGFzIGU6CisJCQkJcHJpbnQoc3RyKGUpLCBmaWxlPXN5cy5z dGRlcnIpCisJCQkJc3lzLmV4aXQoMSkKKworCQkJZm9yIGFkZHJlc3MgaW4gYWRkcmVzc2VzOgor CQkJCWlmIGFyZ3MuZGVidWc6CisJCQkJCXByaW50KCdBdHRlbXB0aW5nIHRvIGdldCBjZXJ0aWZp Y2F0ZSBmcm9tICVzJyAlIHN0cihhZGRyZXNzKSkKKwkJCQkjIFdlIGRvIHRoZSBjZXJ0aWZpY2F0 ZSBoYW5kbGluZyBoZXJlLCBhcyBNMkNyeXB0byBrZWVwcyBzZWdmYXVsdGluZyB3aGVuIHRyeSB0 byBkbyBzdHVmZiB3aXRoIHRoZSBjZXJ0IGlmIHdlIGRvbid0CisJCQkJY3R4ID0gU1NMLkNvbnRl eHQoKQorCQkJCWN0eC5zZXRfdmVyaWZ5KFNTTC52ZXJpZnlfbm9uZSwgZGVwdGg9OSkKKwkJCQlp ZiBpc2luc3RhbmNlKGFkZHJlc3MsIEFBQUFSZWNvcmQpOgorCQkJCQlzb2NrID0gc29ja2V0LnNv Y2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1NUUkVBTSkKKwkJCQkJc29jay5zZXRz b2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSLCAxKQorCQkJCWVs c2U6CisJCQkJCXNvY2sgPSBOb25lCisJCQkJY29ubmVjdGlvbiA9IFNTTC5Db25uZWN0aW9uKGN0 eCwgc29jaz1zb2NrKQorCQkJCXRyeToKKwkJCQkJY29ubmVjdGlvbi5zZXRfdGxzZXh0X2hvc3Rf bmFtZShzbmlob3N0KQorCQkJCQlpZihhcmdzLmRlYnVnKToKKwkJCQkJCXByaW50KCdEaWQgc2V0 IHNlcnZlcm5hbWUgJXMnICUgc25paG9zdCkKKwkJCQlleGNlcHQgQXR0cmlidXRlRXJyb3I6CisJ CQkJCXByaW50KCdDb3VsZCBub3Qgc2V0IFNOSSAob2xkIE0yQ3J5cHRvIHZlcnNpb24/KScpCisJ CQkJZXhjZXB0OgorCQkJCQlwcmludCgnQ291bGQgbm90IHNldCBTTkknKQorCQkJCXRyeToKKwkJ CQkJaWYgYXJncy5zdGFydHRsczoKKwkJCQkJCXNzbFN0YXJ0VExTQ29ubmVjdChjb25uZWN0aW9u LCAoc3RyKGFkZHJlc3MpLCBpbnQoY29ubmVjdGlvbl9wb3J0KSksIGFyZ3Muc3RhcnR0bHMpCisJ CQkJCQkjY29ubmVjdGlvbi5jb25uZWN0KChzdHIoYWRkcmVzcyksIGludChjb25uZWN0aW9uX3Bv cnQpKSwgYXJncy5zdGFydHRscykKKwkJCQkJZWxzZToKKwkJCQkJCWNvbm5lY3Rpb24uY29ubmVj dCgoc3RyKGFkZHJlc3MpLCBpbnQoY29ubmVjdGlvbl9wb3J0KSkpCisJCQkJI2V4Y2VwdCBUeXBl RXJyb3I6CisJCQkJIwlwcmludCAnQ2Fubm90IGNvbm5lY3QgdG8gJXMgKG9sZCBNMkNyeXB0byB2 ZXJzaW9uIG5vdCBzdXBwb3J0aW5nIHN0YXJ0IHNjcmlwdD8pJyAlIGFkZHJlc3MKKwkJCQkjCWNv bnRpbnVlCisJCQkJZXhjZXB0IFNTTC5DaGVja2VyLldyb25nSG9zdDoKKwkJCQkJcGFzcworCQkJ CWV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKwkJCQkJcHJpbnQoJ0Nhbm5vdCBjb25uZWN0IHRv ICVzOiAlcycgJSAoYWRkcmVzcywgc3RyKGUpKSkKKwkJCQkJY29udGludWUKKworCQkJCWNoYWlu ID0gY29ubmVjdGlvbi5nZXRfcGVlcl9jZXJ0X2NoYWluKCkKKwkJCQlpZiBub3QgdmVyaWZ5Q2Vy dE5hbWVXaXRoSG9zdE5hbWUoY2VydD1jaGFpblswXSwgaG9zdG5hbWU9c3RyKGFyZ3MuaG9zdCks IHdpdGhfbXNnPWFyZ3MuZGVidWcpOgorCQkJCQlwcmludCgnV0FSTklORzogQ2VydGlmaWNhdGUg bmFtZSBkb2VzIG5vdCBtYXRjaCB0aGUgaG9zdG5hbWUnKQorCQkJCWdlblJlY29yZHMoYXJncy5o b3N0LCBhZGRyZXNzLCBhcmdzLnByb3RvY29sLCBhcmdzLnBvcnQsIGNoYWluLCBhcmdzLm91dHB1 dCwgYXJncy51c2FnZSwgYXJncy5zZWxlY3RvciwgYXJncy5tdHlwZSkKKwkJCQkjIENsZWFudXAg dGhlIGNvbm5lY3Rpb24gYW5kIGNvbnRleHQKKwkJCQljb25uZWN0aW9uLmNsZWFyKCkKKwkJCQlj b25uZWN0aW9uLmNsb3NlKCkKKwkJCQljdHguY2xvc2UoKQorCisJCWVsc2U6ICMgUGFzcyB0aGUg cGF0aCB0byB0aGUgY2VydGlmaWNhdGUgdG8gdGhlIGdlblRMU0EgZnVuY3Rpb24KKwkJCXRyeToK KwkJCQljaGFpbiwgdmVyaWZ5X3Jlc3VsdCA9IGdldExvY2FsQ2hhaW4oYXJncy5jZXJ0aWZpY2F0 ZSwgYXJncy5kZWJ1ZykKKwkJCQlpZiBhcmdzLnVzYWdlID09IDAgb3IgYXJncy51c2FnZSA9PSAx IGFuZCBub3QgdmVyaWZ5X3Jlc3VsdDoKKwkJCQkJcHJpbnQoJ0ZvbGxvd2luZyBlcnJvciB3YXMg cmFpc2VkIGR1cmluZyBQS0lYIHZhbGlkYXRpb246ICVzJyAlIHZlcmlmeV9yZXN1bHQpCisJCQkJ Z2VuUmVjb3JkcyhhcmdzLmhvc3QsIGFyZ3MuaG9zdCwgYXJncy5wcm90b2NvbCwgYXJncy5wb3J0 LCBjaGFpbiwgYXJncy5vdXRwdXQsIGFyZ3MudXNhZ2UsIGFyZ3Muc2VsZWN0b3IsIGFyZ3MubXR5 cGUpCisJCQlleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisJCQkJcHJpbnQoJ0NvdWxkIG5vdCB2ZXJp ZnkgbG9jYWwgY2VydGlmaWNhdGU6ICVzLicgJSBlKQo=