xiaomianao666

小程序:茄子

Apr 29th, 2025
985
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@茄子@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi6IyE5a2QIiwiYXV0aG9yIjoi5rWB6IuPIiwidXJsIjoiaGlrZXI6Ly9lbXB0eSIsInZlcnNpb24iOjEsImNvbF90eXBlIjoibW92aWVfMiIsImNsYXNzX25hbWUiOiIiLCJ0eXBlIjoidmlkZW8iLCJjbGFzc191cmwiOiIiLCJhcmVhX25hbWUiOiIiLCJhcmVhX3VybCI6IiIsInNvcnRfbmFtZSI6IiIsInllYXJfbmFtZSI6IiIsInNvcnRfdXJsIjoiIiwieWVhcl91cmwiOiIiLCJmaW5kX3J1bGUiOiJqczogXG52YXIgZCA9IFtdO1xuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9ob21lJykpLnJ1bGUpO1xuc2V0UmVzdWx0KGQpIiwic2VhcmNoX3VybCI6Imhpa2VyOi8vZW1wdHk/cGFnZT1meXBhZ2Uma3c9KioiLCJncm91cCI6IiPvuI/ig6MxOCsiLCJzZWFyY2hGaW5kIjoianM6XG52YXIga3k9TVlfVVJMLnNwbGl0KCc9JylbMl07XG5wdXRNeVZhcigna2V5d29yZCcsa3kpXG4kLnJlcXVpcmUoXCJzZWFyY2hcIikiLCJkZXRhaWxfY29sX3R5cGUiOiJtb3ZpZV8zIiwiZGV0YWlsX2ZpbmRfcnVsZSI6IiIsInNkZXRhaWxfY29sX3R5cGUiOiJtb3ZpZV8xIiwic2RldGFpbF9maW5kX3J1bGUiOiIqIiwidWEiOiJtb2JpbGUiLCJwcmVSdWxlIjoiIiwicGFnZXMiOiJbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcImFlc1wiLFwicGF0aFwiOlwiYWVzXCIsXCJydWxlXCI6XCIvL+WKoOi9vUNyeXB0b0pT5bqTXFxuZXZhbChnZXRDcnlwdG9KUygpKVxcbi8vMTPkvY3ml7bpl7TmiLNcXG52YXIgdCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSApO1xcbi8v566A5Y2V5Yy56YWNXFxubGV0IHNwID0gKGl0LCBzLCBlKSA9PiBTdHJpbmcoaXQuc3BsaXQocylbMV0pLnNwbGl0KGUpWzBdO1xcbi8v6aKc6ImyXFxuZnVuY3Rpb24gc3Ryb25nKGQsIGMpIHtcXG4gICAgcmV0dXJuICfigJjigJjigJnigJk8c3Ryb25nPjxmb250IGNvbG9yPSMnICsgKGMgfHwgJzAwMDAwMCcpICsgJz4nICsgZCArICc8L2ZvbnQ+PC9zdHJvbmc+JztcXG59XFxuLy/nlJ/miJDml7bpl7TmiLNcXG5mdW5jdGlvbiBnZXRDdXJyZW50VGltZXN0YW1wKCkge1xcbiAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XFxufVxcbi8vbWQ15Yqg5a+GXFxuZnVuY3Rpb24gbWQ1KHN0cikge1xcbiAgICByZXR1cm4gQ3J5cHRvSlMuTUQ1KHN0cikudG9TdHJpbmcoKTtcXG59XFxuLy9zaGEyNTbliqDlr4ZcXG5mdW5jdGlvbiBzaGEyNTYoc3RyKSB7XFxuICAgIHJldHVybiBDcnlwdG9KUy5TSEEyNTYoc3RyKS50b1N0cmluZygpO1xcbn1cXG4vL+minOiJslxcbmZ1bmN0aW9uIGNvbG9yKHR4dCkge1xcbiAgICByZXR1cm4gICc8Yj48Zm9udCBjb2xvcj0nICsgJyNGRjY2OTknICsgJz4nICsgdHh0ICsgJzwvZm9udD48L2I+J1xcbn1cXG4vL+iMhOWtkOino+WvhuWHveaVsFxcbmZ1bmN0aW9uIHF6RGVjcnlwdCh3b3JkKSB7XFxuICAgIGNvbnN0IGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKFxcXCJ5aW5zdTEyMzQ1YWJjZGVmXFxcIik7XFxuICAgIGNvbnN0IGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcImtlamkxMjM0NTY5OTk5OTlcXFwiKTtcXG4gICAgbGV0IGVuY3J5cHRlZEhleFN0ciA9IENyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2Uod29yZCk7XFxuICAgIGxldCBkZWNyeXB0ID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoe1xcbiAgICAgICAgY2lwaGVydGV4dDogZW5jcnlwdGVkSGV4U3RyXFxuICAgIH0sIGtleSwge1xcbiAgICAgICAgaXY6IGl2LFxcbiAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsXFxuICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcXG4gICAgfSk7XFxuICAgIGlmIChkZWNyeXB0KSB7XFxuICAgICAgICBsZXQgZGVjcnlwdGVkU3RyID0gZGVjcnlwdC50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxuICAgICAgICByZXR1cm4gZGVjcnlwdGVkU3RyO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgLy8g6Kej5a+G5aSx6LSl77yM6L+U5ZuebnVsbOaIlumUmeivr+S/oeaBr1xcbiAgICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG59XFxuXFxuXFxuLy8g54yr5ZKq6Kej5a+G5Ye95pWwXFxuZnVuY3Rpb24gRGVjcnlwdCh3b3JkKSB7XFxuICAgIGNvbnN0IGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKFxcXCI2MjUyMjJmOTE0OWU5NjFkXFxcIik7XFxuICAgIGNvbnN0IGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcIjVlZmR0ZjYwNjBlMm8zMzBcXFwiKTtcXG4gICAgbGV0IGVuY3J5cHRlZEhleFN0ciA9IENyeXB0b0pTLmVuYy5IZXgucGFyc2Uod29yZCk7XFxuICAgIGxldCBkZWNyeXB0ID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoe1xcbiAgICAgICAgY2lwaGVydGV4dDogZW5jcnlwdGVkSGV4U3RyXFxuICAgIH0sIGtleSwge1xcbiAgICAgICAgaXY6IGl2LFxcbiAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsXFxuICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcXG4gICAgfSk7XFxuICAgIGlmIChkZWNyeXB0KSB7XFxuICAgICAgICBsZXQgZGVjcnlwdGVkU3RyID0gZGVjcnlwdC50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxuICAgICAgICByZXR1cm4gZGVjcnlwdGVkU3RyO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgLy8g6Kej5a+G5aSx6LSl77yM6L+U5ZuebnVsbOaIlumUmeivr+S/oeaBr1xcbiAgICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG59XFxuXFxuLy8g54yr5ZKq5Yqg5a+G5Ye95pWwXFxuZnVuY3Rpb24gRW5jcnlwdChwbGFpbnRleHQpIHtcXG4gICAgY29uc3Qga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcIjYyNTIyMmY5MTQ5ZTk2MWRcXFwiKTtcXG4gICAgY29uc3QgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFwiNWVmZHRmNjA2MGUybzMzMFxcXCIpO1xcbiAgICB2YXIgZW5jcnlwdGVkID0gQ3J5cHRvSlMuQUVTLmVuY3J5cHQocGxhaW50ZXh0LCBrZXksIHtcXG4gICAgICAgIGl2OiBpdixcXG4gICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcbiAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxuICAgIH0pO1xcbiAgICB2YXIgY2lwaGVydGV4dCA9IGVuY3J5cHRlZC5jaXBoZXJ0ZXh0LnRvU3RyaW5nKENyeXB0b0pTLmVuYy5IZXgpO1xcbiAgICByZXR1cm4gY2lwaGVydGV4dC50b1VwcGVyQ2FzZSgpO1xcbn1cXG5cXG52YXIgbGF6eSA9ICQoJycpLmltYWdlKCgpID0+IHtcXG5jb25zdCBDcnlwdG9VdGlsID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL2Fzc2V0cy9jcnlwdG8tamF2YS5qc1xcXCIpO1xcblxcdGxldCBpZCA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZVVURjgoXFxcImY1ZDk2NWRmNzUzMzYyNzBcXFwiKTtcXG5cXHRsZXQgaXYgPSBDcnlwdG9VdGlsLkRhdGEucGFyc2VVVEY4KFxcXCI5N2I2MDM5NGFiYzJmYmUxXFxcIik7XFxuXFx0bGV0IHRleHREYXRhID0gQ3J5cHRvVXRpbC5EYXRhLnBhcnNlSW5wdXRTdHJlYW0oaW5wdXQpO1xcblxcdGxldCBlbmNyeXB0ZWQgPSBDcnlwdG9VdGlsLkFFUy5kZWNyeXB0KHRleHREYXRhLCBpZCwge1xcbiAgXFx0bW9kZTogXFxcIkFFUy9DQkMvUEtDUzdQYWRkaW5nXFxcIixcXG5cXHRcXHRpdjogaXZcXG5cXHR9KTtcXG5cXHRyZXR1cm4gZW5jcnlwdGVkLnRvSW5wdXRTdHJlYW0oKTtcXG59KVxcblxcbi8v6KeG6aKR6K+35rGCXFxudmFyIHZvZCA9ICQoJycpLmxhenlSdWxlKCgpID0+IHtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXG50cnl7XFxudmFyIHVybCA9SlNPTi5wYXJzZShmZXRjaChpbnB1dCkpLnZpZGVvO1xcbnJldHVybiB1cmwrYCNpc1ZpZGVvPXRydWUjYFxcbn1jYXRjaChlKXtcXG4gICAgbG9nKGUubWVzc2FnZSlcXG4gICAgcmV0dXJuICd0b2FzdDovL+ivt+axguWksei0pSdcXG59XFxufSlcXG4vL+WbvueJh+ivt+axglxcbnZhciBwaWNzID0gJCgnJykubGF6eVJ1bGUoKCkgPT4ge1xcbmxldCBpbWc9IEpTT04ucGFyc2UoZmV0Y2goaW5wdXQpKS5jb250ZW50LnJlcGxhY2UoL1xcXFwkL2csJycpLnJlcGxhY2UoL+WIhuWJsi9nLCcnKS5zcGxpdCgnQCcpO1xcbnJldHVybiAncGljczovLycraW1nLmpvaW4oJyYmJyk7XFxufSlcXG4vL+eMq+WSqua8q+eUu+ino+aekFxcbnZhciBtYW9taW1hbmh1YWp4PSQoJycpLmxhenlSdWxlKCgpID0+IHsgXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSlcXG52YXIgc2lnbj1FbmNyeXB0KCd7XFxcInVzZXJfaWRcXFwiOjE3OTAzNjgsXFxcImxpc3RfaWRcXFwiOicraW5wdXQrJ30nKTtcXG52YXIgaG9zdD0naHR0cDovLzExOS4yOC41Mi4xOTM6ODA4OS9hcGkvY29taWMvd2F0Y2g/cGFyYW1zPScrc2lnbjtcXG52YXIgYm9keT0ncGFyYW1zPScrc2lnbjtcXG52YXIgaHRtbCA9IGZldGNoKGhvc3QsIHtcXG4gICAgaGVhZGVyczoge1xcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXFxuICAgIH0sXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxufSk7IFxcbnZhciBodG1sMj1EZWNyeXB0KGh0bWwpXFxudmFyIGxpc3Q9SlNPTi5wYXJzZShodG1sMikuZGF0YTtcXG5sZXQgcGljQXJyPVtdO1xcbmxldCBsZW49IGxpc3QubGVuZ3RoLTE7XFxuZm9yIChpID0gMDsgaSA8PSBsZW47IGkrKykge1xcbiAgICAgICBwaWNBcnJbaV0gPSBsaXN0W2ldLmltYWdlO1xcbiAgICAgfVxcbnJldHVybiAncGljczovLycrcGljQXJyLmpvaW4oJyYmJyk7XFxufSlcXG5cXG4vL+eMq+WSqkZN6Kej5p6QXFxudmFyIG1hb21pZm1qeD0kKCcnKS5sYXp5UnVsZSgoKSA9PiB7IFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpXFxudmFyIHNpZ249RW5jcnlwdCgne1xcXCJpZFxcXCI6JytpbnB1dCsnfScpO1xcbnZhciBob3N0PSdodHRwOi8vMTE5LjI4LjUyLjE5Mzo4MDg5L2FwaS9ib29rL2RldGFpbD9wYXJhbXM9JytzaWduO1xcbnZhciBib2R5PSdwYXJhbXM9JytzaWduO1xcbnZhciBodG1sID0gZmV0Y2goaG9zdCwge1xcbiAgICBoZWFkZXJzOiB7XFxuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcXG4gICAgfSxcXG4gICAgbWV0aG9kOiAnUE9TVCdcXG59KTsgXFxudmFyIGh0bWwyPURlY3J5cHQoaHRtbClcXG52YXIgdXJsPUpTT04ucGFyc2UoaHRtbDIpLmRhdGEuZGF0YVswXS5jb250ZW50O1xcbnJldHVybiB1cmxcXG59KVxcblxcbi8v54yr5ZKq6Kej5p6QXFxudmFyIG1hb21pang9JCgnJykubGF6eVJ1bGUoKCkgPT4geyBcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKVxcbnZhciBzaWduPUVuY3J5cHQoJ3tcXFwiaWRcXFwiOicraW5wdXQrJ30nKTtcXG52YXIgaG9zdD0naHR0cDovLzExOS4yOC41Mi4xOTM6ODA4OS9hcGkvdmlkZW8vZGV0YWlsP3BhcmFtcz0nK3NpZ247XFxudmFyIGJvZHk9J3BhcmFtcz0nK3NpZ247XFxudmFyIGh0bWwgPSBmZXRjaChob3N0LCB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxcbiAgICB9LFxcbiAgICBtZXRob2Q6ICdQT1NUJ1xcbn0pOyBcXG52YXIgaHRtbDI9RGVjcnlwdChodG1sKVxcbi8v5LiL6L29XFxuLy92YXIgZG93bj1KU09OLnBhcnNlKGh0bWwyKS5kYXRhLnZpZGVvc1swXS5kb3duO1xcbi8v5paH5Lu2XFxudmFyIHVybD1KU09OLnBhcnNlKGh0bWwyKS5kYXRhLnZpZGVvc1swXS5maWxlO1xcbnJldHVybiB1cmxcXG59KVxcblxcbi8v6bq76LGG5Yqg5a+G5Ye95pWwXFxuZnVuY3Rpb24gbWRFbmNyeXB0KHBsYWludGV4dCkge1xcbiAgICBjb25zdCBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFwiVnEyMzR6QmVTZEdnWVh6VlRFZm5uampkbWFUa2s3QTRcXFwiKTtcXG4gICAgY29uc3QgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFwiLXA5Qlt+UG5QczE3MzE1MFxcXCIpO1xcbiAgICB2YXIgZW5jcnlwdGVkID0gQ3J5cHRvSlMuQUVTLmVuY3J5cHQocGxhaW50ZXh0LCBrZXksIHtcXG4gICAgICAgIGl2OiBpdixcXG4gICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcbiAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3IC8vIOazqOaEj+i/memHjOW6lOivpeaYr0NyeXB0b0pTLnBhZC5Ob1BhZGRpbmdcXG4gICAgfSk7XFxuICAgIHZhciBjaXBoZXJ0ZXh0ID0gZW5jcnlwdGVkLmNpcGhlcnRleHQudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkJhc2U2NCk7XFxuICAgIHJldHVybiBjaXBoZXJ0ZXh0O1xcbn1cXG5cXG4vLyDpurvosYbop6Plr4blh73mlbBcXG5mdW5jdGlvbiBtZERlY3J5cHQod29yZCkge1xcbiAgICBjb25zdCBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFwiVnEyMzR6QmVTZEdnWVh6VlRFZm5uampkbWFUa2s3QTRcXFwiKTtcXG4gICAgY29uc3QgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFwiLXA5Qlt+UG5Qc1xcXCIraXYwKTtcXG4gICAgbGV0IGVuY3J5cHRlZEhleFN0ciA9IENyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2Uod29yZCk7XFxuICAgIGxldCBkZWNyeXB0ID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoe1xcbiAgICAgICAgY2lwaGVydGV4dDogZW5jcnlwdGVkSGV4U3RyXFxuICAgIH0sIGtleSwge1xcbiAgICAgICAgaXY6IGl2LFxcbiAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsXFxuICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczcgLy8g5rOo5oSP6L+Z6YeM5bqU6K+l5pivQ3J5cHRvSlMucGFkLk5vUGFkZGluZ1xcbiAgICB9KTtcXG4gICAgaWYgKGRlY3J5cHQpIHtcXG4gICAgICAgIGxldCBkZWNyeXB0ZWRTdHIgPSBkZWNyeXB0LnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXG4gICAgICAgIHJldHVybiBkZWNyeXB0ZWRTdHI7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICAvLyDop6Plr4blpLHotKXvvIzov5Tlm55udWxs5oiW6ZSZ6K+v5L+h5oGvXFxuICAgICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbn1cXG5cXG4vL+m6u+ixhuWbvueJh+ino+WvhlxcbnZhciBtZGxhenkgPSAkKCcnKS5pbWFnZSgoKSA9PiB7XFxuY29uc3QgQ3J5cHRvVXRpbCA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9hc3NldHMvY3J5cHRvLWphdmEuanNcXFwiKTtcXG5cXHRsZXQga2V5ID0gQ3J5cHRvVXRpbC5EYXRhLnBhcnNlVVRGOChcXFwicG5oWGdOMFVcXFwiKTtcXG5cXHRsZXQgaXYgPSBDcnlwdG9VdGlsLkRhdGEucGFyc2VVVEY4KFxcXCJHWTRnRXZCRFxcXCIpO1xcblxcdGxldCB0ZXh0RGF0YSA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZUlucHV0U3RyZWFtKGlucHV0KS5iYXNlNjREZWNvZGUoKTtcXG5cXHRsZXQgZW5jcnlwdGVkID0gQ3J5cHRvVXRpbC5ERVMuZGVjcnlwdCh0ZXh0RGF0YSwga2V5LCB7XFxuICBcXHRtb2RlOiBcXFwiREVTL0NCQy9QS0NTN1BhZGRpbmdcXFwiLFxcblxcdFxcdGl2OiBpdlxcblxcdH0pO1xcblxcdGxldCBiYXNlNjRUZXh0ID0gZW5jcnlwdGVkLnRvU3RyaW5nKCkuc3BsaXQoXFxcImJhc2U2NCxcXFwiKVsxXTtcXG4gICAgbGV0IGVuY3J5cHRlZDAgPSBDcnlwdG9VdGlsLkRhdGEucGFyc2VCYXNlNjQoYmFzZTY0VGV4dCwgX2Jhc2U2NC5OT19XUkFQKTtcXG4gICAgcmV0dXJuIGVuY3J5cHRlZDAudG9JbnB1dFN0cmVhbSgpO1xcbn0pXFxuXFxuLy85MXR26KeG6aKR6Kej5p6QXFxudmFyIHR2dm9kID0gJCgnJykubGF6eVJ1bGUoKCkgPT4ge1xcbmV2YWwoZ2V0Q3J5cHRvSlMoKSlcXG5mdW5jdGlvbiBtZDUoc3RyKSB7XFxuICAgIHJldHVybiBDcnlwdG9KUy5NRDUoc3RyKS50b1N0cmluZygpO1xcbn1cXG52YXIgdDAgPU1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApKzE7XFxudmFyIHdzU2VjcmV0PW1kNSgnRTlNcEM3RDVBcVd2am1YTDNoR2tRMlhqWk5vaEFRJytpbnB1dC5yZXBsYWNlKC9odHRwKHMpPzpcXFxcL1xcXFwvLio/XFxcXC8vZywnLycpK3QwKTtcXG52YXIgdXJsPWlucHV0Kyc/d3NTZWNyZXQ9Jyt3c1NlY3JldCsnJndzVGltZT0nK3QwO1xcbndyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS92aWRlbzAubTN1OCcsIHJlcXVlc3QodXJsKSk7XFxucmV0dXJuIGdldFBhdGgoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvdmlkZW8wLm0zdTgnKSsnIycrdXJsO1xcbn0pXFxuLy9sdXR1YmXlm77niYfop6Plr4ZcXG52YXIgbHVsYXp5ID0gJCgnJykuaW1hZ2UoKCkgPT4ge1xcbmNvbnN0IENyeXB0b1V0aWwgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vYXNzZXRzL2NyeXB0by1qYXZhLmpzXFxcIik7XFxuXFx0bGV0IGtleSA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZUhleChcXFwiYjJmMzg0Mjg2NmY5NTgzZDFlY2U2MWM0ZTA1NWMyNTVcXFwiKTtcXG5cXHRsZXQgaXYgPSBDcnlwdG9VdGlsLkRhdGEucGFyc2VIZXgoXFxcImUwMWVkZTYzMzFkMzdhZmNjN2JlMDU1OTdkNjU0ZDIyXFxcIik7XFxuXFx0bGV0IHRleHREYXRhID0gQ3J5cHRvVXRpbC5EYXRhLnBhcnNlSW5wdXRTdHJlYW0oaW5wdXQpO1xcblxcdGxldCBlbmNyeXB0ZWQgPSBDcnlwdG9VdGlsLkFFUy5kZWNyeXB0KHRleHREYXRhLCBrZXksIHtcXG4gIFxcdG1vZGU6IFxcXCJBRVMvQ0JDL1BLQ1M3UGFkZGluZ1xcXCIsXFxuXFx0XFx0aXY6IGl2XFxuXFx0fSk7XFxuXFx0cmV0dXJuIGVuY3J5cHRlZC50b0lucHV0U3RyZWFtKCk7XFxufSlcXG4vL2luc+WbvueJh+ino+Wvhu+8jGJhc2U2NFxcbnZhciBpbnNsYXp5ID0gJCgnJykuaW1hZ2UoKCkgPT4ge1xcbiAgICBjb25zdCBDcnlwdG9VdGlsID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL2Fzc2V0cy9jcnlwdG8tamF2YS5qc1xcXCIpO1xcbiAgICBsZXQgdGV4dERhdGEgPSBDcnlwdG9VdGlsLkRhdGEucGFyc2VJbnB1dFN0cmVhbShpbnB1dCk7XFxuICAgIGxldCBiYXNlNjRUZXh0ID0gdGV4dERhdGEudG9TdHJpbmcoKS5zcGxpdChcXFwiYmFzZTY0LFxcXCIpWzFdO1xcbiAgICBsZXQgZW5jcnlwdGVkMCA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZUJhc2U2NChiYXNlNjRUZXh0LCBfYmFzZTY0Lk5PX1dSQVApO1xcbiAgICByZXR1cm4gZW5jcnlwdGVkMC50b0lucHV0U3RyZWFtKCk7XFxufSlcXG5cXG5cXG4vL+a1t+inkuWbvueJh+ino+WvhlxcbnZhciBuID0gZnVuY3Rpb24oZSkge1xcbiAgICBmb3IgKG8gPSBcXFwiXFxcIiwgaSA9IDAsIGEgPSAwLCB2b2lkIDA7IGkgPCBlLmxlbmd0aDspIHtcXG4gICAgICAgIHZhciB0LCBuLCBvLCBpLCBhO1xcbiAgICAgICAgKHQgPSBlLmNoYXJDb2RlQXQoaSkpIDwgMTI4ID8gKG8gKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh0KSwgaSsrKSA6IDE5MSA8IHQgJiYgdCA8IDIyNCA/IChhID0gZS5jaGFyQ29kZUF0KGkgKyAxKSwgbyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCgzMSAmIHQpIDw8IDYgfCA2MyAmIGEpLCBpICs9IDIpIDogKGEgPSBlLmNoYXJDb2RlQXQoaSArIDEpLCBuID0gZS5jaGFyQ29kZUF0KGkgKyAyKSwgbyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCgxNSAmIHQpIDw8IDEyIHwgKDYzICYgYSkgPDwgNiB8IDYzICYgbiksIGkgKz0gMyk7XFxuICAgIH1cXG4gICAgcmV0dXJuIG87XFxufTtcXG52YXIgZGVjcnlwdERhdGEgPSBmdW5jdGlvbih0KSB7XFxuICAgIHZhciBvLCBpLCBhLCByLCBzLCBjLCB1ID0gXFxcIlxcXCIsXFxuICAgICAgICBkID0gMCxcXG4gICAgICAgIHR0ID0gXFxcIkFCQ0QqRUZHSElKS0xNTk9QUVJTVFVWV1gjWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejEyMzQ1Njc4OTBcXFwiXFxuICAgIGZvciAodCA9IHQucmVwbGFjZSgvW15BLVphLXowLTlcXFxcKlxcXFwjXS9nLCBcXFwiXFxcIik7IGQgPCB0Lmxlbmd0aDspIGEgPSB0dC5pbmRleE9mKHQuY2hhckF0KGQrKykpLCBvID0gKDE1ICYgKHIgPSB0dC5pbmRleE9mKHQuY2hhckF0KGQrKykpKSkgPDwgNCB8IChzID0gdHQuaW5kZXhPZih0LmNoYXJBdChkKyspKSkgPj4gMiwgaSA9ICgzICYgcykgPDwgNiB8IChjID0gdHQuaW5kZXhPZih0LmNoYXJBdChkKyspKSksIHUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShhIDw8IDIgfCByID4+IDQpLCA2NCAhPSBzICYmICh1ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUobykpLCA2NCAhPSBjICYmICh1ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSkpO1xcbiAgICByZXR1cm4gbih1KTtcXG59O1xcblxcbiQuZXhwb3J0cy5pbWFnZURlY3J5cHQgPSBmdW5jdGlvbigpIHtcXG4gICAgbGV0IGphdmFJbXBvcnQgPSBuZXcgSmF2YUltcG9ydGVyKCk7XFxuICAgIGphdmFJbXBvcnQuaW1wb3J0UGFja2FnZShcXG4gICAgICAgIFBhY2thZ2VzLmNvbS5leGFtcGxlLmhpa2Vydmlldy51dGlsc1xcbiAgICApO1xcbiAgICB3aXRoKGphdmFJbXBvcnQpIHtcXG4gICAgICAgIGxldCBieXRlcyA9IEZpbGVVdGlsLnRvQnl0ZXMoaW5wdXQpO1xcbiAgICAgICAgYnl0ZXMgPSBuZXcgamF2YS5sYW5nLlN0cmluZyhieXRlcywgJ1VURi04JylcXG4gICAgICAgIGxldCByZXMgPSBkZWNyeXB0RGF0YShieXRlcyArIFxcXCJcXFwiKTtcXG4gICAgICAgIHJlcyA9IG5ldyBqYXZhLmxhbmcuU3RyaW5nKHJlcylcXG4gICAgICAgIHJlcyA9IHJlcy5zcGxpdChcXFwiYmFzZTY0LFxcXCIpWzFdO1xcbiAgICAgICAgcmV0dXJuIEZpbGVVdGlsLnRvSW5wdXRTdHJlYW0oX2Jhc2U2NC5kZWNvZGUocmVzLCBfYmFzZTY0Lk5PX1dSQVApKTtcXG4gICAgfVxcbn1cXG5cXG5cXG5mdW5jdGlvbiBwYWdlQWRkKHBhZ2UpIHtcXG4gICAgaWYgKGdldE15VmFyKFxcXCJwYWdlXFxcIikpIHtcXG4gICAgICAgIHB1dE15VmFyKFxcXCJwYWdlXFxcIiwgKHBhcnNlSW50KHBhZ2UpICsgMSkgKyAnJyk7XFxuICAgIH1cXG4gICAgcmV0dXJuO1xcbn0gLy/nv7vpobVcXG5cXG5mdW5jdGlvbiBwYWdlTW92ZXRvKHBhZ2UsIHBhZ2VzKSB7XFxuICAgIHZhciBsb25nQ2xpY2sgPSBbe1xcbiAgICAgICAgdGl0bGU6IFxcXCLpppbpobVcXFwiLFxcbiAgICAgICAganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJwYWdlXFxcIiwgXFxcIjFcXFwiKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICB9KSxcXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6IFxcXCLkuIrpobVcXFwiLFxcbiAgICAgICAganM6ICQudG9TdHJpbmcoKHBhZ2UpID0+IHtcXG4gICAgICAgICAgICBpZiAocGFnZSA+IDEpIHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInBhZ2VcXFwiLCAocGFyc2VJbnQocGFnZSkgLSAxKSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgcGFnZSksXFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5b2T5YmN56ysXFxcIiArIHBhZ2UgKyBcXFwi6aG1XFxcIixcXG4gICAgICAgIGpzOiBcXFwiXFxcIixcXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6IFxcXCLot7PovaxcXFwiLFxcbiAgICAgICAganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJwYWdlXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSksXFxuICAgIH1dO1xcbiAgICBpZiAodHlwZW9mKHBhZ2VzKSAhPSAndW5kZWZpbmVkJykge1xcbiAgICAgICAgdmFyIGV4dHJhMSA9IHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuWwvumhtVxcXCIgKyBwYWdlcyxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygocGFnZXMpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInBhZ2VcXFwiLCBwYWdlcyk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgfSwgcGFnZXMpLFxcbiAgICAgICAgfTtcXG4gICAgICAgIGxvbmdDbGljay5wdXNoKGV4dHJhMSlcXG4gICAgfVxcbiAgICByZXR1cm4gbG9uZ0NsaWNrXFxufSAvL+mVv+aMiei3s+mhtVxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5YiG57G7XCIsXCJwYXRoXCI6XCJDYXRlXCIsXCJydWxlXCI6XCJmdW5jdGlvbiBzdHJvbmcoZCwgYykge1xcbiAgICByZXR1cm4gJ+KAmOKAmOKAmeKAmTxzdHJvbmc+PGZvbnQgY29sb3I9IycgKyAoYyB8fCAnMDAwMDAwJykgKyAnPicgKyBkICsgJzwvZm9udD48L3N0cm9uZz4nO1xcbn1cXG4vL+WIl+ihqCxjb2zpu5jorqTkuLonc2Nyb2xsX2J1dHRvbidcXG5mdW5jdGlvbiBDYXRlKGxpc3QsbixkLGNvbCkge1xcbiAgICBpZighY29sKXtcXG4gICAgICAgIGNvbD0nc2Nyb2xsX2J1dHRvbic7XFxuICAgIH1cXG4gICAgdmFyIGluZGV4X249bGlzdFswXS5pZC5zcGxpdCgnJicpWzBdO1xcbiAgICBsaXN0LmZvckVhY2goZGF0YT0+e1xcbiAgICAgICAgdmFyIHRpdGxlID0gZGF0YS50aXRsZS5zcGxpdCgnJicpO1xcbiAgICAgICAgdmFyIGlkPWRhdGEuaWQuc3BsaXQoJyYnKTtcXG4gICAgICAgIGlmKGRhdGEuaW1nIT1udWxsKXtcXG4gICAgICAgICAgICB2YXIgaW1nPWRhdGEuaW1nLnNwbGl0KCcmJyk7XFxuICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICB2YXIgaW1nPVtdO1xcbiAgICAgICAgfVxcbiAgICAgICAgdGl0bGUuZm9yRWFjaCgodGl0bGUsaW5kZXgpPT57XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6KGdldE15VmFyKG4saW5kZXhfbik9PWlkW2luZGV4XT9zdHJvbmcodGl0bGUsICdGRjY2OTknKSA6IHRpdGxlKSxcXG4gICAgICAgICAgICAgICAgaW1nOmltZ1tpbmRleF0sXFxuICAgICAgICAgICAgICAgIHVybDokKGlkW2luZGV4XSkubGF6eVJ1bGUoKG4sdGl0bGUsaWQpID0+IHtcXG4gICAgICAgICAgICAgICBwdXRNeVZhcihuLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSwgbix0aXRsZSxpZFtpbmRleF0pLFxcbiAgICAgICAgICAgIGNvbF90eXBlOmNvbCxcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJyxcXG4gICAgfSk7XFxuICAgIH0pXFxuICAgIHJldHVybiBkO1xcbn1cXG4kLmV4cG9ydHMuQ2F0ZSA9IENhdGU7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCIwMOmmlumhtVwiLFwicGF0aFwiOlwiaG9tZVwiLFwicnVsZVwiOlwianM6XFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICBkLnB1c2goe8KgwqDCoFxcbiAgICAgICAgdGl0bGU6IFxcXCLmkJzntKIgXFxcIixcXG4gICAgICAgIHVybDogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICBwdXRNeVZhcigna2V5d29yZCcsaW5wdXQpXFxuICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9zZWFyY2g/cGFnZT1meXBhZ2Uma3c9XFxcIiArIGlucHV0XFxuICAgIH0pLFxcbiAgICAgICAgwqDCoMKgZGVzYzogXFxcIuivt+i+k+WFpeaQnOe0ouWFs+mUruivjVxcXCIsXFxuICAgICAgICDCoMKgwqBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgfSlcXG59O1xcbnZhciBwZz0gTVlfVVJMLnJlcGxhY2UoJ2hpa2VyOi8vZW1wdHkjIycsICcnKTtcXG52YXIgdCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSk7IFxcbnZhciBjMT0gW3t0aXRsZTogJ+mmlumhtSbnu7zlkIgnLGlkOiAnMSYyJjMmNCY1JyxpbWc6J2h0dHBzOi8vZ2hwcm94eS5uZXQvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL3R1Ymlhby9tYWluL21vdmllLzEyNy5zdmcmaHR0cHM6Ly9naHByb3h5Lm5ldC9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbHMxMjU3ODEwMDMvdHViaWFvL21haW4vbW92aWUvMTM3LnN2ZyZodHRwczovL2docHJveHkubmV0L2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sczEyNTc4MTAwMy90dWJpYW8vbWFpbi9tb3ZpZS8xMTMuc3ZnJmh0dHBzOi8vZ2hwcm94eS5uZXQvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL3R1Ymlhby9tYWluL21vdmllLzExNC5zdmcmaHR0cHM6Ly9naHByb3h5Lm5ldC9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbHMxMjU3ODEwMDMvdHViaWFvL21haW4vbW92aWUvMTIyLnN2Zyd9XTtcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgICQucmVxdWlyZShcXFwiQ2F0ZVxcXCIpLkNhdGUoYzEsJ2MxJyxkLCdpY29uXzJfcm91bmQnKTtcXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogJ2xpbmUnLFxcbn0se1xcbiAgICBjb2xfdHlwZTogJ2JpZ19ibGFua19ibG9jaycsXFxufVxcbix7XFxuICAgIGNvbF90eXBlOiAnYmlnX2JsYW5rX2Jsb2NrJyxcXG59KTtcXG59XFxudmFyIOWIhuexuz1nZXRNeVZhcignYzEnLCAnMScpO1xcbmlmKOWIhuexuz09MSl7XFxuJC5yZXF1aXJlKFxcXCJ2aWRlb1xcXCIpXFxufWVsc2UgaWYo5YiG57G7PT0yKXtcXG4kLnJlcXVpcmUoXFxcInpvbmdoZVxcXCIpXFxufVxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfMlwiLFwibmFtZVwiOlwi5pCc57SiXCIsXCJwYXRoXCI6XCJzZWFyY2hcIixcInJ1bGVcIjpcImpzOiBcXG52YXIgZCA9IFtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcbnZhciBwZz1NWV9VUkwuc3BsaXQoJz0nKVsxXS5yZXBsYWNlKCcma3cnLCcnKTtcXG5pZihNWV9QQUdFPT0xKXtcXG52YXIgZGF0YT1KU09OLnBhcnNlKGdldEl0ZW0oJ3NlYXJjaCcpKS5jb25maWc7XFxudmFyIHVybF9uPWRhdGFbMF0uYXBpK2RhdGFbMF0ucGxhdGZvcm07XFxuZGF0YS5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgdmFyIHVybD1kYXRhLmFwaStkYXRhLnBsYXRmb3JtO1xcbiAgICAgICAgaWYoKGRhdGEudGl0bGUhPSfnpo/liKknKSYoIWRhdGEucGxhdGZvcm0uaW5jbHVkZXMoJ3l1ZXBhbycpKSl7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcign5pCc57Si5YiG57G7Jyx1cmxfbik9PXVybD9zdHJvbmcoZGF0YS50aXRsZSwnRkY2Njk5Jyk6ZGF0YS50aXRsZSxcXG4gICAgICAgICAgICB1cmw6JCgnJykubGF6eVJ1bGUoKHRpdGxlLHVybCxjYXRlKSA9PiB7XFxuICAgICAgICAgICAgICAgcHV0TXlWYXIoJ+aQnOe0ouWIhuexuycsIHVybCk7XFxuICAgICAgICAgICAgICAgcHV0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsdGl0bGUpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sZGF0YS50aXRsZSx1cmwsJ+aQnOe0ouWIhuexuycpLFxcbiAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAga2V5OifmkJzntKLliIbnsbs6ICcrZ2V0TXlWYXIoJ+aQnOe0ouWIhuexuycsdXJsX24pLFxcbiAgICAgICAgICAgICAgd29yZDon5pCc57Si5YiG57G75ZCNOiAnK2dldE15VmFyKCfmkJzntKLliIbnsbvlkI0nLCfop4bpopEnKSxcXG4gICAgICAgICAgICAgIGtleXdvcmQ6Z2V0TXlWYXIoJ2tleXdvcmQnKSxcXG4gICAgICAgICAgfVxcbiAgICB9KVxcbiAgICB9XFxufSlcXG5kLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaycsXFxuICAgIH0pO1xcbnZhciBsaXN0PUpTT04ucGFyc2UoZmV0Y2goZ2V0TXlWYXIoJ+aQnOe0ouWIhuexuycsJ2h0dHA6Ly8wMDMuMjJzLmxvbC9zZWFyY2hjb25maWcvdmlkZW8udHh0JykpKS5zZWFyY2hhcGk7XFxudmFyIHVybF9uPSdodHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcC8nK2xpc3RbMF0ucGxhdGZvcm0rJy5waHAnO1xcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIHZhciB1cmw9J2h0dHBzOi8vYXBpMS55aWx1c2h1bmZlbmcudG9wLycrZGF0YS5wbGF0Zm9ybSsnLnBocCc7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcihnZXRNeVZhcign5pCc57Si5YiG57G75ZCNJywn6KeG6aKRJykrJ+aQnOe0ouWIl+ihqCcsdXJsX24pPT11cmw/c3Ryb25nKGRhdGEudGl0bGUsJ0ZGNjY5OScpOmRhdGEudGl0bGUsXFxuICAgICAgICAgICAgdXJsOiQoJycpLmxhenlSdWxlKCh0aXRsZSx1cmwsY2F0ZSkgPT4ge1xcbiAgICAgICAgICAgICAgIHB1dE15VmFyKGdldE15VmFyKCfmkJzntKLliIbnsbvlkI0nLCfop4bpopEnKSsn5pCc57Si5YiX6KGoJywgdXJsKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LGRhdGEudGl0bGUsdXJsLGdldE15VmFyKCfmkJzntKLliIbnsbvlkI0nLCfop4bpopEnKSsn5pCc57Si5YiX6KGoJyksXFxuICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBrZXk6Z2V0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsJ+inhumikScpKyfmkJzntKLliJfooagnLFxcbiAgICAgICAgICAgICAgdXJsOnVybCxcXG4gICAgICAgICAgICAgIHd6OmRhdGEucGxhdGZvcm0sXFxuICAgICAgICAgICAgICBrZXl3b3JkOmdldE15VmFyKCdrZXl3b3JkJyksXFxuICAgICAgICAgIH1cXG4gICAgfSlcXG59KVxcbn1cXG52YXIgc2VhcmNoX3VybD1nZXRNeVZhcihnZXRNeVZhcign5pCc57Si5YiG57G75ZCNJywn6KeG6aKRJykrJ+aQnOe0ouWIl+ihqCcsdXJsX24pKyc/a2V5d29yZD0nK2dldE15VmFyKCdrZXl3b3JkJykrJyZwYWdlPScrcGc7XFxuLy9sb2coc2VhcmNoX3VybClcXG52YXIgaG9zdD1zZWFyY2hfdXJsLnNwbGl0KCc/JylbMF07XFxudHJ5e1xcbmlmKGdldE15VmFyKCfmkJzntKLliIbnsbvlkI0nLCfop4bpopEnKT09J+inhumikScpe1xcbnZhciBBcnI9WydsdXNpcicsJzUxbGllcWknLCd0YW5ndG91dGlhbycsJzUwZHUnLCd0aWt0b2snLCd4aW5nYmEnLCdhbndhbmdqaWVtaScsJ3FpeW91JywnY2FvbGl1c2hlcXUnLCc5MXBhb2Z1JywnbWVpcmlkYXNhaScsJ3Bvcm5odWInLCdkb3V5aW5tYXgnLCc1MWx1b2xpJywnOTFwb3JuX3Nma3R2Jywnc2h1aWd1b3BhaScsJ3NpZmFuZ2t0dicsJ3dlaW1pcXVhbicsJ2hlaWxpYW9iZHknLCc1MWNoaWd1YSddO1xcbnZhciBCcnI9WydsdXR1YmUnXTtcXG52YXIgQ3JyPVsnaW5zJ107XFxudmFyIHBsYXRmb3JtPWhvc3QubWF0Y2goL3RvcFxcXFwvLipcXFxcLnBocC8pWzBdLnNwbGl0KCcucGhwJylbMF0uc3BsaXQoJy8nKVsyXTtcXG4vL2xvZyhwbGF0Zm9ybSlcXG52YXIgaXRlbT1KU09OLnBhcnNlKGZldGNoKHNlYXJjaF91cmwpKS52aWRlb3M7XFxuaXRlbS5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICBpZihBcnIuaW5jbHVkZXMocGxhdGZvcm0pKXtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzooZGF0YS5jcmVhdGVkX2RhdGU9PW51bGw/Jyc6ZGF0YS5jcmVhdGVkX2RhdGUpKycgICcrKGRhdGEuZGF0ZT09bnVsbD8nJzpkYXRhLmRhdGUpLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZStsYXp5LFxcbiAgICAgICAgICAgIHVybDogaG9zdCsnP2lkPScrZGF0YS5pZCt2b2QsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInLFxcbiAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGlkOmRhdGEuaWQsXFxuICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH1lbHNlIGlmKEJyci5pbmNsdWRlcyhwbGF0Zm9ybSkpe1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZWRfZGF0ZT09bnVsbD8nJzpkYXRhLmNyZWF0ZWRfZGF0ZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSksXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlK2x1bGF6eSxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcbiAgICAgICAgfSlcXG4gICAgfWVsc2UgaWYoQ3JyLmluY2x1ZGVzKHBsYXRmb3JtKSl7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6KGRhdGEuY3JlYXRlZF9kYXRlPT1udWxsPycnOmRhdGEuY3JlYXRlZF9kYXRlKSsnICAnKyhkYXRhLmRhdGU9PW51bGw/Jyc6ZGF0YS5kYXRlKSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UraW5zbGF6eSxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcbiAgICAgICAgfSlcXG4gICAgfWVsc2V7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6KGRhdGEuY3JlYXRlZF9kYXRlPT1udWxsPycnOmRhdGEuY3JlYXRlZF9kYXRlKSsnICAnKyhkYXRhLmRhdGU9PW51bGw/Jyc6ZGF0YS5kYXRlKSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxuICAgICAgICAgICAgdXJsOiBob3N0Kyc/aWQ9JytkYXRhLmlkK3ZvZCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXG4gICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgIH0pXFxufWVsc2UgaWYoZ2V0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsJ+inhumikScpPT0n5YWo572R56C06KejJyl7XFxuICAgIHZhciBBcnI9Wyd0dHQnLCdsb2Fud29yZCcsJ2xvYW53b3JkXzInLCc5MXNob3J0Jywnc2Vwb25lJywnbHVzaXInLCdjYXBlJywnZGVncmVlJywnYnVybWEnXTtcXG4gIHZhciBwbGF0Zm9ybT1ob3N0Lm1hdGNoKC90b3BcXFxcLy4qXFxcXC5waHAvKVswXS5zcGxpdCgnLnBocCcpWzBdLnNwbGl0KCcvJylbNF07XFxuICB2YXIgaXRlbT1KU09OLnBhcnNlKGZldGNoKHNlYXJjaF91cmwpKS52aWRlb3M7XFxuIC8vIGxvZyhpdGVtKVxcbml0ZW0uZm9yRWFjaChkYXRhID0+IHtcXG4gICAgaWYoQXJyLmluY2x1ZGVzKHBsYXRmb3JtKSl7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZStsYXp5LFxcbiAgICAgICAgICAgIHVybDogaG9zdCsnP2lkPScrZGF0YS5pZCt2b2QsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxuICAgICAgICB9KVxcbiAgICB9ZWxzZXtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlLFxcbiAgICAgICAgICAgIHVybDogaG9zdCsnP2lkPScrZGF0YS5pZCt2b2QsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxuICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICB9KVxcbn1lbHNlIGlmKGdldE15VmFyKCfmkJzntKLliIbnsbvlkI0nLCfop4bpopEnKT09J+efreinhumikScpe1xcbiAgICB2YXIgQXJyPVsndGlrdG9rMThuZXcnLCc5MWRzcHdlYicsJ2RvdXlpbm1heCcsJzkxcG9ybl9zaWZhbmdrdHYnLCdmYW50YXNpJ107XFxuICB2YXIgcGxhdGZvcm09aG9zdC5tYXRjaCgvdG9wXFxcXC8uKlxcXFwucGhwLylbMF0uc3BsaXQoJy5waHAnKVswXS5zcGxpdCgnLycpWzJdO1xcbiAgdmFyIGl0ZW09SlNPTi5wYXJzZShmZXRjaChzZWFyY2hfdXJsKSkudmlkZW9zO1xcbiAvLyBsb2coaXRlbSlcXG5pdGVtLmZvckVhY2goZGF0YSA9PiB7XFxuICAgIGlmKEFyci5pbmNsdWRlcyhwbGF0Zm9ybSkpe1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UrbGF6eSxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZWRfZGF0ZT09bnVsbD8nJzpkYXRhLmNyZWF0ZWRfZGF0ZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSksXFxuICAgICAgICAgICAgdXJsOiBob3N0Kyc/aWQ9JytkYXRhLmlkK3ZvZCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXG4gICAgICAgIH0pXFxuICAgIH1lbHNle1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZWRfZGF0ZT09bnVsbD8nJzpkYXRhLmNyZWF0ZWRfZGF0ZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSksXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlLFxcbiAgICAgICAgICAgIHVybDogaG9zdCsnP2lkPScrZGF0YS5pZCt2b2QsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxuICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICB9KVxcbn1lbHNlIGlmKGdldE15VmFyKCfmkJzntKLliIbnsbsnKS5pbmNsdWRlcygnYWN0cmVzcycpfChnZXRNeVZhcign5pCc57Si5YiG57G75ZCNJywn6KeG6aKRJyk9PSfnlarlj7cnKXwoZ2V0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsJ+inhumikScpPT0n5LiJ57qnJykpe1xcbiAgICB2YXIgQXJyPVsnc2h1aWd1b3BhaSddO1xcbiAgdmFyIHBsYXRmb3JtPWhvc3QubWF0Y2goL3RvcFxcXFwvLipcXFxcLnBocC8pWzBdLnNwbGl0KCcucGhwJylbMF0uc3BsaXQoJy8nKVsyXTtcXG4gIHZhciBpdGVtPUpTT04ucGFyc2UoZmV0Y2goc2VhcmNoX3VybCkpLnZpZGVvcztcXG4gLy8gbG9nKGl0ZW0pXFxuaXRlbS5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICBpZihBcnIuaW5jbHVkZXMocGxhdGZvcm0pKXtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlK2xhenksXFxuICAgICAgICAgICAgZGVzYzooZGF0YS5jcmVhdGVkX2RhdGU9PW51bGw/Jyc6ZGF0YS5jcmVhdGVkX2RhdGUpKycgICcrKGRhdGEuZGF0ZT09bnVsbD8nJzpkYXRhLmRhdGUpLFxcbiAgICAgICAgICAgIHVybDogaG9zdCsnP2lkPScrZGF0YS5pZCt2b2QsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxuICAgICAgICB9KVxcbiAgICB9ZWxzZXtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzooZGF0YS5jcmVhdGVkX2RhdGU9PW51bGw/Jyc6ZGF0YS5jcmVhdGVkX2RhdGUpKycgICcrKGRhdGEuZGF0ZT09bnVsbD8nJzpkYXRhLmRhdGUpLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZSxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcbiAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gICAgfSlcXG59ZWxzZSBpZihnZXRNeVZhcign5pCc57Si5YiG57G75ZCNJywn6KeG6aKRJyk9PSflkIPnk5wnKXtcXG4gIHZhciB3ej1ob3N0Lm1hdGNoKC90b3BcXFxcLy4qXFxcXC5waHAvKVswXS5zcGxpdCgnLnBocCcpWzBdLnNwbGl0KCcvJylbM107XFxuICB2YXIgbGlzdD1KU09OLnBhcnNlKGZldGNoKHNlYXJjaF91cmwpKS52aWRlb3M7XFxuIC8vIGxvZyhpdGVtKVxcbmlmKHd6PT0naGFpamlhbycpe1xcbiAgICBsaXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6IGRhdGEuZGF0ZSxcXG4gICAgICAgICAgICBpbWc6ICBkYXRhLmltYWdlICsgXFxcIkBqcz1cXFwiICsgJC50b1N0cmluZygocnVsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2Flcz9ydWxlPVxcXCIgKyBydWxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltYWdlLmltYWdlRGVjcnlwdCgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIE1ZX1JVTEUudGl0bGUpLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9ibGFja2VyamkxXFxcIiknLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidwaWNfMScsXFxuICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaG9zdDpgJHtob3N0fT9pZD0ke2RhdGEuaWR9YCxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcbiAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiB9KVxcbn1lbHNle1xcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzogZGF0YS5kYXRlLFxcbiAgICAgICAgICAgIGltZzogKCh3ej09JzUxY2cnKXwod3o9PSdobGJkeScpfCh3ej09J3Rpa3RvazE4JykpPyhkYXRhLmltYWdlK2xhenkpOmRhdGEuaW1hZ2UsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2JsYWNrZXJqaTFcXFwiKScsXFxuICAgICAgICAgICAgY29sX3R5cGU6J3BpY18xJyxcXG4gICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke2hvc3R9P2lkPSR7ZGF0YS5pZH1gLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuIH0pXFxuIH1cXG59ZWxzZSBpZihnZXRNeVZhcign5pCc57Si5YiG57G75ZCNJywn6KeG6aKRJyk9PSflsI/or7QnKXtcXG4gIHZhciB3ej1ob3N0Lm1hdGNoKC90b3BcXFxcLy4qXFxcXC5waHAvKVswXS5zcGxpdCgnLnBocCcpWzBdLnNwbGl0KCcvJylbM107XFxuICB2YXIgbGlzdD1KU09OLnBhcnNlKGZldGNoKHNlYXJjaF91cmwpKS52aWRlb3M7XFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UveGlhb3NodW9lcmppMVxcXCIpJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTondGV4dF8xJyxcXG4gICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke2hvc3R9P2lkPSR7ZGF0YS5pZH1gLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuIH0pXFxufWVsc2UgaWYoZ2V0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsJ+inhumikScpPT0n5ryr55S7Jyl7XFxuICB2YXIgd3o9aG9zdC5tYXRjaCgvdG9wXFxcXC8uKlxcXFwucGhwLylbMF0uc3BsaXQoJy5waHAnKVswXS5zcGxpdCgnLycpWzJdO1xcbiAgdmFyIGxpc3Q9SlNPTi5wYXJzZShmZXRjaChzZWFyY2hfdXJsKSkudmlkZW9zO1xcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzogZGF0YS5kYXRlLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZSxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvbWFuaHVhZXJqaTFcXFwiKScsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzMnLFxcbiAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7aG9zdH0/aWQ9JHtkYXRhLmlkfWAsXFxuICAgICAgICAgICAgICB3ejp3eixcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gfSlcXG59ZWxzZSBpZihnZXRNeVZhcign5pCc57Si5YiG57G75ZCNJywn6KeG6aKRJyk9PSflm77niYcnKXtcXG4gIHZhciB3ej1ob3N0Lm1hdGNoKC90b3BcXFxcLy4qXFxcXC5waHAvKVswXS5zcGxpdCgnLnBocCcpWzBdLnNwbGl0KCcvJylbMl07XFxuICB2YXIgbGlzdD1KU09OLnBhcnNlKGZldGNoKHNlYXJjaF91cmwpKS52aWRlb3M7XFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOiBkYXRhLmRhdGUsXFxuICAgICAgICAgICAgaW1nOiB3ej09J3Rpa3RvazE4Jz8oZGF0YS5pbWFnZStsYXp5KTpkYXRhLmltYWdlLFxcbiAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9lbXB0eScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3R1cGlhbmVyamlcXFwiKScsXFxuICAgICAgICAgICAgdXJsOiB3ej09J3R1emFjJz9kYXRhLmltYWdlOihob3N0Kyc/aWQ9JytkYXRhLmlkK3BpY3MpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8zJyxcXG4gICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke2hvc3R9P2lkPSR7ZGF0YS5pZH1gLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuIH0pXFxufVxcbn1jYXRjaChlKXtcXG4gICAgbG9nKGUubWVzc2FnZSlcXG59XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCIwMue7vOWQiFwiLFwicGF0aFwiOlwiem9uZ2hlXCIsXCJydWxlXCI6XCJqczpcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXG50cnl7XFxuLy9sb2coZ2V0SXRlbSgnZGF0YScpKVxcblxcbiAvLyB2YXIgbGlzdD1nZXRJdGVtKCdkYXRhJykuc3BsaXQoJ+e7vOWQiOaVsOaNruW8gOWniycpWzFdLnNwbGl0KCfnu7zlkIjmlbDmja7nu5PmnZ8nKVswXS5zcGxpdCgn5o2i6KGMJyk7XFxuIHZhciBsaXN0PWdldEl0ZW0oJ2RhdGEnKS5zcGxpdCgn57u85ZCI5pWw5o2u5byA5aeLJylbMV0uc3BsaXQoJ0FW55m+56eRJylbMF0ucmVwbGFjZSgv5YiG5Ymy57q/L2csJ+aNouihjCcpLnNwbGl0KCfmjaLooYwnKTtcXG4gIGxpc3QuZm9yRWFjaChkYXRhPT57XFxuICAgICAgdmFyIHFkPXNwKGRhdGEsIFxcXCJxZChcXFwiLCBcXFwiKVxcXCIpO1xcbiAgICAgIHZhciB0cD1zcChkYXRhLCBcXFwidHAoXFxcIiwgXFxcIilcXFwiKTtcXG4gICAgICB2YXIgbWM9c3AoZGF0YSwgXFxcIm1jKFxcXCIsIFxcXCIpXFxcIik7XFxuICAgICAgdmFyIHd6PXNwKGRhdGEsIFxcXCJnamMoXFxcIiwgXFxcIilcXFwiKTtcXG4gICAgICB2YXIgeW09c3AoZGF0YSwgXFxcInltKFxcXCIsIFxcXCIpXFxcIik7XFxuICAgICAgdmFyIGx4PXNwKGRhdGEsIFxcXCJseChcXFwiLCBcXFwiKVxcXCIpO1xcbiAgICAgIHZhciBxYj1xZCsnICAnK21jKycgICcrd3orJyAgJyt5bSsnICAnK2x4O1xcbiAgICAgIGlmKGx4PT0n5LqM57qn6I+c5Y2VJyl7XFxuICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6bWMsXFxuICAgICAgICAgIGRlc2M6cWIsXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9lcmppXFxcIiknLFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnLFxcbiAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke3ltfS8ke3d6fS5waHBgLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgICB9KVxcbiAgICAgIH1lbHNlIGlmKGx4PT0n6buR5paZJyl7XFxuICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgIHRpdGxlOm1jLFxcbiAgICAgICAgICBkZXNjOnFiLFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2JsYWNrZXJqaVxcXCIpJyxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJyxcXG4gICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaG9zdDpgJHt5bX0vJHt3en0ucGhwYCxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcbiAgICAgICAgICB9XFxuICAgICAgfSlcXG4gICAgICB9ZWxzZSBpZihseD09J+WbveWGheebtOaSrScpe1xcbiAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTptYyxcXG4gICAgICAgICAgZGVzYzpxYixcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyMnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS96aGlib2VyamlcXFwiKScsXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCcsXFxuICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7eW19LyR7d3p9LnBocGAsXFxuICAgICAgICAgICAgICB3ejp3eixcXG4gICAgICAgICAgfVxcbiAgICAgIH0pXFxuICAgICAgfWVsc2UgaWYoKGx4PT0n5Zu95aSW55u05pKtJyl8KGx4PT0n6KeG6aKRJykpe1xcbiAgICAgICAgICBpZighbWMuaW5jbHVkZXMoJ+WFqOe9keaQnCcpKXtcXG4gICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6bWMsXFxuICAgICAgICAgIGRlc2M6cWIsXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2Uvc3l2aWRlb1xcXCIpJyxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJyxcXG4gICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaG9zdDpgJHt5bX0vJHt3en0ucGhwYCxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcbiAgICAgICAgICB9XFxuICAgICAgfSlcXG4gICAgICB9XFxuICAgICAgfWVsc2UgaWYobHguaW5jbHVkZXMoJ+WlsycpJmx4LmluY2x1ZGVzKCfkvJgnKSYod3ohPSdtaXNzYXYnKSl7XFxuICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgIHRpdGxlOm1jLFxcbiAgICAgICAgICBkZXNjOnFiLFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL252eW91ZXJqaVxcXCIpJyxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJyxcXG4gICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaG9zdDpgJHt5bX0vJHt3en0ucGhwYCxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcbiAgICAgICAgICB9XFxuICAgICAgICAgIH0pXFxuICAgICAgfWVsc2UgaWYobHg9PSfluJblrZAnKXtcXG4gICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6bWMsXFxuICAgICAgICAgIGRlc2M6cWIsXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdGllZXJqaVxcXCIpJyxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJyxcXG4gICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaG9zdDpgJHt5bX0vJHt3en0ucGhwYCxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcbiAgICAgICAgICB9XFxuICAgICAgICAgIH0pXFxuICAgICAgfWVsc2UgaWYobHg9PSfnm7Tmkq0nKXtcXG4gICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6bWMsXFxuICAgICAgICAgIGRlc2M6cWIsXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3poaWJvanVoZWVyamlcXFwiKScsXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCcsXFxuICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIHd6Om1jLFxcbiAgICAgICAgICB9XFxuICAgICAgfSlcXG4gICAgICB9ZWxzZSBpZihseD09J+a8q+eUuycpe1xcbiAgICAgICAgICBpZihtYz09J+eMq+WSqua8q+eUuycpe1xcbiAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgIHRpdGxlOm1jLFxcbiAgICAgICAgICBkZXNjOnFiLFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL21hb21pbWFuaHVhXFxcIiknLFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnXFxuICAgICAgfSlcXG4gICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgIHRpdGxlOm1jLFxcbiAgICAgICAgICBkZXNjOnFiLFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL21hbmh1YWVyamlcXFwiKScsXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCcsXFxuICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7eW19LyR7d3p9LnBocGAsXFxuICAgICAgICAgICAgICB3ejp3eixcXG4gICAgICAgICAgfVxcbiAgICAgIH0pXFxuICAgICB9XFxuICAgICAgfWVsc2UgaWYobHg9PSflsI/or7QnKXtcXG4gICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6bWMsXFxuICAgICAgICAgIGRlc2M6cWIsXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UveGlhb3NodW9lcmppXFxcIiknLFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnLFxcbiAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke3ltfS8ke3d6fS5waHBgLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgICB9KVxcbiAgICAgIH1lbHNlIGlmKGx4PT0n5Zu+54mHJyl7XFxuICAgICAgICAgIGlmKG1jPT0n54yr5ZKq576O5Zu+Jyl7XFxuICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgIHRpdGxlOm1jLFxcbiAgICAgICAgICBkZXNjOnFiLFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL21hb21pbWVpdHVcXFwiKScsXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCdcXG4gICAgICAgICAgfSlcXG4gICAgICAgICAgfWVsc2UgaWYobWMhPSfnvo7lm77oibLlm74nKXtcXG4gICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6bWMsXFxuICAgICAgICAgIGRlc2M6cWIsXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvcGljZXJqaVxcXCIpJyxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJyxcXG4gICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaG9zdDpgJHt5bX0vJHt3en0ucGhwYCxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcbiAgICAgICAgICB9XFxuICAgICAgICAgIH0pXFxuICAgICAgICAgIH1cXG4gICAgICB9ZWxzZSBpZihseD09J+acieWjsOWwj+ivtCcpe1xcbiAgICAgICAgICBpZihtYz09J+eMq+WSqkZNJyl7XFxuICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgIHRpdGxlOm1jLFxcbiAgICAgICAgICBkZXNjOnFiLFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL21hb21pRk1cXFwiKScsXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCdcXG4gICAgICAgICAgfSlcXG4gICAgICAgICAgfVxcbiAgICAgIH1cXG4gIH0pXFxuLypcXG52YXIgeml5b25nPWdldEl0ZW0oJ2RhdGEnKS5yZXBsYWNlKCctJywnJykuc3BsaXQoJ+WIhuWJsue6vycpWzFdLnNwbGl0KCfmjaLooYwnKTtcXG4gIHppeW9uZy5mb3JFYWNoKGRhdGE9PntcXG4gICAgICB2YXIgcWQ9c3AoZGF0YSwgXFxcInFkKFxcXCIsIFxcXCIpXFxcIik7XFxuICAgICAgdmFyIHRwPXNwKGRhdGEsIFxcXCJ0cChcXFwiLCBcXFwiKVxcXCIpO1xcbiAgICAgIHZhciBtYz1zcChkYXRhLCBcXFwibWMoXFxcIiwgXFxcIilcXFwiKTtcXG4gICAgICB2YXIgd3o9c3AoZGF0YSwgXFxcImdqYyhcXFwiLCBcXFwiKVxcXCIpO1xcbiAgICAgIHZhciB5bT1zcChkYXRhLCBcXFwieW0oXFxcIiwgXFxcIilcXFwiKTtcXG4gICAgICB2YXIgbHg9c3AoZGF0YSwgXFxcImx4KFxcXCIsIFxcXCIpXFxcIik7XFxuICAgICAgdmFyIHFiPXFkKycgICcrbWMrJyAgJyt3eisnICAnK3ltKycgICcrbHg7XFxuICAgICAgaWYobWMuaW5jbHVkZXMoJ+mJtOi1jycpKXtcXG4gICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6bWMsXFxuICAgICAgICAgIGRlc2M6cWIsXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9lcmppXFxcIiknLFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnLFxcbiAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke3ltfS8ke3d6fS5waHBgLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgICB9KVxcbiAgICAgIH1cXG4gICAgICB9KVxcbiAgICAgICovXFxufWNhdGNoKGUpe1xcbiAgICBsb2coZS5tZXNzYWdlKVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzJcIixcIm5hbWVcIjpcIuinhumikeWIhuexu1wiLFwicGF0aFwiOlwidmlkZW9lcmppXCIsXCJydWxlXCI6XCJqczogXFxudmFyIGQgPSBbXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXG50cnl7XFxubGV0IGhvc3Q9TVlfUEFSQU1TLmhvc3QucmVwbGFjZSgnaHR0cDovL2FwaS5waHBqaWVrb3UudG9wJywnaHR0cHM6Ly9hcGkxLnlpbHVzaHVuZmVuZy50b3AnKTtcXG52YXIgd3o9TVlfUEFSQU1TLnd6O1xcbnZhciDop4bpopHliIbnsbs9ZmV0Y2goaG9zdCsnP2dldHNvcnQnKVxcbmxldCBkYXRhPSBKU09OLnBhcnNlKOinhumikeWIhuexuyk7XFxuLy9sb2coZGF0YSlcXG52YXIga2V5cz1PYmplY3Qua2V5cyhkYXRhKS5zbGljZSgyKTtcXG4vL2xvZyhrZXlzKVxcbnZhciBrZXlfbj1rZXlzWzBdO1xcbmtleXMuZm9yRWFjaChrZXkgPT4ge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcign6KeG6aKR5YiG57G7Jyt3eixrZXlfbik9PWtleT9zdHJvbmcoa2V5LCdGRjY2OTknKTprZXksXFxuICAgICAgICAgICAgdXJsOiQoa2V5KS5sYXp5UnVsZSgoa2V5LHd6KSA9PiB7XFxuICAgICAgICAgICAgICAgcHV0TXlWYXIoJ+inhumikeWIhuexuycrd3osIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LCBrZXksd3opLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgfSlcXG4gICAgfSlcXG5kYXRhW2dldE15VmFyKCfop4bpopHliIbnsbsnK3d6LGtleV9uKV0uZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2Uvdm9kZXJqaTFcXFwiKScsXFxuICAgICAgICAgICBjb2xfdHlwZTondGV4dF8zJyxcXG4gICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7aG9zdH0/c29ydD0ke2RhdGEuaWR9JnBhZ2U9YCxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcbiAgICAgICAgICB9XFxuICAgIH0pXFxufSlcXG59Y2F0Y2goZSl7XFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgIHRvYXN0KCfnnIvkuI3kuoYnKVxcbn1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcInRleHRfNFwiLFwibmFtZVwiOlwi6KeG6aKR5LqM57qnXCIsXCJwYXRoXCI6XCJ2b2RlcmppMVwiLFwicnVsZVwiOlwianM6XFxudmFyIGQ9W107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSlcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzFdXFxudmFyIGhvc3Q9TVlfUEFSQU1TLmhvc3QrcGc7XFxudmFyIHVybD1ob3N0LnNwbGl0KCc/JylbMF07XFxudmFyIHd6PU1ZX1BBUkFNUy53ejtcXG50cnl7XFxuICAgIHZhciBsaXN0PSBKU09OLnBhcnNlKGZldGNoKGhvc3QpKS52aWRlb3M7XFxuICAvLyAgbG9nKGxpc3QpXFxuaWYoKHd6PT0neGJrJyl8KHd6PT0nbWQnKSl7XFxuICAgIGxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzooZGF0YS5jcmVhdGVkX2RhdGU9PW51bGw/Jyc6ZGF0YS5jcmVhdGVkX2RhdGUpKycgICcrKGRhdGEuZGF0ZT09bnVsbD8nJzpkYXRhLmRhdGUpLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZSxcXG4gICAgICAgICAgICB1cmw6IHVybCsnP2lkPScrZGF0YS5pZCt2b2QsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxuICAgICAgICB9KVxcbiB9KVxcbn1lbHNlIGlmKHd6PT0nbWFvbWknKXtcXG4gICAgbGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZWRfZGF0ZT09bnVsbD8nJzpkYXRhLmNyZWF0ZWRfZGF0ZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSksXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlLFxcbiAgICAgICAgICAgIHVybDogdXJsKyc/aWQ9JytkYXRhLmlkK3ZvZCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXG4gICAgfSlcXG4gfSlcXG59ZWxzZSBpZih3ej09J3hjbCcpe1xcbiAgICBsaXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6KGRhdGEuY3JlYXRlZF9kYXRlPT1udWxsPycnOmRhdGEuY3JlYXRlZF9kYXRlKSsnICAnKyhkYXRhLmRhdGU9PW51bGw/Jyc6ZGF0YS5kYXRlKSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxuICAgICAgICAgICAgdXJsOiB1cmwrJz9pZD0nK2RhdGEuaWQrdm9kLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcbiAgICB9KVxcbiB9KVxcbn1lbHNlIGlmKHd6PT0ncWlzZW1hbycpe1xcbiAgICBsaXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6ZGF0YS5kdXJhdGlvbixcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxuICAgICAgICAgICAgdXJsOiB1cmwrJz9pZD0nK2RhdGEuaWQrdm9kLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcbiAgICB9KVxcbiB9KVxcbn1lbHNlIGlmKHd6PT0nOTFwZicpe1xcbiAgICBsaXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6cGFyc2VJbnQoZGF0YS5kdXJhdGlvbi82MCkrJzonK3BhcnNlSW50KGRhdGEuZHVyYXRpb24lNjApLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZStsYXp5LFxcbiAgICAgICAgICAgIHVybDogdXJsKyc/aWQ9JytkYXRhLmlkK3ZvZCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXG4gICAgfSlcXG4gfSlcXG59ZWxzZXtcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6IChkYXRhLmRhdGUuaW5jbHVkZXMoJy0nKT9kYXRhLmRhdGU6ZGF0YS5jcmVhdGVkX2RhdGUpKydcXFxcdFxcXFx0XFxcXHRcXFxcdCcrKGRhdGEuZHVyYXRpb249PW51bGw/Jyc6ZGF0YS5kdXJhdGlvbiksXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlK2xhenksXFxuICAgICAgICAgICAgdXJsOiB1cmwrJz9pZD0nK2RhdGEuaWQrdm9kLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcbiAgICAgICAgfSlcXG4gfSlcXG4gfVxcbiBcXG59Y2F0Y2goZSl7XFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgICB0b2FzdCgn55yL5LiN5LqGJylcXG59XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8yXCIsXCJuYW1lXCI6XCLpu5HmlpnliIbnsbtcIixcInBhdGhcIjpcImJsYWNrZXJqaVwiLFwicnVsZVwiOlwianM6IFxcbnZhciBkID0gW107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxudHJ5e1xcbmxldCBob3N0PU1ZX1BBUkFNUy5ob3N0LnJlcGxhY2UoJ2h0dHA6Ly9hcGkucGhwamlla291LnRvcCcsJ2h0dHBzOi8vYXBpMS55aWx1c2h1bmZlbmcudG9wJyk7XFxudmFyIHd6PU1ZX1BBUkFNUy53ejtcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcbmlmKE1ZX1BBR0U9PTEpe1xcbnZhciDpu5HmlpnliIbnsbs9ZmV0Y2goaG9zdCsnP2dldHNvcnQnKVxcbnZhciBkYXRhPSBKU09OLnBhcnNlKOm7keaWmeWIhuexuykuY2F0ZWdvcmllcztcXG52YXIgaW5kZXhfbj1kYXRhWzBdLmlkLnRvU3RyaW5nKCk7XFxuZGF0YS5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ+m7keaWmeWIhuexuycrd3osaW5kZXhfbik9PWRhdGEuaWQudG9TdHJpbmcoKT9zdHJvbmcoZGF0YS50aXRsZSwnRkY2Njk5Jyk6ZGF0YS50aXRsZSxcXG4gICAgICAgICAgICB1cmw6JCgnJykubGF6eVJ1bGUoKHRpdGxlLGlkLHd6KSA9PiB7XFxuICAgICAgICAgICAgICAgcHV0TXlWYXIoJ+m7keaWmeWIhuexuycrd3osIGlkKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LGRhdGEudGl0bGUsZGF0YS5pZC50b1N0cmluZygpLHd6KSxcXG4gICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJ1xcbiAgICB9KVxcbn0pXFxufVxcbnZhciBsaXN0PUpTT04ucGFyc2UoZmV0Y2goaG9zdCsnP3NvcnQ9JytnZXRNeVZhcign6buR5paZ5YiG57G7Jyt3eixpbmRleF9uKSsnJnBhZ2U9JytwZykpLnZpZGVvcztcXG4vL2xvZyhsaXN0KVxcbmlmKHd6PT0naGFpamlhbycpe1xcbiAgICBsaXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6IGRhdGEuZGF0ZSxcXG4gICAgICAgICAgICBpbWc6ICBkYXRhLmltYWdlICsgXFxcIkBqcz1cXFwiICsgJC50b1N0cmluZygocnVsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2Flcz9ydWxlPVxcXCIgKyBydWxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltYWdlLmltYWdlRGVjcnlwdCgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIE1ZX1JVTEUudGl0bGUpLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9ibGFja2VyamkxXFxcIiknLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidwaWNfMScsXFxuICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaG9zdDpgJHtob3N0fT9pZD0ke2RhdGEuaWR9YCxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcbiAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiB9KVxcbn1lbHNle1xcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzogZGF0YS5kYXRlLFxcbiAgICAgICAgICAgIGltZzogKCh3ej09JzUxY2cnKXwod3o9PSdobGJkeScpKT8oZGF0YS5pbWFnZStsYXp5KTpkYXRhLmltYWdlLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9ibGFja2VyamkxXFxcIiknLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidwaWNfMScsXFxuICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaG9zdDpgJHtob3N0fT9pZD0ke2RhdGEuaWR9YCxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcbiAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiB9KVxcbiB9XFxuIH1jYXRjaChlKXtcXG4gICAgIGxvZyhlLm1lc3NhZ2UpXFxuIH1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcInRleHRfNFwiLFwibmFtZVwiOlwi6buR5paZ5LqM57qnXCIsXCJwYXRoXCI6XCJibGFja2VyamkxXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZD1bXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKVxcbnZhciB1cmw9TVlfUEFSQU1TLmhvc3Q7XFxudmFyIHd6PU1ZX1BBUkFNUy53ejtcXG50cnl7XFxudmFyIGRhdGE9IEpTT04ucGFyc2UoZmV0Y2godXJsKSk7XFxuLy9sb2coZGF0YSlcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6cGRmaChkYXRhLnRpdGxlQ29kZSwnaDEmJlRleHQnKT09Jyc/cGRmaChkYXRhLnRpdGxlQ29kZSwnaDImJlRleHQnKTpwZGZoKGRhdGEudGl0bGVDb2RlLCdoMSYmVGV4dCcpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidyaWNoX3RleHQnXFxuICAgICAgICB9KVxcbiAgICAgICAgaWYod3o9PSdjZ3cnKXtcXG4gICAgICAgICAgICB2YXIgdmlkZW9zPWRhdGEudmlkZW8ucmVwbGFjZSgvXFxcXCQvZywnJykuc3BsaXQoJ0AnKTtcXG4gICAgICAgIHZhciBpbWc9ZGF0YS5pbWdjb2RlLm1hdGNoKC9zcmNcXFxcPVxcXFxcXFwiLio/XFxcXFxcXCIuKj9hbHQvKVswXS5zcGxpdCgnXFxcIicpWzFdO1xcbiAgICB2aWRlb3MuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXG4gICAgICAgIHZhciBuPWluZGV4KzE7XFxuICAgICAgICBpZihpdGVtKXtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6J+inhumikScrbixcXG4gICAgICAgICAgICBkZXNjOicwJyxcXG4gICAgICAgICAgICBpbWc6aW1nLFxcbiAgICAgICAgICAgIHVybDppdGVtLnJlcGxhY2UoJ+WIhuWJsicsJycpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMScsXFxuICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgfSlcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEuaW1nY29kZSxcXG4gICAgICAgICAgICBjb2xfdHlwZToncmljaF90ZXh0JyxcXG4gICAgICAgIH0pXFxuICAgICAgICB9ZWxzZSBpZih3ej09J2d0bCcpe1xcbiAgICAgICAgdmFyIHZpZGVvcz1kYXRhLnZpZGVvLnJlcGxhY2UoL1xcXFwkL2csJycpLnNwbGl0KCdAJyk7XFxuICAgICAgICB2YXIgaW1nPWRhdGEucGljQ29kZS5tYXRjaCgvc3JjXFxcXD1cXFxcXFxcIi4qP1xcXFxcXFwiLio/YWx0LylbMF0uc3BsaXQoJ1xcXCInKVsxXTtcXG4gICAgdmlkZW9zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XFxuICAgICAgICB2YXIgbj1pbmRleCsxO1xcbiAgICAgICAgaWYoaXRlbSl7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOifop4bpopEnK24sXFxuICAgICAgICAgICAgZGVzYzonMCcsXFxuICAgICAgICAgICAgaW1nOmltZyxcXG4gICAgICAgICAgICB1cmw6aXRlbS5yZXBsYWNlKCfliIblibInLCcnKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2NhcmRfcGljXzEnLFxcbiAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgIH0pXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS5waWNDb2RlLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidyaWNoX3RleHQnLFxcbiAgICAgICAgfSlcXG4gICAgICAgIH1lbHNlIGlmKHd6PT0ndGlrdG9rMTgnKXtcXG4gICAgICAgIHZhciB2aWRlb3M9ZGF0YS52aWRlby5yZXBsYWNlKC9cXFxcJC9nLCcnKS5zcGxpdCgnQCcpO1xcbiAgICAgICAgdmFyIGltZ3M9ZGF0YS5waWNDb2RlLnJlcGxhY2UoL1xcXFwkL2csJycpLnNwbGl0KCdA5YiG5YmyJyk7XFxuICAgIHZpZGVvcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xcbiAgICAgICAgdmFyIG49aW5kZXgrMTtcXG4gICAgICAgIGlmKGl0ZW0pe1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTon6KeG6aKRJytuLFxcbiAgICAgICAgICAgIGRlc2M6JzAnLFxcbiAgICAgICAgICAgIGltZzppbWdzWzBdK2xhenksXFxuICAgICAgICAgICAgdXJsOml0ZW0ucmVwbGFjZSgn5YiG5YmyJywnJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdjYXJkX3BpY18xJyxcXG4gICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9KVxcbiAgICAgICAgdmFyIHRleHRzPWRhdGEuaW1nY29kZS5yZXBsYWNlKC9cXFxcPHBcXFxcPi8sJyYmJjxwPicpLnJlcGxhY2UoL1xcXFw8XFxcXC9wXFxcXD4vLCcmJiY8L3A+Jykuc3BsaXQoJyYmJicpO1xcbiAgICAgIC8vICBsb2codGV4dHMpXFxuICAgICAgICB0ZXh0cy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xcbiAgICBpZiAocGRmaChpdGVtLCAncCYmVGV4dCcpKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0ZW0sICdwJiZUZXh0JyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgaWYgKHBkZmgoaXRlbSwgJ2gxJiZUZXh0JykpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgJ3AmJlRleHQnKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBpZiAocGRmaChpdGVtLCAnaDImJlRleHQnKSkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCAncCYmVGV4dCcpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0JyxcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIH0pXFxuICAgIHZhciBpbWdzPWRhdGEucGljQ29kZS5yZXBsYWNlKC9cXFxcJC9nLCcnKS5zcGxpdCgnQOWIhuWJsicpO1xcbiAgICBpbWdzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XFxuICAgICAgICBpZihpdGVtKXtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgaW1nOml0ZW0rbGF6eSxcXG4gICAgICAgICAgICB1cmw6aXRlbStsYXp5LFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncGljXzFfZnVsbCcsXFxuICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgfSlcXG4gICAgICAgIH1lbHNlIGlmKHd6PT0nNTFjZycpe1xcbiAgICAgICAgdmFyIG49MFxcbiAgICAgICAgdmFyIHRleHRzPWRhdGEuaW1nY29kZS5yZXBsYWNlKC9wc3R5bGUvZywncCBzdHlsZScpLnJlcGxhY2UoL1xcXFw8XFxcXC9wLio/XFxcXD5cXFxcPHAuKj9cXFxcPi9nLCc8L3A+JiY8cD4nKS5zcGxpdCgnJiYnKTtcXG4gICAgICAgLy8gbG9nKHRleHRzKVxcbiAgICAgICB0ZXh0cy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xcbiAgICAgICAgICAgaWYocGRmaChpdGVtLCcuZHBsYXllciYmZGF0YS1jb25maWcnKSE9Jycpe1xcbiAgICAgICAgbGV0IHVybD1KU09OLnBhcnNlKHBkZmgoaXRlbSwnLmRwbGF5ZXImJmRhdGEtY29uZmlnJykpLnZpZGVvO1xcbiAgICAgICAgbisrO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOinhumikeKAneKAnSAgJyArIG4sXFxuICAgICAgICAgICAgZGVzYzonMCcsXFxuICAgICAgICAgICAgaW1nOiB1cmwucGljICsgbGF6eSxcXG4gICAgICAgICAgICB1cmw6IHVybC51cmwucmVwbGFjZSgvXFxcXC9cXFxcLy4qcGxheVxcXFwuLywnLy9sb25nLicpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMSdcXG4gICAgICAgIH0pO1xcbiAgICAgICB9XFxuICAgICAgIH0pXFxuICAgICAgIHRleHRzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XFxuICAgIGlmIChwZGZoKGl0ZW0sICdwJiZUZXh0JykpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgJ3AmJlRleHQnKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICB2YXIgaW1ncyA9IHBkZmEoaXRlbSwgJ3AmJmltZycpLm1hcChoID0+IHBkZmgoaCwgJ2ltZyYmZGF0YS14a3JrbGxnbCcpKTtcXG4gICAgaW1ncy5mb3JFYWNoKGl0ZW0yID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICcnLFxcbiAgICAgICAgICAgIGltZzogaXRlbTIgKyBsYXp5LFxcbiAgICAgICAgICAgIHVybDogaXRlbTIgKyBsYXp5LFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncGljXzFfZnVsbCdcXG4gICAgICAgIH0pO1xcbiAgICB9KTtcXG4gICAgaWYocGRmaChpdGVtLCcuZHBsYXllciYmZGF0YS1jb25maWcnKSE9Jycpe1xcbiAgICAgICAgbGV0IHVybD1KU09OLnBhcnNlKHBkZmgoaXRlbSwnLmRwbGF5ZXImJmRhdGEtY29uZmlnJykpLnZpZGVvO1xcbiAgICAgICAgbisrO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOinhumikeKAneKAnSAgJyArIG4sXFxuICAgICAgICAgICAgZGVzYzonMCcsXFxuICAgICAgICAgICAgaW1nOiB1cmwucGljICsgbGF6eSxcXG4gICAgICAgICAgICB1cmw6IHVybC51cmwucmVwbGFjZSgvXFxcXC9cXFxcLy4qcGxheVxcXFwuLywnLy9sb25nLicpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMSdcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIH0pXFxuICAgICAgICB9ZWxzZSBpZih3ej09J2hsYmR5Jyl7XFxuICAgICAgICAgICAgdmFyIG49MFxcbiAgICAgICAgdmFyIHRleHRzPWRhdGEucGljQ29kZS5yZXBsYWNlKC9cXFxcPFxcXFwvcFxcXFw+XFxcXG5cXFxcPHBcXFxcPi9nLCc8L3A+JiY8cD4nKS5zcGxpdCgnJiYnKTtcXG4gICAgICAgLy8gbG9nKHRleHRzKVxcbiAgICAgICAgIHRleHRzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XFxuICAgICAgICAgICBpZihwZGZoKGl0ZW0sJy5kcGxheWVyJiZjb25maWcnKSE9Jycpe1xcbiAgICAgICAgbGV0IHVybD1KU09OLnBhcnNlKHBkZmgoaXRlbSwnLmRwbGF5ZXImJmNvbmZpZycpKS52aWRlbztcXG4gICAgICAgIG4rKztcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJzigJzop4bpopHigJ3igJ0gICcgKyBuLFxcbiAgICAgICAgICAgIGRlc2M6JzAnLFxcbiAgICAgICAgICAgIGltZzogdXJsLnBpYyArIGxhenksXFxuICAgICAgICAgICAgdXJsOiB1cmwudXJsLnJlcGxhY2UoL1xcXFwvXFxcXC8uKnBsYXlcXFxcLi8sJy8vbG9uZy4nKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2NhcmRfcGljXzEnXFxuICAgICAgICB9KTtcXG4gICAgICAgfVxcbiAgICAgICB9KVxcbiAgICAgICB2YXIgbj0wO1xcbiAgICAgICB0ZXh0cy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xcbiAgICBpZiAocGRmaChpdGVtLCAncCYmVGV4dCcpKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0ZW0sICdwJiZUZXh0JyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgdmFyIGltZ3MgPSBwZGZhKGl0ZW0sICdwJiZpbWcnKS5tYXAoaCA9PiBwZGZoKGgsICdpbWcmJm9ubG9hZCcpKTtcXG4gICAgaW1ncy5mb3JFYWNoKGl0ZW0yID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICcnLFxcbiAgICAgICAgICAgIGltZzogaXRlbTIuc3BsaXQoXFxcIih0aGlzLCdcXFwiKVsxXS5zcGxpdChcXFwiJylcXFwiKVswXSArIGxhenksXFxuICAgICAgICAgICAgdXJsOiBpdGVtMi5zcGxpdChcXFwiKHRoaXMsJ1xcXCIpWzFdLnNwbGl0KFxcXCInKVxcXCIpWzBdICsgbGF6eSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3BpY18xX2Z1bGwnXFxuICAgICAgICB9KTtcXG4gICAgfSk7XFxuICAgIGlmKHBkZmgoaXRlbSwnLmRwbGF5ZXImJmNvbmZpZycpIT0nJyl7XFxuICAgICAgICBsZXQgdXJsPUpTT04ucGFyc2UocGRmaChpdGVtLCcuZHBsYXllciYmY29uZmlnJykpLnZpZGVvO1xcbiAgICAgICAgbisrO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOinhumikeKAneKAnSAgJyArIG4sXFxuICAgICAgICAgICAgZGVzYzonMCcsXFxuICAgICAgICAgICAgaW1nOiB1cmwucGljICsgbGF6eSxcXG4gICAgICAgICAgICB1cmw6IHVybC51cmwucmVwbGFjZSgvXFxcXC9cXFxcLy4qcGxheVxcXFwuLywnLy9sb25nLicpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMSdcXG4gICAgICAgIH0pO1xcbiAgICAgICB9XFxuICAgIH0pXFxuICAgICAgICB9ZWxzZSBpZih3ej09J2hhaWppYW8nKXtcXG4gICAgICAgICAgICB0cnl7XFxuICAgICAgICAgICAgdmFyIHZpZGVvcz1kYXRhLnZpZGVvLnJlcGxhY2UoL1xcXFwkL2csJycpLnNwbGl0KCdAJyk7XFxuICAgICAgICB2YXIgaW1nPWRhdGEucGljQ29kZS5tYXRjaCgveGtya2xsZ2xcXFxcPVxcXFxcXFwiLio/XFxcXFxcXCIuKj9hbHQvKVswXS5zcGxpdCgnXFxcIicpWzFdO1xcbiAgICB2aWRlb3MuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXG4gICAgICAgIHZhciBuPWluZGV4KzE7XFxuICAgICAgICBpZihpdGVtKXtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6J+inhumikScrbixcXG4gICAgICAgICAgICBkZXNjOicwJyxcXG4gICAgICAgICAgICBpbWc6aW1nKyBcXFwiQGpzPVxcXCIgKyAkLnRvU3RyaW5nKChydWxlKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYWVzP3J1bGU9XFxcIiArIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1hZ2UuaW1hZ2VEZWNyeXB0KCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgTVlfUlVMRS50aXRsZSksXFxuICAgICAgICAgICAgdXJsOml0ZW0ucmVwbGFjZSgn5YiG5YmyJywnJykrJyNpc1ZpZGVvPXRydWUjJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2NhcmRfcGljXzEnLFxcbiAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgIH0pXFxuICAgICAgICB2YXIgdGV4dHM9ZGF0YS5waWNDb2RlLnJlcGxhY2UoL3BzdHlsZS9nLCdwIHN0eWxlJykucmVwbGFjZSgvXFxcXDxcXFxcL3BcXFxcPi9nLCc8L3A+JiYnKS5zcGxpdCgnJiYnKTtcXG4gICAgICAgIHRleHRzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XFxuICAgIGlmIChwZGZoKGl0ZW0sICdwJiZUZXh0JykpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgJ3AmJlRleHQnKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICAgIHZhciBpbWc9aXRlbS5tYXRjaCgveGtya2xsZ2xcXFxcPVxcXFxcXFwiLio/XFxcXFxcXCIuKj9hbHQvKTtcXG4gICAgICBpZihpbWcpe1xcbiAgICAgLy8gbG9nKGltZylcXG4gICAgICBkLnB1c2goe1xcbiAgICAgICAgICBpbWc6aW1nWzBdLnNwbGl0KCdcXFwiJylbMV0rIFxcXCJAanM9XFxcIiArICQudG9TdHJpbmcoKHJ1bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hZXM/cnVsZT1cXFwiICsgcnVsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbWFnZS5pbWFnZURlY3J5cHQoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBNWV9SVUxFLnRpdGxlKSxcXG4gICAgICAgICAgdXJsOmltZ1swXS5zcGxpdCgnXFxcIicpWzFdKyBcXFwiQGpzPVxcXCIgKyAkLnRvU3RyaW5nKChydWxlKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYWVzP3J1bGU9XFxcIiArIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1hZ2UuaW1hZ2VEZWNyeXB0KCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgTVlfUlVMRS50aXRsZSksXFxuICAgICAgICAgIGNvbF90eXBlOidwaWNfMV9mdWxsJ1xcbiAgICAgIH0pXFxuICAgICAgIH1cXG4gICAgfSlcXG4gICAgfWNhdGNoe31cXG4gICAgICAgIH1lbHNlIGlmKHd6PT0na2FubGlhbycpe1xcbiAgICAgICAgICAgIHZhciB0ZXh0cz1kYXRhLnBpY0NvZGUucmVwbGFjZSgvXFxcXDxiclxcXFw+L2csJyYmJykuc3BsaXQoJyYmJyk7XFxuICAgICAgICAgICAgdmFyIG49MDtcXG4gICAgICAgICAgIHRleHRzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmKHBkZmgoaXRlbSwnLmRwbGF5ZXImJmRhdGEtY29uZmlnJykhPScnKXtcXG4gICAgICAgIGxldCB1cmw9SlNPTi5wYXJzZShwZGZoKGl0ZW0sJy5kcGxheWVyJiZkYXRhLWNvbmZpZycpKS52aWRlbztcXG4gICAgICAgIG4rKztcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfop4bpopEgJyArIG4sXFxuICAgICAgICAgICAvLyBkZXNjOicwJyxcXG4gICAgICAgICAgICBpbWc6IHVybC5waWMsXFxuICAgICAgICAgICAgdXJsOiB1cmwudXJsLnJlcGxhY2UoL1xcXFwvXFxcXC8uKnBsYXlcXFxcLi8sJy8vbG9uZy4nKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMSdcXG4gICAgICAgIH0pO1xcbiAgICAgICB9XFxuICAgICAgIH0pXFxuICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEucGljQ29kZSxcXG4gICAgICAgICAgICBjb2xfdHlwZToncmljaF90ZXh0JyxcXG4gICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgICAgICBcXG4gICAgICAgIH1jYXRjaHt9XFxuICAgICAgICBcXG4gICAgICAgIFxcbiAgICAgICAgLypcXG4gICAgICAgIHRyeXtcXG4gICAgICAgIHZhciB2aWRlbz1kYXRhLnZpZGVvY29kZS5yZXBsYWNlKC9cXFxcPFxcXFwvdmlkZW9cXFxcPi9nLCc8L3ZpZGVvPiYmJykuc3BsaXQoJyYmJyk7XFxuICAgICAgICB2aWRlby5mb3JFYWNoKChpdGVtLGluZGV4KSA9PiB7XFxuICAgICAgICAgICBpZihwZGZoKGl0ZW0sICd2aWRlbyYmc3JjJykpe1xcbiAgICAgICAgICAgIHZhciBuPWluZGV4KzE7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn6KeG6aKRJytuLFxcbiAgICAgICAgICAgIGRlc2M6JzAnLFxcbiAgICAgICAgICAgIGltZzogcGRmaChpdGVtLCAndmlkZW8mJnBvc3RlcicpLFxcbiAgICAgICAgICAgIHVybDogcGRmaChpdGVtLCAndmlkZW8mJnNyYycpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMSdcXG4gICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICAgICAgfWNhdGNoe31cXG4gICAgICAgIFxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTon6KeG6aKRJyxcXG4gICAgICAgICAgICBkZXNjOicwJyxcXG4gICAgICAgICAgICBpbWc6cGRmaChkYXRhLnZpZGVvY29kZSwndmlkZW8mJnBvc3RlcicpLFxcbiAgICAgICAgICAgIHVybDpwZGZoKGRhdGEudmlkZW9jb2RlLCd2aWRlbyYmc3JjJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6J2NhcmRfcGljXzEnXFxuICAgICAgICAgICAgXFxuICAgICAgICB9KVxcbiAgICAgICAgKi9cXG4gICAgICBcXG4gICAgICAgXFxuICAgICAgICBcXG4gICAgICAgIC8qXFxuICAgICAgICBpZih3ej09J2Nndycpe1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS5pbWdjb2RlLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidyaWNoX3RleHQnLFxcbiAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gICAgICAgICovXFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8yXCIsXCJuYW1lXCI6XCLlm73lhoXnm7Tmkq3liIbnsbtcIixcInBhdGhcIjpcInpoaWJvZXJqaVwiLFwicnVsZVwiOlwianM6IFxcbnZhciBkID0gW107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxudHJ5e1xcbmxldCBob3N0PU1ZX1BBUkFNUy5ob3N0LnJlcGxhY2UoJ2h0dHA6Ly9hcGkucGhwamlla291LnRvcCcsJ2h0dHBzOi8vYXBpMS55aWx1c2h1bmZlbmcudG9wJyk7XFxudmFyIHd6PU1ZX1BBUkFNUy53ejtcXG5pZihNWV9QQUdFPT0xKXtcXG52YXIg55u05pKt5YiG57G7PWZldGNoKGhvc3QrJz9nZXRwaW5ndGFpJylcXG52YXIgZGF0YT0gSlNPTi5wYXJzZSjnm7Tmkq3liIbnsbspLnBpbmd0YWk7XFxuZGF0YS5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBpbWc6ZGF0YS5pbWFnZSxcXG4gICAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHknKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS96aGlib2VyamkxXFxcIiknLFxcbiAgICAgICAgICAgY29sX3R5cGU6J2NhcmRfcGljXzMnLFxcbiAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaG9zdDpgJHtob3N0fT9waW5ndGFpPSR7ZGF0YS5pZH1gLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgfSlcXG59KVxcbn1cXG59Y2F0Y2goZSl7XFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgIHRvYXN0KCfnnIvkuI3kuoYnKVxcbn1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcInRleHRfNFwiLFwibmFtZVwiOlwi5Zu95YaF55u05pKt5LqM57qnXCIsXCJwYXRoXCI6XCJ6aGlib2VyamkxXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZD1bXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKVxcbmxldCBob3N0PU1ZX1BBUkFNUy5ob3N0O1xcbmxldCB1cmw9aG9zdC5zcGxpdCgnPycpWzBdO1xcbnZhciB3ej1NWV9QQVJBTVMud3o7XFxudHJ5e1xcbmxldCBsaXN0PSBKU09OLnBhcnNlKGZldGNoKGhvc3QpKS56aHVibztcXG4vL2xvZyhsaXN0KVxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlLFxcbiAgICAgICAgICAgIHVybDogdXJsKyc/aWQ9JytkYXRhLmlkK3ZvZCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMydcXG4gICAgICAgIH0pXFxuIH0pXFxufWNhdGNoKGUpe1xcbiAgICBsb2coZS5tZXNzYWdlKVxcbiAgICAgdG9hc3QoJ+eci+S4jeS6hicpXFxufVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfMlwiLFwibmFtZVwiOlwi5Zu95aSW55u05pKt5YiG57G7XCIsXCJwYXRoXCI6XCJndW93YWllcmppXCIsXCJydWxlXCI6XCJqczogXFxudmFyIGQgPSBbXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXG50cnl7XFxubGV0IGhvc3Q9TVlfVVJMLnNwbGl0KCcjIycpWzFdLnJlcGxhY2UoJ2h0dHA6Ly9hcGkucGhwamlla291LnRvcCcsJ2h0dHBzOi8vYXBpMS55aWx1c2h1bmZlbmcudG9wJyk7XFxudmFyIHd6PU1ZX1VSTC5zcGxpdCgnIyMnKVsyXTtcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzNdO1xcbnZhciDlm73lpJbnm7Tmkq3liIbnsbs9ZmV0Y2goaG9zdCsnP2dldHNvcnQnKVxcbnZhciBkYXRhPSBKU09OLnBhcnNlKOWbveWkluebtOaSreWIhuexuykuY2F0ZWdvcmllcztcXG52YXIgaW5kZXhfbj1kYXRhWzBdLmlkLnRvU3RyaW5nKClcXG5pZihNWV9QQUdFPT0xKXtcXG5kYXRhLmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcign5Zu95aSW55u05pKt5YiG57G7Jyt3eixpbmRleF9uKT09ZGF0YS5pZC50b1N0cmluZygpP3N0cm9uZyhkYXRhLnRpdGxlLCdGRjY2OTknKTpkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIHVybDokKCcnKS5sYXp5UnVsZSgodGl0bGUsaWQsd3opID0+IHtcXG4gICAgICAgICAgICAgICBwdXRNeVZhcign5Zu95aSW55u05pKt5YiG57G7Jyt3eiwgaWQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sZGF0YS50aXRsZSxkYXRhLmlkLnRvU3RyaW5nKCksd3opLFxcbiAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nXFxuICAgIH0pXFxufSlcXG59XFxuXFxudmFyIGxpc3Q9SlNPTi5wYXJzZShmZXRjaChob3N0Kyc/c29ydD0nK2dldE15VmFyKCflm73lpJbnm7Tmkq3liIbnsbsnK3d6LGluZGV4X24pKycmcGFnZT0nK3BnKSkudmlkZW9zO1xcbi8vbG9nKGxpc3QpXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOiBkYXRhLmRhdGUsXFxuICAgICAgICAgICAgaW1nOiAoKGRhdGEuaW1hZ2UuaW5jbHVkZXMoJ3VwbG9hZCcpfGRhdGEuaW1hZ2UuaW5jbHVkZXMoJ25ldy4nKSkmIWRhdGEuaW1hZ2UuaW5jbHVkZXMoJ3Rvb2xtbScpKT8oZGF0YS5pbWFnZStsYXp5KTpkYXRhLmltYWdlLFxcbiAgICAgICAgICAgIHVybDogaG9zdCsnP2lkPScrZGF0YS5pZCt2b2QsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxuICAgICAgICB9KVxcbiB9KVxcbiB9Y2F0Y2goZSl7XFxuICAgICBsb2coZS5tZXNzYWdlKVxcbiAgICAgdG9hc3QoJ+eci+S4jeS6hicpXFxuIH1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzJcIixcIm5hbWVcIjpcIuWlsyDkvJjliIbnsbtcIixcInBhdGhcIjpcIm52eW91ZXJqaVwiLFwicnVsZVwiOlwianM6IFxcbnZhciBkID0gW107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxudHJ5e1xcbmxldCBob3N0PU1ZX1BBUkFNUy5ob3N0LnJlcGxhY2UoJ2h0dHA6Ly9hcGkucGhwamlla291LnRvcCcsJ2h0dHBzOi8vYXBpMS55aWx1c2h1bmZlbmcudG9wJyk7XFxudmFyIHd6PU1ZX1BBUkFNUy53ejtcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcbnZhciBpdGVtPXJlcXVlc3QoaG9zdCsnP2FjdHJlc3M9JnBhZ2U9JytwZylcXG52YXIgZGF0YT0gSlNPTi5wYXJzZShpdGVtKS5hY3RyZXNzZXM7XFxuZGF0YS5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOmRhdGEubnVtYmVyLFxcbiAgICAgICAgICAgIGltZzpkYXRhLmltYWdlLFxcbiAgICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvbnZ5b3VlcmppMVxcXCIpJyxcXG4gICAgICAgICAgIGNvbF90eXBlOidjYXJkX3BpY18zJyxcXG4gICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7aG9zdH0/c29ydD0ke2RhdGEuaWR9JnBhZ2U9YCxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcbiAgICAgICAgICB9XFxuICAgIH0pXFxufSlcXG5cXG59Y2F0Y2goZSl7XFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxufVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwidGV4dF80XCIsXCJuYW1lXCI6XCLlpbMg5LyY5LqM57qnXCIsXCJwYXRoXCI6XCJudnlvdWVyamkxXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZD1bXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKVxcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxudmFyIGhvc3Q9TVlfUEFSQU1TLmhvc3QrcGc7XFxudmFyIHVybD1ob3N0LnNwbGl0KCc/JylbMF07XFxudmFyIHd6PU1ZX1BBUkFNUy53ejtcXG50cnl7XFxubGV0IGxpc3Q9IEpTT04ucGFyc2UoZmV0Y2goaG9zdCkpLnZpZGVvcztcXG4vL2xvZyhsaXN0KVxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlLFxcbiAgICAgICAgICAgIGRlc2M6KGRhdGEuY3JlYXRldGltZT09bnVsbD8nJzpkYXRhLmNyZWF0ZXRpbWUpKycgICcrKGRhdGEuZGF0ZT09bnVsbD8nJzpkYXRhLmRhdGUpLFxcbiAgICAgICAgICAgIHVybDogdXJsKyc/aWQ9JytkYXRhLmlkK3ZvZCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXG4gICAgICAgIH0pXFxuIH0pXFxufWNhdGNoKGUpe1xcbiAgICBsb2coZS5tZXNzYWdlKVxcbiAgICAgdG9hc3QoJ+eci+S4jeS6hicpXFxufVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfMlwiLFwibmFtZVwiOlwi5biW5a2Q5YiG57G7XCIsXCJwYXRoXCI6XCJ0aWVlcmppXCIsXCJydWxlXCI6XCJqczogXFxudmFyIGQgPSBbXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXG50cnl7XFxubGV0IGhvc3Q9TVlfUEFSQU1TLmhvc3QucmVwbGFjZSgnaHR0cDovL2FwaS5waHBqaWVrb3UudG9wJywnaHR0cHM6Ly9hcGkxLnlpbHVzaHVuZmVuZy50b3AnKTtcXG52YXIgd3o9TVlfUEFSQU1TLnd6O1xcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxuaWYoTVlfUEFHRT09MSl7XFxudmFyIOW4luWtkOWIhuexuz1mZXRjaChob3N0Kyc/Z2V0c29ydCcpXFxudmFyIGRhdGE9IEpTT04ucGFyc2Uo5biW5a2Q5YiG57G7KS5jYXRlZ29yaWVzO1xcbnZhciBpbmRleF9uPWRhdGFbMF0uaWQudG9TdHJpbmcoKTtcXG5kYXRhLmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcign5biW5a2Q5YiG57G7Jyt3eixpbmRleF9uKT09ZGF0YS5pZC50b1N0cmluZygpP3N0cm9uZyhkYXRhLnRpdGxlLCdGRjY2OTknKTpkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIHVybDokKCcnKS5sYXp5UnVsZSgodGl0bGUsaWQsd3opID0+IHtcXG4gICAgICAgICAgICAgICBwdXRNeVZhcign5biW5a2Q5YiG57G7Jyt3eiwgaWQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sZGF0YS50aXRsZSxkYXRhLmlkLnRvU3RyaW5nKCksd3opLFxcbiAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nXFxuICAgIH0pXFxufSlcXG59XFxudmFyIGxpc3Q9SlNPTi5wYXJzZShmZXRjaChob3N0Kyc/c29ydD0nK2dldE15VmFyKCfluJblrZDliIbnsbsnK3d6LGluZGV4X24pKycmcGFnZT0nK3BnKSkudmlkZW9zO1xcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzogZGF0YS5kYXRlLFxcbiAgICAgICAgICAgIC8vaW1nOiAnaHR0cHM6Ly9pbWFnZXMueG9vd2JzLmNvbS91cGxvYWRfMDEnK2RhdGEuaW1hZ2Uuc3BsaXQoJ3VwbG9hZF8wMScpWzFdLFxcbiAgICAgICAgICAgIGltZzpkYXRhLmltYWdlK2xhenksXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eSMjJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYmxhY2tlcmppMVxcXCIpJyxcXG4gICAgICAgICAgICBjb2xfdHlwZToncGljXzEnLFxcbiAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7aG9zdH0/aWQ9JHtkYXRhLmlkfWAsXFxuICAgICAgICAgICAgICB3ejp3eixcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gfSlcXG4gfWNhdGNoKGUpe1xcbiAgICBsb2coZS5tZXNzYWdlKVxcbiAgICAgdG9hc3QoJ+eci+S4jeS6hicpXFxuIH1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzJcIixcIm5hbWVcIjpcIuebtOaSreiBmuWQiOWIhuexu1wiLFwicGF0aFwiOlwiemhpYm9qdWhlZXJqaVwiLFwicnVsZVwiOlwianM6IFxcbnZhciBkID0gW107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxudHJ5e1xcbmxldCB3ej1NWV9QQVJBTVMud3o7XFxuaWYod3o9PSfnm7Tmkq3ogZrlkIgnKXtcXG4gICAgaG9zdD0naHR0cDovL2FwaS52aXBtaXNzcy5jb206ODEveGNkc3cvJ1xcbn1lbHNle1xcbiAgICBob3N0PSdodHRwOi8vYXBpLm1haXlvdXguY29tOjgxL21mLydcXG59XFxuaWYoTVlfUEFHRT09MSl7XFxudmFyIOebtOaSreiBmuWQiD1yZXF1ZXN0KGhvc3QrJ2pzb24udHh0JylcXG52YXIgZGF0YT0gSlNPTi5wYXJzZSjnm7Tmkq3ogZrlkIgpLnBpbmd0YWk7XFxuZGF0YS5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOmRhdGEuTnVtYmVyLFxcbiAgICAgICAgICAgIGltZzpkYXRhLnhpbmltZyxcXG4gICAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHknKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS96aGlib2p1aGVlcmppMVxcXCIpJyxcXG4gICAgICAgICAgIGNvbF90eXBlOidjYXJkX3BpY18zJyxcXG4gICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7aG9zdH0ke2RhdGEuYWRkcmVzc31gLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgfSlcXG59KVxcbn1cXG59Y2F0Y2goZSl7XFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgIHRvYXN0KCfnnIvkuI3kuoYnKVxcbn1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcInRleHRfNFwiLFwibmFtZVwiOlwi55u05pKt6IGa5ZCI5LqM57qnXCIsXCJwYXRoXCI6XCJ6aGlib2p1aGVlcmppMVwiLFwicnVsZVwiOlwianM6XFxudmFyIGQ9W107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSlcXG5sZXQgaG9zdD1NWV9QQVJBTVMuaG9zdDtcXG50cnl7XFxubGV0IGxpc3Q9IEpTT04ucGFyc2UoZmV0Y2goaG9zdCkpLnpodWJvO1xcbi8vbG9nKGxpc3QpXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICBpZighZGF0YS50aXRsZS5pbmNsdWRlcygnOTk5OScpKXtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltZyxcXG4gICAgICAgICAgICB1cmw6IGRhdGEuYWRkcmVzcyxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXG4gICAgICAgIH0pXFxuICAgICAgICB9XFxuIH0pXFxufWNhdGNoe31cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzJcIixcIm5hbWVcIjpcIua8q+eUu+WIhuexu1wiLFwicGF0aFwiOlwibWFuaHVhZXJqaVwiLFwicnVsZVwiOlwianM6IFxcbnZhciBkID0gW107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxudHJ5e1xcbmxldCBob3N0PU1ZX1BBUkFNUy5ob3N0LnJlcGxhY2UoJ2h0dHA6Ly9hcGkucGhwamlla291LnRvcCcsJ2h0dHBzOi8vYXBpMS55aWx1c2h1bmZlbmcudG9wJyk7XFxudmFyIHd6PU1ZX1BBUkFNUy53ejtcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcbmlmKE1ZX1BBR0U9PTEpe1xcbnZhciDmvKvnlLvliIbnsbs9ZmV0Y2goaG9zdCsnP2dldHNvcnQnKVxcbnZhciBkYXRhPSBKU09OLnBhcnNlKOa8q+eUu+WIhuexuykuY2F0ZWdvcmllcztcXG52YXIgaW5kZXhfbj1kYXRhWzBdLmlkLnRvU3RyaW5nKClcXG5kYXRhLmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcign5ryr55S75YiG57G7Jyt3eixpbmRleF9uKT09ZGF0YS5pZC50b1N0cmluZygpP3N0cm9uZyhkYXRhLnRpdGxlLCdGRjY2OTknKTpkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIHVybDokKCcnKS5sYXp5UnVsZSgodGl0bGUsaWQsd3opID0+IHtcXG4gICAgICAgICAgICAgICBwdXRNeVZhcign5ryr55S75YiG57G7Jyt3eiwgaWQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sZGF0YS50aXRsZSxkYXRhLmlkLnRvU3RyaW5nKCksd3opLFxcbiAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nXFxuICAgIH0pXFxufSlcXG59XFxudmFyIGxpc3Q9SlNPTi5wYXJzZShmZXRjaChob3N0Kyc/c29ydD0nK2dldE15VmFyKCfmvKvnlLvliIbnsbsnK3d6LGluZGV4X24pKycmcGFnZT0nK3BnKSkudmlkZW9zO1xcbi8vbG9nKGxpc3QpXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOiBkYXRhLmRhdGUsXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9tYW5odWFlcmppMVxcXCIpJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMycsXFxuICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaG9zdDpgJHtob3N0fT9pZD0ke2RhdGEuaWR9YCxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcbiAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiB9KVxcbiB9Y2F0Y2goZSl7XFxuICAgICBsb2coZS5tZXNzYWdlKVxcbiAgICAgdG9hc3QoJ+eci+S4jeS6hicpXFxuIH1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcInRleHRfNFwiLFwibmFtZVwiOlwi5ryr55S755uu5b2VXCIsXCJwYXRoXCI6XCJtYW5odWFlcmppMVwiLFwicnVsZVwiOlwianM6XFxudmFyIGQ9W107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSlcXG5sZXQgaG9zdD1NWV9QQVJBTVMuaG9zdDtcXG5sZXQgdXJsPWhvc3Quc3BsaXQoJz8nKVswXTtcXG52YXIgd3o9TVlfUEFSQU1TLnd6O1xcbnRyeXtcXG5sZXQgbGlzdD0gSlNPTi5wYXJzZShmZXRjaChob3N0KSkuY2hhcHRlcnM7XFxuLy9sb2cobGlzdClcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIHVybDogdXJsKyc/aWQ9JytkYXRhLmlkK3BpY3MsXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMidcXG4gICAgICAgIH0pXFxuIH0pXFxuICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6J+esrDHnq6DpooTop4gnLFxcbiAgICAgICAgICBjb2xfdHlwZToncmljaF90ZXh0JyxcXG4gICAgICB9KVxcbiBsZXQgaW1nPSBKU09OLnBhcnNlKGZldGNoKGhvc3QpKS5jb250ZW50LnJlcGxhY2UoL1xcXFwkL2csJycpLnJlcGxhY2UoL+WIhuWJsi9nLCcnKS5zcGxpdCgnQCcpO1xcbiBpbWcuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgaW1nOmRhdGEsXFxuICAgICAgICAgICAgdXJsOiAncGljczovLycraW1nLmpvaW4oJyYmJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6J3BpY18xX2Z1bGwnXFxuICAgICAgICB9KVxcbiB9KVxcbiBcXG59Y2F0Y2goZSl7XFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgICB0b2FzdCgn55yL5LiN5LqGJylcXG59XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8yXCIsXCJuYW1lXCI6XCLnjKvlkqrmvKvnlLtcIixcInBhdGhcIjpcIm1hb21pbWFuaHVhXCIsXCJydWxlXCI6XCIganM6IFxcbnZhciBkID0gW107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxudmFyIHBnPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXG50cnl7XFxudmFyIOeMq+WSqua8q+eUuz0gW3t0aXRsZTogJ+aOqOiNkCbmnIDmlrAm57K+5Y2OJyxpZDogJ3JlY29tbWVuZCZ1cGRhdGUmcG9wdWxhcid9XTtcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgICQucmVxdWlyZShcXFwiQ2F0ZVxcXCIpLkNhdGUo54yr5ZKq5ryr55S7LCfnjKvlkqrmvKvnlLsnLGQpO1xcbn1cXG52YXIgc2lnbj1FbmNyeXB0KCd7XFxcInBhZ2VcXFwiOicrcGcrJ30nKTtcXG52YXIgaG9zdD0naHR0cDovLzExOS4yOC41Mi4xOTM6ODA4OS9hcGkvY29taWMvJytnZXRNeVZhcign54yr5ZKq5ryr55S7JywncmVjb21tZW5kJykrJz9wYXJhbXM9JytzaWduO1xcbnZhciBib2R5PSdwYXJhbXM9JytzaWduO1xcbnZhciBodG1sID0gZmV0Y2goaG9zdCwge1xcbiAgICBoZWFkZXJzOiB7XFxuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcXG4gICAgfSxcXG4gICAgYm9keTogYm9keSxcXG4gICAgbWV0aG9kOiAnUE9TVCdcXG59KTsgXFxudmFyIGh0bWwyPURlY3J5cHQoaHRtbClcXG4vL2xvZyhodG1sMilcXG52YXIgbGlzdD1KU09OLnBhcnNlKGh0bWwyKS5kYXRhLmRhdGE7XFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEudGh1bWIsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvbWFvbWltYW5odWFlcmppXFxcIiknLFxcbiAgICAgICAgICAvL3VybDpkYXRhLmlkK21hb21pbWFuaHVhangsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzMnLFxcbiAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGlkOmRhdGEuaWQsXFxuICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuIH0pXFxufWNhdGNoKGUpe1xcbiAgICBsb2coZS5tZXNzYWdlKVxcbiAgICAgdG9hc3QoJ+eci+S4jeS6hicpXFxufVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfMlwiLFwibmFtZVwiOlwi5bCP6K+05YiG57G7XCIsXCJwYXRoXCI6XCJ4aWFvc2h1b2VyamlcIixcInJ1bGVcIjpcImpzOiBcXG52YXIgZCA9IFtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcbnRyeXtcXG5sZXQgaG9zdD1NWV9QQVJBTVMuaG9zdC5yZXBsYWNlKCdodHRwOi8vYXBpLnBocGppZWtvdS50b3AnLCdodHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcCcpO1xcbnZhciB3ej1NWV9QQVJBTVMud3o7XFxudmFyIHBnPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXG5pZihNWV9QQUdFPT0xKXtcXG52YXIg5bCP6K+05YiG57G7PWZldGNoKGhvc3QrJz9nZXRzb3J0JylcXG52YXIgZGF0YT0gSlNPTi5wYXJzZSjlsI/or7TliIbnsbspLmNhdGVnb3JpZXM7XFxudmFyIGluZGV4X249ZGF0YVswXS5pZC50b1N0cmluZygpO1xcbmRhdGEuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKCflsI/or7TliIbnsbsnK3d6LGluZGV4X24pPT1kYXRhLmlkLnRvU3RyaW5nKCk/c3Ryb25nKGRhdGEudGl0bGUsJ0ZGNjY5OScpOmRhdGEudGl0bGUsXFxuICAgICAgICAgICAgdXJsOiQoJycpLmxhenlSdWxlKCh0aXRsZSxpZCx3eikgPT4ge1xcbiAgICAgICAgICAgICAgIHB1dE15VmFyKCflsI/or7TliIbnsbsnK3d6LCBpZCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSxkYXRhLnRpdGxlLGRhdGEuaWQudG9TdHJpbmcoKSx3eiksXFxuICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbidcXG4gICAgfSlcXG59KVxcbn1cXG52YXIgbGlzdD1KU09OLnBhcnNlKGZldGNoKGhvc3QrJz9zb3J0PScrZ2V0TXlWYXIoJ+Wwj+ivtOWIhuexuycrd3osaW5kZXhfbikrJyZwYWdlPScrcGcpKS5saXN0O1xcbi8vbG9nKGxpc3QpXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UveGlhb3NodW9lcmppMVxcXCIpJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTondGV4dF8xJyxcXG4gICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke2hvc3R9P2lkPSR7ZGF0YS5pZH1gLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuIH0pXFxuIH1jYXRjaHt9XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzRcIixcIm5hbWVcIjpcIuWwj+ivtOS6jOe6p1wiLFwicGF0aFwiOlwieGlhb3NodW9lcmppMVwiLFwicnVsZVwiOlwianM6XFxudmFyIGQ9W107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSlcXG5sZXQgaG9zdD1NWV9QQVJBTVMuaG9zdDtcXG5sZXQgdXJsPWhvc3Quc3BsaXQoJz8nKVswXTtcXG52YXIgd3o9TVlfUEFSQU1TLnd6O1xcbnRyeXtcXG4gICAgaWYoKHd6PT0namluamlzaHV3dScpfCh3ej09J2xlYm8nKXwod3o9PSdodWFueGlhbmcnKXwod3o9PSdqa3VuJykpe1xcbiAgICAgICAgbGV0IG5vdmVsPSBKU09OLnBhcnNlKGZldGNoKGhvc3QpKS5ub3ZlbDtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6bm92ZWwsXFxuICAgICAgICAgICAgY29sX3R5cGU6J3JpY2hfdGV4dCdcXG4gICAgICAgIH0pXFxuICAgIH1lbHNle1xcbmxldCBpZD0gSlNPTi5wYXJzZShmZXRjaChob3N0KSkuaWQ7XFxuIGxvYWRSZWFkQ29udGVudFBhZ2UoaWQpXFxuIH1cXG59Y2F0Y2h7XFxuICAgIHRvYXN0KCfosIHnibnkuYjnnIvlsI/or7TllYrvvIEnKVxcbn1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcInRleHRfNFwiLFwibmFtZVwiOlwi54yr5ZKq5ryr55S75LqM57qnXCIsXCJwYXRoXCI6XCJtYW9taW1hbmh1YWVyamlcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkPVtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpXFxudmFyIHBnPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXG52YXIgaWQ9TVlfUEFSQU1TLmlkO1xcbnZhciBzaWduPUVuY3J5cHQoJ3tcXFwiaWRcXFwiOicraWQrJyxcXFwicGFnZVxcXCI6JytwZysnLFxcXCJzb3J0XFxcIjowfScpO1xcbnZhciBob3N0PSdodHRwOi8vMTE5LjI4LjUyLjE5Mzo4MDg5L2FwaS9jb21pYy9saXN0cz9wYXJhbXM9JytzaWduO1xcbnZhciBib2R5PSdwYXJhbXM9JytzaWduO1xcbnZhciBodG1sID0gZmV0Y2goaG9zdCwge1xcbiAgICBoZWFkZXJzOiB7XFxuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcXG4gICAgfSxcXG4gICAgbWV0aG9kOiAnUE9TVCdcXG59KTsgXFxudmFyIGh0bWwyPURlY3J5cHQoaHRtbClcXG52YXIgbGlzdD1KU09OLnBhcnNlKGh0bWwyKS5kYXRhLmRhdGE7XFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS5uYW1lLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZSxcXG4gICAgICAgICAgICB1cmw6IGRhdGEuaWQrbWFvbWltYW5odWFqeCxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcIm1vdmllXzFfbGVmdF9waWNcXFwiLFxcbiAgICB9KVxcbiAgICB9KVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfMlwiLFwibmFtZVwiOlwi54yr5ZKq576O5Zu+XCIsXCJwYXRoXCI6XCJtYW9taW1laXR1XCIsXCJydWxlXCI6XCIganM6IFxcbnZhciBkID0gW107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxudmFyIHBnPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXG50cnl7XFxudmFyIOeMq+WSque+juWbvj0gW3t0aXRsZTogJ+eDremXqCbpl7LogYrorqjorrom6JW+5Lid5aWz5ZCMJue+juiFv+eOiei2syblt6jkubPnvo7og7gm55S35ZCMJuWOn+WIm+iHquaLjSbliqjmvKsm6K6k6K+BJnNtJuivvuWggibmiJHlprsm6auY5r2u6IS4Jue9kee6ouWkp+WSlibliLbmnI3or7Hmg5Em6Jyc5rGB576O6IeAJyxpZDogJzAmMyY3JjkmMTAmMjImMSY4JjI2JjYmMzEmMjMmMiYxOCY0JjIxJ31dO1xcbmlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgJC5yZXF1aXJlKFxcXCJDYXRlXFxcIikuQ2F0ZSjnjKvlkqrnvo7lm74sJ+eMq+WSque+juWbvicsZCk7XFxufVxcbnZhciBzaWduPUVuY3J5cHQoJ3tcXFwicGFnZVxcXCI6JytwZysnLFxcXCJjYXRlXFxcIjonK2dldE15VmFyKCfnjKvlkqrnvo7lm74nLCcwJykrJyxcXFwidHlwZVxcXCI6MX0nKTtcXG52YXIgaG9zdD0naHR0cDovLzExOS4yOC41Mi4xOTM6ODA4OS9hcGkvdjIvcG9zdC9ob21lP3BhcmFtcz0nK3NpZ247XFxudmFyIGJvZHk9J3BhcmFtcz0nK3NpZ247XFxudmFyIGh0bWwgPSBmZXRjaChob3N0LCB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxcbiAgICB9LFxcbiAgICBib2R5OiBib2R5LFxcbiAgICBtZXRob2Q6ICdQT1NUJ1xcbn0pOyBcXG52YXIgaHRtbDI9RGVjcnlwdChodG1sKVxcbnZhciBsaXN0PUpTT04ucGFyc2UoaHRtbDIpLmRhdGE7XFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICBpZihkYXRhLmltYWdlcyl7XFxuICAgICAgICBcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzpkYXRhLnRpbWUsXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlc1swXS5pbWFnZSxcXG4gICAgICAgICAgICB1cmw6ICQoJycpLmxhenlSdWxlKGRhdGEgPT4ge1xcbiAgICAgICAgICBsZXQgcGljQXJyPVtdO1xcbiAgICAgICAgICBsZXQgaW1nPWRhdGEuaW1hZ2VzO1xcbiAgICAgICAgICBsZXQgbGVuPSBpbWcubGVuZ3RoLTE7XFxuICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IGxlbjsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIHBpY0FycltpXSA9IGltZ1tpXS5pbWFnZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJwaWNzOi8vXFxcIiArIHBpY0Fyci5qb2luKFxcXCImJlxcXCIpXFxuICAgICAgICB9LGRhdGEpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8zJ1xcbiAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gfSlcXG4gfWNhdGNoe31cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzJcIixcIm5hbWVcIjpcIueMq+WSqkZNXCIsXCJwYXRoXCI6XCJtYW9taUZNXCIsXCJydWxlXCI6XCIganM6IFxcbnZhciBkID0gW107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxudmFyIHBnPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXG52YXIg54yr5ZKqRk09IFt7dGl0bGU6ICfpg73luILmv4Dmg4Um5a625bqt5LmxIOS8piblj6bnsbvlsI/or7Qm6Z2S5pil5qCh5ZutJuaDhSDoibLnrJHor50m5Lq6IOWmu+S5sSDkvKYm5oCnIOeIseaKgOW3pybnjoTlubvlpYflubsnLGlkOiAnOCY5JjEwJjExJjEyJjEzJjE0JjE1J31dO1xcbmlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgJC5yZXF1aXJlKFxcXCJDYXRlXFxcIikuQ2F0ZSjnjKvlkqpGTSwn54yr5ZKqRk0nLGQpO1xcbn1cXG52YXIgc2lnbj1FbmNyeXB0KCd7XFxcInBhZ2VcXFwiOicrcGcrJyxcXFwiY2F0ZV9pZFxcXCI6JytnZXRNeVZhcign54yr5ZKqRk0nLCc4JykrJyxcXFwic3RhdHVzXFxcIjowLFxcXCJ0eXBlXFxcIjowLFxcXCJuZXdcXFwiOjB9Jyk7XFxudmFyIGhvc3Q9J2h0dHA6Ly8xMTkuMjguNTIuMTkzOjgwODkvYXBpL2Jvb2svaW5kZXg/cGFyYW1zPScrc2lnbjtcXG52YXIgYm9keT0ncGFyYW1zPScrc2lnbjtcXG52YXIgaHRtbCA9IGZldGNoKGhvc3QsIHtcXG4gICAgaGVhZGVyczoge1xcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXFxuICAgIH0sXFxuICAgIGJvZHk6IGJvZHksXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxufSk7IFxcbnZhciBodG1sMj1EZWNyeXB0KGh0bWwpXFxudmFyIGxpc3Q9SlNPTi5wYXJzZShodG1sMikuZGF0YS5kYXRhO1xcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEubmFtZSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEudGh1bWIsXFxuICAgICAgICAgICAgdXJsOiBkYXRhLmlkK21hb21pZm1qeCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMydcXG4gICAgICAgIH0pXFxuIH0pXFxuXFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCIwMemmlumhteinhumikVwiLFwicGF0aFwiOlwidmlkZW9cIixcInJ1bGVcIjpcImpzOlxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcbnRyeXtcXG4gIHZhciBsaXN0PWdldEl0ZW0oJ3Nob3V5ZScpLnNwbGl0KCfpppbpobXmlbDmja7lvIDlp4snKVsxXS5zcGxpdCgn6aaW6aG15pWw5o2u57uT5p2fJylbMF0uc3BsaXQoJ+aNouihjCcpO1xcbiAgbGlzdC5mb3JFYWNoKGRhdGE9PntcXG4gICAgICB2YXIgcWQ9c3AoZGF0YSwgXFxcInFkKFxcXCIsIFxcXCIpXFxcIik7XFxuICAgICAgdmFyIHRwPXNwKGRhdGEsIFxcXCJ0cChcXFwiLCBcXFwiKVxcXCIpO1xcbiAgICAgIHZhciBtYz1zcChkYXRhLCBcXFwibWMoXFxcIiwgXFxcIilcXFwiKTtcXG4gICAgICB2YXIgd3o9c3AoZGF0YSwgXFxcImdqYyhcXFwiLCBcXFwiKVxcXCIpO1xcbiAgICAgIHZhciB5bT1zcChkYXRhLCBcXFwieW0oXFxcIiwgXFxcIilcXFwiKTtcXG4gICAgICB2YXIgbHg9c3AoZGF0YSwgXFxcImx4KFxcXCIsIFxcXCIpXFxcIik7XFxuICAgICAgdmFyIHFiPXFkKycgICcrbWMrJyAgJyt3eisnICAnK3ltKycgICcrbHg7XFxuICAgICAgaWYocWQ9PSfpurvosYZUVicpe1xcbiAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTptYyxcXG4gICAgICAgICAgZGVzYzpxYixcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9tYWRvdVxcXCIpJyxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJ1xcbiAgICAgIH0pXFxuICAgICAgfWVsc2UgaWYocWQ9PSc5MVRWJyl7XFxuICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgIHRpdGxlOm1jLFxcbiAgICAgICAgICBkZXNjOnFiLFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlLzkxdHZcXFwiKScsXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCdcXG4gICAgICB9KVxcbiAgICAgIH1lbHNlIGlmKHFkPT0n54yr5ZKqJyl7XFxuICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgIHRpdGxlOm1jLFxcbiAgICAgICAgICBkZXNjOnFiLFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL21hb21pXFxcIiknLFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnXFxuICAgICAgfSlcXG4gICAgICB9ZWxzZSBpZihxZD09J+eMq+WSquWOn+WImycpe1xcbiAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTptYyxcXG4gICAgICAgICAgZGVzYzpxYixcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9tYW9taXl1YW5jaHVhbmdcXFwiKScsXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCdcXG4gICAgICB9KVxcbiAgICAgIH1lbHNle1xcbiAgICAgIGQucHVzaCh7XFxuICAgICAgICAgIHRpdGxlOm1jLFxcbiAgICAgICAgICBkZXNjOnFiLFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3N5dmlkZW9cXFwiKScsXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCcsXFxuICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7eW19LyR7d3p9LnBocGAsXFxuICAgICAgICAgICAgICB3ejp3eixcXG4gICAgICAgICAgfVxcbiAgICAgIH0pXFxuICAgICAgfVxcbiAgfSlcXG4gICAgICBcXG4gICAgICB2YXIgbGlzdDE9Z2V0SXRlbSgnc2hvdXllJykuc3BsaXQoJ+WIhuWJsue6vycpWzFdLnNwbGl0KCfmjaLooYwnKTtcXG4gIGxpc3QxLmZvckVhY2goZGF0YT0+e1xcbiAgICAgIHZhciBxZD1zcChkYXRhLCBcXFwicWQoXFxcIiwgXFxcIilcXFwiKTtcXG4gICAgICB2YXIgdHA9c3AoZGF0YSwgXFxcInRwKFxcXCIsIFxcXCIpXFxcIik7XFxuICAgICAgdmFyIG1jPXNwKGRhdGEsIFxcXCJtYyhcXFwiLCBcXFwiKVxcXCIpO1xcbiAgICAgIHZhciB3ej1zcChkYXRhLCBcXFwiZ2pjKFxcXCIsIFxcXCIpXFxcIik7XFxuICAgICAgdmFyIHltPXNwKGRhdGEsIFxcXCJ5bShcXFwiLCBcXFwiKVxcXCIpO1xcbiAgICAgIHZhciBseD1zcChkYXRhLCBcXFwibHgoXFxcIiwgXFxcIilcXFwiKTtcXG4gICAgICB2YXIgcWI9cWQrJyAgJyttYysnICAnK3d6KycgICcreW0rJyAgJytseDtcXG4gICAgICBpZih0cCE9bnVsbCl7XFxuICAgICAgICAgIGlmKCh3ej09J3hpYW5namlhbycpfCh3ej09JzkxZHNwJyl8KHd6PT0ndGlrdG9rMTgnKXwod3o9PSdvZ2ZhcCcpfCh3ej09J3Rpa3RvazE4bG9uZycpfCh3ej09J3hpYW9odWxpJykpe1xcbiAgICAgfWVsc2V7XFxuICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6bWMsXFxuICAgICAgICAgIGRlc2M6cWIsXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2Uvc3l2aWRlb1xcXCIpJyxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJyxcXG4gICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaG9zdDpgJHt5bX0vJHt3en0ucGhwYCxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcbiAgICAgICAgICB9XFxuICAgICAgfSlcXG4gICAgICB9XFxuICAgICAgfVxcbiAgICAgIH0pXFxufWNhdGNoKGUpe1xcbiAgICBsb2coZS5tZXNzYWdlKVxcbiAgICBpZihnZXRNeVZhcignYScpID09ICcnKXtcXG4gICAgdmFyIHNob3V5ZT1xekRlY3J5cHQocmVxdWVzdCgnaHR0cDovLzAwMy4yMnMubG9sL2VuY3J5cHQvYXBpLnBocD9wYXRoPXFpZXppL3Nob3V5ZScpKVxcbiAgICB2YXIgZGF0YT1xekRlY3J5cHQocmVxdWVzdCgnaHR0cDovLzAwMy4yMnMubG9sL2VuY3J5cHQvYXBpLnBocD9wYXRoPXFpZXppL3pvbmdoZScpKVxcbiAgICB2YXIgc2VhcmNoPWZldGNoKCdodHRwOi8vMDAzLjIycy5sb2wvc2VhcmNoY29uZmlnL3ZpcGFwaS92aXBjb25maWcudHh0JylcXG4gICAvLyB2YXIga3Vvemhhbj1xekRlY3J5cHQocmVxdWVzdCgnaHR0cDovLzAwNC4yMnMubG9sL2VuY3J5cHQvYXBpLnBocD9wYXRoPXFpZXppL2hlaWtlamknKSlcXG4gICAvLyB2YXIgeXVtaW5nPXF6RGVjcnlwdChyZXF1ZXN0KCdodHRwOi8vMDEueGthM2EudG9wL2VuY3J5cHQvYXBpLnBocD9wYXRoPXl1bWluZy95dW1pbmcnKSlcXG4gIC8vICB2YXIgZ29uZ2dhbz1xekRlY3J5cHQocmVxdWVzdCgnaHR0cDovLzAwMy4yMnMubG9sL2VuY3J5cHQvYXBpLnBocD9wYXRoPXFpZXppL3F6JykpXFxuICAgIHB1dE15VmFyKCdhJywnMScpXFxuICAgIHNldEl0ZW0oJ3Nob3V5ZScsc2hvdXllKVxcbiAgICBzZXRJdGVtKCdkYXRhJyxkYXRhKVxcbiAgICBzZXRJdGVtKCdzZWFyY2gnLHNlYXJjaClcXG4gICAgcmVmcmVzaFBhZ2UoKVxcbiAgICB0b2FzdCgn5pWw5o2u5bey5pu05pawJylcXG4gICAgLypcXG4gICAgXFxuICAgIOWfn+WQjeabv+aNouWMuemFjeihqOi+vuW8j2h0dHBzPzovLyhhcGkxP1xcXFwuKT8oY2hhbmdmYXBpYW9waWFvfHlpbHVzaHVuZmVuZ3xwaHBqaWVrb3V8YXBpamlla291KVxcXFwudG9wKC9hcGkpP+OAilxcbue6v+i3r+mbhuWQiGh0dHBzOi8vYXBpMS55aWx1c2h1bmZlbmcudG9wfGh0dHBzOi8vYXBpLmNoYW5nZmFwaWFvcGlhby50b3B8aHR0cDovL2FwaTEueWlsdXNodW5mZW5nLnRvcHxodHRwOi8vYXBpLmNoYW5nZmFwaWFvcGlhby50b3B8aHR0cDovL2FwaTEuYXBpamlla291LnRvcC9hcGl8aHR0cDovL2FwaS5waHBqaWVrb3UudG9wfGh0dHA6Ly8wMDQuMjJzLmxvbC9hcGnjgIpcXG7lpLHmlYjln5/lkI3pm4blkIhodHRwczovL2FwaS55aWx1c2h1bmZlbmcudG9wfGh0dHA6Ly9hcGkueWlsdXNodW5mZW5nLnRvcHxodHRwOi8vYXBpMTEucGhwamlla291LnRvcOOAilxcbuacgOaWsOaOpeWPo+Wfn+WQjWh0dHBzOi8vYXBpMS55aWx1c2h1bmZlbmcudG9w44CKXFxuKi9cXG4gIH1cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8yXCIsXCJuYW1lXCI6XCLnjKvlkqpBVlwiLFwicGF0aFwiOlwibWFvbWlhdlwiLFwicnVsZVwiOlwianM6IFxcbnZhciBkID0gW107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxudHJ5e1xcbmxldCBob3N0PU1ZX1VSTC5zcGxpdCgnIyMnKVsxXS5yZXBsYWNlKCdodHRwOi8vYXBpLnBocGppZWtvdS50b3AnLCdodHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcCcpO1xcbnZhciB3ej1NWV9VUkwuc3BsaXQoJyMjJylbMl07XFxudmFyIHBnPU1ZX1VSTC5zcGxpdCgnIyMnKVszXTtcXG5pZihNWV9QQUdFPT0xKXtcXG52YXIg5Zu95aSW55u05pKt5YiG57G7PWZldGNoKGhvc3QrJz9nZXRzb3J0JylcXG52YXIgZGF0YT0gSlNPTi5wYXJzZSjlm73lpJbnm7Tmkq3liIbnsbspLmNhdGVnb3JpZXM7XFxudmFyIGluZGV4X249ZGF0YVswXS5pZFxcbmRhdGEuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKCflm73lpJbnm7Tmkq3liIbnsbsnK3d6LGluZGV4X24pPT1kYXRhLmlkP3N0cm9uZyhkYXRhLnRpdGxlLCdGRjY2OTknKTpkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIHVybDokKCcnKS5sYXp5UnVsZSgodGl0bGUsaWQsd3opID0+IHtcXG4gICAgICAgICAgICAgICBwdXRNeVZhcign5Zu95aSW55u05pKt5YiG57G7Jyt3eiwgaWQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sZGF0YS50aXRsZSxkYXRhLmlkLHd6KSxcXG4gICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJ1xcbiAgICB9KVxcbn0pXFxufVxcbnZhciBsaXN0PUpTT04ucGFyc2UoZmV0Y2goaG9zdCsnP3NvcnQ9JytnZXRNeVZhcign5Zu95aSW55u05pKt5YiG57G7Jyt3eixpbmRleF9uKSsnJnBhZ2U9JytwZykpLnZpZGVvcztcXG4vL2xvZyhsaXN0KVxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzogZGF0YS5kYXRlLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZSxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcbiAgICAgICAgfSlcXG4gfSlcXG4gfWNhdGNoKGUpe1xcbiAgICAgbG9nKGUubWVzc2FnZSlcXG4gICAgIHRvYXN0KCfnnIvkuI3kuoYnKVxcbiB9XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpurvosYZUVlwiLFwicGF0aFwiOlwibWFkb3VcIixcInJ1bGVcIjpcImpzOiBcXG52YXIgZCA9IFtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcbi8vbWQ15Yqg5a+GXFxuZnVuY3Rpb24gbWQ1KHN0cikge1xcbiAgICByZXR1cm4gQ3J5cHRvSlMuTUQ1KHN0cikudG9TdHJpbmcoKTtcXG59XFxudmFyIHQgPSBNYXRoLmZsb29yKERhdGUubm93KCkpOyBcXG5sZXQgcGc9IE1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXG52YXIgbWQ9IFt7dGl0bGU6ICfpppbpobUm6aKR6YGTJuagh+etvicsaWQ6ICcxJjImMycsaW1nOidodHRwczovL2docHJveHkubmV0L2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sczEyNTc4MTAwMy90dWJpYW8vbWFpbi9tb3ZpZS8xMTEuc3ZnJmh0dHBzOi8vZ2hwcm94eS5uZXQvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL3R1Ymlhby9tYWluL21vdmllLzExMi5zdmcmaHR0cHM6Ly9naHByb3h5Lm5ldC9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbHMxMjU3ODEwMDMvdHViaWFvL21haW4vbW92aWUvMTEzLnN2ZyZodHRwczovL2docHJveHkubmV0L2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sczEyNTc4MTAwMy90dWJpYW8vbWFpbi9tb3ZpZS8xMTQuc3ZnJmh0dHBzOi8vZ2hwcm94eS5uZXQvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL3R1Ymlhby9tYWluL21vdmllLzEyMi5zdmcnfV07XFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAkLnJlcXVpcmUoXFxcIkNhdGVcXFwiKS5DYXRlKG1kLCdtZCcsZCk7XFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6ICdsaW5lJyxcXG59LHtcXG4gICAgY29sX3R5cGU6ICdiaWdfYmxhbmtfYmxvY2snLFxcbn1cXG4se1xcbiAgICBjb2xfdHlwZTogJ2JpZ19ibGFua19ibG9jaycsXFxufSk7XFxufVxcbmxldCDliIbnsbs9Z2V0TXlWYXIoJ21kJywgJzEnKTtcXG5cXG5pZijliIbnsbs9PTEpe1xcbnZhciBzaWduID0gbWQ1KCdsaXN0X3Jvdz0yMCZwYWdlPScrcGcrJyZ0aW1lc3RhbXA9Jyt0KycmdHlwZT0yJysnJm19cSVlYTY6TERjbVM/YUspQ2VGMjg3YlB2ZDk5QEUsOVVwXicpO1xcbnZhciBkYXRhMD17XFxuICAgICAgIFxcXCJlbmNvZGVfc2lnblxcXCI6c2lnbixcXG4gICAgICAgXFxcImxpc3Rfcm93XFxcIjpcXFwiMjBcXFwiLFxcbiAgICAgICBcXFwicGFnZVxcXCI6cGcsXFxuICAgICAgIFxcXCJ0aW1lc3RhbXBcXFwiOnQsXFxuICAgICAgIFxcXCJ0eXBlXFxcIjpcXFwiMlxcXCJ9O1xcbnZhciBkYXRhID0gbWRFbmNyeXB0KEpTT04uc3RyaW5naWZ5KGRhdGEwKSk7IFxcbnZhciBib2R5ID0gJ3Bvc3QtZGF0YT0nK2RhdGE7IFxcbnZhciB1cmw9J2h0dHBzOi8vYXBpLm56cDF2ZS5jb20vdmlkZW8vbGlzdGNhY2hlJztcXG5cXG59ZWxzZXtcXG52YXIgc2lnbiA9IG1kNSgndGltZXN0YW1wPScrdCsnJm19cSVlYTY6TERjbVM/YUspQ2VGMjg3YlB2ZDk5QEUsOVVwXicpO1xcbnZhciBkYXRhMD17XFxuICAgICAgICBcXFwiZW5jb2RlX3NpZ25cXFwiOiBzaWduLFxcbiAgICAgICAgXFxcInRpbWVzdGFtcFxcXCI6IHRcXG4gICAgfTtcXG52YXIgZGF0YSA9IG1kRW5jcnlwdChKU09OLnN0cmluZ2lmeShkYXRhMCkpOyBcXG52YXIgYm9keSA9ICdwb3N0LWRhdGE9JytkYXRhOyBcXG5pZijliIbnsbs9PTIpe1xcbnZhciB1cmwgPSAnaHR0cHM6Ly9hcGkubnpwMXZlLmNvbS92aWRlby9jaGFubmVsJztcXG59ZWxzZSBpZijliIbnsbs9PTMpe1xcbnZhciB1cmwgPSAnaHR0cHM6Ly9hcGkubnpwMXZlLmNvbS92aWRlby90YWdzJztcXG59XFxufTtcXG52YXIgaHRtbCA9IGZldGNoKHVybCwge1xcbiAgICBoZWFkZXJzOiB7XFxuICAgICdzdWZmaXgnOicxNzMxNTAnLFxcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcXG4gICAgfSxcXG4gICAgYm9keTogYm9keSxcXG4gICAgbWV0aG9kOiAnUE9TVCdcXG59KTsgXFxuXFxubGV0IGh0bWwxID0gSlNPTi5wYXJzZShodG1sKS5kYXRhOyBcXG52YXIgaXYwPSBKU09OLnBhcnNlKGh0bWwpLnN1ZmZpeDtcXG5sZXQgaHRtbDIgPSBtZERlY3J5cHQoaHRtbDEpOyBcXG5pZijliIbnsbs9PTEpe1xcbnZhciBsaXN0ID0gSlNPTi5wYXJzZShodG1sMikuZGF0YS5kYXRhO1xcbmxpc3QuZm9yRWFjaCgoZGF0YSkgPT4ge1xcbiAgICAgICAgdmFyIHRhZz1kYXRhLnRhZ3M7XFxuICAgICAgdmFyIHN0cjE9Jyc7XFxuICAgICBmb3IoaSBpbiB0YWcpe1xcbiAgICB2YXIgc3RyMSA9IHN0cjErdGFnW2ldLm5hbWUrJyAgICc7XFxufVxcclxcbiAgICAgICAgICAgIGQucHVzaCh7XFxyXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgICAgIGRlc2M6c3RyMSwgcGljX3VybDpkYXRhLnBhbm9yYW1hLnJlcGxhY2UoJ19zeW5jLndlYnAnLCcuanBnJyksXFxyXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicGljXzFcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmwgOiAgZGF0YS52aWRlb191cmwsXFxufSlcXG59KVxcbn1lbHNlIGlmKOWIhuexuz09Mil7XFxudmFyIGxpc3QgPSBKU09OLnBhcnNlKGh0bWwyKS5kYXRhO1xcbmxpc3QuZm9yRWFjaCgoZGF0YSkgPT4ge1xcclxcbiAgICAgICAgICAgIGQucHVzaCh7XFxyXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhLm5hbWUsXFxuICAgICAgICAgICAgICAgIGRlc2M6ZGF0YS50b3RhbCsn5Liq54mH5YS/JyxcXG4gICAgICAgICAgICAgICBwaWNfdXJsOmRhdGEuaW1hZ2UsXFxyXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl8zXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsIDogICdoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9tYWRvdXBpbmRhb1xcXCIpJyxcXG4gICAgICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaWQ6ZGF0YS5pZCxcXG4gICAgICAgICAgfVxcbn0pXFxufSlcXG59ZWxzZSBpZijliIbnsbs9PTMpe1xcbnZhciBsaXN0ID0gSlNPTi5wYXJzZShodG1sMikuZGF0YTtcXG5saXN0LmZvckVhY2goKGRhdGEpID0+IHtcXHJcXG4gICAgICAgICAgICBkLnB1c2goe1xcclxcbiAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS5uYW1lLFxcbiAgICAgICAgICAgICAgICAvL3BpY191cmw6ZGF0YS50aHVtYixcXHJcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzNcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmwgOiAgJ2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL21hZG91Ymlhb3FpYW5cXFwiKScsXFxuICAgICAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGlkOmRhdGEuaWQsXFxuICAgICAgICAgIH1cXG59KVxcbn0pXFxufVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6bq76LGG6aKR6YGTXCIsXCJwYXRoXCI6XCJtYWRvdXBpbmRhb1wiLFwicnVsZVwiOlwianM6IFxcbnZhciBkID0gW107XFxuXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxudHJ5e1xcbi8vbWQ15Yqg5a+GXFxuZnVuY3Rpb24gbWQ1KHN0cikge1xcbiAgICByZXR1cm4gQ3J5cHRvSlMuTUQ1KHN0cikudG9TdHJpbmcoKTtcXG59XFxudmFyIHQgPSBNYXRoLmZsb29yKERhdGUubm93KCkpO1xcbnZhciB0MCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKS8xMDAwKTtcXG5sZXQgaWQ9TVlfUEFSQU1TLmlkO1xcbmxldCBwPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXG52YXIgc2lnbiA9IG1kNSgnY2hhbm5lbD0nK2lkKycmbGlzdF9yb3c9NjAmcGFnZT0nK3ArJyZ0aW1lc3RhbXA9Jyt0KycmdHlwZT0yJm19cSVlYTY6TERjbVM/YUspQ2VGMjg3YlB2ZDk5QEUsOVVwXicpOyAvL2xvZyhzaWduKVxcblxcbmxldCBkYXRhMD17XFxuICAgICAgICBcXFwiY2hhbm5lbFxcXCI6IGlkLFxcbiAgICAgICAgXFxcImVuY29kZV9zaWduXFxcIjogc2lnbixcXG4gICAgICAgIFxcXCJsaXN0X3Jvd1xcXCI6IFxcXCI2MFxcXCIsXFxuICAgICAgICBcXFwicGFnZVxcXCI6IHAsXFxuICAgICAgICBcXFwidGltZXN0YW1wXFxcIjogdCxcXG4gICAgICAgIFxcXCJ0eXBlXFxcIjogXFxcIjJcXFwiXFxuICAgIH1cXG4vL2xvZyhkYXRhMClcXG52YXIgZGF0YSA9IG1kRW5jcnlwdChKU09OLnN0cmluZ2lmeShkYXRhMCkpOyBcXG4vL2xvZyhkYXRhKVxcbnZhciBib2R5ID0gJ3Bvc3QtZGF0YT0nK2RhdGE7IFxcbnZhciB1cmwgPSAnaHR0cHM6Ly9hcGkubnpwMXZlLmNvbS92aWRlby9saXN0Y2FjaGUnO1xcbnZhciBodG1sID0gZmV0Y2godXJsLCB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgJ3N1ZmZpeCc6JzE3MzE1MCcsXFxuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xcbiAgICB9LFxcbiAgICBib2R5OiBib2R5LFxcbiAgICBtZXRob2Q6ICdQT1NUJ1xcbn0pOyBcXG4vL2xvZyhodG1sKVxcblxcbmxldCBodG1sMSA9IEpTT04ucGFyc2UoaHRtbCkuZGF0YTsgXFxuLy9sb2coaHRtbDEpXFxudmFyIGl2MD0gSlNPTi5wYXJzZShodG1sKS5zdWZmaXg7XFxuLy9sb2coaXYwKTtcXG5sZXQgaHRtbDIgPSBtZERlY3J5cHQoaHRtbDEpOyBcXG4vL2xvZyhodG1sMilcXG5cXG52YXIgbGlzdCA9IEpTT04ucGFyc2UoaHRtbDIpLmRhdGEuZGF0YTtcXG4vL2xvZyhsaXN0KTtcXG5saXN0LmZvckVhY2goKGRhdGEpID0+IHtcXG52YXIgdGFnPWRhdGEudGFncztcXG4gICAgICB2YXIgc3RyMT0nJztcXG4gICAgIGZvcihpIGluIHRhZyl7XFxuICAgIHZhciBzdHIxID0gc3RyMSt0YWdbaV0ubmFtZSsnICAgJztcXG59XFxyXFxuICAgICAgICAgICAgZC5wdXNoKHtcXHJcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgICAgZGVzYzpzdHIxLCBwaWNfdXJsOmRhdGEucGFub3JhbWEucmVwbGFjZSgnX3N5bmMud2VicCcsJy5qcGcnKS5yZXBsYWNlKCdfbG9uZ1ByZXZpZXcnLCcnKSxcXHJcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJwaWNfMVxcXCIsXFxuICAgICAgICAgICAgICAgIHVybCA6ICBkYXRhLnZpZGVvX3VybCxcXG59KVxcbn0pXFxufWNhdGNoe31cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIum6u+ixhuagh+etvlwiLFwicGF0aFwiOlwibWFkb3ViaWFvcWlhblwiLFwicnVsZVwiOlwianM6IFxcbnZhciBkID0gW107XFxuXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxudHJ5e1xcbi8vbWQ15Yqg5a+GXFxuZnVuY3Rpb24gbWQ1KHN0cikge1xcbiAgICByZXR1cm4gQ3J5cHRvSlMuTUQ1KHN0cikudG9TdHJpbmcoKTtcXG59XFxudmFyIHQgPSBNYXRoLmZsb29yKERhdGUubm93KCkpO1xcbnZhciB0MCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKS8xMDAwKTtcXG5sZXQgaWQ9TVlfUEFSQU1TLmlkO1xcbmxldCBwPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXG52YXIgc2lnbiA9IG1kNSgnbGlzdF9yb3c9NjAmcGFnZT0nK3ArJyZ0YWdzPScraWQrJyZ0aW1lc3RhbXA9Jyt0KycmdHlwZT0yJm19cSVlYTY6TERjbVM/YUspQ2VGMjg3YlB2ZDk5QEUsOVVwXicpOyAvL2xvZyhzaWduKVxcblxcbmxldCBkYXRhMD17XFxuICAgICAgICBcXFwiZW5jb2RlX3NpZ25cXFwiOiBzaWduLFxcbiAgICAgICAgXFxcImxpc3Rfcm93XFxcIjogXFxcIjYwXFxcIixcXG4gICAgICAgIFxcXCJwYWdlXFxcIjogcCxcXG4gICAgICAgIFxcXCJ0YWdzXFxcIjogaWQsXFxuICAgICAgICBcXFwidGltZXN0YW1wXFxcIjogdCxcXG4gICAgICAgIFxcXCJ0eXBlXFxcIjogXFxcIjJcXFwiXFxuICAgIH1cXG4vL2xvZyhkYXRhMClcXG52YXIgZGF0YSA9IG1kRW5jcnlwdChKU09OLnN0cmluZ2lmeShkYXRhMCkpOyBcXG4vL2xvZyhkYXRhKVxcbnZhciBib2R5ID0gJ3Bvc3QtZGF0YT0nK2RhdGE7IFxcbnZhciB1cmwgPSAnaHR0cHM6Ly9hcGkubnpwMXZlLmNvbS92aWRlby9saXN0Y2FjaGUnO1xcbnZhciBodG1sID0gZmV0Y2godXJsLCB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgJ3N1ZmZpeCc6JzE3MzE1MCcsXFxuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xcbiAgICB9LFxcbiAgICBib2R5OiBib2R5LFxcbiAgICBtZXRob2Q6ICdQT1NUJ1xcbn0pOyBcXG4vL2xvZyhodG1sKVxcblxcbmxldCBodG1sMSA9IEpTT04ucGFyc2UoaHRtbCkuZGF0YTsgXFxuLy9sb2coaHRtbDEpXFxudmFyIGl2MD0gSlNPTi5wYXJzZShodG1sKS5zdWZmaXg7XFxuLy9sb2coaXYwKTtcXG5sZXQgaHRtbDIgPSBtZERlY3J5cHQoaHRtbDEpOyBcXG4vL2xvZyhodG1sMilcXG5cXG52YXIgbGlzdCA9IEpTT04ucGFyc2UoaHRtbDIpLmRhdGEuZGF0YTtcXG4vL2xvZyhsaXN0KTtcXG5saXN0LmZvckVhY2goKGRhdGEpID0+IHtcXG52YXIgdGFnPWRhdGEudGFncztcXG4gICAgICB2YXIgc3RyMT0nJztcXG4gICAgIGZvcihpIGluIHRhZyl7XFxuICAgIHZhciBzdHIxID0gc3RyMSt0YWdbaV0ubmFtZSsnICAgJztcXG59XFxyXFxuICAgICAgICAgICAgZC5wdXNoKHtcXHJcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgICAgZGVzYzpzdHIxLCBwaWNfdXJsOmRhdGEucGFub3JhbWEucmVwbGFjZSgnX3N5bmMud2VicCcsJy5qcGcnKS5yZXBsYWNlKCdfbG9uZ1ByZXZpZXcnLCcnKSxcXHJcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJwaWNfMVxcXCIsXFxuICAgICAgICAgICAgICAgIHVybCA6ICBkYXRhLnZpZGVvX3VybCxcXG59KVxcbn0pXFxufWNhdGNoe31cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIjkxVFZcIixcInBhdGhcIjpcIjkxdHZcIixcInJ1bGVcIjpcImpzOiBcXG52YXIgZCA9IFtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcbi8vbWQ15Yqg5a+GXFxuZnVuY3Rpb24gbWQ1KHN0cikge1xcbiAgICByZXR1cm4gQ3J5cHRvSlMuTUQ1KHN0cikudG9TdHJpbmcoKTtcXG59XFxudmFyIHQgPSBNYXRoLmZsb29yKERhdGUubm93KCkpOyBcXG5sZXQgcGc9IE1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXG52YXIgdHY9IFt7dGl0bGU6ICfpppbpobUm6aKR6YGTJuagh+etvicsaWQ6ICcxJjImMycsaW1nOidodHRwczovL2docHJveHkubmV0L2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sczEyNTc4MTAwMy90dWJpYW8vbWFpbi9tb3ZpZS8xMTEuc3ZnJmh0dHBzOi8vZ2hwcm94eS5uZXQvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL3R1Ymlhby9tYWluL21vdmllLzExMi5zdmcmaHR0cHM6Ly9naHByb3h5Lm5ldC9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbHMxMjU3ODEwMDMvdHViaWFvL21haW4vbW92aWUvMTEzLnN2ZyZodHRwczovL2docHJveHkubmV0L2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sczEyNTc4MTAwMy90dWJpYW8vbWFpbi9tb3ZpZS8xMTQuc3ZnJmh0dHBzOi8vZ2hwcm94eS5uZXQvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL3R1Ymlhby9tYWluL21vdmllLzEyMi5zdmcnfV07XFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAkLnJlcXVpcmUoXFxcIkNhdGVcXFwiKS5DYXRlKHR2LCd0dicsZCk7XFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6ICdsaW5lJyxcXG59LHtcXG4gICAgY29sX3R5cGU6ICdiaWdfYmxhbmtfYmxvY2snLFxcbn1cXG4se1xcbiAgICBjb2xfdHlwZTogJ2JpZ19ibGFua19ibG9jaycsXFxufSk7XFxufVxcbmxldCDliIbnsbs9Z2V0TXlWYXIoJ3R2JywgJzEnKTtcXG5cXG5pZijliIbnsbs9PTEpe1xcbnZhciBzaWduID0gbWQ1KCdsaXN0X3Jvdz0yMCZwYWdlPScrcGcrJyZ0aW1lc3RhbXA9Jyt0KycmdHlwZT0yJysnJm19cSVlYTY6TERjbVM/YUspQ2VGMjg3YlB2ZDk5QEUsOVVwXicpOyBcXG52YXIgZGF0YTA9e1xcbiAgICAgICBcXFwiZW5jb2RlX3NpZ25cXFwiOnNpZ24sXFxuICAgICAgIFxcXCJsaXN0X3Jvd1xcXCI6XFxcIjIwXFxcIixcXG4gICAgICAgXFxcInBhZ2VcXFwiOnBnLFxcbiAgICAgICBcXFwidGltZXN0YW1wXFxcIjp0LFxcbiAgICAgICBcXFwidHlwZVxcXCI6XFxcIjJcXFwifTtcXG52YXIgZGF0YSA9IG1kRW5jcnlwdChKU09OLnN0cmluZ2lmeShkYXRhMCkpOyBcXG52YXIgYm9keSA9ICdwb3N0LWRhdGE9JytkYXRhOyBcXG52YXIgdXJsPSdodHRwczovL3R2di56anFmYXJ0LmNuL3ZpZGVvL2xpc3RjYWNoZSc7XFxuXFxufWVsc2V7XFxudmFyIHNpZ24gPSBtZDUoJ3RpbWVzdGFtcD0nK3QrJyZtfXElZWE2OkxEY21TP2FLKUNlRjI4N2JQdmQ5OUBFLDlVcF4nKTsgXFxudmFyIGRhdGEwPXtcXG4gICAgICAgIFxcXCJlbmNvZGVfc2lnblxcXCI6IHNpZ24sXFxuICAgICAgICBcXFwidGltZXN0YW1wXFxcIjogdFxcbiAgICB9O1xcbnZhciBkYXRhID0gbWRFbmNyeXB0KEpTT04uc3RyaW5naWZ5KGRhdGEwKSk7IFxcbnZhciBib2R5ID0gJ3Bvc3QtZGF0YT0nK2RhdGE7IFxcbmlmKOWIhuexuz09Mil7XFxudmFyIHVybCA9ICdodHRwczovL3R2di56anFmYXJ0LmNuL3ZpZGVvL2NoYW5uZWwnO1xcbn1lbHNlIGlmKOWIhuexuz09Myl7XFxudmFyIHVybCA9ICdodHRwczovL3R2di56anFmYXJ0LmNuL3ZpZGVvL3RhZ3MnO1xcbn1cXG59O1xcbnZhciBodG1sID0gZmV0Y2godXJsLCB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgJ3N1ZmZpeCc6JzE3MzE1MCcsXFxuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xcbiAgICB9LFxcbiAgICBib2R5OiBib2R5LFxcbiAgICBtZXRob2Q6ICdQT1NUJ1xcbn0pOyBcXG5sZXQgaHRtbDEgPSBKU09OLnBhcnNlKGh0bWwpLmRhdGE7IFxcbnZhciBpdjA9IEpTT04ucGFyc2UoaHRtbCkuc3VmZml4O1xcbmxldCBodG1sMiA9IG1kRGVjcnlwdChodG1sMSk7IFxcbmlmKOWIhuexuz09MSl7XFxudmFyIGh0bWwzPWZldGNoKEpTT04ucGFyc2UoaHRtbDIpLmRhdGEuZmlsZV9uYW1lKTtcXG52YXIgbGlzdCA9IEpTT04ucGFyc2UoaHRtbDMpLmRhdGE7XFxubGlzdC5mb3JFYWNoKChkYXRhKSA9PiB7XFxuICAgICAgICB2YXIgdGFnPWRhdGEudGFncztcXG4gICAgICB2YXIgc3RyMT0nJztcXG4gICAgIGZvcihpIGluIHRhZyl7XFxuICAgIHZhciBzdHIxID0gc3RyMSt0YWdbaV0ubmFtZSsnICAgJztcXG59XFxyXFxuICAgICAgICAgICAgZC5wdXNoKHtcXHJcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgICAgZGVzYzpzdHIxLCBcXG4gICAgICAgICAgICAgICBpbWc6ZGF0YS50aHVtYittZGxhenksXFxyXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicGljXzFcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmwgOiAgZGF0YS52aWRlb191cmwrdHZ2b2QsXFxufSlcXG59KVxcbn1lbHNlIGlmKOWIhuexuz09Mil7XFxudmFyIGxpc3QgPSBKU09OLnBhcnNlKGh0bWwyKS5kYXRhO1xcbmxpc3QuZm9yRWFjaCgoZGF0YSkgPT4ge1xcclxcbiAgICAgICAgICAgIGQucHVzaCh7XFxyXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhLm5hbWUsXFxuICAgICAgICAgICAgICAgIGRlc2M6ZGF0YS50b3RhbCsn5Liq54mH5YS/JyxcXG4gICAgICAgICAgICAgICBwaWNfdXJsOmRhdGEuaW1hZ2UsXFxyXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl8zXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsIDogICdoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS85MXR2cGluZGFvXFxcIiknLFxcbiAgICAgICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBpZDpkYXRhLmlkLFxcbiAgICAgICAgICB9XFxufSlcXG59KVxcbn1lbHNlIGlmKOWIhuexuz09Myl7XFxudmFyIGxpc3QgPSBKU09OLnBhcnNlKGh0bWwyKS5kYXRhO1xcbi8vbG9nKGxpc3QpXFxubGlzdC5mb3JFYWNoKChkYXRhKSA9PiB7XFxyXFxuICAgICAgICAgICAgZC5wdXNoKHtcXHJcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEubmFtZSxcXG4gICAgICAgICAgICAgICAgLy9pbWc6ZGF0YS50aHVtYittZGxhenksXFxyXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8zXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsIDogICdoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS85MXR2Ymlhb3FpYW5cXFwiKScsXFxuICAgICAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGlkOmRhdGEuaWQsXFxuICAgICAgICAgIH1cXG59KVxcbn0pXFxufVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiOTF0duagh+etvlwiLFwicGF0aFwiOlwiOTF0dmJpYW9xaWFuXCIsXCJydWxlXCI6XCJqczogXFxudmFyIGQgPSBbXTtcXG5cXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXG50cnl7XFxuLy9tZDXliqDlr4ZcXG5mdW5jdGlvbiBtZDUoc3RyKSB7XFxuICAgIHJldHVybiBDcnlwdG9KUy5NRDUoc3RyKS50b1N0cmluZygpO1xcbn1cXG52YXIgdCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSk7XFxudmFyIHQwID0gTWF0aC5mbG9vcihEYXRlLm5vdygpLzEwMDApO1xcbmxldCBpZD1NWV9QQVJBTVMuaWQ7XFxubGV0IHA9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcbnZhciBzaWduID0gbWQ1KCdsaXN0X3Jvdz02MCZwYWdlPScrcCsnJnRhZ3M9JytpZCsnJnRpbWVzdGFtcD0nK3QrJyZ0eXBlPTImbX1xJWVhNjpMRGNtUz9hSylDZUYyODdiUHZkOTlARSw5VXBeJyk7IC8vbG9nKHNpZ24pXFxuXFxubGV0IGRhdGEwPXtcXG4gICAgICAgIFxcXCJlbmNvZGVfc2lnblxcXCI6IHNpZ24sXFxuICAgICAgICBcXFwibGlzdF9yb3dcXFwiOiBcXFwiNjBcXFwiLFxcbiAgICAgICAgXFxcInBhZ2VcXFwiOiBwLFxcbiAgICAgICAgXFxcInRhZ3NcXFwiOiBpZCxcXG4gICAgICAgIFxcXCJ0aW1lc3RhbXBcXFwiOiB0LFxcbiAgICAgICAgXFxcInR5cGVcXFwiOiBcXFwiMlxcXCJcXG4gICAgfVxcbnZhciBkYXRhID0gbWRFbmNyeXB0KEpTT04uc3RyaW5naWZ5KGRhdGEwKSk7IFxcbnZhciBib2R5ID0gJ3Bvc3QtZGF0YT0nK2RhdGE7IFxcbnZhciB1cmwgPSAnaHR0cHM6Ly90dnYuempxZmFydC5jbi92aWRlby9saXN0Y2FjaGUnO1xcbnZhciBodG1sID0gZmV0Y2godXJsLCB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgJ3N1ZmZpeCc6JzE3MzE1MCcsXFxuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xcbiAgICB9LFxcbiAgICBib2R5OiBib2R5LFxcbiAgICBtZXRob2Q6ICdQT1NUJ1xcbn0pOyBcXG5sZXQgaHRtbDEgPSBKU09OLnBhcnNlKGh0bWwpLmRhdGE7IFxcbnZhciBpdjA9IEpTT04ucGFyc2UoaHRtbCkuc3VmZml4O1xcbmxldCBodG1sMiA9IG1kRGVjcnlwdChodG1sMSk7IFxcbnZhciBodG1sMz1mZXRjaChKU09OLnBhcnNlKGh0bWwyKS5kYXRhLmZpbGVfbmFtZSk7XFxudmFyIGxpc3QgPSBKU09OLnBhcnNlKGh0bWwzKS5kYXRhO1xcbmxpc3QuZm9yRWFjaCgoZGF0YSkgPT4ge1xcbnZhciB0YWc9ZGF0YS50YWdzO1xcbiAgICAgIHZhciBzdHIxPScnO1xcbiAgICAgZm9yKGkgaW4gdGFnKXtcXG4gICAgdmFyIHN0cjEgPSBzdHIxK3RhZ1tpXS5uYW1lKycgICAnO1xcbn1cXHJcXG4gICAgICAgICAgICBkLnB1c2goe1xcclxcbiAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICAgICBkZXNjOnN0cjEsIFxcbiAgICAgICAgICAgICAgIGltZzpkYXRhLnRodW1iK21kbGF6eSxcXHJcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJwaWNfMVxcXCIsXFxuICAgICAgICAgICAgICAgIHVybCA6ICBkYXRhLnZpZGVvX3VybCt0dnZvZCxcXG59KVxcbn0pXFxufWNhdGNoe31cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIjkxdHbpopHpgZNcIixcInBhdGhcIjpcIjkxdHZwaW5kYW9cIixcInJ1bGVcIjpcImpzOiBcXG52YXIgZCA9IFtdO1xcblxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcbnRyeXtcXG4vL21kNeWKoOWvhlxcbmZ1bmN0aW9uIG1kNShzdHIpIHtcXG4gICAgcmV0dXJuIENyeXB0b0pTLk1ENShzdHIpLnRvU3RyaW5nKCk7XFxufVxcbnZhciB0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpKTtcXG52YXIgdDAgPSBNYXRoLmZsb29yKERhdGUubm93KCkvMTAwMCk7XFxubGV0IGlkPU1ZX1BBUkFNUy5pZDtcXG5sZXQgcD1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxudmFyIHNpZ24gPSBtZDUoJ2NoYW5uZWw9JytpZCsnJmxpc3Rfcm93PTYwJnBhZ2U9JytwKycmdGltZXN0YW1wPScrdCsnJnR5cGU9MiZtfXElZWE2OkxEY21TP2FLKUNlRjI4N2JQdmQ5OUBFLDlVcF4nKTsgXFxubGV0IGRhdGEwPXtcXG4gICAgICAgIFxcXCJjaGFubmVsXFxcIjogaWQsXFxuICAgICAgICBcXFwiZW5jb2RlX3NpZ25cXFwiOiBzaWduLFxcbiAgICAgICAgXFxcImxpc3Rfcm93XFxcIjogXFxcIjYwXFxcIixcXG4gICAgICAgIFxcXCJwYWdlXFxcIjogcCxcXG4gICAgICAgIFxcXCJ0aW1lc3RhbXBcXFwiOiB0LFxcbiAgICAgICAgXFxcInR5cGVcXFwiOiBcXFwiMlxcXCJcXG4gICAgfVxcbnZhciBkYXRhID0gbWRFbmNyeXB0KEpTT04uc3RyaW5naWZ5KGRhdGEwKSk7IFxcbnZhciBib2R5ID0gJ3Bvc3QtZGF0YT0nK2RhdGE7IFxcbnZhciB1cmwgPSAnaHR0cHM6Ly90dnYuempxZmFydC5jbi92aWRlby9saXN0Y2FjaGUnO1xcbnZhciBodG1sID0gZmV0Y2godXJsLCB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgJ3N1ZmZpeCc6JzE3MzE1MCcsXFxuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xcbiAgICB9LFxcbiAgICBib2R5OiBib2R5LFxcbiAgICBtZXRob2Q6ICdQT1NUJ1xcbn0pOyBcXG5sZXQgaHRtbDEgPSBKU09OLnBhcnNlKGh0bWwpLmRhdGE7IFxcbnZhciBpdjA9IEpTT04ucGFyc2UoaHRtbCkuc3VmZml4O1xcbmxldCBodG1sMiA9IG1kRGVjcnlwdChodG1sMSk7IFxcbnZhciBodG1sMz1mZXRjaChKU09OLnBhcnNlKGh0bWwyKS5kYXRhLmZpbGVfbmFtZSk7XFxudmFyIGxpc3QgPSBKU09OLnBhcnNlKGh0bWwzKS5kYXRhO1xcbmxpc3QuZm9yRWFjaCgoZGF0YSkgPT4ge1xcbnZhciB0YWc9ZGF0YS50YWdzO1xcbiAgICAgIHZhciBzdHIxPScnO1xcbiAgICAgZm9yKGkgaW4gdGFnKXtcXG4gICAgdmFyIHN0cjEgPSBzdHIxK3RhZ1tpXS5uYW1lKycgICAnO1xcbn1cXHJcXG4gICAgICAgICAgICBkLnB1c2goe1xcclxcbiAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICAgICBkZXNjOnN0cjEsXFxuICAgICAgICAgICAgICAgaW1nOmRhdGEudGh1bWIrbWRsYXp5LFxcclxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInBpY18xXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsIDogIGRhdGEudmlkZW9fdXJsK3R2dm9kLFxcbn0pXFxufSlcXG59Y2F0Y2h7fVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfMlwiLFwibmFtZVwiOlwi54yr5ZKqXCIsXCJwYXRoXCI6XCJtYW9taVwiLFwicnVsZVwiOlwiIGpzOiBcXG52YXIgZCA9IFtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxudmFyIOeMq+WSqj0gW3t0aXRsZTogJ+eMq+WSquWOn+WImyZBSeWItuS9nCbkuI3pm4Xop4bpopEm5Lqa5rSy5pegIOeggSbmipbpn7Plprnpm4blkIgm54Ot5Ymn5oiQ5Lq654mIJumfqeWbveS4iee6pybkurrmsJTlpbMg5LyYJyxpZDogJzEwJjE2JjUmOSYxMSYxMiYxMyY2J31dO1xcbmlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgJC5yZXF1aXJlKFxcXCJDYXRlXFxcIikuQ2F0ZSjnjKvlkqosJ+eMq+WSqicsZCk7XFxufVxcbnZhciBzaWduPUVuY3J5cHQoJ3tcXFwic3BlY2lhbF9pZFxcXCI6JytnZXRNeVZhcign54yr5ZKqJywnMTAnKSsnLFxcXCJwYWdlXFxcIjonK3BnKyd9Jyk7XFxudHJ5e1xcbnZhciBob3N0PSdodHRwOi8vMTE5LjI4LjUyLjE5Mzo4MDg5L2FwaS9zcGVjaWFsL3ZpZGVvP3BhcmFtcz0nK3NpZ247XFxudmFyIGJvZHk9J3BhcmFtcz0nK3NpZ247XFxudmFyIGh0bWwgPSBmZXRjaChob3N0LCB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxcbiAgICB9LFxcbiAgICBib2R5OiBib2R5LFxcbiAgICBtZXRob2Q6ICdQT1NUJ1xcbn0pOyBcXG52YXIgaHRtbDI9RGVjcnlwdChodG1sKVxcbnZhciBsaXN0PUpTT04ucGFyc2UoaHRtbDIpLmRhdGEuZGF0YTtcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnZpZGVvX25hbWUsXFxuICAgICAgICAgICAgZGVzYzpkYXRhLmNyZWF0ZV9hdCxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxuICAgICAgICAgICAgdXJsOmRhdGEudmlkZW9faWQrbWFvbWlqeCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXG4gICAgICAgIH0pXFxuIH0pXFxuIH1jYXRjaHt9XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8yXCIsXCJuYW1lXCI6XCLnjKvlkqrljp/liJtcIixcInBhdGhcIjpcIm1hb21peXVhbmNodWFuZ1wiLFwicnVsZVwiOlwiIGpzOiBcXG52YXIgZCA9IFtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxudmFyIOeMq+WSquWOn+WImz0gW3t0aXRsZTogJ+acgOaWsCbng63pl6gnLGlkOiAnMyYxJ31dO1xcbmlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgJC5yZXF1aXJlKFxcXCJDYXRlXFxcIikuQ2F0ZSjnjKvlkqrljp/liJssJ+eMq+WSquWOn+WImycsZCk7XFxufVxcbnZhciBzaWduPUVuY3J5cHQoJ3tcXFwidXNlcl9pZFxcXCI6MTc5MDM2OCxcXFwidHlwZVxcXCI6JytnZXRNeVZhcign54yr5ZKq5Y6f5YibJywnMycpKycsXFxcInBhZ2VcXFwiOicrcGcrJ30nKTtcXG50cnl7XFxudmFyIGhvc3Q9J2h0dHA6Ly8xMTkuMjguNTIuMTkzOjgwODkvYXBpL29yaWdpbmFsL2luZGV4P3BhcmFtcz0nK3NpZ247XFxudmFyIGJvZHk9J3BhcmFtcz0nK3NpZ247XFxudmFyIGh0bWwgPSBmZXRjaChob3N0LCB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxcbiAgICB9LFxcbiAgICBib2R5OiBib2R5LFxcbiAgICBtZXRob2Q6ICdQT1NUJ1xcbn0pOyBcXG52YXIgaHRtbDI9RGVjcnlwdChodG1sKVxcbnZhciBsaXN0PUpTT04ucGFyc2UoaHRtbDIpLmRhdGEuZGF0YTtcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6ZGF0YS5jcmVhdGVfYXQsXFxuICAgICAgICAgICAgaW1nOiBkYXRhLnZpZGVvX2ltZyxcXG4gICAgICAgICAgICB1cmw6ZGF0YS5tM3U4LFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8zJyxcXG4gICAgICAgICAgICBleHRyYTogeyBcXG4gICAgICAgICAgICBsb25nQ2xpY2s6IFtcXG4gICAgICAgICAgICB7dGl0bGU6ICfkuIvovb0nLCBqczogJC50b1N0cmluZygodXJsKT0+eyByZXR1cm4gICdkb3dubG9hZDovLycrdXJsfSxkYXRhLmRvd24pfVxcbiAgICAgICAgICAgIF1cXG4gICAgICAgICAgIH1cXG4gICAgICB9KVxcbiB9KVxcbiB9Y2F0Y2h7fVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfMlwiLFwibmFtZVwiOlwi6aaW6aG16KeG6aKR5YiG57G7XCIsXCJwYXRoXCI6XCJzeXZpZGVvXCIsXCJydWxlXCI6XCJqczogXFxudmFyIGQgPSBbXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXG50cnl7XFxubGV0IGhvc3Q9TVlfUEFSQU1TLmhvc3QucmVwbGFjZSgnaHR0cDovL2FwaS5waHBqaWVrb3UudG9wJywnaHR0cHM6Ly9hcGkxLnlpbHVzaHVuZmVuZy50b3AnKTtcXG52YXIgd3o9TVlfUEFSQU1TLnd6O1xcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxuaWYod3o9PSdiYW9tYWRzJyl7XFxuICAgIHZhciBob3N0PU1ZX1BBUkFNUy5ob3N0LnJlcGxhY2UoJ2h0dHA6Ly9hcGkucGhwamlla291LnRvcCcsJ2h0dHBzOi8vYXBpMS55aWx1c2h1bmZlbmcudG9wJykucmVwbGFjZSgnYmFvbWFkcycsJ2Jhb21hL2Jhb21hZHMnKTtcXG59XFxudmFyIOmmlumhteinhumikeWIhuexuz1mZXRjaChob3N0Kyc/Z2V0c29ydCcpXFxudmFyIGRhdGE9IEpTT04ucGFyc2Uo6aaW6aG16KeG6aKR5YiG57G7KS5jYXRlZ29yaWVzO1xcbnZhciBpbmRleF9uPWRhdGFbMF0uaWQudG9TdHJpbmcoKVxcbmlmKE1ZX1BBR0U9PTEpe1xcbmRhdGEuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKCfpppbpobXop4bpopHliIbnsbsnK3d6LGluZGV4X24pPT1kYXRhLmlkLnRvU3RyaW5nKCk/c3Ryb25nKGRhdGEudGl0bGUsJ0ZGNjY5OScpOmRhdGEudGl0bGUsXFxuICAgICAgICAgICAgdXJsOiQoJycpLmxhenlSdWxlKCh0aXRsZSxpZCx3eikgPT4ge1xcbiAgICAgICAgICAgICAgIHB1dE15VmFyKCfpppbpobXop4bpopHliIbnsbsnK3d6LCBpZCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSxkYXRhLnRpdGxlLGRhdGEuaWQudG9TdHJpbmcoKSx3eiksXFxuICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbidcXG4gICAgfSlcXG59KVxcbn1cXG5cXG52YXIgbGlzdD1KU09OLnBhcnNlKGZldGNoKGhvc3QrJz9zb3J0PScrZ2V0TXlWYXIoJ+mmlumhteinhumikeWIhuexuycrd3osaW5kZXhfbikrJyZwYWdlPScrcGcpKS52aWRlb3M7XFxuLy9sb2cobGlzdClcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgIGlmKCh3ej09J2x1dHViZScpfCh3ej09J3BhbGknKSl7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6KGRhdGEuY3JlYXRlZF9kYXRlPT1udWxsPycnOmRhdGEuY3JlYXRlZF9kYXRlKSsnICAnKyhkYXRhLmRhdGU9PW51bGw/Jyc6ZGF0YS5kYXRlKSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UrbHVsYXp5LFxcbiAgICAgICAgICAgIHVybDogaG9zdCsnP2lkPScrZGF0YS5pZCt2b2QsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxuICAgICAgICB9KVxcbiAgICB9ZWxzZSBpZih3ei5pbmNsdWRlcygna3VhaW1hbycpfCh3ej09J2ZlZCcpfCh3ej09J3NhdnNwJyl8KHd6PT0nbW1zcCcpfCh3ej09J2NtYXYnKXwod3o9PSdoc2NrMicpfHd6LmluY2x1ZGVzKCd4aWFuZ2ppYW8nKSl7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6KGRhdGEuY3JlYXRlZF9kYXRlPT1udWxsPycnOmRhdGEuY3JlYXRlZF9kYXRlKSsnICAnKyhkYXRhLmNyZWF0ZXRpbWU9PW51bGw/Jyc6ZGF0YS5jcmVhdGV0aW1lKSsnICAnKyhkYXRhLmRhdGU9PW51bGw/Jyc6ZGF0YS5kYXRlKSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxuICAgICAgICAgICAgdXJsOiBob3N0Kyc/aWQ9JytkYXRhLmlkK3ZvZCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXG4gICAgICAgIH0pXFxuICAgIH1lbHNlIGlmKHd6PT0naW5zJyl7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6KGRhdGEuY3JlYXRlZF9kYXRlPT1udWxsPycnOmRhdGEuY3JlYXRlZF9kYXRlKSsnICAnKyhkYXRhLmRhdGU9PW51bGw/Jyc6ZGF0YS5kYXRlKSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UraW5zbGF6eSxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcbiAgICAgICAgfSlcXG4gICAgfWVsc2V7XFxuICAgICAgICBpZihkYXRhLmltYWdlKXtcXG4gICAgICAgIHZhciBpbWc9ZGF0YS5pbWFnZTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzooZGF0YS5jcmVhdGVkX2RhdGU9PW51bGw/Jyc6ZGF0YS5jcmVhdGVkX2RhdGUpKycgICcrKGRhdGEuZGF0ZT09bnVsbD8nJzpkYXRhLmRhdGUpKycgICcrKGRhdGEuZHVyYXRpb249PW51bGw/Jyc6ZGF0YS5kdXJhdGlvbiksXFxuICAgICAgICAgICAgaW1nOiAoaW1nLmluY2x1ZGVzKCd1cGxvYWQnKXx8aW1nLmluY2x1ZGVzKCduZXcuJykpPyhkYXRhLmltYWdlK2xhenkpOmRhdGEuaW1hZ2UsXFxuICAgICAgICAgICAgdXJsOiBob3N0Kyc/aWQ9JytkYXRhLmlkK3ZvZCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXG4gICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgICAgICB9XFxuIH0pXFxuIH1jYXRjaChlKXtcXG4gICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgICB0b2FzdCgn55yL5LiN5LqGJylcXG4gfVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwidGV4dF80XCIsXCJuYW1lXCI6XCLlm77niYfkuoznuqdcIixcInBhdGhcIjpcInR1cGlhbmVyamlcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkPVtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpXFxubGV0IGhvc3Q9TVlfUEFSQU1TLmhvc3Q7XFxubGV0IHVybD1ob3N0LnNwbGl0KCc/JylbMF07XFxudmFyIHd6PU1ZX1BBUkFNUy53ejtcXG50cnl7XFxuIGxldCBpbWc9IEpTT04ucGFyc2UoZmV0Y2goaG9zdCkpLmNvbnRlbnQucmVwbGFjZSgvXFxcXCQvZywnJykucmVwbGFjZSgv5YiG5YmyL2csJycpLnNwbGl0KCdAJyk7XFxuIGltZy5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBpbWc6ZGF0YSxcXG4gICAgICAgICAgICB1cmw6ICdwaWNzOi8vJytpbWcuam9pbignJiYnKSxcXG4gICAgICAgICAgICBjb2xfdHlwZToncGljXzFfZnVsbCdcXG4gICAgICAgIH0pXFxuIH0pXFxuIFxcbn1jYXRjaChlKXtcXG4gICAgbG9nKGUubWVzc2FnZSlcXG4gICAgIHRvYXN0KCfnnIvkuI3kuoYnKVxcbn1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzJcIixcIm5hbWVcIjpcIuWbvueJh+WIhuexu1wiLFwicGF0aFwiOlwicGljZXJqaVwiLFwicnVsZVwiOlwianM6IFxcbnZhciBkID0gW107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxudHJ5e1xcbmxldCBob3N0PU1ZX1BBUkFNUy5ob3N0LnJlcGxhY2UoJ2h0dHA6Ly9hcGkucGhwamlla291LnRvcCcsJ2h0dHBzOi8vYXBpMS55aWx1c2h1bmZlbmcudG9wJykucmVwbGFjZSgnY29taWMnLCdwaWN0dXJlJyk7XFxudmFyIHd6PU1ZX1BBUkFNUy53ejtcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcbmlmKE1ZX1BBR0U9PTEpe1xcbnZhciDlm77niYfliIbnsbs9ZmV0Y2goaG9zdCsnP2dldHNvcnQnKVxcbnZhciBkYXRhPSBKU09OLnBhcnNlKOWbvueJh+WIhuexuykuY2F0ZWdvcmllcztcXG52YXIgaW5kZXhfbj1kYXRhWzBdLmlkLnRvU3RyaW5nKClcXG5kYXRhLmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcign5Zu+54mH5YiG57G7Jyt3eixpbmRleF9uKT09ZGF0YS5pZC50b1N0cmluZygpP3N0cm9uZyhkYXRhLnRpdGxlLCdGRjY2OTknKTpkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIHVybDokKCcnKS5sYXp5UnVsZSgodGl0bGUsaWQsd3opID0+IHtcXG4gICAgICAgICAgICAgICBwdXRNeVZhcign5Zu+54mH5YiG57G7Jyt3eiwgaWQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sZGF0YS50aXRsZSxkYXRhLmlkLnRvU3RyaW5nKCksd3opLFxcbiAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nXFxuICAgIH0pXFxufSlcXG59XFxudmFyIGxpc3Q9SlNPTi5wYXJzZShmZXRjaChob3N0Kyc/c29ydD0nK2dldE15VmFyKCflm77niYfliIbnsbsnK3d6LGluZGV4X24pKycmcGFnZT0nK3BnKSkudmlkZW9zO1xcbi8vbG9nKGxpc3QpXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOiBkYXRhLmRhdGUsXFxuICAgICAgICAgICAgaW1nOiB3ej09J3Rpa3RvazE4Jz8oZGF0YS5pbWFnZStsYXp5KTpkYXRhLmltYWdlLFxcbiAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9lbXB0eScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3R1cGlhbmVyamlcXFwiKScsXFxuICAgICAgICAgICAgdXJsOiB3ej09J3R1emFjJz9kYXRhLmltYWdlOihob3N0Kyc/aWQ9JytkYXRhLmlkK3BpY3MpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8zJyxcXG4gICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke2hvc3R9P2lkPSR7ZGF0YS5pZH1gLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuIH0pXFxuIH1jYXRjaChlKXtcXG4gICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgICB0b2FzdCgn55yL5LiN5LqGJylcXG4gfVxcbnNldFJlc3VsdChkKVwifV0iLCJpY29uIjoiaHR0cHM6Ly9pbWcxMC4zNjBidXlpbWcuY29tL2ltZ3pvbmUvamZzL3QxLzE2NjUzNS80LzQzNjU1LzY3NDYvNjc5MTA5MDBGOGE0MzY1YTQvZjg5MmU5ZWRlMzdhY2UzOC5wbmciLCJwcm94eSI6IiJ9
Add Comment
Please, Sign In to add comment