Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥重口社@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImdtdE1vZGlmaWVkXCI6MCxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcImFlc1wiLFwicGF0aFwiOlwiYWVzXCIsXCJydWxlXCI6XCIvL+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/aWQ9JytkYXRhLmlkK3BpY3MpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8zJyxcXG4gICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke2hvc3R9P2lkPSR7ZGF0YS5pZH1gLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuIH0pXFxuIH1jYXRjaChlKXtcXG4gICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgICB0b2FzdCgn55yL5LiN5LqGJylcXG4gfVxcbnNldFJlc3VsdChkKVwifV0sXCJwYXJhbXNcIjpcIntcXFwiaG9zdFxcXCI6XFxcImh0dHBzOi8vYXBpMS55aWx1c2h1bmZlbmcudG9wL3ZpZGVvMS9jYW9saXVzcF94aWxpZS96aG9uZ2tvdXNoZS5waHBcXFwiLFxcXCJ3elxcXCI6XFxcInpob25na291c2hlXFxcIn1cIixcInNhdmVkXCI6ZmFsc2UsXCJ0aXRsZVwiOlwi6IyE5a2QXCIsXCJ2ZXJzaW9uXCI6MCxcInVybFwiOlwiaGlrZXI6Ly9lbXB0eSMjZnlwYWdlO2dldDtVVEYtODt7VXNlci1BZ2VudEBNb3ppbGxhLzUuMCAoTGludXjvvJvvvJsgQW5kcm9pZCAxNe+8m++8myAyNDA3RlJLOEVDIEJ1aWxkL0FQM0EuMjQwNjE3LjAwOO+8m++8myB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzEyOC4wLjY2MTMuMTI3IE1vYmlsZSBTYWZhcmkvNTM3LjM2fVwiLFwiY29sX3R5cGVcIjpcIm1vdmllXzJcIixcImZpbmRfcnVsZVwiOlwianM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2Uvc3l2aWRlb1xcXCIpXCIsXCJncm91cFwiOlwiLkFQUFwiLFwidWFcIjpcIm1vYmlsZVwiLFwicHJlUnVsZVwiOlwiXCIsXCJwYWdlc1wiOlwiW3tcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcImFlc1xcXCIsXFxcInBhdGhcXFwiOlxcXCJhZXNcXFwiLFxcXCJydWxlXFxcIjpcXFwiLy/liqDovb1DcnlwdG9KU+W6k1xcXFxuZXZhbChnZXRDcnlwdG9KUygpKVxcXFxuLy8xM+S9jeaXtumXtOaIs1xcXFxudmFyIHQgPSBNYXRoLmZsb29yKERhdGUubm93KCkgKTtcXFxcbi8v566A5Y2V5Yy56YWNXFxcXG5sZXQgc3AgPSAoaXQsIHMsIGUpID0+IFN0cmluZyhpdC5zcGxpdChzKVsxXSkuc3BsaXQoZSlbMF07XFxcXG4vL+minOiJslxcXFxuZnVuY3Rpb24gc3Ryb25nKGQsIGMpIHtcXFxcbiAgICByZXR1cm4gJ+KAmOKAmOKAmeKAmTxzdHJvbmc+PGZvbnQgY29sb3I9IycgKyAoYyB8fCAnMDAwMDAwJykgKyAnPicgKyBkICsgJzwvZm9udD48L3N0cm9uZz4nO1xcXFxufVxcXFxuLy/nlJ/miJDml7bpl7TmiLNcXFxcbmZ1bmN0aW9uIGdldEN1cnJlbnRUaW1lc3RhbXAoKSB7XFxcXG4gICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xcXFxufVxcXFxuLy9tZDXliqDlr4ZcXFxcbmZ1bmN0aW9uIG1kNShzdHIpIHtcXFxcbiAgICByZXR1cm4gQ3J5cHRvSlMuTUQ1KHN0cikudG9TdHJpbmcoKTtcXFxcbn1cXFxcbi8vc2hhMjU25Yqg5a+GXFxcXG5mdW5jdGlvbiBzaGEyNTYoc3RyKSB7XFxcXG4gICAgcmV0dXJuIENyeXB0b0pTLlNIQTI1NihzdHIpLnRvU3RyaW5nKCk7XFxcXG59XFxcXG4vL+minOiJslxcXFxuZnVuY3Rpb24gY29sb3IodHh0KSB7XFxcXG4gICAgcmV0dXJuICAnPGI+PGZvbnQgY29sb3I9JyArICcjRkY2Njk5JyArICc+JyArIHR4dCArICc8L2ZvbnQ+PC9iPidcXFxcbn1cXFxcbi8v6IyE5a2Q6Kej5a+G5Ye95pWwXFxcXG5mdW5jdGlvbiBxekRlY3J5cHQod29yZCkge1xcXFxuICAgIGNvbnN0IGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKFxcXFxcXFwieWluc3UxMjM0NWFiY2RlZlxcXFxcXFwiKTtcXFxcbiAgICBjb25zdCBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKFxcXFxcXFwia2VqaTEyMzQ1Njk5OTk5OVxcXFxcXFwiKTtcXFxcbiAgICBsZXQgZW5jcnlwdGVkSGV4U3RyID0gQ3J5cHRvSlMuZW5jLkJhc2U2NC5wYXJzZSh3b3JkKTtcXFxcbiAgICBsZXQgZGVjcnlwdCA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KHtcXFxcbiAgICAgICAgY2lwaGVydGV4dDogZW5jcnlwdGVkSGV4U3RyXFxcXG4gICAgfSwga2V5LCB7XFxcXG4gICAgICAgIGl2OiBpdixcXFxcbiAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsXFxcXG4gICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcXFxuICAgIH0pO1xcXFxuICAgIGlmIChkZWNyeXB0KSB7XFxcXG4gICAgICAgIGxldCBkZWNyeXB0ZWRTdHIgPSBkZWNyeXB0LnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXFxcbiAgICAgICAgcmV0dXJuIGRlY3J5cHRlZFN0cjtcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICAvLyDop6Plr4blpLHotKXvvIzov5Tlm55udWxs5oiW6ZSZ6K+v5L+h5oGvXFxcXG4gICAgICAgIHJldHVybiBudWxsO1xcXFxuICAgIH1cXFxcbn1cXFxcblxcXFxuXFxcXG4vLyDnjKvlkqrop6Plr4blh73mlbBcXFxcbmZ1bmN0aW9uIERlY3J5cHQod29yZCkge1xcXFxuICAgIGNvbnN0IGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKFxcXFxcXFwiNjI1MjIyZjkxNDllOTYxZFxcXFxcXFwiKTtcXFxcbiAgICBjb25zdCBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKFxcXFxcXFwiNWVmZHRmNjA2MGUybzMzMFxcXFxcXFwiKTtcXFxcbiAgICBsZXQgZW5jcnlwdGVkSGV4U3RyID0gQ3J5cHRvSlMuZW5jLkhleC5wYXJzZSh3b3JkKTtcXFxcbiAgICBsZXQgZGVjcnlwdCA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KHtcXFxcbiAgICAgICAgY2lwaGVydGV4dDogZW5jcnlwdGVkSGV4U3RyXFxcXG4gICAgfSwga2V5LCB7XFxcXG4gICAgICAgIGl2OiBpdixcXFxcbiAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsXFxcXG4gICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcXFxuICAgIH0pO1xcXFxuICAgIGlmIChkZWNyeXB0KSB7XFxcXG4gICAgICAgIGxldCBkZWNyeXB0ZWRTdHIgPSBkZWNyeXB0LnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXFxcbiAgICAgICAgcmV0dXJuIGRlY3J5cHRlZFN0cjtcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICAvLyDop6Plr4blpLHotKXvvIzov5Tlm55udWxs5oiW6ZSZ6K+v5L+h5oGvXFxcXG4gICAgICAgIHJldHVybiBudWxsO1xcXFxuICAgIH1cXFxcbn1cXFxcblxcXFxuLy8g54yr5ZKq5Yqg5a+G5Ye95pWwXFxcXG5mdW5jdGlvbiBFbmNyeXB0KHBsYWludGV4dCkge1xcXFxuICAgIGNvbnN0IGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKFxcXFxcXFwiNjI1MjIyZjkxNDllOTYxZFxcXFxcXFwiKTtcXFxcbiAgICBjb25zdCBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKFxcXFxcXFwiNWVmZHRmNjA2MGUybzMzMFxcXFxcXFwiKTtcXFxcbiAgICB2YXIgZW5jcnlwdGVkID0gQ3J5cHRvSlMuQUVTLmVuY3J5cHQocGxhaW50ZXh0LCBrZXksIHtcXFxcbiAgICAgICAgaXY6IGl2LFxcXFxuICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQyxcXFxcbiAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxcXG4gICAgfSk7XFxcXG4gICAgdmFyIGNpcGhlcnRleHQgPSBlbmNyeXB0ZWQuY2lwaGVydGV4dC50b1N0cmluZyhDcnlwdG9KUy5lbmMuSGV4KTtcXFxcbiAgICByZXR1cm4gY2lwaGVydGV4dC50b1VwcGVyQ2FzZSgpO1xcXFxufVxcXFxuXFxcXG52YXIgbGF6eSA9ICQoJycpLmltYWdlKCgpID0+IHtcXFxcbmNvbnN0IENyeXB0b1V0aWwgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL2Fzc2V0cy9jcnlwdG8tamF2YS5qc1xcXFxcXFwiKTtcXFxcblxcXFx0bGV0IGlkID0gQ3J5cHRvVXRpbC5EYXRhLnBhcnNlVVRGOChcXFxcXFxcImY1ZDk2NWRmNzUzMzYyNzBcXFxcXFxcIik7XFxcXG5cXFxcdGxldCBpdiA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZVVURjgoXFxcXFxcXCI5N2I2MDM5NGFiYzJmYmUxXFxcXFxcXCIpO1xcXFxuXFxcXHRsZXQgdGV4dERhdGEgPSBDcnlwdG9VdGlsLkRhdGEucGFyc2VJbnB1dFN0cmVhbShpbnB1dCk7XFxcXG5cXFxcdGxldCBlbmNyeXB0ZWQgPSBDcnlwdG9VdGlsLkFFUy5kZWNyeXB0KHRleHREYXRhLCBpZCwge1xcXFxuICBcXFxcdG1vZGU6IFxcXFxcXFwiQUVTL0NCQy9QS0NTN1BhZGRpbmdcXFxcXFxcIixcXFxcblxcXFx0XFxcXHRpdjogaXZcXFxcblxcXFx0fSk7XFxcXG5cXFxcdHJldHVybiBlbmNyeXB0ZWQudG9JbnB1dFN0cmVhbSgpO1xcXFxufSlcXFxcblxcXFxuLy/op4bpopHor7fmsYJcXFxcbnZhciB2b2QgPSAkKCcnKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXFxcbnRyeXtcXFxcbnZhciB1cmwgPUpTT04ucGFyc2UoZmV0Y2goaW5wdXQpKS52aWRlbztcXFxcbnJldHVybiB1cmwrYCNpc1ZpZGVvPXRydWUjYFxcXFxufWNhdGNoKGUpe1xcXFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxcXG4gICAgcmV0dXJuICd0b2FzdDovL+ivt+axguWksei0pSdcXFxcbn1cXFxcbn0pXFxcXG4vL+WbvueJh+ivt+axglxcXFxudmFyIHBpY3MgPSAkKCcnKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG5sZXQgaW1nPSBKU09OLnBhcnNlKGZldGNoKGlucHV0KSkuY29udGVudC5yZXBsYWNlKC9cXFxcXFxcXCQvZywnJykucmVwbGFjZSgv5YiG5YmyL2csJycpLnNwbGl0KCdAJyk7XFxcXG5yZXR1cm4gJ3BpY3M6Ly8nK2ltZy5qb2luKCcmJicpO1xcXFxufSlcXFxcbi8v54yr5ZKq5ryr55S76Kej5p6QXFxcXG52YXIgbWFvbWltYW5odWFqeD0kKCcnKS5sYXp5UnVsZSgoKSA9PiB7IFxcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSlcXFxcbnZhciBzaWduPUVuY3J5cHQoJ3tcXFxcXFxcInVzZXJfaWRcXFxcXFxcIjoxNzkwMzY4LFxcXFxcXFwibGlzdF9pZFxcXFxcXFwiOicraW5wdXQrJ30nKTtcXFxcbnZhciBob3N0PSdodHRwOi8vMTE5LjI4LjUyLjE5Mzo4MDg5L2FwaS9jb21pYy93YXRjaD9wYXJhbXM9JytzaWduO1xcXFxudmFyIGJvZHk9J3BhcmFtcz0nK3NpZ247XFxcXG52YXIgaHRtbCA9IGZldGNoKGhvc3QsIHtcXFxcbiAgICBoZWFkZXJzOiB7XFxcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxcXFxuICAgIH0sXFxcXG4gICAgbWV0aG9kOiAnUE9TVCdcXFxcbn0pOyBcXFxcbnZhciBodG1sMj1EZWNyeXB0KGh0bWwpXFxcXG52YXIgbGlzdD1KU09OLnBhcnNlKGh0bWwyKS5kYXRhO1xcXFxubGV0IHBpY0Fycj1bXTtcXFxcbmxldCBsZW49IGxpc3QubGVuZ3RoLTE7XFxcXG5mb3IgKGkgPSAwOyBpIDw9IGxlbjsgaSsrKSB7XFxcXG4gICAgICAgcGljQXJyW2ldID0gbGlzdFtpXS5pbWFnZTtcXFxcbiAgICAgfVxcXFxucmV0dXJuICdwaWNzOi8vJytwaWNBcnIuam9pbignJiYnKTtcXFxcbn0pXFxcXG5cXFxcbi8v54yr5ZKqRk3op6PmnpBcXFxcbnZhciBtYW9taWZtang9JCgnJykubGF6eVJ1bGUoKCkgPT4geyBcXFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpXFxcXG52YXIgc2lnbj1FbmNyeXB0KCd7XFxcXFxcXCJpZFxcXFxcXFwiOicraW5wdXQrJ30nKTtcXFxcbnZhciBob3N0PSdodHRwOi8vMTE5LjI4LjUyLjE5Mzo4MDg5L2FwaS9ib29rL2RldGFpbD9wYXJhbXM9JytzaWduO1xcXFxudmFyIGJvZHk9J3BhcmFtcz0nK3NpZ247XFxcXG52YXIgaHRtbCA9IGZldGNoKGhvc3QsIHtcXFxcbiAgICBoZWFkZXJzOiB7XFxcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxcXFxuICAgIH0sXFxcXG4gICAgbWV0aG9kOiAnUE9TVCdcXFxcbn0pOyBcXFxcbnZhciBodG1sMj1EZWNyeXB0KGh0bWwpXFxcXG52YXIgdXJsPUpTT04ucGFyc2UoaHRtbDIpLmRhdGEuZGF0YVswXS5jb250ZW50O1xcXFxucmV0dXJuIHVybFxcXFxufSlcXFxcblxcXFxuLy/njKvlkqrop6PmnpBcXFxcbnZhciBtYW9taWp4PSQoJycpLmxhenlSdWxlKCgpID0+IHsgXFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKVxcXFxudmFyIHNpZ249RW5jcnlwdCgne1xcXFxcXFwiaWRcXFxcXFxcIjonK2lucHV0Kyd9Jyk7XFxcXG52YXIgaG9zdD0naHR0cDovLzExOS4yOC41Mi4xOTM6ODA4OS9hcGkvdmlkZW8vZGV0YWlsP3BhcmFtcz0nK3NpZ247XFxcXG52YXIgYm9keT0ncGFyYW1zPScrc2lnbjtcXFxcbnZhciBodG1sID0gZmV0Y2goaG9zdCwge1xcXFxuICAgIGhlYWRlcnM6IHtcXFxcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXFxcXG4gICAgfSxcXFxcbiAgICBtZXRob2Q6ICdQT1NUJ1xcXFxufSk7IFxcXFxudmFyIGh0bWwyPURlY3J5cHQoaHRtbClcXFxcbi8v5LiL6L29XFxcXG4vL3ZhciBkb3duPUpTT04ucGFyc2UoaHRtbDIpLmRhdGEudmlkZW9zWzBdLmRvd247XFxcXG4vL+aWh+S7tlxcXFxudmFyIHVybD1KU09OLnBhcnNlKGh0bWwyKS5kYXRhLnZpZGVvc1swXS5maWxlO1xcXFxucmV0dXJuIHVybFxcXFxufSlcXFxcblxcXFxuLy/purvosYbliqDlr4blh73mlbBcXFxcbmZ1bmN0aW9uIG1kRW5jcnlwdChwbGFpbnRleHQpIHtcXFxcbiAgICBjb25zdCBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFxcXFxcIlZxMjM0ekJlU2RHZ1lYelZURWZubmpqZG1hVGtrN0E0XFxcXFxcXCIpO1xcXFxuICAgIGNvbnN0IGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcXFxcXCItcDlCW35QblBzMTczMTUwXFxcXFxcXCIpO1xcXFxuICAgIHZhciBlbmNyeXB0ZWQgPSBDcnlwdG9KUy5BRVMuZW5jcnlwdChwbGFpbnRleHQsIGtleSwge1xcXFxuICAgICAgICBpdjogaXYsXFxcXG4gICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcXFxuICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczcgLy8g5rOo5oSP6L+Z6YeM5bqU6K+l5pivQ3J5cHRvSlMucGFkLk5vUGFkZGluZ1xcXFxuICAgIH0pO1xcXFxuICAgIHZhciBjaXBoZXJ0ZXh0ID0gZW5jcnlwdGVkLmNpcGhlcnRleHQudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkJhc2U2NCk7XFxcXG4gICAgcmV0dXJuIGNpcGhlcnRleHQ7XFxcXG59XFxcXG5cXFxcbi8vIOm6u+ixhuino+WvhuWHveaVsFxcXFxuZnVuY3Rpb24gbWREZWNyeXB0KHdvcmQpIHtcXFxcbiAgICBjb25zdCBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFxcXFxcIlZxMjM0ekJlU2RHZ1lYelZURWZubmpqZG1hVGtrN0E0XFxcXFxcXCIpO1xcXFxuICAgIGNvbnN0IGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcXFxcXCItcDlCW35QblBzXFxcXFxcXCIraXYwKTtcXFxcbiAgICBsZXQgZW5jcnlwdGVkSGV4U3RyID0gQ3J5cHRvSlMuZW5jLkJhc2U2NC5wYXJzZSh3b3JkKTtcXFxcbiAgICBsZXQgZGVjcnlwdCA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KHtcXFxcbiAgICAgICAgY2lwaGVydGV4dDogZW5jcnlwdGVkSGV4U3RyXFxcXG4gICAgfSwga2V5LCB7XFxcXG4gICAgICAgIGl2OiBpdixcXFxcbiAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsXFxcXG4gICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzNyAvLyDms6jmhI/ov5nph4zlupTor6XmmK9DcnlwdG9KUy5wYWQuTm9QYWRkaW5nXFxcXG4gICAgfSk7XFxcXG4gICAgaWYgKGRlY3J5cHQpIHtcXFxcbiAgICAgICAgbGV0IGRlY3J5cHRlZFN0ciA9IGRlY3J5cHQudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpO1xcXFxuICAgICAgICByZXR1cm4gZGVjcnlwdGVkU3RyO1xcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIC8vIOino+WvhuWksei0pe+8jOi/lOWbnm51bGzmiJbplJnor6/kv6Hmga9cXFxcbiAgICAgICAgcmV0dXJuIG51bGw7XFxcXG4gICAgfVxcXFxufVxcXFxuXFxcXG4vL+m6u+ixhuWbvueJh+ino+WvhlxcXFxudmFyIG1kbGF6eSA9ICQoJycpLmltYWdlKCgpID0+IHtcXFxcbmNvbnN0IENyeXB0b1V0aWwgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL2Fzc2V0cy9jcnlwdG8tamF2YS5qc1xcXFxcXFwiKTtcXFxcblxcXFx0bGV0IGtleSA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZVVURjgoXFxcXFxcXCJwbmhYZ04wVVxcXFxcXFwiKTtcXFxcblxcXFx0bGV0IGl2ID0gQ3J5cHRvVXRpbC5EYXRhLnBhcnNlVVRGOChcXFxcXFxcIkdZNGdFdkJEXFxcXFxcXCIpO1xcXFxuXFxcXHRsZXQgdGV4dERhdGEgPSBDcnlwdG9VdGlsLkRhdGEucGFyc2VJbnB1dFN0cmVhbShpbnB1dCkuYmFzZTY0RGVjb2RlKCk7XFxcXG5cXFxcdGxldCBlbmNyeXB0ZWQgPSBDcnlwdG9VdGlsLkRFUy5kZWNyeXB0KHRleHREYXRhLCBrZXksIHtcXFxcbiAgXFxcXHRtb2RlOiBcXFxcXFxcIkRFUy9DQkMvUEtDUzdQYWRkaW5nXFxcXFxcXCIsXFxcXG5cXFxcdFxcXFx0aXY6IGl2XFxcXG5cXFxcdH0pO1xcXFxuXFxcXHRsZXQgYmFzZTY0VGV4dCA9IGVuY3J5cHRlZC50b1N0cmluZygpLnNwbGl0KFxcXFxcXFwiYmFzZTY0LFxcXFxcXFwiKVsxXTtcXFxcbiAgICBsZXQgZW5jcnlwdGVkMCA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZUJhc2U2NChiYXNlNjRUZXh0LCBfYmFzZTY0Lk5PX1dSQVApO1xcXFxuICAgIHJldHVybiBlbmNyeXB0ZWQwLnRvSW5wdXRTdHJlYW0oKTtcXFxcbn0pXFxcXG5cXFxcbi8vOTF0duinhumikeino+aekFxcXFxudmFyIHR2dm9kID0gJCgnJykubGF6eVJ1bGUoKCkgPT4ge1xcXFxuZXZhbChnZXRDcnlwdG9KUygpKVxcXFxuZnVuY3Rpb24gbWQ1KHN0cikge1xcXFxuICAgIHJldHVybiBDcnlwdG9KUy5NRDUoc3RyKS50b1N0cmluZygpO1xcXFxufVxcXFxudmFyIHQwID1NYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSsxO1xcXFxudmFyIHdzU2VjcmV0PW1kNSgnRTlNcEM3RDVBcVd2am1YTDNoR2tRMlhqWk5vaEFRJytpbnB1dC5yZXBsYWNlKC9odHRwKHMpPzpcXFxcXFxcXC9cXFxcXFxcXC8uKj9cXFxcXFxcXC8vZywnLycpK3QwKTtcXFxcbnZhciB1cmw9aW5wdXQrJz93c1NlY3JldD0nK3dzU2VjcmV0Kycmd3NUaW1lPScrdDA7XFxcXG53cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvdmlkZW8wLm0zdTgnLCByZXF1ZXN0KHVybCkpO1xcXFxucmV0dXJuIGdldFBhdGgoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvdmlkZW8wLm0zdTgnKSsnIycrdXJsO1xcXFxufSlcXFxcbi8vbHV0dWJl5Zu+54mH6Kej5a+GXFxcXG52YXIgbHVsYXp5ID0gJCgnJykuaW1hZ2UoKCkgPT4ge1xcXFxuY29uc3QgQ3J5cHRvVXRpbCA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vYXNzZXRzL2NyeXB0by1qYXZhLmpzXFxcXFxcXCIpO1xcXFxuXFxcXHRsZXQga2V5ID0gQ3J5cHRvVXRpbC5EYXRhLnBhcnNlSGV4KFxcXFxcXFwiYjJmMzg0Mjg2NmY5NTgzZDFlY2U2MWM0ZTA1NWMyNTVcXFxcXFxcIik7XFxcXG5cXFxcdGxldCBpdiA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZUhleChcXFxcXFxcImUwMWVkZTYzMzFkMzdhZmNjN2JlMDU1OTdkNjU0ZDIyXFxcXFxcXCIpO1xcXFxuXFxcXHRsZXQgdGV4dERhdGEgPSBDcnlwdG9VdGlsLkRhdGEucGFyc2VJbnB1dFN0cmVhbShpbnB1dCk7XFxcXG5cXFxcdGxldCBlbmNyeXB0ZWQgPSBDcnlwdG9VdGlsLkFFUy5kZWNyeXB0KHRleHREYXRhLCBrZXksIHtcXFxcbiAgXFxcXHRtb2RlOiBcXFxcXFxcIkFFUy9DQkMvUEtDUzdQYWRkaW5nXFxcXFxcXCIsXFxcXG5cXFxcdFxcXFx0aXY6IGl2XFxcXG5cXFxcdH0pO1xcXFxuXFxcXHRyZXR1cm4gZW5jcnlwdGVkLnRvSW5wdXRTdHJlYW0oKTtcXFxcbn0pXFxcXG4vL2luc+WbvueJh+ino+Wvhu+8jGJhc2U2NFxcXFxudmFyIGluc2xhenkgPSAkKCcnKS5pbWFnZSgoKSA9PiB7XFxcXG4gICAgY29uc3QgQ3J5cHRvVXRpbCA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vYXNzZXRzL2NyeXB0by1qYXZhLmpzXFxcXFxcXCIpO1xcXFxuICAgIGxldCB0ZXh0RGF0YSA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZUlucHV0U3RyZWFtKGlucHV0KTtcXFxcbiAgICBsZXQgYmFzZTY0VGV4dCA9IHRleHREYXRhLnRvU3RyaW5nKCkuc3BsaXQoXFxcXFxcXCJiYXNlNjQsXFxcXFxcXCIpWzFdO1xcXFxuICAgIGxldCBlbmNyeXB0ZWQwID0gQ3J5cHRvVXRpbC5EYXRhLnBhcnNlQmFzZTY0KGJhc2U2NFRleHQsIF9iYXNlNjQuTk9fV1JBUCk7XFxcXG4gICAgcmV0dXJuIGVuY3J5cHRlZDAudG9JbnB1dFN0cmVhbSgpO1xcXFxufSlcXFxcblxcXFxuXFxcXG4vL+a1t+inkuWbvueJh+ino+WvhlxcXFxudmFyIG4gPSBmdW5jdGlvbihlKSB7XFxcXG4gICAgZm9yIChvID0gXFxcXFxcXCJcXFxcXFxcIiwgaSA9IDAsIGEgPSAwLCB2b2lkIDA7IGkgPCBlLmxlbmd0aDspIHtcXFxcbiAgICAgICAgdmFyIHQsIG4sIG8sIGksIGE7XFxcXG4gICAgICAgICh0ID0gZS5jaGFyQ29kZUF0KGkpKSA8IDEyOCA/IChvICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodCksIGkrKykgOiAxOTEgPCB0ICYmIHQgPCAyMjQgPyAoYSA9IGUuY2hhckNvZGVBdChpICsgMSksIG8gKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoMzEgJiB0KSA8PCA2IHwgNjMgJiBhKSwgaSArPSAyKSA6IChhID0gZS5jaGFyQ29kZUF0KGkgKyAxKSwgbiA9IGUuY2hhckNvZGVBdChpICsgMiksIG8gKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoMTUgJiB0KSA8PCAxMiB8ICg2MyAmIGEpIDw8IDYgfCA2MyAmIG4pLCBpICs9IDMpO1xcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gbztcXFxcbn07XFxcXG52YXIgZGVjcnlwdERhdGEgPSBmdW5jdGlvbih0KSB7XFxcXG4gICAgdmFyIG8sIGksIGEsIHIsIHMsIGMsIHUgPSBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICBkID0gMCxcXFxcbiAgICAgICAgdHQgPSBcXFxcXFxcIkFCQ0QqRUZHSElKS0xNTk9QUVJTVFVWV1gjWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejEyMzQ1Njc4OTBcXFxcXFxcIlxcXFxuICAgIGZvciAodCA9IHQucmVwbGFjZSgvW15BLVphLXowLTlcXFxcXFxcXCpcXFxcXFxcXCNdL2csIFxcXFxcXFwiXFxcXFxcXCIpOyBkIDwgdC5sZW5ndGg7KSBhID0gdHQuaW5kZXhPZih0LmNoYXJBdChkKyspKSwgbyA9ICgxNSAmIChyID0gdHQuaW5kZXhPZih0LmNoYXJBdChkKyspKSkpIDw8IDQgfCAocyA9IHR0LmluZGV4T2YodC5jaGFyQXQoZCsrKSkpID4+IDIsIGkgPSAoMyAmIHMpIDw8IDYgfCAoYyA9IHR0LmluZGV4T2YodC5jaGFyQXQoZCsrKSkpLCB1ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYSA8PCAyIHwgciA+PiA0KSwgNjQgIT0gcyAmJiAodSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKG8pKSwgNjQgIT0gYyAmJiAodSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpKTtcXFxcbiAgICByZXR1cm4gbih1KTtcXFxcbn07XFxcXG5cXFxcbiQuZXhwb3J0cy5pbWFnZURlY3J5cHQgPSBmdW5jdGlvbigpIHtcXFxcbiAgICBsZXQgamF2YUltcG9ydCA9IG5ldyBKYXZhSW1wb3J0ZXIoKTtcXFxcbiAgICBqYXZhSW1wb3J0LmltcG9ydFBhY2thZ2UoXFxcXG4gICAgICAgIFBhY2thZ2VzLmNvbS5leGFtcGxlLmhpa2Vydmlldy51dGlsc1xcXFxuICAgICk7XFxcXG4gICAgd2l0aChqYXZhSW1wb3J0KSB7XFxcXG4gICAgICAgIGxldCBieXRlcyA9IEZpbGVVdGlsLnRvQnl0ZXMoaW5wdXQpO1xcXFxuICAgICAgICBieXRlcyA9IG5ldyBqYXZhLmxhbmcuU3RyaW5nKGJ5dGVzLCAnVVRGLTgnKVxcXFxuICAgICAgICBsZXQgcmVzID0gZGVjcnlwdERhdGEoYnl0ZXMgKyBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbiAgICAgICAgcmVzID0gbmV3IGphdmEubGFuZy5TdHJpbmcocmVzKVxcXFxuICAgICAgICByZXMgPSByZXMuc3BsaXQoXFxcXFxcXCJiYXNlNjQsXFxcXFxcXCIpWzFdO1xcXFxuICAgICAgICByZXR1cm4gRmlsZVV0aWwudG9JbnB1dFN0cmVhbShfYmFzZTY0LmRlY29kZShyZXMsIF9iYXNlNjQuTk9fV1JBUCkpO1xcXFxuICAgIH1cXFxcbn1cXFxcblxcXFxuXFxcXG5mdW5jdGlvbiBwYWdlQWRkKHBhZ2UpIHtcXFxcbiAgICBpZiAoZ2V0TXlWYXIoXFxcXFxcXCJwYWdlXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgIHB1dE15VmFyKFxcXFxcXFwicGFnZVxcXFxcXFwiLCAocGFyc2VJbnQocGFnZSkgKyAxKSArICcnKTtcXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuO1xcXFxufSAvL+e/u+mhtVxcXFxuXFxcXG5mdW5jdGlvbiBwYWdlTW92ZXRvKHBhZ2UsIHBhZ2VzKSB7XFxcXG4gICAgdmFyIGxvbmdDbGljayA9IFt7XFxcXG4gICAgICAgIHRpdGxlOiBcXFxcXFxcIummlumhtVxcXFxcXFwiLFxcXFxuICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFxcXFxcInBhZ2VcXFxcXFxcIiwgXFxcXFxcXCIxXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcbiAgICAgICAgfSksXFxcXG4gICAgfSwge1xcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCLkuIrpobVcXFxcXFxcIixcXFxcbiAgICAgICAganM6ICQudG9TdHJpbmcoKHBhZ2UpID0+IHtcXFxcbiAgICAgICAgICAgIGlmIChwYWdlID4gMSkge1xcXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXFxcXFwicGFnZVxcXFxcXFwiLCAocGFyc2VJbnQocGFnZSkgLSAxKSk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0sIHBhZ2UpLFxcXFxuICAgIH0sIHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwi5b2T5YmN56ysXFxcXFxcXCIgKyBwYWdlICsgXFxcXFxcXCLpobVcXFxcXFxcIixcXFxcbiAgICAgICAganM6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgfSwge1xcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCLot7PovaxcXFxcXFxcIixcXFxcbiAgICAgICAganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgcmV0dXJuICQoXFxcXFxcXCJcXFxcXFxcIikuaW5wdXQoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXFxcXFwicGFnZVxcXFxcXFwiLCBpbnB1dCk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICB9KSxcXFxcbiAgICB9XTtcXFxcbiAgICBpZiAodHlwZW9mKHBhZ2VzKSAhPSAndW5kZWZpbmVkJykge1xcXFxuICAgICAgICB2YXIgZXh0cmExID0ge1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5bC+6aG1XFxcXFxcXCIgKyBwYWdlcyxcXFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChwYWdlcykgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXFxcXFwicGFnZVxcXFxcXFwiLCBwYWdlcyk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB9LCBwYWdlcyksXFxcXG4gICAgICAgIH07XFxcXG4gICAgICAgIGxvbmdDbGljay5wdXNoKGV4dHJhMSlcXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIGxvbmdDbGlja1xcXFxufSAvL+mVv+aMiei3s+mhtVxcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5YiG57G7XFxcIixcXFwicGF0aFxcXCI6XFxcIkNhdGVcXFwiLFxcXCJydWxlXFxcIjpcXFwiZnVuY3Rpb24gc3Ryb25nKGQsIGMpIHtcXFxcbiAgICByZXR1cm4gJ+KAmOKAmOKAmeKAmTxzdHJvbmc+PGZvbnQgY29sb3I9IycgKyAoYyB8fCAnMDAwMDAwJykgKyAnPicgKyBkICsgJzwvZm9udD48L3N0cm9uZz4nO1xcXFxufVxcXFxuLy/liJfooagsY29s6buY6K6k5Li6J3Njcm9sbF9idXR0b24nXFxcXG5mdW5jdGlvbiBDYXRlKGxpc3QsbixkLGNvbCkge1xcXFxuICAgIGlmKCFjb2wpe1xcXFxuICAgICAgICBjb2w9J3Njcm9sbF9idXR0b24nO1xcXFxuICAgIH1cXFxcbiAgICB2YXIgaW5kZXhfbj1saXN0WzBdLmlkLnNwbGl0KCcmJylbMF07XFxcXG4gICAgbGlzdC5mb3JFYWNoKGRhdGE9PntcXFxcbiAgICAgICAgdmFyIHRpdGxlID0gZGF0YS50aXRsZS5zcGxpdCgnJicpO1xcXFxuICAgICAgICB2YXIgaWQ9ZGF0YS5pZC5zcGxpdCgnJicpO1xcXFxuICAgICAgICBpZihkYXRhLmltZyE9bnVsbCl7XFxcXG4gICAgICAgICAgICB2YXIgaW1nPWRhdGEuaW1nLnNwbGl0KCcmJyk7XFxcXG4gICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgdmFyIGltZz1bXTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICB0aXRsZS5mb3JFYWNoKCh0aXRsZSxpbmRleCk9PntcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6KGdldE15VmFyKG4saW5kZXhfbik9PWlkW2luZGV4XT9zdHJvbmcodGl0bGUsICdGRjY2OTknKSA6IHRpdGxlKSxcXFxcbiAgICAgICAgICAgICAgICBpbWc6aW1nW2luZGV4XSxcXFxcbiAgICAgICAgICAgICAgICB1cmw6JChpZFtpbmRleF0pLmxhenlSdWxlKChuLHRpdGxlLGlkKSA9PiB7XFxcXG4gICAgICAgICAgICAgICBwdXRNeVZhcihuLCBpbnB1dCk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcXFxuICAgICAgICAgICAgfSwgbix0aXRsZSxpZFtpbmRleF0pLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6Y29sLFxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaycsXFxcXG4gICAgfSk7XFxcXG4gICAgfSlcXFxcbiAgICByZXR1cm4gZDtcXFxcbn1cXFxcbiQuZXhwb3J0cy5DYXRlID0gQ2F0ZTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCIwMOmmlumhtVxcXCIsXFxcInBhdGhcXFwiOlxcXCJob21lXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcXFxuICAgIGQucHVzaCh7wqDCoMKgXFxcXG4gICAgICAgIHRpdGxlOiBcXFxcXFxcIuaQnOe0oiBcXFxcXFxcIixcXFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgcHV0TXlWYXIoJ2tleXdvcmQnLGlucHV0KVxcXFxuICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL3BhZ2Uvc2VhcmNoP3BhZ2U9ZnlwYWdlJmt3PVxcXFxcXFwiICsgaW5wdXRcXFxcbiAgICB9KSxcXFxcbiAgICAgICAgwqDCoMKgZGVzYzogXFxcXFxcXCLor7fovpPlhaXmkJzntKLlhbPplK7or41cXFxcXFxcIixcXFxcbiAgICAgICAgwqDCoMKgY29sX3R5cGU6IFxcXFxcXFwiaW5wdXRcXFxcXFxcIixcXFxcbiAgICB9KVxcXFxufTtcXFxcbnZhciBwZz0gTVlfVVJMLnJlcGxhY2UoJ2hpa2VyOi8vZW1wdHkjIycsICcnKTtcXFxcbnZhciB0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpKTsgXFxcXG52YXIgYzE9IFt7dGl0bGU6ICfpppbpobUm57u85ZCIJyxpZDogJzEmMiYzJjQmNScsaW1nOidodHRwczovL2docHJveHkubmV0L2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sczEyNTc4MTAwMy90dWJpYW8vbWFpbi9tb3ZpZS8xMjcuc3ZnJmh0dHBzOi8vZ2hwcm94eS5uZXQvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL3R1Ymlhby9tYWluL21vdmllLzEzNy5zdmcmaHR0cHM6Ly9naHByb3h5Lm5ldC9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbHMxMjU3ODEwMDMvdHViaWFvL21haW4vbW92aWUvMTEzLnN2ZyZodHRwczovL2docHJveHkubmV0L2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sczEyNTc4MTAwMy90dWJpYW8vbWFpbi9tb3ZpZS8xMTQuc3ZnJmh0dHBzOi8vZ2hwcm94eS5uZXQvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL3R1Ymlhby9tYWluL21vdmllLzEyMi5zdmcnfV07XFxcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxcXG4gICAgJC5yZXF1aXJlKFxcXFxcXFwiQ2F0ZVxcXFxcXFwiKS5DYXRlKGMxLCdjMScsZCwnaWNvbl8yX3JvdW5kJyk7XFxcXG5kLnB1c2goe1xcXFxuICAgIGNvbF90eXBlOiAnbGluZScsXFxcXG59LHtcXFxcbiAgICBjb2xfdHlwZTogJ2JpZ19ibGFua19ibG9jaycsXFxcXG59XFxcXG4se1xcXFxuICAgIGNvbF90eXBlOiAnYmlnX2JsYW5rX2Jsb2NrJyxcXFxcbn0pO1xcXFxufVxcXFxudmFyIOWIhuexuz1nZXRNeVZhcignYzEnLCAnMScpO1xcXFxuaWYo5YiG57G7PT0xKXtcXFxcbiQucmVxdWlyZShcXFxcXFxcInZpZGVvXFxcXFxcXCIpXFxcXG59ZWxzZSBpZijliIbnsbs9PTIpe1xcXFxuJC5yZXF1aXJlKFxcXFxcXFwiem9uZ2hlXFxcXFxcXCIpXFxcXG59XFxcXG5cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfMlxcXCIsXFxcIm5hbWVcXFwiOlxcXCLmkJzntKJcXFwiLFxcXCJwYXRoXFxcIjpcXFwic2VhcmNoXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOiBcXFxcbnZhciBkID0gW107XFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXFxcbnZhciBwZz1NWV9VUkwuc3BsaXQoJz0nKVsxXS5yZXBsYWNlKCcma3cnLCcnKTtcXFxcbmlmKE1ZX1BBR0U9PTEpe1xcXFxudmFyIGRhdGE9SlNPTi5wYXJzZShnZXRJdGVtKCdzZWFyY2gnKSkuY29uZmlnO1xcXFxudmFyIHVybF9uPWRhdGFbMF0uYXBpK2RhdGFbMF0ucGxhdGZvcm07XFxcXG5kYXRhLmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgICAgIHZhciB1cmw9ZGF0YS5hcGkrZGF0YS5wbGF0Zm9ybTtcXFxcbiAgICAgICAgaWYoKGRhdGEudGl0bGUhPSfnpo/liKknKSYoIWRhdGEucGxhdGZvcm0uaW5jbHVkZXMoJ3l1ZXBhbycpKSl7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ+aQnOe0ouWIhuexuycsdXJsX24pPT11cmw/c3Ryb25nKGRhdGEudGl0bGUsJ0ZGNjY5OScpOmRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICB1cmw6JCgnJykubGF6eVJ1bGUoKHRpdGxlLHVybCxjYXRlKSA9PiB7XFxcXG4gICAgICAgICAgICAgICBwdXRNeVZhcign5pCc57Si5YiG57G7JywgdXJsKTtcXFxcbiAgICAgICAgICAgICAgIHB1dE15VmFyKCfmkJzntKLliIbnsbvlkI0nLHRpdGxlKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxcXG4gICAgICAgICAgICB9LGRhdGEudGl0bGUsdXJsLCfmkJzntKLliIbnsbsnKSxcXFxcbiAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcXFxuICAgICAgICAgICBleHRyYTp7XFxcXG4gICAgICAgICAgICAgIGtleTon5pCc57Si5YiG57G7OiAnK2dldE15VmFyKCfmkJzntKLliIbnsbsnLHVybF9uKSxcXFxcbiAgICAgICAgICAgICAgd29yZDon5pCc57Si5YiG57G75ZCNOiAnK2dldE15VmFyKCfmkJzntKLliIbnsbvlkI0nLCfop4bpopEnKSxcXFxcbiAgICAgICAgICAgICAga2V5d29yZDpnZXRNeVZhcigna2V5d29yZCcpLFxcXFxuICAgICAgICAgIH1cXFxcbiAgICB9KVxcXFxuICAgIH1cXFxcbn0pXFxcXG5kLnB1c2goe1xcXFxuICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJyxcXFxcbiAgICB9KTtcXFxcbnZhciBsaXN0PUpTT04ucGFyc2UoZmV0Y2goZ2V0TXlWYXIoJ+aQnOe0ouWIhuexuycsJ2h0dHA6Ly8wMDMuMjJzLmxvbC9zZWFyY2hjb25maWcvdmlkZW8udHh0JykpKS5zZWFyY2hhcGk7XFxcXG52YXIgdXJsX249J2h0dHBzOi8vYXBpMS55aWx1c2h1bmZlbmcudG9wLycrbGlzdFswXS5wbGF0Zm9ybSsnLnBocCc7XFxcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgICAgIHZhciB1cmw9J2h0dHBzOi8vYXBpMS55aWx1c2h1bmZlbmcudG9wLycrZGF0YS5wbGF0Zm9ybSsnLnBocCc7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoZ2V0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsJ+inhumikScpKyfmkJzntKLliJfooagnLHVybF9uKT09dXJsP3N0cm9uZyhkYXRhLnRpdGxlLCdGRjY2OTknKTpkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgdXJsOiQoJycpLmxhenlSdWxlKCh0aXRsZSx1cmwsY2F0ZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgcHV0TXlWYXIoZ2V0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsJ+inhumikScpKyfmkJzntKLliJfooagnLCB1cmwpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXFxcbiAgICAgICAgICAgIH0sZGF0YS50aXRsZSx1cmwsZ2V0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsJ+inhumikScpKyfmkJzntKLliJfooagnKSxcXFxcbiAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcXFxuICAgICAgICAgICBleHRyYTp7XFxcXG4gICAgICAgICAgICAgIGtleTpnZXRNeVZhcign5pCc57Si5YiG57G75ZCNJywn6KeG6aKRJykrJ+aQnOe0ouWIl+ihqCcsXFxcXG4gICAgICAgICAgICAgIHVybDp1cmwsXFxcXG4gICAgICAgICAgICAgIHd6OmRhdGEucGxhdGZvcm0sXFxcXG4gICAgICAgICAgICAgIGtleXdvcmQ6Z2V0TXlWYXIoJ2tleXdvcmQnKSxcXFxcbiAgICAgICAgICB9XFxcXG4gICAgfSlcXFxcbn0pXFxcXG59XFxcXG52YXIgc2VhcmNoX3VybD1nZXRNeVZhcihnZXRNeVZhcign5pCc57Si5YiG57G75ZCNJywn6KeG6aKRJykrJ+aQnOe0ouWIl+ihqCcsdXJsX24pKyc/a2V5d29yZD0nK2dldE15VmFyKCdrZXl3b3JkJykrJyZwYWdlPScrcGc7XFxcXG4vL2xvZyhzZWFyY2hfdXJsKVxcXFxudmFyIGhvc3Q9c2VhcmNoX3VybC5zcGxpdCgnPycpWzBdO1xcXFxudHJ5e1xcXFxuaWYoZ2V0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsJ+inhumikScpPT0n6KeG6aKRJyl7XFxcXG52YXIgQXJyPVsnbHVzaXInLCc1MWxpZXFpJywndGFuZ3RvdXRpYW8nLCc1MGR1JywndGlrdG9rJywneGluZ2JhJywnYW53YW5namllbWknLCdxaXlvdScsJ2Nhb2xpdXNoZXF1JywnOTFwYW9mdScsJ21laXJpZGFzYWknLCdwb3JuaHViJywnZG91eWlubWF4JywnNTFsdW9saScsJzkxcG9ybl9zZmt0dicsJ3NodWlndW9wYWknLCdzaWZhbmdrdHYnLCd3ZWltaXF1YW4nLCdoZWlsaWFvYmR5JywnNTFjaGlndWEnXTtcXFxcbnZhciBCcnI9WydsdXR1YmUnXTtcXFxcbnZhciBDcnI9WydpbnMnXTtcXFxcbnZhciBwbGF0Zm9ybT1ob3N0Lm1hdGNoKC90b3BcXFxcXFxcXC8uKlxcXFxcXFxcLnBocC8pWzBdLnNwbGl0KCcucGhwJylbMF0uc3BsaXQoJy8nKVsyXTtcXFxcbi8vbG9nKHBsYXRmb3JtKVxcXFxudmFyIGl0ZW09SlNPTi5wYXJzZShmZXRjaChzZWFyY2hfdXJsKSkudmlkZW9zO1xcXFxuaXRlbS5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgIGlmKEFyci5pbmNsdWRlcyhwbGF0Zm9ybSkpe1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZWRfZGF0ZT09bnVsbD8nJzpkYXRhLmNyZWF0ZWRfZGF0ZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSksXFxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UrbGF6eSxcXFxcbiAgICAgICAgICAgIHVybDogaG9zdCsnP2lkPScrZGF0YS5pZCt2b2QsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMicsXFxcXG4gICAgICAgICAgICBleHRyYTp7XFxcXG4gICAgICAgICAgICAgIGlkOmRhdGEuaWQsXFxcXG4gICAgICAgICAgfVxcXFxuICAgICAgICB9KVxcXFxuICAgIH1lbHNlIGlmKEJyci5pbmNsdWRlcyhwbGF0Zm9ybSkpe1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZWRfZGF0ZT09bnVsbD8nJzpkYXRhLmNyZWF0ZWRfZGF0ZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSksXFxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UrbHVsYXp5LFxcXFxuICAgICAgICAgICAgdXJsOiBob3N0Kyc/aWQ9JytkYXRhLmlkK3ZvZCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcXFxuICAgICAgICB9KVxcXFxuICAgIH1lbHNlIGlmKENyci5pbmNsdWRlcyhwbGF0Zm9ybSkpe1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZWRfZGF0ZT09bnVsbD8nJzpkYXRhLmNyZWF0ZWRfZGF0ZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSksXFxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UraW5zbGF6eSxcXFxcbiAgICAgICAgICAgIHVybDogaG9zdCsnP2lkPScrZGF0YS5pZCt2b2QsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9ZWxzZXtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgZGVzYzooZGF0YS5jcmVhdGVkX2RhdGU9PW51bGw/Jyc6ZGF0YS5jcmVhdGVkX2RhdGUpKycgICcrKGRhdGEuZGF0ZT09bnVsbD8nJzpkYXRhLmRhdGUpLFxcXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlLFxcXFxuICAgICAgICAgICAgdXJsOiBob3N0Kyc/aWQ9JytkYXRhLmlkK3ZvZCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcXFxuICAgICAgICB9KVxcXFxuICAgICAgICB9XFxcXG4gICAgfSlcXFxcbn1lbHNlIGlmKGdldE15VmFyKCfmkJzntKLliIbnsbvlkI0nLCfop4bpopEnKT09J+WFqOe9keegtOinoycpe1xcXFxuICAgIHZhciBBcnI9Wyd0dHQnLCdsb2Fud29yZCcsJ2xvYW53b3JkXzInLCc5MXNob3J0Jywnc2Vwb25lJywnbHVzaXInLCdjYXBlJywnZGVncmVlJywnYnVybWEnXTtcXFxcbiAgdmFyIHBsYXRmb3JtPWhvc3QubWF0Y2goL3RvcFxcXFxcXFxcLy4qXFxcXFxcXFwucGhwLylbMF0uc3BsaXQoJy5waHAnKVswXS5zcGxpdCgnLycpWzRdO1xcXFxuICB2YXIgaXRlbT1KU09OLnBhcnNlKGZldGNoKHNlYXJjaF91cmwpKS52aWRlb3M7XFxcXG4gLy8gbG9nKGl0ZW0pXFxcXG5pdGVtLmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgaWYoQXJyLmluY2x1ZGVzKHBsYXRmb3JtKSl7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZStsYXp5LFxcXFxuICAgICAgICAgICAgdXJsOiBob3N0Kyc/aWQ9JytkYXRhLmlkK3ZvZCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcXFxuICAgICAgICB9KVxcXFxuICAgIH1lbHNle1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KVxcXFxufWVsc2UgaWYoZ2V0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsJ+inhumikScpPT0n55+t6KeG6aKRJyl7XFxcXG4gICAgdmFyIEFycj1bJ3Rpa3RvazE4bmV3JywnOTFkc3B3ZWInLCdkb3V5aW5tYXgnLCc5MXBvcm5fc2lmYW5na3R2JywnZmFudGFzaSddO1xcXFxuICB2YXIgcGxhdGZvcm09aG9zdC5tYXRjaCgvdG9wXFxcXFxcXFwvLipcXFxcXFxcXC5waHAvKVswXS5zcGxpdCgnLnBocCcpWzBdLnNwbGl0KCcvJylbMl07XFxcXG4gIHZhciBpdGVtPUpTT04ucGFyc2UoZmV0Y2goc2VhcmNoX3VybCkpLnZpZGVvcztcXFxcbiAvLyBsb2coaXRlbSlcXFxcbml0ZW0uZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICBpZihBcnIuaW5jbHVkZXMocGxhdGZvcm0pKXtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlK2xhenksXFxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZWRfZGF0ZT09bnVsbD8nJzpkYXRhLmNyZWF0ZWRfZGF0ZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSksXFxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxcXG4gICAgICAgIH0pXFxcXG4gICAgfWVsc2V7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIGRlc2M6KGRhdGEuY3JlYXRlZF9kYXRlPT1udWxsPycnOmRhdGEuY3JlYXRlZF9kYXRlKSsnICAnKyhkYXRhLmRhdGU9PW51bGw/Jyc6ZGF0YS5kYXRlKSxcXFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZSxcXFxcbiAgICAgICAgICAgIHVybDogaG9zdCsnP2lkPScrZGF0YS5pZCt2b2QsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pXFxcXG59ZWxzZSBpZihnZXRNeVZhcign5pCc57Si5YiG57G7JykuaW5jbHVkZXMoJ2FjdHJlc3MnKXwoZ2V0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsJ+inhumikScpPT0n55Wq5Y+3Jyl8KGdldE15VmFyKCfmkJzntKLliIbnsbvlkI0nLCfop4bpopEnKT09J+S4iee6pycpKXtcXFxcbiAgICB2YXIgQXJyPVsnc2h1aWd1b3BhaSddO1xcXFxuICB2YXIgcGxhdGZvcm09aG9zdC5tYXRjaCgvdG9wXFxcXFxcXFwvLipcXFxcXFxcXC5waHAvKVswXS5zcGxpdCgnLnBocCcpWzBdLnNwbGl0KCcvJylbMl07XFxcXG4gIHZhciBpdGVtPUpTT04ucGFyc2UoZmV0Y2goc2VhcmNoX3VybCkpLnZpZGVvcztcXFxcbiAvLyBsb2coaXRlbSlcXFxcbml0ZW0uZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICBpZihBcnIuaW5jbHVkZXMocGxhdGZvcm0pKXtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlK2xhenksXFxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZWRfZGF0ZT09bnVsbD8nJzpkYXRhLmNyZWF0ZWRfZGF0ZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSksXFxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxcXG4gICAgICAgIH0pXFxcXG4gICAgfWVsc2V7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIGRlc2M6KGRhdGEuY3JlYXRlZF9kYXRlPT1udWxsPycnOmRhdGEuY3JlYXRlZF9kYXRlKSsnICAnKyhkYXRhLmRhdGU9PW51bGw/Jyc6ZGF0YS5kYXRlKSxcXFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZSxcXFxcbiAgICAgICAgICAgIHVybDogaG9zdCsnP2lkPScrZGF0YS5pZCt2b2QsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pXFxcXG59ZWxzZSBpZihnZXRNeVZhcign5pCc57Si5YiG57G75ZCNJywn6KeG6aKRJyk9PSflkIPnk5wnKXtcXFxcbiAgdmFyIHd6PWhvc3QubWF0Y2goL3RvcFxcXFxcXFxcLy4qXFxcXFxcXFwucGhwLylbMF0uc3BsaXQoJy5waHAnKVswXS5zcGxpdCgnLycpWzNdO1xcXFxuICB2YXIgbGlzdD1KU09OLnBhcnNlKGZldGNoKHNlYXJjaF91cmwpKS52aWRlb3M7XFxcXG4gLy8gbG9nKGl0ZW0pXFxcXG5pZih3ej09J2hhaWppYW8nKXtcXFxcbiAgICBsaXN0LmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIGRlc2M6IGRhdGEuZGF0ZSxcXFxcbiAgICAgICAgICAgIGltZzogIGRhdGEuaW1hZ2UgKyBcXFxcXFxcIkBqcz1cXFxcXFxcIiArICQudG9TdHJpbmcoKHJ1bGUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hZXM/cnVsZT1cXFxcXFxcIiArIHJ1bGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbWFnZS5pbWFnZURlY3J5cHQoKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIE1ZX1JVTEUudGl0bGUpLFxcXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9ibGFja2VyamkxXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidwaWNfMScsXFxcXG4gICAgICAgICAgICBleHRyYTp7XFxcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7aG9zdH0/aWQ9JHtkYXRhLmlkfWAsXFxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcXFxuICAgICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcbiB9KVxcXFxufWVsc2V7XFxcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIGRlc2M6IGRhdGEuZGF0ZSxcXFxcbiAgICAgICAgICAgIGltZzogKCh3ej09JzUxY2cnKXwod3o9PSdobGJkeScpfCh3ej09J3Rpa3RvazE4JykpPyhkYXRhLmltYWdlK2xhenkpOmRhdGEuaW1hZ2UsXFxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2JsYWNrZXJqaTFcXFxcXFxcIiknLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3BpY18xJyxcXFxcbiAgICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgaG9zdDpgJHtob3N0fT9pZD0ke2RhdGEuaWR9YCxcXFxcbiAgICAgICAgICAgICAgd3o6d3osXFxcXG4gICAgICAgICAgfVxcXFxuICAgICAgICB9KVxcXFxuIH0pXFxcXG4gfVxcXFxufWVsc2UgaWYoZ2V0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsJ+inhumikScpPT0n5bCP6K+0Jyl7XFxcXG4gIHZhciB3ej1ob3N0Lm1hdGNoKC90b3BcXFxcXFxcXC8uKlxcXFxcXFxcLnBocC8pWzBdLnNwbGl0KCcucGhwJylbMF0uc3BsaXQoJy8nKVszXTtcXFxcbiAgdmFyIGxpc3Q9SlNPTi5wYXJzZShmZXRjaChzZWFyY2hfdXJsKSkudmlkZW9zO1xcXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3hpYW9zaHVvZXJqaTFcXFxcXFxcIiknLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMScsXFxcXG4gICAgICAgICAgICBleHRyYTp7XFxcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7aG9zdH0/aWQ9JHtkYXRhLmlkfWAsXFxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcXFxuICAgICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcbiB9KVxcXFxufWVsc2UgaWYoZ2V0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsJ+inhumikScpPT0n5ryr55S7Jyl7XFxcXG4gIHZhciB3ej1ob3N0Lm1hdGNoKC90b3BcXFxcXFxcXC8uKlxcXFxcXFxcLnBocC8pWzBdLnNwbGl0KCcucGhwJylbMF0uc3BsaXQoJy8nKVsyXTtcXFxcbiAgdmFyIGxpc3Q9SlNPTi5wYXJzZShmZXRjaChzZWFyY2hfdXJsKSkudmlkZW9zO1xcXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICBkZXNjOiBkYXRhLmRhdGUsXFxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL21hbmh1YWVyamkxXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8zJyxcXFxcbiAgICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgaG9zdDpgJHtob3N0fT9pZD0ke2RhdGEuaWR9YCxcXFxcbiAgICAgICAgICAgICAgd3o6d3osXFxcXG4gICAgICAgICAgfVxcXFxuICAgICAgICB9KVxcXFxuIH0pXFxcXG59ZWxzZSBpZihnZXRNeVZhcign5pCc57Si5YiG57G75ZCNJywn6KeG6aKRJyk9PSflm77niYcnKXtcXFxcbiAgdmFyIHd6PWhvc3QubWF0Y2goL3RvcFxcXFxcXFxcLy4qXFxcXFxcXFwucGhwLylbMF0uc3BsaXQoJy5waHAnKVswXS5zcGxpdCgnLycpWzJdO1xcXFxuICB2YXIgbGlzdD1KU09OLnBhcnNlKGZldGNoKHNlYXJjaF91cmwpKS52aWRlb3M7XFxcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIGRlc2M6IGRhdGEuZGF0ZSxcXFxcbiAgICAgICAgICAgIGltZzogd3o9PSd0aWt0b2sxOCc/KGRhdGEuaW1hZ2UrbGF6eSk6ZGF0YS5pbWFnZSxcXFxcbiAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9lbXB0eScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS90dXBpYW5lcmppXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICAgIHVybDogd3o9PSd0dXphYyc/ZGF0YS5pbWFnZTooaG9zdCsnP2lkPScrZGF0YS5pZCtwaWNzKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8zJyxcXFxcbiAgICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgaG9zdDpgJHtob3N0fT9pZD0ke2RhdGEuaWR9YCxcXFxcbiAgICAgICAgICAgICAgd3o6d3osXFxcXG4gICAgICAgICAgfVxcXFxuICAgICAgICB9KVxcXFxuIH0pXFxcXG59XFxcXG59Y2F0Y2goZSl7XFxcXG4gICAgbG9nKGUubWVzc2FnZSlcXFxcbn1cXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIjAy57u85ZCIXFxcIixcXFwicGF0aFxcXCI6XFxcInpvbmdoZVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcXFxudHJ5e1xcXFxuLy9sb2coZ2V0SXRlbSgnZGF0YScpKVxcXFxuXFxcXG4gLy8gdmFyIGxpc3Q9Z2V0SXRlbSgnZGF0YScpLnNwbGl0KCfnu7zlkIjmlbDmja7lvIDlp4snKVsxXS5zcGxpdCgn57u85ZCI5pWw5o2u57uT5p2fJylbMF0uc3BsaXQoJ+aNouihjCcpO1xcXFxuIHZhciBsaXN0PWdldEl0ZW0oJ2RhdGEnKS5zcGxpdCgn57u85ZCI5pWw5o2u5byA5aeLJylbMV0uc3BsaXQoJ0FW55m+56eRJylbMF0ucmVwbGFjZSgv5YiG5Ymy57q/L2csJ+aNouihjCcpLnNwbGl0KCfmjaLooYwnKTtcXFxcbiAgbGlzdC5mb3JFYWNoKGRhdGE9PntcXFxcbiAgICAgIHZhciBxZD1zcChkYXRhLCBcXFxcXFxcInFkKFxcXFxcXFwiLCBcXFxcXFxcIilcXFxcXFxcIik7XFxcXG4gICAgICB2YXIgdHA9c3AoZGF0YSwgXFxcXFxcXCJ0cChcXFxcXFxcIiwgXFxcXFxcXCIpXFxcXFxcXCIpO1xcXFxuICAgICAgdmFyIG1jPXNwKGRhdGEsIFxcXFxcXFwibWMoXFxcXFxcXCIsIFxcXFxcXFwiKVxcXFxcXFwiKTtcXFxcbiAgICAgIHZhciB3ej1zcChkYXRhLCBcXFxcXFxcImdqYyhcXFxcXFxcIiwgXFxcXFxcXCIpXFxcXFxcXCIpO1xcXFxuICAgICAgdmFyIHltPXNwKGRhdGEsIFxcXFxcXFwieW0oXFxcXFxcXCIsIFxcXFxcXFwiKVxcXFxcXFwiKTtcXFxcbiAgICAgIHZhciBseD1zcChkYXRhLCBcXFxcXFxcImx4KFxcXFxcXFwiLCBcXFxcXFxcIilcXFxcXFxcIik7XFxcXG4gICAgICB2YXIgcWI9cWQrJyAgJyttYysnICAnK3d6KycgICcreW0rJyAgJytseDtcXFxcbiAgICAgIGlmKGx4PT0n5LqM57qn6I+c5Y2VJyl7XFxcXG4gICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgIHRpdGxlOm1jLFxcXFxuICAgICAgICAgIGRlc2M6cWIsXFxcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjIycrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS92aWRlb2VyamlcXFxcXFxcIiknLFxcXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCcsXFxcXG4gICAgICAgICAgZXh0cmE6e1xcXFxuICAgICAgICAgICAgICBob3N0OmAke3ltfS8ke3d6fS5waHBgLFxcXFxuICAgICAgICAgICAgICB3ejp3eixcXFxcbiAgICAgICAgICB9XFxcXG4gICAgICB9KVxcXFxuICAgICAgfWVsc2UgaWYobHg9PSfpu5HmlpknKXtcXFxcbiAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgIHRpdGxlOm1jLFxcXFxuICAgICAgICAgIGRlc2M6cWIsXFxcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9ibGFja2VyamlcXFxcXFxcIiknLFxcXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCcsXFxcXG4gICAgICAgICAgZXh0cmE6e1xcXFxuICAgICAgICAgICAgICBob3N0OmAke3ltfS8ke3d6fS5waHBgLFxcXFxuICAgICAgICAgICAgICB3ejp3eixcXFxcbiAgICAgICAgICB9XFxcXG4gICAgICB9KVxcXFxuICAgICAgfWVsc2UgaWYobHg9PSflm73lhoXnm7Tmkq0nKXtcXFxcbiAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgIHRpdGxlOm1jLFxcXFxuICAgICAgICAgIGRlc2M6cWIsXFxcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjIycrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS96aGlib2VyamlcXFxcXFxcIiknLFxcXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCcsXFxcXG4gICAgICAgICAgZXh0cmE6e1xcXFxuICAgICAgICAgICAgICBob3N0OmAke3ltfS8ke3d6fS5waHBgLFxcXFxuICAgICAgICAgICAgICB3ejp3eixcXFxcbiAgICAgICAgICB9XFxcXG4gICAgICB9KVxcXFxuICAgICAgfWVsc2UgaWYoKGx4PT0n5Zu95aSW55u05pKtJyl8KGx4PT0n6KeG6aKRJykpe1xcXFxuICAgICAgICAgIGlmKCFtYy5pbmNsdWRlcygn5YWo572R5pCcJykpe1xcXFxuICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgdGl0bGU6bWMsXFxcXG4gICAgICAgICAgZGVzYzpxYixcXFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3N5dmlkZW9cXFxcXFxcIiknLFxcXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCcsXFxcXG4gICAgICAgICAgZXh0cmE6e1xcXFxuICAgICAgICAgICAgICBob3N0OmAke3ltfS8ke3d6fS5waHBgLFxcXFxuICAgICAgICAgICAgICB3ejp3eixcXFxcbiAgICAgICAgICB9XFxcXG4gICAgICB9KVxcXFxuICAgICAgfVxcXFxuICAgICAgfWVsc2UgaWYobHguaW5jbHVkZXMoJ+WlsycpJmx4LmluY2x1ZGVzKCfkvJgnKSYod3ohPSdtaXNzYXYnKSl7XFxcXG4gICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICB0aXRsZTptYyxcXFxcbiAgICAgICAgICBkZXNjOnFiLFxcXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvbnZ5b3VlcmppXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnLFxcXFxuICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgaG9zdDpgJHt5bX0vJHt3en0ucGhwYCxcXFxcbiAgICAgICAgICAgICAgd3o6d3osXFxcXG4gICAgICAgICAgfVxcXFxuICAgICAgICAgIH0pXFxcXG4gICAgICB9ZWxzZSBpZihseD09J+W4luWtkCcpe1xcXFxuICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgdGl0bGU6bWMsXFxcXG4gICAgICAgICAgZGVzYzpxYixcXFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3RpZWVyamlcXFxcXFxcIiknLFxcXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCcsXFxcXG4gICAgICAgICAgZXh0cmE6e1xcXFxuICAgICAgICAgICAgICBob3N0OmAke3ltfS8ke3d6fS5waHBgLFxcXFxuICAgICAgICAgICAgICB3ejp3eixcXFxcbiAgICAgICAgICB9XFxcXG4gICAgICAgICAgfSlcXFxcbiAgICAgIH1lbHNlIGlmKGx4PT0n55u05pKtJyl7XFxcXG4gICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICB0aXRsZTptYyxcXFxcbiAgICAgICAgICBkZXNjOnFiLFxcXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5JysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3poaWJvanVoZWVyamlcXFxcXFxcIiknLFxcXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCcsXFxcXG4gICAgICAgICAgZXh0cmE6e1xcXFxuICAgICAgICAgICAgICB3ejptYyxcXFxcbiAgICAgICAgICB9XFxcXG4gICAgICB9KVxcXFxuICAgICAgfWVsc2UgaWYobHg9PSfmvKvnlLsnKXtcXFxcbiAgICAgICAgICBpZihtYz09J+eMq+WSqua8q+eUuycpe1xcXFxuICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICB0aXRsZTptYyxcXFxcbiAgICAgICAgICBkZXNjOnFiLFxcXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvbWFvbWltYW5odWFcXFxcXFxcIiknLFxcXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCdcXFxcbiAgICAgIH0pXFxcXG4gICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICB0aXRsZTptYyxcXFxcbiAgICAgICAgICBkZXNjOnFiLFxcXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvbWFuaHVhZXJqaVxcXFxcXFwiKScsXFxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJyxcXFxcbiAgICAgICAgICBleHRyYTp7XFxcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7eW19LyR7d3p9LnBocGAsXFxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcXFxuICAgICAgICAgIH1cXFxcbiAgICAgIH0pXFxcXG4gICAgIH1cXFxcbiAgICAgIH1lbHNlIGlmKGx4PT0n5bCP6K+0Jyl7XFxcXG4gICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICB0aXRsZTptYyxcXFxcbiAgICAgICAgICBkZXNjOnFiLFxcXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UveGlhb3NodW9lcmppXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnLFxcXFxuICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgaG9zdDpgJHt5bX0vJHt3en0ucGhwYCxcXFxcbiAgICAgICAgICAgICAgd3o6d3osXFxcXG4gICAgICAgICAgfVxcXFxuICAgICAgfSlcXFxcbiAgICAgIH1lbHNlIGlmKGx4PT0n5Zu+54mHJyl7XFxcXG4gICAgICAgICAgaWYobWM9PSfnjKvlkqrnvo7lm74nKXtcXFxcbiAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgIHRpdGxlOm1jLFxcXFxuICAgICAgICAgIGRlc2M6cWIsXFxcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9tYW9taW1laXR1XFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnXFxcXG4gICAgICAgICAgfSlcXFxcbiAgICAgICAgICB9ZWxzZSBpZihtYyE9J+e+juWbvuiJsuWbvicpe1xcXFxuICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgdGl0bGU6bWMsXFxcXG4gICAgICAgICAgZGVzYzpxYixcXFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3BpY2VyamlcXFxcXFxcIiknLFxcXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCcsXFxcXG4gICAgICAgICAgZXh0cmE6e1xcXFxuICAgICAgICAgICAgICBob3N0OmAke3ltfS8ke3d6fS5waHBgLFxcXFxuICAgICAgICAgICAgICB3ejp3eixcXFxcbiAgICAgICAgICB9XFxcXG4gICAgICAgICAgfSlcXFxcbiAgICAgICAgICB9XFxcXG4gICAgICB9ZWxzZSBpZihseD09J+acieWjsOWwj+ivtCcpe1xcXFxuICAgICAgICAgIGlmKG1jPT0n54yr5ZKqRk0nKXtcXFxcbiAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgIHRpdGxlOm1jLFxcXFxuICAgICAgICAgIGRlc2M6cWIsXFxcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9tYW9taUZNXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnXFxcXG4gICAgICAgICAgfSlcXFxcbiAgICAgICAgICB9XFxcXG4gICAgICB9XFxcXG4gIH0pXFxcXG4vKlxcXFxudmFyIHppeW9uZz1nZXRJdGVtKCdkYXRhJykucmVwbGFjZSgnLScsJycpLnNwbGl0KCfliIblibLnur8nKVsxXS5zcGxpdCgn5o2i6KGMJyk7XFxcXG4gIHppeW9uZy5mb3JFYWNoKGRhdGE9PntcXFxcbiAgICAgIHZhciBxZD1zcChkYXRhLCBcXFxcXFxcInFkKFxcXFxcXFwiLCBcXFxcXFxcIilcXFxcXFxcIik7XFxcXG4gICAgICB2YXIgdHA9c3AoZGF0YSwgXFxcXFxcXCJ0cChcXFxcXFxcIiwgXFxcXFxcXCIpXFxcXFxcXCIpO1xcXFxuICAgICAgdmFyIG1jPXNwKGRhdGEsIFxcXFxcXFwibWMoXFxcXFxcXCIsIFxcXFxcXFwiKVxcXFxcXFwiKTtcXFxcbiAgICAgIHZhciB3ej1zcChkYXRhLCBcXFxcXFxcImdqYyhcXFxcXFxcIiwgXFxcXFxcXCIpXFxcXFxcXCIpO1xcXFxuICAgICAgdmFyIHltPXNwKGRhdGEsIFxcXFxcXFwieW0oXFxcXFxcXCIsIFxcXFxcXFwiKVxcXFxcXFwiKTtcXFxcbiAgICAgIHZhciBseD1zcChkYXRhLCBcXFxcXFxcImx4KFxcXFxcXFwiLCBcXFxcXFxcIilcXFxcXFxcIik7XFxcXG4gICAgICB2YXIgcWI9cWQrJyAgJyttYysnICAnK3d6KycgICcreW0rJyAgJytseDtcXFxcbiAgICAgIGlmKG1jLmluY2x1ZGVzKCfpibTotY8nKSl7XFxcXG4gICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICB0aXRsZTptYyxcXFxcbiAgICAgICAgICBkZXNjOnFiLFxcXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9lcmppXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnLFxcXFxuICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgaG9zdDpgJHt5bX0vJHt3en0ucGhwYCxcXFxcbiAgICAgICAgICAgICAgd3o6d3osXFxcXG4gICAgICAgICAgfVxcXFxuICAgICAgfSlcXFxcbiAgICAgIH1cXFxcbiAgICAgIH0pXFxcXG4gICAgICAqL1xcXFxufWNhdGNoKGUpe1xcXFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzJcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6KeG6aKR5YiG57G7XFxcIixcXFwicGF0aFxcXCI6XFxcInZpZGVvZXJqaVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczogXFxcXG52YXIgZCA9IFtdO1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxcXG50cnl7XFxcXG5sZXQgaG9zdD1NWV9QQVJBTVMuaG9zdC5yZXBsYWNlKCdodHRwOi8vYXBpLnBocGppZWtvdS50b3AnLCdodHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcCcpO1xcXFxudmFyIHd6PU1ZX1BBUkFNUy53ejtcXFxcbnZhciDop4bpopHliIbnsbs9ZmV0Y2goaG9zdCsnP2dldHNvcnQnKVxcXFxubGV0IGRhdGE9IEpTT04ucGFyc2Uo6KeG6aKR5YiG57G7KTtcXFxcbi8vbG9nKGRhdGEpXFxcXG52YXIga2V5cz1PYmplY3Qua2V5cyhkYXRhKS5zbGljZSgyKTtcXFxcbi8vbG9nKGtleXMpXFxcXG52YXIga2V5X249a2V5c1swXTtcXFxcbmtleXMuZm9yRWFjaChrZXkgPT4ge1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ+inhumikeWIhuexuycrd3osa2V5X24pPT1rZXk/c3Ryb25nKGtleSwnRkY2Njk5Jyk6a2V5LFxcXFxuICAgICAgICAgICAgdXJsOiQoa2V5KS5sYXp5UnVsZSgoa2V5LHd6KSA9PiB7XFxcXG4gICAgICAgICAgICAgICBwdXRNeVZhcign6KeG6aKR5YiG57G7Jyt3eiwgaW5wdXQpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXFxcbiAgICAgICAgICAgIH0sIGtleSx3eiksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxcXG4gICAgfSlcXFxcbiAgICB9KVxcXFxuZGF0YVtnZXRNeVZhcign6KeG6aKR5YiG57G7Jyt3eixrZXlfbildLmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS92b2RlcmppMVxcXFxcXFwiKScsXFxcXG4gICAgICAgICAgIGNvbF90eXBlOid0ZXh0XzMnLFxcXFxuICAgICAgICAgICBleHRyYTp7XFxcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7aG9zdH0/c29ydD0ke2RhdGEuaWR9JnBhZ2U9YCxcXFxcbiAgICAgICAgICAgICAgd3o6d3osXFxcXG4gICAgICAgICAgfVxcXFxuICAgIH0pXFxcXG59KVxcXFxufWNhdGNoKGUpe1xcXFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxcXG4gICAgdG9hc3QoJ+eci+S4jeS6hicpXFxcXG59XFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwidGV4dF80XFxcIixcXFwibmFtZVxcXCI6XFxcIuinhumikeS6jOe6p1xcXCIsXFxcInBhdGhcXFwiOlxcXCJ2b2RlcmppMVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkPVtdO1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSlcXFxcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbMV1cXFxcbnZhciBob3N0PU1ZX1BBUkFNUy5ob3N0K3BnO1xcXFxudmFyIHVybD1ob3N0LnNwbGl0KCc/JylbMF07XFxcXG52YXIgd3o9TVlfUEFSQU1TLnd6O1xcXFxudHJ5e1xcXFxuICAgIHZhciBsaXN0PSBKU09OLnBhcnNlKGZldGNoKGhvc3QpKS52aWRlb3M7XFxcXG4gIC8vICBsb2cobGlzdClcXFxcbmlmKCh3ej09J3hiaycpfCh3ej09J21kJykpe1xcXFxuICAgIGxpc3QuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgZGVzYzooZGF0YS5jcmVhdGVkX2RhdGU9PW51bGw/Jyc6ZGF0YS5jcmVhdGVkX2RhdGUpKycgICcrKGRhdGEuZGF0ZT09bnVsbD8nJzpkYXRhLmRhdGUpLFxcXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlLFxcXFxuICAgICAgICAgICAgdXJsOiB1cmwrJz9pZD0nK2RhdGEuaWQrdm9kLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxcXG4gICAgICAgIH0pXFxcXG4gfSlcXFxcbn1lbHNlIGlmKHd6PT0nbWFvbWknKXtcXFxcbiAgICBsaXN0LmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIGRlc2M6KGRhdGEuY3JlYXRlZF9kYXRlPT1udWxsPycnOmRhdGEuY3JlYXRlZF9kYXRlKSsnICAnKyhkYXRhLmRhdGU9PW51bGw/Jyc6ZGF0YS5kYXRlKSxcXFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZSxcXFxcbiAgICAgICAgICAgIHVybDogdXJsKyc/aWQ9JytkYXRhLmlkK3ZvZCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcXFxuICAgIH0pXFxcXG4gfSlcXFxcbn1lbHNlIGlmKHd6PT0neGNsJyl7XFxcXG4gICAgbGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZWRfZGF0ZT09bnVsbD8nJzpkYXRhLmNyZWF0ZWRfZGF0ZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSksXFxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxcXG4gICAgICAgICAgICB1cmw6IHVybCsnP2lkPScrZGF0YS5pZCt2b2QsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXFxcbiAgICB9KVxcXFxuIH0pXFxcXG59ZWxzZSBpZih3ej09J3Fpc2VtYW8nKXtcXFxcbiAgICBsaXN0LmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIGRlc2M6ZGF0YS5kdXJhdGlvbixcXFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZSxcXFxcbiAgICAgICAgICAgIHVybDogdXJsKyc/aWQ9JytkYXRhLmlkK3ZvZCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcXFxuICAgIH0pXFxcXG4gfSlcXFxcbn1lbHNlIGlmKHd6PT0nOTFwZicpe1xcXFxuICAgIGxpc3QuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgZGVzYzpwYXJzZUludChkYXRhLmR1cmF0aW9uLzYwKSsnOicrcGFyc2VJbnQoZGF0YS5kdXJhdGlvbiU2MCksXFxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UrbGF6eSxcXFxcbiAgICAgICAgICAgIHVybDogdXJsKyc/aWQ9JytkYXRhLmlkK3ZvZCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcXFxuICAgIH0pXFxcXG4gfSlcXFxcbn1lbHNle1xcXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICBkZXNjOiAoZGF0YS5kYXRlLmluY2x1ZGVzKCctJyk/ZGF0YS5kYXRlOmRhdGEuY3JlYXRlZF9kYXRlKSsnXFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0JysoZGF0YS5kdXJhdGlvbj09bnVsbD8nJzpkYXRhLmR1cmF0aW9uKSxcXFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZStsYXp5LFxcXFxuICAgICAgICAgICAgdXJsOiB1cmwrJz9pZD0nK2RhdGEuaWQrdm9kLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxcXG4gICAgICAgIH0pXFxcXG4gfSlcXFxcbiB9XFxcXG4gXFxcXG59Y2F0Y2goZSl7XFxcXG4gICAgbG9nKGUubWVzc2FnZSlcXFxcbiAgICAgdG9hc3QoJ+eci+S4jeS6hicpXFxcXG59XFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfMlxcXCIsXFxcIm5hbWVcXFwiOlxcXCLpu5HmlpnliIbnsbtcXFwiLFxcXCJwYXRoXFxcIjpcXFwiYmxhY2tlcmppXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOiBcXFxcbnZhciBkID0gW107XFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXFxcbnRyeXtcXFxcbmxldCBob3N0PU1ZX1BBUkFNUy5ob3N0LnJlcGxhY2UoJ2h0dHA6Ly9hcGkucGhwamlla291LnRvcCcsJ2h0dHBzOi8vYXBpMS55aWx1c2h1bmZlbmcudG9wJyk7XFxcXG52YXIgd3o9TVlfUEFSQU1TLnd6O1xcXFxudmFyIHBnPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXFxcbmlmKE1ZX1BBR0U9PTEpe1xcXFxudmFyIOm7keaWmeWIhuexuz1mZXRjaChob3N0Kyc/Z2V0c29ydCcpXFxcXG52YXIgZGF0YT0gSlNPTi5wYXJzZSjpu5HmlpnliIbnsbspLmNhdGVnb3JpZXM7XFxcXG52YXIgaW5kZXhfbj1kYXRhWzBdLmlkLnRvU3RyaW5nKCk7XFxcXG5kYXRhLmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ+m7keaWmeWIhuexuycrd3osaW5kZXhfbik9PWRhdGEuaWQudG9TdHJpbmcoKT9zdHJvbmcoZGF0YS50aXRsZSwnRkY2Njk5Jyk6ZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIHVybDokKCcnKS5sYXp5UnVsZSgodGl0bGUsaWQsd3opID0+IHtcXFxcbiAgICAgICAgICAgICAgIHB1dE15VmFyKCfpu5HmlpnliIbnsbsnK3d6LCBpZCk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcXFxuICAgICAgICAgICAgfSxkYXRhLnRpdGxlLGRhdGEuaWQudG9TdHJpbmcoKSx3eiksXFxcXG4gICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJ1xcXFxuICAgIH0pXFxcXG59KVxcXFxufVxcXFxudmFyIGxpc3Q9SlNPTi5wYXJzZShmZXRjaChob3N0Kyc/c29ydD0nK2dldE15VmFyKCfpu5HmlpnliIbnsbsnK3d6LGluZGV4X24pKycmcGFnZT0nK3BnKSkudmlkZW9zO1xcXFxuLy9sb2cobGlzdClcXFxcbmlmKHd6PT0naGFpamlhbycpe1xcXFxuICAgIGxpc3QuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgZGVzYzogZGF0YS5kYXRlLFxcXFxuICAgICAgICAgICAgaW1nOiAgZGF0YS5pbWFnZSArIFxcXFxcXFwiQGpzPVxcXFxcXFwiICsgJC50b1N0cmluZygocnVsZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2Flcz9ydWxlPVxcXFxcXFwiICsgcnVsZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltYWdlLmltYWdlRGVjcnlwdCgpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgTVlfUlVMRS50aXRsZSksXFxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2JsYWNrZXJqaTFcXFxcXFxcIiknLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3BpY18xJyxcXFxcbiAgICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgaG9zdDpgJHtob3N0fT9pZD0ke2RhdGEuaWR9YCxcXFxcbiAgICAgICAgICAgICAgd3o6d3osXFxcXG4gICAgICAgICAgfVxcXFxuICAgICAgICB9KVxcXFxuIH0pXFxcXG59ZWxzZXtcXFxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgZGVzYzogZGF0YS5kYXRlLFxcXFxuICAgICAgICAgICAgaW1nOiAoKHd6PT0nNTFjZycpfCh3ej09J2hsYmR5JykpPyhkYXRhLmltYWdlK2xhenkpOmRhdGEuaW1hZ2UsXFxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2JsYWNrZXJqaTFcXFxcXFxcIiknLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3BpY18xJyxcXFxcbiAgICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgaG9zdDpgJHtob3N0fT9pZD0ke2RhdGEuaWR9YCxcXFxcbiAgICAgICAgICAgICAgd3o6d3osXFxcXG4gICAgICAgICAgfVxcXFxuICAgICAgICB9KVxcXFxuIH0pXFxcXG4gfVxcXFxuIH1jYXRjaChlKXtcXFxcbiAgICAgbG9nKGUubWVzc2FnZSlcXFxcbiB9XFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwidGV4dF80XFxcIixcXFwibmFtZVxcXCI6XFxcIum7keaWmeS6jOe6p1xcXCIsXFxcInBhdGhcXFwiOlxcXCJibGFja2VyamkxXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQ9W107XFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKVxcXFxudmFyIHVybD1NWV9QQVJBTVMuaG9zdDtcXFxcbnZhciB3ej1NWV9QQVJBTVMud3o7XFxcXG50cnl7XFxcXG52YXIgZGF0YT0gSlNPTi5wYXJzZShmZXRjaCh1cmwpKTtcXFxcbi8vbG9nKGRhdGEpXFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTpwZGZoKGRhdGEudGl0bGVDb2RlLCdoMSYmVGV4dCcpPT0nJz9wZGZoKGRhdGEudGl0bGVDb2RlLCdoMiYmVGV4dCcpOnBkZmgoZGF0YS50aXRsZUNvZGUsJ2gxJiZUZXh0JyksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZToncmljaF90ZXh0J1xcXFxuICAgICAgICB9KVxcXFxuICAgICAgICBpZih3ej09J2Nndycpe1xcXFxuICAgICAgICAgICAgdmFyIHZpZGVvcz1kYXRhLnZpZGVvLnJlcGxhY2UoL1xcXFxcXFxcJC9nLCcnKS5zcGxpdCgnQCcpO1xcXFxuICAgICAgICB2YXIgaW1nPWRhdGEuaW1nY29kZS5tYXRjaCgvc3JjXFxcXFxcXFw9XFxcXFxcXFxcXFxcXFxcIi4qP1xcXFxcXFxcXFxcXFxcXCIuKj9hbHQvKVswXS5zcGxpdCgnXFxcXFxcXCInKVsxXTtcXFxcbiAgICB2aWRlb3MuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXFxcbiAgICAgICAgdmFyIG49aW5kZXgrMTtcXFxcbiAgICAgICAgaWYoaXRlbSl7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTon6KeG6aKRJytuLFxcXFxuICAgICAgICAgICAgZGVzYzonMCcsXFxcXG4gICAgICAgICAgICBpbWc6aW1nLFxcXFxuICAgICAgICAgICAgdXJsOml0ZW0ucmVwbGFjZSgn5YiG5YmyJywnJyksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2NhcmRfcGljXzEnLFxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pXFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS5pbWdjb2RlLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3JpY2hfdGV4dCcsXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIH1lbHNlIGlmKHd6PT0nZ3RsJyl7XFxcXG4gICAgICAgIHZhciB2aWRlb3M9ZGF0YS52aWRlby5yZXBsYWNlKC9cXFxcXFxcXCQvZywnJykuc3BsaXQoJ0AnKTtcXFxcbiAgICAgICAgdmFyIGltZz1kYXRhLnBpY0NvZGUubWF0Y2goL3NyY1xcXFxcXFxcPVxcXFxcXFxcXFxcXFxcXCIuKj9cXFxcXFxcXFxcXFxcXFwiLio/YWx0LylbMF0uc3BsaXQoJ1xcXFxcXFwiJylbMV07XFxcXG4gICAgdmlkZW9zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XFxcXG4gICAgICAgIHZhciBuPWluZGV4KzE7XFxcXG4gICAgICAgIGlmKGl0ZW0pe1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6J+inhumikScrbixcXFxcbiAgICAgICAgICAgIGRlc2M6JzAnLFxcXFxuICAgICAgICAgICAgaW1nOmltZyxcXFxcbiAgICAgICAgICAgIHVybDppdGVtLnJlcGxhY2UoJ+WIhuWJsicsJycpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdjYXJkX3BpY18xJyxcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9KVxcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnBpY0NvZGUsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZToncmljaF90ZXh0JyxcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgfWVsc2UgaWYod3o9PSd0aWt0b2sxOCcpe1xcXFxuICAgICAgICB2YXIgdmlkZW9zPWRhdGEudmlkZW8ucmVwbGFjZSgvXFxcXFxcXFwkL2csJycpLnNwbGl0KCdAJyk7XFxcXG4gICAgICAgIHZhciBpbWdzPWRhdGEucGljQ29kZS5yZXBsYWNlKC9cXFxcXFxcXCQvZywnJykuc3BsaXQoJ0DliIblibInKTtcXFxcbiAgICB2aWRlb3MuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXFxcbiAgICAgICAgdmFyIG49aW5kZXgrMTtcXFxcbiAgICAgICAgaWYoaXRlbSl7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTon6KeG6aKRJytuLFxcXFxuICAgICAgICAgICAgZGVzYzonMCcsXFxcXG4gICAgICAgICAgICBpbWc6aW1nc1swXStsYXp5LFxcXFxuICAgICAgICAgICAgdXJsOml0ZW0ucmVwbGFjZSgn5YiG5YmyJywnJyksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2NhcmRfcGljXzEnLFxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pXFxcXG4gICAgICAgIHZhciB0ZXh0cz1kYXRhLmltZ2NvZGUucmVwbGFjZSgvXFxcXFxcXFw8cFxcXFxcXFxcPi8sJyYmJjxwPicpLnJlcGxhY2UoL1xcXFxcXFxcPFxcXFxcXFxcL3BcXFxcXFxcXD4vLCcmJiY8L3A+Jykuc3BsaXQoJyYmJicpO1xcXFxuICAgICAgLy8gIGxvZyh0ZXh0cylcXFxcbiAgICAgICAgdGV4dHMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXFxcbiAgICBpZiAocGRmaChpdGVtLCAncCYmVGV4dCcpKSB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCAncCYmVGV4dCcpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG4gICAgaWYgKHBkZmgoaXRlbSwgJ2gxJiZUZXh0JykpIHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0ZW0sICdwJiZUZXh0JyksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH1cXFxcbiAgICBpZiAocGRmaChpdGVtLCAnaDImJlRleHQnKSkge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgJ3AmJlRleHQnKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0JyxcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfVxcXFxuICAgIH0pXFxcXG4gICAgdmFyIGltZ3M9ZGF0YS5waWNDb2RlLnJlcGxhY2UoL1xcXFxcXFxcJC9nLCcnKS5zcGxpdCgnQOWIhuWJsicpO1xcXFxuICAgIGltZ3MuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXFxcbiAgICAgICAgaWYoaXRlbSl7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICBpbWc6aXRlbStsYXp5LFxcXFxuICAgICAgICAgICAgdXJsOml0ZW0rbGF6eSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncGljXzFfZnVsbCcsXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSlcXFxcbiAgICAgICAgfWVsc2UgaWYod3o9PSc1MWNnJyl7XFxcXG4gICAgICAgIHZhciBuPTBcXFxcbiAgICAgICAgdmFyIHRleHRzPWRhdGEuaW1nY29kZS5yZXBsYWNlKC9wc3R5bGUvZywncCBzdHlsZScpLnJlcGxhY2UoL1xcXFxcXFxcPFxcXFxcXFxcL3AuKj9cXFxcXFxcXD5cXFxcXFxcXDxwLio/XFxcXFxcXFw+L2csJzwvcD4mJjxwPicpLnNwbGl0KCcmJicpO1xcXFxuICAgICAgIC8vIGxvZyh0ZXh0cylcXFxcbiAgICAgICB0ZXh0cy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xcXFxuICAgICAgICAgICBpZihwZGZoKGl0ZW0sJy5kcGxheWVyJiZkYXRhLWNvbmZpZycpIT0nJyl7XFxcXG4gICAgICAgIGxldCB1cmw9SlNPTi5wYXJzZShwZGZoKGl0ZW0sJy5kcGxheWVyJiZkYXRhLWNvbmZpZycpKS52aWRlbztcXFxcbiAgICAgICAgbisrO1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6ICfigJzigJzop4bpopHigJ3igJ0gICcgKyBuLFxcXFxuICAgICAgICAgICAgZGVzYzonMCcsXFxcXG4gICAgICAgICAgICBpbWc6IHVybC5waWMgKyBsYXp5LFxcXFxuICAgICAgICAgICAgdXJsOiB1cmwudXJsLnJlcGxhY2UoL1xcXFxcXFxcL1xcXFxcXFxcLy4qcGxheVxcXFxcXFxcLi8sJy8vbG9uZy4nKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMSdcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgfVxcXFxuICAgICAgIH0pXFxcXG4gICAgICAgdGV4dHMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXFxcbiAgICBpZiAocGRmaChpdGVtLCAncCYmVGV4dCcpKSB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCAncCYmVGV4dCcpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG4gICAgdmFyIGltZ3MgPSBwZGZhKGl0ZW0sICdwJiZpbWcnKS5tYXAoaCA9PiBwZGZoKGgsICdpbWcmJmRhdGEteGtya2xsZ2wnKSk7XFxcXG4gICAgaW1ncy5mb3JFYWNoKGl0ZW0yID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAnJyxcXFxcbiAgICAgICAgICAgIGltZzogaXRlbTIgKyBsYXp5LFxcXFxuICAgICAgICAgICAgdXJsOiBpdGVtMiArIGxhenksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3BpY18xX2Z1bGwnXFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH0pO1xcXFxuICAgIGlmKHBkZmgoaXRlbSwnLmRwbGF5ZXImJmRhdGEtY29uZmlnJykhPScnKXtcXFxcbiAgICAgICAgbGV0IHVybD1KU09OLnBhcnNlKHBkZmgoaXRlbSwnLmRwbGF5ZXImJmRhdGEtY29uZmlnJykpLnZpZGVvO1xcXFxuICAgICAgICBuKys7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOinhumikeKAneKAnSAgJyArIG4sXFxcXG4gICAgICAgICAgICBkZXNjOicwJyxcXFxcbiAgICAgICAgICAgIGltZzogdXJsLnBpYyArIGxhenksXFxcXG4gICAgICAgICAgICB1cmw6IHVybC51cmwucmVwbGFjZSgvXFxcXFxcXFwvXFxcXFxcXFwvLipwbGF5XFxcXFxcXFwuLywnLy9sb25nLicpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdjYXJkX3BpY18xJ1xcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG4gICAgfSlcXFxcbiAgICAgICAgfWVsc2UgaWYod3o9PSdobGJkeScpe1xcXFxuICAgICAgICAgICAgdmFyIG49MFxcXFxuICAgICAgICB2YXIgdGV4dHM9ZGF0YS5waWNDb2RlLnJlcGxhY2UoL1xcXFxcXFxcPFxcXFxcXFxcL3BcXFxcXFxcXD5cXFxcXFxcXG5cXFxcXFxcXDxwXFxcXFxcXFw+L2csJzwvcD4mJjxwPicpLnNwbGl0KCcmJicpO1xcXFxuICAgICAgIC8vIGxvZyh0ZXh0cylcXFxcbiAgICAgICAgIHRleHRzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XFxcXG4gICAgICAgICAgIGlmKHBkZmgoaXRlbSwnLmRwbGF5ZXImJmNvbmZpZycpIT0nJyl7XFxcXG4gICAgICAgIGxldCB1cmw9SlNPTi5wYXJzZShwZGZoKGl0ZW0sJy5kcGxheWVyJiZjb25maWcnKSkudmlkZW87XFxcXG4gICAgICAgIG4rKztcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc6KeG6aKR4oCd4oCdICAnICsgbixcXFxcbiAgICAgICAgICAgIGRlc2M6JzAnLFxcXFxuICAgICAgICAgICAgaW1nOiB1cmwucGljICsgbGF6eSxcXFxcbiAgICAgICAgICAgIHVybDogdXJsLnVybC5yZXBsYWNlKC9cXFxcXFxcXC9cXFxcXFxcXC8uKnBsYXlcXFxcXFxcXC4vLCcvL2xvbmcuJyksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2NhcmRfcGljXzEnXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgIH1cXFxcbiAgICAgICB9KVxcXFxuICAgICAgIHZhciBuPTA7XFxcXG4gICAgICAgdGV4dHMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXFxcbiAgICBpZiAocGRmaChpdGVtLCAncCYmVGV4dCcpKSB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCAncCYmVGV4dCcpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG4gICAgdmFyIGltZ3MgPSBwZGZhKGl0ZW0sICdwJiZpbWcnKS5tYXAoaCA9PiBwZGZoKGgsICdpbWcmJm9ubG9hZCcpKTtcXFxcbiAgICBpbWdzLmZvckVhY2goaXRlbTIgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6ICcnLFxcXFxuICAgICAgICAgICAgaW1nOiBpdGVtMi5zcGxpdChcXFxcXFxcIih0aGlzLCdcXFxcXFxcIilbMV0uc3BsaXQoXFxcXFxcXCInKVxcXFxcXFwiKVswXSArIGxhenksXFxcXG4gICAgICAgICAgICB1cmw6IGl0ZW0yLnNwbGl0KFxcXFxcXFwiKHRoaXMsJ1xcXFxcXFwiKVsxXS5zcGxpdChcXFxcXFxcIicpXFxcXFxcXCIpWzBdICsgbGF6eSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncGljXzFfZnVsbCdcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfSk7XFxcXG4gICAgaWYocGRmaChpdGVtLCcuZHBsYXllciYmY29uZmlnJykhPScnKXtcXFxcbiAgICAgICAgbGV0IHVybD1KU09OLnBhcnNlKHBkZmgoaXRlbSwnLmRwbGF5ZXImJmNvbmZpZycpKS52aWRlbztcXFxcbiAgICAgICAgbisrO1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6ICfigJzigJzop4bpopHigJ3igJ0gICcgKyBuLFxcXFxuICAgICAgICAgICAgZGVzYzonMCcsXFxcXG4gICAgICAgICAgICBpbWc6IHVybC5waWMgKyBsYXp5LFxcXFxuICAgICAgICAgICAgdXJsOiB1cmwudXJsLnJlcGxhY2UoL1xcXFxcXFxcL1xcXFxcXFxcLy4qcGxheVxcXFxcXFxcLi8sJy8vbG9uZy4nKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMSdcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgfVxcXFxuICAgIH0pXFxcXG4gICAgICAgIH1lbHNlIGlmKHd6PT0naGFpamlhbycpe1xcXFxuICAgICAgICAgICAgdHJ5e1xcXFxuICAgICAgICAgICAgdmFyIHZpZGVvcz1kYXRhLnZpZGVvLnJlcGxhY2UoL1xcXFxcXFxcJC9nLCcnKS5zcGxpdCgnQCcpO1xcXFxuICAgICAgICB2YXIgaW1nPWRhdGEucGljQ29kZS5tYXRjaCgveGtya2xsZ2xcXFxcXFxcXD1cXFxcXFxcXFxcXFxcXFwiLio/XFxcXFxcXFxcXFxcXFxcIi4qP2FsdC8pWzBdLnNwbGl0KCdcXFxcXFxcIicpWzFdO1xcXFxuICAgIHZpZGVvcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xcXFxuICAgICAgICB2YXIgbj1pbmRleCsxO1xcXFxuICAgICAgICBpZihpdGVtKXtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOifop4bpopEnK24sXFxcXG4gICAgICAgICAgICBkZXNjOicwJyxcXFxcbiAgICAgICAgICAgIGltZzppbWcrIFxcXFxcXFwiQGpzPVxcXFxcXFwiICsgJC50b1N0cmluZygocnVsZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2Flcz9ydWxlPVxcXFxcXFwiICsgcnVsZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltYWdlLmltYWdlRGVjcnlwdCgpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgTVlfUlVMRS50aXRsZSksXFxcXG4gICAgICAgICAgICB1cmw6aXRlbS5yZXBsYWNlKCfliIblibInLCcnKSsnI2lzVmlkZW89dHJ1ZSMnLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdjYXJkX3BpY18xJyxcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9KVxcXFxuICAgICAgICB2YXIgdGV4dHM9ZGF0YS5waWNDb2RlLnJlcGxhY2UoL3BzdHlsZS9nLCdwIHN0eWxlJykucmVwbGFjZSgvXFxcXFxcXFw8XFxcXFxcXFwvcFxcXFxcXFxcPi9nLCc8L3A+JiYnKS5zcGxpdCgnJiYnKTtcXFxcbiAgICAgICAgdGV4dHMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXFxcbiAgICBpZiAocGRmaChpdGVtLCAncCYmVGV4dCcpKSB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCAncCYmVGV4dCcpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG4gICAgICB2YXIgaW1nPWl0ZW0ubWF0Y2goL3hrcmtsbGdsXFxcXFxcXFw9XFxcXFxcXFxcXFxcXFxcIi4qP1xcXFxcXFxcXFxcXFxcXCIuKj9hbHQvKTtcXFxcbiAgICAgIGlmKGltZyl7XFxcXG4gICAgIC8vIGxvZyhpbWcpXFxcXG4gICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgIGltZzppbWdbMF0uc3BsaXQoJ1xcXFxcXFwiJylbMV0rIFxcXFxcXFwiQGpzPVxcXFxcXFwiICsgJC50b1N0cmluZygocnVsZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2Flcz9ydWxlPVxcXFxcXFwiICsgcnVsZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltYWdlLmltYWdlRGVjcnlwdCgpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgTVlfUlVMRS50aXRsZSksXFxcXG4gICAgICAgICAgdXJsOmltZ1swXS5zcGxpdCgnXFxcXFxcXCInKVsxXSsgXFxcXFxcXCJAanM9XFxcXFxcXCIgKyAkLnRvU3RyaW5nKChydWxlKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYWVzP3J1bGU9XFxcXFxcXCIgKyBydWxlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1hZ2UuaW1hZ2VEZWNyeXB0KCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBNWV9SVUxFLnRpdGxlKSxcXFxcbiAgICAgICAgICBjb2xfdHlwZToncGljXzFfZnVsbCdcXFxcbiAgICAgIH0pXFxcXG4gICAgICAgfVxcXFxuICAgIH0pXFxcXG4gICAgfWNhdGNoe31cXFxcbiAgICAgICAgfWVsc2UgaWYod3o9PSdrYW5saWFvJyl7XFxcXG4gICAgICAgICAgICB2YXIgdGV4dHM9ZGF0YS5waWNDb2RlLnJlcGxhY2UoL1xcXFxcXFxcPGJyXFxcXFxcXFw+L2csJyYmJykuc3BsaXQoJyYmJyk7XFxcXG4gICAgICAgICAgICB2YXIgbj0wO1xcXFxuICAgICAgICAgICB0ZXh0cy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGlmKHBkZmgoaXRlbSwnLmRwbGF5ZXImJmRhdGEtY29uZmlnJykhPScnKXtcXFxcbiAgICAgICAgbGV0IHVybD1KU09OLnBhcnNlKHBkZmgoaXRlbSwnLmRwbGF5ZXImJmRhdGEtY29uZmlnJykpLnZpZGVvO1xcXFxuICAgICAgICBuKys7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogJ+inhumikSAnICsgbixcXFxcbiAgICAgICAgICAgLy8gZGVzYzonMCcsXFxcXG4gICAgICAgICAgICBpbWc6IHVybC5waWMsXFxcXG4gICAgICAgICAgICB1cmw6IHVybC51cmwucmVwbGFjZSgvXFxcXFxcXFwvXFxcXFxcXFwvLipwbGF5XFxcXFxcXFwuLywnLy9sb25nLicpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgIH1cXFxcbiAgICAgICB9KVxcXFxuICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS5waWNDb2RlLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3JpY2hfdGV4dCcsXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgXFxcXG4gICAgICAgIH1jYXRjaHt9XFxcXG4gICAgICAgIFxcXFxuICAgICAgICBcXFxcbiAgICAgICAgLypcXFxcbiAgICAgICAgdHJ5e1xcXFxuICAgICAgICB2YXIgdmlkZW89ZGF0YS52aWRlb2NvZGUucmVwbGFjZSgvXFxcXFxcXFw8XFxcXFxcXFwvdmlkZW9cXFxcXFxcXD4vZywnPC92aWRlbz4mJicpLnNwbGl0KCcmJicpO1xcXFxuICAgICAgICB2aWRlby5mb3JFYWNoKChpdGVtLGluZGV4KSA9PiB7XFxcXG4gICAgICAgICAgIGlmKHBkZmgoaXRlbSwgJ3ZpZGVvJiZzcmMnKSl7XFxcXG4gICAgICAgICAgICB2YXIgbj1pbmRleCsxO1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6ICfop4bpopEnK24sXFxcXG4gICAgICAgICAgICBkZXNjOicwJyxcXFxcbiAgICAgICAgICAgIGltZzogcGRmaChpdGVtLCAndmlkZW8mJnBvc3RlcicpLFxcXFxuICAgICAgICAgICAgdXJsOiBwZGZoKGl0ZW0sICd2aWRlbyYmc3JjJyksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2NhcmRfcGljXzEnXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgfWNhdGNoe31cXFxcbiAgICAgICAgXFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTon6KeG6aKRJyxcXFxcbiAgICAgICAgICAgIGRlc2M6JzAnLFxcXFxuICAgICAgICAgICAgaW1nOnBkZmgoZGF0YS52aWRlb2NvZGUsJ3ZpZGVvJiZwb3N0ZXInKSxcXFxcbiAgICAgICAgICAgIHVybDpwZGZoKGRhdGEudmlkZW9jb2RlLCd2aWRlbyYmc3JjJyksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonY2FyZF9waWNfMSdcXFxcbiAgICAgICAgICAgIFxcXFxuICAgICAgICB9KVxcXFxuICAgICAgICAqL1xcXFxuICAgICAgXFxcXG4gICAgICAgXFxcXG4gICAgICAgIFxcXFxuICAgICAgICAvKlxcXFxuICAgICAgICBpZih3ej09J2Nndycpe1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEuaW1nY29kZSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidyaWNoX3RleHQnLFxcXFxuICAgICAgICB9KVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgICovXFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfMlxcXCIsXFxcIm5hbWVcXFwiOlxcXCLlm73lhoXnm7Tmkq3liIbnsbtcXFwiLFxcXCJwYXRoXFxcIjpcXFwiemhpYm9lcmppXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOiBcXFxcbnZhciBkID0gW107XFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXFxcbnRyeXtcXFxcbmxldCBob3N0PU1ZX1BBUkFNUy5ob3N0LnJlcGxhY2UoJ2h0dHA6Ly9hcGkucGhwamlla291LnRvcCcsJ2h0dHBzOi8vYXBpMS55aWx1c2h1bmZlbmcudG9wJyk7XFxcXG52YXIgd3o9TVlfUEFSQU1TLnd6O1xcXFxuaWYoTVlfUEFHRT09MSl7XFxcXG52YXIg55u05pKt5YiG57G7PWZldGNoKGhvc3QrJz9nZXRwaW5ndGFpJylcXFxcbnZhciBkYXRhPSBKU09OLnBhcnNlKOebtOaSreWIhuexuykucGluZ3RhaTtcXFxcbmRhdGEuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgaW1nOmRhdGEuaW1hZ2UsXFxcXG4gICAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHknKydAcnVsZT1qczokLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvemhpYm9lcmppMVxcXFxcXFwiKScsXFxcXG4gICAgICAgICAgIGNvbF90eXBlOidjYXJkX3BpY18zJyxcXFxcbiAgICAgICAgICAgZXh0cmE6e1xcXFxuICAgICAgICAgICAgICBob3N0OmAke2hvc3R9P3Bpbmd0YWk9JHtkYXRhLmlkfWAsXFxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcXFxuICAgICAgICAgIH1cXFxcbiAgICB9KVxcXFxufSlcXFxcbn1cXFxcbn1jYXRjaChlKXtcXFxcbiAgICBsb2coZS5tZXNzYWdlKVxcXFxuICAgIHRvYXN0KCfnnIvkuI3kuoYnKVxcXFxufVxcXFxuc2V0UmVzdWx0KGQpXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcInRleHRfNFxcXCIsXFxcIm5hbWVcXFwiOlxcXCLlm73lhoXnm7Tmkq3kuoznuqdcXFwiLFxcXCJwYXRoXFxcIjpcXFwiemhpYm9lcmppMVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkPVtdO1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSlcXFxcbmxldCBob3N0PU1ZX1BBUkFNUy5ob3N0O1xcXFxubGV0IHVybD1ob3N0LnNwbGl0KCc/JylbMF07XFxcXG52YXIgd3o9TVlfUEFSQU1TLnd6O1xcXFxudHJ5e1xcXFxubGV0IGxpc3Q9IEpTT04ucGFyc2UoZmV0Y2goaG9zdCkpLnpodWJvO1xcXFxuLy9sb2cobGlzdClcXFxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlLFxcXFxuICAgICAgICAgICAgdXJsOiB1cmwrJz9pZD0nK2RhdGEuaWQrdm9kLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzMnXFxcXG4gICAgICAgIH0pXFxcXG4gfSlcXFxcbn1jYXRjaChlKXtcXFxcbiAgICBsb2coZS5tZXNzYWdlKVxcXFxuICAgICB0b2FzdCgn55yL5LiN5LqGJylcXFxcbn1cXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8yXFxcIixcXFwibmFtZVxcXCI6XFxcIuWbveWkluebtOaSreWIhuexu1xcXCIsXFxcInBhdGhcXFwiOlxcXCJndW93YWllcmppXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOiBcXFxcbnZhciBkID0gW107XFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXFxcbnRyeXtcXFxcbmxldCBob3N0PU1ZX1VSTC5zcGxpdCgnIyMnKVsxXS5yZXBsYWNlKCdodHRwOi8vYXBpLnBocGppZWtvdS50b3AnLCdodHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcCcpO1xcXFxudmFyIHd6PU1ZX1VSTC5zcGxpdCgnIyMnKVsyXTtcXFxcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbM107XFxcXG52YXIg5Zu95aSW55u05pKt5YiG57G7PWZldGNoKGhvc3QrJz9nZXRzb3J0JylcXFxcbnZhciBkYXRhPSBKU09OLnBhcnNlKOWbveWkluebtOaSreWIhuexuykuY2F0ZWdvcmllcztcXFxcbnZhciBpbmRleF9uPWRhdGFbMF0uaWQudG9TdHJpbmcoKVxcXFxuaWYoTVlfUEFHRT09MSl7XFxcXG5kYXRhLmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ+WbveWkluebtOaSreWIhuexuycrd3osaW5kZXhfbik9PWRhdGEuaWQudG9TdHJpbmcoKT9zdHJvbmcoZGF0YS50aXRsZSwnRkY2Njk5Jyk6ZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIHVybDokKCcnKS5sYXp5UnVsZSgodGl0bGUsaWQsd3opID0+IHtcXFxcbiAgICAgICAgICAgICAgIHB1dE15VmFyKCflm73lpJbnm7Tmkq3liIbnsbsnK3d6LCBpZCk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcXFxuICAgICAgICAgICAgfSxkYXRhLnRpdGxlLGRhdGEuaWQudG9TdHJpbmcoKSx3eiksXFxcXG4gICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJ1xcXFxuICAgIH0pXFxcXG59KVxcXFxufVxcXFxuXFxcXG52YXIgbGlzdD1KU09OLnBhcnNlKGZldGNoKGhvc3QrJz9zb3J0PScrZ2V0TXlWYXIoJ+WbveWkluebtOaSreWIhuexuycrd3osaW5kZXhfbikrJyZwYWdlPScrcGcpKS52aWRlb3M7XFxcXG4vL2xvZyhsaXN0KVxcXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICBkZXNjOiBkYXRhLmRhdGUsXFxcXG4gICAgICAgICAgICBpbWc6ICgoZGF0YS5pbWFnZS5pbmNsdWRlcygndXBsb2FkJyl8ZGF0YS5pbWFnZS5pbmNsdWRlcygnbmV3LicpKSYhZGF0YS5pbWFnZS5pbmNsdWRlcygndG9vbG1tJykpPyhkYXRhLmltYWdlK2xhenkpOmRhdGEuaW1hZ2UsXFxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxcXG4gICAgICAgIH0pXFxcXG4gfSlcXFxcbiB9Y2F0Y2goZSl7XFxcXG4gICAgIGxvZyhlLm1lc3NhZ2UpXFxcXG4gICAgIHRvYXN0KCfnnIvkuI3kuoYnKVxcXFxuIH1cXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8yXFxcIixcXFwibmFtZVxcXCI6XFxcIuWlsyDkvJjliIbnsbtcXFwiLFxcXCJwYXRoXFxcIjpcXFwibnZ5b3VlcmppXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOiBcXFxcbnZhciBkID0gW107XFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXFxcbnRyeXtcXFxcbmxldCBob3N0PU1ZX1BBUkFNUy5ob3N0LnJlcGxhY2UoJ2h0dHA6Ly9hcGkucGhwamlla291LnRvcCcsJ2h0dHBzOi8vYXBpMS55aWx1c2h1bmZlbmcudG9wJyk7XFxcXG52YXIgd3o9TVlfUEFSQU1TLnd6O1xcXFxudmFyIHBnPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXFxcbnZhciBpdGVtPXJlcXVlc3QoaG9zdCsnP2FjdHJlc3M9JnBhZ2U9JytwZylcXFxcbnZhciBkYXRhPSBKU09OLnBhcnNlKGl0ZW0pLmFjdHJlc3NlcztcXFxcbmRhdGEuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgZGVzYzpkYXRhLm51bWJlcixcXFxcbiAgICAgICAgICAgIGltZzpkYXRhLmltYWdlLFxcXFxuICAgICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvbnZ5b3VlcmppMVxcXFxcXFwiKScsXFxcXG4gICAgICAgICAgIGNvbF90eXBlOidjYXJkX3BpY18zJyxcXFxcbiAgICAgICAgICAgZXh0cmE6e1xcXFxuICAgICAgICAgICAgICBob3N0OmAke2hvc3R9P3NvcnQ9JHtkYXRhLmlkfSZwYWdlPWAsXFxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcXFxuICAgICAgICAgIH1cXFxcbiAgICB9KVxcXFxufSlcXFxcblxcXFxufWNhdGNoKGUpe1xcXFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxcXG59XFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwidGV4dF80XFxcIixcXFwibmFtZVxcXCI6XFxcIuWlsyDkvJjkuoznuqdcXFwiLFxcXCJwYXRoXFxcIjpcXFwibnZ5b3VlcmppMVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkPVtdO1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSlcXFxcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxcXG52YXIgaG9zdD1NWV9QQVJBTVMuaG9zdCtwZztcXFxcbnZhciB1cmw9aG9zdC5zcGxpdCgnPycpWzBdO1xcXFxudmFyIHd6PU1ZX1BBUkFNUy53ejtcXFxcbnRyeXtcXFxcbmxldCBsaXN0PSBKU09OLnBhcnNlKGZldGNoKGhvc3QpKS52aWRlb3M7XFxcXG4vL2xvZyhsaXN0KVxcXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZXRpbWU9PW51bGw/Jyc6ZGF0YS5jcmVhdGV0aW1lKSsnICAnKyhkYXRhLmRhdGU9PW51bGw/Jyc6ZGF0YS5kYXRlKSxcXFxcbiAgICAgICAgICAgIHVybDogdXJsKyc/aWQ9JytkYXRhLmlkK3ZvZCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcXFxuICAgICAgICB9KVxcXFxuIH0pXFxcXG59Y2F0Y2goZSl7XFxcXG4gICAgbG9nKGUubWVzc2FnZSlcXFxcbiAgICAgdG9hc3QoJ+eci+S4jeS6hicpXFxcXG59XFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfMlxcXCIsXFxcIm5hbWVcXFwiOlxcXCLluJblrZDliIbnsbtcXFwiLFxcXCJwYXRoXFxcIjpcXFwidGllZXJqaVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczogXFxcXG52YXIgZCA9IFtdO1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxcXG50cnl7XFxcXG5sZXQgaG9zdD1NWV9QQVJBTVMuaG9zdC5yZXBsYWNlKCdodHRwOi8vYXBpLnBocGppZWtvdS50b3AnLCdodHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcCcpO1xcXFxudmFyIHd6PU1ZX1BBUkFNUy53ejtcXFxcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxcXG5pZihNWV9QQUdFPT0xKXtcXFxcbnZhciDluJblrZDliIbnsbs9ZmV0Y2goaG9zdCsnP2dldHNvcnQnKVxcXFxudmFyIGRhdGE9IEpTT04ucGFyc2Uo5biW5a2Q5YiG57G7KS5jYXRlZ29yaWVzO1xcXFxudmFyIGluZGV4X249ZGF0YVswXS5pZC50b1N0cmluZygpO1xcXFxuZGF0YS5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKCfluJblrZDliIbnsbsnK3d6LGluZGV4X24pPT1kYXRhLmlkLnRvU3RyaW5nKCk/c3Ryb25nKGRhdGEudGl0bGUsJ0ZGNjY5OScpOmRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICB1cmw6JCgnJykubGF6eVJ1bGUoKHRpdGxlLGlkLHd6KSA9PiB7XFxcXG4gICAgICAgICAgICAgICBwdXRNeVZhcign5biW5a2Q5YiG57G7Jyt3eiwgaWQpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXFxcbiAgICAgICAgICAgIH0sZGF0YS50aXRsZSxkYXRhLmlkLnRvU3RyaW5nKCksd3opLFxcXFxuICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbidcXFxcbiAgICB9KVxcXFxufSlcXFxcbn1cXFxcbnZhciBsaXN0PUpTT04ucGFyc2UoZmV0Y2goaG9zdCsnP3NvcnQ9JytnZXRNeVZhcign5biW5a2Q5YiG57G7Jyt3eixpbmRleF9uKSsnJnBhZ2U9JytwZykpLnZpZGVvcztcXFxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgZGVzYzogZGF0YS5kYXRlLFxcXFxuICAgICAgICAgICAgLy9pbWc6ICdodHRwczovL2ltYWdlcy54b293YnMuY29tL3VwbG9hZF8wMScrZGF0YS5pbWFnZS5zcGxpdCgndXBsb2FkXzAxJylbMV0sXFxcXG4gICAgICAgICAgICBpbWc6ZGF0YS5pbWFnZStsYXp5LFxcXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eSMjJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2JsYWNrZXJqaTFcXFxcXFxcIiknLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3BpY18xJyxcXFxcbiAgICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgaG9zdDpgJHtob3N0fT9pZD0ke2RhdGEuaWR9YCxcXFxcbiAgICAgICAgICAgICAgd3o6d3osXFxcXG4gICAgICAgICAgfVxcXFxuICAgICAgICB9KVxcXFxuIH0pXFxcXG4gfWNhdGNoKGUpe1xcXFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxcXG4gICAgIHRvYXN0KCfnnIvkuI3kuoYnKVxcXFxuIH1cXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8yXFxcIixcXFwibmFtZVxcXCI6XFxcIuebtOaSreiBmuWQiOWIhuexu1xcXCIsXFxcInBhdGhcXFwiOlxcXCJ6aGlib2p1aGVlcmppXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOiBcXFxcbnZhciBkID0gW107XFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXFxcbnRyeXtcXFxcbmxldCB3ej1NWV9QQVJBTVMud3o7XFxcXG5pZih3ej09J+ebtOaSreiBmuWQiCcpe1xcXFxuICAgIGhvc3Q9J2h0dHA6Ly9hcGkudmlwbWlzc3MuY29tOjgxL3hjZHN3LydcXFxcbn1lbHNle1xcXFxuICAgIGhvc3Q9J2h0dHA6Ly9hcGkubWFpeW91eC5jb206ODEvbWYvJ1xcXFxufVxcXFxuaWYoTVlfUEFHRT09MSl7XFxcXG52YXIg55u05pKt6IGa5ZCIPXJlcXVlc3QoaG9zdCsnanNvbi50eHQnKVxcXFxudmFyIGRhdGE9IEpTT04ucGFyc2Uo55u05pKt6IGa5ZCIKS5waW5ndGFpO1xcXFxuZGF0YS5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICBkZXNjOmRhdGEuTnVtYmVyLFxcXFxuICAgICAgICAgICAgaW1nOmRhdGEueGluaW1nLFxcXFxuICAgICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5JysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3poaWJvanVoZWVyamkxXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICAgY29sX3R5cGU6J2NhcmRfcGljXzMnLFxcXFxuICAgICAgICAgICBleHRyYTp7XFxcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7aG9zdH0ke2RhdGEuYWRkcmVzc31gLFxcXFxuICAgICAgICAgICAgICB3ejp3eixcXFxcbiAgICAgICAgICB9XFxcXG4gICAgfSlcXFxcbn0pXFxcXG59XFxcXG59Y2F0Y2goZSl7XFxcXG4gICAgbG9nKGUubWVzc2FnZSlcXFxcbiAgICB0b2FzdCgn55yL5LiN5LqGJylcXFxcbn1cXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJ0ZXh0XzRcXFwiLFxcXCJuYW1lXFxcIjpcXFwi55u05pKt6IGa5ZCI5LqM57qnXFxcIixcXFwicGF0aFxcXCI6XFxcInpoaWJvanVoZWVyamkxXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQ9W107XFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKVxcXFxubGV0IGhvc3Q9TVlfUEFSQU1TLmhvc3Q7XFxcXG50cnl7XFxcXG5sZXQgbGlzdD0gSlNPTi5wYXJzZShmZXRjaChob3N0KSkuemh1Ym87XFxcXG4vL2xvZyhsaXN0KVxcXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgIGlmKCFkYXRhLnRpdGxlLmluY2x1ZGVzKCc5OTk5Jykpe1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1nLFxcXFxuICAgICAgICAgICAgdXJsOiBkYXRhLmFkZHJlc3MsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgfVxcXFxuIH0pXFxcXG59Y2F0Y2h7fVxcXFxuc2V0UmVzdWx0KGQpXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzJcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5ryr55S75YiG57G7XFxcIixcXFwicGF0aFxcXCI6XFxcIm1hbmh1YWVyamlcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6IFxcXFxudmFyIGQgPSBbXTtcXFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcXFxudHJ5e1xcXFxubGV0IGhvc3Q9TVlfUEFSQU1TLmhvc3QucmVwbGFjZSgnaHR0cDovL2FwaS5waHBqaWVrb3UudG9wJywnaHR0cHM6Ly9hcGkxLnlpbHVzaHVuZmVuZy50b3AnKTtcXFxcbnZhciB3ej1NWV9QQVJBTVMud3o7XFxcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcXFxuaWYoTVlfUEFHRT09MSl7XFxcXG52YXIg5ryr55S75YiG57G7PWZldGNoKGhvc3QrJz9nZXRzb3J0JylcXFxcbnZhciBkYXRhPSBKU09OLnBhcnNlKOa8q+eUu+WIhuexuykuY2F0ZWdvcmllcztcXFxcbnZhciBpbmRleF9uPWRhdGFbMF0uaWQudG9TdHJpbmcoKVxcXFxuZGF0YS5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKCfmvKvnlLvliIbnsbsnK3d6LGluZGV4X24pPT1kYXRhLmlkLnRvU3RyaW5nKCk/c3Ryb25nKGRhdGEudGl0bGUsJ0ZGNjY5OScpOmRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICB1cmw6JCgnJykubGF6eVJ1bGUoKHRpdGxlLGlkLHd6KSA9PiB7XFxcXG4gICAgICAgICAgICAgICBwdXRNeVZhcign5ryr55S75YiG57G7Jyt3eiwgaWQpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXFxcbiAgICAgICAgICAgIH0sZGF0YS50aXRsZSxkYXRhLmlkLnRvU3RyaW5nKCksd3opLFxcXFxuICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbidcXFxcbiAgICB9KVxcXFxufSlcXFxcbn1cXFxcbnZhciBsaXN0PUpTT04ucGFyc2UoZmV0Y2goaG9zdCsnP3NvcnQ9JytnZXRNeVZhcign5ryr55S75YiG57G7Jyt3eixpbmRleF9uKSsnJnBhZ2U9JytwZykpLnZpZGVvcztcXFxcbi8vbG9nKGxpc3QpXFxcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIGRlc2M6IGRhdGEuZGF0ZSxcXFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZSxcXFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknKydAcnVsZT1qczokLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvbWFuaHVhZXJqaTFcXFxcXFxcIiknLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzMnLFxcXFxuICAgICAgICAgICAgZXh0cmE6e1xcXFxuICAgICAgICAgICAgICBob3N0OmAke2hvc3R9P2lkPSR7ZGF0YS5pZH1gLFxcXFxuICAgICAgICAgICAgICB3ejp3eixcXFxcbiAgICAgICAgICB9XFxcXG4gICAgICAgIH0pXFxcXG4gfSlcXFxcbiB9Y2F0Y2goZSl7XFxcXG4gICAgIGxvZyhlLm1lc3NhZ2UpXFxcXG4gICAgIHRvYXN0KCfnnIvkuI3kuoYnKVxcXFxuIH1cXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJ0ZXh0XzRcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5ryr55S755uu5b2VXFxcIixcXFwicGF0aFxcXCI6XFxcIm1hbmh1YWVyamkxXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQ9W107XFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKVxcXFxubGV0IGhvc3Q9TVlfUEFSQU1TLmhvc3Q7XFxcXG5sZXQgdXJsPWhvc3Quc3BsaXQoJz8nKVswXTtcXFxcbnZhciB3ej1NWV9QQVJBTVMud3o7XFxcXG50cnl7XFxcXG5sZXQgbGlzdD0gSlNPTi5wYXJzZShmZXRjaChob3N0KSkuY2hhcHRlcnM7XFxcXG4vL2xvZyhsaXN0KVxcXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICB1cmw6IHVybCsnP2lkPScrZGF0YS5pZCtwaWNzLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMidcXFxcbiAgICAgICAgfSlcXFxcbiB9KVxcXFxuICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICB0aXRsZTon56ysMeeroOmihOiniCcsXFxcXG4gICAgICAgICAgY29sX3R5cGU6J3JpY2hfdGV4dCcsXFxcXG4gICAgICB9KVxcXFxuIGxldCBpbWc9IEpTT04ucGFyc2UoZmV0Y2goaG9zdCkpLmNvbnRlbnQucmVwbGFjZSgvXFxcXFxcXFwkL2csJycpLnJlcGxhY2UoL+WIhuWJsi9nLCcnKS5zcGxpdCgnQCcpO1xcXFxuIGltZy5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgaW1nOmRhdGEsXFxcXG4gICAgICAgICAgICB1cmw6ICdwaWNzOi8vJytpbWcuam9pbignJiYnKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidwaWNfMV9mdWxsJ1xcXFxuICAgICAgICB9KVxcXFxuIH0pXFxcXG4gXFxcXG59Y2F0Y2goZSl7XFxcXG4gICAgbG9nKGUubWVzc2FnZSlcXFxcbiAgICAgdG9hc3QoJ+eci+S4jeS6hicpXFxcXG59XFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfMlxcXCIsXFxcIm5hbWVcXFwiOlxcXCLnjKvlkqrmvKvnlLtcXFwiLFxcXCJwYXRoXFxcIjpcXFwibWFvbWltYW5odWFcXFwiLFxcXCJydWxlXFxcIjpcXFwiIGpzOiBcXFxcbnZhciBkID0gW107XFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXFxcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxcXG50cnl7XFxcXG52YXIg54yr5ZKq5ryr55S7PSBbe3RpdGxlOiAn5o6o6I2QJuacgOaWsCbnsr7ljY4nLGlkOiAncmVjb21tZW5kJnVwZGF0ZSZwb3B1bGFyJ31dO1xcXFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcXFxuICAgICQucmVxdWlyZShcXFxcXFxcIkNhdGVcXFxcXFxcIikuQ2F0ZSjnjKvlkqrmvKvnlLssJ+eMq+WSqua8q+eUuycsZCk7XFxcXG59XFxcXG52YXIgc2lnbj1FbmNyeXB0KCd7XFxcXFxcXCJwYWdlXFxcXFxcXCI6JytwZysnfScpO1xcXFxudmFyIGhvc3Q9J2h0dHA6Ly8xMTkuMjguNTIuMTkzOjgwODkvYXBpL2NvbWljLycrZ2V0TXlWYXIoJ+eMq+WSqua8q+eUuycsJ3JlY29tbWVuZCcpKyc/cGFyYW1zPScrc2lnbjtcXFxcbnZhciBib2R5PSdwYXJhbXM9JytzaWduO1xcXFxudmFyIGh0bWwgPSBmZXRjaChob3N0LCB7XFxcXG4gICAgaGVhZGVyczoge1xcXFxuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcXFxcbiAgICB9LFxcXFxuICAgIGJvZHk6IGJvZHksXFxcXG4gICAgbWV0aG9kOiAnUE9TVCdcXFxcbn0pOyBcXFxcbnZhciBodG1sMj1EZWNyeXB0KGh0bWwpXFxcXG4vL2xvZyhodG1sMilcXFxcbnZhciBsaXN0PUpTT04ucGFyc2UoaHRtbDIpLmRhdGEuZGF0YTtcXFxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgaW1nOiBkYXRhLnRodW1iLFxcXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL21hb21pbWFuaHVhZXJqaVxcXFxcXFwiKScsXFxcXG4gICAgICAgICAgLy91cmw6ZGF0YS5pZCttYW9taW1hbmh1YWp4LFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzMnLFxcXFxuICAgICAgICAgICAgZXh0cmE6e1xcXFxuICAgICAgICAgICAgICBpZDpkYXRhLmlkLFxcXFxuICAgICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcbiB9KVxcXFxufWNhdGNoKGUpe1xcXFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxcXG4gICAgIHRvYXN0KCfnnIvkuI3kuoYnKVxcXFxufVxcXFxuc2V0UmVzdWx0KGQpXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzJcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5bCP6K+05YiG57G7XFxcIixcXFwicGF0aFxcXCI6XFxcInhpYW9zaHVvZXJqaVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczogXFxcXG52YXIgZCA9IFtdO1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxcXG50cnl7XFxcXG5sZXQgaG9zdD1NWV9QQVJBTVMuaG9zdC5yZXBsYWNlKCdodHRwOi8vYXBpLnBocGppZWtvdS50b3AnLCdodHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcCcpO1xcXFxudmFyIHd6PU1ZX1BBUkFNUy53ejtcXFxcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxcXG5pZihNWV9QQUdFPT0xKXtcXFxcbnZhciDlsI/or7TliIbnsbs9ZmV0Y2goaG9zdCsnP2dldHNvcnQnKVxcXFxudmFyIGRhdGE9IEpTT04ucGFyc2Uo5bCP6K+05YiG57G7KS5jYXRlZ29yaWVzO1xcXFxudmFyIGluZGV4X249ZGF0YVswXS5pZC50b1N0cmluZygpO1xcXFxuZGF0YS5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKCflsI/or7TliIbnsbsnK3d6LGluZGV4X24pPT1kYXRhLmlkLnRvU3RyaW5nKCk/c3Ryb25nKGRhdGEudGl0bGUsJ0ZGNjY5OScpOmRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICB1cmw6JCgnJykubGF6eVJ1bGUoKHRpdGxlLGlkLHd6KSA9PiB7XFxcXG4gICAgICAgICAgICAgICBwdXRNeVZhcign5bCP6K+05YiG57G7Jyt3eiwgaWQpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXFxcbiAgICAgICAgICAgIH0sZGF0YS50aXRsZSxkYXRhLmlkLnRvU3RyaW5nKCksd3opLFxcXFxuICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbidcXFxcbiAgICB9KVxcXFxufSlcXFxcbn1cXFxcbnZhciBsaXN0PUpTT04ucGFyc2UoZmV0Y2goaG9zdCsnP3NvcnQ9JytnZXRNeVZhcign5bCP6K+05YiG57G7Jyt3eixpbmRleF9uKSsnJnBhZ2U9JytwZykpLmxpc3Q7XFxcXG4vL2xvZyhsaXN0KVxcXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3hpYW9zaHVvZXJqaTFcXFxcXFxcIiknLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMScsXFxcXG4gICAgICAgICAgICBleHRyYTp7XFxcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7aG9zdH0/aWQ9JHtkYXRhLmlkfWAsXFxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcXFxuICAgICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcbiB9KVxcXFxuIH1jYXRjaHt9XFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwidGV4dF80XFxcIixcXFwibmFtZVxcXCI6XFxcIuWwj+ivtOS6jOe6p1xcXCIsXFxcInBhdGhcXFwiOlxcXCJ4aWFvc2h1b2VyamkxXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQ9W107XFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKVxcXFxubGV0IGhvc3Q9TVlfUEFSQU1TLmhvc3Q7XFxcXG5sZXQgdXJsPWhvc3Quc3BsaXQoJz8nKVswXTtcXFxcbnZhciB3ej1NWV9QQVJBTVMud3o7XFxcXG50cnl7XFxcXG4gICAgaWYoKHd6PT0namluamlzaHV3dScpfCh3ej09J2xlYm8nKXwod3o9PSdodWFueGlhbmcnKXwod3o9PSdqa3VuJykpe1xcXFxuICAgICAgICBsZXQgbm92ZWw9IEpTT04ucGFyc2UoZmV0Y2goaG9zdCkpLm5vdmVsO1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6bm92ZWwsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZToncmljaF90ZXh0J1xcXFxuICAgICAgICB9KVxcXFxuICAgIH1lbHNle1xcXFxubGV0IGlkPSBKU09OLnBhcnNlKGZldGNoKGhvc3QpKS5pZDtcXFxcbiBsb2FkUmVhZENvbnRlbnRQYWdlKGlkKVxcXFxuIH1cXFxcbn1jYXRjaHtcXFxcbiAgICB0b2FzdCgn6LCB54m55LmI55yL5bCP6K+05ZWK77yBJylcXFxcbn1cXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJ0ZXh0XzRcXFwiLFxcXCJuYW1lXFxcIjpcXFwi54yr5ZKq5ryr55S75LqM57qnXFxcIixcXFwicGF0aFxcXCI6XFxcIm1hb21pbWFuaHVhZXJqaVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkPVtdO1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSlcXFxcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxcXG52YXIgaWQ9TVlfUEFSQU1TLmlkO1xcXFxudmFyIHNpZ249RW5jcnlwdCgne1xcXFxcXFwiaWRcXFxcXFxcIjonK2lkKycsXFxcXFxcXCJwYWdlXFxcXFxcXCI6JytwZysnLFxcXFxcXFwic29ydFxcXFxcXFwiOjB9Jyk7XFxcXG52YXIgaG9zdD0naHR0cDovLzExOS4yOC41Mi4xOTM6ODA4OS9hcGkvY29taWMvbGlzdHM/cGFyYW1zPScrc2lnbjtcXFxcbnZhciBib2R5PSdwYXJhbXM9JytzaWduO1xcXFxudmFyIGh0bWwgPSBmZXRjaChob3N0LCB7XFxcXG4gICAgaGVhZGVyczoge1xcXFxuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcXFxcbiAgICB9LFxcXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxcXG59KTsgXFxcXG52YXIgaHRtbDI9RGVjcnlwdChodG1sKVxcXFxudmFyIGxpc3Q9SlNPTi5wYXJzZShodG1sMikuZGF0YS5kYXRhO1xcXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEubmFtZSxcXFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZSxcXFxcbiAgICAgICAgICAgIHVybDogZGF0YS5pZCttYW9taW1hbmh1YWp4LFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwibW92aWVfMV9sZWZ0X3BpY1xcXFxcXFwiLFxcXFxuICAgIH0pXFxcXG4gICAgfSlcXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8yXFxcIixcXFwibmFtZVxcXCI6XFxcIueMq+WSque+juWbvlxcXCIsXFxcInBhdGhcXFwiOlxcXCJtYW9taW1laXR1XFxcIixcXFwicnVsZVxcXCI6XFxcIiBqczogXFxcXG52YXIgZCA9IFtdO1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcXFxudHJ5e1xcXFxudmFyIOeMq+WSque+juWbvj0gW3t0aXRsZTogJ+eDremXqCbpl7LogYrorqjorrom6JW+5Lid5aWz5ZCMJue+juiFv+eOiei2syblt6jkubPnvo7og7gm55S35ZCMJuWOn+WIm+iHquaLjSbliqjmvKsm6K6k6K+BJnNtJuivvuWggibmiJHlprsm6auY5r2u6IS4Jue9kee6ouWkp+WSlibliLbmnI3or7Hmg5Em6Jyc5rGB576O6IeAJyxpZDogJzAmMyY3JjkmMTAmMjImMSY4JjI2JjYmMzEmMjMmMiYxOCY0JjIxJ31dO1xcXFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcXFxuICAgICQucmVxdWlyZShcXFxcXFxcIkNhdGVcXFxcXFxcIikuQ2F0ZSjnjKvlkqrnvo7lm74sJ+eMq+WSque+juWbvicsZCk7XFxcXG59XFxcXG52YXIgc2lnbj1FbmNyeXB0KCd7XFxcXFxcXCJwYWdlXFxcXFxcXCI6JytwZysnLFxcXFxcXFwiY2F0ZVxcXFxcXFwiOicrZ2V0TXlWYXIoJ+eMq+WSque+juWbvicsJzAnKSsnLFxcXFxcXFwidHlwZVxcXFxcXFwiOjF9Jyk7XFxcXG52YXIgaG9zdD0naHR0cDovLzExOS4yOC41Mi4xOTM6ODA4OS9hcGkvdjIvcG9zdC9ob21lP3BhcmFtcz0nK3NpZ247XFxcXG52YXIgYm9keT0ncGFyYW1zPScrc2lnbjtcXFxcbnZhciBodG1sID0gZmV0Y2goaG9zdCwge1xcXFxuICAgIGhlYWRlcnM6IHtcXFxcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXFxcXG4gICAgfSxcXFxcbiAgICBib2R5OiBib2R5LFxcXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxcXG59KTsgXFxcXG52YXIgaHRtbDI9RGVjcnlwdChodG1sKVxcXFxudmFyIGxpc3Q9SlNPTi5wYXJzZShodG1sMikuZGF0YTtcXFxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICBpZihkYXRhLmltYWdlcyl7XFxcXG4gICAgICAgIFxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICBkZXNjOmRhdGEudGltZSxcXFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZXNbMF0uaW1hZ2UsXFxcXG4gICAgICAgICAgICB1cmw6ICQoJycpLmxhenlSdWxlKGRhdGEgPT4ge1xcXFxuICAgICAgICAgIGxldCBwaWNBcnI9W107XFxcXG4gICAgICAgICAgbGV0IGltZz1kYXRhLmltYWdlcztcXFxcbiAgICAgICAgICBsZXQgbGVuPSBpbWcubGVuZ3RoLTE7XFxcXG4gICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gbGVuOyBpKyspIHtcXFxcbiAgICAgICAgICAgICAgICBwaWNBcnJbaV0gPSBpbWdbaV0uaW1hZ2U7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJwaWNzOi8vXFxcXFxcXCIgKyBwaWNBcnIuam9pbihcXFxcXFxcIiYmXFxcXFxcXCIpXFxcXG4gICAgICAgIH0sZGF0YSksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMydcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgfVxcXFxuIH0pXFxcXG4gfWNhdGNoe31cXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8yXFxcIixcXFwibmFtZVxcXCI6XFxcIueMq+WSqkZNXFxcIixcXFwicGF0aFxcXCI6XFxcIm1hb21pRk1cXFwiLFxcXCJydWxlXFxcIjpcXFwiIGpzOiBcXFxcbnZhciBkID0gW107XFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXFxcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxcXG52YXIg54yr5ZKqRk09IFt7dGl0bGU6ICfpg73luILmv4Dmg4Um5a625bqt5LmxIOS8piblj6bnsbvlsI/or7Qm6Z2S5pil5qCh5ZutJuaDhSDoibLnrJHor50m5Lq6IOWmu+S5sSDkvKYm5oCnIOeIseaKgOW3pybnjoTlubvlpYflubsnLGlkOiAnOCY5JjEwJjExJjEyJjEzJjE0JjE1J31dO1xcXFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcXFxuICAgICQucmVxdWlyZShcXFxcXFxcIkNhdGVcXFxcXFxcIikuQ2F0ZSjnjKvlkqpGTSwn54yr5ZKqRk0nLGQpO1xcXFxufVxcXFxudmFyIHNpZ249RW5jcnlwdCgne1xcXFxcXFwicGFnZVxcXFxcXFwiOicrcGcrJyxcXFxcXFxcImNhdGVfaWRcXFxcXFxcIjonK2dldE15VmFyKCfnjKvlkqpGTScsJzgnKSsnLFxcXFxcXFwic3RhdHVzXFxcXFxcXCI6MCxcXFxcXFxcInR5cGVcXFxcXFxcIjowLFxcXFxcXFwibmV3XFxcXFxcXCI6MH0nKTtcXFxcbnZhciBob3N0PSdodHRwOi8vMTE5LjI4LjUyLjE5Mzo4MDg5L2FwaS9ib29rL2luZGV4P3BhcmFtcz0nK3NpZ247XFxcXG52YXIgYm9keT0ncGFyYW1zPScrc2lnbjtcXFxcbnZhciBodG1sID0gZmV0Y2goaG9zdCwge1xcXFxuICAgIGhlYWRlcnM6IHtcXFxcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXFxcXG4gICAgfSxcXFxcbiAgICBib2R5OiBib2R5LFxcXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxcXG59KTsgXFxcXG52YXIgaHRtbDI9RGVjcnlwdChodG1sKVxcXFxudmFyIGxpc3Q9SlNPTi5wYXJzZShodG1sMikuZGF0YS5kYXRhO1xcXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEubmFtZSxcXFxcbiAgICAgICAgICAgIGltZzogZGF0YS50aHVtYixcXFxcbiAgICAgICAgICAgIHVybDogZGF0YS5pZCttYW9taWZtangsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMydcXFxcbiAgICAgICAgfSlcXFxcbiB9KVxcXFxuXFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCIwMemmlumhteinhumikVxcXCIsXFxcInBhdGhcXFwiOlxcXCJ2aWRlb1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcXFxudHJ5e1xcXFxuICB2YXIgbGlzdD1nZXRJdGVtKCdzaG91eWUnKS5zcGxpdCgn6aaW6aG15pWw5o2u5byA5aeLJylbMV0uc3BsaXQoJ+mmlumhteaVsOaNrue7k+adnycpWzBdLnNwbGl0KCfmjaLooYwnKTtcXFxcbiAgbGlzdC5mb3JFYWNoKGRhdGE9PntcXFxcbiAgICAgIHZhciBxZD1zcChkYXRhLCBcXFxcXFxcInFkKFxcXFxcXFwiLCBcXFxcXFxcIilcXFxcXFxcIik7XFxcXG4gICAgICB2YXIgdHA9c3AoZGF0YSwgXFxcXFxcXCJ0cChcXFxcXFxcIiwgXFxcXFxcXCIpXFxcXFxcXCIpO1xcXFxuICAgICAgdmFyIG1jPXNwKGRhdGEsIFxcXFxcXFwibWMoXFxcXFxcXCIsIFxcXFxcXFwiKVxcXFxcXFwiKTtcXFxcbiAgICAgIHZhciB3ej1zcChkYXRhLCBcXFxcXFxcImdqYyhcXFxcXFxcIiwgXFxcXFxcXCIpXFxcXFxcXCIpO1xcXFxuICAgICAgdmFyIHltPXNwKGRhdGEsIFxcXFxcXFwieW0oXFxcXFxcXCIsIFxcXFxcXFwiKVxcXFxcXFwiKTtcXFxcbiAgICAgIHZhciBseD1zcChkYXRhLCBcXFxcXFxcImx4KFxcXFxcXFwiLCBcXFxcXFxcIilcXFxcXFxcIik7XFxcXG4gICAgICB2YXIgcWI9cWQrJyAgJyttYysnICAnK3d6KycgICcreW0rJyAgJytseDtcXFxcbiAgICAgIGlmKHFkPT0n6bq76LGGVFYnKXtcXFxcbiAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgIHRpdGxlOm1jLFxcXFxuICAgICAgICAgIGRlc2M6cWIsXFxcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9tYWRvdVxcXFxcXFwiKScsXFxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJ1xcXFxuICAgICAgfSlcXFxcbiAgICAgIH1lbHNlIGlmKHFkPT0nOTFUVicpe1xcXFxuICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgdGl0bGU6bWMsXFxcXG4gICAgICAgICAgZGVzYzpxYixcXFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlLzkxdHZcXFxcXFxcIiknLFxcXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCdcXFxcbiAgICAgIH0pXFxcXG4gICAgICB9ZWxzZSBpZihxZD09J+eMq+WSqicpe1xcXFxuICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgdGl0bGU6bWMsXFxcXG4gICAgICAgICAgZGVzYzpxYixcXFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL21hb21pXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnXFxcXG4gICAgICB9KVxcXFxuICAgICAgfWVsc2UgaWYocWQ9PSfnjKvlkqrljp/liJsnKXtcXFxcbiAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgIHRpdGxlOm1jLFxcXFxuICAgICAgICAgIGRlc2M6cWIsXFxcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9tYW9taXl1YW5jaHVhbmdcXFxcXFxcIiknLFxcXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCdcXFxcbiAgICAgIH0pXFxcXG4gICAgICB9ZWxzZXtcXFxcbiAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgdGl0bGU6bWMsXFxcXG4gICAgICAgICAgZGVzYzpxYixcXFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3N5dmlkZW9cXFxcXFxcIiknLFxcXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCcsXFxcXG4gICAgICAgICAgZXh0cmE6e1xcXFxuICAgICAgICAgICAgICBob3N0OmAke3ltfS8ke3d6fS5waHBgLFxcXFxuICAgICAgICAgICAgICB3ejp3eixcXFxcbiAgICAgICAgICB9XFxcXG4gICAgICB9KVxcXFxuICAgICAgfVxcXFxuICB9KVxcXFxuICAgICAgXFxcXG4gICAgICB2YXIgbGlzdDE9Z2V0SXRlbSgnc2hvdXllJykuc3BsaXQoJ+WIhuWJsue6vycpWzFdLnNwbGl0KCfmjaLooYwnKTtcXFxcbiAgbGlzdDEuZm9yRWFjaChkYXRhPT57XFxcXG4gICAgICB2YXIgcWQ9c3AoZGF0YSwgXFxcXFxcXCJxZChcXFxcXFxcIiwgXFxcXFxcXCIpXFxcXFxcXCIpO1xcXFxuICAgICAgdmFyIHRwPXNwKGRhdGEsIFxcXFxcXFwidHAoXFxcXFxcXCIsIFxcXFxcXFwiKVxcXFxcXFwiKTtcXFxcbiAgICAgIHZhciBtYz1zcChkYXRhLCBcXFxcXFxcIm1jKFxcXFxcXFwiLCBcXFxcXFxcIilcXFxcXFxcIik7XFxcXG4gICAgICB2YXIgd3o9c3AoZGF0YSwgXFxcXFxcXCJnamMoXFxcXFxcXCIsIFxcXFxcXFwiKVxcXFxcXFwiKTtcXFxcbiAgICAgIHZhciB5bT1zcChkYXRhLCBcXFxcXFxcInltKFxcXFxcXFwiLCBcXFxcXFxcIilcXFxcXFxcIik7XFxcXG4gICAgICB2YXIgbHg9c3AoZGF0YSwgXFxcXFxcXCJseChcXFxcXFxcIiwgXFxcXFxcXCIpXFxcXFxcXCIpO1xcXFxuICAgICAgdmFyIHFiPXFkKycgICcrbWMrJyAgJyt3eisnICAnK3ltKycgICcrbHg7XFxcXG4gICAgICBpZih0cCE9bnVsbCl7XFxcXG4gICAgICAgICAgaWYoKHd6PT0neGlhbmdqaWFvJyl8KHd6PT0nOTFkc3AnKXwod3o9PSd0aWt0b2sxOCcpfCh3ej09J29nZmFwJyl8KHd6PT0ndGlrdG9rMThsb25nJyl8KHd6PT0neGlhb2h1bGknKSl7XFxcXG4gICAgIH1lbHNle1xcXFxuICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICB0aXRsZTptYyxcXFxcbiAgICAgICAgICBkZXNjOnFiLFxcXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2Uvc3l2aWRlb1xcXFxcXFwiKScsXFxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJyxcXFxcbiAgICAgICAgICBleHRyYTp7XFxcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7eW19LyR7d3p9LnBocGAsXFxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcXFxuICAgICAgICAgIH1cXFxcbiAgICAgIH0pXFxcXG4gICAgICB9XFxcXG4gICAgICB9XFxcXG4gICAgICB9KVxcXFxufWNhdGNoKGUpe1xcXFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxcXG4gICAgaWYoZ2V0TXlWYXIoJ2EnKSA9PSAnJyl7XFxcXG4gICAgdmFyIHNob3V5ZT1xekRlY3J5cHQocmVxdWVzdCgnaHR0cDovLzAwMy4yMnMubG9sL2VuY3J5cHQvYXBpLnBocD9wYXRoPXFpZXppL3Nob3V5ZScpKVxcXFxuICAgIHZhciBkYXRhPXF6RGVjcnlwdChyZXF1ZXN0KCdodHRwOi8vMDAzLjIycy5sb2wvZW5jcnlwdC9hcGkucGhwP3BhdGg9cWllemkvem9uZ2hlJykpXFxcXG4gICAgdmFyIHNlYXJjaD1mZXRjaCgnaHR0cDovLzAwMy4yMnMubG9sL3NlYXJjaGNvbmZpZy92aXBhcGkvdmlwY29uZmlnLnR4dCcpXFxcXG4gICAvLyB2YXIga3Vvemhhbj1xekRlY3J5cHQocmVxdWVzdCgnaHR0cDovLzAwNC4yMnMubG9sL2VuY3J5cHQvYXBpLnBocD9wYXRoPXFpZXppL2hlaWtlamknKSlcXFxcbiAgIC8vIHZhciB5dW1pbmc9cXpEZWNyeXB0KHJlcXVlc3QoJ2h0dHA6Ly8wMS54a2EzYS50b3AvZW5jcnlwdC9hcGkucGhwP3BhdGg9eXVtaW5nL3l1bWluZycpKVxcXFxuICAvLyAgdmFyIGdvbmdnYW89cXpEZWNyeXB0KHJlcXVlc3QoJ2h0dHA6Ly8wMDMuMjJzLmxvbC9lbmNyeXB0L2FwaS5waHA/cGF0aD1xaWV6aS9xeicpKVxcXFxuICAgIHB1dE15VmFyKCdhJywnMScpXFxcXG4gICAgc2V0SXRlbSgnc2hvdXllJyxzaG91eWUpXFxcXG4gICAgc2V0SXRlbSgnZGF0YScsZGF0YSlcXFxcbiAgICBzZXRJdGVtKCdzZWFyY2gnLHNlYXJjaClcXFxcbiAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgdG9hc3QoJ+aVsOaNruW3suabtOaWsCcpXFxcXG4gICAgLypcXFxcbiAgICBcXFxcbiAgICDln5/lkI3mm7/mjaLljLnphY3ooajovr7lvI9odHRwcz86Ly8oYXBpMT9cXFxcXFxcXC4pPyhjaGFuZ2ZhcGlhb3BpYW98eWlsdXNodW5mZW5nfHBocGppZWtvdXxhcGlqaWVrb3UpXFxcXFxcXFwudG9wKC9hcGkpP+OAilxcXFxu57q/6Lev6ZuG5ZCIaHR0cHM6Ly9hcGkxLnlpbHVzaHVuZmVuZy50b3B8aHR0cHM6Ly9hcGkuY2hhbmdmYXBpYW9waWFvLnRvcHxodHRwOi8vYXBpMS55aWx1c2h1bmZlbmcudG9wfGh0dHA6Ly9hcGkuY2hhbmdmYXBpYW9waWFvLnRvcHxodHRwOi8vYXBpMS5hcGlqaWVrb3UudG9wL2FwaXxodHRwOi8vYXBpLnBocGppZWtvdS50b3B8aHR0cDovLzAwNC4yMnMubG9sL2FwaeOAilxcXFxu5aSx5pWI5Z+f5ZCN6ZuG5ZCIaHR0cHM6Ly9hcGkueWlsdXNodW5mZW5nLnRvcHxodHRwOi8vYXBpLnlpbHVzaHVuZmVuZy50b3B8aHR0cDovL2FwaTExLnBocGppZWtvdS50b3DjgIpcXFxcbuacgOaWsOaOpeWPo+Wfn+WQjWh0dHBzOi8vYXBpMS55aWx1c2h1bmZlbmcudG9w44CKXFxcXG4qL1xcXFxuICB9XFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzJcXFwiLFxcXCJuYW1lXFxcIjpcXFwi54yr5ZKqQVZcXFwiLFxcXCJwYXRoXFxcIjpcXFwibWFvbWlhdlxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczogXFxcXG52YXIgZCA9IFtdO1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxcXG50cnl7XFxcXG5sZXQgaG9zdD1NWV9VUkwuc3BsaXQoJyMjJylbMV0ucmVwbGFjZSgnaHR0cDovL2FwaS5waHBqaWVrb3UudG9wJywnaHR0cHM6Ly9hcGkxLnlpbHVzaHVuZmVuZy50b3AnKTtcXFxcbnZhciB3ej1NWV9VUkwuc3BsaXQoJyMjJylbMl07XFxcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzNdO1xcXFxuaWYoTVlfUEFHRT09MSl7XFxcXG52YXIg5Zu95aSW55u05pKt5YiG57G7PWZldGNoKGhvc3QrJz9nZXRzb3J0JylcXFxcbnZhciBkYXRhPSBKU09OLnBhcnNlKOWbveWkluebtOaSreWIhuexuykuY2F0ZWdvcmllcztcXFxcbnZhciBpbmRleF9uPWRhdGFbMF0uaWRcXFxcbmRhdGEuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcign5Zu95aSW55u05pKt5YiG57G7Jyt3eixpbmRleF9uKT09ZGF0YS5pZD9zdHJvbmcoZGF0YS50aXRsZSwnRkY2Njk5Jyk6ZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIHVybDokKCcnKS5sYXp5UnVsZSgodGl0bGUsaWQsd3opID0+IHtcXFxcbiAgICAgICAgICAgICAgIHB1dE15VmFyKCflm73lpJbnm7Tmkq3liIbnsbsnK3d6LCBpZCk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcXFxuICAgICAgICAgICAgfSxkYXRhLnRpdGxlLGRhdGEuaWQsd3opLFxcXFxuICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbidcXFxcbiAgICB9KVxcXFxufSlcXFxcbn1cXFxcbnZhciBsaXN0PUpTT04ucGFyc2UoZmV0Y2goaG9zdCsnP3NvcnQ9JytnZXRNeVZhcign5Zu95aSW55u05pKt5YiG57G7Jyt3eixpbmRleF9uKSsnJnBhZ2U9JytwZykpLnZpZGVvcztcXFxcbi8vbG9nKGxpc3QpXFxcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIGRlc2M6IGRhdGEuZGF0ZSxcXFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZSxcXFxcbiAgICAgICAgICAgIHVybDogaG9zdCsnP2lkPScrZGF0YS5pZCt2b2QsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXFxcbiAgICAgICAgfSlcXFxcbiB9KVxcXFxuIH1jYXRjaChlKXtcXFxcbiAgICAgbG9nKGUubWVzc2FnZSlcXFxcbiAgICAgdG9hc3QoJ+eci+S4jeS6hicpXFxcXG4gfVxcXFxuc2V0UmVzdWx0KGQpXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6bq76LGGVFZcXFwiLFxcXCJwYXRoXFxcIjpcXFwibWFkb3VcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6IFxcXFxudmFyIGQgPSBbXTtcXFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcXFxuLy9tZDXliqDlr4ZcXFxcbmZ1bmN0aW9uIG1kNShzdHIpIHtcXFxcbiAgICByZXR1cm4gQ3J5cHRvSlMuTUQ1KHN0cikudG9TdHJpbmcoKTtcXFxcbn1cXFxcbnZhciB0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpKTsgXFxcXG5sZXQgcGc9IE1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXFxcbnZhciBtZD0gW3t0aXRsZTogJ+mmlumhtSbpopHpgZMm5qCH562+JyxpZDogJzEmMiYzJyxpbWc6J2h0dHBzOi8vZ2hwcm94eS5uZXQvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL3R1Ymlhby9tYWluL21vdmllLzExMS5zdmcmaHR0cHM6Ly9naHByb3h5Lm5ldC9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbHMxMjU3ODEwMDMvdHViaWFvL21haW4vbW92aWUvMTEyLnN2ZyZodHRwczovL2docHJveHkubmV0L2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sczEyNTc4MTAwMy90dWJpYW8vbWFpbi9tb3ZpZS8xMTMuc3ZnJmh0dHBzOi8vZ2hwcm94eS5uZXQvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL3R1Ymlhby9tYWluL21vdmllLzExNC5zdmcmaHR0cHM6Ly9naHByb3h5Lm5ldC9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbHMxMjU3ODEwMDMvdHViaWFvL21haW4vbW92aWUvMTIyLnN2Zyd9XTtcXFxcbmlmIChNWV9QQUdFID09IDEpIHtcXFxcbiAgICAkLnJlcXVpcmUoXFxcXFxcXCJDYXRlXFxcXFxcXCIpLkNhdGUobWQsJ21kJyxkKTtcXFxcbmQucHVzaCh7XFxcXG4gICAgY29sX3R5cGU6ICdsaW5lJyxcXFxcbn0se1xcXFxuICAgIGNvbF90eXBlOiAnYmlnX2JsYW5rX2Jsb2NrJyxcXFxcbn1cXFxcbix7XFxcXG4gICAgY29sX3R5cGU6ICdiaWdfYmxhbmtfYmxvY2snLFxcXFxufSk7XFxcXG59XFxcXG5sZXQg5YiG57G7PWdldE15VmFyKCdtZCcsICcxJyk7XFxcXG5cXFxcbmlmKOWIhuexuz09MSl7XFxcXG52YXIgc2lnbiA9IG1kNSgnbGlzdF9yb3c9MjAmcGFnZT0nK3BnKycmdGltZXN0YW1wPScrdCsnJnR5cGU9MicrJyZtfXElZWE2OkxEY21TP2FLKUNlRjI4N2JQdmQ5OUBFLDlVcF4nKTtcXFxcbnZhciBkYXRhMD17XFxcXG4gICAgICAgXFxcXFxcXCJlbmNvZGVfc2lnblxcXFxcXFwiOnNpZ24sXFxcXG4gICAgICAgXFxcXFxcXCJsaXN0X3Jvd1xcXFxcXFwiOlxcXFxcXFwiMjBcXFxcXFxcIixcXFxcbiAgICAgICBcXFxcXFxcInBhZ2VcXFxcXFxcIjpwZyxcXFxcbiAgICAgICBcXFxcXFxcInRpbWVzdGFtcFxcXFxcXFwiOnQsXFxcXG4gICAgICAgXFxcXFxcXCJ0eXBlXFxcXFxcXCI6XFxcXFxcXCIyXFxcXFxcXCJ9O1xcXFxudmFyIGRhdGEgPSBtZEVuY3J5cHQoSlNPTi5zdHJpbmdpZnkoZGF0YTApKTsgXFxcXG52YXIgYm9keSA9ICdwb3N0LWRhdGE9JytkYXRhOyBcXFxcbnZhciB1cmw9J2h0dHBzOi8vYXBpLm56cDF2ZS5jb20vdmlkZW8vbGlzdGNhY2hlJztcXFxcblxcXFxufWVsc2V7XFxcXG52YXIgc2lnbiA9IG1kNSgndGltZXN0YW1wPScrdCsnJm19cSVlYTY6TERjbVM/YUspQ2VGMjg3YlB2ZDk5QEUsOVVwXicpO1xcXFxudmFyIGRhdGEwPXtcXFxcbiAgICAgICAgXFxcXFxcXCJlbmNvZGVfc2lnblxcXFxcXFwiOiBzaWduLFxcXFxuICAgICAgICBcXFxcXFxcInRpbWVzdGFtcFxcXFxcXFwiOiB0XFxcXG4gICAgfTtcXFxcbnZhciBkYXRhID0gbWRFbmNyeXB0KEpTT04uc3RyaW5naWZ5KGRhdGEwKSk7IFxcXFxudmFyIGJvZHkgPSAncG9zdC1kYXRhPScrZGF0YTsgXFxcXG5pZijliIbnsbs9PTIpe1xcXFxudmFyIHVybCA9ICdodHRwczovL2FwaS5uenAxdmUuY29tL3ZpZGVvL2NoYW5uZWwnO1xcXFxufWVsc2UgaWYo5YiG57G7PT0zKXtcXFxcbnZhciB1cmwgPSAnaHR0cHM6Ly9hcGkubnpwMXZlLmNvbS92aWRlby90YWdzJztcXFxcbn1cXFxcbn07XFxcXG52YXIgaHRtbCA9IGZldGNoKHVybCwge1xcXFxuICAgIGhlYWRlcnM6IHtcXFxcbiAgICAnc3VmZml4JzonMTczMTUwJyxcXFxcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcXFxcbiAgICB9LFxcXFxuICAgIGJvZHk6IGJvZHksXFxcXG4gICAgbWV0aG9kOiAnUE9TVCdcXFxcbn0pOyBcXFxcblxcXFxubGV0IGh0bWwxID0gSlNPTi5wYXJzZShodG1sKS5kYXRhOyBcXFxcbnZhciBpdjA9IEpTT04ucGFyc2UoaHRtbCkuc3VmZml4O1xcXFxubGV0IGh0bWwyID0gbWREZWNyeXB0KGh0bWwxKTsgXFxcXG5pZijliIbnsbs9PTEpe1xcXFxudmFyIGxpc3QgPSBKU09OLnBhcnNlKGh0bWwyKS5kYXRhLmRhdGE7XFxcXG5saXN0LmZvckVhY2goKGRhdGEpID0+IHtcXFxcbiAgICAgICAgdmFyIHRhZz1kYXRhLnRhZ3M7XFxcXG4gICAgICB2YXIgc3RyMT0nJztcXFxcbiAgICAgZm9yKGkgaW4gdGFnKXtcXFxcbiAgICB2YXIgc3RyMSA9IHN0cjErdGFnW2ldLm5hbWUrJyAgICc7XFxcXG59XFxcXHJcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgICAgIGRlc2M6c3RyMSwgcGljX3VybDpkYXRhLnBhbm9yYW1hLnJlcGxhY2UoJ19zeW5jLndlYnAnLCcuanBnJyksXFxcXHJcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJwaWNfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIHVybCA6ICBkYXRhLnZpZGVvX3VybCxcXFxcbn0pXFxcXG59KVxcXFxufWVsc2UgaWYo5YiG57G7PT0yKXtcXFxcbnZhciBsaXN0ID0gSlNPTi5wYXJzZShodG1sMikuZGF0YTtcXFxcbmxpc3QuZm9yRWFjaCgoZGF0YSkgPT4ge1xcXFxyXFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEubmFtZSxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOmRhdGEudG90YWwrJ+S4queJh+WEvycsXFxcXG4gICAgICAgICAgICAgICBwaWNfdXJsOmRhdGEuaW1hZ2UsXFxcXHJcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJpY29uXzNcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICB1cmwgOiAgJ2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9tYWRvdXBpbmRhb1xcXFxcXFwiKScsXFxcXG4gICAgICAgICAgICAgICAgZXh0cmE6e1xcXFxuICAgICAgICAgICAgICBpZDpkYXRhLmlkLFxcXFxuICAgICAgICAgIH1cXFxcbn0pXFxcXG59KVxcXFxufWVsc2UgaWYo5YiG57G7PT0zKXtcXFxcbnZhciBsaXN0ID0gSlNPTi5wYXJzZShodG1sMikuZGF0YTtcXFxcbmxpc3QuZm9yRWFjaCgoZGF0YSkgPT4ge1xcXFxyXFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEubmFtZSxcXFxcbiAgICAgICAgICAgICAgICAvL3BpY191cmw6ZGF0YS50aHVtYixcXFxcclxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfM1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIHVybCA6ICAnaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL21hZG91Ymlhb3FpYW5cXFxcXFxcIiknLFxcXFxuICAgICAgICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgaWQ6ZGF0YS5pZCxcXFxcbiAgICAgICAgICB9XFxcXG59KVxcXFxufSlcXFxcbn1cXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIum6u+ixhumikemBk1xcXCIsXFxcInBhdGhcXFwiOlxcXCJtYWRvdXBpbmRhb1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczogXFxcXG52YXIgZCA9IFtdO1xcXFxuXFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXFxcbnRyeXtcXFxcbi8vbWQ15Yqg5a+GXFxcXG5mdW5jdGlvbiBtZDUoc3RyKSB7XFxcXG4gICAgcmV0dXJuIENyeXB0b0pTLk1ENShzdHIpLnRvU3RyaW5nKCk7XFxcXG59XFxcXG52YXIgdCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSk7XFxcXG52YXIgdDAgPSBNYXRoLmZsb29yKERhdGUubm93KCkvMTAwMCk7XFxcXG5sZXQgaWQ9TVlfUEFSQU1TLmlkO1xcXFxubGV0IHA9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcXFxudmFyIHNpZ24gPSBtZDUoJ2NoYW5uZWw9JytpZCsnJmxpc3Rfcm93PTYwJnBhZ2U9JytwKycmdGltZXN0YW1wPScrdCsnJnR5cGU9MiZtfXElZWE2OkxEY21TP2FLKUNlRjI4N2JQdmQ5OUBFLDlVcF4nKTsgLy9sb2coc2lnbilcXFxcblxcXFxubGV0IGRhdGEwPXtcXFxcbiAgICAgICAgXFxcXFxcXCJjaGFubmVsXFxcXFxcXCI6IGlkLFxcXFxuICAgICAgICBcXFxcXFxcImVuY29kZV9zaWduXFxcXFxcXCI6IHNpZ24sXFxcXG4gICAgICAgIFxcXFxcXFwibGlzdF9yb3dcXFxcXFxcIjogXFxcXFxcXCI2MFxcXFxcXFwiLFxcXFxuICAgICAgICBcXFxcXFxcInBhZ2VcXFxcXFxcIjogcCxcXFxcbiAgICAgICAgXFxcXFxcXCJ0aW1lc3RhbXBcXFxcXFxcIjogdCxcXFxcbiAgICAgICAgXFxcXFxcXCJ0eXBlXFxcXFxcXCI6IFxcXFxcXFwiMlxcXFxcXFwiXFxcXG4gICAgfVxcXFxuLy9sb2coZGF0YTApXFxcXG52YXIgZGF0YSA9IG1kRW5jcnlwdChKU09OLnN0cmluZ2lmeShkYXRhMCkpOyBcXFxcbi8vbG9nKGRhdGEpXFxcXG52YXIgYm9keSA9ICdwb3N0LWRhdGE9JytkYXRhOyBcXFxcbnZhciB1cmwgPSAnaHR0cHM6Ly9hcGkubnpwMXZlLmNvbS92aWRlby9saXN0Y2FjaGUnO1xcXFxudmFyIGh0bWwgPSBmZXRjaCh1cmwsIHtcXFxcbiAgICBoZWFkZXJzOiB7XFxcXG4gICAgJ3N1ZmZpeCc6JzE3MzE1MCcsXFxcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXFxcXG4gICAgfSxcXFxcbiAgICBib2R5OiBib2R5LFxcXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxcXG59KTsgXFxcXG4vL2xvZyhodG1sKVxcXFxuXFxcXG5sZXQgaHRtbDEgPSBKU09OLnBhcnNlKGh0bWwpLmRhdGE7IFxcXFxuLy9sb2coaHRtbDEpXFxcXG52YXIgaXYwPSBKU09OLnBhcnNlKGh0bWwpLnN1ZmZpeDtcXFxcbi8vbG9nKGl2MCk7XFxcXG5sZXQgaHRtbDIgPSBtZERlY3J5cHQoaHRtbDEpOyBcXFxcbi8vbG9nKGh0bWwyKVxcXFxuXFxcXG52YXIgbGlzdCA9IEpTT04ucGFyc2UoaHRtbDIpLmRhdGEuZGF0YTtcXFxcbi8vbG9nKGxpc3QpO1xcXFxubGlzdC5mb3JFYWNoKChkYXRhKSA9PiB7XFxcXG52YXIgdGFnPWRhdGEudGFncztcXFxcbiAgICAgIHZhciBzdHIxPScnO1xcXFxuICAgICBmb3IoaSBpbiB0YWcpe1xcXFxuICAgIHZhciBzdHIxID0gc3RyMSt0YWdbaV0ubmFtZSsnICAgJztcXFxcbn1cXFxcclxcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcclxcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgICAgZGVzYzpzdHIxLCBwaWNfdXJsOmRhdGEucGFub3JhbWEucmVwbGFjZSgnX3N5bmMud2VicCcsJy5qcGcnKS5yZXBsYWNlKCdfbG9uZ1ByZXZpZXcnLCcnKSxcXFxcclxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInBpY18xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgdXJsIDogIGRhdGEudmlkZW9fdXJsLFxcXFxufSlcXFxcbn0pXFxcXG59Y2F0Y2h7fVxcXFxuc2V0UmVzdWx0KGQpXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6bq76LGG5qCH562+XFxcIixcXFwicGF0aFxcXCI6XFxcIm1hZG91Ymlhb3FpYW5cXFwiLFxcXCJydWxlXFxcIjpcXFwianM6IFxcXFxudmFyIGQgPSBbXTtcXFxcblxcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxcXG50cnl7XFxcXG4vL21kNeWKoOWvhlxcXFxuZnVuY3Rpb24gbWQ1KHN0cikge1xcXFxuICAgIHJldHVybiBDcnlwdG9KUy5NRDUoc3RyKS50b1N0cmluZygpO1xcXFxufVxcXFxudmFyIHQgPSBNYXRoLmZsb29yKERhdGUubm93KCkpO1xcXFxudmFyIHQwID0gTWF0aC5mbG9vcihEYXRlLm5vdygpLzEwMDApO1xcXFxubGV0IGlkPU1ZX1BBUkFNUy5pZDtcXFxcbmxldCBwPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXFxcbnZhciBzaWduID0gbWQ1KCdsaXN0X3Jvdz02MCZwYWdlPScrcCsnJnRhZ3M9JytpZCsnJnRpbWVzdGFtcD0nK3QrJyZ0eXBlPTImbX1xJWVhNjpMRGNtUz9hSylDZUYyODdiUHZkOTlARSw5VXBeJyk7IC8vbG9nKHNpZ24pXFxcXG5cXFxcbmxldCBkYXRhMD17XFxcXG4gICAgICAgIFxcXFxcXFwiZW5jb2RlX3NpZ25cXFxcXFxcIjogc2lnbixcXFxcbiAgICAgICAgXFxcXFxcXCJsaXN0X3Jvd1xcXFxcXFwiOiBcXFxcXFxcIjYwXFxcXFxcXCIsXFxcXG4gICAgICAgIFxcXFxcXFwicGFnZVxcXFxcXFwiOiBwLFxcXFxuICAgICAgICBcXFxcXFxcInRhZ3NcXFxcXFxcIjogaWQsXFxcXG4gICAgICAgIFxcXFxcXFwidGltZXN0YW1wXFxcXFxcXCI6IHQsXFxcXG4gICAgICAgIFxcXFxcXFwidHlwZVxcXFxcXFwiOiBcXFxcXFxcIjJcXFxcXFxcIlxcXFxuICAgIH1cXFxcbi8vbG9nKGRhdGEwKVxcXFxudmFyIGRhdGEgPSBtZEVuY3J5cHQoSlNPTi5zdHJpbmdpZnkoZGF0YTApKTsgXFxcXG4vL2xvZyhkYXRhKVxcXFxudmFyIGJvZHkgPSAncG9zdC1kYXRhPScrZGF0YTsgXFxcXG52YXIgdXJsID0gJ2h0dHBzOi8vYXBpLm56cDF2ZS5jb20vdmlkZW8vbGlzdGNhY2hlJztcXFxcbnZhciBodG1sID0gZmV0Y2godXJsLCB7XFxcXG4gICAgaGVhZGVyczoge1xcXFxuICAgICdzdWZmaXgnOicxNzMxNTAnLFxcXFxuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xcXFxuICAgIH0sXFxcXG4gICAgYm9keTogYm9keSxcXFxcbiAgICBtZXRob2Q6ICdQT1NUJ1xcXFxufSk7IFxcXFxuLy9sb2coaHRtbClcXFxcblxcXFxubGV0IGh0bWwxID0gSlNPTi5wYXJzZShodG1sKS5kYXRhOyBcXFxcbi8vbG9nKGh0bWwxKVxcXFxudmFyIGl2MD0gSlNPTi5wYXJzZShodG1sKS5zdWZmaXg7XFxcXG4vL2xvZyhpdjApO1xcXFxubGV0IGh0bWwyID0gbWREZWNyeXB0KGh0bWwxKTsgXFxcXG4vL2xvZyhodG1sMilcXFxcblxcXFxudmFyIGxpc3QgPSBKU09OLnBhcnNlKGh0bWwyKS5kYXRhLmRhdGE7XFxcXG4vL2xvZyhsaXN0KTtcXFxcbmxpc3QuZm9yRWFjaCgoZGF0YSkgPT4ge1xcXFxudmFyIHRhZz1kYXRhLnRhZ3M7XFxcXG4gICAgICB2YXIgc3RyMT0nJztcXFxcbiAgICAgZm9yKGkgaW4gdGFnKXtcXFxcbiAgICB2YXIgc3RyMSA9IHN0cjErdGFnW2ldLm5hbWUrJyAgICc7XFxcXG59XFxcXHJcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgICAgIGRlc2M6c3RyMSwgcGljX3VybDpkYXRhLnBhbm9yYW1hLnJlcGxhY2UoJ19zeW5jLndlYnAnLCcuanBnJykucmVwbGFjZSgnX2xvbmdQcmV2aWV3JywnJyksXFxcXHJcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJwaWNfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIHVybCA6ICBkYXRhLnZpZGVvX3VybCxcXFxcbn0pXFxcXG59KVxcXFxufWNhdGNoe31cXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIjkxVFZcXFwiLFxcXCJwYXRoXFxcIjpcXFwiOTF0dlxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczogXFxcXG52YXIgZCA9IFtdO1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxcXG4vL21kNeWKoOWvhlxcXFxuZnVuY3Rpb24gbWQ1KHN0cikge1xcXFxuICAgIHJldHVybiBDcnlwdG9KUy5NRDUoc3RyKS50b1N0cmluZygpO1xcXFxufVxcXFxudmFyIHQgPSBNYXRoLmZsb29yKERhdGUubm93KCkpOyBcXFxcbmxldCBwZz0gTVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcXFxudmFyIHR2PSBbe3RpdGxlOiAn6aaW6aG1JumikemBkybmoIfnrb4nLGlkOiAnMSYyJjMnLGltZzonaHR0cHM6Ly9naHByb3h5Lm5ldC9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbHMxMjU3ODEwMDMvdHViaWFvL21haW4vbW92aWUvMTExLnN2ZyZodHRwczovL2docHJveHkubmV0L2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sczEyNTc4MTAwMy90dWJpYW8vbWFpbi9tb3ZpZS8xMTIuc3ZnJmh0dHBzOi8vZ2hwcm94eS5uZXQvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL3R1Ymlhby9tYWluL21vdmllLzExMy5zdmcmaHR0cHM6Ly9naHByb3h5Lm5ldC9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbHMxMjU3ODEwMDMvdHViaWFvL21haW4vbW92aWUvMTE0LnN2ZyZodHRwczovL2docHJveHkubmV0L2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sczEyNTc4MTAwMy90dWJpYW8vbWFpbi9tb3ZpZS8xMjIuc3ZnJ31dO1xcXFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcXFxuICAgICQucmVxdWlyZShcXFxcXFxcIkNhdGVcXFxcXFxcIikuQ2F0ZSh0diwndHYnLGQpO1xcXFxuZC5wdXNoKHtcXFxcbiAgICBjb2xfdHlwZTogJ2xpbmUnLFxcXFxufSx7XFxcXG4gICAgY29sX3R5cGU6ICdiaWdfYmxhbmtfYmxvY2snLFxcXFxufVxcXFxuLHtcXFxcbiAgICBjb2xfdHlwZTogJ2JpZ19ibGFua19ibG9jaycsXFxcXG59KTtcXFxcbn1cXFxcbmxldCDliIbnsbs9Z2V0TXlWYXIoJ3R2JywgJzEnKTtcXFxcblxcXFxuaWYo5YiG57G7PT0xKXtcXFxcbnZhciBzaWduID0gbWQ1KCdsaXN0X3Jvdz0yMCZwYWdlPScrcGcrJyZ0aW1lc3RhbXA9Jyt0KycmdHlwZT0yJysnJm19cSVlYTY6TERjbVM/YUspQ2VGMjg3YlB2ZDk5QEUsOVVwXicpOyBcXFxcbnZhciBkYXRhMD17XFxcXG4gICAgICAgXFxcXFxcXCJlbmNvZGVfc2lnblxcXFxcXFwiOnNpZ24sXFxcXG4gICAgICAgXFxcXFxcXCJsaXN0X3Jvd1xcXFxcXFwiOlxcXFxcXFwiMjBcXFxcXFxcIixcXFxcbiAgICAgICBcXFxcXFxcInBhZ2VcXFxcXFxcIjpwZyxcXFxcbiAgICAgICBcXFxcXFxcInRpbWVzdGFtcFxcXFxcXFwiOnQsXFxcXG4gICAgICAgXFxcXFxcXCJ0eXBlXFxcXFxcXCI6XFxcXFxcXCIyXFxcXFxcXCJ9O1xcXFxudmFyIGRhdGEgPSBtZEVuY3J5cHQoSlNPTi5zdHJpbmdpZnkoZGF0YTApKTsgXFxcXG52YXIgYm9keSA9ICdwb3N0LWRhdGE9JytkYXRhOyBcXFxcbnZhciB1cmw9J2h0dHBzOi8vdHZ2LnpqcWZhcnQuY24vdmlkZW8vbGlzdGNhY2hlJztcXFxcblxcXFxufWVsc2V7XFxcXG52YXIgc2lnbiA9IG1kNSgndGltZXN0YW1wPScrdCsnJm19cSVlYTY6TERjbVM/YUspQ2VGMjg3YlB2ZDk5QEUsOVVwXicpOyBcXFxcbnZhciBkYXRhMD17XFxcXG4gICAgICAgIFxcXFxcXFwiZW5jb2RlX3NpZ25cXFxcXFxcIjogc2lnbixcXFxcbiAgICAgICAgXFxcXFxcXCJ0aW1lc3RhbXBcXFxcXFxcIjogdFxcXFxuICAgIH07XFxcXG52YXIgZGF0YSA9IG1kRW5jcnlwdChKU09OLnN0cmluZ2lmeShkYXRhMCkpOyBcXFxcbnZhciBib2R5ID0gJ3Bvc3QtZGF0YT0nK2RhdGE7IFxcXFxuaWYo5YiG57G7PT0yKXtcXFxcbnZhciB1cmwgPSAnaHR0cHM6Ly90dnYuempxZmFydC5jbi92aWRlby9jaGFubmVsJztcXFxcbn1lbHNlIGlmKOWIhuexuz09Myl7XFxcXG52YXIgdXJsID0gJ2h0dHBzOi8vdHZ2LnpqcWZhcnQuY24vdmlkZW8vdGFncyc7XFxcXG59XFxcXG59O1xcXFxudmFyIGh0bWwgPSBmZXRjaCh1cmwsIHtcXFxcbiAgICBoZWFkZXJzOiB7XFxcXG4gICAgJ3N1ZmZpeCc6JzE3MzE1MCcsXFxcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXFxcXG4gICAgfSxcXFxcbiAgICBib2R5OiBib2R5LFxcXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxcXG59KTsgXFxcXG5sZXQgaHRtbDEgPSBKU09OLnBhcnNlKGh0bWwpLmRhdGE7IFxcXFxudmFyIGl2MD0gSlNPTi5wYXJzZShodG1sKS5zdWZmaXg7XFxcXG5sZXQgaHRtbDIgPSBtZERlY3J5cHQoaHRtbDEpOyBcXFxcbmlmKOWIhuexuz09MSl7XFxcXG52YXIgaHRtbDM9ZmV0Y2goSlNPTi5wYXJzZShodG1sMikuZGF0YS5maWxlX25hbWUpO1xcXFxudmFyIGxpc3QgPSBKU09OLnBhcnNlKGh0bWwzKS5kYXRhO1xcXFxubGlzdC5mb3JFYWNoKChkYXRhKSA9PiB7XFxcXG4gICAgICAgIHZhciB0YWc9ZGF0YS50YWdzO1xcXFxuICAgICAgdmFyIHN0cjE9Jyc7XFxcXG4gICAgIGZvcihpIGluIHRhZyl7XFxcXG4gICAgdmFyIHN0cjEgPSBzdHIxK3RhZ1tpXS5uYW1lKycgICAnO1xcXFxufVxcXFxyXFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICAgICBkZXNjOnN0cjEsIFxcXFxuICAgICAgICAgICAgICAgaW1nOmRhdGEudGh1bWIrbWRsYXp5LFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwicGljXzFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICB1cmwgOiAgZGF0YS52aWRlb191cmwrdHZ2b2QsXFxcXG59KVxcXFxufSlcXFxcbn1lbHNlIGlmKOWIhuexuz09Mil7XFxcXG52YXIgbGlzdCA9IEpTT04ucGFyc2UoaHRtbDIpLmRhdGE7XFxcXG5saXN0LmZvckVhY2goKGRhdGEpID0+IHtcXFxcclxcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcclxcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhLm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgZGVzYzpkYXRhLnRvdGFsKyfkuKrniYflhL8nLFxcXFxuICAgICAgICAgICAgICAgcGljX3VybDpkYXRhLmltYWdlLFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaWNvbl8zXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgdXJsIDogICdoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvOTF0dnBpbmRhb1xcXFxcXFwiKScsXFxcXG4gICAgICAgICAgICAgICAgZXh0cmE6e1xcXFxuICAgICAgICAgICAgICBpZDpkYXRhLmlkLFxcXFxuICAgICAgICAgIH1cXFxcbn0pXFxcXG59KVxcXFxufWVsc2UgaWYo5YiG57G7PT0zKXtcXFxcbnZhciBsaXN0ID0gSlNPTi5wYXJzZShodG1sMikuZGF0YTtcXFxcbi8vbG9nKGxpc3QpXFxcXG5saXN0LmZvckVhY2goKGRhdGEpID0+IHtcXFxcclxcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcclxcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhLm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgLy9pbWc6ZGF0YS50aHVtYittZGxhenksXFxcXHJcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzNcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICB1cmwgOiAgJ2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS85MXR2Ymlhb3FpYW5cXFxcXFxcIiknLFxcXFxuICAgICAgICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgaWQ6ZGF0YS5pZCxcXFxcbiAgICAgICAgICB9XFxcXG59KVxcXFxufSlcXFxcbn1cXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIjkxdHbmoIfnrb5cXFwiLFxcXCJwYXRoXFxcIjpcXFwiOTF0dmJpYW9xaWFuXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOiBcXFxcbnZhciBkID0gW107XFxcXG5cXFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcXFxudHJ5e1xcXFxuLy9tZDXliqDlr4ZcXFxcbmZ1bmN0aW9uIG1kNShzdHIpIHtcXFxcbiAgICByZXR1cm4gQ3J5cHRvSlMuTUQ1KHN0cikudG9TdHJpbmcoKTtcXFxcbn1cXFxcbnZhciB0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpKTtcXFxcbnZhciB0MCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKS8xMDAwKTtcXFxcbmxldCBpZD1NWV9QQVJBTVMuaWQ7XFxcXG5sZXQgcD1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxcXG52YXIgc2lnbiA9IG1kNSgnbGlzdF9yb3c9NjAmcGFnZT0nK3ArJyZ0YWdzPScraWQrJyZ0aW1lc3RhbXA9Jyt0KycmdHlwZT0yJm19cSVlYTY6TERjbVM/YUspQ2VGMjg3YlB2ZDk5QEUsOVVwXicpOyAvL2xvZyhzaWduKVxcXFxuXFxcXG5sZXQgZGF0YTA9e1xcXFxuICAgICAgICBcXFxcXFxcImVuY29kZV9zaWduXFxcXFxcXCI6IHNpZ24sXFxcXG4gICAgICAgIFxcXFxcXFwibGlzdF9yb3dcXFxcXFxcIjogXFxcXFxcXCI2MFxcXFxcXFwiLFxcXFxuICAgICAgICBcXFxcXFxcInBhZ2VcXFxcXFxcIjogcCxcXFxcbiAgICAgICAgXFxcXFxcXCJ0YWdzXFxcXFxcXCI6IGlkLFxcXFxuICAgICAgICBcXFxcXFxcInRpbWVzdGFtcFxcXFxcXFwiOiB0LFxcXFxuICAgICAgICBcXFxcXFxcInR5cGVcXFxcXFxcIjogXFxcXFxcXCIyXFxcXFxcXCJcXFxcbiAgICB9XFxcXG52YXIgZGF0YSA9IG1kRW5jcnlwdChKU09OLnN0cmluZ2lmeShkYXRhMCkpOyBcXFxcbnZhciBib2R5ID0gJ3Bvc3QtZGF0YT0nK2RhdGE7IFxcXFxudmFyIHVybCA9ICdodHRwczovL3R2di56anFmYXJ0LmNuL3ZpZGVvL2xpc3RjYWNoZSc7XFxcXG52YXIgaHRtbCA9IGZldGNoKHVybCwge1xcXFxuICAgIGhlYWRlcnM6IHtcXFxcbiAgICAnc3VmZml4JzonMTczMTUwJyxcXFxcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcXFxcbiAgICB9LFxcXFxuICAgIGJvZHk6IGJvZHksXFxcXG4gICAgbWV0aG9kOiAnUE9TVCdcXFxcbn0pOyBcXFxcbmxldCBodG1sMSA9IEpTT04ucGFyc2UoaHRtbCkuZGF0YTsgXFxcXG52YXIgaXYwPSBKU09OLnBhcnNlKGh0bWwpLnN1ZmZpeDtcXFxcbmxldCBodG1sMiA9IG1kRGVjcnlwdChodG1sMSk7IFxcXFxudmFyIGh0bWwzPWZldGNoKEpTT04ucGFyc2UoaHRtbDIpLmRhdGEuZmlsZV9uYW1lKTtcXFxcbnZhciBsaXN0ID0gSlNPTi5wYXJzZShodG1sMykuZGF0YTtcXFxcbmxpc3QuZm9yRWFjaCgoZGF0YSkgPT4ge1xcXFxudmFyIHRhZz1kYXRhLnRhZ3M7XFxcXG4gICAgICB2YXIgc3RyMT0nJztcXFxcbiAgICAgZm9yKGkgaW4gdGFnKXtcXFxcbiAgICB2YXIgc3RyMSA9IHN0cjErdGFnW2ldLm5hbWUrJyAgICc7XFxcXG59XFxcXHJcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgICAgIGRlc2M6c3RyMSwgXFxcXG4gICAgICAgICAgICAgICBpbWc6ZGF0YS50aHVtYittZGxhenksXFxcXHJcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJwaWNfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIHVybCA6ICBkYXRhLnZpZGVvX3VybCt0dnZvZCxcXFxcbn0pXFxcXG59KVxcXFxufWNhdGNoe31cXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIjkxdHbpopHpgZNcXFwiLFxcXCJwYXRoXFxcIjpcXFwiOTF0dnBpbmRhb1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczogXFxcXG52YXIgZCA9IFtdO1xcXFxuXFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXFxcbnRyeXtcXFxcbi8vbWQ15Yqg5a+GXFxcXG5mdW5jdGlvbiBtZDUoc3RyKSB7XFxcXG4gICAgcmV0dXJuIENyeXB0b0pTLk1ENShzdHIpLnRvU3RyaW5nKCk7XFxcXG59XFxcXG52YXIgdCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSk7XFxcXG52YXIgdDAgPSBNYXRoLmZsb29yKERhdGUubm93KCkvMTAwMCk7XFxcXG5sZXQgaWQ9TVlfUEFSQU1TLmlkO1xcXFxubGV0IHA9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcXFxudmFyIHNpZ24gPSBtZDUoJ2NoYW5uZWw9JytpZCsnJmxpc3Rfcm93PTYwJnBhZ2U9JytwKycmdGltZXN0YW1wPScrdCsnJnR5cGU9MiZtfXElZWE2OkxEY21TP2FLKUNlRjI4N2JQdmQ5OUBFLDlVcF4nKTsgXFxcXG5sZXQgZGF0YTA9e1xcXFxuICAgICAgICBcXFxcXFxcImNoYW5uZWxcXFxcXFxcIjogaWQsXFxcXG4gICAgICAgIFxcXFxcXFwiZW5jb2RlX3NpZ25cXFxcXFxcIjogc2lnbixcXFxcbiAgICAgICAgXFxcXFxcXCJsaXN0X3Jvd1xcXFxcXFwiOiBcXFxcXFxcIjYwXFxcXFxcXCIsXFxcXG4gICAgICAgIFxcXFxcXFwicGFnZVxcXFxcXFwiOiBwLFxcXFxuICAgICAgICBcXFxcXFxcInRpbWVzdGFtcFxcXFxcXFwiOiB0LFxcXFxuICAgICAgICBcXFxcXFxcInR5cGVcXFxcXFxcIjogXFxcXFxcXCIyXFxcXFxcXCJcXFxcbiAgICB9XFxcXG52YXIgZGF0YSA9IG1kRW5jcnlwdChKU09OLnN0cmluZ2lmeShkYXRhMCkpOyBcXFxcbnZhciBib2R5ID0gJ3Bvc3QtZGF0YT0nK2RhdGE7IFxcXFxudmFyIHVybCA9ICdodHRwczovL3R2di56anFmYXJ0LmNuL3ZpZGVvL2xpc3RjYWNoZSc7XFxcXG52YXIgaHRtbCA9IGZldGNoKHVybCwge1xcXFxuICAgIGhlYWRlcnM6IHtcXFxcbiAgICAnc3VmZml4JzonMTczMTUwJyxcXFxcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcXFxcbiAgICB9LFxcXFxuICAgIGJvZHk6IGJvZHksXFxcXG4gICAgbWV0aG9kOiAnUE9TVCdcXFxcbn0pOyBcXFxcbmxldCBodG1sMSA9IEpTT04ucGFyc2UoaHRtbCkuZGF0YTsgXFxcXG52YXIgaXYwPSBKU09OLnBhcnNlKGh0bWwpLnN1ZmZpeDtcXFxcbmxldCBodG1sMiA9IG1kRGVjcnlwdChodG1sMSk7IFxcXFxudmFyIGh0bWwzPWZldGNoKEpTT04ucGFyc2UoaHRtbDIpLmRhdGEuZmlsZV9uYW1lKTtcXFxcbnZhciBsaXN0ID0gSlNPTi5wYXJzZShodG1sMykuZGF0YTtcXFxcbmxpc3QuZm9yRWFjaCgoZGF0YSkgPT4ge1xcXFxudmFyIHRhZz1kYXRhLnRhZ3M7XFxcXG4gICAgICB2YXIgc3RyMT0nJztcXFxcbiAgICAgZm9yKGkgaW4gdGFnKXtcXFxcbiAgICB2YXIgc3RyMSA9IHN0cjErdGFnW2ldLm5hbWUrJyAgICc7XFxcXG59XFxcXHJcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgICAgIGRlc2M6c3RyMSxcXFxcbiAgICAgICAgICAgICAgIGltZzpkYXRhLnRodW1iK21kbGF6eSxcXFxcclxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInBpY18xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgdXJsIDogIGRhdGEudmlkZW9fdXJsK3R2dm9kLFxcXFxufSlcXFxcbn0pXFxcXG59Y2F0Y2h7fVxcXFxuc2V0UmVzdWx0KGQpXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzJcXFwiLFxcXCJuYW1lXFxcIjpcXFwi54yr5ZKqXFxcIixcXFwicGF0aFxcXCI6XFxcIm1hb21pXFxcIixcXFwicnVsZVxcXCI6XFxcIiBqczogXFxcXG52YXIgZCA9IFtdO1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcXFxudmFyIOeMq+WSqj0gW3t0aXRsZTogJ+eMq+WSquWOn+WImyZBSeWItuS9nCbkuI3pm4Xop4bpopEm5Lqa5rSy5pegIOeggSbmipbpn7Plprnpm4blkIgm54Ot5Ymn5oiQ5Lq654mIJumfqeWbveS4iee6pybkurrmsJTlpbMg5LyYJyxpZDogJzEwJjE2JjUmOSYxMSYxMiYxMyY2J31dO1xcXFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcXFxuICAgICQucmVxdWlyZShcXFxcXFxcIkNhdGVcXFxcXFxcIikuQ2F0ZSjnjKvlkqosJ+eMq+WSqicsZCk7XFxcXG59XFxcXG52YXIgc2lnbj1FbmNyeXB0KCd7XFxcXFxcXCJzcGVjaWFsX2lkXFxcXFxcXCI6JytnZXRNeVZhcign54yr5ZKqJywnMTAnKSsnLFxcXFxcXFwicGFnZVxcXFxcXFwiOicrcGcrJ30nKTtcXFxcbnRyeXtcXFxcbnZhciBob3N0PSdodHRwOi8vMTE5LjI4LjUyLjE5Mzo4MDg5L2FwaS9zcGVjaWFsL3ZpZGVvP3BhcmFtcz0nK3NpZ247XFxcXG52YXIgYm9keT0ncGFyYW1zPScrc2lnbjtcXFxcbnZhciBodG1sID0gZmV0Y2goaG9zdCwge1xcXFxuICAgIGhlYWRlcnM6IHtcXFxcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXFxcXG4gICAgfSxcXFxcbiAgICBib2R5OiBib2R5LFxcXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxcXG59KTsgXFxcXG52YXIgaHRtbDI9RGVjcnlwdChodG1sKVxcXFxudmFyIGxpc3Q9SlNPTi5wYXJzZShodG1sMikuZGF0YS5kYXRhO1xcXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudmlkZW9fbmFtZSxcXFxcbiAgICAgICAgICAgIGRlc2M6ZGF0YS5jcmVhdGVfYXQsXFxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxcXG4gICAgICAgICAgICB1cmw6ZGF0YS52aWRlb19pZCttYW9taWp4LFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxcXG4gICAgICAgIH0pXFxcXG4gfSlcXFxcbiB9Y2F0Y2h7fVxcXFxuc2V0UmVzdWx0KGQpXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzJcXFwiLFxcXCJuYW1lXFxcIjpcXFwi54yr5ZKq5Y6f5YibXFxcIixcXFwicGF0aFxcXCI6XFxcIm1hb21peXVhbmNodWFuZ1xcXCIsXFxcInJ1bGVcXFwiOlxcXCIganM6IFxcXFxudmFyIGQgPSBbXTtcXFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcXFxudmFyIHBnPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXFxcbnZhciDnjKvlkqrljp/liJs9IFt7dGl0bGU6ICfmnIDmlrAm54Ot6ZeoJyxpZDogJzMmMSd9XTtcXFxcbmlmIChNWV9QQUdFID09IDEpIHtcXFxcbiAgICAkLnJlcXVpcmUoXFxcXFxcXCJDYXRlXFxcXFxcXCIpLkNhdGUo54yr5ZKq5Y6f5YibLCfnjKvlkqrljp/liJsnLGQpO1xcXFxufVxcXFxudmFyIHNpZ249RW5jcnlwdCgne1xcXFxcXFwidXNlcl9pZFxcXFxcXFwiOjE3OTAzNjgsXFxcXFxcXCJ0eXBlXFxcXFxcXCI6JytnZXRNeVZhcign54yr5ZKq5Y6f5YibJywnMycpKycsXFxcXFxcXCJwYWdlXFxcXFxcXCI6JytwZysnfScpO1xcXFxudHJ5e1xcXFxudmFyIGhvc3Q9J2h0dHA6Ly8xMTkuMjguNTIuMTkzOjgwODkvYXBpL29yaWdpbmFsL2luZGV4P3BhcmFtcz0nK3NpZ247XFxcXG52YXIgYm9keT0ncGFyYW1zPScrc2lnbjtcXFxcbnZhciBodG1sID0gZmV0Y2goaG9zdCwge1xcXFxuICAgIGhlYWRlcnM6IHtcXFxcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXFxcXG4gICAgfSxcXFxcbiAgICBib2R5OiBib2R5LFxcXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxcXG59KTsgXFxcXG52YXIgaHRtbDI9RGVjcnlwdChodG1sKVxcXFxudmFyIGxpc3Q9SlNPTi5wYXJzZShodG1sMikuZGF0YS5kYXRhO1xcXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICBkZXNjOmRhdGEuY3JlYXRlX2F0LFxcXFxuICAgICAgICAgICAgaW1nOiBkYXRhLnZpZGVvX2ltZyxcXFxcbiAgICAgICAgICAgIHVybDpkYXRhLm0zdTgsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMycsXFxcXG4gICAgICAgICAgICBleHRyYTogeyBcXFxcbiAgICAgICAgICAgIGxvbmdDbGljazogW1xcXFxuICAgICAgICAgICAge3RpdGxlOiAn5LiL6L29JywganM6ICQudG9TdHJpbmcoKHVybCk9PnsgcmV0dXJuICAnZG93bmxvYWQ6Ly8nK3VybH0sZGF0YS5kb3duKX1cXFxcbiAgICAgICAgICAgIF1cXFxcbiAgICAgICAgICAgfVxcXFxuICAgICAgfSlcXFxcbiB9KVxcXFxuIH1jYXRjaHt9XFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfMlxcXCIsXFxcIm5hbWVcXFwiOlxcXCLpppbpobXop4bpopHliIbnsbtcXFwiLFxcXCJwYXRoXFxcIjpcXFwic3l2aWRlb1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczogXFxcXG52YXIgZCA9IFtdO1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxcXG50cnl7XFxcXG5sZXQgaG9zdD1NWV9QQVJBTVMuaG9zdC5yZXBsYWNlKCdodHRwOi8vYXBpLnBocGppZWtvdS50b3AnLCdodHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcCcpO1xcXFxudmFyIHd6PU1ZX1BBUkFNUy53ejtcXFxcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxcXG5pZih3ej09J2Jhb21hZHMnKXtcXFxcbiAgICB2YXIgaG9zdD1NWV9QQVJBTVMuaG9zdC5yZXBsYWNlKCdodHRwOi8vYXBpLnBocGppZWtvdS50b3AnLCdodHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcCcpLnJlcGxhY2UoJ2Jhb21hZHMnLCdiYW9tYS9iYW9tYWRzJyk7XFxcXG59XFxcXG52YXIg6aaW6aG16KeG6aKR5YiG57G7PWZldGNoKGhvc3QrJz9nZXRzb3J0JylcXFxcbnZhciBkYXRhPSBKU09OLnBhcnNlKOmmlumhteinhumikeWIhuexuykuY2F0ZWdvcmllcztcXFxcbnZhciBpbmRleF9uPWRhdGFbMF0uaWQudG9TdHJpbmcoKVxcXFxuaWYoTVlfUEFHRT09MSl7XFxcXG5kYXRhLmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ+mmlumhteinhumikeWIhuexuycrd3osaW5kZXhfbik9PWRhdGEuaWQudG9TdHJpbmcoKT9zdHJvbmcoZGF0YS50aXRsZSwnRkY2Njk5Jyk6ZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIHVybDokKCcnKS5sYXp5UnVsZSgodGl0bGUsaWQsd3opID0+IHtcXFxcbiAgICAgICAgICAgICAgIHB1dE15VmFyKCfpppbpobXop4bpopHliIbnsbsnK3d6LCBpZCk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcXFxuICAgICAgICAgICAgfSxkYXRhLnRpdGxlLGRhdGEuaWQudG9TdHJpbmcoKSx3eiksXFxcXG4gICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJ1xcXFxuICAgIH0pXFxcXG59KVxcXFxufVxcXFxuXFxcXG52YXIgbGlzdD1KU09OLnBhcnNlKGZldGNoKGhvc3QrJz9zb3J0PScrZ2V0TXlWYXIoJ+mmlumhteinhumikeWIhuexuycrd3osaW5kZXhfbikrJyZwYWdlPScrcGcpKS52aWRlb3M7XFxcXG4vL2xvZyhsaXN0KVxcXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgIGlmKCh3ej09J2x1dHViZScpfCh3ej09J3BhbGknKSl7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIGRlc2M6KGRhdGEuY3JlYXRlZF9kYXRlPT1udWxsPycnOmRhdGEuY3JlYXRlZF9kYXRlKSsnICAnKyhkYXRhLmRhdGU9PW51bGw/Jyc6ZGF0YS5kYXRlKSxcXFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZStsdWxhenksXFxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxcXG4gICAgICAgIH0pXFxcXG4gICAgfWVsc2UgaWYod3ouaW5jbHVkZXMoJ2t1YWltYW8nKXwod3o9PSdmZWQnKXwod3o9PSdzYXZzcCcpfCh3ej09J21tc3AnKXwod3o9PSdjbWF2Jyl8KHd6PT0naHNjazInKXx3ei5pbmNsdWRlcygneGlhbmdqaWFvJykpe1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZWRfZGF0ZT09bnVsbD8nJzpkYXRhLmNyZWF0ZWRfZGF0ZSkrJyAgJysoZGF0YS5jcmVhdGV0aW1lPT1udWxsPycnOmRhdGEuY3JlYXRldGltZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSksXFxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxcXG4gICAgICAgIH0pXFxcXG4gICAgfWVsc2UgaWYod3o9PSdpbnMnKXtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgZGVzYzooZGF0YS5jcmVhdGVkX2RhdGU9PW51bGw/Jyc6ZGF0YS5jcmVhdGVkX2RhdGUpKycgICcrKGRhdGEuZGF0ZT09bnVsbD8nJzpkYXRhLmRhdGUpLFxcXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlK2luc2xhenksXFxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxcXG4gICAgICAgIH0pXFxcXG4gICAgfWVsc2V7XFxcXG4gICAgICAgIGlmKGRhdGEuaW1hZ2Upe1xcXFxuICAgICAgICB2YXIgaW1nPWRhdGEuaW1hZ2U7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIGRlc2M6KGRhdGEuY3JlYXRlZF9kYXRlPT1udWxsPycnOmRhdGEuY3JlYXRlZF9kYXRlKSsnICAnKyhkYXRhLmRhdGU9PW51bGw/Jyc6ZGF0YS5kYXRlKSsnICAnKyhkYXRhLmR1cmF0aW9uPT1udWxsPycnOmRhdGEuZHVyYXRpb24pLFxcXFxuICAgICAgICAgICAgaW1nOiAoaW1nLmluY2x1ZGVzKCd1cGxvYWQnKXx8aW1nLmluY2x1ZGVzKCduZXcuJykpPyhkYXRhLmltYWdlK2xhenkpOmRhdGEuaW1hZ2UsXFxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuIH0pXFxcXG4gfWNhdGNoKGUpe1xcXFxuICAgICBsb2coZS5tZXNzYWdlKVxcXFxuICAgICB0b2FzdCgn55yL5LiN5LqGJylcXFxcbiB9XFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwidGV4dF80XFxcIixcXFwibmFtZVxcXCI6XFxcIuWbvueJh+S6jOe6p1xcXCIsXFxcInBhdGhcXFwiOlxcXCJ0dXBpYW5lcmppXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQ9W107XFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKVxcXFxubGV0IGhvc3Q9TVlfUEFSQU1TLmhvc3Q7XFxcXG5sZXQgdXJsPWhvc3Quc3BsaXQoJz8nKVswXTtcXFxcbnZhciB3ej1NWV9QQVJBTVMud3o7XFxcXG50cnl7XFxcXG4gbGV0IGltZz0gSlNPTi5wYXJzZShmZXRjaChob3N0KSkuY29udGVudC5yZXBsYWNlKC9cXFxcXFxcXCQvZywnJykucmVwbGFjZSgv5YiG5YmyL2csJycpLnNwbGl0KCdAJyk7XFxcXG4gaW1nLmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICBpbWc6ZGF0YSxcXFxcbiAgICAgICAgICAgIHVybDogJ3BpY3M6Ly8nK2ltZy5qb2luKCcmJicpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3BpY18xX2Z1bGwnXFxcXG4gICAgICAgIH0pXFxcXG4gfSlcXFxcbiBcXFxcbn1jYXRjaChlKXtcXFxcbiAgICBsb2coZS5tZXNzYWdlKVxcXFxuICAgICB0b2FzdCgn55yL5LiN5LqGJylcXFxcbn1cXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8yXFxcIixcXFwibmFtZVxcXCI6XFxcIuWbvueJh+WIhuexu1xcXCIsXFxcInBhdGhcXFwiOlxcXCJwaWNlcmppXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOiBcXFxcbnZhciBkID0gW107XFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXFxcbnRyeXtcXFxcbmxldCBob3N0PU1ZX1BBUkFNUy5ob3N0LnJlcGxhY2UoJ2h0dHA6Ly9hcGkucGhwamlla291LnRvcCcsJ2h0dHBzOi8vYXBpMS55aWx1c2h1bmZlbmcudG9wJykucmVwbGFjZSgnY29taWMnLCdwaWN0dXJlJyk7XFxcXG52YXIgd3o9TVlfUEFSQU1TLnd6O1xcXFxudmFyIHBnPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXFxcbmlmKE1ZX1BBR0U9PTEpe1xcXFxudmFyIOWbvueJh+WIhuexuz1mZXRjaChob3N0Kyc/Z2V0c29ydCcpXFxcXG52YXIgZGF0YT0gSlNPTi5wYXJzZSjlm77niYfliIbnsbspLmNhdGVnb3JpZXM7XFxcXG52YXIgaW5kZXhfbj1kYXRhWzBdLmlkLnRvU3RyaW5nKClcXFxcbmRhdGEuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcign5Zu+54mH5YiG57G7Jyt3eixpbmRleF9uKT09ZGF0YS5pZC50b1N0cmluZygpP3N0cm9uZyhkYXRhLnRpdGxlLCdGRjY2OTknKTpkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgdXJsOiQoJycpLmxhenlSdWxlKCh0aXRsZSxpZCx3eikgPT4ge1xcXFxuICAgICAgICAgICAgICAgcHV0TXlWYXIoJ+WbvueJh+WIhuexuycrd3osIGlkKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxcXG4gICAgICAgICAgICB9LGRhdGEudGl0bGUsZGF0YS5pZC50b1N0cmluZygpLHd6KSxcXFxcbiAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nXFxcXG4gICAgfSlcXFxcbn0pXFxcXG59XFxcXG52YXIgbGlzdD1KU09OLnBhcnNlKGZldGNoKGhvc3QrJz9zb3J0PScrZ2V0TXlWYXIoJ+WbvueJh+WIhuexuycrd3osaW5kZXhfbikrJyZwYWdlPScrcGcpKS52aWRlb3M7XFxcXG4vL2xvZyhsaXN0KVxcXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICBkZXNjOiBkYXRhLmRhdGUsXFxcXG4gICAgICAgICAgICBpbWc6IHd6PT0ndGlrdG9rMTgnPyhkYXRhLmltYWdlK2xhenkpOmRhdGEuaW1hZ2UsXFxcXG4gICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vZW1wdHknKydAcnVsZT1qczokLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvdHVwaWFuZXJqaVxcXFxcXFwiKScsXFxcXG4gICAgICAgICAgICB1cmw6IHd6PT0ndHV6YWMnP2RhdGEuaW1hZ2U6KGhvc3QrJz9pZD0nK2RhdGEuaWQrcGljcyksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMycsXFxcXG4gICAgICAgICAgICBleHRyYTp7XFxcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7aG9zdH0/aWQ9JHtkYXRhLmlkfWAsXFxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcXFxuICAgICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcbiB9KVxcXFxuIH1jYXRjaChlKXtcXFxcbiAgICAgbG9nKGUubWVzc2FnZSlcXFxcbiAgICAgdG9hc3QoJ+eci+S4jeS6hicpXFxcXG4gfVxcXFxuc2V0UmVzdWx0KGQpXFxcIn1dXCJ9IiwicGljVXJsIjoiaHR0cDovL2FwaS54a2ExLnRvcC82aW1nL3pob25na291c2hlLnBuZyIsInRpdGxlIjoi6YeN5Y+j56S+In0=
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement