xiaomianao666

小程序:MyFieldᴰⁿ

Oct 25th, 2021
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@MyFieldᴰⁿ@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoiTXlGaWVsZOG0sOKBvyIsImF1dGhvciI6IuaWreW/tSbpgZPplb/prZTmlLkiLCJ1cmwiOiJoaWtlcjovL2VtcHR5IiwidmVyc2lvbiI6MzYwLCJjb2xfdHlwZSI6InRleHRfY2VudGVyXzEiLCJjbGFzc19uYW1lIjoiIiwiY2xhc3NfdXJsIjoiIiwiYXJlYV9uYW1lIjoiIiwiYXJlYV91cmwiOiIiLCJzb3J0X25hbWUiOiIiLCJ5ZWFyX25hbWUiOiIiLCJzb3J0X3VybCI6IiIsInllYXJfdXJsIjoiIiwiZmluZF9ydWxlIjoianM6XG4gICAgY29uc3Qge2RlbW9EYXRhLGRlZmF1bHRTZXRzLGZsb29yc30gPSAkLnJlcXVpcmUoXCJoaWtlcjovL3BhZ2UvZGVtb0RhdGE/cnVsZT1NeUZpZWxk4bSw4oG/XCIpO1xuY29uc3Qge2dldE9uZSx1bmlxdWUyLGR1cGxpY2F0ZXN9ID0gJC5yZXF1aXJlKFwiaGlrZXI6Ly9wYWdlL3V0aWxzP3J1bGU9TXlGaWVsZOG0sOKBv1wiKTtcbmxldCBzalRlc3QgPVtdO2ZvcihsZXQgaSBpbiBkZW1vRGF0YSl7c2pUZXN0PXNqVGVzdC5jb25jYXQoZGVtb0RhdGFbaV0pfVxudGhpcy5kID0gW107XG5jb25zdCBqeEl0ZW0gPSAkLnJlcXVpcmUoXCJoaWtlcjovL3BhZ2UvanhJdGVtP3J1bGU9TXlGaWVsZOG0sOKBv1wiKTtcbnZhciBSb3V0ZSA9ICQucmVxdWlyZShcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb9cIik7XG5ldmFsKGdldEl0ZW0oJ215RnVuY3Rpb24nKSk7XG5telBvcHVwKCk7XG52YXIganhPbGRWID0gZ2V0VmFyKCdqeE9sZFYnKTtcbnZhciBqeE5ld1YgPSBnZXRWYXIoJ2p4TmV3VicpO1xudmFyIHZlcnNpb25UaXBzID0gcGFyc2VGbG9hdChqeE5ld1YpID4gcGFyc2VGbG9hdChqeE9sZFYpID8gJ+KAmOKAmOacieaWsOeJiOacrDogdicgKyBqeE5ld1YgKyAnXFxu5YWI5pu05paw5bCP56iL5bqP54S25ZCO54K55Ye75LiL5pa55oyJ6ZKu5ouJ5Y+W6Iez5pys5Zyw4oCZ4oCZJyA6ICd2JytqeE9sZFY7XG5kLnB1c2goe1xuICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGJpZz48c3BhbiBzdHlsZT1cImNvbG9yOiMwQzAwMDBcIj7mlq3mj5Ig6YGT6ZW/6a2U5pS5JyxcbiAgICBkZXNjOiB2ZXJzaW9uVGlwcyxcbiAgICB1cmw6IFJvdXRlLnN6UGFyc2UsXG4gICAgLy91cmw6ICd0b2FzdDovL+i/meaYr+agh+mimCcsXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xufSk7XG5cbmZ1bmN0aW9uIGN6R3VpZGUoKSB7XG4gICAgcmV0dXJuICQoKS5ydWxlKChrKSA9PiB7XG4gICAgICAgIHNldFJlc3VsdChbe1xuICAgICAgICAgICAgdGl0bGU6IGV2YWwoSlNPTi5wYXJzZShmZXRjaChcImhpa2VyOi8vcGFnZS9HdWlkZT9ydWxlPU15RmllbGThtLDigb9cIikpKS5ydWxlLFxuICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnXG4gICAgICAgIH1dKTtcbiAgICB9KVxufVxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpID0+IHtcbiAgICAvL2NsZWFyVmFyKFwicGFyc2VVcmwudXJsXCIpO1xuICAgIGNsZWFySXRlbShcImNsYXNzXCIpO1xufSkpO1xuZC5wdXNoKHtcbiAgICB0aXRsZTon5byA5aeL6Kej5p6QJyxcbiAgICBjb2xfdHlwZTogJ2lucHV0JyxcbiAgICBkZXNjOiBcIuivt+i+k+ino+aekOWcsOWdgFwiLFxuICAgIHVybDokLnRvU3RyaW5nKCgpPT57XG4gICAgICAgIGxldCB1cmwgPSBnZXRWYXIoXCJwYXJzZVVybC51cmxcIiwgXCJcIikudHJpbSgpO1xuICAgICAgICBpZiAoIS9eaHR0cC8udGVzdCh1cmwpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJ0b2FzdDovL+i/mOayoeaciei+k+WFpemTvuaOpeWTplwiO1xuICAgICAgICB9XG4gICAgICAgIGxldCBqeCA9IGdldEl0ZW0oXCJzZWxlY3RlZFwiLCBcIlwiKTtcbiAgICAgICAgaWYoangmJmp4Lmxlbmd0aD4yJiYhanguc3RhcnRzV2l0aCgnaHR0cCcpKXtcbiAgICAgICAgICAgIGp4ID0gJyc7Ly/mlq3mj5Lpq5jnuqfmlrnms5Xnm7TmjqXmuIXnqbrop6PmnpDpk77mjqXlkI7pnaLosIPnlKjmoIfpopjlkI3lrZdcbiAgICAgICAgfVxuICAgICAgICBsZXQgcGxheVVybCA9IGp4ICsgdXJsO1xuICAgICAgICBsb2cocGxheVVybCk7XG4gICAgICAgIGlmKCEvXmh0dHAvLnRlc3QocGxheVVybCkpe1xuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+eci+i1t+adpeaSreaUvuWcsOWdgOS8vOS5juS4jeWvueWKsj9cXG4nK3BsYXlVcmxcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJCgpLmxhenlSdWxlKChwbGF5VXJsLHVybCk9PntcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IGdldEl0ZW0oXCJzZWxlY3RlZDBcIiwgXCImJlwiKS5zcGxpdChcIiYmXCIpWzBdLnJlcGxhY2UoL/CfkYkvZywnJyk7XG4gICAgICAgICAgICBpZihnZXRJdGVtKCdkbi50ZXN0X21vZGUnKT09PSfmlq3mj5InJiZ0aXRsZSE9PSfkuI3pgIknKXtcbiAgICAgICAgICAgICAgICBldmFsKFwidmFyIGNvbmZpZyA9XCIgKyBmZXRjaChcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uXCIpKTtcbiAgICAgICAgICAgICAgICBldmFsKGZldGNoKGNvbmZpZy5jaikpO1xuICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IGdldEl0ZW0oXCJzZWxlY3RlZDBcIiwgXCImJlwiKS5zcGxpdChcIiYmXCIpWzBdLnJlcGxhY2UoL/CfkYkvZywnJykucmVwbGFjZSgv5LiN6YCJL2csJycpO1xuICAgICAgICAgICAgICAgIGxvZygn5byA5aeL6LCD55So5pat5o+S5rWL6K+VLG15RmlsZWTotoXml7bkuLo6JytnZXRJdGVtKCdkbi50aW1lb3V0JywnNTAwMCcpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXl0bVBhcnNlKHVybCx0aXRsZSxwYXJzZUludChnZXRJdGVtKCdkbi50aW1lb3V0JywnNTAwMCcpKSk7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBjb25zdCB7bGF6eVBhcnNlfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2dsb2JhbFBhcnNlP3J1bGU96YGT6ZW/5LuT5bqTUHJvJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhenlQYXJzZShwbGF5VXJsLHBhcnNlSW50KGdldEl0ZW0oJ2RuLnRpbWVvdXQnLCc1MDAwJykpKXx8J3RvYXN0Oi8v6Kej5p6Q5aSx6LSlLOWFt+S9k+eci+aXpeW/lydcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxwbGF5VXJsLHVybClcbiAgICB9KSxcbiAgICBleHRyYToge1xuICAgICAgICBibG9ja1J1bGVzOiBbJ2JhaWR1LioucG5nJywgJy5qcGcnLCcubXAzJywnLm1wNCcsJy5tM3U4JywnLmZsdicsJy5hdmknLCcuM2dwJywnLm1wZWcnLCcud212JywnLm1vdicsJy5ybXZiJywnLmdpZicsJy5qcGcnLCcuanBlZycsJy5wbmcnLCcuaWNvJywnLnN2ZyddLFxuICAgICAgICB0aXRsZVZpc2libGU6IHRydWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0VmFyKCdwYXJzZVVybC51cmwnLCAnJykgfHwgXCJcIixcbiAgICAgICAgb25DaGFuZ2U6ICdwdXRWYXIoXCJwYXJzZVVybC51cmxcIixpbnB1dCknXG4gICAgfVxufSk7XG5sZXQgc2VsX3RpdGxlID0gWydR56WeJywn5pat5o+SJ10ubWFwKChpdCkgPT4ge1xuICAgIGxldCB0ZXN0X21vZGUgPSBnZXRJdGVtKCdkbi50ZXN0X21vZGUnLCdR56WeJyk7XG4gICAgcmV0dXJuIGl0PT09dGVzdF9tb2RlPyfwn5GJJytpdDppdDtcbn0pO1xuXG5kLnB1c2goe1xuICAgIHRpdGxlOifwn5KrJytnZXRJdGVtKCdkbi50ZXN0X21vZGUnLCdR56WeJyksXG4gICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxuICAgIHVybDokKHNlbF90aXRsZSwyKS5zZWxlY3QoKCk9PntcbiAgICAgICAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKC/wn5GJL2csJycpO1xuICAgICAgICBzZXRJdGVtKCdkbi50ZXN0X21vZGUnLGlucHV0KTtcbiAgICAgICAgLy8gc2V0SXRlbShcInNlbGVjdGVkXCIsIHVybCk7XG4gICAgICAgIHNldEl0ZW0oXCJzZWxlY3RlZFwiLCBcIlwiKTsgLy8g6YeN572u6Kej5p6Q5aS0XG4gICAgICAgIHNldEl0ZW0oXCJzZWxlY3RlZDBcIiwgXCLkuI3pgIkmJlwiKTsgLy/liIfmjaLmqKHlvI/muIXnqbrpgInkuK3nmoTop6PmnpBcbiAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LliIfmjaLmqKHlvI/kuLo6JytpbnB1dFxuICAgIH0pXG59KTtcblxubGV0IHRpdGxlQXJyID0gW10sIHVybEFyciA9IFtdO1xudmFyIGpzb249e3RpdGxlOltdLGNvZGVzOnt9fTtcbmlmKGdldEl0ZW0oJ2RuLnRlc3RfbW9kZScsJ1HnpZ4nKT09PSdR56WeJyl7XG4gICAgbGV0IHBhcnNlVXJsVGV4dCA9IHJlcXVlc3QoXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFwiKTtcbiAgICBsZXQgcGFyc2VVcmxBcnJheSA9IHBhcnNlVXJsVGV4dC5zcGxpdCgvXFxuLyk7XG4gICAgcGFyc2VVcmxBcnJheS5mb3JFYWNoKChpdCkgPT4ge1xuICAgICAgICBpdCA9IGl0LnNwbGl0KFwiJiZcIik7XG4gICAgICAgIHRpdGxlQXJyLnB1c2goaXRbMF0pO1xuICAgICAgICB1cmxBcnIucHVzaChpdFsxXSk7XG4gICAgfSk7XG59XG5lbHNlIGlmKGdldEl0ZW0oJ2RuLnRlc3RfbW9kZScsJ1HnpZ4nKT09PSfmlq3mj5InKXtcbiAgICBsZXQgc2V0RmlsZSA9IHJlcXVlc3QoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJyk7XG4gICAgdHJ5IHtcbiAgICAgICAgZXZhbCgnanNvbj0nK3NldEZpbGUpO1xuICAgIH1jYXRjaCAoZSkge1xuICAgICAgICBsb2coJ0pzb27op6PmnpDlj5HnlJ/kuobplJnor686JytlLm1lc3NhZ2UpO1xuICAgIH1cbiAgICB0aXRsZUFyciA9IGpzb24udGl0bGU7XG4gICAgdGl0bGVBcnIuZm9yRWFjaCgoaXQpID0+IHtcbiAgICAgICAgdXJsQXJyLnB1c2goanNvbi5jb2Rlc1tpdF0pO1xuICAgIH0pO1xuICAgIC8vJC5zdHJpbmdpZnkoanNvbilcbn1cblxuZC5wdXNoKHtcbiAgICB0aXRsZTp0aXRsZUFyci5sZW5ndGgrJycsXG4gICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxuICAgIHVybDokKGdldEl0ZW0oJ2RuLnRlc3RfbW9kZScsJ1HnpZ4nKSsn5YWx6K6h6Kej5p6Q5pWw6YePOicrdGl0bGVBcnIubGVuZ3RoKyfkuKpcXG7mmK/lkKbpmo/mnLrmnaXkuKrlnLDlnYDov5vooYzmtYvor5U/JykuY29uZmlybSgoc2pUZXN0LGdldE9uZSk9PntcbiAgICAgICAgcHV0VmFyKCdwYXJzZVVybC51cmwnLCBnZXRPbmUoc2pUZXN0KSk7XG4gICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5Zyw5Z2A5bey57uZ5L2g5LqGJ1xuICAgIH0sc2pUZXN0LGdldE9uZSlcbn0pO1xuXG5sZXQgcmVhbFRpdGxlcyA9IHRpdGxlQXJyO1xudGl0bGVBcnIgPSBbJ+S4jemAiSddLmNvbmNhdCh0aXRsZUFycik7XG50aXRsZUFyciA9IHRpdGxlQXJyLm1hcCgoaXQpID0+IHtcbiAgICBsZXQgdGl0bGUgPSBnZXRJdGVtKFwic2VsZWN0ZWQwXCIsIFwiJiZcIikuc3BsaXQoXCImJlwiKVswXTtcbiAgICByZXR1cm4gaXQ9PT10aXRsZT8n8J+RiScraXQ6aXQ7XG59KTtcbmQucHVzaCh7XG4gICAgdGl0bGU6ICfimKLvuI8nK2dldEl0ZW0oXCJzZWxlY3RlZDBcIiwgXCImJlwiKS5zcGxpdChcIiYmXCIpWzBdLFxuICAgIHVybDogJCh0aXRsZUFyciwgMykuc2VsZWN0KChyZWFsVGl0bGVzLHVybEFycikgPT4ge1xuICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoL/CfkYkvZywnJyk7XG4gICAgICAgIGlmKGlucHV0PT09J+S4jemAiScpe1xuICAgICAgICAgICAgc2V0SXRlbShcInNlbGVjdGVkXCIsICcnKTtcbiAgICAgICAgICAgIHNldEl0ZW0oXCJzZWxlY3RlZDBcIiwgaW5wdXQgKyBcIiYmXCIgKyAnJyk7XG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm4gXCJ0b2FzdDovL+W3suWPlua2iOino+aekOWPoyznm7TmjqXov5vooYznm7Tpk77op6PmnpBcIjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaSA9IHJlYWxUaXRsZXMuaW5kZXhPZihpbnB1dCk7XG4gICAgICAgIGxldCB1cmwgPSB1cmxBcnJbaV07XG4gICAgICAgIGxvZyhcIlxcbuabtOaUueaOpeWPoz4gXCIgKyB1cmwpO1xuICAgICAgICBpZih0eXBlb2YodXJsKSE9PSdzdHJpbmcnKXtcbiAgICAgICAgICAgIGxvZygkLnRvU3RyaW5nKHVybCkpO1xuICAgICAgICAgICAgc2V0SXRlbShcInNlbGVjdGVkXCIsICQudG9TdHJpbmcodXJsKSk7XG4gICAgICAgICAgICAvLyByZXR1cm4gJ3RvYXN0Oi8v5pqC5LiN5pSv5oyB5pat5o+SZnVuY3Rpb27ns7vliJfnmoTpq5jnuqfop6PmnpDmtYvor5UnXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgc2V0SXRlbShcInNlbGVjdGVkXCIsIHVybCk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0SXRlbShcInNlbGVjdGVkMFwiLCBpbnB1dCArIFwiJiZcIiArIHVybCk7XG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIFwidG9hc3Q6Ly/liIfmjaLop6PmnpDlj6PkuLo6XCIraW5wdXQ7XG4gICAgfSwgcmVhbFRpdGxlcyx1cmxBcnIpLFxuICAgIGNvbF90eXBlOiBcInNjcm9sbF9idXR0b25cIlxufSk7XG5kLnB1c2goe1xuICAgIHRpdGxlOifwn42A5Li76aKYJyxcbiAgICB1cmw6IFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPeS4u+mimCNub0hpc3RvcnkjXCIsXG4gICAgY29sX3R5cGU6IFwic2Nyb2xsX2J1dHRvblwiXG59KTtcblxuZC5wdXNoKHtcbiAgICB0aXRsZTon8J+VkicrZ2V0SXRlbSgnZG4udGltZW91dCcsJzUwMDAnKSxcbiAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXG4gICAgdXJsOiQoZ2V0SXRlbSgnZG4udGltZW91dCcsJzUwMDAnKSwn6K+36L6T5YWl6Kej5p6Q6LaF5pe25q+r56eSJykuaW5wdXQoKCk9PntcbiAgICAgICAgaWYoIXBhcnNlSW50KGlucHV0KSl7XG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6LaF5pe26K6+572u6ZSZ6K+v77yM5ouS57ud5L+d5a2YJ1xuICAgICAgICB9XG4gICAgICAgIHNldEl0ZW0oJ2RuLnRpbWVvdXQnLGlucHV0fHwnNTAwMCcpO1xuICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suiuvue9ruino+aekOi2heaXtuavq+enkjonK2dldEl0ZW0oJ2RuLnRpbWVvdXQnLCc1MDAwJyk7XG4gICAgfSksXG59KTtcbmQucHVzaCh7XG4gICAgdGl0bGU6J/Cfk7Llr7zlh7pUWFQnLFxuICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcbiAgICB1cmw6JCgn56Gu6K6k5a+85Ye65piO5paH5Y+v6KeB55qE6Kej5p6Q5qC85byPP1xcbuWPr+WujOe+juWvvOWHuuWQjeensOWcsOWdgOeahOmAmueUqOinhOWImSzlr7lmdW5jdGlvbuexu+WFvOWuueaaguaXtuS4jeaYr+W+iOWlvScpLmNvbmZpcm0oKHRpdGxlQXJyLHVybEFycik9PntcbiAgICAgICAgbGV0IG1vZGUgPSBnZXRJdGVtKCdkbi50ZXN0X21vZGUnLCdR56WeJyk7XG4gICAgICAgIGlmKG1vZGU9PT0n5pat5o+SJ3x8bW9kZT09PSdR56WeJyl7XG4gICAgICAgICAgICBsZXQganhDb2RlID0gW107XG4gICAgICAgICAgICB0aXRsZUFyci5mb3JFYWNoKChpdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmKCEv5LiN6YCJLy50ZXN0KGl0KSl7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gdGl0bGVBcnIuaW5kZXhPZihpdCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gdXJsQXJyW2ktMV07XG4gICAgICAgICAgICAgICAgICAgIGxldCBvdXRDb2RlID0gKHR5cGVvZihjb2RlKT09PSdzdHJpbmcnfHx0eXBlb2YoY29kZSk9PT0ndW5kZWZpbmVkJyk/Y29kZTpiYXNlNjRFbmNvZGUoY29kZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG91dFRpdGxlID0gaXQucmVwbGFjZSgv8J+RiS9nLCcnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYob3V0VGl0bGUuc3RhcnRzV2l0aCgnaHR0cCcpJiYodHlwZW9mKG91dENvZGUpPT09J3VuZGVmaW5lZCd8fCFvdXRDb2RlKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBqeENvZGUucHVzaChvdXRUaXRsZSsnLCcrb3V0VGl0bGUpO1xuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGp4Q29kZS5wdXNoKG91dFRpdGxlKycsJytvdXRDb2RlfHwnJylcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGV0IG91dFRleHQgPSBqeENvZGUuam9pbignXFxuJyk7XG4gICAgICAgICAgICBsZXQgb3V0UGF0aCA9ICdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2VPdXRfJyttb2RlKycudHh0JztcbiAgICAgICAgICAgIHdyaXRlRmlsZShvdXRQYXRoLG91dFRleHQpO1xuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aWh+S7tuW3suWvvOWHuuWIsDonK291dFBhdGgrJ1xcbuivt+iHquihjOmAmui/h01U566h55CG5Zmo5p+l55yLJ1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/miJHkuI3muIXmpZrkvaDopoHlgZrku4DkuYg/XFxuJyttb2RlO1xuICAgICAgICB9XG4gICAgfSx0aXRsZUFycix1cmxBcnIpLFxufSk7XG5kLnB1c2goe1xuICAgIHRpdGxlOifwn5Ol5a+85YWlVFhUJyxcbiAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXG4gICAgdXJsOiQoKS5ydWxlKCgpPT57XG4gICAgICAgIGxldCBkID0gW107XG4gICAgICAgIGQucHVzaCh7XG4gICAgICAgICAgICB0aXRsZTon5a+85YWl6K+05piOJyxcbiAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0XzEnLFxuICAgICAgICAgICAgZGVzYzon5pSv5oyB5q2k5o+S5Lu25a+85Ye65qC85byP55qE5paH5pys6L+b6KGM5a+85YWlLOS4gOihjOS4gOS4quino+aekCcsXG4gICAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHknXG4gICAgICAgIH0pO1xuICAgICAgICBkLnB1c2goe1xuICAgICAgICAgICAgZGVzYzogXCJ0eHTmlofmnKzop6PmnpDop4TliJks5LiA6KGM5LiA5LiqXCIsXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcbiAgICAgICAgICAgIHRpdGxlOifop6PmnpDmlofmnKwnLFxuICAgICAgICAgICAgZXh0cmE6IHtcbiAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0VmFyKCdkbi5pbXBvcnRfdGV4dCcsICcnKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRhcmVhXCIsXG4gICAgICAgICAgICAgICAgaGVpZ2h0Oi0xLFxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAncHV0VmFyKFwiZG4uaW1wb3J0X3RleHRcIixpbnB1dCknXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBkLnB1c2goe1xuICAgICAgICAgICAgdGl0bGU6J/Cfk6Xlr7zlhaUnLFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfY2VudGVyXzEnLFxuICAgICAgICAgICAgdXJsOiQoJ+ehruWumue8lui+keWlveS6huWQlz/mraTmk43kvZzlsIbopobnm5bmnKzlnLDlt7LmnInnmoTorrDlvZXvvIzlu7rorq7lpIfku73lkI7nlKjnqbrmlofku7blr7zlhaUnKS5jb25maXJtKCgpPT57XG4gICAgICAgICAgICAgICAgY29uc3Qge2RlZmF1bHRTZXRzfSA9ICQucmVxdWlyZShcImhpa2VyOi8vcGFnZS9kZW1vRGF0YT9ydWxlPU15RmllbGThtLDigb9cIik7XG4gICAgICAgICAgICAgICAgbGV0IHNldHRpbmdzID0gZGVmYXVsdFNldHM7XG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlUm91dGUgPSAnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nO1xuICAgICAgICAgICAgICAgIGxldCBqc0NvZGUgPSBmZXRjaChwYXJzZVJvdXRlKXx8SlNPTi5zdHJpbmdpZnkoe3RpdGxlOltdLGNvZGVzOnt9LHNldHRpbmdzOnNldHRpbmdzfSk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBqc0NvZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5Y+R55Sf6ZSZ6K+vOlxcbicrZS5tZXNzYWdlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCB0b0ltcG9ydCA9IGdldFZhcihcImRuLmltcG9ydF90ZXh0XCIpO1xuICAgICAgICAgICAgICAgIGxldCBqaWV4aSA9IHRvSW1wb3J0LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VUaXRsZSA9IFtdO1xuICAgICAgICAgICAgICAgIGxldCBwYXJzZUNvZGUgPSB7fTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpIGluIGppZXhpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZT1qaWV4aVtpXS5zcGxpdCgnLCcpWzBdO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY29kZT1qaWV4aVtpXS5zcGxpdCgnLCcpWzFdO1xuICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlLnB1c2godGl0bGUpO1xuICAgICAgICAgICAgICAgICAgICBpZighKGNvZGUucmVwbGFjZSgvW1xcc10vZywnJykuc3RhcnRzV2l0aCgnaHR0cCcpKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2codGl0bGUrJ+S4uuWHveaVsOino+aekCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29kZS5yZXBsYWNlKC9bXFxzXS9nLCcnKS5sZW5ndGg+MjApey8v6KeG5Li6ZnVuY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gZXZhbChiYXNlNjREZWNvZGUoY29kZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2coY29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBlLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09Y29kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHNjT2JqZWN0ID0gW1wiQ2l0eUlQXCIsIFwicGNVQVwiLCBcImNhY2hlTTN1OFwiLCBcImRlZmF1bHRQYXJzZVdlYlwiLFwibWFvc3NcIiwgXCJMTFFcIl07XG4gICAgICAgICAgICAgICAgcGFyc2VUaXRsZSA9IHBhcnNlVGl0bGU/cGFyc2VUaXRsZS5maWx0ZXIoaXQ9PiFzY09iamVjdC5pbmNsdWRlcyhpdCkpOltdO1xuICAgICAgICAgICAgICAgIHZhciBuZXdQYXJzZVRpdGxlID0ganNvbi50aXRsZS5jb25jYXQocGFyc2VUaXRsZSk7XG4gICAgICAgICAgICAgICAganNvbi50aXRsZSA9IEFycmF5LmZyb20obmV3IFNldChuZXdQYXJzZVRpdGxlKSk7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihqc29uLmNvZGVzLCBwYXJzZUNvZGUpO1xuICAgICAgICAgICAgICAgIGxldCBuZXdGaWxlID0gJC5zdHJpbmdpZnkoanNvbik7IC8vSlNPTi5wYXJzZeS8muaKpemUmVxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCBuZXdGaWxlKTtcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suaIkOWKn+WvvOWFpSdcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZXh0cmE6e1xuICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOnRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHNldFJlc3VsdChkKTtcbiAgICB9KSxcbn0pO1xuZC5wdXNoKHtcbiAgICB0aXRsZTon4piv77iP5p+l6YeN5aSE55CGJyxcbiAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXG4gICAgdXJsOiQoKS5sYXp5UnVsZSgodW5pcXVlMixkdXBsaWNhdGVzLGZsb29ycyk9PntcbiAgICAgICAgbGV0IHBhcnNlUm91dGUgPSAnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nO1xuICAgICAgICBsZXQganNDb2RlID0gZmV0Y2gocGFyc2VSb3V0ZSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGpzQ29kZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnKzlnLDpgqPkuKpNeVBhcnNlLmpzb27mlofku7bmnInpl67popgs6L+Z5Liq5Yqf6IO95LiN57uZ5L2g55So5LqGISdcbiAgICAgICAgfVxuICAgICAgICBsZXQgdGl0bGVzID0ganNvbi50aXRsZTtcbiAgICAgICAgbGV0IGNvZGVzID0ganNvbi5jb2RlcztcbiAgICAgICAgbGV0IGtleXM9IE9iamVjdC5rZXlzKGNvZGVzKTtcbiAgICAgICAgbGV0IGtleXNfcmVfY3QgPSBrZXlzLmxlbmd0aCAtIHVuaXF1ZTIoa2V5cykubGVuZ3RoOyAvLyDlkI3np7Dph43lpI1cbiAgICAgICAgbGV0IG5vcm1hbF9saXN0ID0gW107XG4gICAgICAgIGZvcihsZXQgbyBpbiBjb2Rlcyl7XG4gICAgICAgICAgICBpZih0eXBlb2YoY29kZXNbb10pIT09J3VuZGVmaW5lZCcmJnR5cGVvZihjb2Rlc1tvXSkhPT0nZnVuY3Rpb24nKXtcbiAgICAgICAgICAgICAgICBub3JtYWxfbGlzdC5wdXNoKGNvZGVzW29dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVOb3JMaXN0ID0gdW5pcXVlMihub3JtYWxfbGlzdCk7XG4gICAgICAgIGxldCB2YWx1ZV9yZV9jdCA9IG5vcm1hbF9saXN0Lmxlbmd0aCAtIHJlTm9yTGlzdC5sZW5ndGg7IC8v5Luj56CB6YeN5aSNXG4gICAgICAgIGxldCB2YWx1ZXNfcmUgPSBkdXBsaWNhdGVzKG5vcm1hbF9saXN0KTsvL+mHjeWkjeeahOWAvFxuICAgICAgICBsZXQgZnRsaXN0ID0gW107XG4gICAgICAgIGxldCBmbGFncyA9IHt9O1xuICAgICAgICBsZXQgbXlGbG9vcnMgPSBmbG9vcnM7XG4gICAgICAgIGZvcihsZXQgaiBpbiBjb2Rlcyl7Ly/pgY3ljobmiYDmnIlcbiAgICAgICAgICAgIGxldCBvbmUgPSBjb2Rlc1tqXTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZihvbmUpICE9PSAnZnVuY3Rpb24nJiZ2YWx1ZXNfcmUuaW5jbHVkZXMob25lKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChmbGFnc1tvbmVdKSA9PT0gJ3VuZGVmaW5lZCcgfHwgIWZsYWdzW29uZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v5Y+W5Ye656ys5LiA5Liq5qCH5b+XXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFnc1tvbmVdID0gbXlGbG9vcnNbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBteUZsb29ycy5zcGxpY2UoMCwgMSk7Ly/liKDpmaTmoIflv5fliJfooajph4znmoTnrKzkuIDkuKrlhYPntKBcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmdGxpc3QucHVzaCh7a2V5OiBmbGFnc1tvbmVdICsgaiwgdmFsdWU6IG9uZX0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZ0bGlzdC5wdXNoKHtrZXk6IGosIHZhbHVlOiBvbmV9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9Y2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBsb2coZS5tZXNzYWdlKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGxvZyhKU09OLnN0cmluZ2lmeShmbGFncykpO1xuICAgICAgICBsZXQgbmV3Q29kZXMgPSB7fTtcbiAgICAgICAgZm9yKGxldCBrIGluIGZ0bGlzdCl7XG4gICAgICAgICAgICBuZXdDb2Rlc1tmdGxpc3Rba10ua2V5XSA9IGZ0bGlzdFtrXS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdGlwcyA9ICfmo4DmtYvliLDlkI3np7DlpI3nlKjpobnnm67mlbA6JytrZXlzX3JlX2N0Kycs5Luj56CB6YeN5aSN6aG555uu5pWw6YePOicrdmFsdWVfcmVfY3QrJ1xcbumcgOimgeS4gOmUruaJk+S4quagh+ivhuWQlz/kuI3mlK/mjIHoh6rliqjliKDpmaQs5omT5qCH5b+X6Ieq6KGM6Kej5YazJztcbiAgICAgICAgcmV0dXJuICQodGlwcykuY29uZmlybSgodmFsdWVfcmVfY3QsanNvbixuZXdDb2RlcyxwYXJzZVJvdXRlKT0+e1xuICAgICAgICAgICAgaWYodmFsdWVfcmVfY3Q8MSl7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aXoueEtumDveaYrzDkuKrph43lpI3pobnnm67kuobvvIzlsLHkuI3pnIDopoHmiJHlgZrku4DkuYjkuoYhJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gY29tcGFyZSgpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoYSwgYil7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHtmbG9vcnN9ID0gJC5yZXF1aXJlKFwiaGlrZXI6Ly9wYWdlL2RlbW9EYXRhP3J1bGU9TXlGaWVsZOG0sOKBv1wiKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHggPSBhLnN1YnN0cmluZygwLDEpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgeSA9IGIuc3Vic3RyaW5nKDAsMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmbG9vcnMuaW5kZXhPZih5KS1mbG9vcnMuaW5kZXhPZih4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBqc29uLmNvZGVzID0gbmV3Q29kZXM7XG4gICAgICAgICAgICBsZXQgdGl0bGVzID0gT2JqZWN0LmtleXMobmV3Q29kZXMpO1xuICAgICAgICAgICAgdGl0bGVzID0gdGl0bGVzLnNvcnQoY29tcGFyZSgpKTtcbiAgICAgICAgICAgIGpzb24udGl0bGUgPSB0aXRsZXM7XG4gICAgICAgICAgICB2YXIgbmV3RmlsZSA9ICQuc3RyaW5naWZ5KGpzb24pOyAvL0pTT04ucGFyc2XkvJrmiqXplJlcbiAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCBuZXdGaWxlKTtcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LkuIDplK7miZPkuIrmoIflv5cnO1xuICAgICAgICB9LHZhbHVlX3JlX2N0LGpzb24sbmV3Q29kZXMscGFyc2VSb3V0ZSlcbiAgICB9LHVuaXF1ZTIsZHVwbGljYXRlcyxmbG9vcnMpLFxufSk7XG5kLnB1c2goe1xuICAgIHRpdGxlOlwi8J+UhOmHjee9rkLnq5lVQVwiLFxuICAgIGNvbF90eXBlOiBcInNjcm9sbF9idXR0b25cIixcbiAgICB1cmw6IFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1wiLFxuICAgIGRlc2M6IFwiZmxvYXQmJjEwMCVcIixcbiAgICBleHRyYToge1xuICAgICAgICB1YTogUENfVUFcbiAgICB9XG59KTtcbmxldCB3ZWJfc2VsID0gJ+eIseWlh+iJui/kvJjphbcv6IW+6K6vL+iKkuaenC/lk5Tlk6nlk5Tlk6kv5pCc54uQL+ilv+eTnC/pmL/ph4wvUFBUVi/lkqrlkpUv5LmQ6KeGLzE5MDUv6aOO6KGMJy5zcGxpdCgnLycpO1xuZC5wdXNoKHtcbiAgICB0aXRsZTon4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XCJjb2xvcjojMDBkOWZmXCI+5p2l5Liq5rWL6K+V5Zyw5Z2AJyxcbiAgICBjb2xfdHlwZTogXCJ0ZXh0XzJcIixcbiAgICB1cmw6JCh3ZWJfc2VsLDQpLnNlbGVjdCgoZGVtb0RhdGEsZ2V0T25lKT0+e1xuICAgICAgICBsZXQgdXJscyA9IGRlbW9EYXRhW2lucHV0XTtcbiAgICAgICAgbGV0IHVybCA9IGdldE9uZSh1cmxzKXx8Jyc7XG4gICAgICAgIGlmKCF1cmwpe1xuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovLycraW5wdXQrJ+i/meS4que9keermeaaguaXtuayoeacieaSreaUvuS+i+WtkCdcbiAgICAgICAgfVxuICAgICAgICBwdXRWYXIoJ3BhcnNlVXJsLnVybCcsIHVybCk7XG4gICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v57uZ5L2g5om+5LqG5LiqJytpbnB1dCsn55qE5pKt5pS+5Zyw5Z2AOlxcbicrdXJsO1xuICAgIH0sZGVtb0RhdGEsZ2V0T25lKVxufSk7XG5pZihnZXRJdGVtKCdkbi50ZXN0X21vZGUnLCdR56WeJyk9PT0nUeelnicpe1xuICAgIGQucHVzaCh7XG4gICAgICAgIC8vJyNmZjcwMDAnXG4gICAgICAgIHRpdGxlOifigJjigJjigJnigJk8c3BhbiBzdHlsZT1cImNvbG9yOiNmZjcwMDBcIj5R56We5o+S5Lu25o6l5Y+j6K6+572uJyxcbiAgICAgICAgLy8gdGl0bGU6ICfigJzigJxR56We5o+S5Lu25o6l5Y+j6K6+572u4oCd4oCdJyxcbiAgICAgICAgdXJsOiBcImhpa2VyOi8vcGFnZS9FZGl0VXJsP3J1bGU9TXlGaWVsZOG0sOKBv1wiLFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMidcbiAgICB9KTtcbn1lbHNlIGlmKGdldEl0ZW0oJ2RuLnRlc3RfbW9kZScsJ1HnpZ4nKT09PSfmlq3mj5InKXtcbiAgICBsZXQgdXJsID0gcmVhbFRpdGxlcy5sZW5ndGg+MD9cImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3nvJbovpEjbm9IaXN0b3J5I1wiOiQoJ+WIq+iuvue9ruS6hu+8jOWFiOaLieS7o+eggScpLmNvbmZpcm0oKVxuICAgIGQucHVzaCh7XG4gICAgICAgIHRpdGxlOifigJjigJjigJnigJk8c3BhbiBzdHlsZT1cImNvbG9yOiNmZjcwMDBcIj7mlq3mj5LmjqXlj6Porr7nva4nLFxuICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzInXG4gICAgfSk7XG59XG5cbmp4SXRlbS5scUZpbGUoKTtcbmxldCBleHRyYSA9IGQuc2xpY2UoLTcsZC5sZW5ndGgpOyAvL+aWreaPkua3u+WKoOeahOWFg+e0oFxuZCA9IGQuc2xpY2UoMCwtNyk7IC8vIOiHquW3seeahOWHveaVsFxuZXh0cmFbMF0udGl0bGU9J+aLieWPluWIl+ihqCjkuI3mjqjojZApJ1xuZXh0cmFbMF0uY29sX3R5cGU9J3RleHRfMidcbmV4dHJhWzFdLnRpdGxlPSfmi4nlj5bku6PnoIEo5by654OI5o6o6I2QKSdcbmV4dHJhWzFdLmNvbF90eXBlPSd0ZXh0XzInXG5leHRyYVs0XS5jb2xfdHlwZT0ndGV4dF9jZW50ZXJfMSdcbmV4dHJhWzRdLnVybD1jekd1aWRlKCk7XG5leHRyYS5zcGxpY2UoMiwxKTtcbmQgPSBkLmNvbmNhdChleHRyYSk7XG4vLyBkLnNwbGljZShkLmxlbmd0aC01LDEpO1xuc2V0UmVzdWx0KGQpOyIsInNlYXJjaF91cmwiOiIiLCJncm91cCI6Iua1i+ivlSIsInNlYXJjaEZpbmQiOiIiLCJkZXRhaWxfY29sX3R5cGUiOiJtb3ZpZV8xIiwiZGV0YWlsX2ZpbmRfcnVsZSI6IiIsInNkZXRhaWxfY29sX3R5cGUiOiJtb3ZpZV8xIiwic2RldGFpbF9maW5kX3J1bGUiOiIiLCJ1YSI6Im1vYmlsZSIsInByZVJ1bGUiOiIiLCJwYWdlcyI6Ilt7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiUGFyc2VfRG4tdnVlLmh0bWxcIixcInBhdGhcIjpcIlBhcnNlX0RuLmh0bWxcIixcInJ1bGVcIjpcIjwhRE9DVFlQRSBodG1sPlxcbjxodG1sPlxcbjxoZWFkPlxcbiAgICA8bWV0YSBjaGFyc2V0PVxcXCJ1dGYtOFxcXCI+XFxuICAgIDxtZXRhIG5hbWU9XFxcInZpZXdwb3J0XFxcIiBjb250ZW50PVxcXCJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xLG1pbmltdW0tc2NhbGU9MSxtYXhpbXVtLXNjYWxlPTEsdXNlci1zY2FsYWJsZT1ub1xcXCIgLz5cXG4gICAgPHRpdGxlPlBhcnNlX0RuX3Z1ZTwvdGl0bGU+XFxuICAgIDxzY3JpcHQ+XFxuICAgICAgICBjb25zdCB2dWVQYXRoID0gJ2hpa2VyOi8vZmlsZXMvcnVsZXMvZHpIb3VzZS9qcy92dWUuanMnO1xcbiAgICAgICAgaWYodHlwZW9mKGZiYSk9PSd1bmRlZmluZWQnfHwhZmJhKXtcXG4gICAgICAgICAgICB2YXIgZmJhID0gZnlfYnJpZGdlX2FwcDtcXG4gICAgICAgIH1cXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgaWYodHlwZW9mKHJlcXVlc3QpPT0ndW5kZWZpbmVkJ3x8IXJlcXVlc3Qpe1xcbiAgICAgICAgICAgICAgICBldmFsKGZiYS5nZXRJbnRlcm5hbEpzKCkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAvLyBmYmEubG9nKHZ1ZVBhdGgpO1xcbiAgICAgICAgICAgIGlmKCFyZXF1ZXN0KHZ1ZVBhdGgpKXtcXG4gICAgICAgICAgICAgICAgZmJhLndyaXRlRmlsZSh2dWVQYXRoLHJlcXVlc3QoJ2h0dHA6Ly9oaWtlci5ub2tpYS5wcmVzcy9oaWtlcnVsZS9ydWxlbGlzdC5qc29uP2lkPTE4MjMnKSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGV2YWwoZmJhLmZldGNoKHZ1ZVBhdGgpKTtcXG4gICAgICAgICAgICB9Y2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZS5tZXNzYWdlKTtcXG4gICAgICAgICAgICAgICAgZmJhLmxvZyhlLm1lc3NhZ2UpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAvLyBmYmEubG9nKCfliqDovb12dWXnu4Tku7blrozmr5UnKTtcXG4gICAgICAgIH1jYXRjaCAoZSkge1xcbiAgICAgICAgICAgIGFsZXJ0KGUubWVzc2FnZSk7XFxuICAgICAgICB9XFxuICAgIDwvc2NyaXB0PlxcbiAgICA8IS0tICAgIDxzY3JpcHQgc3JjPVxcXCJodHRwczovL3VucGtnLmNvbS92dWVAbmV4dFxcXCI+PC9zY3JpcHQ+LS0+XFxuICAgIDwhLS0gICAgPHNjcmlwdCBzcmM9XFxcImZpbGU6Ly8vc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL3J1bGVzL2R6SG91c2UvanMvdnVlLmpzXFxcIj48L3NjcmlwdD4tLT5cXG4gICAgPHN0eWxlPlxcbiAgICAgICAgYm9keSB7XFxuICAgICAgICAgICAgbWFyZ2luOiAwIDVweCAwIDVweDtcXG4gICAgICAgICAgICBwYWRkaW5nOiAwIDBweCAwIDBweDtcXG4gICAgICAgICAgICAvKiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGOUYwREE7Ki9cXG4gICAgICAgICAgICBmb250LXdlaWdodDogMDtcXG4gICAgICAgICAgICBmb250LWZhbWlseTogXFxcIk1pY3Jvc29mdCBZYUhlaVxcXCIsXFxcIuWui+S9k1xcXCIsXFxcIlNlZ29lIFVJXFxcIiwgXFxcIkx1Y2lkYSBHcmFuZGVcXFwiLCBIZWx2ZXRpY2EsIEFyaWFsLHNhbnMtc2VyaWYsIEZyZWVTYW5zLCBBcmltbztcXG4gICAgICAgIH1cXG4gICAgICAgICNhcHB7XFxuICAgICAgICAgICAgbWFyZ2luLXRvcDotMTBweDtcXG4gICAgICAgIH1cXG4gICAgICAgICN0aXBze1xcbiAgICAgICAgICAgIG1hcmdpbi10b3A6LTEwcHg7XFxuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTo1cHg7XFxuICAgICAgICB9XFxuICAgICAgICAuZnVuZ3tcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlclxcbiAgICAgICAgfVxcbiAgICAgICAgZGl2LmJveCB7XFxuICAgICAgICAgICAgbWFyZ2luLXRvcDotMXB4O1xcbiAgICAgICAgICAgIGhlaWdodDogNDNweDtcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMjBweDtcXG4gICAgICAgIH1cXG4gICAgICAgIC8q6L6T5YWl5qGG5bC65a+4Ki9cXG4gICAgICAgIGZvcm0ge1xcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGlucHV0LCBsYWJlbCwgc2VsZWN0IHtcXG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XFxuICAgICAgICAgICAgb3V0bGluZTogbm9uZTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8q5a2X5L2T5L2N572uKi9cXG4gICAgICAgIGlucHV0IHtcXG4gICAgICAgICAgICB3aWR0aDogNzclO1xcbiAgICAgICAgICAgIGhlaWdodDogMzJweDtcXG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDY2cHg7XFxuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMHB4O1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgbGFiZWwge1xcbiAgICAgICAgICAgIHRleHQtYWxpZ246Y2VudGVyO1xcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA0M3B4O1xcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcXG4gICAgICAgICAgICB3aWR0aDogNjBweDtcXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgLyrlsI/moYYqL1xcbiAgICAgICAgLmJhciBsYWJlbCB7XFxuICAgICAgICAgICAgLypiYWNrZ3JvdW5kOiAjRDA2QjZDOyovXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4IDU1NXB4IDU1NXB4IDVweDtcXG4gICAgICAgICAgICB3aWR0aDogNjBweDtcXG4gICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XFxuICAgICAgICAgICAgdG9wOiAwO1xcbiAgICAgICAgICAgIGxlZnQ6IDNweDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIC8q6L6T5YWl5qGG5qC35byPKi9cXG4gICAgICAgIC5iYXIgaW5wdXQge1xcbiAgICAgICAgICAgIC8qYm9yZGVyLXJhZGl1czogNXB4IDU1NXB4IDU1NXB4IDVweDtcXG4gICAgICAgICAgICAgKi9cXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XFxuICAgICAgICB9XFxuXFxuICAgICAgICAvKuWIl+ihqCovXFxuICAgICAgICBzZWxlY3Qge1xcbiAgICAgICAgICAgIHRleHQtYWxpZ246Y2VudGVyO1xcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OjQwcHg7XFxuICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xcbiAgICAgICAgICAgIHdpZHRoOiAyMHB4O1xcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICAvKuWIl+ihqCovXFxuICAgICAgICAubGllYiBzZWxlY3R7XFxuICAgICAgICAgICAgLypib3JkZXItcmFkaXVzOiA0cHg7Ki9cXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1NTVweCA1cHggNXB4IDU1NXB4O1xcbiAgICAgICAgICAgIHdpZHRoOiA4MHB4O1xcbiAgICAgICAgICAgIHRleHQtYWxpZ246Y2VudGVyO1xcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDtcXG4gICAgICAgICAgICB0b3A6IDA7XFxuICAgICAgICAgICAgcmlnaHQ6IDJweDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIC8q5aS05YOPKi9cXG4gICAgICAgIC5yb3VuZF9pY29ue1xcbiAgICAgICAgICAgIHdpZHRoOiA0MHB4O1xcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgICAgICB9XFxuICAgIDwvc3R5bGU+XFxuPC9oZWFkPlxcbjxib2R5PlxcbjxkaXYgY2xhc3M9XFxcImZ1bmdcXFwiPlxcbiAgICA8YSBzdHlsZT1cXFwiZmxvYXQ6bGVmdDtcXFwiPlxcbiAgICAgICAgPGJ1dHRvbiAgOnN0eWxlPVxcXCInYm9yZGVyOiBub25lO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiAnK3RoZW1lcy5jbG9zZUJ0bi5iYWNrZ3JvdW5kKyc7d2lkdGg6IDgwcHg7IGZvbnQtc2l6ZTogMThweDtjb2xvcjogJyt0aGVtZXMuY2xvc2VCdG4uY29sb3JcXFwiIG9uY2xpY2s9XFxcImNhbmNlbCgpO1xcXCI+5YWzIOmXrTwvYnV0dG9uPlxcbiAgICA8L2E+XFxuICAgIDxhIGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnlcXFwiPlxcbiAgICAgICAgPGJ1dHRvbiAgOnN0eWxlPVxcXCInYm9yZGVyOiBub25lO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiAnK3RoZW1lcy50aXBzQnRuLmJhY2tncm91bmQrJzt3aWR0aDogMTIwcHg7IGZvbnQtc2l6ZTogMThweDtjb2xvcjogJyt0aGVtZXMudGlwc0J0bi5jb2xvclxcXCIgQGNsaWNrPVxcXCJzaG93VGlwcz0hc2hvd1RpcHNcXFwiPnt7c2hvd1RpcHM/XFxcIumakOiXj+aPkOekulxcXCI6XFxcIuaYvuekuuaPkOekulxcXCJ9fTwvYnV0dG9uPlxcbiAgICA8L2E+XFxuICAgIDxhIHN0eWxlPVxcXCJmbG9hdDpyaWdodFxcXCI+XFxuICAgICAgICA8YnV0dG9uIDpzdHlsZT1cXFwiJ2JvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogJyt0aGVtZXMuc2F2ZUJ0bi5iYWNrZ3JvdW5kKyc7d2lkdGg6IDgwcHg7IGZvbnQtc2l6ZTogMThweDtjb2xvcjogJyt0aGVtZXMuc2F2ZUJ0bi5jb2xvclxcXCIgb25jbGljaz1cXFwiY2xpY2ttZSgn6YWNIOe9riDlt7Ig5L+dIOWtmCDvvIEnLCAxMDAwLCAn5byAJyk7XFxcIj7kv50g5a2YPC9idXR0b24+XFxuICAgIDwvYT5cXG5cXG48L2Rpdj5cXG48YnI+XFxuPGRpdiBpZD1cXFwiYXBwXFxcIj5cXG4gICAgPGg2IGlkPVxcXCJ0aXBzXFxcIiB2LWh0bWw9XFxcInRpcHNcXFwiIHYtc2hvdz1cXFwic2hvd1RpcHNcXFwiPjwvaDY+XFxuICAgIDxkaXYgY2xhc3M9XFxcImJveCBiYXJcXFwiIHYtZm9yPVxcXCJvcHRpb24gaW4gb3B0aW9uc1xcXCI+XFxuICAgICAgICA8Zm9ybT5cXG4gICAgICAgICAgICA8bGFiZWwgdHlwZT1cXFwic3VibWl0XFxcIiA6c3R5bGU9XFxcIidiYWNrZ3JvdW5kOicrdGhlbWVzLmJhcmxhYmVsLmJhY2tncm91bmQrJztjb2xvcjonK3RoZW1lcy5iYXJsYWJlbC5jb2xvclxcXCI+e3sgb3B0aW9uLm5hbWUgfX08L2xhYmVsPlxcbiAgICAgICAgICAgIDxpbnB1dCA6c3R5bGU9XFxcIidiYWNrZ3JvdW5kOicrdGhlbWVzLmJhcklucHV0LmJhY2tncm91bmQrJztib3JkZXI6IDNweCBzb2xpZCAnK3RoZW1lcy5iYXJJbnB1dC5jb2xvclxcXCIgdHlwZT1cXFwidGV4dFxcXCIgb25jbGljaz1cXFwicmVzZXRTZWxlY3QodGhpcy5pZClcXFwiIDpwbGFjZWhvbGRlcj1cXFwib3B0aW9uLnBsYWNlaG9sZGVyfHxwbGFjZWhvbGRlclxcXCIgdi1tb2RlbD1cXFwib3B0aW9uLnZhbHVlXFxcIiB2LWJpbmQ6aWQ9XFxcIm9wdGlvbi5pZFxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibGllYlxcXCI+XFxuICAgICAgICAgICAgICAgIDxzZWxlY3QgOnN0eWxlPVxcXCInYmFja2dyb3VuZDonK3RoZW1lcy5zZWxlY3QuYmFja2dyb3VuZCsnO2NvbG9yOicrdGhlbWVzLnNlbGVjdC5jb2xvclxcXCIgOmNsZWFyYWJsZT1cXFwidHJ1ZVxcXCIgc2l6ZT1cXFwiMlxcXCIgOmlkPVxcXCJvcHRpb24uaWQrJ1NlbGVjdCdcXFwiIDpuYW1lPVxcXCJvcHRpb24uaWRcXFwiIG9uY2hhbmdlPVxcXCJnZXRPcHRpb24odGhpcy5pZCx0aGlzLm5hbWUpXFxcIiAgdi1tb2RlbD1cXFwib3B0aW9uLnZhbHVlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdi1pZj1cXFwib3B0aW9uLmlkIT09J3FqdScmJm9wdGlvbi5pZCE9PSdjaidcXFwiIDp2YWx1ZT1cXFwic2VsXFxcIiA6a2V5PVxcXCJpbmRleFxcXCIgdi1mb3I9XFxcIihzZWwsaW5kZXgpIGluIG15U2VsZWN0XFxcIj57eyBzZWwgfX08L29wdGlvbj5cXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdi1lbHNlLWlmPVxcXCJvcHRpb24uaWQ9PT0ncWp1J1xcXCIgOnZhbHVlPVxcXCJzZWxcXFwiIDprZXk9XFxcImluZGV4XFxcIiB2LWZvcj1cXFwiKHNlbCxpbmRleCkgaW4gWyfpu5jorqQnXS5jb25jYXQobXlTZWxlY3QpXFxcIj57eyBzZWwgfX08L29wdGlvbj5cXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gOnZhbHVlPVxcXCJzZWxcXFwiIDprZXk9XFxcImluZGV4XFxcIiB2LWVsc2Ugdi1mb3I9XFxcIihzZWwsaW5kZXgpIGluIGNqU2VsXFxcIj57eyBzZWwgfX08L29wdGlvbj5cXG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Zvcm0+XFxuICAgIDwvZGl2PlxcbjwvZGl2PlxcbjxkaXY+XFxuICAgIDxhIHYtZm9yPVxcXCJ2ZXIgaW4gdmVyaW5mb1xcXCIgc3R5bGU9XFxcImZsb2F0OmxlZnQ7bWFyZ2luLXRvcDoxcHg7bWFyZ2luLXJpZ2h0OiAyMHB4XFxcIiB2LWJpbmQ6aWQ9J3Zlci5pZCcgb25jbGljaz1cXFwiZG9PcHRpb24odGhpcy5pZClcXFwiPlxcbiAgICAgICAgPGltZyA6c3JjPVxcXCJ2ZXIuYXZhdGFyXFxcIiBjbGFzcz1cXFwicm91bmRfaWNvblxcXCIgIGFsdD1cXFwiXFxcIj5cXG4gICAgICAgIDxzcGFuIHN0eWxlPVxcXCJtYXJnaW4tbGVmdDoxMHB4O2xpbmUtaGVpZ2h0OjEwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6IGdyZXk7XFxcIj57eyB2ZXIuYXV0aG9yIH19PC9zcGFuPlxcbiAgICA8L2E+XFxuICAgIDxhIHN0eWxlPVxcXCJmbG9hdDpyaWdodDttYXJnaW4tdG9wOjEwcHg7XFxcIj5cXG4gICAgICAgIDxidXR0b24gOnN0eWxlPVxcXCInYm9yZGVyOiBub25lO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOicrdGhlbWVzLnNhdmVDbG9zZUJ0bi5iYWNrZ3JvdW5kKyc7d2lkdGg6IDE4NXB4O2hlaWdodDo0MHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICcrdGhlbWVzLnNhdmVDbG9zZUJ0bi5jb2xvclxcXCIgb25jbGljaz1cXFwiY2xpY2ttZSgn6YWNIOe9riDlt7Ig5L+dIOWtmCDvvIEnLCAxMDAwLCAn5YWzJyk7XFxcIj7kv53lrZjorr7nva7lubblhbPpl63nlYzpnaI8L2J1dHRvbj5cXG4gICAgPC9hPlxcbjwvZGl2PlxcbjxzY3JpcHQ+XFxuICAgIGxldCB0aXBzID0gYOaPkOekuu+8mjxicj7ikaDms6jmhI/mj5Lku7bpgInpobnvvIzmsqHmnInmiYvliqjlr7zlhaXmj5Lku7bnmoTor53kuI3nlKjliqjlroPjgILlpoLorr7nva7kuI3lvZPkvJrlr7zoh7Top4TliJnml6Dms5Xkvb/nlKjvvIw8YnI+6Kej5Yaz5Yqe5rOV77ya6KeG55WM5omT5byA5pu05aSa6K6+572u4oaS5paH5Lu2566h55CG4oaS54K5Y2FjaGXihpLplb/mjIlNeVBhcnNlU2V0Lmpzb27liKDpmaTmjonvvJs8YnI+4pGh5YWo5bGA6K6+572u5aaC5p6c6YCJ5oup5LqG6Z2e6buY6K6k6YKj5LmI5YWo6YOo55qE6Kej5p6Q5Lya5L2/55So6L+Z5LiA6K6+572u77yM5LiN5oOz6L+Z5qC355qE6K+d6K+35aGr5YWl6buY6K6k77ybPGJyPuKRoue7v+iJsuS/neWtmOaMiemSruS7heS7heS/neWtmOmFjee9ruS4jeS8muWFs+mXreiuvue9rumhtemdou+8jOmFjee9ruWQjuaDs+S/neWtmOW5tuWFs+mXreiuvue9rumhtemdoueahOivneivt+eCueiTneiJsuaMiemSru+8mzxicj7ikaPlpoLmnpzpgYfliLDkv53lrZjmjInpkq7ngrnkuI3liqjmiJbogIXmiqXplJnnmoTmg4XlhrXvvIzku6XkuIvot6/lvoTmjKjnnYDliKDpmaTkuIDpgY3vvIznhLblkI7ph43mlrDmi4nlj5bmj5Lku7bvvIznvZHpobXlho3miZPlvIDmraTnvZHpobVb5LiN6KaB5YWI5ouJ5Luj56CBXeOAguiusOW+l+Wkh+S7vTxicj5cXG7kuLvmj5Lku7blrZjmlL7ot6/lvoQ6IC9jYWNoZS9QYXJzZV9Ebi5qczxicj5cXG7nvZHpobXohJrmnKzlrZjmlL7ot6/lvoQ6IC9jYWNoZS9QYXJzZV9Ebi5odG1sPGJyPlxcbuaXp+aWreaPkumFjee9rui3r+W+hDovY2FjaGUvTXlQYXJzZVNldC5qc29uPGJyPlxcbuaWsOaWreaPkumFjee9rui3r+W+hC9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb248YnI+XFxuICAgIOKRpOmYheivu+WujOaPkOekuueCueWFs+mXreWKoOi9veWujOaVtOiuvue9rumhtemdou+8jOWmguWHuumXrumimOaXoOazleiHquihjOino+WGs+eCueWbvueJh+i/m+WFpeiuuuWdm+WQkeaIkeWPjemmiOOAgjxicj5gO1xcbiAgICBsZXQgcGxhY2Vob2xkZXI9J+i+k+WFpeino+aekOWQjeaIluiAhVVSTC4uLi4uLic7XFxuICAgIC8vI2FhOTZkYSAjZmM1MTg1XFxuICAgIGxldCB0aGVtZXMgPSB7XFxuICAgICAgICBuYW1lOifpu5jorqTkuLvpopgnLFxcbiAgICAgICAgY2xvc2VCdG46e2NvbG9yOicjZjZmNmY2JyxiYWNrZ3JvdW5kOicjYWE5NmRhJ30sXFxuICAgICAgICBzYXZlQnRuOntjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonIzA2ODAwNid9LFxcbiAgICAgICAgc2F2ZUNsb3NlQnRuOntjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonIzA1QkZDNSd9LFxcbiAgICAgICAgdGlwc0J0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNUJGQzUnfSxcXG4gICAgICAgIGJhcmxhYmVsOntjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonI2FhOTZkYSd9LFxcbiAgICAgICAgYmFySW5wdXQ6e2NvbG9yOicjYWE5NmRhJyxiYWNrZ3JvdW5kOicjZmZmZmQyJ30sXFxuICAgICAgICBzZWxlY3Q6e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjYWE5NmRhJ30sXFxuICAgIH07XFxuICAgIGxldCB0aGVtZURlZiA9IHtcXFwibmFtZVxcXCI6XFxcIuaWreW/teWOn+earlxcXCIsXFxcImNsb3NlQnRuXFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0Y5RjBEQVxcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjYzU0NjRhXFxcIn0sXFxcInNhdmVCdG5cXFwiOntcXFwiY29sb3JcXFwiOlxcXCIjRjlGMERBXFxcIixcXFwiYmFja2dyb3VuZFxcXCI6XFxcIiMwNjgwMDZcXFwifSxcXFwic2F2ZUNsb3NlQnRuXFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0Y5RjBEQVxcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjMDVCRkM1XFxcIn0sXFxcInRpcHNCdG5cXFwiOntcXFwiY29sb3JcXFwiOlxcXCIjRjlGMERBXFxcIixcXFwiYmFja2dyb3VuZFxcXCI6XFxcIiMwNUJGQzVcXFwifSxcXFwiYmFybGFiZWxcXFwiOntcXFwiY29sb3JcXFwiOlxcXCIjRjlGMERBXFxcIixcXFwiYmFja2dyb3VuZFxcXCI6XFxcIiNEMDZCNkNcXFwifSxcXFwiYmFySW5wdXRcXFwiOntcXFwiY29sb3JcXFwiOlxcXCIjRDA2QjZDXFxcIixcXFwiYmFja2dyb3VuZFxcXCI6XFxcIiNGOUYwREFcXFwifSxcXFwic2VsZWN0XFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0Y5RjBEQVxcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjRDA2QjZDXFxcIn19O1xcbiAgICB2YXIgdGhlbWVSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015VGhlbWUuanNvblxcXCI7XFxuICAgIGlmKCFmYmEuZmV0Y2godGhlbWVSb3V0ZSkpe1xcbiAgICAgICAgZmJhLndyaXRlRmlsZSh0aGVtZVJvdXRlLEpTT04uc3RyaW5naWZ5KHtub3dfdGhlbWU6J+m7mOiupOS4u+mimCcsdGhlbWVzOlt0aGVtZXMsdGhlbWVEZWZdfSkpXFxuICAgIH1cXG4gICAgdHJ5IHtcXG4gICAgICAgIGxldCBteVRoZW1lcyA9IEpTT04ucGFyc2UoZmJhLmZldGNoKHRoZW1lUm91dGUpKTtcXG4gICAgICAgIGxldCBub3dUaGVtZSA9IG15VGhlbWVzLnRoZW1lcy5maWx0ZXIoaXQ9Pml0Lm5hbWUgPT09IG15VGhlbWVzLm5vd190aGVtZSk7XFxuICAgICAgICB0aGVtZXMgPSBub3dUaGVtZT9ub3dUaGVtZVswXTpteVRoZW1lcy50aGVtZXNbMF07XFxuICAgIH1jYXRjaCAoZSkge31cXG5cXG4gICAgLy8g5pat5b+15Yid5aeL5YyW6YOo5YiGXFxuICAgIGNvbnN0IGFsbEFwaT1bJ2h0dHBzOi8vdGVzdC5yb25neGluZ3ZyLmNvbS90ZXN0Lz91cmw9JywnaHR0cDovL2NhY2hlLmxhbmd1YW5nLmljdTo4OC9kaWRpLnBocD91cmw9J107XFxuICAgIHZhciBzZXR0aW5ncyA9IHtcXG4gICAgICAgIHF5OiAn5L2g54i556eR5oqAJyxcXG4gICAgICAgIHlrOiAn5LqR5rW35q2j54mIJyxcXG4gICAgICAgIHR4OiAn6I2j6ICAJyxcXG4gICAgICAgIG1nOiAn5reY5b2xMTA4MCcsXFxuICAgICAgICBibDogJ+a3mOW9seiTneWFiScsXFxuICAgICAgICBzaDogJ+axn+a5lkQnLFxcbiAgICAgICAgeGc6ICfmsZ/muZZEJyxcXG4gICAgICAgIGFsOiAn5rGf5rmWRCcsXFxuICAgICAgICBwcDogJ+S6uuS6uui/tycsXFxuICAgICAgICBtaTogJ3l1bjE3MTcnLFxcbiAgICAgICAgbGU6ICfov6rlpaXll4XmjqInLFxcbiAgICAgICAgb3RoOiAn6YGT6ZW/5LuT5bqT6YCa5YWNJyxcXG4gICAgICAgIG9uZTogJzEwODAnLFxcbiAgICAgICAgZnVuOiAn6J6N5YW0JyxcXG4gICAgICAgIHFqdTogJ+m7mOiupCcsXFxuICAgICAgICBjajogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnXFxuICAgIH07XFxuICAgIHZhciBvbGRSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXCI7XFxuICAgIHZhciBteVNldCA9IGZiYS5mZXRjaChvbGRSb3V0ZSk7XFxuICAgIHZhciBuZXdSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvblxcXCI7XFxuICAgIGlmKCFmYmEuZmV0Y2gobmV3Um91dGUpKXtcXG4gICAgICAgIGZiYS53cml0ZUZpbGUobmV3Um91dGUsSlNPTi5zdHJpbmdpZnkoe3NldHRpbmdzOnNldHRpbmdzLHRpdGxlOltcXFwieXVuMTcxN1xcXCIsXFxcIuS9oOeIueenkeaKgFxcXCIsXFxcIuiejeWFtFxcXCIsXFxcIuS6uuS6uui/ty3kvJjphbdcXFwiXSxjb2Rlczp7XFxcIuS9oOeIueenkeaKgFxcXCI6XFxcImh0dHA6Ly9jYWNoZS5sYW5ndWFuZy5pY3U6ODgvZGlkaS5waHA/dXJsPVxcXCIsXFxcIuiejeWFtFxcXCI6XFxcImh0dHBzOi8vdGVzdC5yb25neGluZ3ZyLmNvbS90ZXN0Lz91cmw9XFxcIixcXFwi5Lq65Lq66L+3LeS8mOmFt1xcXCI6XFxcImh0dHBzOi8vc3ZpcC5yZW5yZW5taS5jYzoyMjIyL2FwaS8/a2V5PW5uNGo4cnVrUFhTVnpSNzhFOSZ1cmw9XFxcIn19KSlcXG4gICAgfVxcbiAgICB2YXIgbmV3Q29uZmlnID0gZmJhLmZldGNoKG5ld1JvdXRlKTtcXG4gICAgdmFyIG15U2VsZWN0ID0gW107XFxuICAgIGZ1bmN0aW9uIGNvbXBhcmUobGlzdCkge1xcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xcbiAgICAgICAgICAgIHJldHVybiAhbGlzdC5pbmNsdWRlcyhpdClcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBpZihuZXdDb25maWcmJm5ld0NvbmZpZy5sZW5ndGg+MjApe1xcbiAgICAgICAgZXZhbChcXFwibmV3Q29uZmlnID1cXFwiICsgbmV3Q29uZmlnICsgXFxcIjtcXFwiKTtcXG4gICAgICAgIHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbihzZXR0aW5ncyxuZXdDb25maWcuc2V0dGluZ3MpO1xcbiAgICAgICAgdmFyIHljVGl0bGUgPSBbJ2RlZmF1bHRQYXJzZScsICdkZWZhdWx0UGFyc2VXZWInLCdtYW9zcycsICdDaXR5SVAnLCAnY2FjaGVNM3U4JywgJ3BjVUEnLCAncGFyc2VMYycsICdncGFyc2UnLCAnbnBhcnNlJ107XFxuICAgICAgICBteVNlbGVjdCA9IG5ld0NvbmZpZy50aXRsZS5maWx0ZXIoY29tcGFyZSh5Y1RpdGxlKSk7XFxuICAgIH1cXG4gICAgLy9mYmEubG9nKEpTT04uc3RyaW5naWZ5KG15U2VsZWN0KSk7XFxuXFxuICAgIGxldCBvcHRpb25zID0gW1xcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+eIseWlh+iJuicsXFxuICAgICAgICAgICAgaWQ6J3F5JyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5xeSxcXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjon6K6+572u54ix5aWH6Im6J1xcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifkvJjphbcnLFxcbiAgICAgICAgICAgIGlkOid5aycsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MueWtcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon6IW+6K6vJyxcXG4gICAgICAgICAgICBpZDondHgnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnR4XFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+iKkuaenCcsXFxuICAgICAgICAgICAgaWQ6J21nJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5tZ1xcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOiflk5Tlk6nlk5Tlk6knLFxcbiAgICAgICAgICAgIGlkOidibCcsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MuYmxcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon5pCc54uQJyxcXG4gICAgICAgICAgICBpZDonc2gnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnNoXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+ilv+eTnCcsXFxuICAgICAgICAgICAgaWQ6J3hnJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy54Z1xcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifpmL/ph4wnLFxcbiAgICAgICAgICAgIGlkOidhbCcsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MuYWxcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTonUFBUVicsXFxuICAgICAgICAgICAgaWQ6J3BwJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5wcFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOiflkqrlkpUnLFxcbiAgICAgICAgICAgIGlkOidtaScsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MubWlcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon5LmQ6KeGJyxcXG4gICAgICAgICAgICBpZDonbGUnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLmxlXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6JzE5MDUnLFxcbiAgICAgICAgICAgIGlkOidvbmUnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLm9uZVxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifpo47ooYwnLFxcbiAgICAgICAgICAgIGlkOidmdW4nLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLmZ1blxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOiflhbbku5YnLFxcbiAgICAgICAgICAgIGlkOidvdGgnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLm90aFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOiflhajlsYAnLFxcbiAgICAgICAgICAgIGlkOidxanUnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnFqdVxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifmj5Lku7YnLFxcbiAgICAgICAgICAgIGlkOidjaicsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MuY2pcXG4gICAgICAgIH0sXFxuICAgIF07XFxuXFxuICAgIGZ1bmN0aW9uIERpZChpZCl7XFxuICAgICAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xcbiAgICB9XFxuICAgIGZ1bmN0aW9uIGdldE9wdGlvbihpZCx0aXRsZSkge1xcbiAgICAgICAgdmFyIG9iaiA9IERpZChpZCk7XFxuICAgICAgICBEaWQodGl0bGUpLnZhbHVlID0gb2JqLm9wdGlvbnNbb2JqLnNlbGVjdGVkSW5kZXhdLnRleHQ7XFxuICAgIH1cXG4gICAgZnVuY3Rpb24gcmVzZXRTZWxlY3QoaWQpe1xcbiAgICAgICAgRGlkKGlkK1xcXCJTZWxlY3RcXFwiKS5vcHRpb25zLnNlbGVjdGVkSW5kZXggPSAtMTtcXG4gICAgfVxcblxcbiAgICAvL+WHveaVsOmDqOWIhlxcblxcbiAgICBmdW5jdGlvbiBUb2FzdChtc2csZHVyYXRpb24pe1xcbiAgICAgICAgZHVyYXRpb249aXNOYU4oZHVyYXRpb24pPzIwMDA6ZHVyYXRpb247XFxuICAgICAgICB2YXIgbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xcbiAgICAgICAgbS5pbm5lckhUTUwgPSBtc2c7XFxuICAgICAgICBtLnN0eWxlLmNzc1RleHQ9XFxcIndpZHRoOjQ1JTsgbWluLXdpZHRoOjE1MHB4OyBiYWNrZ3JvdW5kOiMzMTE7IG9wYWNpdHk6MC42OyBoZWlnaHQ6YXV0bzttaW4taGVpZ2h0OiA0NXB4OyBjb2xvcjojZmZmOyBsaW5lLWhlaWdodDo0NXB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgYm9yZGVyLXJhZGl1czoxMHB4OyBwb3NpdGlvbjpmaXhlZDsgdG9wOjYwJTsgbGVmdDoyNiU7IHotaW5kZXg6OTk5OTk5O1xcXCI7XFxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG0pO1xcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcXG4gICAgICAgICAgICB2YXIgZCA9IDAuNTtcXG4gICAgICAgICAgICBtLnN0eWxlLndlYmtpdFRyYW5zaXRpb24gPSAnLXdlYmtpdC10cmFuc2Zvcm0gJyArIGQgKyAncyBlYXNlLWluLCBvcGFjaXR5ICcgKyBkICsgJ3MgZWFzZS1pbic7XFxuICAgICAgICAgICAgbS5zdHlsZS5vcGFjaXR5ID0gJzAnO1xcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobSkgfSwgZCAqIDEwMDApO1xcbiAgICAgICAgfSwgZHVyYXRpb24pO1xcbiAgICB9XFxuXFxuICAgIGZ1bmN0aW9uIG9wZW5EblBhZ2UoKXtcXG4gICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICBydWxlOiBcXFwiPV5fXj1cXFwiLFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi57yW6L6R6Kej5p6QXFxcIixcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU957yW6L6RI25vSGlzdG9yeSNcXFwiLFxcbiAgICAgICAgICAgIGdyb3VwOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgLy9maW5kUnVsZTogXFxcImpzOnRoaXMuZD1bXTskLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvUGFyc2VfRG4uanM/cnVsZT1NeUZpZWxk4bSw4oG/XFxcXFxcXCIpLmVkaXQoKTtzZXRSZXN1bHQoZCk7XFxcIixcXG4gICAgICAgICAgICBwcmVSdWxlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBleHRyYToge31cXG4gICAgICAgIH0pKTtcXG4gICAgfVxcbiAgICBmdW5jdGlvbiBvcGVuVGhlbWUoKXtcXG4gICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICBydWxlOiBcXFwiPV5fXj1cXFwiLFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5Li76aKY566h55CGXFxcIixcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU95Li76aKYI25vSGlzdG9yeSNcXFwiLFxcbiAgICAgICAgICAgIGdyb3VwOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgcHJlUnVsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHt9XFxuICAgICAgICB9KSk7XFxuICAgIH1cXG4gICAgZnVuY3Rpb24gY2FuY2VsKCl7XFxuICAgICAgICBpZighbXlTZXQpe1xcbiAgICAgICAgICAgIGZiYS53cml0ZUZpbGUob2xkUm91dGUsIEpTT04uc3RyaW5naWZ5KHNldHRpbmdzLCBudWxsLCA0KSk7XFxuICAgICAgICAgICAgZmJhLnJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgZmJhLmJhY2soZmFsc2UpO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGZ1bmN0aW9uIGNsaWNrbWUobXNnLGR1cmF0aW9uLHRpdGxlKXtcXG4gICAgICAgIHRyeXtcXG4gICAgICAgICAgICBmb3IobGV0IGtleSBpbiBzZXR0aW5ncyl7XFxuICAgICAgICAgICAgICAgIC8vIGZiYS5sb2coRGlkKGtleSkrJycra2V5KTtcXG4gICAgICAgICAgICAgICAgdHJ5e1xcbiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3Nba2V5XSA9IERpZChrZXkpLnZhbHVlO1xcbiAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XFxuICAgICAgICAgICAgICAgICAgICBhbGVydChcXFwi5pyq6I635Y+W5Yiw6IqC54K5OlxcXCIra2V5K1xcXCJcXFxcblxcXCIrZS5tZXNzYWdlKTtcXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZihteVNlbGVjdCl7XFxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obmV3Q29uZmlnLnNldHRpbmdzLCBzZXR0aW5ncyk7XFxuICAgICAgICAgICAgICAgIGZiYS53cml0ZUZpbGUobmV3Um91dGUsICQkJC5zdHJpbmdpZnkobmV3Q29uZmlnKSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGZiYS53cml0ZUZpbGUob2xkUm91dGUsICQkJC5zdHJpbmdpZnkoc2V0dGluZ3MpKTtcXG4gICAgICAgICAgICBUb2FzdChtc2csZHVyYXRpb24pO1xcbiAgICAgICAgICAgIGlmKHRpdGxlPT09XFxcIuWFs1xcXCIpe1xcbiAgICAgICAgICAgICAgICBmYmEuYmFjaygpO1xcbiAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICBmYmEucmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfWNhdGNoKGUpe1xcbiAgICAgICAgICAgIGFsZXJ0KGUubWVzc2FnZSlcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICAvL2xldCB3aWR0aD13aW5kb3cuc2NyZWVuLmF2YWlsV2lkdGg7XFxuICAgIC8vbGV0IHdpZHRoUHg9d2lkdGgtMzkzKzUyO1xcbiAgICAvL2FsZXJ0KFxcXCLlvZPliY3liIbovqjnjoc6XFxcIit3aW5kb3cuc2NyZWVuLmF2YWlsV2lkdGgrXFxcIipcXFwiK3dpbmRvdy5zY3JlZW4uaGVpZ2h0KTtcXG4gICAgdmFyIHZlcmluZm8gPSBbe1xcbiAgICAgICAgaWQ6J2RuJyxcXG4gICAgICAgIGF1dGhvcjon5pat5b+1JyxcXG4gICAgICAgIGF2YXRhcjonaHR0cHM6Ly9zMy5heDF4LmNvbS8yMDIxLzAyLzIyL3k3d2I5Ty5qcGcnLFxcbiAgICAgICAgb3B0aW9uOm9wZW5EblBhZ2UsXFxuICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgaWQ6J2R6JyxcXG4gICAgICAgICAgICBhdXRob3I6J+mBk+mVvycsXFxuICAgICAgICAgICAgYXZhdGFyOidodHRwOi8vcTEucWxvZ28uY24vZz9iPXFxJm5rPTQzNDg1NzAwNSZzPTY0MCcsXFxuICAgICAgICAgICAgb3B0aW9uOm9wZW5UaGVtZVxcbiAgICAgICAgfVxcbiAgICBdO1xcblxcbiAgICBmdW5jdGlvbiBkb09wdGlvbihvcHRpb25faWQpe1xcbiAgICAgICAgbGV0IHZlciA9IHZlcmluZm8uZmlsdGVyKGl0PT5pdC5pZD09PW9wdGlvbl9pZClbMF07XFxuICAgICAgICB2ZXIub3B0aW9uKCk7XFxuICAgIH1cXG5cXG4gICAgY29uc3QgUmVuZGVySHRtbEFwcCA9IHtcXG4gICAgICAgIGRhdGEoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgICAgLy8gcmF3SHRtbDogJzxzcGFuIHN0eWxlPVxcXCJjb2xvcjogcmVkXFxcIj7ov5nph4zkvJrmmL7npLrnuqLoibLvvIE8L3NwYW4+JyxcXG4gICAgICAgICAgICAgICAgb3B0aW9uczpvcHRpb25zLFxcbiAgICAgICAgICAgICAgICB2ZXJpbmZvOnZlcmluZm8sXFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOnBsYWNlaG9sZGVyLFxcbiAgICAgICAgICAgICAgICB0aXBzOnRpcHMsXFxuICAgICAgICAgICAgICAgIHRoZW1lczp0aGVtZXMsXFxuICAgICAgICAgICAgICAgIG15U2VsZWN0Om15U2VsZWN0LFxcbiAgICAgICAgICAgICAgICBjalNlbDpbJ+ivt+mAieaLqeaPkuS7tiAo5Y+q5L2c55SobGF6eVJ1bGUpJywnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcycsJ2hpa2VyOi8vZmlsZXMvcnVsZXMvanMvUGFyc2UtVjJfRG4uanMnXSxcXG4gICAgICAgICAgICAgICAgc2V0dGluZ3M6c2V0dGluZ3MsXFxuICAgICAgICAgICAgICAgIHNob3dUaXBzOmZhbHNlLFxcbiAgICAgICAgICAgICAgICAvL3dpZHRoUHg6d2lkdGhQeFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgICAgICBtZXRob2RzOntcXG4gICAgICAgICAgICAvLyBjaGFuZ2VWYWw6ZnVuY3Rpb24oZXZlbnQpe1xcbiAgICAgICAgICAgIC8vICAgICBnZXRPcHRpb24odGhpcy5pZCx0aGlzLm5hbWUpO1xcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnNlbE9wdGlvbiA9IGV2ZW50LnRhcmdldC52YWx1ZTtcXG4gICAgICAgICAgICAvLyAgICAgYWxlcnQoXFxcIuS9oOmAieS4reS6hlxcXCIrZXZlbnQudGFyZ2V0LnZhbHVlKTtcXG4gICAgICAgICAgICAvLyB9XFxuICAgICAgICAgICAgZG9PcHRpb246ZG9PcHRpb25cXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgY29uc3QgYXBwPVZ1ZS5jcmVhdGVBcHAoUmVuZGVySHRtbEFwcCk7XFxuICAgICAgICBhcHAubW91bnQoJ2JvZHknKTtcXG4gICAgfWNhdGNoIChlKSB7XFxuICAgICAgICBjb25zb2xlLmxvZyhlLm1lc3NhZ2UpXFxuICAgIH1cXG5cXG48L3NjcmlwdD5cXG5cXG48L2JvZHk+XFxuPC9odG1sPlwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiUGFyc2VfRG4uanNcIixcInBhdGhcIjpcIlBhcnNlX0RuLmpzXCIsXCJydWxlXCI6XCIvLz09PT09PT09PT09PeWFjeWXheiwg+eUqD09PT09PT09PT09PVxcbi8v77yN77yN77yNPV5fXj1cXG5cXG52YXIgdmVyc2lvbiA9IDMuNDU7XFxudmFyIHVwZGF0ZURhdGUgPSAnMjAyMS8xMC8yMy8xNzowMCc7XFxudmFyIF9teVNldCA9IHtcXG4gICAgcWp1OiAn6buY6K6kJyxcXG4gICAgb3RoOifpgZPplb/ku5PlupPpgJrlhY0nLFxcbiAgICBjamNhY2hlOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcycsXFxuICAgIHg1Y2FjaGU6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmh0bWwnLFxcbiAgICBvbGRDb25maWc6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvbicsXFxuICAgIGNrTGluazogJ2h0dHBzOi8vY29kZS5hbGl5dW4uY29tL0FJOTU3L0hpa2VyL3Jhdy9tYXN0ZXIvdi8nLFxcbiAgICBjajogJ2h0dHBzOi8vY29kZS5hbGl5dW4uY29tL0FJOTU3L0hpa2VyL3Jhdy9tYXN0ZXIvdi9DbG91ZFBhcnNlLVYyX0RuLmpzJyxcXG4gICAgeDVVcmw6ICdodHRwczovL2NvZGUuYWxpeXVuLmNvbS9BSTk1Ny9IaWtlci9yYXcvbWFzdGVyL3YvUGFyc2VfRG4uaHRtbCcsXFxuICAgIHBhcnNlUm91dGU6ICdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicsXFxuICAgIHg1Um91dGU6ICdmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9jYWNoZS9QYXJzZV9Ebi5odG1sJ1xcbn07XFxudmFyIE15UGFyc2VTID0ge307XFxudmFyIG15U2V0ID0gX215U2V0O1xcbmlmIChmaWxlRXhpc3QoX215U2V0LnBhcnNlUm91dGUpKSB7XFxuICAgIGV2YWwoJ3ZhciBwYXJzZUZpbGUgPScgKyBmZXRjaChfbXlTZXQucGFyc2VSb3V0ZSkpO1xcbiAgICBNeVBhcnNlUyA9IHBhcnNlRmlsZS5jb2RlcztcXG4gICAgbXlTZXQgPSBwYXJzZUZpbGUuc2V0dGluZ3M7XFxufVxcbmlmIChnZXRWYXIoXFxcImp4TmV3VlxcXCIsIFxcXCIwXFxcIikgIT0gdmVyc2lvbikge1xcbiAgICBwdXRWYXIoJ2NqQ2FjaGUnLCBfbXlTZXQuY2pjYWNoZSk7XFxuICAgIHB1dFZhcigneDVDYWNoZScsIF9teVNldC54NUNhY2hlKTtcXG4gICAgcHV0VmFyKCdvbGRDb25maWcnLCBfbXlTZXQub2xkQ29uZmlnKTtcXG4gICAgcHV0VmFyKCdwYXJzZVJvdXRlJywgX215U2V0LnBhcnNlUm91dGUpO1xcbiAgICB2YXIganhOZXdWID0gZmV0Y2goJ2h0dHBzOi8vZ2l0ZWUuY29tL0R1YW4tTmlhbi9Ebi9yYXcvbWFzdGVyL2hpa2Vydmlldy9QYXJzZVZlcnNpb24udHh0Jyk7XFxuICAgIGp4TmV3ViA9IGlzTmFOKGp4TmV3VikgPyB2ZXJzaW9uIDoganhOZXdWO1xcbiAgICBwdXRWYXIoJ2p4TmV3VicsIGp4TmV3Vik7XFxuICAgIHB1dFZhcignanhPbGRWJywgKGZldGNoKF9teVNldC5jamNhY2hlKS5tYXRjaCgvdmVyc2lvbiA9ICguKj8pOy8pICsgJycpLm1hdGNoKC9bMS05XVxcXFxkKlxcXFwuP1xcXFxkKi8pICsgJycpO1xcbn1cXG52YXIgcGFyc2VUaXRsZSA9IFtcXG4gICAgXFxcInl1bjE3MTdcXFwiLFxcbiAgICBcXFwiUGFuR3VcXFwiLFxcbiAgICBcXFwiRnVYaW5nXFxcIixcXG4gICAgXFxcImRlZmF1bHRQYXJzZVxcXCIsXFxuICAgIFxcXCLpgZPplb/ku5PlupPpgJrlhY1cXFwiLFxcbiAgICBcXFwiZGVmYXVsdFBhcnNlV2ViXFxcIixcXG4gICAgXFxcIk9L6Kej5p6QXFxcIixcXG4gICAgXFxcIk0zVThUVlxcXCIsXFxuXTtcXG4vL++8je+8je+8jT1eX149XFxuXFxuLy/mjqXlj6Porr7nva4uXFxuXFxudmFyIHNldFVybCA9IFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uI25vSGlzdG9yeSNcXFwiO1xcbnZhciBzZXRfc3dpdGNoID0gc2V0VXJsO1xcbnZhciBsYXp5ID0gYGV2YWwoJ3ZhciBjb25maWcgPScgKyBmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKSk7ZXZhbChmZXRjaChjb25maWcuY2opKTtheXRtUGFyc2UoaW5wdXQpYDtcXG5cXG4vL3ZhciBwYXJ3aXggPSBgdmFyIHl1cmw9J2h0dHBzOi8vZGFpbGkubWF5aXhpb25nZGkuY24vP3VybD0nO1JlZmVyZXInOiAnaHR0cHM6Ly93d3cubWF5aXhpb25nZGkuY24veXM/aWQ9JzsnaHR0cHM6Ly9kYWlsaS5tYXlpeGlvbmdkaS5jbi9hcGkucGhwJywgJ1JlZmVyZXInOidodHRwczovL2RhaWxpLm1heWl4aW9uZ2RpLmNuJztcXG4vLyDlhajmsJFodHRwczovL3BjdmlkZW9hbGl5dW4udGlhbnNoYW5ncmVuamlhbi5tZ3R2LmNvbS44OHd1bWEuY29tLz91cmw9XFxuXFxuLy/vvI3vvI3vvI3lpIcg55So77yN77yN77yNXFxuLypcXG4gKiDlvbHop4blt6XlnLrvvJogaHR0cHM6Ly95c2djLmNjL1xcbiAqIOaxn+a5ljogNTU155S15b2xIGh0dHBzOi8vd3d3LjU1NWR5Mi5jb20vcGhvbmUuaHRtbCDvvZwgMTfnnIsgaHR0cDovLzE3a2FueXkuY24vIGh0dHA6Ly9qaGppZXhpLjMwdnIuY24vP3VybD0g772cIGh0dHA6Ly9hcGkubWFpemltYWxsLmNvbS9pbmRleC5waHA/dXJsPVxcbiAqIOaxn+a5ljogaHR0cDovL3d3dy50aWFuc2h1eXVuLm5ldC9pbmRleC5waHAvdm9kL3BsYXkvaWQvNDQ4Mzc3L3NpZC8xL25pZC8xLmh0bWxcXG4gKiDmsZ/muZYyOiBodHRwOi8vOThoeWsuY24vaW5kZXgucGhwL3ZvZC9wbGF5L2lkLzcyODQxL3NpZC8xL25pZC8xLmh0bWxcXG4gKiDkurrkurrov7c6IGh0dHBzOi8vdmlwLnN1c291LnR2L3BsYXllci8/dXJsPSDvvZwgaHR0cHM6Ly93d3cubW9tZG0uY2MvXFxuICpcXG4gKiB3dWlnZW46IGh0dHBzOi8vd3d3LjVpZ2VuLmNvbS9kbXBsYXllci9wbGF5ZXIvP3VybD1cXG4gKiDlubLppa0o5Lq65Lq66L+3KTogaHR0cHM6Ly9qeC56dWkuY20vP3VybD1cXG4gKiBodHRwczovLzIuNjZtb3ZpZS50b3AvcGxheWVyLz91cmw9XFxuICpcXG4gKi9cXG5cXG5cXG52YXIgdG9vbHMgPSB7XFxuICAgIE1ENTogZnVuY3Rpb24oZGF0YSkge1xcbiAgICAgICAgZXZhbChnZXRDcnlwdG9KUygpKTtcXG4gICAgICAgIHJldHVybiBDcnlwdG9KUy5NRDUoZGF0YSkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkhleCk7XFxuICAgIH0sXFxuICAgIEFFUzogZnVuY3Rpb24odGV4dCwga2V5LCBpdiwgaXNFbmNyeXB0KSB7XFxuICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcbiAgICAgICAgdmFyIGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGtleSk7XFxuICAgICAgICB2YXIgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShpdik7XFxuICAgICAgICBpZiAoaXNFbmNyeXB0KSB7XFxuICAgICAgICAgICAgcmV0dXJuIENyeXB0b0pTLkFFUy5lbmNyeXB0KHRleHQsIGtleSwge1xcbiAgICAgICAgICAgICAgICBpdjogaXYsXFxuICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcXG4gICAgICAgICAgICB9KS50b1N0cmluZygpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBDcnlwdG9KUy5BRVMuZGVjcnlwdCh0ZXh0LCBrZXksIHtcXG4gICAgICAgICAgICBpdjogaXYsXFxuICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxuICAgICAgICB9KS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxuICAgIH0sXFxuICAgIC8vYXNjaWlcXG4gICAgbmV4dENoYXJhY3RlcjogZnVuY3Rpb24oYXNjaWlWYWx1ZSwgaykge1xcbiAgICAgICAgdmFyIHMgPSBhc2NpaVZhbHVlO1xcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocyArIGspO1xcbiAgICB9LFxcbiAgICAvL+WHr+aSklxcbiAgICBjYWVzYXJDaXBoZXI6IGZ1bmN0aW9uKHN0cmluZ1ZhbHVlLCBrKSB7XFxuICAgICAgICB2YXIgbmV3U3RyaW5nID0gXFxcIlxcXCI7XFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZ1ZhbHVlLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgbmV3U3RyaW5nICs9IHRoaXMubmV4dENoYXJhY3RlcihzdHJpbmdWYWx1ZVtpXS5jaGFyQ29kZUF0KCksIGspO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIG5ld1N0cmluZztcXG4gICAgfSxcXG4gICAgbm93RGF0ZTogZnVuY3Rpb24oKSB7XFxuICAgICAgICB2YXIgZGF0ZTEgPSBuZXcgRGF0ZSgpO1xcbiAgICAgICAgdmFyIGRhdGVTdHIgPSBcXFwiXFxcIjtcXG4gICAgICAgIGlmIChkYXRlMSkge1xcbiAgICAgICAgICAgIGRhdGVTdHIgPSBkYXRlMS5nZXRGdWxsWWVhcigpO1xcbiAgICAgICAgICAgIHZhciBtb250aCA9IGRhdGUxLmdldE1vbnRoKCkgKyAxO1xcbiAgICAgICAgICAgIHZhciBkYXkgPSBkYXRlMS5nZXREYXRlKCk7XFxuICAgICAgICAgICAgaWYgKG1vbnRoIDwgMTApIHtcXG4gICAgICAgICAgICAgICAgZGF0ZVN0ciArPSBcXFwiLTBcXFwiICsgbW9udGg7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgZGF0ZVN0ciArPSBcXFwiLVxcXCIgKyBtb250aDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGRheSA8IDEwKSB7XFxuICAgICAgICAgICAgICAgIGRhdGVTdHIgKz0gXFxcIi0wXFxcIiArIGRheTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBkYXRlU3RyICs9IFxcXCItXFxcIiArIGRheTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gZGF0ZVN0cjtcXG4gICAgfSxcXG4gICAgdG9KU09OOiBmdW5jdGlvbihqc29uKSB7XFxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoanNvbiwgKGtleSwgdmFsdWUpID0+IHtcXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIDQpO1xcbiAgICB9XFxufTtcXG5cXG52YXIgUGFyc2VTID0ge307XFxudmFyIG9yaWdpbmFsUGFyc2VTID0ge1xcbiAgICAvL3VwZGF0ZURhdGU6IHVwZGF0ZURhdGUsXFxuICAgIENpdHlJUDogJ2h0dHA6Ly9wdi5zb2h1LmNvbS9jaXR5anNvbicsXFxuICAgIHBjVUE6ICdVc2VyLUFnZW50QE1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjBcXFxc77ybXFxcXO+8myBXT1c2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzQ5LjAuMjYyMy44NyBTYWZhcmkvNTM3LjM2JyxcXG4gICAgY2FjaGVNM3U4OiBmdW5jdGlvbih2VXJsLCByZWYpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIG0zdTggPSBmZXRjaCh2VXJsLCB7fSk7XFxuICAgICAgICAgICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL3ZpZGVvcy5tM3U4JywgbTN1OCk7XFxuICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgcmV0dXJuICdmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9jYWNoZS92aWRlb3MubTN1OCMnO1xcbiAgICB9LFxcbiAgICBkZWZhdWx0UGFyc2U6IGZ1bmN0aW9uKHVybCx0aW1lb3V0KSB7XFxuICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYih1cmwsdGltZW91dCk7XFxuICAgIH0sXFxuICAgIGRlZmF1bHRQYXJzZVdlYjogZnVuY3Rpb24ocGxheVVybCx0aW1lb3V0KSB7XFxuICAgICAgICAvLyBsb2coJ+S8oOWFpWRlZmF1bHRQYXJzZVdlYueahOi2heaXtjonK3RpbWVvdXQpO1xcbiAgICAgICAgdGltZW91dCA9IHBhcnNlSW50KHRpbWVvdXQpfHw1MDAwO1xcbiAgICAgICAgY29uc3Qge2xhenlQYXJzZX0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9nbG9iYWxQYXJzZT9ydWxlPemBk+mVv+S7k+W6k1BybycpO1xcbiAgICAgICAgbGV0IHg1UGxheT1sYXp5UGFyc2UocGxheVVybCx0aW1lb3V0KTtcXG4gICAgICAgIGlmKHR5cGVvZih4NVBsYXkpPT1cXFwidW5kZWZpbmVkXFxcInx8IXg1UGxheSl7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+mBk+mVv+S7k+W6k+ino+aekOWksei0pVxcXCJcXG4gICAgICAgIH1cXG4gICAgICAgIC8v5Lul5LiL5Luj56CB5bey57uP56e75Yqo5Yiw5LuT5bqT5YWN5ZeF5o6i5LqGLOi/memHjOmdoueahOWcsOWdgOaXoOazlei/m+ihjOWQjue7reWKoOW3pTtcXG4gICAgICAgIC8vIGlmKHBsYXlVcmwuaW5jbHVkZXMoXFxcIm1ndHYuY29tXFxcIikmJiEvVXNlci1BZ2VudC8udGVzdChwbGF5VXJsKSl7XFxuICAgICAgICAvLyAgICAgeDVQbGF5Kz1cXFwiO2dldDt7VXNlci1BZ2VudEBNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wKX1cXFwiO1xcbiAgICAgICAgLy8gfVxcbiAgICAgICAgbGV0IHRpcHM9L3g1UnVsZS8udGVzdCh4NVBsYXkpP1xcXCJ4NeWFjeWXheW8gOWni1xcXCI6XFxcIuaegemAn+WFjeWXheaOouWujOavle+8jOWcsOWdgDpcXFwiKygvXmh0dHAvLnRlc3QoeDVQbGF5KT94NVBsYXk6J+mdnuato+W4uOmTvuaOpScpO1xcbiAgICAgICAgbG9nKHRpcHMpO1xcbiAgICAgICAgcmV0dXJuIHg1UGxheTtcXG4gICAgfSxcXG4gICAgbWFvc3M6IGZ1bmN0aW9uKGp4dXJsLCByZWYpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgaWYgKHJlZikge1xcbiAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IHJlcXVlc3Qoanh1cmwsIHtcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6IHJlZlxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IHJlcXVlc3Qoanh1cmwpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB1cmwgPSBkZWNvZGVVUklDb21wb25lbnQodG9vbHMuQUVTKGh0bWwuc3BsaXQoJ1xcXCJ1cmxcXFwiOlxcXCInKVsxXS5zcGxpdCgnXFxcIicpWzBdLCBcXFwiZHZ5WVJRbG5QUkNNZFFTZVxcXCIsIGh0bWwuc3BsaXQoJ2J0X3Rva2VuID0gXFxcIicpWzFdLnNwbGl0KCdcXFwiJylbMF0pKTtcXG4gICAgICAgICAgICByZXR1cm4gdXJsO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiAnJztcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgTExROiBmdW5jdGlvbihqeHVybCkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB2YXIgYXBpID0ganh1cmwuc3BsaXQoJz91cmw9JylbMF0gKyBcXFwiYXBpLnBocFxcXCI7XFxuICAgICAgICAgICAgdmFyIGI2NGlkID0gYmFzZTY0RW5jb2RlKGp4dXJsLnNwbGl0KCd1cmw9JylbMV0pO1xcbiAgICAgICAgICAgIHZhciBwYXJzZWlkID0gdG9vbHMuY2Flc2FyQ2lwaGVyKGI2NGlkLCAtMSk7XFxuICAgICAgICAgICAgdmFyIGpzb24gPSBKU09OLnBhcnNlKHJlcXVlc3QoYXBpLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzoganh1cmxcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXFxuICAgICAgICAgICAgICAgIGJvZHk6ICd1cmw9JyArIHBhcnNlaWRcXG4gICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgdXJsID0gKGpzb24uY29kZSA9PSAyMDAgPyBiYXNlNjREZWNvZGUodG9vbHMuY2Flc2FyQ2lwaGVyKGpzb24udXJsLCAtMSkpIDogJycpO1xcbiAgICAgICAgICAgIHJldHVybiB1cmw7XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgcmV0dXJuICcnO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBQYW5HdTogZnVuY3Rpb24odmlwVXJsLCBkYXRhKSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHZhciByZWYgPSAnaHR0cHM6Ly93d3cucGFuZ3VqaWV4aS5jb20vJztcXG4gICAgICAgICAgICB2YXIgcGFyc2UgPSAnaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L2ppZXhpLz91cmw9JyArIHZpcFVybDtcXG4gICAgICAgICAgICB2YXIgYXBpID0gJ2h0dHBzOi8vcGFuZ3VhcGkubnRyeWpkLm5ldC9qaWV4aS9hcGkucGhwJztcXG4gICAgICAgICAgICAvL3ZhciByZWYgPSAnaHR0cHM6Ly94bXlzdHYuY29tLyc7XFxuICAgICAgICAgICAgLy92YXIgcGFyc2UgPSAnaHR0cHM6Ly93d3cuOTlrcHcuY29tL3Bhbmd1L2luZGV4LnBocD91cmw9JyArIHRhaWxVcmw7XFxuICAgICAgICAgICAgLy92YXIgYXBpID0gJ2h0dHBzOi8vd3d3Ljk5a3B3LmNvbS9wYW5ndS9hcGkucGhwJztcXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xcbiAgICAgICAgICAgICAgICByZWYgPSBkYXRhWzBdO1xcbiAgICAgICAgICAgICAgICBwYXJzZSA9IGRhdGFbMV07XFxuICAgICAgICAgICAgICAgIGFwaSA9IGRhdGFbMl07XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciBUaW1lID0gKE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSAqIDEpLnRvU3RyaW5nKCk7XFxuICAgICAgICAgICAgdmFyIHVybCA9IEpTT04ucGFyc2UocmVxdWVzdChhcGksIHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiBwYXJzZVxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBib2R5OiAndXJsPScgKyB2aXBVcmwgKyAnJnJlZmVyZXI9JyArIGJhc2U2NEVuY29kZShwYXJzZSkgKyAnJnJlZj0xJnRpbWU9JyArIFRpbWUgKyAnJnR5cGU9Jm90aGVyPScgKyBiYXNlNjRFbmNvZGUodmlwVXJsKSArICcmaW9zPTAnLFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgIH0pKS51cmw7XFxuICAgICAgICAgICAgcmV0dXJuIHVybDtcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIHl1bjE3MTc6IGZ1bmN0aW9uICh2aXBVcmwpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIGlzeWsgPSB2aXBVcmwuaW5kZXhPZihcXFwieW91a3VcXFwiKTtcXG4gICAgICAgICAgICB2YXIgcmVmID0gXFxcImh0dHBzOi8vd3d3LjE3MTd5dW4uY29tL2p4L3R5LnBocD91cmw9XFxcIiArIHZpcFVybDtcXG4gICAgICAgICAgICB2YXIgcGFyc2UgPSBcXFwiaHR0cHM6Ly8xNzE3Lm50cnlqZC5uZXQvMDUyNi8/dXJsPVxcXCIgKyB2aXBVcmw7XFxuICAgICAgICAgICAgdmFyIGFwaSA9IFxcXCJodHRwczovLzE3MTcubnRyeWpkLm5ldC8wNTI2L2FwaS5waHBcXFwiO1xcbiAgICAgICAgICAgIHJldHVybiBpc3lrID09PSAtMSA/IHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmLCBwYXJzZSwgYXBpXSkgOiB0aGlzLlBhbkd1KHZpcFVybCwgW3JlZiArIFxcXCIsdmlwOlxcXCIsIHBhcnNlICsgXFxcIix2aXA6XFxcIiwgYXBpXSk7XFxuICAgICAgICB9XFxuICAgICAgICBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiXFxcIjtcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgT0vop6PmnpA6J2h0dHBzOi8vb2tqeC5jYy8/dXJsPScsXFxuICAgIE0zVThUVjonaHR0cHM6Ly9qeC5tM3U4LnR2L2ppZXhpLz91cmw9JyxcXG4gICAg6YGT6ZW/5LuT5bqT6YCa5YWNOmZ1bmN0aW9uICh1cmwsdGltZW91dCl7XFxuICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYih1cmwsdGltZW91dCk7XFxuICAgIH0sXFxuICAgIEZ1WGluZzogZnVuY3Rpb24odmlwVXJsKSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIC8vaWYodmlwVXJsLmluZGV4T2YoJ3YueW91a3UnKSE9LTEpe1xcbiAgICAgICAgICAgIC8vICAgIHZpcFVybCA9IChKU09OLnBhcnNlKHJlcXVlc3QodmlwVXJsLCB7cmVkaXJlY3Q6ZmFsc2UsIHdpdGhIZWFkZXJzOnRydWV9KSkuaGVhZGVycy5sb2NhdGlvbiArICcnKS5yZXBsYWNlKC9cXFxcPy4qLywnJyk7XFxuICAgICAgICAgICAgLy99XFxuICAgICAgICAgICAgdmFyIHJlZiA9ICdodHRwczovL2p4Lnh1ZXR1aWd1YW5nLmNuL2ppZXhpLz91cmw9JyArIHZpcFVybDtcXG4gICAgICAgICAgICB2YXIgcGFyc2UgPSByZWY7XFxuICAgICAgICAgICAgdmFyIGFwaSA9ICdodHRwczovL2p4Lnh1ZXR1aWd1YW5nLmNuL2ppZXhpL2FwaXVfZngucGhwJztcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5QYW5HdSh2aXBVcmwsIFtyZWYsIHBhcnNlLCBhcGldKTtcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxuICAgICAgICB9XFxuICAgIH0sXFxufTtcXG5cXG5PYmplY3QuYXNzaWduKFBhcnNlUywgb3JpZ2luYWxQYXJzZVMsIE15UGFyc2VTKTtcXG4vL+imhueblumhuuW6j++8jOesrOS4ieS4quimhuebluesrOS6jOS4queEtuWQjuimhuebluesrOS4gOS4qlxcblxcblxcbmZ1bmN0aW9uIGF5dG1QYXJzZSh2aXBVcmwsc3RyVGl0bGUsdGltZW91dCxwbGF5VXJsKSB7XFxuICAgIHN0clRpdGxlID0gc3RyVGl0bGV8fCcnO1xcbiAgICBwbGF5VXJsPXBsYXlVcmx8fCcnO1xcbiAgICAvLyBsb2coJ+S8oOWFpWF5dG1QYXJzZeeahOi2heaXtjonK3RpbWVvdXQpO1xcbiAgICB0aW1lb3V0ID0gcGFyc2VJbnQodGltZW91dCl8fDUwMDA7XFxuICAgIGlmKCFzdHJUaXRsZSl7XFxuICAgICAgICB2YXIgaG9zdDtcXG4gICAgICAgIHRyeXtcXG4gICAgICAgICAgICBob3N0ID0gdmlwVXJsLm1hdGNoKC9cXFxcLiguKj8pXFxcXC8vKVsxXTtcXG4gICAgICAgIH1jYXRjaChlKXtcXG4gICAgICAgICAgICBpZighL15odHRwLy50ZXN0KHBsYXlVcmwpKXtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCLmlq3mj5LosIPnlKjlpLHotKXvvIFcXFxcbumdnuato+W4uOeahHZpcOato+eJiOWcsOWdgOS4lOacquivhuWIq+WOn+ermeino+aekOaSreaUvuWcsOWdgFxcXCI7XFxuICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZVMu6YGT6ZW/5LuT5bqT6YCa5YWNKHBsYXlVcmwsdGltZW91dClcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICAvL2xvZyhob3N0KTtcXG4gICAgICAgIHN3aXRjaCAobXlTZXQucWp1KSB7XFxuICAgICAgICAgICAgY2FzZSBcXFwi6buY6K6kXFxcIjpcXG4gICAgICAgICAgICAgICAgc3dpdGNoIChob3N0KSB7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJxcS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnR4O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwiaXFpeWkuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5xeTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInlvdWt1LmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQueWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJhbGl6eVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQuYWw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJtZ3R2LmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQubWc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJiaWxpYmlsaS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LmJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwic29odS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnNoO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwiaXhpZ3VhLmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQueGc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJwcHR2LmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQucHA7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJtaWd1dmlkZW8uY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5taTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcImxlLmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQubGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCIxOTA1LmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQub25lO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwiZnVuLnR2XFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5mdW47XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0Lm90aDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5xanU7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgfVxcbiAgICB9ZWxzZXtcXG4gICAgICAgIGxvZygn5q615o+S5omn6KGM5a6a5ZCR6Kej5p6Q57q/6Lev5aS0Oicrc3RyVGl0bGUpO1xcbiAgICAgICAgc3RyID0gc3RyVGl0bGU7XFxuICAgIH1cXG4gICAgaWYgKHR5cGVvZiBQYXJzZVNbc3RyXSA9PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgICBpZigv6YCa5YWNLy50ZXN0KHN0cikpe1xcbiAgICAgICAgICAgIHJldHVybiBQYXJzZVNbc3RyXSh2aXBVcmwsdGltZW91dCk7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgdXJsID0gUGFyc2VTW3N0cl0odmlwVXJsKTtcXG4gICAgICAgIGlmICgvXlxcXFwvLy50ZXN0KHVybCkpIHtcXG4gICAgICAgICAgICB1cmwgPSAnaHR0cHM6JyArIHVybFxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKC89aHR0cC8udGVzdCh1cmwpKSB7XFxuICAgICAgICAgICAgdXJsID0gLyZ1cmw9Ly50ZXN0KHVybCkgPyB1cmwgOiAnaHR0cCcgKyBkZWNvZGVVUklDb21wb25lbnQodXJsLnNwbGl0KCc9aHR0cCcpWzFdKTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8qaWYodXJsLm1hdGNoKC9tZ3R2LmNvbS9nKT09J21ndHYuY29tJyl7XFxuICAgICAgICAgICAgdXJsID0gdXJsICsgJzt7UmVmZXJlckBodHRwczovL3d3dy5tZ3R2LmNvbX0nO1xcbiAgICAgICAgfSBlbHNlICovXFxuICAgICAgICBpZiAoL1xcXFwuZmx2Ly50ZXN0KHVybCkpIHtcXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyAnO3tVc2VyLUFnZW50QGFwcCYmUmVmZXJlckAnICsgdmlwVXJsICsgJ30nO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHVybCA9PT0gJycgfHwgdXJsID09PSB2aXBVcmwpIHtcXG4gICAgICAgICAgICByZXR1cm4gdmlwVXJsO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gdXJsICsgJyNpc1ZpZGVvPXRydWUjJztcXG4gICAgICAgIH1cXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgUGFyc2VTW3N0cl0gPT0gJ3N0cmluZycmJlBhcnNlU1tzdHJdLm1hdGNoKC9odHRwLio/PS8pKSB7XFxuICAgICAgICAvLyBsb2coXFxcIuaWreaPkuW8gOWni+mAmueUqOaJp+ihjOWFjeWXhSBkZWZhdWx0UGFyc2VXZWI6XFxcIit0aW1lb3V0KTtcXG4gICAgICAgIC8vbG9nKFxcXCLpu5jorqR4NVxcXCIrUGFyc2VTLmRlZmF1bHRQYXJzZVdlYik7XFxuICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYj9QYXJzZVMuZGVmYXVsdFBhcnNlV2ViKChQYXJzZVNbc3RyXXx8c3RyKSArIHZpcFVybCx0aW1lb3V0KTooUGFyc2VTW3N0cl18fHN0cikgKyB2aXBVcmw7XFxuICAgIH0gZWxzZSBpZih0eXBlb2Yoc3RyKT09PSdzdHJpbmcnJiZzdHIubGVuZ3RoPjEmJih0eXBlb2YgUGFyc2VTW3N0cl09PSd1bmRlZmluZWQnfHwhUGFyc2VTW3N0cl0pJiYhL15odHRwLy50ZXN0KHN0cikpe1xcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+ivt+i/m+ihjOaWreaPkumFjee9rizmjqjojZDmi4nlj5bpgZPplb/nsr7pgIkhXFxcXG7mo4DmtYvliLDml6DmlYjnmoTop6PmnpDphY3nva46JytzdHI7XFxuICAgIH1lbHNlIHtcXG4gICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlKHN0ciArIHZpcFVybCx0aW1lb3V0KTtcXG4gICAgfVxcbn1cXG5cXG52YXIgcGxheVBhcnNlID0ge1xcbiAgICBwbGF5ZXJfeHg6IGZ1bmN0aW9uKGp1cmwsIExhYmVsKSB7XFxuICAgICAgICByZXR1cm4gJChqdXJsKS5sYXp5UnVsZSgoaykgPT4ge1xcbiAgICAgICAgICAgIHZhciBqc1VybCA9IEpTT04ucGFyc2UoZmV0Y2goZ2V0VmFyKCdvbGRDb25maWcnKSkpLmNqO1xcbiAgICAgICAgICAgIHZhciBMYWJlbCA9IGs7XFxuICAgICAgICAgICAgdmFyIGZhID0gWydsZXR2JywgJ3BwdHYnLCAncXEnLCAneW91a3UnLCAncWl5aScsICdpcWl5aScsICdtZ3R2JywgJ2JpbGliaWxpJywgJ3NvaHUnLCAnbWlndScsICdtMTkwNScsICd2aXAnXTtcXG4gICAgICAgICAgICB2YXIgaHRtbCA9IHBhcnNlRG9tKHJlcXVlc3QoaW5wdXQpLCBMYWJlbCk7XFxuICAgICAgICAgICAgZXZhbChodG1sLnJlcGxhY2UoL3BsYXllcl8uKj89ey8sICdwZGF0YT17JykpO1xcbiAgICAgICAgICAgIGV2YWwoZmV0Y2goanNVcmwpKTtcXG4gICAgICAgICAgICBpZiAocGRhdGEudXJsLnN1YnN0cigwLCA4KS5tYXRjaCgvSlQuLkpULi4vKSkge1xcbiAgICAgICAgICAgICAgICBwZGF0YS51cmwgPSBiYXNlNjREZWNvZGUocGRhdGEudXJsKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHBkYXRhLnVybC5zdWJzdHIoMCwgOCkubWF0Y2goLyUuLiUuLi8pKSB7XFxuICAgICAgICAgICAgICAgIHBkYXRhLnVybCA9IHVuZXNjYXBlKHBkYXRhLnVybCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChmYS5pbmNsdWRlcyhwZGF0YS5mcm9tKSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gYXl0bVBhcnNlKHBkYXRhLnVybCk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBkYXRhLnVybCArICcjaXNWaWRlbz10cnVlIyc7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgTGFiZWwpXFxuICAgIH1cXG59O1xcblxcbmZ1bmN0aW9uIHNhdmVCdXR0b24oY29udGVudCkge1xcbiAgICB2YXIgZGF0YSA9IGNvbnRlbnQuc3BsaXQoJ+KYheKYheKYhScpO1xcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDIpIHtcXG4gICAgICAgIHZhciBfZHQgPSBwYXJzZVBhc3RlKGRhdGFbMF0pO1xcbiAgICAgICAgY29udGVudCA9IF9kdC5zdWJzdHIoMCwgNikgIT09ICdlcnJvcjonID8gX2R0IDogJyc7XFxuICAgIH1cXG4gICAgZGF0YSA9IGNvbnRlbnQuc3BsaXQoJ+KYhScpO1xcbiAgICB2YXIgdHlwZSA9IGRhdGFbMF07XFxuICAgIHZhciBhcnJMaXN0ID0gW107XFxuICAgIHZhciBvYmpDb2RlID0ge307XFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDIgJiYgZGF0YVswXSAhPT0gJ+ebtOmTvicpIHtcXG4gICAgICAgIHZhciBvYmpLZXkgPSBkYXRhWzFdO1xcbiAgICAgICAgdmFyIG9ialZhbHVlID0gZGF0YVsyXTtcXG4gICAgICAgIGlmICh0eXBlID09PSAnTXlQYXJzZVMnKSB7XFxuICAgICAgICAgICAgb2JqVmFsdWUgPSBiYXNlNjREZWNvZGUob2JqVmFsdWUpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKG9ialZhbHVlLnNwbGl0KCdmdW5jdGlvbicpLmxlbmd0aCA+IDEpIHtcXG4gICAgICAgICAgICBldmFsKCdvYmpWYWx1ZT0nICsgb2JqVmFsdWUpO1xcbiAgICAgICAgfVxcbiAgICAgICAgYXJyTGlzdC5zcGxpY2UoMCwgMCwgb2JqS2V5KTtcXG4gICAgICAgIG9iakNvZGVbb2JqS2V5XSA9IG9ialZhbHVlO1xcblxcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICfnm7Tpk74nKSB7XFxuICAgICAgICBhcnJMaXN0ID0gZGF0YTtcXG4gICAgICAgIGFyckxpc3Quc3BsaWNlKDAsIDEpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgYXJyTGlzdCA9IG51bGw7XFxuICAgIH1cXG4gICAgaWYgKGFyckxpc3QgIT0gbnVsbCkge1xcbiAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXG4gICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcbiAgICAgICAgYXJyTGlzdCA9IGFyckxpc3QuY29uY2F0KGpzb24udGl0bGUpO1xcbiAgICAgICAganNvbi50aXRsZSA9IEFycmF5LmZyb20obmV3IFNldChhcnJMaXN0KSk7XFxuICAgICAgICBPYmplY3QuYXNzaWduKGpzb24uY29kZXMsIG9iakNvZGUpO1xcbiAgICAgICAgaWYgKHR5cGUgPT09ICfmtYvor5UnKSB7XFxuICAgICAgICAgICAgZXZhbCgndmFyIGNvbmZpZyA9JyArIGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpKTtcXG4gICAgICAgICAgICBldmFsKGZldGNoKGNvbmZpZy5jaikpO1xcbiAgICAgICAgICAgIHJldHVybiBQYXJzZVNbZGF0YVsxXV0oZGF0YVsyXSlcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5bey5L+d5a2Y5YaF5a65XFxcIjtcXG4gICAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/ml6Dms5Xor4bliKvov5nkuKrlhoXlrrnlkaJcXFwiXFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gbXpQb3B1cCgpIHtcXG4gICAgaWYgKGdldFZhcihcXFwiaWprLXR4XFxcIiwgXFxcIlxcXCIpID09IFxcXCIxXFxcIikge1xcbiAgICAgICAgc2V0SXRlbShcXFwidGl4aW5nXFxcIiwgXFxcIjFcXFwiKVxcbiAgICAgICAgY2xlYXJWYXIoXFxcImlqay10eFxcXCIpXFxuICAgIH1cXG4gICAgaWYgKGdldEl0ZW0oXFxcInRpeGluZ1xcXCIsIFxcXCJcXFwiKSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgY29uZmlybSh7XFxuICAgICAgICAgICAgdGl0bGU6ICflhY3otKPlo7DmmI4nLFxcbiAgICAgICAgICAgIGNvbnRlbnQ6ICfmnKznqIvluo/kuI3mj5Dkvpvop4bpopHop6PmnpDmnI3liqFcXFxcbuaJgOacieWGheWuueWdh+S7jueUqOaIt+WIhuS6q+S4reaUtumbhlxcXFxu5LuF5L6b5rWL6K+V5ZKM5a2m5Lmg5Lqk5rWBXFxcXG5cXFxcbuehruWumuWNs+iupOWPr++8jOS4jeWGjeaPkOmGkicsXFxuICAgICAgICAgICAgY29uZmlybTogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dFZhcihcXFwiaWprLXR4XFxcIiwgXFxcIjFcXFwiKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v54K55Ye75LqG56Gu6K6kXFxcIlxcblxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICB9XFxufVxcbmlmIChnZXRJdGVtKCd1cGRhdGVEYXRlJykgIT0gdXBkYXRlRGF0ZSkge1xcbiAgICB2YXIgZnVuY3Rpb25Db2RlID0gc2F2ZUJ1dHRvbiArIG16UG9wdXA7XFxuICAgIHNldEl0ZW0oJ215RnVuY3Rpb24nLCBmdW5jdGlvbkNvZGUpO1xcbiAgICBzZXRJdGVtKCd1cGRhdGVEYXRlJywgdXBkYXRlRGF0ZSk7XFxufVxcbnZhciBiakl0ZW0gPSB7XFxuICAgIGhmUGx1Z2luOiBmdW5jdGlvbihwYXJzZVJvdXRlKSB7XFxuICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcbiAgICAgICAgICAgIGlmIChmaWxlRXhpc3QoaykpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGNqY2FjaGUgPSBnZXRWYXIoJ2NqQ2FjaGUnKTtcXG4gICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChrKSk7XFxuICAgICAgICAgICAgICAgIGpzb24uc2V0dGluZ3MuY2ogPSBjamNhY2hlO1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoaywgJC5zdHJpbmdpZnkoanNvbikpO1xcbiAgICAgICAgICAgICAgICB2YXIgb2xkUm91dGUgPSBnZXRWYXIoJ29sZENvbmZpZycpO1xcbiAgICAgICAgICAgICAgICB2YXIgb2xkQ29uZmlnID0ganNvbi5zZXR0aW5ncztcXG4gICAgICAgICAgICAgICAgb2xkQ29uZmlnLmNqID0gY2pjYWNoZTtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKG9sZFJvdXRlLCAkLnN0cmluZ2lmeShvbGRDb25maWcpKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5oGi5aSN5oiQ5YqfJztcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6ZyA6KaB5YWI5ouJ5Y+W5YiX6KGoJ1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHBhcnNlUm91dGUpXFxuICAgIH0sXFxuICAgIHB1bGxDb2RlOiBmdW5jdGlvbihrKSB7XFxuICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcbiAgICAgICAgICAgIHZhciBwdWxsTW9kZSA9IGtbMF07XFxuICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBrWzFdO1xcbiAgICAgICAgICAgIHZhciBwYXJzZUZpbGUgPSBmZXRjaChwYXJzZVJvdXRlKTtcXG4gICAgICAgICAgICBpZiAoIXBhcnNlRmlsZSkge1xcbiAgICAgICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSBmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKTtcXG4gICAgICAgICAgICAgICAgc2V0dGluZ3MgPSAhc2V0dGluZ3MgPyB7fSA6IEpTT04ucGFyc2Uoc2V0dGluZ3MpO1xcbiAgICAgICAgICAgICAgICB2YXIganNvbiA9IHt9O1xcbiAgICAgICAgICAgICAgICBqc29uLnNldHRpbmdzID0gc2V0dGluZ3M7XFxuICAgICAgICAgICAgICAgIGpzb24udGl0bGUgPSBbXTtcXG4gICAgICAgICAgICAgICAganNvbi5jb2RlcyA9IHt9O1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgcGFyc2VGaWxlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIHBhcnNlVGl0bGUgPSBbXTtcXG4gICAgICAgICAgICB2YXIgcGFyc2VDb2RlPXt9O1xcbiAgICAgICAgICAgIHZhciBjakxpbmsgPSBnZXRWYXIoJ3BsdWdpbkxpbmsnKTtcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICBpZigvQGJhc2U2NDpcXFxcL1xcXFwvLy50ZXN0KGNqTGluaykpe1xcbiAgICAgICAgICAgICAgICAgICAgZXZhbChiYXNlNjREZWNvZGUoY2pMaW5rLnNwbGl0KCdAYmFzZTY0Oi8vJylbMV0pKTtcXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoL+aPkuS7tuWQjS8udGVzdChjakxpbmspKXtcXG4gICAgICAgICAgICAgICAgICAgIGxldCByZWFsTGluayA9IGNqTGluay5zcGxpdCgn5o+S5Lu25ZCNJylbMF0ucmVwbGFjZSgvW1xcXFxzXS9nLCcnKTtcXG4gICAgICAgICAgICAgICAgICAgIGxvZygn6Kej5p6Q5LqR5Ymq5YiH5p2/OicrcmVhbExpbmspO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHlQYXN0ZSA9IHBhcnNlUGFzdGUocmVhbExpbmspO1xcbiAgICAgICAgICAgICAgICAgICAgaWYoL0BiYXNlNjQ6XFxcXC9cXFxcLy8udGVzdCh5UGFzdGUpKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKGJhc2U2NERlY29kZSh5UGFzdGUuc3BsaXQoJ0BiYXNlNjQ6Ly8nKVsxXSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgUGFyc2VTPT09J3VuZGVmaW5lZCcpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aLieWPluS4qum4oeavm+aPkuS7tizph4zpnaLov55QYXJzZVPlr7nosaHpg73msqHmnIkhJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/puKHmr5vmj5Lku7bmiafooYzmiqXplJk6XFxcXG4nK2UubWVzc2FnZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pyq6IO96K+G5Yir5LqR5Ymq5YiH5p2/5Lit55qE5YaF5a65OlxcXFxuJyt5UGFzdGUuc3Vic3RyaW5nKDAsMTAwKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjakxpbmsgPT09ICdR56WeJykge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGppZXhpID0gZmV0Y2goJ2hpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0Jykuc3BsaXQoJ1xcXFxuJyk7XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgaW4gamlleGkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGU9amlleGlbaV0uc3BsaXQoJyYmJylbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGU9amlleGlbaV0uc3BsaXQoJyYmJylbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVbdGl0bGVdPWNvZGU7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy8gfWVsc2UgaWYoL14jW2EtekEtWjAtOV17MiwxMH0kLy50ZXN0KGNqTGluaykpey8v56aP5Yip5Y+j5LukMuWIsDEw5L2NXFxuICAgICAgICAgICAgICAgIGVsc2UgaWYoL14jW1xcXFxTXXsyLDEwfSQvLnRlc3QoY2pMaW5rKSl7Ly/npo/liKnlj6Pku6Qy5YiwMTDkvY3ku7vmhI/pnZ7nqbrlrZfnrKbkuLJcXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHt0YXNrQ2FsbCwgdGFza1J1bix0YXNrUmVxfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3Rhc2tDYWxsP3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAvLyBsb2coJ+W8gOWni+aJp+ihjOS7u+WKoeS7k+W6k+iOt+WPluaWreW/teaPkuS7tuemj+WIqeWPo+S7pCcpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHRhc2tDYWxsKDE3LCdEbkZ1bGknLFtjakxpbmtdKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldCA9IEpTT04ucGFyc2UocmVzdWx0LnJlc3VsdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKHJldCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmV0Lm9wdD09PSdlcnJvcicpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8vJytyZXQubXNnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHJldC5vcHQ9PT0ndXJsJyl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBodG1sID0gZmV0Y2gocmV0LnJldCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnIgPSBodG1sLmluY2x1ZGVzKCdodHRwJyk/IGh0bWw6YmFzZTY0RGVjb2RlKGh0bWwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgamlleGkgPSBhcnIubWF0Y2goL1tcXFxcU10qPywuKj9bXFxcXHNdL2cpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpIGluIGppZXhpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGU9amlleGlbaV0uc3BsaXQoJywnKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlPWppZXhpW2ldLnNwbGl0KCcsJylbMV0uc3BsaXQoXFxcIlxcXFxuXFxcIilbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlLnB1c2godGl0bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb2RlW3RpdGxlXT1jb2RlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocmV0Lm9wdD09PSdqeCcpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigvW1xcXFxTXSo/LGh0dHBbXFxcXFNdLy50ZXN0KHJldC5yZXQpKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IHJldC5yZXQuc3BsaXQoJywnKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gcmV0LnJldC5zcGxpdCgnLCcpWzFdLnNwbGl0KCdcXFxcbicpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09Y29kZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoL15odHRwLy50ZXN0KHJldC5yZXQpKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IGNqTGluay5zcGxpdCgnIycpWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSByZXQucmV0LnNwbGl0KCdcXFxcbicpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09Y29kZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pyq55+l55qE56aP5YipOlxcXFxuJytyZXQucmV0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocmV0Lm9wdD09PSd2aXBKeCcpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBjakxpbmsuc3BsaXQoJyMnKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSByZXQucmV0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2coY29kZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUucHVzaCh0aXRsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09L2Z1bmN0aW9uLy50ZXN0KGNvZGUpP2V2YWwoY29kZSk6Y29kZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5LuT5bqT6Z2e5pyA5paw54mI5oiW6ICF56aP5Yip56S+5Yqf6IO95byA5Y+R5LitJ1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihjakxpbms9PT0n5pat5o+SJyl7XFxuICAgICAgICAgICAgICAgICAgICBldmFsKGZldGNoKFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzXFxcIikpO1xcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZT1PYmplY3Qua2V5cyhQYXJzZVMpO1xcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZigvXmhpa2VyOlxcXFwvXFxcXC98XmZpbGU6XFxcXC9cXFxcL3xeaHR0cHxeXFxcXC9zdG9yYWdlXFxcXC98XlxcXFwvc2RjYXJkXFxcXC8vLnRlc3QoY2pMaW5rKSl7XFxuICAgICAgICAgICAgICAgICAgICBpZigvXlxcXFwvc3RvcmFnZVxcXFwvfF5cXFxcL3NkY2FyZFxcXFwvLy50ZXN0KGNqTGluaykpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNqTGluayA9ICdmaWxlOi8vJytjakxpbms7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBldmFsKGZldGNoKGNqTGluaykpO1xcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZT1PYmplY3Qua2V5cyhQYXJzZVMpO1xcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mi4nlj5blj6Pku6TmnInor68nXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIGxvZyhlLm1lc3NhZ2UpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIganhKdWRnZSA9IHR5cGVvZiBQYXJzZVMgPT0gJ29iamVjdCc7XFxuICAgICAgICAgICAgdmFyIGxiSnVkZ2UgPSB0eXBlb2YocGFyc2VUaXRsZSkgPT0gJ29iamVjdCc7XFxuICAgICAgICAgICAgaWYgKGp4SnVkZ2UgfHwgbGJKdWRnZSkge1xcbiAgICAgICAgICAgICAgICAvLyBpZiAocHVsbE1vZGUgPT09ICfliJfooagnKSB7XFxuICAgICAgICAgICAgICAgIC8vICAgICBpZiAoIWxiSnVkZ2UpIHtcXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBwYXJzZVRpdGxlID0gT2JqZWN0LmtleXMoUGFyc2VTKTtcXG4gICAgICAgICAgICAgICAgLy8gICAgIH1cXG4gICAgICAgICAgICAgICAgLy8gICAgIHZhciBuZXdQYXJzZVRpdGxlID0ganNvbi50aXRsZS5jb25jYXQocGFyc2VUaXRsZSk7XFxuICAgICAgICAgICAgICAgIC8vICAgICBqc29uLnRpdGxlID0gQXJyYXkuZnJvbShuZXcgU2V0KG5ld1BhcnNlVGl0bGUpKTtcXG4gICAgICAgICAgICAgICAgLy8gfVxcbiAgICAgICAgICAgICAgICAvLyDkuI3nrqHmi4nlj5bku6PnoIHov5jmmK/liJfooajpg73opoHmiorliJfooajmi4nkuoZcXG4gICAgICAgICAgICAgICAgaWYgKCFsYkp1ZGdlKSB7XFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlID0gT2JqZWN0LmtleXMoUGFyc2VTKTtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhwYXJzZVRpdGxlKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB2YXIgc2NPYmplY3QgPSBbXFxcIkNpdHlJUFxcXCIsIFxcXCJwY1VBXFxcIiwgXFxcImNhY2hlTTN1OFxcXCIsIFxcXCJkZWZhdWx0UGFyc2VXZWJcXFwiLFxcXCJtYW9zc1xcXCIsIFxcXCJMTFFcXFwiXTtcXG4gICAgICAgICAgICAgICAgcGFyc2VUaXRsZSA9IHBhcnNlVGl0bGU/cGFyc2VUaXRsZS5maWx0ZXIoaXQ9PiFzY09iamVjdC5pbmNsdWRlcyhpdCkpOltdO1xcbiAgICAgICAgICAgICAgICB2YXIgbmV3UGFyc2VUaXRsZSA9IGpzb24udGl0bGUuY29uY2F0KHBhcnNlVGl0bGUpO1xcbiAgICAgICAgICAgICAgICBqc29uLnRpdGxlID0gQXJyYXkuZnJvbShuZXcgU2V0KG5ld1BhcnNlVGl0bGUpKTtcXG5cXG4gICAgICAgICAgICAgICAgaWYgKHB1bGxNb2RlID09PSAn5Luj56CBJykge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcmlnaW5hbFBhcnNlUyA9PSAnb2JqZWN0Jykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgaW4gc2NPYmplY3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG9yaWdpbmFsUGFyc2VTW3NjT2JqZWN0W2ldXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3JpZ2luYWxQYXJzZVMgPW9yaWdpbmFsUGFyc2VTLmZpbHRlcihpdD0+IXNjT2JqZWN0LmluY2x1ZGVzKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KVswXSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oanNvbi5jb2Rlcywgb3JpZ2luYWxQYXJzZVMpO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YoUGFyc2VTKT09XFxcInVuZGVmaW5lZFxcXCIpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGpzb24uY29kZXMsIHBhcnNlQ29kZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuIFxcXCJ0b2FzdDovL+ayoeacieS7o+egge+8jOS4jeWPr+aLieWPllxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihqc29uLmNvZGVzLCBQYXJzZVMpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvL3ZhciBuZXdGaWxlID0gdG9vbHMudG9KU09OKGpzb24pOy8v6Ieq5a6a5LmJc3RyaW5naWZ55Ye95pWw77yM5bim5pyJ6L2s5LmJ5a2X56ymXFxuICAgICAgICAgICAgICAgIHZhciBuZXdGaWxlID0gJC5zdHJpbmdpZnkoanNvbik7IC8vSlNPTi5wYXJzZeS8muaKpemUmVxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgbmV3RmlsZSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aLieWPlicgKyBwdWxsTW9kZSArICfmiJDlip8nO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnKrojrflj5bliLDlr7nosaEnO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIFtrLCBfbXlTZXQucGFyc2VSb3V0ZV0pXFxuICAgIH0sXFxuICAgIHB1bGxTY3JpcHQ6IGZ1bmN0aW9uKGNqLCB4NSkge1xcbiAgICAgICAgcmV0dXJuICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXG4gICAgICAgICAgICB2YXIgY2pGcm9tID0gJ2hpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb8nO1xcbiAgICAgICAgICAgIHZhciB4NUZyb20gPSAnaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmh0bWw/cnVsZT1NeUZpZWxk4bSw4oG/JztcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICB2YXIgY2pGaWxlID0gSlNPTi5wYXJzZShmZXRjaChjakZyb20pKS5ydWxlO1xcbiAgICAgICAgICAgICAgICB2YXIgeDVGaWxlID0gSlNPTi5wYXJzZShmZXRjaCh4NUZyb20pKS5ydWxlO1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoa1swXSwgY2pGaWxlKTtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGtbMV0sIHg1RmlsZSk7XFxuICAgICAgICAgICAgICAgIGNsZWFyVmFyKCdqeE5ld1YnKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ouJ5Y+W5oiQ5YqfJztcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnKrmiJDlip/ojrflj5blhoXlrrknO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIFtjaiwgeDVdKVxcbiAgICB9LFxcbiAgICB4bFNlbGVjdDogZnVuY3Rpb24oYmlhbmppLCBsYkxlbmd0aCkge1xcbiAgICAgICAgcmV0dXJuIFxcXCJzZWxlY3Q6Ly9cXFwiICsgSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIG9wdGlvbnM6IFsn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcImNvbG9yOnJlZFxcXCIgdGl0bGU9XFxcIuWIoOmZpHx8JyArIGJpYW5qaSArICdcXFwiPuWIoCDpmaQnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcImNvbG9yOiNGNTc0NzRcXFwiIHRpdGxlPVxcXCLpmpDol498fCcgKyBiaWFuamkgKyAnXFxcIj7pmpAg6JePJywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXCJjb2xvcjojRkY4MDAwXFxcIiB0aXRsZT1cXFwi5L+u5pS5fHwnICsgYmlhbmppICsgJ1xcXCI+5L+uIOaUuScsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFwiY29sb3I6IzA5OEFDMVxcXCIgdGl0bGU9XFxcIue9rumhtnx8JyArIGJpYW5qaSArICcwJyArICdcXFwiPue9riDpobYnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcImNvbG9yOiMwOThBQzFcXFwiIHRpdGxlPVxcXCLnp7vliqh8fCcgKyBiaWFuamkgKyAnXFxcIj7np7sg5YqoJywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMDk4QUMxXFxcIiB0aXRsZT1cXFwi572u5bqVfHwnICsgYmlhbmppICsgbGJMZW5ndGggKyAnXFxcIj7nva4g5bqVJywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMDRCNDMxXFxcIiB0aXRsZT1cXFwi5YiG5LqrfHwnICsgYmlhbmppICsgJ1xcXCI+5Zyw5p2/5YiG5LqrJywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMDRCNDMxXFxcIiB0aXRsZT1cXFwi5LqR5YiG5LqrfHwnICsgYmlhbmppICsgJ1xcXCI+5LqR5p2/5YiG5LqrJ10sXFxuICAgICAgICAgICAgY29sOiAnMicsXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcbiAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXG4gICAgICAgICAgICAgICAgdmFyIG5ld0lucHV0ID0gcGFyc2VEb21Gb3JIdG1sKGlucHV0LCAnc3BhbiYmdGl0bGUnKS5zcGxpdCgnfHwnKTtcXG4gICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBuZXdJbnB1dFswXTtcXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBuZXdJbnB1dFsxXTtcXG4gICAgICAgICAgICAgICAgdmFyIG51bSA9IG5ld0lucHV0WzJdO1xcbiAgICAgICAgICAgICAgICB2YXIgbnVtMiA9IG5ld0lucHV0WzNdO1xcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIuWIoOmZpFxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIuWNs+WwhuWIoOmZpDogXFxcIiArIG5hbWUpLmNvbmZpcm0oKGspID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBrWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0ga1sxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUganNvbi5jb2Rlc1tuYW1lXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLnRpdGxlLnNwbGljZShudW0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgJC5zdHJpbmdpZnkoanNvbikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7LlsIbjgJZcXFwiICsgbmFtZSArIFxcXCLjgJfliKDpmaRcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtuYW1lLCBudW1dKTtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIumakOiXj1xcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcImhpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChrKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0ga1swXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bSA9IGtbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZVJvdXRlID0gZ2V0VmFyKCdwYXJzZVJvdXRlJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5jb2Rlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi50aXRsZS5zcGxpY2UobnVtLCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5bey5bCG44CWXFxcIiArIG5hbWUgKyBcXFwi44CX6ZqQ6JePXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lj6/og73mmK/kuKrnvZHlnYAsIOaCqOWPr+mAieaLqeWIoOmZpFxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBbbmFtZSwgbnVtXSk7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCLkv67mlLlcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYgKGpzb24uY29kZXNbbmFtZV0pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbkNvZGUgPSBuYW1lO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuTmFtZSA9IFxcXCLov5nmmK/lkI3np7BcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzW25hbWVdKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5Db2RlID0ganNvbi5jb2Rlc1tuYW1lXS50b1N0cmluZygpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuTmFtZSA9IG5hbWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSNcXFwiKS5ydWxlKChrKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkID0gW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoZ2V0SXRlbSgnbXlGdW5jdGlvbicpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBrWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZSA9IGtbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+S/nSDlrZgnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBzYXZlQnV0dG9uICsgXFxcInNhdmVCdXR0b24oZ2V0VmFyKCdpbnB1dF9lZGl0JykpO2JhY2soKTtcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi5bu66K6u5oyJ6buY6K6k55qE5Luj56CB5qC85byP5L+u5pS55ZOmXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IFxcXCJwdXRWYXIoJ2lucHV0X2VkaXQnLCBpbnB1dClcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcXFwiLTFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiAn5L+u5pS54piFJyArIG5hbWUgKyAn4piFJyArIGNvZGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJk8c21hbGw+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiM2RUI4OTdcXFwiPuagvOW8j+S4uu+8muaTjeS9nOexu+Wei+KYheagh+mimOKYhWZ1bmN0aW9uKCl76Ieq5a6a5LmJ5YaF5a65fTxicj7or7fli7/loavlhaXlhbbku5bmoLzlvI8nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzYXZlQnV0dG9uKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUJ1dHRvbihnZXRWYXIoJ2lucHV0X2VkaXQnKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFjaygpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lkv53lrZjkv67mlLknO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgc2F2ZUJ1dHRvbiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiAn4oCY4oCY4oCZ4oCZPGJpZz48YmlnPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMjk4QTA4XFxcIj7kv50g5a2YJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBbbk5hbWUsIG5Db2RlXSkgLy9bbmFtZSwganNvbi5jb2Rlc1tuYW1lXS50b1N0cmluZygpXSlcXG4gICAgICAgICAgICAgICAgICAgIC8qfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Y+q5pyJ572R5Z2A5oiW6ICF5qCH6aKYLCDkuI3mlK/mjIHkv67mlLlcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9Ki9cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIue9rumhtlxcXCI6XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCLnva7lupVcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0ganNvbi50aXRsZS5zcGxpY2UobnVtLCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uLnRpdGxlLnNwbGljZShudW0yLCAwLCBpdGVtWzBdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgJC5zdHJpbmdpZnkoanNvbikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIuenu+WKqFxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ2hpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcignYmlhbmppJywgJ+enu+WKqCMnICsgayk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG51bSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCLliIbkuqtcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwi5LqR5YiG5LqrXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5jb2Rlc1tuYW1lXSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VUZXh0ID0gdHlwZW9mIGpzb24uY29kZXNbbmFtZV0gPT0gJ2Z1bmN0aW9uJyA/ICQuc3RyaW5naWZ5KGpzb24uY29kZXNbbmFtZV0pIDoganNvbi5jb2Rlc1tuYW1lXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUZXh0ID0gJ015UGFyc2VT4piFJyArIG5hbWUgKyAn4piFJyArIGJhc2U2NEVuY29kZShwYXJzZVRleHQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZVRleHQgPSAn55u06ZO+4piFJyArIGpzb24udGl0bGVbbnVtXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gJ+S6keWIhuS6qycgJiYgcGFyc2VUZXh0LnN1YnN0cigwLCA4KSA9PSAnTXlQYXJzZVMnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGV4dCA9IHNoYXJlUGFzdGUocGFyc2VUZXh0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGV4dC5zdWJzdHIoMCwgNikgIT0gJ2Vycm9yOicgPyAnY29weTovLycgKyBwYXJzZVRleHQgKyAnXFxcXG7imIXimIXimIVcXFxcbicgKyAnTXlQYXJzZVPvvJonICsgbmFtZSA6ICd0b2FzdDovL+WIhuS6q+Wksei0pSEh5LqR5Ymq6LS05p2/5Y+v6IO95oyC5LqGJztcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2NvcHk6Ly8nICsgcGFyc2VUZXh0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aaguS4jeaUr+aMgSc7XFxuICAgICAgICAgICAgICAgIH0gLy9zd2l0Y2jnmoRcXG4gICAgICAgICAgICB9KSAvL1N0cmluZ+eahFxcbiAgICAgICAgfSkgLy9zdHJpbmdpZnnnmoRcXG4gICAgfSxcXG4gICAgeGpQYXJzZTogZnVuY3Rpb24oKSB7XFxuICAgICAgICByZXR1cm4gJChcXFwiaGlrZXI6Ly9lbXB0eSNub0hpc3RvcnkjXFxcIikucnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgdmFyIGQgPSBbXTtcXG4gICAgICAgICAgICBldmFsKGdldEl0ZW0oJ215RnVuY3Rpb24nKSk7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfkv50g5a2YJyxcXG4gICAgICAgICAgICAgICAgdXJsOiBzYXZlQnV0dG9uICsgXFxcInNhdmVCdXR0b24oaW5wdXQpO2JhY2soKTtjbGVhclZhcignaW5wdXRfYWRkJylcXFwiLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgICAgICAgICAgZGVzYzogXFxcIui+k+WFpeato+ehruagvOW8j+WGheWuuVxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogJ3B1dFZhcihcXFwiaW5wdXRfYWRkXFxcIiwgaW5wdXQpJyxcXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFxcXCItMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRWYXIoJ2lucHV0X2FkZCcpLFxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJk8c21hbGw+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiM2RUI4OTdcXFwiPuaMieaPj+i/sOivieagvOW8j+i+k+WFpSwg6K+35Yu/5aGr5YWl5YW25LuW5qC85byPPGJyPuacrOWcsOWPo+S7pDog5pON5L2c57G75Z6L4piF5ZCN56ew4piF5Luj56CBPGJyPuS6keWPo+S7pDog6ZO+5o6l4piF4piF4piF5ZCN56ewOyDnuq/nvZHlnYA6IOebtOmTvuKYhXVybDHimIV1cmwyJyxcXG4gICAgICAgICAgICAgICAgZGVzYzogJ+KAmOKAmOKAmeKAmTxiaWc+PGJpZz48c3BhbiBzdHlsZT1cXFwiY29sb3I6IzI5OEEwOFxcXCI+5L+dIOWtmCcsXFxuICAgICAgICAgICAgICAgIHVybDogJCgnbm9Mb2FkaW5nJykubGF6eVJ1bGUoKHNhdmVCdXR0b24pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzYXZlQnV0dG9uKGdldFZhcignaW5wdXRfYWRkJykpO1xcbiAgICAgICAgICAgICAgICB9LCBzYXZlQnV0dG9uKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgICAgIH0pXFxuICAgIH0sXFxuICAgIHlkUGFyc2U6IGZ1bmN0aW9uKEJKbW9kZSwgaSkge1xcbiAgICAgICAgcmV0dXJuICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXG4gICAgICAgICAgICB2YXIgQSA9IGtbMF0uc3BsaXQoJyMnKVsxXTtcXG4gICAgICAgICAgICB2YXIgQiA9IGtbMV07XFxuICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXG4gICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXG4gICAgICAgICAgICB2YXIgaXRlbSA9IGpzb24udGl0bGUuc3BsaWNlKEEsIDEpOyAvLyAxOiDmoIforrDlvIDlp4vkvY3nva7vvIwyOiDliKDpmaTliLDlk6rkuKrkvY3nva5cXG4gICAgICAgICAgICBqc29uLnRpdGxlLnNwbGljZShCLCAwLCBpdGVtWzBdKTsgLy8gMTog5ZCM5LiK77yMMjogMOihqOekuuS4jeWIoOmZpO+8jDM6IOa3u+WKoOWvueixoVxcbiAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxuICAgICAgICAgICAgY2xlYXJWYXIoJ2JpYW5qaScpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgfSwgW0JKbW9kZSwgaV0pXFxuICAgIH1cXG59O1xcblxcbmZ1bmN0aW9uIHNldFBhcnNlKCkge1xcbiAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb9cXFwiKS5zZXRQYXJzZSgpO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuiwg+eUqOi3r+eUsVwiLFwicGF0aFwiOlwiUm91dGVcIixcInJ1bGVcIjpcImpzOlxcbmNvbnN0IGQgPSBbXTtcXG5jb25zdCBkYXRhID0ge307XFxuXFxuZGF0YS5vbGRDb25maWcgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFwiO1xcbmRhdGEuY2pSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzXFxcIjtcXG5kYXRhLng1Um91dGUgPSBcXFwiZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvY2FjaGUvUGFyc2VfRG4uaHRtbFxcXCI7XFxuXFxuXFxuZGF0YS5qeExhenkgPSBcXFwiZXZhbCgndmFyIGNvbmZpZyA9JyArIGZldGNoKCdcXFwiICsgZGF0YS5vbGRDb25maWcgKyBcXFwiJykpO2V2YWwoZmV0Y2goY29uZmlnLmNqKSk7YXl0bVBhcnNlKGlucHV0KVxcXCI7XFxuXFxuZGF0YS5zelBhcnNlID0gXFxcIiNub0hpc3RvcnkjaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPeiuvue9rlxcXCI7XFxuXFxuZGF0YS5zZXRQYXJzZSA9IGZ1bmN0aW9uKCkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgZGVzYzogJzc5NScsXFxuICAgICAgICB1cmw6IHRoaXMueDVSb3V0ZSxcXG4gICAgICAgIGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnXFxuICAgIH0pO1xcbiAgICB2YXIgb2xkViA9IGdldFZhcignanhPbGRWJyk7XFxuICAgIHZhciBuZXdWID0gZ2V0VmFyKCdqeE5ld1YnKTtcXG4gICAgdmFyIHZlcnNpb25UaXBzID0gcGFyc2VGbG9hdChuZXdWKSA+IHBhcnNlRmxvYXQob2xkVikgPyAn4oCY4oCY5pyJ5paw54mI5pysOiB2JyArIG5ld1YgOiAn4oCY4oCYJztcXG4gICAgdmFyIHBpY3MgPSBbXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9zZW92eC0yMC0xMCUyMCg5MikuanBnJyxcXG4gICAgICAgICdodHRwczovL2Nkbi5zZW92eC5jb20vaW1nL21vbTIwMTglMjAoMjA3KS5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vdHZhNC5zaW5haW1nLmNuL2xhcmdlLzliZDliMTY3Z3kxZndyaDV4b2x0ZGoyMWhjMHUwdGF4LmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly90dmExLnNpbmFpbWcuY24vbGFyZ2UvMDA1QllxcGdneTFmd3JleXU0bmw2ajMxaGMwdTBhaHIuanBnJyxcXG4gICAgICAgICdodHRwczovL3MzLmJtcC5vdmgvaW1ncy8yMDIxLzEwL2Q3ZTYwYjk5MDc0MjA5M2QuanBlZycsXFxuICAgICAgICAnaHR0cHM6Ly9zMy5ibXAub3ZoL2ltZ3MvMjAyMS8xMC85MWFkNmQ2NTM4YmY4Njg5LmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly90dmExLnNpbmFpbWcuY24vbGFyZ2UvMDA1QllxcGdneTFmd3Jlc2w1cG1sajMxaGMweGN3a2EuanBnJyxcXG4gICAgICAgICdodHRwczovL3R2YTMuc2luYWltZy5jbi9sYXJnZS8wMDVCWXFwZ2d5MWZ3cmdqZGs3NG9qMzFoYzB1MGRxbi5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnNlb3Z4LmNvbS9pbWcvbW9tMjAxOCUyMCgzMjApLmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9tb20yMDE4JTIwKDgwMykuanBnJ1xcbiAgICBdO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgaW1nOiBwaWNzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwKV0sXFxuICAgICAgICB0aXRsZTogdmVyc2lvblRpcHMgKyAn4oCZ4oCZPHNtYWxsPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojNkVCODk3XFxcIj48YnI+44CA44CA54K55Ye75LiK5pa55aS05YOP6L+b5YWl57yW6L6RPGJyPueCueatpOi/m+WFpeiuuuWdm+W4luWtkOWIl+ihqCcsXFxuICAgICAgICBkZXNjOiAn5b2T5YmN54mI5pysOiB2JyArIG9sZFYsXFxuICAgICAgICB1cmw6ICdodHRwczovL2hhaWt1b3NoaWppZS5jbi91c2VyLzE5NTgnLFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xJ1xcbiAgICB9KTtcXG59XFxuXFxuc3dpdGNoIChnZXRQYXJhbShcXFwidHlwZVxcXCIpKSB7XFxuICAgIGNhc2UgXFxcIuiuvue9rlxcXCI6XFxuICAgICAgICBkYXRhLnNldFBhcnNlKCk7XFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSBcXFwi57yW6L6RXFxcIjpcXG4gICAgICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2p4SXRlbT9ydWxlPU15RmllbGThtLDigb9cXFwiKS5qeExpc3QoKTtcXG4gICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgICAgIGJyZWFrO1xcblxcdGNhc2UgXFxcIuS4u+mimFxcXCI6XFxuXFx0ICAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90aGVtZT9ydWxlPU15RmllbGThtLDigb9cXFwiKS50aGVtZUluaXQoKTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBkZWZhdWx0OlxcbiAgICAgICAgJC5leHBvcnRzID0gZGF0YTtcXG4gICAgICAgIGJyZWFrO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuino+aekOmhueS4u+eVjOmdolwiLFwicGF0aFwiOlwianhJdGVtXCIsXCJydWxlXCI6XCJ2YXIgXzB4b2RSPSdqc2ppYW1pLmNvbS52NicsXzB4NDg1NT1bXzB4b2RSLCd3N0ZMdzdraUpRPT0nLCdBOEt2SkMvRGlRPT0nLCdSOEt0dzVIRHE4S1NRY09PJywndzUvQ2dWdkNyaTlGd3JsNFhCUld3NnJDaWc9PScsJ0lUVENtY093d3AzQ3FBPT0nLCdHUWhHWThLSicsJ0dNSzFVc0svVkE9PScsJ3dwakN2aVJIJywnSEFNUVN3ND0nLCdBc0tOSER2RHFnPT0nLCdaY0tSd29YQ2t3PT0nLCd3cC9DbXc1K3dvRT0nLCdJTU8vUEFuRGpnPT0nLCd3b3hudzVIRG1DWT0nLCd3b0xDdFFCRndvUT0nLCdkOE9vTlcvQ2x3PT0nLCdlUkhDb1NBaScsJ0pjT21iY09vQU1PcycsJ0o4Szh3NVREa3h3eUFnPT0nLCd3N1l6QVNNPScsJ3dxY0p3cHJDakZVPScsJ2ZRTEN2U3NKJywnT01PQndwd1Z3Nm89JywndzZERHJjT1ZEY091JywnTnNLRUZUVERyZz09JywnVk1PdlA4SzdLZz09JywnT0E1VVFzS3InLCdQOEsydzQzRGtRPT0nLCdJM1BEbThLQScsJ0djS1JOaFhEdmc9PScsJ3c0UENsMjVxdzZNPScsJ1BzTzViOE9MR0E9PScsJ0syckR1OEtOYWpKdWNnPT0nLCdFTUtwdzVYQ3NzT1l3by9Ea2NPTicsJ3c2azJ3cFlJJywnTlRYQ2hjT1J3cDg9JywnZXNPWEFNS2JMdz09Jywnd3Joc0ZWMXAnLCd3cFRDdHdSV3dwOUN3cVBEalE9PScsJ0tuSERnc0tkZmc9PScsJ1UwWERrMXh6JywnUnNPZlB3dDJ3ckxEbGc9PScsJ3dyb1N3ci9EcUdiQ3FzT2xVQ3ZEa01LWnc2YkRpR3NwJywnRThLSGVNS2phdz09JywnWGNPSnc0cyt3cm5Eam1EQ244S21UOE9TdzRUQ2hSWEN1TU96d3IzQ2xzS1pIY0szdzZYRGg4TzBNZz09JywnNW9tQjVZKzY1TGlwNW8yQTVMdXg1WksrNTcyRTZhSzc2SWVRNXA2SScsJ0oyUERrTUtjV1RSb2FCc0FKeTFZJywnNXBPLzVMeXU1b3kyNWI2cScsJzVvdTY1WTJBNUxxbDU2QzcnLCc1NyswNkw2aDZLV1U1cHllJywnS3g5NVdNS2VBUT09JywnNW9PazVhV0w1bzZnNUxxOTZMZUM1Ynl6NUxxbDZidVo2SzZ2JywnSHlrOWZUdkRrZ25EdEg5cCcsJzZMMkU1WWFrNXAydjVwV2E1b3l3NUxxeDVaNmc1WjJyJywnQXpVblRnWERnazNDdDJGdVZzT2pTRjlvVmhQQ24ySENyakZxREROQnc0Yz0nLCc0b090NG9HSzRvR3k0b0tWd3BIRHEydEdWTUtrd3BwV1NCakRwOE9sTE9lWmsrVzl1dWFObWVlbnJnPT0nLCc1THljNTVhMjU1aWc1WVdTNVlpVDZJQ1A2WjZDNTVpSTVieUY2S1dsNTVhUTZLNms1WnloNkxTMjVZNjNET1ducU9hZnBlbVVnZW1odk9XSW4rVzlwdWl0dCtXZmsrUzVwT2lscmVpdHR1YUFwdz09Jywnd3AzRG9zS3F3NHZDaDhPZWFNSytXbHJDczNVZ1I4S2lWMzNEajFwTXc3d3l3NWthUU1PdFN3TkJ3NEZ1dzdRUVRNS3EnLCdJY093VXNPNEt3PT0nLCd3cHZDaURGZHdvaz0nLCd3NFhDdDBqQ3NBZz0nLCd3NFhEcVU3Q3JjT3UnLCd3NHJDczByQ2lBTT0nLCdJTUttUFVIQ2pBPT0nLCdGY0tVdzVmQ29zT3InLCdDeVkzVUE4PScsJ1kyZkR1UmxCJywnSEczRHQ4T2Rmdz09JywnVzhPZ0wzN0Rwdz09JywnVGNPMUh3NWknLCd3cEpGdzRURHBnPT0nLCd3N1Vxd29zRlo4S213Ny9EbDI0VicsJ1dodGF3NW9rdzYzRGlXRm53cVRDc2NPdFB5NVB3b1VvdzZyQ2d3Vmt3cXNjTkhSRUljTzB3cUxDczhLK1VzT2h3NjdDczBERGhzT1p3cGZEc2x3WUVnekR2Y09hVVN2Q3BNT1hQRmZDcHNPd0E4S1Z3clIwdzZ4Snc1TERuRkhEbWNLNXdyN0Nnc0twdzdRdXdxYkNtUVE4d3JIRHZYTjBXMzdEdE1LZkdjT21Kc09qNGJhNDRvRzJ3b1ZJd3A3Q2xuY2xLUTBISFRWa0pNT0dQY09Wd3FuRG5BakNvbFVidzZiRGlNT3onLCd3NUpVUjhPMWN3PT0nLCd3NHRidzZGRXdxSnRYMFE9JywnS1ZmRHU4S2tRdz09JywndzVROXdwUVdHdz09JywnUWhORHc0d3p3b1hDaVR0Mndxdz0nLCc1b3FlNVl5ajVZbU02S0dIJywndzdoWmZzTytSRjF4d3FzPScsJ3dxMTF3NS9EcndBPScsJ0pNS0NXQTl5Tk1Lak5BPT0nLCdVVVBEcFdabXc2dkRuMVpxdzdBPScsJ3c0QXl3cGswR2c9PScsJ2NjT2tER0hDZ2c9PScsJ1hNT09IZ3c9JywndzV3K3dybkRvenc9JywndzU5dnc2Um13cjQ9Jywnd29BZkVXbz0nLCdHc09Kd3JsdXc0VT0nLCd3b1RDdlFkZndvWkF3cW5EbHc9PScsJ1RNT0dQQmxHVWNLM1l5ekR2Zz09JywnWHVXdXIrYVVpdWkyak9XK3RXSERwMzdDdFJnMXc3TmNPOEszd3FCcXdvSENoZ0pqUXhyQ3ZzT21aOEtuUlg4TUY4T0hZc094VUE9PScsJ0o4S0FLRWM9JywnRXNLVXc3SERwZ2c9JywnWE1PMkVHbkNoQT09JywnUzhPZ04xM0RqUT09Jywnd29UQ3JUNTN3cDg9Jywnd3FmQ3JSTjF3b3NwdzV4Q0Mwaz0nLCd3NkxDalVYQ3N4RT0nLCd3b2RRUFVKdicsJ053RENwTU9id3F3PScsJ0JzT213cWhPdzc3Q2hzT3gnLCd3b0FMRUhGSScsJ09jT3Fmc081TGNPa0Z5ekN1WFhDaWNLU3c3WjhQanBnUFhYRGluWjJ3N2pDck1LbE9TVENrOEtWd3JnYVJqVERvTUtpdzdJWTRiZUY0b09pJywnNG9HTjRvT0I0b0s5NG9LbVFTSUt3NDdEcGNLVUdNT0NDY0trZjhLZXdyTU93cHJEZ01LT0FzT3l3NDVMQzI4andyRERwQlBDdU1PTU9jTzh3cWNRZWw0PScsJ3dvRTNFOE80dzdMQ3FnPT0nLCdUTU9SRThLcER3PT0nLCd3cGN3R01PVnc3Yz0nLCdEUUpxVk1LQScsJ0d4UENzTU9kd3FFPScsJ3c0cDJkY09BY3c9PScsJ0g4T1N3cjBCdzQ4PScsJ1czYkRuaTFhJywndzdoWlljTzYnLCd3Nkl2d3A3RGdqYz0nLCdmOE9STVZmRGlBPT0nLCd3cWJDb3dSK3dwMD0nLCd3b3NGd29uQ25rYz0nLCdjY09CSm0zQ2hRPT0nLCdFc0tFRWtQQ2hRPT0nLCc0b09vNG9HeTRvRzc0b0NiRWNPQkI4T2V3NnMzd3BuQ3ZzS2t3ckhEa1JyQ3MzTVV3NkFEYzhPYXc1dFZGc09Ld3JjR3dyOUZ3NUE9JywnR3NLV0lXRENvUT09Jywnd3J0bktXSk0nLCdmY09BRjhLY0ZBPT0nLCdaTU91QVFoaCcsJzU2ZUg1WWlQYlE9PScsJzU2Vzk1WXV1U0dzPScsJ3c0WUF3NU1idzQ3Q29BPT0nLCdlQi9DaVNzSkhBPT0nLCd1anNBU09qVE9pbmF4Wm1pcnouY29tSy5MdjY9PSddOyhmdW5jdGlvbihfMHgzMTUyZGEsXzB4MmY3MWRmLF8weDIyOTM5Nil7dmFyIF8weDQxMDM5OT1mdW5jdGlvbihfMHg0YTgyMzgsXzB4MTQ2N2E1LF8weGUwNDIwNSxfMHgxN2NmZDcsXzB4MzgyNDE0KXtfMHgxNDY3YTU9XzB4MTQ2N2E1Pj4weDgsXzB4MzgyNDE0PSdwbyc7dmFyIF8weDk2ZDI3ND0nc2hpZnQnLF8weDcxOTM0Mj0ncHVzaCc7aWYoXzB4MTQ2N2E1PF8weDRhODIzOCl7d2hpbGUoLS1fMHg0YTgyMzgpe18weDE3Y2ZkNz1fMHgzMTUyZGFbXzB4OTZkMjc0XSgpO2lmKF8weDE0NjdhNT09PV8weDRhODIzOCl7XzB4MTQ2N2E1PV8weDE3Y2ZkNztfMHhlMDQyMDU9XzB4MzE1MmRhW18weDM4MjQxNCsncCddKCk7fWVsc2UgaWYoXzB4MTQ2N2E1JiZfMHhlMDQyMDVbJ3JlcGxhY2UnXSgvW3VBU09UT254WnJ6S0w9XS9nLCcnKT09PV8weDE0NjdhNSl7XzB4MzE1MmRhW18weDcxOTM0Ml0oXzB4MTdjZmQ3KTt9fV8weDMxNTJkYVtfMHg3MTkzNDJdKF8weDMxNTJkYVtfMHg5NmQyNzRdKCkpO31yZXR1cm4gMHhhZTkxMTt9O3JldHVybiBfMHg0MTAzOTkoKytfMHgyZjcxZGYsXzB4MjI5Mzk2KT4+XzB4MmY3MWRmXl8weDIyOTM5Njt9KF8weDQ4NTUsMHgxNmIsMHgxNmIwMCkpO3ZhciBfMHg0YjVhPWZ1bmN0aW9uKF8weDRmNWZhZCxfMHgzZWFhZjMpe18weDRmNWZhZD1+ficweCdbJ2NvbmNhdCddKF8weDRmNWZhZCk7dmFyIF8weDJiNDQ0ZD1fMHg0ODU1W18weDRmNWZhZF07aWYoXzB4NGI1YVsnWmlFZWNvJ109PT11bmRlZmluZWQpeyhmdW5jdGlvbigpe3ZhciBfMHgxYWVkMDU9dHlwZW9mIHdpbmRvdyE9PSd1bmRlZmluZWQnP3dpbmRvdzp0eXBlb2YgcHJvY2Vzcz09PSdvYmplY3QnJiZ0eXBlb2YgcmVxdWlyZT09PSdmdW5jdGlvbicmJnR5cGVvZiBnbG9iYWw9PT0nb2JqZWN0Jz9nbG9iYWw6dGhpczt2YXIgXzB4MTI2MGNmPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSc7XzB4MWFlZDA1WydhdG9iJ118fChfMHgxYWVkMDVbJ2F0b2InXT1mdW5jdGlvbihfMHgxNmNjMTQpe3ZhciBfMHg1NDg4MWQ9U3RyaW5nKF8weDE2Y2MxNClbJ3JlcGxhY2UnXSgvPSskLywnJyk7Zm9yKHZhciBfMHg0YTdmMTk9MHgwLF8weDI0NWYxNixfMHgyYTI5MjUsXzB4MTgzYTNjPTB4MCxfMHgxZjdkOTM9Jyc7XzB4MmEyOTI1PV8weDU0ODgxZFsnY2hhckF0J10oXzB4MTgzYTNjKyspO35fMHgyYTI5MjUmJihfMHgyNDVmMTY9XzB4NGE3ZjE5JTB4ND9fMHgyNDVmMTYqMHg0MCtfMHgyYTI5MjU6XzB4MmEyOTI1LF8weDRhN2YxOSsrJTB4NCk/XzB4MWY3ZDkzKz1TdHJpbmdbJ2Zyb21DaGFyQ29kZSddKDB4ZmYmXzB4MjQ1ZjE2Pj4oLTB4MipfMHg0YTdmMTkmMHg2KSk6MHgwKXtfMHgyYTI5MjU9XzB4MTI2MGNmWydpbmRleE9mJ10oXzB4MmEyOTI1KTt9cmV0dXJuIF8weDFmN2Q5Mzt9KTt9KCkpO3ZhciBfMHgxNTEwN2Y9ZnVuY3Rpb24oXzB4M2E5N2VhLF8weDNlYWFmMyl7dmFyIF8weDJkNGVlYT1bXSxfMHgxM2Q3MGI9MHgwLF8weDEwYzEyYixfMHgzMzYwNGU9JycsXzB4MTU3YTU1PScnO18weDNhOTdlYT1hdG9iKF8weDNhOTdlYSk7Zm9yKHZhciBfMHgzNWFlYzM9MHgwLF8weDFmZTJlYT1fMHgzYTk3ZWFbJ2xlbmd0aCddO18weDM1YWVjMzxfMHgxZmUyZWE7XzB4MzVhZWMzKyspe18weDE1N2E1NSs9JyUnKygnMDAnK18weDNhOTdlYVsnY2hhckNvZGVBdCddKF8weDM1YWVjMylbJ3RvU3RyaW5nJ10oMHgxMCkpWydzbGljZSddKC0weDIpO31fMHgzYTk3ZWE9ZGVjb2RlVVJJQ29tcG9uZW50KF8weDE1N2E1NSk7Zm9yKHZhciBfMHg0M2EwYWM9MHgwO18weDQzYTBhYzwweDEwMDtfMHg0M2EwYWMrKyl7XzB4MmQ0ZWVhW18weDQzYTBhY109XzB4NDNhMGFjO31mb3IoXzB4NDNhMGFjPTB4MDtfMHg0M2EwYWM8MHgxMDA7XzB4NDNhMGFjKyspe18weDEzZDcwYj0oXzB4MTNkNzBiK18weDJkNGVlYVtfMHg0M2EwYWNdK18weDNlYWFmM1snY2hhckNvZGVBdCddKF8weDQzYTBhYyVfMHgzZWFhZjNbJ2xlbmd0aCddKSklMHgxMDA7XzB4MTBjMTJiPV8weDJkNGVlYVtfMHg0M2EwYWNdO18weDJkNGVlYVtfMHg0M2EwYWNdPV8weDJkNGVlYVtfMHgxM2Q3MGJdO18weDJkNGVlYVtfMHgxM2Q3MGJdPV8weDEwYzEyYjt9XzB4NDNhMGFjPTB4MDtfMHgxM2Q3MGI9MHgwO2Zvcih2YXIgXzB4ODU0YWIwPTB4MDtfMHg4NTRhYjA8XzB4M2E5N2VhWydsZW5ndGgnXTtfMHg4NTRhYjArKyl7XzB4NDNhMGFjPShfMHg0M2EwYWMrMHgxKSUweDEwMDtfMHgxM2Q3MGI9KF8weDEzZDcwYitfMHgyZDRlZWFbXzB4NDNhMGFjXSklMHgxMDA7XzB4MTBjMTJiPV8weDJkNGVlYVtfMHg0M2EwYWNdO18weDJkNGVlYVtfMHg0M2EwYWNdPV8weDJkNGVlYVtfMHgxM2Q3MGJdO18weDJkNGVlYVtfMHgxM2Q3MGJdPV8weDEwYzEyYjtfMHgzMzYwNGUrPVN0cmluZ1snZnJvbUNoYXJDb2RlJ10oXzB4M2E5N2VhWydjaGFyQ29kZUF0J10oXzB4ODU0YWIwKV5fMHgyZDRlZWFbKF8weDJkNGVlYVtfMHg0M2EwYWNdK18weDJkNGVlYVtfMHgxM2Q3MGJdKSUweDEwMF0pO31yZXR1cm4gXzB4MzM2MDRlO307XzB4NGI1YVsnWk1GSm1NJ109XzB4MTUxMDdmO18weDRiNWFbJ2d4dlpTaCddPXt9O18weDRiNWFbJ1ppRWVjbyddPSEhW107fXZhciBfMHg0Y2JhOTE9XzB4NGI1YVsnZ3h2WlNoJ11bXzB4NGY1ZmFkXTtpZihfMHg0Y2JhOTE9PT11bmRlZmluZWQpe2lmKF8weDRiNWFbJ0liaFZ0SyddPT09dW5kZWZpbmVkKXtfMHg0YjVhWydJYmhWdEsnXT0hIVtdO31fMHgyYjQ0NGQ9XzB4NGI1YVsnWk1GSm1NJ10oXzB4MmI0NDRkLF8weDNlYWFmMyk7XzB4NGI1YVsnZ3h2WlNoJ11bXzB4NGY1ZmFkXT1fMHgyYjQ0NGQ7fWVsc2V7XzB4MmI0NDRkPV8weDRjYmE5MTt9cmV0dXJuIF8weDJiNDQ0ZDt9O2V2YWwoSlNPTltfMHg0YjVhKCcwJywndGsmWicpXShmZXRjaChfMHg0YjVhKCcxJywnU3VIZScpKSlbJ3J1bGUnXSk7ZnVuY3Rpb24gYmJzWVooKXt2YXIgXzB4NDdhOWI0PXsnSnhTTW4nOmZ1bmN0aW9uKF8weDI0OTk1MixfMHg0YWJjMTUpe3JldHVybiBfMHgyNDk5NTIrXzB4NGFiYzE1O30sJ0xHd21DJzon56e75YqoIycsJ0d2RFZZJzpmdW5jdGlvbihfMHg0NjFmMmQsXzB4NTQwNTcxKXtyZXR1cm4gXzB4NDYxZjJkK18weDU0MDU3MTt9LCdXZmVIRCc6XzB4NGI1YSgnMicsJ3ppMV0nKSwnRXFJbHMnOifnp7vliqg6XFxcXHgyMCcsJ0VmZmJuJzpfMHg0YjVhKCczJywnVSNdNScpLCdSeGt4QSc6ZnVuY3Rpb24oXzB4MzJhN2QwLF8weDFhOTMyYyl7cmV0dXJuIF8weDMyYTdkMChfMHgxYTkzMmMpO30sJ1ZCR0pIJzonamRSb3V0ZScsJ0JaZ1J0JzpmdW5jdGlvbihfMHgyNjk4NGUsXzB4NWNjOTI2KXtyZXR1cm4gXzB4MjY5ODRlPT09XzB4NWNjOTI2O30sJ3JnR0NDJzpfMHg0YjVhKCc0JywnXihOKScpLCdNY3pPVyc6ZnVuY3Rpb24oXzB4Mjg4MGJmLF8weDJkOTMwNixfMHg5Nzc4N2Epe3JldHVybiBfMHgyODgwYmYoXzB4MmQ5MzA2LF8weDk3Nzg3YSk7fSwnRlVqZG0nOl8weDRiNWEoJzUnLCdVI101JyksJ2xxRmhiJzpmdW5jdGlvbihfMHg0M2JiZTYpe3JldHVybiBfMHg0M2JiZTYoKTt9LCdGVVJweSc6ZnVuY3Rpb24oXzB4MjI2NWMyLF8weGExZDU2OCxfMHgyOWRlMDEpe3JldHVybiBfMHgyMjY1YzIoXzB4YTFkNTY4LF8weDI5ZGUwMSk7fSwnWElPYkInOid2YXJcXFxceDIweGRSb3V0ZT1cXFxceDIyXFxcXHgyMjsnfTtpZighXzB4NDdhOWI0W18weDRiNWEoJzYnLCdiXSpjJyldKGdldFZhcixfMHg0N2E5YjRbXzB4NGI1YSgnNycsJ3NhS3cnKV0pKXtpZihfMHg0N2E5YjRbXzB4NGI1YSgnOCcsJzdGQXInKV0oXzB4NDdhOWI0W18weDRiNWEoJzknLCdUJSRYJyldLF8weDRiNWEoJ2EnLCdhMXJrJykpKXtkW18weDRiNWEoJ2InLCc3RkFyJyldKHsndGl0bGUnOl8weDQ3YTliNFtfMHg0YjVhKCdjJywnQjBjdScpXShfMHg0N2E5YjRbXzB4NGI1YSgnZCcsJ0V1KnQnKV0saSk9PUJKbW9kZT9fMHg0N2E5YjRbXzB4NGI1YSgnZScsJyp4MDUnKV0oXzB4NDdhOWI0W18weDRiNWEoJ2YnLCdhRXY5JyldKF8weDQ3YTliNFtfMHg0YjVhKCcxMCcsJyVZXjgnKV0sXzB4NDdhOWI0W18weDRiNWEoJzExJywnI0x4cycpXSkseHNMaXN0KTpfMHg0YjVhKCcxMicsJ3RrJlonKSt4c0xpc3QsJ3VybCc6YmpJdGVtWyd5ZFBhcnNlJ10oQkptb2RlLGkpLCdjb2xfdHlwZSc6XzB4NDdhOWI0WydFZmZibiddfSk7fWVsc2V7XzB4NDdhOWI0W18weDRiNWEoJzEzJywnI0x4cycpXShwdXRWYXIsXzB4NDdhOWI0WydGVWpkbSddLF8weDQ3YTliNFtfMHg0YjVhKCcxNCcsJ0taUmEnKV0oaXNMb2dpbikpO18weDQ3YTliNFtfMHg0YjVhKCcxNScsJ14oTiknKV0ocHV0VmFyLCdqZFJvdXRlJyxfMHg0N2E5YjRbXzB4NGI1YSgnMTYnLCd6RE81JyldKTt9fXJldHVybiBnZXRWYXIoXzB4NDdhOWI0WydGVWpkbSddKTt9dmFyIGp4SXRlbT17J2p4TGlzdCc6ZnVuY3Rpb24oKXt2YXIgXzB4NGMwNDI3PXsnVVZXb0YnOmZ1bmN0aW9uKF8weDI2YmIwNyxfMHgyMjFiNGQpe3JldHVybiBfMHgyNmJiMDcrXzB4MjIxYjRkO30sJ2t6V0RLJzpmdW5jdGlvbihfMHg0ODU0YTksXzB4M2U5OGM1KXtyZXR1cm4gXzB4NDg1NGE5K18weDNlOThjNTt9LCdYWHlRcic6XzB4NGI1YSgnMTcnLCd6RE81JyksJ2d0VW5qJzpmdW5jdGlvbihfMHg1OWFhZjcsXzB4MjJjNjZiKXtyZXR1cm4gXzB4NTlhYWY3K18weDIyYzY2Yjt9LCdVdGZXZic6J+KAmOKAmOKAmeKAmTxzbWFsbD48c3BhblxcXFx4MjBzdHlsZT1cXFxceDIyY29sb3I6I0ZFOUEyRVxcXFx4MjI+JywnUU92SlYnOl8weDRiNWEoJzE4JywnckwlMCcpLCdBQkV3Qic6J+KAmOKAmOKAmeKAmTxzcGFuXFxcXHgyMHN0eWxlPVxcXFx4MjJjb2xvcjojMjk4QTA4XFxcXHgyMj4nLCdvenpXRyc6XzB4NGI1YSgnMTknLCdSRWU4JyksJ25XZlZSJzpmdW5jdGlvbihfMHg0ODBmM2EsXzB4NGM4NGZjKXtyZXR1cm4gXzB4NDgwZjNhK18weDRjODRmYzt9LCdKQ2NOWSc6J3BhcnNlUm91dGUnLCdyZ0RJcCc6XzB4NGI1YSgnMWEnLCdmb1ZrJyksJ2hvSWRKJzon4oCY4oCY4oCZ4oCZPGJpZz48c3BhblxcXFx4MjBzdHlsZT1cXFxceDIyY29sb3I6IzZFQjg5N1xcXFx4MjI+5pawXFxcXHgyMOW7ulxcXFx4MjDop6NcXFxceDIw5p6QJywnRnJHT0gnOmZ1bmN0aW9uKF8weDEyZDZkYixfMHgyYTA2OGQpe3JldHVybiBfMHgxMmQ2ZGI8XzB4MmEwNjhkO30sJ29DQ1NqJzpmdW5jdGlvbihfMHgxOWIxNzgsXzB4NGVmOGY2KXtyZXR1cm4gXzB4MTliMTc4PT09XzB4NGVmOGY2O30sJ0haaGxjJzpmdW5jdGlvbihfMHg1Y2FlMDMsXzB4MjZlMjQyKXtyZXR1cm4gXzB4NWNhZTAzPT1fMHgyNmUyNDI7fSwnY2dJZUEnOmZ1bmN0aW9uKF8weDI1ZTM2OCxfMHg4YmM4ZTkpe3JldHVybiBfMHgyNWUzNjgrXzB4OGJjOGU5O30sJ3hkckZ2JzpmdW5jdGlvbihfMHg0YWI1ZDgsXzB4MjEyNDJmKXtyZXR1cm4gXzB4NGFiNWQ4K18weDIxMjQyZjt9LCd5d2p1eCc6ZnVuY3Rpb24oXzB4NWUzMDUxLF8weDRlMDIzMCl7cmV0dXJuIF8weDVlMzA1MShfMHg0ZTAyMzApO319O3ZhciBfMHgxZDhiYjE9Z2V0VmFyKF8weDRjMDQyN1tfMHg0YjVhKCcxYicsJ3VJUFcnKV0pO3ZhciBfMHgzYjg5YWI9cGFyc2VGaWxlW18weDRiNWEoJzFjJywnNGltNScpXTt2YXIgXzB4NDlkYTk2PWdldFZhcihfMHg0YzA0MjdbJ3JnRElwJ10pO2RbJ3B1c2gnXSh7J3RpdGxlJzpfMHg0YzA0MjdbJ2hvSWRKJ10sJ3VybCc6YmpJdGVtW18weDRiNWEoJzFkJywnTE1aVCcpXSgpLCdjb2xfdHlwZSc6XzB4NGI1YSgnMWUnLCdFOWU4Jyl9KTt2YXIgXzB4MmVjYmU1PV8weDNiODlhYltfMHg0YjVhKCcxZicsJ3NhS3cnKV07Zm9yKHZhciBfMHhlMmMzZDg9MHgwO18weDRjMDQyN1tfMHg0YjVhKCcyMCcsJ2JdKmMnKV0oXzB4ZTJjM2Q4LF8weDJlY2JlNSk7XzB4ZTJjM2Q4Kyspe3ZhciBfMHgzMzc4OGM9XzB4M2I4OWFiW18weGUyYzNkOF07dmFyIF8weDM3ODcxZT1fMHg0YzA0MjdbXzB4NGI1YSgnMjEnLCdaZTJWJyldKF8weDMzNzg4YywnJylbJ3JlcGxhY2UnXSgvaHR0cC4qXFxcXC9cXFxcLy9nLCcnKTtpZigv56e75YqoL1tfMHg0YjVhKCcyMicsJyp4MDUnKV0oXzB4NDlkYTk2KSl7aWYoXzB4NGMwNDI3W18weDRiNWEoJzIzJywnT0RXaicpXShfMHg0YjVhKCcyNCcsJzRpbTUnKSwndUtMeEYnKSl7ZFtfMHg0YjVhKCcyNScsJylhVE4nKV0oeyd0aXRsZSc6XzB4NGMwNDI3W18weDRiNWEoJzI2JywnTDhWbScpXShfMHg0YzA0MjdbXzB4NGI1YSgnMjcnLCdORTZRJyldK18weGUyYzNkOCxfMHg0OWRhOTYpP18weDRjMDQyN1tfMHg0YjVhKCcyOCcsJ3l2d2wnKV0oXzB4NGMwNDI3WydjZ0llQSddKF8weDRjMDQyN1tfMHg0YjVhKCcyOScsJ0w4Vm0nKV0sXzB4NGMwNDI3W18weDRiNWEoJzJhJywnJVleOCcpXSksXzB4Mzc4NzFlKTpfMHg0YzA0MjdbXzB4NGI1YSgnMmInLCdmb1ZrJyldKF8weDRjMDQyN1snQUJFd0InXSxfMHgzNzg3MWUpLCd1cmwnOmJqSXRlbVsneWRQYXJzZSddKF8weDQ5ZGE5NixfMHhlMmMzZDgpLCdjb2xfdHlwZSc6XzB4NGI1YSgnMmMnLCdTdUhlJyl9KTt9ZWxzZXt2YXIgXzB4MmJjNjE4PV8weDNiODlhYltfMHhlMmMzZDhdO3ZhciBfMHg1Y2Y0MTc9XzB4NGMwNDI3WydVVldvRiddKF8weDJiYzYxOCwnJylbXzB4NGI1YSgnMmQnLCd6aTFdJyldKC9odHRwLipcXFxcL1xcXFwvL2csJycpO2lmKC/np7vliqgvWyd0ZXN0J10oXzB4NDlkYTk2KSl7ZFtfMHg0YjVhKCcyZScsJ3JMJTAnKV0oeyd0aXRsZSc6XzB4NGMwNDI3W18weDRiNWEoJzJmJywnYUV2OScpXShfMHg0YzA0MjdbJ1hYeVFyJ10sXzB4ZTJjM2Q4KT09XzB4NDlkYTk2P18weDRjMDQyN1tfMHg0YjVhKCczMCcsJ2ZvVmsnKV0oXzB4NGMwNDI3WydndFVuaiddKF8weDRjMDQyN1tfMHg0YjVhKCczMScsJ1QlJFgnKV0sXzB4NGMwNDI3W18weDRiNWEoJzMyJywnbURsRCcpXSksXzB4NWNmNDE3KTpfMHg0YzA0MjdbXzB4NGI1YSgnMzMnLCc0aW01JyldK18weDVjZjQxNywndXJsJzpiakl0ZW1bJ3lkUGFyc2UnXShfMHg0OWRhOTYsXzB4ZTJjM2Q4KSwnY29sX3R5cGUnOl8weDRjMDQyN1tfMHg0YjVhKCczNCcsJ14oTiknKV19KTt9ZWxzZXt2YXIgXzB4MTE5MzY1PVtfMHgyYmM2MTgsXzB4NGMwNDI3W18weDRiNWEoJzM1JywnYl0qYycpXShfMHhlMmMzZDgsJ3x8JyldW18weDRiNWEoJzM2JywnemkxXScpXSgnfHwnKTtkW18weDRiNWEoJzM3Jywnc0JwXicpXSh7J3RpdGxlJzpfMHg0YzA0MjdbXzB4NGI1YSgnMzgnLCc0aW01JyldKF8weDRjMDQyN1tfMHg0YjVhKCczOScsJ1FxQ3onKV0sXzB4NWNmNDE3KSwnY29sX3R5cGUnOl8weDRjMDQyN1tfMHg0YjVhKCczYScsJ1N1SGUnKV0sJ3VybCc6YmpJdGVtW18weDRiNWEoJzNiJywnc0JwXicpXShfMHgxMTkzNjUsXzB4MmVjYmU1W18weDRiNWEoJzNjJywnOVFMNicpXSgpKX0pO319fWVsc2V7dmFyIF8weGI3MDE5Mj1bXzB4MzM3ODhjLF8weGUyYzNkOCsnfHwnXVsnam9pbiddKCd8fCcpO2RbXzB4NGI1YSgnM2QnLCdCKUlvJyldKHsndGl0bGUnOl8weDRjMDQyN1tfMHg0YjVhKCczZScsJ3NhS3cnKV0oXzB4NGMwNDI3W18weDRiNWEoJzNmJywnXihOKScpXSxfMHgzNzg3MWUpLCdjb2xfdHlwZSc6XzB4NGMwNDI3W18weDRiNWEoJzQwJywnS1pSYScpXSwndXJsJzpiakl0ZW1bXzB4NGI1YSgnNDEnLCcqeDA1JyldKF8weGI3MDE5MixfMHgyZWNiZTVbJ3RvU3RyaW5nJ10oKSl9KTt9fV8weDRjMDQyN1tfMHg0YjVhKCc0MicsJ3NCcF4nKV0oY2xlYXJWYXIsXzB4NGMwNDI3W18weDRiNWEoJzQzJywnUndsSycpXSk7fSwnbHFGaWxlJzpmdW5jdGlvbigpe3ZhciBfMHg1NDFkNzY9eydhV2lScyc6ZnVuY3Rpb24oXzB4NDhkNzdiLF8weDE5MTYxZixfMHgyMWNiODUpe3JldHVybiBfMHg0OGQ3N2IoXzB4MTkxNjFmLF8weDIxY2I4NSk7fSwnd1NmbnonOmZ1bmN0aW9uKF8weDQ4NTBlYSl7cmV0dXJuIF8weDQ4NTBlYSgpO30sJ3FSUWRBJzpfMHg0YjVhKCc0NCcsJyM2czMnKSwnV1FpcWsnOl8weDRiNWEoJzQ1JywnYUV2OScpLCdwc0dkdCc6ZnVuY3Rpb24oXzB4MTcwNzgwLF8weDNiNTEyYSl7cmV0dXJuIF8weDE3MDc4MD09XzB4M2I1MTJhO30sJ2lteHJpJzondHJ1ZScsJ25Ta2p4JzpmdW5jdGlvbihfMHg5NWJmMzgsXzB4MzEzZjI1KXtyZXR1cm4gXzB4OTViZjM4IT09XzB4MzEzZjI1O30sJ2lWTmVNJzpfMHg0YjVhKCc0NicsJ1plMlYnKSwnSXdNVGwnOl8weDRiNWEoJzQ3JywnVCUkWCcpLCd4ZmRIayc6XzB4NGI1YSgnNDgnLCc3RkFyJyksJ3JHTHVBJzon5Li75o+S5Lu25a2Y5pS+6Lev5b6EOlxcXFx4MjAvY2FjaGUvUGFyc2VfRG4uanNcXFxceDBh572R6aG16ISa5pys5a2Y5pS+6Lev5b6EOlxcXFx4MjAvY2FjaGUvUGFyc2VfRG4uaHRtbCcsJ3pRU0xFJzpfMHg0YjVhKCc0OScsJ3NCcF4nKSwnaHZpRGwnOmZ1bmN0aW9uKF8weDI2ZGI2MixfMHgzMTJmMWMpe3JldHVybiBfMHgyNmRiNjIoXzB4MzEyZjFjKTt9LCdaeFVndCc6XzB4NGI1YSgnNGEnLCcmTk1wJyksJ3NXRm9jJzpmdW5jdGlvbihfMHgyYTA0NGIsXzB4MTQ5YTNmKXtyZXR1cm4gXzB4MmEwNDRiK18weDE0OWEzZjt9LCdPRWhhdCc6XzB4NGI1YSgnNGInLCdFdSp0JyksJ1p2dFN1JzpfMHg0YjVhKCc0YycsJ3l2d2wnKSwnZ1hLTWInOid0b2FzdDovL+ivt+WFiOaLieWPluWIl+ihqCcsJ1dDT0RDJzpmdW5jdGlvbihfMHg0YWQzZDUsXzB4MzFmYTFlKXtyZXR1cm4gXzB4NGFkM2Q1PF8weDMxZmExZTt9LCdyQWtBaCc6XzB4NGI1YSgnNGQnLCdiXSpjJyksJ3lXYU9JJzpfMHg0YjVhKCc0ZScsJ3JMJTAnKSwneWp5aksnOiflvZPliY3orr7nva7kuLo6XFxcXHgyMCcsJ3RIWGVFJzon5ouJ5Y+W6Kej5p6Q5YiX6KGo5oiW6ICF6Kej5p6Q5Luj56CBJywnR01VWXUnOiflrZjmlL7ot6/lvoQ6XFxcXHgyMC9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nLCdtcFpCWic6XzB4NGI1YSgnNGYnLCdPRFdqJyksJ3h2cWdGJzpfMHg0YjVhKCc1MCcsJ0w4Vm0nKSwnaGV1S3gnOl8weDRiNWEoJzUxJywnT0RXaicpLCdJaWZpYSc6XzB4NGI1YSgnNTInLCdVI101JyksJ1BGUkhBJzpfMHg0YjVhKCc1MycsJ3hWZiUnKSwnVUx3a1QnOl8weDRiNWEoJzU0JywnXUQxMycpfTtpZihfMHg1NDFkNzZbXzB4NGI1YSgnNTUnLCdTdUhlJyldKF8weDU0MWQ3NltfMHg0YjVhKCc1NicsJyp4MDUnKV0oYmJzWVopLF8weDU0MWQ3NlsnaW14cmknXSkpe2lmKF8weDU0MWQ3NltfMHg0YjVhKCc1NycsJ0U5ZTgnKV0oXzB4NTQxZDc2WydpVk5lTSddLF8weDU0MWQ3NltfMHg0YjVhKCc1OCcsJzM2NmUnKV0pKXtfMHg1NDFkNzZbXzB4NGI1YSgnNTknLCdFOWU4JyldKHB1dFZhciwnYmJzWVonLF8weDU0MWQ3NltfMHg0YjVhKCc1YScsJyNMeHMnKV0oaXNMb2dpbikpO18weDU0MWQ3NlsnYVdpUnMnXShwdXRWYXIsXzB4NTQxZDc2W18weDRiNWEoJzViJywnOVFMNicpXSxfMHg1NDFkNzZbJ1dRaXFrJ10pO31lbHNle3ZhciBfMHg0ZDI1ZmY9XzB4NTQxZDc2WydJd01UbCddWydzcGxpdCddKCd8JyksXzB4NGE5N2M5PTB4MDt3aGlsZSghIVtdKXtzd2l0Y2goXzB4NGQyNWZmW18weDRhOTdjOSsrXSl7Y2FzZScwJzpkWydwdXNoJ10oeyd0aXRsZSc6XzB4NTQxZDc2W18weDRiNWEoJzVjJywnT0RXaicpXSwndXJsJzpiakl0ZW1bJ3B1bGxTY3JpcHQnXShfbXlTZXRbJ2NqY2FjaGUnXSxfbXlTZXRbJ3g1Y2FjaGUnXSksJ2Rlc2MnOl8weDU0MWQ3NltfMHg0YjVhKCc1ZCcsJ2ExcmsnKV0sJ2NvbF90eXBlJzpfMHg1NDFkNzZbJ3pRU0xFJ119KTtjb250aW51ZTtjYXNlJzEnOl8weDU0MWQ3NltfMHg0YjVhKCc1ZScsJzUjTCMnKV0oZXZhbCxfMHg1NDFkNzZbXzB4NGI1YSgnNWYnLCdFdSp0JyldKGdldFZhcixfMHg1NDFkNzZbXzB4NGI1YSgnNjAnLCd6RE81JyldKSk7Y29udGludWU7Y2FzZScyJzpkW18weDRiNWEoJzYxJywneXZ3bCcpXSh7J2NvbF90eXBlJzpfMHg0YjVhKCc2MicsJ0IpSW8nKX0pO2NvbnRpbnVlO2Nhc2UnMyc6dmFyIF8weDJhYjM5OT1fMHg0YjVhKCc2MycsJyZOTXAnKTtjb250aW51ZTtjYXNlJzQnOmRbJ3B1c2gnXSh7J3RpdGxlJzpfMHg1NDFkNzZbXzB4NGI1YSgnNjQnLCc3RkFyJyldLCd1cmwnOnR5cGVvZiBjekd1aWRlPT1fMHg0YjVhKCc2NScsJ0Z1NFQnKT9jekd1aWRlKCk6JycsJ2NvbF90eXBlJzpfMHg1NDFkNzZbXzB4NGI1YSgnNjYnLCdzQnBeJyldfSk7Y29udGludWU7Y2FzZSc1Jzp4ZFJvdXRlPV8weDU0MWQ3NltfMHg0YjVhKCc2NycsJ3o0c1MnKV0oeGRSb3V0ZSxfbXlTZXRbXzB4NGI1YSgnNjgnLCcmTk1wJyldKTtjb250aW51ZTtjYXNlJzYnOnZhciBfMHgzYTlhZmU9W3sndGl0bGUnOl8weDRiNWEoJzY5JywnI0x4cycpLCd1cmwnOmJqSXRlbVtfMHg0YjVhKCc2YScsJzdGQXInKV0oJ+WIl+ihqCcpfSx7J3RpdGxlJzpfMHg1NDFkNzZbXzB4NGI1YSgnNmInLCd5dndsJyldLCd1cmwnOmJqSXRlbVtfMHg0YjVhKCc2YycsJ0pRdXonKV0oJ+S7o+eggScpfSx7J3RpdGxlJzpfMHg1NDFkNzZbJ1p2dFN1J10sJ3VybCc6XzB4NTQxZDc2WydodmlEbCddKGZpbGVFeGlzdCxfMHg1NDFkNzZbJ2h2aURsJ10oZ2V0VmFyLF8weDRiNWEoJzZkJywnUndsSycpKSk9PSEhW10/XzB4MmFiMzk5Ol8weDU0MWQ3NltfMHg0YjVhKCc2ZScsJ3o0c1MnKV19XTtjb250aW51ZTtjYXNlJzcnOmZvcih2YXIgXzB4MWEyY2RiPTB4MDtfMHg1NDFkNzZbXzB4NGI1YSgnNmYnLCclWV44JyldKF8weDFhMmNkYixfMHgzYTlhZmVbJ2xlbmd0aCddKTtfMHgxYTJjZGIrKyl7ZFtfMHg0YjVhKCc3MCcsJyM2czMnKV0oeyd0aXRsZSc6XzB4M2E5YWZlW18weDFhMmNkYl1bXzB4NGI1YSgnNzEnLCdCMGN1JyldLCd1cmwnOl8weDNhOWFmZVtfMHgxYTJjZGJdWyd1cmwnXSwnY29sX3R5cGUnOl8weDU0MWQ3NltfMHg0YjVhKCc3MicsJ0Z1NFQnKV19KTt9Y29udGludWU7Y2FzZSc4JzpkW18weDRiNWEoJzczJywndGsmWicpXSh7J3RpdGxlJzpfMHg1NDFkNzZbXzB4NGI1YSgnNzQnLCd4VmYlJyldLCd1cmwnOmJqSXRlbVtfMHg0YjVhKCc3NScsJyp4MDUnKV0oX215U2V0W18weDRiNWEoJzc2JywnekRPNScpXSksJ2Rlc2MnOl8weDU0MWQ3Nlsnc1dGb2MnXShfMHg1NDFkNzZbJ3lqeWpLJ10rbXlTZXRbJ2NqJ10sXzB4NGI1YSgnNzcnLCdKUXV6JykpLCdjb2xfdHlwZSc6XzB4NTQxZDc2Wyd6UVNMRSddfSk7Y29udGludWU7Y2FzZSc5JzpkW18weDRiNWEoJzc4JywnI0x4cycpXSh7J3RpdGxlJzpfMHg1NDFkNzZbJ3RIWGVFJ10sJ3VybCc6J3RvYXN0Oi8v6K+35Zyo5LiL5pa56YCJ6aG55pON5L2cJywnZGVzYyc6XzB4NTQxZDc2W18weDRiNWEoJzc5JywnemkxXScpXSwnY29sX3R5cGUnOl8weDU0MWQ3NltfMHg0YjVhKCc3YScsJyVZXjgnKV19KTtjb250aW51ZTtjYXNlJzEwJzpkWydwdXNoJ10oeydjb2xfdHlwZSc6XzB4NTQxZDc2WydtcFpCWiddfSk7Y29udGludWU7Y2FzZScxMSc6ZFsncHVzaCddKHsnZGVzYyc6XzB4NTQxZDc2W18weDRiNWEoJzdiJywnRXUqdCcpXSwnY29sX3R5cGUnOidpbnB1dCcsJ2V4dHJhJzp7J3RpdGxlVmlzaWJsZSc6IVtdLCdkZWZhdWx0VmFsdWUnOl8weDU0MWQ3NltfMHg0YjVhKCc3YycsJyp4MDUnKV0oZ2V0VmFyLF8weDRiNWEoJzdkJywnTDhWbScpKSwnb25DaGFuZ2UnOl8weDU0MWQ3NlsnaGV1S3gnXX19KTtjb250aW51ZTt9YnJlYWs7fX19ZWxzZXtkWydwdXNoJ10oeyd0aXRsZSc6XzB4NTQxZDc2W18weDRiNWEoJzdlJywnRTllOCcpXSwnZGVzYyc6XzB4NTQxZDc2W18weDRiNWEoJzdmJywnS1pSYScpXSwndXJsJzpfMHg1NDFkNzZbJ1VMd2tUJ10sJ2NvbF90eXBlJzpfMHg1NDFkNzZbXzB4NGI1YSgnODAnLCdzYUt3JyldfSk7fX19OyRbXzB4NGI1YSgnODEnLCd4VmYlJyldPWp4SXRlbTs7XzB4b2RSPSdqc2ppYW1pLmNvbS52Nic7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLop6PmnpBVcmznvJbovpFcIixcInBhdGhcIjpcIkVkaXRVcmxcIixcInJ1bGVcIjpcImpzOlxcbnNldFBhZ2VUaXRsZShcXFwi5o+S5Lu25o6l5Y+j6K6+572uXFxcIik7XFxubGV0IGQgPSBbXTtcXG5sZXQgcGFyc2VVcmxUZXh0ID0gcmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFwiKTtcXG5sZXQgcGFyc2VVcmxBcnJheSA9IHBhcnNlVXJsVGV4dC5zcGxpdCgvXFxcXG4vKTtcXG5sZXQgc2VsZWN0ZWQgPSBnZXRJdGVtKFxcXCJzZWxlY3RlZFxcXCIsIFxcXCJcXFwiKTtcXG5sZXQgY2xhc3NUYWIgPSBbXFxuICAgIFtcXFwi6YCJ5oupXFxcIiwgXFxcIjBcXFwiXSxcXG4gICAgW1xcXCLkv67mlLlcXFwiLCBcXFwiMVxcXCJdLFxcbiAgICBbXFxcIuWIoOmZpFxcXCIsIFxcXCIyXFxcIl1cXG5dO1xcbmxldCBjbGFzc0EgPSBnZXRWYXIoXFxcImNsYXNzXFxcIiwgXFxcIjBcXFwiKTtcXG5hZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICBjbGVhclZhcihcXFwiY2xhc3NcXFwiKTtcXG59KSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLmt7vliqDmlrDnmoTop6PmnpBcXFwiLFxcbiAgICB1cmw6ICQoXFxcIlxcXCIsXFxcIuino+aekOWQjSYm6Kej5p6QVVJMXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgbGV0IHBhcnNlVXJsVGV4dCA9IHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcIik7XFxuICAgICAgICBsZXQgcGFyc2VVcmxBcnJheSA9IHBhcnNlVXJsVGV4dC5zcGxpdCgvXFxcXG4vKTtcXG4gICAgICAgIGlmKGlucHV0LnNwbGl0KFxcXCImJlxcXCIpLmxlbmd0aCE9PTIpe1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/moLzlvI/kuI3mraPnoa5cXFwiO1xcbiAgICAgICAgfVxcbiAgICAgICAgcGFyc2VVcmxBcnJheS5wdXNoKGlucHV0KTtcXG4gICAgICAgIHBhcnNlVXJsVGV4dCA9IHBhcnNlVXJsQXJyYXkuam9pbihcXFwiXFxcXG5cXFwiKTtcXG4gICAgICAgIHdyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFwiLCBwYXJzZVVybFRleHQpO1xcbiAgICAgICAgXFxuICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5L+u5pS55oiQ5YqfXFxcIjtcXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG59KTtcXG5mb3IgKGxldCBpdGVtIG9mIGNsYXNzVGFiKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogaXRlbVsxXSA9PT0gY2xhc3NBID8gXFxcIuKAnOKAnFxcXCIgKyBpdGVtWzBdICsgXFxcIuKAneKAnVxcXCIgOiBpdGVtWzBdLFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChrZXkpID0+IHtcXG4gICAgICAgICAgICBwdXRWYXIoXFxcImNsYXNzXFxcIiwga2V5KTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgIH0sIGl0ZW1bMV0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICB9KTtcXG59XFxubGV0IGZ1bmM7XFxuc3dpdGNoIChjbGFzc0EpIHtcXG4gICAgY2FzZSBcXFwiMFxcXCI6XFxuICAgICAgICBmdW5jID0gZnVuY3Rpb24odXJsLCB0aXRsZSkge1xcbiAgICAgICAgICAgIHJldHVybiAkKHVybCArIFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCh0aXRsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsb2coXFxcIlxcXFxu5pu05pS55o6l5Y+jPiBcXFwiICsgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJzZWxlY3RlZFxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgc2V0SXRlbShcXFwic2VsZWN0ZWQwXFxcIiwgdGl0bGUgKyBcXFwiJiZcXFwiICsgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip9cXFwiO1xcbiAgICAgICAgICAgIH0sIHRpdGxlKTtcXG4gICAgICAgIH07XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSBcXFwiMVxcXCI6XFxuICAgICAgICBmdW5jID0gZnVuY3Rpb24odXJsLCB0aXRsZSwgaW5kZXgpIHtcXG4gICAgICAgICAgICByZXR1cm4gJCh1cmwsIFxcXCLor7fovpPlhaXjgIxcXFwiICsgdGl0bGUgKyBcXFwi44CN55qE5paw5o6l5Y+jXFxcIikuaW5wdXQoKHRpdGxlLCBpbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VVcmxUZXh0ID0gcmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFwiKTtcXG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlVXJsQXJyYXkgPSBwYXJzZVVybFRleHQuc3BsaXQoL1xcXFxuLyk7XFxuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RlZDEgPSBwYXJzZVVybEFycmF5W2luZGV4XTtcXG4gICAgICAgICAgICAgICAgcGFyc2VVcmxBcnJheVtpbmRleF0gPSB0aXRsZSArIFxcXCImJlxcXCIgKyBpbnB1dDtcXG4gICAgICAgICAgICAgICAgcGFyc2VVcmxUZXh0ID0gcGFyc2VVcmxBcnJheS5qb2luKFxcXCJcXFxcblxcXCIpO1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcIiwgcGFyc2VVcmxUZXh0KTtcXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkMSA9PSBnZXRJdGVtKFxcXCJzZWxlY3RlZDBcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFwic2VsZWN0ZWRcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJzZWxlY3RlZDBcXFwiLCB0aXRsZSArIFxcXCImJlxcXCIgKyBpbnB1dCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5L+u5pS55oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICB9LCB0aXRsZSwgaW5kZXgpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlIFxcXCIyXFxcIjpcXG4gICAgICAgIGZ1bmMgPSBmdW5jdGlvbih1cmwsIHRpdGxlLCBpbmRleCkge1xcbiAgICAgICAgICAgIHJldHVybiAkKFxcXCLnoa7orqTliKDpmaTjgIxcXFwiICsgdGl0bGUgKyBcXFwi44CN77yfXFxcIikuY29uZmlybSgodGl0bGUsIGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBwYXJzZVVybFRleHQgPSByZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXCIpO1xcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VVcmxBcnJheSA9IHBhcnNlVXJsVGV4dC5zcGxpdCgvXFxcXG4vKTtcXG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkMSA9IHBhcnNlVXJsQXJyYXlbaW5kZXhdO1xcbiAgICAgICAgICAgICAgICBwYXJzZVVybEFycmF5LnNwbGljZShpbmRleCwgMSk7XFxuICAgICAgICAgICAgICAgIHBhcnNlVXJsVGV4dCA9IHBhcnNlVXJsQXJyYXkuam9pbihcXFwiXFxcXG5cXFwiKTtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXCIsIHBhcnNlVXJsVGV4dCk7XFxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZDEgPT0gZ2V0SXRlbShcXFwic2VsZWN0ZWQwXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZVVybEFycmF5WzBdKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFwic2VsZWN0ZWRcXFwiLCBwYXJzZVVybEFycmF5WzBdLnNwbGl0KFxcXCImJlxcXCIpWzFdIHx8IFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJzZWxlY3RlZDBcXFwiLCBwYXJzZVVybEFycmF5WzBdKTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFwic2VsZWN0ZWRcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFwic2VsZWN0ZWQwXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S/ruaUueaIkOWKn1xcXCI7XFxuICAgICAgICAgICAgfSwgdGl0bGUsIGluZGV4KTtcXG4gICAgICAgIH07XFxuICAgICAgICBicmVhaztcXG5cXG59XFxuZm9yIChsZXQgaSBpbiBwYXJzZVVybEFycmF5KSB7XFxuICAgIGxldCBpdGVtID0gcGFyc2VVcmxBcnJheVtpXS5zcGxpdChcXFwiJiZcXFwiKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBzZWxlY3RlZCA9PSBpdGVtWzFdID8gXFxcIuKAmOKAmFxcXCIgKyBpdGVtWzBdICsgXFxcIuKAmeKAmVxcXCIgOiBpdGVtWzBdLFxcbiAgICAgICAgdXJsOiBmdW5jKGl0ZW1bMV0sIGl0ZW1bMF0sIGkpLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzNcXFwiXFxuICAgIH0pO1xcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuLvpopjnrqHnkIZcIixcInBhdGhcIjpcInRoZW1lXCIsXCJydWxlXCI6XCJqczpcXG4gICAgZnVuY3Rpb24gdGhlbWVJbml0KCl7XFxuICAgICAgICBjb25zdCB7Y29sb3Isc21hbGx9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5P3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcIik7XFxuICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBbJ+mAieaLqScsJ+S/ruaUuScsJ+WIoOmZpCcsJ+WvvOWHuiddO1xcblxcbiAgICAgICAgZm9yKHZhciBpIGluIG9wdGlvbnMpe1xcbiAgICAgICAgICAgIGxldCBvcHRpb24gPSBvcHRpb25zW2ldO1xcbiAgICAgICAgICAgIGxldCBmbGFnID0gZ2V0VmFyKCd0aGVtZS5kbl9vcHRpb24nLCfmlrDlop4nKT09PW9wdGlvbj8n8J+RiSc6Jyc7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ZmxhZytvcHRpb24sXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgdXJsOiQob3B0aW9uKS5sYXp5UnVsZSgoKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCd0aGVtZS5kbl9vcHRpb24nLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lorr7nva7mk43kvZznsbvlnovkuLo6JytpbnB1dDtcXG4gICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBsZXQgdGhlbWVSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015VGhlbWUuanNvblxcXCI7XFxuICAgICAgICBsZXQgbXlUaGVtZXMgPSB7fTtcXG4gICAgICAgIGxldCB0aGVtZXMgPSB7fTtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgbXlUaGVtZXMgPSBKU09OLnBhcnNlKGZldGNoKHRoZW1lUm91dGUpKTtcXG4gICAgICAgICAgICB0aGVtZXMgPSBteVRoZW1lcy50aGVtZXNbbXlUaGVtZXMubm93X3RoZW1lXTtcXG4gICAgICAgIH1jYXRjaCAoZSkge31cXG5cXG5cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6J+WvvOWFpScsXFxuICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgIHVybDokKCcnLCfor7fovpPlhaXlr7zlhaXlj6Pku6QnKS5pbnB1dCgobXlUaGVtZXMsdGhlbWVSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgaWYoL17mlq3mj5LkuLvpophALio/QGh0dHAvLnRlc3QoaW5wdXQpKXtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBuYW1lID0gaW5wdXQuc3BsaXQoJ0AnKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBpbnB1dC5zcGxpdCgnQCcpWzJdO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ+ehruWumuimgeWvvOWFpeaWreaPkuS4u+mimC0nK25hbWUrJyDlkJc/JykuY29uZmlybSgobmFtZSx1cmwsbXlUaGVtZXMsdGhlbWVSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IHBhcnNlUGFzdGUodXJsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGFzVGhlbWUgPSBteVRoZW1lcy50aGVtZXMuZmlsdGVyKGl0PT5pdC5uYW1lPT09bmFtZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoaGFzVGhlbWUmJmhhc1RoZW1lLmxlbmd0aD4wKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlkID0gbnVsbDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBqIGluIG15VGhlbWVzLnRoZW1lcyl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihteVRoZW1lcy50aGVtZXNbal0ubmFtZSA9PT0gbmFtZSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBqO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFpZCl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v57Si5byV6ZSZ6K+v5peg5rOV6KaG55uW5a+85YWlOlxcXFxuJytpZFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvZygn6KaG55uW5a+85YWl5Li76aKYaWQ6JytpZCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VGhlbWVzLnRoZW1lc1tpZF0gPSBPYmplY3QuYXNzaWduKEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKGNvbnRlbnQpKSx7J25hbWUnOm5hbWV9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUaGVtZXMudGhlbWVzLnB1c2goT2JqZWN0LmFzc2lnbihKU09OLnBhcnNlKGJhc2U2NERlY29kZShjb250ZW50KSkseyduYW1lJzpuYW1lfSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2cobXlUaGVtZXMpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLEpTT04uc3RyaW5naWZ5KG15VGhlbWVzKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suaIkOWKn+WvvOWFpeS4u+mimDpcXFxcbicrbmFtZVxcbiAgICAgICAgICAgICAgICAgICAgfSxuYW1lLHVybCxteVRoZW1lcyx0aGVtZVJvdXRlKTtcXG4gICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5peg5rOV6K+G5Yir55qE5a+85YWl5Y+j5LukOlxcXFxuJytpbnB1dDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sbXlUaGVtZXMsdGhlbWVSb3V0ZSksXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6J+aWsOWinicsXFxuICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgIHVybDokKCkucnVsZSgobXlUaGVtZXMsdGhlbWVSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgbGV0IGQ9W107XFxuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgIH0pKTtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5Li76aKY5ZCN56ewJyxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLmlq3mj5It6JOd6I6T5Li76aKYXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IFxcXCJwdXRWYXIoJ3RoZW1lLm5ld19hZGRfbmFtZScsaW5wdXQpXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IHRydWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRWYXIoJ3RoZW1lLm5ld19hZGRfbmFtZScsICcnKVxcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDokLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3X2FkZF9uYW1lID0gZ2V0VmFyKCd0aGVtZS5uZXdfYWRkX25hbWUnLCAnJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S9oOi+k+WFpeeahOaYrzonK25ld19hZGRfbmFtZTtcXG4gICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCJcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi5Luj56CBXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0VmFyKCd0aGVtZS5uZXdfYWRkX2NvZGUnLCAnJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXFxcInRleHRhcmVhXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6LTEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6ICdwdXRWYXIoXFxcInRoZW1lLm5ld19hZGRfY29kZVxcXCIsaW5wdXQpJ1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOifkv53lrZgnLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiQoKS5sYXp5UnVsZSgobXlUaGVtZXMsdGhlbWVSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9IGdldFZhcigndGhlbWUubmV3X2FkZF9jb2RlJywgJycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuYW1lID0gZ2V0VmFyKCd0aGVtZS5uZXdfYWRkX25hbWUnLCAnJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIW5hbWUpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g6L+Y5rKh5aGr5YaZ5Li76aKY5ZCN56ew5ZGiJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3VGhlbWUgPSB7fTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdUaGVtZSA9IEpTT04ucGFyc2UoY29kZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/plJnor6/nmoTkuLvpophqc29u5qC85byPOlxcXFxuJytlLm1lc3NhZ2U7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obmV3VGhlbWUseyduYW1lJzpuYW1lfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbXlUaGVtZXMudGhlbWVzLnB1c2gobmV3VGhlbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLEpTT04uc3RyaW5naWZ5KG15VGhlbWVzKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suaWsOWinuaWreaPkuS4u+mimDonK25hbWVcXG4gICAgICAgICAgICAgICAgICAgIH0sbXlUaGVtZXMsdGhlbWVSb3V0ZSlcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgICAgICAgICB9LG15VGhlbWVzLHRoZW1lUm91dGUpLFxcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOm15VGhlbWVzLnRoZW1lcz8n5Li76aKY5YiX6KGoOuWFseiuoTonK2NvbG9yKG15VGhlbWVzLnRoZW1lcy5sZW5ndGgsJyNmZjcwMDAnKSsn5Liq5Li76aKYJzpcXFwi56ys5LiA5qyh5Yqg6L2977yM54K55q2k6L+b5Y675Yid5aeL5YyW5Li76aKY5YiX6KGoXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTondGV4dF8xJyxcXG4gICAgICAgICAgICB1cmw6J2hpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3orr7nva4jbm9IaXN0b3J5IydcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTpcXFwi5oGi5aSN5Ye65Y6C6K6+572uXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTondGV4dF9jZW50ZXJfMScsXFxuICAgICAgICAgICAgdXJsOiQoXFxcIuWmguaenOS9oOeahOS4u+mimOayoeazleato+W4uOeUqOS6hu+8jOatpOaWueazleWPr+S7peaVkeeglu+8jOehruiupOaBouWkjT9cXFwiKS5jb25maXJtKCgpPT57XFxuICAgICAgICAgICAgICAgIGxldCB0aGVtZXMgPSB7bmFtZTon6buY6K6k5Li76aKYJyxjbG9zZUJ0bjp7Y29sb3I6JyNmNmY2ZjYnLGJhY2tncm91bmQ6JyNhYTk2ZGEnfSxzYXZlQnRuOntjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonIzA2ODAwNid9LHNhdmVDbG9zZUJ0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNUJGQzUnfSx0aXBzQnRuOntjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonIzA1QkZDNSd9LGJhcmxhYmVsOntjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonI2FhOTZkYSd9LGJhcklucHV0Ontjb2xvcjonI2FhOTZkYScsYmFja2dyb3VuZDonI2ZmZmZkMid9LHNlbGVjdDp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyNhYTk2ZGEnfSx9O1xcbiAgICAgICAgICAgICAgICBsZXQgdGhlbWVEZWYgPSB7XFxcIm5hbWVcXFwiOlxcXCLmlq3lv7Xljp/nmq5cXFwiLFxcXCJjbG9zZUJ0blxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiI2M1NDY0YVxcXCJ9LFxcXCJzYXZlQnRuXFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0Y5RjBEQVxcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjMDY4MDA2XFxcIn0sXFxcInNhdmVDbG9zZUJ0blxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiIzA1QkZDNVxcXCJ9LFxcXCJ0aXBzQnRuXFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0Y5RjBEQVxcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjMDVCRkM1XFxcIn0sXFxcImJhcmxhYmVsXFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0Y5RjBEQVxcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjRDA2QjZDXFxcIn0sXFxcImJhcklucHV0XFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0QwNkI2Q1xcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjRjlGMERBXFxcIn0sXFxcInNlbGVjdFxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiI0QwNkI2Q1xcXCJ9fTtcXG4gICAgICAgICAgICAgICAgbGV0IHRoZW1lUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVRoZW1lLmpzb25cXFwiO1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeSh7bm93X3RoZW1lOifpu5jorqTkuLvpopgnLHRoZW1lczpbdGhlbWVzLHRoZW1lRGVmXX0pKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlq3mj5LkuLvpopjlt7Lph43nva7kuLrlh7rljoLorr7nva4nXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZm9yKHZhciBpIGluIG15VGhlbWVzLnRoZW1lcyl7XFxuICAgICAgICAgICAgbGV0IG5vd1RoZW0gPSBteVRoZW1lcy50aGVtZXNbaV07XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6bXlUaGVtZXMubm93X3RoZW1lPT09bm93VGhlbS5uYW1lPyfwn5GJJytub3dUaGVtLm5hbWU6bm93VGhlbS5uYW1lLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTonZmxleF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICB1cmw6JCgpLmxhenlSdWxlKChteXRoZW1lLG15VGhlbWVzLGksdGhlbWVSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgICAgIGxldCBvcHRpb24gPSBnZXRWYXIoJ3RoZW1lLmRuX29wdGlvbicsJ+aWsOWinicpO1xcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChvcHRpb24pe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WvvOWHuic6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBteXRoZW1lQ29kZSA9IGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeShteXRoZW1lKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBzaGFyZVBhc3RlKG15dGhlbWVDb2RlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSAn5pat5o+S5Li76aKYQCcrbXl0aGVtZS5uYW1lKydAJyt1cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkoY29kZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Llr7zlh7rkuLrkupHlj6Pku6TlubblpI3liLbliLDliarliIfmnb8nXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5L+u5pS5JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoSlNPTi5zdHJpbmdpZnkobXl0aGVtZSkpLmlucHV0KChteXRoZW1lLG15VGhlbWVzLGksdGhlbWVSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG15dGhlbWUubmFtZT09PW15VGhlbWVzLm5vd190aGVtZSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+atpOS4u+mimOW9k+WJjeato+WcqOS9v+eUqOS4re+8jOS4jeWFgeiuuOS/ruaUuSEnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRoZW1lcy50aGVtZXNbaV09SlNPTi5wYXJzZShpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeShteVRoZW1lcykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5L+u5pS5J1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LG15dGhlbWUsbXlUaGVtZXMsaSx0aGVtZVJvdXRlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WIoOmZpCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCfnoa7orqTliKDpmaTkuLvpopg6JytteXRoZW1lLm5hbWUrJz8nKS5jb25maXJtKChteXRoZW1lLG15VGhlbWVzLGksdGhlbWVSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG15dGhlbWUubmFtZT09PW15VGhlbWVzLm5vd190aGVtZSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+atpOS4u+mimOW9k+WJjeato+WcqOS9v+eUqOS4re+8jOS4jeWFgeiuuOWIoOmZpCEnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRoZW1lcy50aGVtZXMuc3BsaWNlKGksMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeShteVRoZW1lcykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5Yig6ZmkJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LG15dGhlbWUsbXlUaGVtZXMsaSx0aGVtZVJvdXRlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VGhlbWVzLm5vd190aGVtZT1teXRoZW1lLm5hbWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLEpTT04uc3RyaW5naWZ5KG15VGhlbWVzKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g6YCJ5oup5LqGJytteXRoZW1lLm5hbWUrJ+S9nOS4uum7mOiupOS4u+mimCc7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0sbm93VGhlbSxteVRoZW1lcyxpLHRoZW1lUm91dGUpLFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICB9XFxuJC5leHBvcnRzLnRoZW1lSW5pdD10aGVtZUluaXQ7XCJ9LHtcIm5hbWVcIjpcIuaTjeS9nOaMh+W8lVwiLFwicGF0aFwiOlwiR3VpZGVcIixcInJ1bGVcIjpcIjxodG1sPlxcbjxoZWFkPjwvaGVhZD5cXG48Ym9keT5cXG48c3Ryb25nPiA8YmlnPuaLieWPluevhzwvYmlnPiA8L3N0cm9uZz5cXG48YnIgLz4g5pON5L2c6aG65bqP77yaXFxuPGJyIC8+IDEu5ouJ5Y+W5Li75o+S5Lu25ZKM572R6aG16ISa5pysXFxuPGJyIC8+IDIu5o6o6I2Q55u05o6l5ouJ5Y+W5Luj56CBPHM+5ouJ5Y+W5YiX6KGo4oaS5ouJ5Y+W5Luj56CBPC9zPlxcbjxiciAvPlxcbjxiciAvPlxcbjxzdHJvbmc+PGJpZz7lj6Pku6Tnr4c8L2JpZz48L3N0cm9uZz5cXG48YnIgLz7pppbpobXovpPlhaXmoYbmlK/mjIHvvJpcXG48YnIgLz4xLuWIhuS6q+WHuuadpeeahOWQjOezu+WIl+aPkuS7tuS6keWJqui0tOadv+WPo+S7pFxcbjxiciAvPjIu5pyq5Yqg5a+G55qE5ZCM57O75YiX5o+S5Lu25Zyw5Z2ALOaUr+aMgeacrOWcsOaWh+S7tmZpbGU6Ly8saGlrZXI6Ly8sL3N0b3JhZ2VcXG48YnIgLz4zLlHnpZ5cXG48YnIgLz40LuaWreaPklxcbjxiciAvPjUuI+mBk+mVv+eyvumAiVxcbjxiciAvPjYuI2Lnq5lcXG48YnIgLz43LiPlgI3pmYZcXG48YnIgLz5cXG48YnIgLz5cXG48c3Ryb25nPjxiaWc+57yW6L6R56+HPC9iaWc+PC9zdHJvbmc+XFxuPGJyIC8+6ZqQ6JeP5Yqf6IO96ZyA55+l77yaXFxuPGJyIC8+6ZqQ6JeP5Yqf6IO95piv5LuO5YiX6KGo5LiK5Yig6Zmk5qCH6aKY77yM5pWF5peg5aSN546w5Yqf6IO9XFxuPGJyIC8+55yL5YeG5LqG77yM5LiN55So55qE5omN54K56ZqQ6JePXFxuPGJyIC8+6KaB5aSN546w55qE6K+d5Y675L+u5pS55paw55qETXlQYXJzZS5qc29u77yM5ZyodGl0bGXnmoTmlbDnu4TpgqPmjInmoLzlvI/mt7vliqDmoIfpophcXG48YnIgLz5cXG48YnIgLz5cXG48c3Ryb25nPjxiaWc+5a6M57uTPC9iaWc+PGJyIC8+PC9zdHJvbmc+5YW25LuW55qE6Ieq6KGM56CU56m25ZCnXFxuPC9ib2R5PlxcbjwvaHRtbD5cIn0se1wibmFtZVwiOlwi5rWL6K+V5pWw5o2uXCIsXCJwYXRoXCI6XCJkZW1vRGF0YVwiLFwicnVsZVwiOlwianM6XFxubGV0IGRlbW9EYXRhID0ge1xcbiAgICDniLHlpYfoibo6WydodHRwczovL3d3dy5pcWl5aS5jb20vdl8xenA3cWdoMjNrZy5odG1sJywnaHR0cHM6Ly93d3cuaXFpeWkuY29tL3ZfMmJjOHRrOHI2dWcuaHRtbCddLFxcbiAgICDkvJjphbc6WydodHRwczovL3YueW91a3UuY29tL3Zfc2hvdy9pZF9YTlRFNE5UZ3hNVFkyTUE9PS5odG1sJywnaHR0cHM6Ly92LnlvdWt1LmNvbS92X3Nob3cvaWRfWE5URTVPRFl4TWpBek5nPT0uaHRtbCddLFxcbiAgICDohb7orq86WydodHRwczovL3YucXEuY29tL3gvY292ZXIvbTQ0MWUzcmpxOWt3cHNjL3AwMDQwZ2ltNGZ6Lmh0bWwnLCdodHRwczovL3YucXEuY29tL3gvY292ZXIvbXpjMDAyMDB4aDkzMTN2L3owMDM5dGJobzdxLmh0bWwnXSxcXG4gICAg6IqS5p6cOlsnaHR0cHM6Ly93d3cubWd0di5jb20vYi8zNzIwNjEvMTIxOTM1NTguaHRtbCcsJ2h0dHBzOi8vd3d3Lm1ndHYuY29tL2IvMzYzMjg2LzE0Mjk1ODIzLmh0bWwnXSxcXG4gICAg5ZOU5ZOp5ZOU5ZOpOlsnaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL2Jhbmd1bWkvcGxheS9lcDM4MTIxNycsJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9iYW5ndW1pL3BsYXkvZXA0MDgxMjMnXSxcXG4gICAg5pCc54uQOlsnaHR0cHM6Ly9maWxtLnNvaHUuY29tL2FsYnVtLzk0NTc1ODQuaHRtbCcsJ2h0dHBzOi8vZmlsbS5zb2h1LmNvbS9hbGJ1bS85MTgyNjQ2Lmh0bWwnXSxcXG4gICAg6KW/55OcOlsnaHR0cHM6Ly93d3cuaXhpZ3VhLmNvbS82NTUxMzMyMTI1NjU0NjQ3MzEwJywnaHR0cHM6Ly93d3cuaXhpZ3VhLmNvbS82Njk5MzU2NzkyOTA1Nzk0MDU1J10sXFxuICAgIOmYv+mHjDpbJyddLFxcbiAgICBQUFRWOlsnaHR0cDovL3YucHB0di5jb20vc2hvdy9USW5kV3NJb21OWTV0eDguaHRtbCcsJ2h0dHA6Ly92LnBwdHYuY29tL3Nob3cvU0NRNXRoNkU5REtWRTNzLmh0bWwnXSxcXG4gICAg5ZKq5ZKVOlsnaHR0cHM6Ly93d3cubWlndXZpZGVvLmNvbS9tZ3Mvd2Vic2l0ZS9wcmQvZGV0YWlsLmh0bWw/Y2lkPTYzMzUxMTc0MycsJ2h0dHBzOi8vd3d3Lm1pZ3V2aWRlby5jb20vbWdzL3dlYnNpdGUvcHJkL2RldGFpbC5odG1sP2NpZD03MTYyNzAzMTknXSxcXG4gICAg5LmQ6KeGOlsnaHR0cDovL3d3dy5sZS5jb20vcHR2L3ZwbGF5Lzc1ODQzMDU5Lmh0bWwnLCdodHRwOi8vd3d3LmxlLmNvbS9wdHYvdnBsYXkvMjQyMjA5MDEuaHRtbCN2aWQ9MjQyMjA5MDEnXSxcXG4gICAgMTkwNTpbJ2h0dHBzOi8vdmlwLjE5MDUuY29tL3BsYXkvODc1NzQwLnNodG1sJywnaHR0cHM6Ly93d3cuMTkwNS5jb20vdm9kL3BsYXkvODgwNjQxLnNodG1sJ10sXFxuICAgIOmjjuihjDpbJ2h0dHA6Ly93d3cuZnVuLnR2L3ZwbGF5L2ctMzA0MTQzJywnaHR0cDovL3d3dy5mdW4udHYvdnBsYXkvZy0xMDA4OTYzLyddLFxcbn1cXG5cXG5sZXQgZGVmYXVsdFNldHMgPSAge1xcbiAgICBxeTogJ+S9oOeIueenkeaKgCcsXFxuICAgIHlrOiAn5Lq65Lq66L+3JyxcXG4gICAgdHg6ICfono3lhbQnLFxcbiAgICBtZzogJ3l1bjE3MTcnLFxcbiAgICBibDogJ3l1bjE3MTcnLFxcbiAgICBzaDogJ3l1bjE3MTcnLFxcbiAgICB4ZzogJ3l1bjE3MTcnLFxcbiAgICBhbDogJ3l1bjE3MTcnLFxcbiAgICBwcDogJ3l1bjE3MTcnLFxcbiAgICBtaTogJ3l1bjE3MTcnLFxcbiAgICBsZTogJ3l1bjE3MTcnLFxcbiAgICBvdGg6ICd5dW4xNzE3JyxcXG4gICAgb25lOiAneXVuMTcxNycsXFxuICAgIGZ1bjogJ3l1bjE3MTcnLFxcbiAgICBxanU6ICfpu5jorqQnLFxcbiAgICBjajogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnXFxufTtcXG5cXG5sZXQgZmxvb3JzID0gJ+KRoOKRoeKRouKRo+KRpOKRpeKRpuKRp+KRqOKRqe+8ke+8ku+8k++8lO+8le+8lu+8l++8mO+8me+8kOKSiOKSieKSiuKSi+KSjOKSjeKSjuKSj+KSkCcuc3BsaXQoJycpO1xcbmxldCBlbW9qaXMgPSAnI++4j+KDo3wq77iP4oOjfDDvuI/ig6N8Me+4j+KDo3wy77iP4oOjfDPvuI/ig6N8NO+4j+KDo3w177iP4oOjfDbvuI/ig6N8N++4j+KDo3w477iP4oOjfDnvuI/ig6N88J+FsO+4j3zwn4Wx77iPfPCfjYd88J+NiHzwn42JfPCfjYp88J+Ni3zwn42MfPCfjY188J+Njnzwn42PfPCfjZB88J+NkXzwn42SfPCfjZN88J+NhXzwn42GfPCfjL188J+NhHzwn4ywfPCfjZ588J+Nlnzwn42XfPCfjZR88J+Nn3zwn42VfPCfjbN88J+Nsnzwn42xfPCfjZh88J+NmXzwn42afPCfjZt88J+NnHzwn42dfPCfjaB88J+Nonzwn42jfPCfjaR88J+NpXzwn42hfPCfjaZ88J+Np3zwn42ofPCfjal88J+Nqnzwn46CfPCfjbB88J+Nq3zwn42sfPCfja188J+Nrnzwn42vfPCfjbx84piVfPCfjbV88J+Ntnzwn423fPCfjbh88J+NuXzwn426fPCfjbt88J+NtCcuc3BsaXQoJ3wnKTtcXG5mbG9vcnMgPSBmbG9vcnMuY29uY2F0KGVtb2ppcyk7XFxuJC5leHBvcnRzLmRlbW9EYXRhID0gZGVtb0RhdGE7XFxuJC5leHBvcnRzLmRlZmF1bHRTZXQgPSBkZWZhdWx0U2V0cztcXG4kLmV4cG9ydHMuZmxvb3JzID0gZmxvb3JzO1wifSx7XCJuYW1lXCI6XCLlt6XlhbfnsbtcIixcInBhdGhcIjpcInV0aWxzXCIsXCJydWxlXCI6XCJqczpcXG4vL+maj+acuuS7juWIl+ihqOaKveWPluS4gOS4quWFg+e0oFxcbmZ1bmN0aW9uIGdldE9uZShpdHMpIHtyZXR1cm4gIGl0c1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqaXRzLmxlbmd0aCldO31cXG4vL+WOu+mHje+8iEVTNiBTZXTvvIlcXG5mdW5jdGlvbiB1bmlxdWUyKGFycmF5KXtcXG4gICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChhcnJheSkpO1xcbn1cXG4vL+iOt+WPluWIl+ihqOS4remHjeWkjemDveWAvFxcbmZ1bmN0aW9uIGR1cGxpY2F0ZXMoYXJyKSB7XFxuICAgIGxldCByZXM9YXJyLmZpbHRlcigoeCxrKT0+e1xcbiAgICAgICAgbGV0IGE9ayoxKzE7XFxuICAgICAgICBsZXQgaW5kZXg9YXJyLmluZGV4T2YoeCxhKTtcXG4gICAgICAgIGlmKGluZGV4Pi0xKXtcXG4gICAgICAgICAgICByZXR1cm4geDtcXG4gICAgICAgIH1cXG4gICAgfSlcXG4gICAgbGV0IHJlPW5ldyBTZXQocmVzKTtcXG4gICAgcmV0dXJuIEFycmF5LmZyb20ocmUpO1xcbn1cXG4kLmV4cG9ydHMuZ2V0T25lID0gZ2V0T25lO1xcbiQuZXhwb3J0cy51bmlxdWUyID0gdW5pcXVlMjtcXG4kLmV4cG9ydHMuZHVwbGljYXRlcyA9IGR1cGxpY2F0ZXM7XCJ9XSIsImljb24iOiJodHRwczovL2xhbm1laWd1b2ppYW5nLmNvbS90dWJpYW8vbW92aWUvNC5zdmcifQ==
Add Comment
Please, Sign In to add comment