Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@咕咕番🌪️@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6Ii5hbnRob2xvZ3ktbGlzdC1wbGF5JiZhLC0xJiZUZXh0LmpzOifmm7TmlrDoh7PvvJonK2lucHV0IiwidGl0bGUiOiLlkpXlkpXnlarwn4yq77iPIiwiYXV0aG9yIjoiIiwidXJsIjoiaGlrZXI6Ly9lbXB0eSMjaHR0cHM6Ly93d3cuZ3VndWZhbi5jb20vIiwidmVyc2lvbiI6MCwiY29sX3R5cGUiOiJtb3ZpZV8zIiwiY2xhc3NfbmFtZSI6IiIsInR5cGUiOiJ2aWRlbyIsImNsYXNzX3VybCI6IiIsImFyZWFfbmFtZSI6IiIsImFyZWFfdXJsIjoiIiwic29ydF9uYW1lIjoiIiwieWVhcl9uYW1lIjoiIiwic29ydF91cmwiOiIiLCJ5ZWFyX3VybCI6IiIsImZpbmRfcnVsZSI6ImpzOlxudmFyIGQgPSBbXTtcblxuTVlfVVJMID0gTVlfVVJMLnJlcGxhY2UoJ2hpa2VyOi8vZW1wdHkjIycsICcnKTtcbnZhciBodG1sID0gZmV0Y2goTVlfVVJMKTtcblxuLy/moIfpopgs5o+P6L+wLOWbvueJhyzpk77mjqVcbnZhciDmoIfpopggPSAnYSYmdGl0bGUnO1xudmFyIOaPj+i/sCA9ICcucHVibGljLWxpc3QtcHJiJiZUZXh0JztcbnZhciDlm77niYcgPSAnLm1hc2stMSYmZGF0YS1zcmN8fGRhdGEtb3JpZ2luYWwnO1xudmFyIOmTvuaOpSA9ICdhJiZocmVmJztcblxuLy/ova7mkq1cbnZhciDova7mkq3liJfooaggPSAnYm9keSYmLnNsaWRlLXRpbWUtYmonO1xudmFyIOi9ruaSreagh+mimCA9ICcuc2xpZGUtaW5mby10aXRsZSYmVGV4dCc7XG52YXIg6L2u5pKt5Zu+54mHID0gICcubWFzay0xJiZzdHlsZSc7XG52YXIg6L2u5pKt6ZO+5o6lID0gJ2EmJmhyZWYnO1xuXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goXCJoaWtlcjovL3BhZ2UveWlcIiwge30pKS5ydWxlKTtcbmV2YWwoSlNPTi5wYXJzZShmZXRjaChcImhpa2VyOi8vcGFnZS93ZWVrXCIsIHt9KSkucnVsZSk7XG5cbnZhciDmjqjojZDliJfooagxID0gJ2JvZHkmJi5wdWJsaWMtciw5JiYucHVibGljLWxpc3QtYm94LDA6Nic7XG52YXIg5o6o6I2Q5YiX6KGoMiA9ICdib2R5JiYucHVibGljLXIsMTAmJi5wdWJsaWMtbGlzdC1ib3gsMDo2JztcbnZhciDmjqjojZDliJfooagzID0gJ2JvZHkmJi5wdWJsaWMtciwxMiYmLnB1YmxpYy1saXN0LWJveCwwOjYnO1xuXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goXCJoaWtlcjovL3BhZ2UvdGpcIiwge30pKS5ydWxlKTtcblxuc2V0UmVzdWx0KGQpOyIsInNlYXJjaF91cmwiOiJoaWtlcjovL2VtcHR5IyNodHRwczovL3d3dy5ndWd1ZmFuLmNvbS9pbmRleC5waHAvdm9kL3NlYXJjaC9wYWdlL2Z5cGFnZS93ZC8qKi5odG1sIiwiZ3JvdXAiOiIj77iP4oOj4pGh5Yqo5ryrIiwic2VhcmNoRmluZCI6ImpzOlxudmFyIGQgPSBbXTtcbk1ZX1VSTD1NWV9VUkwuc3BsaXQoJyMjJylbMV07XG5sZXQgZGh0bWwgPSBmZXRjaChNWV9VUkwsIHtcbiAgICBoZWFkZXJzOiB7XG4gICAgICAgICdVc2VyLUFnZW50JzogTU9CSUxFX1VBLFxuICAgICAgICAncmVmZXJlcic6IE1ZX1VSTFxuICAgIH1cbn0pO1xuLy9sb2coZGh0bWwpXG5cbmNvbnN0IGRsaXN0ID0gcGRmYShkaHRtbCwgJ2JvZHkmJi5zZWFyY2gtYm94Jyk7XG5kbGlzdC5mb3JFYWNoKGl0ZW0gPT4geyAgXG52YXIgdXJsbCA9cGQoaXRlbSwgJ2EmJmhyZWYnKSArICcjaW1tZXJzaXZlVGhlbWUjI2dhbWVUaGVtZSMnO1xuICAgIGQucHVzaCh7XG4gICAgICAgIHRpdGxlOiBwZGZoKGl0ZW0sICcudGh1bWItdHh0JiZUZXh0JyksXG4gICAgICAgICAgZGVzYzogcGRmaChpdGVtLCAnLnB1YmxpYy1saXN0LXByYiYmVGV4dCcpLFxuICAgICAgICBpbWc6IHBkZmgoaXRlbSwgJ2ltZ3x8LmxhenkmJmRhdGEtc3JjfHxkYXRhLW9yaWdpbmFsJyksXG4gICAgICAgIGNvbnRlbnQ6cGRmaChpdGVtLCAnLnRodW1iLWJsdXJiJiZUZXh0JyksXG4gICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9laiNub0hpc3RvcnkjI2ltbWVyc2l2ZVRoZW1lIyNnYW1lVGhlbWUjJyxcbiAgICAgICAgZXh0cmE6IHt1cmw6IHVybGx9LFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzMnLFxuICAgIH0pXG59KVxuc2V0UmVzdWx0KGQpOyIsImRldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJkZXRhaWxfZmluZF9ydWxlIjoiIiwic2RldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJzZGV0YWlsX2ZpbmRfcnVsZSI6IioiLCJ1YSI6Im1vYmlsZSIsInByZVJ1bGUiOiIvL+WPkeW4g+WcsOWdgCAgICAgIGh0dHBzOi8vZ3hkbS5tZS8iLCJwYWdlcyI6Ilt7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pO46YCa55So6Kej5p6QXCIsXCJwYXRoXCI6XCJsYXp5XCIsXCJydWxlXCI6XCJ2YXIgbGF6eSA9ICQoJycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgdmFyIGh0bWwgPSBKU09OLnBhcnNlKHJlcXVlc3QoaW5wdXQpLm1hdGNoKC9yIHBsYXllcl8uKj89KC4qPyk8LylbMV0pXFxuICAgIHZhciB1cmwgPSBodG1sLnVybFxcbiAgICBpZiAoaHRtbC5lbmNyeXB0ID09ICcxJykge1xcbiAgICAgICAgdXJsID0gdW5lc2NhcGUodXJsKTtcXG4gICAgfSBlbHNlIGlmIChodG1sLmVuY3J5cHQgPT0gJzInKSB7XFxuICAgICAgICB1cmwgPSB1bmVzY2FwZShiYXNlNjREZWNvZGUodXJsKSk7XFxuICAgIH1cXG4gICAgaWYgKC9tM3U4fG1wNC8udGVzdCh1cmwpKSB7XFxuICAgICAgICByZXR1cm4gdXJsXFxuICAgIH0gZWxzZSB7XFxuICAgICAgcmV0dXJuIFxcXCJ2aWRlbzovL1xcXCIraW5wdXRcXG4gICAgfVxcbn0pXFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLik7bkuoznuqfpobXpnaJcIixcInBhdGhcIjpcImVqXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdXFxuTVlfVVJMPU1ZX1VSTC5yZXBsYWNlKCdoaWtlcjovL2VtcHR5IyMnLCcnKTtcXG52YXIgaHRtbCA9IGZldGNoKE1ZX1VSTCk7XFxuXFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvZXInLCB7fSkpLnJ1bGUpO1xcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2xhenknLCB7fSkpLnJ1bGUpO1xcbnZhciDmoIfpopggPSAnYSYmdGl0bGUnO1xcbnZhciDmj4/ov7AgPSAnLnB1YmxpYy1saXN0LXByYiYmVGV4dCc7XFxudmFyIOWbvueJhyA9ICdpbWd8fC5sYXp5fHwubWFzay0xJiZkYXRhLXNyY3x8ZGF0YS1vcmlnaW5hbCc7XFxudmFyIOmTvuaOpSA9ICdhJiZocmVmJztcXG52YXIgcGxheWxpc3QgPSBbe1xcbiAgICAvKuiHquWumuS5iTp7XFxuICAgICAgICDlm77moIc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL3EvMy5wbmcnLFxcbiAgICAgICAg5q2j5bqP6aKc6ImyOiAnIzMyQ0QzMicsXFxuICAgICAgICDpgIbluo/popzoibI6ICcjRkE4MDcyJyxcXG4gICAgICAgIOe6v+i3r+mAieS4rTogJyM4N0NFRUInLCAgICAgICBcXG4gICAgfSwqL1xcbiAgICDnsbvlnos6ICflnKjnur/op4LnnIsnLFxcbiAgICDnur/ot686ICdib2R5JiYuYW50aG9sb2d5LXRhYiYmYScsXFxuICAgIOmAiembhjogJ2JvZHkmJi5hbnRob2xvZ3ktbGlzdC1wbGF5Om5vdCg6bWF0Y2hlcyjOsSkpJyxcXG4gICAg57q/6Lev5ZCN56ewOiAnYS0tLmZhJiZUZXh0JyxcXG4gICAg6YCJ6ZuG5YiX6KGoOiAnYm9keSYmYScsXFxuICAgIOaOkumZpDogJycsXFxuICAgIC8v6YCJ6ZuG5ZCN56ewOiAnVGV4dCcsXFxuICAgIC8v6YCJ6ZuG6ZO+5o6lOiAnYSYmaHJlZicsXFxuICAgIC8v5YCS5bqPOnR1cmUsXFxuICAgIOino+aekDogbGF6eSxcXG4gICAg5o6o6YCBOiB0cnVlLFxcbn0sIHtcXG4gICAg57G75Z6LOiAn56OB5Yqb5LiL6L29JyxcXG4gICAgLy/nur/ot686ICcnLFxcbiAgICDpgInpm4Y6ICdib2R5JiYuc29ydC1pdGVtbScsXFxuICAgIC8v57q/6Lev5ZCN56ewOiAnVGV4dEBALnJlcGxhY2UoXFxcIs6yXFxcIixcXFwiXFxcIiknLFxcbiAgICAvL+mAiembhuWIl+ihqDogJ3VsJiZsaScsXFxuICAgIOmAiembhuWQjeensDogJ1RleHQnLFxcbiAgICDpgInpm4bpk77mjqU6ICdhJiZocmVmJyxcXG4gICAg5qC35byPOiAnYXZhdGFyJyxcXG4gICAg5Zu+5qCHOiAnaHR0cHM6Ly9pbWcudmludWEuY24vaW1hZ2VzL09vejRSLmpwZWcnXFxufV1cXG5cXG52YXIgb2JqID0ge1xcbiAgICBtYWluOiBwZGZhKGh0bWwsICcuZ2VuLXNlYXJjaC1mb3JtJiZsaTpub3QoOm1hdGNoZXMo54q25oCBKSknKSxcXG4gICAgc29ydDogWyfniYflkI0nLCAn5a+85ryUJywgJ+exu+WeiycsJ+S4iuaYoCcsICfmm7TmlrAnLCAn5Li75ryUJywgJ+eKtuaAgSddLFxcbiAgICAvL2ltZzogTVlfUEFSQU1TLmltZyxcXG5pbWc6IHBkKGh0bWwsICcubGF6eSYmZGF0YS1zcmMnKSwvL+WwgemdouWbvueJh1xcbn1cXG5cXG5FcmppLnNldENvbnRlbnQob2JqKTtcXG5FcmppLnNldERlc2MocGRmaChodG1sLCAnLmNvcjN8fC50b3BpY19jb250ZW50JiZUZXh0JykucmVwbGFjZSgn5pS26LW3JywnJykucmVwbGFjZSgvXFxcXHMvZywnJykpOy8v5Ymn5oOF566A5LuLXFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvdG9vbCcsIHt9KSkucnVsZSk7Ly/lpJbpg6jlv6vmjbfmkJzntKJcXG5FcmppLmdldFBsYXllcnMocGxheWxpc3QpO1xcblxcbmNvbnN0IGZvbGQgPSBnZXRNeVZhcigndGouZ3JvdXAnLCBcXFwiMFxcXCIpXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6Zm9sZCA9PT0gJzEnID8gJzxiPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjogIzU2OThjM1xcXCI+55u45YWz5o6o6I2QPC9zcGFuPjwvYj4nIDogJzxiPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjogIzU2OThjM1xcXCI+55u45YWz5o6o6I2QPC9zcGFuPjwvYj4nLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGZvbGQpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3RqLmdyb3VwJywgZm9sZCA9PT0gJzEnID8gJzAnIDogJzEnKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcIiNub0hpc3RvcnkjaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICB9LCBmb2xkKSxcXG4gICAgcGljX3VybDogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vY2lyY2xlLzc3NS5wbmcnLFxcbiAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCJcXG59KTtcXG5pZiAoZm9sZCA9PT0gMCkge1xcbmQucHVzaCh7IFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSBlbHNlIGlmIChmb2xkID09PSAnMScpIHtcXG52YXIgampkbT1wZGZhKGh0bWwsIFxcXCIuYm9yZGVyLWJveCwxJiYucHVibGljLWxpc3QtYm94LDA6OVxcXCIpO1xcbmpqZG0uZm9yRWFjaChpdGVtID0+IHsgIFxcbnZhciB1cmxsID0gcGQoaXRlbSwg6ZO+5o6lKSArICcjaW1tZXJzaXZlVGhlbWUjI2dhbWVUaGVtZSMnO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwg5qCH6aKYKSxcXG4gICAgICAgIGRlc2M6IHBkZmgoaXRlbSwg5o+P6L+wKSxcXG4gICAgICAgIGltZzogcGRmaChpdGVtLCDlm77niYcpK1xcXCJAYWx0PVxcXCIsXFxuICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvZWojbm9IaXN0b3J5IyNpbW1lcnNpdmVUaGVtZSMjZ2FtZVRoZW1lIycsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICB1cmw6IHVybGwsXFxuICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0ZW0sIOagh+mimCksXFxuICAgICAgICAgICAgIGltZzogcGQoaXRlbSwg5Zu+54mHKSArIFxcXCJAYWx0PVxcXCIsXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzMnLFxcbiAgICB9KTtcXG59KVxcbn1cXG5FcmppLuWjsOaYjigpO1xcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKRpOaQnOe0oumhtemdolwiLFwicGF0aFwiOlwic3NcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuXFxuY29uc3QgYmFzZV91cmwgPSAnaHR0cDovL3Jlc291LnRvZGF5L2FydC8yOS5odG1sJztcXG5cXG5sZXQgdHJ1ZV91cmwgPSBnZXRNeVZhcihNWV9SVUxFLnVybCwgYmFzZV91cmwpO1xcbk1ZX1VSTD10cnVlX3VybDtcXG52YXIgaHRtbCA9IGZldGNoKGJhc2VfdXJsLCB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICdVc2VyLUFnZW50JzogTU9CSUxFX1VBXFxuICAgIH1cXG59KTtcXG5cXG52YXIgSWNvbl9wcmVmaXggPSAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tb3JlLyc7XFxuXFxuZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+i/lOWbnicsXFxuICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpOyAgICAgXFxuICAgICAgICAgICAgICAgIGJhY2soZmFsc2UpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6L+U5Zue6KeE5YiZ6aaW6aG1XFxcIiAgXFxuICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgcGljX3VybDogSWNvbl9wcmVmaXggKyAnNDcucG5nJysgXFxcIkBhbHQ9XFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImljb25fc21hbGxfM1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgIH0pO1xcblxcblxcbmQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfnrZvpgIknLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9zaGFpP3BhZ2U9ZnlwYWdlI25vSGlzdG9yeSMnLFxcbiAgICAgICAgICAgIHBpY191cmw6IEljb25fcHJlZml4ICsgJzIxMy5wbmcnICsgXFxcIkBhbHQ9XFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImljb25fc21hbGxfM1xcXCJcXG4gICAgICAgIH0pO1xcblxcbmQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfljoblj7InLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vaGlzdG9yeScsXFxuICAgICAgICAgICAgcGljX3VybDogSWNvbl9wcmVmaXggKyAnMTkyLnBuZycgKyBcXFwiQGFsdD1cXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF8zXFxcIlxcbiAgICAgICAgfSk7XFxuXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLwn5SNXFxcIixcXG4gICAgLy91cmw6IFxcXCInaGlrZXI6Ly9zZWFyY2g/cz0nK2lucHV0KycmcnVsZT3lrqvkuIvliqjmvKvimZQnXFxcIixcXG4gICAgIHVybDogXFxcIidoaWtlcjovL3NlYXJjaD9ydWxlPVxcXCIgKyBNWV9SVUxFLnRpdGxlICsgXFxcIiZzPScraW5wdXRcXFwiLFxcbiAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgZGVzYzogXFxcIuaQnOe0ouS9oOaDs+imgeeahOW9seinhuOAgeWKqOa8q+OAgee7vOiJuuetiS4uLlxcXCIsXFxufSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJzxzcGFuIHN0eWxlPVxcXCJjb2xvcjojZmY2NjAwXFxcIj48Yj5cXFxcdOeDreaQnOamnFxcXFx0XFxcXHRcXFxcdDwvYj48L3NwYW4+JyxcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgcGljX3VybDogJ2h0dHBzOi8vc3MxLmJhaWR1LmNvbS82T05Yc2ppcDBRSVo4dHlobnEvaXQvdT0zNzc5OTkwMzI4LDE0MTY1NTMyNDEmZm09MTc5JmFwcD0zNSZmPVBORz93PTYwJmg9NzAmcz1FNzk1MUI2MkE0NjM5RDE1MzI5M0E0RTkwMzAwNDAxQicsXFxuICAgICAgICBjb2xfdHlwZTogJ2ljb25fc21hbGxfMydcXG4gICAgfSk7XFxuXFxuXFxuY29uc3QgbGlzdCA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5hcnQtcmVzb3UmJmxpLDI6Jyk7XFxubGlzdC5mb3JFYWNoKGl0ZW0gPT4geyAgXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogcGRmaChpdGVtLCAnc3BhbjplcSgwKSYmVGV4dCcpICsgcGRmaChpdGVtLCAnc3BhbjplcSgxKSYmVGV4dCcpLFxcbiAgICAgICAgZGVzYzogcGRmaChpdGVtLCAnc3BhbjplcSgyKSYmVGV4dCcpLFxcbiAgICAgICAgaW1nOiAnaHR0cHM6Ly9jZG4taWNvbnMtcG5nLmZsYXRpY29uLmNvbS8xMjgvNDczLzQ3MzQwNi5wbmcnICsgXFxcIkBhbHQ9aHR0cHM6Ly9pbWc5LmRvdWJhbmlvLmNvbS9cXFwiLFxcbiAgICAgICAgLy91cmw6ICdoaWtlcjovL3NlYXJjaD9zPScrcGRmaChpdGVtLCAnc3BhbjplcSgxKSYmVGV4dCcpKycmcnVsZT3lrqvkuIvliqjmvKvimZQnLFxcbiAgICAgICAgICB1cmw6ICdoaWtlcjovL3NlYXJjaD9ydWxlPScgKyBNWV9SVUxFLnRpdGxlICsgJyZzPScrcGRmaChpdGVtLCAnc3BhbjplcSgxKSYmVGV4dCcpLFxcbiAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICB9KVxcbn0pXFxuXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pGh5LiA57qn6L2u5pKtXCIsXCJwYXRoXCI6XCJsdW5ib1wiLFwicnVsZVwiOlwianM6XFxuZnVuY3Rpb24gYmFubmVyKHRpdGxlLCBzdGFydCwgYXJyLCBkYXRhLCBjZmcpIHtcXG4gICAgbGV0IGlkID0gdGl0bGUgKyAnbHVuYm8nO1xcbiAgICB2YXIgcm51bSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGRhdGEubGVuZ3RoKTtcXG4gICAgdmFyIGl0ZW0gPSBkYXRhW3JudW1dO1xcbiAgICBwdXRNeVZhcigncm51bScsIHJudW0pO1xcbiAgICBsZXQgdGltZSA9IDUwMDA7XFxuICAgIGxldCBjb2xfdHlwZSA9ICdwaWNfMV9jYXJkJztcXG4gICAgbGV0IGNvbG9yID0gXFxcIndoaXRlXFxcIjtcXG4gICAgbGV0IGRlc2MgPSAnJztcXG4gICAgaWYgKGNmZyAhPSB1bmRlZmluZWQpIHtcXG4gICAgICAgIHRpbWUgPSBjZmcudGltZSA/IGNmZy50aW1lIDogdGltZTtcXG4gICAgICAgIGNvbF90eXBlID0gY2ZnLmNvbF90eXBlID8gY2ZnLmNvbF90eXBlIDogY29sX3R5cGU7XFxuICAgICAgICBkZXNjID0gY2ZnLmRlc2MgPyBjZmcuZGVzYyA6IGRlc2M7XFxuICAgIH1cXG5cXG4gICAgYXJyLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6IGNvbF90eXBlLFxcbiAgICAgICAgaW1nOiBpdGVtLmltZyxcXG4gICAgICAgIGRlc2M6IGRlc2MsXFxuICAgICAgICB0aXRsZTogaXRlbS50aXRsZSxcXG4gICAgICAgIHVybDogaXRlbS51cmwsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiBpZCsnYmFyJyxcXG4gICAgICAgIH1cXG4gICAgfSlcXG5cXG4gICAgaWYgKHN0YXJ0ID09IGZhbHNlIHx8IGdldE15VmFyKCdiZW5zdGFydCcsICd0cnVlJykgPT0gJ2ZhbHNlJykge1xcbiAgICAgICAgdW5SZWdpc3RlclRhc2soaWQpXFxuICAgICAgICByZXR1cm5cXG4gICAgfVxcbiAgICBcXG4gICAgLy9sb2coZGF0YSlcXG5cXG4gICAgbGV0IG9iaiA9IHtcXG4gICAgICAgIGRhdGE6IGRhdGEsXFxuICAgIH07XFxuXFxuICAgIHJlZ2lzdGVyVGFzayhpZCwgdGltZSwgJC50b1N0cmluZygob2JqLGlkKSA9PiB7XFxuICAgICAgICB2YXIgZGF0YSA9IG9iai5kYXRhO1xcbiAgICAgICAgdmFyIHJ1bSA9IGdldE15VmFyKCdybnVtJyk7XFxuXFxuICAgICAgICB2YXIgaSA9IE51bWJlcihnZXRNeVZhcignYmFubmVyaScsICcwJykpO1xcbiAgICAgICAgaWYgKHJ1bSAhPSAnJykge1xcbiAgICAgICAgICAgIGkgPSBOdW1iZXIocnVtKSArIDFcXG4gICAgICAgICAgICBjbGVhck15VmFyKCdybnVtJylcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaSA9IGkgKyAxO1xcbiAgICAgICAgfVxcbiAgICAgICAgLy9sb2coaSlcXG4gICAgICAgIC8vbG9nKGRhdGEubGVuZ3RoKVxcblxcbiAgICAgICAgaWYgKGkgPiBkYXRhLmxlbmd0aCAtIDEpIHtcXG4gICAgICAgICAgICBpID0gMFxcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIGl0ZW0gPSBkYXRhW2ldO1xcbiAgICAgICAgLy9sb2coaXRlbSlcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdXBkYXRlSXRlbShpZCsnYmFyJywge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS50aXRsZSxcXG4gICAgICAgICAgICAgICAgaW1nOiBpdGVtLmltZyxcXG4gICAgICAgICAgICAgICAgdXJsOiBpdGVtLnVybCxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIC8vbmFtZTogaXRlbS50aXRsZS5yZXBsYWNlKC88W14+XSs+L2csICcnKSxcXG4gICAgICAgICAgICAgICAgICAgIC8vc25hbWU6IGl0ZW0uZXh0cmEuc25hbWUsXFxuICAgICAgICAgICAgICAgICAgICAvL3N0eXBlOiBpdGVtLmV4dHJhLnN0eXBlLFxcbiAgICAgICAgICAgICAgICAgICAgLy9zdXJsOiBpdGVtLnVybCxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOml0ZW0udGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBpbWc6aXRlbS5pbWcsXFxuICAgICAgICAgICAgICAgICAgICAvL3BhZ2VUaXRsZTogaXRlbS50aXRsZS5yZXBsYWNlKC88W14+XSs+L2csICcnKSxcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgbG9nKGUubWVzc2FnZSlcXG4gICAgICAgICAgICB1blJlZ2lzdGVyVGFzayhpZClcXG4gICAgICAgIH1cXG4gICAgICAgIHB1dE15VmFyKCdiYW5uZXJpJywgaSk7XFxuXFxuICAgIH0sIG9iaixpZCkpXFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pGg5LiA57qn6aG16Z2iXCIsXCJwYXRoXCI6XCJ5aVwiLFwicnVsZVwiOlwidmFyIEljb25fcHJlZml4ID0gJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vY2lyY2xlLyc7XFxuXFxuLy/liIbnsbtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfliIbnsbsnLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9zaGFpP3BhZ2U9ZnlwYWdlI25vSGlzdG9yeSMjZ2FtZVRoZW1lIycsXFxuICAgICAgICAgICAgcGljX3VybDogSWNvbl9wcmVmaXggKyAnMTU4LnBuZycsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uXzVcXFwiXFxuICAgICAgICB9KTtcXG4vL+S4k+mimCAgICAgIFxcbiAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn5LiT6aKYJyxcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5IyNcXFwiK01ZX1VSTCtcXFwiaW5kZXgucGhwL3RvcGljL2luZGV4Lmh0bWwjI25vUmVjb3JkSGlzdG9yeSMjbm9IaXN0b3J5I0BydWxlPWpzOiQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL3RvcGljJylcXFwiLFxcbiAgICAgICAgICAgIHBpY191cmw6IEljb25fcHJlZml4ICsgJzQ3NC5wbmcnLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl81XFxcIlxcbiAgICAgICAgfSk7XFxuXFxuLy/mjpLooYxcXG4gICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+aOkuihjCcsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL3JhbmszJysnIyNub1JlY29yZEhpc3RvcnkjI25vSGlzdG9yeSNpbW1lcnNpdmVUaGVtZSMjZ2FtZVRoZW1lIycsXFxuICAgICAgICAgICAgcGljX3VybDogSWNvbl9wcmVmaXggKyAnNDA2LnBuZycsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uXzVcXFwiXFxuICAgICAgICB9KTtcXG5cXG4vL+abtOaWsFxcbiAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+abtOaWsCcsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL2d4JysnIyNub1JlY29yZEhpc3RvcnkjI25vSGlzdG9yeSNnYW1lVGhlbWUjJyxcXG4gICAgICAgICAgICBwaWNfdXJsOiBJY29uX3ByZWZpeCArICczOTkucG5nJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImljb25fNVxcXCJcXG4gICAgICAgIH0pO1xcblxcbi8v5ZGo6KGoXFxuY29uc3QgZm9sZCA9IGdldE15VmFyKCdsaWUuZ3JvdXAnLCBcXFwiMVxcXCIpXFxuZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+WRqOihqCcsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChmb2xkKSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCdsaWUuZ3JvdXAnLCBmb2xkID09PSAnMScgPyAnMCcgOiAnMScpO1xcblxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgIH0sIGZvbGQpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnaWNvbl81JyxcXG4gICAgICAgICAgICBwaWNfdXJsOiBJY29uX3ByZWZpeCArICc0MS5wbmcnLFxcbiAgICAgICAgfSk7XFxuXFxuZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVcXFwiXFxuICAgICAgICB9KTtcXG4vL+i9ruaSrVxcbnZhciBsdW5kYXRhID0gcGRmYShodG1sLCDova7mkq3liJfooagpLm1hcCgoeCkgPT4ge1xcbiAgICAvL2xvZyh4KVxcbiAgICAgICAgdmFyIHVybGwgPSBwZCh4LCDova7mkq3pk77mjqUpICsgJyNpbW1lcnNpdmVUaGVtZSMjZ2FtZVRoZW1lIyNnYW1lVGhlbWUjJztcXG4gICAgcmV0dXJuIHtcXG4gICAgICAgIHRpdGxlOiBwZGZoKHgsIOi9ruaSreagh+mimCksXFxuICAgICAgICBpbWc6IHBkZmgoeCzova7mkq3lm77niYcpLnNwbGl0KFxcXCJ1cmwoJ1xcXCIpWzFdLnNwbGl0KFxcXCInXFxcIilbMF0sXFxuICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvZWo/dXJsPScrdXJsbCsnI25vSGlzdG9yeSMnLFxcbiAgICB9XFxufSk7XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UvbHVuYm9cXFwiLCB7fSkpLnJ1bGUpO1xcbmJhbm5lcihNWV9SVUxFLnRpdGxlLCB0cnVlLCBkLCBsdW5kYXRhLCB7XFxuICAgICAgICB0aW1lOiA1MDAwLFxcbiAgICAgICAgY29sX3R5cGU6ICdjYXJkX3BpY18xJyxcXG4gICAgICAgIGRlc2M6ICcwJ1xcbiAgICB9KVxcblxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pGi5LiA57qn5ZGo6KGoXCIsXCJwYXRoXCI6XCJ3ZWVrXCIsXCJydWxlXCI6XCIvL+WRqOihqFxcbmlmIChmb2xkID09PSAwKSB7XFxuZC5wdXNoKHsgXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9IGVsc2UgaWYgKGZvbGQgPT09ICcxJykge1xcbnZhciB3ZWVrcyA9IG5ldyBBcnJheShcXFwi5ZGo5pelXFxcIiwgXFxcIuWRqOS4gFxcXCIsIFxcXCLlkajkuoxcXFwiLCBcXFwi5ZGo5LiJXFxcIiwgXFxcIuWRqOWbm1xcXCIsIFxcXCLlkajkupRcXFwiLFxcXCLlkajlha1cXFwiKTtcXG5cXG5mdW5jdGlvbiBnZXRXZWVrRGF0ZSgpIHtcXG4gICAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7XFxuICAgIHZhciBkYXkgPSBub3cuZ2V0RGF5KCk7XFxuICAgIHZhciB3ZWVrID0gd2Vla3NbZGF5XTtcXG4gICAgLy9sb2cod2VlaylcXG4gICAgcmV0dXJuIHdlZWs7XFxufVxcbmxldCBub3dfV2VlayA9IGdldFdlZWtEYXRlKCk7XFxuLy9sb2cobm93X1dlZWspO1xcbiAgICB3ZWVrcy5mb3JFYWNoKGl0ID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKCd3ZWVrJywgbm93X1dlZWspID09PSBpdCA/ICfimIAnICsgJ+KAnOKAnOKAneKAnTxiPjxmb250IGNvbG9yPSNGQTcyOTg+JyArIGl0ICsgJzwvZm9udD48L2I+JyA6IGl0LnJlcGxhY2UoJ+WRqCcsJycpLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChpdCkgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwid2Vla1xcXCIsIGl0KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgIH0sIGl0KSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxuICAgICAgICB9KTtcXG4gICAgfSlcXG5cXG5sZXQgY2hvc2Vfd2VlayA9IGdldE15VmFyKCd3ZWVrJywgbm93X1dlZWspO1xcbnZhciB3a1RvbnVtID0gZnVuY3Rpb24od2spIHtcXG4gICAgICAgIGlmICgv5ZGofOaYn+acny8udGVzdCh3aykpIHtcXG4gICAgICAgICAgICB3ayA9IHdrLnJlcGxhY2UoL+WRqHzmmJ/mnJ8vLCBcXFwiXFxcIilcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBtYXAgPSB7XFxuICAgICAgICAgICAgXFxcIuaXpVxcXCI6IDcsXFxuICAgICAgICAgICAgXFxcIuS4gFxcXCI6IDEsXFxuICAgICAgICAgICAgXFxcIuS6jFxcXCI6IDIsXFxuICAgICAgICAgICAgXFxcIuS4iVxcXCI6IDMsXFxuICAgICAgICAgICAgXFxcIuWbm1xcXCI6IDQsXFxuICAgICAgICAgICAgXFxcIuS6lFxcXCI6IDUsXFxuICAgICAgICAgICAgXFxcIuWFrVxcXCI6IDZcXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gbWFwW3drXVxcbiAgICB9XFxuICAgIGxldCB3a19udW0gPSB3a1RvbnVtKGNob3NlX3dlZWspO1xcbi8vbG9nKHdrX251bSlcXG5mb3IgKHZhciBrID0gMTsgayA8PSA3OyBrKyspIHtcXG4gICAgZXZhbCgndmFyIHdrJyArIGsgKyAnPXBkZmEoaHRtbCwgXFxcIiN3ZWVrLW1vZHVsZS0nICsgKGs9PTA/MDprKSArICcmJi5wdWJsaWMtbGlzdC1ib3gsMDoxMlxcXCIpOycpOy8v5pif5pyf5YiX6KGoXFxuICAgIGlmICh3a19udW0gPT0gaykge1xcbiAgICAgICAgZXZhbCgnd2snK2spLmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgdmFyIHVybGwgPSBNWV9IT01FICsgcGRmaChpdGVtLCAnYSYmaHJlZicpICsgJyNpbW1lcnNpdmVUaGVtZSMjZ2FtZVRoZW1lIyc7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwg5qCH6aKYKSxcXG4gICAgICAgICAgICAgICAgZGVzYzogcGRmaChpdGVtLCDmj4/ov7ApLFxcbiAgICAgICAgICAgICAgICBpbWc6IHBkKGl0ZW0sIOWbvueJhykgKyAnQGFsdD0nLFxcbiAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvZWonLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmxsLFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwg5qCH6aKYKSxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogcGQoaXRlbSwg5Zu+54mHKSArIFxcXCJAYWx0PVxcXCIsXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMycsXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9KVxcbiAgICB9ICAgIFxcbn1cXG5kLnB1c2goe1xcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pGj5LiA57qn5o6o6I2QXCIsXCJwYXRoXCI6XCJ0alwiLFwicnVsZVwiOlwiY29uc3QgZm9sZDEgPSBnZXRNeVZhcigncmIuZ3JvdXAnLCBcXFwiMVxcXCIpXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6Zm9sZDEgPT09ICcxJyA/ICc8Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I6ICNmNzM4NTlcXFwiPui/nui9veaWsOeVqlxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHTwn42APC9zcGFuPjwvYj4nIDogJ+i/nui9veaWsOeVqlxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHTimJjvuI8nLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGZvbGQxKSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCdyYi5ncm91cCcsIGZvbGQxID09PSAnMScgPyAnMCcgOiAnMScpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICB9LCBmb2xkMSksXFxuICAgIHBpY191cmw6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL2tlLzEyMC5wbmcnLFxcbiAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCJcXG59KTtcXG5pZiAoZm9sZDEgPT09IDApIHtcXG5kLnB1c2goeyBcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0gZWxzZSBpZiAoZm9sZDEgPT09ICcxJykge1xcbnZhciBqamRtPXBkZmEoaHRtbCwg5o6o6I2Q5YiX6KGoMSk7XFxuampkbS5mb3JFYWNoKGl0ZW0gPT4geyAgXFxudmFyIHVybGwgPSBwZChpdGVtLCDpk77mjqUpICsgJyNpbW1lcnNpdmVUaGVtZSMjZ2FtZVRoZW1lIyc7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogcGRmaChpdGVtLCDmoIfpopgpLFxcbiAgICAgICAgZGVzYzogcGRmaChpdGVtLCDmj4/ov7ApLFxcbiAgICAgICAgaW1nOiBwZGZoKGl0ZW0sIOWbvueJhykgKyBcXFwiQGFsdD1cXFwiLFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL2VqI25vSGlzdG9yeSMjaW1tZXJzaXZlVGhlbWUjI2dhbWVUaGVtZSMnLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgdXJsOiB1cmxsLFxcbiAgICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCDmoIfpopgpLFxcbiAgICAgICAgICAgICBpbWc6IHBkKGl0ZW0sIOWbvueJhykgKyBcXFwiQGFsdD1cXFwiLFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8zJyxcXG4gICAgfSk7XFxufSlcXG59XFxuXFxuY29uc3QgZm9sZDIgPSBnZXRNeVZhcignaGouZ3JvdXAnLCBcXFwiMVxcXCIpXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6Zm9sZDIgPT09ICcxJyA/ICc8Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I6ICNmZjg0N2NcXFwiPuWujOe7k+eVquWJp1xcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHTwn5SGPC9zcGFuPjwvYj4nIDogJ+WujOe7k+eVquWJp1xcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHTwn5SFJyxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChmb2xkMikgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcignaGouZ3JvdXAnLCBmb2xkMiA9PT0gJzEnID8gJzAnIDogJzEnKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgfSwgZm9sZDIpLFxcbiAgICBwaWNfdXJsOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9rZS8zNy5wbmcnLFxcbiAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCJcXG59KTtcXG5pZiAoZm9sZDIgPT09IDApIHtcXG5kLnB1c2goeyBcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCIsXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9IGVsc2UgaWYgKGZvbGQyID09PSAnMScpIHtcXG52YXIgampkbT1wZGZhKGh0bWwsIOaOqOiNkOWIl+ihqDIpO1xcbmpqZG0uZm9yRWFjaChpdGVtID0+IHsgIFxcbnZhciB1cmxsID0gcGQoaXRlbSwg6ZO+5o6lKSArICcjaW1tZXJzaXZlVGhlbWUjI2dhbWVUaGVtZSMnO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwg5qCH6aKYKSxcXG4gICAgICAgIGRlc2M6IHBkZmgoaXRlbSwg5o+P6L+wKSxcXG4gICAgICAgIGltZzogcGRmaChpdGVtLCDlm77niYcpICsgXFxcIkBhbHQ9XFxcIixcXG4gICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9laiNub0hpc3RvcnkjI2ltbWVyc2l2ZVRoZW1lIyNnYW1lVGhlbWUjJyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgIHVybDogdXJsbCxcXG4gICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwg5qCH6aKYKSxcXG4gICAgICAgICAgICAgaW1nOiBwZChpdGVtLCDlm77niYcpICsgXFxcIkBhbHQ9XFxcIixcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgIGNvbF90eXBlOiAnbW92aWVfMycsXFxuICAgIH0pO1xcbn0pXFxufVxcbmNvbnN0IGZvbGQzID0gZ2V0TXlWYXIoJ2pjLmdyb3VwJywgXFxcIjFcXFwiKVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOmZvbGQzID09PSAnMScgPyAnPGI+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiAjZmY4NDdjXFxcIj7liqjmvKvliaflnLpcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx08J+Skzwvc3Bhbj48L2I+JyA6ICfliqjmvKvliaflnLpcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx08J+SlycsXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoZm9sZDMpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2pjLmdyb3VwJywgZm9sZDMgPT09ICcxJyA/ICcwJyA6ICcxJyk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgIH0sIGZvbGQzKSxcXG4gICAgcGljX3VybDogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8va2UvNDAucG5nJyxcXG4gICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiXFxufSk7XFxuaWYgKGZvbGQzID09PSAwKSB7XFxuZC5wdXNoKHsgXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiLFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSBlbHNlIGlmIChmb2xkMyA9PT0gJzEnKSB7XFxudmFyIGpqZG09cGRmYShodG1sLCDmjqjojZDliJfooagzKTtcXG5qamRtLmZvckVhY2goaXRlbSA9PiB7ICBcXG52YXIgdXJsbCA9IHBkKGl0ZW0sIOmTvuaOpSkgKyAnI2ltbWVyc2l2ZVRoZW1lIyNnYW1lVGhlbWUjJztcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBwZGZoKGl0ZW0sIOagh+mimCksXFxuICAgICAgICBkZXNjOiBwZGZoKGl0ZW0sIOaPj+i/sCksXFxuICAgICAgICBpbWc6IHBkZmgoaXRlbSwg5Zu+54mHKSArIFxcXCJAYWx0PVxcXCIsXFxuICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvZWojbm9IaXN0b3J5IyNpbW1lcnNpdmVUaGVtZSMjZ2FtZVRoZW1lIycsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICB1cmw6IHVybGwsXFxuICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0ZW0sIOagh+mimCksXFxuICAgICAgICAgICAgIGltZzogcGQoaXRlbSwg5Zu+54mHKSArIFxcXCJAYWx0PVxcXCIsXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzMnLFxcbiAgICB9KTtcXG59KVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKRpeabtOaWsOmhtemdolwiLFwicGF0aFwiOlwiZ3hcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuY29uc3QgYmFzZV91cmwgPSAnaHR0cHM6Ly93d3cuZ3VndWZhbi5jb20vaW5kZXgucGhwL21hcC9pbmRleC5odG1sJztcXG5cXG5sZXQgdHJ1ZV91cmwgPSBnZXRNeVZhcihNWV9SVUxFLnVybCwgYmFzZV91cmwpO1xcbk1ZX1VSTD10cnVlX3VybDtcXG52YXIgaHRtbD1mZXRjaCh0cnVlX3VybClcXG5sb2coaHRtbClcXG5cXG5kLnB1c2goe1xcbiAgICB0aXRsZTonPGI+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiAjRkE3Mjk4XFxcIj7mnIDov5Hmm7TmlrBcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXPCfjLjwn4y48J+MuPCfjLjwn4y4PC9zcGFuPjwvYj4nLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgcGljX3VybDogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8va2UvNjMucG5nJyxcXG4gICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiXFxufSk7XFxuXFxuY29uc3QgbGlzdCA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5wdWJsaWMtbGlzdC1ib3gnKTtcXG5saXN0LmZvckVhY2goaXRlbSA9PiB7ICBcXG52YXIgdXJsbCA9cGQoaXRlbSwgJ2EmJmhyZWYnKSArICcjaW1tZXJzaXZlVGhlbWUjI2dhbWVUaGVtZSMnO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgJ2EmJnRpdGxlJyksXFxuICAgICAgICBkZXNjOiBwZGZoKGl0ZW0sICcucHVibGljLWxpc3QtcHJiJiZUZXh0JyksXFxuICAgICAgICBpbWc6IHBkZmgoaXRlbSwgJ2ltZ3x8LmxhenkmJmRhdGEtc3JjfHxkYXRhLW9yaWdpbmFsJykuc3BsaXQoJz0nKVsxXXx8cGRmaChpdGVtLCAnaW1nfHwubGF6eSYmZGF0YS1zcmN8fGRhdGEtb3JpZ2luYWwnKSArIFxcXCJAYWx0PVxcXCIsXFxuICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvZWojbm9IaXN0b3J5IyNpbW1lcnNpdmVUaGVtZSMjZ2FtZVRoZW1lIycsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgJ2EmJnRpdGxlJyksXFxuICAgICAgICAgICAgICAgICB1cmw6IHVybGxcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgIGNvbF90eXBlOiAnbW92aWVfM19tYXJxdWVlJyxcXG4gICAgfSlcXG59KVxcblxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKTteS6jOe6p+WGheWuuVwiLFwicGF0aFwiOlwiZXJcIixcInJ1bGVcIjpcIi8vdmFyIOaQnOe0ouagh+etviA9ICdoMSYmVGV4dCc7XFxuXFxuLyp2ZXIgMjAyMzA2MjcgMS4wXFxuICovXFxudmFyIGN1c3RvbT17fTtcXG5cXG4vL+mihOiuvlxcbmZ1bmN0aW9uIGN1c3RvbURhdGEoY3VzdG9tKSB7XFxuICAgIE9iamVjdC5rZXlzKGN1c3RvbSkuZm9yRWFjaCgoayk9PiB7XFxuICAgICAgdGhpc1trXT1jdXN0b21ba10gO1xcbiAgICB9KVxcbn1cXG4gXFxubGV0IEVyamkgPSB7XFxuICAgIOmAmuWFjTogJCgnJykubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB2YXIgaHRtbCA9IEpTT04ucGFyc2UocmVxdWVzdChpbnB1dCkubWF0Y2goL3IgcGxheWVyXy4qPz0oLio/KTwvKVsxXSlcXG4gICAgICAgICAgICB2YXIgdXJsID0gaHRtbC51cmxcXG4gICAgICAgICAgICBpZiAoaHRtbC5lbmNyeXB0ID09ICcxJykge1xcbiAgICAgICAgICAgICAgICB1cmwgPSB1bmVzY2FwZSh1cmwpO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaHRtbC5lbmNyeXB0ID09ICcyJykge1xcbiAgICAgICAgICAgICAgICB1cmwgPSB1bmVzY2FwZShiYXNlNjREZWNvZGUodXJsKSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICgvbTN1OHxtcDQvLnRlc3QodXJsKSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ2aWRlbzovL1xcXCIgKyBpbnB1dFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInZpZGVvOi8vXFxcIiArIGlucHV0XFxuICAgICAgICB9XFxuICAgIH0pLFxcbiAgICB1cGRhdGE6IGZ1bmN0aW9uKHJ1bGUpIHtcXG4gICAgICAgIHNldExhc3RDaGFwdGVyUnVsZSgnanM6JyArICQudG9TdHJpbmcoKHVybCxydWxlKSA9PiB7XFxuICAgICAgICAgICAgdmFyIGh0bWw9ZmV0Y2godXJsKTtcXG4gICAgICAgICAgICBzZXRSZXN1bHQoZXZhbChydWxlKSlcXG4gICAgICAgIH0sTVlfVVJMLCBydWxlKSlcXG4gICAgfSxcXG4gICAgY2xvc2U6IGZ1bmN0aW9uKGxpc3QsIHNvcnRzKSB7XFxuICAgICAgICBhZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKGxpc3QsIHNvcnRzKSA9PiB7XFxuICAgICAgICAgICAgbGlzdC5tYXAoeCA9PiB7XFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ2VyXycgKyB4ICsgJ2ZvbGQnKTtcXG4gICAgICAgICAgICAgICAgY2xlYXJNeVZhcignZXJfJyt4KTtcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc29ydHM7IGkrKykge1xcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdwbGF5bGlzdF8nICsgaSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGNsZWFyTXlWYXIoJ2VyX3BsYXlsaXN0cycpO1xcbiAgICAgICAgfSwgbGlzdCwgc29ydHMpKVxcbiAgICB9LFxcbiAgICBkYXRhQ29udmVydDogZnVuY3Rpb24oZGF0YSkge1xcbiAgICAgICAgdmFyIG5ld2Nsc2xpc3QgPSBkYXRhLm1hcChmdW5jdGlvbihvYmopIHtcXG4gICAgICAgICAgICB2YXIgbmV3T2JqID0gT2JqZWN0LmFzc2lnbih7fSwgb2JqKTtcXG4gICAgICAgICAgICBpZiAobmV3T2JqLmhhc093blByb3BlcnR5KCd0eXBlJykpIHtcXG4gICAgICAgICAgICAgICAgbmV3T2JqLmNvbF90eXBlID0gbmV3T2JqLnR5cGU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBuZXdPYmo7XFxuICAgICAgICB9KTtcXG4gICAgICAgIHJldHVybiBuZXdjbHNsaXN0O1xcbiAgICB9LFxcbiAgICBwcmVMb2FkOiBmdW5jdGlvbihmdW5jKSB7XFxuICAgICAgICBsZXQgbXlmdW5jPW51bGxcXG4gICAgICAgIGlmKGZ1bmMhPXVuZGVmaW5lZCYmZnVuYy5jb25zdHJ1Y3Rvcj09RnVuY3Rpb24pe1xcbiAgICAgICAgICAgIG15ZnVuYz1mdW5jXFxuICAgICAgICB9XFxuICAgICAgICAkLmV4dGVuZCh7XFxuICAgICAgICAgICAgZGF0YUNvbnZlcnQ6IHRoaXMuZGF0YUNvbnZlcnQsXFxuICAgICAgICAgICAgbXNtOk1ldGhvZHMuTXVsdGlTZWxlY3RNb2RlLFxcbiAgICAgICAgICAgIGZ1bmM6bXlmdW5jLFxcbiAgICAgICAgfSlcXG4gICAgfSxcXG4gICAgc21hbGw6IGZ1bmN0aW9uKHN0ciwgY29sb3IpIHtcXG4gICAgICAgIHJldHVybiAn4oCY4oCY4oCZ4oCZPHNtYWxsPjxmb250IGNvbG9yPVxcXCInICsgKGNvbG9yIHx8ICcnKSArICdcXFwiPicgKyBzdHIgKyAnPC9mb250Pjwvc21hbGw+JztcXG4gICAgfSxcXG4gICAg5aOw5piOOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMuc21hbGwoJ+S7peS4iuaVsOaNruadpea6kOS6jue9kee7nO+8jOWmguaCqOWWnOasou+8jOivt+aUr+aMgeWumOaWue+8gScsICcjODcxRjc4JyksXFxuICAgICAgICAgICAgZGVzYzogdGhpcy5zbWFsbCgn5q2k6KeE5YiZ5LuF6ZmQ5a2m5Lmg5Lqk5rWB5L2/55So77yM6K+35LqO5a+85YWl5ZCOMjTlsI/ml7blhoXliKDpmaTvvIzku7vkvZXnu4Tnu4fmiJbkuKrkurrkuI3lvpfku6Xku7vkvZXmlrnlvI/mlrnms5XkvKDmkq3mraTop4TliJnnmoTmlbTkvZPmiJbpg6jliIbvvIEnLCAnI0YyMEMwMCcpLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgICAgIH0pO1xcbiAgICB9LFxcblxcblxcbi8v566A5LuLXFxuICAgIHNldERlc2M6IGZ1bmN0aW9uKGRlc2MsIG51bSkge1xcbiAgICAgICAgZGVzYyA9IGRlc2MuY29uc3RydWN0b3IgPT0gQXJyYXkgPyBkZXNjLmpvaW4oJzxicj4nKSA6IGRlc2M7XFxuICAgICAgICBpZiAoZGVzYy5yZXBsYWNlKC8oPGJyPnxcXFxccyspL2csICcnKS5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgICAgIHJldHVyblxcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIGluZm89c3RvcmFnZTAuZ2V0TXlWYXIoJ2VyX2luZm8nLCd7fScpXFxuICAgICAgICBpZihpbmZvWydkZXNjJ10hPXVuZGVmaW5lZCl7XFxuICAgICAgICAgIGluZm9bJ2Rlc2MnXT1pbmZvWydkZXNjJ10rJyDnroDku4s6JytkZXNjO1xcbiAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcignZXJfaW5mbycsaW5mbyk7XFxuICAgICAgICB9XFxuICAgICAgICBcXG4gICAgICAgIGNvbnN0IG1hcmsgPSAnZGVzYyc7XFxuICAgICAgICBudW0gPSB0eXBlb2YobnVtKSA9PSAndW5kZWZpbmVkJyA/IDkwIDogbnVtXFxuICAgICAgICBkZXNjID0gZGVzYy5zdGFydHNXaXRoKCfjgIDjgIAnKSA/IGRlc2MgOiAn44CA44CAJyArIGRlc2M7XFxuICAgICAgICBkZXNjID0gZGVzYy5yZXBsYWNlKC8nL2csIFxcXCImIzM5O1xcXCIpXFxuXFxuICAgICAgICBmdW5jdGlvbiBzdWJzdHIoc3RyLCBtYXhMZW5ndGgpIHtcXG4gICAgICAgICAgICBsZXQgbGVuID0gMDtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICBpZiAoc3RyLmNoYXJDb2RlQXQoaSkgPiAyNTUpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxlbiArPSAyO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgbGVuKys7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKGxlbiA+IG1heExlbmd0aCkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5zbGljZSgwLCBpKSArICcuLi4nO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBzdHI7XFxuICAgICAgICB9XFxuICAgICAgICBsZXQgc2Rlc2MgPSBzdWJzdHIoZGVzYywgbnVtKTtcXG4gICAgICAgIHZhciBsYXp5ID0gJChgI25vTG9hZGluZyNgKS5sYXp5UnVsZSgoZGMsIHNkYywgbSkgPT4ge1xcbiAgICAgICAgICAgIHZhciBzaG93ID0gc3RvcmFnZTAuZ2V0SXRlbShtLCAnMCcpO1xcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IGZpbmRJdGVtKCdkZXNjJykudGl0bGU7XFxuICAgICAgICAgICAgdmFyIHJlID0gLyg8XFxcXC9zbWFsbD48YnI+Lio/PikuKy9nO1xcbiAgICAgICAgICAgIHZhciBleHAgPSAn5bGV5byAOic7XFxuICAgICAgICAgICAgdmFyIHJldCA9ICfmlLbotbc6JztcXG4gICAgICAgICAgICBpZiAoc2hvdyA9PSAnMScpIHtcXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbSgnZGVzYycsIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKHJldCwgZXhwKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKHJlLCAnJDEnICsgc2RjICsgJzwvc21hbGw+JylcXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvKDxcXFxcL3NtYWxsPjxicj48Zm9udCBjb2xvcj1cXFwiKS4qPyhcXFwiPikvLCAnJDEjOEEyQkUyJDInKS8v5pS26LW36aKc6ImyXFxuXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0obSwgJzAnKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKCdkZXNjJywge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlXFxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoZXhwLCByZXQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UocmUsICckMScgKyBkYyArICc8L3NtYWxsPicpXFxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyg8XFxcXC9zbWFsbD48YnI+PGZvbnQgY29sb3I9XFxcIikuKj8oXFxcIj4pLywgJyQxIzAwODAwMCQyJykvL+WxleW8gOminOiJslxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKG0sICcxJyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBgaGlrZXI6Ly9lbXB0eWBcXG4gICAgICAgIH0sIGRlc2MsIHNkZXNjLCBtYXJrKVxcbiAgICAgICAgdmFyIHNjID0gc3RvcmFnZTAuZ2V0SXRlbShtYXJrLCAnMCcpID09ICcwJyA/ICflsZXlvIA6JyA6ICfmlLbotbc6JztcXG4gICAgICAgIHZhciBkYyA9IHN0b3JhZ2UwLmdldEl0ZW0obWFyaywgJzAnKSA9PSAnMCcgPyBzZGVzYyA6IGRlc2M7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICcnICsgJzxiPjxmb250IGNvbG9yPVxcXCIjMDk4QUMxXFxcIj7iiLcgIOWJp+aDheeugOS7i1xcdDwvZm9udD48L2I+JyArIFxcXCI8c21hbGw+PGEgc3R5bGU9J3RleHQtZGVjb3JhdGlvbjogbm9uZTsnIGhyZWY9J1xcXCIgKyBsYXp5ICsgXFxcIic+XFxcIiArIHNjICsgJzwvYT48L3NtYWxsPjxicj48Zm9udCBjb2xvcj1cXFwiIzhBMkJFMlxcXCI+JyArIGAke2RjfWAgKyAnPC9zbWFsbD4nLC8v6buY6K6k6aKc6ImyXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiAnZGVzYycsXFxuICAgICAgICAgICAgICAgIGxpbmVTcGFjaW5nOiA2LFxcbiAgICAgICAgICAgICAgICB0ZXh0U2l6ZTogMTUsXFxuICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiB0cnVlLFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH0sXFxuXFxuLy/mtbfmiqVcXG4gICAgc3RyQ29udmVydDogZnVuY3Rpb24oYXJyKSB7XFxuICAgICAgICByZXR1cm4gYXJyLm1hcCh4ID0+IHtcXG4gICAgICAgICAgICBzdHIgPSB4O1xcbiAgICAgICAgICAgIGlmICgvKOWvvOa8lCnvvJovLnRlc3Qoc3RyKSkge1xcbiAgICAgICAgICAgICAgICBzdHIgPSBzdHIuc3BsaXQoJy8nKS5tYXAoKHZhbCwgaW5kZXgpID0+IChpbmRleCA9PT0gMCA/ICcnIDogJycpICsgdmFsKS5zbGljZSgwLCA1KS5qb2luKCcgJykucmVwbGFjZSgvICQvLCAnJyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBzdHJcXG4gICAgICAgIH0pXFxuICAgIH0sXFxuICAgIHNldENvbnRlbnQ6IGZ1bmN0aW9uKG9iaikge1xcbiAgICAgICAgdmFyIGNvbnRlbnRzID0gb2JqLm1haW47XFxuICAgICAgICB2YXIgc29ydE9yZGVyID0gb2JqLnNvcnQ7XFxuICAgICAgICB2YXIgaW1nID0gb2JqLmltZztcXG4gICAgICAgIHZhciB0ZXh0cyA9IGNvbnRlbnRzLm1hcCh4ID0+IHBkZmgoeCwgJ1RleHQnKSk7XFxuICAgICAgICB2YXIgYXJyYXkgPSB0ZXh0cy5zb3J0KChhLCBiKSA9PiB7XFxuICAgICAgICAgICAgY29uc3QgaW5kZXhBID0gc29ydE9yZGVyLmluZGV4T2YoYS5zdWJzdHIoMCwgMikpO1xcbiAgICAgICAgICAgIGNvbnN0IGluZGV4QiA9IHNvcnRPcmRlci5pbmRleE9mKGIuc3Vic3RyKDAsIDIpKTtcXG4gICAgICAgICAgICByZXR1cm4gaW5kZXhBIC0gaW5kZXhCO1xcbiAgICAgICAgfSlcXG4gICAgICAgIHZhciByZWdleCA9IG5ldyBSZWdFeHAoJygnICsgc29ydE9yZGVyLmpvaW4oJ3wnKSArICcpJyk7XFxuICAgICAgICBhcnJheSA9IGFycmF5LmZpbHRlcihmdW5jdGlvbihpdGVtKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QoaXRlbSk7XFxuICAgICAgICB9KTtcXG4gICAgICAgIGFycmF5ID0gdGhpcy5zdHJDb252ZXJ0KGFycmF5KVxcbiAgICAgICAgdmFyIHRpdGxlcyA9IFtdO1xcbiAgICAgICAgdmFyIGRlc2NzID0gW107XFxuICAgICAgICBzd2l0Y2ggKGFycmF5Lmxlbmd0aCkge1xcbiAgICAgICAgICAgIGNhc2UgNDpcXG4gICAgICAgICAgICBjYXNlIDU6XFxuICAgICAgICAgICAgICAgIHRpdGxlcyA9IGFycmF5LnNsaWNlKDAsIDIpO1xcbiAgICAgICAgICAgICAgICBkZXNjcyA9IGFycmF5LnNsaWNlKDIpO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlIDY6XFxuICAgICAgICAgICAgICAgIHRpdGxlcyA9IGFycmF5LnNsaWNlKDAsIDMpO1xcbiAgICAgICAgICAgICAgICBkZXNjcyA9IGFycmF5LnNsaWNlKDMpO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgIH1cXG4gICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCdlcl9pbmZvJyx7XFxuICAgICAgICAgIGRlc2M6ZGVzY3Muam9pbignXFxcXG4nKSxcXG4gICAgICAgICAgaW1nOmltZyxcXG4gICAgICAgIH0pXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIC8vdGl0bGU6IHRpdGxlc1swXSArICdcXFxcbicgKyB0aGlzLnNtYWxsKHRpdGxlcy5zbGljZSgxLCAzKS5qb2luKCdcXFxcbicpKSxcXG4gICAgIHRpdGxlOiAgdGhpcy5zbWFsbCh0aXRsZXNbMF0gKyAnXFxcXG4nICsgdGl0bGVzLnNsaWNlKDEsIDMpLmpvaW4oJ1xcXFxuJyksJ3JlZCcpLFxcbi8vdGl0bGU6IHRoaXMuc21hbGwocGRmaChodG1sLCAnLmdlbi1zZWFyY2gtZm9ybSYmdWwmJmxpLDAnKSwncmVkJyksXFxuICAgICAgICAgICBkZXNjOiB0aGlzLnNtYWxsKGRlc2NzLmpvaW4oJ1xcXFxuJyksJyNGRjdGMDAnKSxcXG4gICAgIC8vZGVzYzogdGhpcy5zbWFsbChwZGZoKGh0bWwsICcuY29udGV4dCYmLndpZGdldCYmVGV4dCcpLCcjRkY3RjAwJyksXFxuICAgICAgICAgICAgcGljX3VybDogaW1nLFxcbiAgICAgICAgICAgIHVybDogTVlfVVJMLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1cicsXFxuICAgICAgICB9KVxcbiAgICAgICAgaWYgKG9iai5kZXNjICE9IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgIHRoaXMuc2V0RGVzYyhvYmouZGVzYyk7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIHNldEN1c3RvbTogZnVuY3Rpb24ob2JqLCBpbWcpIHtcXG4gICAgICAgIHZhciBhcnJheSA9IFtdO1xcbiAgICAgICAgaWYgKG9iai5jb25zdHJ1Y3RvciA9PSBBcnJheSkge1xcbiAgICAgICAgICAgIGFycmF5ID0gb2JqO1xcbiAgICAgICAgfVxcbiAgICAgICAgYXJyYXkgPSB0aGlzLnN0ckNvbnZlcnQoYXJyYXkpO1xcbiAgICAgICAgdmFyIHRpdGxlcyA9IFtdO1xcbiAgICAgICAgdmFyIGRlc2NzID0gW107XFxuICAgICAgICBzd2l0Y2ggKGFycmF5Lmxlbmd0aCkge1xcbiAgICAgICAgICAgIGNhc2UgNDpcXG4gICAgICAgICAgICBjYXNlIDU6XFxuICAgICAgICAgICAgICAgIHRpdGxlcyA9IGFycmF5LnNsaWNlKDAsIDIpO1xcbiAgICAgICAgICAgICAgICBkZXNjcyA9IGFycmF5LnNsaWNlKDIpO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlIDY6XFxuICAgICAgICAgICAgICAgIHRpdGxlcyA9IGFycmF5LnNsaWNlKDAsIDMpO1xcbiAgICAgICAgICAgICAgICBkZXNjcyA9IGFycmF5LnNsaWNlKDMpO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgIH1cXG4gICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCdlcl9pbmZvJyx7XFxuICAgICAgICAgIGRlc2M6ZGVzY3Muam9pbignXFxcXG4nKSxcXG4gICAgICAgICAgaW1nOmltZyxcXG4gICAgICAgIH0pXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZXNbMF0gKyAnXFxcXG4nICsgdGhpcy5zbWFsbCh0aXRsZXMuc2xpY2UoMSwgMykuam9pbignXFxcXG4nKSksXFxuICAgICAgICAgICAgZGVzYzogdGhpcy5zbWFsbChkZXNjcy5qb2luKCdcXFxcbicpKSxcXG4gICAgICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICAgICAgdXJsOiBNWV9VUkwsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyJyxcXG4gICAgICAgIH0pXFxuICAgIH0sXFxuXFxuXFxuLy/nur/ot69cXG4gICAgaXNDb2xvcjpmdW5jdGlvbih0ZXh0KSB7XFxuICAgICBjb25zdCByZWdleCA9IC9eIyhbMC05QS1GYS1mXXszfXxbMC05QS1GYS1mXXs2fSkkfF4oW2Etel0rKSQvaTtcXG4gICAgIHJldHVybiByZWdleC50ZXN0KHRleHQpO1xcbiAgICB9LFxcbiAgICBnZXRQcmVzZXQ6ZnVuY3Rpb24oY3VzdG9tKXtcXG4gICAgICBpZih0eXBlb2YgY3VzdG9tZGF0YT09J29iamVjdCcmJiFjdXN0b20pe1xcbiAgICAgICAgY3VzdG9tPWN1c3RvbWRhdGE7XFxuICAgICAgfWVsc2V7XFxuICAgICAgICBjdXN0b209Y3VzdG9tP2N1c3RvbTp7fVxcbiAgICAgIH1cXG4gICAgICBjdXN0b20u5q2j5bqP6aKc6ImyPShjdXN0b20u5q2j5bqP6aKc6ImyJiZ0aGlzLmlzQ29sb3IoY3VzdG9tLuato+W6j+minOiJsikpP2N1c3RvbS7mraPluo/popzoibI6JyMxQUFEMTknO1xcbiAgICAgIGN1c3RvbS7pgIbluo/popzoibI9KGN1c3RvbS7pgIbluo/popzoibImJnRoaXMuaXNDb2xvcihjdXN0b20u6YCG5bqP6aKc6ImyKSk/Y3VzdG9tLumAhuW6j+minOiJsjonI0ZGMDAwMCc7XFxuICAgICAgY3VzdG9tLuWbvuaghz1jdXN0b20u5Zu+5qCHP2N1c3RvbS7lm77moIc6J2h0dHBzOi8vaTIuMTAwMDI0Lnh5ei8yMDIzLzA2LzEwL2g0ejYyNy53ZWJwJztcXG4gICAgICBjdXN0b20u57q/6Lev6YCJ5LitPWN1c3RvbS7nur/ot6/pgInkuK0/Y3VzdG9tLue6v+i3r+mAieS4rTonIzAwOEI4Qic7XFxuICAgICAgcmV0dXJuIGN1c3RvbTtcXG4gICAgfSxcXG4gICAgY3JlYXRlUExpc3Q6IGZ1bmN0aW9uKHRhYnMsdmFyaSxzaHNvcnQsY3VzdG9tKXtcXG4gICAgICB2YXJpPVxcXCJlcl9cXFwiK3Zhcmk7XFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgdmFyIHVybCA9ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHZhcmksIHNoc29ydCwgaSxsaW5lYykgPT4ge1xcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICB2YXIgbGlzdHMgPSBzdG9yYWdlMC5nZXRNeVZhcihzaHNvcnQgKyAnX2xpc3QnLCAnW10nKTtcXG4gICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICBpZihnZXRNeVZhcih2YXJpKydmb2xkJywnMScpPT0nMCcpe1xcbiAgICAgICAgICAgICAgICB2YXIgYnRuPWZpbmRJdGVtKHNoc29ydCsnX2J1dHRvbicpO1xcbiAgICAgICAgICAgICAgICB2YXIgZm9sZHM9Wyc8Zm9udCBjb2xvcj1cXFwiI0QzRDNEM1xcXCI+4pi3JywnPGZvbnQgY29sb3I9XFxcIiNGRkE1MDBcXFwiPuKYsCddO1xcbiAgICAgICAgICAgICAgICAgIHZhciBwbGlzdCA9IHN0b3JhZ2UwLmdldE15VmFyKCdlcl9wbGF5bGlzdHMnLCAne30nKTtcXG4gICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICB2YXIgY29sID0gcGxpc3Rbc2hzb3J0XS5jb2xfdHlwZTtcXG4gICAgICAgICAgICAgICAgICB2YXIgY2xzID0gcGxpc3Rbc2hzb3J0XS5jbHM7XFxuICAgICAgICAgICAgICAgICAgdmFyIHBpYz1wbGlzdFtzaHNvcnRdLnBpYztcXG4gICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKGJ0bi5leHRyYS5pZCwge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGJ0bi50aXRsZS5yZXBsYWNlKGZvbGRzWzBdLCBmb2xkc1sxXSksXFxuICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICBwdXRNeVZhcih2YXJpKydmb2xkJywnMScpO1xcbiAgICAgICAgICAgICAgLy9yZXR1cm4gJ3RvYXN0Oi8v5bGV5byA5omN6IO95pON5L2cJztcXG4gICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBsaXN0ID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ2VyX3BsYXlsaXN0cycsICd7fScpO1xcbiAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICB2YXIgY29sID0gcGxpc3Rbc2hzb3J0XS5jb2xfdHlwZTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBjbHMgPSBwbGlzdFtzaHNvcnRdLmNscztcXG4gICAgICAgICAgICAgICAgICAgIHZhciBwaWM9cGxpc3Rbc2hzb3J0XS5waWM7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIodmFyaSwgaSk7XFxuXFxuICAgICAgICAgICAgICAgIHZhciB4bGlzdD1saXN0c1tpXTtcXG4gICAgICAgICAgICAgICAgaWYoJC5mdW5jIT11bmRlZmluZWQmJiQuZnVuYy5jb25zdHJ1Y3Rvcj09RnVuY3Rpb24pe1xcbiAgICAgICAgICAgICAgICAgICAgeGxpc3Q9JC5mdW5jKGkpO1xcbiAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihzaHNvcnQgKyAnX2xpc3QnLCB4bGlzdCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdmFyIHBsYXlzID0geGxpc3QubWFwKHggPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogeC50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHgudXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBjb2wsXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGljOnBpYyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogeC51cmwucmVwbGFjZSgvQGxhenlSdWxlW1xcXFxzXFxcXFNdKy9nLCAnJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsczogY2xzLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgaWYgKGdldE15VmFyKHNoc29ydCArICdfc29ydCcpID09ICcxJykge1xcbiAgICAgICAgICAgICAgICAgICAgcGxheXMucmV2ZXJzZSgpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHZhciBwY2ZnPXN0b3JhZ2UwLmdldE15VmFyKHNoc29ydCsnX3B1c2hjZmcnLCd7fScpO1xcbiAgICAgICAgICAgICAgICBpZihwY2ZnWyfljZXmjqgnXSl7XFxuICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbShzaHNvcnQrJ19wdXNoJyx7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTpwY2ZnWydvYmonXVsn5Y2V5o6oJ11bMF1cXG4gICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgIHBjZmdbJ+WNleaOqCddPWZhbHNlO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmKHBjZmdbJ+mAieaOqCddKXtcXG4gICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHNoc29ydCsnX3B1c2hzJyx7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTpwY2ZnWydvYmonXVsn6YCJ5o6oJ11bMF1cXG4gICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgIHBjZmdbJ+mAieaOqCddPWZhbHNlO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKHNoc29ydCsnX3B1c2hjZmcnLHBjZmcpO1xcbiAgICAgICAgICAgICAgICBkZWxldGVJdGVtQnlDbHMoc2hzb3J0KTtcXG4gICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKHNoc29ydCArICdfbGluZScsIHBsYXlzKTtcXG5cXG4gICAgICAgICAgICAgICAgdmFyIHRhYnggPSBmaW5kSXRlbXNCeUNscyhzaHNvcnQgKyAnX3RhYicpO1xcbiAgICAgICAgICAgICAgICB0YWJ4LmZvckVhY2goKHgsIGlpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSB4LnRpdGxlO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gaWkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHguZXh0cmEuaWQsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLnJlcGxhY2UoLyMoXFxcXHcrKT8vZywgbGluZWMpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oeC5leHRyYS5pZCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUucmVwbGFjZSgvIyhcXFxcdyspPy9nLCAnIycpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/liIfmjaLmiJDlip/vvIEnO1xcbiAgICAgICAgICAgIH0sIHZhcmksIHNoc29ydCwgaSxjdXN0b20u57q/6Lev6YCJ5LitKVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdJyArIChnZXRNeVZhcih2YXJpLCAnMCcpID09IGkgPyB0YWJzW2ldLmZvbnRjb2xvcihjdXN0b20u57q/6Lev6YCJ5LitKSA6IHRhYnNbaV0uZm9udGNvbG9yKCcjJykpLFxcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGNsczogc2hzb3J0ICsgJ190YWInLFxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHNoc29ydCArICdfdGFiXycgKyBpLFxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6J2JsYW5rX2Jsb2NrJywgLy8nYmxhbmtfYmxvY2snLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiBzaHNvcnQgKyAnX2xpbmUnLFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH0sXFxuICAgIHB1c2hUYWI6ZnVuY3Rpb24odmFyaSxzaHNvcnQpe1xcbiAgICAgIGFkZExpc3RlbmVyKCdvblJlZnJlc2gnLCAkLnRvU3RyaW5nKChzaHNvcnQpID0+IHtcXG4gICAgICAgIGNsZWFyTXlWYXIoc2hzb3J0KydfcHVzaGNmZycpO1xcbiAgICAgICAgY2xlYXJNeVZhcihzaHNvcnQrJ19kdW9zZWxlY3QnKTtcXG4gICAgICAgIH0sIHNoc29ydCkpXFxuICAgICAgIHZhciBwb2JqPXtcXG4gICAgICAgJ+WNleaOqCc6Wyfipr/ljZXmjqgnLCc8Yj7ipr/ljZXmjqg8L2I+Jy5mb250Y29sb3IoJyMwMEZBOUEnKV0sXFxuICAgICAgICfpgInmjqgnOlsn4piR6YCJ5o6oJywnPGI+4piR6YCJ5o6oPC9iPicuZm9udGNvbG9yKCcjNDY4MkI0JyldLFxcbiAgICAgIH1cXG4gICAgICBcXG4gICAgICBkLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTon4oyYJyxcXG4gICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgY2xzOnNoc29ydCsnX3B1c2h0YWInLFxcbiAgICAgICAgICB9XFxuICAgICAgICB9LHtcXG4gICAgICAgICAgdGl0bGU6cG9ialsn5Y2V5o6oJ11bMF0sXFxuICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHNoc29ydCxwb2JqLHZhcmkpPT57XFxuICAgICAgICAgIGlmKGdldE15VmFyKHZhcmkrJ2ZvbGQnLCcxJyk9PScwJyl7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WxleW8gOaJjeiDveaTjeS9nCc7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgdmFyIHRpdGxlcz1wb2JqWyfljZXmjqgnXTtcXG4gICAgICAgICAgdmFyIHBjZmc9c3RvcmFnZTAuZ2V0TXlWYXIoc2hzb3J0KydfcHVzaGNmZycsJ3t9Jyk7XFxuICAgICAgICAgIHBjZmdbJ29iaiddPXBvYmo7XFxuICAgICAgICAgIHZhciDljZXmjqg9cGNmZ1sn5Y2V5o6oJ10/cGNmZ1sn5Y2V5o6oJ106ZmFsc2U7XFxuICAgICAgICAgIFxcbiAgICAgICAgICBpZijljZXmjqgpe1xcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oc2hzb3J0KydfcHVzaCcse1xcbiAgICAgICAgICAgICAgdGl0bGU6dGl0bGVzWzBdLFxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgcGNmZ1sn5Y2V5o6oJ109ZmFsc2U7XFxuICAgICAgICAgICAgcGNmZ1sncGxheWxpc3QnXS5tYXAoKHgpPT57XFxuICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh4LmV4dHJhLmlkLHtcXG4gICAgICAgICAgICAgICAgIHVybDp4LnVybCxcXG4gICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oc2hzb3J0KydfcHVzaCcse1xcbiAgICAgICAgICAgICAgdGl0bGU6J+KAnOKAnOKAneKAnScrdGl0bGVzWzFdLFxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgdXBkYXRlSXRlbShzaHNvcnQrJ19wdXNocycse1xcbiAgICAgICAgICAgICAgdGl0bGU6cG9ialsn6YCJ5o6oJ11bMF0sXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBwY2ZnWyfljZXmjqgnXT10cnVlO1xcbiAgICAgICAgICAgIHBjZmdbJ+mAieaOqCddPWZhbHNlO1xcbiAgICAgICAgICAgIHZhciBwbGF5bGlzdD1maW5kSXRlbXNCeUNscyhzaHNvcnQpO1xcbiAgICAgICAgICAgIHBjZmdbJ3BsYXlsaXN0J109cGxheWxpc3Q7XFxuICAgICAgICAgICAgZmluZEl0ZW1zQnlDbHMoc2hzb3J0KS5tYXAoeD0+e1xcbiAgICAgICAgICAgICAgdmFyIGRwdXNoPXtcXG4gICAgICAgICAgICAgICAgbmFtZTpnZXRQYWdlVGl0bGUoKSxcXG4gICAgICAgICAgICAgICAgdXJsOngudGl0bGUrJyQnK3guZXh0cmEuaWRcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oeC5leHRyYS5pZCx7XFxuICAgICAgICAgICAgICAgIHVybDokKCcnKS5sYXp5UnVsZSgoZHB1c2gpPT57XFxuICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9wdXNoP3J1bGU9WFlR5o6o6YCBJnB1c2h1cmw9JyArIGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShkcHVzaCkpO1xcbiAgICAgICAgICAgICAgICB9LGRwdXNoKVxcbiAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICB9XFxuICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKHNoc29ydCsnX3B1c2hjZmcnLHBjZmcpO1xcbiAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8vJyso5Y2V5o6oPyfljZXmjqjlvIDlkK8nOifljZXmjqjlhbPpl60nKTtcXG4gICAgICAgICAgfSxzaHNvcnQscG9iaix2YXJpKSxcXG4gICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgIGlkOnNoc29ydCsnX3B1c2gnLFxcbiAgICAgICAgICAgIGNsczpzaHNvcnQrJ19wdXNodGFiJyxcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSx7XFxuICAgICAgICAgIHRpdGxlOnBvYmpbJ+mAieaOqCddWzBdLFxcbiAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzaHNvcnQscG9iaix2YXJpKT0+e1xcbiAgICAgICAgICBpZihnZXRNeVZhcih2YXJpKydmb2xkJywnMScpPT0nMCcpe1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lsZXlvIDmiY3og73mk43kvZwnO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIHZhciB0aXRsZXM9cG9ialsn6YCJ5o6oJ107XFxuICAgICAgICAgIHZhciBwY2ZnPXN0b3JhZ2UwLmdldE15VmFyKHNoc29ydCsnX3B1c2hjZmcnLCd7fScpO1xcbiAgICAgICAgICBwY2ZnWydvYmonXT1wb2JqO1xcbiAgICAgICAgICB2YXIg6YCJ5o6oPXBjZmdbJ+mAieaOqCddP3BjZmdbJ+mAieaOqCddOmZhbHNlO1xcbiAgICAgICAgICBpZijpgInmjqgpe1xcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oc2hzb3J0KydfcHVzaHMnLHtcXG4gICAgICAgICAgICAgIHRpdGxlOnRpdGxlc1swXSxcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIHBjZmdbJ+mAieaOqCddPWZhbHNlO1xcbiAgICAgICAgICAgIHBjZmdbJ3BsYXlsaXN0J10ubWFwKCh4KT0+e1xcbiAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oeC5leHRyYS5pZCx7XFxuICAgICAgICAgICAgICAgICB0aXRsZTp4LnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgdXJsOngudXJsLFxcbiAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB1cGRhdGVJdGVtKHNoc29ydCsnX3B1c2h0bycsIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5o6o6YCB5pys6aG1PT5UVkJveCcsXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgY2xlYXJNeVZhcihzaHNvcnQrJ19kdW9zZWxlY3QnKTtcXG4gICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oc2hzb3J0KydfcHVzaHMnLHtcXG4gICAgICAgICAgICAgIHRpdGxlOifigJzigJzigJ3igJ0nK3RpdGxlc1sxXSxcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIHBjZmdbJ+mAieaOqCddPXRydWU7XFxuICAgICAgICAgICAgcGNmZ1sn5Y2V5o6oJ109ZmFsc2U7XFxuICAgICAgICAgICAgdmFyIHBsYXlsaXN0PWZpbmRJdGVtc0J5Q2xzKHNoc29ydCk7XFxuICAgICAgICAgICAgcGNmZ1sncGxheWxpc3QnXT1wbGF5bGlzdDtcXG4gICAgICAgICAgICBsZXQgSWRzPXBsYXlsaXN0Lm1hcChpdCA9PiBpdC5leHRyYS5pZCk7XFxuICAgICAgICAgICAgICAgIElkcy5mb3JFYWNoKHggPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gZmluZEl0ZW0oeCkudGl0bGU7XFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHgsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQubXNtKHRpdGxlLCB4LHNoc29ydCksXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgdXBkYXRlSXRlbShzaHNvcnQrJ19wdXNoJyx7XFxuICAgICAgICAgICAgICB0aXRsZTpwb2JqWyfljZXmjqgnXVswXSxcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oc2hzb3J0KydfcHVzaHRvJywge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfmjqjpgIHpgInkuK09PlRWQm94JyxcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihzaHNvcnQrJ19wdXNoY2ZnJyxwY2ZnKTtcXG4gICAgICAgICAgcmV0dXJuICd0b2FzdDovLycrKOmAieaOqD8n6YCJ5o6o5byA5ZCvJzon6YCJ5o6o5YWz6ZetJyk7XFxuICAgICAgICAgIH0sc2hzb3J0LHBvYmosdmFyaSksXFxuICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICBpZDpzaHNvcnQrJ19wdXNocycsXFxuICAgICAgICAgICAgY2xzOnNoc29ydCsnX3B1c2h0YWInXFxuICAgICAgICAgIH1cXG4gICAgICAgIH0se1xcbiAgICAgICAgICB0aXRsZTogXFxcIuaOqOmAgeacrOmhtT0+VFZCb3hcXFwiLFxcbiAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzaHNvcnQsdmFyaSk9PntcXG4gICAgICAgICAgdmFyIHBjZmc9c3RvcmFnZTAuZ2V0TXlWYXIoc2hzb3J0KydfcHVzaGNmZycsJ3t9Jyk7XFxuICAgICAgICAgIHZhciDljZXmjqg9cGNmZ1sn5Y2V5o6oJ10/cGNmZ1sn5Y2V5o6oJ106ZmFsc2U7XFxuICAgICAgICAgIHZhciDpgInmjqg9cGNmZ1sn6YCJ5o6oJ10/cGNmZ1sn6YCJ5o6oJ106ZmFsc2U7XFxuICAgICAgICAgIGlmKCHljZXmjqgmJiHpgInmjqgpe1xcbiAgICAgICAgICB2YXIgdGFicz1zdG9yYWdlMC5nZXRNeVZhcihzaHNvcnQrJ190YWJzJywnW10nKTtcXG4gICAgICAgICAgdHJ5e1xcbiAgICAgICAgICB2YXIgcGxzPXN0b3JhZ2UwLmdldE15VmFyKHNoc29ydCsnX2xpc3QnLCdbXScpLm1hcChsaSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpLm1hcChpdGVtID0+IGl0ZW0udGl0bGUgKyAnJCcgKyBpdGVtLnVybCkuam9pbignIycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmpvaW4oJyQkJCcpO1xcbiAgICAgICAgICB9Y2F0Y2h7XFxuICAgICAgICAgIHZhciBwbHM9c3RvcmFnZTAuZ2V0TXlWYXIoc2hzb3J0K1xcXCJfbGlzdFxcXCIsJ1tdJykubWFwKHggPT4geC50aXRsZSArIFxcXCIkXFxcIiArIHgudXJsKS5qb2luKFxcXCIjXFxcIik7XFxuICAgICAgICAgIHZhciB0YWJzPVt0YWJzW2dldE15VmFyKHZhcmksJzAnKV1dO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIC8qbG9nKHBscylcXG4gICAgICAgICAgbG9nKHRhYnMpKi9cXG4gICAgICAgICAgfVxcbiAgICAgICAgICBpZijpgInmjqgpe1xcbiAgICAgICAgICB2YXIgcGxzPXN0b3JhZ2UwLmdldE15VmFyKHNoc29ydCtcXFwiX2R1b3NlbGVjdFxcXCIsJ1tdJykubWFwKHggPT4geC50aXRsZSArIFxcXCIkXFxcIiArIHgudXJsKS5qb2luKFxcXCIjXFxcIik7XFxuICAgICAgICAgIGlmKHBscy5sZW5ndGg9PTApe1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/pgInmi6nkuLrnqbonO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIHZhciB0YWJzPVsn5pKt5pS+5YiX6KGoJ107XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgXFxuICAgICAgICAgIHZhciBpbmZvPXN0b3JhZ2UwLmdldE15VmFyKCdlcl9pbmZvJywne30nKTtcXG4gICAgICAgICAgdmFyIGRlc2MgPWluZm9bJ2Rlc2MnXTtcXG4gICAgICAgICAgdmFyIOaOqOmAgSA9IHtcXG4gICAgICAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogZ2V0UGFnZVRpdGxlKCksXFxuICAgICAgICAgICAgICAgICBcXFwiY29udGVudFxcXCI6IGRlc2N8fCcnLFxcbiAgICAgICAgICAgICAgICAgXFxcInBpY1xcXCI6IGluZm9bJ2ltZyddIHx8ICcnLFxcbiAgICAgICAgICAgICAgICAgXFxcImZyb21cXFwiOiB0YWJzLmpvaW4oJyQkJCcpLFxcbiAgICAgICAgICAgICAgICAgXFxcInVybFxcXCI6IHBscyxcXG4gICAgICAgICAgIH1cXG4gICAgICAgICAgLy9sb2co5o6o6YCBKVxcbiAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UvcHVzaD9ydWxlPVhZUeaOqOmAgSZwdXNodXJsPVxcXCIgKyBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnko5o6o6YCBKSlcXG4gICAgICAgICAgfSxzaHNvcnQsdmFyaSksXFxuICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICBpZDpzaHNvcnQrJ19wdXNodG8nLFxcbiAgICAgICAgICAgIGNsczpzaHNvcnQrJ19wdXNodGFiJ1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LHtcXG4gICAgICAgICAgY29sX3R5cGU6J2JsYW5rX2Jsb2NrJyxcXG4gICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgIGNsczpzaHNvcnQrJ19wdXNodGFiJyxcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgfSxcXG4gICAgc2V0TG9uZ2NsaWNrOmZ1bmN0aW9uKHNoc29ydCxjdXN0b20pe1xcbiAgICAgIHJldHVybiBbe3RpdGxlOifmoLflvI/wn46oJyxqczogJC50b1N0cmluZygoc2hzb3J0KT0+e1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFsbF9jb2xzID0gWycnXS5jb25jYXQoZ2V0Q29sVHlwZXMoKSk7XFxuICAgICAgICAgICAgICAgICAgICBhbGxfY29scz1hbGxfY29scy5maWx0ZXIoeD0+XFxuICAgICAgICAgICAgICAgICAgICAgIC8odGV4dF98ZmxleCkuKi8udGVzdCh4KSYmeCE9J3RleHRfaWNvbicpO1xcbiAgICAgICAgICAgICAgICAgICAgICAvL2xvZyhhbGxfY29scylcXG4gICAgICAgICAgICAgICAgICAgIGxldCBjbHMgPSBzdG9yYWdlMC5nZXRNeVZhcignZXJfcGxheWxpc3RzJywne30nKVxcbiAgICAgICAgICAgICAgICAgICAgfHwgJyc7XFxuICAgICAgICAgICAgICAgICAgICBpZihjbHNbc2hzb3J0XSE9Jycpe1xcbiAgICAgICAgICAgICAgICAgICAgICBjb2w9Y2xzW3Noc29ydF0uY29sX3R5cGU7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBsZXQg5oyJ6ZKu5qC35byPID0gYWxsX2NvbHMubWFwKChpdCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdCA9PT0gY29sID8gJ/CfkYknICsgaXQ6IGl0O1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgdGlwcyA9ICfor7fpgInmi6npgInpm4bmjInpkq7moLflvI8nO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQo5oyJ6ZKu5qC35byPLCAyLCB0aXBzKS5zZWxlY3QoKHNoc29ydCxjbHMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKC/wn5GJL2csICcnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvKnN0b3JhZ2UwLnNldEl0ZW0oJ+aMiemSruagt+W8jycsIGlucHV0KTsqL1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvbGRJZHMgPSAoZmluZEl0ZW1zQnlDbHMoc2hzb3J0KSB8fCBbXSkubWFwKGl0PT5pdC5leHRyYS5pZCk7IC8v6ICB5YWD57SgaWRzXFxuICAgICAgICAgICAgICAgICAgICAgICAgb2xkSWRzLmZvckVhY2goeD0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh4LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogaW5wdXRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWIh+aNoumAiembhuaMiemSruagt+W8j+S4ujonICsgaW5wdXQ7XFxuICAgICAgICAgICAgICAgICAgICB9LHNoc29ydCxjbHMpO1xcbiAgICAgICAgICAgICAgICB9LHNoc29ydCxjdXN0b20pfV1cXG4gICAgfSxcXG4gICAgc2V0VGFiczogZnVuY3Rpb24odGFicywgdmFyaSwgc2hzb3J0LHBhcnNlKSB7XFxuICAgICAgICBsZXQgY3VzdG9tPXBhcnNlLuiHquWumuS5iTtcXG4gICAgICAgIGN1c3RvbSA9dGhpcy5nZXRQcmVzZXQoY3VzdG9tKTtcXG4gICAgICAgIHNoc29ydCA9IHNoc29ydCA/IHNoc29ydCA6ICdzaHNvcnQnO1xcbiAgICAgICAgdmFyIHRpdGxlID0gKGdldE15VmFyKHNoc29ydCArICdfc29ydCcsICcwJykgPT0gJzEnKSA/ICc8Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I6ICcrY3VzdG9tLumAhuW6j+minOiJsisnXFxcIj7pgIbluo88L3NwYW4+PC9iPicgOiAnPGI+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiAnK2N1c3RvbS7mraPluo/popzoibIrJ1xcXCI+5q2j5bqPPC9zcGFuPjwvYj4nXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB2YXJpICsgJzonICsgdGl0bGUsXFxuICAgICAgICAgICAgZGVzYzogJ+WFsScgKyBTdHJpbmcodGFicy5sZW5ndGgpLmZvbnRjb2xvcignIzQ2ODJCNCcpICsgJ+adoee6v+i3rycsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzaHNvcnQsdmFyaSxjdXN0b20pID0+IHtcXG4gICAgICAgICAgICAgIGxldCBjb25mID0gZ2V0TXlWYXIoc2hzb3J0ICsgJ19zb3J0JywgJzAnKTtcXG4gICAgICAgICAgICAgIGlmKGdldE15VmFyKCdlcl8nK3ZhcmkrJ2ZvbGQnLCcxJyk9PScwJyl7XFxuICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bGV5byA5omN6IO95pON5L2cJztcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdmFyIGNsc2xpc3RzID0gZmluZEl0ZW1zQnlDbHMoc2hzb3J0KTtcXG4gICAgICAgICAgICAgICAgdmFyIG5ld2Nsc2xpc3QgPSAkLmRhdGFDb252ZXJ0KGNsc2xpc3RzKTtcXG4gICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICB2YXIgdGl0bGVzPVtgJHtjdXN0b20u5q2j5bqP6aKc6ImyfVxcXCI+5q2j5bqPYCxgJHtjdXN0b20u6YCG5bqP6aKc6ImyfVxcXCI+6YCG5bqPYF07XFxuICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW1CeUNscyhzaHNvcnQpO1xcbiAgICAgICAgICAgICAgICBuZXdjbHNsaXN0LnJldmVyc2UoKTtcXG4gICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKHNoc29ydCArICdfbGluZScsIG5ld2Nsc2xpc3QpO1xcblxcbiAgICAgICAgICAgICAgICB2YXIgb2JqID0gZmluZEl0ZW0oc2hzb3J0ICsgJ19hdmF0YXInKVxcblxcbiAgICAgICAgICAgICAgICBpZiAoY29uZiA9PSAnMScpIHtcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oc2hzb3J0ICsgJ19hdmF0YXInLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG9iai50aXRsZS5yZXBsYWNlKHRpdGxlc1sxXSwgdGl0bGVzWzBdKSxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihzaHNvcnQgKyAnX3NvcnQnLCAnMCcpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbShzaHNvcnQgKyAnX2F2YXRhcicsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogb2JqLnRpdGxlLnJlcGxhY2UodGl0bGVzWzBdLCB0aXRsZXNbMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHNoc29ydCArICdfc29ydCcsICcxJyk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WIh+aNouaOkuW6j+aIkOWKnyc7XFxuICAgICAgICAgICAgfSwgc2hzb3J0LHZhcmksY3VzdG9tKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgaW1nOiBjdXN0b20u5Zu+5qCHICxcXG4gICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBpZDpzaHNvcnQrJ19hdmF0YXInLFxcbiAgICAgICAgICAgICAgbG9uZ0NsaWNrOnRoaXMuc2V0TG9uZ2NsaWNrKHNoc29ydCksXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgICAgIHZhciDmipjlj6AgPSAn4oCc4oCc4oCd4oCdPGI+JyArICfimLcnLmZvbnRjb2xvcihcXFwiI0QzRDNEM1xcXCIpO1xcbiAgICAgICAgdmFyIOWxleW8gCA9ICfigJzigJzigJ3igJ08Yj4nICsgJ+KYsCcuZm9udGNvbG9yKFxcXCIjRkZBNTAwXFxcIik7XFxuICAgICAgICB2YXIgZm9sZG5hbWUgPSAnZXJfJyt2YXJpICsgJ2ZvbGQnO1xcbiAgICAgICAgdmFyICBmb2xkID0gZ2V0TXlWYXIoZm9sZG5hbWUsICcxJyk7XFxuICAgICAgICBpZih0eXBlb2YocGFyc2VbJ+aOqOmAgSddKSE9J3VuZGVmaW5lZCcmJnBhcnNlWyfmjqjpgIEnXSlcXG4gICAgICAgIHRoaXMucHVzaFRhYignZXJfJyt2YXJpLHNoc29ydCk7XFxuICAgICAgICBcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGZvbGQgPT09ICcwJyA/IOaKmOWPoCA6IOWxleW8gCxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoZm9sZG5hbWUsc2hzb3J0KSA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciAgZm9sZCA9IGdldE15VmFyKGZvbGRuYW1lLCAnMScpO1xcbiAgICAgICAgICAgICAgICB2YXIgb2JqID0gZmluZEl0ZW0oc2hzb3J0KydfbGluZScpO1xcbiAgICAgICAgICAgICAgICB2YXIgYnRuPWZpbmRJdGVtKHNoc29ydCsnX2J1dHRvbicpO1xcbiAgICAgICAgICAgICAgICB2YXIgZm9sZHM9Wyc8Zm9udCBjb2xvcj1cXFwiI0QzRDNEM1xcXCI+4pi3JywnPGZvbnQgY29sb3I9XFxcIiNGRkE1MDBcXFwiPuKYsCddO1xcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgaWYoZm9sZD09JzAnKXtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoZm9sZG5hbWUsICAnMScpO1xcbiAgICAgICAgICAgICAgICB2YXIgY3MgPSBzdG9yYWdlMC5nZXRNeVZhcihzaHNvcnQgKyAnX2NscycpO1xcbiAgICAgICAgICAgICAgICBhZGRJdGVtQWZ0ZXIob2JqLmV4dHJhLmlkLCBjcyk7XFxuICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oYnRuLmV4dHJhLmlkLCB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogYnRuLnRpdGxlLnJlcGxhY2UoZm9sZHNbMF0sIGZvbGRzWzFdKSxcXG4gICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmKGZvbGQ9PScxJyl7XFxuICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoZm9sZG5hbWUsICAnMCcpO1xcbiAgICAgICAgICAgICAgICB2YXIgcGNscyA9IGZpbmRJdGVtc0J5Q2xzKHNoc29ydCk7XFxuICAgICAgICAgICAgICAgIHZhciBjeCA9ICQuZGF0YUNvbnZlcnQocGNscyk7XFxuICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKHNoc29ydCArICdfY2xzJywgY3gpO1xcbiAgICAgICAgICAgICAgICBkZWxldGVJdGVtQnlDbHMoc2hzb3J0KTtcXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbShidG4uZXh0cmEuaWQsIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBidG4udGl0bGUucmVwbGFjZShmb2xkc1sxXSwgZm9sZHNbMF0pLFxcbiAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8vJyArIChmb2xkID09PSAnMScgPyAn5pS26LW3JyA6ICflsZXlvIAnKTtcXG4gICAgICAgICAgICB9LCBmb2xkbmFtZSxzaHNvcnQpLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiBzaHNvcnQgKyAnX2J1dHRvbicsXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgICAgIHRoaXMuY3JlYXRlUExpc3QodGFicyx2YXJpLHNoc29ydCxjdXN0b20pO1xcbiAgICB9LFxcbiAgICBzZXRUYWJzMjogZnVuY3Rpb24odGFicywgdmFyaSwgc2hzb3J0LHBhcnNlKSB7XFxuICAgICAgICBsZXQgY3VzdG9tPXBhcnNlLuiHquWumuS5iTtcXG4gICAgICAgIGN1c3RvbSA9dGhpcy5nZXRQcmVzZXQoY3VzdG9tKTtcXG4gICAgICAgIFxcbiAgICAgICAgc2hzb3J0ID0gc2hzb3J0ID8gc2hzb3J0IDogJ3Noc29ydCc7XFxuICAgICAgICB2YXIgdGl0bGUgPSAoZ2V0TXlWYXIoc2hzb3J0ICsgJ19zb3J0JywgJzAnKSA9PSAnMScpID8gJzxiPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjonK2N1c3RvbS7pgIbluo/popzoibIrJ1xcXCI+6YCG5bqPPC9zcGFuPjwvYj4nIDogJzxiPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjonK2N1c3RvbS7mraPluo/popzoibIrJ1xcXCI+5q2j5bqPPC9zcGFuPjwvYj4nXFxuICAgICAgXFxuICAgICAgICB2YXIg5oqY5Y+gID0gJzxiPuaKmOWPoCcgKyAn4pi3Jy5mb250Y29sb3IoXFxcIiNEM0QzRDNcXFwiKTtcXG4gICAgICAgIHZhciDlsZXlvIAgPSAnPGI+5bGV5byAJyArICfimLAnLmZvbnRjb2xvcihcXFwiI0ZGQTUwMFxcXCIpO1xcbiAgICAgICAgdmFyIGZvbGRuYW1lID0gJ2VyXycgKyB2YXJpICsgJ2ZvbGQnO1xcbiAgICAgICAgdmFyIGZvbGQgPSBnZXRNeVZhcihmb2xkbmFtZSwgJzEnKTtcXG5cXG4gICAgICAgIHZhciB1cmwgPSAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChmb2xkbmFtZSwgc2hzb3J0LHB1c2gpID0+IHtcXG4gICAgICAgICAgICB2YXIgcGwgPSBzdG9yYWdlMC5nZXRNeVZhcignZXJfcGxheWxpc3RzJywgJ3t9Jyk7XFxuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHBsKS5sZW5ndGggPT0gMSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIHZhciBmb2xkID0gZ2V0TXlWYXIoZm9sZG5hbWUsICcxJyk7XFxuICAgICAgICAgICAgdmFyIG9iaiA9IGZpbmRJdGVtKHNoc29ydCArICdfYXZhdGFyJylcXG4gICAgICAgICAgICBpZiAoZm9sZCA9PSAnMScpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGJjbHMgPSBmaW5kSXRlbShzaHNvcnQgKyAnX2J1dHRvbicpO1xcbiAgICAgICAgICAgICAgICB2YXIgdGNscyA9IGZpbmRJdGVtc0J5Q2xzKHNoc29ydCArICdfdGFiJyk7XFxuICAgICAgICAgICAgICAgIHZhciBsY2xzID0gZmluZEl0ZW0oc2hzb3J0ICsgJ19saW5lJyk7XFxuICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICB2YXIgcGNscyA9IGZpbmRJdGVtc0J5Q2xzKHNoc29ydCk7XFxuICAgICAgICAgICAgICAgIHZhciBjcyA9IFtiY2xzXS5jb25jYXQodGNscywgW2xjbHNdLCBwY2xzKTtcXG4gICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIGlmKHB1c2gpe1xcbiAgICAgICAgICAgICAgICAgIHZhciBwY2xzPWZpbmRJdGVtc0J5Q2xzKHNoc29ydCsnX3B1c2h0YWInKTtcXG4gICAgICAgICAgICAgICAgICBjcz1wY2xzLmNvbmNhdChjcyk7XFxuICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgdmFyIGN4ID0gJC5kYXRhQ29udmVydChjcyk7XFxuICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKHNoc29ydCArICdfY2xzJywgY3gpO1xcbiAgICAgICAgICAgICAgICBpZihwdXNoKXtcXG4gICAgICAgICAgICAgICAgICBkZWxldGVJdGVtQnlDbHMoc2hzb3J0KydfcHVzaHRhYicpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0oYmNscy5leHRyYS5pZCk7XFxuICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW1CeUNscyhzaHNvcnQgKyAnX3RhYicpO1xcbiAgICAgICAgICAgICAgICBkZWxldGVJdGVtKHNoc29ydCArICdfbGluZScpO1xcbiAgICAgICAgICAgICAgICBkZWxldGVJdGVtQnlDbHMoc2hzb3J0KTtcXG5cXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbShvYmouZXh0cmEuaWQsIHtcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IG9iai5kZXNjLnJlcGxhY2UoJ+WxleW8gDxmb250IGNvbG9yPVxcXCIjRkZBNTAwXFxcIj7imLAnLCAn5oqY5Y+gPGZvbnQgY29sb3I9XFxcIiNEM0QzRDNcXFwiPuKYtycpLFxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoZm9sZCA9PSAnMCcpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGNzID0gc3RvcmFnZTAuZ2V0TXlWYXIoc2hzb3J0ICsgJ19jbHMnKTtcXG4gICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKHNoc29ydCArICdfYXZhdGFyJywgY3MpO1xcbiAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKG9iai5leHRyYS5pZCwge1xcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogb2JqLmRlc2MucmVwbGFjZSgn5oqY5Y+gPGZvbnQgY29sb3I9XFxcIiNEM0QzRDNcXFwiPuKYtycsICflsZXlvIA8Zm9udCBjb2xvcj1cXFwiI0ZGQTUwMFxcXCI+4piwJyksXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHB1dE15VmFyKGZvbGRuYW1lLCBmb2xkID09PSAnMScgPyAnMCcgOiAnMScpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly8nICsgKGZvbGQgPT09ICcxJyA/ICfmlLbotbcnIDogJ+WxleW8gCcpO1xcbiAgICAgICAgfSwgZm9sZG5hbWUsIHNoc29ydCwocGFyc2VbJ+aOqOmAgSddP3RydWU6ZmFsc2UpKTtcXG4gICAgICAgIHZhciBkZXNjID0gKGZvbGQgPT09ICcwJyA/IOaKmOWPoCA6IOWxleW8gCkgKyAnXFxcXHQnO1xcblxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogdmFyaSArICc6XFxcXHRcXFxcdCcgKyAn5YWxJyArIFN0cmluZyh0YWJzLmxlbmd0aCkuZm9udGNvbG9yKCcjNDY4MkI0JykgKyAn5p2h57q/6LevJyxcXG4gICAgICAgICAgICBkZXNjOiBkZXNjLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG4gICAgICAgICAgICBpbWc6IGN1c3RvbS7lm77moIcsXFxuICAgICAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6IHNoc29ydCArICdfYXZhdGFyJyxcXG4gICAgICAgICAgICAgICAgbG9uZ0NsaWNrOnRoaXMuc2V0TG9uZ2NsaWNrKHNoc29ydCksXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgICAgIGlmKHR5cGVvZihwYXJzZVsn5o6o6YCBJ10pIT0ndW5kZWZpbmVkJyYmcGFyc2VbJ+aOqOmAgSddKVxcbiAgICAgICAgdGhpcy5wdXNoVGFiKCdlcl8nK3Zhcmksc2hzb3J0KTtcXG4gICAgICAgIFxcbiAgICAgICAgaWYgKGZvbGQgPT0gJzAnKSB7XFxuICAgICAgICAgICAgcmV0dXJuXFxuICAgICAgICB9XFxuXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdJyArIHRpdGxlLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodmFyaSwgc2hzb3J0LGN1c3RvbSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgY29uZiA9IGdldE15VmFyKHNoc29ydCArICdfc29ydCcsICcwJyk7XFxuICAgICAgICAgICAgICAgIHZhciBjbHNsaXN0cyA9IGZpbmRJdGVtc0J5Q2xzKHNoc29ydCk7XFxuICAgICAgICAgICAgICAgIHZhciBuZXdjbHNsaXN0ID0gJC5kYXRhQ29udmVydChjbHNsaXN0cyk7XFxuICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW1CeUNscyhzaHNvcnQpO1xcbiAgICAgICAgICAgICAgICBuZXdjbHNsaXN0LnJldmVyc2UoKTtcXG4gICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKHNoc29ydCArICdfbGluZScsIG5ld2Nsc2xpc3QpO1xcblxcbiAgICAgICAgICAgICAgICB2YXIgb2JqID0gZmluZEl0ZW0oc2hzb3J0ICsgJ19idXR0b24nKVxcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGVzPVtgJHtjdXN0b20u5q2j5bqP6aKc6ImyfVxcXCI+5q2j5bqPYCxgJHtjdXN0b20u6YCG5bqP6aKc6ImyfVxcXCI+6YCG5bqPYF07XFxuICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBpZiAoY29uZiA9PSAnMScpIHtcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oc2hzb3J0ICsgJ19idXR0b24nLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG9iai50aXRsZS5yZXBsYWNlKHRpdGxlc1sxXSwgdGl0bGVzWzBdKSxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihzaHNvcnQgKyAnX3NvcnQnLCAnMCcpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbShzaHNvcnQgKyAnX2J1dHRvbicsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogb2JqLnRpdGxlLnJlcGxhY2UodGl0bGVzWzBdLCB0aXRsZXNbMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHNoc29ydCArICdfc29ydCcsICcxJyk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy9yZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/liIfmjaLmjpLluo/miJDlip8nXFxuICAgICAgICAgICAgfSwgdmFyaSwgc2hzb3J0LGN1c3RvbSksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogc2hzb3J0ICsgJ19idXR0b24nLFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgICAgICB0aGlzLmNyZWF0ZVBMaXN0KHRhYnMsdmFyaSxzaHNvcnQsY3VzdG9tKTtcXG4gICAgfSxcXG4gICAgc2V0TGlzdHM6IGZ1bmN0aW9uKGxpc3RzLCBpbmRleCwgc2hzb3J0LHBhcnNlKSB7XFxuXFxuICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihzaHNvcnQgKyAnX2xpc3QnLCBsaXN0cyk7XFxuICAgICAgICBcXG4gICAgICAgIHBhcnNlPXBhcnNlP3BhcnNlOnt9O1xcbiAgICAgICAgdmFyIOagt+W8jz1wYXJzZS7moLflvI8/cGFyc2Uu5qC35byPOicnO1xcbiAgICAgICAgdmFyIOWbvuaghz1wYXJzZS7lm77moIc/cGFyc2Uu5Zu+5qCHOidodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21vdmllLzEzLnN2Zyc7XFxuICAgICAgICB2YXIgYWpheD1wYXJzZS5BamF4P3BhcnNlLkFqYXg6ZmFsc2U7XFxuXFxuICAgICAgICBzaHNvcnQgPSBzaHNvcnQgPyBzaHNvcnQgOiAnc2hzb3J0JztcXG5cXG4gICAgICAgIGlmKGFqYXgpe1xcbiAgICAgICAgICAgIHZhciBsaXN0ID0gbGlzdHM7XFxuICAgICAgICAgICAgaWYgKGdldE15VmFyKHNoc29ydCArICdfc29ydCcpID09ICcxJyAmJiBsaXN0cy5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgICAgIGxpc3QgPSBsaXN0cy5yZXZlcnNlKCk7XFxuICAgICAgICAgICB9XFxuICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICB2YXIgbGlzdCA9IGxpc3RzW2luZGV4XTtcXG4gICAgICAgICAgICBpZiAoZ2V0TXlWYXIoc2hzb3J0ICsgJ19zb3J0JykgPT0gJzEnICYmIGxpc3RzLmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICAgICAgbGlzdCA9IGxpc3RzW2luZGV4XS5yZXZlcnNlKCk7XFxuICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBcXG4gICAgICAgIGlmKOagt+W8jz09Jycpe1xcbiAgICAgICAgICDmoLflvI89bGlzdC5sZW5ndGggPiAzID8gJ3RleHRfNCcgOiAndGV4dF8yJ1xcbiAgICAgICAgfVxcbiAgICAgICAgXFxuICAgICAgICBpZihsaXN0Lmxlbmd0aCA+IDApe1xcbiAgICAgICAgdmFyIHBsaXN0ID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ2VyX3BsYXlsaXN0cycsICd7fScpO1xcbiAgICAgICAgaWYoIXBsaXN0Lmhhc093blByb3BlcnR5KHNoc29ydCkpe1xcbiAgICAgICAgICAgICBwbGlzdFtzaHNvcnRdPXt9O1xcbiAgICAgICAgfVxcbiAgICAgICAgcGxpc3Rbc2hzb3J0XVsnY2xzJ109c2hzb3J0O1xcbiAgICAgICAgcGxpc3Rbc2hzb3J0XVsnY29sX3R5cGUnXT3moLflvI87XFxuICAgICAgICBwbGlzdFtzaHNvcnRdWydwaWMnXT3lm77moIc7XFxuICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcignZXJfcGxheWxpc3RzJywgcGxpc3QpO1xcbiAgICAgICAgfSAgIFxcbiAgICAgICAgXFxuICAgICAgICBcXG4gICAgICAgIGZvciAodmFyIGogaW4gbGlzdCkge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0W2pdLnRpdGxlLFxcbiAgICAgICAgICAgICAgICB1cmw6IGxpc3Rbal0udXJsLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTog5qC35byPLFxcbiAgICAgICAgICAgICAgICBwaWM65Zu+5qCHLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGxpc3Rbal0udXJsLnJlcGxhY2UoL0BsYXp5UnVsZVtcXFxcc1xcXFxTXSsvZywgJycpLFxcbiAgICAgICAgICAgICAgICAgICAgY2xzOiBzaHNvcnQsXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgZ2V0VGFiczogZnVuY3Rpb24ocGFyc2UpIHtcXG4gICAgICAgIHZhciB0YWJzID0gW107XFxuICAgICAgICB2YXIgYXJ0cyA9IHBkZmEoaHRtbCwgcGFyc2Uu57q/6LevKTtcXG4gICAgICAgIHZhciDnur/ot6/lkI0gPSBwYXJzZS7nur/ot6/lkI3np7A7XFxuICAgICAgICB2YXIg5pu/5o2i5Ye95pWwID0gJyc7XFxuICAgICAgICBpZiAocGFyc2Uu57q/6Lev5ZCN56ewLmluY2x1ZGVzKCdAQCcpKSB7XFxuICAgICAgICAgICAg57q/6Lev5ZCNID0gcGFyc2Uu57q/6Lev5ZCN56ewLnNwbGl0KCdAQCcpWzBdO1xcbiAgICAgICAgICAgIOabv+aNouWHveaVsCA9IHBhcnNlLue6v+i3r+WQjeensC5zcGxpdCgnQEAnKVsxXTtcXG4gICAgICAgIH1cXG4gICAgICAgIGZvciAodmFyIGkgaW4gYXJ0cykge1xcbiAgICAgICAgICAgIHZhciBsaW5lbmFtZSA9IHBkZmgoYXJ0c1tpXSwg57q/6Lev5ZCNKTtcXG4gICAgICAgICAgICBpZiAo5pu/5o2i5Ye95pWwICE9ICcnKSB7XFxuICAgICAgICAgICAgICAgIGxpbmVuYW1lID0gZXZhbCgnbGluZW5hbWUnICsg5pu/5o2i5Ye95pWwKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdGFicy5wdXNoKGxpbmVuYW1lKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB0YWJzO1xcbiAgICB9LFxcbiAgICBnZXRMaXN0czogZnVuY3Rpb24ocGFyc2Usc2hzb3J0KSB7XFxuICAgICAgICBzaHNvcnQgPSBzaHNvcnQgPyBzaHNvcnQgOiAnc2hzb3J0JztcXG4gICAgICAgIHZhciBsaXN0cyA9IFtdO1xcbiAgICAgICAgdmFyIGNvbnRzID0gcGRmYShodG1sLCBwYXJzZS7pgInpm4YpO1xcbiAgICAgICAgdmFyIOmAiembhuWQjeensCA9IHBhcnNlLumAiembhuWQjeensCA/IHBhcnNlLumAiembhuWQjeensCA6ICdhJiZUZXh0JztcXG4gICAgICAgIHZhciDpgInpm4bpk77mjqUgPSBwYXJzZS7pgInpm4bpk77mjqUgPyBwYXJzZS7pgInpm4bpk77mjqUgOiAnYSYmaHJlZic7XFxuICAgICAgICB2YXIg6Kej5p6QID0gcGFyc2Uu6Kej5p6QID8gcGFyc2Uu6Kej5p6QIDogJyc7XFxuICAgICAgICB2YXIgdGVtcCA9IFtdO1xcbiAgICAgICAgZm9yICh2YXIgaSBpbiBjb250cykge1xcbiAgICAgICAgICAgIGlmIChwYXJzZS7pgInpm4bliJfooaggIT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgIGxpc3RzLnB1c2gocGRmYShjb250c1tpXSwgcGFyc2Uu6YCJ6ZuG5YiX6KGoKS5tYXAoeCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKHgsIOmAiembhuWQjeensClcXG4ucmVwbGFjZShcXFwi56ysXFxcIixcXFwiXFxcIilcXG4ucmVwbGFjZShcXFwi6ZuGXFxcIixcXFwiXFxcIilcXG4ucmVwbGFjZShcXFwi5pyfXFxcIixcXFwiXFxcIilcXG4ucmVwbGFjZShcXFwi6K+dXFxcIixcXFwiXFxcIilcXG4ucmVwbGFjZShcXFwi5pyA5pawXFxcIixcXFwiXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBwZCh4LCDpgInpm4bpk77mjqUpICsg6Kej5p6QLFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KSlcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gcGQoY29udHNbaV0sIOmAiembhumTvuaOpSk7XFxuICAgICAgICAgICAgICAgIGlmICgh6YCJ6ZuG6ZO+5o6lLmluY2x1ZGVzKCdocmVmJykpIHtcXG4gICAgICAgICAgICAgICAgICAgIHVybCA9IHBkZmgoY29udHNbaV0sIOmAiembhumTvuaOpSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdGVtcC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGNvbnRzW2ldLCDpgInpm4blkI3np7ApLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmwgKyDop6PmnpAsXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IOWAkuW6jyA9IHBhcnNlLuWAkuW6jyA/IHBhcnNlLuWAkuW6jyA6IGZhbHNlO1xcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBsaXN0cy5sZW5ndGggPyBsaXN0cyA6IFt0ZW1wXTtcXG4gICAgICAgIGlmICjlgJLluo8pIHtcXG4gICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5tYXAoeCA9PiB4LnJldmVyc2UoKSk7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgcGxpc3QgPSBzdG9yYWdlMC5nZXRNeVZhcignZXJfcGxheWxpc3RzJywgJ3t9Jyk7XFxuICAgICAgICBpZiAocmVzdWx0cy5zb21lKHggPT4geC5sZW5ndGggPiAwKSkge1xcbiAgICAgICAgICAgaWYoIXBsaXN0Lmhhc093blByb3BlcnR5KHNoc29ydCkpe1xcbiAgICAgICAgICAgICBwbGlzdFtzaHNvcnRdPXt9O1xcbiAgICAgICAgICAgfVxcbiAgICAgICAgICAgcGxpc3Rbc2hzb3J0XVsnbGVuZ3RoJ109cmVzdWx0cy5sZW5ndGg7XFxuICAgICAgICB9O1xcbiAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoJ2VyX3BsYXlsaXN0cycsIHBsaXN0KTtcXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xcbiAgICB9LFxcbiAgICBnZXRQbGF5ZXJzOiBmdW5jdGlvbihwYXJzZSwgbW9kZSxmdW5jKSB7XFxuICAgICAgICAvL2xvZyhtb2RlKVxcbiAgICAgICAgdmFyIHBsYXkgPSAnZXJfcGxheWxpc3RfJztcXG4gICAgICAgIHRoaXMucHJlTG9hZChmdW5jKTtcXG4gICAgICAgIHRoaXMuY2xvc2UocGFyc2UubWFwKHggPT4geC7nsbvlnospLCBwYXJzZS5sZW5ndGgpO1xcbiAgICAgICAgbW9kZSA9IG1vZGUgPyBtb2RlIDogMTtcXG4gICAgICAgIHBhcnNlLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXG4gICAgICAgICAgICB2YXIgdGFicyA9IFsn5Li757q/J107XFxuICAgICAgICAgICAgaWYgKGl0ZW0u57q/6LevICE9IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgICAgICB0YWJzID0gdGhpcy5nZXRUYWJzKGl0ZW0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBwdXRNeVZhcihwbGF5K2krJ190YWJzJyx0YWJzKTtcXG4gICAgICAgICAgICBpZihpdGVtLkFqYXgpe1xcbiAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYnModGFicywgaXRlbS7nsbvlnossIHBsYXkgKyBpLGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiczIodGFicywgaXRlbS7nsbvlnossIHBsYXkgKyBpLGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2VyX2h0bWwnLGh0bWwpO1xcbiAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2VyX3VybCcsTVlfVVJMKTtcXG5cXG4gICAgICAgICAgICAgICAgdmFyIGxpc3RzPWZ1bmMoZ2V0TXlWYXIoJ2VyXycraXRlbS7nsbvlnossJzAnKSxNWV9VUkwpO1xcbiAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgIHZhciBsaXN0cyA9IHRoaXMuZ2V0TGlzdHMoaXRlbSwgcGxheStpKTtcXG4gICAgICAgICAgICAvL2xvZyhsaXN0cylcXG4gICAgICAgICAgICBpZiAobGlzdHMuc29tZSh4ID0+IHgubGVuZ3RoID4gMCkpIHtcXG4gICAgICAgICAgICAgICAgaWYgKG1vZGUgPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJzKHRhYnMsIGl0ZW0u57G75Z6LLCBwbGF5ICsgaSxpdGVtKTtcXG4gICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYnMyKHRhYnMsIGl0ZW0u57G75Z6LLCBwbGF5ICsgaSxpdGVtKTtcXG4gICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoZ2V0TXlWYXIoJ2VyXycgKyBpdGVtLuexu+WeiyArICdmb2xkJywgJzEnKSA9PSAnMScpIHtcXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRMaXN0cyhsaXN0cywgZ2V0TXlWYXIoJ2VyXycraXRlbS7nsbvlnossICcwJyksIHBsYXkgKyBpLGl0ZW0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICB9XFxufVxcblxcblxcbmxldCBNZXRob2RzPXtcXG4gICAgLy/lpJrpgInmqKHlnZdcXG4gICAgTXVsdGlTZWxlY3RNb2RlOmZ1bmN0aW9uKG5hbWUsaWQsc2hzb3J0KXtcXG4gICAgICAgIHJldHVybiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChkYXRhdGl0bGUsIGRhdGF1cmwsc2hzb3J0KSA9PiB7XFxuICAgICAgICAgICAgZnVuY3Rpb24gdW5pcXVlKGFycikge1xcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IG5ldyBNYXAoKVxcbiAgICAgICAgICAgIHJldHVybiBhcnIuZmlsdGVyKChhKSA9PiAhcmVzLmhhcyhhLnVybCkgJiYgcmVzLnNldChhLnVybCwgMSkpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCBkdW9zZWxlY3QgPSBzdG9yYWdlMC5nZXRNeVZhcihzaHNvcnQrXFxcIl9kdW9zZWxlY3RcXFwiKSA/IHN0b3JhZ2UwLmdldE15VmFyKHNoc29ydCtcXFwiX2R1b3NlbGVjdFxcXCIpIDogW107XFxuICAgICAgICAgICAgaWYgKGR1b3NlbGVjdC5maW5kSW5kZXgoeCA9PiB4LnVybCA9PT0gZGF0YXVybCkgPT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgZHVvc2VsZWN0LnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGRhdGF0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogZGF0YXVybFxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICBkdW9zZWxlY3QgPSB1bmlxdWUoZHVvc2VsZWN0KVxcbiAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKGRhdGF1cmwsIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBg4oCc4oCc4oCd4oCdPHNwYW4gc3R5bGU9XFxcImNvbG9yOiNGRjU3MzNcXFwiPmAgKyBkYXRhdGl0bGUsXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlbW92ZUJ5VmFsdWUoYXJyLCB2YWwpIHtcXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFycltpXVsndXJsJ10gPT0gdmFsKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZW1vdmVCeVZhbHVlKGR1b3NlbGVjdCwgZGF0YXVybClcXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbShkYXRhdXJsLCB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogZGF0YXRpdGxlXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihzaHNvcnQrXFxcIl9kdW9zZWxlY3RcXFwiLCBkdW9zZWxlY3QpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgIH0sIG5hbWUsIGlkLCBzaHNvcnQpXFxuICAgIH0sXFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pO35LqM57qn5pCc57SiXCIsXCJwYXRoXCI6XCJ0b29sXCIsXCJydWxlXCI6XCIvL3ZhciB0aXRsZSA9IHBhcnNlRG9tRm9ySHRtbChodG1sLCDmkJzntKLmoIfnrb4pO1xcbnZhciB0aXRsZSA9IE1ZX1BBUkFNUy50aXRsZTtcXG5sb2codGl0bGUpXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48bWlkZGxlPjxmb250IGNvbG9yPVxcXCIjM0NCMzcxXFxcIj4g6Z2S6LGGPC9mb250PjwvbWlkZGxlPicsXFxuICAgIHBpY191cmw6ICdodHRwczovL2dpdGNvZGUubmV0L3FxXzQxODQ2NzU2L2hpa2VyLy0vcmF3L21hc3Rlci9pbWcv6Z2S6LGGLnBuZycsXFxuICAgIHVybDogJ2hpa2VyOi8vc2VhcmNoP3M9JyArIHRpdGxlICsgJyZydWxlPemdkuixhicsXFxuICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF80JyxcXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiPjxtaWRkbGU+PGZvbnQgY29sb3I9XFxcIiNGRjAwMDBcXFwiPiDogZrlvbHiiJo8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgcGljX3VybDogJ2h0dHBzOi8vaS5wb3N0aW1nLmNjLzlRMHJoYmYwL2ltYWdlLnBuZycsXFxuICAgIHVybDogJ2hpa2VyOi8vc2VhcmNoP3M9JyArIHRpdGxlICsgJyZydWxlPeiBmuW9seKImicsXFxuICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF80JyxcXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiPjxtaWRkbGU+PGZvbnQgY29sb3I9XFxcIiNGRjAwMDBcXFwiPiDogZrpmIXiiJo8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgcGljX3VybDogJ2h0dHBzOi8vczEuYXgxeC5jb20vMjAyMy8wNC8xNi9wOTlxYlIwLnBuZycsXFxuICAgIHVybDogJ2hpa2VyOi8vcGFnZS9zb3VzdW9wYWdlI25vUmVmcmVzaCMjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjP3J1bGU96IGa6ZiF4oiaJmtleXdvcmQ9Jyt0aXRsZSsnJnR5cGU95b2x6KeGJyxcXG4gICAgY29sX3R5cGU6ICdpY29uX3NtYWxsXzQnLFxcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiIzg3Q0VGQVxcXCI+IOS6keebmOWQmy7nroA8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgcGljX3VybDogJ2h0dHBzOi8vY2RuLWljb25zLXBuZy5mbGF0aWNvbi5jb20vMTI4Lzg5Mi84OTIzMDAucG5nJyxcXG4gICAgdXJsOiAnaGlrZXI6Ly9wYWdlL3NvdSNub1JlY29yZEhpc3RvcnkjI25vSGlzdG9yeSM/cnVsZT3kupHnm5jlkJsu566AJyxcXG4gICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgIHBhZ2VUaXRsZTogJ+aQnOe0oicrdGl0bGUsXFxuICAgICAgICAgICAgIHNlYXJjaFRlcm1zOiB0aXRsZVxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICBjb2xfdHlwZTogJ2ljb25fc21hbGxfNCcsXFxufSk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLikafnrZvpgInpobXpnaJcIixcInBhdGhcIjpcInNoYWlcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuY29uc3QgYmFzZV91cmwgPSAnaHR0cHM6Ly93d3cuZ3VndWZhbi5jb20vaW5kZXgucGhwL3ZvZC9zaG93L2lkLzYuaHRtbCc7XFxuXFxubGV0IHRydWVfdXJsID0gZ2V0TXlWYXIoTVlfUlVMRS51cmwsIGJhc2VfdXJsKTtcXG5jb25zdCBwYWdlID0gTVlfUEFHRTtcXG5NWV9VUkw9dHJ1ZV91cmw7XFxudmFyIGh0bWw9ZmV0Y2godHJ1ZV91cmwpXFxuLy9sb2coaHRtbClcXG5cXG52YXIgZ2V0UmFuZ2VDb2xvcnMgPSBmdW5jdGlvbigpIHvCoMKgwqDCoMKgwqDCoFxcbiAgICByZXR1cm4gJyMnICsgKCcwMDAwMCcgKyAoTWF0aC5yYW5kb20oKSAqIDB4MTAwMDAwMCA8PCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7wqDCoMKgwqDCoFxcbn1cXG4vL+WKqOaAgeWIhuexu+WumuS5iSBcXG5jb25zdCDliIbnsbvpopzoibIgPSBnZXRSYW5nZUNvbG9ycygpO1xcblxcbnZhciDlpKfnsbvlrprkvY0gPSB0eXBlb2Yo5aSn57G75a6a5L2NKSAhPSAndW5kZWZpbmVkJyA/IOWkp+exu+WumuS9jSA6ICcuZWMtY2FzYy1saXN0JiZ1bCwwOjEnO1xcbi8vbG9nKOWkp+exu+WumuS9jSlcXG52YXIg5aSn57G75qCH6aKYID0gdHlwZW9mKOWkp+exu+agh+mimCkgIT0gJ3VuZGVmaW5lZCcgPyDlpKfnsbvmoIfpopggOiAnYSYmVGV4dCc7XFxuY29uc3Qg5aSn57G76ZO+5o6lID0gJ2EmJmhyZWYnO1xcbnZhciDmi7zmjqXliIbnsbsgPSB0eXBlb2Yo5ou85o6l5YiG57G7KSAhPSAndW5kZWZpbmVkJyA/IOaLvOaOpeWIhuexuyA6ICdib2R5JiYubmF2LXN3aXBlcjpub3QoOmhhcyg6bWF0Y2hlcyjor63oqIB85Zyw5Yy6fOeJiOacrHzpopHpgZMpKSk6aGFzKGxpOm50aC1jaGlsZChuKzIpKSc7XFxuY29uc3Qg5bCP57G75a6a5L2NID0gJ2JvZHkmJmxpO2JvZHkmJmEnO1xcbmNvbnN0IOWIhuexu+agh+mimCA9ICdhJiZUZXh0JztcXG5jb25zdCDliIbnsbvpk77mjqUgPSAnbGkmJmRhdGEtdHlwZUBAQGxpJiZkYXRhLXZhbCc7XFxuY29uc3Qg5byA5ZCv5pCc57SiID0gdHJ1ZTtcXG5sZXQg5byA5ZCv5oqY5Y+gPSB0cnVlO1xcbmNvbnN0IOa4hemZpOmUriA9IFsnZHRfY2xhc3MnLCAnZHRfYXJlYScsICdkdF95ZWFyJywgJ2R0X2xhbmcnLCAnZHRfbGV0dGVyJywgJ2R0X3RpbWUnLCAnZHRfdmVyc2lvbicsICdkdF9zdGF0ZSddO1xcblxcbmNvbnN0IOmZhOWKoOWumuS9jSA9IFt7XFxuICAgIOS4gOe6p+WumuS9jTogJy5zaXRlLXRhYnMnLFxcbiAgICDlsI/nsbs6ICdib2R5JiZhJyxcXG4gICAg5qCH6aKYOiAnYSYmVGV4dCcsXFxuICAgIOmTvuaOpTogJ3RpbWVAQGEmJmRhdGEtdHlwZScsXFxuICAgIOi9rOaNojogdHJ1ZSxcXG59XVxcblxcbnZhciBodG1sID0gcmVxdWVzdCh0cnVlX3VybC5yZXBsYWNlKCdoaWtlcjovL2VtcHR5IyMnLCAnJykpXFxuaWYgKGh0bWwuaW5jbHVkZXMoJ+ezu+e7n+aPkOekuicpKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+ivpeWIhuexu+mcgOimgeeZu+W9lemqjOivgScsXFxuICAgICAgICBkZXNjOiAn6aqM6K+B5oiQ5Yqf5ZCO5Y2z5Y+v5p+l55yL5YiG57G7JyxcXG4gICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eScpLnJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHZhciBpdGVtcyA9IFtdO1xcbiAgICAgICAgICAgIHZhciBpbWdsaW4gPSAnaHR0cHM6Ly93d3cuZ3VndWZhbi5jb20vdmVyaWZ5L2luZGV4Lmh0bWw/cj0nICsgTWF0aC5yYW5kb20oKTtcXG4gICAgICAgICAgICAvL+WPluWbvueJh2Nvb2tpZVxcbiAgICAgICAgICAgIHZhciBjb2sgPSBKU09OLnBhcnNlKGZldGNoQ29va2llKGltZ2xpbiwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6IE1PQklMRV9VQVxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxcbiAgICAgICAgICAgICAgICB3aXRoSGVhZGVyczogdHJ1ZVxcbiAgICAgICAgICAgIH0pKS5qb2luKCc7Jyk7XFxuXFxuICAgICAgICAgICAgLy/mmL7npLrpqozor4HnoIFcXG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgcGljX3VybDogaW1nbGluICsgJ0BVc2VyLUFnZW50PScgKyBNT0JJTEVfVUEgKyAnQENvb2tpZT0nICsgY29rLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoJycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdwaWNfMV9mdWxsJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIC8v6L6T5YWl5qGGXFxuICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAnJyxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiJ3RvYXN0Oi8v5L2g6L6T5YWl55qE5pivJyArIGlucHV0XFxcIixcXG4gICAgICAgICAgICAgICAgZGVzYzogXFxcIui0puWPt1xcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogXFxcInB1dE15VmFyKCfotKblj7cnLGlucHV0KVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnaW5wdXQnXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAnJyxcXG4gICAgICAgICAgICAgICAgZGVzYzogXFxcIuWvhueggVxcXCIsXFxuICAgICAgICAgICAgICAgIHVybDogXFxcIid0b2FzdDovL+S9oOi+k+WFpeeahOaYrycgKyBpbnB1dFxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogXFxcInB1dE15VmFyKCflr4bnoIEnLGlucHV0KVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnaW5wdXQnXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAnJyxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiJ3RvYXN0Oi8v5L2g6L6T5YWl55qE5pivJyArIGlucHV0XFxcIixcXG4gICAgICAgICAgICAgICAgZGVzYzogXFxcIumqjOivgeeggVxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogXFxcInB1dE15VmFyKCflkpXlkpXpqozor4HnoIEnLGlucHV0KVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnaW5wdXQnXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn5Y+R6YCBJyxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKE1ZX1VSTCkubGF6eVJ1bGUoKGNvaykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvZCA9IGdldE15VmFyKCflkpXlkpXpqozor4HnoIEnKTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB1c2VybmFtZSA9IGdldE15VmFyKCfotKblj7cnKTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBwYXNzd2QgPSBnZXRNeVZhcign5a+G56CBJyk7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IEpTT04ucGFyc2UoZmV0Y2goJ2h0dHBzOi8vd3d3Lmd1Z3VmYW4uY29tL3VzZXIvbG9naW4uaHRtbCcsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdYLVJlcXVlc3RlZC1XaXRoJzogJ1hNTEh0dHBSZXF1ZXN0JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiBNT0JJTEVfVUEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb29raWUnOiBjb2tcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcXG4gICAgICAgICAgICAgICAgICAgIHVzZXJfbmFtZTogdXNlcm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICB1c2VyX3B3ZDogcGFzc3dkLFxcbiAgICAgICAgICAgICAgICAgICAgdmVyaWZ5OiBjb2RcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGh0bWwuY29kZSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnZmxjb29rJywgY29rKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/pqozor4HmiJDlip/jgIJcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGh0bWwuY29kZSA9PSAxMDAzKSAge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/pqozor4HlpLHotKUs6K+36L6T5YWl5q2j56Gu6LSm5Y+35a+G56CBXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYgKGh0bWwuY29kZSA9PSAxMDAyKSAge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/pqozor4HlpLHotKUs6aqM6K+B56CB6L6T5YWl5pyJ6K+vXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LCBjb2spLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMidcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBzZXRSZXN1bHQoaXRlbXMpO1xcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxuICAgIH0pO1xcbn1cXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL3lqJykpLnJ1bGUpO1xcblxcbnR5cGUgPSBwZGZoKGh0bWwsICcjZGF0YUxpc3QmJmRhdGEtdHlwZScpO1xcbnRpbWUgPSBcXFwiXFxcIiArIE1hdGguY2VpbChuZXcgRGF0ZSgpLmdldFRpbWUoKS8gMTAwMClcXG5rZXkgPSBtZDUoXFxcIkRTXFxcIiArIHRpbWUgKyBcXFwiRENDMTQ3RDExOTQzQUY3NVxcXCIpXFxuXFxuXFxu5pWw5o2uID0gSlNPTi5wYXJzZShwb3N0KFxcXCJodHRwczovL3d3dy5ndWd1ZmFuLmNvbS9pbmRleC5waHAvYXBpL3ZvZFxcXCIsIHtcXG4gICAgaGVhZGVyczoge1xcbiAgICAgICAgXFxcIlgtUmVxdWVzdGVkLVdpdGhcXFwiOiBcXFwiWE1MSHR0cFJlcXVlc3RcXFwiLFxcbiAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBcXFwiTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDEyOyAyMjAxMTIyQyBCdWlsZC9TS1ExLjIxMTAwNi4wMDE7IHd2KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzQuMCBDaHJvbWUvOTUuMC40NjM4Ljc0IE1vYmlsZSBTYWZhcmkvNTM3LjM2XFxcIlxcbiAgICB9LFxcbiAgICBib2R5OiB7XFxuICAgICAgICB0eXBlOiB0eXBlLFxcbiAgICAgICAgcGFnZTogcGFnZSxcXG4gICAgICAgIHRpbWU6IHRpbWUsXFxuICAgICAgICBrZXk6IGtleSxcXG4gICAgICAgIGNsYXNzOiBnZXRNeVZhcignY2xhc3MnLCAnJyksXFxuICAgICAgICBhcmVhOiBnZXRNeVZhcignYXJlYScsICcnKSxcXG4gICAgICAgIHllYXI6IGdldE15VmFyKCd5ZWFyJywgJycpLFxcbiAgICAgICAgbGFuZzogZ2V0TXlWYXIoJ2xhbmcnLCAnJyksXFxuICAgICAgICBsZXR0ZXI6Z2V0TXlWYXIoJ2xldHRlcicsJycpLFxcbiAgICB9XFxufSkpLmxpc3RcXG4vL2xvZyjmlbDmja4pO1xcbi8vZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9kdCcpKS5ydWxlKTtcXG5cXG5jb25zdCBsaXN0ID0g5pWw5o2uXFxuXFxubGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICB2YXIgdXJsbCA9IFxcXCJodHRwczovL3d3dy5ndWd1ZmFuLmNvbS9pbmRleC5waHAvdm9kL2RldGFpbC9pZC9cXFwiICsgaXRlbS52b2RfaWQgKycuaHRtbCcrICcjaW1tZXJzaXZlVGhlbWUjI2dhbWVUaGVtZSMnXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogaXRlbS52b2RfbmFtZSxcXG4gICAgICAgIGRlc2M6IGl0ZW0udm9kX3JlbWFya3MsXFxuICAgICAgICBpbWc6IGl0ZW0udm9kX3BpYy5yZXBsYWNlKC9tYWMvLFxcXCJodHRwc1xcXCIpKydAYWx0PScsXFxuICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvZWojbm9IaXN0b3J5IyNpbW1lcnNpdmVUaGVtZSMjZ2FtZVRoZW1lIycsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIHRpdGxlOiBpdGVtLnZvZF9uYW1lLFxcbiAgICAgICAgICAgIHVybDogdXJsbCxcXG4gICAgICAgICAgICBpbWc6IGl0ZW0udm9kX3BpYyxcXG4gICAgICAgIH0sXFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzNfbWFycXVlZScsXFxuICAgIH0pXFxufSlcXG5cXG5cXG5cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLikabnrZvpgInliIbnsbtcIixcInBhdGhcIjpcInlqXCIsXCJydWxlXCI6XCJqczpcXG4vKlxcblZlciAyMDIzLTYtMTggMS4wXFxu5aSH5rOo77ya5LiN6KaB55So5rW36ZiU5Luj56CB5qC85byP5YyWIOWGheWuueS8muWHuumUmVxcbuW/hemhu+WPguaVsO+8mlxcbuWIhuexu+minOiJsiDlpKfnsbvlrprkvY0gXFxu5bCP57G75a6a5L2NIOWIhuexu+agh+mimCDliIbnsbvpk77mjqVcXG5odG1sID0+5rqQ56CBIHBhZ2UgPT7pobXnoIFcXG7lj6/pgInlj4LmlbDvvJpcXG7mi7zmjqXliIbnsbsg5oqY5Y+g5qCH6K6wIOWxleW8gOagh+iusCDmjpLpmaRcXG7lpKfnsbvpk77mjqUg5aSn57G75qCH6aKYIOa4hemZpOmUriDlvIDlkK/mipjlj6BcXG7pmYTliqDlrprkvY1cXG7or7TmmI7vvJpcXG7lpJbpnaLnlKhnZXRNeVZhcihNWV9SVUxFLnVybCkg5oiW6ICFIOeKtuaAgSDlj5bpk77mjqVcXG7prZTmlLk6zrFcXG4qL1xcblxcbmxldCBlbXB0ecKgID0gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcclxcbmxldCBjYXRlZ29yaWVzID0gW107XFxyXFxuaWYgKHR5cGVvZijmi7zmjqXliIbnsbspICE9ICd1bmRlZmluZWQnICYmIOaLvOaOpeWIhuexu8KgIT0gJycpe1xcclxcbiAgICBjYXRlZ29yaWVzID0gW3BkZmEoaHRtbCwg5aSn57G75a6a5L2NKS5qb2luKCdcXFxcbicpXS5jb25jYXQocGRmYShodG1sLCDCoOaLvOaOpeWIhuexuykpO1xcbiAgICBpZih0eXBlb2Yo6ZmE5Yqg5a6a5L2NKSE9J3VuZGVmaW5lZCcgJiYg6ZmE5Yqg5a6a5L2NLmxlbmd0aD4wKXtcXG4gICAgICAgICAgICDpmYTliqDlrprkvY0uZm9yRWFjaCh4PT57XFxuICAgICAgdmFyIOS4gOe6pz1wZGZhKGh0bWwseC7kuIDnuqflrprkvY0pLm1hcChzPT57XFxuICAgICAgICAgIHZhciDlrprkvY09cGRmYShzLHgu5bCP57G7KS5tYXAocT0+e1xcbiAgICAgICAgICAgICAgdmFyIHRpdGxlPXBkZmgocSx4Luagh+mimCk7XFxuICAgICAgICAgICAgICB2YXIgdXJsPSdhJ1xcbiAgICAgICAgICAgICAgaWYoeC7pk77mjqUuaW5jbHVkZXMoJ0BAJykpeyAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgIHN0YXRlPXgu6ZO+5o6lLnNwbGl0KCdAQCcpWzBdXFxuICAgICAgICAgICAgICAgICAgdmFsdWU9cGRmaChxLHgu6ZO+5o6lLnNwbGl0KCdAQCcpWzFdKTtcXG4gICAgICAgICAgICAgICAgICBpZih4Lui9rOaNoj09dHJ1ZSl7XFxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgPGxpIGRhdGEtdHlwZT1cXFwiJHtzdGF0ZX1cXFwiIGRhdGEtdmFsPVxcXCIke3ZhbHVlfVxcXCI+PGEgaHJlZj1cXFwiXFxcIj4ke3RpdGxlfTwvYT48L2xpPmBcXG4gICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGA8YSB0eXBlPVxcXCJAZXh0cmFcXFwiIHN0YXRlPVxcXCIke3N0YXRlfVxcXCIgdmFsdWU9XFxcIiR7dmFsdWV9XFxcIj4ke3RpdGxlfTwvYT5gO1xcbiAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgIGhyZWY9cGQocSx4LumTvuaOpSk7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGA8YSBocmVmPVxcXCIke2hyZWZ9XFxcIj4ke3RpdGxlfTwvYT5gO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICB9KTtcXG4gICAgICAgICAgcmV0dXJuIOWumuS9jTtcXG4gICAgICAgIH0pO1xcbiAgICAgICBjYXRlZ29yaWVzLnB1c2go5LiA57qnLmpvaW4oJ1xcXFxuJykpO1xcbiAgICAgICAgICAgIH0pOyAgICAgICBcXG4gICAgfVxcclxcbn3CoGVsc2XCoHvCoMKgwqDCoMKgXFxyXFxuICAgIGNhdGVnb3JpZXMgPSBwZGZhKGh0bWwsIMKg5aSn57G75a6a5L2NKTtcXHJcXG59XFxyXFxubGV0wqBpbml0X2NhdGXCoD3CoG5ldyBBcnJheSgyMCkuZmlsbChcXFwiMFxcXCIpO1xcclxcbmNvbnN0wqBmb2xkwqA9wqBnZXRNeVZhcihNWV9SVUxFLmdyb3VwLMKgXFxcIjBcXFwiKTtcXHJcXG5jb25zdMKgY2F0ZV90ZW1wwqA9wqBKU09OLnBhcnNlKGdldE15VmFyKFxcXCJoZWFkLmNhdGVcXFwiLMKgSlNPTi5zdHJpbmdpZnkoaW5pdF9jYXRlKSkpO1xcbnZhciDmipjlj6DnirbmgIE9KHR5cGVvZijlvIDlkK/mipjlj6ApICE9ICd1bmRlZmluZWQnKT/lvIDlkK/mipjlj6A6dHJ1ZTtcXHJcXG52YXIg5oqY5Y+gPSh0eXBlb2Yo5oqY5Y+g5qCH6K6wKSAhPSAndW5kZWZpbmVkJyAmJiDmipjlj6DmoIforrDCoCE9ICcnKT/mipjlj6DmoIforrA6J+KAnOKAnOKAneKAnSfCoCvCoCfiiKgnLmZvbnRjb2xvcihcXFwiI0ZGMDAwMFxcXCIpO1xcbnZhciDlsZXlvIA9KHR5cGVvZijlsZXlvIDmoIforrApICE9ICd1bmRlZmluZWQnICYmIOWxleW8gOagh+iusMKgIT0gJycpP+WxleW8gOagh+iusDon4oCc4oCc4oCd4oCdJ8KgK8KgJ+KIpycuZm9udGNvbG9yKFxcXCIjMWFhZDE5XFxcIik7XFxudmFyIOa4hemZpD0odHlwZW9mKOa4hemZpOmUrikgIT0gJ3VuZGVmaW5lZCcgJiYg5riF6Zmk6ZSuwqAhPSAnJyk/5riF6Zmk6ZSuOltdO1xcbnZhciDnirbmgIE9KHR5cGVvZijnirbmgIHmoIforrApICE9ICd1bmRlZmluZWQnICYmIOeKtuaAgeagh+iusMKgIT0gJycpP+eKtuaAgeagh+iusDpNWV9SVUxFLnVybDtcXG52YXIg5aSn57G75aSE55CGPXR5cGVvZijkuIDnuqfliIbnsbvlpITnkIYpPT0nZnVuY3Rpb24nP3RydWU6ZmFsc2U7XFxudmFyIOaQnOe0oj10eXBlb2Yo5byA5ZCv5pCc57SiKSE9J3VuZGVmaW5lZCc/5byA5ZCv5pCc57SiOmZhbHNlO1xcbnZhciDlhajmuIU9KHR5cGVvZijlhajmuIXplK4pICE9ICd1bmRlZmluZWQnICYmIOWFqOa4hemUrsKgIT0gJycpP+WFqOa4hemUrjpbXTtcXG7lhajmuIUudW5zaGlmdCgneWlfZmlyc3RwYWdlJyk7XFxuXFxyXFxuaWbCoChwYXJzZUludChwYWdlKcKgPT09wqAxKcKge1xcbiAgICBpZijmkJzntKIpe1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwiXFxcIixcXG4gICAgICAgIHVybDogXFxcIidoaWtlcjovL3NlYXJjaD9ydWxlPVxcXCIgKyBNWV9SVUxFLnRpdGxlICsgXFxcIiZzPScraW5wdXRcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIuaQnOe0ouWFs+mUruivjVxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcigna2V5d29yZCcsICcnKSxcXG4gICAgICAgICAgICBvbkNoYW5nZTogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCdrZXl3b3JkJywgaW5wdXQpO1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgICAgfSlcXG4gICAgfVxcbiAgICBpZijmipjlj6DnirbmgIEpe1xcclxcbsKgwqDCoMKgIGQucHVzaCh7XFxyXFxuwqDCoMKgwqDCoMKgwqDCoHRpdGxlOsKgZm9sZMKgPT09wqAnMSfCoD/CoMKg5oqY5Y+gwqA6wqDlsZXlvIAsXFxyXFxuwqDCoMKgwqDCoMKgwqDCoHVybDrCoCQoKS5sYXp5UnVsZSgoZm9sZCx1LGFsbCnCoD0+wqB7XFxyXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHV0TXlWYXIoTVlfUlVMRS5ncm91cCzCoGZvbGTCoD09PcKgJzEnwqA/wqAnMCfCoDrCoCcxJyk7XFxuICAgICAgICAgICAgYWxsLmZvckVhY2goKGl0ZW0pPT57XFxuICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKVxcbiAgICAgICAgICAgIH0pXFxyXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcclxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybsKgXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcclxcbsKgwqDCoMKgwqDCoMKgwqB9LMKgZm9sZCznirbmgIEgLOWFqOa4hSksXFxyXFxuwqDCoMKgwqDCoMKgwqDCoGNvbF90eXBlOsKgJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgIGxvbmdDbGljazpbe1xcbiAgICAgICAgICAgICAgICB0aXRsZTon5riF6Zmk54q25oCBJyxcXG4gICAgICAgICAgICAgICAganM6JC50b1N0cmluZygoeCxhbGwsY2wpPT57XFxuICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcih4KTtcXG4gICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdoZWFkLmNhdGUnKTsgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgICBhbGwuZm9yRWFjaCgoaXRlbSk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKVxcbiAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICAgY2wuZm9yRWFjaCgoaXRlbSk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKVxcbiAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgfSznirbmgIEs5YWo5riFLOa4hemZpClcXG4gICAgICAgICAgICB9XVxcbiAgICAgICAgfVxcclxcbsKgwqDCoCDCoH0pXFxuICAgIH1cXHJcXG4gICAgbGV0IHNldFRpdGxlPShrLGksdCk9PnsgICAgICAgICAgICAgXFxuICAgICAgcmV0dXJuIGs9PWk/XFxcIuKAnOKAnOKAneKAnVxcXCLCoCt0LmZvbnRjb2xvcijliIbnsbvpopzoibIpOnRcXHJcXG4gICAgfVxcclxcbsKgwqDCoMKgY2F0ZWdvcmllcy5mb3JFYWNoKChjYXRlZ29yeSzCoGluZGV4KcKgPT7CoHtcXG4gICAgICAgIGxldMKgc3ViX2NhdGVnb3JpZXM9W107XFxuICAgICAgICBpZijlsI/nsbvlrprkvY0uaW5jbHVkZXMoJzsnKSl7XFxuICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXPCoD3CoHBkZmEoY2F0ZWdvcnkswqDlsI/nsbvlrprkvY0uc3BsaXQoJzsnKVswXSk7XFxuICAgICAgICAgICAgaWYoc3ViX2NhdGVnb3JpZXMubGVuZ3RoPT0wKXtcXG4gICAgICAgICAgICBzdWJfY2F0ZWdvcmllc8KgPcKgcGRmYShjYXRlZ29yeSzCoOWwj+exu+WumuS9jS5zcGxpdCgnOycpWzFdKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9ZWxzZXtcXHJcXG7CoMKgwqDCoMKgwqDCoMKgc3ViX2NhdGVnb3JpZXPCoD3CoHBkZmEoY2F0ZWdvcnkswqDlsI/nsbvlrprkvY0pO1xcbiAgICAgICAgfVxcclxcbsKgwqDCoMKgwqDCoMKgwqBpZsKgKGluZGV4wqA9PT3CoDApwqB7XFxyXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3ViX2NhdGVnb3JpZXMuZm9yRWFjaCgoaXRlbSzCoGtleSnCoD0+wqB7XFxuICAgICAgICAgICAgICAgIGxldCBf5aSn57G76ZO+5o6lPSh0eXBlb2Yo5aSn57G76ZO+5o6lKSAhPSAndW5kZWZpbmVkJyAmJiDlpKfnsbvpk77mjqXCoCE9ICcnKT/lpKfnsbvpk77mjqU65YiG57G76ZO+5o6lO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICBcXHJcXG4gICAgICAgICAgICAgICAgbGV0IF/lpKfnsbvmoIfpopg9KHR5cGVvZijlpKfnsbvmoIfpopgpICE9ICd1bmRlZmluZWQnICYmIOWkp+exu+agh+mimMKgIT0gJycpP+Wkp+exu+agh+mimDrliIbnsbvmoIfpopg7ICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICBcXHJcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxldMKgdGl0bGXCoD3CoHBkZmgoaXRlbSzCoF/lpKfnsbvmoIfpopgpO1xcclxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWbCoCh0eXBlb2Yo5o6S6ZmkKcKgIT3CoCd1bmRlZmluZWQnwqAmJsKg5o6S6ZmkwqAhPcKgJycpwqB7XFxyXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRpdGxlwqA9wqB0aXRsZS5yZXBsYWNlKG5ld8KgUmVnRXhwKOaOkumZpCzCoFxcXCJnXFxcIikswqBcXFwiXFxcIik7XFxyXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9XFxuICAgICAgICAgICAgICAgIGxldCBwYXJhbXM9e1xcclxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNhdGVfdGVtcDrCoGNhdGVfdGVtcCxrZXk6wqBrZXkscGFnZTrCoHBhZ2UsY2xlYXJzOua4hemZpCxzdGF0ZTrnirbmgIEsYWxsY2xlYXJzOuWFqOa4hVxcclxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIGxldCB1cmw9cGQoaXRlbSzCoF/lpKfnsbvpk77mjqUpO1xcbiAgICAgICAgICAgICAgICBpZijlpKfnsbvlpITnkIYpe1xcbiAgICAgICAgICAgICAgICAgICAgdXJsPeS4gOe6p+WIhuexu+WkhOeQhih1cmwpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy9sb2codXJsKVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZC5wdXNoKHsgIFxcclxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0aXRsZTrCoHNldFRpdGxlKGtleS50b1N0cmluZygpLGNhdGVfdGVtcFtpbmRleF0sdGl0bGUpLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6wqAnc2Nyb2xsX2J1dHRvbicsXFxyXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVybDrCoCQodXJswqArwqAnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgocGFyYW1zKcKgPT7CoHsgICAgXFxyXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGV0wqBuZXdfY2F0ZcKgPcKgW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmNsZWFycy5mb3JFYWNoKChpdGVtKT0+eyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmFsbGNsZWFycy5mb3JFYWNoKChpdGVtKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGl0ZW0pXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXHJcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYXJhbXMuY2F0ZV90ZW1wLmZvckVhY2goKGNhdGUswqBpbmRleCnCoD0+wqB7XFxyXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBuZXdfY2F0ZS5wdXNoKGluZGV4wqA9PT3CoDDCoD/CoHBhcmFtcy5rZXkudG9TdHJpbmcoKcKgOsKgXFxcIjBcXFwiKVxcclxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0pXFxyXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHV0TXlWYXIoXFxcImhlYWQuY2F0ZVxcXCIswqBKU09OLnN0cmluZ2lmeShuZXdfY2F0ZSkpO1xcclxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHB1dE15VmFyKHBhcmFtcy5zdGF0ZSzCoGlucHV0KTtcXHJcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWZyZXNoUGFnZSh0cnVlKTtcXHJcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm7CoFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXHJcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSxwYXJhbXMpXFxyXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9KTtcXHJcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9KTtcXHJcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkLnB1c2goe1xcclxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29sX3R5cGU6wqBcXFwiYmxhbmtfYmxvY2tcXFwiLFxcclxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0pXFxyXFxuwqDCoMKgwqDCoMKgwqDCoH3CoGVsc2XCoGlmwqAoZm9sZMKgPT09wqAnMSd8fOaKmOWPoOeKtuaAgT09ZmFsc2UpwqB7XFxyXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3ViX2NhdGVnb3JpZXMuZm9yRWFjaCgoaXRlbSzCoGtleSnCoD0+wqB7XFxuICAgICAgICAgICAgICAgIHZhciBleHRyYXBvcz1mYWxzZTtcXG4gICAgICAgICAgICAgICAgaWYoaXRlbS5pbmNsdWRlcygndHlwZT1cXFwiQGV4dHJhXFxcIicpKXtcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhcG9zPXRydWU7XFxuICAgICAgICAgICAgICAgICAgICAvL2xvZygn6ZmE5Yqg5a6a5L2NJylcXG4gICAgICAgICAgICAgICAgfSAgIFxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgaWYoZXh0cmFwb3Mpe1xcbiAgICAgICAgICAgICAgICAgICB2YXLCoHRpdGxlwqA9wqBwZGZoKGl0ZW0swqAnYSYmVGV4dCcpO1xcclxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWbCoCh0eXBlb2Yo5o6S6ZmkKcKgIT3CoCd1bmRlZmluZWQnwqAmJsKg5o6S6ZmkwqAhPcKgJycpwqB7XFxyXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRpdGxlwqA9wqB0aXRsZS5yZXBsYWNlKG5ld8KgUmVnRXhwKOaOkumZpCzCoFxcXCJnXFxcIikswqBcXFwiXFxcIik7XFxyXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICDCoH1cXG4gICAgICAgICAgICAgICAgdmFyIGpzb249e1xcbiAgICAgICAgICAgICAgICAgICAgdHlwZTpwZGZoKGl0ZW0sJ2EmJnN0YXRlJyksXFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTpwZGZoKGl0ZW0sJ2EmJnZhbHVlJyksXFxuICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgXFxyXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICAgIMKgdmFywqB0aXRsZcKgPcKgcGRmaChpdGVtLMKg5YiG57G75qCH6aKYKTtcXHJcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmwqAodHlwZW9mKOaOkumZpCnCoCE9wqAndW5kZWZpbmVkJ8KgJibCoOaOkumZpMKgIT3CoCcnKcKge1xcclxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0aXRsZcKgPcKgdGl0bGUucmVwbGFjZShuZXfCoFJlZ0V4cCjmjpLpmaQswqBcXFwiZ1xcXCIpLMKgXFxcIlxcXCIpO1xcclxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfVxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgdmFyIGpzb249Jyc7XFxuICAgICAgICAgICAgICAgIHN3aXRjaCAodHJ1ZSl7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIOWIhuexu+mTvuaOpS5pbmNsdWRlcygnQEBAJyk6XFxuICAgICAgICAgICAgICAgICAgICBqc29uPXtcXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6cGRmaChpdGVtLOWIhuexu+mTvuaOpS5zcGxpdCgnQEBAJylbMF0pLFxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6cGRmaChpdGVtLOWIhuexu+mTvuaOpS5zcGxpdCgnQEBAJylbMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIOWIhuexu+mTvuaOpS5pbmNsdWRlcygnQEAnKTpcXG4gICAgICAgICAgICAgICAgICAgIGpzb249e1xcbiAgICAgICAgICAgICAgICAgICAgdHlwZTrliIbnsbvpk77mjqUuc3BsaXQoJ0BAJylbMF0sXFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTpwZGZoKGl0ZW0s5YiG57G76ZO+5o6lLnNwbGl0KCdAQCcpWzFdKSxcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgICAgIGpzb249cGQoaXRlbSzliIbnsbvpk77mjqUpO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAvKnZhciBqc29uPeWIhuexu+mTvuaOpS5pbmNsdWRlcygnQEBAJyk/e1xcbiAgICAgICAgICAgICAgICAgICAgdHlwZTpwZGZoKGl0ZW0s5YiG57G76ZO+5o6lLnNwbGl0KCdAQEAnKVswXSksXFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTpwZGZoKGl0ZW0s5YiG57G76ZO+5o6lLnNwbGl0KCdAQEAnKVsxXSksXFxuICAgICAgICAgICAgICAgIH06cGQoaXRlbSzliIbnsbvpk77mjqUpO1xcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAganNvbj3liIbnsbvpk77mjqUuaW5jbHVkZXMoJ0BAJyk/e1xcbiAgICAgICAgICAgICAgICAgICAgdHlwZTrliIbnsbvpk77mjqUuc3BsaXQoJ0BAJylbMF0sXFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTpwZGZoKGl0ZW0s5YiG57G76ZO+5o6lLnNwbGl0KCdAQCcpWzFdKSxcXG4gICAgICAgICAgICAgICAgfTpwZChpdGVtLOWIhuexu+mTvuaOpSk7Ki9cXG4gICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgbGV0IHBhcmFtcz3CoHtcXHJcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2F0ZV90ZW1wOsKgY2F0ZV90ZW1wLGluZGV4OsKgaW5kZXgsa2V5OsKga2V5LMKgcGFnZTrCoHBhZ2UsanNvbjpqc29uLHN0YXRlOueKtuaAgSxhbGxjbGVhcnM65YWo5riFXFxyXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9XFxyXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkLnB1c2goe1xcclxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0aXRsZTrCoHNldFRpdGxlKGtleS50b1N0cmluZygpLGNhdGVfdGVtcFtpbmRleF0sdGl0bGUpLFxcclxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1cmw6wqAkKCdoaWtlcjovL2VtcHR5J8KgK8KgJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHBhcmFtcynCoD0+wqB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmFsbGNsZWFycy5mb3JFYWNoKChpdGVtKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGl0ZW0pXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXHJcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYXJhbXMuY2F0ZV90ZW1wW3BhcmFtcy5pbmRleF3CoD3CoHBhcmFtcy5rZXkudG9TdHJpbmcoKTtcXHJcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwdXRNeVZhcihcXFwiaGVhZC5jYXRlXFxcIizCoEpTT04uc3RyaW5naWZ5KHBhcmFtcy5jYXRlX3RlbXApKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihwYXJhbXMuanNvbi5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2R0XycrcGFyYW1zLmpzb24udHlwZSxwYXJhbXMuanNvbi52YWx1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHBhcmFtcy5zdGF0ZSzCoHBhcmFtcy5qc29uKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9wqDCoMKgXFxyXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxyXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuwqBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxyXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0scGFyYW1zKSxcXHJcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29sX3R5cGU6wqAnc2Nyb2xsX2J1dHRvbicsXFxyXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9KTtcXHJcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9KTtcXHJcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkLnB1c2goe1xcclxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29sX3R5cGU6wqBcXFwiYmxhbmtfYmxvY2tcXFwiLFxcclxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0pO1xcclxcbsKgwqDCoMKgwqDCoMKgwqB9XFxyXFxuwqDCoMKgwqB9KVxcclxcbn1cXG5cXG5cXG5cXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzJcIixcIm5hbWVcIjpcIuS4k+mimFwiLFwicGF0aFwiOlwidG9waWNcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkPVtdO1xcbk1ZX1VSTCA9IE1ZX1VSTC5zcGxpdCgnIyMnKVsxXVxcbnZhciBodG1sPXJlcXVlc3QoTVlfVVJMKTtcXG52YXIgbGlzdD1wZGZhKGh0bWwsXFxcImJvZHkmJi5wdWJsaWMtbGlzdC1ib3hcXFwiKVxcbmZvcih2YXIgaXQgb2YgbGlzdCl7XFxuIGQucHVzaCh7XFxuICB0aXRsZTogcGRmaChpdCxcXFwiaDEmJlRleHRcXFwiKSxcXG4gZGVzYzogcGRmaChpdCxcXFwicCYmVGV4dFxcXCIpLFxcbiBpbWc6IHBkKGl0LCcubWFzay0xJiZkYXRhLXNyYycpLFxcbiB1cmw6IHBkKGl0LCAnYSYmaHJlZicpKycjaW1tZXJzaXZlVGhlbWUjI2dhbWVUaGVtZSNAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS91cGRhdGVcXFwiKScsXFxuZXh0cmE6IHtpbWc6IHBkKGl0LCcubWFzay0xJiZkYXRhLXNyYycpLFxcbiAgICAgICAgZGVzYzogcGRmaChpdCxcXFwicCYmVGV4dFxcXCIpLFxcbiAgICAgICAgdXJsOiBwZChpdCwgJ2EmJmhyZWYnKVxcbn0sXFxuIGNvbF90eXBlOlxcXCJwaWNfMV9jYXJkXFxcIlxcbiB9KVxcbn1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzJcIixcIm5hbWVcIjpcIuS4k+mimOWIl+ihqFwiLFwicGF0aFwiOlwidXBkYXRlXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbk1ZX1VSTCA9IE1ZX1BBUkFNUy51cmw7XFxudmFyIGh0bWwgPSBmZXRjaChNWV9VUkwpO1xcbnZhciBwaWMgPSBNWV9QQVJBTVMuaW1nID8gTVlfUEFSQU1TLmltZzpwZChodG1sLCBcXFwiLmxhenkmJmRhdGEtc3JjXFxcIik7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IHBkZmgoaHRtbCxcXFwiLmZvY3VzLWluZm8tdGl0bGUmJlRleHRcXFwiKSxcXG4gICAgLy9kZXNjOiBwZGZoKGh0bWwsXFxcIi5zbGlkZS1pbmZvLXJlbWFya3MmJlRleHRcXFwiKSxcXG4gICAgcGljX3VybDogcGljLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyXFxcIixcXG5leHRyYToge1xcbiAgICAgICAgZ3JhZGllbnQ6IHRydWVcXG4gICAgfVxcbn0pO1xcbnZhciBpbnRyb2R1Y2UgPSBwZGZoKGh0bWwsIFxcXCIudG9waWNfY29udGVudCYmVGV4dFxcXCIpO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBpbnRyb2R1Y2Uuc2xpY2UoMCwgNjYpICsgKGludHJvZHVjZS5sZW5ndGggPCA2MCA/IFxcXCJcXFwiIDogXFxcIi4uLiDor6bnu4ZcXFwiLmxpbmsoXFxcImhpa2VyOi8vcGFnZS9pbnRyb2R1Y2Ujbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjI2dhbWVUaGVtZSNcXFwiKSksXFxuICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGludHJvZHVjZTogaW50cm9kdWNlLFxcbiAgICB9XFxufSk7XFxuZC5wdXNoKHtcXG4gICAgICAgICB0aXRsZTogcGRmaChodG1sLCBcXFwiLnRpdGxlLWgmJlRleHRcXFwiKSwgXFxuICAgICAgICAgZGVzYzogcGRmaChodG1sLCBcXFwiLnNsaWRlLWluZm8tcmVtYXJrcyYmVGV4dFxcXCIpLCBcXG4gICAgICAgICBpbWc6IHBpYywgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsIFxcbiAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG59KTtcXG5wZGZhKGdldFJlc0NvZGUoKSwgJ2JvZHkmJi5wdWJsaWMtbGlzdC1ib3gnKS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XFxuICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHBkZmgoZGF0YSwgJ2EmJnRpdGxlJyksXFxuICAgICAgICBkZXNjOiBwZGZoKGRhdGEsICcucHVibGljLWxpc3QtcHJiJiZUZXh0JyksXFxuICAgICAgICBpbWc6IHBkZmgoZGF0YSwgJy5tYXNrLTEmJmRhdGEtc3JjJyksXFxuICAgICAgICB1cmw6IHBkKGRhdGEsICdhJiZocmVmJykrJyNpbW1lcnNpdmVUaGVtZSMjZ2FtZVRoZW1lIycrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2VqXFxcIiknLFxcbmV4dHJhOiB7XFxuICAgICAgICBpbWc6IHBkKGRhdGEsJy5tYXNrLTEmJmRhdGEtc3JjJyksXFxuICAgICAgICB0aXRsZTogcGRmaChkYXRhLFxcXCJhJiZ0aXRsZVxcXCIpLFxcbiAgICAgICAgdXJsOiBwZChkYXRhLCAnYSYmaHJlZicpXFxufSxcXG4gICAgICAgY29sX3R5cGU6IFxcXCJtb3ZpZV8zX21hcnF1ZWVcXFwiXFxuICAgIH0pXFxufSlcXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogXFxcImJpZ19iaWdfYmxhbmtfYmxvY2tcXFwiXFxufSk7XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmjpLooYzmppxcIixcInBhdGhcIjpcInJhbmtcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuY29uc3QgYmFzZV91cmwgPSAnaHR0cHM6Ly93d3cuZ3VndWZhbi5jb20vaW5kZXgucGhwL2xhYmVsL3JhbmsuaHRtbCc7XFxuXFxubGV0IHRydWVfdXJsID0gZ2V0TXlWYXIoTVlfUlVMRS51cmwsIGJhc2VfdXJsKTtcXG5NWV9VUkw9dHJ1ZV91cmw7XFxudmFyIGh0bWw9ZmV0Y2godHJ1ZV91cmwpXFxubG9nKGh0bWwpXFxuXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6JzxiPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjogI0ZBNzI5OFxcXCI+54Ot5pig5o6S6KGMXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFzwn4y48J+MuPCfjLjwn4y48J+MuDwvc3Bhbj48L2I+JyxcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgIHBpY191cmw6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL2tlLzYzLnBuZycgKyBcXFwiQGFsdD1cXFwiLFxcbiAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCJcXG59KTtcXG5cXG5jb25zdCBsaXN0ID0gcGRmYShodG1sLCAnYm9keSYmLnZvZC1yYW5rLXZvZCcpO1xcbmxpc3QuZm9yRWFjaChpdGVtID0+IHsgIFxcbnZhciB1cmxsID1wZChpdGVtLCAnYSYmaHJlZicpICsgJyNpbW1lcnNpdmVUaGVtZSMjZ2FtZVRoZW1lIyc7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogcGRmaChpdGVtLCAnLnZvZC1yYW5rLXRpdGxlJiZUZXh0JykrJ1xcXFxuJysgcGRmaChpdGVtLCAnLnZvZC1yYW5rLXN0YXRlJiZUZXh0JyksXFxuICAgICAgICBkZXNjOiBwZGZoKGl0ZW0sICcudm9kLXJhbmstZXhwbGFpbiYmVGV4dCcpLFxcbiAgICAgICAgaW1nOiBwZGZoKGl0ZW0sICcubWFzay0xJiZkYXRhLXNyYycpICsgXFxcIkBhbHQ9XFxcIixcXG4gICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9laiNub0hpc3RvcnkjI2ltbWVyc2l2ZVRoZW1lIyNnYW1lVGhlbWUjJyxcXG4gICAgICAgIGV4dHJhOiB7dXJsOiB1cmxsfSxcXG4gICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuICAgIH0pXFxufSlcXG5cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmjpLooYzmtYvor5VcIixcInBhdGhcIjpcInJhbmszXCIsXCJydWxlXCI6XCJqczpcXG5cXG52YXIgZCA9IFtdO1xcbmNvbnN0IGJhc2VfdXJsID1cXG4naHR0cHM6Ly93d3cuZ3VndWZhbi5jb20vaW5kZXgucGhwL2xhYmVsL3JhbmsuaHRtbCc7XFxuXFxubGV0IHRydWVfdXJsID0gZ2V0TXlWYXIoTVlfUlVMRS51cmwsIGJhc2VfdXJsKTtcXG5NWV9VUkw9dHJ1ZV91cmw7XFxudmFyIGh0bWw9ZmV0Y2godHJ1ZV91cmwpXFxuXFxuZnVuY3Rpb24gcmFua0FkZChkLCBodG1sLCBvYmopIHtcXG4gICAgdmFyIG5hbWUgPSBvYmoubmFtZVxcbiAgICB2YXIgdGl0bGUgPSBvYmoudGl0bGVcXG4gICAgdmFyIGltZyA9IG9iai5pbWdcXG4gICAgdmFyIHVybCA9IG9iai51cmxcXG4gICAgdmFyIHNlbGVzID0gb2JqLnNlbGVzXFxuICAgIHNlbGVzLmxpc3QgPSBvYmoubmxpc3RcXG4gICAgc2VsZXMudGl0bGUgPSBvYmoubnRpdGxlXFxuICAgIHNlbGVzLmRlc2MgPSBvYmoubmRlc2NcXG5cXG5cXG4gICAgdmFyIGxpc3QgPSBldmFsKHNlbGVzLmxpc3QpXFxuXFxuICAgIGxpc3QubWFwKChpdGVtLCBpKSA9PiB7XFxuICAgICAgICBpID0gaSArIDFcXG4gICAgICAgIHZhciBzdGl0bGUgPSBldmFsKHNlbGVzLnRpdGxlKVxcbiAgICAgICAgdmFyIGRlPSAnJ1xcbiAgICAgICAgaWYgKHNlbGVzLmRlc2MgIT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgZGUgPSBldmFsKHNlbGVzLmRlc2MpXFxuICAgICAgICAgICAgZGVzYyA9IGRlICE9ICcnID8gYDxmb250IGNvbG9yPVxcXCIjODA4MDgwXFxcIj5bJHtkZX1dPC9mb250PmAgOiAnJ1xcbiAgICAgICAgfVxcblxcblxcbiAgICAgICAgdmFyIHRpdGxlID0gaSArICcuJyArIGV2YWwoc2VsZXMudGl0bGUpXFxuXFxuXFxuICAgICAgICBzd2l0Y2ggKGkpIHtcXG4gICAgICAgICAgICBjYXNlIDE6XFxuICAgICAgICAgICAgICAgIHRpdGxlID0gYOKAnOKAnOKAneKAnTxzbWFsbD48Zm9udCBjb2xvcj1cXFwiI2ZmM2Q1ZVxcXCI+JHt0aXRsZX08L2ZvbnQ+ICR7ZGVzY308L3NtYWxsPmBcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSAyOlxcbiAgICAgICAgICAgICAgICB0aXRsZSA9IGDigJzigJzigJ3igJ08c21hbGw+PGZvbnQgY29sb3I9XFxcIiNmMzcwMDBcXFwiPiR7dGl0bGV9PC9mb250PiAke2Rlc2N9PC9zbWFsbD5gXFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgMzpcXG4gICAgICAgICAgICAgICAgdGl0bGUgPSBg4oCc4oCc4oCd4oCdPHNtYWxsPjxmb250IGNvbG9yPVxcXCIjZmZhODJlXFxcIj4ke3RpdGxlfTwvZm9udD4gJHtkZXNjfTwvc21hbGw+YFxcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICB0aXRsZSA9IGDigJzigJzigJ3igJ08c21hbGw+PGZvbnQgY29sb3I9XFxcIlxcXCI+JHt0aXRsZX08L2ZvbnQ+ICR7ZGVzY308L3NtYWxsPmBcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBgJHt0aXRsZX1gLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBzZWxlcy5jb2xfdHlwZSxcXG4gICAgICAgICAgICBpbWc6IGV2YWwoc2VsZXMuaW1nKStcXFwiQGFsdD1cXFwiLCBcXG4gICAgICAgICAgICBkZXNjOiBldmFsKHNlbGVzLmQyKSxcXG4gICAgICAgICAgICB1cmw6IGV2YWwoc2VsZXMudXJsKSArICcjaW1tZXJzaXZlVGhlbWUjI2dhbWVUaGVtZSMnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9lalxcXCIpJyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogc3RpdGxlLFxcbiAgICAgICAgICAgICAgICBzdGF0ZTpkZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH0pXFxufVxcblxcbnZhciBJY29uX3ByZWZpeCA9ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL3JlZC8nO1xcblxcbnZhciBjYXRlZ29yeV9JY29uID0gWycxMS5wbmcnLCAnMzkucG5nJywgJzIzLnBuZycsJzU0LnBuZyddO1xcblxcbnZhciByYW5rcyA9IFsn6L+e6L295paw55WqJywgJ+WujOe7k+WKqOeUuycsICfliqjmvKvnlLXlvbEnLCAn54m55pGE5Yqo55S7J11cXG5cXG52YXIgcmluZGV4ID0gZ2V0TXlWYXIoJ3JpbmRleCcsICcwJylcXG5cXG5yYW5rcy5tYXAoKHgsIGkpID0+IHtcXG4gICAgdmFyIHRpdGxlID0gaSA9PSByaW5kZXggPyBg4oCc4oCc4oCd4oCdPHNtYWxsPjxiPjxmb250IGNvbG9yPVxcXCIjMUU5MEZGXFxcIj4ke3h9PC9mb250PjwvYj48L3NtYWxsPmAgOiBg4oCc4oCc4oCd4oCdPHNtYWxsPiR7eH08L3NtYWxsPmBcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF80JyxcXG4gICAgICAgIGltZzpJY29uX3ByZWZpeCArIGNhdGVnb3J5X0ljb25baV0sXFxuICAgICAgICB1cmw6ICQoJycpLmxhenlSdWxlKChpKSA9PiB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoJ3JpbmRleCcsIGkpXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgIH0sIGkpXFxuICAgIH0pXFxufSlcXG5cXG5cXG52YXIgc2xlID0ge1xcbiAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljJyxcXG4gICAgdXJsOiBcXFwicGQoaXRlbSwnYSYmaHJlZicpXFxcIixcXG4gICAgaW1nOlxcXCJwZChpdGVtLCAnLm1hc2stMSYmZGF0YS1zcmMnKVxcXCIsXFxuICAgIGQyOlxcXCJwZGZoKGl0ZW0sJy52b2QtcmFuay1leHBsYWluJiZUZXh0JylcXFwiLFxcbn1cXG5cXG52YXIgcmFua3NlbGU9YCdib2R5JiYudm9kLXJhbmstYm94LCR7cmluZGV4fSYmYSdgXFxuXFxuXFxudmFyIEhvdDEgPSB7XFxuICAgIHNlbGVzOiBzbGUsXFxuICAgIG5saXN0OiBcXFwicGRmYShodG1sLFxcXCIrcmFua3NlbGUrXFxcIilcXFwiLFxcbiAgICBudGl0bGU6IFxcXCJwZGZoKGl0ZW0sJy52b2QtcmFuay10aXRsZSYmVGV4dCcpXFxcIiwgbmRlc2M6XFxcInBkZmgoaXRlbSwnLnZvZC1yYW5rLXN0YXRlJiZUZXh0JylcXFwiLFxcbn1cXG5yYW5rQWRkKGQsIGh0bWwsIEhvdDEpXFxuXFxuXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwicmljaF90ZXh0XCIsXCJuYW1lXCI6XCLku4vnu41cIixcInBhdGhcIjpcImludHJvZHVjZVwiLFwicnVsZVwiOlwianM6XFxuc2V0UGFnZVRpdGxlKFxcXCLkuJPpopjku4vnu41cXFwiKTtcXG5zZXRSZXN1bHQoW3tcXG4gICAgdGl0bGU6IE1ZX1BBUkFNUy5pbnRyb2R1Y2VcXG59XSk7XCJ9XSIsImljb24iOiJodHRwczovL3d3dy5ndWd1ZmFuLmNvbS91cGxvYWQvc2l0ZS8yMDIzMDYxMC0xLzMwNzkyNzc1ZDI1MWY2ODljNjU2MTdhNzczMzgwNWU0LmpwZyIsInByb3h5IjoiIn0=
Add Comment
Please, Sign In to add comment