xiaomianao666

邀您一起看:Tiktok美图

Apr 18th, 2025
540
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥Tiktok美图@@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/aWQ9JytkYXRhLmlkK3BpY3MpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8zJyxcXG4gICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke2hvc3R9P2lkPSR7ZGF0YS5pZH1gLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuIH0pXFxuIH1jYXRjaChlKXtcXG4gICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgICB0b2FzdCgn55yL5LiN5LqGJylcXG4gfVxcbnNldFJlc3VsdChkKVwifV0sXCJwYXJhbXNcIjpcIntcXFwiaG9zdFxcXCI6XFxcImh0dHA6Ly9hcGkucGhwamlla291LnRvcC9waWN0dXJlL3Rpa3RvazE4L3Rpa3RvazE4LnBocFxcXCIsXFxcInd6XFxcIjpcXFwidGlrdG9rMThcXFwifVwiLFwic2F2ZWRcIjpmYWxzZSxcInRpdGxlXCI6XCLojITlrZBcIixcInZlcnNpb25cIjowLFwidXJsXCI6XCJoaWtlcjovL2VtcHR5IyNmeXBhZ2U7Z2V0O1VURi04O3tVc2VyLUFnZW50QE1vemlsbGEvNS4wIChMaW51eO+8m++8myBBbmRyb2lkIDE177yb77ybIDI0MDdGUks4RUMgQnVpbGQvQVAzQS4yNDA2MTcuMDA477yb77ybIHd2KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzQuMCBDaHJvbWUvMTI4LjAuNjYxMy4xMjcgTW9iaWxlIFNhZmFyaS81MzcuMzZ9XCIsXCJjb2xfdHlwZVwiOlwibW92aWVfMlwiLFwiZmluZF9ydWxlXCI6XCJqczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9waWNlcmppXFxcIilcIixcImdyb3VwXCI6XCIxOCtcIixcInVhXCI6XCJtb2JpbGVcIixcInByZVJ1bGVcIjpcIlwiLFwicGFnZXNcIjpcIlt7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJhZXNcXFwiLFxcXCJwYXRoXFxcIjpcXFwiYWVzXFxcIixcXFwicnVsZVxcXCI6XFxcIi8v5Yqg6L29Q3J5cHRvSlPlupNcXFxcbmV2YWwoZ2V0Q3J5cHRvSlMoKSlcXFxcbi8vMTPkvY3ml7bpl7TmiLNcXFxcbnZhciB0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpICk7XFxcXG4vL+eugOWNleWMuemFjVxcXFxubGV0IHNwID0gKGl0LCBzLCBlKSA9PiBTdHJpbmcoaXQuc3BsaXQocylbMV0pLnNwbGl0KGUpWzBdO1xcXFxuLy/popzoibJcXFxcbmZ1bmN0aW9uIHN0cm9uZyhkLCBjKSB7XFxcXG4gICAgcmV0dXJuICfigJjigJjigJnigJk8c3Ryb25nPjxmb250IGNvbG9yPSMnICsgKGMgfHwgJzAwMDAwMCcpICsgJz4nICsgZCArICc8L2ZvbnQ+PC9zdHJvbmc+JztcXFxcbn1cXFxcbi8v55Sf5oiQ5pe26Ze05oizXFxcXG5mdW5jdGlvbiBnZXRDdXJyZW50VGltZXN0YW1wKCkge1xcXFxuICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcXFxcbn1cXFxcbi8vbWQ15Yqg5a+GXFxcXG5mdW5jdGlvbiBtZDUoc3RyKSB7XFxcXG4gICAgcmV0dXJuIENyeXB0b0pTLk1ENShzdHIpLnRvU3RyaW5nKCk7XFxcXG59XFxcXG4vL3NoYTI1NuWKoOWvhlxcXFxuZnVuY3Rpb24gc2hhMjU2KHN0cikge1xcXFxuICAgIHJldHVybiBDcnlwdG9KUy5TSEEyNTYoc3RyKS50b1N0cmluZygpO1xcXFxufVxcXFxuLy/popzoibJcXFxcbmZ1bmN0aW9uIGNvbG9yKHR4dCkge1xcXFxuICAgIHJldHVybiAgJzxiPjxmb250IGNvbG9yPScgKyAnI0ZGNjY5OScgKyAnPicgKyB0eHQgKyAnPC9mb250PjwvYj4nXFxcXG59XFxcXG4vL+iMhOWtkOino+WvhuWHveaVsFxcXFxuZnVuY3Rpb24gcXpEZWNyeXB0KHdvcmQpIHtcXFxcbiAgICBjb25zdCBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFxcXFxcInlpbnN1MTIzNDVhYmNkZWZcXFxcXFxcIik7XFxcXG4gICAgY29uc3QgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFxcXFxcImtlamkxMjM0NTY5OTk5OTlcXFxcXFxcIik7XFxcXG4gICAgbGV0IGVuY3J5cHRlZEhleFN0ciA9IENyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2Uod29yZCk7XFxcXG4gICAgbGV0IGRlY3J5cHQgPSBDcnlwdG9KUy5BRVMuZGVjcnlwdCh7XFxcXG4gICAgICAgIGNpcGhlcnRleHQ6IGVuY3J5cHRlZEhleFN0clxcXFxuICAgIH0sIGtleSwge1xcXFxuICAgICAgICBpdjogaXYsXFxcXG4gICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcXFxuICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcXFxcbiAgICB9KTtcXFxcbiAgICBpZiAoZGVjcnlwdCkge1xcXFxuICAgICAgICBsZXQgZGVjcnlwdGVkU3RyID0gZGVjcnlwdC50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxcXG4gICAgICAgIHJldHVybiBkZWNyeXB0ZWRTdHI7XFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgLy8g6Kej5a+G5aSx6LSl77yM6L+U5ZuebnVsbOaIlumUmeivr+S/oeaBr1xcXFxuICAgICAgICByZXR1cm4gbnVsbDtcXFxcbiAgICB9XFxcXG59XFxcXG5cXFxcblxcXFxuLy8g54yr5ZKq6Kej5a+G5Ye95pWwXFxcXG5mdW5jdGlvbiBEZWNyeXB0KHdvcmQpIHtcXFxcbiAgICBjb25zdCBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFxcXFxcIjYyNTIyMmY5MTQ5ZTk2MWRcXFxcXFxcIik7XFxcXG4gICAgY29uc3QgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFxcXFxcIjVlZmR0ZjYwNjBlMm8zMzBcXFxcXFxcIik7XFxcXG4gICAgbGV0IGVuY3J5cHRlZEhleFN0ciA9IENyeXB0b0pTLmVuYy5IZXgucGFyc2Uod29yZCk7XFxcXG4gICAgbGV0IGRlY3J5cHQgPSBDcnlwdG9KUy5BRVMuZGVjcnlwdCh7XFxcXG4gICAgICAgIGNpcGhlcnRleHQ6IGVuY3J5cHRlZEhleFN0clxcXFxuICAgIH0sIGtleSwge1xcXFxuICAgICAgICBpdjogaXYsXFxcXG4gICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcXFxuICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcXFxcbiAgICB9KTtcXFxcbiAgICBpZiAoZGVjcnlwdCkge1xcXFxuICAgICAgICBsZXQgZGVjcnlwdGVkU3RyID0gZGVjcnlwdC50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxcXG4gICAgICAgIHJldHVybiBkZWNyeXB0ZWRTdHI7XFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgLy8g6Kej5a+G5aSx6LSl77yM6L+U5ZuebnVsbOaIlumUmeivr+S/oeaBr1xcXFxuICAgICAgICByZXR1cm4gbnVsbDtcXFxcbiAgICB9XFxcXG59XFxcXG5cXFxcbi8vIOeMq+WSquWKoOWvhuWHveaVsFxcXFxuZnVuY3Rpb24gRW5jcnlwdChwbGFpbnRleHQpIHtcXFxcbiAgICBjb25zdCBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFxcXFxcIjYyNTIyMmY5MTQ5ZTk2MWRcXFxcXFxcIik7XFxcXG4gICAgY29uc3QgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFxcXFxcIjVlZmR0ZjYwNjBlMm8zMzBcXFxcXFxcIik7XFxcXG4gICAgdmFyIGVuY3J5cHRlZCA9IENyeXB0b0pTLkFFUy5lbmNyeXB0KHBsYWludGV4dCwga2V5LCB7XFxcXG4gICAgICAgIGl2OiBpdixcXFxcbiAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsXFxcXG4gICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcXFxuICAgIH0pO1xcXFxuICAgIHZhciBjaXBoZXJ0ZXh0ID0gZW5jcnlwdGVkLmNpcGhlcnRleHQudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkhleCk7XFxcXG4gICAgcmV0dXJuIGNpcGhlcnRleHQudG9VcHBlckNhc2UoKTtcXFxcbn1cXFxcblxcXFxudmFyIGxhenkgPSAkKCcnKS5pbWFnZSgoKSA9PiB7XFxcXG5jb25zdCBDcnlwdG9VdGlsID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9hc3NldHMvY3J5cHRvLWphdmEuanNcXFxcXFxcIik7XFxcXG5cXFxcdGxldCBpZCA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZVVURjgoXFxcXFxcXCJmNWQ5NjVkZjc1MzM2MjcwXFxcXFxcXCIpO1xcXFxuXFxcXHRsZXQgaXYgPSBDcnlwdG9VdGlsLkRhdGEucGFyc2VVVEY4KFxcXFxcXFwiOTdiNjAzOTRhYmMyZmJlMVxcXFxcXFwiKTtcXFxcblxcXFx0bGV0IHRleHREYXRhID0gQ3J5cHRvVXRpbC5EYXRhLnBhcnNlSW5wdXRTdHJlYW0oaW5wdXQpO1xcXFxuXFxcXHRsZXQgZW5jcnlwdGVkID0gQ3J5cHRvVXRpbC5BRVMuZGVjcnlwdCh0ZXh0RGF0YSwgaWQsIHtcXFxcbiAgXFxcXHRtb2RlOiBcXFxcXFxcIkFFUy9DQkMvUEtDUzdQYWRkaW5nXFxcXFxcXCIsXFxcXG5cXFxcdFxcXFx0aXY6IGl2XFxcXG5cXFxcdH0pO1xcXFxuXFxcXHRyZXR1cm4gZW5jcnlwdGVkLnRvSW5wdXRTdHJlYW0oKTtcXFxcbn0pXFxcXG5cXFxcbi8v6KeG6aKR6K+35rGCXFxcXG52YXIgdm9kID0gJCgnJykubGF6eVJ1bGUoKCkgPT4ge1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxcXG50cnl7XFxcXG52YXIgdXJsID1KU09OLnBhcnNlKGZldGNoKGlucHV0KSkudmlkZW87XFxcXG5yZXR1cm4gdXJsK2AjaXNWaWRlbz10cnVlI2BcXFxcbn1jYXRjaChlKXtcXFxcbiAgICBsb2coZS5tZXNzYWdlKVxcXFxuICAgIHJldHVybiAndG9hc3Q6Ly/or7fmsYLlpLHotKUnXFxcXG59XFxcXG59KVxcXFxuLy/lm77niYfor7fmsYJcXFxcbnZhciBwaWNzID0gJCgnJykubGF6eVJ1bGUoKCkgPT4ge1xcXFxubGV0IGltZz0gSlNPTi5wYXJzZShmZXRjaChpbnB1dCkpLmNvbnRlbnQucmVwbGFjZSgvXFxcXFxcXFwkL2csJycpLnJlcGxhY2UoL+WIhuWJsi9nLCcnKS5zcGxpdCgnQCcpO1xcXFxucmV0dXJuICdwaWNzOi8vJytpbWcuam9pbignJiYnKTtcXFxcbn0pXFxcXG4vL+eMq+WSqua8q+eUu+ino+aekFxcXFxudmFyIG1hb21pbWFuaHVhang9JCgnJykubGF6eVJ1bGUoKCkgPT4geyBcXFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpXFxcXG52YXIgc2lnbj1FbmNyeXB0KCd7XFxcXFxcXCJ1c2VyX2lkXFxcXFxcXCI6MTc5MDM2OCxcXFxcXFxcImxpc3RfaWRcXFxcXFxcIjonK2lucHV0Kyd9Jyk7XFxcXG52YXIgaG9zdD0naHR0cDovLzExOS4yOC41Mi4xOTM6ODA4OS9hcGkvY29taWMvd2F0Y2g/cGFyYW1zPScrc2lnbjtcXFxcbnZhciBib2R5PSdwYXJhbXM9JytzaWduO1xcXFxudmFyIGh0bWwgPSBmZXRjaChob3N0LCB7XFxcXG4gICAgaGVhZGVyczoge1xcXFxuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcXFxcbiAgICB9LFxcXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxcXG59KTsgXFxcXG52YXIgaHRtbDI9RGVjcnlwdChodG1sKVxcXFxudmFyIGxpc3Q9SlNPTi5wYXJzZShodG1sMikuZGF0YTtcXFxcbmxldCBwaWNBcnI9W107XFxcXG5sZXQgbGVuPSBsaXN0Lmxlbmd0aC0xO1xcXFxuZm9yIChpID0gMDsgaSA8PSBsZW47IGkrKykge1xcXFxuICAgICAgIHBpY0FycltpXSA9IGxpc3RbaV0uaW1hZ2U7XFxcXG4gICAgIH1cXFxcbnJldHVybiAncGljczovLycrcGljQXJyLmpvaW4oJyYmJyk7XFxcXG59KVxcXFxuXFxcXG4vL+eMq+WSqkZN6Kej5p6QXFxcXG52YXIgbWFvbWlmbWp4PSQoJycpLmxhenlSdWxlKCgpID0+IHsgXFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKVxcXFxudmFyIHNpZ249RW5jcnlwdCgne1xcXFxcXFwiaWRcXFxcXFxcIjonK2lucHV0Kyd9Jyk7XFxcXG52YXIgaG9zdD0naHR0cDovLzExOS4yOC41Mi4xOTM6ODA4OS9hcGkvYm9vay9kZXRhaWw/cGFyYW1zPScrc2lnbjtcXFxcbnZhciBib2R5PSdwYXJhbXM9JytzaWduO1xcXFxudmFyIGh0bWwgPSBmZXRjaChob3N0LCB7XFxcXG4gICAgaGVhZGVyczoge1xcXFxuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcXFxcbiAgICB9LFxcXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxcXG59KTsgXFxcXG52YXIgaHRtbDI9RGVjcnlwdChodG1sKVxcXFxudmFyIHVybD1KU09OLnBhcnNlKGh0bWwyKS5kYXRhLmRhdGFbMF0uY29udGVudDtcXFxcbnJldHVybiB1cmxcXFxcbn0pXFxcXG5cXFxcbi8v54yr5ZKq6Kej5p6QXFxcXG52YXIgbWFvbWlqeD0kKCcnKS5sYXp5UnVsZSgoKSA9PiB7IFxcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSlcXFxcbnZhciBzaWduPUVuY3J5cHQoJ3tcXFxcXFxcImlkXFxcXFxcXCI6JytpbnB1dCsnfScpO1xcXFxudmFyIGhvc3Q9J2h0dHA6Ly8xMTkuMjguNTIuMTkzOjgwODkvYXBpL3ZpZGVvL2RldGFpbD9wYXJhbXM9JytzaWduO1xcXFxudmFyIGJvZHk9J3BhcmFtcz0nK3NpZ247XFxcXG52YXIgaHRtbCA9IGZldGNoKGhvc3QsIHtcXFxcbiAgICBoZWFkZXJzOiB7XFxcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxcXFxuICAgIH0sXFxcXG4gICAgbWV0aG9kOiAnUE9TVCdcXFxcbn0pOyBcXFxcbnZhciBodG1sMj1EZWNyeXB0KGh0bWwpXFxcXG4vL+S4i+i9vVxcXFxuLy92YXIgZG93bj1KU09OLnBhcnNlKGh0bWwyKS5kYXRhLnZpZGVvc1swXS5kb3duO1xcXFxuLy/mlofku7ZcXFxcbnZhciB1cmw9SlNPTi5wYXJzZShodG1sMikuZGF0YS52aWRlb3NbMF0uZmlsZTtcXFxcbnJldHVybiB1cmxcXFxcbn0pXFxcXG5cXFxcbi8v6bq76LGG5Yqg5a+G5Ye95pWwXFxcXG5mdW5jdGlvbiBtZEVuY3J5cHQocGxhaW50ZXh0KSB7XFxcXG4gICAgY29uc3Qga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcXFxcXCJWcTIzNHpCZVNkR2dZWHpWVEVmbm5qamRtYVRrazdBNFxcXFxcXFwiKTtcXFxcbiAgICBjb25zdCBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKFxcXFxcXFwiLXA5Qlt+UG5QczE3MzE1MFxcXFxcXFwiKTtcXFxcbiAgICB2YXIgZW5jcnlwdGVkID0gQ3J5cHRvSlMuQUVTLmVuY3J5cHQocGxhaW50ZXh0LCBrZXksIHtcXFxcbiAgICAgICAgaXY6IGl2LFxcXFxuICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQyxcXFxcbiAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3IC8vIOazqOaEj+i/memHjOW6lOivpeaYr0NyeXB0b0pTLnBhZC5Ob1BhZGRpbmdcXFxcbiAgICB9KTtcXFxcbiAgICB2YXIgY2lwaGVydGV4dCA9IGVuY3J5cHRlZC5jaXBoZXJ0ZXh0LnRvU3RyaW5nKENyeXB0b0pTLmVuYy5CYXNlNjQpO1xcXFxuICAgIHJldHVybiBjaXBoZXJ0ZXh0O1xcXFxufVxcXFxuXFxcXG4vLyDpurvosYbop6Plr4blh73mlbBcXFxcbmZ1bmN0aW9uIG1kRGVjcnlwdCh3b3JkKSB7XFxcXG4gICAgY29uc3Qga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcXFxcXCJWcTIzNHpCZVNkR2dZWHpWVEVmbm5qamRtYVRrazdBNFxcXFxcXFwiKTtcXFxcbiAgICBjb25zdCBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKFxcXFxcXFwiLXA5Qlt+UG5Qc1xcXFxcXFwiK2l2MCk7XFxcXG4gICAgbGV0IGVuY3J5cHRlZEhleFN0ciA9IENyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2Uod29yZCk7XFxcXG4gICAgbGV0IGRlY3J5cHQgPSBDcnlwdG9KUy5BRVMuZGVjcnlwdCh7XFxcXG4gICAgICAgIGNpcGhlcnRleHQ6IGVuY3J5cHRlZEhleFN0clxcXFxuICAgIH0sIGtleSwge1xcXFxuICAgICAgICBpdjogaXYsXFxcXG4gICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcXFxuICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczcgLy8g5rOo5oSP6L+Z6YeM5bqU6K+l5pivQ3J5cHRvSlMucGFkLk5vUGFkZGluZ1xcXFxuICAgIH0pO1xcXFxuICAgIGlmIChkZWNyeXB0KSB7XFxcXG4gICAgICAgIGxldCBkZWNyeXB0ZWRTdHIgPSBkZWNyeXB0LnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXFxcbiAgICAgICAgcmV0dXJuIGRlY3J5cHRlZFN0cjtcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICAvLyDop6Plr4blpLHotKXvvIzov5Tlm55udWxs5oiW6ZSZ6K+v5L+h5oGvXFxcXG4gICAgICAgIHJldHVybiBudWxsO1xcXFxuICAgIH1cXFxcbn1cXFxcblxcXFxuLy/purvosYblm77niYfop6Plr4ZcXFxcbnZhciBtZGxhenkgPSAkKCcnKS5pbWFnZSgoKSA9PiB7XFxcXG5jb25zdCBDcnlwdG9VdGlsID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9hc3NldHMvY3J5cHRvLWphdmEuanNcXFxcXFxcIik7XFxcXG5cXFxcdGxldCBrZXkgPSBDcnlwdG9VdGlsLkRhdGEucGFyc2VVVEY4KFxcXFxcXFwicG5oWGdOMFVcXFxcXFxcIik7XFxcXG5cXFxcdGxldCBpdiA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZVVURjgoXFxcXFxcXCJHWTRnRXZCRFxcXFxcXFwiKTtcXFxcblxcXFx0bGV0IHRleHREYXRhID0gQ3J5cHRvVXRpbC5EYXRhLnBhcnNlSW5wdXRTdHJlYW0oaW5wdXQpLmJhc2U2NERlY29kZSgpO1xcXFxuXFxcXHRsZXQgZW5jcnlwdGVkID0gQ3J5cHRvVXRpbC5ERVMuZGVjcnlwdCh0ZXh0RGF0YSwga2V5LCB7XFxcXG4gIFxcXFx0bW9kZTogXFxcXFxcXCJERVMvQ0JDL1BLQ1M3UGFkZGluZ1xcXFxcXFwiLFxcXFxuXFxcXHRcXFxcdGl2OiBpdlxcXFxuXFxcXHR9KTtcXFxcblxcXFx0bGV0IGJhc2U2NFRleHQgPSBlbmNyeXB0ZWQudG9TdHJpbmcoKS5zcGxpdChcXFxcXFxcImJhc2U2NCxcXFxcXFxcIilbMV07XFxcXG4gICAgbGV0IGVuY3J5cHRlZDAgPSBDcnlwdG9VdGlsLkRhdGEucGFyc2VCYXNlNjQoYmFzZTY0VGV4dCwgX2Jhc2U2NC5OT19XUkFQKTtcXFxcbiAgICByZXR1cm4gZW5jcnlwdGVkMC50b0lucHV0U3RyZWFtKCk7XFxcXG59KVxcXFxuXFxcXG4vLzkxdHbop4bpopHop6PmnpBcXFxcbnZhciB0dnZvZCA9ICQoJycpLmxhenlSdWxlKCgpID0+IHtcXFxcbmV2YWwoZ2V0Q3J5cHRvSlMoKSlcXFxcbmZ1bmN0aW9uIG1kNShzdHIpIHtcXFxcbiAgICByZXR1cm4gQ3J5cHRvSlMuTUQ1KHN0cikudG9TdHJpbmcoKTtcXFxcbn1cXFxcbnZhciB0MCA9TWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCkrMTtcXFxcbnZhciB3c1NlY3JldD1tZDUoJ0U5TXBDN0Q1QXFXdmptWEwzaEdrUTJYalpOb2hBUScraW5wdXQucmVwbGFjZSgvaHR0cChzKT86XFxcXFxcXFwvXFxcXFxcXFwvLio/XFxcXFxcXFwvL2csJy8nKSt0MCk7XFxcXG52YXIgdXJsPWlucHV0Kyc/d3NTZWNyZXQ9Jyt3c1NlY3JldCsnJndzVGltZT0nK3QwO1xcXFxud3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL3ZpZGVvMC5tM3U4JywgcmVxdWVzdCh1cmwpKTtcXFxcbnJldHVybiBnZXRQYXRoKCdoaWtlcjovL2ZpbGVzL2NhY2hlL3ZpZGVvMC5tM3U4JykrJyMnK3VybDtcXFxcbn0pXFxcXG4vL2x1dHViZeWbvueJh+ino+WvhlxcXFxudmFyIGx1bGF6eSA9ICQoJycpLmltYWdlKCgpID0+IHtcXFxcbmNvbnN0IENyeXB0b1V0aWwgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL2Fzc2V0cy9jcnlwdG8tamF2YS5qc1xcXFxcXFwiKTtcXFxcblxcXFx0bGV0IGtleSA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZUhleChcXFxcXFxcImIyZjM4NDI4NjZmOTU4M2QxZWNlNjFjNGUwNTVjMjU1XFxcXFxcXCIpO1xcXFxuXFxcXHRsZXQgaXYgPSBDcnlwdG9VdGlsLkRhdGEucGFyc2VIZXgoXFxcXFxcXCJlMDFlZGU2MzMxZDM3YWZjYzdiZTA1NTk3ZDY1NGQyMlxcXFxcXFwiKTtcXFxcblxcXFx0bGV0IHRleHREYXRhID0gQ3J5cHRvVXRpbC5EYXRhLnBhcnNlSW5wdXRTdHJlYW0oaW5wdXQpO1xcXFxuXFxcXHRsZXQgZW5jcnlwdGVkID0gQ3J5cHRvVXRpbC5BRVMuZGVjcnlwdCh0ZXh0RGF0YSwga2V5LCB7XFxcXG4gIFxcXFx0bW9kZTogXFxcXFxcXCJBRVMvQ0JDL1BLQ1M3UGFkZGluZ1xcXFxcXFwiLFxcXFxuXFxcXHRcXFxcdGl2OiBpdlxcXFxuXFxcXHR9KTtcXFxcblxcXFx0cmV0dXJuIGVuY3J5cHRlZC50b0lucHV0U3RyZWFtKCk7XFxcXG59KVxcXFxuLy9pbnPlm77niYfop6Plr4bvvIxiYXNlNjRcXFxcbnZhciBpbnNsYXp5ID0gJCgnJykuaW1hZ2UoKCkgPT4ge1xcXFxuICAgIGNvbnN0IENyeXB0b1V0aWwgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL2Fzc2V0cy9jcnlwdG8tamF2YS5qc1xcXFxcXFwiKTtcXFxcbiAgICBsZXQgdGV4dERhdGEgPSBDcnlwdG9VdGlsLkRhdGEucGFyc2VJbnB1dFN0cmVhbShpbnB1dCk7XFxcXG4gICAgbGV0IGJhc2U2NFRleHQgPSB0ZXh0RGF0YS50b1N0cmluZygpLnNwbGl0KFxcXFxcXFwiYmFzZTY0LFxcXFxcXFwiKVsxXTtcXFxcbiAgICBsZXQgZW5jcnlwdGVkMCA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZUJhc2U2NChiYXNlNjRUZXh0LCBfYmFzZTY0Lk5PX1dSQVApO1xcXFxuICAgIHJldHVybiBlbmNyeXB0ZWQwLnRvSW5wdXRTdHJlYW0oKTtcXFxcbn0pXFxcXG5cXFxcblxcXFxuLy/mtbfop5Llm77niYfop6Plr4ZcXFxcbnZhciBuID0gZnVuY3Rpb24oZSkge1xcXFxuICAgIGZvciAobyA9IFxcXFxcXFwiXFxcXFxcXCIsIGkgPSAwLCBhID0gMCwgdm9pZCAwOyBpIDwgZS5sZW5ndGg7KSB7XFxcXG4gICAgICAgIHZhciB0LCBuLCBvLCBpLCBhO1xcXFxuICAgICAgICAodCA9IGUuY2hhckNvZGVBdChpKSkgPCAxMjggPyAobyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHQpLCBpKyspIDogMTkxIDwgdCAmJiB0IDwgMjI0ID8gKGEgPSBlLmNoYXJDb2RlQXQoaSArIDEpLCBvICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKDMxICYgdCkgPDwgNiB8IDYzICYgYSksIGkgKz0gMikgOiAoYSA9IGUuY2hhckNvZGVBdChpICsgMSksIG4gPSBlLmNoYXJDb2RlQXQoaSArIDIpLCBvICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKDE1ICYgdCkgPDwgMTIgfCAoNjMgJiBhKSA8PCA2IHwgNjMgJiBuKSwgaSArPSAzKTtcXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIG87XFxcXG59O1xcXFxudmFyIGRlY3J5cHREYXRhID0gZnVuY3Rpb24odCkge1xcXFxuICAgIHZhciBvLCBpLCBhLCByLCBzLCBjLCB1ID0gXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgZCA9IDAsXFxcXG4gICAgICAgIHR0ID0gXFxcXFxcXCJBQkNEKkVGR0hJSktMTU5PUFFSU1RVVldYI1laYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoxMjM0NTY3ODkwXFxcXFxcXCJcXFxcbiAgICBmb3IgKHQgPSB0LnJlcGxhY2UoL1teQS1aYS16MC05XFxcXFxcXFwqXFxcXFxcXFwjXS9nLCBcXFxcXFxcIlxcXFxcXFwiKTsgZCA8IHQubGVuZ3RoOykgYSA9IHR0LmluZGV4T2YodC5jaGFyQXQoZCsrKSksIG8gPSAoMTUgJiAociA9IHR0LmluZGV4T2YodC5jaGFyQXQoZCsrKSkpKSA8PCA0IHwgKHMgPSB0dC5pbmRleE9mKHQuY2hhckF0KGQrKykpKSA+PiAyLCBpID0gKDMgJiBzKSA8PCA2IHwgKGMgPSB0dC5pbmRleE9mKHQuY2hhckF0KGQrKykpKSwgdSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGEgPDwgMiB8IHIgPj4gNCksIDY0ICE9IHMgJiYgKHUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShvKSksIDY0ICE9IGMgJiYgKHUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShpKSk7XFxcXG4gICAgcmV0dXJuIG4odSk7XFxcXG59O1xcXFxuXFxcXG4kLmV4cG9ydHMuaW1hZ2VEZWNyeXB0ID0gZnVuY3Rpb24oKSB7XFxcXG4gICAgbGV0IGphdmFJbXBvcnQgPSBuZXcgSmF2YUltcG9ydGVyKCk7XFxcXG4gICAgamF2YUltcG9ydC5pbXBvcnRQYWNrYWdlKFxcXFxuICAgICAgICBQYWNrYWdlcy5jb20uZXhhbXBsZS5oaWtlcnZpZXcudXRpbHNcXFxcbiAgICApO1xcXFxuICAgIHdpdGgoamF2YUltcG9ydCkge1xcXFxuICAgICAgICBsZXQgYnl0ZXMgPSBGaWxlVXRpbC50b0J5dGVzKGlucHV0KTtcXFxcbiAgICAgICAgYnl0ZXMgPSBuZXcgamF2YS5sYW5nLlN0cmluZyhieXRlcywgJ1VURi04JylcXFxcbiAgICAgICAgbGV0IHJlcyA9IGRlY3J5cHREYXRhKGJ5dGVzICsgXFxcXFxcXCJcXFxcXFxcIik7XFxcXG4gICAgICAgIHJlcyA9IG5ldyBqYXZhLmxhbmcuU3RyaW5nKHJlcylcXFxcbiAgICAgICAgcmVzID0gcmVzLnNwbGl0KFxcXFxcXFwiYmFzZTY0LFxcXFxcXFwiKVsxXTtcXFxcbiAgICAgICAgcmV0dXJuIEZpbGVVdGlsLnRvSW5wdXRTdHJlYW0oX2Jhc2U2NC5kZWNvZGUocmVzLCBfYmFzZTY0Lk5PX1dSQVApKTtcXFxcbiAgICB9XFxcXG59XFxcXG5cXFxcblxcXFxuZnVuY3Rpb24gcGFnZUFkZChwYWdlKSB7XFxcXG4gICAgaWYgKGdldE15VmFyKFxcXFxcXFwicGFnZVxcXFxcXFwiKSkge1xcXFxuICAgICAgICBwdXRNeVZhcihcXFxcXFxcInBhZ2VcXFxcXFxcIiwgKHBhcnNlSW50KHBhZ2UpICsgMSkgKyAnJyk7XFxcXG4gICAgfVxcXFxuICAgIHJldHVybjtcXFxcbn0gLy/nv7vpobVcXFxcblxcXFxuZnVuY3Rpb24gcGFnZU1vdmV0byhwYWdlLCBwYWdlcykge1xcXFxuICAgIHZhciBsb25nQ2xpY2sgPSBbe1xcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCLpppbpobVcXFxcXFxcIixcXFxcbiAgICAgICAganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgcHV0TXlWYXIoXFxcXFxcXCJwYWdlXFxcXFxcXCIsIFxcXFxcXFwiMVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCI7XFxcXG4gICAgICAgIH0pLFxcXFxuICAgIH0sIHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwi5LiK6aG1XFxcXFxcXCIsXFxcXG4gICAgICAgIGpzOiAkLnRvU3RyaW5nKChwYWdlKSA9PiB7XFxcXG4gICAgICAgICAgICBpZiAocGFnZSA+IDEpIHtcXFxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFxcXFxcInBhZ2VcXFxcXFxcIiwgKHBhcnNlSW50KHBhZ2UpIC0gMSkpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9LCBwYWdlKSxcXFxcbiAgICB9LCB7XFxcXG4gICAgICAgIHRpdGxlOiBcXFxcXFxcIuW9k+WJjeesrFxcXFxcXFwiICsgcGFnZSArIFxcXFxcXFwi6aG1XFxcXFxcXCIsXFxcXG4gICAgICAgIGpzOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIH0sIHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwi6Lez6L2sXFxcXFxcXCIsXFxcXG4gICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgICAgIHJldHVybiAkKFxcXFxcXFwiXFxcXFxcXCIpLmlucHV0KCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFxcXFxcInBhZ2VcXFxcXFxcIiwgaW5wdXQpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgfSksXFxcXG4gICAgfV07XFxcXG4gICAgaWYgKHR5cGVvZihwYWdlcykgIT0gJ3VuZGVmaW5lZCcpIHtcXFxcbiAgICAgICAgdmFyIGV4dHJhMSA9IHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuWwvumhtVxcXFxcXFwiICsgcGFnZXMsXFxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygocGFnZXMpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFxcXFxcInBhZ2VcXFxcXFxcIiwgcGFnZXMpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgfSwgcGFnZXMpLFxcXFxuICAgICAgICB9O1xcXFxuICAgICAgICBsb25nQ2xpY2sucHVzaChleHRyYTEpXFxcXG4gICAgfVxcXFxuICAgIHJldHVybiBsb25nQ2xpY2tcXFxcbn0gLy/plb/mjInot7PpobVcXFxcblxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuWIhuexu1xcXCIsXFxcInBhdGhcXFwiOlxcXCJDYXRlXFxcIixcXFwicnVsZVxcXCI6XFxcImZ1bmN0aW9uIHN0cm9uZyhkLCBjKSB7XFxcXG4gICAgcmV0dXJuICfigJjigJjigJnigJk8c3Ryb25nPjxmb250IGNvbG9yPSMnICsgKGMgfHwgJzAwMDAwMCcpICsgJz4nICsgZCArICc8L2ZvbnQ+PC9zdHJvbmc+JztcXFxcbn1cXFxcbi8v5YiX6KGoLGNvbOm7mOiupOS4uidzY3JvbGxfYnV0dG9uJ1xcXFxuZnVuY3Rpb24gQ2F0ZShsaXN0LG4sZCxjb2wpIHtcXFxcbiAgICBpZighY29sKXtcXFxcbiAgICAgICAgY29sPSdzY3JvbGxfYnV0dG9uJztcXFxcbiAgICB9XFxcXG4gICAgdmFyIGluZGV4X249bGlzdFswXS5pZC5zcGxpdCgnJicpWzBdO1xcXFxuICAgIGxpc3QuZm9yRWFjaChkYXRhPT57XFxcXG4gICAgICAgIHZhciB0aXRsZSA9IGRhdGEudGl0bGUuc3BsaXQoJyYnKTtcXFxcbiAgICAgICAgdmFyIGlkPWRhdGEuaWQuc3BsaXQoJyYnKTtcXFxcbiAgICAgICAgaWYoZGF0YS5pbWchPW51bGwpe1xcXFxuICAgICAgICAgICAgdmFyIGltZz1kYXRhLmltZy5zcGxpdCgnJicpO1xcXFxuICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgIHZhciBpbWc9W107XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgdGl0bGUuZm9yRWFjaCgodGl0bGUsaW5kZXgpPT57XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOihnZXRNeVZhcihuLGluZGV4X24pPT1pZFtpbmRleF0/c3Ryb25nKHRpdGxlLCAnRkY2Njk5JykgOiB0aXRsZSksXFxcXG4gICAgICAgICAgICAgICAgaW1nOmltZ1tpbmRleF0sXFxcXG4gICAgICAgICAgICAgICAgdXJsOiQoaWRbaW5kZXhdKS5sYXp5UnVsZSgobix0aXRsZSxpZCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgcHV0TXlWYXIobiwgaW5wdXQpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXFxcbiAgICAgICAgICAgIH0sIG4sdGl0bGUsaWRbaW5kZXhdKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOmNvbCxcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snLFxcXFxuICAgIH0pO1xcXFxuICAgIH0pXFxcXG4gICAgcmV0dXJuIGQ7XFxcXG59XFxcXG4kLmV4cG9ydHMuQ2F0ZSA9IENhdGU7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiMDDpppbpobVcXFwiLFxcXCJwYXRoXFxcIjpcXFwiaG9tZVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbmlmIChNWV9QQUdFID09IDEpIHtcXFxcbiAgICBkLnB1c2goe8KgwqDCoFxcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCLmkJzntKIgXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgIHB1dE15VmFyKCdrZXl3b3JkJyxpbnB1dClcXFxcbiAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3NlYXJjaD9wYWdlPWZ5cGFnZSZrdz1cXFxcXFxcIiArIGlucHV0XFxcXG4gICAgfSksXFxcXG4gICAgICAgIMKgwqDCoGRlc2M6IFxcXFxcXFwi6K+36L6T5YWl5pCc57Si5YWz6ZSu6K+NXFxcXFxcXCIsXFxcXG4gICAgICAgIMKgwqDCoGNvbF90eXBlOiBcXFxcXFxcImlucHV0XFxcXFxcXCIsXFxcXG4gICAgfSlcXFxcbn07XFxcXG52YXIgcGc9IE1ZX1VSTC5yZXBsYWNlKCdoaWtlcjovL2VtcHR5IyMnLCAnJyk7XFxcXG52YXIgdCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSk7IFxcXFxudmFyIGMxPSBbe3RpdGxlOiAn6aaW6aG1Jue7vOWQiCcsaWQ6ICcxJjImMyY0JjUnLGltZzonaHR0cHM6Ly9naHByb3h5Lm5ldC9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbHMxMjU3ODEwMDMvdHViaWFvL21haW4vbW92aWUvMTI3LnN2ZyZodHRwczovL2docHJveHkubmV0L2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sczEyNTc4MTAwMy90dWJpYW8vbWFpbi9tb3ZpZS8xMzcuc3ZnJmh0dHBzOi8vZ2hwcm94eS5uZXQvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL3R1Ymlhby9tYWluL21vdmllLzExMy5zdmcmaHR0cHM6Ly9naHByb3h5Lm5ldC9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbHMxMjU3ODEwMDMvdHViaWFvL21haW4vbW92aWUvMTE0LnN2ZyZodHRwczovL2docHJveHkubmV0L2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sczEyNTc4MTAwMy90dWJpYW8vbWFpbi9tb3ZpZS8xMjIuc3ZnJ31dO1xcXFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcXFxuICAgICQucmVxdWlyZShcXFxcXFxcIkNhdGVcXFxcXFxcIikuQ2F0ZShjMSwnYzEnLGQsJ2ljb25fMl9yb3VuZCcpO1xcXFxuZC5wdXNoKHtcXFxcbiAgICBjb2xfdHlwZTogJ2xpbmUnLFxcXFxufSx7XFxcXG4gICAgY29sX3R5cGU6ICdiaWdfYmxhbmtfYmxvY2snLFxcXFxufVxcXFxuLHtcXFxcbiAgICBjb2xfdHlwZTogJ2JpZ19ibGFua19ibG9jaycsXFxcXG59KTtcXFxcbn1cXFxcbnZhciDliIbnsbs9Z2V0TXlWYXIoJ2MxJywgJzEnKTtcXFxcbmlmKOWIhuexuz09MSl7XFxcXG4kLnJlcXVpcmUoXFxcXFxcXCJ2aWRlb1xcXFxcXFwiKVxcXFxufWVsc2UgaWYo5YiG57G7PT0yKXtcXFxcbiQucmVxdWlyZShcXFxcXFxcInpvbmdoZVxcXFxcXFwiKVxcXFxufVxcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzJcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5pCc57SiXFxcIixcXFwicGF0aFxcXCI6XFxcInNlYXJjaFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczogXFxcXG52YXIgZCA9IFtdO1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCc9JylbMV0ucmVwbGFjZSgnJmt3JywnJyk7XFxcXG5pZihNWV9QQUdFPT0xKXtcXFxcbnZhciBkYXRhPUpTT04ucGFyc2UoZ2V0SXRlbSgnc2VhcmNoJykpLmNvbmZpZztcXFxcbnZhciB1cmxfbj1kYXRhWzBdLmFwaStkYXRhWzBdLnBsYXRmb3JtO1xcXFxuZGF0YS5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICB2YXIgdXJsPWRhdGEuYXBpK2RhdGEucGxhdGZvcm07XFxcXG4gICAgICAgIGlmKChkYXRhLnRpdGxlIT0n56aP5YipJykmKCFkYXRhLnBsYXRmb3JtLmluY2x1ZGVzKCd5dWVwYW8nKSkpe1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKCfmkJzntKLliIbnsbsnLHVybF9uKT09dXJsP3N0cm9uZyhkYXRhLnRpdGxlLCdGRjY2OTknKTpkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgdXJsOiQoJycpLmxhenlSdWxlKCh0aXRsZSx1cmwsY2F0ZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgcHV0TXlWYXIoJ+aQnOe0ouWIhuexuycsIHVybCk7XFxcXG4gICAgICAgICAgICAgICBwdXRNeVZhcign5pCc57Si5YiG57G75ZCNJyx0aXRsZSk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcXFxuICAgICAgICAgICAgfSxkYXRhLnRpdGxlLHVybCwn5pCc57Si5YiG57G7JyksXFxcXG4gICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXFxcbiAgICAgICAgICAgZXh0cmE6e1xcXFxuICAgICAgICAgICAgICBrZXk6J+aQnOe0ouWIhuexuzogJytnZXRNeVZhcign5pCc57Si5YiG57G7Jyx1cmxfbiksXFxcXG4gICAgICAgICAgICAgIHdvcmQ6J+aQnOe0ouWIhuexu+WQjTogJytnZXRNeVZhcign5pCc57Si5YiG57G75ZCNJywn6KeG6aKRJyksXFxcXG4gICAgICAgICAgICAgIGtleXdvcmQ6Z2V0TXlWYXIoJ2tleXdvcmQnKSxcXFxcbiAgICAgICAgICB9XFxcXG4gICAgfSlcXFxcbiAgICB9XFxcXG59KVxcXFxuZC5wdXNoKHtcXFxcbiAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaycsXFxcXG4gICAgfSk7XFxcXG52YXIgbGlzdD1KU09OLnBhcnNlKGZldGNoKGdldE15VmFyKCfmkJzntKLliIbnsbsnLCdodHRwOi8vMDAzLjIycy5sb2wvc2VhcmNoY29uZmlnL3ZpZGVvLnR4dCcpKSkuc2VhcmNoYXBpO1xcXFxudmFyIHVybF9uPSdodHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcC8nK2xpc3RbMF0ucGxhdGZvcm0rJy5waHAnO1xcXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICB2YXIgdXJsPSdodHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcC8nK2RhdGEucGxhdGZvcm0rJy5waHAnO1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKGdldE15VmFyKCfmkJzntKLliIbnsbvlkI0nLCfop4bpopEnKSsn5pCc57Si5YiX6KGoJyx1cmxfbik9PXVybD9zdHJvbmcoZGF0YS50aXRsZSwnRkY2Njk5Jyk6ZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIHVybDokKCcnKS5sYXp5UnVsZSgodGl0bGUsdXJsLGNhdGUpID0+IHtcXFxcbiAgICAgICAgICAgICAgIHB1dE15VmFyKGdldE15VmFyKCfmkJzntKLliIbnsbvlkI0nLCfop4bpopEnKSsn5pCc57Si5YiX6KGoJywgdXJsKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxcXG4gICAgICAgICAgICB9LGRhdGEudGl0bGUsdXJsLGdldE15VmFyKCfmkJzntKLliIbnsbvlkI0nLCfop4bpopEnKSsn5pCc57Si5YiX6KGoJyksXFxcXG4gICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXFxcbiAgICAgICAgICAgZXh0cmE6e1xcXFxuICAgICAgICAgICAgICBrZXk6Z2V0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsJ+inhumikScpKyfmkJzntKLliJfooagnLFxcXFxuICAgICAgICAgICAgICB1cmw6dXJsLFxcXFxuICAgICAgICAgICAgICB3ejpkYXRhLnBsYXRmb3JtLFxcXFxuICAgICAgICAgICAgICBrZXl3b3JkOmdldE15VmFyKCdrZXl3b3JkJyksXFxcXG4gICAgICAgICAgfVxcXFxuICAgIH0pXFxcXG59KVxcXFxufVxcXFxudmFyIHNlYXJjaF91cmw9Z2V0TXlWYXIoZ2V0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsJ+inhumikScpKyfmkJzntKLliJfooagnLHVybF9uKSsnP2tleXdvcmQ9JytnZXRNeVZhcigna2V5d29yZCcpKycmcGFnZT0nK3BnO1xcXFxuLy9sb2coc2VhcmNoX3VybClcXFxcbnZhciBob3N0PXNlYXJjaF91cmwuc3BsaXQoJz8nKVswXTtcXFxcbnRyeXtcXFxcbmlmKGdldE15VmFyKCfmkJzntKLliIbnsbvlkI0nLCfop4bpopEnKT09J+inhumikScpe1xcXFxudmFyIEFycj1bJ2x1c2lyJywnNTFsaWVxaScsJ3Rhbmd0b3V0aWFvJywnNTBkdScsJ3Rpa3RvaycsJ3hpbmdiYScsJ2Fud2FuZ2ppZW1pJywncWl5b3UnLCdjYW9saXVzaGVxdScsJzkxcGFvZnUnLCdtZWlyaWRhc2FpJywncG9ybmh1YicsJ2RvdXlpbm1heCcsJzUxbHVvbGknLCc5MXBvcm5fc2ZrdHYnLCdzaHVpZ3VvcGFpJywnc2lmYW5na3R2Jywnd2VpbWlxdWFuJywnaGVpbGlhb2JkeScsJzUxY2hpZ3VhJ107XFxcXG52YXIgQnJyPVsnbHV0dWJlJ107XFxcXG52YXIgQ3JyPVsnaW5zJ107XFxcXG52YXIgcGxhdGZvcm09aG9zdC5tYXRjaCgvdG9wXFxcXFxcXFwvLipcXFxcXFxcXC5waHAvKVswXS5zcGxpdCgnLnBocCcpWzBdLnNwbGl0KCcvJylbMl07XFxcXG4vL2xvZyhwbGF0Zm9ybSlcXFxcbnZhciBpdGVtPUpTT04ucGFyc2UoZmV0Y2goc2VhcmNoX3VybCkpLnZpZGVvcztcXFxcbml0ZW0uZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICBpZihBcnIuaW5jbHVkZXMocGxhdGZvcm0pKXtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgZGVzYzooZGF0YS5jcmVhdGVkX2RhdGU9PW51bGw/Jyc6ZGF0YS5jcmVhdGVkX2RhdGUpKycgICcrKGRhdGEuZGF0ZT09bnVsbD8nJzpkYXRhLmRhdGUpLFxcXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlK2xhenksXFxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInLFxcXFxuICAgICAgICAgICAgZXh0cmE6e1xcXFxuICAgICAgICAgICAgICBpZDpkYXRhLmlkLFxcXFxuICAgICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcbiAgICB9ZWxzZSBpZihCcnIuaW5jbHVkZXMocGxhdGZvcm0pKXtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgZGVzYzooZGF0YS5jcmVhdGVkX2RhdGU9PW51bGw/Jyc6ZGF0YS5jcmVhdGVkX2RhdGUpKycgICcrKGRhdGEuZGF0ZT09bnVsbD8nJzpkYXRhLmRhdGUpLFxcXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlK2x1bGF6eSxcXFxcbiAgICAgICAgICAgIHVybDogaG9zdCsnP2lkPScrZGF0YS5pZCt2b2QsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9ZWxzZSBpZihDcnIuaW5jbHVkZXMocGxhdGZvcm0pKXtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgZGVzYzooZGF0YS5jcmVhdGVkX2RhdGU9PW51bGw/Jyc6ZGF0YS5jcmVhdGVkX2RhdGUpKycgICcrKGRhdGEuZGF0ZT09bnVsbD8nJzpkYXRhLmRhdGUpLFxcXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlK2luc2xhenksXFxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxcXG4gICAgICAgIH0pXFxcXG4gICAgfWVsc2V7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIGRlc2M6KGRhdGEuY3JlYXRlZF9kYXRlPT1udWxsPycnOmRhdGEuY3JlYXRlZF9kYXRlKSsnICAnKyhkYXRhLmRhdGU9PW51bGw/Jyc6ZGF0YS5kYXRlKSxcXFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZSxcXFxcbiAgICAgICAgICAgIHVybDogaG9zdCsnP2lkPScrZGF0YS5pZCt2b2QsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pXFxcXG59ZWxzZSBpZihnZXRNeVZhcign5pCc57Si5YiG57G75ZCNJywn6KeG6aKRJyk9PSflhajnvZHnoLTop6MnKXtcXFxcbiAgICB2YXIgQXJyPVsndHR0JywnbG9hbndvcmQnLCdsb2Fud29yZF8yJywnOTFzaG9ydCcsJ3NlcG9uZScsJ2x1c2lyJywnY2FwZScsJ2RlZ3JlZScsJ2J1cm1hJ107XFxcXG4gIHZhciBwbGF0Zm9ybT1ob3N0Lm1hdGNoKC90b3BcXFxcXFxcXC8uKlxcXFxcXFxcLnBocC8pWzBdLnNwbGl0KCcucGhwJylbMF0uc3BsaXQoJy8nKVs0XTtcXFxcbiAgdmFyIGl0ZW09SlNPTi5wYXJzZShmZXRjaChzZWFyY2hfdXJsKSkudmlkZW9zO1xcXFxuIC8vIGxvZyhpdGVtKVxcXFxuaXRlbS5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgIGlmKEFyci5pbmNsdWRlcyhwbGF0Zm9ybSkpe1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UrbGF6eSxcXFxcbiAgICAgICAgICAgIHVybDogaG9zdCsnP2lkPScrZGF0YS5pZCt2b2QsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9ZWxzZXtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlLFxcXFxuICAgICAgICAgICAgdXJsOiBob3N0Kyc/aWQ9JytkYXRhLmlkK3ZvZCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcXFxuICAgICAgICB9KVxcXFxuICAgICAgICB9XFxcXG4gICAgfSlcXFxcbn1lbHNlIGlmKGdldE15VmFyKCfmkJzntKLliIbnsbvlkI0nLCfop4bpopEnKT09J+efreinhumikScpe1xcXFxuICAgIHZhciBBcnI9Wyd0aWt0b2sxOG5ldycsJzkxZHNwd2ViJywnZG91eWlubWF4JywnOTFwb3JuX3NpZmFuZ2t0dicsJ2ZhbnRhc2knXTtcXFxcbiAgdmFyIHBsYXRmb3JtPWhvc3QubWF0Y2goL3RvcFxcXFxcXFxcLy4qXFxcXFxcXFwucGhwLylbMF0uc3BsaXQoJy5waHAnKVswXS5zcGxpdCgnLycpWzJdO1xcXFxuICB2YXIgaXRlbT1KU09OLnBhcnNlKGZldGNoKHNlYXJjaF91cmwpKS52aWRlb3M7XFxcXG4gLy8gbG9nKGl0ZW0pXFxcXG5pdGVtLmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgaWYoQXJyLmluY2x1ZGVzKHBsYXRmb3JtKSl7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZStsYXp5LFxcXFxuICAgICAgICAgICAgZGVzYzooZGF0YS5jcmVhdGVkX2RhdGU9PW51bGw/Jyc6ZGF0YS5jcmVhdGVkX2RhdGUpKycgICcrKGRhdGEuZGF0ZT09bnVsbD8nJzpkYXRhLmRhdGUpLFxcXFxuICAgICAgICAgICAgdXJsOiBob3N0Kyc/aWQ9JytkYXRhLmlkK3ZvZCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcXFxuICAgICAgICB9KVxcXFxuICAgIH1lbHNle1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZWRfZGF0ZT09bnVsbD8nJzpkYXRhLmNyZWF0ZWRfZGF0ZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSksXFxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KVxcXFxufWVsc2UgaWYoZ2V0TXlWYXIoJ+aQnOe0ouWIhuexuycpLmluY2x1ZGVzKCdhY3RyZXNzJyl8KGdldE15VmFyKCfmkJzntKLliIbnsbvlkI0nLCfop4bpopEnKT09J+eVquWPtycpfChnZXRNeVZhcign5pCc57Si5YiG57G75ZCNJywn6KeG6aKRJyk9PSfkuInnuqcnKSl7XFxcXG4gICAgdmFyIEFycj1bJ3NodWlndW9wYWknXTtcXFxcbiAgdmFyIHBsYXRmb3JtPWhvc3QubWF0Y2goL3RvcFxcXFxcXFxcLy4qXFxcXFxcXFwucGhwLylbMF0uc3BsaXQoJy5waHAnKVswXS5zcGxpdCgnLycpWzJdO1xcXFxuICB2YXIgaXRlbT1KU09OLnBhcnNlKGZldGNoKHNlYXJjaF91cmwpKS52aWRlb3M7XFxcXG4gLy8gbG9nKGl0ZW0pXFxcXG5pdGVtLmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgaWYoQXJyLmluY2x1ZGVzKHBsYXRmb3JtKSl7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZStsYXp5LFxcXFxuICAgICAgICAgICAgZGVzYzooZGF0YS5jcmVhdGVkX2RhdGU9PW51bGw/Jyc6ZGF0YS5jcmVhdGVkX2RhdGUpKycgICcrKGRhdGEuZGF0ZT09bnVsbD8nJzpkYXRhLmRhdGUpLFxcXFxuICAgICAgICAgICAgdXJsOiBob3N0Kyc/aWQ9JytkYXRhLmlkK3ZvZCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcXFxuICAgICAgICB9KVxcXFxuICAgIH1lbHNle1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZWRfZGF0ZT09bnVsbD8nJzpkYXRhLmNyZWF0ZWRfZGF0ZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSksXFxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KVxcXFxufWVsc2UgaWYoZ2V0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsJ+inhumikScpPT0n5ZCD55OcJyl7XFxcXG4gIHZhciB3ej1ob3N0Lm1hdGNoKC90b3BcXFxcXFxcXC8uKlxcXFxcXFxcLnBocC8pWzBdLnNwbGl0KCcucGhwJylbMF0uc3BsaXQoJy8nKVszXTtcXFxcbiAgdmFyIGxpc3Q9SlNPTi5wYXJzZShmZXRjaChzZWFyY2hfdXJsKSkudmlkZW9zO1xcXFxuIC8vIGxvZyhpdGVtKVxcXFxuaWYod3o9PSdoYWlqaWFvJyl7XFxcXG4gICAgbGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICBkZXNjOiBkYXRhLmRhdGUsXFxcXG4gICAgICAgICAgICBpbWc6ICBkYXRhLmltYWdlICsgXFxcXFxcXCJAanM9XFxcXFxcXCIgKyAkLnRvU3RyaW5nKChydWxlKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYWVzP3J1bGU9XFxcXFxcXCIgKyBydWxlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1hZ2UuaW1hZ2VEZWNyeXB0KCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBNWV9SVUxFLnRpdGxlKSxcXFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknKydAcnVsZT1qczokLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYmxhY2tlcmppMVxcXFxcXFwiKScsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZToncGljXzEnLFxcXFxuICAgICAgICAgICAgZXh0cmE6e1xcXFxuICAgICAgICAgICAgICBob3N0OmAke2hvc3R9P2lkPSR7ZGF0YS5pZH1gLFxcXFxuICAgICAgICAgICAgICB3ejp3eixcXFxcbiAgICAgICAgICB9XFxcXG4gICAgICAgIH0pXFxcXG4gfSlcXFxcbn1lbHNle1xcXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICBkZXNjOiBkYXRhLmRhdGUsXFxcXG4gICAgICAgICAgICBpbWc6ICgod3o9PSc1MWNnJyl8KHd6PT0naGxiZHknKXwod3o9PSd0aWt0b2sxOCcpKT8oZGF0YS5pbWFnZStsYXp5KTpkYXRhLmltYWdlLFxcXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9ibGFja2VyamkxXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidwaWNfMScsXFxcXG4gICAgICAgICAgICBleHRyYTp7XFxcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7aG9zdH0/aWQ9JHtkYXRhLmlkfWAsXFxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcXFxuICAgICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcbiB9KVxcXFxuIH1cXFxcbn1lbHNlIGlmKGdldE15VmFyKCfmkJzntKLliIbnsbvlkI0nLCfop4bpopEnKT09J+Wwj+ivtCcpe1xcXFxuICB2YXIgd3o9aG9zdC5tYXRjaCgvdG9wXFxcXFxcXFwvLipcXFxcXFxcXC5waHAvKVswXS5zcGxpdCgnLnBocCcpWzBdLnNwbGl0KCcvJylbM107XFxcXG4gIHZhciBsaXN0PUpTT04ucGFyc2UoZmV0Y2goc2VhcmNoX3VybCkpLnZpZGVvcztcXFxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS94aWFvc2h1b2VyamkxXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcXFxuICAgICAgICAgICAgZXh0cmE6e1xcXFxuICAgICAgICAgICAgICBob3N0OmAke2hvc3R9P2lkPSR7ZGF0YS5pZH1gLFxcXFxuICAgICAgICAgICAgICB3ejp3eixcXFxcbiAgICAgICAgICB9XFxcXG4gICAgICAgIH0pXFxcXG4gfSlcXFxcbn1lbHNlIGlmKGdldE15VmFyKCfmkJzntKLliIbnsbvlkI0nLCfop4bpopEnKT09J+a8q+eUuycpe1xcXFxuICB2YXIgd3o9aG9zdC5tYXRjaCgvdG9wXFxcXFxcXFwvLipcXFxcXFxcXC5waHAvKVswXS5zcGxpdCgnLnBocCcpWzBdLnNwbGl0KCcvJylbMl07XFxcXG4gIHZhciBsaXN0PUpTT04ucGFyc2UoZmV0Y2goc2VhcmNoX3VybCkpLnZpZGVvcztcXFxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgZGVzYzogZGF0YS5kYXRlLFxcXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlLFxcXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9tYW5odWFlcmppMVxcXFxcXFwiKScsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMycsXFxcXG4gICAgICAgICAgICBleHRyYTp7XFxcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7aG9zdH0/aWQ9JHtkYXRhLmlkfWAsXFxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcXFxuICAgICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcbiB9KVxcXFxufWVsc2UgaWYoZ2V0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsJ+inhumikScpPT0n5Zu+54mHJyl7XFxcXG4gIHZhciB3ej1ob3N0Lm1hdGNoKC90b3BcXFxcXFxcXC8uKlxcXFxcXFxcLnBocC8pWzBdLnNwbGl0KCcucGhwJylbMF0uc3BsaXQoJy8nKVsyXTtcXFxcbiAgdmFyIGxpc3Q9SlNPTi5wYXJzZShmZXRjaChzZWFyY2hfdXJsKSkudmlkZW9zO1xcXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICBkZXNjOiBkYXRhLmRhdGUsXFxcXG4gICAgICAgICAgICBpbWc6IHd6PT0ndGlrdG9rMTgnPyhkYXRhLmltYWdlK2xhenkpOmRhdGEuaW1hZ2UsXFxcXG4gICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vZW1wdHknKydAcnVsZT1qczokLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvdHVwaWFuZXJqaVxcXFxcXFwiKScsXFxcXG4gICAgICAgICAgICB1cmw6IHd6PT0ndHV6YWMnP2RhdGEuaW1hZ2U6KGhvc3QrJz9pZD0nK2RhdGEuaWQrcGljcyksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMycsXFxcXG4gICAgICAgICAgICBleHRyYTp7XFxcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7aG9zdH0/aWQ9JHtkYXRhLmlkfWAsXFxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcXFxuICAgICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcbiB9KVxcXFxufVxcXFxufWNhdGNoKGUpe1xcXFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxcXG59XFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCIwMue7vOWQiFxcXCIsXFxcInBhdGhcXFwiOlxcXCJ6b25naGVcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXFxcbnRyeXtcXFxcbi8vbG9nKGdldEl0ZW0oJ2RhdGEnKSlcXFxcblxcXFxuIC8vIHZhciBsaXN0PWdldEl0ZW0oJ2RhdGEnKS5zcGxpdCgn57u85ZCI5pWw5o2u5byA5aeLJylbMV0uc3BsaXQoJ+e7vOWQiOaVsOaNrue7k+adnycpWzBdLnNwbGl0KCfmjaLooYwnKTtcXFxcbiB2YXIgbGlzdD1nZXRJdGVtKCdkYXRhJykuc3BsaXQoJ+e7vOWQiOaVsOaNruW8gOWniycpWzFdLnNwbGl0KCdBVueZvuenkScpWzBdLnJlcGxhY2UoL+WIhuWJsue6vy9nLCfmjaLooYwnKS5zcGxpdCgn5o2i6KGMJyk7XFxcXG4gIGxpc3QuZm9yRWFjaChkYXRhPT57XFxcXG4gICAgICB2YXIgcWQ9c3AoZGF0YSwgXFxcXFxcXCJxZChcXFxcXFxcIiwgXFxcXFxcXCIpXFxcXFxcXCIpO1xcXFxuICAgICAgdmFyIHRwPXNwKGRhdGEsIFxcXFxcXFwidHAoXFxcXFxcXCIsIFxcXFxcXFwiKVxcXFxcXFwiKTtcXFxcbiAgICAgIHZhciBtYz1zcChkYXRhLCBcXFxcXFxcIm1jKFxcXFxcXFwiLCBcXFxcXFxcIilcXFxcXFxcIik7XFxcXG4gICAgICB2YXIgd3o9c3AoZGF0YSwgXFxcXFxcXCJnamMoXFxcXFxcXCIsIFxcXFxcXFwiKVxcXFxcXFwiKTtcXFxcbiAgICAgIHZhciB5bT1zcChkYXRhLCBcXFxcXFxcInltKFxcXFxcXFwiLCBcXFxcXFxcIilcXFxcXFxcIik7XFxcXG4gICAgICB2YXIgbHg9c3AoZGF0YSwgXFxcXFxcXCJseChcXFxcXFxcIiwgXFxcXFxcXCIpXFxcXFxcXCIpO1xcXFxuICAgICAgdmFyIHFiPXFkKycgICcrbWMrJyAgJyt3eisnICAnK3ltKycgICcrbHg7XFxcXG4gICAgICBpZihseD09J+S6jOe6p+iPnOWNlScpe1xcXFxuICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICB0aXRsZTptYyxcXFxcbiAgICAgICAgICBkZXNjOnFiLFxcXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyMnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9lcmppXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnLFxcXFxuICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgaG9zdDpgJHt5bX0vJHt3en0ucGhwYCxcXFxcbiAgICAgICAgICAgICAgd3o6d3osXFxcXG4gICAgICAgICAgfVxcXFxuICAgICAgfSlcXFxcbiAgICAgIH1lbHNlIGlmKGx4PT0n6buR5paZJyl7XFxcXG4gICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICB0aXRsZTptYyxcXFxcbiAgICAgICAgICBkZXNjOnFiLFxcXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYmxhY2tlcmppXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnLFxcXFxuICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgaG9zdDpgJHt5bX0vJHt3en0ucGhwYCxcXFxcbiAgICAgICAgICAgICAgd3o6d3osXFxcXG4gICAgICAgICAgfVxcXFxuICAgICAgfSlcXFxcbiAgICAgIH1lbHNlIGlmKGx4PT0n5Zu95YaF55u05pKtJyl7XFxcXG4gICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICB0aXRsZTptYyxcXFxcbiAgICAgICAgICBkZXNjOnFiLFxcXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyMnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvemhpYm9lcmppXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnLFxcXFxuICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgaG9zdDpgJHt5bX0vJHt3en0ucGhwYCxcXFxcbiAgICAgICAgICAgICAgd3o6d3osXFxcXG4gICAgICAgICAgfVxcXFxuICAgICAgfSlcXFxcbiAgICAgIH1lbHNlIGlmKChseD09J+WbveWkluebtOaSrScpfChseD09J+inhumikScpKXtcXFxcbiAgICAgICAgICBpZighbWMuaW5jbHVkZXMoJ+WFqOe9keaQnCcpKXtcXFxcbiAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgIHRpdGxlOm1jLFxcXFxuICAgICAgICAgIGRlc2M6cWIsXFxcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9zeXZpZGVvXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnLFxcXFxuICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgaG9zdDpgJHt5bX0vJHt3en0ucGhwYCxcXFxcbiAgICAgICAgICAgICAgd3o6d3osXFxcXG4gICAgICAgICAgfVxcXFxuICAgICAgfSlcXFxcbiAgICAgIH1cXFxcbiAgICAgIH1lbHNlIGlmKGx4LmluY2x1ZGVzKCflpbMnKSZseC5pbmNsdWRlcygn5LyYJykmKHd6IT0nbWlzc2F2Jykpe1xcXFxuICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgdGl0bGU6bWMsXFxcXG4gICAgICAgICAgZGVzYzpxYixcXFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL252eW91ZXJqaVxcXFxcXFwiKScsXFxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJyxcXFxcbiAgICAgICAgICBleHRyYTp7XFxcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7eW19LyR7d3p9LnBocGAsXFxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcXFxuICAgICAgICAgIH1cXFxcbiAgICAgICAgICB9KVxcXFxuICAgICAgfWVsc2UgaWYobHg9PSfluJblrZAnKXtcXFxcbiAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgIHRpdGxlOm1jLFxcXFxuICAgICAgICAgIGRlc2M6cWIsXFxcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS90aWVlcmppXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnLFxcXFxuICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgaG9zdDpgJHt5bX0vJHt3en0ucGhwYCxcXFxcbiAgICAgICAgICAgICAgd3o6d3osXFxcXG4gICAgICAgICAgfVxcXFxuICAgICAgICAgIH0pXFxcXG4gICAgICB9ZWxzZSBpZihseD09J+ebtOaSrScpe1xcXFxuICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgdGl0bGU6bWMsXFxcXG4gICAgICAgICAgZGVzYzpxYixcXFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS96aGlib2p1aGVlcmppXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnLFxcXFxuICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgd3o6bWMsXFxcXG4gICAgICAgICAgfVxcXFxuICAgICAgfSlcXFxcbiAgICAgIH1lbHNlIGlmKGx4PT0n5ryr55S7Jyl7XFxcXG4gICAgICAgICAgaWYobWM9PSfnjKvlkqrmvKvnlLsnKXtcXFxcbiAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgdGl0bGU6bWMsXFxcXG4gICAgICAgICAgZGVzYzpxYixcXFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL21hb21pbWFuaHVhXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnXFxcXG4gICAgICB9KVxcXFxuICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgdGl0bGU6bWMsXFxcXG4gICAgICAgICAgZGVzYzpxYixcXFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL21hbmh1YWVyamlcXFxcXFxcIiknLFxcXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCcsXFxcXG4gICAgICAgICAgZXh0cmE6e1xcXFxuICAgICAgICAgICAgICBob3N0OmAke3ltfS8ke3d6fS5waHBgLFxcXFxuICAgICAgICAgICAgICB3ejp3eixcXFxcbiAgICAgICAgICB9XFxcXG4gICAgICB9KVxcXFxuICAgICB9XFxcXG4gICAgICB9ZWxzZSBpZihseD09J+Wwj+ivtCcpe1xcXFxuICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgdGl0bGU6bWMsXFxcXG4gICAgICAgICAgZGVzYzpxYixcXFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3hpYW9zaHVvZXJqaVxcXFxcXFwiKScsXFxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJyxcXFxcbiAgICAgICAgICBleHRyYTp7XFxcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7eW19LyR7d3p9LnBocGAsXFxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcXFxuICAgICAgICAgIH1cXFxcbiAgICAgIH0pXFxcXG4gICAgICB9ZWxzZSBpZihseD09J+WbvueJhycpe1xcXFxuICAgICAgICAgIGlmKG1jPT0n54yr5ZKq576O5Zu+Jyl7XFxcXG4gICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICB0aXRsZTptYyxcXFxcbiAgICAgICAgICBkZXNjOnFiLFxcXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvbWFvbWltZWl0dVxcXFxcXFwiKScsXFxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJ1xcXFxuICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgfWVsc2UgaWYobWMhPSfnvo7lm77oibLlm74nKXtcXFxcbiAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgIHRpdGxlOm1jLFxcXFxuICAgICAgICAgIGRlc2M6cWIsXFxcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9waWNlcmppXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnLFxcXFxuICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgaG9zdDpgJHt5bX0vJHt3en0ucGhwYCxcXFxcbiAgICAgICAgICAgICAgd3o6d3osXFxcXG4gICAgICAgICAgfVxcXFxuICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgfVxcXFxuICAgICAgfWVsc2UgaWYobHg9PSfmnInlo7DlsI/or7QnKXtcXFxcbiAgICAgICAgICBpZihtYz09J+eMq+WSqkZNJyl7XFxcXG4gICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICB0aXRsZTptYyxcXFxcbiAgICAgICAgICBkZXNjOnFiLFxcXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvbWFvbWlGTVxcXFxcXFwiKScsXFxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJ1xcXFxuICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgfVxcXFxuICAgICAgfVxcXFxuICB9KVxcXFxuLypcXFxcbnZhciB6aXlvbmc9Z2V0SXRlbSgnZGF0YScpLnJlcGxhY2UoJy0nLCcnKS5zcGxpdCgn5YiG5Ymy57q/JylbMV0uc3BsaXQoJ+aNouihjCcpO1xcXFxuICB6aXlvbmcuZm9yRWFjaChkYXRhPT57XFxcXG4gICAgICB2YXIgcWQ9c3AoZGF0YSwgXFxcXFxcXCJxZChcXFxcXFxcIiwgXFxcXFxcXCIpXFxcXFxcXCIpO1xcXFxuICAgICAgdmFyIHRwPXNwKGRhdGEsIFxcXFxcXFwidHAoXFxcXFxcXCIsIFxcXFxcXFwiKVxcXFxcXFwiKTtcXFxcbiAgICAgIHZhciBtYz1zcChkYXRhLCBcXFxcXFxcIm1jKFxcXFxcXFwiLCBcXFxcXFxcIilcXFxcXFxcIik7XFxcXG4gICAgICB2YXIgd3o9c3AoZGF0YSwgXFxcXFxcXCJnamMoXFxcXFxcXCIsIFxcXFxcXFwiKVxcXFxcXFwiKTtcXFxcbiAgICAgIHZhciB5bT1zcChkYXRhLCBcXFxcXFxcInltKFxcXFxcXFwiLCBcXFxcXFxcIilcXFxcXFxcIik7XFxcXG4gICAgICB2YXIgbHg9c3AoZGF0YSwgXFxcXFxcXCJseChcXFxcXFxcIiwgXFxcXFxcXCIpXFxcXFxcXCIpO1xcXFxuICAgICAgdmFyIHFiPXFkKycgICcrbWMrJyAgJyt3eisnICAnK3ltKycgICcrbHg7XFxcXG4gICAgICBpZihtYy5pbmNsdWRlcygn6Ym06LWPJykpe1xcXFxuICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgdGl0bGU6bWMsXFxcXG4gICAgICAgICAgZGVzYzpxYixcXFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3ZpZGVvZXJqaVxcXFxcXFwiKScsXFxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJyxcXFxcbiAgICAgICAgICBleHRyYTp7XFxcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7eW19LyR7d3p9LnBocGAsXFxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcXFxuICAgICAgICAgIH1cXFxcbiAgICAgIH0pXFxcXG4gICAgICB9XFxcXG4gICAgICB9KVxcXFxuICAgICAgKi9cXFxcbn1jYXRjaChlKXtcXFxcbiAgICBsb2coZS5tZXNzYWdlKVxcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8yXFxcIixcXFwibmFtZVxcXCI6XFxcIuinhumikeWIhuexu1xcXCIsXFxcInBhdGhcXFwiOlxcXCJ2aWRlb2VyamlcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6IFxcXFxudmFyIGQgPSBbXTtcXFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcXFxudHJ5e1xcXFxubGV0IGhvc3Q9TVlfUEFSQU1TLmhvc3QucmVwbGFjZSgnaHR0cDovL2FwaS5waHBqaWVrb3UudG9wJywnaHR0cHM6Ly9hcGkxLnlpbHVzaHVuZmVuZy50b3AnKTtcXFxcbnZhciB3ej1NWV9QQVJBTVMud3o7XFxcXG52YXIg6KeG6aKR5YiG57G7PWZldGNoKGhvc3QrJz9nZXRzb3J0JylcXFxcbmxldCBkYXRhPSBKU09OLnBhcnNlKOinhumikeWIhuexuyk7XFxcXG4vL2xvZyhkYXRhKVxcXFxudmFyIGtleXM9T2JqZWN0LmtleXMoZGF0YSkuc2xpY2UoMik7XFxcXG4vL2xvZyhrZXlzKVxcXFxudmFyIGtleV9uPWtleXNbMF07XFxcXG5rZXlzLmZvckVhY2goa2V5ID0+IHtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKCfop4bpopHliIbnsbsnK3d6LGtleV9uKT09a2V5P3N0cm9uZyhrZXksJ0ZGNjY5OScpOmtleSxcXFxcbiAgICAgICAgICAgIHVybDokKGtleSkubGF6eVJ1bGUoKGtleSx3eikgPT4ge1xcXFxuICAgICAgICAgICAgICAgcHV0TXlWYXIoJ+inhumikeWIhuexuycrd3osIGlucHV0KTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxcXG4gICAgICAgICAgICB9LCBrZXksd3opLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcXFxuICAgIH0pXFxcXG4gICAgfSlcXFxcbmRhdGFbZ2V0TXlWYXIoJ+inhumikeWIhuexuycrd3osa2V5X24pXS5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2Uvdm9kZXJqaTFcXFxcXFxcIiknLFxcXFxuICAgICAgICAgICBjb2xfdHlwZTondGV4dF8zJyxcXFxcbiAgICAgICAgICAgZXh0cmE6e1xcXFxuICAgICAgICAgICAgICBob3N0OmAke2hvc3R9P3NvcnQ9JHtkYXRhLmlkfSZwYWdlPWAsXFxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcXFxuICAgICAgICAgIH1cXFxcbiAgICB9KVxcXFxufSlcXFxcbn1jYXRjaChlKXtcXFxcbiAgICBsb2coZS5tZXNzYWdlKVxcXFxuICAgIHRvYXN0KCfnnIvkuI3kuoYnKVxcXFxufVxcXFxuc2V0UmVzdWx0KGQpXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcInRleHRfNFxcXCIsXFxcIm5hbWVcXFwiOlxcXCLop4bpopHkuoznuqdcXFwiLFxcXCJwYXRoXFxcIjpcXFwidm9kZXJqaTFcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZD1bXTtcXFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpXFxcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzFdXFxcXG52YXIgaG9zdD1NWV9QQVJBTVMuaG9zdCtwZztcXFxcbnZhciB1cmw9aG9zdC5zcGxpdCgnPycpWzBdO1xcXFxudmFyIHd6PU1ZX1BBUkFNUy53ejtcXFxcbnRyeXtcXFxcbiAgICB2YXIgbGlzdD0gSlNPTi5wYXJzZShmZXRjaChob3N0KSkudmlkZW9zO1xcXFxuICAvLyAgbG9nKGxpc3QpXFxcXG5pZigod3o9PSd4YmsnKXwod3o9PSdtZCcpKXtcXFxcbiAgICBsaXN0LmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIGRlc2M6KGRhdGEuY3JlYXRlZF9kYXRlPT1udWxsPycnOmRhdGEuY3JlYXRlZF9kYXRlKSsnICAnKyhkYXRhLmRhdGU9PW51bGw/Jyc6ZGF0YS5kYXRlKSxcXFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZSxcXFxcbiAgICAgICAgICAgIHVybDogdXJsKyc/aWQ9JytkYXRhLmlkK3ZvZCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcXFxuICAgICAgICB9KVxcXFxuIH0pXFxcXG59ZWxzZSBpZih3ej09J21hb21pJyl7XFxcXG4gICAgbGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZWRfZGF0ZT09bnVsbD8nJzpkYXRhLmNyZWF0ZWRfZGF0ZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSksXFxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxcXG4gICAgICAgICAgICB1cmw6IHVybCsnP2lkPScrZGF0YS5pZCt2b2QsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXFxcbiAgICB9KVxcXFxuIH0pXFxcXG59ZWxzZSBpZih3ej09J3hjbCcpe1xcXFxuICAgIGxpc3QuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgZGVzYzooZGF0YS5jcmVhdGVkX2RhdGU9PW51bGw/Jyc6ZGF0YS5jcmVhdGVkX2RhdGUpKycgICcrKGRhdGEuZGF0ZT09bnVsbD8nJzpkYXRhLmRhdGUpLFxcXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlLFxcXFxuICAgICAgICAgICAgdXJsOiB1cmwrJz9pZD0nK2RhdGEuaWQrdm9kLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxcXG4gICAgfSlcXFxcbiB9KVxcXFxufWVsc2UgaWYod3o9PSdxaXNlbWFvJyl7XFxcXG4gICAgbGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICBkZXNjOmRhdGEuZHVyYXRpb24sXFxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxcXG4gICAgICAgICAgICB1cmw6IHVybCsnP2lkPScrZGF0YS5pZCt2b2QsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXFxcbiAgICB9KVxcXFxuIH0pXFxcXG59ZWxzZSBpZih3ej09JzkxcGYnKXtcXFxcbiAgICBsaXN0LmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIGRlc2M6cGFyc2VJbnQoZGF0YS5kdXJhdGlvbi82MCkrJzonK3BhcnNlSW50KGRhdGEuZHVyYXRpb24lNjApLFxcXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlK2xhenksXFxcXG4gICAgICAgICAgICB1cmw6IHVybCsnP2lkPScrZGF0YS5pZCt2b2QsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXFxcbiAgICB9KVxcXFxuIH0pXFxcXG59ZWxzZXtcXFxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgZGVzYzogKGRhdGEuZGF0ZS5pbmNsdWRlcygnLScpP2RhdGEuZGF0ZTpkYXRhLmNyZWF0ZWRfZGF0ZSkrJ1xcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdCcrKGRhdGEuZHVyYXRpb249PW51bGw/Jyc6ZGF0YS5kdXJhdGlvbiksXFxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UrbGF6eSxcXFxcbiAgICAgICAgICAgIHVybDogdXJsKyc/aWQ9JytkYXRhLmlkK3ZvZCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcXFxuICAgICAgICB9KVxcXFxuIH0pXFxcXG4gfVxcXFxuIFxcXFxufWNhdGNoKGUpe1xcXFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxcXG4gICAgIHRvYXN0KCfnnIvkuI3kuoYnKVxcXFxufVxcXFxuc2V0UmVzdWx0KGQpXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzJcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6buR5paZ5YiG57G7XFxcIixcXFwicGF0aFxcXCI6XFxcImJsYWNrZXJqaVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczogXFxcXG52YXIgZCA9IFtdO1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxcXG50cnl7XFxcXG5sZXQgaG9zdD1NWV9QQVJBTVMuaG9zdC5yZXBsYWNlKCdodHRwOi8vYXBpLnBocGppZWtvdS50b3AnLCdodHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcCcpO1xcXFxudmFyIHd6PU1ZX1BBUkFNUy53ejtcXFxcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxcXG5pZihNWV9QQUdFPT0xKXtcXFxcbnZhciDpu5HmlpnliIbnsbs9ZmV0Y2goaG9zdCsnP2dldHNvcnQnKVxcXFxudmFyIGRhdGE9IEpTT04ucGFyc2Uo6buR5paZ5YiG57G7KS5jYXRlZ29yaWVzO1xcXFxudmFyIGluZGV4X249ZGF0YVswXS5pZC50b1N0cmluZygpO1xcXFxuZGF0YS5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKCfpu5HmlpnliIbnsbsnK3d6LGluZGV4X24pPT1kYXRhLmlkLnRvU3RyaW5nKCk/c3Ryb25nKGRhdGEudGl0bGUsJ0ZGNjY5OScpOmRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICB1cmw6JCgnJykubGF6eVJ1bGUoKHRpdGxlLGlkLHd6KSA9PiB7XFxcXG4gICAgICAgICAgICAgICBwdXRNeVZhcign6buR5paZ5YiG57G7Jyt3eiwgaWQpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXFxcbiAgICAgICAgICAgIH0sZGF0YS50aXRsZSxkYXRhLmlkLnRvU3RyaW5nKCksd3opLFxcXFxuICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbidcXFxcbiAgICB9KVxcXFxufSlcXFxcbn1cXFxcbnZhciBsaXN0PUpTT04ucGFyc2UoZmV0Y2goaG9zdCsnP3NvcnQ9JytnZXRNeVZhcign6buR5paZ5YiG57G7Jyt3eixpbmRleF9uKSsnJnBhZ2U9JytwZykpLnZpZGVvcztcXFxcbi8vbG9nKGxpc3QpXFxcXG5pZih3ej09J2hhaWppYW8nKXtcXFxcbiAgICBsaXN0LmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIGRlc2M6IGRhdGEuZGF0ZSxcXFxcbiAgICAgICAgICAgIGltZzogIGRhdGEuaW1hZ2UgKyBcXFxcXFxcIkBqcz1cXFxcXFxcIiArICQudG9TdHJpbmcoKHJ1bGUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hZXM/cnVsZT1cXFxcXFxcIiArIHJ1bGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbWFnZS5pbWFnZURlY3J5cHQoKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIE1ZX1JVTEUudGl0bGUpLFxcXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9ibGFja2VyamkxXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidwaWNfMScsXFxcXG4gICAgICAgICAgICBleHRyYTp7XFxcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7aG9zdH0/aWQ9JHtkYXRhLmlkfWAsXFxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcXFxuICAgICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcbiB9KVxcXFxufWVsc2V7XFxcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIGRlc2M6IGRhdGEuZGF0ZSxcXFxcbiAgICAgICAgICAgIGltZzogKCh3ej09JzUxY2cnKXwod3o9PSdobGJkeScpKT8oZGF0YS5pbWFnZStsYXp5KTpkYXRhLmltYWdlLFxcXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9ibGFja2VyamkxXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidwaWNfMScsXFxcXG4gICAgICAgICAgICBleHRyYTp7XFxcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7aG9zdH0/aWQ9JHtkYXRhLmlkfWAsXFxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcXFxuICAgICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcbiB9KVxcXFxuIH1cXFxcbiB9Y2F0Y2goZSl7XFxcXG4gICAgIGxvZyhlLm1lc3NhZ2UpXFxcXG4gfVxcXFxuc2V0UmVzdWx0KGQpXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcInRleHRfNFxcXCIsXFxcIm5hbWVcXFwiOlxcXCLpu5HmlpnkuoznuqdcXFwiLFxcXCJwYXRoXFxcIjpcXFwiYmxhY2tlcmppMVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkPVtdO1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSlcXFxcbnZhciB1cmw9TVlfUEFSQU1TLmhvc3Q7XFxcXG52YXIgd3o9TVlfUEFSQU1TLnd6O1xcXFxudHJ5e1xcXFxudmFyIGRhdGE9IEpTT04ucGFyc2UoZmV0Y2godXJsKSk7XFxcXG4vL2xvZyhkYXRhKVxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6cGRmaChkYXRhLnRpdGxlQ29kZSwnaDEmJlRleHQnKT09Jyc/cGRmaChkYXRhLnRpdGxlQ29kZSwnaDImJlRleHQnKTpwZGZoKGRhdGEudGl0bGVDb2RlLCdoMSYmVGV4dCcpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3JpY2hfdGV4dCdcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgaWYod3o9PSdjZ3cnKXtcXFxcbiAgICAgICAgICAgIHZhciB2aWRlb3M9ZGF0YS52aWRlby5yZXBsYWNlKC9cXFxcXFxcXCQvZywnJykuc3BsaXQoJ0AnKTtcXFxcbiAgICAgICAgdmFyIGltZz1kYXRhLmltZ2NvZGUubWF0Y2goL3NyY1xcXFxcXFxcPVxcXFxcXFxcXFxcXFxcXCIuKj9cXFxcXFxcXFxcXFxcXFwiLio/YWx0LylbMF0uc3BsaXQoJ1xcXFxcXFwiJylbMV07XFxcXG4gICAgdmlkZW9zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XFxcXG4gICAgICAgIHZhciBuPWluZGV4KzE7XFxcXG4gICAgICAgIGlmKGl0ZW0pe1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6J+inhumikScrbixcXFxcbiAgICAgICAgICAgIGRlc2M6JzAnLFxcXFxuICAgICAgICAgICAgaW1nOmltZyxcXFxcbiAgICAgICAgICAgIHVybDppdGVtLnJlcGxhY2UoJ+WIhuWJsicsJycpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdjYXJkX3BpY18xJyxcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9KVxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEuaW1nY29kZSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidyaWNoX3RleHQnLFxcXFxuICAgICAgICB9KVxcXFxuICAgICAgICB9ZWxzZSBpZih3ej09J2d0bCcpe1xcXFxuICAgICAgICB2YXIgdmlkZW9zPWRhdGEudmlkZW8ucmVwbGFjZSgvXFxcXFxcXFwkL2csJycpLnNwbGl0KCdAJyk7XFxcXG4gICAgICAgIHZhciBpbWc9ZGF0YS5waWNDb2RlLm1hdGNoKC9zcmNcXFxcXFxcXD1cXFxcXFxcXFxcXFxcXFwiLio/XFxcXFxcXFxcXFxcXFxcIi4qP2FsdC8pWzBdLnNwbGl0KCdcXFxcXFxcIicpWzFdO1xcXFxuICAgIHZpZGVvcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xcXFxuICAgICAgICB2YXIgbj1pbmRleCsxO1xcXFxuICAgICAgICBpZihpdGVtKXtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOifop4bpopEnK24sXFxcXG4gICAgICAgICAgICBkZXNjOicwJyxcXFxcbiAgICAgICAgICAgIGltZzppbWcsXFxcXG4gICAgICAgICAgICB1cmw6aXRlbS5yZXBsYWNlKCfliIblibInLCcnKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMScsXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSlcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS5waWNDb2RlLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3JpY2hfdGV4dCcsXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIH1lbHNlIGlmKHd6PT0ndGlrdG9rMTgnKXtcXFxcbiAgICAgICAgdmFyIHZpZGVvcz1kYXRhLnZpZGVvLnJlcGxhY2UoL1xcXFxcXFxcJC9nLCcnKS5zcGxpdCgnQCcpO1xcXFxuICAgICAgICB2YXIgaW1ncz1kYXRhLnBpY0NvZGUucmVwbGFjZSgvXFxcXFxcXFwkL2csJycpLnNwbGl0KCdA5YiG5YmyJyk7XFxcXG4gICAgdmlkZW9zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XFxcXG4gICAgICAgIHZhciBuPWluZGV4KzE7XFxcXG4gICAgICAgIGlmKGl0ZW0pe1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6J+inhumikScrbixcXFxcbiAgICAgICAgICAgIGRlc2M6JzAnLFxcXFxuICAgICAgICAgICAgaW1nOmltZ3NbMF0rbGF6eSxcXFxcbiAgICAgICAgICAgIHVybDppdGVtLnJlcGxhY2UoJ+WIhuWJsicsJycpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdjYXJkX3BpY18xJyxcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9KVxcXFxuICAgICAgICB2YXIgdGV4dHM9ZGF0YS5pbWdjb2RlLnJlcGxhY2UoL1xcXFxcXFxcPHBcXFxcXFxcXD4vLCcmJiY8cD4nKS5yZXBsYWNlKC9cXFxcXFxcXDxcXFxcXFxcXC9wXFxcXFxcXFw+LywnJiYmPC9wPicpLnNwbGl0KCcmJiYnKTtcXFxcbiAgICAgIC8vICBsb2codGV4dHMpXFxcXG4gICAgICAgIHRleHRzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XFxcXG4gICAgaWYgKHBkZmgoaXRlbSwgJ3AmJlRleHQnKSkge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgJ3AmJlRleHQnKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0JyxcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfVxcXFxuICAgIGlmIChwZGZoKGl0ZW0sICdoMSYmVGV4dCcpKSB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCAncCYmVGV4dCcpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG4gICAgaWYgKHBkZmgoaXRlbSwgJ2gyJiZUZXh0JykpIHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0ZW0sICdwJiZUZXh0JyksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH1cXFxcbiAgICB9KVxcXFxuICAgIHZhciBpbWdzPWRhdGEucGljQ29kZS5yZXBsYWNlKC9cXFxcXFxcXCQvZywnJykuc3BsaXQoJ0DliIblibInKTtcXFxcbiAgICBpbWdzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XFxcXG4gICAgICAgIGlmKGl0ZW0pe1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgaW1nOml0ZW0rbGF6eSxcXFxcbiAgICAgICAgICAgIHVybDppdGVtK2xhenksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3BpY18xX2Z1bGwnLFxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pXFxcXG4gICAgICAgIH1lbHNlIGlmKHd6PT0nNTFjZycpe1xcXFxuICAgICAgICB2YXIgbj0wXFxcXG4gICAgICAgIHZhciB0ZXh0cz1kYXRhLmltZ2NvZGUucmVwbGFjZSgvcHN0eWxlL2csJ3Agc3R5bGUnKS5yZXBsYWNlKC9cXFxcXFxcXDxcXFxcXFxcXC9wLio/XFxcXFxcXFw+XFxcXFxcXFw8cC4qP1xcXFxcXFxcPi9nLCc8L3A+JiY8cD4nKS5zcGxpdCgnJiYnKTtcXFxcbiAgICAgICAvLyBsb2codGV4dHMpXFxcXG4gICAgICAgdGV4dHMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXFxcbiAgICAgICAgICAgaWYocGRmaChpdGVtLCcuZHBsYXllciYmZGF0YS1jb25maWcnKSE9Jycpe1xcXFxuICAgICAgICBsZXQgdXJsPUpTT04ucGFyc2UocGRmaChpdGVtLCcuZHBsYXllciYmZGF0YS1jb25maWcnKSkudmlkZW87XFxcXG4gICAgICAgIG4rKztcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc6KeG6aKR4oCd4oCdICAnICsgbixcXFxcbiAgICAgICAgICAgIGRlc2M6JzAnLFxcXFxuICAgICAgICAgICAgaW1nOiB1cmwucGljICsgbGF6eSxcXFxcbiAgICAgICAgICAgIHVybDogdXJsLnVybC5yZXBsYWNlKC9cXFxcXFxcXC9cXFxcXFxcXC8uKnBsYXlcXFxcXFxcXC4vLCcvL2xvbmcuJyksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2NhcmRfcGljXzEnXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgIH1cXFxcbiAgICAgICB9KVxcXFxuICAgICAgIHRleHRzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XFxcXG4gICAgaWYgKHBkZmgoaXRlbSwgJ3AmJlRleHQnKSkge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgJ3AmJlRleHQnKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0JyxcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfVxcXFxuICAgIHZhciBpbWdzID0gcGRmYShpdGVtLCAncCYmaW1nJykubWFwKGggPT4gcGRmaChoLCAnaW1nJiZkYXRhLXhrcmtsbGdsJykpO1xcXFxuICAgIGltZ3MuZm9yRWFjaChpdGVtMiA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogJycsXFxcXG4gICAgICAgICAgICBpbWc6IGl0ZW0yICsgbGF6eSxcXFxcbiAgICAgICAgICAgIHVybDogaXRlbTIgKyBsYXp5LFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdwaWNfMV9mdWxsJ1xcXFxuICAgICAgICB9KTtcXFxcbiAgICB9KTtcXFxcbiAgICBpZihwZGZoKGl0ZW0sJy5kcGxheWVyJiZkYXRhLWNvbmZpZycpIT0nJyl7XFxcXG4gICAgICAgIGxldCB1cmw9SlNPTi5wYXJzZShwZGZoKGl0ZW0sJy5kcGxheWVyJiZkYXRhLWNvbmZpZycpKS52aWRlbztcXFxcbiAgICAgICAgbisrO1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6ICfigJzigJzop4bpopHigJ3igJ0gICcgKyBuLFxcXFxuICAgICAgICAgICAgZGVzYzonMCcsXFxcXG4gICAgICAgICAgICBpbWc6IHVybC5waWMgKyBsYXp5LFxcXFxuICAgICAgICAgICAgdXJsOiB1cmwudXJsLnJlcGxhY2UoL1xcXFxcXFxcL1xcXFxcXFxcLy4qcGxheVxcXFxcXFxcLi8sJy8vbG9uZy4nKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMSdcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfVxcXFxuICAgIH0pXFxcXG4gICAgICAgIH1lbHNlIGlmKHd6PT0naGxiZHknKXtcXFxcbiAgICAgICAgICAgIHZhciBuPTBcXFxcbiAgICAgICAgdmFyIHRleHRzPWRhdGEucGljQ29kZS5yZXBsYWNlKC9cXFxcXFxcXDxcXFxcXFxcXC9wXFxcXFxcXFw+XFxcXFxcXFxuXFxcXFxcXFw8cFxcXFxcXFxcPi9nLCc8L3A+JiY8cD4nKS5zcGxpdCgnJiYnKTtcXFxcbiAgICAgICAvLyBsb2codGV4dHMpXFxcXG4gICAgICAgICB0ZXh0cy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xcXFxuICAgICAgICAgICBpZihwZGZoKGl0ZW0sJy5kcGxheWVyJiZjb25maWcnKSE9Jycpe1xcXFxuICAgICAgICBsZXQgdXJsPUpTT04ucGFyc2UocGRmaChpdGVtLCcuZHBsYXllciYmY29uZmlnJykpLnZpZGVvO1xcXFxuICAgICAgICBuKys7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOinhumikeKAneKAnSAgJyArIG4sXFxcXG4gICAgICAgICAgICBkZXNjOicwJyxcXFxcbiAgICAgICAgICAgIGltZzogdXJsLnBpYyArIGxhenksXFxcXG4gICAgICAgICAgICB1cmw6IHVybC51cmwucmVwbGFjZSgvXFxcXFxcXFwvXFxcXFxcXFwvLipwbGF5XFxcXFxcXFwuLywnLy9sb25nLicpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdjYXJkX3BpY18xJ1xcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICB9XFxcXG4gICAgICAgfSlcXFxcbiAgICAgICB2YXIgbj0wO1xcXFxuICAgICAgIHRleHRzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XFxcXG4gICAgaWYgKHBkZmgoaXRlbSwgJ3AmJlRleHQnKSkge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgJ3AmJlRleHQnKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0JyxcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfVxcXFxuICAgIHZhciBpbWdzID0gcGRmYShpdGVtLCAncCYmaW1nJykubWFwKGggPT4gcGRmaChoLCAnaW1nJiZvbmxvYWQnKSk7XFxcXG4gICAgaW1ncy5mb3JFYWNoKGl0ZW0yID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAnJyxcXFxcbiAgICAgICAgICAgIGltZzogaXRlbTIuc3BsaXQoXFxcXFxcXCIodGhpcywnXFxcXFxcXCIpWzFdLnNwbGl0KFxcXFxcXFwiJylcXFxcXFxcIilbMF0gKyBsYXp5LFxcXFxuICAgICAgICAgICAgdXJsOiBpdGVtMi5zcGxpdChcXFxcXFxcIih0aGlzLCdcXFxcXFxcIilbMV0uc3BsaXQoXFxcXFxcXCInKVxcXFxcXFwiKVswXSArIGxhenksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3BpY18xX2Z1bGwnXFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH0pO1xcXFxuICAgIGlmKHBkZmgoaXRlbSwnLmRwbGF5ZXImJmNvbmZpZycpIT0nJyl7XFxcXG4gICAgICAgIGxldCB1cmw9SlNPTi5wYXJzZShwZGZoKGl0ZW0sJy5kcGxheWVyJiZjb25maWcnKSkudmlkZW87XFxcXG4gICAgICAgIG4rKztcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc6KeG6aKR4oCd4oCdICAnICsgbixcXFxcbiAgICAgICAgICAgIGRlc2M6JzAnLFxcXFxuICAgICAgICAgICAgaW1nOiB1cmwucGljICsgbGF6eSxcXFxcbiAgICAgICAgICAgIHVybDogdXJsLnVybC5yZXBsYWNlKC9cXFxcXFxcXC9cXFxcXFxcXC8uKnBsYXlcXFxcXFxcXC4vLCcvL2xvbmcuJyksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2NhcmRfcGljXzEnXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgIH1cXFxcbiAgICB9KVxcXFxuICAgICAgICB9ZWxzZSBpZih3ej09J2hhaWppYW8nKXtcXFxcbiAgICAgICAgICAgIHRyeXtcXFxcbiAgICAgICAgICAgIHZhciB2aWRlb3M9ZGF0YS52aWRlby5yZXBsYWNlKC9cXFxcXFxcXCQvZywnJykuc3BsaXQoJ0AnKTtcXFxcbiAgICAgICAgdmFyIGltZz1kYXRhLnBpY0NvZGUubWF0Y2goL3hrcmtsbGdsXFxcXFxcXFw9XFxcXFxcXFxcXFxcXFxcIi4qP1xcXFxcXFxcXFxcXFxcXCIuKj9hbHQvKVswXS5zcGxpdCgnXFxcXFxcXCInKVsxXTtcXFxcbiAgICB2aWRlb3MuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXFxcbiAgICAgICAgdmFyIG49aW5kZXgrMTtcXFxcbiAgICAgICAgaWYoaXRlbSl7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTon6KeG6aKRJytuLFxcXFxuICAgICAgICAgICAgZGVzYzonMCcsXFxcXG4gICAgICAgICAgICBpbWc6aW1nKyBcXFxcXFxcIkBqcz1cXFxcXFxcIiArICQudG9TdHJpbmcoKHJ1bGUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hZXM/cnVsZT1cXFxcXFxcIiArIHJ1bGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbWFnZS5pbWFnZURlY3J5cHQoKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIE1ZX1JVTEUudGl0bGUpLFxcXFxuICAgICAgICAgICAgdXJsOml0ZW0ucmVwbGFjZSgn5YiG5YmyJywnJykrJyNpc1ZpZGVvPXRydWUjJyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMScsXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSlcXFxcbiAgICAgICAgdmFyIHRleHRzPWRhdGEucGljQ29kZS5yZXBsYWNlKC9wc3R5bGUvZywncCBzdHlsZScpLnJlcGxhY2UoL1xcXFxcXFxcPFxcXFxcXFxcL3BcXFxcXFxcXD4vZywnPC9wPiYmJykuc3BsaXQoJyYmJyk7XFxcXG4gICAgICAgIHRleHRzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XFxcXG4gICAgaWYgKHBkZmgoaXRlbSwgJ3AmJlRleHQnKSkge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgJ3AmJlRleHQnKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0JyxcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfVxcXFxuICAgICAgdmFyIGltZz1pdGVtLm1hdGNoKC94a3JrbGxnbFxcXFxcXFxcPVxcXFxcXFxcXFxcXFxcXCIuKj9cXFxcXFxcXFxcXFxcXFwiLio/YWx0Lyk7XFxcXG4gICAgICBpZihpbWcpe1xcXFxuICAgICAvLyBsb2coaW1nKVxcXFxuICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICBpbWc6aW1nWzBdLnNwbGl0KCdcXFxcXFxcIicpWzFdKyBcXFxcXFxcIkBqcz1cXFxcXFxcIiArICQudG9TdHJpbmcoKHJ1bGUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hZXM/cnVsZT1cXFxcXFxcIiArIHJ1bGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbWFnZS5pbWFnZURlY3J5cHQoKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIE1ZX1JVTEUudGl0bGUpLFxcXFxuICAgICAgICAgIHVybDppbWdbMF0uc3BsaXQoJ1xcXFxcXFwiJylbMV0rIFxcXFxcXFwiQGpzPVxcXFxcXFwiICsgJC50b1N0cmluZygocnVsZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2Flcz9ydWxlPVxcXFxcXFwiICsgcnVsZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltYWdlLmltYWdlRGVjcnlwdCgpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgTVlfUlVMRS50aXRsZSksXFxcXG4gICAgICAgICAgY29sX3R5cGU6J3BpY18xX2Z1bGwnXFxcXG4gICAgICB9KVxcXFxuICAgICAgIH1cXFxcbiAgICB9KVxcXFxuICAgIH1jYXRjaHt9XFxcXG4gICAgICAgIH1lbHNlIGlmKHd6PT0na2FubGlhbycpe1xcXFxuICAgICAgICAgICAgdmFyIHRleHRzPWRhdGEucGljQ29kZS5yZXBsYWNlKC9cXFxcXFxcXDxiclxcXFxcXFxcPi9nLCcmJicpLnNwbGl0KCcmJicpO1xcXFxuICAgICAgICAgICAgdmFyIG49MDtcXFxcbiAgICAgICAgICAgdGV4dHMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBpZihwZGZoKGl0ZW0sJy5kcGxheWVyJiZkYXRhLWNvbmZpZycpIT0nJyl7XFxcXG4gICAgICAgIGxldCB1cmw9SlNPTi5wYXJzZShwZGZoKGl0ZW0sJy5kcGxheWVyJiZkYXRhLWNvbmZpZycpKS52aWRlbztcXFxcbiAgICAgICAgbisrO1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6ICfop4bpopEgJyArIG4sXFxcXG4gICAgICAgICAgIC8vIGRlc2M6JzAnLFxcXFxuICAgICAgICAgICAgaW1nOiB1cmwucGljLFxcXFxuICAgICAgICAgICAgdXJsOiB1cmwudXJsLnJlcGxhY2UoL1xcXFxcXFxcL1xcXFxcXFxcLy4qcGxheVxcXFxcXFxcLi8sJy8vbG9uZy4nKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8xJ1xcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICB9XFxcXG4gICAgICAgfSlcXFxcbiAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEucGljQ29kZSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidyaWNoX3RleHQnLFxcXFxuICAgICAgICB9KVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIFxcXFxuICAgICAgICB9Y2F0Y2h7fVxcXFxuICAgICAgICBcXFxcbiAgICAgICAgXFxcXG4gICAgICAgIC8qXFxcXG4gICAgICAgIHRyeXtcXFxcbiAgICAgICAgdmFyIHZpZGVvPWRhdGEudmlkZW9jb2RlLnJlcGxhY2UoL1xcXFxcXFxcPFxcXFxcXFxcL3ZpZGVvXFxcXFxcXFw+L2csJzwvdmlkZW8+JiYnKS5zcGxpdCgnJiYnKTtcXFxcbiAgICAgICAgdmlkZW8uZm9yRWFjaCgoaXRlbSxpbmRleCkgPT4ge1xcXFxuICAgICAgICAgICBpZihwZGZoKGl0ZW0sICd2aWRlbyYmc3JjJykpe1xcXFxuICAgICAgICAgICAgdmFyIG49aW5kZXgrMTtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAn6KeG6aKRJytuLFxcXFxuICAgICAgICAgICAgZGVzYzonMCcsXFxcXG4gICAgICAgICAgICBpbWc6IHBkZmgoaXRlbSwgJ3ZpZGVvJiZwb3N0ZXInKSxcXFxcbiAgICAgICAgICAgIHVybDogcGRmaChpdGVtLCAndmlkZW8mJnNyYycpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdjYXJkX3BpY18xJ1xcXFxuICAgICAgICB9KVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIH1jYXRjaHt9XFxcXG4gICAgICAgIFxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6J+inhumikScsXFxcXG4gICAgICAgICAgICBkZXNjOicwJyxcXFxcbiAgICAgICAgICAgIGltZzpwZGZoKGRhdGEudmlkZW9jb2RlLCd2aWRlbyYmcG9zdGVyJyksXFxcXG4gICAgICAgICAgICB1cmw6cGRmaChkYXRhLnZpZGVvY29kZSwndmlkZW8mJnNyYycpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J2NhcmRfcGljXzEnXFxcXG4gICAgICAgICAgICBcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgKi9cXFxcbiAgICAgIFxcXFxuICAgICAgIFxcXFxuICAgICAgICBcXFxcbiAgICAgICAgLypcXFxcbiAgICAgICAgaWYod3o9PSdjZ3cnKXtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLmltZ2NvZGUsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZToncmljaF90ZXh0JyxcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAqL1xcXFxuc2V0UmVzdWx0KGQpXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzJcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5Zu95YaF55u05pKt5YiG57G7XFxcIixcXFwicGF0aFxcXCI6XFxcInpoaWJvZXJqaVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczogXFxcXG52YXIgZCA9IFtdO1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxcXG50cnl7XFxcXG5sZXQgaG9zdD1NWV9QQVJBTVMuaG9zdC5yZXBsYWNlKCdodHRwOi8vYXBpLnBocGppZWtvdS50b3AnLCdodHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcCcpO1xcXFxudmFyIHd6PU1ZX1BBUkFNUy53ejtcXFxcbmlmKE1ZX1BBR0U9PTEpe1xcXFxudmFyIOebtOaSreWIhuexuz1mZXRjaChob3N0Kyc/Z2V0cGluZ3RhaScpXFxcXG52YXIgZGF0YT0gSlNPTi5wYXJzZSjnm7Tmkq3liIbnsbspLnBpbmd0YWk7XFxcXG5kYXRhLmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIGltZzpkYXRhLmltYWdlLFxcXFxuICAgICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5JysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3poaWJvZXJqaTFcXFxcXFxcIiknLFxcXFxuICAgICAgICAgICBjb2xfdHlwZTonY2FyZF9waWNfMycsXFxcXG4gICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgaG9zdDpgJHtob3N0fT9waW5ndGFpPSR7ZGF0YS5pZH1gLFxcXFxuICAgICAgICAgICAgICB3ejp3eixcXFxcbiAgICAgICAgICB9XFxcXG4gICAgfSlcXFxcbn0pXFxcXG59XFxcXG59Y2F0Y2goZSl7XFxcXG4gICAgbG9nKGUubWVzc2FnZSlcXFxcbiAgICB0b2FzdCgn55yL5LiN5LqGJylcXFxcbn1cXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJ0ZXh0XzRcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5Zu95YaF55u05pKt5LqM57qnXFxcIixcXFwicGF0aFxcXCI6XFxcInpoaWJvZXJqaTFcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZD1bXTtcXFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpXFxcXG5sZXQgaG9zdD1NWV9QQVJBTVMuaG9zdDtcXFxcbmxldCB1cmw9aG9zdC5zcGxpdCgnPycpWzBdO1xcXFxudmFyIHd6PU1ZX1BBUkFNUy53ejtcXFxcbnRyeXtcXFxcbmxldCBsaXN0PSBKU09OLnBhcnNlKGZldGNoKGhvc3QpKS56aHVibztcXFxcbi8vbG9nKGxpc3QpXFxcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZSxcXFxcbiAgICAgICAgICAgIHVybDogdXJsKyc/aWQ9JytkYXRhLmlkK3ZvZCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8zJ1xcXFxuICAgICAgICB9KVxcXFxuIH0pXFxcXG59Y2F0Y2goZSl7XFxcXG4gICAgbG9nKGUubWVzc2FnZSlcXFxcbiAgICAgdG9hc3QoJ+eci+S4jeS6hicpXFxcXG59XFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfMlxcXCIsXFxcIm5hbWVcXFwiOlxcXCLlm73lpJbnm7Tmkq3liIbnsbtcXFwiLFxcXCJwYXRoXFxcIjpcXFwiZ3Vvd2FpZXJqaVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczogXFxcXG52YXIgZCA9IFtdO1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxcXG50cnl7XFxcXG5sZXQgaG9zdD1NWV9VUkwuc3BsaXQoJyMjJylbMV0ucmVwbGFjZSgnaHR0cDovL2FwaS5waHBqaWVrb3UudG9wJywnaHR0cHM6Ly9hcGkxLnlpbHVzaHVuZmVuZy50b3AnKTtcXFxcbnZhciB3ej1NWV9VUkwuc3BsaXQoJyMjJylbMl07XFxcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzNdO1xcXFxudmFyIOWbveWkluebtOaSreWIhuexuz1mZXRjaChob3N0Kyc/Z2V0c29ydCcpXFxcXG52YXIgZGF0YT0gSlNPTi5wYXJzZSjlm73lpJbnm7Tmkq3liIbnsbspLmNhdGVnb3JpZXM7XFxcXG52YXIgaW5kZXhfbj1kYXRhWzBdLmlkLnRvU3RyaW5nKClcXFxcbmlmKE1ZX1BBR0U9PTEpe1xcXFxuZGF0YS5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKCflm73lpJbnm7Tmkq3liIbnsbsnK3d6LGluZGV4X24pPT1kYXRhLmlkLnRvU3RyaW5nKCk/c3Ryb25nKGRhdGEudGl0bGUsJ0ZGNjY5OScpOmRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICB1cmw6JCgnJykubGF6eVJ1bGUoKHRpdGxlLGlkLHd6KSA9PiB7XFxcXG4gICAgICAgICAgICAgICBwdXRNeVZhcign5Zu95aSW55u05pKt5YiG57G7Jyt3eiwgaWQpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXFxcbiAgICAgICAgICAgIH0sZGF0YS50aXRsZSxkYXRhLmlkLnRvU3RyaW5nKCksd3opLFxcXFxuICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbidcXFxcbiAgICB9KVxcXFxufSlcXFxcbn1cXFxcblxcXFxudmFyIGxpc3Q9SlNPTi5wYXJzZShmZXRjaChob3N0Kyc/c29ydD0nK2dldE15VmFyKCflm73lpJbnm7Tmkq3liIbnsbsnK3d6LGluZGV4X24pKycmcGFnZT0nK3BnKSkudmlkZW9zO1xcXFxuLy9sb2cobGlzdClcXFxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgZGVzYzogZGF0YS5kYXRlLFxcXFxuICAgICAgICAgICAgaW1nOiAoKGRhdGEuaW1hZ2UuaW5jbHVkZXMoJ3VwbG9hZCcpfGRhdGEuaW1hZ2UuaW5jbHVkZXMoJ25ldy4nKSkmIWRhdGEuaW1hZ2UuaW5jbHVkZXMoJ3Rvb2xtbScpKT8oZGF0YS5pbWFnZStsYXp5KTpkYXRhLmltYWdlLFxcXFxuICAgICAgICAgICAgdXJsOiBob3N0Kyc/aWQ9JytkYXRhLmlkK3ZvZCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcXFxuICAgICAgICB9KVxcXFxuIH0pXFxcXG4gfWNhdGNoKGUpe1xcXFxuICAgICBsb2coZS5tZXNzYWdlKVxcXFxuICAgICB0b2FzdCgn55yL5LiN5LqGJylcXFxcbiB9XFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfMlxcXCIsXFxcIm5hbWVcXFwiOlxcXCLlpbMg5LyY5YiG57G7XFxcIixcXFwicGF0aFxcXCI6XFxcIm52eW91ZXJqaVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczogXFxcXG52YXIgZCA9IFtdO1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxcXG50cnl7XFxcXG5sZXQgaG9zdD1NWV9QQVJBTVMuaG9zdC5yZXBsYWNlKCdodHRwOi8vYXBpLnBocGppZWtvdS50b3AnLCdodHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcCcpO1xcXFxudmFyIHd6PU1ZX1BBUkFNUy53ejtcXFxcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxcXG52YXIgaXRlbT1yZXF1ZXN0KGhvc3QrJz9hY3RyZXNzPSZwYWdlPScrcGcpXFxcXG52YXIgZGF0YT0gSlNPTi5wYXJzZShpdGVtKS5hY3RyZXNzZXM7XFxcXG5kYXRhLmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIGRlc2M6ZGF0YS5udW1iZXIsXFxcXG4gICAgICAgICAgICBpbWc6ZGF0YS5pbWFnZSxcXFxcbiAgICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL252eW91ZXJqaTFcXFxcXFxcIiknLFxcXFxuICAgICAgICAgICBjb2xfdHlwZTonY2FyZF9waWNfMycsXFxcXG4gICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgaG9zdDpgJHtob3N0fT9zb3J0PSR7ZGF0YS5pZH0mcGFnZT1gLFxcXFxuICAgICAgICAgICAgICB3ejp3eixcXFxcbiAgICAgICAgICB9XFxcXG4gICAgfSlcXFxcbn0pXFxcXG5cXFxcbn1jYXRjaChlKXtcXFxcbiAgICBsb2coZS5tZXNzYWdlKVxcXFxufVxcXFxuc2V0UmVzdWx0KGQpXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcInRleHRfNFxcXCIsXFxcIm5hbWVcXFwiOlxcXCLlpbMg5LyY5LqM57qnXFxcIixcXFwicGF0aFxcXCI6XFxcIm52eW91ZXJqaTFcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZD1bXTtcXFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpXFxcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcXFxudmFyIGhvc3Q9TVlfUEFSQU1TLmhvc3QrcGc7XFxcXG52YXIgdXJsPWhvc3Quc3BsaXQoJz8nKVswXTtcXFxcbnZhciB3ej1NWV9QQVJBTVMud3o7XFxcXG50cnl7XFxcXG5sZXQgbGlzdD0gSlNPTi5wYXJzZShmZXRjaChob3N0KSkudmlkZW9zO1xcXFxuLy9sb2cobGlzdClcXFxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlLFxcXFxuICAgICAgICAgICAgZGVzYzooZGF0YS5jcmVhdGV0aW1lPT1udWxsPycnOmRhdGEuY3JlYXRldGltZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSksXFxcXG4gICAgICAgICAgICB1cmw6IHVybCsnP2lkPScrZGF0YS5pZCt2b2QsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXFxcbiAgICAgICAgfSlcXFxcbiB9KVxcXFxufWNhdGNoKGUpe1xcXFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxcXG4gICAgIHRvYXN0KCfnnIvkuI3kuoYnKVxcXFxufVxcXFxuc2V0UmVzdWx0KGQpXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzJcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5biW5a2Q5YiG57G7XFxcIixcXFwicGF0aFxcXCI6XFxcInRpZWVyamlcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6IFxcXFxudmFyIGQgPSBbXTtcXFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcXFxudHJ5e1xcXFxubGV0IGhvc3Q9TVlfUEFSQU1TLmhvc3QucmVwbGFjZSgnaHR0cDovL2FwaS5waHBqaWVrb3UudG9wJywnaHR0cHM6Ly9hcGkxLnlpbHVzaHVuZmVuZy50b3AnKTtcXFxcbnZhciB3ej1NWV9QQVJBTVMud3o7XFxcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcXFxuaWYoTVlfUEFHRT09MSl7XFxcXG52YXIg5biW5a2Q5YiG57G7PWZldGNoKGhvc3QrJz9nZXRzb3J0JylcXFxcbnZhciBkYXRhPSBKU09OLnBhcnNlKOW4luWtkOWIhuexuykuY2F0ZWdvcmllcztcXFxcbnZhciBpbmRleF9uPWRhdGFbMF0uaWQudG9TdHJpbmcoKTtcXFxcbmRhdGEuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcign5biW5a2Q5YiG57G7Jyt3eixpbmRleF9uKT09ZGF0YS5pZC50b1N0cmluZygpP3N0cm9uZyhkYXRhLnRpdGxlLCdGRjY2OTknKTpkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgdXJsOiQoJycpLmxhenlSdWxlKCh0aXRsZSxpZCx3eikgPT4ge1xcXFxuICAgICAgICAgICAgICAgcHV0TXlWYXIoJ+W4luWtkOWIhuexuycrd3osIGlkKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxcXG4gICAgICAgICAgICB9LGRhdGEudGl0bGUsZGF0YS5pZC50b1N0cmluZygpLHd6KSxcXFxcbiAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nXFxcXG4gICAgfSlcXFxcbn0pXFxcXG59XFxcXG52YXIgbGlzdD1KU09OLnBhcnNlKGZldGNoKGhvc3QrJz9zb3J0PScrZ2V0TXlWYXIoJ+W4luWtkOWIhuexuycrd3osaW5kZXhfbikrJyZwYWdlPScrcGcpKS52aWRlb3M7XFxcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIGRlc2M6IGRhdGEuZGF0ZSxcXFxcbiAgICAgICAgICAgIC8vaW1nOiAnaHR0cHM6Ly9pbWFnZXMueG9vd2JzLmNvbS91cGxvYWRfMDEnK2RhdGEuaW1hZ2Uuc3BsaXQoJ3VwbG9hZF8wMScpWzFdLFxcXFxuICAgICAgICAgICAgaW1nOmRhdGEuaW1hZ2UrbGF6eSxcXFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHkjIycrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9ibGFja2VyamkxXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidwaWNfMScsXFxcXG4gICAgICAgICAgICBleHRyYTp7XFxcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7aG9zdH0/aWQ9JHtkYXRhLmlkfWAsXFxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcXFxuICAgICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcbiB9KVxcXFxuIH1jYXRjaChlKXtcXFxcbiAgICBsb2coZS5tZXNzYWdlKVxcXFxuICAgICB0b2FzdCgn55yL5LiN5LqGJylcXFxcbiB9XFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfMlxcXCIsXFxcIm5hbWVcXFwiOlxcXCLnm7Tmkq3ogZrlkIjliIbnsbtcXFwiLFxcXCJwYXRoXFxcIjpcXFwiemhpYm9qdWhlZXJqaVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczogXFxcXG52YXIgZCA9IFtdO1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxcXG50cnl7XFxcXG5sZXQgd3o9TVlfUEFSQU1TLnd6O1xcXFxuaWYod3o9PSfnm7Tmkq3ogZrlkIgnKXtcXFxcbiAgICBob3N0PSdodHRwOi8vYXBpLnZpcG1pc3NzLmNvbTo4MS94Y2Rzdy8nXFxcXG59ZWxzZXtcXFxcbiAgICBob3N0PSdodHRwOi8vYXBpLm1haXlvdXguY29tOjgxL21mLydcXFxcbn1cXFxcbmlmKE1ZX1BBR0U9PTEpe1xcXFxudmFyIOebtOaSreiBmuWQiD1yZXF1ZXN0KGhvc3QrJ2pzb24udHh0JylcXFxcbnZhciBkYXRhPSBKU09OLnBhcnNlKOebtOaSreiBmuWQiCkucGluZ3RhaTtcXFxcbmRhdGEuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgZGVzYzpkYXRhLk51bWJlcixcXFxcbiAgICAgICAgICAgIGltZzpkYXRhLnhpbmltZyxcXFxcbiAgICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS96aGlib2p1aGVlcmppMVxcXFxcXFwiKScsXFxcXG4gICAgICAgICAgIGNvbF90eXBlOidjYXJkX3BpY18zJyxcXFxcbiAgICAgICAgICAgZXh0cmE6e1xcXFxuICAgICAgICAgICAgICBob3N0OmAke2hvc3R9JHtkYXRhLmFkZHJlc3N9YCxcXFxcbiAgICAgICAgICAgICAgd3o6d3osXFxcXG4gICAgICAgICAgfVxcXFxuICAgIH0pXFxcXG59KVxcXFxufVxcXFxufWNhdGNoKGUpe1xcXFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxcXG4gICAgdG9hc3QoJ+eci+S4jeS6hicpXFxcXG59XFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwidGV4dF80XFxcIixcXFwibmFtZVxcXCI6XFxcIuebtOaSreiBmuWQiOS6jOe6p1xcXCIsXFxcInBhdGhcXFwiOlxcXCJ6aGlib2p1aGVlcmppMVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkPVtdO1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSlcXFxcbmxldCBob3N0PU1ZX1BBUkFNUy5ob3N0O1xcXFxudHJ5e1xcXFxubGV0IGxpc3Q9IEpTT04ucGFyc2UoZmV0Y2goaG9zdCkpLnpodWJvO1xcXFxuLy9sb2cobGlzdClcXFxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICBpZighZGF0YS50aXRsZS5pbmNsdWRlcygnOTk5OScpKXtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltZyxcXFxcbiAgICAgICAgICAgIHVybDogZGF0YS5hZGRyZXNzLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIH1cXFxcbiB9KVxcXFxufWNhdGNoe31cXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8yXFxcIixcXFwibmFtZVxcXCI6XFxcIua8q+eUu+WIhuexu1xcXCIsXFxcInBhdGhcXFwiOlxcXCJtYW5odWFlcmppXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOiBcXFxcbnZhciBkID0gW107XFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXFxcbnRyeXtcXFxcbmxldCBob3N0PU1ZX1BBUkFNUy5ob3N0LnJlcGxhY2UoJ2h0dHA6Ly9hcGkucGhwamlla291LnRvcCcsJ2h0dHBzOi8vYXBpMS55aWx1c2h1bmZlbmcudG9wJyk7XFxcXG52YXIgd3o9TVlfUEFSQU1TLnd6O1xcXFxudmFyIHBnPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXFxcbmlmKE1ZX1BBR0U9PTEpe1xcXFxudmFyIOa8q+eUu+WIhuexuz1mZXRjaChob3N0Kyc/Z2V0c29ydCcpXFxcXG52YXIgZGF0YT0gSlNPTi5wYXJzZSjmvKvnlLvliIbnsbspLmNhdGVnb3JpZXM7XFxcXG52YXIgaW5kZXhfbj1kYXRhWzBdLmlkLnRvU3RyaW5nKClcXFxcbmRhdGEuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcign5ryr55S75YiG57G7Jyt3eixpbmRleF9uKT09ZGF0YS5pZC50b1N0cmluZygpP3N0cm9uZyhkYXRhLnRpdGxlLCdGRjY2OTknKTpkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgdXJsOiQoJycpLmxhenlSdWxlKCh0aXRsZSxpZCx3eikgPT4ge1xcXFxuICAgICAgICAgICAgICAgcHV0TXlWYXIoJ+a8q+eUu+WIhuexuycrd3osIGlkKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxcXG4gICAgICAgICAgICB9LGRhdGEudGl0bGUsZGF0YS5pZC50b1N0cmluZygpLHd6KSxcXFxcbiAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nXFxcXG4gICAgfSlcXFxcbn0pXFxcXG59XFxcXG52YXIgbGlzdD1KU09OLnBhcnNlKGZldGNoKGhvc3QrJz9zb3J0PScrZ2V0TXlWYXIoJ+a8q+eUu+WIhuexuycrd3osaW5kZXhfbikrJyZwYWdlPScrcGcpKS52aWRlb3M7XFxcXG4vL2xvZyhsaXN0KVxcXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICBkZXNjOiBkYXRhLmRhdGUsXFxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL21hbmh1YWVyamkxXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8zJyxcXFxcbiAgICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgaG9zdDpgJHtob3N0fT9pZD0ke2RhdGEuaWR9YCxcXFxcbiAgICAgICAgICAgICAgd3o6d3osXFxcXG4gICAgICAgICAgfVxcXFxuICAgICAgICB9KVxcXFxuIH0pXFxcXG4gfWNhdGNoKGUpe1xcXFxuICAgICBsb2coZS5tZXNzYWdlKVxcXFxuICAgICB0b2FzdCgn55yL5LiN5LqGJylcXFxcbiB9XFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwidGV4dF80XFxcIixcXFwibmFtZVxcXCI6XFxcIua8q+eUu+ebruW9lVxcXCIsXFxcInBhdGhcXFwiOlxcXCJtYW5odWFlcmppMVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkPVtdO1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSlcXFxcbmxldCBob3N0PU1ZX1BBUkFNUy5ob3N0O1xcXFxubGV0IHVybD1ob3N0LnNwbGl0KCc/JylbMF07XFxcXG52YXIgd3o9TVlfUEFSQU1TLnd6O1xcXFxudHJ5e1xcXFxubGV0IGxpc3Q9IEpTT04ucGFyc2UoZmV0Y2goaG9zdCkpLmNoYXB0ZXJzO1xcXFxuLy9sb2cobGlzdClcXFxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgdXJsOiB1cmwrJz9pZD0nK2RhdGEuaWQrcGljcyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0XzInXFxcXG4gICAgICAgIH0pXFxcXG4gfSlcXFxcbiAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgdGl0bGU6J+esrDHnq6DpooTop4gnLFxcXFxuICAgICAgICAgIGNvbF90eXBlOidyaWNoX3RleHQnLFxcXFxuICAgICAgfSlcXFxcbiBsZXQgaW1nPSBKU09OLnBhcnNlKGZldGNoKGhvc3QpKS5jb250ZW50LnJlcGxhY2UoL1xcXFxcXFxcJC9nLCcnKS5yZXBsYWNlKC/liIblibIvZywnJykuc3BsaXQoJ0AnKTtcXFxcbiBpbWcuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIGltZzpkYXRhLFxcXFxuICAgICAgICAgICAgdXJsOiAncGljczovLycraW1nLmpvaW4oJyYmJyksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZToncGljXzFfZnVsbCdcXFxcbiAgICAgICAgfSlcXFxcbiB9KVxcXFxuIFxcXFxufWNhdGNoKGUpe1xcXFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxcXG4gICAgIHRvYXN0KCfnnIvkuI3kuoYnKVxcXFxufVxcXFxuc2V0UmVzdWx0KGQpXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzJcXFwiLFxcXCJuYW1lXFxcIjpcXFwi54yr5ZKq5ryr55S7XFxcIixcXFwicGF0aFxcXCI6XFxcIm1hb21pbWFuaHVhXFxcIixcXFwicnVsZVxcXCI6XFxcIiBqczogXFxcXG52YXIgZCA9IFtdO1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcXFxudHJ5e1xcXFxudmFyIOeMq+WSqua8q+eUuz0gW3t0aXRsZTogJ+aOqOiNkCbmnIDmlrAm57K+5Y2OJyxpZDogJ3JlY29tbWVuZCZ1cGRhdGUmcG9wdWxhcid9XTtcXFxcbmlmIChNWV9QQUdFID09IDEpIHtcXFxcbiAgICAkLnJlcXVpcmUoXFxcXFxcXCJDYXRlXFxcXFxcXCIpLkNhdGUo54yr5ZKq5ryr55S7LCfnjKvlkqrmvKvnlLsnLGQpO1xcXFxufVxcXFxudmFyIHNpZ249RW5jcnlwdCgne1xcXFxcXFwicGFnZVxcXFxcXFwiOicrcGcrJ30nKTtcXFxcbnZhciBob3N0PSdodHRwOi8vMTE5LjI4LjUyLjE5Mzo4MDg5L2FwaS9jb21pYy8nK2dldE15VmFyKCfnjKvlkqrmvKvnlLsnLCdyZWNvbW1lbmQnKSsnP3BhcmFtcz0nK3NpZ247XFxcXG52YXIgYm9keT0ncGFyYW1zPScrc2lnbjtcXFxcbnZhciBodG1sID0gZmV0Y2goaG9zdCwge1xcXFxuICAgIGhlYWRlcnM6IHtcXFxcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXFxcXG4gICAgfSxcXFxcbiAgICBib2R5OiBib2R5LFxcXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxcXG59KTsgXFxcXG52YXIgaHRtbDI9RGVjcnlwdChodG1sKVxcXFxuLy9sb2coaHRtbDIpXFxcXG52YXIgbGlzdD1KU09OLnBhcnNlKGh0bWwyKS5kYXRhLmRhdGE7XFxcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIGltZzogZGF0YS50aHVtYixcXFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9tYW9taW1hbmh1YWVyamlcXFxcXFxcIiknLFxcXFxuICAgICAgICAgIC8vdXJsOmRhdGEuaWQrbWFvbWltYW5odWFqeCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8zJyxcXFxcbiAgICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgaWQ6ZGF0YS5pZCxcXFxcbiAgICAgICAgICB9XFxcXG4gICAgICAgIH0pXFxcXG4gfSlcXFxcbn1jYXRjaChlKXtcXFxcbiAgICBsb2coZS5tZXNzYWdlKVxcXFxuICAgICB0b2FzdCgn55yL5LiN5LqGJylcXFxcbn1cXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8yXFxcIixcXFwibmFtZVxcXCI6XFxcIuWwj+ivtOWIhuexu1xcXCIsXFxcInBhdGhcXFwiOlxcXCJ4aWFvc2h1b2VyamlcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6IFxcXFxudmFyIGQgPSBbXTtcXFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcXFxudHJ5e1xcXFxubGV0IGhvc3Q9TVlfUEFSQU1TLmhvc3QucmVwbGFjZSgnaHR0cDovL2FwaS5waHBqaWVrb3UudG9wJywnaHR0cHM6Ly9hcGkxLnlpbHVzaHVuZmVuZy50b3AnKTtcXFxcbnZhciB3ej1NWV9QQVJBTVMud3o7XFxcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcXFxuaWYoTVlfUEFHRT09MSl7XFxcXG52YXIg5bCP6K+05YiG57G7PWZldGNoKGhvc3QrJz9nZXRzb3J0JylcXFxcbnZhciBkYXRhPSBKU09OLnBhcnNlKOWwj+ivtOWIhuexuykuY2F0ZWdvcmllcztcXFxcbnZhciBpbmRleF9uPWRhdGFbMF0uaWQudG9TdHJpbmcoKTtcXFxcbmRhdGEuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcign5bCP6K+05YiG57G7Jyt3eixpbmRleF9uKT09ZGF0YS5pZC50b1N0cmluZygpP3N0cm9uZyhkYXRhLnRpdGxlLCdGRjY2OTknKTpkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgdXJsOiQoJycpLmxhenlSdWxlKCh0aXRsZSxpZCx3eikgPT4ge1xcXFxuICAgICAgICAgICAgICAgcHV0TXlWYXIoJ+Wwj+ivtOWIhuexuycrd3osIGlkKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxcXG4gICAgICAgICAgICB9LGRhdGEudGl0bGUsZGF0YS5pZC50b1N0cmluZygpLHd6KSxcXFxcbiAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nXFxcXG4gICAgfSlcXFxcbn0pXFxcXG59XFxcXG52YXIgbGlzdD1KU09OLnBhcnNlKGZldGNoKGhvc3QrJz9zb3J0PScrZ2V0TXlWYXIoJ+Wwj+ivtOWIhuexuycrd3osaW5kZXhfbikrJyZwYWdlPScrcGcpKS5saXN0O1xcXFxuLy9sb2cobGlzdClcXFxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS94aWFvc2h1b2VyamkxXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcXFxuICAgICAgICAgICAgZXh0cmE6e1xcXFxuICAgICAgICAgICAgICBob3N0OmAke2hvc3R9P2lkPSR7ZGF0YS5pZH1gLFxcXFxuICAgICAgICAgICAgICB3ejp3eixcXFxcbiAgICAgICAgICB9XFxcXG4gICAgICAgIH0pXFxcXG4gfSlcXFxcbiB9Y2F0Y2h7fVxcXFxuc2V0UmVzdWx0KGQpXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcInRleHRfNFxcXCIsXFxcIm5hbWVcXFwiOlxcXCLlsI/or7TkuoznuqdcXFwiLFxcXCJwYXRoXFxcIjpcXFwieGlhb3NodW9lcmppMVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkPVtdO1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSlcXFxcbmxldCBob3N0PU1ZX1BBUkFNUy5ob3N0O1xcXFxubGV0IHVybD1ob3N0LnNwbGl0KCc/JylbMF07XFxcXG52YXIgd3o9TVlfUEFSQU1TLnd6O1xcXFxudHJ5e1xcXFxuICAgIGlmKCh3ej09J2ppbmppc2h1d3UnKXwod3o9PSdsZWJvJyl8KHd6PT0naHVhbnhpYW5nJyl8KHd6PT0namt1bicpKXtcXFxcbiAgICAgICAgbGV0IG5vdmVsPSBKU09OLnBhcnNlKGZldGNoKGhvc3QpKS5ub3ZlbDtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOm5vdmVsLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3JpY2hfdGV4dCdcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9ZWxzZXtcXFxcbmxldCBpZD0gSlNPTi5wYXJzZShmZXRjaChob3N0KSkuaWQ7XFxcXG4gbG9hZFJlYWRDb250ZW50UGFnZShpZClcXFxcbiB9XFxcXG59Y2F0Y2h7XFxcXG4gICAgdG9hc3QoJ+iwgeeJueS5iOeci+Wwj+ivtOWViu+8gScpXFxcXG59XFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwidGV4dF80XFxcIixcXFwibmFtZVxcXCI6XFxcIueMq+WSqua8q+eUu+S6jOe6p1xcXCIsXFxcInBhdGhcXFwiOlxcXCJtYW9taW1hbmh1YWVyamlcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZD1bXTtcXFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpXFxcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcXFxudmFyIGlkPU1ZX1BBUkFNUy5pZDtcXFxcbnZhciBzaWduPUVuY3J5cHQoJ3tcXFxcXFxcImlkXFxcXFxcXCI6JytpZCsnLFxcXFxcXFwicGFnZVxcXFxcXFwiOicrcGcrJyxcXFxcXFxcInNvcnRcXFxcXFxcIjowfScpO1xcXFxudmFyIGhvc3Q9J2h0dHA6Ly8xMTkuMjguNTIuMTkzOjgwODkvYXBpL2NvbWljL2xpc3RzP3BhcmFtcz0nK3NpZ247XFxcXG52YXIgYm9keT0ncGFyYW1zPScrc2lnbjtcXFxcbnZhciBodG1sID0gZmV0Y2goaG9zdCwge1xcXFxuICAgIGhlYWRlcnM6IHtcXFxcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXFxcXG4gICAgfSxcXFxcbiAgICBtZXRob2Q6ICdQT1NUJ1xcXFxufSk7IFxcXFxudmFyIGh0bWwyPURlY3J5cHQoaHRtbClcXFxcbnZhciBsaXN0PUpTT04ucGFyc2UoaHRtbDIpLmRhdGEuZGF0YTtcXFxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLm5hbWUsXFxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxcXG4gICAgICAgICAgICB1cmw6IGRhdGEuaWQrbWFvbWltYW5odWFqeCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcIm1vdmllXzFfbGVmdF9waWNcXFxcXFxcIixcXFxcbiAgICB9KVxcXFxuICAgIH0pXFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfMlxcXCIsXFxcIm5hbWVcXFwiOlxcXCLnjKvlkqrnvo7lm75cXFwiLFxcXCJwYXRoXFxcIjpcXFwibWFvbWltZWl0dVxcXCIsXFxcInJ1bGVcXFwiOlxcXCIganM6IFxcXFxudmFyIGQgPSBbXTtcXFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcXFxudmFyIHBnPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXFxcbnRyeXtcXFxcbnZhciDnjKvlkqrnvo7lm749IFt7dGl0bGU6ICfng63pl6gm6Zey6IGK6K6o6K66JuiVvuS4neWls+WQjCbnvo7ohb/njonotrMm5beo5Lmz576O6IO4JueUt+WQjCbljp/liJvoh6rmi40m5Yqo5ryrJuiupOivgSZzbSbor77loIIm5oiR5aa7JumrmOa9ruiEuCbnvZHnuqLlpKflkpYm5Yi25pyN6K+x5oORJuicnOaxgee+juiHgCcsaWQ6ICcwJjMmNyY5JjEwJjIyJjEmOCYyNiY2JjMxJjIzJjImMTgmNCYyMSd9XTtcXFxcbmlmIChNWV9QQUdFID09IDEpIHtcXFxcbiAgICAkLnJlcXVpcmUoXFxcXFxcXCJDYXRlXFxcXFxcXCIpLkNhdGUo54yr5ZKq576O5Zu+LCfnjKvlkqrnvo7lm74nLGQpO1xcXFxufVxcXFxudmFyIHNpZ249RW5jcnlwdCgne1xcXFxcXFwicGFnZVxcXFxcXFwiOicrcGcrJyxcXFxcXFxcImNhdGVcXFxcXFxcIjonK2dldE15VmFyKCfnjKvlkqrnvo7lm74nLCcwJykrJyxcXFxcXFxcInR5cGVcXFxcXFxcIjoxfScpO1xcXFxudmFyIGhvc3Q9J2h0dHA6Ly8xMTkuMjguNTIuMTkzOjgwODkvYXBpL3YyL3Bvc3QvaG9tZT9wYXJhbXM9JytzaWduO1xcXFxudmFyIGJvZHk9J3BhcmFtcz0nK3NpZ247XFxcXG52YXIgaHRtbCA9IGZldGNoKGhvc3QsIHtcXFxcbiAgICBoZWFkZXJzOiB7XFxcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxcXFxuICAgIH0sXFxcXG4gICAgYm9keTogYm9keSxcXFxcbiAgICBtZXRob2Q6ICdQT1NUJ1xcXFxufSk7IFxcXFxudmFyIGh0bWwyPURlY3J5cHQoaHRtbClcXFxcbnZhciBsaXN0PUpTT04ucGFyc2UoaHRtbDIpLmRhdGE7XFxcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgaWYoZGF0YS5pbWFnZXMpe1xcXFxuICAgICAgICBcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgZGVzYzpkYXRhLnRpbWUsXFxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2VzWzBdLmltYWdlLFxcXFxuICAgICAgICAgICAgdXJsOiAkKCcnKS5sYXp5UnVsZShkYXRhID0+IHtcXFxcbiAgICAgICAgICBsZXQgcGljQXJyPVtdO1xcXFxuICAgICAgICAgIGxldCBpbWc9ZGF0YS5pbWFnZXM7XFxcXG4gICAgICAgICAgbGV0IGxlbj0gaW1nLmxlbmd0aC0xO1xcXFxuICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IGxlbjsgaSsrKSB7XFxcXG4gICAgICAgICAgICAgICAgcGljQXJyW2ldID0gaW1nW2ldLmltYWdlO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwicGljczovL1xcXFxcXFwiICsgcGljQXJyLmpvaW4oXFxcXFxcXCImJlxcXFxcXFwiKVxcXFxuICAgICAgICB9LGRhdGEpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzMnXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIH1cXFxcbiB9KVxcXFxuIH1jYXRjaHt9XFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfMlxcXCIsXFxcIm5hbWVcXFwiOlxcXCLnjKvlkqpGTVxcXCIsXFxcInBhdGhcXFwiOlxcXCJtYW9taUZNXFxcIixcXFwicnVsZVxcXCI6XFxcIiBqczogXFxcXG52YXIgZCA9IFtdO1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcXFxudmFyIOeMq+WSqkZNPSBbe3RpdGxlOiAn6YO95biC5r+A5oOFJuWutuW6reS5sSDkvKYm5Y+m57G75bCP6K+0JumdkuaYpeagoeWbrSbmg4Ug6Imy56yR6K+dJuS6uiDlprvkubEg5LymJuaApyDniLHmioDlt6cm546E5bm75aWH5bm7JyxpZDogJzgmOSYxMCYxMSYxMiYxMyYxNCYxNSd9XTtcXFxcbmlmIChNWV9QQUdFID09IDEpIHtcXFxcbiAgICAkLnJlcXVpcmUoXFxcXFxcXCJDYXRlXFxcXFxcXCIpLkNhdGUo54yr5ZKqRk0sJ+eMq+WSqkZNJyxkKTtcXFxcbn1cXFxcbnZhciBzaWduPUVuY3J5cHQoJ3tcXFxcXFxcInBhZ2VcXFxcXFxcIjonK3BnKycsXFxcXFxcXCJjYXRlX2lkXFxcXFxcXCI6JytnZXRNeVZhcign54yr5ZKqRk0nLCc4JykrJyxcXFxcXFxcInN0YXR1c1xcXFxcXFwiOjAsXFxcXFxcXCJ0eXBlXFxcXFxcXCI6MCxcXFxcXFxcIm5ld1xcXFxcXFwiOjB9Jyk7XFxcXG52YXIgaG9zdD0naHR0cDovLzExOS4yOC41Mi4xOTM6ODA4OS9hcGkvYm9vay9pbmRleD9wYXJhbXM9JytzaWduO1xcXFxudmFyIGJvZHk9J3BhcmFtcz0nK3NpZ247XFxcXG52YXIgaHRtbCA9IGZldGNoKGhvc3QsIHtcXFxcbiAgICBoZWFkZXJzOiB7XFxcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxcXFxuICAgIH0sXFxcXG4gICAgYm9keTogYm9keSxcXFxcbiAgICBtZXRob2Q6ICdQT1NUJ1xcXFxufSk7IFxcXFxudmFyIGh0bWwyPURlY3J5cHQoaHRtbClcXFxcbnZhciBsaXN0PUpTT04ucGFyc2UoaHRtbDIpLmRhdGEuZGF0YTtcXFxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLm5hbWUsXFxcXG4gICAgICAgICAgICBpbWc6IGRhdGEudGh1bWIsXFxcXG4gICAgICAgICAgICB1cmw6IGRhdGEuaWQrbWFvbWlmbWp4LFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzMnXFxcXG4gICAgICAgIH0pXFxcXG4gfSlcXFxcblxcXFxuc2V0UmVzdWx0KGQpXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiMDHpppbpobXop4bpopFcXFwiLFxcXCJwYXRoXFxcIjpcXFwidmlkZW9cXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXFxcbnRyeXtcXFxcbiAgdmFyIGxpc3Q9Z2V0SXRlbSgnc2hvdXllJykuc3BsaXQoJ+mmlumhteaVsOaNruW8gOWniycpWzFdLnNwbGl0KCfpppbpobXmlbDmja7nu5PmnZ8nKVswXS5zcGxpdCgn5o2i6KGMJyk7XFxcXG4gIGxpc3QuZm9yRWFjaChkYXRhPT57XFxcXG4gICAgICB2YXIgcWQ9c3AoZGF0YSwgXFxcXFxcXCJxZChcXFxcXFxcIiwgXFxcXFxcXCIpXFxcXFxcXCIpO1xcXFxuICAgICAgdmFyIHRwPXNwKGRhdGEsIFxcXFxcXFwidHAoXFxcXFxcXCIsIFxcXFxcXFwiKVxcXFxcXFwiKTtcXFxcbiAgICAgIHZhciBtYz1zcChkYXRhLCBcXFxcXFxcIm1jKFxcXFxcXFwiLCBcXFxcXFxcIilcXFxcXFxcIik7XFxcXG4gICAgICB2YXIgd3o9c3AoZGF0YSwgXFxcXFxcXCJnamMoXFxcXFxcXCIsIFxcXFxcXFwiKVxcXFxcXFwiKTtcXFxcbiAgICAgIHZhciB5bT1zcChkYXRhLCBcXFxcXFxcInltKFxcXFxcXFwiLCBcXFxcXFxcIilcXFxcXFxcIik7XFxcXG4gICAgICB2YXIgbHg9c3AoZGF0YSwgXFxcXFxcXCJseChcXFxcXFxcIiwgXFxcXFxcXCIpXFxcXFxcXCIpO1xcXFxuICAgICAgdmFyIHFiPXFkKycgICcrbWMrJyAgJyt3eisnICAnK3ltKycgICcrbHg7XFxcXG4gICAgICBpZihxZD09J+m6u+ixhlRWJyl7XFxcXG4gICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICB0aXRsZTptYyxcXFxcbiAgICAgICAgICBkZXNjOnFiLFxcXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvbWFkb3VcXFxcXFxcIiknLFxcXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCdcXFxcbiAgICAgIH0pXFxcXG4gICAgICB9ZWxzZSBpZihxZD09JzkxVFYnKXtcXFxcbiAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgIHRpdGxlOm1jLFxcXFxuICAgICAgICAgIGRlc2M6cWIsXFxcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS85MXR2XFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnXFxcXG4gICAgICB9KVxcXFxuICAgICAgfWVsc2UgaWYocWQ9PSfnjKvlkqonKXtcXFxcbiAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgIHRpdGxlOm1jLFxcXFxuICAgICAgICAgIGRlc2M6cWIsXFxcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9tYW9taVxcXFxcXFwiKScsXFxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJ1xcXFxuICAgICAgfSlcXFxcbiAgICAgIH1lbHNlIGlmKHFkPT0n54yr5ZKq5Y6f5YibJyl7XFxcXG4gICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICB0aXRsZTptYyxcXFxcbiAgICAgICAgICBkZXNjOnFiLFxcXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvbWFvbWl5dWFuY2h1YW5nXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnXFxcXG4gICAgICB9KVxcXFxuICAgICAgfWVsc2V7XFxcXG4gICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgIHRpdGxlOm1jLFxcXFxuICAgICAgICAgIGRlc2M6cWIsXFxcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9zeXZpZGVvXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnLFxcXFxuICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgaG9zdDpgJHt5bX0vJHt3en0ucGhwYCxcXFxcbiAgICAgICAgICAgICAgd3o6d3osXFxcXG4gICAgICAgICAgfVxcXFxuICAgICAgfSlcXFxcbiAgICAgIH1cXFxcbiAgfSlcXFxcbiAgICAgIFxcXFxuICAgICAgdmFyIGxpc3QxPWdldEl0ZW0oJ3Nob3V5ZScpLnNwbGl0KCfliIblibLnur8nKVsxXS5zcGxpdCgn5o2i6KGMJyk7XFxcXG4gIGxpc3QxLmZvckVhY2goZGF0YT0+e1xcXFxuICAgICAgdmFyIHFkPXNwKGRhdGEsIFxcXFxcXFwicWQoXFxcXFxcXCIsIFxcXFxcXFwiKVxcXFxcXFwiKTtcXFxcbiAgICAgIHZhciB0cD1zcChkYXRhLCBcXFxcXFxcInRwKFxcXFxcXFwiLCBcXFxcXFxcIilcXFxcXFxcIik7XFxcXG4gICAgICB2YXIgbWM9c3AoZGF0YSwgXFxcXFxcXCJtYyhcXFxcXFxcIiwgXFxcXFxcXCIpXFxcXFxcXCIpO1xcXFxuICAgICAgdmFyIHd6PXNwKGRhdGEsIFxcXFxcXFwiZ2pjKFxcXFxcXFwiLCBcXFxcXFxcIilcXFxcXFxcIik7XFxcXG4gICAgICB2YXIgeW09c3AoZGF0YSwgXFxcXFxcXCJ5bShcXFxcXFxcIiwgXFxcXFxcXCIpXFxcXFxcXCIpO1xcXFxuICAgICAgdmFyIGx4PXNwKGRhdGEsIFxcXFxcXFwibHgoXFxcXFxcXCIsIFxcXFxcXFwiKVxcXFxcXFwiKTtcXFxcbiAgICAgIHZhciBxYj1xZCsnICAnK21jKycgICcrd3orJyAgJyt5bSsnICAnK2x4O1xcXFxuICAgICAgaWYodHAhPW51bGwpe1xcXFxuICAgICAgICAgIGlmKCh3ej09J3hpYW5namlhbycpfCh3ej09JzkxZHNwJyl8KHd6PT0ndGlrdG9rMTgnKXwod3o9PSdvZ2ZhcCcpfCh3ej09J3Rpa3RvazE4bG9uZycpfCh3ej09J3hpYW9odWxpJykpe1xcXFxuICAgICB9ZWxzZXtcXFxcbiAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgdGl0bGU6bWMsXFxcXG4gICAgICAgICAgZGVzYzpxYixcXFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3N5dmlkZW9cXFxcXFxcIiknLFxcXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCcsXFxcXG4gICAgICAgICAgZXh0cmE6e1xcXFxuICAgICAgICAgICAgICBob3N0OmAke3ltfS8ke3d6fS5waHBgLFxcXFxuICAgICAgICAgICAgICB3ejp3eixcXFxcbiAgICAgICAgICB9XFxcXG4gICAgICB9KVxcXFxuICAgICAgfVxcXFxuICAgICAgfVxcXFxuICAgICAgfSlcXFxcbn1jYXRjaChlKXtcXFxcbiAgICBsb2coZS5tZXNzYWdlKVxcXFxuICAgIGlmKGdldE15VmFyKCdhJykgPT0gJycpe1xcXFxuICAgIHZhciBzaG91eWU9cXpEZWNyeXB0KHJlcXVlc3QoJ2h0dHA6Ly8wMDMuMjJzLmxvbC9lbmNyeXB0L2FwaS5waHA/cGF0aD1xaWV6aS9zaG91eWUnKSlcXFxcbiAgICB2YXIgZGF0YT1xekRlY3J5cHQocmVxdWVzdCgnaHR0cDovLzAwMy4yMnMubG9sL2VuY3J5cHQvYXBpLnBocD9wYXRoPXFpZXppL3pvbmdoZScpKVxcXFxuICAgIHZhciBzZWFyY2g9ZmV0Y2goJ2h0dHA6Ly8wMDMuMjJzLmxvbC9zZWFyY2hjb25maWcvdmlwYXBpL3ZpcGNvbmZpZy50eHQnKVxcXFxuICAgLy8gdmFyIGt1b3poYW49cXpEZWNyeXB0KHJlcXVlc3QoJ2h0dHA6Ly8wMDQuMjJzLmxvbC9lbmNyeXB0L2FwaS5waHA/cGF0aD1xaWV6aS9oZWlrZWppJykpXFxcXG4gICAvLyB2YXIgeXVtaW5nPXF6RGVjcnlwdChyZXF1ZXN0KCdodHRwOi8vMDEueGthM2EudG9wL2VuY3J5cHQvYXBpLnBocD9wYXRoPXl1bWluZy95dW1pbmcnKSlcXFxcbiAgLy8gIHZhciBnb25nZ2FvPXF6RGVjcnlwdChyZXF1ZXN0KCdodHRwOi8vMDAzLjIycy5sb2wvZW5jcnlwdC9hcGkucGhwP3BhdGg9cWllemkvcXonKSlcXFxcbiAgICBwdXRNeVZhcignYScsJzEnKVxcXFxuICAgIHNldEl0ZW0oJ3Nob3V5ZScsc2hvdXllKVxcXFxuICAgIHNldEl0ZW0oJ2RhdGEnLGRhdGEpXFxcXG4gICAgc2V0SXRlbSgnc2VhcmNoJyxzZWFyY2gpXFxcXG4gICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgIHRvYXN0KCfmlbDmja7lt7Lmm7TmlrAnKVxcXFxuICAgIC8qXFxcXG4gICAgXFxcXG4gICAg5Z+f5ZCN5pu/5o2i5Yy56YWN6KGo6L6+5byPaHR0cHM/Oi8vKGFwaTE/XFxcXFxcXFwuKT8oY2hhbmdmYXBpYW9waWFvfHlpbHVzaHVuZmVuZ3xwaHBqaWVrb3V8YXBpamlla291KVxcXFxcXFxcLnRvcCgvYXBpKT/jgIpcXFxcbue6v+i3r+mbhuWQiGh0dHBzOi8vYXBpMS55aWx1c2h1bmZlbmcudG9wfGh0dHBzOi8vYXBpLmNoYW5nZmFwaWFvcGlhby50b3B8aHR0cDovL2FwaTEueWlsdXNodW5mZW5nLnRvcHxodHRwOi8vYXBpLmNoYW5nZmFwaWFvcGlhby50b3B8aHR0cDovL2FwaTEuYXBpamlla291LnRvcC9hcGl8aHR0cDovL2FwaS5waHBqaWVrb3UudG9wfGh0dHA6Ly8wMDQuMjJzLmxvbC9hcGnjgIpcXFxcbuWkseaViOWfn+WQjembhuWQiGh0dHBzOi8vYXBpLnlpbHVzaHVuZmVuZy50b3B8aHR0cDovL2FwaS55aWx1c2h1bmZlbmcudG9wfGh0dHA6Ly9hcGkxMS5waHBqaWVrb3UudG9w44CKXFxcXG7mnIDmlrDmjqXlj6Pln5/lkI1odHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcOOAilxcXFxuKi9cXFxcbiAgfVxcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8yXFxcIixcXFwibmFtZVxcXCI6XFxcIueMq+WSqkFWXFxcIixcXFwicGF0aFxcXCI6XFxcIm1hb21pYXZcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6IFxcXFxudmFyIGQgPSBbXTtcXFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcXFxudHJ5e1xcXFxubGV0IGhvc3Q9TVlfVVJMLnNwbGl0KCcjIycpWzFdLnJlcGxhY2UoJ2h0dHA6Ly9hcGkucGhwamlla291LnRvcCcsJ2h0dHBzOi8vYXBpMS55aWx1c2h1bmZlbmcudG9wJyk7XFxcXG52YXIgd3o9TVlfVVJMLnNwbGl0KCcjIycpWzJdO1xcXFxudmFyIHBnPU1ZX1VSTC5zcGxpdCgnIyMnKVszXTtcXFxcbmlmKE1ZX1BBR0U9PTEpe1xcXFxudmFyIOWbveWkluebtOaSreWIhuexuz1mZXRjaChob3N0Kyc/Z2V0c29ydCcpXFxcXG52YXIgZGF0YT0gSlNPTi5wYXJzZSjlm73lpJbnm7Tmkq3liIbnsbspLmNhdGVnb3JpZXM7XFxcXG52YXIgaW5kZXhfbj1kYXRhWzBdLmlkXFxcXG5kYXRhLmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ+WbveWkluebtOaSreWIhuexuycrd3osaW5kZXhfbik9PWRhdGEuaWQ/c3Ryb25nKGRhdGEudGl0bGUsJ0ZGNjY5OScpOmRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICB1cmw6JCgnJykubGF6eVJ1bGUoKHRpdGxlLGlkLHd6KSA9PiB7XFxcXG4gICAgICAgICAgICAgICBwdXRNeVZhcign5Zu95aSW55u05pKt5YiG57G7Jyt3eiwgaWQpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXFxcbiAgICAgICAgICAgIH0sZGF0YS50aXRsZSxkYXRhLmlkLHd6KSxcXFxcbiAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nXFxcXG4gICAgfSlcXFxcbn0pXFxcXG59XFxcXG52YXIgbGlzdD1KU09OLnBhcnNlKGZldGNoKGhvc3QrJz9zb3J0PScrZ2V0TXlWYXIoJ+WbveWkluebtOaSreWIhuexuycrd3osaW5kZXhfbikrJyZwYWdlPScrcGcpKS52aWRlb3M7XFxcXG4vL2xvZyhsaXN0KVxcXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICBkZXNjOiBkYXRhLmRhdGUsXFxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxcXG4gICAgICAgIH0pXFxcXG4gfSlcXFxcbiB9Y2F0Y2goZSl7XFxcXG4gICAgIGxvZyhlLm1lc3NhZ2UpXFxcXG4gICAgIHRvYXN0KCfnnIvkuI3kuoYnKVxcXFxuIH1cXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIum6u+ixhlRWXFxcIixcXFwicGF0aFxcXCI6XFxcIm1hZG91XFxcIixcXFwicnVsZVxcXCI6XFxcImpzOiBcXFxcbnZhciBkID0gW107XFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXFxcbi8vbWQ15Yqg5a+GXFxcXG5mdW5jdGlvbiBtZDUoc3RyKSB7XFxcXG4gICAgcmV0dXJuIENyeXB0b0pTLk1ENShzdHIpLnRvU3RyaW5nKCk7XFxcXG59XFxcXG52YXIgdCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSk7IFxcXFxubGV0IHBnPSBNWV9VUkwuc3BsaXQoJyMjJylbMV07XFxcXG52YXIgbWQ9IFt7dGl0bGU6ICfpppbpobUm6aKR6YGTJuagh+etvicsaWQ6ICcxJjImMycsaW1nOidodHRwczovL2docHJveHkubmV0L2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sczEyNTc4MTAwMy90dWJpYW8vbWFpbi9tb3ZpZS8xMTEuc3ZnJmh0dHBzOi8vZ2hwcm94eS5uZXQvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL3R1Ymlhby9tYWluL21vdmllLzExMi5zdmcmaHR0cHM6Ly9naHByb3h5Lm5ldC9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbHMxMjU3ODEwMDMvdHViaWFvL21haW4vbW92aWUvMTEzLnN2ZyZodHRwczovL2docHJveHkubmV0L2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sczEyNTc4MTAwMy90dWJpYW8vbWFpbi9tb3ZpZS8xMTQuc3ZnJmh0dHBzOi8vZ2hwcm94eS5uZXQvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL3R1Ymlhby9tYWluL21vdmllLzEyMi5zdmcnfV07XFxcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxcXG4gICAgJC5yZXF1aXJlKFxcXFxcXFwiQ2F0ZVxcXFxcXFwiKS5DYXRlKG1kLCdtZCcsZCk7XFxcXG5kLnB1c2goe1xcXFxuICAgIGNvbF90eXBlOiAnbGluZScsXFxcXG59LHtcXFxcbiAgICBjb2xfdHlwZTogJ2JpZ19ibGFua19ibG9jaycsXFxcXG59XFxcXG4se1xcXFxuICAgIGNvbF90eXBlOiAnYmlnX2JsYW5rX2Jsb2NrJyxcXFxcbn0pO1xcXFxufVxcXFxubGV0IOWIhuexuz1nZXRNeVZhcignbWQnLCAnMScpO1xcXFxuXFxcXG5pZijliIbnsbs9PTEpe1xcXFxudmFyIHNpZ24gPSBtZDUoJ2xpc3Rfcm93PTIwJnBhZ2U9JytwZysnJnRpbWVzdGFtcD0nK3QrJyZ0eXBlPTInKycmbX1xJWVhNjpMRGNtUz9hSylDZUYyODdiUHZkOTlARSw5VXBeJyk7XFxcXG52YXIgZGF0YTA9e1xcXFxuICAgICAgIFxcXFxcXFwiZW5jb2RlX3NpZ25cXFxcXFxcIjpzaWduLFxcXFxuICAgICAgIFxcXFxcXFwibGlzdF9yb3dcXFxcXFxcIjpcXFxcXFxcIjIwXFxcXFxcXCIsXFxcXG4gICAgICAgXFxcXFxcXCJwYWdlXFxcXFxcXCI6cGcsXFxcXG4gICAgICAgXFxcXFxcXCJ0aW1lc3RhbXBcXFxcXFxcIjp0LFxcXFxuICAgICAgIFxcXFxcXFwidHlwZVxcXFxcXFwiOlxcXFxcXFwiMlxcXFxcXFwifTtcXFxcbnZhciBkYXRhID0gbWRFbmNyeXB0KEpTT04uc3RyaW5naWZ5KGRhdGEwKSk7IFxcXFxudmFyIGJvZHkgPSAncG9zdC1kYXRhPScrZGF0YTsgXFxcXG52YXIgdXJsPSdodHRwczovL2FwaS5uenAxdmUuY29tL3ZpZGVvL2xpc3RjYWNoZSc7XFxcXG5cXFxcbn1lbHNle1xcXFxudmFyIHNpZ24gPSBtZDUoJ3RpbWVzdGFtcD0nK3QrJyZtfXElZWE2OkxEY21TP2FLKUNlRjI4N2JQdmQ5OUBFLDlVcF4nKTtcXFxcbnZhciBkYXRhMD17XFxcXG4gICAgICAgIFxcXFxcXFwiZW5jb2RlX3NpZ25cXFxcXFxcIjogc2lnbixcXFxcbiAgICAgICAgXFxcXFxcXCJ0aW1lc3RhbXBcXFxcXFxcIjogdFxcXFxuICAgIH07XFxcXG52YXIgZGF0YSA9IG1kRW5jcnlwdChKU09OLnN0cmluZ2lmeShkYXRhMCkpOyBcXFxcbnZhciBib2R5ID0gJ3Bvc3QtZGF0YT0nK2RhdGE7IFxcXFxuaWYo5YiG57G7PT0yKXtcXFxcbnZhciB1cmwgPSAnaHR0cHM6Ly9hcGkubnpwMXZlLmNvbS92aWRlby9jaGFubmVsJztcXFxcbn1lbHNlIGlmKOWIhuexuz09Myl7XFxcXG52YXIgdXJsID0gJ2h0dHBzOi8vYXBpLm56cDF2ZS5jb20vdmlkZW8vdGFncyc7XFxcXG59XFxcXG59O1xcXFxudmFyIGh0bWwgPSBmZXRjaCh1cmwsIHtcXFxcbiAgICBoZWFkZXJzOiB7XFxcXG4gICAgJ3N1ZmZpeCc6JzE3MzE1MCcsXFxcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXFxcXG4gICAgfSxcXFxcbiAgICBib2R5OiBib2R5LFxcXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxcXG59KTsgXFxcXG5cXFxcbmxldCBodG1sMSA9IEpTT04ucGFyc2UoaHRtbCkuZGF0YTsgXFxcXG52YXIgaXYwPSBKU09OLnBhcnNlKGh0bWwpLnN1ZmZpeDtcXFxcbmxldCBodG1sMiA9IG1kRGVjcnlwdChodG1sMSk7IFxcXFxuaWYo5YiG57G7PT0xKXtcXFxcbnZhciBsaXN0ID0gSlNPTi5wYXJzZShodG1sMikuZGF0YS5kYXRhO1xcXFxubGlzdC5mb3JFYWNoKChkYXRhKSA9PiB7XFxcXG4gICAgICAgIHZhciB0YWc9ZGF0YS50YWdzO1xcXFxuICAgICAgdmFyIHN0cjE9Jyc7XFxcXG4gICAgIGZvcihpIGluIHRhZyl7XFxcXG4gICAgdmFyIHN0cjEgPSBzdHIxK3RhZ1tpXS5uYW1lKycgICAnO1xcXFxufVxcXFxyXFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICAgICBkZXNjOnN0cjEsIHBpY191cmw6ZGF0YS5wYW5vcmFtYS5yZXBsYWNlKCdfc3luYy53ZWJwJywnLmpwZycpLFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwicGljXzFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICB1cmwgOiAgZGF0YS52aWRlb191cmwsXFxcXG59KVxcXFxufSlcXFxcbn1lbHNlIGlmKOWIhuexuz09Mil7XFxcXG52YXIgbGlzdCA9IEpTT04ucGFyc2UoaHRtbDIpLmRhdGE7XFxcXG5saXN0LmZvckVhY2goKGRhdGEpID0+IHtcXFxcclxcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcclxcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhLm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgZGVzYzpkYXRhLnRvdGFsKyfkuKrniYflhL8nLFxcXFxuICAgICAgICAgICAgICAgcGljX3VybDpkYXRhLmltYWdlLFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaWNvbl8zXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgdXJsIDogICdoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvbWFkb3VwaW5kYW9cXFxcXFxcIiknLFxcXFxuICAgICAgICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgaWQ6ZGF0YS5pZCxcXFxcbiAgICAgICAgICB9XFxcXG59KVxcXFxufSlcXFxcbn1lbHNlIGlmKOWIhuexuz09Myl7XFxcXG52YXIgbGlzdCA9IEpTT04ucGFyc2UoaHRtbDIpLmRhdGE7XFxcXG5saXN0LmZvckVhY2goKGRhdGEpID0+IHtcXFxcclxcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcclxcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhLm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgLy9waWNfdXJsOmRhdGEudGh1bWIsXFxcXHJcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzNcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICB1cmwgOiAgJ2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9tYWRvdWJpYW9xaWFuXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICAgICAgICBleHRyYTp7XFxcXG4gICAgICAgICAgICAgIGlkOmRhdGEuaWQsXFxcXG4gICAgICAgICAgfVxcXFxufSlcXFxcbn0pXFxcXG59XFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLpurvosYbpopHpgZNcXFwiLFxcXCJwYXRoXFxcIjpcXFwibWFkb3VwaW5kYW9cXFwiLFxcXCJydWxlXFxcIjpcXFwianM6IFxcXFxudmFyIGQgPSBbXTtcXFxcblxcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxcXG50cnl7XFxcXG4vL21kNeWKoOWvhlxcXFxuZnVuY3Rpb24gbWQ1KHN0cikge1xcXFxuICAgIHJldHVybiBDcnlwdG9KUy5NRDUoc3RyKS50b1N0cmluZygpO1xcXFxufVxcXFxudmFyIHQgPSBNYXRoLmZsb29yKERhdGUubm93KCkpO1xcXFxudmFyIHQwID0gTWF0aC5mbG9vcihEYXRlLm5vdygpLzEwMDApO1xcXFxubGV0IGlkPU1ZX1BBUkFNUy5pZDtcXFxcbmxldCBwPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXFxcbnZhciBzaWduID0gbWQ1KCdjaGFubmVsPScraWQrJyZsaXN0X3Jvdz02MCZwYWdlPScrcCsnJnRpbWVzdGFtcD0nK3QrJyZ0eXBlPTImbX1xJWVhNjpMRGNtUz9hSylDZUYyODdiUHZkOTlARSw5VXBeJyk7IC8vbG9nKHNpZ24pXFxcXG5cXFxcbmxldCBkYXRhMD17XFxcXG4gICAgICAgIFxcXFxcXFwiY2hhbm5lbFxcXFxcXFwiOiBpZCxcXFxcbiAgICAgICAgXFxcXFxcXCJlbmNvZGVfc2lnblxcXFxcXFwiOiBzaWduLFxcXFxuICAgICAgICBcXFxcXFxcImxpc3Rfcm93XFxcXFxcXCI6IFxcXFxcXFwiNjBcXFxcXFxcIixcXFxcbiAgICAgICAgXFxcXFxcXCJwYWdlXFxcXFxcXCI6IHAsXFxcXG4gICAgICAgIFxcXFxcXFwidGltZXN0YW1wXFxcXFxcXCI6IHQsXFxcXG4gICAgICAgIFxcXFxcXFwidHlwZVxcXFxcXFwiOiBcXFxcXFxcIjJcXFxcXFxcIlxcXFxuICAgIH1cXFxcbi8vbG9nKGRhdGEwKVxcXFxudmFyIGRhdGEgPSBtZEVuY3J5cHQoSlNPTi5zdHJpbmdpZnkoZGF0YTApKTsgXFxcXG4vL2xvZyhkYXRhKVxcXFxudmFyIGJvZHkgPSAncG9zdC1kYXRhPScrZGF0YTsgXFxcXG52YXIgdXJsID0gJ2h0dHBzOi8vYXBpLm56cDF2ZS5jb20vdmlkZW8vbGlzdGNhY2hlJztcXFxcbnZhciBodG1sID0gZmV0Y2godXJsLCB7XFxcXG4gICAgaGVhZGVyczoge1xcXFxuICAgICdzdWZmaXgnOicxNzMxNTAnLFxcXFxuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xcXFxuICAgIH0sXFxcXG4gICAgYm9keTogYm9keSxcXFxcbiAgICBtZXRob2Q6ICdQT1NUJ1xcXFxufSk7IFxcXFxuLy9sb2coaHRtbClcXFxcblxcXFxubGV0IGh0bWwxID0gSlNPTi5wYXJzZShodG1sKS5kYXRhOyBcXFxcbi8vbG9nKGh0bWwxKVxcXFxudmFyIGl2MD0gSlNPTi5wYXJzZShodG1sKS5zdWZmaXg7XFxcXG4vL2xvZyhpdjApO1xcXFxubGV0IGh0bWwyID0gbWREZWNyeXB0KGh0bWwxKTsgXFxcXG4vL2xvZyhodG1sMilcXFxcblxcXFxudmFyIGxpc3QgPSBKU09OLnBhcnNlKGh0bWwyKS5kYXRhLmRhdGE7XFxcXG4vL2xvZyhsaXN0KTtcXFxcbmxpc3QuZm9yRWFjaCgoZGF0YSkgPT4ge1xcXFxudmFyIHRhZz1kYXRhLnRhZ3M7XFxcXG4gICAgICB2YXIgc3RyMT0nJztcXFxcbiAgICAgZm9yKGkgaW4gdGFnKXtcXFxcbiAgICB2YXIgc3RyMSA9IHN0cjErdGFnW2ldLm5hbWUrJyAgICc7XFxcXG59XFxcXHJcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgICAgIGRlc2M6c3RyMSwgcGljX3VybDpkYXRhLnBhbm9yYW1hLnJlcGxhY2UoJ19zeW5jLndlYnAnLCcuanBnJykucmVwbGFjZSgnX2xvbmdQcmV2aWV3JywnJyksXFxcXHJcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJwaWNfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIHVybCA6ICBkYXRhLnZpZGVvX3VybCxcXFxcbn0pXFxcXG59KVxcXFxufWNhdGNoe31cXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIum6u+ixhuagh+etvlxcXCIsXFxcInBhdGhcXFwiOlxcXCJtYWRvdWJpYW9xaWFuXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOiBcXFxcbnZhciBkID0gW107XFxcXG5cXFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcXFxudHJ5e1xcXFxuLy9tZDXliqDlr4ZcXFxcbmZ1bmN0aW9uIG1kNShzdHIpIHtcXFxcbiAgICByZXR1cm4gQ3J5cHRvSlMuTUQ1KHN0cikudG9TdHJpbmcoKTtcXFxcbn1cXFxcbnZhciB0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpKTtcXFxcbnZhciB0MCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKS8xMDAwKTtcXFxcbmxldCBpZD1NWV9QQVJBTVMuaWQ7XFxcXG5sZXQgcD1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxcXG52YXIgc2lnbiA9IG1kNSgnbGlzdF9yb3c9NjAmcGFnZT0nK3ArJyZ0YWdzPScraWQrJyZ0aW1lc3RhbXA9Jyt0KycmdHlwZT0yJm19cSVlYTY6TERjbVM/YUspQ2VGMjg3YlB2ZDk5QEUsOVVwXicpOyAvL2xvZyhzaWduKVxcXFxuXFxcXG5sZXQgZGF0YTA9e1xcXFxuICAgICAgICBcXFxcXFxcImVuY29kZV9zaWduXFxcXFxcXCI6IHNpZ24sXFxcXG4gICAgICAgIFxcXFxcXFwibGlzdF9yb3dcXFxcXFxcIjogXFxcXFxcXCI2MFxcXFxcXFwiLFxcXFxuICAgICAgICBcXFxcXFxcInBhZ2VcXFxcXFxcIjogcCxcXFxcbiAgICAgICAgXFxcXFxcXCJ0YWdzXFxcXFxcXCI6IGlkLFxcXFxuICAgICAgICBcXFxcXFxcInRpbWVzdGFtcFxcXFxcXFwiOiB0LFxcXFxuICAgICAgICBcXFxcXFxcInR5cGVcXFxcXFxcIjogXFxcXFxcXCIyXFxcXFxcXCJcXFxcbiAgICB9XFxcXG4vL2xvZyhkYXRhMClcXFxcbnZhciBkYXRhID0gbWRFbmNyeXB0KEpTT04uc3RyaW5naWZ5KGRhdGEwKSk7IFxcXFxuLy9sb2coZGF0YSlcXFxcbnZhciBib2R5ID0gJ3Bvc3QtZGF0YT0nK2RhdGE7IFxcXFxudmFyIHVybCA9ICdodHRwczovL2FwaS5uenAxdmUuY29tL3ZpZGVvL2xpc3RjYWNoZSc7XFxcXG52YXIgaHRtbCA9IGZldGNoKHVybCwge1xcXFxuICAgIGhlYWRlcnM6IHtcXFxcbiAgICAnc3VmZml4JzonMTczMTUwJyxcXFxcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcXFxcbiAgICB9LFxcXFxuICAgIGJvZHk6IGJvZHksXFxcXG4gICAgbWV0aG9kOiAnUE9TVCdcXFxcbn0pOyBcXFxcbi8vbG9nKGh0bWwpXFxcXG5cXFxcbmxldCBodG1sMSA9IEpTT04ucGFyc2UoaHRtbCkuZGF0YTsgXFxcXG4vL2xvZyhodG1sMSlcXFxcbnZhciBpdjA9IEpTT04ucGFyc2UoaHRtbCkuc3VmZml4O1xcXFxuLy9sb2coaXYwKTtcXFxcbmxldCBodG1sMiA9IG1kRGVjcnlwdChodG1sMSk7IFxcXFxuLy9sb2coaHRtbDIpXFxcXG5cXFxcbnZhciBsaXN0ID0gSlNPTi5wYXJzZShodG1sMikuZGF0YS5kYXRhO1xcXFxuLy9sb2cobGlzdCk7XFxcXG5saXN0LmZvckVhY2goKGRhdGEpID0+IHtcXFxcbnZhciB0YWc9ZGF0YS50YWdzO1xcXFxuICAgICAgdmFyIHN0cjE9Jyc7XFxcXG4gICAgIGZvcihpIGluIHRhZyl7XFxcXG4gICAgdmFyIHN0cjEgPSBzdHIxK3RhZ1tpXS5uYW1lKycgICAnO1xcXFxufVxcXFxyXFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICAgICBkZXNjOnN0cjEsIHBpY191cmw6ZGF0YS5wYW5vcmFtYS5yZXBsYWNlKCdfc3luYy53ZWJwJywnLmpwZycpLnJlcGxhY2UoJ19sb25nUHJldmlldycsJycpLFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwicGljXzFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICB1cmwgOiAgZGF0YS52aWRlb191cmwsXFxcXG59KVxcXFxufSlcXFxcbn1jYXRjaHt9XFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCI5MVRWXFxcIixcXFwicGF0aFxcXCI6XFxcIjkxdHZcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6IFxcXFxudmFyIGQgPSBbXTtcXFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcXFxuLy9tZDXliqDlr4ZcXFxcbmZ1bmN0aW9uIG1kNShzdHIpIHtcXFxcbiAgICByZXR1cm4gQ3J5cHRvSlMuTUQ1KHN0cikudG9TdHJpbmcoKTtcXFxcbn1cXFxcbnZhciB0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpKTsgXFxcXG5sZXQgcGc9IE1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXFxcbnZhciB0dj0gW3t0aXRsZTogJ+mmlumhtSbpopHpgZMm5qCH562+JyxpZDogJzEmMiYzJyxpbWc6J2h0dHBzOi8vZ2hwcm94eS5uZXQvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL3R1Ymlhby9tYWluL21vdmllLzExMS5zdmcmaHR0cHM6Ly9naHByb3h5Lm5ldC9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbHMxMjU3ODEwMDMvdHViaWFvL21haW4vbW92aWUvMTEyLnN2ZyZodHRwczovL2docHJveHkubmV0L2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sczEyNTc4MTAwMy90dWJpYW8vbWFpbi9tb3ZpZS8xMTMuc3ZnJmh0dHBzOi8vZ2hwcm94eS5uZXQvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL3R1Ymlhby9tYWluL21vdmllLzExNC5zdmcmaHR0cHM6Ly9naHByb3h5Lm5ldC9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbHMxMjU3ODEwMDMvdHViaWFvL21haW4vbW92aWUvMTIyLnN2Zyd9XTtcXFxcbmlmIChNWV9QQUdFID09IDEpIHtcXFxcbiAgICAkLnJlcXVpcmUoXFxcXFxcXCJDYXRlXFxcXFxcXCIpLkNhdGUodHYsJ3R2JyxkKTtcXFxcbmQucHVzaCh7XFxcXG4gICAgY29sX3R5cGU6ICdsaW5lJyxcXFxcbn0se1xcXFxuICAgIGNvbF90eXBlOiAnYmlnX2JsYW5rX2Jsb2NrJyxcXFxcbn1cXFxcbix7XFxcXG4gICAgY29sX3R5cGU6ICdiaWdfYmxhbmtfYmxvY2snLFxcXFxufSk7XFxcXG59XFxcXG5sZXQg5YiG57G7PWdldE15VmFyKCd0dicsICcxJyk7XFxcXG5cXFxcbmlmKOWIhuexuz09MSl7XFxcXG52YXIgc2lnbiA9IG1kNSgnbGlzdF9yb3c9MjAmcGFnZT0nK3BnKycmdGltZXN0YW1wPScrdCsnJnR5cGU9MicrJyZtfXElZWE2OkxEY21TP2FLKUNlRjI4N2JQdmQ5OUBFLDlVcF4nKTsgXFxcXG52YXIgZGF0YTA9e1xcXFxuICAgICAgIFxcXFxcXFwiZW5jb2RlX3NpZ25cXFxcXFxcIjpzaWduLFxcXFxuICAgICAgIFxcXFxcXFwibGlzdF9yb3dcXFxcXFxcIjpcXFxcXFxcIjIwXFxcXFxcXCIsXFxcXG4gICAgICAgXFxcXFxcXCJwYWdlXFxcXFxcXCI6cGcsXFxcXG4gICAgICAgXFxcXFxcXCJ0aW1lc3RhbXBcXFxcXFxcIjp0LFxcXFxuICAgICAgIFxcXFxcXFwidHlwZVxcXFxcXFwiOlxcXFxcXFwiMlxcXFxcXFwifTtcXFxcbnZhciBkYXRhID0gbWRFbmNyeXB0KEpTT04uc3RyaW5naWZ5KGRhdGEwKSk7IFxcXFxudmFyIGJvZHkgPSAncG9zdC1kYXRhPScrZGF0YTsgXFxcXG52YXIgdXJsPSdodHRwczovL3R2di56anFmYXJ0LmNuL3ZpZGVvL2xpc3RjYWNoZSc7XFxcXG5cXFxcbn1lbHNle1xcXFxudmFyIHNpZ24gPSBtZDUoJ3RpbWVzdGFtcD0nK3QrJyZtfXElZWE2OkxEY21TP2FLKUNlRjI4N2JQdmQ5OUBFLDlVcF4nKTsgXFxcXG52YXIgZGF0YTA9e1xcXFxuICAgICAgICBcXFxcXFxcImVuY29kZV9zaWduXFxcXFxcXCI6IHNpZ24sXFxcXG4gICAgICAgIFxcXFxcXFwidGltZXN0YW1wXFxcXFxcXCI6IHRcXFxcbiAgICB9O1xcXFxudmFyIGRhdGEgPSBtZEVuY3J5cHQoSlNPTi5zdHJpbmdpZnkoZGF0YTApKTsgXFxcXG52YXIgYm9keSA9ICdwb3N0LWRhdGE9JytkYXRhOyBcXFxcbmlmKOWIhuexuz09Mil7XFxcXG52YXIgdXJsID0gJ2h0dHBzOi8vdHZ2LnpqcWZhcnQuY24vdmlkZW8vY2hhbm5lbCc7XFxcXG59ZWxzZSBpZijliIbnsbs9PTMpe1xcXFxudmFyIHVybCA9ICdodHRwczovL3R2di56anFmYXJ0LmNuL3ZpZGVvL3RhZ3MnO1xcXFxufVxcXFxufTtcXFxcbnZhciBodG1sID0gZmV0Y2godXJsLCB7XFxcXG4gICAgaGVhZGVyczoge1xcXFxuICAgICdzdWZmaXgnOicxNzMxNTAnLFxcXFxuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xcXFxuICAgIH0sXFxcXG4gICAgYm9keTogYm9keSxcXFxcbiAgICBtZXRob2Q6ICdQT1NUJ1xcXFxufSk7IFxcXFxubGV0IGh0bWwxID0gSlNPTi5wYXJzZShodG1sKS5kYXRhOyBcXFxcbnZhciBpdjA9IEpTT04ucGFyc2UoaHRtbCkuc3VmZml4O1xcXFxubGV0IGh0bWwyID0gbWREZWNyeXB0KGh0bWwxKTsgXFxcXG5pZijliIbnsbs9PTEpe1xcXFxudmFyIGh0bWwzPWZldGNoKEpTT04ucGFyc2UoaHRtbDIpLmRhdGEuZmlsZV9uYW1lKTtcXFxcbnZhciBsaXN0ID0gSlNPTi5wYXJzZShodG1sMykuZGF0YTtcXFxcbmxpc3QuZm9yRWFjaCgoZGF0YSkgPT4ge1xcXFxuICAgICAgICB2YXIgdGFnPWRhdGEudGFncztcXFxcbiAgICAgIHZhciBzdHIxPScnO1xcXFxuICAgICBmb3IoaSBpbiB0YWcpe1xcXFxuICAgIHZhciBzdHIxID0gc3RyMSt0YWdbaV0ubmFtZSsnICAgJztcXFxcbn1cXFxcclxcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcclxcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgICAgZGVzYzpzdHIxLCBcXFxcbiAgICAgICAgICAgICAgIGltZzpkYXRhLnRodW1iK21kbGF6eSxcXFxcclxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInBpY18xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgdXJsIDogIGRhdGEudmlkZW9fdXJsK3R2dm9kLFxcXFxufSlcXFxcbn0pXFxcXG59ZWxzZSBpZijliIbnsbs9PTIpe1xcXFxudmFyIGxpc3QgPSBKU09OLnBhcnNlKGh0bWwyKS5kYXRhO1xcXFxubGlzdC5mb3JFYWNoKChkYXRhKSA9PiB7XFxcXHJcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS5uYW1lLFxcXFxuICAgICAgICAgICAgICAgIGRlc2M6ZGF0YS50b3RhbCsn5Liq54mH5YS/JyxcXFxcbiAgICAgICAgICAgICAgIHBpY191cmw6ZGF0YS5pbWFnZSxcXFxcclxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImljb25fM1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIHVybCA6ICAnaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlLzkxdHZwaW5kYW9cXFxcXFxcIiknLFxcXFxuICAgICAgICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgaWQ6ZGF0YS5pZCxcXFxcbiAgICAgICAgICB9XFxcXG59KVxcXFxufSlcXFxcbn1lbHNlIGlmKOWIhuexuz09Myl7XFxcXG52YXIgbGlzdCA9IEpTT04ucGFyc2UoaHRtbDIpLmRhdGE7XFxcXG4vL2xvZyhsaXN0KVxcXFxubGlzdC5mb3JFYWNoKChkYXRhKSA9PiB7XFxcXHJcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS5uYW1lLFxcXFxuICAgICAgICAgICAgICAgIC8vaW1nOmRhdGEudGh1bWIrbWRsYXp5LFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF8zXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgdXJsIDogICdoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvOTF0dmJpYW9xaWFuXFxcXFxcXCIpJyxcXFxcbiAgICAgICAgICAgICAgICBleHRyYTp7XFxcXG4gICAgICAgICAgICAgIGlkOmRhdGEuaWQsXFxcXG4gICAgICAgICAgfVxcXFxufSlcXFxcbn0pXFxcXG59XFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCI5MXR25qCH562+XFxcIixcXFwicGF0aFxcXCI6XFxcIjkxdHZiaWFvcWlhblxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczogXFxcXG52YXIgZCA9IFtdO1xcXFxuXFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXFxcbnRyeXtcXFxcbi8vbWQ15Yqg5a+GXFxcXG5mdW5jdGlvbiBtZDUoc3RyKSB7XFxcXG4gICAgcmV0dXJuIENyeXB0b0pTLk1ENShzdHIpLnRvU3RyaW5nKCk7XFxcXG59XFxcXG52YXIgdCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSk7XFxcXG52YXIgdDAgPSBNYXRoLmZsb29yKERhdGUubm93KCkvMTAwMCk7XFxcXG5sZXQgaWQ9TVlfUEFSQU1TLmlkO1xcXFxubGV0IHA9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcXFxudmFyIHNpZ24gPSBtZDUoJ2xpc3Rfcm93PTYwJnBhZ2U9JytwKycmdGFncz0nK2lkKycmdGltZXN0YW1wPScrdCsnJnR5cGU9MiZtfXElZWE2OkxEY21TP2FLKUNlRjI4N2JQdmQ5OUBFLDlVcF4nKTsgLy9sb2coc2lnbilcXFxcblxcXFxubGV0IGRhdGEwPXtcXFxcbiAgICAgICAgXFxcXFxcXCJlbmNvZGVfc2lnblxcXFxcXFwiOiBzaWduLFxcXFxuICAgICAgICBcXFxcXFxcImxpc3Rfcm93XFxcXFxcXCI6IFxcXFxcXFwiNjBcXFxcXFxcIixcXFxcbiAgICAgICAgXFxcXFxcXCJwYWdlXFxcXFxcXCI6IHAsXFxcXG4gICAgICAgIFxcXFxcXFwidGFnc1xcXFxcXFwiOiBpZCxcXFxcbiAgICAgICAgXFxcXFxcXCJ0aW1lc3RhbXBcXFxcXFxcIjogdCxcXFxcbiAgICAgICAgXFxcXFxcXCJ0eXBlXFxcXFxcXCI6IFxcXFxcXFwiMlxcXFxcXFwiXFxcXG4gICAgfVxcXFxudmFyIGRhdGEgPSBtZEVuY3J5cHQoSlNPTi5zdHJpbmdpZnkoZGF0YTApKTsgXFxcXG52YXIgYm9keSA9ICdwb3N0LWRhdGE9JytkYXRhOyBcXFxcbnZhciB1cmwgPSAnaHR0cHM6Ly90dnYuempxZmFydC5jbi92aWRlby9saXN0Y2FjaGUnO1xcXFxudmFyIGh0bWwgPSBmZXRjaCh1cmwsIHtcXFxcbiAgICBoZWFkZXJzOiB7XFxcXG4gICAgJ3N1ZmZpeCc6JzE3MzE1MCcsXFxcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXFxcXG4gICAgfSxcXFxcbiAgICBib2R5OiBib2R5LFxcXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxcXG59KTsgXFxcXG5sZXQgaHRtbDEgPSBKU09OLnBhcnNlKGh0bWwpLmRhdGE7IFxcXFxudmFyIGl2MD0gSlNPTi5wYXJzZShodG1sKS5zdWZmaXg7XFxcXG5sZXQgaHRtbDIgPSBtZERlY3J5cHQoaHRtbDEpOyBcXFxcbnZhciBodG1sMz1mZXRjaChKU09OLnBhcnNlKGh0bWwyKS5kYXRhLmZpbGVfbmFtZSk7XFxcXG52YXIgbGlzdCA9IEpTT04ucGFyc2UoaHRtbDMpLmRhdGE7XFxcXG5saXN0LmZvckVhY2goKGRhdGEpID0+IHtcXFxcbnZhciB0YWc9ZGF0YS50YWdzO1xcXFxuICAgICAgdmFyIHN0cjE9Jyc7XFxcXG4gICAgIGZvcihpIGluIHRhZyl7XFxcXG4gICAgdmFyIHN0cjEgPSBzdHIxK3RhZ1tpXS5uYW1lKycgICAnO1xcXFxufVxcXFxyXFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICAgICBkZXNjOnN0cjEsIFxcXFxuICAgICAgICAgICAgICAgaW1nOmRhdGEudGh1bWIrbWRsYXp5LFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwicGljXzFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICB1cmwgOiAgZGF0YS52aWRlb191cmwrdHZ2b2QsXFxcXG59KVxcXFxufSlcXFxcbn1jYXRjaHt9XFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCI5MXR26aKR6YGTXFxcIixcXFwicGF0aFxcXCI6XFxcIjkxdHZwaW5kYW9cXFwiLFxcXCJydWxlXFxcIjpcXFwianM6IFxcXFxudmFyIGQgPSBbXTtcXFxcblxcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxcXG50cnl7XFxcXG4vL21kNeWKoOWvhlxcXFxuZnVuY3Rpb24gbWQ1KHN0cikge1xcXFxuICAgIHJldHVybiBDcnlwdG9KUy5NRDUoc3RyKS50b1N0cmluZygpO1xcXFxufVxcXFxudmFyIHQgPSBNYXRoLmZsb29yKERhdGUubm93KCkpO1xcXFxudmFyIHQwID0gTWF0aC5mbG9vcihEYXRlLm5vdygpLzEwMDApO1xcXFxubGV0IGlkPU1ZX1BBUkFNUy5pZDtcXFxcbmxldCBwPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXFxcbnZhciBzaWduID0gbWQ1KCdjaGFubmVsPScraWQrJyZsaXN0X3Jvdz02MCZwYWdlPScrcCsnJnRpbWVzdGFtcD0nK3QrJyZ0eXBlPTImbX1xJWVhNjpMRGNtUz9hSylDZUYyODdiUHZkOTlARSw5VXBeJyk7IFxcXFxubGV0IGRhdGEwPXtcXFxcbiAgICAgICAgXFxcXFxcXCJjaGFubmVsXFxcXFxcXCI6IGlkLFxcXFxuICAgICAgICBcXFxcXFxcImVuY29kZV9zaWduXFxcXFxcXCI6IHNpZ24sXFxcXG4gICAgICAgIFxcXFxcXFwibGlzdF9yb3dcXFxcXFxcIjogXFxcXFxcXCI2MFxcXFxcXFwiLFxcXFxuICAgICAgICBcXFxcXFxcInBhZ2VcXFxcXFxcIjogcCxcXFxcbiAgICAgICAgXFxcXFxcXCJ0aW1lc3RhbXBcXFxcXFxcIjogdCxcXFxcbiAgICAgICAgXFxcXFxcXCJ0eXBlXFxcXFxcXCI6IFxcXFxcXFwiMlxcXFxcXFwiXFxcXG4gICAgfVxcXFxudmFyIGRhdGEgPSBtZEVuY3J5cHQoSlNPTi5zdHJpbmdpZnkoZGF0YTApKTsgXFxcXG52YXIgYm9keSA9ICdwb3N0LWRhdGE9JytkYXRhOyBcXFxcbnZhciB1cmwgPSAnaHR0cHM6Ly90dnYuempxZmFydC5jbi92aWRlby9saXN0Y2FjaGUnO1xcXFxudmFyIGh0bWwgPSBmZXRjaCh1cmwsIHtcXFxcbiAgICBoZWFkZXJzOiB7XFxcXG4gICAgJ3N1ZmZpeCc6JzE3MzE1MCcsXFxcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXFxcXG4gICAgfSxcXFxcbiAgICBib2R5OiBib2R5LFxcXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxcXG59KTsgXFxcXG5sZXQgaHRtbDEgPSBKU09OLnBhcnNlKGh0bWwpLmRhdGE7IFxcXFxudmFyIGl2MD0gSlNPTi5wYXJzZShodG1sKS5zdWZmaXg7XFxcXG5sZXQgaHRtbDIgPSBtZERlY3J5cHQoaHRtbDEpOyBcXFxcbnZhciBodG1sMz1mZXRjaChKU09OLnBhcnNlKGh0bWwyKS5kYXRhLmZpbGVfbmFtZSk7XFxcXG52YXIgbGlzdCA9IEpTT04ucGFyc2UoaHRtbDMpLmRhdGE7XFxcXG5saXN0LmZvckVhY2goKGRhdGEpID0+IHtcXFxcbnZhciB0YWc9ZGF0YS50YWdzO1xcXFxuICAgICAgdmFyIHN0cjE9Jyc7XFxcXG4gICAgIGZvcihpIGluIHRhZyl7XFxcXG4gICAgdmFyIHN0cjEgPSBzdHIxK3RhZ1tpXS5uYW1lKycgICAnO1xcXFxufVxcXFxyXFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICAgICBkZXNjOnN0cjEsXFxcXG4gICAgICAgICAgICAgICBpbWc6ZGF0YS50aHVtYittZGxhenksXFxcXHJcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJwaWNfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIHVybCA6ICBkYXRhLnZpZGVvX3VybCt0dnZvZCxcXFxcbn0pXFxcXG59KVxcXFxufWNhdGNoe31cXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8yXFxcIixcXFwibmFtZVxcXCI6XFxcIueMq+WSqlxcXCIsXFxcInBhdGhcXFwiOlxcXCJtYW9taVxcXCIsXFxcInJ1bGVcXFwiOlxcXCIganM6IFxcXFxudmFyIGQgPSBbXTtcXFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcXFxudmFyIHBnPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXFxcbnZhciDnjKvlkqo9IFt7dGl0bGU6ICfnjKvlkqrljp/liJsmQUnliLbkvZwm5LiN6ZuF6KeG6aKRJuS6mua0suaXoCDnoIEm5oqW6Z+z5aa56ZuG5ZCIJueDreWJp+aIkOS6uueJiCbpn6nlm73kuInnuqcm5Lq65rCU5aWzIOS8mCcsaWQ6ICcxMCYxNiY1JjkmMTEmMTImMTMmNid9XTtcXFxcbmlmIChNWV9QQUdFID09IDEpIHtcXFxcbiAgICAkLnJlcXVpcmUoXFxcXFxcXCJDYXRlXFxcXFxcXCIpLkNhdGUo54yr5ZKqLCfnjKvlkqonLGQpO1xcXFxufVxcXFxudmFyIHNpZ249RW5jcnlwdCgne1xcXFxcXFwic3BlY2lhbF9pZFxcXFxcXFwiOicrZ2V0TXlWYXIoJ+eMq+WSqicsJzEwJykrJyxcXFxcXFxcInBhZ2VcXFxcXFxcIjonK3BnKyd9Jyk7XFxcXG50cnl7XFxcXG52YXIgaG9zdD0naHR0cDovLzExOS4yOC41Mi4xOTM6ODA4OS9hcGkvc3BlY2lhbC92aWRlbz9wYXJhbXM9JytzaWduO1xcXFxudmFyIGJvZHk9J3BhcmFtcz0nK3NpZ247XFxcXG52YXIgaHRtbCA9IGZldGNoKGhvc3QsIHtcXFxcbiAgICBoZWFkZXJzOiB7XFxcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxcXFxuICAgIH0sXFxcXG4gICAgYm9keTogYm9keSxcXFxcbiAgICBtZXRob2Q6ICdQT1NUJ1xcXFxufSk7IFxcXFxudmFyIGh0bWwyPURlY3J5cHQoaHRtbClcXFxcbnZhciBsaXN0PUpTT04ucGFyc2UoaHRtbDIpLmRhdGEuZGF0YTtcXFxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnZpZGVvX25hbWUsXFxcXG4gICAgICAgICAgICBkZXNjOmRhdGEuY3JlYXRlX2F0LFxcXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlLFxcXFxuICAgICAgICAgICAgdXJsOmRhdGEudmlkZW9faWQrbWFvbWlqeCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcXFxuICAgICAgICB9KVxcXFxuIH0pXFxcXG4gfWNhdGNoe31cXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8yXFxcIixcXFwibmFtZVxcXCI6XFxcIueMq+WSquWOn+WIm1xcXCIsXFxcInBhdGhcXFwiOlxcXCJtYW9taXl1YW5jaHVhbmdcXFwiLFxcXCJydWxlXFxcIjpcXFwiIGpzOiBcXFxcbnZhciBkID0gW107XFxcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXFxcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxcXG52YXIg54yr5ZKq5Y6f5YibPSBbe3RpdGxlOiAn5pyA5pawJueDremXqCcsaWQ6ICczJjEnfV07XFxcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxcXG4gICAgJC5yZXF1aXJlKFxcXFxcXFwiQ2F0ZVxcXFxcXFwiKS5DYXRlKOeMq+WSquWOn+WImywn54yr5ZKq5Y6f5YibJyxkKTtcXFxcbn1cXFxcbnZhciBzaWduPUVuY3J5cHQoJ3tcXFxcXFxcInVzZXJfaWRcXFxcXFxcIjoxNzkwMzY4LFxcXFxcXFwidHlwZVxcXFxcXFwiOicrZ2V0TXlWYXIoJ+eMq+WSquWOn+WImycsJzMnKSsnLFxcXFxcXFwicGFnZVxcXFxcXFwiOicrcGcrJ30nKTtcXFxcbnRyeXtcXFxcbnZhciBob3N0PSdodHRwOi8vMTE5LjI4LjUyLjE5Mzo4MDg5L2FwaS9vcmlnaW5hbC9pbmRleD9wYXJhbXM9JytzaWduO1xcXFxudmFyIGJvZHk9J3BhcmFtcz0nK3NpZ247XFxcXG52YXIgaHRtbCA9IGZldGNoKGhvc3QsIHtcXFxcbiAgICBoZWFkZXJzOiB7XFxcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxcXFxuICAgIH0sXFxcXG4gICAgYm9keTogYm9keSxcXFxcbiAgICBtZXRob2Q6ICdQT1NUJ1xcXFxufSk7IFxcXFxudmFyIGh0bWwyPURlY3J5cHQoaHRtbClcXFxcbnZhciBsaXN0PUpTT04ucGFyc2UoaHRtbDIpLmRhdGEuZGF0YTtcXFxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgZGVzYzpkYXRhLmNyZWF0ZV9hdCxcXFxcbiAgICAgICAgICAgIGltZzogZGF0YS52aWRlb19pbWcsXFxcXG4gICAgICAgICAgICB1cmw6ZGF0YS5tM3U4LFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzMnLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHsgXFxcXG4gICAgICAgICAgICBsb25nQ2xpY2s6IFtcXFxcbiAgICAgICAgICAgIHt0aXRsZTogJ+S4i+i9vScsIGpzOiAkLnRvU3RyaW5nKCh1cmwpPT57IHJldHVybiAgJ2Rvd25sb2FkOi8vJyt1cmx9LGRhdGEuZG93bil9XFxcXG4gICAgICAgICAgICBdXFxcXG4gICAgICAgICAgIH1cXFxcbiAgICAgIH0pXFxcXG4gfSlcXFxcbiB9Y2F0Y2h7fVxcXFxuc2V0UmVzdWx0KGQpXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzJcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6aaW6aG16KeG6aKR5YiG57G7XFxcIixcXFwicGF0aFxcXCI6XFxcInN5dmlkZW9cXFwiLFxcXCJydWxlXFxcIjpcXFwianM6IFxcXFxudmFyIGQgPSBbXTtcXFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcXFxudHJ5e1xcXFxubGV0IGhvc3Q9TVlfUEFSQU1TLmhvc3QucmVwbGFjZSgnaHR0cDovL2FwaS5waHBqaWVrb3UudG9wJywnaHR0cHM6Ly9hcGkxLnlpbHVzaHVuZmVuZy50b3AnKTtcXFxcbnZhciB3ej1NWV9QQVJBTVMud3o7XFxcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcXFxuaWYod3o9PSdiYW9tYWRzJyl7XFxcXG4gICAgdmFyIGhvc3Q9TVlfUEFSQU1TLmhvc3QucmVwbGFjZSgnaHR0cDovL2FwaS5waHBqaWVrb3UudG9wJywnaHR0cHM6Ly9hcGkxLnlpbHVzaHVuZmVuZy50b3AnKS5yZXBsYWNlKCdiYW9tYWRzJywnYmFvbWEvYmFvbWFkcycpO1xcXFxufVxcXFxudmFyIOmmlumhteinhumikeWIhuexuz1mZXRjaChob3N0Kyc/Z2V0c29ydCcpXFxcXG52YXIgZGF0YT0gSlNPTi5wYXJzZSjpppbpobXop4bpopHliIbnsbspLmNhdGVnb3JpZXM7XFxcXG52YXIgaW5kZXhfbj1kYXRhWzBdLmlkLnRvU3RyaW5nKClcXFxcbmlmKE1ZX1BBR0U9PTEpe1xcXFxuZGF0YS5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKCfpppbpobXop4bpopHliIbnsbsnK3d6LGluZGV4X24pPT1kYXRhLmlkLnRvU3RyaW5nKCk/c3Ryb25nKGRhdGEudGl0bGUsJ0ZGNjY5OScpOmRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICB1cmw6JCgnJykubGF6eVJ1bGUoKHRpdGxlLGlkLHd6KSA9PiB7XFxcXG4gICAgICAgICAgICAgICBwdXRNeVZhcign6aaW6aG16KeG6aKR5YiG57G7Jyt3eiwgaWQpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXFxcbiAgICAgICAgICAgIH0sZGF0YS50aXRsZSxkYXRhLmlkLnRvU3RyaW5nKCksd3opLFxcXFxuICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbidcXFxcbiAgICB9KVxcXFxufSlcXFxcbn1cXFxcblxcXFxudmFyIGxpc3Q9SlNPTi5wYXJzZShmZXRjaChob3N0Kyc/c29ydD0nK2dldE15VmFyKCfpppbpobXop4bpopHliIbnsbsnK3d6LGluZGV4X24pKycmcGFnZT0nK3BnKSkudmlkZW9zO1xcXFxuLy9sb2cobGlzdClcXFxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICBpZigod3o9PSdsdXR1YmUnKXwod3o9PSdwYWxpJykpe1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZWRfZGF0ZT09bnVsbD8nJzpkYXRhLmNyZWF0ZWRfZGF0ZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSksXFxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UrbHVsYXp5LFxcXFxuICAgICAgICAgICAgdXJsOiBob3N0Kyc/aWQ9JytkYXRhLmlkK3ZvZCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcXFxuICAgICAgICB9KVxcXFxuICAgIH1lbHNlIGlmKHd6LmluY2x1ZGVzKCdrdWFpbWFvJyl8KHd6PT0nZmVkJyl8KHd6PT0nc2F2c3AnKXwod3o9PSdtbXNwJyl8KHd6PT0nY21hdicpfCh3ej09J2hzY2syJyl8d3ouaW5jbHVkZXMoJ3hpYW5namlhbycpKXtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgZGVzYzooZGF0YS5jcmVhdGVkX2RhdGU9PW51bGw/Jyc6ZGF0YS5jcmVhdGVkX2RhdGUpKycgICcrKGRhdGEuY3JlYXRldGltZT09bnVsbD8nJzpkYXRhLmNyZWF0ZXRpbWUpKycgICcrKGRhdGEuZGF0ZT09bnVsbD8nJzpkYXRhLmRhdGUpLFxcXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlLFxcXFxuICAgICAgICAgICAgdXJsOiBob3N0Kyc/aWQ9JytkYXRhLmlkK3ZvZCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcXFxuICAgICAgICB9KVxcXFxuICAgIH1lbHNlIGlmKHd6PT0naW5zJyl7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIGRlc2M6KGRhdGEuY3JlYXRlZF9kYXRlPT1udWxsPycnOmRhdGEuY3JlYXRlZF9kYXRlKSsnICAnKyhkYXRhLmRhdGU9PW51bGw/Jyc6ZGF0YS5kYXRlKSxcXFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZStpbnNsYXp5LFxcXFxuICAgICAgICAgICAgdXJsOiBob3N0Kyc/aWQ9JytkYXRhLmlkK3ZvZCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcXFxuICAgICAgICB9KVxcXFxuICAgIH1lbHNle1xcXFxuICAgICAgICBpZihkYXRhLmltYWdlKXtcXFxcbiAgICAgICAgdmFyIGltZz1kYXRhLmltYWdlO1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZWRfZGF0ZT09bnVsbD8nJzpkYXRhLmNyZWF0ZWRfZGF0ZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSkrJyAgJysoZGF0YS5kdXJhdGlvbj09bnVsbD8nJzpkYXRhLmR1cmF0aW9uKSxcXFxcbiAgICAgICAgICAgIGltZzogKGltZy5pbmNsdWRlcygndXBsb2FkJyl8fGltZy5pbmNsdWRlcygnbmV3LicpKT8oZGF0YS5pbWFnZStsYXp5KTpkYXRhLmltYWdlLFxcXFxuICAgICAgICAgICAgdXJsOiBob3N0Kyc/aWQ9JytkYXRhLmlkK3ZvZCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcXFxuICAgICAgICB9KVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiB9KVxcXFxuIH1jYXRjaChlKXtcXFxcbiAgICAgbG9nKGUubWVzc2FnZSlcXFxcbiAgICAgdG9hc3QoJ+eci+S4jeS6hicpXFxcXG4gfVxcXFxuc2V0UmVzdWx0KGQpXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcInRleHRfNFxcXCIsXFxcIm5hbWVcXFwiOlxcXCLlm77niYfkuoznuqdcXFwiLFxcXCJwYXRoXFxcIjpcXFwidHVwaWFuZXJqaVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkPVtdO1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSlcXFxcbmxldCBob3N0PU1ZX1BBUkFNUy5ob3N0O1xcXFxubGV0IHVybD1ob3N0LnNwbGl0KCc/JylbMF07XFxcXG52YXIgd3o9TVlfUEFSQU1TLnd6O1xcXFxudHJ5e1xcXFxuIGxldCBpbWc9IEpTT04ucGFyc2UoZmV0Y2goaG9zdCkpLmNvbnRlbnQucmVwbGFjZSgvXFxcXFxcXFwkL2csJycpLnJlcGxhY2UoL+WIhuWJsi9nLCcnKS5zcGxpdCgnQCcpO1xcXFxuIGltZy5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgaW1nOmRhdGEsXFxcXG4gICAgICAgICAgICB1cmw6ICdwaWNzOi8vJytpbWcuam9pbignJiYnKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidwaWNfMV9mdWxsJ1xcXFxuICAgICAgICB9KVxcXFxuIH0pXFxcXG4gXFxcXG59Y2F0Y2goZSl7XFxcXG4gICAgbG9nKGUubWVzc2FnZSlcXFxcbiAgICAgdG9hc3QoJ+eci+S4jeS6hicpXFxcXG59XFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfMlxcXCIsXFxcIm5hbWVcXFwiOlxcXCLlm77niYfliIbnsbtcXFwiLFxcXCJwYXRoXFxcIjpcXFwicGljZXJqaVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczogXFxcXG52YXIgZCA9IFtdO1xcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxcXG50cnl7XFxcXG5sZXQgaG9zdD1NWV9QQVJBTVMuaG9zdC5yZXBsYWNlKCdodHRwOi8vYXBpLnBocGppZWtvdS50b3AnLCdodHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcCcpLnJlcGxhY2UoJ2NvbWljJywncGljdHVyZScpO1xcXFxudmFyIHd6PU1ZX1BBUkFNUy53ejtcXFxcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxcXG5pZihNWV9QQUdFPT0xKXtcXFxcbnZhciDlm77niYfliIbnsbs9ZmV0Y2goaG9zdCsnP2dldHNvcnQnKVxcXFxudmFyIGRhdGE9IEpTT04ucGFyc2Uo5Zu+54mH5YiG57G7KS5jYXRlZ29yaWVzO1xcXFxudmFyIGluZGV4X249ZGF0YVswXS5pZC50b1N0cmluZygpXFxcXG5kYXRhLmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ+WbvueJh+WIhuexuycrd3osaW5kZXhfbik9PWRhdGEuaWQudG9TdHJpbmcoKT9zdHJvbmcoZGF0YS50aXRsZSwnRkY2Njk5Jyk6ZGF0YS50aXRsZSxcXFxcbiAgICAgICAgICAgIHVybDokKCcnKS5sYXp5UnVsZSgodGl0bGUsaWQsd3opID0+IHtcXFxcbiAgICAgICAgICAgICAgIHB1dE15VmFyKCflm77niYfliIbnsbsnK3d6LCBpZCk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcXFxuICAgICAgICAgICAgfSxkYXRhLnRpdGxlLGRhdGEuaWQudG9TdHJpbmcoKSx3eiksXFxcXG4gICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJ1xcXFxuICAgIH0pXFxcXG59KVxcXFxufVxcXFxudmFyIGxpc3Q9SlNPTi5wYXJzZShmZXRjaChob3N0Kyc/c29ydD0nK2dldE15VmFyKCflm77niYfliIbnsbsnK3d6LGluZGV4X24pKycmcGFnZT0nK3BnKSkudmlkZW9zO1xcXFxuLy9sb2cobGlzdClcXFxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcXFxuICAgICAgICAgICAgZGVzYzogZGF0YS5kYXRlLFxcXFxuICAgICAgICAgICAgaW1nOiB3ej09J3Rpa3RvazE4Jz8oZGF0YS5pbWFnZStsYXp5KTpkYXRhLmltYWdlLFxcXFxuICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL2VtcHR5JysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3R1cGlhbmVyamlcXFxcXFxcIiknLFxcXFxuICAgICAgICAgICAgdXJsOiB3ej09J3R1emFjJz9kYXRhLmltYWdlOihob3N0Kyc/aWQ9JytkYXRhLmlkK3BpY3MpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzMnLFxcXFxuICAgICAgICAgICAgZXh0cmE6e1xcXFxuICAgICAgICAgICAgICBob3N0OmAke2hvc3R9P2lkPSR7ZGF0YS5pZH1gLFxcXFxuICAgICAgICAgICAgICB3ejp3eixcXFxcbiAgICAgICAgICB9XFxcXG4gICAgICAgIH0pXFxcXG4gfSlcXFxcbiB9Y2F0Y2goZSl7XFxcXG4gICAgIGxvZyhlLm1lc3NhZ2UpXFxcXG4gICAgIHRvYXN0KCfnnIvkuI3kuoYnKVxcXFxuIH1cXFxcbnNldFJlc3VsdChkKVxcXCJ9XVwifSIsInBpY1VybCI6Imh0dHA6Ly9hcGkueGthMS50b3AvNmltZy90aWt0b2sxOC5wbmciLCJ0aXRsZSI6IlRpa3Rva+e+juWbviJ9
Add Comment
Please, Sign In to add comment