Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@Quark.简@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoiUXVhcmsu566AIiwiYXV0aG9yIjoiQExveURnSWsiLCJ1cmwiOiJoaWtlcjovL2VtcHR5IyMiLCJ2ZXJzaW9uIjozMSwiY29sX3R5cGUiOiJtb3ZpZV8zIiwiY2xhc3NfbmFtZSI6IiIsInR5cGUiOiJ2aWRlbyIsImNsYXNzX3VybCI6IiIsImFyZWFfbmFtZSI6IiIsImFyZWFfdXJsIjoiIiwic29ydF9uYW1lIjoiIiwieWVhcl9uYW1lIjoiIiwic29ydF91cmwiOiIiLCJ5ZWFyX3VybCI6IiIsImZpbmRfcnVsZSI6ImpzOlxubGV0IGQgPSBbXTtcbiQucmVxdWlyZShcIkNsb3VkRHJpdmVcIilcbmxldCBjb29raWUgPSBnZXRJdGVtKFwicXVhcmtDb29raWVcIiwgXCJcIik7XG5cbmlmICghJC5yZXF1aXJlKFwidG9vbFwiKS5pc0xvZ2luQ29va2llKGNvb2tpZSkpIHtcbiAgICBjbGVhckl0ZW0oXCJxdWFya0Nvb2tpZVwiKTtcbiAgICBkLnB1c2goe1xuICAgICAgICB0aXRsZTogJzxmb250IGNvbG9yPVwiIzEzQjYxQlwiPuKWkCA8L2ZvbnQ+PGI+5rip6aao5o+Q56S6PGI+JyxcbiAgICAgICAgY29sX3R5cGU6IFwicmljaF90ZXh0XCIsXG4gICAgfSk7XG4gICAgZC5wdXNoKHtcbiAgICAgICAgdXJsOiAkLnJlcXVpcmUoXCJhY2NvdW50XCIsIHRydWUpLFxuICAgICAgICBjb2xfdHlwZTogXCJ0ZXh0XzFcIixcbiAgICAgICAgdGl0bGU6IFwi5pyq5qOA5rWL5Yiw55m75b2V5L+h5oGv77yM54K55oiR6Lez6L2s55m75b2V6LSm5Y+36aG16Z2i77yM6I635Y+WUXVhcmsgQ29va2ll5ZCO5pa55Y+v5L2/55SoXCIsXG4gICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICBwYWdlVGl0bGU6IFwi55m75b2V5aS45YWL5LqR55uYXCJcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZC5wdXNoKHtcbiAgICB0aXRsZTogXCLkupHnroBcIixcbiAgICB1cmw6IFwiaGlrZXI6Ly9ob21lQOS6keebmOWQmy7nroBcIixcbiAgICBwaWNfdXJsOiBcImhpa2VyOi8vaW1hZ2VzL2ljb25fbGVmdDZcIixcbiAgICBjb2xfdHlwZTogXCJpY29uX3JvdW5kX3NtYWxsXzRcIlxufSk7XG5kLnB1c2goe1xuICAgIHRpdGxlOiBcIuaUtuiXj1wiLFxuICAgIHVybDogXCJoaWtlcjovL2NvbGxlY3Rpb24/cnVsZT1cIiArIE1ZX1JVTEUudGl0bGUsXG4gICAgcGljX3VybDogXCJoaWtlcjovL2ltYWdlcy9pY29uX2dvb2Q2XCIsXG4gICAgY29sX3R5cGU6IFwiaWNvbl9yb3VuZF9zbWFsbF80XCJcbn0pO1xuZC5wdXNoKHtcbiAgICB0aXRsZTogXCLljoblj7JcIixcbiAgICB1cmw6IFwiaGlrZXI6Ly9oaXN0b3J5P3J1bGU9XCIgKyBNWV9SVUxFLnRpdGxlLFxuICAgIHBpY191cmw6IFwiaGlrZXI6Ly9pbWFnZXMvaWNvbl90aW1lNlwiLFxuICAgIGNvbF90eXBlOiBcImljb25fcm91bmRfc21hbGxfNFwiXG59KTtcbmQucHVzaCh7XG4gICAgdGl0bGU6IFwi6LSm5Y+3XCIsXG4gICAgdXJsOiAkLnJlcXVpcmUoXCJhY2NvdW50XCIsIHRydWUpLFxuICAgIHBpY191cmw6IFwiaGlrZXI6Ly9pbWFnZXMvaWNvbl9zZXR0aW5nNlwiLFxuICAgIGNvbF90eXBlOiBcImljb25fcm91bmRfc21hbGxfNFwiXG59KTtcbmQucHVzaCh7XG4gICAgdGl0bGU6ICfmiZPlvIAnLFxuICAgIGRlc2M6ICfor7fovpPlhaXpk77mjqUv5pCc57Si5YWz6ZSu6K+NJyxcbiAgICBjb2xfdHlwZTogJ2lucHV0JyxcbiAgICB1cmw6ICQudG9TdHJpbmcoKCkgPT4ge1xuICAgICAgICBpZiAoIWlucHV0KSByZXR1cm4gXCJ0b2FzdDovL+ivt+i+k+WFpeWGheWuuVwiO1xuICAgICAgICBpZiAoIShpbnB1dC5zdGFydHNXaXRoKFwiaHR0cHM6Ly9wYW4ucXVhcmsuY24vcy9cIikgfHwgaW5wdXQuc3RhcnRzV2l0aChcImh0dHBzOi8vZHJpdmUudWMuY24vcy9cIikpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJoaWtlcjovL3BhZ2Uvc291I25vSGlzdG9yeSM/cnVsZT3kupHnm5jlkJsu566AJnA9ZnlwYWdlJnNlYXJjaFRlcm1zPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJoaWtlcjovL3BhZ2UvcXVhcmtMaXN0P3JlYWx1cmw9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoaW5wdXQpICsgXCImc2hhcmVQd2Q9XCI7XG4gICAgfSksXG4gICAgZXh0cmE6IHtcbiAgICAgICAgaGlkZVNldHRpbmc6IHRydWUsXG4gICAgICAgIHBhZ2VUaXRsZTogXCLmkJzntKJcIlxuICAgIH1cbn0pO1xuZC5wdXNoKHtcbiAgICB0aXRsZTogXCLigJzigJzigJ3igJ1cIitcIuaIkeeahOWkuOWFi1wiLmZvbnRjb2xvcihcImJsYWNrXCIpLFxuICAgIHVybDogXCJoaWtlcjovL3BhZ2UvcXVhcmtMaXN0XCIsXG4gICAgZGVzYzogXCIyXCIsXG4gICAgcGljX3VybDogXCJoaWtlcjovL2ltYWdlcy9pY29uX2t1YWtlXCIsXG4gICAgY29sX3R5cGU6IFwiY2FyZF9waWNfMlwiLFxuICAgIGV4dHJhOiB7XG4gICAgICAgIHNoYXJlSWQ6IFwic2VsZlwiXG4gICAgfVxuXG59KTtcbmQucHVzaCh7XG4gICAgdGl0bGU6IFwi4oCc4oCc4oCd4oCdXCIrXCLmiJHnmoRVQ1wiLmZvbnRjb2xvcihcImJsYWNrXCIpLFxuICAgIHVybDogXCJoaWtlcjovL3BhZ2UvcXVhcmtMaXN0XCIsXG4gICAgZGVzYzogXCIyXCIsXG4gICAgcGljX3VybDogXCJodHRwOi8vMTIzLjU2LjEwNS4xNDUvdHViaWFvL2VyZGkvMTQucG5nXCIsXG4gICAgY29sX3R5cGU6IFwiY2FyZF9waWNfMlwiLFxuICAgIGV4dHJhOiB7XG4gICAgICAgIHNoYXJlSWQ6IFwic2VsZlwiLFxuICAgICAgICBmcm9tRHJpdmU6IFwidWNcIlxuICAgIH1cblxufSk7XG5zZXRSZXN1bHQoZCk7XG4iLCJzZWFyY2hfdXJsIjoiIiwiZ3JvdXAiOiLlvIDlj5HkuK3lv4MiLCJzZWFyY2hGaW5kIjoiIiwiZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsImRldGFpbF9maW5kX3J1bGUiOiIiLCJzZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsInNkZXRhaWxfZmluZF9ydWxlIjoiIiwidWEiOiJtb2JpbGUiLCJwcmVSdWxlIjoiIiwicGFnZXMiOiJbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWkuOWFi+WIl+ihqEFQSVwiLFwicGF0aFwiOlwiUXVhcmtTaGFyZUFwaVwiLFwicnVsZVwiOlwianM6XFxuLy9AYXV0aG9yIExveURnSWtcXG5sZXQgaHR0cFJlcXVlc3QgPSAkLnJlcXVpcmUoXFxcImh0dHBSZXF1ZXN0XFxcIik7XFxubGV0IENvb2tpZU1hbmFnZT0kLnJlcXVpcmUoXFxcIkNvb2tpZU1hbmFnZVxcXCIpO1xcbmxldCBmcm9tRHJpdmUgPSBtb2R1bGUuaW1wb3J0UGFyYW07XFxubGV0IHByLCBiYXNlVXJsLCBjb29raWU7XFxuaWYgKGZyb21Ecml2ZSA9PT0gXFxcInVjXFxcIikge1xcbiAgICBiYXNlVXJsID0gXFxcImh0dHBzOi8vcGMtYXBpLnVjLmNuXFxcIjtcXG4gICAgcHIgPSBcXFwiVUNCcm93c2VyXFxcIjtcXG4gICAgY29va2llID0gZ2V0SXRlbShcXFwidWNDb29raWVcXFwiLCBcXFwiXFxcIik7XFxufSBlbHNlIHtcXG4gICAgYmFzZVVybCA9IFxcXCJodHRwczovL2RyaXZlLnF1YXJrLmNuXFxcIjtcXG4gICAgcHIgPSBcXFwidWNwcm9cXFwiO1xcbiAgICBjb29raWUgPSBnZXRJdGVtKFxcXCJxdWFya0Nvb2tpZVxcXCIsIFxcXCJcXFwiKTtcXG59XFxuXFxuY29uc3QgY29va2llTWFuYWdlID0gbmV3IENvb2tpZU1hbmFnZShjb29raWUpO1xcbmZ1bmN0aW9uIFF1YXJrU2hhcmVBcGkoc2hhcmVJZCwgc2hhcmVQd2QpIHtcXG4gICAgdGhpcy5zaGFyZUlkID0gc2hhcmVJZDtcXG4gICAgdGhpcy5zaGFyZVB3ZCA9IHNoYXJlUHdkO1xcbiAgICB0aGlzLnJlZnJlc2hDYWxsQmFjayA9ICgoKSA9PiB2b2lkIDApO1xcbiAgICAvL3RoaXMuc2hhcmVUb2tlbiA9IHNoYXJlVG9rZW4gfHwgdGhpcy5nZXRTaGFyZVRva2VuKCk7XFxufVxcbk9iamVjdC5hc3NpZ24oUXVhcmtTaGFyZUFwaS5wcm90b3R5cGUsIHtcXG4gICAgc2V0UmVmcmVzaChyZWZyZXNoQ2FsbEJhY2spIHtcXG4gICAgICAgIHRoaXMucmVmcmVzaENhbGxCYWNrID0gcmVmcmVzaENhbGxCYWNrO1xcbiAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgIH0sXFxuICAgIHNldFRva2VuKHNoYXJlVG9rZW4pIHtcXG4gICAgICAgIHRoaXMuc2hhcmVUb2tlbiA9IHNoYXJlVG9rZW47XFxuICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgfSxcXG4gICAgcmVxdWVzdEh0dHAoYXBpKSB7XFxuICAgICAgICByZXR1cm4gbmV3IGh0dHBSZXF1ZXN0KGFwaS5zdGFydHNXaXRoKFxcXCJodHRwXFxcIikgPyBhcGkgOiAoYmFzZVVybCArIGFwaSkpLnN1Y2Nlc3MoKGJvZHkscmVzKSA9PiB7XFxuICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzICE9PSAyMDApIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGJvZHkubWVzc2FnZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGNvb2tpZU1hbmFnZS5hZGQocmVzLmhlYWRlcnNbXFxcInNldC1jb29raWVcXFwiXSk7XFxuICAgICAgICAgICAgcmV0dXJuIGJvZHk7XFxuICAgICAgICB9KS5oZWFkZXJzKHtcXG4gICAgICAgICAgICBcXFwiY29va2llXFxcIjogY29va2llTWFuYWdlLmdldCgpLFxcbiAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogXFxcIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIHF1YXJrLWNsb3VkLWRyaXZlLzIuNS4yMCBDaHJvbWUvMTAwLjAuNDg5Ni4xNjAgRWxlY3Ryb24vMTguMy41LjQtYjQ3ODQ5MTEwMCBTYWZhcmkvNTM3LjM2IENoYW5uZWwvcGNra19vdGhlcl9jaFxcXCIsXFxuICAgICAgICAgICAgXFxcInJlZmVyZXJcXFwiOiBiYXNlVXJsXFxuICAgICAgICB9KTtcXG4gICAgfSxcXG4gICAgZ2V0VG9rZW4oKSB7XFxuICAgICAgICBpZiAodGhpcy5zaGFyZUlkICE9PSBcXFwic2VsZlxcXCIpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaGFyZVRva2VuIHx8IHRoaXMuZ2V0U2hhcmVUb2tlbigpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcIlxcXCI7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIGdldFBpY0Nvb2tpZSgpe1xcbiAgICAgICAgcmV0dXJuIGNvb2tpZU1hbmFnZS5nZXQoKTtcXG4gICAgICAgIFxcbiAgICB9LFxcbiAgICBnZXRTaGFyZVRva2VuKCkge1xcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMucmVxdWVzdEh0dHAoXFxcIi8xL2Nsb3VkZHJpdmUvc2hhcmUvc2hhcmVwYWdlL3Rva2VuXFxcIikuYm9keSh7XFxuICAgICAgICAgICAgXFxcInB3ZF9pZFxcXCI6IHRoaXMuc2hhcmVJZCxcXG4gICAgICAgICAgICBcXFwicGFzc2NvZGVcXFwiOiB0aGlzLnNoYXJlUHdkLFxcbiAgICAgICAgfSkuYm9keVRvU3RyaW5nKHRydWUpLnNldFN0YXJ0UmVxdWVzdEZ1bmMocG9zdCkuc3RhcnQodHJ1ZSk7XFxuICAgICAgICB0aGlzLnNoYXJlVG9rZW4gPSByZXN1bHQuZGF0YS5zdG9rZW47XFxuICAgICAgICB0aGlzLnJlZnJlc2hDYWxsQmFjayhyZXN1bHQuZGF0YS5zdG9rZW4sIHRoaXMpO1xcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hhcmVUb2tlbjtcXG4gICAgfSxcXG4gICAgX2dldFNlbGZMaXN0RmlsZShmaWxlSWQsIHBhZ2UsIG9yZGVyQnkpIHtcXG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLnJlcXVlc3RIdHRwKFxcXCJodHRwczovL2RyaXZlLnF1YXJrLmNuLzEvY2xvdWRkcml2ZS9maWxlL3NvcnQ/cHI9XFxcIiArIHByICsgXFxcIiZmcj1wY1xcXCIpLmJ1aWxkVXJsKHtcXG4gICAgICAgICAgICBwZGlyX2ZpZDogZmlsZUlkIHx8IFxcXCIwXFxcIixcXG4gICAgICAgICAgICBmb3JjZTogMCxcXG4gICAgICAgICAgICBfcGFnZTogcGFnZSxcXG4gICAgICAgICAgICBfc2l6ZTogMTAwLFxcbiAgICAgICAgICAgIHVjX3BhcmFtX3N0cjogXFxcIlxcXCIsXFxuICAgICAgICAgICAgX2ZldGNoX3RvdGFsOiAxLFxcbiAgICAgICAgICAgIF9mZXRjaF9zdWJfZGlyczogMCxcXG4gICAgICAgICAgICBfc29ydDogXFxcImZpbGVfdHlwZTphc2MsXFxcIiArIG9yZGVyQnlcXG4gICAgICAgIH0pLnN0YXJ0KHRydWUpO1xcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcXG4gICAgfSxcXG4gICAgX2dldFNoYXJlTGlzdEZpbGUoZmlsZUlkLCBwYWdlLCBvcmRlckJ5KSB7XFxuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5yZXF1ZXN0SHR0cChcXFwiLzEvY2xvdWRkcml2ZS9zaGFyZS9zaGFyZXBhZ2UvZGV0YWlsP3ByPVxcXCIgKyBwciArIFxcXCImZnI9cGNcXFwiKS5idWlsZFVybCh7XFxuICAgICAgICAgICAgcHdkX2lkOiB0aGlzLnNoYXJlSWQgfHwgXFxcIlxcXCIsXFxuICAgICAgICAgICAgc3Rva2VuOiBlbmNvZGVVUklDb21wb25lbnQodGhpcy5nZXRUb2tlbigpIHx8IFxcXCJcXFwiKSxcXG4gICAgICAgICAgICBwZGlyX2ZpZDogZmlsZUlkIHx8IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGZvcmNlOiAwLFxcbiAgICAgICAgICAgIF9wYWdlOiBwYWdlLFxcbiAgICAgICAgICAgIF9zaXplOiAxMDAsXFxuICAgICAgICAgICAgX2ZldGNoX2Jhbm5lcjogMSxcXG4gICAgICAgICAgICBfZmV0Y2hfc2hhcmU6IDEsXFxuICAgICAgICAgICAgX2ZldGNoX3RvdGFsOiAxLFxcbiAgICAgICAgICAgIF9zb3J0OiBcXFwiZmlsZV90eXBlOmFzYyxcXFwiICsgb3JkZXJCeVxcbiAgICAgICAgfSkuZXJyb3JXaXRoUmV0cnkoKGVyciwgcmVzLCBodHRwKSA9PiB7XFxuICAgICAgICAgICAgaWYgKEpTT04ucGFyc2UocmVzLmJvZHkpLm1lc3NhZ2UuaW5jbHVkZXMoJ3N0b2tlbicpKSB7XFxuICAgICAgICAgICAgICAgIGh0dHAubWVyZ2VIZWFkQW5kQm9keSh7XFxuICAgICAgICAgICAgICAgICAgICBidWlsZFVybDoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b2tlbjogZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuZ2V0U2hhcmVUb2tlbigpIHx8IFxcXCJcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSkuc3RhcnQodHJ1ZSk7XFxuICAgICAgICByZXR1cm4gcmVzdWx0O1xcbiAgICB9LFxcbiAgICBnZXRMaXN0RmlsZShmaWxlSWQsIHBhZ2UsIG9yZGVyQnkpIHtcXG4gICAgICAgIGlmICh0aGlzLnNoYXJlSWQgIT09IFxcXCJzZWxmXFxcIikge1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRTaGFyZUxpc3RGaWxlKGZpbGVJZCwgcGFnZSwgb3JkZXJCeSk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRTZWxmTGlzdEZpbGUoZmlsZUlkLCBwYWdlLCBvcmRlckJ5KTtcXG4gICAgICAgIH1cXG4gICAgfVxcbn0pO1xcbiQuZXhwb3J0cyA9IFF1YXJrU2hhcmVBcGk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJodHRwUmVxdWVzdFwiLFwicGF0aFwiOlwiaHR0cFJlcXVlc3RcIixcInJ1bGVcIjpcImZ1bmN0aW9uIGh0dHBSZXF1ZXN0KHVybCwgb3B0aW9ucykge1xcbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwO1xcbiAgICB0aGlzLnVybCA9IHVybDtcXG4gICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywge1xcbiAgICAgICAgd2l0aEhlYWRlcnM6IHRydWVcXG4gICAgfSk7XFxuICAgIHRoaXMuZXJyb3JDYWxsYmFjayA9IChlcnIsIHJlcykgPT4ge3Rocm93IGVycn07XFxuICAgIHRoaXMuZXJyb3JDYWxsYmFja1dpdGhSZXRyeSA9IChlcnIsIHJlcywgdHJ5UmVzdGFydCkgPT4gZmFsc2U7XFxuICAgIHRoaXMuc3VjY2Vzc0NhbGxiYWNrID0gKGJvZHksIHN0YXR1c0NvZGUsIGhlYWRlcnMpID0+IGJvZHk7XFxuICAgIHRoaXMuZXJyb3JUeXBlQ2FsbGJhY2sgPSAoZXJyLCByZXMpID0+IGVycjtcXG4gICAgdGhpcy5zdGFydFJlcXVlc3QgPSBmZXRjaDtcXG4gICAgdGhpcy5fYm9keVRvU3RyaW5nID0gZmFsc2U7XFxuICAgIHRoaXMuYnVpbGRQYXJhbSA9IHZvaWQoMCk7XFxufVxcblxcbk9iamVjdC5hc3NpZ24oaHR0cFJlcXVlc3QucHJvdG90eXBlLCB7XFxuICAgIGJvZHlUb1N0cmluZyhmbGFnKSB7XFxuICAgICAgICB0aGlzLl9ib2R5VG9TdHJpbmcgPSAhIWZsYWc7XFxuICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgfSxcXG4gICAgYm9keShib2R5KSB7XFxuICAgICAgICB0aGlzLm9wdGlvbnMuYm9keSA9IGJvZHkgfHwgdm9pZCAwO1xcbiAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgIH0sXFxuICAgIGJ1aWxkVXJsKGJ1aWxkUGFyYW0pIHtcXG4gICAgICAgIHRoaXMuYnVpbGRQYXJhbSA9IGJ1aWxkUGFyYW0gfHwge307XFxuICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgfSxcXG4gICAgc2V0U3RhcnRSZXF1ZXN0RnVuYyhmdW5jKSB7XFxuICAgICAgICB0aGlzLnN0YXJ0UmVxdWVzdCA9IGZ1bmM7XFxuICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgfSxcXG4gICAgaGVhZGVycyhoZWFkZXJzKSB7XFxuICAgICAgICB0aGlzLm9wdGlvbnMuaGVhZGVycyA9IGhlYWRlcnMgfHwgdm9pZCAwO1xcbiAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgIH0sXFxuICAgIHN1Y2Nlc3Moc3VjY2Vzc0NhbGxiYWNrKSB7XFxuICAgICAgICBpZiAodHlwZW9mIHN1Y2Nlc3NDYWxsYmFjayAhPT0gXFxcImZ1bmN0aW9uXFxcIikgcmV0dXJuIHRoaXM7XFxuICAgICAgICB0aGlzLnN1Y2Nlc3NDYWxsYmFjayA9IHN1Y2Nlc3NDYWxsYmFjaztcXG4gICAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LFxcbiAgICBlcnJvcihlcnJvckNhbGxiYWNrKSB7XFxuICAgICAgICBpZiAodHlwZW9mIGVycm9yQ2FsbGJhY2sgIT09IFxcXCJmdW5jdGlvblxcXCIpIHJldHVybiB0aGlzO1xcbiAgICAgICAgdGhpcy5lcnJvckNhbGxiYWNrID0gZXJyb3JDYWxsYmFjaztcXG4gICAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LFxcbiAgICBlcnJvclR5cGUoZXJyb3JUeXBlQ2FsbGJhY2spIHtcXG4gICAgICAgIGlmICh0eXBlb2YgZXJyb3JUeXBlQ2FsbGJhY2sgIT09IFxcXCJmdW5jdGlvblxcXCIpIHJldHVybiB0aGlzO1xcbiAgICAgICAgdGhpcy5lcnJvclR5cGVDYWxsYmFjayA9IGVycm9yVHlwZUNhbGxiYWNrO1xcbiAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgIH0sXFxuICAgIGVycm9yV2l0aFJldHJ5KHJldHJ5Q291bnQsIGVycm9yQ2FsbGJhY2tXaXRoUmV0cnkpIHtcXG4gICAgICAgIGlmICh0eXBlb2YgcmV0cnlDb3VudCA9PT0gXFxcImZ1bmN0aW9uXFxcIiAmJiB0eXBlb2YgZXJyb3JDYWxsYmFja1dpdGhSZXRyeSA9PT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgICAgICAgICBlcnJvckNhbGxiYWNrV2l0aFJldHJ5ID0gcmV0cnlDb3VudDtcXG4gICAgICAgICAgICByZXRyeUNvdW50ID0gMTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICh0eXBlb2YgZXJyb3JDYWxsYmFja1dpdGhSZXRyeSAhPT0gXFxcImZ1bmN0aW9uXFxcIikge1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfVxcbiAgICAgICAgdGhpcy5yZXRyeUNvdW50ID0gTnVtYmVyKHJldHJ5Q291bnQpO1xcbiAgICAgICAgdGhpcy5lcnJvckNhbGxiYWNrV2l0aFJldHJ5ID0gZXJyb3JDYWxsYmFja1dpdGhSZXRyeTtcXG4gICAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LFxcbiAgICBzdGFydCh0b0pzb24pIHtcXG4gICAgICAgIGxldCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRpb25zKTtcXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5ib2R5ID09PSBcXFwib2JqZWN0XFxcIiAmJiB0aGlzLl9ib2R5VG9TdHJpbmcpIHtcXG4gICAgICAgICAgICBvcHRpb25zLmJvZHkgPSBKU09OLnN0cmluZ2lmeShvcHRpb25zLmJvZHkpO1xcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIHJlcyA9IEpTT04ucGFyc2UodGhpcy5zdGFydFJlcXVlc3QodGhpcy5idWlsZFBhcmFtP2J1aWxkVXJsKHRoaXMudXJsLCB0aGlzLmJ1aWxkUGFyYW0pOnRoaXMudXJsLCBvcHRpb25zKSk7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA+PSAyMDAgJiYgcmVzLnN0YXR1c0NvZGUgPD0gMzAwKSB7XFxuICAgICAgICAgICAgICAgIGxldCBib2R5ID0gcmVzLmJvZHk7XFxuICAgICAgICAgICAgICAgIGlmICh0b0pzb24pIHtcXG4gICAgICAgICAgICAgICAgICAgIGJvZHkgPSBKU09OLnBhcnNlKGJvZHkpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN1Y2Nlc3NDYWxsYmFjayhib2R5LCByZXMpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihTdHJpbmcocmVzLnN0YXR1c0NvZGUpKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICBlcnIgPSB0aGlzLmVycm9yVHlwZUNhbGxiYWNrKGVyciwgcmVzKTtcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh0aGlzLnJldHJ5Q291bnQpIHtcXG4gICAgICAgICAgICAgICAgbGV0IHRyeVJlc3VsdCA9IHRoaXMuZXJyb3JDYWxsYmFja1dpdGhSZXRyeShlcnIsIHJlcywgdGhpcyk7XFxuICAgICAgICAgICAgICAgIGlmICh0cnlSZXN1bHQpIHtcXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmV0cnlDb3VudC0tO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQodG9Kc29uKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmV0cnlDb3VudCA9IDA7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvckNhbGxiYWNrKGVyciwgcmVzKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yQ2FsbGJhY2soZXJyLCByZXMpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XFxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XFxuICAgICAgICAgICAgd2l0aEhlYWRlcnM6IHRydWVcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgIH0sXFxuICAgIG1lcmdlSGVhZEFuZEJvZHkob3B0aW9ucykge1xcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XFxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucy5oZWFkZXJzfHx7fSwgb3B0aW9ucy5oZWFkZXJzKTtcXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLmJvZHkgPT09IFxcXCJvYmplY3RcXFwiICYmIHR5cGVvZiBvcHRpb25zLmJvZHkgPT09IFxcXCJvYmplY3RcXFwiKSB7XFxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMuYm9keXx8e30sIG9wdGlvbnMuYm9keSk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYnVpbGRVcmwgPT09IFxcXCJvYmplY3RcXFwiKSB7XFxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmJ1aWxkUGFyYW18fHt9LCBvcHRpb25zLmJ1aWxkVXJsKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9XFxufSk7XFxuXFxuT2JqZWN0LmFzc2lnbihodHRwUmVxdWVzdCwge1xcbiAgICBmZXRjaCh1cmwsIG9wdGlvbnMpIHtcXG4gICAgICAgIHJldHVybiBuZXcgaHR0cFJlcXVlc3QodXJsLCBvcHRpb25zKTtcXG4gICAgfSxcXG4gICAgcG9zdCh1cmwsIG9wdGlvbnMpIHtcXG4gICAgICAgIHJldHVybiBuZXcgaHR0cFJlcXVlc3QodXJsLCBvcHRpb25zKS5zZXRTdGFydFJlcXVlc3RGdW5jKHBvc3QpO1xcbiAgICB9LFxcbiAgICByZXF1ZXN0KHVybCwgb3B0aW9ucykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBodHRwUmVxdWVzdCh1cmwsIG9wdGlvbnMpLnNldFN0YXJ0UmVxdWVzdEZ1bmMocmVxdWVzdCk7XFxuICAgIH0sXFxuICAgIHBvc3RSZXF1ZXN0KHVybCwgb3B0aW9ucykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBodHRwUmVxdWVzdCh1cmwsIG9wdGlvbnMpLnNldFN0YXJ0UmVxdWVzdEZ1bmMocG9zdFJlcXVlc3QpO1xcbiAgICB9LFxcbiAgICBmZXRjaENvb2tpZSh1cmwsIG9wdGlvbnMpIHtcXG4gICAgICAgIHJldHVybiBuZXcgaHR0cFJlcXVlc3QodXJsLCBvcHRpb25zKS5zZXRTdGFydFJlcXVlc3RGdW5jKGZldGNoQ29va2llKTtcXG4gICAgfVxcbn0pO1xcbiQuZXhwb3J0cyA9IGh0dHBSZXF1ZXN0O1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5aS45YWL5YiX6KGoXCIsXCJwYXRoXCI6XCJxdWFya0xpc3RcIixcInJ1bGVcIjpcImpzOlxcbmxldCBkID0gW107XFxuXFxuYWRkTGlzdGVuZXIoXFxcIm9uQ2xvc2VcXFwiLCAoKSA9PiBjbGVhck15VmFyKFxcXCJwbGF5VXJsQ2FjaGVcXFwiKSk7XFxuYWRkTGlzdGVuZXIoXFxcIm9uUmVmcmVzaFxcXCIsICgpID0+IGNsZWFyTXlWYXIoXFxcInBsYXlVcmxDYWNoZVxcXCIpKTtcXG5sZXQgc29VcmwgPSBkZWNvZGVVUklDb21wb25lbnQoZ2V0UGFyYW0oXFxcInJlYWx1cmxcXFwiLCBcXFwiXFxcIikpO1xcbmxldCBmcm9tRHJpdmUgPSBNWV9QQVJBTVMuZnJvbURyaXZlIHx8IFxcXCJxdWFya1xcXCI7XFxuXFxuaWYgKHNvVXJsLmluY2x1ZGVzKFxcXCJkcml2ZS51Yy5jblxcXCIpKSB7XFxuICAgIGZyb21Ecml2ZSA9IFxcXCJ1Y1xcXCI7XFxufVxcbmxldCByZWFsdXJsID0gc29Vcmwuc3BsaXQoXFxcIj9cXFwiKVswXTtcXG5sZXQgdXJsRGF0YSA9IHJlYWx1cmwuc3BsaXQoXFxcIi9cXFwiKTtcXG5cXG5sZXQgc2hhcmVJZCA9IE1ZX1BBUkFNUy5zaGFyZUlkIHx8IHVybERhdGFbNF0ucmVwbGFjZShcXFwiI1xcXCIsIFxcXCJcXFwiKTtcXG5sZXQgc2hhcmVQd2QgPSBnZXRQYXJhbShcXFwic2hhcmVQd2RcXFwiLCBNWV9QQVJBTVMuc2hhcmVQd2QgfHwgZ2V0UGFyYW0oXFxcInBhc3Njb2RlXFxcIiwgXFxcIlxcXCIsIHNvVXJsKSB8fCBcXFwiXFxcIik7XFxubGV0IHNoYXJlVG9rZW4gPSBnZXRQYXJhbShcXFwic2hhcmVUb2tlblxcXCIsIE1ZX1BBUkFNUy5zaGFyZVRva2VuIHx8IFxcXCJcXFwiKTtcXG5cXG5sZXQgZmlsZUlkID0gTVlfUEFSQU1TLmZpbGVJZDtcXG5cXG5sZXQgc29ydCA9IHtcXG4gICAgXFxcIuWQjeensOato+W6j1xcXCI6IFxcXCJmaWxlX25hbWU6YXNjXFxcIixcXG4gICAgXFxcIuWQjeensOWAkuW6j1xcXCI6IFxcXCJmaWxlX25hbWU6ZGVzY1xcXCIsXFxuICAgIFxcXCLml7bpl7TmraPluo9cXFwiOiBcXFwidXBkYXRlZF9hdDphc2NcXFwiLFxcbiAgICBcXFwi5pe26Ze05YCS5bqPXFxcIjogXFxcInVwZGF0ZWRfYXQ6ZGVzY1xcXCJcXG59O1xcbmxldCBzdHlsZXMgPSBbXFxcInRleHRfMVxcXCIsIFxcXCJhdmF0YXJcXFwiXTtcXG5cXG5sZXQgc29ydFZhbHVlID0gc29ydFtnZXRJdGVtKFxcXCJzb3J0S2V5XFxcIiwgXFxcIuWQjeensOato+W6j1xcXCIpXTtcXG5sZXQgc3R5bGUgPSBnZXRJdGVtKFxcXCJzdHlsZVxcXCIsIHN0eWxlc1swXSk7XFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGZyb21Ecml2ZSA9PT0gXFxcInVjXFxcIiA/IFxcXCJVQ+e9keebmFxcXCIgOiBcXFwi5aS45YWL572R55uYXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl81XFxcIixcXG4gICAgICAgIHBpY191cmw6IGZyb21Ecml2ZSA9PT0gXFxcInVjXFxcIiA/IFxcXCJodHRwOi8vMTIzLjU2LjEwNS4xNDUvdHViaWFvL2VyZGkvMTQucG5nXFxcIiA6IFxcXCJoaWtlcjovL2ltYWdlcy9pY29uX2t1YWtlXFxcIixcXG4gICAgICAgIHVybDogJChcXFwi54K55Ye75Yqf6IO95oyJ6ZKuPT7kuKrkurrotKblj7fnrqHnkIbljbPlj6/nmbvlvZXotKblj7dcXFwiKS5jb25maXJtKCgpID0+IHt9KSxcXG4gICAgfSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogc3R5bGUsXFxuICAgICAgICB1cmw6ICQoc3R5bGVzLCAxLCAn6K+36YCJ5oupJykuc2VsZWN0KCgpID0+IHtcXG4gICAgICAgICAgICBzZXRJdGVtKCdzdHlsZScsIGlucHV0KTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgfSksXFxuICAgICAgICBwaWNfdXJsOiBcXFwiaHR0cDovLzEyMy41Ni4xMDUuMTQ1L2ltZy9hbGlfaWNvbi5zdmdcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uXzVcXFwiXFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGdldEl0ZW0oXFxcInNvcnRLZXlcXFwiLCBcXFwi5ZCN56ew5q2j5bqPXFxcIiksXFxuICAgICAgICB1cmw6ICQoT2JqZWN0LmtleXMoc29ydCksIDEsICfor7fpgInmi6knKS5zZWxlY3QoKCkgPT4ge1xcbiAgICAgICAgICAgIHNldEl0ZW0oXFxcInNvcnRLZXlcXFwiLCBpbnB1dClcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgfSksXFxuICAgICAgICBwaWNfdXJsOiBcXFwiaHR0cDovLzEyMy41Ni4xMDUuMTQ1L2ltZy9hbGlfc29ydC5zdmdcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uXzVcXFwiXFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGdldEl0ZW0oXFxcInF1YXJrX3BsYXlNb2RlXFxcIiwgXFxcIui9rOeggVxcXCIpLFxcbiAgICAgICAgdXJsOiAkKFtcXFwi6L2s56CBXFxcIiwgXFxcIuWOn+eUu1xcXCIsIFxcXCLmma7pgJrljp/nlLtcXFwiLCBcXFwiY3VybFxcXCIsIFxcXCJhcmlhMlxcXCIsIFxcXCJSUENcXFwiXSwgMiwgXFxcIuaSreaUvuaooeW8j1xcXCIpLnNlbGVjdCgoKSA9PiB7XFxuICAgICAgICAgICAgc2V0SXRlbShcXFwicXVhcmtfcGxheU1vZGVcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5YiH5o2i5oiQ5YqfXFxcIjtcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uXzVcXFwiLFxcbiAgICAgICAgcGljX3VybDogXFxcImh0dHA6Ly8xMjMuNTYuMTA1LjE0NS9pbWcvYWxpX3BsYXkuc3ZnXFxcIixcXG4gICAgfSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuWKn+iDvVxcXCIsXFxuICAgICAgICB1cmw6ICQoW1xcXCLot7PovazlpLjlhYtBUFBcXFwiLCBcXFwi5aSN5Yi25YiG5Lqr6ZO+5o6lXFxcIiwgXFxcIuS4quS6uui0puWPt+euoeeQhlxcXCIsIFxcXCLljp/nlLvkuIvovb3nur/nqItcXFwiLCBcXFwi6K6+572uUlBDXFxcIl0sIDIpLnNlbGVjdCgoc2hhcmVJZCwgc2hhcmVQd2QsIGZyb21Ecml2ZSkgPT4ge1xcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gXFxcIui3s+i9rOWkuOWFi0FQUFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJxa2xpbms6Ly93d3cudWMuY24vYjIwYjg0ZmQ3MzVhOGRkM2Y3NTQxMTI5YmFjYzRlOWE/YWN0aW9uPW9wZW5fdXJsJnVybD1odHRwczovL3Bhbi5xdWFyay5jbi9zL1xcXCIgKyBzaGFyZUlkO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IFxcXCLkuKrkurrotKblj7fnrqHnkIZcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImFjY291bnRcXFwiKTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBcXFwi5Y6f55S75LiL6L2957q/56iLXFxcIikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJChnZXRJdGVtKFxcXCJzcGVlZFRocmVhZFxcXCIsIFxcXCIxMFxcXCIpLCBcXFwi6K+36L6T5YWlMy0zMuS5i+mXtOeahOaVtOaVsFxcXCIpLmlucHV0KCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBzcGVlZFRocmVhZCA9IHBhcnNlSW50KGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChzcGVlZFRocmVhZCA8IDMgfHwgc3BlZWRUaHJlYWQgPiAzMikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/orr7nva7kuI3lkIjms5VcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFwic3BlZWRUaHJlYWRcXFwiLCBTdHJpbmcoc3BlZWRUaHJlYWQpKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/orr7nva7miJDlip9cXFwiO1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBcXFwi5aSN5Yi25YiG5Lqr6ZO+5o6lXFxcIikge1xcbiAgICAgICAgICAgICAgICBpZiAoZnJvbURyaXZlID09PSBcXFwidWNcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly9cXFwiICsgYnVpbGRVcmwoXFxcImh0dHBzOi8vZHJpdmUudWMuY24vcy9cXFwiICsgc2hhcmVJZCArIFxcXCI/cHVibGljPTEjL2xpc3Qvc2hhcmVcXFwiLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVQd2Q6IHNoYXJlUHdkXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiY29weTovL1xcXCIgKyBidWlsZFVybChcXFwiaHR0cHM6Ly9wYW4ucXVhcmsuY24vcy9cXFwiICsgc2hhcmVJZCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3Njb2RlOiBzaGFyZVB3ZFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBcXFwi6K6+572uUlBDXFxcIikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJChbXFxcIuiuvue9rlJQQ+WcsOWdgFxcXCIsIFxcXCLorr7nva5Ub2tlblxcXCIsIFxcXCLkuIvovb3nm67lvZVcXFwiXSkuc2VsZWN0KCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gXFxcIuiuvue9rlJQQ+WcsOWdgFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEb3duVG9vbCA9ICQucmVxdWlyZShcXFwiRG93blRvb2xcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChnZXRJdGVtKFxcXCJycGNVcmxcXFwiLCBEb3duVG9vbC5nZXREZWZScGNVcmwoKSksIFxcXCJSUEPlnLDlnYAs5Li656m66Ieq5Yqo6I635Y+W5bGA5Z+f572R5Zyw5Z2AXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInJwY1VybFxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/orr7nva7miJDlip9cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJdGVtKFxcXCJycGNVcmxcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/muIXpmaTorr7nva5cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBcXFwi6K6+572uVG9rZW5cXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoZ2V0SXRlbShcXFwicnBjQXJpYVRva2VuXFxcIiwgXFxcIlxcXCIpLCBcXFwiVG9rZW4s5rKh5pyJ5bCx5LiN5aGrXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJycGNBcmlhVG9rZW5cXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/orr7nva7miJDlip9cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoZ2V0SXRlbShcXFwicnBjRG93bkRpclxcXCIsIFxcXCJcXFwiKSwgXFxcIuS4i+i9veS/neWtmOebruW9lSzkuLrnqbrlsLHmjInkuIvovb3lmajpu5jorqTot6/lvoRcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInJwY0Rvd25EaXJcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/orr7nva7miJDlip9cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCBzaGFyZUlkLCBzaGFyZVB3ZCwgZnJvbURyaXZlKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl81XFxcIixcXG4gICAgICAgIHBpY191cmw6IFxcXCJodHRwOi8vMTIzLjU2LjEwNS4xNDUvaW1nL2FsaV9maWxlaW50by5zdmdcXFwiLFxcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXG4gICAgfSk7XFxufVxcblxcblxcbmxldCBRdWFya1NoYXJlQXBpID0gJC5yZXF1aXJlKFxcXCJRdWFya1NoYXJlQXBpXFxcIiwgZnJvbURyaXZlKTtcXG5sZXQgcXVhcmtTaGFyZUFwaSA9IG5ldyBRdWFya1NoYXJlQXBpKHNoYXJlSWQsIHNoYXJlUHdkKS5zZXRUb2tlbihzaGFyZVRva2VuKS5zZXRSZWZyZXNoKChzaGFyZVRva2VuKSA9PiB7XFxuICAgIE1ZX1BBUkFNUy5zaGFyZVRva2VuID0gc2hhcmVUb2tlbjtcXG4gICAgc2V0UGFnZVBhcmFtcyhNWV9QQVJBTVMpO1xcbn0pO1xcblxcbmZ1bmN0aW9uIGZvcm1hdFNpemUoc2l6ZSkge1xcbiAgICBpZiAoIXNpemUpIHtcXG4gICAgICAgIHJldHVybiAnJztcXG4gICAgfVxcbiAgICBjb25zdCB1bml0cyA9IFsnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQiddO1xcbiAgICBsZXQgaSA9IDA7XFxuICAgIHdoaWxlIChzaXplID49IDEwMjQpIHtcXG4gICAgICAgIHNpemUgLz0gMTAyNDtcXG4gICAgICAgIGkrKztcXG4gICAgfVxcbiAgICBzaXplID0gaSA/IE51bWJlcihzaXplLnRvRml4ZWQoMikpIDogc2l6ZTtcXG4gICAgcmV0dXJuIGAke3NpemV9ICR7dW5pdHNbaV19YDtcXG59XFxuXFxubGV0IHN1YkV4dHMgPSBbXFxcInZ0dFxcXCIsIFxcXCJzcnRcXFwiLCBcXFwiYXNzXFxcIl07XFxubGV0IHRpdGxlSGVhZCA9IHtcXG4gICAgdmlkZW86IFxcXCLwn46sXFxcIixcXG4gICAgYXVkaW86IFxcXCLwn461XFxcIixcXG4gICAgZG9jOiBcXFwi8J+TkVxcXCIsXFxuICAgIGltYWdlOiBcXFwi8J+WvFxcXCIsXFxuICAgIGFyY2hpdmU6IFxcXCLwn5OmXFxcIixcXG4gICAgXFxcImRlZmF1bHRcXFwiOiBcXFwi4p2TXFxcIlxcbn07XFxuXFxuZnVuY3Rpb24gZ2V0SGVhZCh0eXBlLCBleHQpIHtcXG4gICAgbGV0IGhlYWQgPSB0aXRsZUhlYWRbdHlwZV07XFxuXFxuICAgIHJldHVybiBoZWFkIHx8IFxcXCLinZNcXFwiO1xcbn1cXG5cXG5mdW5jdGlvbiBnZXREb3duVXJsKGZpZCwgZmlkX3Rva2VuLCBwd2RfaWQsIHN0b2tlbiwgY2F0ZWdvcnksIGZyb21Ecml2ZSkge1xcblxcbiAgICB0cnkge1xcbiAgICAgICAgc2hvd0xvYWRpbmcoXFxcIuato+WcqOiOt+WPli4uLlxcXCIpO1xcbiAgICAgICAgbGV0IHBsYXlVcmxDYWNoZSA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJwbGF5VXJsQ2FjaGVcXFwiLCB7fSk7XFxuICAgICAgICBpZiAocGxheVVybENhY2hlW2ZpZF0pIHtcXG4gICAgICAgICAgICByZXR1cm4gcGxheVVybENhY2hlW2ZpZF07XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGxldCB1cmwgPSAkLnJlcXVpcmUoXFxcInBsYXlcXFwiLCBmcm9tRHJpdmUpLmdldFBsYXlVcmwoZmlkLCBmaWRfdG9rZW4sIHB3ZF9pZCwgc3Rva2VuLCBjYXRlZ29yeSk7XFxuICAgICAgICAgICAgcGxheVVybENhY2hlW2ZpZF0gPSB1cmw7XFxuICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcInBsYXlVcmxDYWNoZVxcXCIsIHBsYXlVcmxDYWNoZSk7XFxuICAgICAgICAgICAgcmV0dXJuIHVybDtcXG4gICAgICAgIH1cXG4gICAgfSBmaW5hbGx5IHtcXG4gICAgICAgIGhpZGVMb2FkaW5nKCk7XFxuICAgIH1cXG59XFxudHJ5IHtcXG4gICAgdmFyIHJlcyA9IHF1YXJrU2hhcmVBcGkuZ2V0TGlzdEZpbGUoZmlsZUlkLCBNWV9QQUdFLCBzb3J0VmFsdWUpO1xcbiAgICAvL+iuvue9ruagh+mimFxcbiAgICB2YXIgbGlzdCA9IHJlcy5kYXRhLmxpc3QgfHwgW107XFxuICAgIGlmIChzaGFyZUlkICE9PSBcXFwic2VsZlxcXCIpIHtcXG4gICAgICAgIHNldFBhZ2VUaXRsZShyZXMuZGF0YS5zaGFyZS50aXRsZSk7XFxuXFxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDAgJiYgIWZpbGVJZCkge1xcbiAgICAgICAgICAgIHJlcyA9IHF1YXJrU2hhcmVBcGkuZ2V0TGlzdEZpbGUocmVzLmRhdGEuc2hhcmUuZmlyc3RfZmlkLCBNWV9QQUdFLCBzb3J0VmFsdWUpO1xcbiAgICAgICAgICAgIHNldFBhZ2VUaXRsZShyZXMuZGF0YS5zaGFyZS50aXRsZSk7XFxuICAgICAgICAgICAgdmFyIGxpc3QgPSByZXMuZGF0YS5saXN0IHx8IFtdO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGxldCBuY29va2llID0gcXVhcmtTaGFyZUFwaS5nZXRQaWNDb29raWUoKTtcXG4gICAgLy9sb2cobmNvb2tpZSlcXG4gICAgbGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgLy/liKTmlq3mmK/lkKbmlofku7blpLlcXG4gICAgICAgIGlmIChpdGVtLmRpcikge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi8J+TglxcXCIgKyBpdGVtLmZpbGVfbmFtZSxcXG4gICAgICAgICAgICAgICAgZGVzYzogJC5kYXRlRm9ybWF0KGl0ZW0udXBkYXRlZF9hdCwgJ3l5eXktTU0tZGQnKSArICcgICcgKyBpdGVtLmluY2x1ZGVfaXRlbXMgKyAn6aG5ICAnLFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBcXFwiaHR0cDovLzEyMy41Ni4xMDUuMTQ1L3R1Ymlhby9tZXNzeS8yNy5zdmdcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvcXVhcmtMaXN0P3BhZ2U9ZnlwYWdlXFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IHN0eWxlLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVJZCxcXG4gICAgICAgICAgICAgICAgICAgIHNoYXJlUHdkLFxcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVUb2tlbjogcXVhcmtTaGFyZUFwaS5nZXRUb2tlbigpLFxcbiAgICAgICAgICAgICAgICAgICAgZmlsZUlkOiBpdGVtLmZpZCxcXG4gICAgICAgICAgICAgICAgICAgIGluaGVyaXRUaXRsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICBmcm9tRHJpdmVcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogZ2V0SGVhZChpdGVtLm9ial9jYXRlZ29yeSkgKyBpdGVtLmZpbGVfbmFtZSxcXG4gICAgICAgICAgICAgICAgZGVzYzogJC5kYXRlRm9ybWF0KGl0ZW0udXBkYXRlZF9hdCwgJ3l5eXktTU0tZGQnKSArICcgICcgKyBmb3JtYXRTaXplKGl0ZW0uc2l6ZSksXFxuICAgICAgICAgICAgICAgIHBpY191cmw6ICQoaXRlbS50aHVtYm5haWwsIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvb2tpZTogbmNvb2tpZVxcbiAgICAgICAgICAgICAgICB9KS5pbWFnZSgpLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoZ2V0RG93blVybCwgaXRlbS5maWQsIGl0ZW0uc2hhcmVfZmlkX3Rva2VuLCBzaGFyZUlkLCBxdWFya1NoYXJlQXBpLmdldFRva2VuKCksIGl0ZW0ub2JqX2NhdGVnb3J5LCBmcm9tRHJpdmUpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogc3R5bGUsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5maWQsXFxuICAgICAgICAgICAgICAgICAgICAvL2luaGVyaXRUaXRsZTogZmFsc2UsXFxuXFxuICAgICAgICAgICAgICAgICAgICBjbHM6ICdwbGF5bGlzdCAnICsgaXRlbS5vYmpfY2F0ZWdvcnlcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuXFxuICAgIH0pO1xcbn0gY2F0Y2ggKGUpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBlLm1lc3NhZ2UsXFxuICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgaWYgKGUubWVzc2FnZS5pbmNsdWRlcyhcXFwi5o+Q5Y+W56CBXFxcIikpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLovpPlhaXmj5Dlj5bnoIFcXFwiLFxcbiAgICAgICAgICAgIHVybDogJCgpLmlucHV0KChNWV9QQVJBTVMpID0+IHtcXG4gICAgICAgICAgICAgICAgc2V0UGFnZVBhcmFtcyhPYmplY3QuYXNzaWduKHt9LCBNWV9QQVJBTVMsIHtcXG4gICAgICAgICAgICAgICAgICAgIHNoYXJlUHdkOiBpbnB1dFxcbiAgICAgICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgfSwgTVlfUEFSQU1TKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiXFxuICAgICAgICB9KTtcXG4gICAgfVxcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJwbGF5XCIsXCJwYXRoXCI6XCJwbGF5XCIsXCJydWxlXCI6XCJqczpcXG5sZXQgZnJvbURyaXZlID0gbW9kdWxlLmltcG9ydFBhcmFtO1xcbmxldCBwciwgaG9tZVVybCwgYXBpLCBjb29raWU7XFxuaWYgKGZyb21Ecml2ZSA9PT0gXFxcInVjXFxcIikge1xcbiAgICBob21lVXJsID0gXFxcImh0dHBzOi8vZHJpdmUudWMuY24vXFxcIjtcXG4gICAgcHIgPSBcXFwiVUNCcm93c2VyXFxcIjtcXG4gICAgYXBpID0gXFxcImh0dHBzOi8vcGMtYXBpLnVjLmNuXFxcIjtcXG4gICAgY29va2llID0gZ2V0SXRlbShcXFwidWNDb29raWVcXFwiLCBcXFwiXFxcIik7XFxufSBlbHNlIHtcXG4gICAgaG9tZVVybCA9IFxcXCJodHRwczovL2RyaXZlLnF1YXJrLmNuL1xcXCI7XFxuICAgIHByID0gXFxcInVjcHJvXFxcIjtcXG4gICAgYXBpID0gXFxcImh0dHBzOi8vZHJpdmUucXVhcmsuY25cXFwiO1xcbiAgICBjb29raWUgPSBnZXRJdGVtKFxcXCJxdWFya0Nvb2tpZVxcXCIsIFxcXCJcXFwiKTtcXG59XFxuXFxubGV0IENvb2tpZU1hbmFnZSA9ICQucmVxdWlyZShcXFwiQ29va2llTWFuYWdlXFxcIik7XFxuXFxuY29uc3QgY29va2llTWFuYWdlID0gbmV3IENvb2tpZU1hbmFnZShjb29raWUpO1xcbmxldCBodHRwUmVxdWVzdCA9ICQucmVxdWlyZShcXFwiaHR0cFJlcXVlc3RcXFwiKTtcXG5cXG5mdW5jdGlvbiB3YWl0U2xlZXAodGltZSkge1xcbiAgICBqYXZhLmxhbmcuVGhyZWFkLnNsZWVwKHRpbWUgfHwgNjAwKTtcXG59XFxuXFxuZnVuY3Rpb24gcmVxdWVzdEh0dHAodXJsKSB7XFxuICAgIHJldHVybiBuZXcgaHR0cFJlcXVlc3QodXJsKVxcbiAgICAgICAgLnN1Y2Nlc3MoKGJvZHksIHJlcykgPT4ge1xcbiAgICAgICAgICAgIGlmIChib2R5LnN0YXR1cyAhPT0gMjAwKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihib2R5Lm1lc3NhZ2UpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBjb29raWVNYW5hZ2UuYWRkKHJlcy5oZWFkZXJzW1xcXCJzZXQtY29va2llXFxcIl0pO1xcbiAgICAgICAgICAgIHJldHVybiBib2R5O1xcbiAgICAgICAgfSlcXG4gICAgICAgIC5lcnJvclR5cGUoKGVyciwgcmVzKSA9PiB7XFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihKU09OLnBhcnNlKHJlcy5ib2R5KS5tZXNzYWdlKTtcXG4gICAgICAgIH0pXFxuICAgICAgICAuYm9keVRvU3RyaW5nKHRydWUpXFxuICAgICAgICAuaGVhZGVycyh7XFxuICAgICAgICAgICAgY29va2llOiBjb29raWVNYW5hZ2UuZ2V0KCksXFxuICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBcXFwiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgcXVhcmstY2xvdWQtZHJpdmUvMi41LjIwIENocm9tZS8xMDAuMC40ODk2LjE2MCBFbGVjdHJvbi8xOC4zLjUuNC1iNDc4NDkxMTAwIFNhZmFyaS81MzcuMzYgQ2hhbm5lbC9wY2trX290aGVyX2NoXFxcIixcXG4gICAgICAgICAgICBcXFwicmVmZXJlclxcXCI6IGhvbWVVcmxcXG4gICAgICAgIH0pO1xcbn1cXG5cXG5mdW5jdGlvbiBnZXREcml2ZUluZm8oKSB7XFxuICAgIHJldHVybiByZXF1ZXN0SHR0cChhcGkgKyBcXFwiLzEvY2xvdWRkcml2ZS9zaGFyZS9zaGFyZXBhZ2UvZGlyP3ByPVxcXCIgKyBwciArIFxcXCImZnI9cGMmYXZlcj0xXFxcIikuc3RhcnQodHJ1ZSk7XFxufVxcblxcbmZ1bmN0aW9uIGNyZWF0ZVNhdmVUYXNrKGZpZCwgZmlkX3Rva2VuLCBwd2RfaWQsIHN0b2tlbikge1xcbiAgICBsZXQgZHJpdmVJbmZvID0gZ2V0RHJpdmVJbmZvKCk7XFxuICAgIHJldHVybiByZXF1ZXN0SHR0cChhcGkgKyBcXFwiLzEvY2xvdWRkcml2ZS9zaGFyZS9zaGFyZXBhZ2Uvc2F2ZT9wcj1cXFwiICsgcHIgKyBcXFwiJmZyPXBjXFxcIikuc2V0U3RhcnRSZXF1ZXN0RnVuYyhwb3N0KS5ib2R5KHtcXG4gICAgICAgIFxcXCJmaWRfbGlzdFxcXCI6IFtcXG4gICAgICAgICAgICBmaWRcXG4gICAgICAgIF0sXFxuICAgICAgICBcXFwiZmlkX3Rva2VuX2xpc3RcXFwiOiBbXFxuICAgICAgICAgICAgZmlkX3Rva2VuXFxuICAgICAgICBdLFxcbiAgICAgICAgXFxcInRvX3BkaXJfZmlkXFxcIjogZHJpdmVJbmZvLmRhdGEuZGlyLmZpZCxcXG4gICAgICAgIFxcXCJwd2RfaWRcXFwiOiBwd2RfaWQsXFxuICAgICAgICBcXFwic3Rva2VuXFxcIjogc3Rva2VuLFxcbiAgICAgICAgXFxcInBkaXJfZmlkXFxcIjogZHJpdmVJbmZvLmRhdGEuZGlyLnBkaXJfZmlkXFxuICAgIH0pLnN0YXJ0KHRydWUpO1xcbn1cXG5cXG5mdW5jdGlvbiBjcmVhdGVEZWxldGVUYXNrKGZpZCkge1xcbiAgICBsZXQgZHJpdmVJbmZvID0gZ2V0RHJpdmVJbmZvKCk7XFxuICAgIHJldHVybiByZXF1ZXN0SHR0cChhcGkgKyBcXFwiLzEvY2xvdWRkcml2ZS9maWxlL2RlbGV0ZT9wcj1cXFwiICsgcHIgKyBcXFwiJmZyPXBjXFxcIikuc2V0U3RhcnRSZXF1ZXN0RnVuYyhwb3N0KS5ib2R5KHtcXG4gICAgICAgIFxcXCJhY3Rpb25fdHlwZVxcXCI6IDIsXFxuICAgICAgICBcXFwiZmlsZWxpc3RcXFwiOiBbXFxuICAgICAgICAgICAgZmlkXFxuICAgICAgICBdLFxcbiAgICAgICAgXFxcImV4Y2x1ZGVfZmlkc1xcXCI6IFtdXFxuICAgIH0pLnN0YXJ0KHRydWUpO1xcbn1cXG5cXG5mdW5jdGlvbiB0YXNrKHRhc2tfaWQsIHJldHJ5X2luZGV4KSB7XFxuICAgIHJldHVybiByZXF1ZXN0SHR0cChhcGkgKyBcXFwiLzEvY2xvdWRkcml2ZS90YXNrXFxcIikuYnVpbGRVcmwoe1xcbiAgICAgICAgcHI6IHByLFxcbiAgICAgICAgZnI6IFxcXCJwY1xcXCIsXFxuICAgICAgICB0YXNrX2lkOiB0YXNrX2lkLFxcbiAgICAgICAgcmV0cnlfaW5kZXg6IHJldHJ5X2luZGV4XFxuICAgIH0pLnN0YXJ0KHRydWUpO1xcbn1cXG5cXG5mdW5jdGlvbiBxdWVyeVRhc2sodGFza19pZCkge1xcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDk7IGkrKykge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBsZXQgcmVzID0gdGFzayh0YXNrX2lkLCBpICsgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgIGlmIChyZXMuZGF0YS5zdGF0dXMgPT09IDIpIHtcXG4gICAgICAgICAgICAgICAgd2FpdFNsZWVwKDEwMDApO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzLmRhdGEuc2F2ZV9hcy5zYXZlX2FzX3RvcF9maWRzWzBdO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB3YWl0U2xlZXAoMzAwICogKGkgKyAxKSk7XFxuICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICB9XFxuICAgIHJldHVybiB2b2lkKDApO1xcbn1cXG5cXG5mdW5jdGlvbiBxdWVyeVRhc2tTdGF0dXModGFza19pZCkge1xcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBsZXQgcmVzID0gdGFzayh0YXNrX2lkLCBpICsgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgIGlmIChyZXMuZGF0YS5zdGF0dXMgPT09IDIpIHtcXG4gICAgICAgICAgICAgICAgd2FpdFNsZWVwKDEwMDApO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgd2FpdFNsZWVwKDMwMCk7XFxuICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICB9XFxuICAgIHJldHVybiBmYWxzZTtcXG59XFxuXFxuZnVuY3Rpb24gZ2V0UHJldmlld1ZpZGVvKGZpZCkge1xcbiAgICByZXR1cm4gcmVxdWVzdEh0dHAoYXBpICsgXFxcIi8xL2Nsb3VkZHJpdmUvZmlsZS92Mi9wbGF5P3ByPVxcXCIgKyBwciArIFxcXCImZnI9cGNcXFwiKS5ib2R5KHtcXG4gICAgICAgIFxcXCJmaWRcXFwiOiBmaWQsXFxuICAgICAgICBcXFwicmVzb2x1dGlvbnNcXFwiOiBcXFwibm9ybWFsLGxvdyxoaWdoLHN1cGVyLDJrLDRrXFxcIixcXG4gICAgICAgIFxcXCJzdXBwb3J0c1xcXCI6IFxcXCJmbXA0LG0zdThcXFwiXFxuICAgIH0pLnNldFN0YXJ0UmVxdWVzdEZ1bmMocG9zdCkuc3RhcnQodHJ1ZSk7XFxufVxcblxcblxcbmZ1bmN0aW9uIGdldERvd25sb2FkVXJsKGZpZCkge1xcbiAgICByZXR1cm4gcmVxdWVzdEh0dHAoYXBpICsgXFxcIi8xL2Nsb3VkZHJpdmUvZmlsZS9kb3dubG9hZD9wcj1cXFwiICsgcHIgKyBcXFwiJmZyPXBjXFxcIikuYm9keSh7XFxuICAgICAgICBcXFwiZmlkc1xcXCI6IFtmaWRdXFxuICAgIH0pLnNldFN0YXJ0UmVxdWVzdEZ1bmMocG9zdCkuc3RhcnQodHJ1ZSk7XFxufVxcblxcblxcbmNvbnN0IERvd25Ub29sID0gJC5yZXF1aXJlKFxcXCJEb3duVG9vbFxcXCIpO1xcblxcbmZ1bmN0aW9uIGdldFBsYXlVcmwoZmlkLCBmaWRfdG9rZW4sIHB3ZF9pZCwgc3Rva2VuLCBjYXRlZ29yeSwgaXNnZXRjdXJsKSB7XFxuICAgIGxldCBpc1NoYXJlID0gcHdkX2lkICE9PSBcXFwic2VsZlxcXCI7XFxuICAgIFxcbiAgICB0cnkge1xcbiAgICAgICAgaWYgKCFjb29raWUpIHJldHVybiBcXFwidG9hc3Q6Ly/or7fnmbvlvZXotKblj7dcXFwiO1xcbiAgICAgICAgbGV0IGFzZmlkID0gXFxcIlxcXCI7XFxuICAgICAgICBpZiAoaXNTaGFyZSkge1xcbiAgICAgICAgICAgIGxldCB0YXNrSWQgPSBjcmVhdGVTYXZlVGFzayhmaWQsIGZpZF90b2tlbiwgcHdkX2lkLCBzdG9rZW4pLmRhdGEudGFza19pZDtcXG4gICAgICAgICAgICBhc2ZpZCA9IHF1ZXJ5VGFzayh0YXNrSWQpO1xcbiAgICAgICAgICAgIGlmICghYXNmaWQpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+iOt+WPluWksei0pVxcXCI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBhc2ZpZCA9IGZpZDtcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBwbGF5Q29va2llID0gY29va2llTWFuYWdlLmdldCgpO1xcbiAgICAgICAgLyppZiAocHIgPT09IFxcXCJVQ0Jyb3dzZXJcXFwiKSB7XFxuICAgICAgICAgICAgcGxheUNvb2tpZSA9IGNvb2tpZTtcXG4gICAgICAgIH0qL1xcbiAgICAgICAgbGV0IHBsYXlIZWFkZXIgPSB7XFxuICAgICAgICAgICAgUmVmZXJlcjogaG9tZVVybCxcXG4gICAgICAgICAgICBjb29raWU6IHBsYXlDb29raWUsXFxuICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBcXFwiTW96aWxsYS81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTBfMTVfNykgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzEwMC4wLjQ4OTYuNTggVUNCcm93c2VyLzE2LjUuOC4xMzA5IE1vYmlsZSBTYWZhcmkvNTM3LjM2XFxcIlxcbiAgICAgICAgfTtcXG4gICAgICAgIC8qbGV0IHBsYXlIZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgcGxheUhlYWRlciwge1xcbiAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogXFxcIkxvZ1N0YXRpc3RpY1xcXCJcXG4gICAgICAgIH0pOyovXFxuICAgICAgICBsZXQgY2hlY2tTaGFyZT0oKT0+KGlzU2hhcmUgJiYgY3JlYXRlRGVsZXRlVGFzayhhc2ZpZCkpfHwocGxheUhlYWRlci5jb29raWU9Y29va2llTWFuYWdlLmdldCgpKTtcXG4gICAgICAgIGxldCBwbGF5TW9kZSA9IGdldEl0ZW0oXFxcInF1YXJrX3BsYXlNb2RlXFxcIiwgXFxcIui9rOeggVxcXCIpO1xcbiAgICAgICAgaWYgKHBsYXlNb2RlID09PSBcXFwiUlBDXFxcIikge1xcbiAgICAgICAgICAgIGxldCBkb3duSW5mbyA9IGdldERvd25sb2FkVXJsKGFzZmlkKS5kYXRhWzBdO1xcbiAgICAgICAgICAgIGxldCBkb3dubG9hZF91cmwgPSBkb3duSW5mby5kb3dubG9hZF91cmw7XFxuICAgICAgICAgICAgbGV0IGZpbGVuYW1lID0gZG93bkluZm8uZmlsZV9uYW1lO1xcbiAgICAgICAgICAgIGNoZWNrU2hhcmUoKTtcXG4gICAgICAgICAgICByZXR1cm4gRG93blRvb2wudXBkYXRlUnBjKGRvd25sb2FkX3VybCwgcGxheUhlYWRlciwgZmlsZW5hbWUpID8gXFxcInRvYXN0Oi8v5Yib5bu65oiQ5YqfXFxcIiA6IFxcXCJ0b2FzdDovL+WIm+W7uuWksei0pVxcXCI7XFxuICAgICAgICAgICAgLy9yZXR1cm4gXFxcInRvYXN0Oi8v5bey5o6o6YCBXFxcIjtcXG4gICAgICAgIH0gZWxzZSBpZiAoW1xcXCJjdXJsXFxcIiwgXFxcImFyaWEyXFxcIl0uaW5jbHVkZXMocGxheU1vZGUpKSB7XFxuICAgICAgICAgICAgbGV0IGRvd25JbmZvID0gZ2V0RG93bmxvYWRVcmwoYXNmaWQpLmRhdGFbMF07XFxuICAgICAgICAgICAgbGV0IGRvd25sb2FkX3VybCA9IGRvd25JbmZvLmRvd25sb2FkX3VybDtcXG4gICAgICAgICAgICBsZXQgZmlsZW5hbWUgPSBkb3duSW5mby5maWxlX25hbWU7XFxuICAgICAgICAgICAgY2hlY2tTaGFyZSgpXFxuICAgICAgICAgICAgbGV0IGNubWQgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICBpZiAocGxheU1vZGUgPT09IFxcXCJjdXJsXFxcIikge1xcbiAgICAgICAgICAgICAgICBjbm1kID0gRG93blRvb2wuZ2V0RG93bkNVUkwoZG93bmxvYWRfdXJsLCBwbGF5SGVhZGVyLCBmaWxlbmFtZSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgY25tZCA9IERvd25Ub29sLmdldERvd25BcmlhMmMoZG93bmxvYWRfdXJsLCBwbGF5SGVhZGVyLCBmaWxlbmFtZSwgTnVtYmVyKGdldEl0ZW0oXFxcInNwZWVkVGhyZWFkXFxcIiwgXFxcIjEwXFxcIikpKTtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgbGV0IHBhdGggPSBcXFwiaGlrZXI6Ly9maWxlcy9fY2FjaGUvXFxcIiArIGZpbGVuYW1lICsgXFxcIihcXFwiICsgcGxheU1vZGUgKyBcXFwiKS50eHRcXFwiO1xcbiAgICAgICAgICAgIHdyaXRlRmlsZShwYXRoLCBjbm1kKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInNoYXJlOi8vXFxcIiArIHBhdGg7XFxuICAgICAgICB9IGVsc2UgaWYgKGNhdGVnb3J5ID09IFxcXCJ2aWRlb1xcXCIpIHtcXG5cXG4gICAgICAgICAgICBpZiAocGxheU1vZGUgPT09IFxcXCLovaznoIFcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGxldCB2aWRlb1JlcyA9IGdldFByZXZpZXdWaWRlbyhhc2ZpZCk7XFxuICAgICAgICAgICAgICAgIGNoZWNrU2hhcmUoKTtcXG4gICAgICAgICAgICAgICAgbGV0IHZpZGVvTGlzdCA9IHZpZGVvUmVzLmRhdGEudmlkZW9fbGlzdDtcXG4gICAgICAgICAgICAgICAgbGV0IHBsYXlMaXN0ID0ge1xcbiAgICAgICAgICAgICAgICAgICAgbmFtZXM6IFtdLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsczogW10sXFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBbXVxcbiAgICAgICAgICAgICAgICB9OyAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgdmlkZW9MaXN0LmZpbHRlcih2ID0+IHYuYWNjZXNzYWJsZSkuZm9yRWFjaCh2ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHBsYXlMaXN0Lm5hbWVzLnB1c2godi5yZXNvbHV0aW9uKTtcXG4gICAgICAgICAgICAgICAgICAgIHBsYXlMaXN0LnVybHMucHVzaCh2LnZpZGVvX2luZm8udXJsICsgXFxcIiNpc1ZpZGVvPXRydWUjXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBwbGF5TGlzdC5oZWFkZXJzLnB1c2gocGxheUhlYWRlcik7XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHBsYXlMaXN0KTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcblxcbiAgICAgICAgICAgICAgICBsZXQgcGxheVVybCA9IGdldERvd25sb2FkVXJsKGFzZmlkKS5kYXRhWzBdLmRvd25sb2FkX3VybDtcXG4gICAgICAgICAgICAgICAgY2hlY2tTaGFyZSgpO1xcbiAgICAgICAgICAgICAgICBsZXQgcGxheUxpc3QgPSB7XFxuICAgICAgICAgICAgICAgICAgICBuYW1lczogW3BsYXlNb2RlXSxcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFtwbGF5VXJsICsgXFxcIiNpc1ZpZGVvPXRydWUjXFxcIiArIChwbGF5TW9kZSA9PT0gXFxcIuWOn+eUu1xcXCIgPyBcXFwiI2Zhc3RQbGF5TW9kZSMjdGhyZWFkcz1cXFwiICsgZ2V0SXRlbShcXFwic3BlZWRUaHJlYWRcXFwiLCBcXFwiMTBcXFwiKSArIFxcXCIjXFxcIiA6IFxcXCJcXFwiKV0sXFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBbcGxheUhlYWRlcl1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHBsYXlMaXN0KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGxldCBwbGF5VXJsID0gZ2V0RG93bmxvYWRVcmwoYXNmaWQpLmRhdGFbMF0uZG93bmxvYWRfdXJsO1xcblxcbiAgICAgICAgICAgIGNoZWNrU2hhcmUoKTtcXG4gICAgICAgICAgICBpZiAoY2F0ZWdvcnkgPT09ICdhdWRpbycpIHtcXG4gICAgICAgICAgICAgICAgbGV0IHBsYXlMaXN0ID0ge1xcbiAgICAgICAgICAgICAgICAgICAgbmFtZXM6IFtcXFwi6Z+z6aKRXFxcIl0sXFxuICAgICAgICAgICAgICAgICAgICB1cmxzOiBbcGxheVVybCArIFxcXCIjaXNNdXNpYz10cnVlI1xcXCJdLFxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogW3BsYXlIZWFkZXJdLFxcbiAgICAgICAgICAgICAgICAgICAgbHlyaWM6IFxcXCJcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHBsYXlMaXN0KTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNhdGVnb3J5ID09PSAnaW1hZ2UnKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkKHBsYXlVcmwsIHBsYXlIZWFkZXIpLmltYWdlKCk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcGxheUhlYWRlciA9IE9iamVjdC5rZXlzKHBsYXlIZWFkZXIpLm1hcChrZXkgPT4ga2V5ICsgXFxcIkBcXFwiICsgU3RyaW5nKHBsYXlIZWFkZXJba2V5XSkucmVwbGFjZSgvOy9nLCBcXFwi77yb77ybXFxcIikpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImRvd25sb2FkOi8vXFxcIiArIHBsYXlVcmwgKyBcXFwiO3tcXFwiICsgcGxheUhlYWRlci5qb2luKFxcXCImJlxcXCIpICsgXFxcIn1cXFwiO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgaWYgKGUubWVzc2FnZS5pbmNsdWRlcyhcXFwicmVxdWlyZSBsb2dpblxcXCIpIHx8IGUubWVzc2FnZS5pbmNsdWRlcyhcXFwidG9rZW5cXFwiKSB8fCBlLm1lc3NhZ2UuaW5jbHVkZXMoXFxcImludmFsaWRcXFwiKSkge1xcbiAgICAgICAgICAgIHRvYXN0KFxcXCLmnKrnmbvlvZXmiJbnmbvlvZXov4fmnJ/vvIzor7fph43mlrDnmbvlvZVcXFwiKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9sb2dpbiNub1JlY29yZEhpc3RvcnkjI25vSGlzdG9yeSM/ZnJvbT1cXFwiICsgZnJvbURyaXZlO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL1xcXCIgKyBlLnRvU3RyaW5nKCk7XFxuICAgIH1cXG59XFxuXFxuJC5leHBvcnRzID0ge1xcbiAgICBnZXRQbGF5VXJsXFxufTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIueZu+W9lei0puWPt1wiLFwicGF0aFwiOlwibG9naW5cIixcInJ1bGVcIjpcImpzOlxcbmxldCBkID0gW107XFxuc2V0UGFnZVRpdGxlKFxcXCLnmbvlvZXotKblj7dcXFwiKTtcXG5hZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICgpID0+IGNsZWFyTXlWYXIoXFxcImNvb2tpZVxcXCIpKTtcXG5sZXQgZnJvbT1nZXRQYXJhbShcXFwiZnJvbVxcXCIsXFxcIlxcXCIpO1xcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi4oCc4oCc56Gu6K6k55m75b2V4oCd4oCdXFxcIixcXG4gICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChmcm9tKSA9PiB7XFxuICAgICAgICAvL2xldCBjbSA9IGFuZHJvaWQud2Via2l0LkNvb2tpZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcXG4gICAgICAgIC8vbGV0IGNtID0gY29tLnRlbmNlbnQuc210dC5zZGsuQ29va2llTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xcbiAgICAgICAgLy9sZXQgY29va2llID0gU3RyaW5nKGNtLmdldENvb2tpZShcXFwiaHR0cHM6Ly9wYW4ucXVhcmsuY25cXFwiKSB8fCBcXFwiXFxcIik7XFxuICAgICAgICBsZXQgY29va2llID0gZ2V0TXlWYXIoXFxcImNvb2tpZVxcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgIGlmICgkLnJlcXVpcmUoXFxcInRvb2xcXFwiKS5pc0xvZ2luQ29va2llKGNvb2tpZSkpIHtcXG4gICAgICAgICAgICBpZihmcm9tPT09XFxcInVjXFxcIil7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInVjQ29va2llXFxcIiwgY29va2llKTtcXG4gICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgc2V0SXRlbShcXFwicXVhcmtDb29raWVcXFwiLCBjb29raWUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBiYWNrKCk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+eZu+W9leaIkOWKn1xcXCI7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5pyq55m75b2VXFxcIjtcXG4gICAgfSwgZnJvbSksXFxuICAgIGRlc2M6IFxcXCLigJzigJzigJ3igJ08c21hbGw+54K55Ye75aS05YOP5Y+v5Lul6YCA5Ye66LSm5Y+36YeN5paw55m75b2VPC9zbWFsbD5cXFwiLFxcbiAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6IFxcXCJsaW5lX2JsYW5rXFxcIlxcbn0pO1xcbmxldCBkdXJsPWZyb209PT1cXFwidWNcXFwiP1xcXCJodHRwczovL2RyaXZlLnVjLmNuXFxcIjpcXFwiaHR0cHM6Ly9wYW4ucXVhcmsuY25cXFwiO1xcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiBcXFwieDVfd2Vidmlld19zaW5nbGVcXFwiLFxcbiAgICB1cmw6IGR1cmwsXFxuICAgIGRlc2M6IFxcXCJsaXN0JiZzY3JlZW4tMTUwXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIHVhOiBQQ19VQSxcXG4gICAgICAgIGpzOiAkLnRvU3RyaW5nKCh0aXRsZSwgZHVybCkgPT4ge1xcbiAgICAgICAgICAgIGxldCBjb29raWUgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgIGNvb2tpZSA9IGZiYS5nZXRDb29raWUoZHVybCk7XFxuICAgICAgICAgICAgICAgIGZiYS5wdXRWYXIodGl0bGUgKyBcXFwiQGNvb2tpZVxcXCIsIGNvb2tpZSk7XFxuICAgICAgICAgICAgfSwgMjAwKTtcXG4gICAgICAgIH0sIE1ZX1JVTEUudGl0bGUsIGR1cmwpXFxuICAgIH1cXG59KTtcXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuW3peWFt1wiLFwicGF0aFwiOlwidG9vbFwiLFwicnVsZVwiOlwianM6XFxuXFxuJC5leHBvcnRzPXtcXG4gICAgaXNMb2dpbkNvb2tpZShjb29raWUpe1xcbiAgICAgICAgLy9yZXR1cm4gdHJ1ZTtcXG4gICAgICAgIHJldHVybiAhIShjb29raWUgICYmIGNvb2tpZS5pbmNsdWRlcyhcXFwiX191aWQ9XFxcIikgJiYgY29va2llLmluY2x1ZGVzKFxcXCJfX3B1cz1cXFwiKSk7XFxuICAgIH1cXG59O1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Liq5Lq66LSm5Y+36K6+572uXCIsXCJwYXRoXCI6XCJhY2NvdW50XCIsXCJydWxlXCI6XCIkLmV4cG9ydHMgPSAkKFtcXFwi5aS45YWL5LqM57u056CB55m75b2VXFxcIiwgXFxcIkNvb2tpZeeZu+W9lVxcXCIsIFxcXCLnvZHpobXnmbvlvZVcXFwiLCBcXFwi5aSN5Yi2Q29va2llXFxcIiwgXFxcIua4hemZpENvb2tpZVxcXCIsIFxcXCLojrflj5bnvZHnu5zlhbHkuqtLS0Nvb2tpZVxcXCIsIFxcXCJVQ+S6jOe7tOeggeeZu+W9lVxcXCIsIFxcXCJVQ+e9kemhteeZu+W9lVxcXCIsIFxcXCJVQ0Nvb2tpZeeZu+W9lVxcXCIsIFxcXCLlpI3liLZVQ0Nvb2tpZVxcXCIsIFxcXCLmuIXpmaRVQ0Nvb2tpZVxcXCJdKS5zZWxlY3QoKGlzcikgPT4ge1xcbiAgICBmdW5jdGlvbiBnZW5lcmF0ZVJhbmRvbVVVSUQoKSB7XFxuICAgICAgICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbihjKSB7XFxuICAgICAgICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLFxcbiAgICAgICAgICAgICAgICB2ID0gYyA9PT0gJ3gnID8gciA6IChyICYgMHgzIHwgMHg4KTtcXG4gICAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBpZiAoaW5wdXQgPT09IFxcXCLnvZHpobXnmbvlvZVcXFwiKSB7XFxuICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9sb2dpbiNub1JlY29yZEhpc3RvcnkjI25vSGlzdG9yeSNcXFwiO1xcbiAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBcXFwiQ29va2ll55m75b2VXFxcIikge1xcbiAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLor7fovpPlhaVDb29raWVcXFwiKS5pbnB1dCgoaXNyKSA9PiB7XFxuICAgICAgICAgICAgaWYgKCQucmVxdWlyZShcXFwidG9vbFxcXCIpLmlzTG9naW5Db29raWUoaW5wdXQpKSB7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInF1YXJrQ29va2llXFxcIiwgaW5wdXQucmVwbGFjZSgvXFxcXHMvZywgXFxcIlxcXCIpKTtcXG4gICAgICAgICAgICAgICAgaXNyICYmIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/orr7nva7miJDlip9cXFwiO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9Db29raWXmoLzlvI/plJnor69cXFwiO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIGlzcik7XFxuICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IFxcXCLku45UVkJPWOiOt+WPlkNvb2tpZVxcXCIpIHtcXG4gICAgICAgIGxldCBwYXRoID0gXFxcIi9zdG9yYWdlL2VtdWxhdGVkLzAvVFYvLnF1YXJrX3VzZXJcXFwiO1xcbiAgICAgICAgaWYgKGZpbGVFeGlzdChcXFwiZmlsZTovL1xcXCIgKyBwYXRoKSkge1xcbiAgICAgICAgICAgIGlmICghbmV3IGphdmEuaW8uRmlsZShwYXRoKS5jYW5SZWFkKCkpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIuayoeacieadg+mZkOivu+WPlkNvb2tpZeaWh+S7tu+8jOivt+aJk+W8gOaJgOacieaWh+S7tuadg+mZkFxcXFxu5rW36ZiU6K6+572uLT7mm7TlpJrlip/og70tPuWGhemDqOaWh+S7tueuoeeQhi0+5Y+z5LiK6KeSXFxcIikuY29uZmlybSgoKSA9PiB7fSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGxldCBqc29uID0gSlNPTi5wYXJzZShmZXRjaChcXFwiZmlsZTovL1xcXCIgKyBwYXRoKSk7XFxuICAgICAgICAgICAgICAgIGxldCBjb29raWUgPSBqc29uLmNvb2tpZTtcXG4gICAgICAgICAgICAgICAgaWYgKCQucmVxdWlyZShcXFwidG9vbFxcXCIpLmlzTG9naW5Db29raWUoY29va2llKSkge1xcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFwicXVhcmtDb29raWVcXFwiLCBjb29raWUpO1xcbiAgICAgICAgICAgICAgICAgICAgaXNyICYmIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6K6+572u5oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9Db29raWXmoLzlvI/plJnor69cXFwiO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6I635Y+W5aSx6LSl5YWx5Lqr5paH5Lu25o2f5Z2PXFxcIjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiAkKFxcXCLmnKrmo4DmtYvliLBUVkJPWOeahENvb2tpZeaWh+S7tlxcXFxu6K+35L2/55So6L+H5ZCO5YaN5bCd6K+VXFxcIikuY29uZmlybSgoKSA9PiB7fSk7XFxuICAgICAgICB9XFxuICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IFxcXCLlpI3liLZDb29raWVcXFwiKSB7XFxuICAgICAgICBsZXQgY29va2llID0gZ2V0SXRlbShcXFwicXVhcmtDb29raWVcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICBpZiAoY29va2llKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJjb3B5Oi8vXFxcIiArIGNvb2tpZTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+acqueZu+W9lVxcXCI7XFxuICAgICAgICB9XFxuICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IFxcXCLmuIXpmaRDb29raWVcXFwiKSB7XFxuICAgICAgICBjbGVhckl0ZW0oXFxcInF1YXJrQ29va2llXFxcIik7XFxuICAgICAgICBpc3IgJiYgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/pgIDlh7rnmbvlvZVcXFwiO1xcbiAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBcXFwiVUPnvZHpobXnmbvlvZVcXFwiKSB7XFxuICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9sb2dpbiNub1JlY29yZEhpc3RvcnkjI25vSGlzdG9yeSM/ZnJvbT11Y1xcXCI7XFxuICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IFxcXCJVQ0Nvb2tpZeeZu+W9lVxcXCIpIHtcXG4gICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi6K+36L6T5YWlQ29va2llXFxcIikuaW5wdXQoKGlzcikgPT4ge1xcbiAgICAgICAgICAgIGlmICgkLnJlcXVpcmUoXFxcInRvb2xcXFwiKS5pc0xvZ2luQ29va2llKGlucHV0KSkge1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJ1Y0Nvb2tpZVxcXCIsIGlucHV0LnJlcGxhY2UoL1xcXFxzL2csIFxcXCJcXFwiKSk7XFxuICAgICAgICAgICAgICAgIGlzciAmJiByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6K6+572u5oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8vQ29va2ll5qC85byP6ZSZ6K+vXFxcIjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCBpc3IpO1xcbiAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBcXFwi5aSN5Yi2VUNDb29raWVcXFwiKSB7XFxuICAgICAgICBsZXQgY29va2llID0gZ2V0SXRlbShcXFwidWNDb29raWVcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICBpZiAoY29va2llKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJjb3B5Oi8vXFxcIiArIGNvb2tpZTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+acqueZu+W9lVxcXCI7XFxuICAgICAgICB9XFxuICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IFxcXCLmuIXpmaRVQ0Nvb2tpZVxcXCIpIHtcXG4gICAgICAgIGNsZWFySXRlbShcXFwidWNDb29raWVcXFwiKTtcXG4gICAgICAgIGlzciAmJiByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+mAgOWHuueZu+W9lVxcXCI7XFxuICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IFxcXCLojrflj5bnvZHnu5zlhbHkuqtLS0Nvb2tpZVxcXCIpIHtcXG4gICAgICAgIGxldCBoaGQgPSB7XFxuICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiAnQXBhY2hlLUh0dHBDbGllbnQvVU5BVkFJTEFCTEUgKGphdmEgMS40KSdcXG4gICAgICAgIH3CoFxcbiAgICAgICAgbGV0IGR4Y3VybCA9ICdodHRwOi8vYXBpLnY2eC53aHQuZGd3aHQudG9wL3RleHQvM2RlODhkMTBkMDE5MjliZS8nXFxuICAgICAgICBsZXQgeGNkYXRhID0gWydjOTlkNzQxMWNjYzI5YmMxJ11cXG4gICAgICAgIGxldCBkeGMgPSBbXVxcbiAgICAgICAgbGV0IHlzY29va2llID0gJydcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeGNkYXRhLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgbGV0IGRhdGEgPSBmZXRjaChkeGN1cmwgKyB4Y2RhdGFbaV0sIHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczogaGhkXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgaWYgKCQucmVxdWlyZShcXFwidG9vbFxcXCIpLmlzTG9naW5Db29raWUoZGF0YSkpIHtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIHlzY29va2llID0gZGF0YS5zcGxpdChcXFwi4pGgXFxcIilbMV07XFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIGlmICh5c2Nvb2tpZSkge1xcbiAgICAgICAgICAgIHNldEl0ZW0oXFxcInF1YXJrQ29va2llXFxcIiwgeXNjb29raWUpO1xcbiAgICAgICAgICAgIGlzciAmJiByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/orr7nva7miJDlip9cXFwiO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6I635Y+W5aSx6LSlXFxcIjtcXG4gICAgICAgIH1cXG4gICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gXFxcIuWkuOWFi+S6jOe7tOeggeeZu+W9lVxcXCIpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgbGV0IHJlcXVlc3RfaWQgPSBnZW5lcmF0ZVJhbmRvbVVVSUQoKTtcXG4gICAgICAgICAgICBsZXQgcWNUb2tlbiA9IEpTT04ucGFyc2UoZmV0Y2goYnVpbGRVcmwoXFxcImh0dHBzOi8vdW9wLnF1YXJrLmNuL2Nhcy9hamF4L2dldFRva2VuRm9yUXJjb2RlTG9naW5cXFwiLCB7XFxuICAgICAgICAgICAgICAgIHJlcXVlc3RfaWQsXFxuICAgICAgICAgICAgICAgIGNsaWVudF9pZDogXFxcIjUzMlxcXCIsXFxuICAgICAgICAgICAgICAgIHY6IFxcXCIxLjJcXFwiXFxuICAgICAgICAgICAgfSkpKS5kYXRhLm1lbWJlcnMudG9rZW47XFxuICAgICAgICAgICAgY3JlYXRlUVJDb2RlKGBodHRwczovL3N1LnF1YXJrLmNuLzRfZU1IQko/dG9rZW49JHtxY1Rva2VufSZjbGllbnRfaWQ9NTMyJnNzYj13ZWJsb2dpbiZ1Y19wYXJhbV9zdHI9JnVjX2Jpel9zdHI9UyUzQWN1c3RvbSU3Q09QVCUzQVNBUkVBJTQwMCU3Q09QVCUzQUlNTUVSU0lWRSU0MDElN0NPUFQlM0FCQUNLX0JUTl9TVFlMRSU0MDBgLCBmYWxzZSk7XFxuICAgICAgICAgICAgbGV0IHNlcnZpY2VfdGlja2V0ID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGVjID0gMDsgaSA8IDMwOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgamF2YS5sYW5nLlRocmVhZC5zbGVlcCgyMDAwKTtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB0aWNrZXQgPSBKU09OLnBhcnNlKGZldGNoKGJ1aWxkVXJsKFxcXCJodHRwczovL3VvcC5xdWFyay5jbi9jYXMvYWpheC9nZXRTZXJ2aWNlVGlja2V0QnlRcmNvZGVUb2tlblxcXCIsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X2lkOiBnZW5lcmF0ZVJhbmRvbVVVSUQoKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfaWQ6IFxcXCI1MzJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHY6IFxcXCIxLjJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiBxY1Rva2VuXFxuICAgICAgICAgICAgICAgICAgICB9KSkpO1xcbiAgICAgICAgICAgICAgICAgICAgLy9sb2codGlja2V0KVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRpY2tldC5zdGF0dXMgPT0gMjAwMDAwMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VfdGlja2V0ID0gdGlja2V0LmRhdGEubWVtYmVycy5zZXJ2aWNlX3RpY2tldDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aWNrZXQuc3RhdHVzID09IDUwMDA0MDAxKSBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aWNrZXQuc3RhdHVzID09IDUwMDA0MDAyIHx8IGkgPT09IDI5KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S6jOe7tOeggei/h+acn1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgICAgIGVjKys7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoZWMgPj0gNSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/mn6Xor6Lkuoznu7TnoIHlh7rplJlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICghc2VydmljZV90aWNrZXQpIHJldHVybiBcXFwidG9hc3Q6Ly90aWNrZXTojrflj5blpLHotKVcXFwiO1xcbiAgICAgICAgICAgIGxldCByZXMgPSBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwczovL3Bhbi5xdWFyay5jbi9hY2NvdW50L2luZm8/c3Q9XFxcIiArIHNlcnZpY2VfdGlja2V0ICsgXFxcIiZsdz1zY2FuXFxcIiwge1xcbiAgICAgICAgICAgICAgICB3aXRoSGVhZGVyczogdHJ1ZVxcbiAgICAgICAgICAgIH0pKTtcXG4gICAgICAgICAgICAvL2xvZyhyZXMpXFxuICAgICAgICAgICAgaWYgKCFKU09OLnBhcnNlKHJlcy5ib2R5KS5zdWNjZXNzKSByZXR1cm4gXFxcInRvYXN0Oi8vdGlja2V06aqM6K+B5aSx6LSlXFxcIjtcXG4gICAgICAgICAgICBsZXQgY29va2llID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgbGV0IGhlYWRlcnMgPSByZXMuaGVhZGVycztcXG4gICAgICAgICAgICBmb3IgKGxldCBjIG9mIGhlYWRlcnNbXFxcInNldC1jb29raWVcXFwiXSkge1xcbiAgICAgICAgICAgICAgICBjb29raWUgKz0gYy5zcGxpdChcXFwiO1xcXCIpWzBdICsgXFxcIjtcXFwiO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBsb2coY29va2llKTtcXG4gICAgICAgICAgICBzZXRJdGVtKFxcXCJxdWFya0Nvb2tpZVxcXCIsIGNvb2tpZSk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/nmbvlvZXmiJDlip9cXFwiO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiAoXFxcInRvYXN0Oi8v55m75b2V5aSx6LSl77yaXFxcIiArIGUudG9TdHJpbmcoKSk7XFxuICAgICAgICB9XFxuICAgICAgICAvL2h0dHBzOi8vc3UucXVhcmsuY24vNF9lTUhCSj90b2tlbj1zdDk2YTYzMzM5MG55OXl6bGswaXZ1b3VjN2I5Z2ZtaiZjbGllbnRfaWQ9NTMyJnNzYj13ZWJsb2dpbiZ1Y19wYXJhbV9zdHI9JnVjX2Jpel9zdHI9UyUzQWN1c3RvbSU3Q09QVCUzQVNBUkVBJTQwMCU3Q09QVCUzQUlNTUVSU0lWRSU0MDElN0NPUFQlM0FCQUNLX0JUTl9TVFlMRSU0MDBcXG4gICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gXFxcIlVD5LqM57u056CB55m75b2VXFxcIikge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBsZXQgcmVxdWVzdF9pZCA9IGdlbmVyYXRlUmFuZG9tVVVJRCgpO1xcbiAgICAgICAgICAgIGxldCBxY1Rva2VuID0gSlNPTi5wYXJzZShwb3N0KGBodHRwczovL2FwaS5vcGVuLnVjLmNuL2Nhcy9hamF4L2dldFRva2VuRm9yUXJjb2RlTG9naW4/X190PSR7bmV3IERhdGUoKS5nZXRUaW1lKCl9YCwge1xcbiAgICAgICAgICAgICAgICBib2R5OiBgdj0xLjImcmVxdWVzdF9pZD0ke3JlcXVlc3RfaWR9JmNsaWVudF9pZD0zODFgXFxuICAgICAgICAgICAgfSkpLmRhdGEubWVtYmVycy50b2tlbjtcXG4gICAgICAgICAgICBjcmVhdGVRUkNvZGUoYGh0dHBzOi8vc3UudWMuY24vMV9uMFpDdj90b2tlbj0ke3FjVG9rZW59JmNsaWVudF9pZD0zODEmdWNfcGFyYW1fc3RyPSZ1Y19iaXpfc3RyPVMlM0FjdXN0b20lN0NDJTNBdGl0bGViYXJfZml4YCwgZmFsc2UpO1xcbiAgICAgICAgICAgIGxldCBzZXJ2aWNlX3RpY2tldCA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBlYyA9IDA7IGkgPCAzMDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGphdmEubGFuZy5UaHJlYWQuc2xlZXAoMjAwMCk7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgdGlja2V0ID0gSlNPTi5wYXJzZShwb3N0KGBodHRwczovL2FwaS5vcGVuLnVjLmNuL2Nhcy9hamF4L2dldFNlcnZpY2VUaWNrZXRCeVFyY29kZVRva2VuP19fdD0ke25ldyBEYXRlKCkuZ2V0VGltZSgpfWAsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5OiBgdj0xLjImcmVxdWVzdF9pZD0ke3JlcXVlc3RfaWR9JmNsaWVudF9pZD0zODEmdG9rZW49JHtxY1Rva2VufWBcXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKHRpY2tldClcXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aWNrZXQuc3RhdHVzID09IDIwMDAwMDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlX3RpY2tldCA9IHRpY2tldC5kYXRhLm1lbWJlcnMuc2VydmljZV90aWNrZXQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBpZiAodGlja2V0LnN0YXR1cyA9PSA1MDAwNDAwMSkgY29udGludWU7XFxuICAgICAgICAgICAgICAgICAgICBpZiAodGlja2V0LnN0YXR1cyA9PSA1MDAwNDAwMiB8fCBpID09PSAyOSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kuoznu7TnoIHov4fmnJ9cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICBlYysrO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVjID49IDUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5p+l6K+i5LqM57u056CB5Ye66ZSZXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoIXNlcnZpY2VfdGlja2V0KSByZXR1cm4gXFxcInRvYXN0Oi8vdGlja2V06I635Y+W5aSx6LSlXFxcIjtcXG4gICAgICAgICAgICBsZXQgcmVzID0gSlNPTi5wYXJzZShmZXRjaChgaHR0cHM6Ly9kcml2ZS51Yy5jbi9hY2NvdW50L2luZm8/c3Q9JHtzZXJ2aWNlX3RpY2tldH1gLCB7XFxuICAgICAgICAgICAgICAgIHdpdGhIZWFkZXJzOiB0cnVlXFxuICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICAgIC8vbG9nKHJlcylcXG4gICAgICAgICAgICBpZiAoIUpTT04ucGFyc2UocmVzLmJvZHkpLnN1Y2Nlc3MpIHJldHVybiBcXFwidG9hc3Q6Ly90aWNrZXTpqozor4HlpLHotKVcXFwiO1xcbiAgICAgICAgICAgIGxldCBjb29raWUgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICBsZXQgaGVhZGVycyA9IHJlcy5oZWFkZXJzO1xcbiAgICAgICAgICAgIGZvciAobGV0IGMgb2YgaGVhZGVyc1tcXFwic2V0LWNvb2tpZVxcXCJdKSB7XFxuICAgICAgICAgICAgICAgIGNvb2tpZSArPSBjLnNwbGl0KFxcXCI7XFxcIilbMF0gKyBcXFwiO1xcXCI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxvZyhjb29raWUpO1xcbiAgICAgICAgICAgIHNldEl0ZW0oXFxcInVjQ29va2llXFxcIiwgY29va2llKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+eZu+W9leaIkOWKn1xcXCI7XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgcmV0dXJuIChcXFwidG9hc3Q6Ly/nmbvlvZXlpLHotKXvvJpcXFwiICsgZS50b1N0cmluZygpKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbn0sICQuaW1wb3J0UGFyYW0pO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiQ29va2llTWFuYWdlXCIsXCJwYXRoXCI6XCJDb29raWVNYW5hZ2VcIixcInJ1bGVcIjpcImZ1bmN0aW9uIENvb2tpZU1hbmFnZShjb29raWUpIHtcXG4gICAgdGhpcy5jb29raWUgPSB7fTtcXG4gICAgdGhpcy5hZGQoY29va2llKTtcXG59XFxuT2JqZWN0LmFzc2lnbihDb29raWVNYW5hZ2UucHJvdG90eXBlLCB7XFxuICAgIGFkZChjb29raWUpIHtcXG4gICAgICAgIGxldCBjb29raWVzID0gW107XFxuICAgICAgICBpZiAodHlwZW9mIGNvb2tpZSA9PT0gXFxcInN0cmluZ1xcXCIpIHtcXG4gICAgICAgICAgICBjb29raWVzID0gY29va2llLnNwbGl0KFxcXCI7XFxcIik7XFxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY29va2llKSkge1xcbiAgICAgICAgICAgIGNvb2tpZXMgPSBjb29raWU7XFxuICAgICAgICB9XFxuICAgICAgICBjb29raWVzLmZvckVhY2godiA9PiB7XFxuICAgICAgICAgICAgdiA9IHYuc3BsaXQoXFxcIj1cXFwiKTtcXG4gICAgICAgICAgICBpZiAodi5sZW5ndGggPCAyKSByZXR1cm47XFxuICAgICAgICAgICAgbGV0IGtleSA9IHYuc2hpZnQoKS50cmltKCk7XFxuICAgICAgICAgICAgdGhpcy5jb29raWVba2V5XSA9IHYuam9pbihcXFwiPVxcXCIpLnRyaW0oKTtcXG4gICAgICAgIH0pO1xcbiAgICB9LFxcbiAgICBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5jb29raWUpLm1hcCh2ID0+IHZbMF0gKyBcXFwiPVxcXCIgKyB2WzFdKS5qb2luKFxcXCI7XFxcIik7XFxuICAgIH1cXG59KTtcXG4vL2NvbnN0IGNvb2tpZU1hbmFnZSA9IG5ldyBDb29raWVNYW5hZ2UoY29va2llKTtcXG4kLmV4cG9ydHM9Q29va2llTWFuYWdlO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5aSp57+8QVBJXCIsXCJwYXRoXCI6XCJDbG91ZERyaXZlXCIsXCJydWxlXCI6XCJjb25zdCBDcnlwdG9VdGlsID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL2Fzc2V0cy9jcnlwdG8tamF2YS5qc1xcXCIpO1xcblxcbmZ1bmN0aW9uIENsb3VkRHJpdmUoKSB7XFxuICAgIHRoaXMucmVnZXggPSAvaHR0cHM6XFxcXC9cXFxcL2Nsb3VkXFxcXC4xODlcXFxcLmNuXFxcXC93ZWJcXFxcL3NoYXJlXFxcXD9jb2RlPShbMC05QS1aYS16XSspLzsgLy9odHRwczovL2Nsb3VkLjE4OS5jbi93ZWIvc2hhcmU/Y29kZT1xSTNhTWpxWVJycWFcXG4gICAgdGhpcy5jb25maWcgPSB7XFxuICAgICAgICBjbGllbnRJZDogJzUzODEzNTE1MDY5MzQxMicsXFxuICAgICAgICBtb2RlbDogJ0tCMjAwMCcsXFxuICAgICAgICB2ZXJzaW9uOiAnOS4wLjYnLFxcbiAgICAgICAgcHViS2V5OiAnTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FDWkx5VjRnSE5EVUdKTVpvT2NZYXV4bU5Fc0tyYzBUbExlQkVWVklJUU56RzRXcWppbWNlT2o1UjlFVHdEZWVTTjN5ZWpBS0xHSGd4ODNseXkyd0Jqdm5iZm0vbkxPYnlXd1FELzA5Q21wWmR4b0ZZQ0g2cmREalJwd1pPWjJuWFNacGdrWlhvT0JrZk5YTnhuTjc0YVh0aG8yZHFCeW5UdzNORlRXeVFsOEJRSURBUUFCJyxcXG4gICAgfTtcXG4gICAgdGhpcy5oZWFkZXJzID0ge1xcbiAgICAgICAgJ1VzZXItQWdlbnQnOiBgTW96aWxsYS81LjAgKExpbnV4OyBVOyBBbmRyb2lkIDExOyAke3RoaXMuY29uZmlnLm1vZGVsfSBCdWlsZC9SUDFBLjIwMTAwNS4wMDEpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNC4wIENocm9tZS83NC4wLjM3MjkuMTM2IE1vYmlsZSBTYWZhcmkvNTM3LjM2IEVjbG91ZC8ke3RoaXMuY29uZmlnLnZlcnNpb259IEFuZHJvaWQvMzAgY2xpZW50SWQvJHt0aGlzLmNvbmZpZy5jbGllbnRJZH0gY2xpZW50TW9kZWwvJHt0aGlzLmNvbmZpZy5tb2RlbH0gY2xpZW50Q2hhbm5lbElkL3FxIHByb1ZlcnNpb24vMS4wLjZgLFxcbiAgICAgICAgJ1JlZmVyZXInOiAnaHR0cHM6Ly9tLmNsb3VkLjE4OS5jbi96aHVhbnRpLzIwMTYvc2lnbi9pbmRleC5qc3A/YWxidW1CYWNrdXBPcGVuZWQ9MScsXFxuICAgICAgICAnQWNjZXB0LUVuY29kaW5nJzogJ2d6aXAsIGRlZmxhdGUnLFxcbiAgICB9O1xcbiAgICB0aGlzLmFwaSA9ICdodHRwczovL2Nsb3VkLjE4OS5jbi9hcGknO1xcbiAgICB0aGlzLnNoYXJlQ29kZSA9ICcnO1xcbiAgICB0aGlzLmFjY2Vzc0NvZGUgPSAnJztcXG4gICAgdGhpcy5zaGFyZUlkID0gJyc7XFxuICAgIHRoaXMuc2hhcmVNb2RlID0gJyc7XFxuICAgIHRoaXMuaXNGb2xkZXIgPSAnJztcXG59XFxuT2JqZWN0LmFzc2lnbihDbG91ZERyaXZlLnByb3RvdHlwZSwge1xcbiAgICBjaGVja0Nvb2tpZSgpIHtcXG4gICAgICAgIGlmICghdGhpcy5jb29raWUgJiYgdGhpcy5hY2NvdW50ICYmIHRoaXMucGFzc3dvcmQpIHtcXG4gICAgICAgICAgICBzZXRJdGVtKCdjbG91ZENvb2tpZScsIHRoaXMubG9naW4odGhpcy5hY2NvdW50LCB0aGlzLnBhc3N3b3JkKSk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5pyq55m75b2VXFxcIik7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIGdldENvb2tpZSgpIHtcXG4gICAgICAgIHJldHVybiBnZXRJdGVtKFxcXCJjbG91ZENvb2tpZVxcXCIsIFxcXCJcXFwiKTtcXG4gICAgfSxcXG4gICAgbG9naW4odW5hbWUsIHBhc3N3ZCkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBsZXQgcmVzcCA9IEpTT04ucGFyc2UocG9zdCgnaHR0cHM6Ly9vcGVuLmUuMTg5LmNuL2FwaS9sb2dib3gvY29uZmlnL2VuY3J5cHRDb25mLmRvP2FwcElkPWNsb3VkJykpO1xcbiAgICAgICAgICAgIGxldCBwdWJLZXkgPSByZXNwLmRhdGEucHViS2V5O1xcbiAgICAgICAgICAgIHJlc3AgPSBKU09OLnBhcnNlKHJlcXVlc3QoJ2h0dHBzOi8vY2xvdWQuMTg5LmNuL2FwaS9wb3J0YWwvbG9naW5VcmwuYWN0aW9uP3JlZGlyZWN0VVJMPWh0dHBzOi8vY2xvdWQuMTg5LmNuL3dlYi9yZWRpcmVjdC5odG1sP3JldHVyblVSTD0vbWFpbi5hY3Rpb24nLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIGNvb2tpZTogXFxcIiNub0Nvb2tpZSNcXFwiXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIHdpdGhIZWFkZXJzOiB0cnVlXFxuICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICAgIC8vbG9nKHJlc3ApXFxuICAgICAgICAgICAgLy8g6I635Y+W5pyA5ZCO6K+35rGCdXJs5Lit55qE5Y+C5pWwcmVxSWTlkoxsdFxcbiAgICAgICAgICAgIGxldCBSZXFpZCA9IHJlc3AudXJsLm1hdGNoKC9yZXFJZD0oXFxcXHcrKS8pWzFdO1xcbiAgICAgICAgICAgIGxldCBMdCA9IHJlc3AudXJsLm1hdGNoKC9sdD0oXFxcXHcrKS8pWzFdO1xcbiAgICAgICAgICAgIGxldCB0SGVhZGVycyA9IHtcXG4gICAgICAgICAgICAgICAgXFxcIkNvbnRlbnQtVHlwZVxcXCI6IFxcXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcXFwiLFxcbiAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0OyBydjo3NC4wKSBHZWNrby8yMDEwMDEwMSBGaXJlZm94Lzc2LjAnLFxcbiAgICAgICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL29wZW4uZS4xODkuY24vJyxcXG4gICAgICAgICAgICAgICAgTHQsXFxuICAgICAgICAgICAgICAgIFJlcWlkLFxcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgbGV0IGRhdGEgPSB7XFxuICAgICAgICAgICAgICAgIHZlcnNpb246ICcyLjAnLFxcbiAgICAgICAgICAgICAgICBhcHBLZXk6ICdjbG91ZCdcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHJlc3AgPSBKU09OLnBhcnNlKHBvc3QoJ2h0dHBzOi8vb3Blbi5lLjE4OS5jbi9hcGkvbG9nYm94L29hdXRoMi9hcHBDb25mLmRvJywge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0SGVhZGVycyxcXG4gICAgICAgICAgICAgICAgYm9keTogZGF0YVxcbiAgICAgICAgICAgIH0pKTtcXG4gICAgICAgICAgICBsZXQgcmV0dXJuVXJsID0gcmVzcC5kYXRhLnJldHVyblVybDtcXG4gICAgICAgICAgICBsZXQgcGFyYW1JZCA9IHJlc3AuZGF0YS5wYXJhbUlkO1xcbiAgICAgICAgICAgIC8vY29uc3Qga2V5RGF0YSA9IGAtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxcXFxuJHtwdWJLZXl9XFxcXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1gO1xcbiAgICAgICAgICAgIC8vY29uc3QganNlbmNyeXB0ID0gbmV3IEpTRW5jcnlwdCgpO1xcbiAgICAgICAgICAgIC8vanNlbmNyeXB0LnNldFB1YmxpY0tleShrZXlEYXRhKTtcXG4gICAgICAgICAgICAvL2NvbnN0IGVuVW5hbWUgPSBCdWZmZXIuZnJvbShqc2VuY3J5cHQuZW5jcnlwdCh1bmFtZSksICdiYXNlNjQnKS50b1N0cmluZygnaGV4Jyk7XFxuICAgICAgICAgICAgLy9jb25zdCBlblBhc3N3ZCA9IEJ1ZmZlci5mcm9tKGpzZW5jcnlwdC5lbmNyeXB0KHBhc3N3ZCksICdiYXNlNjQnKS50b1N0cmluZygnaGV4Jyk7XFxuICAgICAgICAgICAgbGV0IGVuVW5hbWUgPSBDcnlwdG9VdGlsLkRhdGEucGFyc2VCYXNlNjQocnNhRW5jcnlwdCh1bmFtZSwgcHViS2V5KSwgX2Jhc2U2NC5OT19XUkFQKS50b0hleCgpLnRvVXBwZXJDYXNlKCk7XFxuICAgICAgICAgICAgbGV0IGVuUGFzc3dkID0gQ3J5cHRvVXRpbC5EYXRhLnBhcnNlQmFzZTY0KHJzYUVuY3J5cHQocGFzc3dkLCBwdWJLZXkpLCBfYmFzZTY0Lk5PX1dSQVApLnRvSGV4KCkudG9VcHBlckNhc2UoKTtcXG4gICAgICAgICAgICBkYXRhID0ge1xcbiAgICAgICAgICAgICAgICBhcHBLZXk6ICdjbG91ZCcsXFxuICAgICAgICAgICAgICAgIHZlcnNpb246ICcyLjAnLFxcbiAgICAgICAgICAgICAgICBhY2NvdW50VHlwZTogJzAxJyxcXG4gICAgICAgICAgICAgICAgbWFpbFN1ZmZpeDogJ0AxODkuY24nLFxcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZUNvZGU6ICcnLFxcbiAgICAgICAgICAgICAgICByZXR1cm5VcmwsXFxuICAgICAgICAgICAgICAgIHBhcmFtSWQsXFxuICAgICAgICAgICAgICAgIGNhcHRjaGFUb2tlbjogJycsXFxuICAgICAgICAgICAgICAgIGR5bmFtaWNDaGVjazogJ0ZBTFNFJyxcXG4gICAgICAgICAgICAgICAgY2xpZW50VHlwZTogJzEnLFxcbiAgICAgICAgICAgICAgICBjYl9TYXZlTmFtZTogJzAnLFxcbiAgICAgICAgICAgICAgICBpc09hdXRoMjogZmFsc2UsXFxuICAgICAgICAgICAgICAgIHVzZXJOYW1lOiBge05SUH0ke2VuVW5hbWV9YCxcXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQ6IGB7TlJQfSR7ZW5QYXNzd2R9YCxcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHJlc3AgPSBKU09OLnBhcnNlKHBvc3QoJ2h0dHBzOi8vb3Blbi5lLjE4OS5jbi9hcGkvbG9nYm94L29hdXRoMi9sb2dpblN1Ym1pdC5kbycsIHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczogdEhlYWRlcnMsXFxuICAgICAgICAgICAgICAgIHdpdGhIZWFkZXJzOiB0cnVlLFxcbiAgICAgICAgICAgICAgICBib2R5OiBkYXRhXFxuICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHJlc3AuYm9keSk7XFxuICAgICAgICAgICAgaWYgKHJlcy50b1VybCkge1xcblxcbiAgICAgICAgICAgICAgICBsZXQgY29va2llcyA9IHJlc3AuaGVhZGVyc1snc2V0LWNvb2tpZSddLm1hcChpdCA9PiBpdC5zcGxpdCgnOycpWzBdKS5qb2luKCc7Jyk7XFxuICAgICAgICAgICAgICAgIHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdChyZXMudG9VcmwsIHtcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuaGVhZGVycywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tpZTogY29va2llc1xcbiAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICB3aXRoSGVhZGVyczogdHJ1ZVxcbiAgICAgICAgICAgICAgICB9KSk7XFxuXFxuICAgICAgICAgICAgICAgIGNvb2tpZXMgKz0gJzsgJyArIChyZXMuaGVhZGVyc1snc2V0LWNvb2tpZSddIHx8IFtdKS5tYXAoaXQgPT4gaXQuc3BsaXQoJzsnKVswXSkuam9pbignOycpO1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKCdjbG91ZENvb2tpZScsIGNvb2tpZXMpO1xcbiAgICAgICAgICAgICAgICBsb2coY29va2llcyk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIGxvZ2luOicgKyBKU09OLnN0cmluZ2lmeShyZXNwKSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkdXJpbmcgbG9naW46JyArIGVycm9yLnRvU3RyaW5nKCkpO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBnZXRTaGFyZVVybERhdGEodXJsKSB7XFxuICAgICAgICBsZXQgbWF0Y2hlcyA9IHRoaXMucmVnZXguZXhlYyh1cmwpO1xcbiAgICAgICAgbGV0IHNoYXJlRGF0YTAgPSB7fTtcXG4gICAgICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXNbMV0pIHtcXG4gICAgICAgICAgICBzaGFyZURhdGEwLnNoYXJlQ29kZSA9IG1hdGNoZXNbMV07XFxuICAgICAgICAgICAgbGV0IGFjY2Vzc0NvZGVNYXRjaCA9IHVybC5tYXRjaCgv6K6/6Zeu56CB77yaKFthLXpBLVowLTldKykvKTtcXG4gICAgICAgICAgICBzaGFyZURhdGEwLmFjY2Vzc0NvZGUgPSBhY2Nlc3NDb2RlTWF0Y2ggPyBhY2Nlc3NDb2RlTWF0Y2hbMV0gOiAnJztcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgbGV0IG1hdGNoZXNfID0gdXJsLm1hdGNoKC9odHRwczpcXFxcL1xcXFwvY2xvdWRcXFxcLjE4OVxcXFwuY25cXFxcL3RcXFxcLyhbMC05QS1aYS16XSspLyk7XFxuICAgICAgICAgICAgc2hhcmVEYXRhMC5zaGFyZUNvZGUgPSBtYXRjaGVzXyA/IG1hdGNoZXNfWzFdIDogbnVsbDtcXG4gICAgICAgICAgICBsZXQgYWNjZXNzQ29kZU1hdGNoID0gdXJsLm1hdGNoKC/orr/pl67noIHvvJooW2EtekEtWjAtOV0rKS8pO1xcbiAgICAgICAgICAgIHNoYXJlRGF0YTAuYWNjZXNzQ29kZSA9IGFjY2Vzc0NvZGVNYXRjaCA/IGFjY2Vzc0NvZGVNYXRjaFsxXSA6ICcnO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIHNoYXJlRGF0YTA7XFxuICAgIH0sXFxuICAgIGdldFNoYXJlSW5mb0RhdGEoc2hhcmVVcmwsIGNvZGUpIHtcXG4gICAgICAgIGxldCBzaGFyZURhdGEgPSB0aGlzLmdldFNoYXJlVXJsRGF0YShzaGFyZVVybCk7XFxuICAgICAgICBjb2RlICYmIChzaGFyZURhdGEuYWNjZXNzQ29kZSA9IGNvZGUpO1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBsZXQgcmVzcCA9IEpTT04ucGFyc2UocmVxdWVzdChgJHt0aGlzLmFwaX0vb3Blbi9zaGFyZS9nZXRTaGFyZUluZm9CeUNvZGVWMi5hY3Rpb24/a2V5PW5vQ2FjaGUmc2hhcmVDb2RlPSR7c2hhcmVEYXRhLnNoYXJlQ29kZX1gLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICd1c2VyLWFnZW50JzogJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMzEuMC4wLjAgU2FmYXJpLzUzNy4zNicsXFxuICAgICAgICAgICAgICAgICAgICAnYWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD1VVEYtOCcsXFxuICAgICAgICAgICAgICAgICAgICAvLydhY2NlcHQtZW5jb2RpbmcnOiAnZ3ppcCwgZGVmbGF0ZSwgYnIsIHpzdGQnLFxcbiAgICAgICAgICAgICAgICAgICAgJ2FjY2VwdC1sYW5ndWFnZSc6ICd6aC1DTix6aDtxPTAuOScsXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgc2hhcmVEYXRhLnJvb3RGaWxlSWQgPSByZXNwLmZpbGVJZDtcXG4gICAgICAgICAgICBzaGFyZURhdGEuc2hhcmVJZCA9IHJlc3Auc2hhcmVJZDtcXG4gICAgICAgICAgICBzaGFyZURhdGEuc2hhcmVNb2RlID0gcmVzcC5zaGFyZU1vZGU7XFxuICAgICAgICAgICAgc2hhcmVEYXRhLmlzRm9sZGVyID0gcmVzcC5pc0ZvbGRlcjtcXG4gICAgICAgICAgICByZXR1cm4gc2hhcmVEYXRhO1xcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkdXJpbmcgZ2V0U2hhcmVJbmZvOicgKyBlcnJvci50b1N0cmluZygpKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB7fTtcXG4gICAgfSxcXG4gICAgZ2V0U2hhcmVGaWxlcyhmaWxlSWQsIHNoYXJlRGF0YSwgcGFnZSwgb3JkZXJCeSkge1xcbiAgICAgICAgbGV0IHJlc3AgPSBKU09OLnBhcnNlKHJlcXVlc3QoYCR7dGhpcy5hcGl9L29wZW4vc2hhcmUvbGlzdFNoYXJlRGlyLmFjdGlvbj9rZXk9bm9DYWNoZSZwYWdlTnVtPSR7cGFnZXx8MX0mcGFnZVNpemU9NjAmZmlsZUlkPSR7ZmlsZUlkfSZzaGFyZURpckZpbGVJZD0ke2ZpbGVJZH0maXNGb2xkZXI9JHtzaGFyZURhdGEuaXNGb2xkZXJ9JnNoYXJlSWQ9JHtzaGFyZURhdGEuc2hhcmVJZHx8XFxcIlxcXCJ9JnNoYXJlTW9kZT0ke3NoYXJlRGF0YS5zaGFyZU1vZGV9Jmljb25PcHRpb249NSZvcmRlckJ5PSR7b3JkZXJCeXx8XFxcImxhc3RPcFRpbWVcXFwifSZkZXNjZW5kaW5nPXRydWUmYWNjZXNzQ29kZT0ke3NoYXJlRGF0YS5hY2Nlc3NDb2RlfWAsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICdhY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PVVURi04JyxcXG4gICAgICAgICAgICAgICAgJ3VzZXItYWdlbnQnOiAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEzMS4wLjAuMCBTYWZhcmkvNTM3LjM2JyxcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KSk7XFxuICAgICAgICBsb2cocmVzcClcXG4gICAgICAgIGxldCBmaWxlcyA9IFtdO1xcbiAgICAgICAgZm9yIChsZXQgaXRlbSBvZiByZXNwLmZpbGVMaXN0QU8uZmlsZUxpc3QpIHtcXG4gICAgICAgICAgICBmaWxlcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgZmlsZUlkOiBpdGVtLmlkLFxcbiAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXFxuICAgICAgICAgICAgICAgIGxhc3RPcFRpbWU6IGl0ZW0ubGFzdE9wVGltZSxcXG4gICAgICAgICAgICAgICAgZGlyOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgbWVkaWFUeXBlOiBpdGVtLm1lZGlhVHlwZVxcbiAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgfVxcbiAgICAgICAgZm9yIChsZXQgaXRlbSBvZiByZXNwLmZpbGVMaXN0QU8uZm9sZGVyTGlzdCkge1xcbiAgICAgICAgICAgIGZpbGVzLnB1c2goe1xcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZC50b1N0cmluZygpLFxcbiAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUudG9TdHJpbmcoKSxcXG4gICAgICAgICAgICAgICAgbGFzdE9wVGltZTogaXRlbS5sYXN0T3BUaW1lLnRvU3RyaW5nKCksXFxuICAgICAgICAgICAgICAgIGRpcjogdHJ1ZVxcbiAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGZpbGVzO1xcbiAgICB9XFxufSk7XFxuJC5leHBvcnRzID0gbmV3IENsb3VkRHJpdmUoKTtcXG4vL25ldyBDbG91ZERyaXZlKCkubG9naW4oXFxcIjE4MTgxMTI1NTM4XFxcIiwgXFxcIl5BMUIyQzNAbG95ZGdpa1xcXCIpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5aSp57+85YiX6KGoXCIsXCJwYXRoXCI6XCJjbG91ZFNoYXJlTGlzdFwiLFwicnVsZVwiOlwianM6XFxubGV0IHRpdGxlSGVhZCA9IHtcXG4gICAgdmlkZW86IFxcXCLwn46sXFxcIixcXG4gICAgYXVkaW86IFxcXCLwn461XFxcIixcXG4gICAgZG9jOiBcXFwi8J+TkVxcXCIsXFxuICAgIGltYWdlOiBcXFwi8J+WvFxcXCIsXFxuICAgIGFyY2hpdmU6IFxcXCLwn5OmXFxcIixcXG4gICAgXFxcImRlZmF1bHRcXFwiOiBcXFwi4p2TXFxcIlxcbn07XFxuXFxuZnVuY3Rpb24gZ2V0SGVhZCh0eXBlLCBleHQpIHtcXG4gICAgbGV0IGhlYWQgPSB0aXRsZUhlYWRbdHlwZV07XFxuXFxuICAgIHJldHVybiBoZWFkIHx8IFxcXCLinZNcXFwiO1xcbn1cXG5cXG5mdW5jdGlvbiBmb3JtYXRTaXplKHNpemUpIHtcXG4gICAgaWYgKCFzaXplKSB7XFxuICAgICAgICByZXR1cm4gJyc7XFxuICAgIH1cXG4gICAgY29uc3QgdW5pdHMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXTtcXG4gICAgbGV0IGkgPSAwO1xcbiAgICB3aGlsZSAoc2l6ZSA+PSAxMDI0KSB7XFxuICAgICAgICBzaXplIC89IDEwMjQ7XFxuICAgICAgICBpKys7XFxuICAgIH1cXG4gICAgc2l6ZSA9IGkgPyBOdW1iZXIoc2l6ZS50b0ZpeGVkKDIpKSA6IHNpemU7XFxuICAgIHJldHVybiBgJHtzaXplfSAke3VuaXRzW2ldfWA7XFxufVxcblxcblxcbmxldCByZWFsdXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KGdldFBhcmFtKFxcXCJyZWFsdXJsXFxcIiwgXFxcIlxcXCIpKTtcXG5cXG5cXG5sZXQgY2xvdWREcml2ZSA9ICQucmVxdWlyZShcXFwiQ2xvdWREcml2ZVxcXCIpO1xcblxcblxcbmxldCBzaGFyZURhdGEgPSBjbG91ZERyaXZlLmdldFNoYXJlSW5mb0RhdGEocmVhbHVybCk7XFxubGV0IGxpc3QgPSBjbG91ZERyaXZlLmdldFNoYXJlRmlsZXMoTVlfUEFSQU1TLmZpbGVJZCB8fCBzaGFyZURhdGEucm9vdEZpbGVJZCwgc2hhcmVEYXRhLCBNWV9QQUdFKTtcXG5cXG5sZXQgZCA9IFtdO1xcbmxpc3QuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgLy/liKTmlq3mmK/lkKbmlofku7blpLlcXG4gICAgaWYgKGl0ZW0uZGlyKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi8J+TglxcXCIgKyBpdGVtLmZpbGVfbmFtZSxcXG4gICAgICAgICAgICBkZXNjOiAkLmRhdGVGb3JtYXQoaXRlbS51cGRhdGVkX2F0LCAneXl5eS1NTS1kZCcpICsgJyAgJyArIGl0ZW0uaW5jbHVkZV9pdGVtcyArICfpobkgICcsXFxuICAgICAgICAgICAgcGljX3VybDogXFxcImh0dHA6Ly8xMjMuNTYuMTA1LjE0NS90dWJpYW8vbWVzc3kvMjcuc3ZnXFxcIixcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvcXVhcmtMaXN0P3BhZ2U9ZnlwYWdlXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogc3R5bGUsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgc2hhcmVJZCxcXG4gICAgICAgICAgICAgICAgc2hhcmVQd2QsXFxuICAgICAgICAgICAgICAgIHNoYXJlVG9rZW46IHF1YXJrU2hhcmVBcGkuZ2V0VG9rZW4oKSxcXG4gICAgICAgICAgICAgICAgZmlsZUlkOiBpdGVtLmZpZCxcXG4gICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgZnJvbURyaXZlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBnZXRIZWFkKGl0ZW0ub2JqX2NhdGVnb3J5KSArIGl0ZW0uZmlsZV9uYW1lLFxcbiAgICAgICAgICAgIGRlc2M6ICQuZGF0ZUZvcm1hdChpdGVtLnVwZGF0ZWRfYXQsICd5eXl5LU1NLWRkJykgKyAnICAnICsgZm9ybWF0U2l6ZShpdGVtLnNpemUpLFxcbiAgICAgICAgICAgIHBpY191cmw6ICQoaXRlbS50aHVtYm5haWwsIHtcXG4gICAgICAgICAgICAgICAgY29va2llOiBuY29va2llXFxuICAgICAgICAgICAgfSkuaW1hZ2UoKSxcXG4gICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoZmlkLCBmaWRfdG9rZW4sIHB3ZF9pZCwgc3Rva2VuLCBjYXRlZ29yeSwgZnJvbURyaXZlKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBwbGF5VXJsQ2FjaGUgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFwicGxheVVybENhY2hlXFxcIiwge30pO1xcbiAgICAgICAgICAgICAgICBpZiAocGxheVVybENhY2hlW2ZpZF0pIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwbGF5VXJsQ2FjaGVbZmlkXTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSAkLnJlcXVpcmUoXFxcInBsYXlcXFwiLCBmcm9tRHJpdmUpLmdldFBsYXlVcmwoZmlkLCBmaWRfdG9rZW4sIHB3ZF9pZCwgc3Rva2VuLCBjYXRlZ29yeSk7XFxuICAgICAgICAgICAgICAgICAgICBwbGF5VXJsQ2FjaGVbZmlkXSA9IHVybDtcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJwbGF5VXJsQ2FjaGVcXFwiLCBwbGF5VXJsQ2FjaGUpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sIGl0ZW0uZmlkLCBpdGVtLnNoYXJlX2ZpZF90b2tlbiwgc2hhcmVJZCwgcXVhcmtTaGFyZUFwaS5nZXRUb2tlbigpLCBpdGVtLm9ial9jYXRlZ29yeSwgZnJvbURyaXZlKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogc3R5bGUsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0uZmlkLFxcbiAgICAgICAgICAgICAgICAvL2luaGVyaXRUaXRsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgIGNsczogJ3BsYXlsaXN0ICcgKyBpdGVtLm9ial9jYXRlZ29yeVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH1cXG5cXG59KTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIkRvd25Ub29sXCIsXCJwYXRoXCI6XCJEb3duVG9vbFwiLFwicnVsZVwiOlwianM6XFxuXFxuZnVuY3Rpb24gZ2V0RG93bkNVUkwodXJsLCBoZWFkZXJzLCBmaWxlbmFtZSkge1xcbiAgICAvLyBTdGFydCBidWlsZGluZyB0aGUgY3VybCBjb21tYW5kIHdpdGggdGhlIFVSTFxcbiAgICBsZXQgY3VybENvbW1hbmQgPSBgY3VybCAtbyBcXFwiJHtmaWxlbmFtZX1cXFwiIFxcXCIke3VybH1cXFwiYDtcXG5cXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIGN1cmwgY29tbWFuZCBpZiBhbnkgYXJlIHByb3ZpZGVkXFxuICAgIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xcbiAgICAgICAgY3VybENvbW1hbmQgKz0gT2JqZWN0LmVudHJpZXMoaGVhZGVycykucmVkdWNlKChjb21tYW5kLCBba2V5LCB2YWx1ZV0pID0+IHtcXG4gICAgICAgICAgICByZXR1cm4gYCR7Y29tbWFuZH0gLUggXFxcIiR7a2V5fTogJHt2YWx1ZX1cXFwiYDtcXG4gICAgICAgIH0sICcgJyk7XFxuICAgIH1cXG5cXG4gICAgcmV0dXJuIGN1cmxDb21tYW5kO1xcbn1cXG5cXG5mdW5jdGlvbiBnZXREb3duQXJpYTJjKHVybCwgaGVhZGVycywgZmlsZW5hbWUsIGN1dCkge1xcbiAgICAvLyBTdGFydCBidWlsZGluZyB0aGUgYXJpYTJjIGNvbW1hbmQgd2l0aCB0aGUgVVJMIGFuZCBudW1iZXIgb2YgY29ubmVjdGlvbnMvc2VnbWVudHNcXG4gICAgY3V0ID0gY3V0IHx8IDE7XFxuICAgIGN1dCA9IGN1dCA+IDE2ID8gMTYgOiBjdXQ7XFxuXFxuICAgIGxldCBhcmlhMkNvbW1hbmQgPSBgYXJpYTJjIC14ICR7Y3V0fSAtcyAke2N1dH0gLW8gXFxcIiR7ZmlsZW5hbWV9XFxcIiBcXFwiJHt1cmx9XFxcImA7XFxuXFxuICAgIC8vIEFkZCBoZWFkZXJzIHRvIHRoZSBhcmlhMmMgY29tbWFuZCBpZiBhbnkgYXJlIHByb3ZpZGVkXFxuICAgIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xcbiAgICAgICAgYXJpYTJDb21tYW5kICs9IE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpLnJlZHVjZSgoY29tbWFuZCwgW2tleSwgdmFsdWVdKSA9PiB7XFxuICAgICAgICAgICAgcmV0dXJuIGAke2NvbW1hbmR9IC0taGVhZGVyPVxcXCIke2tleX06ICR7dmFsdWV9XFxcImA7XFxuICAgICAgICB9LCAnICcpO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBhcmlhMkNvbW1hbmQ7XFxufVxcbmZ1bmN0aW9uIGdldERlZlJwY1VybCgpe1xcbiAgICBsZXQgZGVmaXAgPSBnZXRJUCgpLnNwbGl0KFxcXCIuXFxcIik7XFxuICAgIGRlZmlwLnB1c2goTnVtYmVyKGRlZmlwLnBvcCgpKSArIDIpO1xcbiAgICByZXR1cm4gXFxcImh0dHA6Ly9cXFwiICsgZGVmaXAuam9pbihcXFwiLlxcXCIpICsgXFxcIjoxNjgwMC9qc29ucnBjXFxcIjtcXG59XFxuZnVuY3Rpb24gdXBkYXRlUnBjKHVybCwgaGVhZGVycywgZmlsZW5hbWUpIHtcXG4gICAgLy9sb2coaGVhZGVycylcXG4gICAgbGV0IGhlYWRlciA9IFtdO1xcbiAgICBsZXQgcnBjRGF0YSA9IHtcXG4gICAgICAgIGlkOiBEYXRlLm5vdygpLFxcbiAgICAgICAganNvbnJwYzogXFxcIjIuMFxcXCIsXFxuICAgICAgICBtZXRob2Q6IFxcXCJhcmlhMi5hZGRVcmlcXFwiLFxcbiAgICAgICAgcGFyYW1zOiBbXFxcInRva2VuOlxcXCIgKyBnZXRJdGVtKFxcXCJycGNBcmlhVG9rZW5cXFwiLCBcXFwiXFxcIiksIFt1cmxdLCB7XFxuICAgICAgICAgICAgZGlyOiBnZXRJdGVtKFxcXCJycGNEb3duRGlyXFxcIixcXFwiXFxcIil8fHZvaWQgMCxcXG4gICAgICAgICAgICBvdXQ6IGZpbGVuYW1lLFxcbiAgICAgICAgICAgIGhlYWRlclxcbiAgICAgICAgfV1cXG4gICAgfTtcXG5cXG4gICAgaWYgKGhlYWRlcnMgJiYgdHlwZW9mIGhlYWRlcnMgPT09ICdvYmplY3QnKSB7XFxuICAgICAgICBPYmplY3QuZW50cmllcyhoZWFkZXJzKS5mb3JFYWNoKFtrZXksIHZhbHVlXSA9PiB7XFxuICAgICAgICAgICAgaGVhZGVyLnB1c2goYCR7a2V5fTogJHt2YWx1ZX1gKTtcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIFxcbiAgICBsZXQgcmVzID0gcG9zdChnZXRJdGVtKFxcXCJycGNVcmxcXFwiLCBnZXREZWZScGNVcmwoKSksIHtcXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHJwY0RhdGEpXFxuICAgIH0pO1xcbiAgICByZXR1cm4gcmVzLmluY2x1ZGVzKCdcXFwicmVzdWx0XFxcIjonKTtcXG59XFxuXFxuJC5leHBvcnRzPXtcXG4gICAgZ2V0RG93bkNVUkwsXFxuICAgIGdldERvd25BcmlhMmMsXFxuICAgIHVwZGF0ZVJwYyxcXG4gICAgZ2V0RGVmUnBjVXJsXFxufTtcXG5cIn1dIiwiaWNvbiI6IiIsInByb3h5IjoiIn0=
Add Comment
Please, Sign In to add comment