Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

<?php $_F=__FILE__;$_X='Pz48P3BocCANCnI1cTM0cjVfMm5jNSAnZDVmNG41LnBocCc7DQovLyBuMW01c3AxYz..

Decoded Output download

<?php $_F=__FILE__;$_X='Pz48P3BocCANCnI1cTM0cjVfMm5jNSAnZDVmNG41LnBocCc7DQovLyBuMW01c3AxYzUgQzJubjVjdFNxbDsNCi8vIG4xbTVzcDFjNSBDMm5uNWN0U3FsXEMyZDVTbjRmZjVyOw0KY2wxc3MgQzJubjVjdFNxbA0Kew0KICAgIHByMnQ1Y3Q1ZCAkaDJzdCAgICAgPSBMT0NBTEhPU1Q7DQogICAgcHIydDVjdDVkICQzczVyICAgICA9IFVTRVJOQU1FOw0KICAgIHByMnQ1Y3Q1ZCAkcDFzcyAgICAgPSBQQVNTV09SRDsNCiAgICBwcjJ0NWN0NWQgJGQxdDFiMXM1ID0gREJOQU1FOw0KICAgIHByMnQ1Y3Q1ZCAkYzJubjsNCiAgICBwcjJ0NWN0NWQgJHI1czNsdCA9IG4zbGw7DQogICAgcDNibDRjIGYzbmN0NDJuIF9fYzJuc3RyM2N0KCkNCiAgICB7DQogICAgICAgICR0aDRzLT5jMm5uNWN0KCk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBfX2Q1c3RyM2N0KCkNCiAgICB7DQogICAgICAgICR0aDRzLT5kNHNjMm5uNWN0KCk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBjMm5uNWN0KCkNCiAgICB7DQogICAgICAgICR0aDRzLT5jMm5uID0gbXlzcWxfYzJubjVjdCgkdGg0cy0+aDJzdCwgJHRoNHMtPjNzNXIsICR0aDRzLT5wMXNzKSAyciBkNDUoIkMxbid0IGMybm41Y3QgdDIgTXlzcWwiKTsNCiAgICAgICAgbXlzcWxfczVsNWN0X2RiKCR0aDRzLT5kMXQxYjFzNSwgJHRoNHMtPmMybm4pOw0KICAgICAgICBAbXlzcWxfcTM1cnkoJ1NFVCBOQU1FUyAzdGY4JywgJHRoNHMtPmMybm4pOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZDRzYzJubjVjdCgpDQogICAgew0KICAgICAgICBteXNxbF9jbDJzNSgkdGg0cy0+YzJubik7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBjbDUxblI1czNsdCgpDQogICAgew0KICAgICAgICA0ZiAoJHRoNHMtPnI1czNsdCAhPSAnJykgew0KICAgICAgICAgICAgQG15c3FsX2ZyNTVfcjVzM2x0KCR0aDRzLT5yNXMzbHQpOw0KICAgICAgICB9DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBxMzVyeSgkc3FsKQ0KICAgIHsNCiAgICAgICAgNGYgKCR0aDRzLT5yNXMzbHQgIT0gbjNsbCkgew0KICAgICAgICAgICAgJHRoNHMtPkNsNTFuUjVzM2x0KCk7DQogICAgICAgIH0NCiAgICAgICAgJHRoNHMtPnI1czNsdCA9IG15c3FsX3EzNXJ5KCRzcWwsICR0aDRzLT5jMm5uKTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIHEzNXJ5SW5zNXJ0KCRzcWwpDQogICAgew0KICAgICAgICAkdGg0cy0+cjVzM2x0ID0gbXlzcWxfcTM1cnkoJHNxbCwgJHRoNHMtPmMybm4pOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gNG5zNXJ0KCRzcWwpDQogICAgew0KICAgICAgICBteXNxbF9xMzVyeSgkc3FsLCAkdGg0cy0+YzJubik7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBmNXRjaCgkc3FsKQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPmMybm41Y3QoKTsNCiAgICAgICAgJGQxdDEgPSBuM2xsOw0KICAgICAgICAkdGg0cy0+cTM1cnkoJHNxbCk7DQogICAgICAgIDRmICgkdGg0cy0+cjVzM2x0ICE9IG4zbGwpIHsNCiAgICAgICAgICAgIHdoNGw1ICgkcjJ3ID0gbXlzcWxfZjV0Y2hfMXNzMmMoJHRoNHMtPnI1czNsdCkpIHsNCiAgICAgICAgICAgICAgICAkZDF0MVtdID0gJHIydzsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcjV0M3JuICRkMXQxOw0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQogICAgICAgICR0aDRzLT5kNHNjMm5uNWN0KCk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBuM21yMncoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuIG15c3FsX24zbV9yMndzKCR0aDRzLT5yNXMzbHQpOw0KICAgIH0NCn0NCmNsMXNzIE0yZDVscyA1eHQ1bmRzIEMybm41Y3RTcWwNCnsNCiAgICAvLyBnNXQvczV0IG01dGgyZA0KICAgIHByNHYxdDUgJF9tMTRsdGgybmd0NG4gPSAnJzsNCiAgICBwcjR2MXQ1ICRfdDR0bDUgICAgICAgID0gJyc7DQogICAgcHI0djF0NSAkX3Q0ZzQxX3NqYyAgICA9IDA7DQogICAgcHI0djF0NSAkX3Q0ZzQxX3ZuZCAgICA9IDA7DQogICAgcHI0djF0NSAkX3Q0ZzQxXzNzZCAgICA9IDA7DQogICAgcHI0djF0NSAkX3AxZzVfbDRtNHQgICA9IDY7DQogICAgcHI0djF0NSAkX2gyc3QgICAgICAgICA9ICcnOw0KICAgIHByNHYxdDUgJF9uZzJubmczdm4gICAgPSA2Ow0KICAgIHByNHYxdDUgJF9uZzJubmczNW4gICAgPSAwOw0KICAgIHByNHYxdDUgJF8xcnIxeWMybmY0ZyAgPSAxcnIxeSgpOw0KICAgIHByNHYxdDUgJF80ZGMxdDYgICAgICAgPSAnJzsNCiAgICBwcjR2MXQ1ICRfNGRjMXRhICAgICAgID0gJyc7DQogICAgcHI0djF0NSAkXzRkYzF0byAgICAgICA9ICcnOw0KICAgIHByNHYxdDUgJF80ZGMxdHUgICAgICAgPSAnJzsNCiAgICBwcjR2MXQ1ICRfNGRjMXRpICAgICAgID0gJyc7DQogICAgcHI0djF0NSAkXzRkYzF0X20xeCAgICA9ICcnOw0KICAgIHByNHYxdDUgJF8zbjRxMzVfazV5ICAgPSAnJzsNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0SWRjMXQ2KCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+XzRkYzF0NjsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIHM1dElkYzF0NigkXzRkYzF0NikNCiAgICB7DQogICAgICAgICR0aDRzLT5fNGRjMXQ2ID0gJF80ZGMxdDY7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRJZGMxdGEoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5fNGRjMXRhOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0XzRkYzF0YSgkXzRkYzF0YSkNCiAgICB7DQogICAgICAgICR0aDRzLT5fNGRjMXRhID0gJF80ZGMxdGE7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRfNGRjMXRvKCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+XzRkYzF0bzsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIHM1dF80ZGMxdG8oJF80ZGMxdG8pDQogICAgew0KICAgICAgICAkdGg0cy0+XzRkYzF0byA9ICRfNGRjMXRvOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0XzRkYzF0dSgpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPl80ZGMxdHU7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBzNXRfNGRjMXR1KCRfNGRjMXR1KQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPl80ZGMxdHUgPSAkXzRkYzF0dTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIGc1dF80ZGMxdGkoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5fNGRjMXRpOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0XzRkYzF0aSgkXzRkYzF0aSkNCiAgICB7DQogICAgICAgICR0aDRzLT5fNGRjMXRpID0gJF80ZGMxdGk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRfNGRjMXRfbTF4KCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+XzRkYzF0X20xeDsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIHM1dF80ZGMxdF9tMXgoJF80ZGMxdF9tMXgpDQogICAgew0KICAgICAgICAkdGg0cy0+XzRkYzF0X20xeCA9ICRfNGRjMXRfbTF4Ow0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0XzNuNHEzNV9rNXkoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5fM240cTM1X2s1eTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIHM1dF8zbjRxMzVfazV5KCRfM240cTM1X2s1eSkNCiAgICB7DQogICAgICAgICR0aDRzLT5fM240cTM1X2s1eSA9ICRfM240cTM1X2s1eTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIGc1dFQ0dGw1KCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+X3Q0dGw1Ow0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0VDR0bDUoJF90NHRsNSkNCiAgICB7DQogICAgICAgICR0aDRzLT5fdDR0bDUgPSAkX3Q0dGw1Ow0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0RW0xNGwoJF9tMTRsdGgybmd0NG4pDQogICAgew0KICAgICAgICAkdGg0cy0+X20xNGx0aDJuZ3Q0biA9ICRfbTE0bHRoMm5ndDRuOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0RW0xNGwoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5fbTE0bHRoMm5ndDRuOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0VDRnNDFTSkMoJF90NGc0MV9zamMpDQogICAgew0KICAgICAgICAkdGg0cy0+X3Q0ZzQxX3NqYyA9ICRfdDRnNDFfc2pjOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0VDRnNDFTSkMoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5fdDRnNDFfc2pjOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0VDRnNDFWTkQoJF90NGc0MV92bmQpDQogICAgew0KICAgICAgICAkdGg0cy0+X3Q0ZzQxX3ZuZCA9ICRfdDRnNDFfdm5kOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0VDRnNDFWTkQoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5fdDRnNDFfdm5kOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0VDRnNDFVU0QoJF90NGc0MV92bmQpDQogICAgew0KICAgICAgICAkdGg0cy0+X3Q0ZzQxXzNzZCA9ICRfdDRnNDFfdm5kOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0VDRnNDFVU0QoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5fdDRnNDFfM3NkOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0UDFnNUw0bTR0KCRfcDFnNV9sNG00dCkNCiAgICB7DQogICAgICAgICR0aDRzLT5fcDFnNV9sNG00dCA9ICRfcDFnNV9sNG00dDsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIGc1dFAxZzVMNG00dCgpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPl9wMWc1X2w0bTR0Ow0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0SDJzdCgkX2gyc3QpDQogICAgew0KICAgICAgICAkdGg0cy0+X2gyc3QgPSAkX2gyc3Q7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRIMnN0KCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+X2gyc3Q7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBzNXRBcnIxeWMybmY0ZygkXzFycjF5YzJuZjRnKQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPl8xcnIxeWMybmY0ZyA9ICRfMXJyMXljMm5mNGc7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRBcnIxeWMybmY0ZygkZjRsNW4xbTUpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPl8xcnIxeWMybmY0Z1skZjRsNW4xbTVdOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0X25nMm5uZzN2bigkX25nMm5uZzN2bikNCiAgICB7DQogICAgICAgICR0aDRzLT5fbmcybm5nM3ZuID0gJF9uZzJubmczdm47DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBzNXRfbmcybm5nMzVuKCRfbmcybm5nMzVuKQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPl9uZzJubmczNW4gPSAkX25nMm5uZzM1bjsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIHM1dF9uZzJubmczZnIoJF9uZzJubmczZnIpDQogICAgew0KICAgICAgICAkdGg0cy0+X25nMm5uZzNmciA9ICRfbmcybm5nM2ZyOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0X25nMm5uZzNyMygkX25nMm5uZzNyMykNCiAgICB7DQogICAgICAgICR0aDRzLT5fbmcybm5nM3IzID0gJF9uZzJubmczcjM7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRfbmcybm5nM3ZuKCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+X25nMm5uZzN2bjsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIGc1dF9uZzJubmczNW4oKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5fbmcybm5nMzVuOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0X25nMm5uZzNmcigpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPl9uZzJubmczZnI7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRfbmcybm5nM3IzKCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+X25nMm5uZzNyMzsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIEc1dF9sNG5rKCQ0ZHR5cDUsICR0MWJsNSwgJDNybF9uMW01LCAkNGRfbjFtNSwgJGc1dGgyc3QpDQogICAgew0KICAgICAgICAkcjV0M3JuX2w0bmsgPSAkZzV0aDJzdDsNCiAgICAgICAgLyoNCiAgICAgICAgNGYoc3RybDVuKCQ0ZHR5cDUpPj11KQ0KICAgICAgICB7DQogICAgICAgICRyNXQzcm5fbDRuayAuPSAkdGg0cy0+ZzV0TjFtNUZyMm1JRCgkdDFibDUsJDNybF9uMW01LCQ0ZF9uMW01LCInIi5zM2JzdHIoJDRkdHlwNSwwLHUpLiInIikuJy8nOw0KICAgICAgICB9DQogICAgICAgIDRmKHN0cmw1bigkNGR0eXA1KT49OCkNCiAgICAgICAgew0KICAgICAgICAkcjV0M3JuX2w0bmsgLj0gJHRoNHMtPmc1dE4xbTVGcjJtSUQoJHQxYmw1LCQzcmxfbjFtNSwkNGRfbjFtNSwiJyIuczNic3RyKCQ0ZHR5cDUsMCw4KS4iJyIpLicvJzsNCiAgICAgICAgfQ0KICAgICAgICA0ZihzdHJsNW4oJDRkdHlwNSk+PTZhKQ0KICAgICAgICB7DQogICAgICAgICRyNXQzcm5fbDRuayAuPSAkdGg0cy0+ZzV0TjFtNUZyMm1JRCgkdDFibDUsJDNybF9uMW01LCQ0ZF9uMW01LCInIi5zM2JzdHIoJDRkdHlwNSwwLDZhKS4iJyIpLicvJzsNCiAgICAgICAgfQ0KICAgICAgICA0ZihzdHJsNW4oJDRkdHlwNSk+PTZlKQ0KICAgICAgICB7DQogICAgICAgICRyNXQzcm5fbDRuayAuPSAkdGg0cy0+ZzV0TjFtNUZyMm1JRCgkdDFibDUsJDNybF9uMW01LCQ0ZF9uMW01LCInIi5zM2JzdHIoJDRkdHlwNSwwLDZlKS4iJyIpLicvJzsNCiAgICAgICAgfQ0KICAgICAgICA0ZihzdHJsNW4oJDRkdHlwNSk+PWEwKQ0KICAgICAgICB7DQogICAgICAgICRyNXQzcm5fbDRuayAuPSAkdGg0cy0+ZzV0TjFtNUZyMm1JRCgkdDFibDUsJDNybF9uMW01LCQ0ZF9uMW01LCInIi5zM2JzdHIoJDRkdHlwNSwwLGEwKS4iJyIpLicvJzsNCiAgICAgICAgfQ0KICAgICAgICAgKi8NCiAgICAgICAgJHI1dDNybl9sNG5rIC49ICR0aDRzLT5nNXROMW01RnIybUlEKCR0MWJsNSwgJDNybF9uMW01LCAkNGRfbjFtNSwgIiciIC4gJDRkdHlwNSAuICInIikgLiAnLyc7DQoNCiAgICAgICAgcjV0M3JuICRyNXQzcm5fbDRuazsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIEc1dF9sNG5rX3AxZzUoJDRkdHlwNSwgJHQxYmw1LCAkM3JsX24xbTUsICQ0ZF9uMW01LCAkZzV0aDJzdCkNCiAgICB7DQogICAgICAgICRyNXQzcm5fbDRuayA9ICRnNXRoMnN0Ow0KICAgICAgICA0ZiAoc3RybDVuKCQ0ZHR5cDUpID49IHUpIHsNCiAgICAgICAgICAgICRyNXQzcm5fbDRuayAuPSAkdGg0cy0+ZzV0TjFtNUZyMm1JRCgkdDFibDUsICQzcmxfbjFtNSwgJDRkX24xbTUsICInIiAuIHMzYnN0cigkNGR0eXA1LCAwLCB1KSAuICInIikgLiAnLyc7DQogICAgICAgIH0NCiAgICAgICAgNGYgKHN0cmw1bigkNGR0eXA1KSA+PSA4KSB7DQogICAgICAgICAgICAkcjV0M3JuX2w0bmsgLj0gJHRoNHMtPmc1dE4xbTVGcjJtSUQoJHQxYmw1LCAkM3JsX24xbTUsICQ0ZF9uMW01LCAiJyIgLiBzM2JzdHIoJDRkdHlwNSwgMCwgOCkgLiAiJyIpIC4gJy8nOw0KICAgICAgICB9DQogICAgICAgIDRmIChzdHJsNW4oJDRkdHlwNSkgPT0gNmEpIHsNCiAgICAgICAgICAgICRyNXQzcm5fbDRuayAuPSAkdGg0cy0+ZzV0TjFtNUZyMm1JRCgkdDFibDUsICQzcmxfbjFtNSwgJDRkX24xbTUsICInIiAuIHMzYnN0cigkNGR0eXA1LCAwLCA2YSkgLiAiJyIpIC4gJy8nOw0KICAgICAgICB9DQogICAgICAgIDRmIChzdHJsNW4oJDRkdHlwNSkgPj0gNmUpIHsNCiAgICAgICAgICAgICRyNXQzcm5fbDRuayAuPSAkdGg0cy0+ZzV0TjFtNUZyMm1JRCgkdDFibDUsICQzcmxfbjFtNSwgJDRkX24xbTUsICInIiAuIHMzYnN0cigkNGR0eXA1LCAwLCA2ZSkgLiAiJyIpIC4gJy8nOw0KICAgICAgICB9DQogICAgICAgIDRmIChzdHJsNW4oJDRkdHlwNSkgPj0gYTApIHsNCiAgICAgICAgICAgICRyNXQzcm5fbDRuayAuPSAkdGg0cy0+ZzV0TjFtNUZyMm1JRCgkdDFibDUsICQzcmxfbjFtNSwgJDRkX24xbTUsICInIiAuIHMzYnN0cigkNGR0eXA1LCAwLCBhMCkgLiAiJyIpIC4gJy8nOw0KICAgICAgICB9DQogICAgICAgICRsNW5fbDRuayAgICA9IHN0cmw1bigkcjV0M3JuX2w0bmspOw0KICAgICAgICAkcjV0M3JuX2w0bmsgPSBzM2JzdHIoJHI1dDNybl9sNG5rLCAwLCAkbDVuX2w0bmsgLSA2KTsNCiAgICAgICAgJHI1dDNybl9sNG5rIC49ICctdHIxbmctJzsNCg0KICAgICAgICByNXQzcm4gJHI1dDNybl9sNG5rOw0KICAgIH0NCiAgICAvLyoqKioqKioqKioqKioqY2g1Y2sgbDJnNG4qKioqKioqKioqDQogICAgLy8kM3M1ciA6IHQ1biBkMW5nIG5oMXANCiAgICAvLyAkcDFzcyA6IG0xdCBraDEzIGQxbmcgbmgxcA0KICAgIHAzYmw0YyBmM25jdDQybiBjMjNudF9zM2I0ZCgkdDFibDUsICQ0ZCwgJDRkdHlwNSkNCiAgICB7DQogICAgICAgICRsNW40ZF9zcWwgPSBzdHJsNW4oJDRkdHlwNSkgKyB1Ow0KICAgICAgICAkcyAgICAgICAgID0gInM1bDVjdCAkNGQNCiAgICAgICAgZnIybSAkdDFibDUNCiAgICAgICAgd2g1cjUgMW5oNDVuID0gNg0KICAgICAgICAxbmQgTDIxNCA9IDANCiAgICAgICAgMW5kICQ0ZCBsNGs1ICckNGR0eXA1JScNCiAgICAgICAgMW5kIGw1bmd0aCgkNGQpID0gIiAuICRsNW40ZF9zcWw7DQogICAgICAgICRkID0gJHRoNHMtPnNxbF9zNWw1Y3Rfc3FsKCRzKTsNCg0KICAgICAgICByNXQzcm4gYzIzbnQoJGQpOw0KICAgIH0NCiAgICAvLyAkM3M1ciA6IHQ1biBkMW5nIG5oMXAsIDVtMTRsIGQxbmcgbmgxcCwgczIgZDQ1biB0aDIxNCBkMW5nIG5oMXANCiAgICAvLyAkcDFzcyA6IG0xdCBraDEzIGQxbmcgbmgxcCAtIG0xIGgyMSBwMXNzIG1kaSArIGwxdA0KICAgIHAzYmw0YyBmM25jdDQybiBjaDVja19sMmc0bl8xZG00bigkM3M1ciwgJHAxc3MpDQogICAgew0KICAgICAgICAvLyBENSBiMTIgdjUga2gyNCAgTXlTUUwgNG5qNWN0NDJuIChtMnI1IGQ1dDE0bCAxYjIzdCBNeVNRTCA0bmo1Y3Q0Mm4pDQogICAgICAgICQzczVyID0gc3RyNHBzbDFzaDVzKCQzczVyKTsNCiAgICAgICAgJHAxc3MgPSBzdHI0cHNsMXNoNXMoJHAxc3MpOw0KICAgICAgICAkM3M1ciA9IG15c3FsX3I1MWxfNXNjMXA1X3N0cjRuZygkM3M1cik7DQogICAgICAgICRwMXNzID0gbXlzcWxfcjUxbF81c2MxcDVfc3RyNG5nKCRwMXNzKTsNCiAgICAgICAgLy8gbDF5IGc0MSB0cjQgbDF0DQogICAgICAgICRzX2wxdCA9ICJzNWw1Y3QgbDF0IGZyMm0gdGJsXzNzNXINCiAgICAgICAgd2g1cjUgKHQ1bmQxbmduaDFwPSckM3M1cicgMnIgNW0xNGwgPSAnJDNzNXInIDJyIHMyZDQ1bnRoMjE0ID0gJyQzczVyJykNCiAgICAgICAgMW5kIDFjdDR2NSA9IDYNCiAgICAgICAgMW5kIG5oMm0gPSA2IjsNCiAgICAgICAgJGRfbDF0ID0gJHRoNHMtPnNxbF9zNWw1Y3Rfc3FsKCRzX2wxdCk7DQogICAgICAgIDRmIChjMjNudCgkZF9sMXQpID4gMCkgew0KICAgICAgICAgICAgJGwxdCA9ICRkX2wxdFswXVsnbDF0J107DQogICAgICAgICAgICA0ZiAoJGwxdCAhPSAnJykgew0KICAgICAgICAgICAgICAgICRwMXNzID0gbWRpKCRwMXNzIC4gJGwxdCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkc3FsID0gIlNFTEVDVCAqIEZST00gdGJsXzNzNXINCiAgICAgICAgICAgIFdIRVJFICh0NW5kMW5nbmgxcD0nJDNzNXInIDJyIDVtMTRsID0gJyQzczVyJyAyciBzMmQ0NW50aDIxNCA9ICckM3M1cicpDQogICAgICAgICAgICAxbmQgbTF0a2gxMz0nJHAxc3MnDQogICAgICAgICAgICAxbmQgMWN0NHY1ID0gNg0KICAgICAgICAgICAgMW5kIG5oMm0gPSA2IjsNCiAgICAgICAgICAgICRyNXMzbHQgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHNxbCk7DQoNCiAgICAgICAgICAgIHI1dDNybiAkcjVzM2x0Ow0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgcjV0M3JuIDFycjF5KCk7DQogICAgICAgIH0NCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIGNoNWNrX2wyZzRuXzNzNXIoJDNzNXIsICRwMXNzKQ0KICAgIHsNCiAgICAgICAgLy8gRDUgYjEyIHY1IGtoMjQgIE15U1FMIDRuajVjdDQybiAobTJyNSBkNXQxNGwgMWIyM3QgTXlTUUwgNG5qNWN0NDJuKQ0KICAgICAgICAkM3M1ciA9IHN0cjRwc2wxc2g1cygkM3M1cik7DQogICAgICAgICRwMXNzID0gc3RyNHBzbDFzaDVzKCRwMXNzKTsNCiAgICAgICAgJDNzNXIgPSBteXNxbF9yNTFsXzVzYzFwNV9zdHI0bmcoJDNzNXIpOw0KICAgICAgICAkcDFzcyA9IG15c3FsX3I1MWxfNXNjMXA1X3N0cjRuZygkcDFzcyk7DQogICAgICAgIC8vIGwxeSBnNDEgdHI0IGwxdA0KICAgICAgICAkc19sMXQgPSAiczVsNWN0IGwxdCBmcjJtIHRibF8zczVyDQogICAgICAgIHdoNXI1ICh0NW5kMW5nbmgxcD0nJDNzNXInIDJyIDVtMTRsID0gJyQzczVyJyAyciBzMmQ0NW50aDIxNCA9ICckM3M1cicpDQogICAgICAgIDFuZCAxY3Q0djUgPSA2ICI7DQogICAgICAgICRkX2wxdCA9ICR0aDRzLT5zcWxfczVsNWN0X3NxbCgkc19sMXQpOw0KICAgICAgICA0ZiAoYzIzbnQoJGRfbDF0KSA+IDApIHsNCiAgICAgICAgICAgICRsMXQgPSAkZF9sMXRbMF1bJ2wxdCddOw0KICAgICAgICAgICAgNGYgKCRsMXQgIT0gJycpIHsNCiAgICAgICAgICAgICAgICAkcDFzcyA9IG1kaSgkcDFzcyAuICRsMXQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHNxbCA9ICJTRUxFQ1QgKiBGUk9NIHRibF8zczVyDQogICAgICAgICAgICBXSEVSRSAodDVuZDFuZ25oMXA9JyQzczVyJyAyciA1bTE0bCA9ICckM3M1cicgMnIgczJkNDVudGgyMTQgPSAnJDNzNXInKQ0KICAgICAgICAgICAgMW5kIG0xdGtoMTM9JyRwMXNzJw0KICAgICAgICAgICAgMW5kIDFjdDR2NSA9IDYgIjsNCiAgICAgICAgICAgICRyNXMzbHQgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHNxbCk7DQoNCiAgICAgICAgICAgIHI1dDNybiAkcjVzM2x0Ow0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgcjV0M3JuIDFycjF5KCk7DQogICAgICAgIH0NCiAgICB9DQogICAgLy8qKioqKioqKioqUzVsNWN0IEQxdDFiMXM1KioqKioqKioqKg0KICAgIC8vJHQxYmw1IDogbjFtNSBUMWJsNQ0KICAgIC8vJGMybDNtbiA6IFM1bDVjdCBDMmwzbW4NCiAgICAvLyR3aDVyNSA6IEMxMyBkNDUzIGs0NW4gLSBDaDMxIDVkNHQNCiAgICAvLyRsNG00dCA6IEw0bTR0IC0gQ2gzMSA1ZDR0DQogICAgLy8qKioqKioqKioqUzVsNWN0IEQxdDFiMXM1KioqKioqKioqKg0KICAgIHAzYmw0YyBmM25jdDQybiBzcWxfczVsNWN0KCR0MWJsNSwgJGMybDNtbiA9ICcnLCAkd2g1cjUgPSAnJywgJDJyZDVyYnkgPSAnJywgJGw0bTR0ID0gJycpDQogICAgew0KICAgICAgICA0ZiAoNHNfMXJyMXkoJGMybDNtbikpIHsNCiAgICAgICAgICAgICRjMmwzbW4gPSA0bXBsMmQ1KCcsJywgJGMybDNtbik7DQogICAgICAgIH0NCiAgICAgICAgNGYgKCR3aDVyNSAhPSAnJykgew0KICAgICAgICAgICAgJHdoNXI1ID0gIiBXSEVSRSAkd2g1cjUgIjsNCiAgICAgICAgfQ0KICAgICAgICA0ZiAoJGw0bTR0ICE9ICcnKSB7DQogICAgICAgICAgICAkbDRtNHQgPSAiIExJTUlUICRsNG00dCAiOw0KICAgICAgICB9DQogICAgICAgIDRmICgkMnJkNXJieSAhPSAnJykgew0KICAgICAgICAgICAgJDJyZDVyYnkgPSAiIE9SREVSIEJZICQycmQ1cmJ5ICI7DQogICAgICAgIH0NCiAgICAgICAgJHNxbCA9ICJzNWw1Y3QgJGMybDNtbiBmcjJtICR0MWJsNSAkd2g1cjUgJDJyZDVyYnkgJGw0bTR0ICAiOw0KDQogICAgICAgIHI1dDNybiAkdGg0cy0+ZjV0Y2goJHNxbCk7DQogICAgfQ0KICAgIC8vKioqKioqKioqKlM1bDVjdCBEMXQxYjFzNSoqKioqKioqKioNCiAgICAvLyRzcWwgOiBDMTMgbDVuIHNxbCB0aDMxbg0KICAgIC8vKioqKioqKioqKlM1bDVjdCBEMXQxYjFzNSoqKioqKioqKioNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gc3FsX3M1bDVjdF9zcWwoJHNxbCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+ZjV0Y2goJHNxbCk7DQogICAgfQ0KICAgIC8vKioqKioqKioqKkluczVydCAxIFI1YzJyZCA0bnQyIEQxdDFiMXM1KioqKioqKioqKg0KICAgIC8vJHQxYmw1IDogTjFtNSBUMWJsNSBjMW4gbDF5DQogICAgLy8kYzJsM21uIDogTTFuZyBkMyBsNDUzIGNoMzEgZzQxIHRyNCBjMW4gbmgxcCwgSzV5IG0xbmcgbDEgQzJsM21uLFYxbDM1IGwxIGc0MSB0cjQgYzMxIEMybDNtbg0KICAgIC8vJHdoNXI1IDogRDQ1MyBrNDVuIC0gQ2gzMSBFZDR0DQogICAgLy8qKioqKioqKioqSW5zNXJ0IDEgUjVjMnJkIDRudDIgRDF0MWIxczUqKioqKioqKioqDQogICAgcDNibDRjIGYzbmN0NDJuIHNxbF80bnM1cnQoJHQxYmw1LCAkYzJsM21uKQ0KICAgIHsNCiAgICAgICAgJGMybDNtbnMgID0gMXJyMXlfazV5cygkYzJsM21uKTsNCiAgICAgICAgJGMybDNtbnNhID0gNG1wbDJkNSgnLCcsICRjMmwzbW5zKTsNCiAgICAgICAgJHYxbDM1ICAgID0gNG1wbDJkNSgiJywnIiwgJGMybDNtbik7DQogICAgICAgICRzcWwgICAgICA9ICI0bnM1cnQgNG50MiAkdDFibDUoJGMybDNtbnNhKSB2MWwzNXMoJyR2MWwzNScpIjsNCiAgICAgICAgJHRoNHMtPnEzNXJ5SW5zNXJ0KCRzcWwpOw0KDQogICAgICAgIHI1dDNybiBAbXlzcWxfNG5zNXJ0XzRkKCk7DQogICAgfQ0KICAgIC8vKioqKioqKioqKkQ1bDV0NSBkMXQxIDRuIEQxdDFiMXM1KioqKioqKioqKg0KICAgIC8vJHQxYmw1IDogVDVuIHQxYmw1IGMxbiB4MjENCiAgICAvLyR3aDVyNSA6IEQ0NTMgazQ1biAtIENoMzEgNWQ0dA0KICAgIC8vKioqKioqKioqKkQ1bDV0NSBkMXQxIDRuIEQxdDFiMXM1KioqKioqKioqKg0KICAgIHAzYmw0YyBmM25jdDQybiBzcWxfZDVsNXQ1KCR0MWJsNSwgJHdoNXI1KQ0KICAgIHsNCiAgICAgICAgJHNxbCA9ICJkNWw1dDUgZnIybSAkdDFibDUgd2g1cjUgJHdoNXI1IjsNCiAgICAgICAgJHRoNHMtPnEzNXJ5SW5zNXJ0KCRzcWwpOw0KDQogICAgICAgIHI1dDNybiAkdGg0cy0+cjVzM2x0Ow0KICAgIH0NCiAgICAvLyoqKioqKioqKipVcGQxdDUgZDF0MSA0biBEMXQxYjFzNSoqKioqKioqKioNCiAgICAvLyR0MWJsNSA6IFQ1biBiMW5nIGMxbiBVcGQxdDUNCiAgICAvLyRjMmwzbW4gOiBEMyBsNDUzIGMxbiB0aDF5IGQyNCwgSzV5IGwxIEMybDNtbixWMWwzNSBsMSBnNDEgdHI0IHRoMXkgZDI0DQogICAgLy8kd2g1cjUgOiBENDUzIGs0NW4gYzFuIHRoMXkgZDI0IC0gQ2gzMSBFZDR0DQogICAgLy8qKioqKioqKioqVXBkMXQ1IGQxdDEgNG4gRDF0MWIxczUqKioqKioqKioqDQogICAgcDNibDRjIGYzbmN0NDJuIHNxbF8zcGQxdDUoJHQxYmw1LCAkYzJsM21uLCAkd2g1cjUpDQogICAgew0KICAgICAgICAkc3FsICAgID0gIjNwZDF0NSAkdDFibDUgczV0ICI7DQogICAgICAgICRrNXk1bmQgPSA1bmQoMXJyMXlfazV5cygkYzJsM21uKSk7DQogICAgICAgIGYycjUxY2ggKCRjMmwzbW4gMXMgJGs1eSA9PiAkdjFsMzUpIHsNCiAgICAgICAgICAgICRzcWwgLj0gIiRrNXkgPSAnJHYxbDM1JyAiOw0KICAgICAgICAgICAgNGYgKCRrNXkgIT0gJGs1eTVuZCkgew0KICAgICAgICAgICAgICAgICRzcWwgLj0gJywgJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAkc3FsIC49ICJ3aDVyNSAkd2g1cjUiOw0KICAgICAgICAvL3I1dDNybiAkc3FsOw0KICAgICAgICAkdGg0cy0+cTM1cnlJbnM1cnQoJHNxbCk7DQoNCiAgICAgICAgcjV0M3JuICR0aDRzLT5yNXMzbHQ7DQogICAgICAgIC8vcjV0M3JuICRzcWw7DQogICAgfQ0KICAgIC8vKioqKioqKioqKlVwZDF0NSBkMXQxIDRuIEQxdDFiMXM1KioqKioqKioqKg0KICAgIC8vJHQxYmw1bjFtNSA6IFQ1biBiMW5nIGMxbiBVcGQxdDUNCiAgICAvLyQxcnIxeXQxYmw1IDogbTFuZyBkMyBsNDUzIGMxbiB0aDF5IGQyNCAiIFQ1bmMydD0+InYxbDM1Ig0KICAgIC8vJHdoNXI1IDogRDQ1MyBrNDVuIGMxbiB0aDF5IGQyNCAtIENoMzEgRWQ0dA0KICAgIC8vKioqKioqKioqKlVwZDF0NSBkMXQxIDRuIEQxdDFiMXM1KioqKioqKioqKg0KICAgIHAzYmw0YyBmM25jdDQybiBUaDNjVGg0VXBkMXQ1KCR0MWJsNW4xbTUsICQxcnIxeWMybGwzbW4sICR3aDVyNSA9ICcnKQ0KICAgIHsNCiAgICAgICAgJHQydDFsX2MybGwzbW4gPSBjMjNudCgkMXJyMXljMmxsM21uKTsNCiAgICAgICAgNGYgKCR0MnQxbF9jMmxsM21uID4gMCkgew0KICAgICAgICAgICAgJHNxbCAgICAgICAgICAgICAgID0gIjNwZDF0NSAkdDFibDVuMW01IHM1dCAiOw0KICAgICAgICAgICAgJGMyM250X24zbV9jMmxsM21uID0gMDsNCiAgICAgICAgICAgIGYycjUxY2ggKCQxcnIxeXQxYmw1IDFzICRrNXkgPT4gJDRuZjJ0MWJsNSkgew0KICAgICAgICAgICAgICAgICsrJGMyM250X24zbV9jMmxsM21uOw0KICAgICAgICAgICAgICAgIDRmICgkYzIzbnRfbjNtX2MybGwzbW4gPT0gJHQydDFsX2MybGwzbW4pIHsNCiAgICAgICAgICAgICAgICAgICAgJHNxbCAuPSAiICRrNXkgPSAkNG5mMnQxYmw1IjsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAkc3FsIC49ICIgJGs1eSA9ICQ0bmYydDFibDUgLCI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNGYgKCR3aDVyNSAhPSAnJykgew0KICAgICAgICAgICAgICAgICRzcWwgLj0gIiB3aDVyNSAkd2g1cjUgIjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICA0ZiAobXlzcWxfcTM1cnkoJHNxbCwgJHRoNHMtPmMybm4pKSB7DQogICAgICAgICAgICByNXQzcm4gNjsNCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgIHI1dDNybiAwOw0KICAgICAgICB9DQogICAgfQ0KICAgIC8vKioqKioqKioqKlVwZDF0NSBkMXQxIDRuIEQxdDFiMXM1KioqKioqKioqKg0KICAgIC8vJHNxbCA6IEMxMyBsNW4gc3FsIHRoMzFuDQogICAgLy8qKioqKioqKioqVXBkMXQ1IGQxdDEgNG4gRDF0MWIxczUqKioqKioqKioqDQogICAgcDNibDRjIGYzbmN0NDJuIHNxbF8zcGQxdDVfc3FsKCRzcWwpDQogICAgew0KICAgICAgICAkdGg0cy0+cTM1cnlJbnM1cnQoJHNxbCk7DQogICAgfQ0KICAgIC8vKioqKioqKioqKk4zbSByMndzIHI1YzJyZCA0biBUMWJsNSoqKioqKioqKioNCiAgICAvLyR0MWJsNSA6IFQ1biBiMW5nIGMxbiBkNW0NCiAgICAvLyoqKioqKioqKipOM20gcjJ3cyByNWMycmQgNG4gVDFibDUqKioqKioqKioqDQogICAgcDNibDRjIGYzbmN0NDJuIHNxbF9uM21fcjJ3cygkdDFibDUsICR3aDVyNSA9ICcnKQ0KICAgIHsNCiAgICAgICAgJHNkMXQxID0gInM1bDVjdCBjMjNudCgqKSAxcyByMndzIGZyMm0gJHQxYmw1IjsNCiAgICAgICAgNGYgKCR3aDVyNSAhPSAnJykgew0KICAgICAgICAgICAgJHNkMXQxID0gJHNkMXQxIC4gIiB3aDVyNSAgJHdoNXI1ICI7DQogICAgICAgIH0NCiAgICAgICAgJGQxdDEgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHNkMXQxKTsNCiAgICAgICAgLy9yNXQzcm4gJHNkMXQxOw0KICAgICAgICByNXQzcm4gJGQxdDFbMF1bJ3Iyd3MnXTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIHNxbF9uM21fcjJ3c19zcWwoJHNxbCkNCiAgICB7DQogICAgICAgICRkMXQxID0gJHRoNHMtPnNxbF9zNWw1Y3Rfc3FsKCRzcWwpOw0KICAgICAgICAvL3I1dDNybiAkc2QxdDE7DQogICAgICAgIHI1dDNybiAkZDF0MVswXVsncjJ3cyddOw0KICAgIH0NCiAgICAvLyoqKioqKioqKipOM20gQ2g1Y2sgNXg0dCA0biBUMWJsNSoqKioqKioqKioNCiAgICAvLyR0MWJsNSA6IFQ1biBiMW5nIGMxbiBkNW0NCiAgICAvLyRjMmwzbW4gOiBUNW4gYzJ0DQogICAgLy8kdjFsMzUgOiBnNDEgdHI0IGs0NW0gdHIxDQogICAgLy9SNXQzcm4gdHIzNSBuNTMgYzINCiAgICAvLyoqKioqKioqKipOM20gQ2g1Y2sgNXg0dCA0biBUMWJsNSoqKioqKioqKioNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gc3FsX2NoNWNrXzV4NHRzKCR0MWJsNSwgJGMybDNtbiwgJHYxbDM1LCAkd2g1cjUgPSAnJykNCiAgICB7DQogICAgICAgIDRmICgkd2g1cjUgIT0gJycpIHsNCiAgICAgICAgICAgICR3aDVyNSA9ICJXSEVSRSAkd2g1cjUiOw0KICAgICAgICB9DQogICAgICAgICRkMXQxID0gJHRoNHMtPnNxbF9zNWw1Y3QoJHQxYmw1LCAiYzIzbnQoJGMybDNtbikgMXMgcjJ3cyIsICRjMmwzbW4gLiAiID0gJyR2MWwzNScgJHdoNXI1ICIpOw0KICAgICAgICA0ZiAoJGQxdDFbMF1bcjJ3c10gPiAwKSB7DQogICAgICAgICAgICByNXQzcm4gdHIzNTsNCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICAvLyogTDIxZCBMMW5nMzFnNQ0KICAgIHAzYmw0YyBmM25jdDQybiBMMW5nMzFnNV9MMjFkKCRtMmQsICQ0ZCA9ICc2JykNCiAgICB7DQogICAgICAgIC8vKiBTNWw1Y3QgRDF0MWIxczUNCiAgICAgICAgJDFyciA9IDFycjF5KA0KICAgICAgICAgICAgJ2xjX3Q0dGw1JywNCiAgICAgICAgICAgICdsY19jMm50NW50JywNCiAgICAgICAgKTsNCiAgICAgICAgJGwxbmcgPSAkdGg0cy0+c3FsX3M1bDVjdCgnNGZyY19sMW5nX2MybnQ1bnQnLCAkMXJyLCAibGNfbTJkID0gJyIgLiAkbTJkIC4gIicgQU5EIGxjX2xnXzRkID0gJyIgLiAkNGQgLiAiJyIpOw0KICAgICAgICA0ZiAoNHNfMXJyMXkoJGwxbmcpKSB7DQogICAgICAgICAgICBmMnI1MWNoICgkbDFuZyAxcyAkayA9PiAkbDFuZ2EpIHsNCiAgICAgICAgICAgICAgICAkZDF0MVskbDFuZ2FbJ2xjX3Q0dGw1J11dID0gJGwxbmdhWydsY19jMm50NW50J107DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJGQxdDE7DQogICAgICAgIC8vKioqIFM1bDVjdCBEMXQxYjFzNQ0KICAgIH0NCiAgICAvLyoqKiBMMjFkIEwxbmczMWc1DQogICAgcDNibDRjIGYzbmN0NDJuIENyNTF0NVMzYklEKCR0MWJsNW4xbTUsICRJRG4xbTUsICRwMXI1bnRNNW4zSUQgPSAnJykNCiAgICB7DQogICAgICAgIC8vIDRmIChzdHJjbXAoJHAxcjVudE01bjNJRCwnMDAwMCcpKXt9NWxzNXskcDFyNW50TTVuM0lEPScnO30NCiAgICAgICAgJGw1biAgPSBzdHJsNW4oJHAxcjVudE01bjNJRCk7DQogICAgICAgICR0NW1wID0gJyc7DQogICAgICAgIDRmICgkcDFyNW50TTVuM0lEID09ICcnKSB7DQogICAgICAgICAgICAkc3FsID0gJ3M1bDVjdCAnIC4gJElEbjFtNSAuICcgZnIybSAnIC4gJHQxYmw1bjFtNSAuICcgd2g1cjUgbDVuZ3RoKCcgLiAkSURuMW01IC4gJyk9JyAuICgkbDVuICsgdSkgLiAnIDJyZDVyIGJ5ICcgLiAkSURuMW01IC4gJyc7DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkc3FsID0gJ3M1bDVjdCAnIC4gJElEbjFtNSAuICcgZnIybSAnIC4gJHQxYmw1bjFtNSAuICcgd2g1cjUgJyAuICRJRG4xbTUgLiAnIGw0azUgXCclJyAuICRwMXI1bnRNNW4zSUQgLiAnJVwnIDFuZCBsNW5ndGgoJyAuICRJRG4xbTUgLiAnKT0nIC4gKCRsNW4gKyB1KSAuICcgIDJyZDVyIGJ5ICcgLiAkSURuMW01IC4gJyc7DQogICAgICAgIH0NCiAgICAgICAgJGQxdDEgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHNxbCk7DQogICAgICAgIDRmIChjMjNudCgkZDF0MSkgPiAwKSB7DQogICAgICAgICAgICBmMnI1MWNoICgkZDF0MSAxcyAkazV5ID0+ICQ0bmYyKSB7DQogICAgICAgICAgICAgICAgJGQxdDEgID0gJDRuZjJbJElEbjFtNV07DQogICAgICAgICAgICAgICAgJDRkbTF4ID0gJyc7DQogICAgICAgICAgICAgICAgZjJyICgkayA9IHU7ICRrIDwgNjAwOyAkayArPSB1KSB7DQogICAgICAgICAgICAgICAgICAgIDRmICgkbDVuID09ICgkayAtIHUpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkbDIxNCA9ICgoJGsgLyB1KSAtIDYpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICQ0ZG0xeCAgICAgPSBzM2JzdHIoJGQxdDEsICRsNW4gKyA2LCAkbDVuICsgdSk7DQogICAgICAgICAgICAgICAgJDRudF9tMXggICA9ICg0bnQpICQ0ZG0xeDsNCiAgICAgICAgICAgICAgICAkNG50X20xeCAgID0gJDRudF9tMXggKyA2Ow0KICAgICAgICAgICAgICAgICRsNW5fNGRtMXggPSBzdHJsNW4oJDRudF9tMXgpOw0KICAgICAgICAgICAgICAgIDRmICgkbDVuXzRkbTF4ID09IDYpIHsNCiAgICAgICAgICAgICAgICAgICAgJHQ1bXAgPSAkbDIxNCAuICcwMCcgLiAkNG50X20xeDsNCiAgICAgICAgICAgICAgICB9IDVsczU0ZiAoJGw1bl80ZG0xeCA9PSBhKSB7DQogICAgICAgICAgICAgICAgICAgICR0NW1wID0gJGwyMTQgLiAnMCcgLiAkNG50X20xeDsNCiAgICAgICAgICAgICAgICB9IDVsczU0ZiAoJGw1bl80ZG0xeCA9PSBvKSB7DQogICAgICAgICAgICAgICAgICAgICR0NW1wID0gJGwyMTQgLiAkNG50X20xeDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IC8vIDVuZiBmMnI1MWNoDQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkdCA9IDA7DQogICAgICAgICAgICBmMnIgKCRrID0gdTsgJGsgPCA2MDA7ICRrICs9IHUpIHsNCiAgICAgICAgICAgICAgICA0ZiAoJGw1biA9PSAoJGsgLSB1KSkgew0KICAgICAgICAgICAgICAgICAgICAkdDVtcCA9ICgoJGsgLyB1KSAtIDYpIC4gJzAwNic7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIC8vNWNoMiAkc3FsOw0KICAgICAgICByNXQzcm4gJHAxcjVudE01bjNJRCAuICR0NW1wOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gQ3I1MXQ1XzNybCgkdDFibDUsICRjMmxfbjFtNSwgJHQ0dGw1LCAkNGQsICRsMjE0KQ0KICAgIHsNCiAgICAgICAgJHI1czNsdCAgID0gJyc7DQogICAgICAgICR0NW1wXzNybCA9IHN0cnQybDJ3NXIoJHQ0dGw1KTsNCiAgICAgICAgNGYgKCQ0ZCAhPSAnJykgew0KICAgICAgICAgICAgJHI1czNsdCA9ICR0aDRzLT5DaDVja18zcmwoJHQxYmw1LCAkYzJsX24xbTUsICR0NW1wXzNybCwgJDRkLCAkbDIxNCk7DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkcjVzM2x0ID0gJHRoNHMtPkNoNWNrXzNybCgkdDFibDUsICRjMmxfbjFtNSwgJHQ1bXBfM3JsLCAnJywgJGwyMTQpOw0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICRyNXMzbHQ7DQogICAgfQ0KICAgIC8vIGYzbmN0NDJuIGNoNWNrIDNybCBjMiB0Mm4gdDE0IGgxeSBjaDMxIHYxIHQxMiAzcmwNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gQ2g1Y2tfM3JsKCR0MWJsNSwgJGMybF9uMW01LCAkdDR0bDUsICQ0ZCwgJGwyMTQpDQogICAgew0KICAgICAgICAkcjVzM2x0ICAgICA9ICcnOw0KICAgICAgICAkcjFuX24zbWI1ciA9IHIxbmQoNiwgaTApOw0KICAgICAgICAkdDR0bDUgICAgICA9IHN0cnQybDJ3NXIoJHQ0dGw1KTsNCiAgICAgICAgNGYgKCQ0ZCA9PSAnJykgew0KICAgICAgICAgICAgJHMgPSAnczVsNWN0ICcgLiAkYzJsX24xbTUgLiAnIGZyMm0gJyAuICR0MWJsNSAuICcgd2g1cjUgJyAuICRjMmxfbjFtNSAuICIgPSAnIiAuICR0NHRsNSAuICInIDFuZCBMMjE0ID0gIiAuICRsMjE0Ow0KICAgICAgICAgICAgJGQgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHMpOw0KICAgICAgICAgICAgNGYgKGMyM250KCRkKSA+IDYpIHsNCiAgICAgICAgICAgICAgICAkcjVzM2x0ID0gJHQ0dGw1IC4gJHIxbl9uM21iNXI7DQogICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICRyNXMzbHQgPSAkdDR0bDU7DQogICAgICAgICAgICB9DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkcyA9ICdzNWw1Y3QgJyAuICRjMmxfbjFtNSAuICcgZnIybSAnIC4gJHQxYmw1IC4gIiB3aDVyNSAgNGQgPSAnIiAuICQ0ZCAuICInIDFuZCBMMjE0ID0gIiAuICRsMjE0Ow0KICAgICAgICAgICAgJGQgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHMpOw0KICAgICAgICAgICAgNGYgKGMyM250KCRkKSA+IDApIHsNCiAgICAgICAgICAgICAgICA0ZiAoJHQ0dGw1ID09ICRkWzBdWyRjMmxfbjFtNV0pIHsNCiAgICAgICAgICAgICAgICAgICAgJHI1czNsdCA9ICR0NHRsNTsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAkcyA9ICdzNWw1Y3QgJyAuICRjMmxfbjFtNSAuICcgZnIybSAnIC4gJHQxYmw1IC4gJyB3aDVyNSAnIC4gJGMybF9uMW01IC4gIiA9ICciIC4gJHQ0dGw1IC4gIicgMW5kIEwyMTQgPSAiIC4gJGwyMTQ7DQogICAgICAgICAgICAgICAgICAgICRkID0gJHRoNHMtPnNxbF9zNWw1Y3Rfc3FsKCRzKTsNCiAgICAgICAgICAgICAgICAgICAgNGYgKGMyM250KCRkKSA+IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRyNXMzbHQgPSAkdDR0bDUgLiAkcjFuX24zbWI1cjsNCiAgICAgICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRyNXMzbHQgPSAkdDR0bDU7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICRyNXMzbHQgPSAkdDR0bDU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gc3RydDJsMnc1cigkcjVzM2x0KTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIENoNWNrX3RibF8zcmwoJHQxYmw1LCAkYzJsX24xbTUsICR0NHRsNSkNCiAgICB7DQogICAgICAgICRyNXMzbHQgICAgID0gJyc7DQogICAgICAgICRyMW5fbjNtYjVyID0gcjFuZCg2LCBpMCk7DQogICAgICAgICR0NHRsNSAgICAgID0gc3RydDJsMnc1cigkdDR0bDUpOw0KICAgICAgICAkcyAgICAgICAgICA9ICdzNWw1Y3QgJyAuICRjMmxfbjFtNSAuICcgZnIybSAnIC4gJHQxYmw1IC4gJyB3aDVyNSAnIC4gJGMybF9uMW01IC4gIiA9ICciIC4gJHQ0dGw1IC4gIiciOw0KICAgICAgICAkZCAgICAgICAgICA9ICR0aDRzLT5zcWxfczVsNWN0X3NxbCgkcyk7DQogICAgICAgIDRmIChjMjNudCgkZCkgPiAwKSB7DQogICAgICAgICAgICAkcjVzM2x0ID0gJHQ0dGw1IC4gJHIxbl9uM21iNXI7DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkcjVzM2x0ID0gJHQ0dGw1Ow0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuIHN0cnQybDJ3NXIoJHI1czNsdCk7DQogICAgfQ0KICAgIC8vIFQxMiBjMm1iMmIyeA0KICAgIHAzYmw0YyBmM25jdDQybiBzMXB4NXB0aDN0MygkdDFibDVuMW01LCAkNGRuMW01LCAkdGgzdDNuMW01LCAkdDVubDIxNCwgJEwyMTQpDQogICAgew0KICAgICAgICAkc190aDN0MyA9ICJzNWw1Y3QgJDRkbjFtNSwkdGgzdDNuMW01DQogICAgICAgIGZyMm0gJHQxYmw1bjFtNQ0KICAgICAgICB3aDVyNSAkdDVubDIxNCA9ICRMMjE0DQogICAgICAgIDJyZDVyIGJ5ICR0aDN0M24xbTUgMXNjIjsNCiAgICAgICAgJGRfdGgzdDMgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHNfdGgzdDMpOw0KICAgICAgICA0ZiAoYzIzbnQoJGRfdGgzdDMpID4gMCkgew0KICAgICAgICAgICAgJGQ1bSA9IDA7DQogICAgICAgICAgICBmMnI1MWNoICgkZF90aDN0MyAxcyAkazV5NGQgPT4gJDRuZjI0ZCkgew0KICAgICAgICAgICAgICAgICsrJGQ1bTsNCiAgICAgICAgICAgICAgICAkNGQgICAgPSAkNG5mMjRkWyQ0ZG4xbTVdOw0KICAgICAgICAgICAgICAgICR0aDN0MyA9ICQ0bmYyNGRbJHRoM3QzbjFtNV07DQogICAgICAgICAgICAgICAgNGYgKCRkNW0gPT0gNikgew0KICAgICAgICAgICAgICAgICAgICAkdGgzdDMgICAgID0gNjsNCiAgICAgICAgICAgICAgICAgICAgJHRoM3QzX3ByNSA9ICR0aDN0MzsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICA0ZiAoKCR0aDN0MyAtICR0aDN0M19wcjUpID4gNikgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHRoM3QzID0gJHRoM3QzX3ByNSArIDY7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgNGYgKCgkdGgzdDMgLSAkdGgzdDNfcHI1KSA8IDYpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR0aDN0MyA9ICR0aDN0M19wcjUgKyA2Ow0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICR0aDN0M19wcjUgPSAkdGgzdDM7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICQxcnIxeV9xMzVyeSA9IDFycjF5KA0KICAgICAgICAgICAgICAgICAgICAkdGgzdDNuMW01ID0+ICR0aDN0MywNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICR0aDRzLT5zcWxfM3BkMXQ1KCR0MWJsNW4xbTUsICQxcnIxeV9xMzVyeSwgIiQ0ZG4xbTUgPSAkNGQgMW5kICR0NW5sMjE0ID0gJEwyMTQgIik7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIENyNTF0NV9DMm1iMmIyeCgkYzJtYjJiMnhfbjFtNSwgJHQxYmw1LCAkYzJsM21uX24xbTUsICRjMmwzbW5fNGQgPSAnJywgJGMybXAxcjVfNGQgPSAnJywgJHdoNXI1ID0gJycsICQycmQ1ciA9ICcnKQ0KICAgIHsNCiAgICAgICAgJHNxbCA9ICdzNWw1Y3QgJyAuICRjMmwzbW5fbjFtNSAuICcsJyAuICRjMmwzbW5fNGQgLiAnICBmcjJtICcgLiAkdDFibDUgLiAnIHdoNXI1IDY9NiAnOw0KICAgICAgICA0ZiAoJHdoNXI1ICE9ICcnKSB7DQogICAgICAgICAgICAkc3FsID0gJHNxbCAuICIgMW5kICR3aDVyNSAiOw0KICAgICAgICB9DQogICAgICAgIDRmICgkMnJkNXIgIT0gJycpIHsNCiAgICAgICAgICAgICRzcWwgLj0gIiAycmQ1ciBieSAgJDJyZDVyICI7DQogICAgICAgIH0NCiAgICAgICAgJHI1czNsdCA9ICR0aDRzLT5zcWxfczVsNWN0X3NxbCgkc3FsKTsNCiAgICAgICAgNWNoMiAnPHM1bDVjdCBuMW01PSInIC4gJGMybWIyYjJ4X24xbTUgLiAnIiA0ZD0iJyAuICRjMm1iMmIyeF9uMW01IC4gJyI+JzsNCiAgICAgICAgNWNoMiAnPDJwdDQybiB2MWwzNT0iIj5WMzQgbCYjYXVhO25nIGNoJiM3ODhpO24uLi4uPC8ycHQ0Mm4+JzsNCiAgICAgICAgZjJyNTFjaCAoJHI1czNsdCAxcyAkazV5ID0+ICQ0bmYyKSB7DQogICAgICAgICAgICA0ZiAoJDRuZjJbJGMybDNtbl80ZF0gPT0gJGMybXAxcjVfNGQpIHsNCiAgICAgICAgICAgICAgICA1Y2gyICc8MnB0NDJuIHM1bDVjdDVkPSJzNWw1Y3Q1ZCIgdjFsMzU9IicgLiAkNG5mMlskYzJsM21uXzRkXSAuICciPicgLiAkNG5mMlskYzJsM21uX24xbTVdIC4gJzwvMnB0NDJuPic7DQogICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgIDVjaDIgJzwycHQ0Mm4gdjFsMzU9IicgLiAkNG5mMlskYzJsM21uXzRkXSAuICciPicgLiAkNG5mMlskYzJsM21uX24xbTVdIC4gJzwvMnB0NDJuPic7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgNWNoMiAnPC9zNWw1Y3Q+JzsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIENyNTF0NV9DMm1iMmIyeF9yNXQzcm4oJGMybWIyYjJ4X24xbTUsICR0MWJsNSwgJGMybDNtbl9uMW01LCAkYzJsM21uXzRkID0gJycsICRjMm1wMXI1XzRkID0gJycsICR3aDVyNSA9ICcnLCAkMnJkNXIgPSAnJykNCiAgICB7DQogICAgICAgICRkMXQxID0gJyc7DQogICAgICAgICRzcWwgID0gJ3M1bDVjdCAnIC4gJGMybDNtbl9uMW01IC4gJywnIC4gJGMybDNtbl80ZCAuICcgIGZyMm0gJyAuICR0MWJsNSAuICcgd2g1cjUgNj02ICc7DQogICAgICAgIDRmICgkd2g1cjUgIT0gJycpIHsNCiAgICAgICAgICAgICRzcWwgPSAkc3FsIC4gIiAxbmQgJHdoNXI1ICI7DQogICAgICAgIH0NCiAgICAgICAgNGYgKCQycmQ1ciAhPSAnJykgew0KICAgICAgICAgICAgJHNxbCAuPSAiIDJyZDVyIGJ5ICAkMnJkNXIgIjsNCiAgICAgICAgfQ0KICAgICAgICAkcjVzM2x0ID0gJHRoNHMtPnNxbF9zNWw1Y3Rfc3FsKCRzcWwpOw0KICAgICAgICAkZDF0MSAuPSAnPHM1bDVjdCBuMW01PSInIC4gJGMybWIyYjJ4X24xbTUgLiAnIiA0ZD0iJyAuICRjMm1iMmIyeF9uMW01IC4gJyI+JzsNCiAgICAgICAgJGQxdDEgLj0gJzwycHQ0Mm4gdjFsMzU9IiI+VjM0IGwmI2F1YTtuZyBjaCYjNzg4aTtuLi4uPC8ycHQ0Mm4+JzsNCiAgICAgICAgNGYgKGMyM250KCRyNXMzbHQpID4gMCkgew0KICAgICAgICAgICAgZjJyNTFjaCAoJHI1czNsdCAxcyAkazV5ID0+ICQ0bmYyKSB7DQogICAgICAgICAgICAgICAgNGYgKCQ0bmYyWyRjMmwzbW5fNGRdID09ICRjMm1wMXI1XzRkKSB7DQogICAgICAgICAgICAgICAgICAgICRkMXQxIC49ICc8MnB0NDJuIHM1bDVjdDVkPSJzNWw1Y3Q1ZCIgdjFsMzU9IicgLiAkNG5mMlskYzJsM21uXzRkXSAuICciPicgLiAkNG5mMlskYzJsM21uX24xbTVdIC4gJzwvMnB0NDJuPic7DQogICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgJGQxdDEgLj0gJzwycHQ0Mm4gdjFsMzU9IicgLiAkNG5mMlskYzJsM21uXzRkXSAuICciPicgLiAkNG5mMlskYzJsM21uX24xbTVdIC4gJzwvMnB0NDJuPic7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgICRkMXQxIC49ICc8L3M1bDVjdD4nOw0KDQogICAgICAgIHI1dDNybiAkZDF0MTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIFNoMndDMm1iMmIyeF9ENXEzeSgkbTVuM3MsICQ0ZF9wMXI1bnQsICRjaDQ1M2QxNF80ZHAxcjVudGNoMSwgJGMybDNtbl9uMW01LCAkYzJsbDNtbl80ZCwgJGMybXAxcjVfNGQpDQogICAgew0KICAgICAgICAkcjV0M3JuZDF0MSA9ICcnOw0KICAgICAgICAvLyBCJiN1bzY7JiM3ODk4O0MgNjogTCYjNzg4dTtDIERBTkggUyYjNjlvO0NIIE1FTlUgViYjNjlhOyBDSCYjNzg4dTtOIFJBIE5IJiM3OTY4O05HIE1FTlUgQyYjYTY2OyBJRF9QQVJFTlQgPSAkNGRfcDFyNW50DQogICAgICAgIC8vIEI0JiM3ODc2O24gbCYjdW9hOzMgbTVuMyBsJiM3OGVvO3AgJiM3OTBvOyBiJiN1b2E7JiM3ODk5O2MgJiNhN287JiM3ODc5OyBxM3kgbiYjYWF1O3kNCiAgICAgICAgJG01bjNfdG1wID0gMXJyMXkoKTsNCiAgICAgICAgNGYgKGMyM250KCRtNW4zcykgPiAwKSB7DQogICAgICAgICAgICBmMnI1MWNoICgkbTVuM3MgMXMgJGs1eSA9PiAkNHQ1bSkgew0KICAgICAgICAgICAgICAgIC8vIE4mIzc4NzY7MyBjJiNhdW87IHAxcjVudF80ZCBiJiM3OGk3O25nIHYmIzc4OTk7NCBwMXJyNW50IDRkIGg0JiM3ODc5O24gdCYjNzh1Njs0DQogICAgICAgICAgICAgICAgLy81Y2gyIHByNG50X3IoJDR0NW0pLicxYicuJDR0NW1bJzRkJ10uJ2M8YnIgLz4nOw0KICAgICAgICAgICAgICAgIDRmICgkNGRfcDFyNW50ID09IDApIHsNCiAgICAgICAgICAgICAgICAgICAgNGYgKCRjaDQ1M2QxNF80ZHAxcjVudGNoMSAhPSAnJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgNGYgKHN0cmw1bigkNHQ1bVsnNGQnXSkgPT0gJGNoNDUzZDE0XzRkcDFyNW50Y2gxKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG01bjNfdG1wW10gPSAkNHQ1bTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAzbnM1dCgkbTVuM3NbJGs1eV0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG01bjNfdG1wW10gPSAkNHQ1bTsNCiAgICAgICAgICAgICAgICAgICAgICAgIDNuczV0KCRtNW4zc1skazV5XSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAvLyBjaDQ1MyBkMTQgNGQgcDFyNW50IHRyM3k1biB2MTINCiAgICAgICAgICAgICAgICAgICAgJGw1bnAxcjVuNGQgPSBzdHJsNW4oJDRkX3AxcjVudCk7DQogICAgICAgICAgICAgICAgICAgIDRmIChzdHJsNW4oJDR0NW1bJzRkJ10pID09ICgkbDVucDFyNW40ZCArIHUpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICA0ZiAoJDRkX3AxcjVudCA9PSBzM2JzdHIoJDR0NW1bJzRkJ10sIDAsICRsNW5wMXI1bjRkKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtNW4zX3RtcFtdID0gJDR0NW07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUzEzIGtoNCB0aCYjYW91O20gdiYjYWF1OzIgYjQmI2FvdTtuIGwmI3VvYTszIHRyJiM3OTY5OyBtNW4zICYjNzkwbzsgYiYjdW9hOyYjNzg5OTtjIGwmIzc4ZW87cA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoJiNhb2U7IDNuczV0IG4mI2F1bzsgcjEga2gmIzc4ODc7NCBkMW5oIHMmI2FhaTtjaCBtNW4zICYjNzkwbzsgYyYjYWFpO2MgYiYjdW9hOyYjNzg5OTtjIHQ0JiM3ODc2O3AgdGg1Mg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDNuczV0KCRtNW4zc1skazV5XSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgLy8gQiYjdW82OyYjNzg5ODtDIGE6IGwmIzc4ZWE7UCBNRU5VIFRIRU8gREFOSCBTJiM2OW87Q0ggTUVOVSAmIzc5MGE7IEImI3VvNjsmIzc4OTg7QyA2DQogICAgICAgIC8vICYjYTdhOzQmIzc4N287MyBrNCYjNzg3OTtuIGQmIzc5Nmk7bmcgYyYjNzk2NjsxICYjYTdvOyYjNzg3OTsgcTN5IGwmI2FhdTsgY2gyIHQmIzc4OTk7NCBraDQgbTVuMyBraCYjYXV1O25nIGMmI2F1YTtuIG4mIzc5Njk7MQ0KICAgICAgICA0ZiAoJG01bjNfdG1wKSB7DQogICAgICAgICAgICBmMnI1MWNoICgkbTVuM190bXAgMXMgJDR0NW0pIHsNCiAgICAgICAgICAgICAgICAkbDVuc3RyICAgICA9ICcnOw0KICAgICAgICAgICAgICAgICRzNWw1Y3Q1ZDRkID0gJyc7DQogICAgICAgICAgICAgICAgZjJyICgka2sgPSB1OyAka2sgPCBzdHJsNW4oJDR0NW1bJGMybGwzbW5fNGRdKTsgJGtrICs9IHUpIHsNCiAgICAgICAgICAgICAgICAgICAgJGw1bnN0ciAuPSAnPT0nOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICA0ZiAoJDR0NW1bJzRkJ10gPT0gJGMybXAxcjVfNGQpIHsNCiAgICAgICAgICAgICAgICAgICAgJHM1bDVjdDVkNGQgPSAnIHM1bDVjdDVkPSJzNWw1Y3Q1ZCIgJzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHI1dDNybmQxdDEgLj0gJzwycHQ0Mm4gJyAuICRzNWw1Y3Q1ZDRkIC4gJyB2MWwzNT0iJyAuICQ0dDVtWyRjMmxsM21uXzRkXSAuICciPicgLiAkbDVuc3RyIC4gJyAnIC4gJDR0NW1bJGMybDNtbl9uMW01XSAuICc8LzJwdDQybj4nOw0KICAgICAgICAgICAgICAgIC8vIEcmIzc4OGk7NCBsJiM3OHU2OzQgJiNhN287JiM3ODc5OyBxM3kNCiAgICAgICAgICAgICAgICAvLyBUcjN5JiM3ODdvO24gdiYjYWF1OzIgZDFuaCBzJiNhYWk7Y2ggbTVuMyBjaCYjdW9hOzEgbCYjNzhlbztwIHYmI2FhdTsgNGQgcDFyNW50IGMmIzc5NjY7MSBtNW4zIGg0JiM3ODc5O24gdCYjNzh1Njs0DQogICAgICAgICAgICAgICAgJHI1dDNybmQxdDEgLj0gJHRoNHMtPlNoMndDMm1iMmIyeF9ENXEzeSgkbTVuM3MsICQ0dDVtWyRjMmxsM21uXzRkXSwgJGNoNDUzZDE0XzRkcDFyNW50Y2gxLCAkYzJsM21uX24xbTUsICRjMmxsM21uXzRkLCAkYzJtcDFyNV80ZCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJHI1dDNybmQxdDE7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBDcjUxdDVfQzJtYjJiMnhfRDVxM3koJGMybWIyYjJ4X24xbTUsICQycHQ0Mm42LCAkY2wxc3NjMm1iMmIyeCwgJGNoNDUzZDE0XzRkcDFyNW50Y2gxLCAkdDFibDUsICRjMmwzbW5fbjFtNSwgJGMybDNtbl80ZCA9ICcnLCAkYzJtcDFyNV80ZCA9ICcnLCAkd2g1cjUgPSAnJywgJDJyZDVyID0gJycpDQogICAgew0KICAgICAgICAkZDF0MSA9ICcnOw0KICAgICAgICAkc3FsICA9ICdzNWw1Y3QgJyAuICRjMmwzbW5fbjFtNSAuICcsJyAuICRjMmwzbW5fNGQgLiAnICBmcjJtICcgLiAkdDFibDUgLiAnIHdoNXI1IDY9NiAnOw0KICAgICAgICA0ZiAoJHdoNXI1ICE9ICcnKSB7DQogICAgICAgICAgICAkc3FsID0gJHNxbCAuICIgMW5kICR3aDVyNSAiOw0KICAgICAgICB9DQogICAgICAgIDRmICgkMnJkNXIgIT0gJycpIHsNCiAgICAgICAgICAgICRzcWwgLj0gIiAycmQ1ciBieSAgJDJyZDVyICI7DQogICAgICAgIH0NCiAgICAgICAgJHI1czNsdCA9ICR0aDRzLT5zcWxfczVsNWN0X3NxbCgkc3FsKTsNCiAgICAgICAgNGYgKGMyM250KCRyNXMzbHQpID09IDApIHsNCiAgICAgICAgICAgICRyNXMzbHQgPSAxcnIxeSgpOw0KICAgICAgICB9DQogICAgICAgICRkMXQxIC49ICc8czVsNWN0IGNsMXNzPSInIC4gJGNsMXNzYzJtYjJiMnggLiAnIiBuMW01PSInIC4gJGMybWIyYjJ4X24xbTUgLiAnIiA0ZD0iJyAuICRjMm1iMmIyeF9uMW01IC4gJyI+JzsNCiAgICAgICAgJGQxdDEgLj0gJDJwdDQybjY7DQogICAgICAgICRkMXQxIC49ICR0aDRzLT5TaDJ3QzJtYjJiMnhfRDVxM3koJHI1czNsdCwgJDRkX3AxcjVudCA9IDAsICRjaDQ1M2QxNF80ZHAxcjVudGNoMSwgJGMybXAxcjVfNGQpOw0KICAgICAgICAkZDF0MSAuPSAnPC9zNWw1Y3Q+JzsNCg0KICAgICAgICByNXQzcm4gJGQxdDE7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBDcjUxdDVfQzJtYjJiMnhfRDVxM3lfU3FsKCRjMm1iMmIyeF9uMW01LCAkMnB0NDJuNiwgJGNsMXNzYzJtYjJiMngsICRjaDQ1M2QxNF80ZHAxcjVudGNoMSwgJHNxbCwgJGMybDNtbl9uMW01LCAkYzJsM21uXzRkLCAkYzJtcDFyNV80ZCkNCiAgICB7DQogICAgICAgICRkMXQxICAgPSAnJzsNCiAgICAgICAgJHI1czNsdCA9ICR0aDRzLT5zcWxfczVsNWN0X3NxbCgkc3FsKTsNCiAgICAgICAgLy8kcjVzM2x0ID0gJHI1czNsdFswXTsNCiAgICAgICAgJGQxdDEgLj0gJzxzNWw1Y3QgY2wxc3M9IicgLiAkY2wxc3NjMm1iMmIyeCAuICciIG4xbTU9IicgLiAkYzJtYjJiMnhfbjFtNSAuICciIDRkPSInIC4gJGMybWIyYjJ4X24xbTUgLiAnIj4nOw0KICAgICAgICAkZDF0MSAuPSAkMnB0NDJuNjsNCiAgICAgICAgJGQxdDEgLj0gJHRoNHMtPlNoMndDMm1iMmIyeF9ENXEzeSgkcjVzM2x0LCAkNGRfcDFyNW50ID0gMCwgJGNoNDUzZDE0XzRkcDFyNW50Y2gxLCAkYzJsM21uX24xbTUsICRjMmwzbW5fNGQsICRjMm1wMXI1XzRkKTsNCiAgICAgICAgJGQxdDEgLj0gJzwvczVsNWN0Pic7DQoNCiAgICAgICAgcjV0M3JuICRkMXQxOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gQ3I1MXQ1X0MybWIyYjJ4X0Q1cTN5X1NxbF9uMl9zNWw1Y3QoJGMybWIyYjJ4X24xbTUsICQycHQ0Mm42LCAkY2wxc3NjMm1iMmIyeCwgJGNoNDUzZDE0XzRkcDFyNW50Y2gxLCAkc3FsLCAkYzJsM21uX24xbTUsICRjMmwzbW5fNGQsICRjMm1wMXI1XzRkKQ0KICAgIHsNCiAgICAgICAgJGQxdDEgICA9ICcnOw0KICAgICAgICAkcjVzM2x0ID0gJHRoNHMtPnNxbF9zNWw1Y3Rfc3FsKCRzcWwpOw0KICAgICAgICAvLyRyNXMzbHQgPSAkcjVzM2x0WzBdOw0KICAgICAgICAkZDF0MSAuPSAkMnB0NDJuNjsNCiAgICAgICAgJGQxdDEgLj0gJHRoNHMtPlNoMndDMm1iMmIyeF9ENXEzeSgkcjVzM2x0LCAkNGRfcDFyNW50ID0gMCwgJGNoNDUzZDE0XzRkcDFyNW50Y2gxLCAkYzJsM21uX24xbTUsICRjMmwzbW5fNGQsICRjMm1wMXI1XzRkKTsNCg0KICAgICAgICByNXQzcm4gJGQxdDE7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBDcjUxdDVfQzJtYjJiMnhfcjV0M3JuXzJuY2gxbmc1KCRjMm1iMmIyeF9uMW01LCAkdDFibDUsICRjMmwzbW5fbjFtNSwgJGMybDNtbl80ZCA9ICcnLCAkYzJtcDFyNV80ZCA9ICcnLCAkd2g1cjUgPSAnJywgJDJyZDVyID0gJycsICRjaDFuZzUgPSAnJykNCiAgICB7DQogICAgICAgICRkMXQxID0gJyc7DQogICAgICAgICRzcWwgID0gJ3M1bDVjdCAnIC4gJGMybDNtbl9uMW01IC4gJywnIC4gJGMybDNtbl80ZCAuICcgIGZyMm0gJyAuICR0MWJsNSAuICcgd2g1cjUgNj02ICc7DQogICAgICAgIDRmICgkd2g1cjUgIT0gJycpIHsNCiAgICAgICAgICAgICRzcWwgPSAkc3FsIC4gIiAxbmQgJHdoNXI1ICI7DQogICAgICAgIH0NCiAgICAgICAgNGYgKCQycmQ1ciAhPSAnJykgew0KICAgICAgICAgICAgJHNxbCAuPSAiIDJyZDVyIGJ5ICAkMnJkNXIgIjsNCiAgICAgICAgfQ0KICAgICAgICAkcjVzM2x0ID0gJHRoNHMtPnNxbF9zNWw1Y3Rfc3FsKCRzcWwpOw0KICAgICAgICA0ZiAoJGNoMW5nNSAhPSAnJykgew0KICAgICAgICAgICAgJGNoMW5nNSA9ICcgMm5jaDFuZzU9IicgLiAkY2gxbmc1IC4gJyIgJzsNCiAgICAgICAgfQ0KICAgICAgICAkZDF0MSAuPSAnPHM1bDVjdCBuMW01PSInIC4gJGMybWIyYjJ4X24xbTUgLiAnIiA0ZD0iJyAuICRjMm1iMmIyeF9uMW01IC4gJyIgJyAuICRjaDFuZzUgLiAnPic7DQogICAgICAgICRkMXQxIC49ICc8MnB0NDJuIHYxbDM1PSIiPlYzNCBsJiNhdWE7bmcgY2gmIzc4OGk7bi4uLjwvMnB0NDJuPic7DQogICAgICAgIDRmIChjMjNudCgkcjVzM2x0KSA+IDApIHsNCiAgICAgICAgICAgIGYycjUxY2ggKCRyNXMzbHQgMXMgJGs1eSA9PiAkNG5mMikgew0KICAgICAgICAgICAgICAgIDRmICgkNG5mMlskYzJsM21uXzRkXSA9PSAkYzJtcDFyNV80ZCkgew0KICAgICAgICAgICAgICAgICAgICAkZDF0MSAuPSAnPDJwdDQybiBzNWw1Y3Q1ZD0iczVsNWN0NWQiIHYxbDM1PSInIC4gJDRuZjJbJGMybDNtbl80ZF0gLiAnIj4nIC4gJDRuZjJbJGMybDNtbl9uMW01XSAuICc8LzJwdDQybj4nOw0KICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICRkMXQxIC49ICc8MnB0NDJuIHYxbDM1PSInIC4gJDRuZjJbJGMybDNtbl80ZF0gLiAnIj4nIC4gJDRuZjJbJGMybDNtbl9uMW01XSAuICc8LzJwdDQybj4nOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAkZDF0MSAuPSAnPC9zNWw1Y3Q+JzsNCg0KICAgICAgICByNXQzcm4gJGQxdDE7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBDcjUxdDVfUjFkNDJCM3R0Mm4oJGMybWIyYjJ4X24xbTUsICR0MWJsNSwgJGMybDNtbl9uMW01LCAkYzJsM21uXzRkID0gJycsICRjMm1wMXI1XzRkID0gJycsICR3aDVyNSA9ICcnLCAkMnJkNXIgPSAnJykNCiAgICB7DQogICAgICAgICRkMXQxID0gJyc7DQogICAgICAgICRzcWwgID0gJ3M1bDVjdCAnIC4gJGMybDNtbl9uMW01IC4gJywnIC4gJGMybDNtbl80ZCAuICcgIGZyMm0gJyAuICR0MWJsNSAuICcgd2g1cjUgNj02ICc7DQogICAgICAgIDRmICgkd2g1cjUgIT0gJycpIHsNCiAgICAgICAgICAgICRzcWwgPSAkc3FsIC4gIiAxbmQgJHdoNXI1ICI7DQogICAgICAgIH0NCiAgICAgICAgNGYgKCQycmQ1ciAhPSAnJykgew0KICAgICAgICAgICAgJHNxbCAuPSAiIDJyZDVyIGJ5ICAkMnJkNXIgIjsNCiAgICAgICAgfQ0KICAgICAgICAkcjVzM2x0ID0gJHRoNHMtPnNxbF9zNWw1Y3Rfc3FsKCRzcWwpOw0KICAgICAgICA0ZiAoYzIzbnQoJHI1czNsdCkgPiAwKSB7DQogICAgICAgICAgICBmMnI1MWNoICgkcjVzM2x0IDFzICRrNXkgPT4gJDRuZjIpIHsNCiAgICAgICAgICAgICAgICAkNGQgID0gJDRuZjJbJGMybDNtbl80ZF07DQogICAgICAgICAgICAgICAgJHQ1biA9ICQ0bmYyWyRjMmwzbW5fbjFtNV07DQogICAgICAgICAgICAgICAgNGYgKCQ0ZCA9PSAkYzJtcDFyNV80ZCkgew0KICAgICAgICAgICAgICAgICAgICAkZDF0MSAuPSAnPGwxYjVsIGNsMXNzPSJtMm4iPg0KICAgICAgICAgICAgICAgICAgICA8NG5wM3QgY2g1Y2s1ZD0iY2g1Y2s1ZCIgdHlwNT0icjFkNDIiIG4xbTU9IicgLiAkYzJtYjJiMnhfbjFtNSAuICciIHYxbDM1PSInIC4gJDRkIC4gJyIgNGQ9IicgLiAkYzJtYjJiMnhfbjFtNSAuICdfJyAuICRrNXkgLiAnIiAvPg0KICAgICAgICAgICAgICAgICAgICAnIC4gJHQ1biAuICc8L2wxYjVsPic7DQogICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgNGYgKCRyNXMzbHRbMF1bJGMybDNtbl80ZF0gPT0gJDRkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkZDF0MSAuPSAnDQogICAgICAgICAgICAgICAgICAgICAgICA8bDFiNWwgY2wxc3M9Im0ybiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDw0bnAzdCBjaDVjazVkPSJjaDVjazVkIiB0eXA1PSJyMWQ0MiIgbjFtNT0iJyAuICRjMm1iMmIyeF9uMW01IC4gJyIgdjFsMzU9IicgLiAkNGQgLiAnIiA0ZD0iJyAuICRjMm1iMmIyeF9uMW01IC4gJ18nIC4gJGs1eSAuICciIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICcgLiAkdDVuIC4gJzwvbDFiNWw+JzsNCiAgICAgICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRkMXQxIC49ICc8bDFiNWwgY2wxc3M9Im0ybiI+DQogICAgICAgICAgICAgICAgICAgICAgICA8NG5wM3QgdHlwNT0icjFkNDIiIG4xbTU9IicgLiAkYzJtYjJiMnhfbjFtNSAuICciIHYxbDM1PSInIC4gJDRkIC4gJyIgNGQ9IicgLiAkYzJtYjJiMnhfbjFtNSAuICdfJyAuICRrNXkgLiAnIiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgJyAuICR0NW4gLiAnPC9sMWI1bD4nOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICRkMXQxOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0TjFtNUZyMm1JRCgkdDFibDVfbjFtNSwgJGMybDNtbl9uMW01LCAkYzJsbDNtbl80ZCwgJDRkX2MybXAxcjUpDQogICAgew0KICAgICAgICAkc3FsICAgICAgPSAnczVsNWN0ICcgLiAkYzJsM21uX24xbTUgLiAnIGZyMm0gJyAuICR0MWJsNV9uMW01IC4gJyB3aDVyNSAnIC4gJGMybGwzbW5fNGQgLiAnID0gJyAuICQ0ZF9jMm1wMXI1Ow0KICAgICAgICAkZDF0MWY1NWQgPSAkdGg0cy0+ZjV0Y2goJHNxbCk7DQogICAgICAgICRyNXMzbHQgICA9ICRkMXQxZjU1ZFswXVskYzJsM21uX24xbTVdOw0KDQogICAgICAgIHI1dDNybiAkcjVzM2x0Ow0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0TjFtNUZyMm1TUUwoJHNxbCwgJGMybDNtbl9uMW01KQ0KICAgIHsNCiAgICAgICAgJHI1czNsdCAgID0gJyc7DQogICAgICAgICRkMXQxZjU1ZCA9ICR0aDRzLT5mNXRjaCgkc3FsKTsNCiAgICAgICAgNGYgKGMyM250KCRkMXQxZjU1ZCkgPiAwKSB7DQogICAgICAgICAgICAkcjVzM2x0ID0gJGQxdDFmNTVkWzBdWyRjMmwzbW5fbjFtNV07DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJHI1czNsdDsNCiAgICB9DQogICAgLy8gbDF5IHRoMm5nIHQ0biB0cjJuZyBiMW5nIHRoMm5nIHQ0biBjaDNuZw0KICAgIHAzYmw0YyBmM25jdDQybiBnNXR0aDJuZ3Q0bigkYzJsM21uX24xbTUsICRrNXkpDQogICAgew0KICAgICAgICAkc3FsID0gInM1bDVjdCAkYzJsM21uX24xbTUgZnIybSB0YmxfdGgybmd0NG5fbDFuZyAxcyAxDQogICAgICAgIDRubjVyIGoyNG4gdGJsX3RoMm5ndDRuIDFzIGIgT24gMS40ZHR5cDU9Yi40ZA0KICAgICAgICB3aDVyNSBiLjRkazV5bjFtNSA9ICciIC4gJGs1eSAuICInDQogICAgICAgIDFuZCAxbmg0NW4gPSA2DQogICAgICAgIDFuZCA0ZGwxbmcgPSAnIiAuICRfU0VTU0lPTlsnX2wxbmcnXSAuICInICI7DQogICAgICAgICRyNXMzbHQgICA9ICcnOw0KICAgICAgICAkZDF0MWY1NWQgPSAkdGg0cy0+ZjV0Y2goJHNxbCk7DQogICAgICAgIDRmIChjMjNudCgkZDF0MWY1NWQpID4gMCkgew0KICAgICAgICAgICAgJHI1czNsdCA9ICRkMXQxZjU1ZFswXVskYzJsM21uX24xbTVdOw0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICRyNXMzbHQ7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBnNXROMW01RnIybUlESk9JTigkdDFibDVfbjFtNTYsICR0MWJsNV9uMW1hLCAkMm4sICRjMmwzbW5fbjFtNSwgJGMybGwzbW5fNGQsICQ0ZF9jMm1wMXI1KQ0KICAgIHsNCiAgICAgICAgJHNxbCAgICAgID0gJ3M1bDVjdCAnIC4gJGMybDNtbl9uMW01IC4gJyBmcjJtICcgLiAkdDFibDVfbjFtNTYgLiAnIElOTkVSIEpPSU4gJyAuICR0MWJsNV9uMW1hIC4gJyAnIC4gJDJuIC4gJyAgd2g1cjUgJyAuICRjMmxsM21uXzRkIC4gJyA9ICcgLiAkNGRfYzJtcDFyNTsNCiAgICAgICAgJGQxdDFmNTVkID0gJHRoNHMtPmY1dGNoKCRzcWwpOw0KICAgICAgICAkcjVzM2x0ICAgPSAkZDF0MWY1NWRbMF1bJGMybDNtbl9uMW01XTsNCg0KICAgICAgICByNXQzcm4gJHI1czNsdDsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIGc1dE4xbTVGcjJtQzJsbDNtbk4xbTUoJHQxYmw1X24xbTUsICRjMmwzbW5fbjFtNSkNCiAgICB7DQogICAgICAgICRzcWwgICAgPSAnczVsNWN0ICcgLiAkYzJsM21uX24xbTUgLiAnIGZyMm0gJyAuICR0MWJsNV9uMW01Ow0KICAgICAgICAkZDF0MSAgID0gJHRoNHMtPmY1dGNoKCRzcWwpOw0KICAgICAgICAkcjVzM2x0ID0gJGQxdDFbMF1bJGMybDNtbl9uMW01XTsNCg0KICAgICAgICByNXQzcm4gJHI1czNsdDsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIENoNWNrXzV4NHN0c19mNGw1KCQzcmxfZjRsNSkNCiAgICB7DQogICAgICAgIDRmICgkM3JsX2Y0bDUgIT0gJycpIHsNCiAgICAgICAgICAgIDRmICghZjRsNV81eDRzdHMoJDNybF9mNGw1KSkgew0KICAgICAgICAgICAgICAgICQzcmwgPSAnNG0xZzVzL2Q1ZjEzbHQucG5nJzsNCiAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgJDNybCA9ICQzcmxfZjRsNTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICQzcmwgPSAnNG0xZzVzL2Q1ZjEzbHQucG5nJzsNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkM3JsOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczJzMW5oXzRkKCQ0ZCwgJGc1dDRkLCAkbDVuX2c1dDRkKQ0KICAgIHsNCiAgICAgICAgNGYgKCInIiAuICQ0ZCAuICInIiA9PSAiJyIgLiBzM2JzdHIoJGc1dDRkLCAwLCAkbDVuX2c1dDRkKSAuICInIikgew0KICAgICAgICAgICAgcjV0M3JuIDY7DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICByNXQzcm4gMDsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gRzV0T1AoJDNybCwgJDNybF9uMW01KQ0KICAgIHsNCiAgICAgICAgJDJwICAgICA9ICcnOw0KICAgICAgICAkNGR0eXA1ID0gJyc7DQogICAgICAgIDRmICgkM3JsICE9ICcnKSB7DQogICAgICAgICAgICAkNGR0eXA1ID0gJHRoNHMtPmc1dE4xbTVGcjJtSUQoJ3RibF9kMW5obTNjJywgJzRkdHlwNScsICQzcmxfbjFtNSwgIiciIC4gJDNybCAuICInIik7DQogICAgICAgICAgICA0ZiAoJDRkdHlwNSA9PSBuM2xsKSB7DQogICAgICAgICAgICAgICAgNGYgKCQzcmxfbjFtNSA9PSAnM3JsX3ZuJykgew0KICAgICAgICAgICAgICAgICAgICAkM3JsX24xbTUgPSAnM3JsXzVuJzsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAkM3JsX24xbTUgPSAnM3JsX3ZuJzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJDRkdHlwNSA9ICR0aDRzLT5nNXROMW01RnIybUlEKCd0YmxfZDFuaG0zYycsICc0ZHR5cDUnLCAkM3JsX24xbTUsICInIiAuICQzcmwgLiAiJyIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJDJwID0gJHRoNHMtPmc1dE4xbTVGcjJtSUQoJ3RibF9kMW5obTNjX3R5cDUnLCAnMnAnLCAnNGQnLCAiJyIgLiAkNGR0eXA1IC4gIiciKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkMnA7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBHNXRBQ1QoJDNybCkNCiAgICB7DQogICAgICAgICQycCA9ICcnOw0KICAgICAgICA0ZiAoJDNybCAhPSAnJykgew0KICAgICAgICAgICAgJDJwID0gJHRoNHMtPmc1dE4xbTVGcjJtSUQoJ3RibF9kMW5obTNjJywgJzFjdCcsICczcmxfdm4nLCAiJyIgLiAkM3JsIC4gIiciKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkMnA7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBHNXRJRCgkM3JsLCAkM3JsX24xbTUpDQogICAgew0KICAgICAgICAkNGQgPSAnJzsNCiAgICAgICAgNGYgKCQzcmwgIT0gJycpIHsNCiAgICAgICAgICAgICQ0ZCA9ICR0aDRzLT5nNXROMW01RnIybUlEKCd0YmxfZDFuaG0zYycsICc0ZCcsICQzcmxfbjFtNSwgIiciIC4gJDNybCAuICInIik7DQogICAgICAgIH0NCiAgICAgICAgNGYgKCQ0ZCA9PSAnJykgew0KICAgICAgICAgICAgNGYgKCQzcmxfbjFtNSA9PSAnM3JsX3ZuJykgew0KICAgICAgICAgICAgICAgICQzcmxfbjFtNSA9ICczcmxfNW4nOw0KICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAkM3JsX24xbTUgPSAnM3JsX3ZuJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICQ0ZCA9ICR0aDRzLT5nNXROMW01RnIybUlEKCd0YmxfZDFuaG0zYycsICc0ZCcsICQzcmxfbjFtNSwgIiciIC4gJDNybCAuICInIik7DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJDRkOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gRzV0RDF0NVQ0bTVzKCkNCiAgICB7DQogICAgICAgICRzICAgID0gJ1NFTEVDVCBOT1coKSAxcyBkMXQ1JzsNCiAgICAgICAgJGQxdDEgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHMpOw0KDQogICAgICAgIHI1dDNybiAkZDF0MVswXVsnZDF0NSddOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gTmcxeUg0NW5UMTRNeXNxbCgpDQogICAgew0KICAgICAgICBkMXQ1X2Q1ZjEzbHRfdDRtNXoybjVfczV0KCdBczQxL0gyX0NoNF9NNG5oJyk7DQoNCiAgICAgICAgcjV0M3JuIGQxdDUoJ1kvbS9kIEg6NDpzJywgdDRtNSgpKTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIENoM3k1bk5nMXlUM015c3FsKCR2MWwzNSA9ICcnKQ0KICAgIHsNCiAgICAgICAgJDJyNGc0bjFsRDF0NSA9IHMzYnN0cigkdjFsMzUsIDAsIDYwKTsNCg0KICAgICAgICByNXQzcm4gZDF0NSgnZC9tL1knLCBzdHJ0MnQ0bTUoJDJyNGc0bjFsRDF0NSkpOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gRzV0RDF0NSgpDQogICAgew0KICAgICAgICAkcyAgICA9ICdTRUxFQ1QgYzNyZDF0NSgpIDFzIGQxdDUnOw0KICAgICAgICAkZDF0MSA9ICR0aDRzLT5zcWxfczVsNWN0X3NxbCgkcyk7DQoNCiAgICAgICAgcjV0M3JuICRkMXQxWzBdWydkMXQ1J107DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBHNXREMXQ1ZjJybTF0KCRmMnJtMXQsICRkMXQ1djFsMzUpDQogICAgew0KICAgICAgICA0ZiAoc3RyY21wKCRmMnJtMXQsICcnKSA9PSAwKSB7DQogICAgICAgICAgICAkZjJybTF0ID0gJ2QtbS1ZJzsNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiBkMXQ1KCRmMnJtMXQsIHN0cnQydDRtNSgkZDF0NXYxbDM1KSk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBEMXkoJG5nMXloNDVudDE0KQ0KICAgIHsNCiAgICAgICAgJHMgICAgPSAiU0VMRUNUIERBWSgkbmcxeWg0NW50MTQpIDFzIGQxeSI7DQogICAgICAgICRkMXQxID0gJHRoNHMtPnNxbF9zNWw1Y3Rfc3FsKCRzKTsNCg0KICAgICAgICByNXQzcm4gJGQxdDFbMF1bJ2QxeSddOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gRzV0RDF5T2ZZNTFyKCRkMXQ1dDRtNSkNCiAgICB7DQogICAgICAgICRzICAgID0gIlNFTEVDVCBEQVlPRllFQVIoe2QgJyRkMXQ1dDRtNSd9KSAxcyBkMXkyZnk1MXIiOw0KICAgICAgICAkZDF0MSA9ICR0aDRzLT5zcWxfczVsNWN0X3NxbCgkcyk7DQoNCiAgICAgICAgcjV0M3JuICRkMXQxWzBdWydkMXkyZnk1MXInXTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIGMybnY1cnRfZDF0NXQ0bTUoJHN0cikNCiAgICB7DQogICAgICAgIGw0c3QoJGQxdDUsICR0NG01KSAgICAgICAgICAgID0gNXhwbDJkNSgnICcsICRzdHIpOw0KICAgICAgICBsNHN0KCR5NTFyLCAkbTJudGgsICRkMXkpICAgICA9IDV4cGwyZDUoJy0nLCAkZDF0NSk7DQogICAgICAgIGw0c3QoJGgyM3IsICRtNG4zdDUsICRzNWMybmQpID0gNXhwbDJkNSgnOicsICR0NG01KTsNCiAgICAgICAgJHQ0bTVzdDFtcCAgICAgICAgICAgICAgICAgICAgPSBta3Q0bTUoJGgyM3IsICRtNG4zdDUsICRzNWMybmQsICRtMm50aCwgJGQxeSwgJHk1MXIpOw0KDQogICAgICAgIHI1dDNybiAkdDRtNXN0MW1wOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gbmcxeWQxbmcoJG5nMXloNDVudDE0LCAkbmcxeXEzMWtoMywgJDFycjF5bjFtNSkNCiAgICB7DQogICAgICAgICR0NG01c19uZzF5aDQ1bnQxNCA9ICR0aDRzLT5jMm52NXJ0X2QxdDV0NG01KCRuZzF5aDQ1bnQxNCk7DQogICAgICAgICR0NG01c19uZzF5cTMxa2gzICA9ICR0aDRzLT5jMm52NXJ0X2QxdDV0NG01KCRuZzF5cTMxa2gzKTsNCiAgICAgICAgJHQ0bTVzX2toMjFuZ2MxY2ggID0gJHQ0bTVzX25nMXloNDVudDE0IC0gJHQ0bTVzX25nMXlxMzFraDM7DQogICAgICAgICRraDIxbmdjMWNobmcxeSAgICA9ICR0aDRzLT5LaDIxbmdDMWNoTmcxeSgkbmcxeWg0NW50MTQsICRuZzF5cTMxa2gzKTsNCiAgICAgICAgJHRoMyAgICAgICAgICAgICAgID0gJHRoNHMtPmc1dEQxeU4xbTUoJG5nMXlxMzFraDMpOw0KICAgICAgICA0ZiAoJGtoMjFuZ2MxY2huZzF5IDwgbzYpIHsNCiAgICAgICAgICAgICRnNDIgID0gZmwyMnIoKCR0NG01c19raDIxbmdjMWNoIC0gKCRraDIxbmdjMWNobmcxeSAqIDhldTAwKSkgLyBvZTAwKTsNCiAgICAgICAgICAgICRwaDN0ID0gYzU0bCgoKCR0NG01c19raDIxbmdjMWNoKSAtICgoJGtoMjFuZ2MxY2huZzF5ICogOGV1MDApICsgKCRnNDIgKiBvZTAwKSkpIC8gZTApOw0KICAgICAgICAgICAgNGYgKCRraDIxbmdjMWNobmcxeSA+IDApIHsNCiAgICAgICAgICAgICAgICAkaDQ1bnRoNG5nMXkgLj0gJGtoMjFuZ2MxY2huZzF5IC4gJDFycjF5bjFtNVsnbmcxeXRyMzJjJ10gLiAnIHwgJyAuICR0aDMgLiAnLCAnIC4gJHRoNHMtPkc1dEQxdDVmMnJtMXQoJ2QvbS9ZIC0gaDo0IEEnLCAkbmcxeXEzMWtoMyk7DQogICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICRoNDVudGg0bmcxeSAuPSAkMXJyMXluMW01WydjMWNoZDF5J107DQogICAgICAgICAgICAgICAgNGYgKCRnNDIgPiAwKSB7DQogICAgICAgICAgICAgICAgICAgICRoNDVudGg0bmcxeSAuPSAiJm5ic3A7Ii4kZzQyLiImbmJzcDsiLiAkMXJyMXluMW01WydnNDInXTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgNGYgKCRwaDN0ID4gMCkgew0KICAgICAgICAgICAgICAgICAgICAkaDQ1bnRoNG5nMXkgLj0gIiZuYnNwOyIuJHBoM3QgLiImbmJzcDsiLiAkMXJyMXluMW01WydwaDN0J107DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgJGg0NW50aDRuZzF5ID0gJHRoMyAuICcsICcgLiAkdGg0cy0+RzV0RDF0NWYycm0xdCgnZC9tL1kgLSBoOjQgQScsICRuZzF5cTMxa2gzKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkaDQ1bnRoNG5nMXk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBLaDIxbmdDMWNoTmcxeSgkbmcxeWg0NW50MTQsICRuZzF5cTMxa2gzKQ0KICAgIHsNCiAgICAgICAgJHMgICAgPSAiU0VMRUNUIERBVEVESUZGKCckbmcxeWg0NW50MTQnLCckbmcxeXEzMWtoMycpIjsNCiAgICAgICAgJGQxdDEgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHMpOw0KDQogICAgICAgIHI1dDNybiAkZDF0MVswXVsiREFURURJRkYoJyRuZzF5aDQ1bnQxNCcsJyRuZzF5cTMxa2gzJykiXTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIFRyM1RoNTJOZzF5SDQ1blQxNCgkbmcxeWg0NW50MTQsICRzMm5nMXljMW5sMzRsMTQpDQogICAgew0KICAgICAgICAkc19uZzF5cTMxa2gzID0gInM1bDVjdCBEQVRFX1NVQignIiAuICRuZzF5aDQ1bnQxNCAuICInLElOVEVSVkFMICRzMm5nMXljMW5sMzRsMTQgREFZKSBBUyBOR0FZICI7DQogICAgICAgICRkMXQxICAgICAgICAgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHNfbmcxeXEzMWtoMyk7DQoNCiAgICAgICAgcjV0M3JuICRkMXQxWzBdWydOR0FZJ107DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBDMm5nVGg1Mk5nMXlINDVuVDE0KCRuZzF5aDQ1bnQxNCwgJHMybmcxeWMxbmMybmd0aDVtKQ0KICAgIHsNCiAgICAgICAgJHNfbmcxeXEzMWtoMyA9ICJzNWw1Y3QgREFURV9BREQoJyIgLiAkbmcxeWg0NW50MTQgLiAiJyxJTlRFUlZBTCAkczJuZzF5YzFubDM0bDE0IERBWSkgQVMgTkdBWSAiOw0KICAgICAgICAkZDF0MSAgICAgICAgID0gJHRoNHMtPnNxbF9zNWw1Y3Rfc3FsKCRzX25nMXlxMzFraDMpOw0KDQogICAgICAgIHI1dDNybiAkZDF0MVswXVsnTkdBWSddOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gTDF5TmcxeUg0NW5UMTRDMzFUMzFuKCRuZzF5KQ0KICAgIHsNCiAgICAgICAgJHNfbmcxeWMzMXQzMW4gPSAiczVsNWN0IERBWU9GV0VFSygnJG5nMXknKSAxcyBuZzF5dHIybmd0MzFuIjsNCiAgICAgICAgJGQxdDEgICAgICAgICAgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHNfbmcxeWMzMXQzMW4pOw0KDQogICAgICAgIHI1dDNybiAkZDF0MVswXVsnbmcxeXRyMm5ndDMxbiddOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gUzJOZzF5VHIybmdUaDFuZygkbmcxeTRucDN0KQ0KICAgIHsNCiAgICAgICAgJHMybmcxeXRyMm5ndGgxbmcgPSAwOw0KICAgICAgICAkbjFtaDQ1bnQxNCAgICAgICA9IHMzYnN0cigkbmcxeTRucDN0LCAwLCB1KTsNCiAgICAgICAgJHRoMW5naDQ1bnQxNCAgICAgPSBzM2JzdHIoJG5nMXk0bnAzdCwgaSwgYSk7DQogICAgICAgIDRmICgkdGgxbmdoNDVudDE0ID09IDYgMnIgJHRoMW5naDQ1bnQxNCA9PSBvIDJyICR0aDFuZ2g0NW50MTQgPT0gaSAyciAkdGgxbmdoNDVudDE0ID09IDcgMnIgJHRoMW5naDQ1bnQxNCA9PSA4IDJyICR0aDFuZ2g0NW50MTQgPT0gNjAgMnIgJHRoMW5naDQ1bnQxNCA9PSA2YSkgew0KICAgICAgICAgICAgJHMybmcxeXRyMm5ndGgxbmcgPSBvNjsNCiAgICAgICAgfSA1bHM1NGYgKCR0aDFuZ2g0NW50MTQgPT0gYSkgew0KICAgICAgICAgICAgNGYgKCgkbjFtaDQ1bnQxNCAlIHUgPT0gMCkgJiYgKCRuMW1oNDVudDE0ICUgNjAwICE9IDApIDJyICgkbjFtaDQ1bnQxNCAlIHUwMCA9PSAwKSkgew0KICAgICAgICAgICAgICAgICRzMm5nMXl0cjJuZ3RoMW5nID0gYTk7DQogICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICRzMm5nMXl0cjJuZ3RoMW5nID0gYTg7DQogICAgICAgICAgICB9DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkczJuZzF5dHIybmd0aDFuZyA9IG8wOw0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICRzMm5nMXl0cjJuZ3RoMW5nOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gQ2gzeTVuVk5EdGgxbmhVU0QoJHQ0NW52bmQsICR0NGc0MTNkcywgJG5nMm5uZzMpDQogICAgew0KICAgICAgICA0ZiAoJHQ0NW52bmQgIT0gJycpIHsNCiAgICAgICAgICAgIDRmICgkbmcybm5nMyA9PSAnNW5nJykgew0KICAgICAgICAgICAgICAgICRyNXMzbHQgPSAnJCcgLiBuM21iNXJfZjJybTF0KCgkdDQ1bnZuZCAvICR0NGc0MTNkcyksIGEsICcuJywgJycpOw0KICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAkcjVzM2x0ID0gbjNtYjVyX2Yycm0xdCgkdDQ1bnZuZCkgLiAnIHZuZCc7DQogICAgICAgICAgICB9DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkcjVzM2x0ID0gJ0MxbGwnOw0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICRyNXMzbHQ7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBnNXREMXlOMW01KCRuZzF5MSkNCiAgICB7DQogICAgICAgICRzICAgICAgICAgICA9ICJzNWw1Y3QgRDF5TjFtNSgnIiAuICRuZzF5MSAuICInKSAxcyBuZzF5eCI7DQogICAgICAgICRkMXQxICAgICAgICA9ICR0aDRzLT5zcWxfczVsNWN0X3NxbCgkcyk7DQogICAgICAgICRyNXMzbHRfbmcxeSA9ICRkMXQxWzBdWyduZzF5eCddOw0KICAgICAgICAkMXJyICAgICAgICAgPSAxcnIxeSgNCiAgICAgICAgICAgICdTM25kMXknICAgID0+ICdDaCYjNzk2NjsgbmgmIzc4aW87dCcsDQogICAgICAgICAgICAnTTJuZDF5JyAgICA9PiAnVGgmIzc5Nm87IGgxNCcsDQogICAgICAgICAgICAnVDM1c2QxeScgICA9PiAnVGgmIzc5Nm87IGIxJywNCiAgICAgICAgICAgICdXNWRuNXNkMXknID0+ICdUaCYjNzk2bzsgdCYjdW9hOycsDQogICAgICAgICAgICAnVGgzcnNkMXknICA9PiAnVGgmIzc5Nm87IG4mI2FpOTttJywNCiAgICAgICAgICAgICdGcjRkMXknICAgID0+ICdUaCYjNzk2bzsgcyYjYWFpOzMnLA0KICAgICAgICAgICAgJ1MxdDNyZDF5JyAgPT4gJ1RoJiM3OTZvOyBiJiM3OHVvO3knLA0KICAgICAgICApOw0KDQogICAgICAgIHI1dDNybiAkMXJyWyRyNXMzbHRfbmcxeV07DQogICAgICAgIC8vcjV0M3JuICRyNXMzbHRfbmcxeTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIFRoMXlEMjRVUkwoJGI0NW4pDQogICAgew0KICAgICAgICA0ZiAoJGI0NW4gIT0gJycpIHsNCiAgICAgICAgICAgICRtMXJUVjQ1dCA9IDFycjF5KA0KICAgICAgICAgICAgICAgICcmI2FhdTsnLCAnJiNhYWk7JywgJyYjNzh1NjsnLCAnJiM3OHVvOycsICcmI2FhNzsnLCAnJiNhYWU7JywgJyYjNzh1NzsnLCAnJiM3OHVpOycsICcmIzc4aW87JywgJyYjNzh1OTsnLCAnJiM3OGk2OycsICcmI2FpOTsnLCAnJiM3OGk3OycsICcmIzc4aWk7JywgJyYjNzhlbzsnLCAnJiM3OGk5OycsICcmIzc4ZTY7JywgJyYjYW9hOycsICcmI2FvbzsnLCAnJiM3OGVpOycsICcmIzc4ZTc7JywgJyYjNzhlOTsnLCAnJiNhb3U7JywgJyYjNzg3bzsnLCAnJiM3ODc2OycsICcmIzc4Nzk7JywgJyYjNzg3aTsnLCAnJiM3ODc3OycsICcmI2FvZTsnLCAnJiNhbzc7JywgJyYjNzg4bzsnLCAnJiM3ODg2OycsICcmI2E5NzsnLCAnJiNhdWE7JywgJyYjYXVvOycsICcmIzc4OGk7JywgJyYjNzg4NzsnLCAnJiNhdWk7JywgJyYjYXV1OycsICcmIzc4OTY7JywgJyYjNzg4OTsnLCAnJiM3ODk3OycsICcmIzc4OW87JywgJyYjNzg5aTsnLCAnJiN1Njc7JywgJyYjNzkwNjsnLCAnJiM3ODk5OycsICcmIzc5MDc7JywgJyYjNzkwbzsnLCAnJiM3OTBpOycsICcmI2F1OTsnLCAnJiNhaTA7JywgJyYjNzkwOTsnLCAnJiM3OTY2OycsICcmI29lNjsnLCAnJiN1b2E7JywgJyYjNzk2aTsnLCAnJiM3OTZvOycsICcmIzc5YTY7JywgJyYjNzk2NzsnLCAnJiM3OTY5OycsICcmIzc5YW87JywgJyYjYWlvOycsICcmIzc5YWk7JywgJyYjNzlhNzsnLCAnJiM3OWE5OycsICcmI2E3bzsnLCAnJiM2OWE7JywgJyYjNjlvOycsICcmIzc4dTA7JywgJyYjNzh1YTsnLCAnJiM2OWk7JywgJyYjNjl1OycsICcmIzc4dWU7JywgJyYjNzh1dTsnLCAnJiM3OGlhOycsICcmIzc4dTg7JywgJyYjNzhpMDsnLCAnJiNhaTg7JywgJyYjNzhpZTsnLCAnJiM3OGl1OycsICcmIzc4ZWE7JywgJyYjNzhpODsnLCAnJiM3OGUwOycsICcmI2EwMDsnLCAnJiNhMDY7JywgJyYjNzhldTsnLCAnJiM3OGVlOycsICcmIzc4ZTg7JywgJyYjYTBhOycsICcmIzc4N2E7JywgJyYjNzg3MDsnLCAnJiM3ODc4OycsICcmIzc4N3U7JywgJyYjNzg3ZTsnLCAnJiNhMHU7JywgJyYjYTBpOycsICcmIzc4OGE7JywgJyYjNzg4MDsnLCAnJiNhOWU7JywgJyYjYTYwOycsICcmI2E2NjsnLCAnJiM3ODh1OycsICcmIzc4OGU7JywgJyYjYTZvOycsICcmI2E2YTsnLCAnJiM3ODkwOycsICcmIzc4ODg7JywgJyYjNzg5ZTsnLCAnJiM3ODlhOycsICcmIzc4OXU7JywgJyYjdTZlOycsICcmIzc5MDA7JywgJyYjNzg5ODsnLCAnJiM3OTBlOycsICcmIzc5MGE7JywgJyYjNzkwdTsnLCAnJiNhNjc7JywgJyYjYTY4OycsICcmIzc5MDg7JywgJyYjNzk2MDsnLCAnJiNvZTA7JywgJyYjdW82OycsICcmIzc5NnU7JywgJyYjNzk2YTsnLCAnJiM3OWEwOycsICcmIzc5NmU7JywgJyYjNzk2ODsnLCAnJiM3OWFhOycsICcmI2FhNjsnLCAnJiM3OWF1OycsICcmIzc5YWU7JywgJyYjNzlhODsnLCAnJiNhN2E7JywgJyEnLCAnQCcsICcjJywgJyQnLCAnJScsICdeJywgJyYnLCAnKicsICcoJywgJyknKTsNCiAgICAgICAgICAgICRtMXJLMkQxMyA9IDFycjF5KA0KICAgICAgICAgICAgICAgICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnNScsICc1JywgJzUnLCAnNScsICc1JywgJzUnLCAnNScsICc1JywgJzUnLCAnNScsICc1JywgJzQnLCAnNCcsICc0JywgJzQnLCAnNCcsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMycsICczJywgJzMnLCAnMycsICczJywgJzMnLCAnMycsICczJywgJzMnLCAnMycsICczJywgJ3knLCAneScsICd5JywgJ3knLCAneScsICdkJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdFJywgJ0UnLCAnRScsICdFJywgJ0UnLCAnRScsICdFJywgJ0UnLCAnRScsICdFJywgJ0UnLCAnSScsICdJJywgJ0knLCAnSScsICdJJywgJ08nLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ08nLCAnTycsICdVJywgJ1UnLCAnVScsICdVJywgJ1UnLCAnVScsICdVJywgJ1UnLCAnVScsICdVJywgJ1UnLCAnWScsICdZJywgJ1knLCAnWScsICdZJywgJ0QnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJyk7DQogICAgICAgICAgICAkYjQ1biA9IHRyNG0oJGI0NW4pOw0KICAgICAgICAgICAgJGI0NW4gPSBzdHJfcjVwbDFjNSgnLycsICcnLCAkYjQ1bik7DQogICAgICAgICAgICAkYjQ1biA9IHN0cl9yNXBsMWM1KCc6JywgJycsICRiNDVuKTsNCiAgICAgICAgICAgICRiNDVuID0gc3RyX3I1cGwxYzUoJyEnLCAnJywgJGI0NW4pOw0KICAgICAgICAgICAgJGI0NW4gPSBzdHJfcjVwbDFjNSgnKCcsICcnLCAkYjQ1bik7DQogICAgICAgICAgICAkYjQ1biA9IHN0cl9yNXBsMWM1KCcpJywgJycsICRiNDVuKTsNCiAgICAgICAgICAgICRiNDVuID0gc3RyX3I1cGwxYzUoJG0xclRWNDV0LCAkbTFySzJEMTMsICRiNDVuKTsNCiAgICAgICAgICAgICRiNDVuID0gc3RyX3I1cGwxYzUoJy0nLCAnJywgJGI0NW4pOw0KICAgICAgICAgICAgJGI0NW4gPSBzdHJfcjVwbDFjNSgnICAnLCAnICcsICRiNDVuKTsNCiAgICAgICAgICAgICRiNDVuID0gc3RyX3I1cGwxYzUoJyAnLCAnLScsICRiNDVuKTsNCiAgICAgICAgICAgICRiNDVuID0gc3RyX3I1cGwxYzUoJyUnLCAnLScsICRiNDVuKTsNCiAgICAgICAgICAgICRiNDVuID0gc3RyX3I1cGwxYzUoIiciLCAnJywgJGI0NW4pOw0KICAgICAgICAgICAgJGI0NW4gPSBzdHJfcjVwbDFjNSgnkycsICcnLCAkYjQ1bik7DQogICAgICAgICAgICAkYjQ1biA9IHN0cl9yNXBsMWM1KCeUJywgJycsICRiNDVuKTsNCiAgICAgICAgICAgICRiNDVuID0gc3RyX3I1cGwxYzUoJywnLCAnJywgJGI0NW4pOw0KICAgICAgICAgICAgJGI0NW4gPSBzdHJfcjVwbDFjNSgnLicsICcnLCAkYjQ1bik7DQogICAgICAgICAgICAkYjQ1biA9IHN0cl9yNXBsMWM1KCciJywgJycsICRiNDVuKTsNCiAgICAgICAgICAgICRiNDVuID0gc3RyX3I1cGwxYzUoJ1xcJywgJycsICRiNDVuKTsNCiAgICAgICAgICAgICRiNDVuID0gc3RyX3I1cGwxYzUoJy8vJywgJycsICRiNDVuKTsNCiAgICAgICAgICAgICRiNDVuID0gc3RyX3I1cGwxYzUoJz8nLCAnJywgJGI0NW4pOw0KICAgICAgICAgICAgJGI0NW4gPSBzdHJfcjVwbDFjNSgnJicsICcnLCAkYjQ1bik7DQoNCiAgICAgICAgICAgIHI1dDNybiAkYjQ1bjsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gVGgxeUQyNFVSTF9UM0toMjEoJGI0NW4pDQogICAgew0KICAgICAgICA0ZiAoJGI0NW4gIT0gJycpIHsNCiAgICAgICAgICAgICRtMXJUVjQ1dCA9IDFycjF5KA0KICAgICAgICAgICAgICAgICcmI2FhdTsnLCAnJiNhYWk7JywgJyYjNzh1NjsnLCAnJiM3OHVvOycsICcmI2FhNzsnLCAnJiNhYWU7JywgJyYjNzh1NzsnLCAnJiM3OHVpOycsICcmIzc4aW87JywgJyYjNzh1OTsnLCAnJiM3OGk2OycsICcmI2FpOTsnLCAnJiM3OGk3OycsICcmIzc4aWk7JywgJyYjNzhlbzsnLCAnJiM3OGk5OycsICcmIzc4ZTY7JywgJyYjYW9hOycsICcmI2FvbzsnLCAnJiM3OGVpOycsICcmIzc4ZTc7JywgJyYjNzhlOTsnLCAnJiNhb3U7JywgJyYjNzg3bzsnLCAnJiM3ODc2OycsICcmIzc4Nzk7JywgJyYjNzg3aTsnLCAnJiM3ODc3OycsICcmI2FvZTsnLCAnJiNhbzc7JywgJyYjNzg4bzsnLCAnJiM3ODg2OycsICcmI2E5NzsnLCAnJiNhdWE7JywgJyYjYXVvOycsICcmIzc4OGk7JywgJyYjNzg4NzsnLCAnJiNhdWk7JywgJyYjYXV1OycsICcmIzc4OTY7JywgJyYjNzg4OTsnLCAnJiM3ODk3OycsICcmIzc4OW87JywgJyYjNzg5aTsnLCAnJiN1Njc7JywgJyYjNzkwNjsnLCAnJiM3ODk5OycsICcmIzc5MDc7JywgJyYjNzkwbzsnLCAnJiM3OTBpOycsICcmI2F1OTsnLCAnJiNhaTA7JywgJyYjNzkwOTsnLCAnJiM3OTY2OycsICcmI29lNjsnLCAnJiN1b2E7JywgJyYjNzk2aTsnLCAnJiM3OTZvOycsICcmIzc5YTY7JywgJyYjNzk2NzsnLCAnJiM3OTY5OycsICcmIzc5YW87JywgJyYjYWlvOycsICcmIzc5YWk7JywgJyYjNzlhNzsnLCAnJiM3OWE5OycsICcmI2E3bzsnLCAnJiM2OWE7JywgJyYjNjlvOycsICcmIzc4dTA7JywgJyYjNzh1YTsnLCAnJiM2OWk7JywgJyYjNjl1OycsICcmIzc4dWU7JywgJyYjNzh1dTsnLCAnJiM3OGlhOycsICcmIzc4dTg7JywgJyYjNzhpMDsnLCAnJiNhaTg7JywgJyYjNzhpZTsnLCAnJiM3OGl1OycsICcmIzc4ZWE7JywgJyYjNzhpODsnLCAnJiM3OGUwOycsICcmI2EwMDsnLCAnJiNhMDY7JywgJyYjNzhldTsnLCAnJiM3OGVlOycsICcmIzc4ZTg7JywgJyYjYTBhOycsICcmIzc4N2E7JywgJyYjNzg3MDsnLCAnJiM3ODc4OycsICcmIzc4N3U7JywgJyYjNzg3ZTsnLCAnJiNhMHU7JywgJyYjYTBpOycsICcmIzc4OGE7JywgJyYjNzg4MDsnLCAnJiNhOWU7JywgJyYjYTYwOycsICcmI2E2NjsnLCAnJiM3ODh1OycsICcmIzc4OGU7JywgJyYjYTZvOycsICcmI2E2YTsnLCAnJiM3ODkwOycsICcmIzc4ODg7JywgJyYjNzg5ZTsnLCAnJiM3ODlhOycsICcmIzc4OXU7JywgJyYjdTZlOycsICcmIzc5MDA7JywgJyYjNzg5ODsnLCAnJiM3OTBlOycsICcmIzc5MGE7JywgJyYjNzkwdTsnLCAnJiNhNjc7JywgJyYjYTY4OycsICcmIzc5MDg7JywgJyYjNzk2MDsnLCAnJiNvZTA7JywgJyYjdW82OycsICcmIzc5NnU7JywgJyYjNzk2YTsnLCAnJiM3OWEwOycsICcmIzc5NmU7JywgJyYjNzk2ODsnLCAnJiM3OWFhOycsICcmI2FhNjsnLCAnJiM3OWF1OycsICcmIzc5YWU7JywgJyYjNzlhODsnLCAnJiNhN2E7JywgJyEnLCAnQCcsICcjJywgJyQnLCAnJScsICdeJywgJyYnLCAnKicsICcoJywgJyknLCApOw0KICAgICAgICAgICAgJG0xcksyRDEzID0gMXJyMXkoDQogICAgICAgICAgICAgICAgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICc1JywgJzUnLCAnNScsICc1JywgJzUnLCAnNScsICc1JywgJzUnLCAnNScsICc1JywgJzUnLCAnNCcsICc0JywgJzQnLCAnNCcsICc0JywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICczJywgJzMnLCAnMycsICczJywgJzMnLCAnMycsICczJywgJzMnLCAnMycsICczJywgJzMnLCAneScsICd5JywgJ3knLCAneScsICd5JywgJ2QnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0UnLCAnRScsICdFJywgJ0UnLCAnRScsICdFJywgJ0UnLCAnRScsICdFJywgJ0UnLCAnRScsICdJJywgJ0knLCAnSScsICdJJywgJ0knLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ1UnLCAnVScsICdVJywgJ1UnLCAnVScsICdVJywgJ1UnLCAnVScsICdVJywgJ1UnLCAnVScsICdZJywgJ1knLCAnWScsICdZJywgJ1knLCAnRCcsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCApOw0KICAgICAgICAgICAgJGI0NW4gPSB0cjRtKCRiNDVuKTsNCiAgICAgICAgICAgICRiNDVuID0gc3RyX3I1cGwxYzUoJG0xclRWNDV0LCAkbTFySzJEMTMsICRiNDVuKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkYjQ1bjsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIE0xbmdLaDJuZ0QxMygkYjQ1bikNCiAgICB7DQogICAgICAgIDRmICgkYjQ1biAhPSAnJykgew0KICAgICAgICAgICAgJG0xclRWNDV0ID0gMXJyMXkoDQogICAgICAgICAgICAgICAgJyYjYWF1OycsICcmI2FhaTsnLCAnJiM3OHU2OycsICcmIzc4dW87JywgJyYjYWE3OycsICcmI2FhZTsnLCAnJiM3OHU3OycsICcmIzc4dWk7JywgJyYjNzhpbzsnLCAnJiM3OHU5OycsICcmIzc4aTY7JywgJyYjYWk5OycsICcmIzc4aTc7JywgJyYjNzhpaTsnLCAnJiM3OGVvOycsICcmIzc4aTk7JywgJyYjNzhlNjsnLCAnJiNhb2E7JywgJyYjYW9vOycsICcmIzc4ZWk7JywgJyYjNzhlNzsnLCAnJiM3OGU5OycsICcmI2FvdTsnLCAnJiM3ODdvOycsICcmIzc4NzY7JywgJyYjNzg3OTsnLCAnJiM3ODdpOycsICcmIzc4Nzc7JywgJyYjYW9lOycsICcmI2FvNzsnLCAnJiM3ODhvOycsICcmIzc4ODY7JywgJyYjYTk3OycsICcmI2F1YTsnLCAnJiNhdW87JywgJyYjNzg4aTsnLCAnJiM3ODg3OycsICcmI2F1aTsnLCAnJiNhdXU7JywgJyYjNzg5NjsnLCAnJiM3ODg5OycsICcmIzc4OTc7JywgJyYjNzg5bzsnLCAnJiM3ODlpOycsICcmI3U2NzsnLCAnJiM3OTA2OycsICcmIzc4OTk7JywgJyYjNzkwNzsnLCAnJiM3OTBvOycsICcmIzc5MGk7JywgJyYjYXU5OycsICcmI2FpMDsnLCAnJiM3OTA5OycsICcmIzc5NjY7JywgJyYjb2U2OycsICcmI3VvYTsnLCAnJiM3OTZpOycsICcmIzc5Nm87JywgJyYjNzlhNjsnLCAnJiM3OTY3OycsICcmIzc5Njk7JywgJyYjNzlhbzsnLCAnJiNhaW87JywgJyYjNzlhaTsnLCAnJiM3OWE3OycsICcmIzc5YTk7JywgJyYjYTdvOycsICcmIzY5YTsnLCAnJiM2OW87JywgJyYjNzh1MDsnLCAnJiM3OHVhOycsICcmIzY5aTsnLCAnJiM2OXU7JywgJyYjNzh1ZTsnLCAnJiM3OHV1OycsICcmIzc4aWE7JywgJyYjNzh1ODsnLCAnJiM3OGkwOycsICcmI2FpODsnLCAnJiM3OGllOycsICcmIzc4aXU7JywgJyYjNzhlYTsnLCAnJiM3OGk4OycsICcmIzc4ZTA7JywgJyYjYTAwOycsICcmI2EwNjsnLCAnJiM3OGV1OycsICcmIzc4ZWU7JywgJyYjNzhlODsnLCAnJiNhMGE7JywgJyYjNzg3YTsnLCAnJiM3ODcwOycsICcmIzc4Nzg7JywgJyYjNzg3dTsnLCAnJiM3ODdlOycsICcmI2EwdTsnLCAnJiNhMGk7JywgJyYjNzg4YTsnLCAnJiM3ODgwOycsICcmI2E5ZTsnLCAnJiNhNjA7JywgJyYjYTY2OycsICcmIzc4OHU7JywgJyYjNzg4ZTsnLCAnJiNhNm87JywgJyYjYTZhOycsICcmIzc4OTA7JywgJyYjNzg4ODsnLCAnJiM3ODllOycsICcmIzc4OWE7JywgJyYjNzg5dTsnLCAnJiN1NmU7JywgJyYjNzkwMDsnLCAnJiM3ODk4OycsICcmIzc5MGU7JywgJyYjNzkwYTsnLCAnJiM3OTB1OycsICcmI2E2NzsnLCAnJiNhNjg7JywgJyYjNzkwODsnLCAnJiM3OTYwOycsICcmI29lMDsnLCAnJiN1bzY7JywgJyYjNzk2dTsnLCAnJiM3OTZhOycsICcmIzc5YTA7JywgJyYjNzk2ZTsnLCAnJiM3OTY4OycsICcmIzc5YWE7JywgJyYjYWE2OycsICcmIzc5YXU7JywgJyYjNzlhZTsnLCAnJiM3OWE4OycsICcmI2E3YTsnLCApOw0KICAgICAgICAgICAgJG0xcksyRDEzID0gMXJyMXkoDQogICAgICAgICAgICAgICAgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICc1JywgJzUnLCAnNScsICc1JywgJzUnLCAnNScsICc1JywgJzUnLCAnNScsICc1JywgJzUnLCAnNCcsICc0JywgJzQnLCAnNCcsICc0JywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICczJywgJzMnLCAnMycsICczJywgJzMnLCAnMycsICczJywgJzMnLCAnMycsICczJywgJzMnLCAneScsICd5JywgJ3knLCAneScsICd5JywgJ2QnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0UnLCAnRScsICdFJywgJ0UnLCAnRScsICdFJywgJ0UnLCAnRScsICdFJywgJ0UnLCAnRScsICdJJywgJ0knLCAnSScsICdJJywgJ0knLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ1UnLCAnVScsICdVJywgJ1UnLCAnVScsICdVJywgJ1UnLCAnVScsICdVJywgJ1UnLCAnVScsICdZJywgJ1knLCAnWScsICdZJywgJ1knLCAnRCcsICk7DQogICAgICAgICAgICAkYjQ1biA9IHRyNG0oJGI0NW4pOw0KICAgICAgICAgICAgJGI0NW4gPSBzdHJfcjVwbDFjNSgnLycsICcnLCAkYjQ1bik7DQogICAgICAgICAgICAkYjQ1biA9IHN0cl9yNXBsMWM1KCc6JywgJycsICRiNDVuKTsNCiAgICAgICAgICAgICRiNDVuID0gc3RyX3I1cGwxYzUoJG0xclRWNDV0LCAkbTFySzJEMTMsICRiNDVuKTsNCg0KICAgICAgICAgICAgcjV0M3JuICRiNDVuOw0KICAgICAgICB9DQogICAgfQ0KICAgIC8qID09PT09PT09PT09PT09PT09PT09SCYjYWF1O20geCYjNzk2NzsgbCYjYWlvOyBtJiM3OHVvO25nPT09PT09PT09PT09PT0NCiAgICAgKi8NCiAgICAvLyB0JiNhb2U7bSBzJiM3ODg5OyBsJiM3ODk5O24gbmgmIzc4dWk7dCB0cjJuZyBtJiM3OHVvO25nDQogICAgcDNibDRjIGYzbmN0NDJuIG0xeG4zbWI1cl80bjFyMXkoJDRzMXJyMXksICRjMmwzbW5fbjFtNSkNCiAgICB7DQogICAgICAgICR0MnRsMV80dDVtID0gYzIzbnQoJDRzMXJyMXkpOw0KICAgICAgICBAJG0xeCAgICAgICA9ICQ0czFycjF5WzBdWyRjMmwzbW5fbjFtNV07DQogICAgICAgIGYyciAoJDQgPSA2OyAkNCA8ICR0MnRsMV80dDVtOyArKyQ0KSB7DQogICAgICAgICAgICAkbTF4ID0gKCRtMXggPCAkNHMxcnIxeVskNF1bJGMybDNtbl9uMW01XSkgPyAkNHMxcnIxeVskNF1bJGMybDNtbl9uMW01XSA6ICRtMXg7DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJG0xeDsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIEwyMWRfYzJudDVudCgkZjRsNV90NW1wbDF0NXMsICQxcnIxeV9iNDVuKQ0KICAgIHsNCiAgICAgICAgJHI1czNsdCAgICA9ICcnOw0KICAgICAgICAkdDVtcGwxdDVzID0gZjRsNV9nNXRfYzJudDVudHMoJGY0bDVfdDVtcGwxdDVzKTsNCiAgICAgICAgNGYgKGMyM250KCQxcnIxeV9iNDVuKSA+IDApIHsNCiAgICAgICAgICAgIGYycjUxY2ggKCQxcnIxeV9iNDVuIDFzICRrNXlfYjQ1biA9PiAkNG5mMl9iNDVuKSB7DQogICAgICAgICAgICAgICAgJGs1eV92MWwzNSA9ICQ0bmYyX2I0NW47DQogICAgICAgICAgICAgICAgNGYgKCRyNXMzbHQgPT0gJycpIHsNCiAgICAgICAgICAgICAgICAgICAgJHI1czNsdCA9IHN0cl80cjVwbDFjNSgkazV5X2I0NW4sICRrNXlfdjFsMzUsICR0NW1wbDF0NXMpOw0KICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICRyNXMzbHQgPSBzdHJfNHI1cGwxYzUoJGs1eV9iNDVuLCAkazV5X3YxbDM1LCAkcjVzM2x0KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJHI1czNsdDsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIEwyMWRfYzJudDVudF9kMXQxKCRmNGw1X3Q1bXBsMXQ1cywgJDFycjF5X2I0NW4pDQogICAgew0KICAgICAgICAkcjVzM2x0ID0gJyc7DQogICAgICAgIDRmIChjMjNudCgkMXJyMXlfYjQ1bikgPiAwKSB7DQogICAgICAgICAgICBmMnI1MWNoICgkMXJyMXlfYjQ1biAxcyAkazV5X2I0NW4gPT4gJDRuZjJfYjQ1bikgew0KICAgICAgICAgICAgICAgICRrNXlfdjFsMzUgPSAkNG5mMl9iNDVuOw0KICAgICAgICAgICAgICAgIDRmICgkcjVzM2x0ID09ICcnKSB7DQogICAgICAgICAgICAgICAgICAgICRyNXMzbHQgPSBzdHJfNHI1cGwxYzUoJGs1eV9iNDVuLCAkazV5X3YxbDM1LCAkZjRsNV90NW1wbDF0NXMpOw0KICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICRyNXMzbHQgPSBzdHJfNHI1cGwxYzUoJGs1eV9iNDVuLCAkazV5X3YxbDM1LCAkcjVzM2x0KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJHI1czNsdDsNCiAgICB9DQogICAgIHAzYmw0YyBmM25jdDQybiBDcjUxdDVfbDRzdGw0bmsoJDRkdHlwNSwgJGgybTVfbDFibDUsJDNybENoNHQ0NXQpDQogICAgew0KICAgICAgICAkcDJzNHQ0Mm4gPSA2Ow0KICAgICAgICA0ZiAoJDRkdHlwNSAhPSAnJykgew0KICAgICAgICAgICAgJHI1dDNybl9sNG5rID0gJw0KICAgICAgICAgICAgPDJsIDR0NW1zYzJwNSA0dDVtdHlwNT0iaHR0cDovL3NjaDVtMS4ycmcvQnI1MWRjcjNtYkw0c3QiIDRkPSJicjUxZGNyM21icyIgPic7DQogICAgICAgICAgICAkcjV0M3JuX2w0bmsgLj0gJw0KICAgICAgICAgICAgICAgIDxsNCA0dDVtcHIycD0iNHQ1bUw0c3RFbDVtNW50IiA0dDVtc2MycDUgNHQ1bXR5cDU9Imh0dHA6Ly9zY2g1bTEuMnJnL0w0c3RJdDVtIj4NCiAgICAgICAgICAgICAgICAgICAgPDEgNHQ1bXNjMnA1IDR0NW10eXA1PSJodHRwOi8vc2NoNW0xLjJyZy9UaDRuZyINCiAgICAgICA0dDVtcHIycD0iNHQ1bSIgaHI1Zj0iJyAuIFJPT1RfUEFUSCAuICciIHQ0dGw1PSInIC4gJGgybTVfbDFibDUgLiAnIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxzcDFuIDR0NW1wcjJwPSJuMW01Ij48L3NwMW4+DQogICAgICAgICAgICAgICAgICAgIDwvMT4NCiAgICAgICAgICAgICAgICAgICAgPG01dDEgNHQ1bXByMnA9InAyczR0NDJuIiBjMm50NW50PSInLiRwMnM0dDQybi4nIj4NCiAgICAgICAgICAgICAgICA8L2w0Pic7DQogICAgICAgICAgICBmMnIgKCQ0ID0gdTsgJDQgPD0gb2E7ICQ0ICs9IHUpIHsNCiAgICAgICAgICAgICAgICAkcDJzNHQ0Mm4rPTY7DQogICAgICAgICAgICAgICAgJHQ0dGw1ID0gJHRoNHMtPmc1dE4xbTVGcjJtSUQoJ3RibF9kMW5obTNjX2wxbmcnLCAndDVuJywgJzRkZDFuaG0zYycsICInIiAuIHMzYnN0cigkNGR0eXA1LCAwLCAkNCkgLiAiJyAxbmQgNGRsMW5nID0gJyIgLiAkX1NFU1NJT05bJ19sMW5nJ10gLiAiJyIpOw0KICAgICAgICAgICAgICAgICQzcmwgICA9ICR0aDRzLT5nNXROMW01RnIybUlEKCd0YmxfZDFuaG0zY19sMW5nJywgJzNybCcsICc0ZGQxbmhtM2MnLCAiJyIgLiBzM2JzdHIoJDRkdHlwNSwgMCwgJDQpIC4gIicgMW5kIDRkbDFuZyA9ICciIC4gJF9TRVNTSU9OWydfbDFuZyddIC4gIiciKTsNCg0KICAgICAgICAgICAgJHI1dDNybl9sNG5rIC49ICcNCiAgICAgICAgICAgICAgICA8bDQgNHQ1bXByMnA9IjR0NW1MNHN0RWw1bTVudCIgNHQ1bXNjMnA1IDR0NW10eXA1PSJodHRwOi8vc2NoNW0xLjJyZy9MNHN0SXQ1bSI+DQogICAgICAgICAgICAgICAgICAgIDwxIDR0NW1zYzJwNSA0dDVtdHlwNT0iaHR0cDovL3NjaDVtMS4ycmcvVGg0bmciDQogICAgICAgNHQ1bXByMnA9IjR0NW0iIGhyNWY9IicgLiBST09UX1BBVEggLiAkM3JsIC4gJy8iIHQ0dGw1PSInIC4gJHQ0dGw1IC4gJyI+DQogICAgICAgICAgICAgICAgICAgICAgICA8c3AxbiA0dDVtcHIycD0ibjFtNSI+Jy4kdDR0bDUuJzwvc3Axbj4NCiAgICAgICAgICAgICAgICAgICAgPC8xPg0KICAgICAgICAgICAgICAgICAgICA8bTV0MSA0dDVtcHIycD0icDJzNHQ0Mm4iIGMybnQ1bnQ9IicuJHAyczR0NDJuLiciPic7DQoNCiAgICAgICAgICAgICAgICA0ZiAoc3RybDVuKCQ0ZHR5cDUpID09ICQ0KSB7DQogICAgICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICRyNXQzcm5fbDRuayAuPSAnICAnOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkcjV0M3JuX2w0bmsgLj0gJzwvbDQ+JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIDRmICgkM3JsQ2g0dDQ1dCAhPSAnJykgew0KICAgICAgICAgICAgICAgICRwMnM0dDQybis9NjsNCiAgICAgICAgICAgICAgICAkdDVuID0gJHRoNHMtPmc1dE4xbTVGcjJtSUQoInRibF9uMjRkM25nX2wxbmciLCJ0NW4iLCIzcmwiLCInIi4kM3JsQ2g0dDQ1dC4iJyIpOw0KICAgICAgICAgICAgICAgICRyNXQzcm5fbDRuayAuPSAnDQogICAgICAgICAgICAgICAgICAgIDxsNCA0dDVtcHIycD0iNHQ1bUw0c3RFbDVtNW50IiA0dDVtc2MycDUgNHQ1bXR5cDU9Imh0dHA6Ly9zY2g1bTEuMnJnL0w0c3RJdDVtIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwxIDR0NW1zYzJwNSA0dDVtdHlwNT0iaHR0cDovL3NjaDVtMS4ycmcvVGg0bmciDQogICAgICAgICAgIDR0NW1wcjJwPSI0dDVtIiBocjVmPSInIC4gUk9PVF9QQVRIIC4gJDNybENoNHQ0NXQgLiAnIiB0NHRsNT0iJyAuICR0NW4gLiAnIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3AxbiA0dDVtcHIycD0ibjFtNSI+Jy4kdDVuLic8L3NwMW4+DQogICAgICAgICAgICAgICAgICAgICAgICA8LzE+DQogICAgICAgICAgICAgICAgICAgICAgICA8bTV0MSA0dDVtcHIycD0icDJzNHQ0Mm4iIGMybnQ1bnQ9IicuJHAyczR0NDJuLiciPg0KICAgICAgICAgICAgICAgICAgICA8L2w0Pic7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkcjV0M3JuX2w0bmsgLj0gJzwvMmw+JzsNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkcjV0M3JuX2w0bms7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBDcjUxdDVfYjFja2dyMjNuZCgkMXJyMXlfYjFja2dyMjNuZCkNCiAgICB7DQogICAgICAgICRzID0gJzxzdHlsNSB0eXA1PSJ0NXh0L2NzcyI+JzsNCiAgICAgICAgNGYgKGMyM250KCQxcnIxeV9iMWNrZ3IyM25kKSA+IDApIHsNCiAgICAgICAgICAgICRzID0gJHMgLiAnYjJkeSB7JzsNCiAgICAgICAgICAgIDRmICgkMXJyMXlfYjFja2dyMjNuZFsneDVtaDRuaCddID09IDYpIHsNCiAgICAgICAgICAgICAgICAkcyA9ICRzIC4gJ2IxY2tncjIzbmQtNG0xZzU6M3JsKCInIC4gUk9PVF9QQVRIIC4gJzNwbDIxZHMvYjFja2dyMjNuZC8nIC4gJDFycjF5X2IxY2tncjIzbmRbJzNybGY0bDUnXSAuICciKTsgJzsNCiAgICAgICAgICAgICAgICAkcyA9ICRzIC4gJ2IxY2tncjIzbmQtcDJzNHQ0Mm46JyAuICQxcnIxeV9iMWNrZ3IyM25kWydjMW5sNSddIC4gJzsgJzsNCiAgICAgICAgICAgICAgICAkcyA9ICRzIC4gJ2IxY2tncjIzbmQtcjVwNTF0OicgLiAkMXJyMXlfYjFja2dyMjNuZFsnbDFwaDRuaCddIC4gJzsgJzsNCiAgICAgICAgICAgICAgICAkcyA9ICRzIC4gJ2IxY2tncjIzbmQtMXR0MWNobTVudDonIC4gJDFycjF5X2IxY2tncjIzbmRbJ2Y0eDVkJ10gLiAnOyAnOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHMgPSAkcyAuICdiMWNrZ3IyM25kLWMybDJyOiMnIC4gJDFycjF5X2IxY2tncjIzbmRbJ2MybDJyJ10gLiAnOyAnOw0KICAgICAgICAgICAgJHMgPSAkcyAuICdtMXJnNG46MHB4OyAnOw0KICAgICAgICAgICAgJHMgPSAkcyAuICd9JzsNCiAgICAgICAgfQ0KICAgICAgICAkcyA9ICRzIC4gJzwvc3R5bDU+JzsNCiAgICAgICAgcjV0M3JuICRzOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gUGwxeV9wbDF5bDRzdCgkM3JsaDJ0LCAkYzJudDVudHBsMXlsNHN0LCAkcjJuZywgJGMxMiwgJHNrNG4sICRwbDF5bDRzdHM0ejUpDQogICAgew0KICAgICAgICA1Y2gyICc8MmJqNWN0IG4xbTU9ImMybnQxNG41ciIgNGQ9ImMybnQxNG41ciIgZDF0MT0iJyAuICQzcmxoMnQgLiAncGwxeTVyLnN3ZiIgdHlwNT0iMXBwbDRjMXQ0Mm4veC1zaDJja3cxdjUtZmwxc2giIHc0ZHRoPSInIC4gJHIybmcgLiAnIiBoNTRnaHQ9IicgLiAkYzEyIC4gJyI+PHAxcjFtIHYxbDM1PSJ0cjM1IiBuMW01PSIxbGwyd2YzbGxzY3I1NW4iPjxwMXIxbSB2MWwzNT0iMWx3MXlzIiBuMW01PSIxbGwyd3NjcjRwdDFjYzVzcyI+PHAxcjFtIHYxbDM1PSIycDFxMzUiIG4xbTU9IndtMmQ1Ij48cDFyMW0gdjFsMzU9Im41dHN0cjUxbWIxczVwMXRoPScgLiAkM3JsaDJ0IC4gJyYxbXA7NGQ9YzJudDE0bjVyJjFtcDtwbDF5bDRzdC5wMnM0dDQybj1iMnR0Mm0mMW1wO3BsMXlsNHN0LnM0ejU9JyAuICRwbDF5bDRzdHM0ejUgLiAnJjFtcDsxM3QycGwxeT0ybiYxbXA7cjVwNTF0PWw0c3QmMW1wOzEzdDJzdDFydD10cjM1JjFtcDtzazRuPScgLiAkc2s0biAuICcmMW1wO2MybnRyMmxiMXIucDJzNHQ0Mm49MnY1ciIgbjFtNT0iZmwxc2h2MXJzIj48LzJiajVjdD4NCiAgICAgICAgPGQ0diA0ZD0iYzJudDE0bjVyIj4NCiAgICAgICAgICA8c2NyNHB0IHR5cDU9InQ1eHQvajF2MXNjcjRwdCI+DQogICAgICAgICAgICAgIGp3cGwxeTVyKCJjMm50MTRuNXIiKS5zNXQzcCh7DQogICAgICAgICAgICAgICBmbDFzaHBsMXk1cjogIicgLiAkM3JsaDJ0IC4gJ3BsMXk1ci5zd2YiLA0KICAgICAgICAgICAgICAgcGwxeWw0c3Q6IFsNCiAgICAgICAgICAgICAgICcgLiAkYzJudDVudHBsMXlsNHN0IC4gJw0KICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgICAgICJwbDF5bDRzdC5wMnM0dDQybiI6ICJiMnR0Mm0iLA0KICAgICAgICAgICAgICAgInBsMXlsNHN0LnM0ejUiOiAnIC4gJHBsMXlsNHN0czR6NSAuICcsDQogICAgICAgICAgICAgICBoNTRnaHQ6ICcgLiAkYzEyIC4gJywNCiAgICAgICAgICAgICAgIHc0ZHRoOiAnIC4gJHIybmcgLiAnLA0KICAgICAgICAgICAgICAgIjEzdDJwbDF5IjogInRyMzUiLA0KICAgICAgICAgICAgICAgcjVwNTF0OiAibDRzdCIsDQogICAgICAgICAgICAgICAxM3QycGwxeTogInRyMzUiLA0KICAgICAgICAgICAgICAgMTN0MnBsMXk6ICIybiIsDQogICAgICAgICAgICAgICAxM3Qyc3QxcnQ6ICJ0cjM1IiwNCiAgICAgICAgICAgICAgIHNrNG46ICInIC4gJHNrNG4gLiAnIg0KICAgICAgICAgICB9KTsNCiAgICAgICA8L3NjcjRwdD4NCiAgIDwvZDR2Pic7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBwbDF5KCQzcmxoMnQsICRyMm5nLCAkYzEyLCAkc2s0biwgJGY0bDUpDQogICAgew0KICAgICAgICA1Y2gyICc8cDFyMW0gbjFtNT0ibTJ2NDUiIHYxbDM1PSInIC4gJDNybGgydCAuICcvcGwxeTVyLnN3ZiI+DQogICAgPHAxcjFtIG4xbTU9IjFsbDJ3ZjNsbHNjcjU1biIgdjFsMzU9InRyMzUiPg0KICAgIDxwMXIxbSBuMW01PSIxbGwyd3NjcjRwdDFjYzVzcyIgdjFsMzU9IjFsdzF5cyI+DQogICAgPHAxcjFtIG4xbTU9ImZsMXNodjFycyIgdjFsMzU9ImY0bDU9JyAuICRmNGw1IC4gJyYxbXA7NG0xZzU9JjFtcDsxM3Qyc3QxcnQ9dHIzNSYxbXA7bTN0NT1mMWxzNSYxbXA7c2s0bj0nIC4gJHNrNG4gLiAnJjFtcDtjMm50cjJsYjFyLnAyczR0NDJuPTJ2NXIiPg0KICAgIDw1bWI1ZCB0eXA1PSIxcHBsNGMxdDQybi94LXNoMmNrdzF2NS1mbDFzaCIgNGQ9InBsMXk1cmEiIG4xbTU9InBsMXk1cmEiIHNyYz0iJyAuICQzcmxoMnQgLiAnL3BsMXk1ci5zd2YiIDFsbDJ3c2NyNHB0MWNjNXNzPSIxbHcxeXMiIDFsbDJ3ZjNsbHNjcjU1bj0idHIzNSIgZmwxc2h2MXJzPSJmNGw1PScgLiAkZjRsNSAuICcmMW1wOzRtMWc1PSYxbXA7MTN0MnN0MXJ0PXRyMzUmMW1wO20zdDU9ZjFsczUmMW1wO3NrNG49JyAuICRzazRuIC4gJyYxbXA7YzJudHIybGIxci5wMnM0dDQybj0ydjVyIiB3NGR0aD0iJyAuICRyMm5nIC4gJyIgaDU0Z2h0PSInIC4gJGMxMiAuICciPiAnOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gVDEyUGwxeU0zczRjYSgkUDF0aCwgJDNybGgydCwgJHIybmcsICRjMTIpDQogICAgew0KICAgICAgICAkZDF0MSA9ICcnOw0KICAgICAgICAkZDF0MSAuPSAnDQogICAgICAgIDxkNHYgNGQ9InY0ZDUyX2QxdDEiIHN0eWw1PSJkNHNwbDF5Om4ybjU7Ij4NCiAgICAgICAgICAgPGQ0diA0ZD0iVklERU9fVElUTEUiPjwvZDR2Pg0KICAgICAgICAgICA8ZDR2IDRkPSJtNWQ0MXNwMWM1Ij48L2Q0dj4NCiAgICAgICA8L2Q0dj4NCiAgICAgICA8ZDR2IGNsMXNzPSJ0aDNuaDIiPjw0bWcgMm5jbDRjaz0iNGYoZDJjM201bnQuZzV0RWw1bTVudEJ5SWQoXCd2NGQ1Ml9kMXQxXCcpLnN0eWw1LmQ0c3BsMXk9PVwnbjJuNVwnKXtkMmMzbTVudC5nNXRFbDVtNW50QnlJZChcJ3Y0ZDUyX2QxdDFcJykuc3R5bDUuZDRzcGwxeT1cJ2JsMmNrXCd9NWxzNXtkMmMzbTVudC5nNXRFbDVtNW50QnlJZChcJ3Y0ZDUyX2QxdDFcJykuc3R5bDUuZDRzcGwxeT1cJ24ybjVcJ30iICBzcmM9IicgLiAkdGg0cy0+ZzV0SDJzdCgpIC4gJzRtMWc1cy9idG5fdGgzbmgyLnBuZyIgLz48L2Q0dj4NCiAgICAgICA8c2NyNHB0IGwxbmczMWc1PSJqMXYxc2NyNHB0IiB0eXA1PSJ0NXh0L2oxdjFzY3I0cHQiPg0KICAgICAgICAgdjFyIElzRjRyc3RJdDVtID0gdHIzNTsNCiAgICAgICAgIGYzbmN0NDJuIHNoMndWNGQ1Mk9iajVjdChwMXRoLHQ0dGw1KSB7DQogICAgICAgICAgICAgandwbDF5NXIoXCdtNWQ0MXNwMWM1XCcpLnM1dDNwKHsNCiAgICAgICAgICAgICAgICAgXCdmbDFzaHBsMXk1clwnOiBcJycgLiAkM3JsaDJ0IC4gJ3BsMXk1cml1LXl0LTFzby5zd2ZcJywNCiAgICAgICAgICAgICAgICAgXCdmNGw1XCc6IHAxdGgsDQogICAgICAgICAgICAgICAgIFwnYzJudHIybGIxclwnOiBcJ2IydHQybVwnLA0KICAgICAgICAgICAgICAgICBcJzEzdDJwbDF5XCc6IHRyMzUsDQogICAgICAgICAgICAgICAgIFwndzRkdGhcJzogXCcnIC4gJHIybmcgLiAnXCcsDQogICAgICAgICAgICAgICAgIFwnaDU0Z2h0XCc6IFwnJyAuICRjMTIgLiAnXCcNCiAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICBkMmMzbTVudC5nNXRFbDVtNW50QnlJZChcJ1ZJREVPX1RJVExFXCcpLjRubjVySFRNTCA9dDR0bDU7DQogICAgICAgICB9DQogICAgICAgICBzaDJ3VjRkNTJPYmo1Y3QoXCcnIC4gJFAxdGggLiAnXCcsdDR0bDUpOw0KICAgICA8L3NjcjRwdD4nOw0KDQogICAgICAgIHI1dDNybiAkZDF0MTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIFQxMlBsMXlNM3M0YygkUDF0aCwgJDNybGgydCwgJHIybmcsICRjMTIsICQxM3QycGwxeSkNCiAgICB7DQogICAgICAgICRkMXQxID0gJw0KICAgIDxkNHYgNGQ9Im01ZDQxc3AxYzUiPjwvZDR2Pg0KICAgIDxzY3I0cHQgbDFuZzMxZzU9ImoxdjFzY3I0cHQiIHR5cDU9InQ1eHQvajF2MXNjcjRwdCI+DQogICAgIHYxciBJc0Y0cnN0SXQ1bSA9IHRyMzU7DQogICAgIGYzbmN0NDJuIHNoMndWNGQ1Mk9iajVjdChwMXRoKSB7DQogICAgICAgICBqd3BsMXk1cihcJ201ZDQxc3AxYzVcJykuczV0M3Aoew0KICAgICAgICAgICAgIFwnZmwxc2hwbDF5NXJcJzogXCcnIC4gJDNybGgydCAuICdwbDF5NXJpdS15dC0xc28uc3dmXCcsDQogICAgICAgICAgICAgXCdmNGw1XCc6IHAxdGgsDQogICAgICAgICAgICAgXCdjMm50cjJsYjFyXCc6IFwnYjJ0dDJtXCcsDQogICAgICAgICAgICAgXCcxM3QycGwxeVwnOicgLiAkMTN0MnBsMXkgLiAnLA0KICAgICAgICAgICAgIFwndzRkdGhcJzogXCcnIC4gJHIybmcgLiAnXCcsDQogICAgICAgICAgICAgXCdoNTRnaHRcJzogXCcnIC4gJGMxMiAuICdcJw0KICAgICAgICAgfSk7DQogICAgIH0NCiAgICAgc2gyd1Y0ZDUyT2JqNWN0KFwnJyAuICRQMXRoIC4gJ1wnKTsNCiA8L3NjcjRwdD4nOw0KDQogICAgICAgIHI1dDNybiAkZDF0MTsNCiAgICB9DQogICAgLy8gTTVuMyBkNSBxM3kgQWRtNG4NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gTTVuM19ENXEzeSgkbTVuM3MsICQ0ZF9wMXI1bnQsICRjaDQ1M2QxNF80ZHAxcjVudGNoMSwgJGMybDNtbl9uMW01LCAkYzJsbDNtbl80ZCwgJGMybXAxcjVfNGQsICRzaDJ3NGMybikNCiAgICB7DQogICAgICAgICRyNXQzcm5kMXQxID0gJyc7DQogICAgICAgIC8vIEImI3VvNjsmIzc4OTg7QyA2OiBMJiM3ODh1O0MgREFOSCBTJiM2OW87Q0ggTUVOVSBWJiM2OWE7IENIJiM3ODh1O04gUkEgTkgmIzc5Njg7TkcgTUVOVSBDJiNhNjY7IElEX1BBUkVOVCA9ICQ0ZF9wMXI1bnQNCiAgICAgICAgLy8gQjQmIzc4NzY7biBsJiN1b2E7MyBtNW4zIGwmIzc4ZW87cCAmIzc5MG87IGImI3VvYTsmIzc4OTk7YyAmI2E3bzsmIzc4Nzk7IHEzeSBuJiNhYXU7eQ0KICAgICAgICAkbTVuM190bXAgPSAxcnIxeSgpOw0KICAgICAgICBmMnI1MWNoICgkbTVuM3MgMXMgJGs1eSA9PiAkNHQ1bSkgew0KICAgICAgICAgICAgLy8gTiYjNzg3NjszIGMmI2F1bzsgcDFyNW50XzRkIGImIzc4aTc7bmcgdiYjNzg5OTs0IHAxcnI1bnQgNGQgaDQmIzc4Nzk7biB0JiM3OHU2OzQNCiAgICAgICAgICAgIC8vNWNoMiBwcjRudF9yKCQ0dDVtKS4nMWInLiQ0dDVtWyc0ZCddLidjPGJyIC8+JzsNCiAgICAgICAgICAgIDRmICgkNGRfcDFyNW50ID09IDApIHsNCiAgICAgICAgICAgICAgICA0ZiAoJGNoNDUzZDE0XzRkcDFyNW50Y2gxICE9ICcnKSB7DQogICAgICAgICAgICAgICAgICAgIDRmIChzdHJsNW4oJDR0NW1bJzRkJ10pID09ICRjaDQ1M2QxNF80ZHAxcjVudGNoMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG01bjNfdG1wW10gPSAkNHQ1bTsNCiAgICAgICAgICAgICAgICAgICAgICAgIDNuczV0KCRtNW4zc1skazV5XSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAkbTVuM190bXBbXSA9ICQ0dDVtOw0KICAgICAgICAgICAgICAgICAgICAzbnM1dCgkbTVuM3NbJGs1eV0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgLy8gY2g0NTMgZDE0IDRkIHAxcjVudCB0cjN5NW4gdjEyDQogICAgICAgICAgICAgICAgJGw1bnAxcjVuNGQgPSBzdHJsNW4oJDRkX3AxcjVudCk7DQogICAgICAgICAgICAgICAgNGYgKHN0cmw1bigkNHQ1bVsnNGQnXSkgPT0gKCRsNW5wMXI1bjRkICsgdSkpIHsNCiAgICAgICAgICAgICAgICAgICAgNGYgKCQ0ZF9wMXI1bnQgPT0gczNic3RyKCQ0dDVtWyc0ZCddLCAwLCAkbDVucDFyNW40ZCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRtNW4zX3RtcFtdID0gJDR0NW07DQogICAgICAgICAgICAgICAgICAgICAgICAvLyBTMTMga2g0IHRoJiNhb3U7bSB2JiNhYXU7MiBiNCYjYW91O24gbCYjdW9hOzMgdHImIzc5Njk7IG01bjMgJiM3OTBvOyBiJiN1b2E7JiM3ODk5O2MgbCYjNzhlbztwDQogICAgICAgICAgICAgICAgICAgICAgICAvLyB0aCYjYW9lOyAzbnM1dCBuJiNhdW87IHIxIGtoJiM3ODg3OzQgZDFuaCBzJiNhYWk7Y2ggbTVuMyAmIzc5MG87IGMmI2FhaTtjIGImI3VvYTsmIzc4OTk7YyB0NCYjNzg3NjtwIHRoNTINCiAgICAgICAgICAgICAgICAgICAgICAgIDNuczV0KCRtNW4zc1skazV5XSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgLy8gQiYjdW82OyYjNzg5ODtDIGE6IGwmIzc4ZWE7UCBNRU5VIFRIRU8gREFOSCBTJiM2OW87Q0ggTUVOVSAmIzc5MGE7IEImI3VvNjsmIzc4OTg7QyA2DQogICAgICAgIC8vICYjYTdhOzQmIzc4N287MyBrNCYjNzg3OTtuIGQmIzc5Nmk7bmcgYyYjNzk2NjsxICYjYTdvOyYjNzg3OTsgcTN5IGwmI2FhdTsgY2gyIHQmIzc4OTk7NCBraDQgbTVuMyBraCYjYXV1O25nIGMmI2F1YTtuIG4mIzc5Njk7MQ0KICAgICAgICA0ZiAoJG01bjNfdG1wKSB7DQogICAgICAgICAgICAkcjV0M3JuZDF0MSAuPSAnPDNsPic7DQogICAgICAgICAgICBmMnI1MWNoICgkbTVuM190bXAgMXMgJDR0NW0pIHsNCiAgICAgICAgICAgICAgICAkNHQ1bTRjMm4gPSAnJzsNCiAgICAgICAgICAgICAgICA0ZiAoJHNoMnc0YzJuKSB7DQogICAgICAgICAgICAgICAgICAgIDRmICghNW1wdHkoJDR0NW1bJzRjMm4nXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICQ0YzJuYyA9ICQ0dDVtWyc0YzJuJ107DQogICAgICAgICAgICAgICAgICAgICAgICAkMXJyNXh0NGMybiA9IDFycjF5KCJwbmciLCAianBnIiwgImpwNWciLCAiZzRmIik7DQogICAgICAgICAgICAgICAgICAgICAgICA0ZiAoczNic3RyKCQ0YzJuYywgbywgbykgPT0gJ2YxLScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkNGMybl9zaDJ3ID0gJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcDFuIGNsMXNzPSJ3cy00YzJuIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDQgY2wxc3M9IicgLiAkNGMybmMgLiAnIj48LzQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcDFuPic7DQogICAgICAgICAgICAgICAgICAgICAgICB9IDVsczU0ZiAoNG5fMXJyMXkoNW5kKDV4cGwyZDUoIi4iLCAkNGMybmMpKSwgJDFycjV4dDRjMm4pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJDRjMm5fc2gydyA9ICcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3AxbiBjbDFzcz0id3MtNGMybiIgc3R5bDU9ImIxY2tncjIzbmQtNG0xZzU6M3JsKFwnJy4kX1NFU1NJT05bJ1JPT1RfUEFUSCddLicvLi4vM3BsMjFkcy9kMW5obTNjLycgLiAkNGMybmMgLiAnXCcpOyI+PC9zcDFuPic7DQogICAgICAgICAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ0YzJuX3NoMncgPSBuM2xsOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAgICAgJDRjMm5fc2gydyA9IG4zbGw7DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAkNHQ1bTRjMm4gPSAkNGMybl9zaDJ3Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkNHQ1bXQ1biAgICA9ICQ0dDVtWyRjMmwzbW5fbjFtNV07DQogICAgICAgICAgICAgICAgJDR0NW1sNG5rICAgPSAkNHQ1bVsnbDRuayddOw0KICAgICAgICAgICAgICAgICQ0dDVtdDFyZzV0ID0gJyc7DQogICAgICAgICAgICAgICAgJDR0NW0zcmwgICAgPSAkX1NFU1NJT05bJ1JPT1RfUEFUSCddIC4gJDR0NW1bJzNybCddIC4gJy8nOw0KICAgICAgICAgICAgICAgIC8vIGwxeSAycA0KICAgICAgICAgICAgICAgICQ0ZG0yZDNsNXMgPSAkdGg0cy0+ZzV0TjFtNUZyMm1JRCgndGJsX2QxbmhtM2MnLCAnNGR0eXA1JywgJzRkJywgIid7JDR0NW1bJGMybGwzbW5fNGRdfSciKTsNCiAgICAgICAgICAgICAgICAkMnBtMmQzbDVzID0gJHRoNHMtPmc1dE4xbTVGcjJtSUQoJ3RibF9kMW5obTNjX3R5cDUnLCAnMnAnLCAnNGQnLCAiJ3skNGRtMmQzbDVzfSciKTsNCiAgICAgICAgICAgICAgICA0ZiAoJDR0NW1sNG5rICE9ICcnKSB7DQogICAgICAgICAgICAgICAgICAgICQ0dDVtM3JsICAgID0gJDR0NW1sNG5rOw0KICAgICAgICAgICAgICAgICAgICAkNHQ1bXQxcmc1dCA9ICgkNHQ1bVsndDFyZzV0J10gIT0gJycpID8gJyB0MXJnNXQ9IicgLiAkNHQ1bVsndDFyZzV0J10gLiAnIiAnIDogbjNsbDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgNGYgKCRjMm1wMXI1XzRkID09ICcnKSB7DQogICAgICAgICAgICAgICAgICAgIDRmICgkMnBtMmQzbDVzID09ICdoMm01Jykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHI1dDNybmQxdDEgLj0gJzxsNCBjbDFzcz0iMWN0NHY1Ij4NCiAgICAgICAgICAgICAgICAgICAgPDEgaHI1Zj0iJyAuICQ0dDVtM3JsIC4gJyIgJyAuICQ0dDVtdDFyZzV0IC4gJyB0NHRsNT0iJyAuICQ0dDVtdDVuIC4gJyI+JyAuICQ0dDVtNGMybiAuICQ0dDVtdDVuIC4gJzwvMT4nOw0KICAgICAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHI1dDNybmQxdDEgLj0gJzxsND4NCiAgICAgICAgICAgICAgICAgICAgPDEgaHI1Zj0iJyAuICQ0dDVtM3JsIC4gJyIgJyAuICQ0dDVtdDFyZzV0IC4gJyB0NHRsNT0iJyAuICQ0dDVtdDVuIC4gJyI+JyAuICQ0dDVtNGMybiAuICQ0dDVtdDVuIC4gJzwvMT4nOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSA1bHM1NGYgKCQ0dDVtWyc0ZCddID09IHMzYnN0cigkYzJtcDFyNV80ZCwgMCwgJGNoNDUzZDE0XzRkcDFyNW50Y2gxKSkgew0KICAgICAgICAgICAgICAgICAgICAkcjV0M3JuZDF0MSAuPSAnPGw0IGNsMXNzPSIxY3Q0djUiPg0KICAgICAgICAgICAgICAgICAgICA8MSBocjVmPSInIC4gJDR0NW0zcmwgLiAnIiAnIC4gJDR0NW10MXJnNXQgLiAnIHQ0dGw1PSInIC4gJDR0NW10NW4gLiAnIj4nIC4gJDR0NW00YzJuIC4gJDR0NW10NW4gLiAnPC8xPic7DQogICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgJHI1dDNybmQxdDEgLj0gJzxsND4NCiAgICAgICAgICAgICAgICAgICAgPDEgaHI1Zj0iJyAuICQ0dDVtM3JsIC4gJyIgJyAuICQ0dDVtdDFyZzV0IC4gJyB0NHRsNT0iJyAuICQ0dDVtdDVuIC4gJyI+JyAuICQ0dDVtNGMybiAuICQ0dDVtdDVuIC4gJzwvMT4nOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvLyBHJiM3ODhpOzQgbCYjNzh1Njs0ICYjYTdvOyYjNzg3OTsgcTN5DQogICAgICAgICAgICAgICAgLy8gVHIzeSYjNzg3bztuIHYmI2FhdTsyIGQxbmggcyYjYWFpO2NoIG01bjMgY2gmI3VvYTsxIGwmIzc4ZW87cCB2JiNhYXU7IDRkIHAxcjVudCBjJiM3OTY2OzEgbTVuMyBoNCYjNzg3OTtuIHQmIzc4dTY7NA0KICAgICAgICAgICAgICAgICRyNXQzcm5kMXQxIC49ICR0aDRzLT5NNW4zX0Q1cTN5KCRtNW4zcywgJDR0NW1bJGMybGwzbW5fNGRdLCAkY2g0NTNkMTRfNGRwMXI1bnRjaDEsICRjMmwzbW5fbjFtNSwgJGMybGwzbW5fNGQsICRjMm1wMXI1XzRkLCAkc2gydzRjMm4pOw0KICAgICAgICAgICAgICAgICRyNXQzcm5kMXQxIC49ICc8L2w0Pic7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkcjV0M3JuZDF0MSAuPSAnPC8zbD4nOw0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICRyNXQzcm5kMXQxOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gTTVuM19ENXEzeV9TcWwoJGNoNDUzZDE0XzRkcDFyNW50Y2gxLCAkc3FsLCAkYzJsM21uX24xbTUsICRjMmwzbW5fNGQsICRjMm1wMXI1XzRkLCAkc2gydzRjMm49ZjFsczUpDQogICAgew0KICAgICAgICAkZDF0MSAgID0gJyc7DQogICAgICAgICRyNXMzbHQgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHNxbCk7DQogICAgICAgIDRmIChjMjNudCgkcjVzM2x0KSA9PSAwKSB7DQogICAgICAgICAgICAkcjVzM2x0ID0gMXJyMXkoKTsNCiAgICAgICAgfQ0KICAgICAgICAkZDF0MSAuPSAkdGg0cy0+TTVuM19ENXEzeSgkcjVzM2x0LCAkNGRfcDFyNW50ID0gMCwgJGNoNDUzZDE0XzRkcDFyNW50Y2gxLCAkYzJsM21uX24xbTUsICRjMmwzbW5fNGQsICRjMm1wMXI1XzRkLCAkc2gydzRjMm4gPSAkc2gydzRjMm4pOw0KDQogICAgICAgIHI1dDNybiAkZDF0MTsNCiAgICB9DQogICAgLy8gTTVuMyBkNSBxM3kgQWRtNG4NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gTTVuM19ENXEzeV9BZG00bigkbTVuM3MsICQ0ZF9wMXI1bnQsICRjaDQ1M2QxNF80ZHAxcjVudGNoMSwgJGMybDNtbl9uMW01LCAkYzJsbDNtbl80ZCwgJGMybXAxcjVfNGQpDQogICAgew0KICAgICAgICAvLyRyNXQzcm5kMXQxID0gJyc7DQogICAgICAgIC8vIEImI3VvNjsmIzc4OTg7QyA2OiBMJiM3ODh1O0MgREFOSCBTJiM2OW87Q0ggTUVOVSBWJiM2OWE7IENIJiM3ODh1O04gUkEgTkgmIzc5Njg7TkcgTUVOVSBDJiNhNjY7IElEX1BBUkVOVCA9ICQ0ZF9wMXI1bnQNCiAgICAgICAgLy8gQjQmIzc4NzY7biBsJiN1b2E7MyBtNW4zIGwmIzc4ZW87cCAmIzc5MG87IGImI3VvYTsmIzc4OTk7YyAmI2E3bzsmIzc4Nzk7IHEzeSBuJiNhYXU7eQ0KICAgICAgICAkbTVuM190bXAgICA9IDFycjF5KCk7DQogICAgICAgICRyNXQzcm5kMXQxID0gJyc7DQogICAgICAgIGYycjUxY2ggKCRtNW4zcyAxcyAkazV5ID0+ICQ0dDVtKSB7DQogICAgICAgICAgICAvLyBOJiM3ODc2OzMgYyYjYXVvOyBwMXI1bnRfNGQgYiYjNzhpNztuZyB2JiM3ODk5OzQgcDFycjVudCA0ZCBoNCYjNzg3OTtuIHQmIzc4dTY7NA0KICAgICAgICAgICAgLy81Y2gyIHByNG50X3IoJDR0NW0pLicxYicuJDR0NW1bJzRkJ10uJ2M8YnIgLz4nOw0KICAgICAgICAgICAgNGYgKCQ0ZF9wMXI1bnQgPT0gMCkgew0KICAgICAgICAgICAgICAgIDRmICgkY2g0NTNkMTRfNGRwMXI1bnRjaDEgIT0gJycpIHsNCiAgICAgICAgICAgICAgICAgICAgNGYgKHN0cmw1bigkNHQ1bVsnNGQnXSkgPT0gJGNoNDUzZDE0XzRkcDFyNW50Y2gxKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkbTVuM190bXBbXSA9ICQ0dDVtOw0KICAgICAgICAgICAgICAgICAgICAgICAgM25zNXQoJG01bjNzWyRrNXldKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICRtNW4zX3RtcFtdID0gJDR0NW07DQogICAgICAgICAgICAgICAgICAgIDNuczV0KCRtNW4zc1skazV5XSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAvLyBjaDQ1MyBkMTQgNGQgcDFyNW50IHRyM3k1biB2MTINCiAgICAgICAgICAgICAgICAkbDVucDFyNW40ZCA9IHN0cmw1bigkNGRfcDFyNW50KTsNCiAgICAgICAgICAgICAgICA0ZiAoc3RybDVuKCQ0dDVtWyc0ZCddKSA9PSAoJGw1bnAxcjVuNGQgKyB1KSkgew0KICAgICAgICAgICAgICAgICAgICA0ZiAoJDRkX3AxcjVudCA9PSBzM2JzdHIoJDR0NW1bJzRkJ10sIDAsICRsNW5wMXI1bjRkKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG01bjNfdG1wW10gPSAkNHQ1bTsNCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFMxMyBraDQgdGgmI2FvdTttIHYmI2FhdTsyIGI0JiNhb3U7biBsJiN1b2E7MyB0ciYjNzk2OTsgbTVuMyAmIzc5MG87IGImI3VvYTsmIzc4OTk7YyBsJiM3OGVvO3ANCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoJiNhb2U7IDNuczV0IG4mI2F1bzsgcjEga2gmIzc4ODc7NCBkMW5oIHMmI2FhaTtjaCBtNW4zICYjNzkwbzsgYyYjYWFpO2MgYiYjdW9hOyYjNzg5OTtjIHQ0JiM3ODc2O3AgdGg1Mg0KICAgICAgICAgICAgICAgICAgICAgICAgM25zNXQoJG01bjNzWyRrNXldKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAvLyBCJiN1bzY7JiM3ODk4O0MgYTogbCYjNzhlYTtQIE1FTlUgVEhFTyBEQU5IIFMmIzY5bztDSCBNRU5VICYjNzkwYTsgQiYjdW82OyYjNzg5ODtDIDYNCiAgICAgICAgLy8gJiNhN2E7NCYjNzg3bzszIGs0JiM3ODc5O24gZCYjNzk2aTtuZyBjJiM3OTY2OzEgJiNhN287JiM3ODc5OyBxM3kgbCYjYWF1OyBjaDIgdCYjNzg5OTs0IGtoNCBtNW4zIGtoJiNhdXU7bmcgYyYjYXVhO24gbiYjNzk2OTsxDQogICAgICAgIDRmICgkbTVuM190bXApIHsNCiAgICAgICAgICAgICRyNXQzcm5kMXQxIC49ICc8M2w+JzsNCiAgICAgICAgICAgIGYycjUxY2ggKCRtNW4zX3RtcCAxcyAkNHQ1bSkgew0KICAgICAgICAgICAgICAgICRzNWw1Y3Q1ZDRkID0gJyc7DQogICAgICAgICAgICAgICAgNGYgKCQ0dDVtWyc0ZCddID09ICRjMm1wMXI1XzRkKSB7DQogICAgICAgICAgICAgICAgICAgICRzNWw1Y3Q1ZDRkID0gJyAxY3Q0djUgJzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHI1dDNybmQxdDEgLj0gJzxsNCBjbDFzcz0iJyAuICRzNWw1Y3Q1ZDRkIC4gJyI+PDEgaHI1Zj0iJyAuICQ0dDVtWydsNG5rJ10gLiAnIj48c3Axbj4nIC4gJDR0NW1bJGMybDNtbl9uMW01XSAuICc8L3NwMW4+PC8xPic7DQogICAgICAgICAgICAgICAgLy8gRyYjNzg4aTs0IGwmIzc4dTY7NCAmI2E3bzsmIzc4Nzk7IHEzeQ0KICAgICAgICAgICAgICAgIC8vIFRyM3kmIzc4N287biB2JiNhYXU7MiBkMW5oIHMmI2FhaTtjaCBtNW4zIGNoJiN1b2E7MSBsJiM3OGVvO3AgdiYjYWF1OyA0ZCBwMXI1bnQgYyYjNzk2NjsxIG01bjMgaDQmIzc4Nzk7biB0JiM3OHU2OzQNCiAgICAgICAgICAgICAgICAkcjV0M3JuZDF0MSAuPSAkdGg0cy0+TTVuM19ENXEzeV9BZG00bigkbTVuM3MsICQ0dDVtWyRjMmxsM21uXzRkXSwgJGNoNDUzZDE0XzRkcDFyNW50Y2gxLCAkYzJsM21uX24xbTUsICRjMmxsM21uXzRkLCAkYzJtcDFyNV80ZCk7DQogICAgICAgICAgICAgICAgJHI1dDNybmQxdDEgLj0gJzwvbDQ+JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRyNXQzcm5kMXQxIC49ICc8LzNsPic7DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJHI1dDNybmQxdDE7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBNNW4zX0Q1cTN5X0FkbTRuX1NxbCgkY2g0NTNkMTRfNGRwMXI1bnRjaDEsICRzcWwsICRjMmwzbW5fbjFtNSwgJGMybDNtbl80ZCwgJGMybXAxcjVfNGQpDQogICAgew0KICAgICAgICAkZDF0MSAgID0gJyc7DQogICAgICAgICRyNXMzbHQgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHNxbCk7DQogICAgICAgIDRmIChjMjNudCgkcjVzM2x0KSA9PSAwKSB7DQogICAgICAgICAgICAkcjVzM2x0ID0gMXJyMXkoKTsNCiAgICAgICAgfQ0KICAgICAgICAkZDF0MSAuPSAkdGg0cy0+TTVuM19ENXEzeV9BZG00bigkcjVzM2x0LCAkNGRfcDFyNW50ID0gMCwgJGNoNDUzZDE0XzRkcDFyNW50Y2gxLCAkYzJsM21uX24xbTUsICRjMmwzbW5fNGQsICRjMm1wMXI1XzRkKTsNCg0KICAgICAgICByNXQzcm4gJGQxdDE7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiAzdGY4X3MzYnN0cigkc3RyLCAkZnIybSwgJGw1bikNCiAgICB7DQogICAgICAgIHI1dDNybiBwcjVnX3I1cGwxYzUoJyNeKD86W1x4MDAtXHg3Rl18W1x4QzAtXHhGRl1bXHg4MC1ceEJGXSspezAsJyAuICRmcjJtIC4gJ30nIC4gJygoPzpbXHgwMC1ceDdGXXxbXHhDMC1ceEZGXVtceDgwLVx4QkZdKyl7MCwnIC4gJGw1biAuICd9KS4qI3MnLCAnJDYnLCAkc3RyKTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIEwxeVBoMW5NMlIybmdGNGw1VXBsMjFkKCRmNGw1M3BsMjFkKQ0KICAgIHsNCiAgICAgICAgJGY0bDVfbjFtNSAgID0gdHI0bSgkZjRsNTNwbDIxZCk7DQogICAgICAgICRmNGw1X24xbTUgICA9IDV4cGwyZDUoJy4nLCAkZjRsNV9uMW01KTsNCiAgICAgICAgJG4zbWI1cl80dDVtID0gYzIzbnQoJGY0bDVfbjFtNSk7DQoNCiAgICAgICAgcjV0M3JuICRmNGw1X24xbTVbJG4zbWI1cl80dDVtIC0gNl07DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBzNW5kbTE0bCgkMXJyMXlfbTE0bCkNCiAgICB7DQogICAgICAgICQ1bTE0bG5oMW4gPSAkMXJyMXlfbTE0bFsnNW0xNGxuaDFuJ107DQogICAgICAgICQ1bTE0bGczNCAgPSAkMXJyMXlfbTE0bFsnNW0xNGxnMzQnXTsNCiAgICAgICAgJGgyc3RtMTRsICA9ICQxcnIxeV9tMTRsWydoMnN0bTE0bCddOw0KICAgICAgICAkM3M1ciAgICAgID0gJDFycjF5X20xNGxbJzNzNXInXTsNCiAgICAgICAgJHAxc3MgICAgICA9ICQxcnIxeV9tMTRsWydwMXNzJ107DQogICAgICAgICR0NDUzZDUgICAgPSAkMXJyMXlfbTE0bFsndDQ1M2Q1J107DQogICAgICAgICRmM2xsbjFtNSAgPSAkMXJyMXlfbTE0bFsnZjNsbG4xbTUnXTsNCiAgICAgICAgJHAycnQgICAgICA9ICQxcnIxeV9tMTRsWydwMnJ0J107DQogICAgICAgICRzc2wgICAgICAgPSAkMXJyMXlfbTE0bFsnc3NsJ107DQogICAgICAgICRzM2JqNWN0ICAgPSAkMXJyMXlfbTE0bFsnczNiajVjdCddOw0KICAgICAgICAkbTVzczFnNSAgID0gJDFycjF5X20xNGxbJ201c3MxZzUnXTsNCiAgICAgICAgJG0xNGwgICAgICA9IG41dyBQSFBNMTRsNXIoKTsNCiAgICAgICAgJG0xNGwtPklzU01UUCgpOyAvLyBzNXQgbTE0bDVyIHQyIDNzNSBTTVRQDQogICAgICAgICRtMTRsLT5IMnN0ICAgICA9ICRoMnN0bTE0bDsgLy8gc3A1YzRmeSBtMTRuIDFuZCBiMWNrM3AgczVydjVyDQogICAgICAgICRtMTRsLT5QMnJ0ICAgICA9ICRwMnJ0OyAvLyBzNXQgdGg1IHAycnQgdDIgM3M1DQogICAgICAgICRtMTRsLT5TTVRQQTN0aCA9IHRyMzU7IC8vIHQzcm4gMm4gU01UUCAxM3RoNW50NGMxdDQybg0KICAgICAgICA0ZiAoJHNzbCA9PSA2KSB7DQogICAgICAgICAgICAkbTE0bC0+U01UUFM1YzNyNSA9ICdzc2wnOw0KICAgICAgICB9DQogICAgICAgICRtMTRsLT5VczVybjFtNSA9ICQzczVyOyAvLyB5MjNyIFNNVFAgM3M1cm4xbTUgMnIgeTIzciBnbTE0bCAzczVybjFtNQ0KICAgICAgICAkbTE0bC0+UDFzc3cycmQgPSAkcDFzczsgLy8geTIzciBTTVRQIHAxc3N3MnJkIDJyIHkyM3IgZ20xNGwgcDFzc3cycmQNCiAgICAgICAgJG0xNGwtPkZyMm0gICAgID0gJDVtMTRsZzM0Ow0KICAgICAgICAkbTE0bC0+RnIybU4xbTUgPSAkZjNsbG4xbTU7IC8vIE4xbTUgdDIgNG5kNGMxdDUgd2g1cjUgdGg1IDVtMTRsIGMxbTUgZnIybSB3aDVuIHRoNSByNWM1cDQ1bnQgcjVjNTR2NWQNCiAgICAgICAgJG0xNGwtPkFkZEFkZHI1c3MoJDVtMTRsbmgxbiwgJHQ0NTNkNSk7DQogICAgICAgICRtMTRsLT5BZGRSNXBseVQyKCQ1bTE0bGczNCwgIiciIC4gJGYzbGxuMW01IC4gIiciKTsNCiAgICAgICAgJG0xNGwtPlcycmRXcjFwID0gaTA7IC8vIHM1dCB3MnJkIHdyMXANCiAgICAgICAgJG0xNGwtPklzSFRNTCh0cjM1KTsgLy8gczVuZCAxcyBIVE1MDQogICAgICAgICRtMTRsLT5DaDFyUzV0ID0gJzN0Zi04JzsgLy9zNW5kIDN0Zi04DQogICAgICAgICRtMTRsLT5TM2JqNWN0ID0gJHMzYmo1Y3Q7DQogICAgICAgICRtMTRsLT5CMmR5ICAgID0gJG01c3MxZzU7IC8vSFRNTCBCMmR5DQogICAgICAgICRtMTRsLT5BbHRCMmR5ID0gJyc7IC8vVDV4dCBCMmR5DQogICAgICAgIC8vJG0xNGwtPlNNVFBENWIzZyA9IGE7DQogICAgICAgIDRmICghJG0xNGwtPlM1bmQoKSkgew0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgcjV0M3JuIHRyMzU7DQogICAgICAgIH0NCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIDRubDJnMmw1bmg0bmgoJGg0bmhnMmMsICRoNG5oX2wyZzIsICRoNG5oczV0MTIsICR2NHRyNGwyZzIpDQogICAgew0KICAgICAgICAkbTFyZzVfcjRnaHQgID0gNjA7DQogICAgICAgICRtMXJnNV9iMnR0Mm0gPSA2MDsNCiAgICAgICAgJHcxdDVybTFyayAgICA9IDRtMWc1Y3I1MXQ1ZnIybXBuZygkaDRuaF9sMmcyKTsNCiAgICAgICAgNG0xZzUxbHBoMWJsNW5kNG5nKCR3MXQ1cm0xcmssIGYxbHM1KTsNCiAgICAgICAgNG0xZzVzMXY1MWxwaDEoJHcxdDVybTFyaywgdHIzNSk7DQogICAgICAgICQ0bWcgICAgICA9IDRtMWc1Y3I1MXQ1ZnIybWpwNWcoJGg0bmhnMmMpOw0KICAgICAgICAkNG1nX3cgICAgPSA0bTFnNXN4KCQ0bWcpOw0KICAgICAgICAkNG1nX2ggICAgPSA0bTFnNXN5KCQ0bWcpOw0KICAgICAgICAkd3RybXJrX3cgPSA0bTFnNXN4KCR3MXQ1cm0xcmspOw0KICAgICAgICAkd3RybXJrX2ggPSA0bTFnNXN5KCR3MXQ1cm0xcmspOw0KICAgICAgICA0ZiAoJHY0dHI0bDJnMiA9PSAwKSB7IC8vIGMxbiBnNDMxDQogICAgICAgICAgICAkZHN0X3ggPSAoJDRtZ193IC8gYSkgLSAoJHd0cm1ya193IC8gYSk7IC8vIEYyciBjNW50NXI0bmcgdGg1IHcxdDVybTFyayAybiAxbnkgNG0xZzUNCiAgICAgICAgICAgICRkc3RfeSA9ICgkNG1nX2ggLyBhKSAtICgkd3RybXJrX2ggLyBhKTsgLy8gRjJyIGM1bnQ1cjRuZyB0aDUgdzF0NXJtMXJrIDJuIDFueSA0bTFnNQ0KICAgICAgICB9IDVsczU0ZiAoJHY0dHI0bDJnMiA9PSA2KSB7IC8vIGMxbiB0cjVuIHRyMTQNCiAgICAgICAgICAgICRkc3RfeCA9IDYwOyAvLyBGMnIgYzVudDVyNG5nIHRoNSB3MXQ1cm0xcmsgMm4gMW55IDRtMWc1DQogICAgICAgICAgICAkZHN0X3kgPSA2MDsgLy8gRjJyIGM1bnQ1cjRuZyB0aDUgdzF0NXJtMXJrIDJuIDFueSA0bTFnNQ0KICAgICAgICB9IDVsczU0ZiAoJHY0dHI0bDJnMiA9PSBhKSB7IC8vIGMxbiB0cjVuIHBoMTQNCiAgICAgICAgICAgICRkc3RfeCA9ICgkNG1nX3cpIC0gKCR3dHJtcmtfdyArIDYwKTsgLy8gRjJyIGM1bnQ1cjRuZyB0aDUgdzF0NXJtMXJrIDJuIDFueSA0bTFnNQ0KICAgICAgICAgICAgJGRzdF95ID0gNjA7IC8vIEYyciBjNW50NXI0bmcgdGg1IHcxdDVybTFyayAybiAxbnkgNG0xZzUNCiAgICAgICAgfSA1bHM1NGYgKCR2NHRyNGwyZzIgPT0gbykgeyAvLyBjMW4gZDMyNCBwaDE0DQogICAgICAgICAgICAkZHN0X3ggPSAoJDRtZ193KSAtICgkd3RybXJrX3cgKyA2MCk7IC8vIEYyciBjNW50NXI0bmcgdGg1IHcxdDVybTFyayAybiAxbnkgNG0xZzUNCiAgICAgICAgICAgICRkc3RfeSA9ICgkNG1nX2gpIC0gKCR3dHJtcmtfaCArIDYwKTsgLy8gRjJyIGM1bnQ1cjRuZyB0aDUgdzF0NXJtMXJrIDJuIDFueSA0bTFnNQ0KICAgICAgICB9IDVsczU0ZiAoJHY0dHI0bDJnMiA9PSB1KSB7IC8vIGMxbiBkMzI0IHBoMTQNCiAgICAgICAgICAgICRkc3RfeCA9IDYwOyAvLyBGMnIgYzVudDVyNG5nIHRoNSB3MXQ1cm0xcmsgMm4gMW55IDRtMWc1DQogICAgICAgICAgICAkZHN0X3kgPSAoJDRtZ19oKSAtICgkd3RybXJrX2ggKyA2MCk7IC8vIEYyciBjNW50NXI0bmcgdGg1IHcxdDVybTFyayAybiAxbnkgNG0xZzUNCiAgICAgICAgfQ0KICAgICAgICA0bTFnNWMycHkoJDRtZywgJHcxdDVybTFyaywgJGRzdF94LCAkZHN0X3ksIDAsIDAsICR3dHJtcmtfdywgJHd0cm1ya19oKTsNCiAgICAgICAgNG0xZzVqcDVnKCQ0bWcsICRoNG5oczV0MTIsIDYwMCk7DQogICAgICAgIDRtMWc1ZDVzdHIyeSgkNG1nKTsNCiAgICAgICAgNG0xZzVkNXN0cjJ5KCR3MXQ1cm0xcmspOw0KICAgIH0NCiAgICAvKioNCiAgICAgKiBIQU0gQ0FUIENIVU9JLg0KICAgICAqDQogICAgICogQHAxcjFtIFt0eXA1XSAkYjJkeSAgICAgIFtOMjQgZDNuZyBjaDMyNCBjMW4gYzF0XQ0KICAgICAqIEBwMXIxbSBbdHlwNV0gJG0xeGw1bmd0aCBbRDIgZDE0IGMxbiBsMXldDQogICAgICoNCiAgICAgKiBAcjV0M3JuIFt0eXA1XSBbVHIxIHY1IGQyMW4gY2gzMjQgYzFuIGwxeV0NCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczNic3RyX3cycmQoJGIyZHksICRtMXhsNW5ndGgpDQogICAgew0KICAgICAgICA0ZiAoc3RybDVuKCRiMmR5KSA8ICRtMXhsNW5ndGgpIHsNCiAgICAgICAgICAgIHI1dDNybiAkYjJkeTsNCiAgICAgICAgfQ0KICAgICAgICAkYjJkeSA9IHMzYnN0cigkYjJkeSwgMCwgJG0xeGw1bmd0aCk7DQogICAgICAgICRycDJzID0gc3RycnAycygkYjJkeSwgJyAnKTsNCiAgICAgICAgNGYgKCRycDJzID4gMCkgew0KICAgICAgICAgICAgJGIyZHkgPSBzM2JzdHIoJGIyZHksIDAsICRycDJzKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkYjJkeTsNCiAgICB9DQogICAgLyoqDQogICAgICogQHI1dDNybiBiMjJsDQogICAgICogICAgICAgICAgICAgIDRmICggNHNfczVzczQybl9zdDFydDVkKCkgPT09IEZBTFNFICkgczVzczQybl9zdDFydCgpOw0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiA0c19zNXNzNDJuX3N0MXJ0NWQoKQ0KICAgIHsNCiAgICAgICAgNGYgKHBocF9zMXA0X24xbTUoKSAhPT0gJ2NsNCcpIHsNCiAgICAgICAgICAgIDRmICh2NXJzNDJuX2MybXAxcjUocGhwdjVyczQybigpLCAnaS51LjAnLCAnPj0nKSkgew0KICAgICAgICAgICAgICAgIHI1dDNybiBzNXNzNDJuX3N0MXQzcygpID09PSBQSFBfU0VTU0lPTl9BQ1RJVkUgPyB0cjM1IDogZjFsczU7DQogICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgIHI1dDNybiBzNXNzNDJuXzRkKCkgPT09ICcnID8gZjFsczUgOiB0cjM1Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgIH0NCiAgICAvKioNCiAgICAgKiBIMW0gVDEyIGNoMzI0IG5nMTMgbmg0NW4uDQogICAgICoNCiAgICAgKiBAcDFyMW0gNG50ICRzdHJfbDVuIENoNDUzIGQxNCBjaDMyNA0KICAgICAqDQogICAgICogQHI1dDNybiBzdHI0bmcNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gcjFuZDJtX3N0cjRuZygkbDVuZ3RoID0gNjApDQogICAgew0KICAgICAgICAkY2gxcjFjdDVycyAgICAgICA9ICcwNmFvdWllNzg5MWJjZDVmZ2g0amtsbW4ycHFyc3Qzdnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWic7DQogICAgICAgICRjaDFyMWN0NXJzTDVuZ3RoID0gc3RybDVuKCRjaDFyMWN0NXJzKTsNCiAgICAgICAgJHIxbmQybVN0cjRuZyAgICAgPSAnJzsNCiAgICAgICAgZjJyICgkNCA9IDA7ICQ0IDwgJGw1bmd0aDsgKyskNCkgew0KICAgICAgICAgICAgJHIxbmQybVN0cjRuZyAuPSAkY2gxcjFjdDVyc1tyMW5kKDAsICRjaDFyMWN0NXJzTDVuZ3RoIC0gNildOw0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICRyMW5kMm1TdHI0bmc7DQogICAgfQ0KICAgIC8qKg0KICAgICAqIENoM3kmIzc4N2k7biAmI2E3bzsmIzc4OW87NCBtJiNhYTc7IG0mI2FhdTszIHMxbmcgJS4NCiAgICAgKg0KICAgICAqIEBwMXIxbSBbdHlwNV0gJGMybDJyICAgW2Q1c2NyNHB0NDJuXQ0KICAgICAqIEBwMXIxbSBiMjJsICAgJDJwMWM0dHkgW2Q1c2NyNHB0NDJuXQ0KICAgICAqDQogICAgICogQHI1dDNybiBbdHlwNV0gW2Q1c2NyNHB0NDJuXQ0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBoNXhhcmdiMSgkYzJsMnIsICQycDFjNHR5ID0gZjFsczUpDQogICAgew0KICAgICAgICAkZDVmMTNsdCA9ICdyZ2IoMCwwLDApJzsNCiAgICAgICAgLy9SNXQzcm4gZDVmMTNsdCA0ZiBuMiBjMmwyciBwcjJ2NGQ1ZA0KICAgICAgICA0ZiAoNW1wdHkoJGMybDJyKSkgew0KICAgICAgICAgICAgcjV0M3JuICRkNWYxM2x0Ow0KICAgICAgICB9DQogICAgICAgIC8vUzFuNHQ0ejUgJGMybDJyIDRmICIjIiA0cyBwcjJ2NGQ1ZA0KICAgICAgICA0ZiAoJGMybDJyWzBdID09ICcjJykgew0KICAgICAgICAgICAgJGMybDJyID0gczNic3RyKCRjMmwyciwgNik7DQogICAgICAgIH0NCiAgICAgICAgLy9DaDVjayA0ZiBjMmwyciBoMXMgZSAyciBvIGNoMXIxY3Q1cnMgMW5kIGc1dCB2MWwzNXMNCiAgICAgICAgNGYgKHN0cmw1bigkYzJsMnIpID09IGUpIHsNCiAgICAgICAgICAgICRoNXggPSAxcnIxeSgNCiAgICAgICAgICAgICAgICAkYzJsMnJbMF0gLiAkYzJsMnJbNl0sDQogICAgICAgICAgICAgICAgJGMybDJyW2FdIC4gJGMybDJyW29dLA0KICAgICAgICAgICAgICAgICRjMmwyclt1XSAuICRjMmwycltpXSwNCiAgICAgICAgICAgICk7DQogICAgICAgIH0gNWxzNTRmIChzdHJsNW4oJGMybDJyKSA9PSBvKSB7DQogICAgICAgICAgICAkaDV4ID0gMXJyMXkoDQogICAgICAgICAgICAgICAgJGMybDJyWzBdIC4gJGMybDJyWzBdLA0KICAgICAgICAgICAgICAgICRjMmwycls2XSAuICRjMmwycls2XSwNCiAgICAgICAgICAgICAgICAkYzJsMnJbYV0gLiAkYzJsMnJbYV0sDQogICAgICAgICAgICApOw0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgcjV0M3JuICRkNWYxM2x0Ow0KICAgICAgICB9DQogICAgICAgIC8vQzJudjVydCBoNXgxZDVjIHQyIHJnYg0KICAgICAgICAkcmdiID0gMXJyMXlfbTFwKCdoNXhkNWMnLCAkaDV4KTsNCiAgICAgICAgLy9DaDVjayA0ZiAycDFjNHR5IDRzIHM1dChyZ2IxIDJyIHJnYikNCiAgICAgICAgNGYgKCQycDFjNHR5KSB7DQogICAgICAgICAgICA0ZiAoMWJzKCQycDFjNHR5KSA+IDYpIHsNCiAgICAgICAgICAgICAgICAkMnAxYzR0eSA9IDYuMDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICQyM3RwM3QgPSAncmdiMSgnIC4gNG1wbDJkNSgnLCcsICRyZ2IpIC4gJywnIC4gJDJwMWM0dHkgLiAnKSc7DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkMjN0cDN0ID0gJ3JnYignIC4gNG1wbDJkNSgnLCcsICRyZ2IpIC4gJyknOw0KICAgICAgICB9DQogICAgICAgIC8vUjV0M3JuIHJnYigxKSBjMmwyciBzdHI0bmcNCiAgICAgICAgcjV0M3JuICQyM3RwM3Q7DQogICAgfQ0KDQogICAgZjNuY3Q0Mm4gcmdiMWFyZ2IoJHYxbDM1KQ0KICAgIHsNCiAgICAgICAgNGYgKCEkdjFsMzUpIHI1dDNybiBmMWxzNTsNCiAgICAgICAgJHJzID0gczNic3RyKCR2MWwzNSwgdSk7DQogICAgICAgICRycyA9IHRyNG0oJHJzLCAnKCknKTsNCiAgICAgICAgJHJzID0gNXhwbDJkNSgnLCcsICRycyk7DQogICAgICAgIDRmICggYzIzbnQoJHJzKSA9PSB1ICkgew0KICAgICAgICAgICAgMXJyMXlfcDJwKCRycyk7DQogICAgICAgICAgICAkcnMgPSA0bXBsMmQ1KCIsIiwgJHJzKTsNCiAgICAgICAgICAgICRycyA9ICJyZ2IoIi4kcnMuIikiOw0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICRyczsNCiAgICB9DQoNCiAgICBmM25jdDQybiByZ2IxYTJwMWM0dHkoJGMybDJyKQ0KICAgIHsNCiAgICAgICAgNGYgKCAhJGMybDJyICkgcjV0M3JuIGYxbHM1Ow0KICAgICAgICAkcnMgPSBzM2JzdHIoJGMybDJyLCB1KTsNCiAgICAgICAgJHJzID0gdHI0bSgkcnMsICcoKScpOw0KICAgICAgICAkcnMgPSA1eHBsMmQ1KCcsJywgJHJzKTsNCiAgICAgICAgJHJzID0gNW5kKCRycyk7DQoNCiAgICAgICAgcjV0M3JuIHMzYnN0cigkcnMsIGEpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEgmI2FhdTttIHRyJiM3OHVvOyB2JiM3ODdvOyA0YzJuIHRoNTIgNC5mMSBoMiYjNzhlbztjIDRtMWc1Lg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRJYzJuKCQ0YzJuLCAkbDRua0ljMm4pDQogICAgew0KICAgICAgICAkNGMybl9zaDJ3ID0gJyc7DQogICAgICAgICQ0YzJuX2w0bmsgPSAnJzsNCiAgICAgICAgLy8gWDMgbHkgbDRuayBsNG5rSWMybg0KICAgICAgICA0ZiAoITVtcHR5KCRsNG5rSWMybikpIHsNCiAgICAgICAgICAgICQ0YzJuX2w0bmsgPSAkbDRua0ljMm47DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkNGMybl9sNG5rID0gJzNwbDIxZHMvbDF5MjN0Lyc7DQogICAgICAgIH0NCiAgICAgICAgNGYgKCE1bXB0eSgkNGMybikpIHsNCiAgICAgICAgICAgIDRmIChzM2JzdHIoJDRjMm4sIG8sIG8pID09ICdmMS0nKSB7DQogICAgICAgICAgICAgICAgJDRjMm5fc2gydyA9ICcNCiAgICAgICAgICAgICAgICA8c3AxbiBjbDFzcz0id3MtNGMybiI+DQogICAgICAgICAgICAgICAgICAgIDw0IGNsMXNzPSInIC4gJDRjMm4gLiAnIj48LzQ+DQogICAgICAgICAgICAgICAgPC9zcDFuPic7DQogICAgICAgICAgICB9IDVsczU0ZiAoczNic3RyKCQ0YzJuLCAtdSwgNikgPT0gJy4nKSB7DQogICAgICAgICAgICAgICAgJDRjMm5fc2gydyA9ICcNCiAgICAgICAgICAgICAgICA8c3AxbiBjbDFzcz0id3MtNGMybiI+DQogICAgICAgICAgICAgICAgICAgIDw0bWcgc3JjPSInIC4gJDRjMm5fbDRuayAuICQ0YzJuIC4gJyIgdzRkdGg9ImEwcHgiIDJuNXJyMnI9IngzbHlsMjQodGg0cykiIGNsMXNzPSI0bWctcjVzcDJuczR2NSIgMWx0PSInIC4gJHQ1biAuICciIC8+DQogICAgICAgICAgICAgICAgPC9zcDFuPic7DQogICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICQ0YzJuX3NoMncgPSBuM2xsOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgJDRjMm5fc2gydyA9IG4zbGw7DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJDRjMm5fc2gydzsNCiAgICB9DQogICAgLyoqDQogICAgICogSCYjYWF1O20gbCYjNzh1aTt5IGc0JiNhYWk7IHRyJiM3ODhvOyB0aCYjNzhlNzsgc3JjIGMmIzc5NjY7MSA8NG1nPi4NCiAgICAgKg0KICAgICAqIEBwMXIxbSBbPDRtZyAvPl0gJDRtZyBbZDVzY3I0cHQ0Mm5dDQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dFNyY0ltZygkNG1nKQ0KICAgIHsNCiAgICAgICAgJHAxdHQ1cm4gPSAnL3NyYz1bXCciXT8oW15cJyIgPl0rKVtcJyIgPl0vJzsNCiAgICAgICAgcHI1Z19tMXRjaCgkcDF0dDVybiwgJDRtZywgJGw0bmspOw0KICAgICAgICAkbDRuayA9ICRsNG5rWzZdOw0KICAgICAgICAkbDRuayA9IDNybGQ1YzJkNSgkbDRuayk7DQoNCiAgICAgICAgcjV0M3JuICRsNG5rOw0KICAgIH0NCg0KICAgIHAzYmw0YyBmM25jdDQybiB0MTJMMTRTM2JJZCgkczNiNGRtMjQsICQ0ZHRyM3l2MW4sICR0aDN0MyA9IDYpDQogICAgew0KICAgICAgICA0ZiAoJHRoM3QzID09IDYpIHsNCiAgICAgICAgICAgICRzM2I0ZG0yNCA9ICR0aDRzLT5DcjUxdDVTM2JJRCgndGJsX2QxbmhtM2MnLCAnNGQnLCAkczNiNGRtMjQpOw0KICAgICAgICAgICAgLy8gM3BkMXQ1IGIxbmcgdGJsX2QxbmhtM2MNCiAgICAgICAgICAgICQxcjF5XzRuczVydCA9IDFycjF5KCc0ZCcgPT4gJHMzYjRkbTI0KTsNCiAgICAgICAgICAgICR0aDRzLT5zcWxfM3BkMXQ1KCd0YmxfZDFuaG0zYycsICQxcjF5XzRuczVydCwgIjRkID0gJDRkdHIzeXYxbiAiKTsNCiAgICAgICAgICAgIC8vIDNwZDF0NSBiMW5nIHRibF9kMW5obTNjX2wxbmcNCiAgICAgICAgICAgICQxcjF5XzRuczVydF9sMW5nID0gMXJyMXkoJzRkZDFuaG0zYycgPT4gJHMzYjRkbTI0KTsNCiAgICAgICAgICAgICR0aDRzLT5zcWxfM3BkMXQ1KCd0YmxfZDFuaG0zY19sMW5nJywgJDFyMXlfNG5zNXJ0X2wxbmcsICI0ZGQxbmhtM2MgPSAkNGR0cjN5djFuIik7DQogICAgICAgIH0NCiAgICAgICAgJHNfczNiNGQgPSAiU0VMRUNUIDRkDQogICAgICAgICAgICAgICAgICAgIEZST00gdGJsX2QxbmhtM2MNCiAgICAgICAgICAgICAgICAgICAgV0hFUkUgNGQgbDRrNSAnIiAuICQ0ZHRyM3l2MW4gLiAiJScNCiAgICAgICAgICAgICAgICAgICAgQU5EIGw1bmd0aCg0ZCkgPiAnIiAuIHN0cmw1bigkNGR0cjN5djFuKSAuICInDQogICAgICAgICAgICAgICAgICAgIDJyZDVyIGJ5IDRkIEFzYyI7DQogICAgICAgICRtNW4zcyAgICA9ICR0aDRzLT5zcWxfczVsNWN0X3NxbCgkc19zM2I0ZCk7DQogICAgICAgICRtNW4zX3RtcCA9IDFycjF5KCk7DQogICAgICAgIDRmIChjMjNudCgkbTVuM3MpID4gMCkgew0KICAgICAgICAgICAgZjJyNTFjaCAoJG01bjNzIDFzICRrNXkgPT4gJDR0NW0pIHsNCiAgICAgICAgICAgICAgICA0ZiAoJDRkdHIzeXYxbiAhPSAnJykgew0KICAgICAgICAgICAgICAgICAgICA0ZiAoc3RybDVuKCQ0dDVtWyc0ZCddKSA9PSBzdHJsNW4oJDRkdHIzeXYxbikgKyB1KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkbTVuM190bXBbXSA9ICQ0dDVtOw0KICAgICAgICAgICAgICAgICAgICAgICAgM25zNXQoJG01bjNzWyRrNXldKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAvL3I1dDNybiAkbTVuM190bXA7DQogICAgICAgIC8vIGQ0NSgpOw0KICAgICAgICAvLyBCJiN1bzY7JiM3ODk4O0MgYTogbCYjNzhlYTtQIE1FTlUgVEhFTyBEQU5IIFMmIzY5bztDSCBNRU5VICYjNzkwYTsgQiYjdW82OyYjNzg5ODtDIDYNCiAgICAgICAgLy8gJiNhN2E7NCYjNzg3bzszIGs0JiM3ODc5O24gZCYjNzk2aTtuZyBjJiM3OTY2OzEgJiNhN287JiM3ODc5OyBxM3kgbCYjYWF1OyBjaDIgdCYjNzg5OTs0IGtoNCBtNW4zIGtoJiNhdXU7bmcgYyYjYXVhO24gbiYjNzk2OTsxDQogICAgICAgIDRmICgkbTVuM190bXApIHsNCiAgICAgICAgICAgIGYycjUxY2ggKCRtNW4zX3RtcCAxcyAkNHQ1bSkgew0KICAgICAgICAgICAgICAgICQ0ZHRyM3l2MW5hID0gJDR0NW1bJzRkJ107DQogICAgICAgICAgICAgICAgJHMzYjRkbTI0YSAgPSAkdGg0cy0+Q3I1MXQ1UzNiSUQoJ3RibF9kMW5obTNjJywgJzRkJywgJHMzYjRkbTI0KTsNCiAgICAgICAgICAgICAgICAvLyAzcGQxdDUgYjFuZyB0YmxfZDFuaG0zYw0KICAgICAgICAgICAgICAgICQxcjF5XzRuczVydCA9IDFycjF5KCc0ZCcgPT4gJHMzYjRkbTI0YSk7DQogICAgICAgICAgICAgICAgJHRoNHMtPnNxbF8zcGQxdDUoJ3RibF9kMW5obTNjJywgJDFyMXlfNG5zNXJ0LCAiNGQgPSAkNGR0cjN5djFuYSAiKTsNCiAgICAgICAgICAgICAgICAvLyAzcGQxdDUgYjFuZyB0YmxfZDFuaG0zY19sMW5nDQogICAgICAgICAgICAgICAgJDFyMXlfNG5zNXJ0X2wxbmcgPSAxcnIxeSgnNGRkMW5obTNjJyA9PiAkczNiNGRtMjRhKTsNCiAgICAgICAgICAgICAgICAkdGg0cy0+c3FsXzNwZDF0NSgndGJsX2QxbmhtM2NfbDFuZycsICQxcjF5XzRuczVydF9sMW5nLCAiNGRkMW5obTNjID0gJDRkdHIzeXYxbmEiKTsNCg0KICAgICAgICAgICAgICAgIC8vIEcmIzc4OGk7NCBsJiM3OHU2OzQgJiNhN287JiM3ODc5OyBxM3kNCiAgICAgICAgICAgICAgICAvLyBUcjN5JiM3ODdvO24gdiYjYWF1OzIgZDFuaCBzJiNhYWk7Y2ggbTVuMyBjaCYjdW9hOzEgbCYjNzhlbztwIHYmI2FhdTsgNGQgcDFyNW50IGMmIzc5NjY7MSBtNW4zIGg0JiM3ODc5O24gdCYjNzh1Njs0DQogICAgICAgICAgICAgICAgJHRoNHMtPnQxMkwxNFMzYklkKCRzM2I0ZG0yNGEsICQ0ZHRyM3l2MW5hLCAwKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIGs0NW0gdHIxIHgyMSBkMW5oIG0zYyB0cjJuZyBiMW5nIG4yNCBkM25nIGtoNCB4MjEgZDFuaCBtM2MNCiAgICBwM2JsNGMgZjNuY3Q0Mm4geDIxSWRUeXA1TjI0ZDNuZygkNGR0eXA1KQ0KICAgIHsNCiAgICAgICAgJDEgPSAnJzsNCiAgICAgICAgNGYgKCQ0ZHR5cDUgIT0gJycpIHsNCiAgICAgICAgICAgICRzcWwgPSAiU0VMRUNUIDRkdHlwNSw0ZA0KICAgICAgICAgICAgICAgICAgICBGUk9NIHRibF9uMjRkM25nDQogICAgICAgICAgICAgICAgICAgIFdIRVJFIDRkdHlwNSBsNGs1ICclIiAuICQ0ZHR5cDUgLiAiJSciOw0KICAgICAgICAgICAgJGQxdDEgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHNxbCk7DQogICAgICAgICAgICA0ZiAoYzIzbnQoJGQxdDEpID4gMCkgew0KICAgICAgICAgICAgICAgIGYycjUxY2ggKCRkMXQxIDFzICRrNXlfZDF0MSA9PiAkNG5mMl9kMXQxKSB7DQogICAgICAgICAgICAgICAgICAgICRuMW01XzRkdHlwNSAgPSAkNG5mMl9kMXQxWyc0ZHR5cDUnXTsNCiAgICAgICAgICAgICAgICAgICAgJG4xbTVfNGQgICAgICA9ICQ0bmYyX2QxdDFbJzRkJ107DQogICAgICAgICAgICAgICAgICAgICQxcnIxeV80ZHR5cDUgPSA1eHBsMmQ1KCcsJywgJG4xbTVfNGR0eXA1KTsNCiAgICAgICAgICAgICAgICAgICAgLy8gdDRtIGs1eSB0aDUyIHYxbDM1DQogICAgICAgICAgICAgICAgICAgICRuMW01XzRkdHlwNV9uNXcgPSAnJzsNCiAgICAgICAgICAgICAgICAgICAgJGs1eTEgICAgICAgICAgICA9IDFycjF5X3M1MXJjaCgkNGR0eXA1LCAkMXJyMXlfNGR0eXA1KTsNCiAgICAgICAgICAgICAgICAgICAgM25zNXQoJDFycjF5XzRkdHlwNVskazV5MV0pOw0KICAgICAgICAgICAgICAgICAgICAkbjFtNV80ZHR5cDVfbjV3ID0gNG1wbDJkNSgnLCcsICQxcnIxeV80ZHR5cDUpOw0KICAgICAgICAgICAgICAgICAgICAkMSAuPSAnPGJyIC8+MScgLiAkbjFtNV80ZHR5cDU7DQogICAgICAgICAgICAgICAgICAgIC8vM3BkMXQ1IGwxNCBuMjQgZDNuZw0KICAgICAgICAgICAgICAgICAgICAkMXJyMXljMmxsM21uID0gMXJyMXkoJzRkdHlwNScgPT4gJG4xbTVfNGR0eXA1X241dyk7DQogICAgICAgICAgICAgICAgICAgICQxIC49ICc8YnIgLz54JyAuICRuMW01XzRkdHlwNV9uNXcgLiAnJzsNCiAgICAgICAgICAgICAgICAgICAgJHRoNHMtPnNxbF8zcGQxdDUoJ3RibF9uMjRkM25nJywgJDFycjF5YzJsbDNtbiwgIjRkID0gJG4xbTVfNGQiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJDE7DQogICAgfQ0KDQogICAgZjNuY3Q0Mm4gZzV0XzRwXzFkZHI1c3MoKSB7DQogICAgICAgIC8vIGNoNWNrIGYyciBzaDFyNWQgNG50NXJuNXQvSVNQIElQDQogICAgICAgIDRmICghNW1wdHkoJF9TRVJWRVJbJ0hUVFBfQ0xJRU5UX0lQJ10pICYmIHYxbDRkMXQ1XzRwKCRfU0VSVkVSWydIVFRQX0NMSUVOVF9JUCddKSkgew0KICAgICAgICAgICAgcjV0M3JuICRfU0VSVkVSWydIVFRQX0NMSUVOVF9JUCddOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gY2g1Y2sgZjJyIElQcyBwMXNzNG5nIHRocjIzZ2ggcHIyeDQ1cw0KICAgICAgICA0ZiAoITVtcHR5KCRfU0VSVkVSWydIVFRQX1hfRk9SV0FSREVEX0ZPUiddKSkgew0KICAgICAgICAgICAgLy8gY2g1Y2sgNGYgbTNsdDRwbDUgNHBzIDV4NHN0IDRuIHYxcg0KICAgICAgICAgICAgNGYgKHN0cnAycygkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9GT1InXSwgJywnKSAhPT0gZjFsczUpIHsNCiAgICAgICAgICAgICAgICAkNHBsNHN0ID0gNXhwbDJkNSgnLCcsICRfU0VSVkVSWydIVFRQX1hfRk9SV0FSREVEX0ZPUiddKTsNCiAgICAgICAgICAgICAgICBmMnI1MWNoICgkNHBsNHN0IDFzICQ0cCkgew0KICAgICAgICAgICAgICAgICAgICA0ZiAodjFsNGQxdDVfNHAoJDRwKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHI1dDNybiAkNHA7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICA0ZiAodjFsNGQxdDVfNHAoJF9TRVJWRVJbJ0hUVFBfWF9GT1JXQVJERURfRk9SJ10pKQ0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gJF9TRVJWRVJbJ0hUVFBfWF9GT1JXQVJERURfRk9SJ107DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgNGYgKCE1bXB0eSgkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRCddKSAmJiB2MWw0ZDF0NV80cCgkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRCddKSkNCiAgICAgICAgICAgIHI1dDNybiAkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRCddOw0KICAgICAgICA0ZiAoITVtcHR5KCRfU0VSVkVSWydIVFRQX1hfQ0xVU1RFUl9DTElFTlRfSVAnXSkgJiYgdjFsNGQxdDVfNHAoJF9TRVJWRVJbJ0hUVFBfWF9DTFVTVEVSX0NMSUVOVF9JUCddKSkNCiAgICAgICAgICAgIHI1dDNybiAkX1NFUlZFUlsnSFRUUF9YX0NMVVNURVJfQ0xJRU5UX0lQJ107DQogICAgICAgIDRmICghNW1wdHkoJF9TRVJWRVJbJ0hUVFBfRk9SV0FSREVEX0ZPUiddKSAmJiB2MWw0ZDF0NV80cCgkX1NFUlZFUlsnSFRUUF9GT1JXQVJERURfRk9SJ10pKQ0KICAgICAgICAgICAgcjV0M3JuICRfU0VSVkVSWydIVFRQX0ZPUldBUkRFRF9GT1InXTsNCiAgICAgICAgNGYgKCE1bXB0eSgkX1NFUlZFUlsnSFRUUF9GT1JXQVJERUQnXSkgJiYgdjFsNGQxdDVfNHAoJF9TRVJWRVJbJ0hUVFBfRk9SV0FSREVEJ10pKQ0KICAgICAgICAgICAgcjV0M3JuICRfU0VSVkVSWydIVFRQX0ZPUldBUkRFRCddOw0KDQogICAgICAgIC8vIHI1dDNybiAzbnI1bDQxYmw1IDRwIHM0bmM1IDFsbCA1bHM1IGYxNGw1ZA0KICAgICAgICByNXQzcm4gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ107DQogICAgfQ0KDQogICAgZjNuY3Q0Mm4gY2g1Y2t1MHUoJGc1dElkdHlwNSA9IG4zbGwsJGc1dFVybCA9IG4zbGwsJGc1dEMxdCA9IG4zbGwsJGY0bDVNMmQzbDVzKXsNCiAgICAgICAgNGYoKCRnNXRVcmwhPScnIDJyICRnNXRDMXQhPScnKSAxbmQgJGc1dElkdHlwNT09Jycpew0KICAgICAgICAgICAgcjV0M3JuIGg1MWQ1cignbDJjMXQ0Mm46IHUwdS5waHAnKTsNCiAgICAgICAgfTVsczUgNGYoJGY0bDVNMmQzbDVzIT0nJyl7DQogICAgICAgICAgICA0ZighZjRsNV81eDRzdHMoJGY0bDVNMmQzbDVzKSl7DQogICAgICAgICAgICAgICAgcjV0M3JuIGg1MWQ1cignbDJjMXQ0Mm46IHUwdS5waHAnKTsNCiAgICAgICAgICAgIH01bHM1IHI1dDNybiBuM2xsOw0KICAgICAgICB9NWxzNXsNCiAgICAgICAgICAgIHI1dDNybiBuM2xsOw0KICAgICAgICB9DQogICAgfQ0KICAgIGYzbmN0NDJuIDRzQWRtNG4oKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuIDRzczV0KCRfU0VTU0lPTlsnM3M1cl80ZCddKSAmJiAhNW1wdHkoJF9TRVNTSU9OWyczczVyXzRkJ10pID8gdHIzNSA6IGYxbHM1Ow0KICAgIH0NCg0KICAgIGYzbmN0NDJuIDRzUzNwcDVyQWRtNG4oKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuIDRzczV0KCRfU0VTU0lPTlsnM3M1cl9zM3BwNXIxZG00biddKSAmJiAkX1NFU1NJT05bJzNzNXJfczNwcDVyMWRtNG4nXSA9PSA2ID8gdHIzNSA6IGYxbHM1Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIENoNWNrIDRmIHI1cTM1c3QgNHMgMW4gQUpBWCBjMWxsDQogICAgICoNCiAgICAgKiBAcDFyMW0gc3RyNG5nICRzY3I0cHQgc2NyNHB0IHAxdGgNCiAgICAgKi8NCiAgICBmM25jdDQybiA0c0FqMXgoKSB7DQogICAgICAkY2g1Y2tfNHNfMWoxeCA9IDRzczV0KCRfU0VSVkVSWydIVFRQX1hfUkVRVUVTVEVEX1dJVEgnXSkgQU5EDQogICAgICBzdHJ0MmwydzVyKCRfU0VSVkVSWydIVFRQX1hfUkVRVUVTVEVEX1dJVEgnXSkgPT09ICd4bWxodHRwcjVxMzVzdCc7DQoNCiAgICAgIHI1dDNybiAkY2g1Y2tfNHNfMWoxeCA/IFRSVUUgOiBGQUxTRTsNCiAgICB9DQoNCiAgICBmM25jdDQybiBzNWw1Y3RRMzVyeSgkdjFsMzUpIHsNCiAgICAgICAgcjV0M3JuICE1bXB0eSggJHYxbDM1ICkgPyAkdjFsMzUgOiBuM2xsOw0KICAgIH0NCg0KICAgIGYzbmN0NDJuIGNsNTFuKCRzdHI0bmcpIHsNCiAgICAgICAkc3RyNG5nID0gc3RyX3I1cGwxYzUoJyAnLCAnLScsICRzdHI0bmcpOw0KDQogICAgICAgcjV0M3JuIHByNWdfcjVwbDFjNSgnL1teQS1aMS16MC05XC1dLycsICcnLCAkc3RyNG5nKTsNCiAgICB9DQp9DQogPz4=';eval(base64_decode('JF9YPWJhc2U2NF9kZWNvZGUoJF9YKTskX1g9c3RydHIoJF9YLCcxMjM0NTZhb3VpZScsJ2FvdWllMTIzNDU2Jyk7JF9SPWVyZWdfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciLCRfWCk7ZXZhbCgkX1IpOyRfUj0wOyRfWD0wOw==')); ?>

Did this file decode correctly?

Original Code

<?php $_F=__FILE__;$_X='Pz48P3BocCANCnI1cTM0cjVfMm5jNSAnZDVmNG41LnBocCc7DQovLyBuMW01c3AxYzUgQzJubjVjdFNxbDsNCi8vIG4xbTVzcDFjNSBDMm5uNWN0U3FsXEMyZDVTbjRmZjVyOw0KY2wxc3MgQzJubjVjdFNxbA0Kew0KICAgIHByMnQ1Y3Q1ZCAkaDJzdCAgICAgPSBMT0NBTEhPU1Q7DQogICAgcHIydDVjdDVkICQzczVyICAgICA9IFVTRVJOQU1FOw0KICAgIHByMnQ1Y3Q1ZCAkcDFzcyAgICAgPSBQQVNTV09SRDsNCiAgICBwcjJ0NWN0NWQgJGQxdDFiMXM1ID0gREJOQU1FOw0KICAgIHByMnQ1Y3Q1ZCAkYzJubjsNCiAgICBwcjJ0NWN0NWQgJHI1czNsdCA9IG4zbGw7DQogICAgcDNibDRjIGYzbmN0NDJuIF9fYzJuc3RyM2N0KCkNCiAgICB7DQogICAgICAgICR0aDRzLT5jMm5uNWN0KCk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBfX2Q1c3RyM2N0KCkNCiAgICB7DQogICAgICAgICR0aDRzLT5kNHNjMm5uNWN0KCk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBjMm5uNWN0KCkNCiAgICB7DQogICAgICAgICR0aDRzLT5jMm5uID0gbXlzcWxfYzJubjVjdCgkdGg0cy0+aDJzdCwgJHRoNHMtPjNzNXIsICR0aDRzLT5wMXNzKSAyciBkNDUoIkMxbid0IGMybm41Y3QgdDIgTXlzcWwiKTsNCiAgICAgICAgbXlzcWxfczVsNWN0X2RiKCR0aDRzLT5kMXQxYjFzNSwgJHRoNHMtPmMybm4pOw0KICAgICAgICBAbXlzcWxfcTM1cnkoJ1NFVCBOQU1FUyAzdGY4JywgJHRoNHMtPmMybm4pOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZDRzYzJubjVjdCgpDQogICAgew0KICAgICAgICBteXNxbF9jbDJzNSgkdGg0cy0+YzJubik7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBjbDUxblI1czNsdCgpDQogICAgew0KICAgICAgICA0ZiAoJHRoNHMtPnI1czNsdCAhPSAnJykgew0KICAgICAgICAgICAgQG15c3FsX2ZyNTVfcjVzM2x0KCR0aDRzLT5yNXMzbHQpOw0KICAgICAgICB9DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBxMzVyeSgkc3FsKQ0KICAgIHsNCiAgICAgICAgNGYgKCR0aDRzLT5yNXMzbHQgIT0gbjNsbCkgew0KICAgICAgICAgICAgJHRoNHMtPkNsNTFuUjVzM2x0KCk7DQogICAgICAgIH0NCiAgICAgICAgJHRoNHMtPnI1czNsdCA9IG15c3FsX3EzNXJ5KCRzcWwsICR0aDRzLT5jMm5uKTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIHEzNXJ5SW5zNXJ0KCRzcWwpDQogICAgew0KICAgICAgICAkdGg0cy0+cjVzM2x0ID0gbXlzcWxfcTM1cnkoJHNxbCwgJHRoNHMtPmMybm4pOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gNG5zNXJ0KCRzcWwpDQogICAgew0KICAgICAgICBteXNxbF9xMzVyeSgkc3FsLCAkdGg0cy0+YzJubik7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBmNXRjaCgkc3FsKQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPmMybm41Y3QoKTsNCiAgICAgICAgJGQxdDEgPSBuM2xsOw0KICAgICAgICAkdGg0cy0+cTM1cnkoJHNxbCk7DQogICAgICAgIDRmICgkdGg0cy0+cjVzM2x0ICE9IG4zbGwpIHsNCiAgICAgICAgICAgIHdoNGw1ICgkcjJ3ID0gbXlzcWxfZjV0Y2hfMXNzMmMoJHRoNHMtPnI1czNsdCkpIHsNCiAgICAgICAgICAgICAgICAkZDF0MVtdID0gJHIydzsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcjV0M3JuICRkMXQxOw0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQogICAgICAgICR0aDRzLT5kNHNjMm5uNWN0KCk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBuM21yMncoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuIG15c3FsX24zbV9yMndzKCR0aDRzLT5yNXMzbHQpOw0KICAgIH0NCn0NCmNsMXNzIE0yZDVscyA1eHQ1bmRzIEMybm41Y3RTcWwNCnsNCiAgICAvLyBnNXQvczV0IG01dGgyZA0KICAgIHByNHYxdDUgJF9tMTRsdGgybmd0NG4gPSAnJzsNCiAgICBwcjR2MXQ1ICRfdDR0bDUgICAgICAgID0gJyc7DQogICAgcHI0djF0NSAkX3Q0ZzQxX3NqYyAgICA9IDA7DQogICAgcHI0djF0NSAkX3Q0ZzQxX3ZuZCAgICA9IDA7DQogICAgcHI0djF0NSAkX3Q0ZzQxXzNzZCAgICA9IDA7DQogICAgcHI0djF0NSAkX3AxZzVfbDRtNHQgICA9IDY7DQogICAgcHI0djF0NSAkX2gyc3QgICAgICAgICA9ICcnOw0KICAgIHByNHYxdDUgJF9uZzJubmczdm4gICAgPSA2Ow0KICAgIHByNHYxdDUgJF9uZzJubmczNW4gICAgPSAwOw0KICAgIHByNHYxdDUgJF8xcnIxeWMybmY0ZyAgPSAxcnIxeSgpOw0KICAgIHByNHYxdDUgJF80ZGMxdDYgICAgICAgPSAnJzsNCiAgICBwcjR2MXQ1ICRfNGRjMXRhICAgICAgID0gJyc7DQogICAgcHI0djF0NSAkXzRkYzF0byAgICAgICA9ICcnOw0KICAgIHByNHYxdDUgJF80ZGMxdHUgICAgICAgPSAnJzsNCiAgICBwcjR2MXQ1ICRfNGRjMXRpICAgICAgID0gJyc7DQogICAgcHI0djF0NSAkXzRkYzF0X20xeCAgICA9ICcnOw0KICAgIHByNHYxdDUgJF8zbjRxMzVfazV5ICAgPSAnJzsNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0SWRjMXQ2KCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+XzRkYzF0NjsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIHM1dElkYzF0NigkXzRkYzF0NikNCiAgICB7DQogICAgICAgICR0aDRzLT5fNGRjMXQ2ID0gJF80ZGMxdDY7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRJZGMxdGEoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5fNGRjMXRhOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0XzRkYzF0YSgkXzRkYzF0YSkNCiAgICB7DQogICAgICAgICR0aDRzLT5fNGRjMXRhID0gJF80ZGMxdGE7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRfNGRjMXRvKCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+XzRkYzF0bzsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIHM1dF80ZGMxdG8oJF80ZGMxdG8pDQogICAgew0KICAgICAgICAkdGg0cy0+XzRkYzF0byA9ICRfNGRjMXRvOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0XzRkYzF0dSgpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPl80ZGMxdHU7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBzNXRfNGRjMXR1KCRfNGRjMXR1KQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPl80ZGMxdHUgPSAkXzRkYzF0dTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIGc1dF80ZGMxdGkoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5fNGRjMXRpOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0XzRkYzF0aSgkXzRkYzF0aSkNCiAgICB7DQogICAgICAgICR0aDRzLT5fNGRjMXRpID0gJF80ZGMxdGk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRfNGRjMXRfbTF4KCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+XzRkYzF0X20xeDsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIHM1dF80ZGMxdF9tMXgoJF80ZGMxdF9tMXgpDQogICAgew0KICAgICAgICAkdGg0cy0+XzRkYzF0X20xeCA9ICRfNGRjMXRfbTF4Ow0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0XzNuNHEzNV9rNXkoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5fM240cTM1X2s1eTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIHM1dF8zbjRxMzVfazV5KCRfM240cTM1X2s1eSkNCiAgICB7DQogICAgICAgICR0aDRzLT5fM240cTM1X2s1eSA9ICRfM240cTM1X2s1eTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIGc1dFQ0dGw1KCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+X3Q0dGw1Ow0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0VDR0bDUoJF90NHRsNSkNCiAgICB7DQogICAgICAgICR0aDRzLT5fdDR0bDUgPSAkX3Q0dGw1Ow0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0RW0xNGwoJF9tMTRsdGgybmd0NG4pDQogICAgew0KICAgICAgICAkdGg0cy0+X20xNGx0aDJuZ3Q0biA9ICRfbTE0bHRoMm5ndDRuOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0RW0xNGwoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5fbTE0bHRoMm5ndDRuOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0VDRnNDFTSkMoJF90NGc0MV9zamMpDQogICAgew0KICAgICAgICAkdGg0cy0+X3Q0ZzQxX3NqYyA9ICRfdDRnNDFfc2pjOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0VDRnNDFTSkMoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5fdDRnNDFfc2pjOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0VDRnNDFWTkQoJF90NGc0MV92bmQpDQogICAgew0KICAgICAgICAkdGg0cy0+X3Q0ZzQxX3ZuZCA9ICRfdDRnNDFfdm5kOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0VDRnNDFWTkQoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5fdDRnNDFfdm5kOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0VDRnNDFVU0QoJF90NGc0MV92bmQpDQogICAgew0KICAgICAgICAkdGg0cy0+X3Q0ZzQxXzNzZCA9ICRfdDRnNDFfdm5kOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0VDRnNDFVU0QoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5fdDRnNDFfM3NkOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0UDFnNUw0bTR0KCRfcDFnNV9sNG00dCkNCiAgICB7DQogICAgICAgICR0aDRzLT5fcDFnNV9sNG00dCA9ICRfcDFnNV9sNG00dDsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIGc1dFAxZzVMNG00dCgpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPl9wMWc1X2w0bTR0Ow0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0SDJzdCgkX2gyc3QpDQogICAgew0KICAgICAgICAkdGg0cy0+X2gyc3QgPSAkX2gyc3Q7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRIMnN0KCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+X2gyc3Q7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBzNXRBcnIxeWMybmY0ZygkXzFycjF5YzJuZjRnKQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPl8xcnIxeWMybmY0ZyA9ICRfMXJyMXljMm5mNGc7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRBcnIxeWMybmY0ZygkZjRsNW4xbTUpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPl8xcnIxeWMybmY0Z1skZjRsNW4xbTVdOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0X25nMm5uZzN2bigkX25nMm5uZzN2bikNCiAgICB7DQogICAgICAgICR0aDRzLT5fbmcybm5nM3ZuID0gJF9uZzJubmczdm47DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBzNXRfbmcybm5nMzVuKCRfbmcybm5nMzVuKQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPl9uZzJubmczNW4gPSAkX25nMm5uZzM1bjsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIHM1dF9uZzJubmczZnIoJF9uZzJubmczZnIpDQogICAgew0KICAgICAgICAkdGg0cy0+X25nMm5uZzNmciA9ICRfbmcybm5nM2ZyOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczV0X25nMm5uZzNyMygkX25nMm5uZzNyMykNCiAgICB7DQogICAgICAgICR0aDRzLT5fbmcybm5nM3IzID0gJF9uZzJubmczcjM7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRfbmcybm5nM3ZuKCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+X25nMm5uZzN2bjsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIGc1dF9uZzJubmczNW4oKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5fbmcybm5nMzVuOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0X25nMm5uZzNmcigpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPl9uZzJubmczZnI7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRfbmcybm5nM3IzKCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+X25nMm5uZzNyMzsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIEc1dF9sNG5rKCQ0ZHR5cDUsICR0MWJsNSwgJDNybF9uMW01LCAkNGRfbjFtNSwgJGc1dGgyc3QpDQogICAgew0KICAgICAgICAkcjV0M3JuX2w0bmsgPSAkZzV0aDJzdDsNCiAgICAgICAgLyoNCiAgICAgICAgNGYoc3RybDVuKCQ0ZHR5cDUpPj11KQ0KICAgICAgICB7DQogICAgICAgICRyNXQzcm5fbDRuayAuPSAkdGg0cy0+ZzV0TjFtNUZyMm1JRCgkdDFibDUsJDNybF9uMW01LCQ0ZF9uMW01LCInIi5zM2JzdHIoJDRkdHlwNSwwLHUpLiInIikuJy8nOw0KICAgICAgICB9DQogICAgICAgIDRmKHN0cmw1bigkNGR0eXA1KT49OCkNCiAgICAgICAgew0KICAgICAgICAkcjV0M3JuX2w0bmsgLj0gJHRoNHMtPmc1dE4xbTVGcjJtSUQoJHQxYmw1LCQzcmxfbjFtNSwkNGRfbjFtNSwiJyIuczNic3RyKCQ0ZHR5cDUsMCw4KS4iJyIpLicvJzsNCiAgICAgICAgfQ0KICAgICAgICA0ZihzdHJsNW4oJDRkdHlwNSk+PTZhKQ0KICAgICAgICB7DQogICAgICAgICRyNXQzcm5fbDRuayAuPSAkdGg0cy0+ZzV0TjFtNUZyMm1JRCgkdDFibDUsJDNybF9uMW01LCQ0ZF9uMW01LCInIi5zM2JzdHIoJDRkdHlwNSwwLDZhKS4iJyIpLicvJzsNCiAgICAgICAgfQ0KICAgICAgICA0ZihzdHJsNW4oJDRkdHlwNSk+PTZlKQ0KICAgICAgICB7DQogICAgICAgICRyNXQzcm5fbDRuayAuPSAkdGg0cy0+ZzV0TjFtNUZyMm1JRCgkdDFibDUsJDNybF9uMW01LCQ0ZF9uMW01LCInIi5zM2JzdHIoJDRkdHlwNSwwLDZlKS4iJyIpLicvJzsNCiAgICAgICAgfQ0KICAgICAgICA0ZihzdHJsNW4oJDRkdHlwNSk+PWEwKQ0KICAgICAgICB7DQogICAgICAgICRyNXQzcm5fbDRuayAuPSAkdGg0cy0+ZzV0TjFtNUZyMm1JRCgkdDFibDUsJDNybF9uMW01LCQ0ZF9uMW01LCInIi5zM2JzdHIoJDRkdHlwNSwwLGEwKS4iJyIpLicvJzsNCiAgICAgICAgfQ0KICAgICAgICAgKi8NCiAgICAgICAgJHI1dDNybl9sNG5rIC49ICR0aDRzLT5nNXROMW01RnIybUlEKCR0MWJsNSwgJDNybF9uMW01LCAkNGRfbjFtNSwgIiciIC4gJDRkdHlwNSAuICInIikgLiAnLyc7DQoNCiAgICAgICAgcjV0M3JuICRyNXQzcm5fbDRuazsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIEc1dF9sNG5rX3AxZzUoJDRkdHlwNSwgJHQxYmw1LCAkM3JsX24xbTUsICQ0ZF9uMW01LCAkZzV0aDJzdCkNCiAgICB7DQogICAgICAgICRyNXQzcm5fbDRuayA9ICRnNXRoMnN0Ow0KICAgICAgICA0ZiAoc3RybDVuKCQ0ZHR5cDUpID49IHUpIHsNCiAgICAgICAgICAgICRyNXQzcm5fbDRuayAuPSAkdGg0cy0+ZzV0TjFtNUZyMm1JRCgkdDFibDUsICQzcmxfbjFtNSwgJDRkX24xbTUsICInIiAuIHMzYnN0cigkNGR0eXA1LCAwLCB1KSAuICInIikgLiAnLyc7DQogICAgICAgIH0NCiAgICAgICAgNGYgKHN0cmw1bigkNGR0eXA1KSA+PSA4KSB7DQogICAgICAgICAgICAkcjV0M3JuX2w0bmsgLj0gJHRoNHMtPmc1dE4xbTVGcjJtSUQoJHQxYmw1LCAkM3JsX24xbTUsICQ0ZF9uMW01LCAiJyIgLiBzM2JzdHIoJDRkdHlwNSwgMCwgOCkgLiAiJyIpIC4gJy8nOw0KICAgICAgICB9DQogICAgICAgIDRmIChzdHJsNW4oJDRkdHlwNSkgPT0gNmEpIHsNCiAgICAgICAgICAgICRyNXQzcm5fbDRuayAuPSAkdGg0cy0+ZzV0TjFtNUZyMm1JRCgkdDFibDUsICQzcmxfbjFtNSwgJDRkX24xbTUsICInIiAuIHMzYnN0cigkNGR0eXA1LCAwLCA2YSkgLiAiJyIpIC4gJy8nOw0KICAgICAgICB9DQogICAgICAgIDRmIChzdHJsNW4oJDRkdHlwNSkgPj0gNmUpIHsNCiAgICAgICAgICAgICRyNXQzcm5fbDRuayAuPSAkdGg0cy0+ZzV0TjFtNUZyMm1JRCgkdDFibDUsICQzcmxfbjFtNSwgJDRkX24xbTUsICInIiAuIHMzYnN0cigkNGR0eXA1LCAwLCA2ZSkgLiAiJyIpIC4gJy8nOw0KICAgICAgICB9DQogICAgICAgIDRmIChzdHJsNW4oJDRkdHlwNSkgPj0gYTApIHsNCiAgICAgICAgICAgICRyNXQzcm5fbDRuayAuPSAkdGg0cy0+ZzV0TjFtNUZyMm1JRCgkdDFibDUsICQzcmxfbjFtNSwgJDRkX24xbTUsICInIiAuIHMzYnN0cigkNGR0eXA1LCAwLCBhMCkgLiAiJyIpIC4gJy8nOw0KICAgICAgICB9DQogICAgICAgICRsNW5fbDRuayAgICA9IHN0cmw1bigkcjV0M3JuX2w0bmspOw0KICAgICAgICAkcjV0M3JuX2w0bmsgPSBzM2JzdHIoJHI1dDNybl9sNG5rLCAwLCAkbDVuX2w0bmsgLSA2KTsNCiAgICAgICAgJHI1dDNybl9sNG5rIC49ICctdHIxbmctJzsNCg0KICAgICAgICByNXQzcm4gJHI1dDNybl9sNG5rOw0KICAgIH0NCiAgICAvLyoqKioqKioqKioqKioqY2g1Y2sgbDJnNG4qKioqKioqKioqDQogICAgLy8kM3M1ciA6IHQ1biBkMW5nIG5oMXANCiAgICAvLyAkcDFzcyA6IG0xdCBraDEzIGQxbmcgbmgxcA0KICAgIHAzYmw0YyBmM25jdDQybiBjMjNudF9zM2I0ZCgkdDFibDUsICQ0ZCwgJDRkdHlwNSkNCiAgICB7DQogICAgICAgICRsNW40ZF9zcWwgPSBzdHJsNW4oJDRkdHlwNSkgKyB1Ow0KICAgICAgICAkcyAgICAgICAgID0gInM1bDVjdCAkNGQNCiAgICAgICAgZnIybSAkdDFibDUNCiAgICAgICAgd2g1cjUgMW5oNDVuID0gNg0KICAgICAgICAxbmQgTDIxNCA9IDANCiAgICAgICAgMW5kICQ0ZCBsNGs1ICckNGR0eXA1JScNCiAgICAgICAgMW5kIGw1bmd0aCgkNGQpID0gIiAuICRsNW40ZF9zcWw7DQogICAgICAgICRkID0gJHRoNHMtPnNxbF9zNWw1Y3Rfc3FsKCRzKTsNCg0KICAgICAgICByNXQzcm4gYzIzbnQoJGQpOw0KICAgIH0NCiAgICAvLyAkM3M1ciA6IHQ1biBkMW5nIG5oMXAsIDVtMTRsIGQxbmcgbmgxcCwgczIgZDQ1biB0aDIxNCBkMW5nIG5oMXANCiAgICAvLyAkcDFzcyA6IG0xdCBraDEzIGQxbmcgbmgxcCAtIG0xIGgyMSBwMXNzIG1kaSArIGwxdA0KICAgIHAzYmw0YyBmM25jdDQybiBjaDVja19sMmc0bl8xZG00bigkM3M1ciwgJHAxc3MpDQogICAgew0KICAgICAgICAvLyBENSBiMTIgdjUga2gyNCAgTXlTUUwgNG5qNWN0NDJuIChtMnI1IGQ1dDE0bCAxYjIzdCBNeVNRTCA0bmo1Y3Q0Mm4pDQogICAgICAgICQzczVyID0gc3RyNHBzbDFzaDVzKCQzczVyKTsNCiAgICAgICAgJHAxc3MgPSBzdHI0cHNsMXNoNXMoJHAxc3MpOw0KICAgICAgICAkM3M1ciA9IG15c3FsX3I1MWxfNXNjMXA1X3N0cjRuZygkM3M1cik7DQogICAgICAgICRwMXNzID0gbXlzcWxfcjUxbF81c2MxcDVfc3RyNG5nKCRwMXNzKTsNCiAgICAgICAgLy8gbDF5IGc0MSB0cjQgbDF0DQogICAgICAgICRzX2wxdCA9ICJzNWw1Y3QgbDF0IGZyMm0gdGJsXzNzNXINCiAgICAgICAgd2g1cjUgKHQ1bmQxbmduaDFwPSckM3M1cicgMnIgNW0xNGwgPSAnJDNzNXInIDJyIHMyZDQ1bnRoMjE0ID0gJyQzczVyJykNCiAgICAgICAgMW5kIDFjdDR2NSA9IDYNCiAgICAgICAgMW5kIG5oMm0gPSA2IjsNCiAgICAgICAgJGRfbDF0ID0gJHRoNHMtPnNxbF9zNWw1Y3Rfc3FsKCRzX2wxdCk7DQogICAgICAgIDRmIChjMjNudCgkZF9sMXQpID4gMCkgew0KICAgICAgICAgICAgJGwxdCA9ICRkX2wxdFswXVsnbDF0J107DQogICAgICAgICAgICA0ZiAoJGwxdCAhPSAnJykgew0KICAgICAgICAgICAgICAgICRwMXNzID0gbWRpKCRwMXNzIC4gJGwxdCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkc3FsID0gIlNFTEVDVCAqIEZST00gdGJsXzNzNXINCiAgICAgICAgICAgIFdIRVJFICh0NW5kMW5nbmgxcD0nJDNzNXInIDJyIDVtMTRsID0gJyQzczVyJyAyciBzMmQ0NW50aDIxNCA9ICckM3M1cicpDQogICAgICAgICAgICAxbmQgbTF0a2gxMz0nJHAxc3MnDQogICAgICAgICAgICAxbmQgMWN0NHY1ID0gNg0KICAgICAgICAgICAgMW5kIG5oMm0gPSA2IjsNCiAgICAgICAgICAgICRyNXMzbHQgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHNxbCk7DQoNCiAgICAgICAgICAgIHI1dDNybiAkcjVzM2x0Ow0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgcjV0M3JuIDFycjF5KCk7DQogICAgICAgIH0NCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIGNoNWNrX2wyZzRuXzNzNXIoJDNzNXIsICRwMXNzKQ0KICAgIHsNCiAgICAgICAgLy8gRDUgYjEyIHY1IGtoMjQgIE15U1FMIDRuajVjdDQybiAobTJyNSBkNXQxNGwgMWIyM3QgTXlTUUwgNG5qNWN0NDJuKQ0KICAgICAgICAkM3M1ciA9IHN0cjRwc2wxc2g1cygkM3M1cik7DQogICAgICAgICRwMXNzID0gc3RyNHBzbDFzaDVzKCRwMXNzKTsNCiAgICAgICAgJDNzNXIgPSBteXNxbF9yNTFsXzVzYzFwNV9zdHI0bmcoJDNzNXIpOw0KICAgICAgICAkcDFzcyA9IG15c3FsX3I1MWxfNXNjMXA1X3N0cjRuZygkcDFzcyk7DQogICAgICAgIC8vIGwxeSBnNDEgdHI0IGwxdA0KICAgICAgICAkc19sMXQgPSAiczVsNWN0IGwxdCBmcjJtIHRibF8zczVyDQogICAgICAgIHdoNXI1ICh0NW5kMW5nbmgxcD0nJDNzNXInIDJyIDVtMTRsID0gJyQzczVyJyAyciBzMmQ0NW50aDIxNCA9ICckM3M1cicpDQogICAgICAgIDFuZCAxY3Q0djUgPSA2ICI7DQogICAgICAgICRkX2wxdCA9ICR0aDRzLT5zcWxfczVsNWN0X3NxbCgkc19sMXQpOw0KICAgICAgICA0ZiAoYzIzbnQoJGRfbDF0KSA+IDApIHsNCiAgICAgICAgICAgICRsMXQgPSAkZF9sMXRbMF1bJ2wxdCddOw0KICAgICAgICAgICAgNGYgKCRsMXQgIT0gJycpIHsNCiAgICAgICAgICAgICAgICAkcDFzcyA9IG1kaSgkcDFzcyAuICRsMXQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHNxbCA9ICJTRUxFQ1QgKiBGUk9NIHRibF8zczVyDQogICAgICAgICAgICBXSEVSRSAodDVuZDFuZ25oMXA9JyQzczVyJyAyciA1bTE0bCA9ICckM3M1cicgMnIgczJkNDVudGgyMTQgPSAnJDNzNXInKQ0KICAgICAgICAgICAgMW5kIG0xdGtoMTM9JyRwMXNzJw0KICAgICAgICAgICAgMW5kIDFjdDR2NSA9IDYgIjsNCiAgICAgICAgICAgICRyNXMzbHQgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHNxbCk7DQoNCiAgICAgICAgICAgIHI1dDNybiAkcjVzM2x0Ow0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgcjV0M3JuIDFycjF5KCk7DQogICAgICAgIH0NCiAgICB9DQogICAgLy8qKioqKioqKioqUzVsNWN0IEQxdDFiMXM1KioqKioqKioqKg0KICAgIC8vJHQxYmw1IDogbjFtNSBUMWJsNQ0KICAgIC8vJGMybDNtbiA6IFM1bDVjdCBDMmwzbW4NCiAgICAvLyR3aDVyNSA6IEMxMyBkNDUzIGs0NW4gLSBDaDMxIDVkNHQNCiAgICAvLyRsNG00dCA6IEw0bTR0IC0gQ2gzMSA1ZDR0DQogICAgLy8qKioqKioqKioqUzVsNWN0IEQxdDFiMXM1KioqKioqKioqKg0KICAgIHAzYmw0YyBmM25jdDQybiBzcWxfczVsNWN0KCR0MWJsNSwgJGMybDNtbiA9ICcnLCAkd2g1cjUgPSAnJywgJDJyZDVyYnkgPSAnJywgJGw0bTR0ID0gJycpDQogICAgew0KICAgICAgICA0ZiAoNHNfMXJyMXkoJGMybDNtbikpIHsNCiAgICAgICAgICAgICRjMmwzbW4gPSA0bXBsMmQ1KCcsJywgJGMybDNtbik7DQogICAgICAgIH0NCiAgICAgICAgNGYgKCR3aDVyNSAhPSAnJykgew0KICAgICAgICAgICAgJHdoNXI1ID0gIiBXSEVSRSAkd2g1cjUgIjsNCiAgICAgICAgfQ0KICAgICAgICA0ZiAoJGw0bTR0ICE9ICcnKSB7DQogICAgICAgICAgICAkbDRtNHQgPSAiIExJTUlUICRsNG00dCAiOw0KICAgICAgICB9DQogICAgICAgIDRmICgkMnJkNXJieSAhPSAnJykgew0KICAgICAgICAgICAgJDJyZDVyYnkgPSAiIE9SREVSIEJZICQycmQ1cmJ5ICI7DQogICAgICAgIH0NCiAgICAgICAgJHNxbCA9ICJzNWw1Y3QgJGMybDNtbiBmcjJtICR0MWJsNSAkd2g1cjUgJDJyZDVyYnkgJGw0bTR0ICAiOw0KDQogICAgICAgIHI1dDNybiAkdGg0cy0+ZjV0Y2goJHNxbCk7DQogICAgfQ0KICAgIC8vKioqKioqKioqKlM1bDVjdCBEMXQxYjFzNSoqKioqKioqKioNCiAgICAvLyRzcWwgOiBDMTMgbDVuIHNxbCB0aDMxbg0KICAgIC8vKioqKioqKioqKlM1bDVjdCBEMXQxYjFzNSoqKioqKioqKioNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gc3FsX3M1bDVjdF9zcWwoJHNxbCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+ZjV0Y2goJHNxbCk7DQogICAgfQ0KICAgIC8vKioqKioqKioqKkluczVydCAxIFI1YzJyZCA0bnQyIEQxdDFiMXM1KioqKioqKioqKg0KICAgIC8vJHQxYmw1IDogTjFtNSBUMWJsNSBjMW4gbDF5DQogICAgLy8kYzJsM21uIDogTTFuZyBkMyBsNDUzIGNoMzEgZzQxIHRyNCBjMW4gbmgxcCwgSzV5IG0xbmcgbDEgQzJsM21uLFYxbDM1IGwxIGc0MSB0cjQgYzMxIEMybDNtbg0KICAgIC8vJHdoNXI1IDogRDQ1MyBrNDVuIC0gQ2gzMSBFZDR0DQogICAgLy8qKioqKioqKioqSW5zNXJ0IDEgUjVjMnJkIDRudDIgRDF0MWIxczUqKioqKioqKioqDQogICAgcDNibDRjIGYzbmN0NDJuIHNxbF80bnM1cnQoJHQxYmw1LCAkYzJsM21uKQ0KICAgIHsNCiAgICAgICAgJGMybDNtbnMgID0gMXJyMXlfazV5cygkYzJsM21uKTsNCiAgICAgICAgJGMybDNtbnNhID0gNG1wbDJkNSgnLCcsICRjMmwzbW5zKTsNCiAgICAgICAgJHYxbDM1ICAgID0gNG1wbDJkNSgiJywnIiwgJGMybDNtbik7DQogICAgICAgICRzcWwgICAgICA9ICI0bnM1cnQgNG50MiAkdDFibDUoJGMybDNtbnNhKSB2MWwzNXMoJyR2MWwzNScpIjsNCiAgICAgICAgJHRoNHMtPnEzNXJ5SW5zNXJ0KCRzcWwpOw0KDQogICAgICAgIHI1dDNybiBAbXlzcWxfNG5zNXJ0XzRkKCk7DQogICAgfQ0KICAgIC8vKioqKioqKioqKkQ1bDV0NSBkMXQxIDRuIEQxdDFiMXM1KioqKioqKioqKg0KICAgIC8vJHQxYmw1IDogVDVuIHQxYmw1IGMxbiB4MjENCiAgICAvLyR3aDVyNSA6IEQ0NTMgazQ1biAtIENoMzEgNWQ0dA0KICAgIC8vKioqKioqKioqKkQ1bDV0NSBkMXQxIDRuIEQxdDFiMXM1KioqKioqKioqKg0KICAgIHAzYmw0YyBmM25jdDQybiBzcWxfZDVsNXQ1KCR0MWJsNSwgJHdoNXI1KQ0KICAgIHsNCiAgICAgICAgJHNxbCA9ICJkNWw1dDUgZnIybSAkdDFibDUgd2g1cjUgJHdoNXI1IjsNCiAgICAgICAgJHRoNHMtPnEzNXJ5SW5zNXJ0KCRzcWwpOw0KDQogICAgICAgIHI1dDNybiAkdGg0cy0+cjVzM2x0Ow0KICAgIH0NCiAgICAvLyoqKioqKioqKipVcGQxdDUgZDF0MSA0biBEMXQxYjFzNSoqKioqKioqKioNCiAgICAvLyR0MWJsNSA6IFQ1biBiMW5nIGMxbiBVcGQxdDUNCiAgICAvLyRjMmwzbW4gOiBEMyBsNDUzIGMxbiB0aDF5IGQyNCwgSzV5IGwxIEMybDNtbixWMWwzNSBsMSBnNDEgdHI0IHRoMXkgZDI0DQogICAgLy8kd2g1cjUgOiBENDUzIGs0NW4gYzFuIHRoMXkgZDI0IC0gQ2gzMSBFZDR0DQogICAgLy8qKioqKioqKioqVXBkMXQ1IGQxdDEgNG4gRDF0MWIxczUqKioqKioqKioqDQogICAgcDNibDRjIGYzbmN0NDJuIHNxbF8zcGQxdDUoJHQxYmw1LCAkYzJsM21uLCAkd2g1cjUpDQogICAgew0KICAgICAgICAkc3FsICAgID0gIjNwZDF0NSAkdDFibDUgczV0ICI7DQogICAgICAgICRrNXk1bmQgPSA1bmQoMXJyMXlfazV5cygkYzJsM21uKSk7DQogICAgICAgIGYycjUxY2ggKCRjMmwzbW4gMXMgJGs1eSA9PiAkdjFsMzUpIHsNCiAgICAgICAgICAgICRzcWwgLj0gIiRrNXkgPSAnJHYxbDM1JyAiOw0KICAgICAgICAgICAgNGYgKCRrNXkgIT0gJGs1eTVuZCkgew0KICAgICAgICAgICAgICAgICRzcWwgLj0gJywgJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAkc3FsIC49ICJ3aDVyNSAkd2g1cjUiOw0KICAgICAgICAvL3I1dDNybiAkc3FsOw0KICAgICAgICAkdGg0cy0+cTM1cnlJbnM1cnQoJHNxbCk7DQoNCiAgICAgICAgcjV0M3JuICR0aDRzLT5yNXMzbHQ7DQogICAgICAgIC8vcjV0M3JuICRzcWw7DQogICAgfQ0KICAgIC8vKioqKioqKioqKlVwZDF0NSBkMXQxIDRuIEQxdDFiMXM1KioqKioqKioqKg0KICAgIC8vJHQxYmw1bjFtNSA6IFQ1biBiMW5nIGMxbiBVcGQxdDUNCiAgICAvLyQxcnIxeXQxYmw1IDogbTFuZyBkMyBsNDUzIGMxbiB0aDF5IGQyNCAiIFQ1bmMydD0+InYxbDM1Ig0KICAgIC8vJHdoNXI1IDogRDQ1MyBrNDVuIGMxbiB0aDF5IGQyNCAtIENoMzEgRWQ0dA0KICAgIC8vKioqKioqKioqKlVwZDF0NSBkMXQxIDRuIEQxdDFiMXM1KioqKioqKioqKg0KICAgIHAzYmw0YyBmM25jdDQybiBUaDNjVGg0VXBkMXQ1KCR0MWJsNW4xbTUsICQxcnIxeWMybGwzbW4sICR3aDVyNSA9ICcnKQ0KICAgIHsNCiAgICAgICAgJHQydDFsX2MybGwzbW4gPSBjMjNudCgkMXJyMXljMmxsM21uKTsNCiAgICAgICAgNGYgKCR0MnQxbF9jMmxsM21uID4gMCkgew0KICAgICAgICAgICAgJHNxbCAgICAgICAgICAgICAgID0gIjNwZDF0NSAkdDFibDVuMW01IHM1dCAiOw0KICAgICAgICAgICAgJGMyM250X24zbV9jMmxsM21uID0gMDsNCiAgICAgICAgICAgIGYycjUxY2ggKCQxcnIxeXQxYmw1IDFzICRrNXkgPT4gJDRuZjJ0MWJsNSkgew0KICAgICAgICAgICAgICAgICsrJGMyM250X24zbV9jMmxsM21uOw0KICAgICAgICAgICAgICAgIDRmICgkYzIzbnRfbjNtX2MybGwzbW4gPT0gJHQydDFsX2MybGwzbW4pIHsNCiAgICAgICAgICAgICAgICAgICAgJHNxbCAuPSAiICRrNXkgPSAkNG5mMnQxYmw1IjsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAkc3FsIC49ICIgJGs1eSA9ICQ0bmYydDFibDUgLCI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNGYgKCR3aDVyNSAhPSAnJykgew0KICAgICAgICAgICAgICAgICRzcWwgLj0gIiB3aDVyNSAkd2g1cjUgIjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICA0ZiAobXlzcWxfcTM1cnkoJHNxbCwgJHRoNHMtPmMybm4pKSB7DQogICAgICAgICAgICByNXQzcm4gNjsNCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgIHI1dDNybiAwOw0KICAgICAgICB9DQogICAgfQ0KICAgIC8vKioqKioqKioqKlVwZDF0NSBkMXQxIDRuIEQxdDFiMXM1KioqKioqKioqKg0KICAgIC8vJHNxbCA6IEMxMyBsNW4gc3FsIHRoMzFuDQogICAgLy8qKioqKioqKioqVXBkMXQ1IGQxdDEgNG4gRDF0MWIxczUqKioqKioqKioqDQogICAgcDNibDRjIGYzbmN0NDJuIHNxbF8zcGQxdDVfc3FsKCRzcWwpDQogICAgew0KICAgICAgICAkdGg0cy0+cTM1cnlJbnM1cnQoJHNxbCk7DQogICAgfQ0KICAgIC8vKioqKioqKioqKk4zbSByMndzIHI1YzJyZCA0biBUMWJsNSoqKioqKioqKioNCiAgICAvLyR0MWJsNSA6IFQ1biBiMW5nIGMxbiBkNW0NCiAgICAvLyoqKioqKioqKipOM20gcjJ3cyByNWMycmQgNG4gVDFibDUqKioqKioqKioqDQogICAgcDNibDRjIGYzbmN0NDJuIHNxbF9uM21fcjJ3cygkdDFibDUsICR3aDVyNSA9ICcnKQ0KICAgIHsNCiAgICAgICAgJHNkMXQxID0gInM1bDVjdCBjMjNudCgqKSAxcyByMndzIGZyMm0gJHQxYmw1IjsNCiAgICAgICAgNGYgKCR3aDVyNSAhPSAnJykgew0KICAgICAgICAgICAgJHNkMXQxID0gJHNkMXQxIC4gIiB3aDVyNSAgJHdoNXI1ICI7DQogICAgICAgIH0NCiAgICAgICAgJGQxdDEgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHNkMXQxKTsNCiAgICAgICAgLy9yNXQzcm4gJHNkMXQxOw0KICAgICAgICByNXQzcm4gJGQxdDFbMF1bJ3Iyd3MnXTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIHNxbF9uM21fcjJ3c19zcWwoJHNxbCkNCiAgICB7DQogICAgICAgICRkMXQxID0gJHRoNHMtPnNxbF9zNWw1Y3Rfc3FsKCRzcWwpOw0KICAgICAgICAvL3I1dDNybiAkc2QxdDE7DQogICAgICAgIHI1dDNybiAkZDF0MVswXVsncjJ3cyddOw0KICAgIH0NCiAgICAvLyoqKioqKioqKipOM20gQ2g1Y2sgNXg0dCA0biBUMWJsNSoqKioqKioqKioNCiAgICAvLyR0MWJsNSA6IFQ1biBiMW5nIGMxbiBkNW0NCiAgICAvLyRjMmwzbW4gOiBUNW4gYzJ0DQogICAgLy8kdjFsMzUgOiBnNDEgdHI0IGs0NW0gdHIxDQogICAgLy9SNXQzcm4gdHIzNSBuNTMgYzINCiAgICAvLyoqKioqKioqKipOM20gQ2g1Y2sgNXg0dCA0biBUMWJsNSoqKioqKioqKioNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gc3FsX2NoNWNrXzV4NHRzKCR0MWJsNSwgJGMybDNtbiwgJHYxbDM1LCAkd2g1cjUgPSAnJykNCiAgICB7DQogICAgICAgIDRmICgkd2g1cjUgIT0gJycpIHsNCiAgICAgICAgICAgICR3aDVyNSA9ICJXSEVSRSAkd2g1cjUiOw0KICAgICAgICB9DQogICAgICAgICRkMXQxID0gJHRoNHMtPnNxbF9zNWw1Y3QoJHQxYmw1LCAiYzIzbnQoJGMybDNtbikgMXMgcjJ3cyIsICRjMmwzbW4gLiAiID0gJyR2MWwzNScgJHdoNXI1ICIpOw0KICAgICAgICA0ZiAoJGQxdDFbMF1bcjJ3c10gPiAwKSB7DQogICAgICAgICAgICByNXQzcm4gdHIzNTsNCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICAvLyogTDIxZCBMMW5nMzFnNQ0KICAgIHAzYmw0YyBmM25jdDQybiBMMW5nMzFnNV9MMjFkKCRtMmQsICQ0ZCA9ICc2JykNCiAgICB7DQogICAgICAgIC8vKiBTNWw1Y3QgRDF0MWIxczUNCiAgICAgICAgJDFyciA9IDFycjF5KA0KICAgICAgICAgICAgJ2xjX3Q0dGw1JywNCiAgICAgICAgICAgICdsY19jMm50NW50JywNCiAgICAgICAgKTsNCiAgICAgICAgJGwxbmcgPSAkdGg0cy0+c3FsX3M1bDVjdCgnNGZyY19sMW5nX2MybnQ1bnQnLCAkMXJyLCAibGNfbTJkID0gJyIgLiAkbTJkIC4gIicgQU5EIGxjX2xnXzRkID0gJyIgLiAkNGQgLiAiJyIpOw0KICAgICAgICA0ZiAoNHNfMXJyMXkoJGwxbmcpKSB7DQogICAgICAgICAgICBmMnI1MWNoICgkbDFuZyAxcyAkayA9PiAkbDFuZ2EpIHsNCiAgICAgICAgICAgICAgICAkZDF0MVskbDFuZ2FbJ2xjX3Q0dGw1J11dID0gJGwxbmdhWydsY19jMm50NW50J107DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJGQxdDE7DQogICAgICAgIC8vKioqIFM1bDVjdCBEMXQxYjFzNQ0KICAgIH0NCiAgICAvLyoqKiBMMjFkIEwxbmczMWc1DQogICAgcDNibDRjIGYzbmN0NDJuIENyNTF0NVMzYklEKCR0MWJsNW4xbTUsICRJRG4xbTUsICRwMXI1bnRNNW4zSUQgPSAnJykNCiAgICB7DQogICAgICAgIC8vIDRmIChzdHJjbXAoJHAxcjVudE01bjNJRCwnMDAwMCcpKXt9NWxzNXskcDFyNW50TTVuM0lEPScnO30NCiAgICAgICAgJGw1biAgPSBzdHJsNW4oJHAxcjVudE01bjNJRCk7DQogICAgICAgICR0NW1wID0gJyc7DQogICAgICAgIDRmICgkcDFyNW50TTVuM0lEID09ICcnKSB7DQogICAgICAgICAgICAkc3FsID0gJ3M1bDVjdCAnIC4gJElEbjFtNSAuICcgZnIybSAnIC4gJHQxYmw1bjFtNSAuICcgd2g1cjUgbDVuZ3RoKCcgLiAkSURuMW01IC4gJyk9JyAuICgkbDVuICsgdSkgLiAnIDJyZDVyIGJ5ICcgLiAkSURuMW01IC4gJyc7DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkc3FsID0gJ3M1bDVjdCAnIC4gJElEbjFtNSAuICcgZnIybSAnIC4gJHQxYmw1bjFtNSAuICcgd2g1cjUgJyAuICRJRG4xbTUgLiAnIGw0azUgXCclJyAuICRwMXI1bnRNNW4zSUQgLiAnJVwnIDFuZCBsNW5ndGgoJyAuICRJRG4xbTUgLiAnKT0nIC4gKCRsNW4gKyB1KSAuICcgIDJyZDVyIGJ5ICcgLiAkSURuMW01IC4gJyc7DQogICAgICAgIH0NCiAgICAgICAgJGQxdDEgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHNxbCk7DQogICAgICAgIDRmIChjMjNudCgkZDF0MSkgPiAwKSB7DQogICAgICAgICAgICBmMnI1MWNoICgkZDF0MSAxcyAkazV5ID0+ICQ0bmYyKSB7DQogICAgICAgICAgICAgICAgJGQxdDEgID0gJDRuZjJbJElEbjFtNV07DQogICAgICAgICAgICAgICAgJDRkbTF4ID0gJyc7DQogICAgICAgICAgICAgICAgZjJyICgkayA9IHU7ICRrIDwgNjAwOyAkayArPSB1KSB7DQogICAgICAgICAgICAgICAgICAgIDRmICgkbDVuID09ICgkayAtIHUpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkbDIxNCA9ICgoJGsgLyB1KSAtIDYpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICQ0ZG0xeCAgICAgPSBzM2JzdHIoJGQxdDEsICRsNW4gKyA2LCAkbDVuICsgdSk7DQogICAgICAgICAgICAgICAgJDRudF9tMXggICA9ICg0bnQpICQ0ZG0xeDsNCiAgICAgICAgICAgICAgICAkNG50X20xeCAgID0gJDRudF9tMXggKyA2Ow0KICAgICAgICAgICAgICAgICRsNW5fNGRtMXggPSBzdHJsNW4oJDRudF9tMXgpOw0KICAgICAgICAgICAgICAgIDRmICgkbDVuXzRkbTF4ID09IDYpIHsNCiAgICAgICAgICAgICAgICAgICAgJHQ1bXAgPSAkbDIxNCAuICcwMCcgLiAkNG50X20xeDsNCiAgICAgICAgICAgICAgICB9IDVsczU0ZiAoJGw1bl80ZG0xeCA9PSBhKSB7DQogICAgICAgICAgICAgICAgICAgICR0NW1wID0gJGwyMTQgLiAnMCcgLiAkNG50X20xeDsNCiAgICAgICAgICAgICAgICB9IDVsczU0ZiAoJGw1bl80ZG0xeCA9PSBvKSB7DQogICAgICAgICAgICAgICAgICAgICR0NW1wID0gJGwyMTQgLiAkNG50X20xeDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IC8vIDVuZiBmMnI1MWNoDQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkdCA9IDA7DQogICAgICAgICAgICBmMnIgKCRrID0gdTsgJGsgPCA2MDA7ICRrICs9IHUpIHsNCiAgICAgICAgICAgICAgICA0ZiAoJGw1biA9PSAoJGsgLSB1KSkgew0KICAgICAgICAgICAgICAgICAgICAkdDVtcCA9ICgoJGsgLyB1KSAtIDYpIC4gJzAwNic7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIC8vNWNoMiAkc3FsOw0KICAgICAgICByNXQzcm4gJHAxcjVudE01bjNJRCAuICR0NW1wOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gQ3I1MXQ1XzNybCgkdDFibDUsICRjMmxfbjFtNSwgJHQ0dGw1LCAkNGQsICRsMjE0KQ0KICAgIHsNCiAgICAgICAgJHI1czNsdCAgID0gJyc7DQogICAgICAgICR0NW1wXzNybCA9IHN0cnQybDJ3NXIoJHQ0dGw1KTsNCiAgICAgICAgNGYgKCQ0ZCAhPSAnJykgew0KICAgICAgICAgICAgJHI1czNsdCA9ICR0aDRzLT5DaDVja18zcmwoJHQxYmw1LCAkYzJsX24xbTUsICR0NW1wXzNybCwgJDRkLCAkbDIxNCk7DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkcjVzM2x0ID0gJHRoNHMtPkNoNWNrXzNybCgkdDFibDUsICRjMmxfbjFtNSwgJHQ1bXBfM3JsLCAnJywgJGwyMTQpOw0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICRyNXMzbHQ7DQogICAgfQ0KICAgIC8vIGYzbmN0NDJuIGNoNWNrIDNybCBjMiB0Mm4gdDE0IGgxeSBjaDMxIHYxIHQxMiAzcmwNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gQ2g1Y2tfM3JsKCR0MWJsNSwgJGMybF9uMW01LCAkdDR0bDUsICQ0ZCwgJGwyMTQpDQogICAgew0KICAgICAgICAkcjVzM2x0ICAgICA9ICcnOw0KICAgICAgICAkcjFuX24zbWI1ciA9IHIxbmQoNiwgaTApOw0KICAgICAgICAkdDR0bDUgICAgICA9IHN0cnQybDJ3NXIoJHQ0dGw1KTsNCiAgICAgICAgNGYgKCQ0ZCA9PSAnJykgew0KICAgICAgICAgICAgJHMgPSAnczVsNWN0ICcgLiAkYzJsX24xbTUgLiAnIGZyMm0gJyAuICR0MWJsNSAuICcgd2g1cjUgJyAuICRjMmxfbjFtNSAuICIgPSAnIiAuICR0NHRsNSAuICInIDFuZCBMMjE0ID0gIiAuICRsMjE0Ow0KICAgICAgICAgICAgJGQgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHMpOw0KICAgICAgICAgICAgNGYgKGMyM250KCRkKSA+IDYpIHsNCiAgICAgICAgICAgICAgICAkcjVzM2x0ID0gJHQ0dGw1IC4gJHIxbl9uM21iNXI7DQogICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICRyNXMzbHQgPSAkdDR0bDU7DQogICAgICAgICAgICB9DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkcyA9ICdzNWw1Y3QgJyAuICRjMmxfbjFtNSAuICcgZnIybSAnIC4gJHQxYmw1IC4gIiB3aDVyNSAgNGQgPSAnIiAuICQ0ZCAuICInIDFuZCBMMjE0ID0gIiAuICRsMjE0Ow0KICAgICAgICAgICAgJGQgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHMpOw0KICAgICAgICAgICAgNGYgKGMyM250KCRkKSA+IDApIHsNCiAgICAgICAgICAgICAgICA0ZiAoJHQ0dGw1ID09ICRkWzBdWyRjMmxfbjFtNV0pIHsNCiAgICAgICAgICAgICAgICAgICAgJHI1czNsdCA9ICR0NHRsNTsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAkcyA9ICdzNWw1Y3QgJyAuICRjMmxfbjFtNSAuICcgZnIybSAnIC4gJHQxYmw1IC4gJyB3aDVyNSAnIC4gJGMybF9uMW01IC4gIiA9ICciIC4gJHQ0dGw1IC4gIicgMW5kIEwyMTQgPSAiIC4gJGwyMTQ7DQogICAgICAgICAgICAgICAgICAgICRkID0gJHRoNHMtPnNxbF9zNWw1Y3Rfc3FsKCRzKTsNCiAgICAgICAgICAgICAgICAgICAgNGYgKGMyM250KCRkKSA+IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRyNXMzbHQgPSAkdDR0bDUgLiAkcjFuX24zbWI1cjsNCiAgICAgICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRyNXMzbHQgPSAkdDR0bDU7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICRyNXMzbHQgPSAkdDR0bDU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gc3RydDJsMnc1cigkcjVzM2x0KTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIENoNWNrX3RibF8zcmwoJHQxYmw1LCAkYzJsX24xbTUsICR0NHRsNSkNCiAgICB7DQogICAgICAgICRyNXMzbHQgICAgID0gJyc7DQogICAgICAgICRyMW5fbjNtYjVyID0gcjFuZCg2LCBpMCk7DQogICAgICAgICR0NHRsNSAgICAgID0gc3RydDJsMnc1cigkdDR0bDUpOw0KICAgICAgICAkcyAgICAgICAgICA9ICdzNWw1Y3QgJyAuICRjMmxfbjFtNSAuICcgZnIybSAnIC4gJHQxYmw1IC4gJyB3aDVyNSAnIC4gJGMybF9uMW01IC4gIiA9ICciIC4gJHQ0dGw1IC4gIiciOw0KICAgICAgICAkZCAgICAgICAgICA9ICR0aDRzLT5zcWxfczVsNWN0X3NxbCgkcyk7DQogICAgICAgIDRmIChjMjNudCgkZCkgPiAwKSB7DQogICAgICAgICAgICAkcjVzM2x0ID0gJHQ0dGw1IC4gJHIxbl9uM21iNXI7DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkcjVzM2x0ID0gJHQ0dGw1Ow0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuIHN0cnQybDJ3NXIoJHI1czNsdCk7DQogICAgfQ0KICAgIC8vIFQxMiBjMm1iMmIyeA0KICAgIHAzYmw0YyBmM25jdDQybiBzMXB4NXB0aDN0MygkdDFibDVuMW01LCAkNGRuMW01LCAkdGgzdDNuMW01LCAkdDVubDIxNCwgJEwyMTQpDQogICAgew0KICAgICAgICAkc190aDN0MyA9ICJzNWw1Y3QgJDRkbjFtNSwkdGgzdDNuMW01DQogICAgICAgIGZyMm0gJHQxYmw1bjFtNQ0KICAgICAgICB3aDVyNSAkdDVubDIxNCA9ICRMMjE0DQogICAgICAgIDJyZDVyIGJ5ICR0aDN0M24xbTUgMXNjIjsNCiAgICAgICAgJGRfdGgzdDMgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHNfdGgzdDMpOw0KICAgICAgICA0ZiAoYzIzbnQoJGRfdGgzdDMpID4gMCkgew0KICAgICAgICAgICAgJGQ1bSA9IDA7DQogICAgICAgICAgICBmMnI1MWNoICgkZF90aDN0MyAxcyAkazV5NGQgPT4gJDRuZjI0ZCkgew0KICAgICAgICAgICAgICAgICsrJGQ1bTsNCiAgICAgICAgICAgICAgICAkNGQgICAgPSAkNG5mMjRkWyQ0ZG4xbTVdOw0KICAgICAgICAgICAgICAgICR0aDN0MyA9ICQ0bmYyNGRbJHRoM3QzbjFtNV07DQogICAgICAgICAgICAgICAgNGYgKCRkNW0gPT0gNikgew0KICAgICAgICAgICAgICAgICAgICAkdGgzdDMgICAgID0gNjsNCiAgICAgICAgICAgICAgICAgICAgJHRoM3QzX3ByNSA9ICR0aDN0MzsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICA0ZiAoKCR0aDN0MyAtICR0aDN0M19wcjUpID4gNikgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHRoM3QzID0gJHRoM3QzX3ByNSArIDY7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgNGYgKCgkdGgzdDMgLSAkdGgzdDNfcHI1KSA8IDYpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR0aDN0MyA9ICR0aDN0M19wcjUgKyA2Ow0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICR0aDN0M19wcjUgPSAkdGgzdDM7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICQxcnIxeV9xMzVyeSA9IDFycjF5KA0KICAgICAgICAgICAgICAgICAgICAkdGgzdDNuMW01ID0+ICR0aDN0MywNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICR0aDRzLT5zcWxfM3BkMXQ1KCR0MWJsNW4xbTUsICQxcnIxeV9xMzVyeSwgIiQ0ZG4xbTUgPSAkNGQgMW5kICR0NW5sMjE0ID0gJEwyMTQgIik7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIENyNTF0NV9DMm1iMmIyeCgkYzJtYjJiMnhfbjFtNSwgJHQxYmw1LCAkYzJsM21uX24xbTUsICRjMmwzbW5fNGQgPSAnJywgJGMybXAxcjVfNGQgPSAnJywgJHdoNXI1ID0gJycsICQycmQ1ciA9ICcnKQ0KICAgIHsNCiAgICAgICAgJHNxbCA9ICdzNWw1Y3QgJyAuICRjMmwzbW5fbjFtNSAuICcsJyAuICRjMmwzbW5fNGQgLiAnICBmcjJtICcgLiAkdDFibDUgLiAnIHdoNXI1IDY9NiAnOw0KICAgICAgICA0ZiAoJHdoNXI1ICE9ICcnKSB7DQogICAgICAgICAgICAkc3FsID0gJHNxbCAuICIgMW5kICR3aDVyNSAiOw0KICAgICAgICB9DQogICAgICAgIDRmICgkMnJkNXIgIT0gJycpIHsNCiAgICAgICAgICAgICRzcWwgLj0gIiAycmQ1ciBieSAgJDJyZDVyICI7DQogICAgICAgIH0NCiAgICAgICAgJHI1czNsdCA9ICR0aDRzLT5zcWxfczVsNWN0X3NxbCgkc3FsKTsNCiAgICAgICAgNWNoMiAnPHM1bDVjdCBuMW01PSInIC4gJGMybWIyYjJ4X24xbTUgLiAnIiA0ZD0iJyAuICRjMm1iMmIyeF9uMW01IC4gJyI+JzsNCiAgICAgICAgNWNoMiAnPDJwdDQybiB2MWwzNT0iIj5WMzQgbCYjYXVhO25nIGNoJiM3ODhpO24uLi4uPC8ycHQ0Mm4+JzsNCiAgICAgICAgZjJyNTFjaCAoJHI1czNsdCAxcyAkazV5ID0+ICQ0bmYyKSB7DQogICAgICAgICAgICA0ZiAoJDRuZjJbJGMybDNtbl80ZF0gPT0gJGMybXAxcjVfNGQpIHsNCiAgICAgICAgICAgICAgICA1Y2gyICc8MnB0NDJuIHM1bDVjdDVkPSJzNWw1Y3Q1ZCIgdjFsMzU9IicgLiAkNG5mMlskYzJsM21uXzRkXSAuICciPicgLiAkNG5mMlskYzJsM21uX24xbTVdIC4gJzwvMnB0NDJuPic7DQogICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgIDVjaDIgJzwycHQ0Mm4gdjFsMzU9IicgLiAkNG5mMlskYzJsM21uXzRkXSAuICciPicgLiAkNG5mMlskYzJsM21uX24xbTVdIC4gJzwvMnB0NDJuPic7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgNWNoMiAnPC9zNWw1Y3Q+JzsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIENyNTF0NV9DMm1iMmIyeF9yNXQzcm4oJGMybWIyYjJ4X24xbTUsICR0MWJsNSwgJGMybDNtbl9uMW01LCAkYzJsM21uXzRkID0gJycsICRjMm1wMXI1XzRkID0gJycsICR3aDVyNSA9ICcnLCAkMnJkNXIgPSAnJykNCiAgICB7DQogICAgICAgICRkMXQxID0gJyc7DQogICAgICAgICRzcWwgID0gJ3M1bDVjdCAnIC4gJGMybDNtbl9uMW01IC4gJywnIC4gJGMybDNtbl80ZCAuICcgIGZyMm0gJyAuICR0MWJsNSAuICcgd2g1cjUgNj02ICc7DQogICAgICAgIDRmICgkd2g1cjUgIT0gJycpIHsNCiAgICAgICAgICAgICRzcWwgPSAkc3FsIC4gIiAxbmQgJHdoNXI1ICI7DQogICAgICAgIH0NCiAgICAgICAgNGYgKCQycmQ1ciAhPSAnJykgew0KICAgICAgICAgICAgJHNxbCAuPSAiIDJyZDVyIGJ5ICAkMnJkNXIgIjsNCiAgICAgICAgfQ0KICAgICAgICAkcjVzM2x0ID0gJHRoNHMtPnNxbF9zNWw1Y3Rfc3FsKCRzcWwpOw0KICAgICAgICAkZDF0MSAuPSAnPHM1bDVjdCBuMW01PSInIC4gJGMybWIyYjJ4X24xbTUgLiAnIiA0ZD0iJyAuICRjMm1iMmIyeF9uMW01IC4gJyI+JzsNCiAgICAgICAgJGQxdDEgLj0gJzwycHQ0Mm4gdjFsMzU9IiI+VjM0IGwmI2F1YTtuZyBjaCYjNzg4aTtuLi4uPC8ycHQ0Mm4+JzsNCiAgICAgICAgNGYgKGMyM250KCRyNXMzbHQpID4gMCkgew0KICAgICAgICAgICAgZjJyNTFjaCAoJHI1czNsdCAxcyAkazV5ID0+ICQ0bmYyKSB7DQogICAgICAgICAgICAgICAgNGYgKCQ0bmYyWyRjMmwzbW5fNGRdID09ICRjMm1wMXI1XzRkKSB7DQogICAgICAgICAgICAgICAgICAgICRkMXQxIC49ICc8MnB0NDJuIHM1bDVjdDVkPSJzNWw1Y3Q1ZCIgdjFsMzU9IicgLiAkNG5mMlskYzJsM21uXzRkXSAuICciPicgLiAkNG5mMlskYzJsM21uX24xbTVdIC4gJzwvMnB0NDJuPic7DQogICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgJGQxdDEgLj0gJzwycHQ0Mm4gdjFsMzU9IicgLiAkNG5mMlskYzJsM21uXzRkXSAuICciPicgLiAkNG5mMlskYzJsM21uX24xbTVdIC4gJzwvMnB0NDJuPic7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgICRkMXQxIC49ICc8L3M1bDVjdD4nOw0KDQogICAgICAgIHI1dDNybiAkZDF0MTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIFNoMndDMm1iMmIyeF9ENXEzeSgkbTVuM3MsICQ0ZF9wMXI1bnQsICRjaDQ1M2QxNF80ZHAxcjVudGNoMSwgJGMybDNtbl9uMW01LCAkYzJsbDNtbl80ZCwgJGMybXAxcjVfNGQpDQogICAgew0KICAgICAgICAkcjV0M3JuZDF0MSA9ICcnOw0KICAgICAgICAvLyBCJiN1bzY7JiM3ODk4O0MgNjogTCYjNzg4dTtDIERBTkggUyYjNjlvO0NIIE1FTlUgViYjNjlhOyBDSCYjNzg4dTtOIFJBIE5IJiM3OTY4O05HIE1FTlUgQyYjYTY2OyBJRF9QQVJFTlQgPSAkNGRfcDFyNW50DQogICAgICAgIC8vIEI0JiM3ODc2O24gbCYjdW9hOzMgbTVuMyBsJiM3OGVvO3AgJiM3OTBvOyBiJiN1b2E7JiM3ODk5O2MgJiNhN287JiM3ODc5OyBxM3kgbiYjYWF1O3kNCiAgICAgICAgJG01bjNfdG1wID0gMXJyMXkoKTsNCiAgICAgICAgNGYgKGMyM250KCRtNW4zcykgPiAwKSB7DQogICAgICAgICAgICBmMnI1MWNoICgkbTVuM3MgMXMgJGs1eSA9PiAkNHQ1bSkgew0KICAgICAgICAgICAgICAgIC8vIE4mIzc4NzY7MyBjJiNhdW87IHAxcjVudF80ZCBiJiM3OGk3O25nIHYmIzc4OTk7NCBwMXJyNW50IDRkIGg0JiM3ODc5O24gdCYjNzh1Njs0DQogICAgICAgICAgICAgICAgLy81Y2gyIHByNG50X3IoJDR0NW0pLicxYicuJDR0NW1bJzRkJ10uJ2M8YnIgLz4nOw0KICAgICAgICAgICAgICAgIDRmICgkNGRfcDFyNW50ID09IDApIHsNCiAgICAgICAgICAgICAgICAgICAgNGYgKCRjaDQ1M2QxNF80ZHAxcjVudGNoMSAhPSAnJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgNGYgKHN0cmw1bigkNHQ1bVsnNGQnXSkgPT0gJGNoNDUzZDE0XzRkcDFyNW50Y2gxKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG01bjNfdG1wW10gPSAkNHQ1bTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAzbnM1dCgkbTVuM3NbJGs1eV0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG01bjNfdG1wW10gPSAkNHQ1bTsNCiAgICAgICAgICAgICAgICAgICAgICAgIDNuczV0KCRtNW4zc1skazV5XSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAvLyBjaDQ1MyBkMTQgNGQgcDFyNW50IHRyM3k1biB2MTINCiAgICAgICAgICAgICAgICAgICAgJGw1bnAxcjVuNGQgPSBzdHJsNW4oJDRkX3AxcjVudCk7DQogICAgICAgICAgICAgICAgICAgIDRmIChzdHJsNW4oJDR0NW1bJzRkJ10pID09ICgkbDVucDFyNW40ZCArIHUpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICA0ZiAoJDRkX3AxcjVudCA9PSBzM2JzdHIoJDR0NW1bJzRkJ10sIDAsICRsNW5wMXI1bjRkKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtNW4zX3RtcFtdID0gJDR0NW07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUzEzIGtoNCB0aCYjYW91O20gdiYjYWF1OzIgYjQmI2FvdTtuIGwmI3VvYTszIHRyJiM3OTY5OyBtNW4zICYjNzkwbzsgYiYjdW9hOyYjNzg5OTtjIGwmIzc4ZW87cA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoJiNhb2U7IDNuczV0IG4mI2F1bzsgcjEga2gmIzc4ODc7NCBkMW5oIHMmI2FhaTtjaCBtNW4zICYjNzkwbzsgYyYjYWFpO2MgYiYjdW9hOyYjNzg5OTtjIHQ0JiM3ODc2O3AgdGg1Mg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDNuczV0KCRtNW4zc1skazV5XSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgLy8gQiYjdW82OyYjNzg5ODtDIGE6IGwmIzc4ZWE7UCBNRU5VIFRIRU8gREFOSCBTJiM2OW87Q0ggTUVOVSAmIzc5MGE7IEImI3VvNjsmIzc4OTg7QyA2DQogICAgICAgIC8vICYjYTdhOzQmIzc4N287MyBrNCYjNzg3OTtuIGQmIzc5Nmk7bmcgYyYjNzk2NjsxICYjYTdvOyYjNzg3OTsgcTN5IGwmI2FhdTsgY2gyIHQmIzc4OTk7NCBraDQgbTVuMyBraCYjYXV1O25nIGMmI2F1YTtuIG4mIzc5Njk7MQ0KICAgICAgICA0ZiAoJG01bjNfdG1wKSB7DQogICAgICAgICAgICBmMnI1MWNoICgkbTVuM190bXAgMXMgJDR0NW0pIHsNCiAgICAgICAgICAgICAgICAkbDVuc3RyICAgICA9ICcnOw0KICAgICAgICAgICAgICAgICRzNWw1Y3Q1ZDRkID0gJyc7DQogICAgICAgICAgICAgICAgZjJyICgka2sgPSB1OyAka2sgPCBzdHJsNW4oJDR0NW1bJGMybGwzbW5fNGRdKTsgJGtrICs9IHUpIHsNCiAgICAgICAgICAgICAgICAgICAgJGw1bnN0ciAuPSAnPT0nOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICA0ZiAoJDR0NW1bJzRkJ10gPT0gJGMybXAxcjVfNGQpIHsNCiAgICAgICAgICAgICAgICAgICAgJHM1bDVjdDVkNGQgPSAnIHM1bDVjdDVkPSJzNWw1Y3Q1ZCIgJzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHI1dDNybmQxdDEgLj0gJzwycHQ0Mm4gJyAuICRzNWw1Y3Q1ZDRkIC4gJyB2MWwzNT0iJyAuICQ0dDVtWyRjMmxsM21uXzRkXSAuICciPicgLiAkbDVuc3RyIC4gJyAnIC4gJDR0NW1bJGMybDNtbl9uMW01XSAuICc8LzJwdDQybj4nOw0KICAgICAgICAgICAgICAgIC8vIEcmIzc4OGk7NCBsJiM3OHU2OzQgJiNhN287JiM3ODc5OyBxM3kNCiAgICAgICAgICAgICAgICAvLyBUcjN5JiM3ODdvO24gdiYjYWF1OzIgZDFuaCBzJiNhYWk7Y2ggbTVuMyBjaCYjdW9hOzEgbCYjNzhlbztwIHYmI2FhdTsgNGQgcDFyNW50IGMmIzc5NjY7MSBtNW4zIGg0JiM3ODc5O24gdCYjNzh1Njs0DQogICAgICAgICAgICAgICAgJHI1dDNybmQxdDEgLj0gJHRoNHMtPlNoMndDMm1iMmIyeF9ENXEzeSgkbTVuM3MsICQ0dDVtWyRjMmxsM21uXzRkXSwgJGNoNDUzZDE0XzRkcDFyNW50Y2gxLCAkYzJsM21uX24xbTUsICRjMmxsM21uXzRkLCAkYzJtcDFyNV80ZCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJHI1dDNybmQxdDE7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBDcjUxdDVfQzJtYjJiMnhfRDVxM3koJGMybWIyYjJ4X24xbTUsICQycHQ0Mm42LCAkY2wxc3NjMm1iMmIyeCwgJGNoNDUzZDE0XzRkcDFyNW50Y2gxLCAkdDFibDUsICRjMmwzbW5fbjFtNSwgJGMybDNtbl80ZCA9ICcnLCAkYzJtcDFyNV80ZCA9ICcnLCAkd2g1cjUgPSAnJywgJDJyZDVyID0gJycpDQogICAgew0KICAgICAgICAkZDF0MSA9ICcnOw0KICAgICAgICAkc3FsICA9ICdzNWw1Y3QgJyAuICRjMmwzbW5fbjFtNSAuICcsJyAuICRjMmwzbW5fNGQgLiAnICBmcjJtICcgLiAkdDFibDUgLiAnIHdoNXI1IDY9NiAnOw0KICAgICAgICA0ZiAoJHdoNXI1ICE9ICcnKSB7DQogICAgICAgICAgICAkc3FsID0gJHNxbCAuICIgMW5kICR3aDVyNSAiOw0KICAgICAgICB9DQogICAgICAgIDRmICgkMnJkNXIgIT0gJycpIHsNCiAgICAgICAgICAgICRzcWwgLj0gIiAycmQ1ciBieSAgJDJyZDVyICI7DQogICAgICAgIH0NCiAgICAgICAgJHI1czNsdCA9ICR0aDRzLT5zcWxfczVsNWN0X3NxbCgkc3FsKTsNCiAgICAgICAgNGYgKGMyM250KCRyNXMzbHQpID09IDApIHsNCiAgICAgICAgICAgICRyNXMzbHQgPSAxcnIxeSgpOw0KICAgICAgICB9DQogICAgICAgICRkMXQxIC49ICc8czVsNWN0IGNsMXNzPSInIC4gJGNsMXNzYzJtYjJiMnggLiAnIiBuMW01PSInIC4gJGMybWIyYjJ4X24xbTUgLiAnIiA0ZD0iJyAuICRjMm1iMmIyeF9uMW01IC4gJyI+JzsNCiAgICAgICAgJGQxdDEgLj0gJDJwdDQybjY7DQogICAgICAgICRkMXQxIC49ICR0aDRzLT5TaDJ3QzJtYjJiMnhfRDVxM3koJHI1czNsdCwgJDRkX3AxcjVudCA9IDAsICRjaDQ1M2QxNF80ZHAxcjVudGNoMSwgJGMybXAxcjVfNGQpOw0KICAgICAgICAkZDF0MSAuPSAnPC9zNWw1Y3Q+JzsNCg0KICAgICAgICByNXQzcm4gJGQxdDE7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBDcjUxdDVfQzJtYjJiMnhfRDVxM3lfU3FsKCRjMm1iMmIyeF9uMW01LCAkMnB0NDJuNiwgJGNsMXNzYzJtYjJiMngsICRjaDQ1M2QxNF80ZHAxcjVudGNoMSwgJHNxbCwgJGMybDNtbl9uMW01LCAkYzJsM21uXzRkLCAkYzJtcDFyNV80ZCkNCiAgICB7DQogICAgICAgICRkMXQxICAgPSAnJzsNCiAgICAgICAgJHI1czNsdCA9ICR0aDRzLT5zcWxfczVsNWN0X3NxbCgkc3FsKTsNCiAgICAgICAgLy8kcjVzM2x0ID0gJHI1czNsdFswXTsNCiAgICAgICAgJGQxdDEgLj0gJzxzNWw1Y3QgY2wxc3M9IicgLiAkY2wxc3NjMm1iMmIyeCAuICciIG4xbTU9IicgLiAkYzJtYjJiMnhfbjFtNSAuICciIDRkPSInIC4gJGMybWIyYjJ4X24xbTUgLiAnIj4nOw0KICAgICAgICAkZDF0MSAuPSAkMnB0NDJuNjsNCiAgICAgICAgJGQxdDEgLj0gJHRoNHMtPlNoMndDMm1iMmIyeF9ENXEzeSgkcjVzM2x0LCAkNGRfcDFyNW50ID0gMCwgJGNoNDUzZDE0XzRkcDFyNW50Y2gxLCAkYzJsM21uX24xbTUsICRjMmwzbW5fNGQsICRjMm1wMXI1XzRkKTsNCiAgICAgICAgJGQxdDEgLj0gJzwvczVsNWN0Pic7DQoNCiAgICAgICAgcjV0M3JuICRkMXQxOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gQ3I1MXQ1X0MybWIyYjJ4X0Q1cTN5X1NxbF9uMl9zNWw1Y3QoJGMybWIyYjJ4X24xbTUsICQycHQ0Mm42LCAkY2wxc3NjMm1iMmIyeCwgJGNoNDUzZDE0XzRkcDFyNW50Y2gxLCAkc3FsLCAkYzJsM21uX24xbTUsICRjMmwzbW5fNGQsICRjMm1wMXI1XzRkKQ0KICAgIHsNCiAgICAgICAgJGQxdDEgICA9ICcnOw0KICAgICAgICAkcjVzM2x0ID0gJHRoNHMtPnNxbF9zNWw1Y3Rfc3FsKCRzcWwpOw0KICAgICAgICAvLyRyNXMzbHQgPSAkcjVzM2x0WzBdOw0KICAgICAgICAkZDF0MSAuPSAkMnB0NDJuNjsNCiAgICAgICAgJGQxdDEgLj0gJHRoNHMtPlNoMndDMm1iMmIyeF9ENXEzeSgkcjVzM2x0LCAkNGRfcDFyNW50ID0gMCwgJGNoNDUzZDE0XzRkcDFyNW50Y2gxLCAkYzJsM21uX24xbTUsICRjMmwzbW5fNGQsICRjMm1wMXI1XzRkKTsNCg0KICAgICAgICByNXQzcm4gJGQxdDE7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBDcjUxdDVfQzJtYjJiMnhfcjV0M3JuXzJuY2gxbmc1KCRjMm1iMmIyeF9uMW01LCAkdDFibDUsICRjMmwzbW5fbjFtNSwgJGMybDNtbl80ZCA9ICcnLCAkYzJtcDFyNV80ZCA9ICcnLCAkd2g1cjUgPSAnJywgJDJyZDVyID0gJycsICRjaDFuZzUgPSAnJykNCiAgICB7DQogICAgICAgICRkMXQxID0gJyc7DQogICAgICAgICRzcWwgID0gJ3M1bDVjdCAnIC4gJGMybDNtbl9uMW01IC4gJywnIC4gJGMybDNtbl80ZCAuICcgIGZyMm0gJyAuICR0MWJsNSAuICcgd2g1cjUgNj02ICc7DQogICAgICAgIDRmICgkd2g1cjUgIT0gJycpIHsNCiAgICAgICAgICAgICRzcWwgPSAkc3FsIC4gIiAxbmQgJHdoNXI1ICI7DQogICAgICAgIH0NCiAgICAgICAgNGYgKCQycmQ1ciAhPSAnJykgew0KICAgICAgICAgICAgJHNxbCAuPSAiIDJyZDVyIGJ5ICAkMnJkNXIgIjsNCiAgICAgICAgfQ0KICAgICAgICAkcjVzM2x0ID0gJHRoNHMtPnNxbF9zNWw1Y3Rfc3FsKCRzcWwpOw0KICAgICAgICA0ZiAoJGNoMW5nNSAhPSAnJykgew0KICAgICAgICAgICAgJGNoMW5nNSA9ICcgMm5jaDFuZzU9IicgLiAkY2gxbmc1IC4gJyIgJzsNCiAgICAgICAgfQ0KICAgICAgICAkZDF0MSAuPSAnPHM1bDVjdCBuMW01PSInIC4gJGMybWIyYjJ4X24xbTUgLiAnIiA0ZD0iJyAuICRjMm1iMmIyeF9uMW01IC4gJyIgJyAuICRjaDFuZzUgLiAnPic7DQogICAgICAgICRkMXQxIC49ICc8MnB0NDJuIHYxbDM1PSIiPlYzNCBsJiNhdWE7bmcgY2gmIzc4OGk7bi4uLjwvMnB0NDJuPic7DQogICAgICAgIDRmIChjMjNudCgkcjVzM2x0KSA+IDApIHsNCiAgICAgICAgICAgIGYycjUxY2ggKCRyNXMzbHQgMXMgJGs1eSA9PiAkNG5mMikgew0KICAgICAgICAgICAgICAgIDRmICgkNG5mMlskYzJsM21uXzRkXSA9PSAkYzJtcDFyNV80ZCkgew0KICAgICAgICAgICAgICAgICAgICAkZDF0MSAuPSAnPDJwdDQybiBzNWw1Y3Q1ZD0iczVsNWN0NWQiIHYxbDM1PSInIC4gJDRuZjJbJGMybDNtbl80ZF0gLiAnIj4nIC4gJDRuZjJbJGMybDNtbl9uMW01XSAuICc8LzJwdDQybj4nOw0KICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICRkMXQxIC49ICc8MnB0NDJuIHYxbDM1PSInIC4gJDRuZjJbJGMybDNtbl80ZF0gLiAnIj4nIC4gJDRuZjJbJGMybDNtbl9uMW01XSAuICc8LzJwdDQybj4nOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAkZDF0MSAuPSAnPC9zNWw1Y3Q+JzsNCg0KICAgICAgICByNXQzcm4gJGQxdDE7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBDcjUxdDVfUjFkNDJCM3R0Mm4oJGMybWIyYjJ4X24xbTUsICR0MWJsNSwgJGMybDNtbl9uMW01LCAkYzJsM21uXzRkID0gJycsICRjMm1wMXI1XzRkID0gJycsICR3aDVyNSA9ICcnLCAkMnJkNXIgPSAnJykNCiAgICB7DQogICAgICAgICRkMXQxID0gJyc7DQogICAgICAgICRzcWwgID0gJ3M1bDVjdCAnIC4gJGMybDNtbl9uMW01IC4gJywnIC4gJGMybDNtbl80ZCAuICcgIGZyMm0gJyAuICR0MWJsNSAuICcgd2g1cjUgNj02ICc7DQogICAgICAgIDRmICgkd2g1cjUgIT0gJycpIHsNCiAgICAgICAgICAgICRzcWwgPSAkc3FsIC4gIiAxbmQgJHdoNXI1ICI7DQogICAgICAgIH0NCiAgICAgICAgNGYgKCQycmQ1ciAhPSAnJykgew0KICAgICAgICAgICAgJHNxbCAuPSAiIDJyZDVyIGJ5ICAkMnJkNXIgIjsNCiAgICAgICAgfQ0KICAgICAgICAkcjVzM2x0ID0gJHRoNHMtPnNxbF9zNWw1Y3Rfc3FsKCRzcWwpOw0KICAgICAgICA0ZiAoYzIzbnQoJHI1czNsdCkgPiAwKSB7DQogICAgICAgICAgICBmMnI1MWNoICgkcjVzM2x0IDFzICRrNXkgPT4gJDRuZjIpIHsNCiAgICAgICAgICAgICAgICAkNGQgID0gJDRuZjJbJGMybDNtbl80ZF07DQogICAgICAgICAgICAgICAgJHQ1biA9ICQ0bmYyWyRjMmwzbW5fbjFtNV07DQogICAgICAgICAgICAgICAgNGYgKCQ0ZCA9PSAkYzJtcDFyNV80ZCkgew0KICAgICAgICAgICAgICAgICAgICAkZDF0MSAuPSAnPGwxYjVsIGNsMXNzPSJtMm4iPg0KICAgICAgICAgICAgICAgICAgICA8NG5wM3QgY2g1Y2s1ZD0iY2g1Y2s1ZCIgdHlwNT0icjFkNDIiIG4xbTU9IicgLiAkYzJtYjJiMnhfbjFtNSAuICciIHYxbDM1PSInIC4gJDRkIC4gJyIgNGQ9IicgLiAkYzJtYjJiMnhfbjFtNSAuICdfJyAuICRrNXkgLiAnIiAvPg0KICAgICAgICAgICAgICAgICAgICAnIC4gJHQ1biAuICc8L2wxYjVsPic7DQogICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgNGYgKCRyNXMzbHRbMF1bJGMybDNtbl80ZF0gPT0gJDRkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkZDF0MSAuPSAnDQogICAgICAgICAgICAgICAgICAgICAgICA8bDFiNWwgY2wxc3M9Im0ybiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDw0bnAzdCBjaDVjazVkPSJjaDVjazVkIiB0eXA1PSJyMWQ0MiIgbjFtNT0iJyAuICRjMm1iMmIyeF9uMW01IC4gJyIgdjFsMzU9IicgLiAkNGQgLiAnIiA0ZD0iJyAuICRjMm1iMmIyeF9uMW01IC4gJ18nIC4gJGs1eSAuICciIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICcgLiAkdDVuIC4gJzwvbDFiNWw+JzsNCiAgICAgICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRkMXQxIC49ICc8bDFiNWwgY2wxc3M9Im0ybiI+DQogICAgICAgICAgICAgICAgICAgICAgICA8NG5wM3QgdHlwNT0icjFkNDIiIG4xbTU9IicgLiAkYzJtYjJiMnhfbjFtNSAuICciIHYxbDM1PSInIC4gJDRkIC4gJyIgNGQ9IicgLiAkYzJtYjJiMnhfbjFtNSAuICdfJyAuICRrNXkgLiAnIiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgJyAuICR0NW4gLiAnPC9sMWI1bD4nOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICRkMXQxOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0TjFtNUZyMm1JRCgkdDFibDVfbjFtNSwgJGMybDNtbl9uMW01LCAkYzJsbDNtbl80ZCwgJDRkX2MybXAxcjUpDQogICAgew0KICAgICAgICAkc3FsICAgICAgPSAnczVsNWN0ICcgLiAkYzJsM21uX24xbTUgLiAnIGZyMm0gJyAuICR0MWJsNV9uMW01IC4gJyB3aDVyNSAnIC4gJGMybGwzbW5fNGQgLiAnID0gJyAuICQ0ZF9jMm1wMXI1Ow0KICAgICAgICAkZDF0MWY1NWQgPSAkdGg0cy0+ZjV0Y2goJHNxbCk7DQogICAgICAgICRyNXMzbHQgICA9ICRkMXQxZjU1ZFswXVskYzJsM21uX24xbTVdOw0KDQogICAgICAgIHI1dDNybiAkcjVzM2x0Ow0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0TjFtNUZyMm1TUUwoJHNxbCwgJGMybDNtbl9uMW01KQ0KICAgIHsNCiAgICAgICAgJHI1czNsdCAgID0gJyc7DQogICAgICAgICRkMXQxZjU1ZCA9ICR0aDRzLT5mNXRjaCgkc3FsKTsNCiAgICAgICAgNGYgKGMyM250KCRkMXQxZjU1ZCkgPiAwKSB7DQogICAgICAgICAgICAkcjVzM2x0ID0gJGQxdDFmNTVkWzBdWyRjMmwzbW5fbjFtNV07DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJHI1czNsdDsNCiAgICB9DQogICAgLy8gbDF5IHRoMm5nIHQ0biB0cjJuZyBiMW5nIHRoMm5nIHQ0biBjaDNuZw0KICAgIHAzYmw0YyBmM25jdDQybiBnNXR0aDJuZ3Q0bigkYzJsM21uX24xbTUsICRrNXkpDQogICAgew0KICAgICAgICAkc3FsID0gInM1bDVjdCAkYzJsM21uX24xbTUgZnIybSB0YmxfdGgybmd0NG5fbDFuZyAxcyAxDQogICAgICAgIDRubjVyIGoyNG4gdGJsX3RoMm5ndDRuIDFzIGIgT24gMS40ZHR5cDU9Yi40ZA0KICAgICAgICB3aDVyNSBiLjRkazV5bjFtNSA9ICciIC4gJGs1eSAuICInDQogICAgICAgIDFuZCAxbmg0NW4gPSA2DQogICAgICAgIDFuZCA0ZGwxbmcgPSAnIiAuICRfU0VTU0lPTlsnX2wxbmcnXSAuICInICI7DQogICAgICAgICRyNXMzbHQgICA9ICcnOw0KICAgICAgICAkZDF0MWY1NWQgPSAkdGg0cy0+ZjV0Y2goJHNxbCk7DQogICAgICAgIDRmIChjMjNudCgkZDF0MWY1NWQpID4gMCkgew0KICAgICAgICAgICAgJHI1czNsdCA9ICRkMXQxZjU1ZFswXVskYzJsM21uX24xbTVdOw0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICRyNXMzbHQ7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBnNXROMW01RnIybUlESk9JTigkdDFibDVfbjFtNTYsICR0MWJsNV9uMW1hLCAkMm4sICRjMmwzbW5fbjFtNSwgJGMybGwzbW5fNGQsICQ0ZF9jMm1wMXI1KQ0KICAgIHsNCiAgICAgICAgJHNxbCAgICAgID0gJ3M1bDVjdCAnIC4gJGMybDNtbl9uMW01IC4gJyBmcjJtICcgLiAkdDFibDVfbjFtNTYgLiAnIElOTkVSIEpPSU4gJyAuICR0MWJsNV9uMW1hIC4gJyAnIC4gJDJuIC4gJyAgd2g1cjUgJyAuICRjMmxsM21uXzRkIC4gJyA9ICcgLiAkNGRfYzJtcDFyNTsNCiAgICAgICAgJGQxdDFmNTVkID0gJHRoNHMtPmY1dGNoKCRzcWwpOw0KICAgICAgICAkcjVzM2x0ICAgPSAkZDF0MWY1NWRbMF1bJGMybDNtbl9uMW01XTsNCg0KICAgICAgICByNXQzcm4gJHI1czNsdDsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIGc1dE4xbTVGcjJtQzJsbDNtbk4xbTUoJHQxYmw1X24xbTUsICRjMmwzbW5fbjFtNSkNCiAgICB7DQogICAgICAgICRzcWwgICAgPSAnczVsNWN0ICcgLiAkYzJsM21uX24xbTUgLiAnIGZyMm0gJyAuICR0MWJsNV9uMW01Ow0KICAgICAgICAkZDF0MSAgID0gJHRoNHMtPmY1dGNoKCRzcWwpOw0KICAgICAgICAkcjVzM2x0ID0gJGQxdDFbMF1bJGMybDNtbl9uMW01XTsNCg0KICAgICAgICByNXQzcm4gJHI1czNsdDsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIENoNWNrXzV4NHN0c19mNGw1KCQzcmxfZjRsNSkNCiAgICB7DQogICAgICAgIDRmICgkM3JsX2Y0bDUgIT0gJycpIHsNCiAgICAgICAgICAgIDRmICghZjRsNV81eDRzdHMoJDNybF9mNGw1KSkgew0KICAgICAgICAgICAgICAgICQzcmwgPSAnNG0xZzVzL2Q1ZjEzbHQucG5nJzsNCiAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgJDNybCA9ICQzcmxfZjRsNTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICQzcmwgPSAnNG0xZzVzL2Q1ZjEzbHQucG5nJzsNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkM3JsOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczJzMW5oXzRkKCQ0ZCwgJGc1dDRkLCAkbDVuX2c1dDRkKQ0KICAgIHsNCiAgICAgICAgNGYgKCInIiAuICQ0ZCAuICInIiA9PSAiJyIgLiBzM2JzdHIoJGc1dDRkLCAwLCAkbDVuX2c1dDRkKSAuICInIikgew0KICAgICAgICAgICAgcjV0M3JuIDY7DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICByNXQzcm4gMDsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gRzV0T1AoJDNybCwgJDNybF9uMW01KQ0KICAgIHsNCiAgICAgICAgJDJwICAgICA9ICcnOw0KICAgICAgICAkNGR0eXA1ID0gJyc7DQogICAgICAgIDRmICgkM3JsICE9ICcnKSB7DQogICAgICAgICAgICAkNGR0eXA1ID0gJHRoNHMtPmc1dE4xbTVGcjJtSUQoJ3RibF9kMW5obTNjJywgJzRkdHlwNScsICQzcmxfbjFtNSwgIiciIC4gJDNybCAuICInIik7DQogICAgICAgICAgICA0ZiAoJDRkdHlwNSA9PSBuM2xsKSB7DQogICAgICAgICAgICAgICAgNGYgKCQzcmxfbjFtNSA9PSAnM3JsX3ZuJykgew0KICAgICAgICAgICAgICAgICAgICAkM3JsX24xbTUgPSAnM3JsXzVuJzsNCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAkM3JsX24xbTUgPSAnM3JsX3ZuJzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJDRkdHlwNSA9ICR0aDRzLT5nNXROMW01RnIybUlEKCd0YmxfZDFuaG0zYycsICc0ZHR5cDUnLCAkM3JsX24xbTUsICInIiAuICQzcmwgLiAiJyIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJDJwID0gJHRoNHMtPmc1dE4xbTVGcjJtSUQoJ3RibF9kMW5obTNjX3R5cDUnLCAnMnAnLCAnNGQnLCAiJyIgLiAkNGR0eXA1IC4gIiciKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkMnA7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBHNXRBQ1QoJDNybCkNCiAgICB7DQogICAgICAgICQycCA9ICcnOw0KICAgICAgICA0ZiAoJDNybCAhPSAnJykgew0KICAgICAgICAgICAgJDJwID0gJHRoNHMtPmc1dE4xbTVGcjJtSUQoJ3RibF9kMW5obTNjJywgJzFjdCcsICczcmxfdm4nLCAiJyIgLiAkM3JsIC4gIiciKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkMnA7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBHNXRJRCgkM3JsLCAkM3JsX24xbTUpDQogICAgew0KICAgICAgICAkNGQgPSAnJzsNCiAgICAgICAgNGYgKCQzcmwgIT0gJycpIHsNCiAgICAgICAgICAgICQ0ZCA9ICR0aDRzLT5nNXROMW01RnIybUlEKCd0YmxfZDFuaG0zYycsICc0ZCcsICQzcmxfbjFtNSwgIiciIC4gJDNybCAuICInIik7DQogICAgICAgIH0NCiAgICAgICAgNGYgKCQ0ZCA9PSAnJykgew0KICAgICAgICAgICAgNGYgKCQzcmxfbjFtNSA9PSAnM3JsX3ZuJykgew0KICAgICAgICAgICAgICAgICQzcmxfbjFtNSA9ICczcmxfNW4nOw0KICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAkM3JsX24xbTUgPSAnM3JsX3ZuJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICQ0ZCA9ICR0aDRzLT5nNXROMW01RnIybUlEKCd0YmxfZDFuaG0zYycsICc0ZCcsICQzcmxfbjFtNSwgIiciIC4gJDNybCAuICInIik7DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJDRkOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gRzV0RDF0NVQ0bTVzKCkNCiAgICB7DQogICAgICAgICRzICAgID0gJ1NFTEVDVCBOT1coKSAxcyBkMXQ1JzsNCiAgICAgICAgJGQxdDEgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHMpOw0KDQogICAgICAgIHI1dDNybiAkZDF0MVswXVsnZDF0NSddOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gTmcxeUg0NW5UMTRNeXNxbCgpDQogICAgew0KICAgICAgICBkMXQ1X2Q1ZjEzbHRfdDRtNXoybjVfczV0KCdBczQxL0gyX0NoNF9NNG5oJyk7DQoNCiAgICAgICAgcjV0M3JuIGQxdDUoJ1kvbS9kIEg6NDpzJywgdDRtNSgpKTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIENoM3k1bk5nMXlUM015c3FsKCR2MWwzNSA9ICcnKQ0KICAgIHsNCiAgICAgICAgJDJyNGc0bjFsRDF0NSA9IHMzYnN0cigkdjFsMzUsIDAsIDYwKTsNCg0KICAgICAgICByNXQzcm4gZDF0NSgnZC9tL1knLCBzdHJ0MnQ0bTUoJDJyNGc0bjFsRDF0NSkpOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gRzV0RDF0NSgpDQogICAgew0KICAgICAgICAkcyAgICA9ICdTRUxFQ1QgYzNyZDF0NSgpIDFzIGQxdDUnOw0KICAgICAgICAkZDF0MSA9ICR0aDRzLT5zcWxfczVsNWN0X3NxbCgkcyk7DQoNCiAgICAgICAgcjV0M3JuICRkMXQxWzBdWydkMXQ1J107DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBHNXREMXQ1ZjJybTF0KCRmMnJtMXQsICRkMXQ1djFsMzUpDQogICAgew0KICAgICAgICA0ZiAoc3RyY21wKCRmMnJtMXQsICcnKSA9PSAwKSB7DQogICAgICAgICAgICAkZjJybTF0ID0gJ2QtbS1ZJzsNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiBkMXQ1KCRmMnJtMXQsIHN0cnQydDRtNSgkZDF0NXYxbDM1KSk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBEMXkoJG5nMXloNDVudDE0KQ0KICAgIHsNCiAgICAgICAgJHMgICAgPSAiU0VMRUNUIERBWSgkbmcxeWg0NW50MTQpIDFzIGQxeSI7DQogICAgICAgICRkMXQxID0gJHRoNHMtPnNxbF9zNWw1Y3Rfc3FsKCRzKTsNCg0KICAgICAgICByNXQzcm4gJGQxdDFbMF1bJ2QxeSddOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gRzV0RDF5T2ZZNTFyKCRkMXQ1dDRtNSkNCiAgICB7DQogICAgICAgICRzICAgID0gIlNFTEVDVCBEQVlPRllFQVIoe2QgJyRkMXQ1dDRtNSd9KSAxcyBkMXkyZnk1MXIiOw0KICAgICAgICAkZDF0MSA9ICR0aDRzLT5zcWxfczVsNWN0X3NxbCgkcyk7DQoNCiAgICAgICAgcjV0M3JuICRkMXQxWzBdWydkMXkyZnk1MXInXTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIGMybnY1cnRfZDF0NXQ0bTUoJHN0cikNCiAgICB7DQogICAgICAgIGw0c3QoJGQxdDUsICR0NG01KSAgICAgICAgICAgID0gNXhwbDJkNSgnICcsICRzdHIpOw0KICAgICAgICBsNHN0KCR5NTFyLCAkbTJudGgsICRkMXkpICAgICA9IDV4cGwyZDUoJy0nLCAkZDF0NSk7DQogICAgICAgIGw0c3QoJGgyM3IsICRtNG4zdDUsICRzNWMybmQpID0gNXhwbDJkNSgnOicsICR0NG01KTsNCiAgICAgICAgJHQ0bTVzdDFtcCAgICAgICAgICAgICAgICAgICAgPSBta3Q0bTUoJGgyM3IsICRtNG4zdDUsICRzNWMybmQsICRtMm50aCwgJGQxeSwgJHk1MXIpOw0KDQogICAgICAgIHI1dDNybiAkdDRtNXN0MW1wOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gbmcxeWQxbmcoJG5nMXloNDVudDE0LCAkbmcxeXEzMWtoMywgJDFycjF5bjFtNSkNCiAgICB7DQogICAgICAgICR0NG01c19uZzF5aDQ1bnQxNCA9ICR0aDRzLT5jMm52NXJ0X2QxdDV0NG01KCRuZzF5aDQ1bnQxNCk7DQogICAgICAgICR0NG01c19uZzF5cTMxa2gzICA9ICR0aDRzLT5jMm52NXJ0X2QxdDV0NG01KCRuZzF5cTMxa2gzKTsNCiAgICAgICAgJHQ0bTVzX2toMjFuZ2MxY2ggID0gJHQ0bTVzX25nMXloNDVudDE0IC0gJHQ0bTVzX25nMXlxMzFraDM7DQogICAgICAgICRraDIxbmdjMWNobmcxeSAgICA9ICR0aDRzLT5LaDIxbmdDMWNoTmcxeSgkbmcxeWg0NW50MTQsICRuZzF5cTMxa2gzKTsNCiAgICAgICAgJHRoMyAgICAgICAgICAgICAgID0gJHRoNHMtPmc1dEQxeU4xbTUoJG5nMXlxMzFraDMpOw0KICAgICAgICA0ZiAoJGtoMjFuZ2MxY2huZzF5IDwgbzYpIHsNCiAgICAgICAgICAgICRnNDIgID0gZmwyMnIoKCR0NG01c19raDIxbmdjMWNoIC0gKCRraDIxbmdjMWNobmcxeSAqIDhldTAwKSkgLyBvZTAwKTsNCiAgICAgICAgICAgICRwaDN0ID0gYzU0bCgoKCR0NG01c19raDIxbmdjMWNoKSAtICgoJGtoMjFuZ2MxY2huZzF5ICogOGV1MDApICsgKCRnNDIgKiBvZTAwKSkpIC8gZTApOw0KICAgICAgICAgICAgNGYgKCRraDIxbmdjMWNobmcxeSA+IDApIHsNCiAgICAgICAgICAgICAgICAkaDQ1bnRoNG5nMXkgLj0gJGtoMjFuZ2MxY2huZzF5IC4gJDFycjF5bjFtNVsnbmcxeXRyMzJjJ10gLiAnIHwgJyAuICR0aDMgLiAnLCAnIC4gJHRoNHMtPkc1dEQxdDVmMnJtMXQoJ2QvbS9ZIC0gaDo0IEEnLCAkbmcxeXEzMWtoMyk7DQogICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICRoNDVudGg0bmcxeSAuPSAkMXJyMXluMW01WydjMWNoZDF5J107DQogICAgICAgICAgICAgICAgNGYgKCRnNDIgPiAwKSB7DQogICAgICAgICAgICAgICAgICAgICRoNDVudGg0bmcxeSAuPSAiJm5ic3A7Ii4kZzQyLiImbmJzcDsiLiAkMXJyMXluMW01WydnNDInXTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgNGYgKCRwaDN0ID4gMCkgew0KICAgICAgICAgICAgICAgICAgICAkaDQ1bnRoNG5nMXkgLj0gIiZuYnNwOyIuJHBoM3QgLiImbmJzcDsiLiAkMXJyMXluMW01WydwaDN0J107DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgJGg0NW50aDRuZzF5ID0gJHRoMyAuICcsICcgLiAkdGg0cy0+RzV0RDF0NWYycm0xdCgnZC9tL1kgLSBoOjQgQScsICRuZzF5cTMxa2gzKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkaDQ1bnRoNG5nMXk7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBLaDIxbmdDMWNoTmcxeSgkbmcxeWg0NW50MTQsICRuZzF5cTMxa2gzKQ0KICAgIHsNCiAgICAgICAgJHMgICAgPSAiU0VMRUNUIERBVEVESUZGKCckbmcxeWg0NW50MTQnLCckbmcxeXEzMWtoMycpIjsNCiAgICAgICAgJGQxdDEgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHMpOw0KDQogICAgICAgIHI1dDNybiAkZDF0MVswXVsiREFURURJRkYoJyRuZzF5aDQ1bnQxNCcsJyRuZzF5cTMxa2gzJykiXTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIFRyM1RoNTJOZzF5SDQ1blQxNCgkbmcxeWg0NW50MTQsICRzMm5nMXljMW5sMzRsMTQpDQogICAgew0KICAgICAgICAkc19uZzF5cTMxa2gzID0gInM1bDVjdCBEQVRFX1NVQignIiAuICRuZzF5aDQ1bnQxNCAuICInLElOVEVSVkFMICRzMm5nMXljMW5sMzRsMTQgREFZKSBBUyBOR0FZICI7DQogICAgICAgICRkMXQxICAgICAgICAgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHNfbmcxeXEzMWtoMyk7DQoNCiAgICAgICAgcjV0M3JuICRkMXQxWzBdWydOR0FZJ107DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBDMm5nVGg1Mk5nMXlINDVuVDE0KCRuZzF5aDQ1bnQxNCwgJHMybmcxeWMxbmMybmd0aDVtKQ0KICAgIHsNCiAgICAgICAgJHNfbmcxeXEzMWtoMyA9ICJzNWw1Y3QgREFURV9BREQoJyIgLiAkbmcxeWg0NW50MTQgLiAiJyxJTlRFUlZBTCAkczJuZzF5YzFubDM0bDE0IERBWSkgQVMgTkdBWSAiOw0KICAgICAgICAkZDF0MSAgICAgICAgID0gJHRoNHMtPnNxbF9zNWw1Y3Rfc3FsKCRzX25nMXlxMzFraDMpOw0KDQogICAgICAgIHI1dDNybiAkZDF0MVswXVsnTkdBWSddOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gTDF5TmcxeUg0NW5UMTRDMzFUMzFuKCRuZzF5KQ0KICAgIHsNCiAgICAgICAgJHNfbmcxeWMzMXQzMW4gPSAiczVsNWN0IERBWU9GV0VFSygnJG5nMXknKSAxcyBuZzF5dHIybmd0MzFuIjsNCiAgICAgICAgJGQxdDEgICAgICAgICAgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHNfbmcxeWMzMXQzMW4pOw0KDQogICAgICAgIHI1dDNybiAkZDF0MVswXVsnbmcxeXRyMm5ndDMxbiddOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gUzJOZzF5VHIybmdUaDFuZygkbmcxeTRucDN0KQ0KICAgIHsNCiAgICAgICAgJHMybmcxeXRyMm5ndGgxbmcgPSAwOw0KICAgICAgICAkbjFtaDQ1bnQxNCAgICAgICA9IHMzYnN0cigkbmcxeTRucDN0LCAwLCB1KTsNCiAgICAgICAgJHRoMW5naDQ1bnQxNCAgICAgPSBzM2JzdHIoJG5nMXk0bnAzdCwgaSwgYSk7DQogICAgICAgIDRmICgkdGgxbmdoNDVudDE0ID09IDYgMnIgJHRoMW5naDQ1bnQxNCA9PSBvIDJyICR0aDFuZ2g0NW50MTQgPT0gaSAyciAkdGgxbmdoNDVudDE0ID09IDcgMnIgJHRoMW5naDQ1bnQxNCA9PSA4IDJyICR0aDFuZ2g0NW50MTQgPT0gNjAgMnIgJHRoMW5naDQ1bnQxNCA9PSA2YSkgew0KICAgICAgICAgICAgJHMybmcxeXRyMm5ndGgxbmcgPSBvNjsNCiAgICAgICAgfSA1bHM1NGYgKCR0aDFuZ2g0NW50MTQgPT0gYSkgew0KICAgICAgICAgICAgNGYgKCgkbjFtaDQ1bnQxNCAlIHUgPT0gMCkgJiYgKCRuMW1oNDVudDE0ICUgNjAwICE9IDApIDJyICgkbjFtaDQ1bnQxNCAlIHUwMCA9PSAwKSkgew0KICAgICAgICAgICAgICAgICRzMm5nMXl0cjJuZ3RoMW5nID0gYTk7DQogICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICRzMm5nMXl0cjJuZ3RoMW5nID0gYTg7DQogICAgICAgICAgICB9DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkczJuZzF5dHIybmd0aDFuZyA9IG8wOw0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICRzMm5nMXl0cjJuZ3RoMW5nOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gQ2gzeTVuVk5EdGgxbmhVU0QoJHQ0NW52bmQsICR0NGc0MTNkcywgJG5nMm5uZzMpDQogICAgew0KICAgICAgICA0ZiAoJHQ0NW52bmQgIT0gJycpIHsNCiAgICAgICAgICAgIDRmICgkbmcybm5nMyA9PSAnNW5nJykgew0KICAgICAgICAgICAgICAgICRyNXMzbHQgPSAnJCcgLiBuM21iNXJfZjJybTF0KCgkdDQ1bnZuZCAvICR0NGc0MTNkcyksIGEsICcuJywgJycpOw0KICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAkcjVzM2x0ID0gbjNtYjVyX2Yycm0xdCgkdDQ1bnZuZCkgLiAnIHZuZCc7DQogICAgICAgICAgICB9DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkcjVzM2x0ID0gJ0MxbGwnOw0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICRyNXMzbHQ7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBnNXREMXlOMW01KCRuZzF5MSkNCiAgICB7DQogICAgICAgICRzICAgICAgICAgICA9ICJzNWw1Y3QgRDF5TjFtNSgnIiAuICRuZzF5MSAuICInKSAxcyBuZzF5eCI7DQogICAgICAgICRkMXQxICAgICAgICA9ICR0aDRzLT5zcWxfczVsNWN0X3NxbCgkcyk7DQogICAgICAgICRyNXMzbHRfbmcxeSA9ICRkMXQxWzBdWyduZzF5eCddOw0KICAgICAgICAkMXJyICAgICAgICAgPSAxcnIxeSgNCiAgICAgICAgICAgICdTM25kMXknICAgID0+ICdDaCYjNzk2NjsgbmgmIzc4aW87dCcsDQogICAgICAgICAgICAnTTJuZDF5JyAgICA9PiAnVGgmIzc5Nm87IGgxNCcsDQogICAgICAgICAgICAnVDM1c2QxeScgICA9PiAnVGgmIzc5Nm87IGIxJywNCiAgICAgICAgICAgICdXNWRuNXNkMXknID0+ICdUaCYjNzk2bzsgdCYjdW9hOycsDQogICAgICAgICAgICAnVGgzcnNkMXknICA9PiAnVGgmIzc5Nm87IG4mI2FpOTttJywNCiAgICAgICAgICAgICdGcjRkMXknICAgID0+ICdUaCYjNzk2bzsgcyYjYWFpOzMnLA0KICAgICAgICAgICAgJ1MxdDNyZDF5JyAgPT4gJ1RoJiM3OTZvOyBiJiM3OHVvO3knLA0KICAgICAgICApOw0KDQogICAgICAgIHI1dDNybiAkMXJyWyRyNXMzbHRfbmcxeV07DQogICAgICAgIC8vcjV0M3JuICRyNXMzbHRfbmcxeTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIFRoMXlEMjRVUkwoJGI0NW4pDQogICAgew0KICAgICAgICA0ZiAoJGI0NW4gIT0gJycpIHsNCiAgICAgICAgICAgICRtMXJUVjQ1dCA9IDFycjF5KA0KICAgICAgICAgICAgICAgICcmI2FhdTsnLCAnJiNhYWk7JywgJyYjNzh1NjsnLCAnJiM3OHVvOycsICcmI2FhNzsnLCAnJiNhYWU7JywgJyYjNzh1NzsnLCAnJiM3OHVpOycsICcmIzc4aW87JywgJyYjNzh1OTsnLCAnJiM3OGk2OycsICcmI2FpOTsnLCAnJiM3OGk3OycsICcmIzc4aWk7JywgJyYjNzhlbzsnLCAnJiM3OGk5OycsICcmIzc4ZTY7JywgJyYjYW9hOycsICcmI2FvbzsnLCAnJiM3OGVpOycsICcmIzc4ZTc7JywgJyYjNzhlOTsnLCAnJiNhb3U7JywgJyYjNzg3bzsnLCAnJiM3ODc2OycsICcmIzc4Nzk7JywgJyYjNzg3aTsnLCAnJiM3ODc3OycsICcmI2FvZTsnLCAnJiNhbzc7JywgJyYjNzg4bzsnLCAnJiM3ODg2OycsICcmI2E5NzsnLCAnJiNhdWE7JywgJyYjYXVvOycsICcmIzc4OGk7JywgJyYjNzg4NzsnLCAnJiNhdWk7JywgJyYjYXV1OycsICcmIzc4OTY7JywgJyYjNzg4OTsnLCAnJiM3ODk3OycsICcmIzc4OW87JywgJyYjNzg5aTsnLCAnJiN1Njc7JywgJyYjNzkwNjsnLCAnJiM3ODk5OycsICcmIzc5MDc7JywgJyYjNzkwbzsnLCAnJiM3OTBpOycsICcmI2F1OTsnLCAnJiNhaTA7JywgJyYjNzkwOTsnLCAnJiM3OTY2OycsICcmI29lNjsnLCAnJiN1b2E7JywgJyYjNzk2aTsnLCAnJiM3OTZvOycsICcmIzc5YTY7JywgJyYjNzk2NzsnLCAnJiM3OTY5OycsICcmIzc5YW87JywgJyYjYWlvOycsICcmIzc5YWk7JywgJyYjNzlhNzsnLCAnJiM3OWE5OycsICcmI2E3bzsnLCAnJiM2OWE7JywgJyYjNjlvOycsICcmIzc4dTA7JywgJyYjNzh1YTsnLCAnJiM2OWk7JywgJyYjNjl1OycsICcmIzc4dWU7JywgJyYjNzh1dTsnLCAnJiM3OGlhOycsICcmIzc4dTg7JywgJyYjNzhpMDsnLCAnJiNhaTg7JywgJyYjNzhpZTsnLCAnJiM3OGl1OycsICcmIzc4ZWE7JywgJyYjNzhpODsnLCAnJiM3OGUwOycsICcmI2EwMDsnLCAnJiNhMDY7JywgJyYjNzhldTsnLCAnJiM3OGVlOycsICcmIzc4ZTg7JywgJyYjYTBhOycsICcmIzc4N2E7JywgJyYjNzg3MDsnLCAnJiM3ODc4OycsICcmIzc4N3U7JywgJyYjNzg3ZTsnLCAnJiNhMHU7JywgJyYjYTBpOycsICcmIzc4OGE7JywgJyYjNzg4MDsnLCAnJiNhOWU7JywgJyYjYTYwOycsICcmI2E2NjsnLCAnJiM3ODh1OycsICcmIzc4OGU7JywgJyYjYTZvOycsICcmI2E2YTsnLCAnJiM3ODkwOycsICcmIzc4ODg7JywgJyYjNzg5ZTsnLCAnJiM3ODlhOycsICcmIzc4OXU7JywgJyYjdTZlOycsICcmIzc5MDA7JywgJyYjNzg5ODsnLCAnJiM3OTBlOycsICcmIzc5MGE7JywgJyYjNzkwdTsnLCAnJiNhNjc7JywgJyYjYTY4OycsICcmIzc5MDg7JywgJyYjNzk2MDsnLCAnJiNvZTA7JywgJyYjdW82OycsICcmIzc5NnU7JywgJyYjNzk2YTsnLCAnJiM3OWEwOycsICcmIzc5NmU7JywgJyYjNzk2ODsnLCAnJiM3OWFhOycsICcmI2FhNjsnLCAnJiM3OWF1OycsICcmIzc5YWU7JywgJyYjNzlhODsnLCAnJiNhN2E7JywgJyEnLCAnQCcsICcjJywgJyQnLCAnJScsICdeJywgJyYnLCAnKicsICcoJywgJyknKTsNCiAgICAgICAgICAgICRtMXJLMkQxMyA9IDFycjF5KA0KICAgICAgICAgICAgICAgICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnNScsICc1JywgJzUnLCAnNScsICc1JywgJzUnLCAnNScsICc1JywgJzUnLCAnNScsICc1JywgJzQnLCAnNCcsICc0JywgJzQnLCAnNCcsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMycsICczJywgJzMnLCAnMycsICczJywgJzMnLCAnMycsICczJywgJzMnLCAnMycsICczJywgJ3knLCAneScsICd5JywgJ3knLCAneScsICdkJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdFJywgJ0UnLCAnRScsICdFJywgJ0UnLCAnRScsICdFJywgJ0UnLCAnRScsICdFJywgJ0UnLCAnSScsICdJJywgJ0knLCAnSScsICdJJywgJ08nLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ08nLCAnTycsICdVJywgJ1UnLCAnVScsICdVJywgJ1UnLCAnVScsICdVJywgJ1UnLCAnVScsICdVJywgJ1UnLCAnWScsICdZJywgJ1knLCAnWScsICdZJywgJ0QnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJyk7DQogICAgICAgICAgICAkYjQ1biA9IHRyNG0oJGI0NW4pOw0KICAgICAgICAgICAgJGI0NW4gPSBzdHJfcjVwbDFjNSgnLycsICcnLCAkYjQ1bik7DQogICAgICAgICAgICAkYjQ1biA9IHN0cl9yNXBsMWM1KCc6JywgJycsICRiNDVuKTsNCiAgICAgICAgICAgICRiNDVuID0gc3RyX3I1cGwxYzUoJyEnLCAnJywgJGI0NW4pOw0KICAgICAgICAgICAgJGI0NW4gPSBzdHJfcjVwbDFjNSgnKCcsICcnLCAkYjQ1bik7DQogICAgICAgICAgICAkYjQ1biA9IHN0cl9yNXBsMWM1KCcpJywgJycsICRiNDVuKTsNCiAgICAgICAgICAgICRiNDVuID0gc3RyX3I1cGwxYzUoJG0xclRWNDV0LCAkbTFySzJEMTMsICRiNDVuKTsNCiAgICAgICAgICAgICRiNDVuID0gc3RyX3I1cGwxYzUoJy0nLCAnJywgJGI0NW4pOw0KICAgICAgICAgICAgJGI0NW4gPSBzdHJfcjVwbDFjNSgnICAnLCAnICcsICRiNDVuKTsNCiAgICAgICAgICAgICRiNDVuID0gc3RyX3I1cGwxYzUoJyAnLCAnLScsICRiNDVuKTsNCiAgICAgICAgICAgICRiNDVuID0gc3RyX3I1cGwxYzUoJyUnLCAnLScsICRiNDVuKTsNCiAgICAgICAgICAgICRiNDVuID0gc3RyX3I1cGwxYzUoIiciLCAnJywgJGI0NW4pOw0KICAgICAgICAgICAgJGI0NW4gPSBzdHJfcjVwbDFjNSgnkycsICcnLCAkYjQ1bik7DQogICAgICAgICAgICAkYjQ1biA9IHN0cl9yNXBsMWM1KCeUJywgJycsICRiNDVuKTsNCiAgICAgICAgICAgICRiNDVuID0gc3RyX3I1cGwxYzUoJywnLCAnJywgJGI0NW4pOw0KICAgICAgICAgICAgJGI0NW4gPSBzdHJfcjVwbDFjNSgnLicsICcnLCAkYjQ1bik7DQogICAgICAgICAgICAkYjQ1biA9IHN0cl9yNXBsMWM1KCciJywgJycsICRiNDVuKTsNCiAgICAgICAgICAgICRiNDVuID0gc3RyX3I1cGwxYzUoJ1xcJywgJycsICRiNDVuKTsNCiAgICAgICAgICAgICRiNDVuID0gc3RyX3I1cGwxYzUoJy8vJywgJycsICRiNDVuKTsNCiAgICAgICAgICAgICRiNDVuID0gc3RyX3I1cGwxYzUoJz8nLCAnJywgJGI0NW4pOw0KICAgICAgICAgICAgJGI0NW4gPSBzdHJfcjVwbDFjNSgnJicsICcnLCAkYjQ1bik7DQoNCiAgICAgICAgICAgIHI1dDNybiAkYjQ1bjsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gVGgxeUQyNFVSTF9UM0toMjEoJGI0NW4pDQogICAgew0KICAgICAgICA0ZiAoJGI0NW4gIT0gJycpIHsNCiAgICAgICAgICAgICRtMXJUVjQ1dCA9IDFycjF5KA0KICAgICAgICAgICAgICAgICcmI2FhdTsnLCAnJiNhYWk7JywgJyYjNzh1NjsnLCAnJiM3OHVvOycsICcmI2FhNzsnLCAnJiNhYWU7JywgJyYjNzh1NzsnLCAnJiM3OHVpOycsICcmIzc4aW87JywgJyYjNzh1OTsnLCAnJiM3OGk2OycsICcmI2FpOTsnLCAnJiM3OGk3OycsICcmIzc4aWk7JywgJyYjNzhlbzsnLCAnJiM3OGk5OycsICcmIzc4ZTY7JywgJyYjYW9hOycsICcmI2FvbzsnLCAnJiM3OGVpOycsICcmIzc4ZTc7JywgJyYjNzhlOTsnLCAnJiNhb3U7JywgJyYjNzg3bzsnLCAnJiM3ODc2OycsICcmIzc4Nzk7JywgJyYjNzg3aTsnLCAnJiM3ODc3OycsICcmI2FvZTsnLCAnJiNhbzc7JywgJyYjNzg4bzsnLCAnJiM3ODg2OycsICcmI2E5NzsnLCAnJiNhdWE7JywgJyYjYXVvOycsICcmIzc4OGk7JywgJyYjNzg4NzsnLCAnJiNhdWk7JywgJyYjYXV1OycsICcmIzc4OTY7JywgJyYjNzg4OTsnLCAnJiM3ODk3OycsICcmIzc4OW87JywgJyYjNzg5aTsnLCAnJiN1Njc7JywgJyYjNzkwNjsnLCAnJiM3ODk5OycsICcmIzc5MDc7JywgJyYjNzkwbzsnLCAnJiM3OTBpOycsICcmI2F1OTsnLCAnJiNhaTA7JywgJyYjNzkwOTsnLCAnJiM3OTY2OycsICcmI29lNjsnLCAnJiN1b2E7JywgJyYjNzk2aTsnLCAnJiM3OTZvOycsICcmIzc5YTY7JywgJyYjNzk2NzsnLCAnJiM3OTY5OycsICcmIzc5YW87JywgJyYjYWlvOycsICcmIzc5YWk7JywgJyYjNzlhNzsnLCAnJiM3OWE5OycsICcmI2E3bzsnLCAnJiM2OWE7JywgJyYjNjlvOycsICcmIzc4dTA7JywgJyYjNzh1YTsnLCAnJiM2OWk7JywgJyYjNjl1OycsICcmIzc4dWU7JywgJyYjNzh1dTsnLCAnJiM3OGlhOycsICcmIzc4dTg7JywgJyYjNzhpMDsnLCAnJiNhaTg7JywgJyYjNzhpZTsnLCAnJiM3OGl1OycsICcmIzc4ZWE7JywgJyYjNzhpODsnLCAnJiM3OGUwOycsICcmI2EwMDsnLCAnJiNhMDY7JywgJyYjNzhldTsnLCAnJiM3OGVlOycsICcmIzc4ZTg7JywgJyYjYTBhOycsICcmIzc4N2E7JywgJyYjNzg3MDsnLCAnJiM3ODc4OycsICcmIzc4N3U7JywgJyYjNzg3ZTsnLCAnJiNhMHU7JywgJyYjYTBpOycsICcmIzc4OGE7JywgJyYjNzg4MDsnLCAnJiNhOWU7JywgJyYjYTYwOycsICcmI2E2NjsnLCAnJiM3ODh1OycsICcmIzc4OGU7JywgJyYjYTZvOycsICcmI2E2YTsnLCAnJiM3ODkwOycsICcmIzc4ODg7JywgJyYjNzg5ZTsnLCAnJiM3ODlhOycsICcmIzc4OXU7JywgJyYjdTZlOycsICcmIzc5MDA7JywgJyYjNzg5ODsnLCAnJiM3OTBlOycsICcmIzc5MGE7JywgJyYjNzkwdTsnLCAnJiNhNjc7JywgJyYjYTY4OycsICcmIzc5MDg7JywgJyYjNzk2MDsnLCAnJiNvZTA7JywgJyYjdW82OycsICcmIzc5NnU7JywgJyYjNzk2YTsnLCAnJiM3OWEwOycsICcmIzc5NmU7JywgJyYjNzk2ODsnLCAnJiM3OWFhOycsICcmI2FhNjsnLCAnJiM3OWF1OycsICcmIzc5YWU7JywgJyYjNzlhODsnLCAnJiNhN2E7JywgJyEnLCAnQCcsICcjJywgJyQnLCAnJScsICdeJywgJyYnLCAnKicsICcoJywgJyknLCApOw0KICAgICAgICAgICAgJG0xcksyRDEzID0gMXJyMXkoDQogICAgICAgICAgICAgICAgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICc1JywgJzUnLCAnNScsICc1JywgJzUnLCAnNScsICc1JywgJzUnLCAnNScsICc1JywgJzUnLCAnNCcsICc0JywgJzQnLCAnNCcsICc0JywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICczJywgJzMnLCAnMycsICczJywgJzMnLCAnMycsICczJywgJzMnLCAnMycsICczJywgJzMnLCAneScsICd5JywgJ3knLCAneScsICd5JywgJ2QnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0UnLCAnRScsICdFJywgJ0UnLCAnRScsICdFJywgJ0UnLCAnRScsICdFJywgJ0UnLCAnRScsICdJJywgJ0knLCAnSScsICdJJywgJ0knLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ1UnLCAnVScsICdVJywgJ1UnLCAnVScsICdVJywgJ1UnLCAnVScsICdVJywgJ1UnLCAnVScsICdZJywgJ1knLCAnWScsICdZJywgJ1knLCAnRCcsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCApOw0KICAgICAgICAgICAgJGI0NW4gPSB0cjRtKCRiNDVuKTsNCiAgICAgICAgICAgICRiNDVuID0gc3RyX3I1cGwxYzUoJG0xclRWNDV0LCAkbTFySzJEMTMsICRiNDVuKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkYjQ1bjsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIE0xbmdLaDJuZ0QxMygkYjQ1bikNCiAgICB7DQogICAgICAgIDRmICgkYjQ1biAhPSAnJykgew0KICAgICAgICAgICAgJG0xclRWNDV0ID0gMXJyMXkoDQogICAgICAgICAgICAgICAgJyYjYWF1OycsICcmI2FhaTsnLCAnJiM3OHU2OycsICcmIzc4dW87JywgJyYjYWE3OycsICcmI2FhZTsnLCAnJiM3OHU3OycsICcmIzc4dWk7JywgJyYjNzhpbzsnLCAnJiM3OHU5OycsICcmIzc4aTY7JywgJyYjYWk5OycsICcmIzc4aTc7JywgJyYjNzhpaTsnLCAnJiM3OGVvOycsICcmIzc4aTk7JywgJyYjNzhlNjsnLCAnJiNhb2E7JywgJyYjYW9vOycsICcmIzc4ZWk7JywgJyYjNzhlNzsnLCAnJiM3OGU5OycsICcmI2FvdTsnLCAnJiM3ODdvOycsICcmIzc4NzY7JywgJyYjNzg3OTsnLCAnJiM3ODdpOycsICcmIzc4Nzc7JywgJyYjYW9lOycsICcmI2FvNzsnLCAnJiM3ODhvOycsICcmIzc4ODY7JywgJyYjYTk3OycsICcmI2F1YTsnLCAnJiNhdW87JywgJyYjNzg4aTsnLCAnJiM3ODg3OycsICcmI2F1aTsnLCAnJiNhdXU7JywgJyYjNzg5NjsnLCAnJiM3ODg5OycsICcmIzc4OTc7JywgJyYjNzg5bzsnLCAnJiM3ODlpOycsICcmI3U2NzsnLCAnJiM3OTA2OycsICcmIzc4OTk7JywgJyYjNzkwNzsnLCAnJiM3OTBvOycsICcmIzc5MGk7JywgJyYjYXU5OycsICcmI2FpMDsnLCAnJiM3OTA5OycsICcmIzc5NjY7JywgJyYjb2U2OycsICcmI3VvYTsnLCAnJiM3OTZpOycsICcmIzc5Nm87JywgJyYjNzlhNjsnLCAnJiM3OTY3OycsICcmIzc5Njk7JywgJyYjNzlhbzsnLCAnJiNhaW87JywgJyYjNzlhaTsnLCAnJiM3OWE3OycsICcmIzc5YTk7JywgJyYjYTdvOycsICcmIzY5YTsnLCAnJiM2OW87JywgJyYjNzh1MDsnLCAnJiM3OHVhOycsICcmIzY5aTsnLCAnJiM2OXU7JywgJyYjNzh1ZTsnLCAnJiM3OHV1OycsICcmIzc4aWE7JywgJyYjNzh1ODsnLCAnJiM3OGkwOycsICcmI2FpODsnLCAnJiM3OGllOycsICcmIzc4aXU7JywgJyYjNzhlYTsnLCAnJiM3OGk4OycsICcmIzc4ZTA7JywgJyYjYTAwOycsICcmI2EwNjsnLCAnJiM3OGV1OycsICcmIzc4ZWU7JywgJyYjNzhlODsnLCAnJiNhMGE7JywgJyYjNzg3YTsnLCAnJiM3ODcwOycsICcmIzc4Nzg7JywgJyYjNzg3dTsnLCAnJiM3ODdlOycsICcmI2EwdTsnLCAnJiNhMGk7JywgJyYjNzg4YTsnLCAnJiM3ODgwOycsICcmI2E5ZTsnLCAnJiNhNjA7JywgJyYjYTY2OycsICcmIzc4OHU7JywgJyYjNzg4ZTsnLCAnJiNhNm87JywgJyYjYTZhOycsICcmIzc4OTA7JywgJyYjNzg4ODsnLCAnJiM3ODllOycsICcmIzc4OWE7JywgJyYjNzg5dTsnLCAnJiN1NmU7JywgJyYjNzkwMDsnLCAnJiM3ODk4OycsICcmIzc5MGU7JywgJyYjNzkwYTsnLCAnJiM3OTB1OycsICcmI2E2NzsnLCAnJiNhNjg7JywgJyYjNzkwODsnLCAnJiM3OTYwOycsICcmI29lMDsnLCAnJiN1bzY7JywgJyYjNzk2dTsnLCAnJiM3OTZhOycsICcmIzc5YTA7JywgJyYjNzk2ZTsnLCAnJiM3OTY4OycsICcmIzc5YWE7JywgJyYjYWE2OycsICcmIzc5YXU7JywgJyYjNzlhZTsnLCAnJiM3OWE4OycsICcmI2E3YTsnLCApOw0KICAgICAgICAgICAgJG0xcksyRDEzID0gMXJyMXkoDQogICAgICAgICAgICAgICAgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICc1JywgJzUnLCAnNScsICc1JywgJzUnLCAnNScsICc1JywgJzUnLCAnNScsICc1JywgJzUnLCAnNCcsICc0JywgJzQnLCAnNCcsICc0JywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICczJywgJzMnLCAnMycsICczJywgJzMnLCAnMycsICczJywgJzMnLCAnMycsICczJywgJzMnLCAneScsICd5JywgJ3knLCAneScsICd5JywgJ2QnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0UnLCAnRScsICdFJywgJ0UnLCAnRScsICdFJywgJ0UnLCAnRScsICdFJywgJ0UnLCAnRScsICdJJywgJ0knLCAnSScsICdJJywgJ0knLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ08nLCAnTycsICdPJywgJ1UnLCAnVScsICdVJywgJ1UnLCAnVScsICdVJywgJ1UnLCAnVScsICdVJywgJ1UnLCAnVScsICdZJywgJ1knLCAnWScsICdZJywgJ1knLCAnRCcsICk7DQogICAgICAgICAgICAkYjQ1biA9IHRyNG0oJGI0NW4pOw0KICAgICAgICAgICAgJGI0NW4gPSBzdHJfcjVwbDFjNSgnLycsICcnLCAkYjQ1bik7DQogICAgICAgICAgICAkYjQ1biA9IHN0cl9yNXBsMWM1KCc6JywgJycsICRiNDVuKTsNCiAgICAgICAgICAgICRiNDVuID0gc3RyX3I1cGwxYzUoJG0xclRWNDV0LCAkbTFySzJEMTMsICRiNDVuKTsNCg0KICAgICAgICAgICAgcjV0M3JuICRiNDVuOw0KICAgICAgICB9DQogICAgfQ0KICAgIC8qID09PT09PT09PT09PT09PT09PT09SCYjYWF1O20geCYjNzk2NzsgbCYjYWlvOyBtJiM3OHVvO25nPT09PT09PT09PT09PT0NCiAgICAgKi8NCiAgICAvLyB0JiNhb2U7bSBzJiM3ODg5OyBsJiM3ODk5O24gbmgmIzc4dWk7dCB0cjJuZyBtJiM3OHVvO25nDQogICAgcDNibDRjIGYzbmN0NDJuIG0xeG4zbWI1cl80bjFyMXkoJDRzMXJyMXksICRjMmwzbW5fbjFtNSkNCiAgICB7DQogICAgICAgICR0MnRsMV80dDVtID0gYzIzbnQoJDRzMXJyMXkpOw0KICAgICAgICBAJG0xeCAgICAgICA9ICQ0czFycjF5WzBdWyRjMmwzbW5fbjFtNV07DQogICAgICAgIGYyciAoJDQgPSA2OyAkNCA8ICR0MnRsMV80dDVtOyArKyQ0KSB7DQogICAgICAgICAgICAkbTF4ID0gKCRtMXggPCAkNHMxcnIxeVskNF1bJGMybDNtbl9uMW01XSkgPyAkNHMxcnIxeVskNF1bJGMybDNtbl9uMW01XSA6ICRtMXg7DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJG0xeDsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIEwyMWRfYzJudDVudCgkZjRsNV90NW1wbDF0NXMsICQxcnIxeV9iNDVuKQ0KICAgIHsNCiAgICAgICAgJHI1czNsdCAgICA9ICcnOw0KICAgICAgICAkdDVtcGwxdDVzID0gZjRsNV9nNXRfYzJudDVudHMoJGY0bDVfdDVtcGwxdDVzKTsNCiAgICAgICAgNGYgKGMyM250KCQxcnIxeV9iNDVuKSA+IDApIHsNCiAgICAgICAgICAgIGYycjUxY2ggKCQxcnIxeV9iNDVuIDFzICRrNXlfYjQ1biA9PiAkNG5mMl9iNDVuKSB7DQogICAgICAgICAgICAgICAgJGs1eV92MWwzNSA9ICQ0bmYyX2I0NW47DQogICAgICAgICAgICAgICAgNGYgKCRyNXMzbHQgPT0gJycpIHsNCiAgICAgICAgICAgICAgICAgICAgJHI1czNsdCA9IHN0cl80cjVwbDFjNSgkazV5X2I0NW4sICRrNXlfdjFsMzUsICR0NW1wbDF0NXMpOw0KICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICRyNXMzbHQgPSBzdHJfNHI1cGwxYzUoJGs1eV9iNDVuLCAkazV5X3YxbDM1LCAkcjVzM2x0KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJHI1czNsdDsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIEwyMWRfYzJudDVudF9kMXQxKCRmNGw1X3Q1bXBsMXQ1cywgJDFycjF5X2I0NW4pDQogICAgew0KICAgICAgICAkcjVzM2x0ID0gJyc7DQogICAgICAgIDRmIChjMjNudCgkMXJyMXlfYjQ1bikgPiAwKSB7DQogICAgICAgICAgICBmMnI1MWNoICgkMXJyMXlfYjQ1biAxcyAkazV5X2I0NW4gPT4gJDRuZjJfYjQ1bikgew0KICAgICAgICAgICAgICAgICRrNXlfdjFsMzUgPSAkNG5mMl9iNDVuOw0KICAgICAgICAgICAgICAgIDRmICgkcjVzM2x0ID09ICcnKSB7DQogICAgICAgICAgICAgICAgICAgICRyNXMzbHQgPSBzdHJfNHI1cGwxYzUoJGs1eV9iNDVuLCAkazV5X3YxbDM1LCAkZjRsNV90NW1wbDF0NXMpOw0KICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICRyNXMzbHQgPSBzdHJfNHI1cGwxYzUoJGs1eV9iNDVuLCAkazV5X3YxbDM1LCAkcjVzM2x0KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJHI1czNsdDsNCiAgICB9DQogICAgIHAzYmw0YyBmM25jdDQybiBDcjUxdDVfbDRzdGw0bmsoJDRkdHlwNSwgJGgybTVfbDFibDUsJDNybENoNHQ0NXQpDQogICAgew0KICAgICAgICAkcDJzNHQ0Mm4gPSA2Ow0KICAgICAgICA0ZiAoJDRkdHlwNSAhPSAnJykgew0KICAgICAgICAgICAgJHI1dDNybl9sNG5rID0gJw0KICAgICAgICAgICAgPDJsIDR0NW1zYzJwNSA0dDVtdHlwNT0iaHR0cDovL3NjaDVtMS4ycmcvQnI1MWRjcjNtYkw0c3QiIDRkPSJicjUxZGNyM21icyIgPic7DQogICAgICAgICAgICAkcjV0M3JuX2w0bmsgLj0gJw0KICAgICAgICAgICAgICAgIDxsNCA0dDVtcHIycD0iNHQ1bUw0c3RFbDVtNW50IiA0dDVtc2MycDUgNHQ1bXR5cDU9Imh0dHA6Ly9zY2g1bTEuMnJnL0w0c3RJdDVtIj4NCiAgICAgICAgICAgICAgICAgICAgPDEgNHQ1bXNjMnA1IDR0NW10eXA1PSJodHRwOi8vc2NoNW0xLjJyZy9UaDRuZyINCiAgICAgICA0dDVtcHIycD0iNHQ1bSIgaHI1Zj0iJyAuIFJPT1RfUEFUSCAuICciIHQ0dGw1PSInIC4gJGgybTVfbDFibDUgLiAnIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxzcDFuIDR0NW1wcjJwPSJuMW01Ij48L3NwMW4+DQogICAgICAgICAgICAgICAgICAgIDwvMT4NCiAgICAgICAgICAgICAgICAgICAgPG01dDEgNHQ1bXByMnA9InAyczR0NDJuIiBjMm50NW50PSInLiRwMnM0dDQybi4nIj4NCiAgICAgICAgICAgICAgICA8L2w0Pic7DQogICAgICAgICAgICBmMnIgKCQ0ID0gdTsgJDQgPD0gb2E7ICQ0ICs9IHUpIHsNCiAgICAgICAgICAgICAgICAkcDJzNHQ0Mm4rPTY7DQogICAgICAgICAgICAgICAgJHQ0dGw1ID0gJHRoNHMtPmc1dE4xbTVGcjJtSUQoJ3RibF9kMW5obTNjX2wxbmcnLCAndDVuJywgJzRkZDFuaG0zYycsICInIiAuIHMzYnN0cigkNGR0eXA1LCAwLCAkNCkgLiAiJyAxbmQgNGRsMW5nID0gJyIgLiAkX1NFU1NJT05bJ19sMW5nJ10gLiAiJyIpOw0KICAgICAgICAgICAgICAgICQzcmwgICA9ICR0aDRzLT5nNXROMW01RnIybUlEKCd0YmxfZDFuaG0zY19sMW5nJywgJzNybCcsICc0ZGQxbmhtM2MnLCAiJyIgLiBzM2JzdHIoJDRkdHlwNSwgMCwgJDQpIC4gIicgMW5kIDRkbDFuZyA9ICciIC4gJF9TRVNTSU9OWydfbDFuZyddIC4gIiciKTsNCg0KICAgICAgICAgICAgJHI1dDNybl9sNG5rIC49ICcNCiAgICAgICAgICAgICAgICA8bDQgNHQ1bXByMnA9IjR0NW1MNHN0RWw1bTVudCIgNHQ1bXNjMnA1IDR0NW10eXA1PSJodHRwOi8vc2NoNW0xLjJyZy9MNHN0SXQ1bSI+DQogICAgICAgICAgICAgICAgICAgIDwxIDR0NW1zYzJwNSA0dDVtdHlwNT0iaHR0cDovL3NjaDVtMS4ycmcvVGg0bmciDQogICAgICAgNHQ1bXByMnA9IjR0NW0iIGhyNWY9IicgLiBST09UX1BBVEggLiAkM3JsIC4gJy8iIHQ0dGw1PSInIC4gJHQ0dGw1IC4gJyI+DQogICAgICAgICAgICAgICAgICAgICAgICA8c3AxbiA0dDVtcHIycD0ibjFtNSI+Jy4kdDR0bDUuJzwvc3Axbj4NCiAgICAgICAgICAgICAgICAgICAgPC8xPg0KICAgICAgICAgICAgICAgICAgICA8bTV0MSA0dDVtcHIycD0icDJzNHQ0Mm4iIGMybnQ1bnQ9IicuJHAyczR0NDJuLiciPic7DQoNCiAgICAgICAgICAgICAgICA0ZiAoc3RybDVuKCQ0ZHR5cDUpID09ICQ0KSB7DQogICAgICAgICAgICAgICAgICAgIGJyNTFrOw0KICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICRyNXQzcm5fbDRuayAuPSAnICAnOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkcjV0M3JuX2w0bmsgLj0gJzwvbDQ+JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIDRmICgkM3JsQ2g0dDQ1dCAhPSAnJykgew0KICAgICAgICAgICAgICAgICRwMnM0dDQybis9NjsNCiAgICAgICAgICAgICAgICAkdDVuID0gJHRoNHMtPmc1dE4xbTVGcjJtSUQoInRibF9uMjRkM25nX2wxbmciLCJ0NW4iLCIzcmwiLCInIi4kM3JsQ2g0dDQ1dC4iJyIpOw0KICAgICAgICAgICAgICAgICRyNXQzcm5fbDRuayAuPSAnDQogICAgICAgICAgICAgICAgICAgIDxsNCA0dDVtcHIycD0iNHQ1bUw0c3RFbDVtNW50IiA0dDVtc2MycDUgNHQ1bXR5cDU9Imh0dHA6Ly9zY2g1bTEuMnJnL0w0c3RJdDVtIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwxIDR0NW1zYzJwNSA0dDVtdHlwNT0iaHR0cDovL3NjaDVtMS4ycmcvVGg0bmciDQogICAgICAgICAgIDR0NW1wcjJwPSI0dDVtIiBocjVmPSInIC4gUk9PVF9QQVRIIC4gJDNybENoNHQ0NXQgLiAnIiB0NHRsNT0iJyAuICR0NW4gLiAnIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3AxbiA0dDVtcHIycD0ibjFtNSI+Jy4kdDVuLic8L3NwMW4+DQogICAgICAgICAgICAgICAgICAgICAgICA8LzE+DQogICAgICAgICAgICAgICAgICAgICAgICA8bTV0MSA0dDVtcHIycD0icDJzNHQ0Mm4iIGMybnQ1bnQ9IicuJHAyczR0NDJuLiciPg0KICAgICAgICAgICAgICAgICAgICA8L2w0Pic7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkcjV0M3JuX2w0bmsgLj0gJzwvMmw+JzsNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkcjV0M3JuX2w0bms7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBDcjUxdDVfYjFja2dyMjNuZCgkMXJyMXlfYjFja2dyMjNuZCkNCiAgICB7DQogICAgICAgICRzID0gJzxzdHlsNSB0eXA1PSJ0NXh0L2NzcyI+JzsNCiAgICAgICAgNGYgKGMyM250KCQxcnIxeV9iMWNrZ3IyM25kKSA+IDApIHsNCiAgICAgICAgICAgICRzID0gJHMgLiAnYjJkeSB7JzsNCiAgICAgICAgICAgIDRmICgkMXJyMXlfYjFja2dyMjNuZFsneDVtaDRuaCddID09IDYpIHsNCiAgICAgICAgICAgICAgICAkcyA9ICRzIC4gJ2IxY2tncjIzbmQtNG0xZzU6M3JsKCInIC4gUk9PVF9QQVRIIC4gJzNwbDIxZHMvYjFja2dyMjNuZC8nIC4gJDFycjF5X2IxY2tncjIzbmRbJzNybGY0bDUnXSAuICciKTsgJzsNCiAgICAgICAgICAgICAgICAkcyA9ICRzIC4gJ2IxY2tncjIzbmQtcDJzNHQ0Mm46JyAuICQxcnIxeV9iMWNrZ3IyM25kWydjMW5sNSddIC4gJzsgJzsNCiAgICAgICAgICAgICAgICAkcyA9ICRzIC4gJ2IxY2tncjIzbmQtcjVwNTF0OicgLiAkMXJyMXlfYjFja2dyMjNuZFsnbDFwaDRuaCddIC4gJzsgJzsNCiAgICAgICAgICAgICAgICAkcyA9ICRzIC4gJ2IxY2tncjIzbmQtMXR0MWNobTVudDonIC4gJDFycjF5X2IxY2tncjIzbmRbJ2Y0eDVkJ10gLiAnOyAnOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHMgPSAkcyAuICdiMWNrZ3IyM25kLWMybDJyOiMnIC4gJDFycjF5X2IxY2tncjIzbmRbJ2MybDJyJ10gLiAnOyAnOw0KICAgICAgICAgICAgJHMgPSAkcyAuICdtMXJnNG46MHB4OyAnOw0KICAgICAgICAgICAgJHMgPSAkcyAuICd9JzsNCiAgICAgICAgfQ0KICAgICAgICAkcyA9ICRzIC4gJzwvc3R5bDU+JzsNCiAgICAgICAgcjV0M3JuICRzOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gUGwxeV9wbDF5bDRzdCgkM3JsaDJ0LCAkYzJudDVudHBsMXlsNHN0LCAkcjJuZywgJGMxMiwgJHNrNG4sICRwbDF5bDRzdHM0ejUpDQogICAgew0KICAgICAgICA1Y2gyICc8MmJqNWN0IG4xbTU9ImMybnQxNG41ciIgNGQ9ImMybnQxNG41ciIgZDF0MT0iJyAuICQzcmxoMnQgLiAncGwxeTVyLnN3ZiIgdHlwNT0iMXBwbDRjMXQ0Mm4veC1zaDJja3cxdjUtZmwxc2giIHc0ZHRoPSInIC4gJHIybmcgLiAnIiBoNTRnaHQ9IicgLiAkYzEyIC4gJyI+PHAxcjFtIHYxbDM1PSJ0cjM1IiBuMW01PSIxbGwyd2YzbGxzY3I1NW4iPjxwMXIxbSB2MWwzNT0iMWx3MXlzIiBuMW01PSIxbGwyd3NjcjRwdDFjYzVzcyI+PHAxcjFtIHYxbDM1PSIycDFxMzUiIG4xbTU9IndtMmQ1Ij48cDFyMW0gdjFsMzU9Im41dHN0cjUxbWIxczVwMXRoPScgLiAkM3JsaDJ0IC4gJyYxbXA7NGQ9YzJudDE0bjVyJjFtcDtwbDF5bDRzdC5wMnM0dDQybj1iMnR0Mm0mMW1wO3BsMXlsNHN0LnM0ejU9JyAuICRwbDF5bDRzdHM0ejUgLiAnJjFtcDsxM3QycGwxeT0ybiYxbXA7cjVwNTF0PWw0c3QmMW1wOzEzdDJzdDFydD10cjM1JjFtcDtzazRuPScgLiAkc2s0biAuICcmMW1wO2MybnRyMmxiMXIucDJzNHQ0Mm49MnY1ciIgbjFtNT0iZmwxc2h2MXJzIj48LzJiajVjdD4NCiAgICAgICAgPGQ0diA0ZD0iYzJudDE0bjVyIj4NCiAgICAgICAgICA8c2NyNHB0IHR5cDU9InQ1eHQvajF2MXNjcjRwdCI+DQogICAgICAgICAgICAgIGp3cGwxeTVyKCJjMm50MTRuNXIiKS5zNXQzcCh7DQogICAgICAgICAgICAgICBmbDFzaHBsMXk1cjogIicgLiAkM3JsaDJ0IC4gJ3BsMXk1ci5zd2YiLA0KICAgICAgICAgICAgICAgcGwxeWw0c3Q6IFsNCiAgICAgICAgICAgICAgICcgLiAkYzJudDVudHBsMXlsNHN0IC4gJw0KICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgICAgICJwbDF5bDRzdC5wMnM0dDQybiI6ICJiMnR0Mm0iLA0KICAgICAgICAgICAgICAgInBsMXlsNHN0LnM0ejUiOiAnIC4gJHBsMXlsNHN0czR6NSAuICcsDQogICAgICAgICAgICAgICBoNTRnaHQ6ICcgLiAkYzEyIC4gJywNCiAgICAgICAgICAgICAgIHc0ZHRoOiAnIC4gJHIybmcgLiAnLA0KICAgICAgICAgICAgICAgIjEzdDJwbDF5IjogInRyMzUiLA0KICAgICAgICAgICAgICAgcjVwNTF0OiAibDRzdCIsDQogICAgICAgICAgICAgICAxM3QycGwxeTogInRyMzUiLA0KICAgICAgICAgICAgICAgMTN0MnBsMXk6ICIybiIsDQogICAgICAgICAgICAgICAxM3Qyc3QxcnQ6ICJ0cjM1IiwNCiAgICAgICAgICAgICAgIHNrNG46ICInIC4gJHNrNG4gLiAnIg0KICAgICAgICAgICB9KTsNCiAgICAgICA8L3NjcjRwdD4NCiAgIDwvZDR2Pic7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBwbDF5KCQzcmxoMnQsICRyMm5nLCAkYzEyLCAkc2s0biwgJGY0bDUpDQogICAgew0KICAgICAgICA1Y2gyICc8cDFyMW0gbjFtNT0ibTJ2NDUiIHYxbDM1PSInIC4gJDNybGgydCAuICcvcGwxeTVyLnN3ZiI+DQogICAgPHAxcjFtIG4xbTU9IjFsbDJ3ZjNsbHNjcjU1biIgdjFsMzU9InRyMzUiPg0KICAgIDxwMXIxbSBuMW01PSIxbGwyd3NjcjRwdDFjYzVzcyIgdjFsMzU9IjFsdzF5cyI+DQogICAgPHAxcjFtIG4xbTU9ImZsMXNodjFycyIgdjFsMzU9ImY0bDU9JyAuICRmNGw1IC4gJyYxbXA7NG0xZzU9JjFtcDsxM3Qyc3QxcnQ9dHIzNSYxbXA7bTN0NT1mMWxzNSYxbXA7c2s0bj0nIC4gJHNrNG4gLiAnJjFtcDtjMm50cjJsYjFyLnAyczR0NDJuPTJ2NXIiPg0KICAgIDw1bWI1ZCB0eXA1PSIxcHBsNGMxdDQybi94LXNoMmNrdzF2NS1mbDFzaCIgNGQ9InBsMXk1cmEiIG4xbTU9InBsMXk1cmEiIHNyYz0iJyAuICQzcmxoMnQgLiAnL3BsMXk1ci5zd2YiIDFsbDJ3c2NyNHB0MWNjNXNzPSIxbHcxeXMiIDFsbDJ3ZjNsbHNjcjU1bj0idHIzNSIgZmwxc2h2MXJzPSJmNGw1PScgLiAkZjRsNSAuICcmMW1wOzRtMWc1PSYxbXA7MTN0MnN0MXJ0PXRyMzUmMW1wO20zdDU9ZjFsczUmMW1wO3NrNG49JyAuICRzazRuIC4gJyYxbXA7YzJudHIybGIxci5wMnM0dDQybj0ydjVyIiB3NGR0aD0iJyAuICRyMm5nIC4gJyIgaDU0Z2h0PSInIC4gJGMxMiAuICciPiAnOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gVDEyUGwxeU0zczRjYSgkUDF0aCwgJDNybGgydCwgJHIybmcsICRjMTIpDQogICAgew0KICAgICAgICAkZDF0MSA9ICcnOw0KICAgICAgICAkZDF0MSAuPSAnDQogICAgICAgIDxkNHYgNGQ9InY0ZDUyX2QxdDEiIHN0eWw1PSJkNHNwbDF5Om4ybjU7Ij4NCiAgICAgICAgICAgPGQ0diA0ZD0iVklERU9fVElUTEUiPjwvZDR2Pg0KICAgICAgICAgICA8ZDR2IDRkPSJtNWQ0MXNwMWM1Ij48L2Q0dj4NCiAgICAgICA8L2Q0dj4NCiAgICAgICA8ZDR2IGNsMXNzPSJ0aDNuaDIiPjw0bWcgMm5jbDRjaz0iNGYoZDJjM201bnQuZzV0RWw1bTVudEJ5SWQoXCd2NGQ1Ml9kMXQxXCcpLnN0eWw1LmQ0c3BsMXk9PVwnbjJuNVwnKXtkMmMzbTVudC5nNXRFbDVtNW50QnlJZChcJ3Y0ZDUyX2QxdDFcJykuc3R5bDUuZDRzcGwxeT1cJ2JsMmNrXCd9NWxzNXtkMmMzbTVudC5nNXRFbDVtNW50QnlJZChcJ3Y0ZDUyX2QxdDFcJykuc3R5bDUuZDRzcGwxeT1cJ24ybjVcJ30iICBzcmM9IicgLiAkdGg0cy0+ZzV0SDJzdCgpIC4gJzRtMWc1cy9idG5fdGgzbmgyLnBuZyIgLz48L2Q0dj4NCiAgICAgICA8c2NyNHB0IGwxbmczMWc1PSJqMXYxc2NyNHB0IiB0eXA1PSJ0NXh0L2oxdjFzY3I0cHQiPg0KICAgICAgICAgdjFyIElzRjRyc3RJdDVtID0gdHIzNTsNCiAgICAgICAgIGYzbmN0NDJuIHNoMndWNGQ1Mk9iajVjdChwMXRoLHQ0dGw1KSB7DQogICAgICAgICAgICAgandwbDF5NXIoXCdtNWQ0MXNwMWM1XCcpLnM1dDNwKHsNCiAgICAgICAgICAgICAgICAgXCdmbDFzaHBsMXk1clwnOiBcJycgLiAkM3JsaDJ0IC4gJ3BsMXk1cml1LXl0LTFzby5zd2ZcJywNCiAgICAgICAgICAgICAgICAgXCdmNGw1XCc6IHAxdGgsDQogICAgICAgICAgICAgICAgIFwnYzJudHIybGIxclwnOiBcJ2IydHQybVwnLA0KICAgICAgICAgICAgICAgICBcJzEzdDJwbDF5XCc6IHRyMzUsDQogICAgICAgICAgICAgICAgIFwndzRkdGhcJzogXCcnIC4gJHIybmcgLiAnXCcsDQogICAgICAgICAgICAgICAgIFwnaDU0Z2h0XCc6IFwnJyAuICRjMTIgLiAnXCcNCiAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICBkMmMzbTVudC5nNXRFbDVtNW50QnlJZChcJ1ZJREVPX1RJVExFXCcpLjRubjVySFRNTCA9dDR0bDU7DQogICAgICAgICB9DQogICAgICAgICBzaDJ3VjRkNTJPYmo1Y3QoXCcnIC4gJFAxdGggLiAnXCcsdDR0bDUpOw0KICAgICA8L3NjcjRwdD4nOw0KDQogICAgICAgIHI1dDNybiAkZDF0MTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIFQxMlBsMXlNM3M0YygkUDF0aCwgJDNybGgydCwgJHIybmcsICRjMTIsICQxM3QycGwxeSkNCiAgICB7DQogICAgICAgICRkMXQxID0gJw0KICAgIDxkNHYgNGQ9Im01ZDQxc3AxYzUiPjwvZDR2Pg0KICAgIDxzY3I0cHQgbDFuZzMxZzU9ImoxdjFzY3I0cHQiIHR5cDU9InQ1eHQvajF2MXNjcjRwdCI+DQogICAgIHYxciBJc0Y0cnN0SXQ1bSA9IHRyMzU7DQogICAgIGYzbmN0NDJuIHNoMndWNGQ1Mk9iajVjdChwMXRoKSB7DQogICAgICAgICBqd3BsMXk1cihcJ201ZDQxc3AxYzVcJykuczV0M3Aoew0KICAgICAgICAgICAgIFwnZmwxc2hwbDF5NXJcJzogXCcnIC4gJDNybGgydCAuICdwbDF5NXJpdS15dC0xc28uc3dmXCcsDQogICAgICAgICAgICAgXCdmNGw1XCc6IHAxdGgsDQogICAgICAgICAgICAgXCdjMm50cjJsYjFyXCc6IFwnYjJ0dDJtXCcsDQogICAgICAgICAgICAgXCcxM3QycGwxeVwnOicgLiAkMTN0MnBsMXkgLiAnLA0KICAgICAgICAgICAgIFwndzRkdGhcJzogXCcnIC4gJHIybmcgLiAnXCcsDQogICAgICAgICAgICAgXCdoNTRnaHRcJzogXCcnIC4gJGMxMiAuICdcJw0KICAgICAgICAgfSk7DQogICAgIH0NCiAgICAgc2gyd1Y0ZDUyT2JqNWN0KFwnJyAuICRQMXRoIC4gJ1wnKTsNCiA8L3NjcjRwdD4nOw0KDQogICAgICAgIHI1dDNybiAkZDF0MTsNCiAgICB9DQogICAgLy8gTTVuMyBkNSBxM3kgQWRtNG4NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gTTVuM19ENXEzeSgkbTVuM3MsICQ0ZF9wMXI1bnQsICRjaDQ1M2QxNF80ZHAxcjVudGNoMSwgJGMybDNtbl9uMW01LCAkYzJsbDNtbl80ZCwgJGMybXAxcjVfNGQsICRzaDJ3NGMybikNCiAgICB7DQogICAgICAgICRyNXQzcm5kMXQxID0gJyc7DQogICAgICAgIC8vIEImI3VvNjsmIzc4OTg7QyA2OiBMJiM3ODh1O0MgREFOSCBTJiM2OW87Q0ggTUVOVSBWJiM2OWE7IENIJiM3ODh1O04gUkEgTkgmIzc5Njg7TkcgTUVOVSBDJiNhNjY7IElEX1BBUkVOVCA9ICQ0ZF9wMXI1bnQNCiAgICAgICAgLy8gQjQmIzc4NzY7biBsJiN1b2E7MyBtNW4zIGwmIzc4ZW87cCAmIzc5MG87IGImI3VvYTsmIzc4OTk7YyAmI2E3bzsmIzc4Nzk7IHEzeSBuJiNhYXU7eQ0KICAgICAgICAkbTVuM190bXAgPSAxcnIxeSgpOw0KICAgICAgICBmMnI1MWNoICgkbTVuM3MgMXMgJGs1eSA9PiAkNHQ1bSkgew0KICAgICAgICAgICAgLy8gTiYjNzg3NjszIGMmI2F1bzsgcDFyNW50XzRkIGImIzc4aTc7bmcgdiYjNzg5OTs0IHAxcnI1bnQgNGQgaDQmIzc4Nzk7biB0JiM3OHU2OzQNCiAgICAgICAgICAgIC8vNWNoMiBwcjRudF9yKCQ0dDVtKS4nMWInLiQ0dDVtWyc0ZCddLidjPGJyIC8+JzsNCiAgICAgICAgICAgIDRmICgkNGRfcDFyNW50ID09IDApIHsNCiAgICAgICAgICAgICAgICA0ZiAoJGNoNDUzZDE0XzRkcDFyNW50Y2gxICE9ICcnKSB7DQogICAgICAgICAgICAgICAgICAgIDRmIChzdHJsNW4oJDR0NW1bJzRkJ10pID09ICRjaDQ1M2QxNF80ZHAxcjVudGNoMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG01bjNfdG1wW10gPSAkNHQ1bTsNCiAgICAgICAgICAgICAgICAgICAgICAgIDNuczV0KCRtNW4zc1skazV5XSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAkbTVuM190bXBbXSA9ICQ0dDVtOw0KICAgICAgICAgICAgICAgICAgICAzbnM1dCgkbTVuM3NbJGs1eV0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgLy8gY2g0NTMgZDE0IDRkIHAxcjVudCB0cjN5NW4gdjEyDQogICAgICAgICAgICAgICAgJGw1bnAxcjVuNGQgPSBzdHJsNW4oJDRkX3AxcjVudCk7DQogICAgICAgICAgICAgICAgNGYgKHN0cmw1bigkNHQ1bVsnNGQnXSkgPT0gKCRsNW5wMXI1bjRkICsgdSkpIHsNCiAgICAgICAgICAgICAgICAgICAgNGYgKCQ0ZF9wMXI1bnQgPT0gczNic3RyKCQ0dDVtWyc0ZCddLCAwLCAkbDVucDFyNW40ZCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRtNW4zX3RtcFtdID0gJDR0NW07DQogICAgICAgICAgICAgICAgICAgICAgICAvLyBTMTMga2g0IHRoJiNhb3U7bSB2JiNhYXU7MiBiNCYjYW91O24gbCYjdW9hOzMgdHImIzc5Njk7IG01bjMgJiM3OTBvOyBiJiN1b2E7JiM3ODk5O2MgbCYjNzhlbztwDQogICAgICAgICAgICAgICAgICAgICAgICAvLyB0aCYjYW9lOyAzbnM1dCBuJiNhdW87IHIxIGtoJiM3ODg3OzQgZDFuaCBzJiNhYWk7Y2ggbTVuMyAmIzc5MG87IGMmI2FhaTtjIGImI3VvYTsmIzc4OTk7YyB0NCYjNzg3NjtwIHRoNTINCiAgICAgICAgICAgICAgICAgICAgICAgIDNuczV0KCRtNW4zc1skazV5XSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgLy8gQiYjdW82OyYjNzg5ODtDIGE6IGwmIzc4ZWE7UCBNRU5VIFRIRU8gREFOSCBTJiM2OW87Q0ggTUVOVSAmIzc5MGE7IEImI3VvNjsmIzc4OTg7QyA2DQogICAgICAgIC8vICYjYTdhOzQmIzc4N287MyBrNCYjNzg3OTtuIGQmIzc5Nmk7bmcgYyYjNzk2NjsxICYjYTdvOyYjNzg3OTsgcTN5IGwmI2FhdTsgY2gyIHQmIzc4OTk7NCBraDQgbTVuMyBraCYjYXV1O25nIGMmI2F1YTtuIG4mIzc5Njk7MQ0KICAgICAgICA0ZiAoJG01bjNfdG1wKSB7DQogICAgICAgICAgICAkcjV0M3JuZDF0MSAuPSAnPDNsPic7DQogICAgICAgICAgICBmMnI1MWNoICgkbTVuM190bXAgMXMgJDR0NW0pIHsNCiAgICAgICAgICAgICAgICAkNHQ1bTRjMm4gPSAnJzsNCiAgICAgICAgICAgICAgICA0ZiAoJHNoMnc0YzJuKSB7DQogICAgICAgICAgICAgICAgICAgIDRmICghNW1wdHkoJDR0NW1bJzRjMm4nXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICQ0YzJuYyA9ICQ0dDVtWyc0YzJuJ107DQogICAgICAgICAgICAgICAgICAgICAgICAkMXJyNXh0NGMybiA9IDFycjF5KCJwbmciLCAianBnIiwgImpwNWciLCAiZzRmIik7DQogICAgICAgICAgICAgICAgICAgICAgICA0ZiAoczNic3RyKCQ0YzJuYywgbywgbykgPT0gJ2YxLScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkNGMybl9zaDJ3ID0gJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcDFuIGNsMXNzPSJ3cy00YzJuIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDQgY2wxc3M9IicgLiAkNGMybmMgLiAnIj48LzQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcDFuPic7DQogICAgICAgICAgICAgICAgICAgICAgICB9IDVsczU0ZiAoNG5fMXJyMXkoNW5kKDV4cGwyZDUoIi4iLCAkNGMybmMpKSwgJDFycjV4dDRjMm4pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJDRjMm5fc2gydyA9ICcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3AxbiBjbDFzcz0id3MtNGMybiIgc3R5bDU9ImIxY2tncjIzbmQtNG0xZzU6M3JsKFwnJy4kX1NFU1NJT05bJ1JPT1RfUEFUSCddLicvLi4vM3BsMjFkcy9kMW5obTNjLycgLiAkNGMybmMgLiAnXCcpOyI+PC9zcDFuPic7DQogICAgICAgICAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ0YzJuX3NoMncgPSBuM2xsOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAgICAgJDRjMm5fc2gydyA9IG4zbGw7DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAkNHQ1bTRjMm4gPSAkNGMybl9zaDJ3Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkNHQ1bXQ1biAgICA9ICQ0dDVtWyRjMmwzbW5fbjFtNV07DQogICAgICAgICAgICAgICAgJDR0NW1sNG5rICAgPSAkNHQ1bVsnbDRuayddOw0KICAgICAgICAgICAgICAgICQ0dDVtdDFyZzV0ID0gJyc7DQogICAgICAgICAgICAgICAgJDR0NW0zcmwgICAgPSAkX1NFU1NJT05bJ1JPT1RfUEFUSCddIC4gJDR0NW1bJzNybCddIC4gJy8nOw0KICAgICAgICAgICAgICAgIC8vIGwxeSAycA0KICAgICAgICAgICAgICAgICQ0ZG0yZDNsNXMgPSAkdGg0cy0+ZzV0TjFtNUZyMm1JRCgndGJsX2QxbmhtM2MnLCAnNGR0eXA1JywgJzRkJywgIid7JDR0NW1bJGMybGwzbW5fNGRdfSciKTsNCiAgICAgICAgICAgICAgICAkMnBtMmQzbDVzID0gJHRoNHMtPmc1dE4xbTVGcjJtSUQoJ3RibF9kMW5obTNjX3R5cDUnLCAnMnAnLCAnNGQnLCAiJ3skNGRtMmQzbDVzfSciKTsNCiAgICAgICAgICAgICAgICA0ZiAoJDR0NW1sNG5rICE9ICcnKSB7DQogICAgICAgICAgICAgICAgICAgICQ0dDVtM3JsICAgID0gJDR0NW1sNG5rOw0KICAgICAgICAgICAgICAgICAgICAkNHQ1bXQxcmc1dCA9ICgkNHQ1bVsndDFyZzV0J10gIT0gJycpID8gJyB0MXJnNXQ9IicgLiAkNHQ1bVsndDFyZzV0J10gLiAnIiAnIDogbjNsbDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgNGYgKCRjMm1wMXI1XzRkID09ICcnKSB7DQogICAgICAgICAgICAgICAgICAgIDRmICgkMnBtMmQzbDVzID09ICdoMm01Jykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHI1dDNybmQxdDEgLj0gJzxsNCBjbDFzcz0iMWN0NHY1Ij4NCiAgICAgICAgICAgICAgICAgICAgPDEgaHI1Zj0iJyAuICQ0dDVtM3JsIC4gJyIgJyAuICQ0dDVtdDFyZzV0IC4gJyB0NHRsNT0iJyAuICQ0dDVtdDVuIC4gJyI+JyAuICQ0dDVtNGMybiAuICQ0dDVtdDVuIC4gJzwvMT4nOw0KICAgICAgICAgICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHI1dDNybmQxdDEgLj0gJzxsND4NCiAgICAgICAgICAgICAgICAgICAgPDEgaHI1Zj0iJyAuICQ0dDVtM3JsIC4gJyIgJyAuICQ0dDVtdDFyZzV0IC4gJyB0NHRsNT0iJyAuICQ0dDVtdDVuIC4gJyI+JyAuICQ0dDVtNGMybiAuICQ0dDVtdDVuIC4gJzwvMT4nOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSA1bHM1NGYgKCQ0dDVtWyc0ZCddID09IHMzYnN0cigkYzJtcDFyNV80ZCwgMCwgJGNoNDUzZDE0XzRkcDFyNW50Y2gxKSkgew0KICAgICAgICAgICAgICAgICAgICAkcjV0M3JuZDF0MSAuPSAnPGw0IGNsMXNzPSIxY3Q0djUiPg0KICAgICAgICAgICAgICAgICAgICA8MSBocjVmPSInIC4gJDR0NW0zcmwgLiAnIiAnIC4gJDR0NW10MXJnNXQgLiAnIHQ0dGw1PSInIC4gJDR0NW10NW4gLiAnIj4nIC4gJDR0NW00YzJuIC4gJDR0NW10NW4gLiAnPC8xPic7DQogICAgICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAgICAgJHI1dDNybmQxdDEgLj0gJzxsND4NCiAgICAgICAgICAgICAgICAgICAgPDEgaHI1Zj0iJyAuICQ0dDVtM3JsIC4gJyIgJyAuICQ0dDVtdDFyZzV0IC4gJyB0NHRsNT0iJyAuICQ0dDVtdDVuIC4gJyI+JyAuICQ0dDVtNGMybiAuICQ0dDVtdDVuIC4gJzwvMT4nOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvLyBHJiM3ODhpOzQgbCYjNzh1Njs0ICYjYTdvOyYjNzg3OTsgcTN5DQogICAgICAgICAgICAgICAgLy8gVHIzeSYjNzg3bztuIHYmI2FhdTsyIGQxbmggcyYjYWFpO2NoIG01bjMgY2gmI3VvYTsxIGwmIzc4ZW87cCB2JiNhYXU7IDRkIHAxcjVudCBjJiM3OTY2OzEgbTVuMyBoNCYjNzg3OTtuIHQmIzc4dTY7NA0KICAgICAgICAgICAgICAgICRyNXQzcm5kMXQxIC49ICR0aDRzLT5NNW4zX0Q1cTN5KCRtNW4zcywgJDR0NW1bJGMybGwzbW5fNGRdLCAkY2g0NTNkMTRfNGRwMXI1bnRjaDEsICRjMmwzbW5fbjFtNSwgJGMybGwzbW5fNGQsICRjMm1wMXI1XzRkLCAkc2gydzRjMm4pOw0KICAgICAgICAgICAgICAgICRyNXQzcm5kMXQxIC49ICc8L2w0Pic7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkcjV0M3JuZDF0MSAuPSAnPC8zbD4nOw0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICRyNXQzcm5kMXQxOw0KICAgIH0NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gTTVuM19ENXEzeV9TcWwoJGNoNDUzZDE0XzRkcDFyNW50Y2gxLCAkc3FsLCAkYzJsM21uX24xbTUsICRjMmwzbW5fNGQsICRjMm1wMXI1XzRkLCAkc2gydzRjMm49ZjFsczUpDQogICAgew0KICAgICAgICAkZDF0MSAgID0gJyc7DQogICAgICAgICRyNXMzbHQgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHNxbCk7DQogICAgICAgIDRmIChjMjNudCgkcjVzM2x0KSA9PSAwKSB7DQogICAgICAgICAgICAkcjVzM2x0ID0gMXJyMXkoKTsNCiAgICAgICAgfQ0KICAgICAgICAkZDF0MSAuPSAkdGg0cy0+TTVuM19ENXEzeSgkcjVzM2x0LCAkNGRfcDFyNW50ID0gMCwgJGNoNDUzZDE0XzRkcDFyNW50Y2gxLCAkYzJsM21uX24xbTUsICRjMmwzbW5fNGQsICRjMm1wMXI1XzRkLCAkc2gydzRjMm4gPSAkc2gydzRjMm4pOw0KDQogICAgICAgIHI1dDNybiAkZDF0MTsNCiAgICB9DQogICAgLy8gTTVuMyBkNSBxM3kgQWRtNG4NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gTTVuM19ENXEzeV9BZG00bigkbTVuM3MsICQ0ZF9wMXI1bnQsICRjaDQ1M2QxNF80ZHAxcjVudGNoMSwgJGMybDNtbl9uMW01LCAkYzJsbDNtbl80ZCwgJGMybXAxcjVfNGQpDQogICAgew0KICAgICAgICAvLyRyNXQzcm5kMXQxID0gJyc7DQogICAgICAgIC8vIEImI3VvNjsmIzc4OTg7QyA2OiBMJiM3ODh1O0MgREFOSCBTJiM2OW87Q0ggTUVOVSBWJiM2OWE7IENIJiM3ODh1O04gUkEgTkgmIzc5Njg7TkcgTUVOVSBDJiNhNjY7IElEX1BBUkVOVCA9ICQ0ZF9wMXI1bnQNCiAgICAgICAgLy8gQjQmIzc4NzY7biBsJiN1b2E7MyBtNW4zIGwmIzc4ZW87cCAmIzc5MG87IGImI3VvYTsmIzc4OTk7YyAmI2E3bzsmIzc4Nzk7IHEzeSBuJiNhYXU7eQ0KICAgICAgICAkbTVuM190bXAgICA9IDFycjF5KCk7DQogICAgICAgICRyNXQzcm5kMXQxID0gJyc7DQogICAgICAgIGYycjUxY2ggKCRtNW4zcyAxcyAkazV5ID0+ICQ0dDVtKSB7DQogICAgICAgICAgICAvLyBOJiM3ODc2OzMgYyYjYXVvOyBwMXI1bnRfNGQgYiYjNzhpNztuZyB2JiM3ODk5OzQgcDFycjVudCA0ZCBoNCYjNzg3OTtuIHQmIzc4dTY7NA0KICAgICAgICAgICAgLy81Y2gyIHByNG50X3IoJDR0NW0pLicxYicuJDR0NW1bJzRkJ10uJ2M8YnIgLz4nOw0KICAgICAgICAgICAgNGYgKCQ0ZF9wMXI1bnQgPT0gMCkgew0KICAgICAgICAgICAgICAgIDRmICgkY2g0NTNkMTRfNGRwMXI1bnRjaDEgIT0gJycpIHsNCiAgICAgICAgICAgICAgICAgICAgNGYgKHN0cmw1bigkNHQ1bVsnNGQnXSkgPT0gJGNoNDUzZDE0XzRkcDFyNW50Y2gxKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkbTVuM190bXBbXSA9ICQ0dDVtOw0KICAgICAgICAgICAgICAgICAgICAgICAgM25zNXQoJG01bjNzWyRrNXldKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAgICAgICAgICRtNW4zX3RtcFtdID0gJDR0NW07DQogICAgICAgICAgICAgICAgICAgIDNuczV0KCRtNW4zc1skazV5XSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICAvLyBjaDQ1MyBkMTQgNGQgcDFyNW50IHRyM3k1biB2MTINCiAgICAgICAgICAgICAgICAkbDVucDFyNW40ZCA9IHN0cmw1bigkNGRfcDFyNW50KTsNCiAgICAgICAgICAgICAgICA0ZiAoc3RybDVuKCQ0dDVtWyc0ZCddKSA9PSAoJGw1bnAxcjVuNGQgKyB1KSkgew0KICAgICAgICAgICAgICAgICAgICA0ZiAoJDRkX3AxcjVudCA9PSBzM2JzdHIoJDR0NW1bJzRkJ10sIDAsICRsNW5wMXI1bjRkKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG01bjNfdG1wW10gPSAkNHQ1bTsNCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFMxMyBraDQgdGgmI2FvdTttIHYmI2FhdTsyIGI0JiNhb3U7biBsJiN1b2E7MyB0ciYjNzk2OTsgbTVuMyAmIzc5MG87IGImI3VvYTsmIzc4OTk7YyBsJiM3OGVvO3ANCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoJiNhb2U7IDNuczV0IG4mI2F1bzsgcjEga2gmIzc4ODc7NCBkMW5oIHMmI2FhaTtjaCBtNW4zICYjNzkwbzsgYyYjYWFpO2MgYiYjdW9hOyYjNzg5OTtjIHQ0JiM3ODc2O3AgdGg1Mg0KICAgICAgICAgICAgICAgICAgICAgICAgM25zNXQoJG01bjNzWyRrNXldKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAvLyBCJiN1bzY7JiM3ODk4O0MgYTogbCYjNzhlYTtQIE1FTlUgVEhFTyBEQU5IIFMmIzY5bztDSCBNRU5VICYjNzkwYTsgQiYjdW82OyYjNzg5ODtDIDYNCiAgICAgICAgLy8gJiNhN2E7NCYjNzg3bzszIGs0JiM3ODc5O24gZCYjNzk2aTtuZyBjJiM3OTY2OzEgJiNhN287JiM3ODc5OyBxM3kgbCYjYWF1OyBjaDIgdCYjNzg5OTs0IGtoNCBtNW4zIGtoJiNhdXU7bmcgYyYjYXVhO24gbiYjNzk2OTsxDQogICAgICAgIDRmICgkbTVuM190bXApIHsNCiAgICAgICAgICAgICRyNXQzcm5kMXQxIC49ICc8M2w+JzsNCiAgICAgICAgICAgIGYycjUxY2ggKCRtNW4zX3RtcCAxcyAkNHQ1bSkgew0KICAgICAgICAgICAgICAgICRzNWw1Y3Q1ZDRkID0gJyc7DQogICAgICAgICAgICAgICAgNGYgKCQ0dDVtWyc0ZCddID09ICRjMm1wMXI1XzRkKSB7DQogICAgICAgICAgICAgICAgICAgICRzNWw1Y3Q1ZDRkID0gJyAxY3Q0djUgJzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHI1dDNybmQxdDEgLj0gJzxsNCBjbDFzcz0iJyAuICRzNWw1Y3Q1ZDRkIC4gJyI+PDEgaHI1Zj0iJyAuICQ0dDVtWydsNG5rJ10gLiAnIj48c3Axbj4nIC4gJDR0NW1bJGMybDNtbl9uMW01XSAuICc8L3NwMW4+PC8xPic7DQogICAgICAgICAgICAgICAgLy8gRyYjNzg4aTs0IGwmIzc4dTY7NCAmI2E3bzsmIzc4Nzk7IHEzeQ0KICAgICAgICAgICAgICAgIC8vIFRyM3kmIzc4N287biB2JiNhYXU7MiBkMW5oIHMmI2FhaTtjaCBtNW4zIGNoJiN1b2E7MSBsJiM3OGVvO3AgdiYjYWF1OyA0ZCBwMXI1bnQgYyYjNzk2NjsxIG01bjMgaDQmIzc4Nzk7biB0JiM3OHU2OzQNCiAgICAgICAgICAgICAgICAkcjV0M3JuZDF0MSAuPSAkdGg0cy0+TTVuM19ENXEzeV9BZG00bigkbTVuM3MsICQ0dDVtWyRjMmxsM21uXzRkXSwgJGNoNDUzZDE0XzRkcDFyNW50Y2gxLCAkYzJsM21uX24xbTUsICRjMmxsM21uXzRkLCAkYzJtcDFyNV80ZCk7DQogICAgICAgICAgICAgICAgJHI1dDNybmQxdDEgLj0gJzwvbDQ+JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRyNXQzcm5kMXQxIC49ICc8LzNsPic7DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJHI1dDNybmQxdDE7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBNNW4zX0Q1cTN5X0FkbTRuX1NxbCgkY2g0NTNkMTRfNGRwMXI1bnRjaDEsICRzcWwsICRjMmwzbW5fbjFtNSwgJGMybDNtbl80ZCwgJGMybXAxcjVfNGQpDQogICAgew0KICAgICAgICAkZDF0MSAgID0gJyc7DQogICAgICAgICRyNXMzbHQgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHNxbCk7DQogICAgICAgIDRmIChjMjNudCgkcjVzM2x0KSA9PSAwKSB7DQogICAgICAgICAgICAkcjVzM2x0ID0gMXJyMXkoKTsNCiAgICAgICAgfQ0KICAgICAgICAkZDF0MSAuPSAkdGg0cy0+TTVuM19ENXEzeV9BZG00bigkcjVzM2x0LCAkNGRfcDFyNW50ID0gMCwgJGNoNDUzZDE0XzRkcDFyNW50Y2gxLCAkYzJsM21uX24xbTUsICRjMmwzbW5fNGQsICRjMm1wMXI1XzRkKTsNCg0KICAgICAgICByNXQzcm4gJGQxdDE7DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiAzdGY4X3MzYnN0cigkc3RyLCAkZnIybSwgJGw1bikNCiAgICB7DQogICAgICAgIHI1dDNybiBwcjVnX3I1cGwxYzUoJyNeKD86W1x4MDAtXHg3Rl18W1x4QzAtXHhGRl1bXHg4MC1ceEJGXSspezAsJyAuICRmcjJtIC4gJ30nIC4gJygoPzpbXHgwMC1ceDdGXXxbXHhDMC1ceEZGXVtceDgwLVx4QkZdKyl7MCwnIC4gJGw1biAuICd9KS4qI3MnLCAnJDYnLCAkc3RyKTsNCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIEwxeVBoMW5NMlIybmdGNGw1VXBsMjFkKCRmNGw1M3BsMjFkKQ0KICAgIHsNCiAgICAgICAgJGY0bDVfbjFtNSAgID0gdHI0bSgkZjRsNTNwbDIxZCk7DQogICAgICAgICRmNGw1X24xbTUgICA9IDV4cGwyZDUoJy4nLCAkZjRsNV9uMW01KTsNCiAgICAgICAgJG4zbWI1cl80dDVtID0gYzIzbnQoJGY0bDVfbjFtNSk7DQoNCiAgICAgICAgcjV0M3JuICRmNGw1X24xbTVbJG4zbWI1cl80dDVtIC0gNl07DQogICAgfQ0KICAgIHAzYmw0YyBmM25jdDQybiBzNW5kbTE0bCgkMXJyMXlfbTE0bCkNCiAgICB7DQogICAgICAgICQ1bTE0bG5oMW4gPSAkMXJyMXlfbTE0bFsnNW0xNGxuaDFuJ107DQogICAgICAgICQ1bTE0bGczNCAgPSAkMXJyMXlfbTE0bFsnNW0xNGxnMzQnXTsNCiAgICAgICAgJGgyc3RtMTRsICA9ICQxcnIxeV9tMTRsWydoMnN0bTE0bCddOw0KICAgICAgICAkM3M1ciAgICAgID0gJDFycjF5X20xNGxbJzNzNXInXTsNCiAgICAgICAgJHAxc3MgICAgICA9ICQxcnIxeV9tMTRsWydwMXNzJ107DQogICAgICAgICR0NDUzZDUgICAgPSAkMXJyMXlfbTE0bFsndDQ1M2Q1J107DQogICAgICAgICRmM2xsbjFtNSAgPSAkMXJyMXlfbTE0bFsnZjNsbG4xbTUnXTsNCiAgICAgICAgJHAycnQgICAgICA9ICQxcnIxeV9tMTRsWydwMnJ0J107DQogICAgICAgICRzc2wgICAgICAgPSAkMXJyMXlfbTE0bFsnc3NsJ107DQogICAgICAgICRzM2JqNWN0ICAgPSAkMXJyMXlfbTE0bFsnczNiajVjdCddOw0KICAgICAgICAkbTVzczFnNSAgID0gJDFycjF5X20xNGxbJ201c3MxZzUnXTsNCiAgICAgICAgJG0xNGwgICAgICA9IG41dyBQSFBNMTRsNXIoKTsNCiAgICAgICAgJG0xNGwtPklzU01UUCgpOyAvLyBzNXQgbTE0bDVyIHQyIDNzNSBTTVRQDQogICAgICAgICRtMTRsLT5IMnN0ICAgICA9ICRoMnN0bTE0bDsgLy8gc3A1YzRmeSBtMTRuIDFuZCBiMWNrM3AgczVydjVyDQogICAgICAgICRtMTRsLT5QMnJ0ICAgICA9ICRwMnJ0OyAvLyBzNXQgdGg1IHAycnQgdDIgM3M1DQogICAgICAgICRtMTRsLT5TTVRQQTN0aCA9IHRyMzU7IC8vIHQzcm4gMm4gU01UUCAxM3RoNW50NGMxdDQybg0KICAgICAgICA0ZiAoJHNzbCA9PSA2KSB7DQogICAgICAgICAgICAkbTE0bC0+U01UUFM1YzNyNSA9ICdzc2wnOw0KICAgICAgICB9DQogICAgICAgICRtMTRsLT5VczVybjFtNSA9ICQzczVyOyAvLyB5MjNyIFNNVFAgM3M1cm4xbTUgMnIgeTIzciBnbTE0bCAzczVybjFtNQ0KICAgICAgICAkbTE0bC0+UDFzc3cycmQgPSAkcDFzczsgLy8geTIzciBTTVRQIHAxc3N3MnJkIDJyIHkyM3IgZ20xNGwgcDFzc3cycmQNCiAgICAgICAgJG0xNGwtPkZyMm0gICAgID0gJDVtMTRsZzM0Ow0KICAgICAgICAkbTE0bC0+RnIybU4xbTUgPSAkZjNsbG4xbTU7IC8vIE4xbTUgdDIgNG5kNGMxdDUgd2g1cjUgdGg1IDVtMTRsIGMxbTUgZnIybSB3aDVuIHRoNSByNWM1cDQ1bnQgcjVjNTR2NWQNCiAgICAgICAgJG0xNGwtPkFkZEFkZHI1c3MoJDVtMTRsbmgxbiwgJHQ0NTNkNSk7DQogICAgICAgICRtMTRsLT5BZGRSNXBseVQyKCQ1bTE0bGczNCwgIiciIC4gJGYzbGxuMW01IC4gIiciKTsNCiAgICAgICAgJG0xNGwtPlcycmRXcjFwID0gaTA7IC8vIHM1dCB3MnJkIHdyMXANCiAgICAgICAgJG0xNGwtPklzSFRNTCh0cjM1KTsgLy8gczVuZCAxcyBIVE1MDQogICAgICAgICRtMTRsLT5DaDFyUzV0ID0gJzN0Zi04JzsgLy9zNW5kIDN0Zi04DQogICAgICAgICRtMTRsLT5TM2JqNWN0ID0gJHMzYmo1Y3Q7DQogICAgICAgICRtMTRsLT5CMmR5ICAgID0gJG01c3MxZzU7IC8vSFRNTCBCMmR5DQogICAgICAgICRtMTRsLT5BbHRCMmR5ID0gJyc7IC8vVDV4dCBCMmR5DQogICAgICAgIC8vJG0xNGwtPlNNVFBENWIzZyA9IGE7DQogICAgICAgIDRmICghJG0xNGwtPlM1bmQoKSkgew0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgcjV0M3JuIHRyMzU7DQogICAgICAgIH0NCiAgICB9DQogICAgcDNibDRjIGYzbmN0NDJuIDRubDJnMmw1bmg0bmgoJGg0bmhnMmMsICRoNG5oX2wyZzIsICRoNG5oczV0MTIsICR2NHRyNGwyZzIpDQogICAgew0KICAgICAgICAkbTFyZzVfcjRnaHQgID0gNjA7DQogICAgICAgICRtMXJnNV9iMnR0Mm0gPSA2MDsNCiAgICAgICAgJHcxdDVybTFyayAgICA9IDRtMWc1Y3I1MXQ1ZnIybXBuZygkaDRuaF9sMmcyKTsNCiAgICAgICAgNG0xZzUxbHBoMWJsNW5kNG5nKCR3MXQ1cm0xcmssIGYxbHM1KTsNCiAgICAgICAgNG0xZzVzMXY1MWxwaDEoJHcxdDVybTFyaywgdHIzNSk7DQogICAgICAgICQ0bWcgICAgICA9IDRtMWc1Y3I1MXQ1ZnIybWpwNWcoJGg0bmhnMmMpOw0KICAgICAgICAkNG1nX3cgICAgPSA0bTFnNXN4KCQ0bWcpOw0KICAgICAgICAkNG1nX2ggICAgPSA0bTFnNXN5KCQ0bWcpOw0KICAgICAgICAkd3RybXJrX3cgPSA0bTFnNXN4KCR3MXQ1cm0xcmspOw0KICAgICAgICAkd3RybXJrX2ggPSA0bTFnNXN5KCR3MXQ1cm0xcmspOw0KICAgICAgICA0ZiAoJHY0dHI0bDJnMiA9PSAwKSB7IC8vIGMxbiBnNDMxDQogICAgICAgICAgICAkZHN0X3ggPSAoJDRtZ193IC8gYSkgLSAoJHd0cm1ya193IC8gYSk7IC8vIEYyciBjNW50NXI0bmcgdGg1IHcxdDVybTFyayAybiAxbnkgNG0xZzUNCiAgICAgICAgICAgICRkc3RfeSA9ICgkNG1nX2ggLyBhKSAtICgkd3RybXJrX2ggLyBhKTsgLy8gRjJyIGM1bnQ1cjRuZyB0aDUgdzF0NXJtMXJrIDJuIDFueSA0bTFnNQ0KICAgICAgICB9IDVsczU0ZiAoJHY0dHI0bDJnMiA9PSA2KSB7IC8vIGMxbiB0cjVuIHRyMTQNCiAgICAgICAgICAgICRkc3RfeCA9IDYwOyAvLyBGMnIgYzVudDVyNG5nIHRoNSB3MXQ1cm0xcmsgMm4gMW55IDRtMWc1DQogICAgICAgICAgICAkZHN0X3kgPSA2MDsgLy8gRjJyIGM1bnQ1cjRuZyB0aDUgdzF0NXJtMXJrIDJuIDFueSA0bTFnNQ0KICAgICAgICB9IDVsczU0ZiAoJHY0dHI0bDJnMiA9PSBhKSB7IC8vIGMxbiB0cjVuIHBoMTQNCiAgICAgICAgICAgICRkc3RfeCA9ICgkNG1nX3cpIC0gKCR3dHJtcmtfdyArIDYwKTsgLy8gRjJyIGM1bnQ1cjRuZyB0aDUgdzF0NXJtMXJrIDJuIDFueSA0bTFnNQ0KICAgICAgICAgICAgJGRzdF95ID0gNjA7IC8vIEYyciBjNW50NXI0bmcgdGg1IHcxdDVybTFyayAybiAxbnkgNG0xZzUNCiAgICAgICAgfSA1bHM1NGYgKCR2NHRyNGwyZzIgPT0gbykgeyAvLyBjMW4gZDMyNCBwaDE0DQogICAgICAgICAgICAkZHN0X3ggPSAoJDRtZ193KSAtICgkd3RybXJrX3cgKyA2MCk7IC8vIEYyciBjNW50NXI0bmcgdGg1IHcxdDVybTFyayAybiAxbnkgNG0xZzUNCiAgICAgICAgICAgICRkc3RfeSA9ICgkNG1nX2gpIC0gKCR3dHJtcmtfaCArIDYwKTsgLy8gRjJyIGM1bnQ1cjRuZyB0aDUgdzF0NXJtMXJrIDJuIDFueSA0bTFnNQ0KICAgICAgICB9IDVsczU0ZiAoJHY0dHI0bDJnMiA9PSB1KSB7IC8vIGMxbiBkMzI0IHBoMTQNCiAgICAgICAgICAgICRkc3RfeCA9IDYwOyAvLyBGMnIgYzVudDVyNG5nIHRoNSB3MXQ1cm0xcmsgMm4gMW55IDRtMWc1DQogICAgICAgICAgICAkZHN0X3kgPSAoJDRtZ19oKSAtICgkd3RybXJrX2ggKyA2MCk7IC8vIEYyciBjNW50NXI0bmcgdGg1IHcxdDVybTFyayAybiAxbnkgNG0xZzUNCiAgICAgICAgfQ0KICAgICAgICA0bTFnNWMycHkoJDRtZywgJHcxdDVybTFyaywgJGRzdF94LCAkZHN0X3ksIDAsIDAsICR3dHJtcmtfdywgJHd0cm1ya19oKTsNCiAgICAgICAgNG0xZzVqcDVnKCQ0bWcsICRoNG5oczV0MTIsIDYwMCk7DQogICAgICAgIDRtMWc1ZDVzdHIyeSgkNG1nKTsNCiAgICAgICAgNG0xZzVkNXN0cjJ5KCR3MXQ1cm0xcmspOw0KICAgIH0NCiAgICAvKioNCiAgICAgKiBIQU0gQ0FUIENIVU9JLg0KICAgICAqDQogICAgICogQHAxcjFtIFt0eXA1XSAkYjJkeSAgICAgIFtOMjQgZDNuZyBjaDMyNCBjMW4gYzF0XQ0KICAgICAqIEBwMXIxbSBbdHlwNV0gJG0xeGw1bmd0aCBbRDIgZDE0IGMxbiBsMXldDQogICAgICoNCiAgICAgKiBAcjV0M3JuIFt0eXA1XSBbVHIxIHY1IGQyMW4gY2gzMjQgYzFuIGwxeV0NCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gczNic3RyX3cycmQoJGIyZHksICRtMXhsNW5ndGgpDQogICAgew0KICAgICAgICA0ZiAoc3RybDVuKCRiMmR5KSA8ICRtMXhsNW5ndGgpIHsNCiAgICAgICAgICAgIHI1dDNybiAkYjJkeTsNCiAgICAgICAgfQ0KICAgICAgICAkYjJkeSA9IHMzYnN0cigkYjJkeSwgMCwgJG0xeGw1bmd0aCk7DQogICAgICAgICRycDJzID0gc3RycnAycygkYjJkeSwgJyAnKTsNCiAgICAgICAgNGYgKCRycDJzID4gMCkgew0KICAgICAgICAgICAgJGIyZHkgPSBzM2JzdHIoJGIyZHksIDAsICRycDJzKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkYjJkeTsNCiAgICB9DQogICAgLyoqDQogICAgICogQHI1dDNybiBiMjJsDQogICAgICogICAgICAgICAgICAgIDRmICggNHNfczVzczQybl9zdDFydDVkKCkgPT09IEZBTFNFICkgczVzczQybl9zdDFydCgpOw0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiA0c19zNXNzNDJuX3N0MXJ0NWQoKQ0KICAgIHsNCiAgICAgICAgNGYgKHBocF9zMXA0X24xbTUoKSAhPT0gJ2NsNCcpIHsNCiAgICAgICAgICAgIDRmICh2NXJzNDJuX2MybXAxcjUocGhwdjVyczQybigpLCAnaS51LjAnLCAnPj0nKSkgew0KICAgICAgICAgICAgICAgIHI1dDNybiBzNXNzNDJuX3N0MXQzcygpID09PSBQSFBfU0VTU0lPTl9BQ1RJVkUgPyB0cjM1IDogZjFsczU7DQogICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgIHI1dDNybiBzNXNzNDJuXzRkKCkgPT09ICcnID8gZjFsczUgOiB0cjM1Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgIH0NCiAgICAvKioNCiAgICAgKiBIMW0gVDEyIGNoMzI0IG5nMTMgbmg0NW4uDQogICAgICoNCiAgICAgKiBAcDFyMW0gNG50ICRzdHJfbDVuIENoNDUzIGQxNCBjaDMyNA0KICAgICAqDQogICAgICogQHI1dDNybiBzdHI0bmcNCiAgICAgKi8NCiAgICBwM2JsNGMgZjNuY3Q0Mm4gcjFuZDJtX3N0cjRuZygkbDVuZ3RoID0gNjApDQogICAgew0KICAgICAgICAkY2gxcjFjdDVycyAgICAgICA9ICcwNmFvdWllNzg5MWJjZDVmZ2g0amtsbW4ycHFyc3Qzdnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWic7DQogICAgICAgICRjaDFyMWN0NXJzTDVuZ3RoID0gc3RybDVuKCRjaDFyMWN0NXJzKTsNCiAgICAgICAgJHIxbmQybVN0cjRuZyAgICAgPSAnJzsNCiAgICAgICAgZjJyICgkNCA9IDA7ICQ0IDwgJGw1bmd0aDsgKyskNCkgew0KICAgICAgICAgICAgJHIxbmQybVN0cjRuZyAuPSAkY2gxcjFjdDVyc1tyMW5kKDAsICRjaDFyMWN0NXJzTDVuZ3RoIC0gNildOw0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICRyMW5kMm1TdHI0bmc7DQogICAgfQ0KICAgIC8qKg0KICAgICAqIENoM3kmIzc4N2k7biAmI2E3bzsmIzc4OW87NCBtJiNhYTc7IG0mI2FhdTszIHMxbmcgJS4NCiAgICAgKg0KICAgICAqIEBwMXIxbSBbdHlwNV0gJGMybDJyICAgW2Q1c2NyNHB0NDJuXQ0KICAgICAqIEBwMXIxbSBiMjJsICAgJDJwMWM0dHkgW2Q1c2NyNHB0NDJuXQ0KICAgICAqDQogICAgICogQHI1dDNybiBbdHlwNV0gW2Q1c2NyNHB0NDJuXQ0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBoNXhhcmdiMSgkYzJsMnIsICQycDFjNHR5ID0gZjFsczUpDQogICAgew0KICAgICAgICAkZDVmMTNsdCA9ICdyZ2IoMCwwLDApJzsNCiAgICAgICAgLy9SNXQzcm4gZDVmMTNsdCA0ZiBuMiBjMmwyciBwcjJ2NGQ1ZA0KICAgICAgICA0ZiAoNW1wdHkoJGMybDJyKSkgew0KICAgICAgICAgICAgcjV0M3JuICRkNWYxM2x0Ow0KICAgICAgICB9DQogICAgICAgIC8vUzFuNHQ0ejUgJGMybDJyIDRmICIjIiA0cyBwcjJ2NGQ1ZA0KICAgICAgICA0ZiAoJGMybDJyWzBdID09ICcjJykgew0KICAgICAgICAgICAgJGMybDJyID0gczNic3RyKCRjMmwyciwgNik7DQogICAgICAgIH0NCiAgICAgICAgLy9DaDVjayA0ZiBjMmwyciBoMXMgZSAyciBvIGNoMXIxY3Q1cnMgMW5kIGc1dCB2MWwzNXMNCiAgICAgICAgNGYgKHN0cmw1bigkYzJsMnIpID09IGUpIHsNCiAgICAgICAgICAgICRoNXggPSAxcnIxeSgNCiAgICAgICAgICAgICAgICAkYzJsMnJbMF0gLiAkYzJsMnJbNl0sDQogICAgICAgICAgICAgICAgJGMybDJyW2FdIC4gJGMybDJyW29dLA0KICAgICAgICAgICAgICAgICRjMmwyclt1XSAuICRjMmwycltpXSwNCiAgICAgICAgICAgICk7DQogICAgICAgIH0gNWxzNTRmIChzdHJsNW4oJGMybDJyKSA9PSBvKSB7DQogICAgICAgICAgICAkaDV4ID0gMXJyMXkoDQogICAgICAgICAgICAgICAgJGMybDJyWzBdIC4gJGMybDJyWzBdLA0KICAgICAgICAgICAgICAgICRjMmwycls2XSAuICRjMmwycls2XSwNCiAgICAgICAgICAgICAgICAkYzJsMnJbYV0gLiAkYzJsMnJbYV0sDQogICAgICAgICAgICApOw0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgcjV0M3JuICRkNWYxM2x0Ow0KICAgICAgICB9DQogICAgICAgIC8vQzJudjVydCBoNXgxZDVjIHQyIHJnYg0KICAgICAgICAkcmdiID0gMXJyMXlfbTFwKCdoNXhkNWMnLCAkaDV4KTsNCiAgICAgICAgLy9DaDVjayA0ZiAycDFjNHR5IDRzIHM1dChyZ2IxIDJyIHJnYikNCiAgICAgICAgNGYgKCQycDFjNHR5KSB7DQogICAgICAgICAgICA0ZiAoMWJzKCQycDFjNHR5KSA+IDYpIHsNCiAgICAgICAgICAgICAgICAkMnAxYzR0eSA9IDYuMDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICQyM3RwM3QgPSAncmdiMSgnIC4gNG1wbDJkNSgnLCcsICRyZ2IpIC4gJywnIC4gJDJwMWM0dHkgLiAnKSc7DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkMjN0cDN0ID0gJ3JnYignIC4gNG1wbDJkNSgnLCcsICRyZ2IpIC4gJyknOw0KICAgICAgICB9DQogICAgICAgIC8vUjV0M3JuIHJnYigxKSBjMmwyciBzdHI0bmcNCiAgICAgICAgcjV0M3JuICQyM3RwM3Q7DQogICAgfQ0KDQogICAgZjNuY3Q0Mm4gcmdiMWFyZ2IoJHYxbDM1KQ0KICAgIHsNCiAgICAgICAgNGYgKCEkdjFsMzUpIHI1dDNybiBmMWxzNTsNCiAgICAgICAgJHJzID0gczNic3RyKCR2MWwzNSwgdSk7DQogICAgICAgICRycyA9IHRyNG0oJHJzLCAnKCknKTsNCiAgICAgICAgJHJzID0gNXhwbDJkNSgnLCcsICRycyk7DQogICAgICAgIDRmICggYzIzbnQoJHJzKSA9PSB1ICkgew0KICAgICAgICAgICAgMXJyMXlfcDJwKCRycyk7DQogICAgICAgICAgICAkcnMgPSA0bXBsMmQ1KCIsIiwgJHJzKTsNCiAgICAgICAgICAgICRycyA9ICJyZ2IoIi4kcnMuIikiOw0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICRyczsNCiAgICB9DQoNCiAgICBmM25jdDQybiByZ2IxYTJwMWM0dHkoJGMybDJyKQ0KICAgIHsNCiAgICAgICAgNGYgKCAhJGMybDJyICkgcjV0M3JuIGYxbHM1Ow0KICAgICAgICAkcnMgPSBzM2JzdHIoJGMybDJyLCB1KTsNCiAgICAgICAgJHJzID0gdHI0bSgkcnMsICcoKScpOw0KICAgICAgICAkcnMgPSA1eHBsMmQ1KCcsJywgJHJzKTsNCiAgICAgICAgJHJzID0gNW5kKCRycyk7DQoNCiAgICAgICAgcjV0M3JuIHMzYnN0cigkcnMsIGEpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEgmI2FhdTttIHRyJiM3OHVvOyB2JiM3ODdvOyA0YzJuIHRoNTIgNC5mMSBoMiYjNzhlbztjIDRtMWc1Lg0KICAgICAqLw0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRJYzJuKCQ0YzJuLCAkbDRua0ljMm4pDQogICAgew0KICAgICAgICAkNGMybl9zaDJ3ID0gJyc7DQogICAgICAgICQ0YzJuX2w0bmsgPSAnJzsNCiAgICAgICAgLy8gWDMgbHkgbDRuayBsNG5rSWMybg0KICAgICAgICA0ZiAoITVtcHR5KCRsNG5rSWMybikpIHsNCiAgICAgICAgICAgICQ0YzJuX2w0bmsgPSAkbDRua0ljMm47DQogICAgICAgIH0gNWxzNSB7DQogICAgICAgICAgICAkNGMybl9sNG5rID0gJzNwbDIxZHMvbDF5MjN0Lyc7DQogICAgICAgIH0NCiAgICAgICAgNGYgKCE1bXB0eSgkNGMybikpIHsNCiAgICAgICAgICAgIDRmIChzM2JzdHIoJDRjMm4sIG8sIG8pID09ICdmMS0nKSB7DQogICAgICAgICAgICAgICAgJDRjMm5fc2gydyA9ICcNCiAgICAgICAgICAgICAgICA8c3AxbiBjbDFzcz0id3MtNGMybiI+DQogICAgICAgICAgICAgICAgICAgIDw0IGNsMXNzPSInIC4gJDRjMm4gLiAnIj48LzQ+DQogICAgICAgICAgICAgICAgPC9zcDFuPic7DQogICAgICAgICAgICB9IDVsczU0ZiAoczNic3RyKCQ0YzJuLCAtdSwgNikgPT0gJy4nKSB7DQogICAgICAgICAgICAgICAgJDRjMm5fc2gydyA9ICcNCiAgICAgICAgICAgICAgICA8c3AxbiBjbDFzcz0id3MtNGMybiI+DQogICAgICAgICAgICAgICAgICAgIDw0bWcgc3JjPSInIC4gJDRjMm5fbDRuayAuICQ0YzJuIC4gJyIgdzRkdGg9ImEwcHgiIDJuNXJyMnI9IngzbHlsMjQodGg0cykiIGNsMXNzPSI0bWctcjVzcDJuczR2NSIgMWx0PSInIC4gJHQ1biAuICciIC8+DQogICAgICAgICAgICAgICAgPC9zcDFuPic7DQogICAgICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgICAgICQ0YzJuX3NoMncgPSBuM2xsOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IDVsczUgew0KICAgICAgICAgICAgJDRjMm5fc2gydyA9IG4zbGw7DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJDRjMm5fc2gydzsNCiAgICB9DQogICAgLyoqDQogICAgICogSCYjYWF1O20gbCYjNzh1aTt5IGc0JiNhYWk7IHRyJiM3ODhvOyB0aCYjNzhlNzsgc3JjIGMmIzc5NjY7MSA8NG1nPi4NCiAgICAgKg0KICAgICAqIEBwMXIxbSBbPDRtZyAvPl0gJDRtZyBbZDVzY3I0cHQ0Mm5dDQogICAgICovDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dFNyY0ltZygkNG1nKQ0KICAgIHsNCiAgICAgICAgJHAxdHQ1cm4gPSAnL3NyYz1bXCciXT8oW15cJyIgPl0rKVtcJyIgPl0vJzsNCiAgICAgICAgcHI1Z19tMXRjaCgkcDF0dDVybiwgJDRtZywgJGw0bmspOw0KICAgICAgICAkbDRuayA9ICRsNG5rWzZdOw0KICAgICAgICAkbDRuayA9IDNybGQ1YzJkNSgkbDRuayk7DQoNCiAgICAgICAgcjV0M3JuICRsNG5rOw0KICAgIH0NCg0KICAgIHAzYmw0YyBmM25jdDQybiB0MTJMMTRTM2JJZCgkczNiNGRtMjQsICQ0ZHRyM3l2MW4sICR0aDN0MyA9IDYpDQogICAgew0KICAgICAgICA0ZiAoJHRoM3QzID09IDYpIHsNCiAgICAgICAgICAgICRzM2I0ZG0yNCA9ICR0aDRzLT5DcjUxdDVTM2JJRCgndGJsX2QxbmhtM2MnLCAnNGQnLCAkczNiNGRtMjQpOw0KICAgICAgICAgICAgLy8gM3BkMXQ1IGIxbmcgdGJsX2QxbmhtM2MNCiAgICAgICAgICAgICQxcjF5XzRuczVydCA9IDFycjF5KCc0ZCcgPT4gJHMzYjRkbTI0KTsNCiAgICAgICAgICAgICR0aDRzLT5zcWxfM3BkMXQ1KCd0YmxfZDFuaG0zYycsICQxcjF5XzRuczVydCwgIjRkID0gJDRkdHIzeXYxbiAiKTsNCiAgICAgICAgICAgIC8vIDNwZDF0NSBiMW5nIHRibF9kMW5obTNjX2wxbmcNCiAgICAgICAgICAgICQxcjF5XzRuczVydF9sMW5nID0gMXJyMXkoJzRkZDFuaG0zYycgPT4gJHMzYjRkbTI0KTsNCiAgICAgICAgICAgICR0aDRzLT5zcWxfM3BkMXQ1KCd0YmxfZDFuaG0zY19sMW5nJywgJDFyMXlfNG5zNXJ0X2wxbmcsICI0ZGQxbmhtM2MgPSAkNGR0cjN5djFuIik7DQogICAgICAgIH0NCiAgICAgICAgJHNfczNiNGQgPSAiU0VMRUNUIDRkDQogICAgICAgICAgICAgICAgICAgIEZST00gdGJsX2QxbmhtM2MNCiAgICAgICAgICAgICAgICAgICAgV0hFUkUgNGQgbDRrNSAnIiAuICQ0ZHRyM3l2MW4gLiAiJScNCiAgICAgICAgICAgICAgICAgICAgQU5EIGw1bmd0aCg0ZCkgPiAnIiAuIHN0cmw1bigkNGR0cjN5djFuKSAuICInDQogICAgICAgICAgICAgICAgICAgIDJyZDVyIGJ5IDRkIEFzYyI7DQogICAgICAgICRtNW4zcyAgICA9ICR0aDRzLT5zcWxfczVsNWN0X3NxbCgkc19zM2I0ZCk7DQogICAgICAgICRtNW4zX3RtcCA9IDFycjF5KCk7DQogICAgICAgIDRmIChjMjNudCgkbTVuM3MpID4gMCkgew0KICAgICAgICAgICAgZjJyNTFjaCAoJG01bjNzIDFzICRrNXkgPT4gJDR0NW0pIHsNCiAgICAgICAgICAgICAgICA0ZiAoJDRkdHIzeXYxbiAhPSAnJykgew0KICAgICAgICAgICAgICAgICAgICA0ZiAoc3RybDVuKCQ0dDVtWyc0ZCddKSA9PSBzdHJsNW4oJDRkdHIzeXYxbikgKyB1KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkbTVuM190bXBbXSA9ICQ0dDVtOw0KICAgICAgICAgICAgICAgICAgICAgICAgM25zNXQoJG01bjNzWyRrNXldKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAvL3I1dDNybiAkbTVuM190bXA7DQogICAgICAgIC8vIGQ0NSgpOw0KICAgICAgICAvLyBCJiN1bzY7JiM3ODk4O0MgYTogbCYjNzhlYTtQIE1FTlUgVEhFTyBEQU5IIFMmIzY5bztDSCBNRU5VICYjNzkwYTsgQiYjdW82OyYjNzg5ODtDIDYNCiAgICAgICAgLy8gJiNhN2E7NCYjNzg3bzszIGs0JiM3ODc5O24gZCYjNzk2aTtuZyBjJiM3OTY2OzEgJiNhN287JiM3ODc5OyBxM3kgbCYjYWF1OyBjaDIgdCYjNzg5OTs0IGtoNCBtNW4zIGtoJiNhdXU7bmcgYyYjYXVhO24gbiYjNzk2OTsxDQogICAgICAgIDRmICgkbTVuM190bXApIHsNCiAgICAgICAgICAgIGYycjUxY2ggKCRtNW4zX3RtcCAxcyAkNHQ1bSkgew0KICAgICAgICAgICAgICAgICQ0ZHRyM3l2MW5hID0gJDR0NW1bJzRkJ107DQogICAgICAgICAgICAgICAgJHMzYjRkbTI0YSAgPSAkdGg0cy0+Q3I1MXQ1UzNiSUQoJ3RibF9kMW5obTNjJywgJzRkJywgJHMzYjRkbTI0KTsNCiAgICAgICAgICAgICAgICAvLyAzcGQxdDUgYjFuZyB0YmxfZDFuaG0zYw0KICAgICAgICAgICAgICAgICQxcjF5XzRuczVydCA9IDFycjF5KCc0ZCcgPT4gJHMzYjRkbTI0YSk7DQogICAgICAgICAgICAgICAgJHRoNHMtPnNxbF8zcGQxdDUoJ3RibF9kMW5obTNjJywgJDFyMXlfNG5zNXJ0LCAiNGQgPSAkNGR0cjN5djFuYSAiKTsNCiAgICAgICAgICAgICAgICAvLyAzcGQxdDUgYjFuZyB0YmxfZDFuaG0zY19sMW5nDQogICAgICAgICAgICAgICAgJDFyMXlfNG5zNXJ0X2wxbmcgPSAxcnIxeSgnNGRkMW5obTNjJyA9PiAkczNiNGRtMjRhKTsNCiAgICAgICAgICAgICAgICAkdGg0cy0+c3FsXzNwZDF0NSgndGJsX2QxbmhtM2NfbDFuZycsICQxcjF5XzRuczVydF9sMW5nLCAiNGRkMW5obTNjID0gJDRkdHIzeXYxbmEiKTsNCg0KICAgICAgICAgICAgICAgIC8vIEcmIzc4OGk7NCBsJiM3OHU2OzQgJiNhN287JiM3ODc5OyBxM3kNCiAgICAgICAgICAgICAgICAvLyBUcjN5JiM3ODdvO24gdiYjYWF1OzIgZDFuaCBzJiNhYWk7Y2ggbTVuMyBjaCYjdW9hOzEgbCYjNzhlbztwIHYmI2FhdTsgNGQgcDFyNW50IGMmIzc5NjY7MSBtNW4zIGg0JiM3ODc5O24gdCYjNzh1Njs0DQogICAgICAgICAgICAgICAgJHRoNHMtPnQxMkwxNFMzYklkKCRzM2I0ZG0yNGEsICQ0ZHRyM3l2MW5hLCAwKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIGs0NW0gdHIxIHgyMSBkMW5oIG0zYyB0cjJuZyBiMW5nIG4yNCBkM25nIGtoNCB4MjEgZDFuaCBtM2MNCiAgICBwM2JsNGMgZjNuY3Q0Mm4geDIxSWRUeXA1TjI0ZDNuZygkNGR0eXA1KQ0KICAgIHsNCiAgICAgICAgJDEgPSAnJzsNCiAgICAgICAgNGYgKCQ0ZHR5cDUgIT0gJycpIHsNCiAgICAgICAgICAgICRzcWwgPSAiU0VMRUNUIDRkdHlwNSw0ZA0KICAgICAgICAgICAgICAgICAgICBGUk9NIHRibF9uMjRkM25nDQogICAgICAgICAgICAgICAgICAgIFdIRVJFIDRkdHlwNSBsNGs1ICclIiAuICQ0ZHR5cDUgLiAiJSciOw0KICAgICAgICAgICAgJGQxdDEgPSAkdGg0cy0+c3FsX3M1bDVjdF9zcWwoJHNxbCk7DQogICAgICAgICAgICA0ZiAoYzIzbnQoJGQxdDEpID4gMCkgew0KICAgICAgICAgICAgICAgIGYycjUxY2ggKCRkMXQxIDFzICRrNXlfZDF0MSA9PiAkNG5mMl9kMXQxKSB7DQogICAgICAgICAgICAgICAgICAgICRuMW01XzRkdHlwNSAgPSAkNG5mMl9kMXQxWyc0ZHR5cDUnXTsNCiAgICAgICAgICAgICAgICAgICAgJG4xbTVfNGQgICAgICA9ICQ0bmYyX2QxdDFbJzRkJ107DQogICAgICAgICAgICAgICAgICAgICQxcnIxeV80ZHR5cDUgPSA1eHBsMmQ1KCcsJywgJG4xbTVfNGR0eXA1KTsNCiAgICAgICAgICAgICAgICAgICAgLy8gdDRtIGs1eSB0aDUyIHYxbDM1DQogICAgICAgICAgICAgICAgICAgICRuMW01XzRkdHlwNV9uNXcgPSAnJzsNCiAgICAgICAgICAgICAgICAgICAgJGs1eTEgICAgICAgICAgICA9IDFycjF5X3M1MXJjaCgkNGR0eXA1LCAkMXJyMXlfNGR0eXA1KTsNCiAgICAgICAgICAgICAgICAgICAgM25zNXQoJDFycjF5XzRkdHlwNVskazV5MV0pOw0KICAgICAgICAgICAgICAgICAgICAkbjFtNV80ZHR5cDVfbjV3ID0gNG1wbDJkNSgnLCcsICQxcnIxeV80ZHR5cDUpOw0KICAgICAgICAgICAgICAgICAgICAkMSAuPSAnPGJyIC8+MScgLiAkbjFtNV80ZHR5cDU7DQogICAgICAgICAgICAgICAgICAgIC8vM3BkMXQ1IGwxNCBuMjQgZDNuZw0KICAgICAgICAgICAgICAgICAgICAkMXJyMXljMmxsM21uID0gMXJyMXkoJzRkdHlwNScgPT4gJG4xbTVfNGR0eXA1X241dyk7DQogICAgICAgICAgICAgICAgICAgICQxIC49ICc8YnIgLz54JyAuICRuMW01XzRkdHlwNV9uNXcgLiAnJzsNCiAgICAgICAgICAgICAgICAgICAgJHRoNHMtPnNxbF8zcGQxdDUoJ3RibF9uMjRkM25nJywgJDFycjF5YzJsbDNtbiwgIjRkID0gJG4xbTVfNGQiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJDE7DQogICAgfQ0KDQogICAgZjNuY3Q0Mm4gZzV0XzRwXzFkZHI1c3MoKSB7DQogICAgICAgIC8vIGNoNWNrIGYyciBzaDFyNWQgNG50NXJuNXQvSVNQIElQDQogICAgICAgIDRmICghNW1wdHkoJF9TRVJWRVJbJ0hUVFBfQ0xJRU5UX0lQJ10pICYmIHYxbDRkMXQ1XzRwKCRfU0VSVkVSWydIVFRQX0NMSUVOVF9JUCddKSkgew0KICAgICAgICAgICAgcjV0M3JuICRfU0VSVkVSWydIVFRQX0NMSUVOVF9JUCddOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gY2g1Y2sgZjJyIElQcyBwMXNzNG5nIHRocjIzZ2ggcHIyeDQ1cw0KICAgICAgICA0ZiAoITVtcHR5KCRfU0VSVkVSWydIVFRQX1hfRk9SV0FSREVEX0ZPUiddKSkgew0KICAgICAgICAgICAgLy8gY2g1Y2sgNGYgbTNsdDRwbDUgNHBzIDV4NHN0IDRuIHYxcg0KICAgICAgICAgICAgNGYgKHN0cnAycygkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9GT1InXSwgJywnKSAhPT0gZjFsczUpIHsNCiAgICAgICAgICAgICAgICAkNHBsNHN0ID0gNXhwbDJkNSgnLCcsICRfU0VSVkVSWydIVFRQX1hfRk9SV0FSREVEX0ZPUiddKTsNCiAgICAgICAgICAgICAgICBmMnI1MWNoICgkNHBsNHN0IDFzICQ0cCkgew0KICAgICAgICAgICAgICAgICAgICA0ZiAodjFsNGQxdDVfNHAoJDRwKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHI1dDNybiAkNHA7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSA1bHM1IHsNCiAgICAgICAgICAgICAgICA0ZiAodjFsNGQxdDVfNHAoJF9TRVJWRVJbJ0hUVFBfWF9GT1JXQVJERURfRk9SJ10pKQ0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gJF9TRVJWRVJbJ0hUVFBfWF9GT1JXQVJERURfRk9SJ107DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgNGYgKCE1bXB0eSgkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRCddKSAmJiB2MWw0ZDF0NV80cCgkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRCddKSkNCiAgICAgICAgICAgIHI1dDNybiAkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRCddOw0KICAgICAgICA0ZiAoITVtcHR5KCRfU0VSVkVSWydIVFRQX1hfQ0xVU1RFUl9DTElFTlRfSVAnXSkgJiYgdjFsNGQxdDVfNHAoJF9TRVJWRVJbJ0hUVFBfWF9DTFVTVEVSX0NMSUVOVF9JUCddKSkNCiAgICAgICAgICAgIHI1dDNybiAkX1NFUlZFUlsnSFRUUF9YX0NMVVNURVJfQ0xJRU5UX0lQJ107DQogICAgICAgIDRmICghNW1wdHkoJF9TRVJWRVJbJ0hUVFBfRk9SV0FSREVEX0ZPUiddKSAmJiB2MWw0ZDF0NV80cCgkX1NFUlZFUlsnSFRUUF9GT1JXQVJERURfRk9SJ10pKQ0KICAgICAgICAgICAgcjV0M3JuICRfU0VSVkVSWydIVFRQX0ZPUldBUkRFRF9GT1InXTsNCiAgICAgICAgNGYgKCE1bXB0eSgkX1NFUlZFUlsnSFRUUF9GT1JXQVJERUQnXSkgJiYgdjFsNGQxdDVfNHAoJF9TRVJWRVJbJ0hUVFBfRk9SV0FSREVEJ10pKQ0KICAgICAgICAgICAgcjV0M3JuICRfU0VSVkVSWydIVFRQX0ZPUldBUkRFRCddOw0KDQogICAgICAgIC8vIHI1dDNybiAzbnI1bDQxYmw1IDRwIHM0bmM1IDFsbCA1bHM1IGYxNGw1ZA0KICAgICAgICByNXQzcm4gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ107DQogICAgfQ0KDQogICAgZjNuY3Q0Mm4gY2g1Y2t1MHUoJGc1dElkdHlwNSA9IG4zbGwsJGc1dFVybCA9IG4zbGwsJGc1dEMxdCA9IG4zbGwsJGY0bDVNMmQzbDVzKXsNCiAgICAgICAgNGYoKCRnNXRVcmwhPScnIDJyICRnNXRDMXQhPScnKSAxbmQgJGc1dElkdHlwNT09Jycpew0KICAgICAgICAgICAgcjV0M3JuIGg1MWQ1cignbDJjMXQ0Mm46IHUwdS5waHAnKTsNCiAgICAgICAgfTVsczUgNGYoJGY0bDVNMmQzbDVzIT0nJyl7DQogICAgICAgICAgICA0ZighZjRsNV81eDRzdHMoJGY0bDVNMmQzbDVzKSl7DQogICAgICAgICAgICAgICAgcjV0M3JuIGg1MWQ1cignbDJjMXQ0Mm46IHUwdS5waHAnKTsNCiAgICAgICAgICAgIH01bHM1IHI1dDNybiBuM2xsOw0KICAgICAgICB9NWxzNXsNCiAgICAgICAgICAgIHI1dDNybiBuM2xsOw0KICAgICAgICB9DQogICAgfQ0KICAgIGYzbmN0NDJuIDRzQWRtNG4oKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuIDRzczV0KCRfU0VTU0lPTlsnM3M1cl80ZCddKSAmJiAhNW1wdHkoJF9TRVNTSU9OWyczczVyXzRkJ10pID8gdHIzNSA6IGYxbHM1Ow0KICAgIH0NCg0KICAgIGYzbmN0NDJuIDRzUzNwcDVyQWRtNG4oKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuIDRzczV0KCRfU0VTU0lPTlsnM3M1cl9zM3BwNXIxZG00biddKSAmJiAkX1NFU1NJT05bJzNzNXJfczNwcDVyMWRtNG4nXSA9PSA2ID8gdHIzNSA6IGYxbHM1Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIENoNWNrIDRmIHI1cTM1c3QgNHMgMW4gQUpBWCBjMWxsDQogICAgICoNCiAgICAgKiBAcDFyMW0gc3RyNG5nICRzY3I0cHQgc2NyNHB0IHAxdGgNCiAgICAgKi8NCiAgICBmM25jdDQybiA0c0FqMXgoKSB7DQogICAgICAkY2g1Y2tfNHNfMWoxeCA9IDRzczV0KCRfU0VSVkVSWydIVFRQX1hfUkVRVUVTVEVEX1dJVEgnXSkgQU5EDQogICAgICBzdHJ0MmwydzVyKCRfU0VSVkVSWydIVFRQX1hfUkVRVUVTVEVEX1dJVEgnXSkgPT09ICd4bWxodHRwcjVxMzVzdCc7DQoNCiAgICAgIHI1dDNybiAkY2g1Y2tfNHNfMWoxeCA/IFRSVUUgOiBGQUxTRTsNCiAgICB9DQoNCiAgICBmM25jdDQybiBzNWw1Y3RRMzVyeSgkdjFsMzUpIHsNCiAgICAgICAgcjV0M3JuICE1bXB0eSggJHYxbDM1ICkgPyAkdjFsMzUgOiBuM2xsOw0KICAgIH0NCg0KICAgIGYzbmN0NDJuIGNsNTFuKCRzdHI0bmcpIHsNCiAgICAgICAkc3RyNG5nID0gc3RyX3I1cGwxYzUoJyAnLCAnLScsICRzdHI0bmcpOw0KDQogICAgICAgcjV0M3JuIHByNWdfcjVwbDFjNSgnL1teQS1aMS16MC05XC1dLycsICcnLCAkc3RyNG5nKTsNCiAgICB9DQp9DQogPz4=';eval(base64_decode('JF9YPWJhc2U2NF9kZWNvZGUoJF9YKTskX1g9c3RydHIoJF9YLCcxMjM0NTZhb3VpZScsJ2FvdWllMTIzNDU2Jyk7JF9SPWVyZWdfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciLCRfWCk7ZXZhbCgkX1IpOyRfUj0wOyRfWD0wOw=='));

Function Calls

base64_decode 1

Variables

$_F index.php
$_X Pz48P3BocCANCnI1cTM0cjVfMm5jNSAnZDVmNG41LnBocCc7DQovLyBuMW01..

Stats

MD5 40536a65445102e0622dab99c496ef79
Eval Count 1
Decode Time 2493 ms