xiaomianao666

小程序:禁漫天堂

Feb 7th, 2024
555
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@禁漫天堂@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi56aB5ryr5aSp5aCCIiwiYXV0aG9yIjoiTElVJuWtkOS4keWvheWNryZLaWxsZXImTG95RGdJayblraPpo44iLCJ1cmwiOiJodHRwczovLzE4Y29taWMtYy54eXovYWxidW1zP289bXImcGFnZT1meXBhZ2UiLCJ2ZXJzaW9uIjowLCJjb2xfdHlwZSI6Im1vdmllXzMiLCJjbGFzc19uYW1lIjoiIiwidHlwZSI6ImNhcnRvb24iLCJjbGFzc191cmwiOiIiLCJhcmVhX25hbWUiOiIiLCJhcmVhX3VybCI6IiIsInNvcnRfbmFtZSI6IiIsInllYXJfbmFtZSI6IiIsInNvcnRfdXJsIjoiIiwieWVhcl91cmwiOiIiLCJmaW5kX3J1bGUiOiJqczpcbnZhciBkID0gW107XG5yYyhmZXRjaFBDKCdodHRwczovL2dpdGVlLmNvbS9taXN0eXdhdGVyL2hpa2VyX2luZm8vcmF3L21hc3Rlci9naXRodWJwcm94eS5qc29uJykgKyAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21pc3R5d2F0ZXIvaGlrZXIvbWFpbi9mJywgMjQpO1xuLy9ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL3lpP3J1bGU9zrEnKSkucnVsZSk7XG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goXCJoaWtlcjovL3BhZ2UveWpcIiwge30pKS5ydWxlKTtcbmNvbnN0IHBhZ2UgPSBNWV9QQUdFO1xuY29uc3QgZGMgPSBkeW5hbWljQ2xhc3Moe1xuICAgIOWIhuexu+minOiJsjogZ2V0UmFuZ2VDb2xvcnMoKVxufSk7XG5cbmlmIChNWV9QQUdFID09IDEpXG4geyAgXG5sZXQgbmF2ID0gW1wi6aaW6aG1XCIsXCJB5ryrXCIsXCLliIbnsbtcIl07XG5sZXQgY29sb3JzPSBbJzlGNUY5RicsJ2Y3ZThhYScsJzIwYTE2MiddO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmF2Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBteXRpdGxlID0gbmF2W2ldO1xuICAgICAgICBkLnB1c2goe1xuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKCduYXZ0aXRsZScsIFwi6aaW6aG1XCIpID09IG15dGl0bGUgPyBjb2xvcihteXRpdGxlLGNvbG9yc1tpXSk6IG15dGl0bGUsXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgobXl0aXRsZSkgPT4ge1xuICAgICAgICAgICAgICAgIHB1dE15VmFyKFwibmF2dGl0bGVcIiwgbXl0aXRsZSk7XG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXG4gICAgICAgICAgICB9LCBteXRpdGxlKSxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcInRleHRfM1wiXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmlmIChnZXRNeVZhcignbmF2dGl0bGUnLCBcIummlumhtVwiKSA9PSBcIummlumhtVwiKSB7XG52YXIgaHRtbD1mZXRjaCgnaHR0cHM6Ly8xOGNvbWljLWMueHl6LycpO1xudmFyIEljb24gPSBcImh0dHBzOi8vMThjb21pYy1jLnh5ei90ZW1wbGF0ZXMvZnJvbnRlbmQvYWlyYXYvaW1nL1wiO1xudmFyIExhYl9pY29uID0gWydwaGljb24vd2Vlay5wbmcnLCdhcHBfbGluazMucG5nP3Y9MycsJ3BoaWNvbi9rb3JlYS5wbmcnLCdwaGljb24vRG91amluLnBuZycsJ3BoaWNvbi9vbmx5b25lLnBuZycsICdwaGljb24vbmV3LnBuZyddO1xuaWYgKE1ZX1BBR0UgPT0gMSl7XG52YXIgTGFiID0gcGRmYShodG1sLCdib2R5JiYucm93Jyk7XHJcbiAgICAgICAgTGFiLmZvckVhY2goKGRhdGEpID0+IHtcbiAgICAgICAgIHZhciBsaXN0ID0gcGRmYShkYXRhLCAnYm9keSYmLnJvdzpoYXMoLnB1bGwtbGVmdCknKTtcbiAgICAgICAgIGxpc3QuZm9yRWFjaCgoZGF0YSkgPT4ge1xudmFyIHRpdGxlPXNwKHBkZmgoZGF0YSwgJ2g0JiZUZXh0JykpO1xuaWYoL+i/nui9vS8udGVzdCh0aXRsZSkpe1xuaWQ9MFxufWVsc2UgaWYoL+emgea8qy8udGVzdCh0aXRsZSkpe1xuaWQgPTFcbn1lbHNlIGlmKC/pn6nmvKsvLnRlc3QodGl0bGUpKXtcbmlkID0yXG59ZWxzZSBpZigv5pys5pysLy50ZXN0KHRpdGxlKSl7XG5pZCA9M1xufWVsc2UgaWYoL+WNlS8udGVzdCh0aXRsZSkpe1xuaWQgPTRcbn1lbHNlIGlmKC/mnIDmlrAvLnRlc3QodGl0bGUpKXtcbmlkID01XG59XG4gICAgICAgICAgIGQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgICAgICAgICAgZGVzYzogXCLmm7TlpJrigbpcIixcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBJY29uK0xhYl9pY29uW2lkXSxcbiAgICAgICAgICAgICAgICB1cmw6IHBkKGRhdGEsJ2EmJmhyZWYnKSsgJyZwYWdlPWZ5cGFnZUBydWxlPWpzOiQucmVxdWlyZShcImhpa2VyOi8vcGFnZS9yZWNvbW1lbmRcIiknLFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcImF2YXRhclwiLFxyXG4gICAgICAgICAgICB9KTtcbn0pICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBpdGVtID0gcGRmYShkYXRhLCAnLnJvdzpoYXMoLndlbGwpJiYud2VsbCwwOjknKTtcclxuICAgICAgICAgICAgaXRlbS5mb3JFYWNoKChkYXRhcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcbiAgICAgICAgdGl0bGU6IHNwKHBkZmgoZGF0YXMsICdzcGFuLDEmJlRleHQnKSksXG4gICAgICAgIGRlc2M6IHNwKHBkZmgoZGF0YXMsICdzcGFuJiZUZXh0JykrJ1xcdFxcdCcrcGRmaChkYXRhcywgJy5sYWJlbC1jYXRlZ29yeSYmVGV4dCcpKSxcbiAgICAgICAgaW1nOiBwZGZoKGRhdGFzLCAnaW1nJiZkYXRhLXNyY3x8ZGF0YS1vcmlnaW5hbCcpLFxuICAgICAgICB1cmw6IHBkKGRhdGFzLCAnYSYmaHJlZicpKycjaW1tZXJzaXZlVGhlbWUjI2F1dG9DYWNoZSNAcnVsZT1qczokLnJlcXVpcmUoXCJoaWtlcjovL3BhZ2UvZWpcIiknLFxuICAgICAgIGNvbF90eXBlOiBcIm1vdmllXzNcIixcbiAgICB9KTtcbn0pXG59KVxufVxufVxuZWxzZSBpZiAoZ2V0TXlWYXIoXCJuYXZ0aXRsZVwiKSA9PSBcIkHmvKtcIikge1xudmFyIOWumuS9jeS/oeaBryA9IFt7XG4gICAg5aSn57G75a6a5L2NOiAnYm9keSYmLmRyb3Bkb3duLW1lbnU6aGFzKGxpOmhhcyhhOm1hdGNoZXMo5ZCM5Lq6KSkpJyxcbiAgICDlsI/nsbs6ICdib2R5JiZhJyxcbn0sIHtcbiAgICDkuIDnuqflrprkvY06ICdib2R5JiYuZHJvcGRvd24tbWVudTpoYXMobGk6aGFzKGE6bWF0Y2hlcyjku4rlpKkpKSksMDoxfHwuZHJvcGRvd24tbWVudTpoYXMobGk6aGFzKGE6bWF0Y2hlcyjmnIDmlrApKSksMDoxfHwuZHJvcGRvd24tbWVudTpoYXMobGk6aGFzKGE6bWF0Y2hlcyjml6UpKSksMToyJyxcbiAgICDlsI/nsbs6ICdib2R5JiZhJyxcbn1dO1xubGV0IHRydWVfdXJsID0gZ2V0TXlWYXIoTVlfUlVMRS51cmwsIE1ZX1VSTClcbmlmICh0cnVlX3VybC5pbmNsdWRlcygncGFnZScpKSB7XG4gICAgdHJ1ZV91cmwgPSB0cnVlX3VybC5yZXBsYWNlKC9wYWdlPVxcZCsvLCBcInBhZ2U9XCIgKyBwYWdlKTtcbn0gZWxzZSB7XG4gICAgdHJ1ZV91cmwgPSB0cnVlX3VybCArIFwiJnBhZ2U9XCIgKyBwYWdlO1xufVxuXG5NWV9VUkwgPSB0cnVlX3VybDtcbnZhciBodG1sID0gZmV0Y2goTVlfVVJMKTtcbmRjLuW8gOWQr+aKmOWPoCgpXG5kYy7lvIDlkK/mkJzntKIoKS7liJvlu7rliqjmgIHliIbnsbso5a6a5L2N5L+h5oGvKVxudmFyIGxpc3QgPSBwZGZhKGh0bWwsICcubS0wJiYuY29sLXhzLTYnKTtcbmZvciAodmFyIGogaW4gbGlzdCkge1xuICAgIGQucHVzaCh7XG4gICAgICAgIHRpdGxlOiBzcChwZGZoKGxpc3Rbal0sICdzcGFuLDEmJlRleHQnKSksXG4gICAgICAgIGRlc2M6IHNwKHBkZmgobGlzdFtqXSwgJ3NwYW4mJlRleHQnKSsnXFx0XFx0JytwZGZoKGxpc3Rbal0sICcubGFiZWwtY2F0ZWdvcnkmJlRleHQnKSksXG4gICAgICAgIGltZzogcGRmaChsaXN0W2pdLCAnaW1nJiZkYXRhLWNmc3JjfHxzcmN8fGRhdGEtc3JjJyksXG4gICAgICAgIHVybDogcGQobGlzdFtqXSwgJ2EmJmhyZWYnKSsnI2ltbWVyc2l2ZVRoZW1lIyNhdXRvQ2FjaGUjQHJ1bGU9anM6JC5yZXF1aXJlKFwiaGlrZXI6Ly9wYWdlL2VqXCIpJ1xuICAgIH0pO1xufVxufVxuZWxzZSBpZiAoZ2V0TXlWYXIoXCJuYXZ0aXRsZVwiKSA9PSBcIuWIhuexu1wiKSB7XG5pZiAoTVlfUEFHRSA9PSAxKXtcbmQucHVzaCh7XG50aXRsZSA6XCLnpoHmvKvlpKnloIJcIixcbmNvbF90eXBlOiBcInJpY2hfdGV4dFwiLFxufSlcbmQucHVzaCh7XG4gICAgICAgIHRpdGxlOiBcIuavj+WRqOW/heeci1wiLFxuICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvYms/cGFnZT1meXBhZ2Ujbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjJyxcbiAgICAgICAgY29sX3R5cGU6IFwiZmxleF9idXR0b25cIixcbn0pXG5kLnB1c2goe1xuICAgICAgICB0aXRsZTogXCLmjpLooYzmppxcIixcbiAgICAgICAgdXJsOiBcImhpa2VyOi8vcGFnZS9yYW5rP3BhZ2U9ZnlwYWdlI25vUmVjb3JkSGlzdG9yeSMjbm9IaXN0b3J5I1wiLFxuICAgICAgICBjb2xfdHlwZTogXCJmbGV4X2J1dHRvblwiLFxufSlcbmQucHVzaCh7XG4gICAgICAgIHRpdGxlOiBcIkjliqjnlLtcIixcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL0g/cGFnZT1meXBhZ2Ujbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjJyxcbiAgICAgICAgY29sX3R5cGU6IFwiZmxleF9idXR0b25cIixcbn0pXG52YXIgaHRtbCA9IGZldGNoKCdodHRwczovLzE4Y29taWMtYy54eXovdGhlbWUvJyk7XG52YXIgSG90ID0gcGRmYShodG1sLCdib2R5JiYuY29sLW1kLTMsMDoxJyk7XG4gICAgIEhvdC5mb3JFYWNoKChkYXRhKSA9PiB7XG5kLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6IHNwKHBkZmgoZGF0YSwgJ3NwYW4mJlRleHQnKSksXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFwicmljaF90ZXh0XCIsXHJcbiAgICAgICAgICAgIH0pOyBcbnZhciBpdGVtID0gcGRmYShkYXRhLCAnYm9keSYmYScpO1xyXG4gICAgICAgICAgICBpdGVtLmZvckVhY2goKGRhdGFzKSA9PiB7XG52YXIgdGl0bGU9IHNwKHBkZmgoZGF0YXMsICdhJiZUZXh0JykpO1xudmFyIHVybCA9IFwiaHR0cHM6Ly8xOGNvbWljLWMueHl6L3NlYXJjaC9waG90b3M/c2VhcmNoX3F1ZXJ5PVwiK3RpdGxlK1wiJm1haW5fdGFnPTAmbz1tdiZ0PWEmcGFnZT1cIjtcclxuICAgICAgICAgICAgICAgIGQucHVzaCh7IFxyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmwrJ2Z5cGFnZSNmdWxsVGhlbWUjI25vSGlzdG9yeSNAcnVsZT1qczokLnJlcXVpcmUoXCJoaWtlcjovL3BhZ2Uvc2VhcmNoXCIpJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXCJmbGV4X2J1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICBleHRyYTp7XG4gICAgICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgICAgICB1cmw6IHVybFxuICAgICAgICAgfVxufSk7XG59KVxufSlcbnZhciBMYWIgPSBwZGZhKGh0bWwsJ2JvZHkmJi5yb3csNjoxMCcpO1xyXG4gICAgICAgIExhYi5mb3JFYWNoKChkYXRhKSA9PiB7XG4gICAgICAgICAgIGQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogc3AocGRmaChkYXRhLCAnaDQmJlRleHQnKSksXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFwicmljaF90ZXh0XCIsXHJcbiAgICAgICAgICAgIH0pOyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgaXRlbSA9IHBkZmEoZGF0YSwgJy5yb3cmJmxpJyk7XHJcbiAgICAgICAgICAgIGl0ZW0uZm9yRWFjaCgoZGF0YXMpID0+IHtcbnZhciB0aXRsZT0gc3AocGRmaChkYXRhcywgJ2EmJlRleHQnKSk7XG52YXIgdXJsID0gXCJodHRwczovLzE4Y29taWMtYy54eXovc2VhcmNoL3Bob3Rvcz9zZWFyY2hfcXVlcnk9XCIrdGl0bGUrXCImbWFpbl90YWc9MCZvPW12JnQ9YSZwYWdlPVwiO1xyXG4gICAgICAgICAgICAgICAgZC5wdXNoKHsgXHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHVybCsnZnlwYWdlI2Z1bGxUaGVtZSMjbm9IaXN0b3J5I0BydWxlPWpzOiQucmVxdWlyZShcImhpa2VyOi8vcGFnZS9zZWFyY2hcIiknLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcImZsZXhfYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOntcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgICAgIHVybDogdXJsXG4gICAgICAgICB9XG59KTtcbn0pXG59KVxufVxufVxuc2V0UmVzdWx0KGQpOyIsInNlYXJjaF91cmwiOiJodHRwczovL2ptY29taWMubWUvc2VhcmNoL3Bob3Rvcz9zZWFyY2hfcXVlcnk9KiombWFpbl90YWc9MCZvPW12JnQ9YSZwYWdlPWZ5cGFnZSIsImdyb3VwIjoi5ryr55S7Iiwic2VhcmNoRmluZCI6ImpzOlxudmFyIGQgPSBbXTtcbnZhciBodG1sID0gZmV0Y2goTVlfVVJMKTtcbnJjKGZldGNoUEMoJ2h0dHBzOi8vZ2l0ZWUuY29tL21pc3R5d2F0ZXIvaGlrZXJfaW5mby9yYXcvbWFzdGVyL2dpdGh1YnByb3h5Lmpzb24nKSArICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbWlzdHl3YXRlci9oaWtlci9tYWluL2YnLCAyNCk7XG52YXIgbGlzdCA9IHBkZmEoaHRtbCwgJy5tLTAmJi5jb2wteHMtNicpO1xuZm9yICh2YXIgaiBpbiBsaXN0KSB7XG4gICAgZC5wdXNoKHtcbiAgICAgICAgdGl0bGU6IHNwKHBkZmgobGlzdFtqXSwgJ3NwYW4sMSYmVGV4dCcpKSxcbiAgICAgICAgZGVzYzogc3AocGRmaChsaXN0W2pdLCAnc3BhbiYmVGV4dCcpKydcXHRcXHQnK3BkZmgobGlzdFtqXSwgJy5sYWJlbC1jYXRlZ29yeSYmVGV4dCcpKSxcbiAgICAgICAgaW1nOiBwZGZoKGxpc3Rbal0sICdpbWcmJmRhdGEtb3JpZ2luYWwnKSxcbiAgICAgICAgdXJsOiBwZChsaXN0W2pdLCAnYSYmaHJlZicpKycjaW1tZXJzaXZlVGhlbWUjI2F1dG9DYWNoZSNAcnVsZT1qczokLnJlcXVpcmUoXCJoaWtlcjovL3BhZ2UvZWpcIiknXG4gICAgfSk7XG59XG5zZXRSZXN1bHQoZCk7IiwiZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsImRldGFpbF9maW5kX3J1bGUiOiIiLCJzZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsInNkZXRhaWxfZmluZF9ydWxlIjoiIiwidWEiOiJtb2JpbGUiLCJwcmVSdWxlIjoiIiwicGFnZXMiOiJbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcImRcIixcInBhdGhcIjpcImRcIixcInJ1bGVcIjpcImpzOlxcbmNvbnN0IEJ5dGVBcnJheU91dHB1dFN0cmVhbSA9IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtO1xcbmNvbnN0IEJ5dGVBcnJheUlucHV0U3RyZWFtID0gamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTtcXG5jb25zdCBCaXRtYXAgPSBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDtcXG5jb25zdCBCaXRtYXBGYWN0b3J5ID0gYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5O1xcbmNvbnN0IENhbnZhcyA9IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzO1xcbiQuZXhwb3J0cyA9IGZ1bmN0aW9uKHBpY1VybCwgaW1nSW5wdXRTdHJlYW0pIHtcXG4gICAgLy9sZXQgcGljVXJsID0gcGljVXJsO1xcbiAgICBwaWNVcmwubWF0Y2goL3Bob3Rvc1xcXFwvKFxcXFxkKyk/XFxcXC8oXFxcXGQrKT8vKTtcXG4gICAgbGV0IGJvb2tJZCA9IFJlZ0V4cC4kMTtcXG4gICAgbGV0IGltZ0lkID0gUmVnRXhwLiQyO1xcbiAgICBpZighYm9va0lkfHwhaW1nSWR8fE51bWJlcihib29rSWQpPD0yMjAwMDApIHJldHVybiBpbWdJbnB1dFN0cmVhbTtcXG4gICAgaWYgKE51bWJlcihib29rSWQpID49IFxcXCIyNjg4NTBcXFwiICYmIE51bWJlcihib29rSWQpIDw9IFxcXCI0MjE5MjVcXFwiKSB7XFxyXFxuICAgIHZhciAkbnVtID0gcGFyc2VJbnQobWQ1KGJvb2tJZCArIGltZ0lkKS5zbGljZSgtMSkuY2hhckNvZGVBdCgpICUgMTApICogMiArIDI7XFxyXFxufSBlbHNlIGlmIChOdW1iZXIoYm9va0lkKSA+IFxcXCI0MjE5MjVcXFwiKSB7XFxyXFxuICAgIHZhciAkbnVtID0gcGFyc2VJbnQobWQ1KGJvb2tJZCArIGltZ0lkKS5zbGljZSgtMSkuY2hhckNvZGVBdCgpICUgOCkgKiAyICsgMjtcXHJcXG59IGVsc2Uge1xcclxcbiAgICB2YXIgJG51bSA9IFxcXCIxMFxcXCI7XFxyXFxufVxcbiAgIC8qIGlmIChOdW1iZXIoYm9va0lkKSA+PSAyNjg4NTApIHtcXG4gICAgICAgIGxldCAkbWQ1ID0gbWQ1KGJvb2tJZCArIGltZ0lkKTtcXG4gICAgICAgIGxldCAkYXNjaWkgPSAkbWQ1LnN1YnN0cigtMSkuY2hhckNvZGVBdCgwKSArIFxcXCJcXFwiO1xcbiAgICAgICAgbGV0ICRsYXN0ID0gTnVtYmVyKCRhc2NpaS5zdWJzdHIoLTEpKTtcXG4gICAgICAgIHZhciAkbnVtID0gKCRsYXN0ICsgMSkgKiAyO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgdmFyICRudW0gPSAxMDtcXG4gICAgfSovXFxuICAgIC8qbGV0IGltZ0lucHV0U3RyZWFtID0gZmV0Y2gocGljVXJsLCB7XFxuICAgICAgICBpbnB1dFN0cmVhbTogdHJ1ZSxcXG4gICAgfSk7XFxuICAgICovXFxuICAgIC8vbGV0IGltZ0lucHV0U3RyZWFtID0gaW5wdXQ7XFxuICAgIGxldCBpbWdCaXRtYXAgPSBCaXRtYXBGYWN0b3J5LmRlY29kZVN0cmVhbShpbWdJbnB1dFN0cmVhbSk7XFxuICAgIGNsb3NlTWUoaW1nSW5wdXRTdHJlYW0pO1xcblxcbiAgICBsZXQgd2lkdGggPSBpbWdCaXRtYXAuZ2V0V2lkdGgoKTtcXG4gICAgbGV0IGhlaWdodCA9IGltZ0JpdG1hcC5nZXRIZWlnaHQoKTtcXG4gICAgbGV0IHkgPSBNYXRoLmZsb29yKGhlaWdodCAvICRudW0pO1xcbiAgICBsZXQgcmVtYWluZGVyID0gaGVpZ2h0ICUgJG51bTtcXG5cXG4gICAgbGV0IG5ld0ltZ0JpdG1hcCA9IEJpdG1hcC5jcmVhdGVCaXRtYXAod2lkdGgsIGhlaWdodCwgQml0bWFwLkNvbmZpZy5BUkdCXzg4ODgpO1xcbiAgICBsZXQgY2FudmFzID0gbmV3IENhbnZhcyhuZXdJbWdCaXRtYXApO1xcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAkbnVtOyBpKyspIHtcXG4gICAgICAgIGxldCBoID0gaSA9PT0gJG51bSA/IHJlbWFpbmRlciA6IDA7XFxuICAgICAgICBjYW52YXMuZHJhd0JpdG1hcChCaXRtYXAuY3JlYXRlQml0bWFwKGltZ0JpdG1hcCwgMCwgeSAqIChpIC0gMSksIHdpZHRoLCB5ICsgaCksIDAsIHkgKiAoJG51bSAtIGkpLCBudWxsKTtcXG4gICAgfVxcbiAgICBsZXQgYmFvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTtcXG4gICAgbmV3SW1nQml0bWFwLmNvbXByZXNzKEJpdG1hcC5Db21wcmVzc0Zvcm1hdC5QTkcsIDEwMCwgYmFvcyk7XFxuICAgIHJldHVybiBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYmFvcy50b0J5dGVBcnJheSgpKTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuIDnuqdcIixcInBhdGhcIjpcInlqXCIsXCJydWxlXCI6XCJqczpcXG4vKlxcbmJ5IM6xKHpldGFscGhhKVxcbuS4gOe6p+WwgeijhVxcbuWKqOaAgeWIhuexuyDliJfooajliJvlu7og6Ieq5Yqo5LiL5LiA6aG1XFxudmVyIDIwMjMxMDE3IDEuMFxcbiovXFxuXFxuLy/pmo/mnLrpopzoibJcXG52YXIgZ2V0UmFuZ2VDb2xvcnMgPSBmdW5jdGlvbigpIHtcXG4gICAgcmV0dXJuICcjJyArICgnMDAwMDAnICsgKE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAgPDwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xcbn1cXG4vL3JlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9qaWFuXFxcIik7XFxucmMoZmV0Y2hQQygnaHR0cHM6Ly9naXRlZS5jb20vbWlzdHl3YXRlci9oaWtlcl9pbmZvL3Jhdy9tYXN0ZXIvZ2l0aHVicHJveHkuanNvbicpICsgJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9taXN0eXdhdGVyL2hpa2VyL21haW4vZicsIDI0KTtcXG4vL+WKqOaAgeWIhuexu1xcbmZ1bmN0aW9uIGR5bmFtaWNDbGFzcyhvcHRpb25zKSB7XFxuICAgIGNvbnN0IG9iaiA9IHtcXG4gICAgICAgIC8v6buY6K6k5YC8XFxuICAgICAgICBsYXlvdXQ6IFxcXCJ1bmRlZmluZWRcXFwiLFxcbiAgICAgICAgaHRtbDogXFxcImVtcHR5XFxcIixcXG4gICAgICAgIHBhZ2U6IDAsXFxuICAgICAgICDliIbnsbvpopzoibI6IFxcXCIjRkE3Mjk4XFxcIixcXG4gICAgICAgIOaKmOWPoDogXFxcIuKAnOKAnOKAneKAnTxiPlxcXCIgKyBcXFwi4oinXFxcIi5mb250Y29sb3IoXFxcIiMxYWFkMTlcXFwiKSArIFxcXCI8L2I+XFxcIixcXG4gICAgICAgIOWxleW8gDogXFxcIuKAnOKAnOKAneKAnTxiPlxcXCIgKyBcXFwi4oioXFxcIi5mb250Y29sb3IoXFxcIiNGRjAwMDBcXFwiKSArIFxcXCI8L2I+XFxcIixcXG4gICAgICAgIG9wZW46IHRydWUsXFxuICAgICAgICBzdGF0ZTogTVlfUlVMRS51cmwsXFxuICAgICAgICBzZWFyY2g6IGZhbHNlLFxcbiAgICAgICAgY2xlYXJzOiBbXSxcXG4gICAgICAgIGNsZWFyYWxsOiBbXFxcInlpX2ZpcnN0cGFnZVxcXCJdLFxcbiAgICAgICAgZGVidWc6IGZhbHNlLFxcblxcbiAgICAgICAg6aKE6K6+KHBhcmFtKSB7XFxuICAgICAgICAgICAgaWYgKHBhcmFtID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgICAgICBwYXJhbSA9IFtdO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhwYXJhbSkuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcXG4gICAgICAgICAgICAgICAgLy8g5a+55q+P5Liq5bGe5oCn5ZCN5omn6KGM5pON5L2cXFxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyYW1bcHJvcGVydHldOyAvLyDojrflj5blsZ7mgKflgLxcXG4gICAgICAgICAgICAgICAgLy8g5Zyo6L+Z6YeM5omn6KGM5oKo55qE5pON5L2cXFxuICAgICAgICAgICAgICAgIHRoaXNbcHJvcGVydHldID0gdmFsdWU7XFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhwcm9wZXJ0eSArIFxcXCI6XFxcIiArIHZhbHVlKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGV2YWxKU1J1bGUoaXRlbSxcXG4gICAgICAgICAgICBqc1J1bGUpIHtcXG4gICAgICAgICAgICBsZXQgcnVsZSA9IGpzUnVsZS5yZXBsYWNlKFxcXCJAanM6XFxcIixcXG4gICAgICAgICAgICAgICAgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgIHJ1bGUgPSBydWxlLnRyaW0oKTtcXG4gICAgICAgICAgICAvL2xvZygkLnN0cmluZ2lmeShydWxlKSlcXG4gICAgICAgICAgICBsZXQgaW5wdXQgPSBpdGVtO1xcbiAgICAgICAgICAgIGlmIChydWxlLnN0YXJ0c1dpdGgoXFxcIihcXFwiKSkge1xcbiAgICAgICAgICAgICAgICBldmFsKFxcXCJyZXN1bHQgPSBcXFwiICsgcnVsZSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgLyoqXFxuICAgICAgICAgICAgICAgICAqIOi/mOWOn+aIkCAkLnRvU3RyaW5nKC4uLikg55qE5pyA57uI57uT5p6c77yM6L6+5Yiw5pyA57uI5aSE55CG5pa55byP6Lef5LiK6Z2i55qEIGlmIOS4gOiHtOeahOebrueahFxcbiAgICAgICAgICAgICAgICAgKi9cXG4gICAgICAgICAgICAgICAgZXZhbChcXFwicmVzdWx0ID0gXFxcIiArIFxcXCIoKCkgPT4ge1xcXCIgKyBydWxlICsgXFxcIn0pKClcXFwiKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCB8fCBcXFwiXFxcIjtcXG4gICAgICAgIH0sXFxuICAgICAgICBnZXRUaXRsZShzcmMsIGNhdGVnb3J5KSB7XFxuICAgICAgICAgICAgbGV0IHRpdGxlID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgbGV0IHRpdGxlUnVsZSA9IGNhdGVnb3J5IHx8IFxcXCJhJiZUZXh0XFxcIjtcXG4gICAgICAgICAgICBpZiAodGl0bGVSdWxlLnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICB0aXRsZSA9IHNwKHRoaXMuZXZhbEpTUnVsZShzcmMsIHRpdGxlUnVsZSkpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlID0gc3AocGFyc2VEb21Gb3JIdG1sKHNyYywgdGl0bGVSdWxlKSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiB0aXRsZSB8fCBcXFwiXFxcIjtcXG4gICAgICAgIH0sXFxuICAgICAgICBnZXRVcmwoc3JjLCBjYXRlZ29yeSkge1xcbiAgICAgICAgICAgIGxldCB1cmwgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICBsZXQgdXJsUnVsZSA9IGNhdGVnb3J5LumTvuaOpSB8fCBcXFwiYSYmaHJlZlxcXCI7XFxuICAgICAgICAgICAgaWYgKHVybFJ1bGUuc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHRoaXMuZXZhbEpTUnVsZShzcmMsIHVybFJ1bGUpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHBkKHNyYywgdXJsUnVsZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2F0ZWdvcnku6ZO+5o6l5aSE55CGID09IFxcXCJmdW5jdGlvblxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gY2F0ZWdvcnku6ZO+5o6l5aSE55CGKHVybCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiB1cmwgfHwgXFxcIlxcXCI7XFxuICAgICAgICB9LFxcbiAgICAgICAgaXNOdWxsKHBhcmFtKSB7XFxuICAgICAgICAgICAgaWYgKHBhcmFtID09IG51bGwpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH0sXFxuICAgICAgICBpc0Jvb2xlYW4odmFyaWFibGUpIHtcXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhcmlhYmxlICE9PSBcXFwiYm9vbGVhblxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLlvIDlkK/mipjlj6Dor7fkvKDlhaXluIPlsJTlgLxcXFwiKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LFxcbiAgICAgICAg5riF6ZmkKGxpc3QpIHtcXG4gICAgICAgICAgICBpZiAodGhpcy5pc051bGwobGlzdCkpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChsaXN0LmNvbnN0cnVjdG9yID09IFN0cmluZykge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIua4hemZpOaKpemUmTror7fkvKDliJfooahcXFwiKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdGhpcy5jbGVhcnMgPSBsaXN0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOWFqOa4hShsaXN0KSB7XFxuICAgICAgICAgICAgaWYgKHRoaXMuaXNOdWxsKGxpc3QpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgYyA9IHRoaXMuY2xlYXJhbGw7XFxuICAgICAgICAgICAgbGlzdCA9IGMuY29uY2F0KGxpc3QpO1xcbiAgICAgICAgICAgIHRoaXMuY2xlYXJhbGwgPSBsaXN0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOa6kOeggShpbnB1dCkge1xcbiAgICAgICAgICAgIHRoaXMuaHRtbCA9IGlucHV0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOeVjOmdoihpbnB1dCkge1xcbiAgICAgICAgICAgIHRoaXMubGF5b3V0ID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg6aG156CBKGlucHV0KSB7XFxuICAgICAgICAgICAgdGhpcy5wYWdlID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg54q25oCBKGlucHV0KSB7XFxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IGlucHV0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOW8gOWQr+aQnOe0oihpbnB1dCkge1xcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICAgICAgaW5wdXQgPSB0cnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0aGlzLnNlYXJjaCA9IGlucHV0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOW8gOWQr+aKmOWPoChpbnB1dCkge1xcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICAgICAgaW5wdXQgPSB0cnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0aGlzLmlzQm9vbGVhbihpbnB1dCk7XFxuICAgICAgICAgICAgdGhpcy5vcGVuID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAgc2V0VGl0bGUoaywgaSwgdCkge1xcbiAgICAgICAgICAgIHJldHVybiBrID09IGkgPyBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIHQuZm9udGNvbG9yKHRoaXMu5YiG57G76aKc6ImyKSA6IHQ7XFxuICAgICAgICB9LFxcbiAgICAgICAgYWN0aW9uKG9iaikge1xcbiAgICAgICAgICAgIHJldHVybiBbe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIua4hemZpOeKtuaAgVxcXCIsXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChvYmopID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhvYmopO1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihvYmouc3RhdGUpO1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihcXFwiaGVhZC5jYXRlXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdjYXRlX2J1dHRvbicpO1xcbiAgICAgICAgICAgICAgICAgICAgb2JqLmFsbC5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgb2JqLmNsLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICB9LCBvYmopLFxcbiAgICAgICAgICAgIH0sIF07XFxuICAgICAgICB9LFxcbiAgICAgICAgY2hlY2tQYXJhbSgpIHtcXG4gICAgICAgICAgICB2YXIgb2JqID0ge307XFxuICAgICAgICAgICAgaWYgKHRoaXMucGFnZSA9PSAwICYmIHR5cGVvZiBwYWdlID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+35Lyg5YWl6aG156CBXFxcIik7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYWdlID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIumhteeggVxcXCJdID0gdGhpcy5wYWdlO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLpobXnoIFcXFwiXSA9IHBhZ2U7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHRoaXMuaHRtbCA9PSBcXFwiZW1wdHlcXFwiICYmIHR5cGVvZiBodG1sID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+35Lyg5YWl5rqQ56CBXFxcIik7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBodG1sID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIua6kOeggVxcXCJdID0gdGhpcy5odG1sO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLmupDnoIFcXFwiXSA9IGh0bWw7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHRoaXMubGF5b3V0ID09IFxcXCJ1bmRlZmluZWRcXFwiICYmIHR5cGVvZiBkID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+35Lyg5YWl55WM6Z2iXFxcIik7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIueVjOmdolxcXCJdID0gdGhpcy5sYXlvdXQ7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIueVjOmdolxcXCJdID0gZDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gb2JqO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOWIm+W7uuWKqOaAgeWIhuexuyhydWxlT2JqKSB7XFxuICAgICAgICAgICAgbGV0IGl0ZW1zID0gW107XFxuICAgICAgICAgICAgbGV0IGNhdGVzID0gW107XFxuICAgICAgICAgICAgaWYgKHJ1bGVPYmogPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgIHJ1bGVPYmogPSBbXTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy/liJ3lp4vljJblj5jph4/lvIDlp4tcXG4gICAgICAgICAgICBjb25zdCBwYXJhbSA9IHRoaXMuY2hlY2tQYXJhbSgpO1xcbiAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBwYXJhbS7pobXnoIE7XFxuICAgICAgICAgICAgY29uc3QgaHRtbCA9IHBhcmFtLua6kOeggTtcXG4gICAgICAgICAgICBjb25zdCBkID0gcGFyYW0u55WM6Z2iO1xcbiAgICAgICAgICAgIGNvbnN0IOeKtuaAgSA9IHRoaXMuc3RhdGU7XFxuICAgICAgICAgICAgY29uc3Qgc2VhcmNoID0gdGhpcy5zZWFyY2g7XFxuICAgICAgICAgICAgY29uc3QgZW1wdHkgPSBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgY29uc3Qg5oqY5Y+g54q25oCBID0gdGhpcy5vcGVuO1xcbiAgICAgICAgICAgIHZhciDlsZXlvIAgPSB0aGlzLuWxleW8gDtcXG4gICAgICAgICAgICB2YXIg5oqY5Y+gID0gdGhpcy7mipjlj6A7XFxuICAgICAgICAgICAgdmFyIOWFqOa4hSA9IHRoaXMuY2xlYXJhbGw7XFxuICAgICAgICAgICAgdmFyIOa4hemZpCA9IHRoaXMuY2xlYXJzO1xcbiAgICAgICAgICAgIC8v5Yid5aeL5YyW5Y+Y6YeP57uT5p2fXFxuICAgICAgICAgICAgbGV0IGluaXRfY2F0ZSA9IG5ldyBBcnJheSgyMCkuZmlsbChcXFwiMFxcXCIpO1xcbiAgICAgICAgICAgIGNvbnN0IGZvbGQgPSBnZXRNeVZhcihNWV9SVUxFLmdyb3VwLCBcXFwiMFxcXCIpO1xcbiAgICAgICAgICAgIGNvbnN0IGNhdGVfdGVtcCA9IEpTT04ucGFyc2UoXFxuICAgICAgICAgICAgICAgIGdldE15VmFyKFxcXCJoZWFkLmNhdGVcXFwiLCBKU09OLnN0cmluZ2lmeShpbml0X2NhdGUpKVxcbiAgICAgICAgICAgICk7XFxuICAgICAgICAgICAgaWYgKHNlYXJjaCAmJiBwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCInaGlrZXI6Ly9zZWFyY2g/cnVsZT1cXFwiICsgTVlfUlVMRS50aXRsZSArIFxcXCImcz0nK2lucHV0XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLmkJzntKLlhbPplK7or41cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcImtleXdvcmRcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwia2V5d29yZFxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gW107XFxuICAgICAgICAgICAgcnVsZU9iai5mb3JFYWNoKCh4KSA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gW107XFxuICAgICAgICAgICAgICAgIC8vbG9nKHgpXFxuICAgICAgICAgICAgICAgIGlmICh4Lmpzb24gIT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgICAgICB4Lmpzb24ubWFwKGsgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3JpZXMucHVzaChKU09OLnN0cmluZ2lmeShrKS5yZXBsYWNlKC9eXFxcXFt8XFxcXF0kL2csICcnKSlcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICAvL2NhdGVnb3JpZXMucHVzaCh4Lmpzb24pXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKHgu5LiA57qn5a6a5L2NKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoeC7kuIDnuqflrprkvY0uc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHRoaXMuZXZhbEpTUnVsZShodG1sLCB4LuS4gOe6p+WumuS9jSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBwZGZhKGh0bWwsIHgu5LiA57qn5a6a5L2NKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoeC7lpKfnsbvlrprkvY0pIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh4LuWkp+exu+WumuS9jS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gdGhpcy5ldmFsSlNSdWxlKGh0bWwsIHgu5aSn57G75a6a5L2NKTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IFtwZGZhKGh0bWwsIHgu5aSn57G75a6a5L2NKS5qb2luKCdcXFxcbicpXTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvLy0t6aKd5aSW5aSE55CGLS1cXG4gICAgICAgICAgICAgICAgaWYgKCgn5aKe5YqgJyBpbiB4KSkge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHgu5aKe5YqgLmNvbnN0cnVjdG9yID09IFN0cmluZykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHgu5aKe5YqgID0gZXZhbCh4LuWinuWKoCk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBzbGlzdCA9IHgu5aKe5YqgLmNvbmNhdChzbGlzdCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKCgn6KGl5YWFJyBpbiB4KSkge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHgu6KGl5YWFLmNvbnN0cnVjdG9yID09IFN0cmluZykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHgu6KGl5YWFID0gZXZhbCh4LuihpeWFhSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBzbGlzdCA9IHNsaXN0LmNvbmNhdCh4LuihpeWFhSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy8tLemineWkluWkhOeQhi0tXFxuICAgICAgICAgICAgICAgIHZhciDkuIDnuqcgPSBsaXN0Lm1hcCgocykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNsaXN0ID0gW107XFxuICAgICAgICAgICAgICAgICAgICBpZiAoIShcXFwi5bCP57G7XFxcIiBpbiB4KSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHgu5bCP57G7ID0gXFxcImJvZHkmJmE6bm90KDptYXRjaGVzKOmmlumhtSkpOm5vdChhOm5vdChbaHJlZl0pKVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBpZiAoeC7lsI/nsbsuc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpc3QgPSB0aGlzLmV2YWxKU1J1bGUocywgeC7lsI/nsbspO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzbGlzdCA9IHBkZmEocywgeC7lsI/nsbspO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgdmFyIOWumuS9jSA9IHNsaXN0Lm1hcCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IHNwKHRoaXMuZ2V0VGl0bGUoaXRlbSwgeC7moIfpopgpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXJsID0gdGhpcy5nZXRVcmwoaXRlbSwgeCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHVybFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaik7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiDlrprkvY07XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAvL2xvZyjkuIDnuqcpXFxuICAgICAgICAgICAgICAgIC8vbG9nKOS4gOe6py5sZW5ndGgpXFxuICAgICAgICAgICAgICAgIGlmICjkuIDnuqcubGVuZ3RoID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNhdGVnb3JpZXMucHVzaCjkuIDnuqcuam9pbihcXFwiXFxcXG5cXFwiKSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICDkuIDnuqcuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3JpZXMucHVzaChpdGVtLmpvaW4oXFxcIixcXFwiKSk7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvL2xvZyhjYXRlZ29yaWVzKVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGlmICjmipjlj6DnirbmgIEpIHtcXG4gICAgICAgICAgICAgICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGZvbGQgPT09IFxcXCIxXFxcIiA/IOaKmOWPoCA6IOWxleW8gCxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aXRsZSwgZm9sZCwgdSwgYWxsLCBleHBzKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9sZCA9IGdldE15VmFyKE1ZX1JVTEUuZ3JvdXAsIGZvbGQpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFvlsZXlvIAsIOaKmOWPoF0gPSBleHBzO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGQgPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjeCA9IGZpbmRJdGVtc0J5Q2xzKHRpdGxlICsgJ2NhdGVfYnV0dG9uJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoJ2NhdGVfYnV0dG9uJywgY3gpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW1CeUNscyh0aXRsZSArICdjYXRlX2J1dHRvbicpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3ggPSBzdG9yYWdlMC5nZXRNeVZhcignY2F0ZV9idXR0b24nLCBbXSkubWFwKHggPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Wydjb2xfdHlwZSddID0geFsnY29sX3R5cGUnXSA/IHhbJ2NvbF90eXBlJ10gOiB4Wyd0eXBlJ107XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEl0ZW1BZnRlcih0aXRsZSArICdjYXRlX2xpbmUnLCBjeClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qYWxsLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOyovXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHRpdGxlICsgJ2NhdGVfZXhwJywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBmb2xkID09IDEgPyDlsZXlvIAgOiDmipjlj6AsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoTVlfUlVMRS5ncm91cCwgZm9sZCA9PT0gXFxcIjFcXFwiID8gXFxcIjBcXFwiIDogXFxcIjFcXFwiKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTVlfUlVMRS50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg54q25oCBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDlhajmuIUsIFvlsZXlvIAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDmipjlj6BcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IE1ZX1JVTEUudGl0bGUgKyAnY2F0ZV9leHAnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IHRoaXMuYWN0aW9uKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiDnirbmgIEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGw6IOWFqOa4hSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsOiDmuIXpmaQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgIGNhdGVnb3JpZXMuZm9yRWFjaCgoY2F0ZWdvcnksIGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyhjYXRlZ29yeSlcXG4gICAgICAgICAgICAgICAgICAgIGxldCBzdWJfY2F0ZWdvcmllcyA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgLyppZiAo5bCP57G75a6a5L2NLmluY2x1ZGVzKFxcXCI7XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMgPSBwZGZhKGNhdGVnb3J5LCDlsI/nsbvlrprkvY0uc3BsaXQoXFxcIjtcXFwiKVswXSk7XFxuICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJfY2F0ZWdvcmllcy5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzID0gcGRmYShjYXRlZ29yeSwg5bCP57G75a6a5L2NLnNwbGl0KFxcXCI7XFxcIilbMV0pO1xcbiAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyovXFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyhpbmRleClcXG4gICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzID0gSlNPTi5wYXJzZShgWyR7Y2F0ZWdvcnl9XWApO1xcbiAgICAgICAgICAgICAgICAgICAgLy9sb2coc3ViX2NhdGVnb3JpZXMpXFxuICAgICAgICAgICAgICAgICAgICAvLyBzdWJfY2F0ZWdvcmllcyA9IHBkZmEoY2F0ZWdvcnksIOWwj+exu+WumuS9jSk7XFxuICAgICAgICAgICAgICAgICAgICAvL31cXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v5aSn57G7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMuZm9yRWFjaCgoaXRlbSwga2V5KSA9PiB7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbGV0IHRpdGxlID0gcGRmaChpdGVtLCBf5aSn57G75qCH6aKYKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gc3AoaXRlbS50aXRsZSk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yg5o6S6ZmkICE9IFxcXCJ1bmRlZmluZWRcXFwiICYmIOaOkumZpCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSB0aXRsZS5yZXBsYWNlKG5ld1JlZ0V4cCjmjpLpmaQsIFxcXCJnXFxcIiksIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQganNvbiA9ICcnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSBpdGVtLnVybDtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtcyA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVfdGVtcDogY2F0ZV90ZW1wLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJzOiDmuIXpmaQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uOiBqc29uLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IOeKtuaAgSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbGNsZWFyczog5YWo5riFLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xldCB1cmwgPSBwZChpdGVtLCBf5aSn57G76ZO+5o6lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IGl0ZW0udXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmlmICjlpKfnsbvlpITnkIYpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSDkuIDnuqfliIbnsbvlpITnkIYodXJsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSovXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKHVybClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogc3AodGhpcy5zZXRUaXRsZShrZXkudG9TdHJpbmcoKSwgY2F0ZV90ZW1wW2luZGV4XSwgdGl0bGUpKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoXFxcImhpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld19jYXRlID0gW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5jbGVhcnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hbGxjbGVhcnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ2NhdGVfYnV0dG9uJyk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5jYXRlX3RlbXAuZm9yRWFjaCgoY2F0ZSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jYXRlLnB1c2goaW5kZXggPT09IDAgPyBwYXJhbXMua2V5LnRvU3RyaW5nKCkgOiBcXFwiMFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImhlYWQuY2F0ZVxcXCIsIEpTT04uc3RyaW5naWZ5KG5ld19jYXRlKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMuanNvbi5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiZHRfXFxcIiArIHBhcmFtcy5qc29uLnR5cGUsIHBhcmFtcy5qc29uLnZhbHVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHBhcmFtcy5zdGF0ZSwgcGFyYW1zLmpzb24pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IE1ZX1JVTEUudGl0bGUgKyAnY2F0ZV9saW5lJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL+Wwj+exu1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXh0cmFwb3MgPSBmYWxzZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyppZiAoaXRlbS5pbmNsdWRlcygndHlwZT1cXFwiQGV4dHJhXFxcIicpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFwb3MgPSB0cnVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKCfpmYTliqDlrprkvY0nKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ki9cXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJhcG9zKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBzcChwZGZoKGl0ZW0sIFxcXCJhJiZUZXh0XFxcIikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiDmjpLpmaQgIT0gXFxcInVuZGVmaW5lZFxcXCIgJiYg5o6S6ZmkICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSB0aXRsZS5yZXBsYWNlKG5ldyBSZWdFeHAo5o6S6ZmkLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganNvbiA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBwZGZoKGl0ZW0sIFxcXCJhJiZzdGF0ZVxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwZGZoKGl0ZW0sIFxcXCJhJiZ2YWx1ZVxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIHRpdGxlID0gcGRmaChpdGVtLCDliIbnsbvmoIfpopgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gaXRlbS50aXRsZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yg5o6S6ZmkICE9IFxcXCJ1bmRlZmluZWRcXFwiICYmIOaOkumZpCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShuZXcgUmVnRXhwKOaOkumZpCwgXFxcImdcXFwiKSwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpzb24gPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qc3dpdGNoICh0cnVlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug5YiG57G76ZO+5o6lLmluY2x1ZGVzKFxcXCJAQEBcXFwiKTpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogcGRmaChpdGVtLCDliIbnsbvpk77mjqUuc3BsaXQoXFxcIkBAQFxcXCIpWzBdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwZGZoKGl0ZW0sIOWIhuexu+mTvuaOpS5zcGxpdChcXFwiQEBAXFxcIilbMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug5YiG57G76ZO+5o6lLmluY2x1ZGVzKFxcXCJAQFxcXCIpOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiDliIbnsbvpk77mjqUuc3BsaXQoXFxcIkBAXFxcIilbMF0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGRmaChpdGVtLCDliIbnsbvpk77mjqUuc3BsaXQoXFxcIkBAXFxcIilbMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IGl0ZW0udXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGpzb24gPSBwZChpdGVtLCDliIbnsbvpk77mjqUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSovXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0gaXRlbS51cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnZhciBqc29uPeWIhuexu+mTvuaOpS5pbmNsdWRlcygnQEBAJyk/e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTpwZGZoKGl0ZW0s5YiG57G76ZO+5o6lLnNwbGl0KCdAQEAnKVswXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTpwZGZoKGl0ZW0s5YiG57G76ZO+5o6lLnNwbGl0KCdAQEAnKVsxXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH06cGQoaXRlbSzliIbnsbvpk77mjqUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uPeWIhuexu+mTvuaOpS5pbmNsdWRlcygnQEAnKT97XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOuWIhuexu+mTvuaOpS5zcGxpdCgnQEAnKVswXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOnBkZmgoaXRlbSzliIbnsbvpk77mjqUuc3BsaXQoJ0BAJylbMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OnBkKGl0ZW0s5YiG57G76ZO+5o6lKTsqL1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbXMgPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlX3RlbXA6IGNhdGVfdGVtcCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogcGFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb246IGpzb24sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTog54q25oCBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsY2xlYXJzOiDlhajmuIUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuc2V0VGl0bGUoa2V5LnRvU3RyaW5nKCksIGNhdGVfdGVtcFtpbmRleF0sIHRpdGxlKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJChcXFwiaGlrZXI6Ly9lbXB0eVxcXCIgKyBcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgocGFyYW1zKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hbGxjbGVhcnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ2NhdGVfYnV0dG9uJyk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5jYXRlX3RlbXBbcGFyYW1zLmluZGV4XSA9IHBhcmFtcy5rZXkudG9TdHJpbmcoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImhlYWQuY2F0ZVxcXCIsIEpTT04uc3RyaW5naWZ5KHBhcmFtcy5jYXRlX3RlbXApKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5qc29uLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJkdF9cXFwiICsgcGFyYW1zLmpzb24udHlwZSwgcGFyYW1zLmpzb24udmFsdWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIocGFyYW1zLnN0YXRlLCBwYXJhbXMuanNvbik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM6IE1ZX1JVTEUudGl0bGUgKyAnY2F0ZV9idXR0b24nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM6IE1ZX1JVTEUudGl0bGUgKyAnY2F0ZV9idXR0b24nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoZm9sZCA9PT0gXFxcIjFcXFwiIHx8IOaKmOWPoOeKtuaAgSA9PSBmYWxzZSkge1xcbiAgICAgICAgICAgICAgICBpdGVtcyA9IGl0ZW1zLmNvbmNhdChjYXRlcyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChmb2xkID09PSBcXFwiMFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoJ2NhdGVfYnV0dG9uJywgY2F0ZXMpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2V0UHJlUmVzdWx0ICE9ICd1bmRlZmluZWQnKSB7XFxuICAgICAgICAgICAgICAgIGl0ZW1zID0gZC5jb25jYXQoaXRlbXMpO1xcbiAgICAgICAgICAgICAgICAvL+a4heepuue7p+aJv+aVsOe7hFxcbiAgICAgICAgICAgICAgICBkLmxlbmd0aCA9IDA7XFxuICAgICAgICAgICAgICAgIHNldFByZVJlc3VsdChpdGVtcyk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaChpdGVtKTtcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LFxcbiAgICB9O1xcbiAgICBvYmou6aKE6K6+KG9wdGlvbnMpO1xcbiAgICByZXR1cm4gb2JqO1xcbn1cXG5cXG52YXIg54q25oCBID1cXG4gICAgdHlwZW9mIOeKtuaAgeagh+iusCAhPSBcXFwidW5kZWZpbmVkXFxcIiAmJiDnirbmgIHmoIforrAgIT0gXFxcIlxcXCIgPyDnirbmgIHmoIforrAgOiBNWV9SVUxFLnVybDtcXG5cXG5sZXQgZHRfZGVidWcgPSBmYWxzZTtcXG5cXG5hZGRMaXN0ZW5lcihcXG4gICAgXFxcIm9uQ2xvc2VcXFwiLFxcbiAgICAkLnRvU3RyaW5nKCgpID0+IHt9KVxcbik7XFxuXFxudmFyIENyZWF0ZSA9IHtcXG4gICAgbmV4dFBhZ2U6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgdmFyIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB2YXIgbmV4dCA9IGV2YWwo5LiL5LiA6aG1KTtcXG4gICAgICAgICAgICAvL2xvZygnbjonK25leHQpXFxuICAgICAgICAgICAgaWYgKG5leHQgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfkuIvkuIDpobXpk77mjqXkuLrnqbonKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xcbiAgICAgICAgICAgIGlmICh0cnVlX3VybCA9PSBuZXh0KSB7XFxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAvL2xvZyhcXFwi5Y+v6IO95LiN5a2Y5Zyo5LiL5LiA6aG15oiW6ICF5LiL5LiA6aG15a6a5L2N5pyJ6Zeu6aKYXFxcIik7XFxuICAgICAgICAgICAgbG9nKFxcXCLplJnor6/kv6Hmga86XFxcIiArIGUubWVzc2FnZSk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoKG5leHQgPT0gXFxcIlxcXCIgfHwgbmV4dCA9PSB1bmRlZmluZWQpICYmIHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgIG5leHQgPSB0cnVlX3VybDtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgLy9yZXN1bHQ9ZmFsc2U7XFxuICAgICAgICAgICAgbmV4dCA9IGdldE15VmFyKOeKtuaAgSk7XFxuICAgICAgICB9XFxuICAgICAgICAvL2xvZygnbCcrdHJ1ZV91cmwpXFxuICAgICAgICAvL2xvZygnbicrbmV4dClcXG4gICAgICAgIGlmIChwYWdlICE9IDEpIHtcXG4gICAgICAgICAgICBpZiAodHJ1ZV91cmwgPT0gbmV4dCAmJiAhcmVzdWx0KSB7XFxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcXG4gICAgICAgIC8vcHV0TXlWYXIo54q25oCBLCBuZXh0KTtcXG4gICAgfSxcXG4gICAgZ2V0QmFja0ltYWdlOiBmdW5jdGlvbihpbWd1cmwpIHtcXG4gICAgICAgIHZhciByZXN1bHQgPSBpbWd1cmw7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHJlc3VsdCA9IC91cmwoPzpcXFxccyspP1xcXFwoKC4qPylcXFxcKS9nXFxuICAgICAgICAgICAgICAgIC5leGVjKGltZ3VybClbMV1cXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoLygnfFxcXCJ8JnF1b3Q7KS9nbSwgXFxcIlxcXCIpO1xcbiAgICAgICAgfSBjYXRjaCB7fVxcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcXG4gICAgfSxcXG4gICAgaHR0cEhhbmRsZTogZnVuY3Rpb24oaW5wdXQpIHtcXG4gICAgICAgIGlmIChpbnB1dC5zdGFydHNXaXRoKFxcXCJodHRwXFxcIikpIHtcXG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XFxuICAgICAgICB9IGVsc2UgaWYgKGlucHV0LnN0YXJ0c1dpdGgoXFxcIi8vXFxcIikpIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImh0dHBzOlxcXCIgKyBpbnB1dDtcXG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQuc3RhcnRzV2l0aChcXFwiL1xcXCIpKSB7XFxuICAgICAgICAgICAgcmV0dXJuIE1ZX0hPTUUgKyBpbnB1dDtcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgaW1nSGFuZGxlOiBmdW5jdGlvbihpdGVtLCBydWxlKSB7XFxuICAgICAgICB2YXIgaW1nID0gXFxcIlxcXCI7XFxuICAgICAgICBpZiAocnVsZS5pbWcuc3RhcnRzV2l0aChcXFwicGRcXFwiKSkge1xcbiAgICAgICAgICAgIGltZyA9IGV2YWwocnVsZS5pbWcpO1xcbiAgICAgICAgfSBlbHNlIGlmIChydWxlLmJhY2tpbWcpIHtcXG4gICAgICAgICAgICBpbWcgPSBwZGZoKGl0ZW0sIHJ1bGUuaW1nKTtcXG4gICAgICAgICAgICBpbWcgPSB0aGlzLmdldEJhY2tJbWFnZShpbWcpO1xcbiAgICAgICAgICAgIGltZyA9IHRoaXMuaHR0cEhhbmRsZShpbWcpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBpbWcgPSBwZGZoKGl0ZW0sIHJ1bGUuaW1nKTtcXG4gICAgICAgICAgICBpZiAoIWltZy5zdGFydHNXaXRoKFxcXCJodHRwXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgaW1nID0gcGQoaXRlbSwgcnVsZS5pbWcpO1xcbiAgICAgICAgICAgICAgICBpbWcgPSB0aGlzLmh0dHBIYW5kbGUoaW1nKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gaW1nICsgcnVsZS5yZWY7XFxuICAgIH0sXFxuICAgIHVybEhhbmRsZTogZnVuY3Rpb24oaXRlbSwgcnVsZSkge1xcbiAgICAgICAgdmFyIGhyZWYgPSBcXFwiXFxcIjtcXG4gICAgICAgIGlmIChydWxlLnVybC5zdGFydHNXaXRoKFxcXCJwZFxcXCIpKSB7XFxuICAgICAgICAgICAgaHJlZiA9IGV2YWwocnVsZS51cmwpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBocmVmID0gcGQoaXRlbSwgcnVsZS51cmwpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaHJlZiA9IHJ1bGUuaW10ID8gaHJlZiArIFxcXCIjaW1tZXJzaXZlVGhlbWUjI2F1dG9DYWNoZSNcXFwiIDogaHJlZjtcXG4gICAgICAgIHJldHVybiBocmVmO1xcbiAgICB9LFxcbiAgICBzZXRDb250ZW50OiBmdW5jdGlvbihpdGVtLCBpbnB1dCkge1xcbiAgICAgICAgbGV0IG91dHB1dCA9IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKGlucHV0ID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aChcXFwicGRcXFwiKSkge1xcbiAgICAgICAgICAgIG91dHB1dCA9IGV2YWwoaW5wdXQpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBvdXRwdXQgPSBwZGZoKGl0ZW0sIGlucHV0KTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XFxuICAgIH0sXFxuICAgIHJlZnJlc2g6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgYWRkTGlzdGVuZXIoXFxuICAgICAgICAgICAgXFxcIm9uUmVmcmVzaFxcXCIsXFxuICAgICAgICAgICAgJC50b1N0cmluZygodSkgPT4ge1xcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKFxcXCJ5aWxpc3RcXFwiKTtcXG4gICAgICAgICAgICAgICAgLy92YXIgcCA9IHN0b3JhZ2UwLmdldE15VmFyKCdzcGFnZScsICcnKTtcXG4gICAgICAgICAgICAgICAgLy9wdXRNeVZhcih1LCBwKTtcXG4gICAgICAgICAgICB9LCDnirbmgIEpXFxuICAgICAgICApO1xcbiAgICB9LFxcbiAgICBnZXRCb29sZWFuVmFsdWU6IGZ1bmN0aW9uKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcXG4gICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gQm9vbGVhbih2YWx1ZSkgOiAoZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiB0cnVlKTtcXG4gICAgfSxcXG4gICAgZGVidWdsb2c6IGZ1bmN0aW9uKGksIGl0ZW0sIHJ1bGUsIG9iaikge1xcbiAgICAgICAgbG9nKCctLS0tLS0tLS0tJyArIChpICsgMSkgKyAnOuiwg+ivleW8gOWniy0tLS0tLS0tLS0nKTtcXG4gICAgICAgIGlmIChpdGVtLmNvbnN0cnVjdG9yID09IE9iamVjdCkge1xcbiAgICAgICAgICAgIGl0ZW0gPSBKU09OLnN0cmluZ2lmeShpdGVtKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGxvZygnaXRlbeWGheWuuTpcXFxcclxcXFxuJyArIGl0ZW0gKyAnXFxcXHJcXFxcbicgK1xcbiAgICAgICAgICAgIGBcXFxcblxcXFx0dGl0bGXlrprkvY06ICAke3J1bGUudGl0bGV9ICAtLS0+IOe7k+aenDogICR7b2JqLnRpdGxlfWAgK1xcbiAgICAgICAgICAgIGBcXFxcblxcXFx0ZGVzY+WumuS9jTogICR7cnVsZS5kZXNjfSAgLS0tPiDnu5Pmnpw6ICAke29iai5kZXNjfWAgK1xcbiAgICAgICAgICAgIGBcXFxcblxcXFx0aW1n5a6a5L2NOiAgJHtydWxlLmltZ30gIC0tLT4g57uT5p6cOiAgJHtvYmouaW1nfWAgK1xcbiAgICAgICAgICAgIChydWxlLmNvbnRlbnQgIT0gdW5kZWZpbmVkID8gYFxcXFxuXFxcXHRjb250ZW505a6a5L2NOiAgJHtydWxlLmNvbnRlbnR9ICAtLS0+IOe7k+aenDogICR7b2JqLmNvbnRlbnR9YCA6ICcnKSArXFxuICAgICAgICAgICAgYFxcXFxuXFxcXHR1cmzlrprkvY06ICAke3J1bGUudXJsfSAgLS0tPiDnu5Pmnpw6ICAke29iai51cmx9YFxcbiAgICAgICAgKTtcXG4gICAgICAgIGxvZygnLS0tLS0tLS0tLScgKyAoaSArIDEpICsgJzrosIPor5Xnu5PmnZ8tLS0tLS0tLS0tJyk7XFxuICAgIH0sXFxuICAgIGpzb25MaXN0OiBmdW5jdGlvbihhcnIsIGpzb24sIHJ1bGUpIHtcXG4gICAgICAgIGlmIChqc29uLmNvbnN0cnVjdG9yICE9IE9iamVjdCkge1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGpzb24gPSBKU09OLnBhcnNlKGpzb24pO1xcbiAgICAgICAgICAgIH0gY2F0Y2gge31cXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChqc29uW3J1bGUubGlzdF0gPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgYXJyLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxmb250IGNvbG9yPVxcXCJncmV5XFxcIj48c21hbGw+5peg5YaF5a65PC9zbWFsbD48L2ZvbnQ+JyxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7fSxcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICByZXR1cm47XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgZGVidWcgPSB0aGlzLmdldEJvb2xlYW5WYWx1ZShydWxlLmRlYnVnLCBmYWxzZSk7XFxuICAgICAgICB2YXIgZW1wdHkgPSB0aGlzLmdldEJvb2xlYW5WYWx1ZShydWxlLmVtcHR5KTtcXG4gICAgICAgIGlmIChkZWJ1Zykge1xcbiAgICAgICAgICAgIGxvZygn5a6a5L2N5YiX6KGoOicgKyBydWxlLmxpc3QpO1xcbiAgICAgICAgfVxcbiAgICAgICAganNvbltydWxlLmxpc3RdLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSBzcChldmFsKHJ1bGUudGl0bGUpKTtcXG4gICAgICAgICAgICB2YXIgZGVzYyA9IHNwKGV2YWwocnVsZS5kZXNjKSk7XFxuICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBzcChldmFsKHJ1bGUuY29udGVudCkpO1xcbiAgICAgICAgICAgIHZhciBpbWcgPSBldmFsKHJ1bGUuaW1nKSArIHJ1bGUucmVmO1xcbiAgICAgICAgICAgIHZhciBocmVmID0gZXZhbChydWxlLnVybCk7XFxuICAgICAgICAgICAgdmFyIHVybCA9IHJ1bGUuaW10ID8gaHJlZiArIFxcXCIjaW1tZXJzaXZlVGhlbWUjI2F1dG9DYWNoZSNcXFwiIDogaHJlZjtcXG4gICAgICAgICAgICB2YXIgbGF6eSA9IHJ1bGUubGF6eSA/IHJ1bGUubGF6eSA6IFxcXCJcXFwiO1xcblxcbiAgICAgICAgICAgIHZhciBkZCA9IHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLFxcbiAgICAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50LFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICAgICAgICAgIHVybDogKGVtcHR5ID8gXFxcImhpa2VyOi8vZW1wdHkjI1xcXCIgOiAnJykgKyB1cmwsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBydWxlLmNvbF90eXBlLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgfTtcXG5cXG4gICAgICAgICAgICBpZiAoZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHJ4ID0ge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCxcXG4gICAgICAgICAgICAgICAgICAgIHVybFxcbiAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICB0aGlzLmRlYnVnbG9nKGksIGl0ZW0sIHJ1bGUsIHJ4KTtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgaWYgKGxhenkgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgZGRbXFxcInVybFxcXCJdID0gaHJlZiArIGxhenk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGFyci5wdXNoKGRkKTtcXG4gICAgICAgIH0pO1xcbiAgICB9LFxcbiAgICBydWxlTGlzdDogZnVuY3Rpb24oYXJyLCBodG1sLCBydWxlKSB7XFxuICAgICAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCxcXG4gICAgICAgICAgICBydWxlLmxpc3QpO1xcbiAgICAgICAgdmFyIGRlYnVnID0gdGhpcy5nZXRCb29sZWFuVmFsdWUocnVsZS5kZWJ1ZyxcXG4gICAgICAgICAgICBmYWxzZSk7XFxuICAgICAgICB2YXIgZW1wdHkgPSB0aGlzLmdldEJvb2xlYW5WYWx1ZShydWxlLmVtcHR5KTtcXG4gICAgICAgIGlmIChkZWJ1Zykge1xcbiAgICAgICAgICAgIGxvZygn5a6a5L2N5YiX6KGoOicgKyBydWxlLmxpc3QpO1xcbiAgICAgICAgfVxcbiAgICAgICAgbGlzdC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxuICAgICAgICAgICAgdmFyIHRpdGxlID0gc3AodGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUudGl0bGUpKTtcXG4gICAgICAgICAgICB2YXIgZGVzYyA9IHNwKHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmRlc2MpKTtcXG4gICAgICAgICAgICB2YXIgaW1nID0gdGhpcy5pbWdIYW5kbGUoaXRlbSwgcnVsZSk7XFxuICAgICAgICAgICAgdmFyIHVybCA9IHRoaXMudXJsSGFuZGxlKGl0ZW0sIHJ1bGUpO1xcbiAgICAgICAgICAgIHZhciBjb250ZW50ID0gc3AodGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUuY29udGVudCkpO1xcblxcbiAgICAgICAgICAgIGlmIChkZWJ1Zykge1xcbiAgICAgICAgICAgICAgICB2YXIgcnggPSB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2MsXFxuICAgICAgICAgICAgICAgICAgICBpbWcsXFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxcbiAgICAgICAgICAgICAgICAgICAgdXJsXFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIHRoaXMuZGVidWdsb2coaSwgaXRlbSwgcnVsZSwgcngpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICB2YXIgbGF6eSA9IHJ1bGUubGF6eSA/IHJ1bGUubGF6eSA6IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIHZhciBkZCA9IHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICAgICAgICAgIHVybDogKGVtcHR5ID8gXFxcImhpa2VyOi8vZW1wdHkjI1xcXCIgOiAnJykgKyB1cmwsXFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBydWxlLmNvbF90eXBlLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICBpZiAobGF6eSAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICBkZFtcXFwidXJsXFxcIl0gPSB1cmwgKyBsYXp5O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBhcnIucHVzaChkZCk7XFxuICAgICAgICB9KTtcXG4gICAgfSxcXG4gICAgTGlzdDogZnVuY3Rpb24oYXJyLCBodG1sLCBydWxlLCBwYXJhbSkge1xcbiAgICAgICAgcGFyYW0gPSBwYXJhbSA/IHBhcmFtIDoge307XFxuICAgICAgICB2YXIgYXV0byA9IHBhcmFtLmF1dG8gPyBwYXJhbS5hdXRvIDogZmFsc2U7XFxuICAgICAgICB2YXIgc2hvdyA9IHBhcmFtLnNob3cgPyBwYXJhbS5zaG93IDogZmFsc2U7XFxuICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgLy90aGlzLnNwYWdlLnNldCh0cnVlX3VybCk7XFxuICAgICAgICB9XFxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcXG4gICAgICAgIHZhciBkZWJ1ZyA9IHRoaXMuZ2V0Qm9vbGVhblZhbHVlKHJ1bGUuZGVidWcsIGZhbHNlKTtcXG4gICAgICAgIHZhciBlbXB0eSA9IHRoaXMuZ2V0Qm9vbGVhblZhbHVlKHJ1bGUuZW1wdHkpO1xcbiAgICAgICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsIHJ1bGUubGlzdCk7XFxuICAgICAgICBpZiAoZGVidWcpIHtcXG4gICAgICAgICAgICBsb2coJ+WumuS9jeWIl+ihqDonICsgcnVsZS5saXN0KTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKHRoaXMubmV4dFBhZ2UoKSlcXG4gICAgICAgIGlmICgoc3RvcmFnZTAuZ2V0TXlWYXIoJ3lpX2lzbmV4dCcsICd0JykgPT0gJ3QnICYmIGxpc3QubGVuZ3RoID4gMCkgfHwgcGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgbGlzdC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0oXFxcInBhZ2VudW1cXFwiKTtcXG4gICAgICAgICAgICAgICAgZGVsZXRlSXRlbShcXFwicGFnZWxpbmVcXFwiKTtcXG4gICAgICAgICAgICAgICAgdmFyIGlkID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgIHZhciBjbHMgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gc3AodGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUudGl0bGUpKTtcXG4gICAgICAgICAgICAgICAgdmFyIGRlc2MgPSBzcCh0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS5kZXNjKSk7XFxuICAgICAgICAgICAgICAgIHZhciBpbWcgPSB0aGlzLmltZ0hhbmRsZShpdGVtLCBydWxlKTtcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IHRoaXMudXJsSGFuZGxlKGl0ZW0sIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IHNwKHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmNvbnRlbnQpKTtcXG5cXG4gICAgICAgICAgICAgICAgaWYgKGRlYnVnKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgcnggPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmxcXG4gICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlYnVnbG9nKGksIGl0ZW0sIHJ1bGUsIHJ4KTtcXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICBpZiAoaSA9PSBsaXN0Lmxlbmd0aCAtIDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlkID0gXFxcImxhc3RpZF9cXFwiICsgcGFnZTtcXG4gICAgICAgICAgICAgICAgICAgIGNscyA9IFxcXCJsYXN0bWFya1xcXCI7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IGRlc2MsXFxuICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IChlbXB0eSA/IFxcXCJoaWtlcjovL2VtcHR5IyNcXFwiIDogJycpICsgdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogY29udGVudCxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBydWxlLmNvbF90eXBlLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBjbHMsXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgaWYgKGkgPT0gbGlzdC5sZW5ndGggLSAxICYmIHNob3cpIHtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJsaW5lXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXFxcInBhZ2VsaW5lXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdPHNtYWxsPuWKoOi9veS4rS4uLjwvc21hbGw+XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcXFwicGFnZW51bVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oXFxcInBhZ2VudW1cXFwiLCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPjxzbWFsbD7liLDlupXkuoY8L3NtYWxsPjwvZm9udD4nLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBcXFwibGFzdFxcXCIsXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT0gMCAmJiBwYWdlID09IDEpIHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVcXFwiLFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPjxzbWFsbD7ml6DlhoXlrrk8L3NtYWxsPjwvZm9udD4nLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHt9LFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHRoaXMubmV4dFBhZ2UoKSkge1xcbiAgICAgICAgICAgIC8vbG9nKCd0Jyk7XFxuICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoJ3lpX2lzbmV4dCcsICd0Jyk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIC8vbG9nKCdmJyk7XFxuICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoJ3lpX2lzbmV4dCcsICdmJyk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoYXV0bykge1xcbiAgICAgICAgICAgIC8vY3JlYXRlTmV4dFBhZ2UoKTtcXG4gICAgICAgICAgICBhdXRvUGFnZSgpO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbn07XFxuXFxudmFyIGV4dE1ldGhvZCA9IHtcXG4gICAgVG9QYXJhbXM6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgdmFyIGpzb24gPSBhcmd1bWVudHNbMF07XFxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoanNvbilcXG4gICAgICAgICAgICAubWFwKChrZXkpID0+IGtleSArIFxcXCI9XFxcIiArIGpzb25ba2V5XSlcXG4gICAgICAgICAgICAuam9pbihcXFwiJlxcXCIpO1xcbiAgICB9LFxcbiAgICB1cmxQYXJzZTogZnVuY3Rpb24odSkge1xcbiAgICAgICAgdmFyIGRpY3QgPSB7fTtcXG4gICAgICAgIGRpY3QuU291cmNlID0gdTtcXG4gICAgICAgIGxldCBwYXJhbXMgPSAodXJsKSA9PiB7XFxuICAgICAgICAgICAgbGV0IHF1ZXJ5UGFyYW1zID0ge307XFxuICAgICAgICAgICAgbGV0IHJlZyA9IC8oW14/PSZdKyk9KFtePz0mXSspL2c7XFxuICAgICAgICAgICAgdXJsLnJlcGxhY2UocmVnLCBmdW5jdGlvbigpIHtcXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNbYXJndW1lbnRzWzFdXSA9IGFyZ3VtZW50c1syXTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICByZXR1cm4gcXVlcnlQYXJhbXM7XFxuICAgICAgICB9O1xcbiAgICAgICAgdmFyIGphdmFVcmwgPSBKYXZhSW1wb3J0ZXIoamF2YS5uZXQuVVJMKTtcXG4gICAgICAgIHdpdGgoamF2YVVybCkge1xcbiAgICAgICAgICAgIHZhciB1cmwgPSBuZXcgVVJMKHUpO1xcbiAgICAgICAgICAgIGRpY3QuUHJvdG9jb2wgPSB1cmwuZ2V0UHJvdG9jb2woKTtcXG4gICAgICAgICAgICBkaWN0Lkhvc3QgPSB1cmwuZ2V0SG9zdCgpO1xcbiAgICAgICAgICAgIGRpY3QuUG9ydCA9IHVybC5nZXRQb3J0KCk7XFxuICAgICAgICAgICAgZGljdC5GaWxlID0gdXJsLmdldEZpbGUoKTtcXG4gICAgICAgICAgICBkaWN0LlBhdGggPSB1cmwuZ2V0UGF0aCgpO1xcbiAgICAgICAgICAgIGRpY3QuUmVmID0gdXJsLmdldFJlZigpO1xcbiAgICAgICAgICAgIGRpY3QuSG9zdHMgPSBgJHtkaWN0LlByb3RvY29sfTovLyR7dXJsLmdldEhvc3QoKX1gO1xcbiAgICAgICAgfVxcbiAgICAgICAgZGljdC5QYXJhbXMgPSBwYXJhbXModSk7XFxuICAgICAgICByZXR1cm4gZGljdDtcXG4gICAgfSxcXG4gICAgaXNFcXVhbDogZnVuY3Rpb24oeCwgeSkge1xcbiAgICAgICAgY29uc3Qgb2sgPSBPYmplY3Qua2V5cyxcXG4gICAgICAgICAgICB0eCA9IHR5cGVvZiB4LFxcbiAgICAgICAgICAgIHR5ID0gdHlwZW9mIHk7XFxuICAgICAgICByZXR1cm4geCAmJiB5ICYmIHR4ID09PSBcXFwib2JqZWN0XFxcIiAmJiB0eCA9PT0gdHkgP1xcbiAgICAgICAgICAgIG9rKHgpLmxlbmd0aCA9PT0gb2soeSkubGVuZ3RoICYmXFxuICAgICAgICAgICAgb2soeCkuZXZlcnkoKGtleSkgPT4gdGhpcy5pc0VxdWFsKHhba2V5XSwgeVtrZXldKSkgOiB4ID09PSB5O1xcbiAgICB9LFxcbiAgICBmaW5kRGlmZmVyZW50SW5kZXg6IGZ1bmN0aW9uKHN0cjEsIHN0cjIpIHtcXG4gICAgICAgIGNvbnN0IGRpZmZDaGFycyA9IFtdO1xcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgaWYgKHN0cjFbaV0gIT09IHN0cjJbaV0pIHtcXG4gICAgICAgICAgICAgICAgZGlmZkNoYXJzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXFxuICAgICAgICAgICAgICAgICAgICBzMTogc3RyMVtpXSxcXG4gICAgICAgICAgICAgICAgICAgIHMyOiBzdHIyW2ldLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gZGlmZkNoYXJzO1xcbiAgICB9LFxcbiAgICByZXBsYWNlQ2hhckF0OiBmdW5jdGlvbihzdHIsIGluZGV4LCByZXBsYWNlbWVudCkge1xcbiAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBzdHIubGVuZ3RoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHN0cjtcXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKGluZGV4KVxcbiAgICAgICAgY29uc3QgYXJyID0gc3RyLnNwbGl0KFxcXCJcXFwiKTtcXG4gICAgICAgIGFycltpbmRleF0gPSByZXBsYWNlbWVudDtcXG4gICAgICAgIHJldHVybiBhcnIuam9pbihcXFwiXFxcIik7XFxuICAgIH0sXFxuICAgIGdldE9iamVjdEtleXNEaWZmOiBmdW5jdGlvbihvYmoxLCBvYmoyKSB7XFxuICAgICAgICBjb25zdCBkaWZmZXJlbnRLZXlzID0gW107XFxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gb2JqMSkge1xcbiAgICAgICAgICAgIGlmICghb2JqMi5oYXNPd25Qcm9wZXJ0eShrZXkpIHx8IG9iajFba2V5XSAhPT0gb2JqMltrZXldKSB7XFxuICAgICAgICAgICAgICAgIGRpZmZlcmVudEtleXMucHVzaChrZXkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIGZvciAobGV0IGtleSBpbiBvYmoyKSB7XFxuICAgICAgICAgICAgaWYgKCFvYmoxLmhhc093blByb3BlcnR5KGtleSkpIHtcXG4gICAgICAgICAgICAgICAgZGlmZmVyZW50S2V5cy5wdXNoKGtleSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGRpZmZlcmVudEtleXM7XFxuICAgIH0sXFxuICAgIGdldE5leHRVcmw6IGZ1bmN0aW9uKHNvdXJjZSwgdGFyZ2V0LCBwYXJhbXMpIHtcXG4gICAgICAgIHZhciB1MSA9IHRoaXMudXJsUGFyc2Uoc291cmNlKTtcXG4gICAgICAgIHZhciB1MiA9IHRoaXMudXJsUGFyc2UodGFyZ2V0KTtcXG4gICAgICAgIHZhciBwYSA9IHVuZGVmaW5lZDtcXG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW1zID09IFxcXCJvYmplY3RcXFwiKSB7XFxuICAgICAgICAgICAgcGEgPSBwYXJhbXMuaGFzT3duUHJvcGVydHkoXFxcIueJueW+gVxcXCIpID8gcGFyYW1zLueJueW+gSA6IHVuZGVmaW5lZDtcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBuZXh0dXJsID0gc291cmNlO1xcbiAgICAgICAgdmFyIGNhID0gT2JqZWN0LmtleXModTIuUGFyYW1zKS5sZW5ndGggPT0gMCA/IFxcXCJcXFwiIDogXFxcIj9cXFwiO1xcbiAgICAgICAgaWYgKHBhICE9IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgIHZhciBycyA9IFN0cmluZyh1Mi5QYXRoKS5yZXBsYWNlKG5ldyBSZWdFeHAocGEpLCBcXFwiJDFmeXBhZ2VcXFwiKTtcXG4gICAgICAgICAgICBuZXh0dXJsID0gdTIuSG9zdHMgKyBycyArIGNhICsgdGhpcy5Ub1BhcmFtcyh1Mi5QYXJhbXMpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBpZiAodGhpcy5pc0VxdWFsKHUxLlBhcmFtcywgdTIuUGFyYW1zKSkge1xcbiAgICAgICAgICAgICAgICBpZiAoZHRfZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyh1MS5QYXRoKTtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyh1Mi5QYXRoKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB2YXIgZGYgPSB0aGlzLmZpbmREaWZmZXJlbnRJbmRleChTdHJpbmcodTEuUGF0aCksIFN0cmluZyh1Mi5QYXRoKSk7XFxuICAgICAgICAgICAgICAgIGlmIChkdF9kZWJ1Zykge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKGRmKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoZGYubGVuZ3RoID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciByZSA9IGRmWzBdLmluZGV4O1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGYgPSBkZi5maWx0ZXIoKHgpID0+IC9cXFxcZCsvLnRlc3QoeC5zMikpO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlID0gZlswXS5pbmRleDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB2YXIgZXEgPSB0aGlzLnJlcGxhY2VDaGFyQXQoU3RyaW5nKHUyLlBhdGgpLCByZSwgXFxcImZ5cGFnZVxcXCIpO1xcbiAgICAgICAgICAgICAgICBuZXh0dXJsID0gdTIuSG9zdHMgKyBlcSArIGNhICsgdGhpcy5Ub1BhcmFtcyh1Mi5QYXJhbXMpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHZhciBlcCA9IHRoaXMuZ2V0T2JqZWN0S2V5c0RpZmYodTEuUGFyYW1zLCB1Mi5QYXJhbXMpXFxuICAgICAgICAgICAgICAgIGlmIChlcC5sZW5ndGggPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgdTEuUGFyYW1zW2VwWzBdXSA9ICdmeXBhZ2UnXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBsb2coZXApO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHZhciBlcSA9IFN0cmluZyh1MS5QYXRoKS5yZXBsYWNlKC9cXFxcZCsvLCBcXFwiZnlwYWdlXFxcIik7XFxuICAgICAgICAgICAgICAgIG5leHR1cmwgPSB1MS5Ib3N0cyArIGVxICsgY2EgKyB0aGlzLlRvUGFyYW1zKHUxLlBhcmFtcyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgLy9sb2coJ25leHQ6JytuZXh0dXJsKVxcbiAgICAgICAgcmV0dXJuIG5leHR1cmw7XFxuICAgIH0sXFxufTtcXG5cXG5mdW5jdGlvbiBnZXRUcnVlbGluayhtYXJrLCB1cmwsIHBhZ2UpIHtcXG4gICAgdmFyIHAgPSBnZXRNeVZhcihtYXJrLCB1cmwpLnJlcGxhY2UoXFxcImZ5cGFnZVxcXCIsIHBhZ2UpO1xcbiAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICByZXR1cm4gZ2V0TXlWYXIoXFxcInlpX2ZpcnN0cGFnZVxcXCIsIHApO1xcbiAgICB9IGVsc2UgaWYgKHAgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIHJldHVybiBwO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcmV0dXJuIHVybDtcXG4gICAgfVxcbn1cXG4vL+aehOW7ulxcbmZ1bmN0aW9uIGNyZWF0ZU5leHRQYWdlKCkge1xcbiAgICBsZXQgc3RhcnRudW0gPSAxO1xcbiAgICB2YXIgb2JqID0gYXJndW1lbnRzWzBdO1xcbiAgICBpZiAodHJ1ZV91cmwgIT0gZ2V0TXlWYXIoXFxcInlpX3BhZ2V1cmxcXFwiLCBcXFwiXFxcIikpIHtcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcInlpX3BhZ2V1cmxcXFwiKTtcXG4gICAgfVxcbiAgICBpZiAocGFnZSA9PSBzdGFydG51bSAmJiBnZXRNeVZhcihcXFwieWlfcGFnZXVybFxcXCIpID09IFxcXCJcXFwiKSB7XFxuICAgICAgICBwdXRNeVZhcihcXFwieWlfZmlyc3RwYWdlXFxcIiwgdHJ1ZV91cmwpO1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB2YXIgbmV4dCA9IGV2YWwo5LiL5LiA6aG1KTtcXG4gICAgICAgICAgICAvL2xvZyhcXFwibmV4dFxcXCIpO1xcbiAgICAgICAgICAgIC8vbG9nKG5leHQpO1xcbiAgICAgICAgfSBjYXRjaCB7XFxuICAgICAgICAgICAgbG9nKFxcXCLlj6/og73kuI3lrZjlnKjkuIvkuIDpobXmiJbogIXkuIvkuIDpobXlrprkvY3mnInpl67pophcXFwiKTtcXG4gICAgICAgICAgICBuZXh0ID0gXFxcIlxcXCI7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAobmV4dCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgIHZhciBueHVybCA9IGV4dE1ldGhvZC5nZXROZXh0VXJsKHRydWVfdXJsLCBuZXh0LCBvYmopO1xcbiAgICAgICAgICAgIC8vbG9nKFxcXCJueHVybDpcXFwiICsgbnh1cmwpO1xcbiAgICAgICAgICAgIHB1dE15VmFyKOeKtuaAgSwgbnh1cmwpO1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJ5aV9wYWdldXJsXFxcIiwgbnh1cmwpO1xcbiAgICAgICAgfVxcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIGF1dG9QYWdlKCkge1xcbiAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICBwdXRNeVZhcihcXFwieWlfZmlyc3RwYWdlXFxcIiwgdHJ1ZV91cmwpO1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgICB2YXIgbmV4dCA9IGV2YWwo5LiL5LiA6aG1KTtcXG4gICAgICAgIC8vbG9nKFxcXCJuZXh0XFxcIik7XFxuICAgICAgICAvL2xvZygnbmV4dDonK25leHQpO1xcbiAgICB9IGNhdGNoIHtcXG4gICAgICAgIGxvZyhcXFwi5Y+v6IO95LiN5a2Y5Zyo5LiL5LiA6aG15oiW6ICF5LiL5LiA6aG15a6a5L2N5pyJ6Zeu6aKYXFxcIik7XFxuICAgICAgICBuZXh0ID0gXFxcIlxcXCI7XFxuICAgIH1cXG4gICAgaWYgKG5leHQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIHB1dE15VmFyKOeKtuaAgSwgbmV4dCk7XFxuICAgIH1cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLku4vnu41cIixcInBhdGhcIjpcImludHJvZHVjZVwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXVxcbmQucHVzaCh7XFxuaW1nOiBNWV9QQVJBTVMuaW1nLFxcbnVybDogTVlfUEFSQU1TLmltZyxcXG5jb2xfdHlwZTpcXFwicGljXzFfZnVsbFxcXCIsXFxufSlcXG5kLnB1c2goe1xcbnRpdGxlOiBNWV9QQVJBTVMuaW50cm9kdWNlLFxcbmNvbF90eXBlOlxcXCJyaWNoX3RleHRcXFwiLFxcbn0pXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pCc57SiXCIsXCJwYXRoXCI6XCJzZWFyY2hcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxucmMoZmV0Y2hQQygnaHR0cHM6Ly9naXRlZS5jb20vbWlzdHl3YXRlci9oaWtlcl9pbmZvL3Jhdy9tYXN0ZXIvZ2l0aHVicHJveHkuanNvbicpICsgJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9taXN0eXdhdGVyL2hpa2VyL21haW4vZicsIDI0KTtcXG5jb25zdCBwYWdlID0gTVlfUEFHRTtcXG5sb2cocGFnZSlcXG52YXIgVVJMPSBNWV9QQVJBTVMudXJsK3BhZ2U7XFxubG9nKFVSTClcXG4vL3ZhciBodG1sID0gZ2V0UmVzQ29kZSgpO1xcblxcbmxldCBub3cgPSBnZXRJdGVtKCdub3cnLCAn5pyA5aSa54K55Ye7Jyk7XFxuaWYoTVlfUEFHRT09MSl7XFxuZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5qCH562+5pCc57Si77yaXFxcIisn4oCY4oCY4oCZ4oCZPHN0cm9uZz48Zm9udCBjb2xvcj1cXFwiI2ZmMTQ5M1xcXCI+JytNWV9QQVJBTVMudGl0bGUrJzwvZm9udD48L3N0cm9uZz4nLFxcbiAgICAgICAgdXJsOiBcXFwidG9hc3Q6Ly9cXFwiK01ZX1BBUkFNUy50aXRsZStcXFwi8J+klFxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbmV4dHJhOntcXFwibGluZVZpc2libGVcXFwiOmZhbHNlfVxcbiAgICB9KVxcbmxldCBhcnIgPSBbXFxcIuacgOWkmueCueWHu1xcXCIsXFxcIuacgOaWsFxcXCIsXFxcIuacgOWkmueIseW/g1xcXCIsXFxcIuacgOWkmuWbvueJh1xcXCJdO1xcbmZvciAobGV0IGl0IG9mIGFycikge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogbm93ID09IGl0ID8gJ+KAnOKAnOKAneKAnScgKyBpdC5mb250Y29sb3IoJ3JlZCcpIDogaXQsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGl0KSA9PiB7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcIm5vd1xcXCIsIGl0KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LCBpdClcXG4gICAgICAgIH0pXFxuICAgIH1cXG59XFxuaWYgKG5vdyA9PSAn5pyA5aSa54K55Ye7Jykge1xcbnZhciBodG1sID0gZmV0Y2goVVJMKTtcXG59ZWxzZSBpZiAobm93ID09ICfmnIDmlrAnKSB7XFxudmFyIGh0bWwgPSBmZXRjaChVUkwucmVwbGFjZSgnbXYnLCdtcicpKTtcXG59ZWxzZSBpZiAobm93ID09ICfmnIDlpJrniLHlv4MnKSB7XFxudmFyIGh0bWwgPSBmZXRjaChVUkwucmVwbGFjZSgnbXYnLCd0ZicpKTtcXG59ZWxzZSBpZiAobm93ID09ICfmnIDlpJrlm77niYcnKSB7XFxudmFyIGh0bWwgPSBmZXRjaChVUkwucmVwbGFjZSgnbXYnLCdtcCcpKTtcXG59XFxudmFyIGxpc3QgPSBwZGZhKGh0bWwsICcubS0wJiYuY29sLXhzLTYnKTtcXG5mb3IgKHZhciBqIGluIGxpc3QpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBzcChwZGZoKGxpc3Rbal0sICdzcGFuLDEmJlRleHQnKSksXFxuICAgICAgICBkZXNjOiBzcChwZGZoKGxpc3Rbal0sICdzcGFuJiZUZXh0JykrJ1xcXFx0XFxcXHQnK3BkZmgobGlzdFtqXSwgJy5sYWJlbC1jYXRlZ29yeSYmVGV4dCcpK1xcXCIgXFxcIitwZGZoKGxpc3Rbal0sICcubGFiZWwtc3ViJiZUZXh0JykpLFxcbiAgICAgICAgaW1nOiBwZGZoKGxpc3Rbal0sICdpbWcmJmRhdGEtb3JpZ2luYWwnKSxcXG4gICAgICAgIHVybDogcGQobGlzdFtqXSwgJ2EmJmhyZWYnKSsnI2ltbWVyc2l2ZVRoZW1lIyNhdXRvQ2FjaGUjQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZWpcXFwiKScsXFxuY29sX3R5cGU6ICdtb3ZpZV8zJyxcXG4gICAgfSk7XFxufVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS6jOe6p1wiLFwicGF0aFwiOlwiZWpcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxudmFyIGptaGVhZGVycz17XFxcIlJlZmVyZXJcXFwiOlxcXCJodHRwczovLzE4Y29taWMudmlwL1xcXCIsXFxcIlVzZXItQWdlbnRcXFwiOlxcXCJNb3ppbGxhLzUuMCAoaVBob25lOyBDUFUgaVBob25lIE9TIDE2XzRfMSBsaWtlIE1hYyBPUyBYKSBBcHBsZVdlYktpdC82MDUuMS4xNSAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vMTYuNCBNb2JpbGUvMTVFMTQ4IFNhZmFyaS82MDQuMVxcXCIsXFxcIkNvb2tpZVxcXCI6XFxcImlwY291bnRyeT1ISztBVlM9ajdpNGdtdWV1YmJqaTM3ZWYwN2RyMGN1MDI7X19jZl9ibT1BbklCbVNlQlBfZHQ1WVU0QllOVkZONE1PZjVQQzVYUFFZRUpyNUpRb2dvLTE3MDU1Njg4MzQtMS1BVU5lMHVUdTdvWlpaTVhoWC9EZTNkVHQxK3p0UDUzamhsd2svb1NKTlZyQ1hQM0duR0ZES2VMZklCUTc4Y1JCbjdtL0RNcGFxRWRVV1RLTkk2YWFQeWc9O19fY2ZsYj0wMkRpdURGU1RnOTFtQUhDWG9rVmVMcHRId2FhUm5TUVJRZ3d6NDVXbW5USlU7Y292ZXI9MTtndWlkZT0xO2lwbTU9YTFlYjI3NjM1NjZhYTE0MzQ0ZWZiMmFmZmE0ODA1MDdcXFwifTtcXG4vL3ZhciBodG1sID0gZmV0Y2ggKE1ZX1VSTCx7aGVhZGVyczpqbWhlYWRlcnN9KTtcXG52YXIgaHRtbCA9IGdldFJlc0NvZGUoKTtcXG5yYyhmZXRjaFBDKCdodHRwczovL2dpdGVlLmNvbS9taXN0eXdhdGVyL2hpa2VyX2luZm8vcmF3L21hc3Rlci9naXRodWJwcm94eS5qc29uJykgKyAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21pc3R5d2F0ZXIvaGlrZXIvbWFpbi9mJywgMjQpO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZXI/cnVsZT3OsScpKS5ydWxlKTtcXG52YXIgY29udGVudHMgPSBwZGZhKGh0bWwsICcjaW50cm8tYmxvY2smJi50YWctYmxvY2snKVxcbnZhciBjb250ZW50ID0gY29udGVudHMubWFwKHggPT4gcGRmaCh4LCAnZGl2JiZUZXh0JykpO1xcbnZhciBpbnRyb2R1Y2UgPSBzcChwZGZoKGh0bWwsIFxcXCIjaW50cm8tYmxvY2smJi5wLWItNSYmVGV4dFxcXCIpKTtcXG52YXIgcGFnZWNvdW50PXNwKHBkZmgoaHRtbCwgXFxcIi5wYWdlY291bnQmJlRleHRcXFwiKSk7XFxudmFyIHZpZXdzID0gc3AoXFxcIvCfkY1cXFwiK3BkZmgoaHRtbCwgXFxcIi5saXN0LXN0eWxlLW5vbmUmJlRleHRcXFwiKStcXFwiICAgXFxcIitcXFwi8J+RgFxcXCIrcGRmaChodG1sLCBcXFwiLmxpc3Qtc3R5bGUtbm9uZSwxJiZUZXh0XFxcIikpO1xcbnZhciBhdXRob3IgPXBkZmEoaHRtbCwgJyNpbnRyby1ibG9jayYmLnRhZy1ibG9jaywzJiZhJyk7XFxudmFyIHRhZyA9IHBkZmEoaHRtbCwgJyNpbnRyby1ibG9jayYmLnRhZy1ibG9jaywyJiZhJyk7XFxudHJ5IHtcXG4gICAgdmFyIGRlc19waWMgPSBwZChodG1sLCAnYm9keSYmLnRodW1iLW92ZXJsYXksMSYmaW1nJiZzcmN8fGRhdGEtY2ZzcmMnKTtcXG4gICAgdmFyIGRlc19hdXRob3IgPSBzbWFsbChzcChwZGZoKGh0bWwsICdib2R5JiYucGFuZWwtaGVhZGluZyYmZGl2LDEmJlRleHQnKS5zdWJzdHJpbmcoMCwgMjApKydcXFxcbicrcGFyc2VEb21Gb3JIdG1sKGh0bWwsICdib2R5JiYucC10LTUsMCYmVGV4dCcpKydcXFxcbicrIHBhcnNlRG9tRm9ySHRtbChodG1sLCAnYm9keSYmLnAtdC01LDEmJlRleHQnKSksJ0YwRkZGRicpO1xcbiAgICB2YXIgZGVzX2Rlc2MgPSBzbWFsbChzcChwYWdlY291bnQrJ1xcXFxuJyt2aWV3cysnXFxcXG4nK2ludHJvZHVjZSksJzAwNjY5OScpO1xcbiAgICB2YXIgZGVzX3RpdGxlID0gc3AocGFyc2VEb21Gb3JIdG1sKGh0bWwsICdoMSYmVGV4dCcpKTtcXG4gICAgdmFyIGNvbnRzID0gcGRmYShodG1sLCAnYm9keSYmLmJ0bi10b29sYmFyJiZhJyk7XFxuICAgIGlmIChjb250cy5sZW5ndGggPT09IDApIHtcXG4gICAgY29udHMgPSBwZGZhKGh0bWwsICdib2R5JiYucmVhZC1ibG9jayYmYScpO1xcbiAgICB9XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogZGVzX2F1dGhvcixcXG4gICAgICAgIGRlc2M6IGRlc19kZXNjLFxcbiAgICAgICAgcGljX3VybDogZGVzX3BpYyxcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9pbnRyb2R1Y2Ujbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1cicsXFxuZXh0cmE6IHtcXG4gICAgICAgICAgICBpbWc6IGRlc19waWMsXFxuICAgICAgICAgICAgaW50cm9kdWNlOiBpbnRyb2R1Y2UsXFxuICAgICAgICAgICAgZ3JhZGllbnQ6IHRydWUgICAgICAgICAgICBcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuZC5wdXNoKHtcXG50aXRsZTogXFxcIuS9nOiAhfCfmYfigI3imYLvuI86XFxcIixcXG51cmw6ICd0b2FzdDovL+S4k+W/g+aJk/Cfm6nvuI8nLFxcbmNvbF90eXBlOiBcXFwiZmxleF9idXR0b25cXFwiLFxcbn0pXFxuYXV0aG9yLm1hcCh4ID0+IHtcXG5sZXQgYXV0aG9yX3RhZz1wZGZoKHgsJ2EmJlRleHQnKTtcXG5sZXQgdXJsID0gXFxcImh0dHBzOi8vMThjb21pYy1jLnh5ei9zZWFyY2gvcGhvdG9zP3NlYXJjaF9xdWVyeT1cXFwiK2F1dGhvcl90YWcrXFxcIiZtYWluX3RhZz0wJm89bXYmdD1hJnBhZ2U9XFxcIjtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogYXV0aG9yX3RhZyxcXG4gICAgdXJsOiB1cmwrJ2Z5cGFnZSNmdWxsVGhlbWUjI25vSGlzdG9yeSNAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9zZWFyY2hcXFwiKScsXFxuICAgY29sX3R5cGU6XFxcImZsZXhfYnV0dG9uXFxcIixcXG5leHRyYTp7dGl0bGU6IGF1dGhvcl90YWcsXFxuICAgICAgICB1cmw6IHVybH1cXG4gICB9KVxcbn0pXFxuZC5wdXNoKHtcXG5jb2xfdHlwZTogXFxcImxpbmVcXFwiXFxufSlcXG5kLnB1c2goe1xcbnRpdGxlOiBcXFwi5qCH562+8J+Pt++4jzpcXFwiLFxcbnVybDogJ3RvYXN0Oi8v5LiT5b+D5omT8J+bqe+4jycsXFxuY29sX3R5cGU6IFxcXCJmbGV4X2J1dHRvblxcXCIsXFxufSlcXG50YWcubWFwKHggPT4ge1xcbmxldCB0YWdzPXNwKHBkZmgoeCwnYSYmVGV4dCcpKTtcXG5sZXQgdXJsID0gXFxcImh0dHBzOi8vMThjb21pYy1jLnh5ei9zZWFyY2gvcGhvdG9zP3NlYXJjaF9xdWVyeT1cXFwiK3RhZ3MrXFxcIiZtYWluX3RhZz0wJm89bXYmdD1hJnBhZ2U9XFxcIjtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogdGFncyxcXG4gICAgdXJsOiB1cmwrJ2Z5cGFnZSNmdWxsVGhlbWUjI25vSGlzdG9yeSNAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9zZWFyY2hcXFwiKScsXFxuICAgY29sX3R5cGU6XFxcImZsZXhfYnV0dG9uXFxcIixcXG5leHRyYTp7dGl0bGU6IHRhZ3MsXFxuICAgICAgIHVybDogdXJsfVxcbiAgIH0pXFxufSlcXG5kLnB1c2goe1xcbmNvbF90eXBlOiBcXFwibGluZVxcXCJcXG59KVxcbmZ1bmN0aW9uIGptKCkge1xcbiAgICB2YXIgaHRtbCA9IHJlcXVlc3QoaW5wdXQpO1xcbiAgICB2YXIgbGlzdCA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwgXFxcIi5wYW5lbC1ib2R5JiZpbWc6bm90KFtkYXRhLWNmc3JjXSlcXFwiKTtcXG4gICAgdmFyIHBpY3MgPSBbXTtcXG4gICAgZm9yICh2YXIgaXRlbSBvZiBsaXN0KSB7XFxuICAgICAgICB2YXIgcGljVXJsID0gcGQoaXRlbSwgJ2ltZyYmZGF0YS1vcmlnaW5hbCcpO1xcbiAgICAgICAgbGV0IGRlY29kZSA9ICQoKS5pbWFnZSgocGljVXJsKSA9PiB7XFxuICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiZD9ydWxlPVxcXCIgKyBNWV9USVRMRSkocGljVXJsLCBpbnB1dCk7XFxuICAgICAgICB9LCBwaWNVcmwpO1xcbiAgICAgICAgcGljcy5wdXNoKHBpY1VybCArIGRlY29kZSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIFxcXCJwaWNzOi8vXFxcIiArIHBpY3Muam9pbihcXFwiJiZcXFwiKTtcXG59XFxuXFxuZnVuY3Rpb24gYmptKCkge1xcbiAgICBcXG4gICAgdmFyIGh0bWwgPSByZXF1ZXN0KGlucHV0KTtcXG4gICAgdmFyIGxpc3QgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsIFxcXCIucGFuZWwtYm9keSYmaW1nXFxcIik7XFxuICAgIHZhciBwaWNzID0gW107XFxuICAgIGZvciAodmFyIGl0ZW0gb2YgbGlzdCkge1xcbiAgICAgICAgdmFyIHBpY1VybCA9IHBkKGl0ZW0sICdpbWcmJmRhdGEtb3JpZ2luYWwnKTtcXG4gICAgICAgIHBpY3MucHVzaChwaWNVcmwpO1xcbiAgICB9XFxuICAgIHJldHVybiBcXFwicGljczovL1xcXCIgKyBwaWNzLmpvaW4oXFxcIiYmXFxcIik7XFxufVxcbiAgICB2YXIgbGF6eUptID0gJChcXFwiXFxcIikubGF6eVJ1bGUoam0pO1xcbiAgICB2YXIgbGF6eUJqbSA9ICQoXFxcIlxcXCIpLmxhenlSdWxlKGJqbSk7XFxuICAgIFxcbi8qZC5wdXNoKHtcXG4gICAgdGl0bGU6IGludHJvZHVjZS5zbGljZSgwLCA2NikgKyAoaW50cm9kdWNlLmxlbmd0aCA8IDYwID8gXFxcIlxcXCIgOiBcXFwiLi4uIOivpue7hlxcXCIubGluayhcXFwiaGlrZXI6Ly9wYWdlL2ludHJvZHVjZSNub1JlY29yZEhpc3RvcnkjI25vSGlzdG9yeSNcXFwiKSksXFxuICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGludHJvZHVjZTogaW50cm9kdWNlLFxcbiAgICB9XFxufSk7Ki9cXG4vL0Vyamkuc2V0RGVzYyhpbnRyb2R1Y2UucmVwbGFjZSgn5Y+Z6L+w77yaJywnJykpO1xcbiAgICB2YXIgY2hhcHRlckxpc3QgPSBbXTtcXG4gICAgLypkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLkuIvovb3mvKvnlLtcXFwiLFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL2Rvd25sb2FkLnZpZXcjbm9SZWNvcmRIaXN0b3J5IyNub1JlZnJlc2gjP3J1bGU95pys5Zyw6LWE5rqQ566h55CGJyxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGNoYXB0ZXJMaXN0OiBjaGFwdGVyTGlzdCxcXG4gICAgICAgICAgICBpbmZvOiB7XFxuICAgICAgICAgICAgICAgIGJvb2tOYW1lOiBkZXNfdGl0bGUsIC8v5ryr55S75ZCN56ewLFxcbiAgICAgICAgICAgICAgICBydWxlTmFtZTogTVlfUlVMRS50aXRsZSxcXG4gICAgICAgICAgICAgICAgYm9va1RvcFBpYzogZGVzX3BpYyxcXG4gICAgICAgICAgICAgICAgcGFyc2VDb2RlOiAkLnRvU3RyaW5nKGJqbSksXFxuICAgICAgICAgICAgICAgIGRlY29kZTogJC50b1N0cmluZygodGl0bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImQ/cnVsZT1cXFwiICsgdGl0bGUpKHVybCwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICB9LCBNWV9SVUxFLnRpdGxlKSxcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIGRlZmF1bHRWaWV3OiBcXFwiMVxcXCJcXG4gICAgICAgIH1cXG5cXG4gICAgfSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuacrOWcsOS5puaetlxcXCIsXFxuICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvTWFpbi52aWV3I25vUmVjb3JkSGlzdG9yeSMjbm9SZWZyZXNoIz9ydWxlPeacrOWcsOi1hOa6kOeuoeeQhicsXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICB9KTsqL1xcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IChnZXRNeVZhcignc2hzb3J0JykgPT09ICcxJykgPyAnPGI+PGZvbnQgY29sb3I9XFxcIiMxOUI4OURcXFwiPumAiembhumAhuW6jzwvZm9udD48Zm9udCBjb2xvcj1cXFwiI2ZmN2Y1MFxcXCI+4pa+PC9mb250PjwvYj4nOiAnPGI+PGZvbnQgY29sb3I9XFxcIiMxOUI4OURcXFwiPumAiembhuato+W6jzwvZm9udD48Zm9udCBjb2xvcj1cXFwiIzMzY2NjY1xcXCI+4pa0PC9mb250PjwvYj4nLFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICBsZXQgY29uZiA9IGdldE15VmFyKCdzaHNvcnQnKTtcXG4gICAgICAgICAgICBpZiAoY29uZiA9PSAnMScpIHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInNoc29ydFxcXCIsIFxcXCIwXFxcIik7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInNoc29ydFxcXCIsIFxcXCIxXFxcIilcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WIh+aNouaOkuW6j+aIkOWKnydcXG4gICAgICAgIH0pLFxcbiAgICAgICBwaWNfdXJsOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tZXNzeS85LnN2ZycsXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfaWNvbidcXG4gICAgfSk7XFxuXFxuXFxuICBpZiAoY29udHMubGVuZ3RoID09PSAwKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi54K55Ye755u05o6l6ZiF6K+7XFxcIixcXG4gICAgICAgICAgICB1cmw6IHVybCArIGxhenlCam0sXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+S4jeino+WvhicsXFxuICAgICAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHVybCwgbGF6eUJqbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsICsgbGF6eUJqbVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHVybCwgbGF6eUJqbSlcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfop6Plr4YnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh1cmwsIGxhenlKbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsICsgbGF6eUptXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdXJsLCBsYXp5Sm0pXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIF1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIGNoYXB0ZXJMaXN0LnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkZXNfdGl0bGUsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaHR0cHM6Ly9qbWNvbWljLm1lL3Bob3RvL1xcXCIgKyBNWV9VUkwuc3BsaXQoXFxcIlxcXFwvXFxcIilbNF1cXG4gICAgICAgIH0pO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgbGV0IGxpc3QgPSBjb250cy5tYXAodiA9PiB7XFxuICAgICAgICAgICAgbGV0IHRpdGxlID0gc3AocGRmaCh2LCAnYSYmVGV4dCcpKSxcXG4gICAgICAgICAgICAgICAgdXJsID0gcGQodiwgJ2EmJmhyZWYnKTtcXG4gICAgICAgICAgICBjaGFwdGVyTGlzdC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICB1cmw6IHVybFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmwgKyBsYXp5Sm0sXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfkuI3op6Plr4YnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodXJsLCBsYXp5QmptKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsICsgbGF6eUJqbVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB1cmwsIGxhenlCam0pXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn6Kej5a+GJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHVybCwgbGF6eUptKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsICsgbGF6eUptXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHVybCwgbGF6eUptKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIF1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgaWYgKGdldE15VmFyKCdzaHNvcnQnKSA9PT0gJzEnKSB7XFxuICAgICAgICAgICAgbGlzdC5yZXZlcnNlKCk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBkID0gZC5jb25jYXQobGlzdCk7XFxuICAgIH1cXG59IGNhdGNoIChlKSB7XFxuICAgIGxvZyhlLnRvU3RyaW5nKCkpO1xcbn1cXG5cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmr4/lkajlv4XnnItcIixcInBhdGhcIjpcImJrXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbnJjKGZldGNoUEMoJ2h0dHBzOi8vZ2l0ZWUuY29tL21pc3R5d2F0ZXIvaGlrZXJfaW5mby9yYXcvbWFzdGVyL2dpdGh1YnByb3h5Lmpzb24nKSArICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbWlzdHl3YXRlci9oaWtlci9tYWluL2YnLCAyNCk7XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UveWpcXFwiLCB7fSkpLnJ1bGUpO1xcbmNvbnN0IHBhZ2UgPSBNWV9QQUdFO1xcbmNvbnN0IGhvc3QgPSBcXFwiaHR0cHM6Ly8xOGNvbWljLWMueHl6L3dlZWs/c2tkYWQ9MVxcXCI7XFxudmFyIOWumuS9jeS/oeaBryA9IFt7XFxuICAgIOWkp+exu+WumuS9jTogJ2JvZHkmJi53ZWVrLXRpbWUtaXRlbScsXFxuICAgIOWwj+exuzogJ2JvZHkmJmEnLFxcbn0sIHtcXG4gICAg5LiA57qn5a6a5L2NOiAnLmJ0bi1ncm91cCwxJiYubmF2JyxcXG4gICAg5bCP57G7OiAnYm9keSYmYScsXFxufV07XFxuTVlfVVJMID0gaG9zdDtcXG5sZXQgdHJ1ZV91cmwgPSBnZXRNeVZhcihNWV9SVUxFLnVybCwgTVlfVVJMKVxcbnZhciBodG1sID0gZmV0Y2godHJ1ZV91cmwpO1xcbmNvbnN0IGRjID0gZHluYW1pY0NsYXNzKHtcXG4gICAg5YiG57G76aKc6ImyOiBnZXRSYW5nZUNvbG9ycygpXFxufSk7XFxuZGMu5byA5ZCv5oqY5Y+gKGZhbHNlKVxcbmRjLuW8gOWQr+aQnOe0oihmYWxzZSku5Yib5bu65Yqo5oCB5YiG57G7KOWumuS9jeS/oeaBrylcXG52YXIgaXRlbSA9IHBkZmEoaHRtbCwgJ2JvZHkmJi53ZWVrbHktdmlkZW8taXRlbScpO1xcclxcbiAgICAgICAgICAgIGl0ZW0uZm9yRWFjaCgoZGF0YXMpID0+IHtcXHJcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHsgXFxyXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogc3Aoc21hbGwocGRmaChkYXRhcywgJy52aWRlby10aXRsZSYmVGV4dCcpKydcXFxcbicrcGRmaChkYXRhcywgJy50aXRsZS10cnVuY2F0ZSYmVGV4dCcpKSksXFxyXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBzcCgn8J+RgCcrXFxcIiBcXFwiK3BkZmgoZGF0YXMsICdzcGFuJiZUZXh0JykrJ1xcXFxuJytwZGZoKGRhdGFzLCAnLnRpdGxlLXRydW5jYXRlLDEmJlRleHQnKSksXFxyXFxuICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBwZChkYXRhcywgJ2ltZyYmZGF0YS1vcmlnaW5hbCcpLFxcclxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJtb3ZpZV8xX3ZlcnRpY2FsX3BpY1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgIHVybDogcGQoZGF0YXMsICdhJiZocmVmJykrJyNpbW1lcnNpdmVUaGVtZSMjYXV0b0NhY2hlI0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2VqXFxcIiknLFxcbn0pO1xcbn0pXFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmjpLooYzmppxcIixcInBhdGhcIjpcInJhbmtcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxucmMoZmV0Y2hQQygnaHR0cHM6Ly9naXRlZS5jb20vbWlzdHl3YXRlci9oaWtlcl9pbmZvL3Jhdy9tYXN0ZXIvZ2l0aHVicHJveHkuanNvbicpICsgJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9taXN0eXdhdGVyL2hpa2VyL21haW4vZicsIDI0KTtcXG5jb25zdCBwYWdlID0gTVlfUEFHRTtcXHJcXG52YXIgaG9zdCA9ICdodHRwczovLzE4Y29taWMtYy54eXovYWxidW1zP289bXYmdD0nOyBcXG5sZXQgcmFuayA9IGdldEl0ZW0oJ3JhbmsnLCAn5YWo6YOoJyk7XFxuIGlmIChNWV9QQUdFID09IDEpIHtcXHJcXG4gICAgICAgICAgICBsZXQgYXJyID0gW1xcXCLlhajpg6hcXFwiLFxcXCLmnKzml6VcXFwiLFxcXCLmnKzlkahcXFwiLFxcXCLmnKzmnIhcXFwiXTtcXG5mb3IgKGxldCBpdCBvZiBhcnIpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHJhbmsgPT0gaXQgPyAn4oCc4oCc4oCd4oCdJyArIGl0LmZvbnRjb2xvcigncmVkJykgOiBpdCxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfNCcsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpdCkgPT4ge1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJyYW5rXFxcIiwgaXQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sIGl0KVxcbiAgICAgICAgfSlcXG4gICAgfVxcbn1cXG5pZiAocmFuayA9PSAn5YWo6YOoJykge1xcbk1ZX1VSTD1ob3N0K1xcXCImcGFnZT1cXFwiK3BhZ2U7XFxuIGxvZyhNWV9VUkwpXFxudmFyIGh0bWwgPSBmZXRjaChNWV9VUkwpO1xcbn1lbHNlIGlmIChyYW5rID09ICfmnKzml6UnKSB7XFxuTVlfVVJMPWhvc3QrXFxcInRcXFwiK1xcXCImcGFnZT1cXFwiK3BhZ2U7XFxuIGxvZyhNWV9VUkwpXFxudmFyIGh0bWwgPSBmZXRjaChNWV9VUkwpO1xcbn1lbHNlIGlmIChyYW5rID09ICfmnKzlkagnKSB7XFxuTVlfVVJMPWhvc3QrXFxcIndcXFwiK1xcXCImcGFnZT1cXFwiK3BhZ2U7XFxuIGxvZyhNWV9VUkwpXFxudmFyIGh0bWwgPSBmZXRjaChNWV9VUkwpO1xcbn1lbHNlIGlmIChyYW5rID09ICfmnKzmnIgnKSB7XFxuTVlfVVJMPWhvc3QrXFxcIm1cXFwiK1xcXCImcGFnZT1cXFwiK3BhZ2U7XFxuIGxvZyhNWV9VUkwpXFxudmFyIGh0bWwgPSBmZXRjaChNWV9VUkwpO1xcbn1cXHJcXG4gdmFyIGxpc3QgPSBwZGZhKGh0bWwsICcubS0wJiYuY29sLXhzLTYnKTtcXHJcXG4gICAgICAgICAgICBsaXN0LmZvckVhY2goZnVuY3Rpb24oaXRlbSwgaW5kZXgpIHtcXHJcXG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gc3AocGRmaChpdGVtLCAnc3BhbiwxJiZUZXh0JykpO1xcbiAgICAgICAgICAgICAgICB2YXIgdGFnID0gc21hbGwoc3AocGRmaChpdGVtLCAnLnRpdGxlLXRydW5jYXRlLDImJlRleHQnKSkpO1xcclxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcclxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlKydcXFxcbicrdGFnLFxcclxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogc21hbGwoJ/Cfk5EnLCA3Nzc3NzcpICsgY29sb3Ioc3AocGRmaChpdGVtLCAnLnRpdGxlLXRydW5jYXRlLDEmJmEmJlRleHQnKSksICc5OTk5OTknKSArICdcXFxcbicgKyBzbWFsbCgn8J+SoCcsIDc3Nzc3NykgKyBjb2xvcihzcChwZGZoKGl0ZW0sICcubGFiZWwtY2F0ZWdvcnkmJlRleHQnKSksICc5OTk5OTknKSsgJ1xcXFxuJyArIHNtYWxsKCfwn5SlJywgNjY2NjY2KSArIGNvbG9yKHNwKHBkZmgoaXRlbSwgJ3NwYW4mJlRleHQnKSksICc5OTk5OTknKSxcXHJcXG4gICAgICAgICAgICAgICAgICAgIGltZzogcGQoaXRlbSwgJ2ltZyYmZGF0YS1jZnNyY3x8c3JjfHxkYXRhLXNyYycpLFxcclxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBwZChpdGVtLCAnYSYmaHJlZicpKycjaW1tZXJzaXZlVGhlbWUjI2F1dG9DYWNoZSMnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImVqXFxcIiknLFxcclxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYycsXFxyXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogcGQoaXRlbSwgJ2ltZyYmZGF0YS1jZnNyY3x8c3JjfHxkYXRhLXNyYycpLFxcclxcbiAgICAgICAgICAgICAgICAgICAgfVxcclxcbiAgICAgICAgICAgICAgICB9KTtcXHJcXG4gICAgICAgICAgICB9KTtcXHJcXG4gICAgICAgIFxcclxcbiAgICAgIHNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaOqOiNkFwiLFwicGF0aFwiOlwicmVjb21tZW5kXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbnJjKGZldGNoUEMoJ2h0dHBzOi8vZ2l0ZWUuY29tL21pc3R5d2F0ZXIvaGlrZXJfaW5mby9yYXcvbWFzdGVyL2dpdGh1YnByb3h5Lmpzb24nKSArICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbWlzdHl3YXRlci9oaWtlci9tYWluL2YnLCAyNCk7XFxudmFyIGh0bWwgPSBnZXRSZXNDb2RlKCk7XFxuY29uc3QgcGFnZSA9IE1ZX1BBR0U7XFxudmFyIGxpc3QgPSBwZGZhKGh0bWwsICdib2R5JiYuY29sLXhsLTInKTtcXG5mb3IgKHZhciBqIGluIGxpc3QpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBzcChwZGZoKGxpc3Rbal0sICcudmlkZW8tdGl0bGUmJlRleHQnKSksXFxuICAgICAgICBkZXNjOiBzcChwZGZoKGxpc3Rbal0sICdzcGFuJiZUZXh0JykrJ1xcXFx0XFxcXHQnK3BkZmgobGlzdFtqXSwgJy5sYWJlbC1jYXRlZ29yeSYmVGV4dCcpK1xcXCIgXFxcIitwZGZoKGxpc3Rbal0sICcubGFiZWwtc3ViJiZUZXh0JykpLFxcbiAgICAgICAgaW1nOiBwZGZoKGxpc3Rbal0sICdpbWcmJmRhdGEtb3JpZ2luYWx8fGRhdGEtc3JjfHxzcmMnKSxcXG4gICAgICAgIHVybDogcGQobGlzdFtqXSwgJ2EmJmhyZWYnKSsnI2ltbWVyc2l2ZVRoZW1lIyNhdXRvQ2FjaGUjQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZWpcXFwiKSdcXG4gICAgfSk7XFxufVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Yqo55S7XCIsXCJwYXRoXCI6XCJIXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbnJjKGZldGNoUEMoJ2h0dHBzOi8vZ2l0ZWUuY29tL21pc3R5d2F0ZXIvaGlrZXJfaW5mby9yYXcvbWFzdGVyL2dpdGh1YnByb3h5Lmpzb24nKSArICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbWlzdHl3YXRlci9oaWtlci9tYWluL2YnLCAyNCk7XFxuY29uc3QgcGFnZSA9IE1ZX1BBR0U7XFxyXFxudmFyIGhvc3QgPSAnaHR0cHM6Ly8xOGNvbWljLWMueHl6JztcXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9sYXp5Jywge30pKS5ydWxlKTsgXFxudmFyIGNvbnRlbnRzID0gcGRmYShmZXRjaChob3N0KycvdmlkZW9zLycpLCAnYm9keSYmLmNvbC14cy0zJylcXG52YXIgYXJyID0gY29udGVudHMubWFwKHggPT4gcGRmaCh4LCAnc3BhbiYmVGV4dCcpKTtcXG52YXIgaWNvbj0gY29udGVudHMubWFwKHggPT4gaG9zdCtwZGZoKHgsICdpbWcmJmRhdGEtb3JpZ2luYWwnKSk7XFxubGV0IGNhcnRvb24gPSBnZXRJdGVtKCdjYXJ0b29uJywgJ2FyclswXScpO1xcbmlmIChNWV9QQUdFID09IDEpIHtcXG4vL2xldCBhcnIgPSBbXFxcIkjliqjmvKtcXFwiLFxcXCLpqazotZvlhYvnoLTlnY9cXFwiLFxcXCLmiJDkurrlsI/nlLXlvbFcXFwiLFxcXCLmt7HlpJzpo5/loIJcXFwiXTtcXG4vL2ZvciAobGV0IGl0IG9mIGFycikge1xcbmFyci5mb3JFYWNoKChpdCxpZCkgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogY2FydG9vbiA9PSBpdCA/ICfigJzigJzigJ3igJ0nICsgaXQuZm9udGNvbG9yKCdyZWQnKSA6IGl0LFxcbiAgICAgICAgICAgIHBpY191cmw6IGljb25baWRdLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnaWNvbl80X2NhcmQnLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaXQpID0+IHtcXG4gICAgICAgICAgICAgICAgc2V0SXRlbShcXFwiY2FydG9vblxcXCIsIGl0KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LCBpdClcXG4gICAgICAgIH0pXFxuICAgIH0pXFxufVxcblxcbmlmIChjYXJ0b29uID09IGFyclswXSkge1xcbk1ZX1VSTD1ob3N0K1xcXCIvdmlkZW9zL2NhcnRvb24/cGFnZT1cXFwiK3BhZ2U7XFxudmFyIGh0bWwgPSBmZXRjaChNWV9VUkwpO1xcbn1lbHNlIGlmIChjYXJ0b29uID09IGFyclsxXSkge1xcbk1ZX1VSTD1ob3N0K1xcXCIvc2VhcmNoL21vdmllcy8/bWFpbl90YWc9MCZzZWFyY2hfcXVlcnk9JUU5JUE5JUFDJUU4JUI1JTlCJUU1JTg1JThCJUU3JUEwJUI0JUU1JTlEJThGJUU3JTg5JTg4JnBhZ2U9XFxcIitwYWdlO1xcbnZhciBodG1sID0gZmV0Y2goTVlfVVJMKTtcXG59ZWxzZSBpZiAoY2FydG9vbiA9PSBhcnJbMl0pIHtcXG5NWV9VUkw9aG9zdCtcXFwiL21vdmllcz9wYWdlPVxcXCIrcGFnZTtcXG52YXIgaHRtbCA9IGZldGNoKE1ZX1VSTCk7XFxufWVsc2UgaWYgKGNhcnRvb24gPT0gYXJyWzNdKSB7XFxuTVlfVVJMPWhvc3QrXFxcIi9ibG9nVmlkZW8/cGFnZT1cXFwiK3BhZ2U7XFxudmFyIGh0bWwgPSBmZXRjaChNWV9VUkwpO1xcbn1cXHJcXG4gdmFyIGxpc3QgPSBwZGZhKGh0bWwsICdib2R5JiYuY29sLXNtLTYnKTtcXG5mb3IgKHZhciBqIGluIGxpc3QpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBzcChwZGZoKGxpc3Rbal0sICcudmlkZW8tdGl0bGUmJlRleHQnKSksXFxuICAgICAgICBkZXNjOiBzcChwZGZoKGxpc3Rbal0sICcudmlkZW8ta2V5d29yZHMmJlRleHQnKSsnXFxcXG4nK3BkZmgobGlzdFtqXSwgJy52aWRlby1hZGRlZHx8LnZpZGVvLWtleXdvcmRzLDEmJlRleHQnKSsnXFxcXG4nK3BkZmgobGlzdFtqXSwgJy5kdXJhdGlvbnx8LnZpZGVvLWtleXdvcmRzLDImJlRleHQnKSksXFxuICAgICAgICBpbWc6IHBkZmgobGlzdFtqXSwgJ2ltZyYmZGF0YS1vcmlnaW5hbHx8c3JjJyksXFxuICAgICAgICB1cmw6IHBkKGxpc3Rbal0sICdhJiZocmVmJykrbGF6eSxcXG5jb2xfdHlwZTogJ3BpY18xX2NhcmQnLFxcbiAgICB9KTtcXG59XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6Kej5p6QXCIsXCJwYXRoXCI6XCJsYXp5XCIsXCJydWxlXCI6XCJ2YXIgbGF6eSA9ICQoJycpLmxhenlSdWxlKCgpID0+IHtcXG50cnl7XFxuICAgIHZhciB1cmwgPSBwZChmZXRjaChpbnB1dCksJ3NvdXJjZSYmc3JjJyk7XFxubG9nICh1cmwpXFxuICAgIGlmICgvbTN1OHxtcDQvLnRlc3QodXJsKSkge1xcbiAgICAgICAgcmV0dXJuIHVybFxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgZXZhbChyZXF1ZXN0KHVybCkubWF0Y2goL3ZhciBjb25maWcgPSB7W1xcXFxzXFxcXFNdKj99LylbMF0pXFxuICAgICAgICB2YXIgdmlkZW8gPSBjb25maWcudXJsOyAgICAgIFxcbiAgcmV0dXJuIHZpZGVvXFxuICAgIH1cXG4gICAgfWNhdGNoKGUpXFxue1xcbiAgcmV0dXJuIFxcXCJ2aWRlbzovL1xcXCIraW5wdXRcXG59XFxufSlcIn1dIiwiaWNvbiI6Imh0dHBzOi8vMThjb21pYy1jLnh5ei90ZW1wbGF0ZXMvZnJvbnRlbmQvYWlyYXYvaW1nL2FwcF9saW5rMy5wbmc/dj0zIiwicHJveHkiOiIifQ==
Add Comment
Please, Sign In to add comment