Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥123pan-⚙️设置@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImdtdE1vZGlmaWVkXCI6MCxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIjEyM3BhblwiLFwicGF0aFwiOlwiMTIzcGFuXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbnRyeSB7XFxuICAgIGNvbnN0IHtcXG4gICAgICAgIGZpbGVMaXN0LFxcbiAgICAgICAgZ2V0SWNvblxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvY29kZVxcXCIpXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuKame+4j+iuvue9rlxcXCIsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2Uvc2V0dGluZ3NcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICB9KVxcbiAgICBpZiAoZ2V0SXRlbShcXFwidG9rZW5cXFwiLCBcXFwiXFxcIikgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIHZhciBwYXRocyA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJwYXRoczEyM1xcXCIsIFt7XFxuICAgICAgICAgICAgbmFtZTogXFxcIuagueebruW9lVxcXCIsXFxuICAgICAgICAgICAgaWQ6IFxcXCIwXFxcIlxcbiAgICAgICAgfV0pXFxuICAgICAgICBpZiAocGF0aHMubGVuZ3RoID4gMSkge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwiPFxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChwYXRocykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcGF0aHMucG9wKClcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJwYXRoczEyM1xcXCIsIHBhdGhzKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICB9LCBwYXRocylcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICAgICAgcGF0aHMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5uYW1lLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoaXRlbSwgcGF0aHMsIGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiaWRcXFwiLCBpdGVtLmlkKVxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcInBhdGhzMTIzXFxcIiwgcGF0aHMuc2xpY2UoMCwgaW5kZXggKyAxKSlcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgfSwgaXRlbSwgcGF0aHMsIGluZGV4KVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICAgICAgZmlsZUxpc3QocGF0aHNbcGF0aHMubGVuZ3RoIC0gMV0uaWQpLmRhdGEuSW5mb0xpc3QuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICB2YXIgaW1nID0gZ2V0SWNvbihpdGVtKVxcbiAgICAgICAgICAgIGlmIChpdGVtLlR5cGUgPT0gMSkge1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gJCgpLmxhenlSdWxlKChpZCwgbmFtZSwgcGF0aHMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHBhdGhzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGlkXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcInBhdGhzMTIzXFxcIiwgcGF0aHMpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgIH0sIGl0ZW0uRmlsZUlkLCBpdGVtLkZpbGVOYW1lLCBwYXRocylcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gaXRlbS5Eb3dubG9hZFVybFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5GaWxlTmFtZSxcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCJcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLmnKrnmbvlvZVcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9zZXR0aW5nc1xcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiXFxuICAgICAgICB9KVxcbiAgICB9XFxufSBjYXRjaCAoZSkge1xcbiAgICBsb2coZS5tZXNzYWdlKVxcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJjb2RlXCIsXCJwYXRoXCI6XCJjb2RlXCIsXCJydWxlXCI6XCIkLmV4cG9ydHMuZmlsZUxpc3QgPSBmdW5jdGlvbihpZCkge1xcbiAgICBsZXQgbGlzdCA9IHJlcXVlc3QoYnVpbGRVcmwoXFxcImh0dHBzOi8vd3d3LjEyM3Bhbi5jb20vYXBpL2ZpbGUvbGlzdC9uZXdcXFwiLCB7XFxuICAgICAgICBcXFwiZHJpdmVJZFxcXCI6IDAsXFxuICAgICAgICBcXFwibGltaXRcXFwiOiAxMDAsXFxuICAgICAgICBcXFwib3JkZXJCeVxcXCI6IFxcXCJmaWxlSWRcXFwiLFxcbiAgICAgICAgXFxcIk9yZGVyRGlyZWN0aW9uXFxcIjogXFxcImFzY1xcXCIsXFxuICAgICAgICBcXFwiUGFyZW50RmlsZUlkXFxcIjogaWQsXFxuICAgICAgICBcXFwidHJhc2hlZFxcXCI6IGZhbHNlXFxuICAgIH0pLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcIkF1dGhvcml6YXRpb25cXFwiOiBcXFwiQmVhcmVyIFxcXCIgKyBnZXRJdGVtKFxcXCJ0b2tlblxcXCIpXFxuICAgICAgICB9XFxuICAgIH0pXFxuICAgIHJldHVybiBKU09OLnBhcnNlKGxpc3QpXFxufVxcbiQuZXhwb3J0cy5nZXRJY29uID0gZnVuY3Rpb24oY29udGVudCkge1xcbiAgICBsZXQge1xcbiAgICAgICAgZ2V0SHptXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9jb2RlXFxcIilcXG4gICAgbGV0IHJvb3QgPSBcXFwiaHR0cHM6Ly9naXRjb2RlLm5ldC9xcV8zMjM5NDM1MS9kci8tL3Jhdy9tYXN0ZXIvaW1nL+aWh+S7tuexu+WeizIvXFxcIjtcXG4gICAgaWYgKGNvbnRlbnQuVHlwZSA9PSAxKSB7XFxuICAgICAgICBpbWcgPSByb290ICsgXFxcIuaWh+S7tuWkuS5zdmdcXFwiXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBsZXQgZmlsZXMgPSAnYWl8YXBrfGF2aXxjc3N8ZG1nfGV4ZXxmbHZ8Z2lmfGhpa2VyfGh0bWx8aXNvfGpwZ3xqc3xqc29ufGxvZ3xtb3Z8bXAzfG1wNHxvdGZ8cGhwfHBuZ3xwcHR8cHNkfHRhYmxlfHR4dHx3YXZ8eGxzfHppcHxjc3N8ZG9jfGVwdWJ8ZXhjfGh0bXx4bHN4Jy5zcGxpdCgnfCcpO1xcbiAgICAgICAgbGV0IGZpbGVOYW1lID0gY29udGVudC5GaWxlTmFtZVxcbiAgICAgICAgbGV0IGh6bSA9IGdldEh6bShmaWxlTmFtZSlcXG4gICAgICAgIGlmIChmaWxlcy5pbmNsdWRlcyhoem0pKSB7XFxuICAgICAgICAgICAgaW1nID0gcm9vdCArIGh6bSArICcuc3ZnJztcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaW1nID0gcm9vdCArIFxcXCLmlofku7Yuc3ZnXFxcIlxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiBpbWdcXG59XFxuJC5leHBvcnRzLmdldEh6bSA9IGZ1bmN0aW9uKGZpbGVOYW1lKSB7XFxuICAgIHJldHVybiBmaWxlTmFtZS5zdWJzdHIoZmlsZU5hbWUubGFzdEluZGV4T2YoXFxcIi5cXFwiKSArIDEpXFxufVwifSx7XCJjb2xfdHlwZVwiOlwidGV4dF8yXCIsXCJuYW1lXCI6XCJzZXR0aW5nc1wiLFwicGF0aFwiOlwic2V0dGluZ3NcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLotKblj7co5omL5py65Y+3KVxcXCIsXFxuICAgIHVybDogJChnZXRJdGVtKFxcXCJ1c2VybmFtZVxcXCIsIFxcXCJcXFwiKSkuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgc2V0SXRlbShcXFwidXNlcm5hbWVcXFwiLCBpbnB1dClcXG4gICAgfSlcXG59KVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi5a+G56CBXFxcIixcXG4gICAgdXJsOiAkKGdldEl0ZW0oXFxcInBhc3N3ZFxcXCIsIFxcXCJcXFwiKSkuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgc2V0SXRlbShcXFwicGFzc3dkXFxcIiwgaW5wdXQpXFxuICAgIH0pXFxufSlcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIueZu+mZhlxcXCIsXFxuICAgIHVybDogJCgpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHBvc3QoXFxcImh0dHBzOi8vd3d3LjEyM3Bhbi5jb20vYXBpL3VzZXIvc2lnbl9pblxcXCIsIHtcXG4gICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgIFxcXCJwYXNzcG9ydFxcXCI6IGdldEl0ZW0oXFxcInVzZXJuYW1lXFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgICAgICBcXFwicGFzc3dvcmRcXFwiOiBnZXRJdGVtKFxcXCJwYXNzd2RcXFwiLCBcXFwiXFxcIilcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KSlcXG4gICAgICAgIGlmIChyZXMubWVzc2FnZSA9PSBcXFwic3VjY2Vzc1xcXCIpIHtcXG4gICAgICAgICAgICBzZXRJdGVtKFxcXCJ0b2tlblxcXCIsIHJlcy5kYXRhLnRva2VuKVxcbiAgICAgICAgICAgIGJhY2soKVxcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/nmbvpmYbmiJDlip9cXFwiXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFwiICsgcmVzLm1lc3NhZ2VcXG4gICAgICAgIH1cXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCJcXG59KVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi55m+5bqm572R55uYXCIsXCJwYXRoXCI6XCLnmb7luqbnvZHnm5hcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLorr7nva5cXFwiLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvbG9naW4xXFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiXFxufSlcXG5pZiAoZ2V0SXRlbShcXFwiYWNjZXNzX3Rva2VuXFxcIiwgXFxcIlxcXCIpICE9IFxcXCJcXFwiKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICBjb25zdCB7XFxuICAgICAgICAgICAgZ2V0SWNvbixcXG4gICAgICAgICAgICBnZXRIem0sXFxuICAgICAgICAgICAgZ2V0TGlua1xcbiAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2NvZGUxXFxcIilcXG4gICAgICAgIGxldCBwYXRocyA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJwYXRoc2JhaWR1XFxcIiwgW3tcXG4gICAgICAgICAgICBwYXRoOiBcXFwiL1xcXCIsXFxuICAgICAgICAgICAgbmFtZTogXFxcIuWutlxcXCJcXG4gICAgICAgIH1dKVxcbiAgICAgICAgcGF0aHMuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLm5hbWUsXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChwYXRocywgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcInBhdGhzYmFpZHVcXFwiLCBwYXRocy5zbGljZSgwLCBpICsgMSkpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgIH0sIHBhdGhzLCBpKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybChcXFwiaHR0cHM6Ly9wYW4uYmFpZHUuY29tL3Jlc3QvMi4wL3hwYW4vZmlsZVxcXCIsIHtcXG4gICAgICAgICAgICBcXFwiYWNjZXNzX3Rva2VuXFxcIjogZ2V0SXRlbShcXFwiYWNjZXNzX3Rva2VuYmFpZHVcXFwiKSxcXG4gICAgICAgICAgICBcXFwibWV0aG9kXFxcIjogXFxcImxpc3RcXFwiLFxcbiAgICAgICAgICAgIFxcXCJkaXJcXFwiOiBwYXRoc1twYXRocy5sZW5ndGggLSAxXS5wYXRoLFxcbiAgICAgICAgICAgIFxcXCJ3ZWJcXFwiOiBcXFwid2ViXFxcIixcXG4gICAgICAgICAgICBcXFwibGltaXRcXFwiOiAwLFxcbiAgICAgICAgICAgIFxcXCJsaW1pdFxcXCI6IDIwMFxcbiAgICAgICAgfSkpKVxcbiAgICAgICAgcmVzLmxpc3QuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICBpZiAoaXRlbS5pc2RpciA9PSAxKSB7XFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSAkKCkubGF6eVJ1bGUoKGl0ZW0sIHBhdGhzKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwYXRocy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBpdGVtLnBhdGgsXFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5zZXJ2ZXJfZmlsZW5hbWVcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFwicGF0aHNiYWlkdVxcXCIsIHBhdGhzKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICB9LCBpdGVtLCBwYXRocylcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCQubW92aWUuaW5jbHVkZXMoZ2V0SHptKGl0ZW0uc2VydmVyX2ZpbGVuYW1lKSkpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IGdldExpbmsoXFxcIm1vdmllXFxcIiwgaXRlbS5mc19pZCwgaXRlbS5wYXRoKVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJC5hdWRpby5pbmNsdWRlcyhnZXRIem0oaXRlbS5zZXJ2ZXJfZmlsZW5hbWUpKSkge1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gZ2V0TGluayhcXFwiYXVkaW9cXFwiLCBpdGVtLmZzX2lkLCBpdGVtLnBhdGgpXFxuICAgICAgICAgICAgfSBlbHNlIGlmICgkLmltZy5pbmNsdWRlcyhnZXRIem0oaXRlbS5zZXJ2ZXJfZmlsZW5hbWUpKSkge1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gZ2V0TGluayhcXFwiaW1nXFxcIiwgaXRlbS5mc19pZCwgaXRlbS5wYXRoKVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBnZXRMaW5rKFxcXCJcXFwiLCBpdGVtLmZzX2lkLCBpdGVtLnBhdGgpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLnNlcnZlcl9maWxlbmFtZSxcXG4gICAgICAgICAgICAgICAgaW1nOiBnZXRJY29uKGl0ZW0pLFxcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgICAgICB0b2FzdChcXFwi5Ye6546w6ZSZ6K+v77yM6K+35p+l55yL5pel5b+XXFxcIikgICAgICAgIFxcbiAgICB9XFxufVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcImNvZGUxXCIsXCJwYXRoXCI6XCJjb2RlMVwiLFwicnVsZVwiOlwiJC5leHBvcnRzLmdldEljb24gPSBmdW5jdGlvbihjb250ZW50KSB7XFxuICAgIGxldCB7XFxuICAgICAgICBnZXRIem1cXG4gICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2NvZGVcXFwiKVxcbiAgICBsZXQgcm9vdCA9IFxcXCJodHRwczovL2dpdGNvZGUubmV0L3FxXzMyMzk0MzUxL2RyLy0vcmF3L21hc3Rlci9pbWcv5paH5Lu257G75Z6LMi9cXFwiO1xcbiAgICBpZiAoY29udGVudC5pc2RpciA9PSAxKSB7XFxuICAgICAgICBpbWcgPSByb290ICsgXFxcIuaWh+S7tuWkuS5zdmdcXFwiXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBsZXQgZmlsZXMgPSAnYWl8YXBrfGF2aXxjc3N8ZG1nfGV4ZXxmbHZ8Z2lmfGhpa2VyfGh0bWx8aXNvfGpwZ3xqc3xqc29ufGxvZ3xtb3Z8bXAzfG1wNHxvdGZ8cGhwfHBuZ3xwcHR8cHNkfHRhYmxlfHR4dHx3YXZ8eGxzfHppcHxjc3N8ZG9jfGVwdWJ8ZXhjfGh0bXx4bHN4Jy5zcGxpdCgnfCcpO1xcbiAgICAgICAgbGV0IGZpbGVOYW1lID0gY29udGVudC5zZXJ2ZXJfZmlsZW5hbWVcXG4gICAgICAgIGxldCBoem0gPSBnZXRIem0oZmlsZU5hbWUpXFxuICAgICAgICBpZiAoZmlsZXMuaW5jbHVkZXMoaHptKSkge1xcbiAgICAgICAgICAgIGltZyA9IHJvb3QgKyBoem0gKyAnLnN2Zyc7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGltZyA9IHJvb3QgKyBcXFwi5paH5Lu2LnN2Z1xcXCJcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gaW1nXFxufVxcbiQuZXhwb3J0cy5nZXRIem0gPSBmdW5jdGlvbihmaWxlTmFtZSkge1xcbiAgICByZXR1cm4gZmlsZU5hbWUuc3Vic3RyKGZpbGVOYW1lLmxhc3RJbmRleE9mKFxcXCIuXFxcIikgKyAxKVxcbn1cXG4kLmV4cG9ydHMuZ2V0TGluayA9IGZ1bmN0aW9uKGV4dCwgaWQsIHBhdGgpIHtcXG4gICAgcmV0dXJuICQoKS5sYXp5UnVsZSgoZXh0LCBpZCwgcGF0aCkgPT4ge1xcbiAgICAgICAgaWYgKGdldEl0ZW0oXFxcImprXFxcIiwgXFxcIjBcXFwiKSA9PSBcXFwiMVxcXCIpIHtcXG4gICAgICAgICAgICB2YXIgcmVzID0gSlNPTi5wYXJzZShyZXF1ZXN0KGJ1aWxkVXJsKFxcXCJodHRwczovL3Bhbi5iYWlkdS5jb20vYXBpL2ZpbGVtZXRhc1xcXCIsIHtcXG4gICAgICAgICAgICAgICAgXFxcImFjY2Vzc190b2tlblxcXCI6IGdldEl0ZW0oXFxcImFjY2Vzc190b2tlblxcXCIpLFxcbiAgICAgICAgICAgICAgICBcXFwiZGxpbmtcXFwiOiBcXFwiMVxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJ3ZWJcXFwiOiBcXFwiNVxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJvcmlnaW5cXFwiOiBcXFwiZGxuYVxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJ0YXJnZXRcXFwiOiBgW1xcXFxcXFwiJHtwYXRofVxcXFxcXFwiXWBcXG4gICAgICAgICAgICB9KSkpLmluZm9bMF0uZGxpbmtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdmFyIHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybChcXFwiaHR0cHM6Ly9wYW4uYmFpZHUuY29tL3Jlc3QvMi4wL3hwYW4vbXVsdGltZWRpYVxcXCIsIHtcXG4gICAgICAgICAgICAgICAgXFxcImFjY2Vzc190b2tlblxcXCI6IGdldEl0ZW0oXFxcImFjY2Vzc190b2tlblxcXCIpLFxcbiAgICAgICAgICAgICAgICBcXFwibWV0aG9kXFxcIjogXFxcImZpbGVtZXRhc1xcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJmc2lkc1xcXCI6IGBbJHtpZH1dYCxcXG4gICAgICAgICAgICAgICAgXFxcImRsaW5rXFxcIjogXFxcIjFcXFwiXFxuICAgICAgICAgICAgfSksIHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBcXFwicGFuLmJhaWR1LmNvbVxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pKS5saXN0WzBdLmRsaW5rICsgXFxcIiZhY2Nlc3NfdG9rZW49XFxcIiArIGdldEl0ZW0oXFxcImFjY2Vzc190b2tlblxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoZXh0ID09IFxcXCJtb3ZpZVxcXCIpIHtcXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICB1cmxzOiBbcmVzICsgXFxcIiNpc1ZpZGVvPXRydWUjXFxcIl0sXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogXFxcInBhbi5iYWlkdS5jb21cXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSBlbHNlIGlmIChleHQgPT0gXFxcImF1ZGlvXFxcIikge1xcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgIHVybHM6IFtyZXMgKyBcXFwiI2lzTXVzaWM9dHJ1ZSNcXFwiXSxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBcXFwicGFuLmJhaWR1LmNvbVxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9IGVsc2UgaWYgKGV4dCA9PSBcXFwiaW1nXFxcIikge1xcbiAgICAgICAgICAgIHJldHVybiByZXMgKyBgIy5qcGc7e1VzZXItQWdlbnRAcGFuLmJhaWR1LmNvbX1gXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiZG93bmxvYWQ6Ly9cXFwiICsgcmVzICsgYDt7VXNlci1BZ2VudEBwYW4uYmFpZHUuY29tfWBcXG4gICAgICAgIH1cXG4gICAgfSwgZXh0LCBpZCwgcGF0aClcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzJcIixcIm5hbWVcIjpcImxvZ2luMVwiLFwicGF0aFwiOlwibG9naW4xXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi6I635Y+WdG9rZW5cXFwiLFxcbiAgICB1cmw6IFxcXCJodHRwczovL29wZW5hcGkuYmFpZHUuY29tL29hdXRoLzIuMC9hdXRob3JpemU/cmVzcG9uc2VfdHlwZT1jb2RlJmNsaWVudF9pZD1pWUNlQzlnMDhoNXZ1UDlVcXZQSEtLU1ZyS0ZYR2ExdiZyZWRpcmVjdF91cmk9aHR0cHM6Ly90b29sLm5uLmNpL2JhaWR1L2NhbGxiYWNrJnNjb3BlPWJhc2ljLG5ldGRpc2smcXJjb2RlPTFcXFwiXFxufSlcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIueZu+mZhlxcXCIsXFxuICAgIHVybDogJChcXFwiXFxcIiwgXFxcIuWhq+WGmeiOt+WPluWIsOeahHRva2VuXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybChcXFwiaHR0cHM6Ly9vcGVuYXBpLmJhaWR1LmNvbS9vYXV0aC8yLjAvdG9rZW5cXFwiLCB7XFxuICAgICAgICAgICAgXFxcImdyYW50X3R5cGVcXFwiOiBcXFwicmVmcmVzaF90b2tlblxcXCIsXFxuICAgICAgICAgICAgXFxcInJlZnJlc2hfdG9rZW5cXFwiOiBpbnB1dCxcXG4gICAgICAgICAgICBcXFwiY2xpZW50X2lkXFxcIjogXFxcImlZQ2VDOWcwOGg1dnVQOVVxdlBIS0tTVnJLRlhHYTF2XFxcIixcXG4gICAgICAgICAgICBcXFwiY2xpZW50X3NlY3JldFxcXCI6IFxcXCJqWGlGTU9QVlBDV2xPMk01Q3dXUXpmZnBOUGFHVFJCR1xcXCJcXG4gICAgICAgIH0pKSlcXG4gICAgICAgIGlmICghcmVzLmFjY2Vzc190b2tlbikge1xcbiAgICAgICAgICAgIGxvZyhyZXMpXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+mUmeivr++8ge+8ge+8gVxcXCJcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgc2V0SXRlbShcXFwiYWNjZXNzX3Rva2VuYmFpZHVcXFwiLCByZXMuYWNjZXNzX3Rva2VuKVxcbiAgICAgICAgICAgLy8gc2V0SXRlbShcXFwicmVmcmVzaF90b2tlblxcXCIsIHJlcy5yZWZyZXNoX3Rva2VuKVxcbiAgICAgICAgICAgIGJhY2soKVxcbiAgICAgICAgfVxcbiAgICB9KVxcbn0pXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IGdldEl0ZW0oXFxcImprXFxcIiwgXFxcIjBcXFwiKSA9PSBcXFwiMFxcXCIgPyBcXFwi5a6Y5pa55o6l5Y+j77ya5LiN5pivdmlw5Lya6ZmQ6YCf77yM56iz5a6aXFxcIiA6IFxcXCLpnZ7lrpjmlrnmjqXlj6PvvJrlj6/og73kuI3pmZDpgJ/vvIzkuI3nqLPlrppcXFwiLFxcbiAgICB1cmw6ICQoKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICBzZXRJdGVtKFxcXCJqa1xcXCIsIGdldEl0ZW0oXFxcImprXFxcIiwgXFxcIjBcXFwiKSA9PSBcXFwiMFxcXCIgPyBcXFwiMVxcXCIgOiBcXFwiMFxcXCIpXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiXFxufSlcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJQaWtwYWtcIixcInBhdGhcIjpcIlBpa3Bha1wiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIueZu+mZhlxcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIixcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3NldHRpbmdzMlxcXCJcXG59KVxcbmlmIChnZXRJdGVtKFxcXCJhY2Nlc3NfdG9rZW5cXFwiLCBcXFwiXFxcIikgIT0gXFxcIlxcXCIpIHtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGNvbnN0IHtcXG4gICAgICAgICAgICBnZXRIem1cXG4gICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9jb2RlMlxcXCIpXFxuICAgICAgICBsZXQgcGF0aHMgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFwicGF0aHNwaWtwYWtcXFwiLCBbe1xcbiAgICAgICAgICAgIFxcXCJpZFxcXCI6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcIuWutlxcXCJcXG4gICAgICAgIH1dKVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIua3u+WKoOejgemTvlxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzJcXFwiLFxcbiAgICAgICAgICAgIHVybDogJChcXFwiXFxcIiwgXFxcIui+k+WFpeejgeWKm+mTvuaOpVxcXCIpLmlucHV0KCgpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJwaWtwYWthcHA6Ly9teXBpa3Bhay5jb20veHBhbi9tYWluX3RhYj90YWI9MSZhZGRfdXJsPVxcXCIgKyBlbmNvZGVVUklDb21wb25lbnQoaW5wdXQpXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgICAgICBwYXRocy5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubmFtZSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKHBhdGhzLCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFwicGF0aHNwaWtwYWtcXFwiLCBwYXRocy5zbGljZSgwLCBpICsgMSkpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgIH0sIHBhdGhzLCBpKVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICAgICAgbGV0IGxpc3QgPSBKU09OLnBhcnNlKHJlcXVlc3QoYnVpbGRVcmwoXFxcImh0dHBzOi8vYXBpLWRyaXZlLm15cGlrcGFrLmNvbS9kcml2ZS92MS9maWxlc1xcXCIsIHtcXG4gICAgICAgICAgICBcXFwicGFyZW50X2lkXFxcIjogcGF0aHNbcGF0aHMubGVuZ3RoIC0gMV0uaWQsXFxuICAgICAgICAgICAgXFxcInRodW1ibmFpbF9zaXplXFxcIjogXFxcIlNJWkVfTEFSR0VcXFwiLFxcbiAgICAgICAgICAgIFxcXCJ3aXRoX2F1ZGl0XFxcIjogXFxcInRydWVcXFwiLFxcbiAgICAgICAgICAgIFxcXCJsaW1pdFxcXCI6IFxcXCIxMDAwXFxcIixcXG4gICAgICAgICAgICBcXFwiZmlsdGVyc1xcXCI6ICd7XFxcInBoYXNlXFxcIjp7XFxcImVxXFxcIjpcXFwiUEhBU0VfVFlQRV9DT01QTEVURVxcXCJ9LFxcXCJ0cmFzaGVkXFxcIjp7XFxcImVxXFxcIjpmYWxzZX19JyxcXG4gICAgICAgICAgICBcXFwicGFnZV90b2tlblxcXCI6IFxcXCJcXFwiXFxuICAgICAgICB9KSwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgXFxcIkF1dGhvcml6YXRpb25cXFwiOiBcXFwiQmVhcmVyIFxcXCIgKyBnZXRJdGVtKFxcXCJhY2Nlc3NfdG9rZW5cXFwiKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pKVxcbiAgICAgICAgbGlzdC5maWxlcy5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgIGlmIChpdGVtLmtpbmQgPT0gXFxcImRyaXZlI2ZvbGRlclxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHVybGwgPSAkKCkubGF6eVJ1bGUoKHBhdGhzLCBpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwYXRocy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWVcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFwicGF0aHNwaWtwYWtcXFwiLCBwYXRocylcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgfSwgcGF0aHMsIGl0ZW0pXFxuICAgICAgICAgICAgfSBlbHNlIGlmICgkLm1vdmllLmluY2x1ZGVzKGdldEh6bShpdGVtLm5hbWUpKSkge1xcblxcbiAgICAgICAgICAgICAgICB2YXIgZXh0ID0gXFxcIiNpc1ZpZGVvPXRydWUjXFxcIlxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJC5hdWRpby5pbmNsdWRlcyhnZXRIem0oaXRlbS5uYW1lKSkpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGV4dCA9IFxcXCIjaXNNdXNpYz10cnVlI1xcXCJcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCQuaW1nLmluY2x1ZGVzKGdldEh6bShpdGVtLm5hbWUpKSkge1xcbiAgICAgICAgICAgICAgICB2YXIgZXh0ID0gXFxcIiMuanBnXFxcIlxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHZhciBleHQgPSBcXFwiXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgdXJsID0gJCgpLmxhenlSdWxlKChpdGVtLCBleHQpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBgaHR0cHM6Ly9hcGktZHJpdmUubXlwaWtwYWsuY29tL2RyaXZlL3YxL2ZpbGVzLyR7aXRlbS5pZH0/X21hZ2ljPTIwMjEmdGh1bWJuYWlsX3NpemU9U0laRV9MQVJHRWBcXG4gICAgICAgICAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdCh1LCB7XFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcIkF1dGhvcml6YXRpb25cXFwiOiBcXFwiQmVhcmVyIFxcXCIgKyBnZXRJdGVtKFxcXCJhY2Nlc3NfdG9rZW5cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgICAgIC8vbG9nKHJlcyk7XFxuICAgICAgICAgICAgICAgIGlmIChyZXMubGlua3MgJiYgcmVzLmxpbmtzW1xcXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cXFwiXSkge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IHJlcy5saW5rc1tcXFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXFxcIl0udXJsO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVybCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmwgKyBleHRcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBmb3IgKGl0ZW0gb2YgcmVzLm1lZGlhcykge1xcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdG1wID0gaXRlbS5saW5rXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC51cmwpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRtcC51cmwgKyBleHRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSwgaXRlbSwgZXh0KVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLm5hbWUsXFxuICAgICAgICAgICAgICAgIGltZzogaXRlbS5pY29uX2xpbmssXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiBpdGVtLmtpbmQgPT0gXFxcImRyaXZlI2ZvbGRlclxcXCIgPyB1cmxsIDogdXJsXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIHRvYXN0KFxcXCLmo4DmtYvliLDplJnor69cXFwiKVxcbiAgICAgICAgbG9nKGUubWVzc2FnZSlcXG4gICAgfVxcbn1cXG5cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJjb2RlMlwiLFwicGF0aFwiOlwiY29kZTJcIixcInJ1bGVcIjpcIiQuZXhwb3J0cy5sb2dpbiA9IGZ1bmN0aW9uKHVzZXJuYW1lLCBwYXNzd29yZCkge1xcbiAgICBsZXQgcmVzID0gSlNPTi5wYXJzZShwb3N0KFxcXCJodHRwczovL3VzZXIubXlwaWtwYWsuY29tL3YxL2F1dGgvc2lnbmluXFxcIiwge1xcbiAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgIFxcXCJjYXB0Y2hhX3Rva2VuXFxcIjogXFxcIlxcXCIsXFxuICAgICAgICAgICAgXFxcImNsaWVudF9pZFxcXCI6IFxcXCJZTnhUOXc3R01kV3ZFT0thXFxcIixcXG4gICAgICAgICAgICBcXFwiY2xpZW50X3NlY3JldFxcXCI6IFxcXCJkYncyT3RtVkVldVV2SXB0YjFDb3lnXFxcIixcXG4gICAgICAgICAgICBcXFwidXNlcm5hbWVcXFwiOiB1c2VybmFtZSxcXG4gICAgICAgICAgICBcXFwicGFzc3dvcmRcXFwiOiBwYXNzd29yZFxcbiAgICAgICAgfVxcbiAgICB9KSlcXG4gICAgaWYgKHJlcy5hY2Nlc3NfdG9rZW4pIHtcXG4gICAgICAgIHNldEl0ZW0oXFxcImFjY2Vzc190b2tlblxcXCIsIHJlcy5hY2Nlc3NfdG9rZW4pXFxuICAgICAgICBzZXRJdGVtKFxcXCJyZWZyZXNoX3Rva2VuXFxcIiwgcmVzLnJlZnJlc2hfdG9rZW4pXFxuICAgICAgICByZXR1cm4gdHJ1ZVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgbG9nKHJlcylcXG4gICAgICAgIHJldHVybiBmYWxzZVxcbiAgICB9XFxufVxcbiQuZXhwb3J0cy5nZXRIem0gPSBmdW5jdGlvbihmaWxlTmFtZSkge1xcbiAgICByZXR1cm4gZmlsZU5hbWUuc3Vic3RyKGZpbGVOYW1lLmxhc3RJbmRleE9mKFxcXCIuXFxcIikgKyAxKVxcbn1cIn0se1wiY29sX3R5cGVcIjpcInRleHRfMlwiLFwibmFtZVwiOlwic2V0dGluZ3MyXCIsXCJwYXRoXCI6XCJzZXR0aW5nczJcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLotKblj7co6YKu566xKVxcXCIsXFxuICAgIHVybDogJChnZXRJdGVtKFxcXCJ1c2VybmFtZVxcXCIsIFxcXCJcXFwiKSkuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgc2V0SXRlbShcXFwidXNlcm5hbWVcXFwiLCBpbnB1dClcXG4gICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgfSlcXG59KVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi5a+G56CBXFxcIixcXG4gICAgdXJsOiAkKGdldEl0ZW0oXFxcInBhc3N3ZFxcXCIsIFxcXCJcXFwiKSkuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgc2V0SXRlbShcXFwicGFzc3dkXFxcIiwgaW5wdXQpXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgIH0pXFxufSlcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIueZu+mZhlxcXCIsXFxuICAgIHVybDogJCgpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIGNvbnN0IHtcXG4gICAgICAgICAgICBsb2dpblxcbiAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2NvZGUyXFxcIilcXG4gICAgICAgIGxvZyhnZXRJdGVtKFxcXCJ1c2VybmFtZVxcXCIpKVxcbiAgICAgICAgaWYgKGxvZ2luKGdldEl0ZW0oXFxcInVzZXJuYW1lXFxcIiksIGdldEl0ZW0oXFxcInBhc3N3ZFxcXCIpKSkge1xcbiAgICAgICAgICAgIGJhY2soKVxcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/nmbvpmYbmiJDlip9cXFwiXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/nmbvpmYblpLHotKVcXFwiXFxuICAgICAgICB9XFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiXFxufSlcXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWkqee/vOS6keebmFwiLFwicGF0aFwiOlwi5aSp57+85LqR55uYXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbnRyeSB7XFxuICAgIGlmIChmaWxlRXhpc3QoXFxcIjE4OS50eHRcXFwiKSkge1xcbiAgICAgICAgY29uc3Qge1xcbiAgICAgICAgICAgIGdldEZpbGVzLFxcbiAgICAgICAgICAgIGdldEljb25cXG4gICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9jb2RlM1xcXCIpXFxuICAgICAgICB2YXIgcGF0aHMgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFwicGF0aHN0eVxcXCIsIFt7XFxuICAgICAgICAgICAgXFxcImlkXFxcIjogLTExLFxcbiAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcIuWutlxcXCJcXG4gICAgICAgIH1dKVxcbiAgICAgICAgcGF0aHMuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLm5hbWUsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChwYXRocywgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcInBhdGhzdHlcXFwiLCBwYXRocy5zbGljZSgwLCBpICsgMSkpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgIH0sIHBhdGhzLCBpKVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICAgICAgbGV0IGxpc3QgPSBnZXRGaWxlcyhwYXRoc1twYXRocy5sZW5ndGggLSAxXS5pZClcXG4gICAgICAgIGxpc3QuZmlsZUxpc3RBTy5mb2xkZXJMaXN0LmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubmFtZSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgICAgICAgICBpbWc6IFxcXCJodHRwczovL2dpdGNvZGUubmV0L3FxXzMyMzk0MzUxL2RyLy0vcmF3L21hc3Rlci9pbWcv5paH5Lu257G75Z6LMi/mlofku7blpLkuc3ZnXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKHBhdGhzLCBpZCwgbmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcGF0aHMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWVcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFwicGF0aHN0eVxcXCIsIHBhdGhzKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICB9LCBwYXRocywgaXRlbS5pZCwgaXRlbS5uYW1lKVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICAgICAgbGlzdC5maWxlTGlzdEFPLmZpbGVMaXN0LmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgdmFyIGltZyA9IGdldEljb24oaXRlbS5uYW1lKVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLm5hbWUsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChpZCwgbmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldEh6bVxcbiAgICAgICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2NvZGVcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvb2tpZSA9IHJlYWRGaWxlKFxcXCIxODkudHh0XFxcIilcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gXFxcImh0dHBzOi8vY2xvdWQuMTg5LmNuL2FwaS9wb3J0YWwvZ2V0RmlsZUluZm8uYWN0aW9uXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybCh1LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcImZpbGVJZFxcXCI6IGlkXFxuICAgICAgICAgICAgICAgICAgICB9KSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IGNvb2tpZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIkFjY2VwdFxcXCI6IFxcXCJhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9VVRGLThcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSkpXFxuICAgICAgICAgICAgICAgICAgICBpZiAoJC5tb3ZpZS5pbmNsdWRlcyhnZXRIem0obmFtZSkpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsczogW1xcXCJodHRwczpcXFwiICsgcmVzLmRvd25sb2FkVXJsICsgXFxcIiNpc1ZpZGVvPXRydWUjXFxcIl0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBjb29raWUucmVwbGFjZSgvOy9nLCBcXFwi77yb77ybXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBLnJlcGxhY2UoLzsvZywgXFxcIu+8m++8m1xcXCIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkLmF1ZGlvLmluY2x1ZGVzKGdldEh6bShuYW1lKSkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxzOiBbXFxcImh0dHBzOlxcXCIgKyByZXMuZG93bmxvYWRVcmwgKyBcXFwiI2lzVmlkZW89dHJ1ZSNcXFwiXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IGNvb2tpZS5yZXBsYWNlKC87L2csIFxcXCLvvJvvvJtcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogUENfVUEucmVwbGFjZSgvOy9nLCBcXFwi77yb77ybXFxcIilcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCQuaW1nLmluY2x1ZGVzKGdldEh6bShuYW1lKSkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImh0dHBzOlxcXCIgKyByZXMuZG93bmxvYWRVcmwgKyBgIy5qcGdAVXNlci1BZ2VudD0ke1BDX1VBfUBDb29raWU9JHtjb29raWV9YFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImRvd25sb2FkOi8vaHR0cHM6XFxcIiArIHJlcy5kb3dubG9hZFVybCArIGBAVXNlci1BZ2VudD0ke1BDX1VBfUBDb29raWU9JHtjb29raWV9YFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LCBpdGVtLmlkLCBpdGVtLm5hbWUpXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBkLnVuc2hpZnQoe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi55m76ZmGXFxcIixcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvbG9naW4zXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiXFxuICAgICAgICB9KVxcbiAgICB9XFxufSBjYXRjaCAoZSkge1xcbiAgICBkLnVuc2hpZnQoe1xcbiAgICAgICAgdGl0bGU6IFxcXCLnmbvpmYZcXFwiLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2xvZ2luM1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiXFxuICAgIH0pXFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgIHRvYXN0KFxcXCLnqIvluo/lj6/og73lh7rplJnkuobvvIzor7fmn6XnnIvml6Xlv5dcXFwiKVxcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJjb2RlM1wiLFwicGF0aFwiOlwiY29kZTNcIixcInJ1bGVcIjpcIiQuZXhwb3J0cy5nZXRGaWxlcyA9IGZ1bmN0aW9uKGlkKSB7XFxuICAgIGxldCB1ID0gXFxcImh0dHBzOi8vY2xvdWQuMTg5LmNuL2FwaS9vcGVuL2ZpbGUvbGlzdEZpbGVzLmFjdGlvblxcXCJcXG4gICAgbGV0IHJlcyA9IHJlcXVlc3QoYnVpbGRVcmwodSwge1xcbiAgICAgICAgXFxcInBhZ2VTaXplXFxcIjogMTAwMCxcXG4gICAgICAgIFxcXCJwYWdlTnVtXFxcIjogMSxcXG4gICAgICAgIFxcXCJtZWRpYVR5cGVcXFwiOiAwLFxcbiAgICAgICAgXFxcImZvbGRlcklkXFxcIjogaWQsXFxuICAgICAgICBcXFwiaWNvbk9wdGlvblxcXCI6IDUsXFxuICAgICAgICBcXFwib3JkZXJCeVxcXCI6IFxcXCJsYXN0T3BUaW1lXFxcIixcXG4gICAgICAgIFxcXCJkZXNjZW5kaW5nXFxcIjogXFxcInRydWVcXFwiLFxcbiAgICB9KSwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiByZWFkRmlsZShcXFwiMTg5LnR4dFxcXCIpLFxcbiAgICAgICAgICAgIFxcXCJBY2NlcHRcXFwiOiBcXFwiYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PVVURi04XFxcIixcXG4gICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBXFxuICAgICAgICB9XFxuICAgIH0pXFxuICAgIHZhciBqc29uID0gcmVzLnJlcGxhY2UoL1xcXFxcXFwiaWRcXFxcXFxcIjooXFxcXGQrKS9nLCAnXFxcImlkXFxcIjpcXFwiJDFcXFwiJykgLy/op6PlhrNqc+eahOeyvuW6pumXrumimFxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uKVxcbn1cXG4kLmV4cG9ydHMuZ2V0SWNvbiA9IGZ1bmN0aW9uKGZpbGVOYW1lKSB7XFxuICAgIGxldCB7XFxuICAgICAgICBnZXRIem1cXG4gICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2NvZGVcXFwiKVxcbiAgICBsZXQgcm9vdCA9IFxcXCJodHRwczovL2dpdGNvZGUubmV0L3FxXzMyMzk0MzUxL2RyLy0vcmF3L21hc3Rlci9pbWcv5paH5Lu257G75Z6LMi9cXFwiO1xcbiAgICBsZXQgZmlsZXMgPSAnYWl8YXBrfGF2aXxjc3N8ZG1nfGV4ZXxmbHZ8Z2lmfGhpa2VyfGh0bWx8aXNvfGpwZ3xqc3xqc29ufGxvZ3xtb3Z8bXAzfG1wNHxvdGZ8cGhwfHBuZ3xwcHR8cHNkfHRhYmxlfHR4dHx3YXZ8eGxzfHppcHxjc3N8ZG9jfGVwdWJ8ZXhjfGh0bXx4bHN4Jy5zcGxpdCgnfCcpO1xcbiAgICBsZXQgaHptID0gZ2V0SHptKGZpbGVOYW1lKVxcbiAgICBpZiAoZmlsZXMuaW5jbHVkZXMoaHptKSkge1xcbiAgICAgICAgaW1nID0gcm9vdCArIGh6bSArICcuc3ZnJztcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGltZyA9IHJvb3QgKyBcXFwi5paH5Lu2LnN2Z1xcXCJcXG4gICAgfVxcbiAgICByZXR1cm4gaW1nXFxufVxcbiQuZXhwb3J0cy5nZXRIem0gPSBmdW5jdGlvbihmaWxlTmFtZSkge1xcbiAgICByZXR1cm4gZmlsZU5hbWUuc3Vic3RyKGZpbGVOYW1lLmxhc3RJbmRleE9mKFxcXCIuXFxcIikgKyAxKVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcImxvZ2luM1wiLFwicGF0aFwiOlwibG9naW4zXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgKCkgPT4ge1xcbiAgICBsZXQgYyA9IGdldFZhcihcXFwiaHR0cHM6Ly9jbG91ZC4xODkuY24vd2ViL21haW5cXFwiKTtcXG4gICAgbG9nKGMpO1xcbiAgICBzYXZlRmlsZShcXFwiMTg5LnR4dFxcXCIsIGMpO1xcbiAgICBjbGVhclZhcihcXFwiaHR0cHM6Ly9jbG91ZC4xODkuY24vd2ViL21haW5cXFwiKTtcXG59KVxcbmQucHVzaCh7XFxuICAgIHVybDogXFxcImh0dHBzOi8vY2xvdWQuMTg5LmNuL3dlYi9sb2dpbi5odG1sXFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXCIsXFxuICAgIGRlc2M6IFxcXCIxMDAlJiZmbG9hdFxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgdmFyIHVybCA9IGxvY2F0aW9uLmhyZWZcXG4gICAgICAgICAgICBpZiAodXJsLmluY2x1ZGVzKFxcXCJodHRwczovL2Nsb3VkLjE4OS5jbi93ZWIvbWFpblxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGxldCBjb29raWUgPSBmYmEuZ2V0Q29va2llKHVybCk7XFxuICAgICAgICAgICAgICAgIGlmIChjb29raWUgIT0gbnVsbCAmJiBjb29raWUubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgZmJhLnB1dFZhcihcXFwiaHR0cHM6Ly9jbG91ZC4xODkuY24vd2ViL21haW5cXFwiLCBjb29raWUpO1xcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoXFxcIuW3suiOt+WPluWIsGNvb2tpZVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgZmJhLmJhY2soKTsgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pLFxcbiAgICAgICAgdWE6IFBDX1VBLFxcbiAgICAgICAgY2FuQmFjazogdHJ1ZVxcbiAgICB9XFxufSlcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlpLjlhYvnvZHnm5hcIixcInBhdGhcIjpcIuWkuOWFi+e9keebmFwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG50cnkge1xcbiAgICBpZiAoZmlsZUV4aXN0KFxcXCJxdWFyay50eHRcXFwiKSkge1xcbiAgICAgICAgY29uc3Qge1xcbiAgICAgICAgICAgIGdldEljb24sXFxuICAgICAgICAgICAgZ2V0SHptLFxcbiAgICAgICAgICAgIGdldExpbmtcXG4gICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9jb2RlNFxcXCIpXFxuICAgICAgICB2YXIgY29va2llID0gcmVhZEZpbGUoXFxcInF1YXJrLnR4dFxcXCIpXFxuICAgICAgICBsZXQgdXNlcmluZm8gPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImh0dHBzOi8vcGFuLnF1YXJrLmNuL2FjY291bnQvaW5mb1xcXCIsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBjb29raWVcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KSlcXG4gICAgICAgIGxldCBwYXRocyA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJwYXRoc1xcXCIsIFt7XFxuICAgICAgICAgICAgXFxcImlkXFxcIjogXFxcIjBcXFwiLFxcbiAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcIuagueebruW9lVxcXCJcXG4gICAgICAgIH1dKVxcbiAgICAgICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB1c2VyaW5mby5kYXRhLm5pY2tuYW1lLFxcbiAgICAgICAgICAgICAgICBpbWc6IHVzZXJpbmZvLmRhdGEuYXZhdGFyVXJpLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2Uvc2V0dGluZ3M0XFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBwYXRocy5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChwYXRocywgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJwYXRoc1xcXCIsIHBhdGhzLnNsaWNlKDAsIGkgKyAxKSlcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSwgcGF0aHMsIGkpXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHJlcXVlc3QoYnVpbGRVcmwoXFxcImh0dHBzOi8vZHJpdmUucXVhcmsuY24vMS9jbG91ZGRyaXZlL2ZpbGUvc29ydFxcXCIsIHtcXG4gICAgICAgICAgICBcXFwicGRpcl9maWRcXFwiOiBwYXRoc1twYXRocy5sZW5ndGggLSAxXS5pZCxcXG4gICAgICAgICAgICBcXFwiZnJcXFwiOiBcXFwicGNcXFwiLFxcbiAgICAgICAgICAgIFxcXCJwclxcXCI6IFxcXCJ1Y3Byb1xcXCIsXFxuICAgICAgICAgICAgXFxcIl9zaXplXFxcIjogMTAsXFxuICAgICAgICAgICAgXFxcIl9mZXRjaF90b3RhbFxcXCI6IFxcXCIxXFxcIixcXG4gICAgICAgICAgICBcXFwiX3NvcnRcXFwiOiBcXFwiZmlsZV90eXBlOmFzYyxmaWxlX25hbWU6YXNjXFxcIixcXG4gICAgICAgICAgICBcXFwiX3BhZ2VcXFwiOiBnZXRQYXJhbShcXFwicGFnZVxcXCIpXFxuICAgICAgICB9KSwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IGNvb2tpZSxcXG4gICAgICAgICAgICAgICAgXFxcIkFjY2VwdFxcXCI6IFxcXCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLypcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3Bhbi5xdWFyay5jbi9cXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSkpXFxuICAgICAgICByZXMuZGF0YS5saXN0LmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgaWYgKCFpdGVtLmZpbGUpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9ICQoKS5sYXp5UnVsZSgoaXRlbSwgcGF0aHMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHBhdGhzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLmZpZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLmZpbGVfbmFtZVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJwYXRoc1xcXCIsIHBhdGhzKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICB9LCBpdGVtLCBwYXRocylcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCQubW92aWUuaW5jbHVkZXMoZ2V0SHptKGl0ZW0uZmlsZV9uYW1lKSkpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IGdldExpbmsoaXRlbSwgY29va2llLCBcXFwibW92aWVcXFwiKVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJC5hdWRpby5pbmNsdWRlcyhnZXRIem0oaXRlbS5maWxlX25hbWUpKSkge1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gZ2V0TGluayhpdGVtLCBjb29raWUsIFxcXCJhdWRpb1xcXCIpXFxuICAgICAgICAgICAgfSBlbHNlIGlmICgkLmltZy5pbmNsdWRlcyhnZXRIem0oaXRlbS5maWxlX25hbWUpKSkge1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gZ2V0TGluayhpdGVtLCBjb29raWUsIFxcXCJpbWdcXFwiKVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBnZXRMaW5rKGl0ZW0sIGNvb2tpZSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0uZmlsZV9uYW1lLFxcbiAgICAgICAgICAgICAgICBpbWc6IGdldEljb24oaXRlbSksXFxuICAgICAgICAgICAgICAgIHVybDogdXJsLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCJcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIueZu+mZhlxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3NldHRpbmdzNFxcXCJcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICB9XFxufSBjYXRjaCAoZSkge1xcbiAgICBsb2coZS5tZXNzYWdlKVxcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJjb2RlNFwiLFwicGF0aFwiOlwiY29kZTRcIixcInJ1bGVcIjpcIiQuZXhwb3J0cy5nZXRJY29uID0gZnVuY3Rpb24oY29udGVudCkge1xcbiAgICBsZXQge1xcbiAgICAgICAgZ2V0SHptXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9jb2RlXFxcIilcXG4gICAgbGV0IHJvb3QgPSBcXFwiaHR0cHM6Ly9naXRjb2RlLm5ldC9xcV8zMjM5NDM1MS9kci8tL3Jhdy9tYXN0ZXIvaW1nL+aWh+S7tuexu+WeizIvXFxcIjtcXG4gICAgaWYgKCFjb250ZW50LmZpbGUpIHtcXG4gICAgICAgIGltZyA9IHJvb3QgKyBcXFwi5paH5Lu25aS5LnN2Z1xcXCJcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGxldCBmaWxlcyA9ICdhaXxhcGt8YXZpfGNzc3xkbWd8ZXhlfGZsdnxnaWZ8aGlrZXJ8aHRtbHxpc298anBnfGpzfGpzb258bG9nfG1vdnxtcDN8bXA0fG90ZnxwaHB8cG5nfHBwdHxwc2R8dGFibGV8dHh0fHdhdnx4bHN8emlwfGNzc3xkb2N8ZXB1YnxleGN8aHRtfHhsc3gnLnNwbGl0KCd8Jyk7XFxuICAgICAgICBsZXQgZmlsZU5hbWUgPSBjb250ZW50LmZpbGVfbmFtZVxcbiAgICAgICAgbGV0IGh6bSA9IGdldEh6bShmaWxlTmFtZSlcXG4gICAgICAgIGlmIChmaWxlcy5pbmNsdWRlcyhoem0pKSB7XFxuICAgICAgICAgICAgaW1nID0gcm9vdCArIGh6bSArICcuc3ZnJztcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaW1nID0gcm9vdCArIFxcXCLmlofku7Yuc3ZnXFxcIlxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiBpbWdcXG59XFxuJC5leHBvcnRzLmdldEh6bSA9IGZ1bmN0aW9uKGZpbGVOYW1lKSB7XFxuICAgIHJldHVybiBmaWxlTmFtZS5zdWJzdHIoZmlsZU5hbWUubGFzdEluZGV4T2YoXFxcIi5cXFwiKSArIDEpXFxufVxcbiQuZXhwb3J0cy5nZXRMaW5rID0gZnVuY3Rpb24oaXRlbSwgY29va2llLCBleHQpIHtcXG4gICAgdmFyIHVybCA9ICQoKS5sYXp5UnVsZSgoZmlkLCBjb29raWUsIGV4dCkgPT4ge1xcbiAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UocG9zdChcXFwiaHR0cHM6Ly9kcml2ZS5xdWFyay5jbi8xL2Nsb3VkZHJpdmUvZmlsZS9kb3dubG9hZD9wcj11Y3BybyZmcj1wY1xcXCIsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBjb29raWUsXFxuICAgICAgICAgICAgICAgIFxcXCJBY2NlcHRcXFwiOiBcXFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qXFxcIixcXG4gICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly9wYW4ucXVhcmsuY24vXFxcIlxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICBcXFwiZmlkc1xcXCI6IFtmaWRdXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pKVxcbiAgICAgICAgaWYgKGV4dCA9PSBcXFwibW92aWVcXFwiKSB7XFxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgdXJsczogW3Jlcy5kYXRhWzBdLmRvd25sb2FkX3VybCArIFxcXCIjaXNWaWRlbz10cnVlI1xcXCJdLFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogY29va2llLnJlcGxhY2UoLzsvZywgXFxcIu+8m++8m1xcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly9wYW4ucXVhcmsuY24vXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0gZWxzZSBpZiAoZXh0ID09IFxcXCJhdWRpb1xcXCIpIHtcXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICB1cmxzOiBbcmVzLmRhdGFbMF0uZG93bmxvYWRfdXJsICsgXFxcIiNpc011c2ljPXRydWUjXFxcIl0sXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBjb29raWUucmVwbGFjZSgvOy9nLCBcXFwi77yb77ybXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3Bhbi5xdWFyay5jbi9cXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSBlbHNlIGlmIChleHQgPT0gXFxcImltZ1xcXCIpIHtcXG4gICAgICAgICAgICByZXR1cm4gcmVzLmRhdGFbMF0uZG93bmxvYWRfdXJsICsgYEBSZWZlcmVyPWh0dHBzOi8vcGFuLnF1YXJrLmNuL0BDb29raWU9JHtjb29raWV9YFxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImRvd25sb2FkOi8vXFxcIiArIHJlcy5kYXRhWzBdLmRvd25sb2FkX3VybCArIGBAUmVmZXJlcj1odHRwczovL3Bhbi5xdWFyay5jbi9AQ29va2llPSR7Y29va2llfWBcXG4gICAgICAgIH1cXG4gICAgfSwgaXRlbS5maWQsIGNvb2tpZSwgZXh0KVxcbiAgICByZXR1cm4gdXJsXFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwic2V0dGluZ3M0XCIsXCJwYXRoXCI6XCJzZXR0aW5nczRcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAoKSA9PiB7XFxuICAgIHNhdmVGaWxlKFxcXCJxdWFyay50eHRcXFwiLCBnZXRWYXIoXFxcImh0dHBzOi8vcGFuLnF1YXJrLmNuL2xpc3QjL2xpc3QvYWxsXFxcIikpXFxuICAgIGNsZWFyVmFyKFxcXCJodHRwczovL3Bhbi5xdWFyay5jbi9saXN0Iy9saXN0L2FsbFxcXCIpO1xcbn0pXFxuZC5wdXNoKHtcXG4gICAgdXJsOiBcXFwiaHR0cHM6Ly9wYW4ucXVhcmsuY24vXFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXCIsXFxuICAgIGRlc2M6IFxcXCIxMDAlJiZmbG9hdFxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgdmFyIHVybCA9IGxvY2F0aW9uLmhyZWZcXG4gICAgICAgICAgICBpZiAodXJsID09IFxcXCJodHRwczovL3Bhbi5xdWFyay5jbi9saXN0Iy9saXN0L2FsbFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgbGV0IGNvb2tpZSA9IGZiYS5nZXRDb29raWUodXJsKTtcXG4gICAgICAgICAgICAgICAgaWYgKGNvb2tpZSAhPSBudWxsICYmIGNvb2tpZS5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgICAgICAgICBmYmEucHV0VmFyKHVybCwgY29va2llKTtcXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KFxcXCLlt7Lojrflj5bliLBjb29raWVcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGZiYS5iYWNrKCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KSxcXG4gICAgICAgIHVhOiBQQ19VQSxcXG4gICAgICAgIGNhbkJhY2s6IHRydWVcXG4gICAgfVxcbn0pXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5YWz5LqOXCIsXCJwYXRoXCI6XCJhYm91dFwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5hZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICBjbGVhck15VmFyKFxcXCJjXFxcIik7XFxufSkpO1xcbmQucHVzaCgkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hYm91dDJcXFwiKSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCJcXFwiLFxcbiAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgbGV0IGMgPSBwYXJzZUludChnZXRNeVZhcihcXFwiY1xcXCIsIFxcXCIxXFxcIikpXFxuICAgICAgICBpZiAoYyA+PSA1KSB7XFxuICAgICAgICAgICAgY29uZmlybSh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5rip6aao5o+Q56S6XFxcIixcXG4gICAgICAgICAgICAgICAgY29udGVudDogXFxcIuehruWumuimgeW8gOWQr+W8gOWPkeiAheaooeW8j+WQl++8n+azqOaEj+W8gOWQr+ivpeaooeW8j+WImeihqOekuuWQjue7reaCqOeahOaJgOacieaTjeS9nOWdh+S4uuS4u+inguiDveWKqOaTjeS9nO+8jOaJgOS6p+eUn+eahOS4gOWIh+mXrumimOS4jui0o+S7u+Wdh+eUseaCqOiHquW3seaJv+aLhVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbmZpcm06ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFwiZGV2XFxcIiwgXFxcIjFcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7LlvIDlkK/lvIDlj5HogIXmqKHlvI9cXFwiXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwiY1xcXCIsIGMgKyAxICsgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICB9XFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgcGljX3VybDogXFxcIlxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgfVxcbn0pO1xcblxcblxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWFs+S6jjJcIixcInBhdGhcIjpcImFib3V0MlwiLFwicnVsZVwiOlwiJC5leHBvcnRzID0ge1xcbiAgICB0aXRsZTogXFxcIuacrOinhOWImeWfuuS6juW8gOa6kOmhueebru+8mjxhIGhyZWY9XFxcXFxcXCJodHRwczovL2dpdGh1Yi5jb20vYWxpc3Qtb3JnL2FsaXN0XFxcXFxcXCI+QWxpc3Q8L2E+77yM5o6i57Si5LiN5L2/55So5pyN5Yqh5Zmo5a6e546wQWxpc3TpgLvovpHvvIzmnKzop4TliJnmiYDmnInku6PnoIHlhajpg6jlvIDmupDvvIzku4XpmZDkuKrkurrkvb/nlKjvvIzku4XkvpvnoJTnqbbjgIHlrabkuaDlkozmtYvor5XvvIznpoHmraLovazovb3liIbkuqvliLDnrKzkuInmlrnlubPlj7BcXFwiLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiLFxcbiAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgcGljX3VybDogXFxcIlxcXCJcXG59XCJ9XSxcInNhdmVkXCI6ZmFsc2UsXCJ0aXRsZVwiOlwi572R55uY5ZCI6ZuGXCIsXCJ2ZXJzaW9uXCI6MCxcInVybFwiOlwiaGlrZXI6Ly9wYWdlL3NldHRpbmdzXCIsXCJjb2xfdHlwZVwiOlwidGV4dF8yXCIsXCJmaW5kX3J1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLotKblj7co5omL5py65Y+3KVxcXCIsXFxuICAgIHVybDogJChnZXRJdGVtKFxcXCJ1c2VybmFtZVxcXCIsIFxcXCJcXFwiKSkuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgc2V0SXRlbShcXFwidXNlcm5hbWVcXFwiLCBpbnB1dClcXG4gICAgfSlcXG59KVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi5a+G56CBXFxcIixcXG4gICAgdXJsOiAkKGdldEl0ZW0oXFxcInBhc3N3ZFxcXCIsIFxcXCJcXFwiKSkuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgc2V0SXRlbShcXFwicGFzc3dkXFxcIiwgaW5wdXQpXFxuICAgIH0pXFxufSlcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIueZu+mZhlxcXCIsXFxuICAgIHVybDogJCgpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHBvc3QoXFxcImh0dHBzOi8vd3d3LjEyM3Bhbi5jb20vYXBpL3VzZXIvc2lnbl9pblxcXCIsIHtcXG4gICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgIFxcXCJwYXNzcG9ydFxcXCI6IGdldEl0ZW0oXFxcInVzZXJuYW1lXFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgICAgICBcXFwicGFzc3dvcmRcXFwiOiBnZXRJdGVtKFxcXCJwYXNzd2RcXFwiLCBcXFwiXFxcIilcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KSlcXG4gICAgICAgIGlmIChyZXMubWVzc2FnZSA9PSBcXFwic3VjY2Vzc1xcXCIpIHtcXG4gICAgICAgICAgICBzZXRJdGVtKFxcXCJ0b2tlblxcXCIsIHJlcy5kYXRhLnRva2VuKVxcbiAgICAgICAgICAgIGJhY2soKVxcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/nmbvpmYbmiJDlip9cXFwiXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFwiICsgcmVzLm1lc3NhZ2VcXG4gICAgICAgIH1cXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCJcXG59KVxcbnNldFJlc3VsdChkKVwiLFwiZ3JvdXBcIjpcIuKRoOe9keebmFwiLFwidWFcIjpcIm1vYmlsZVwiLFwicHJlUnVsZVwiOlwiJC5leHRlbmQoe1xcbiAgICBhdWRpbzogW1xcXCJtcDNcXFwiLCBcXFwiZmxhY1xcXCIsIFxcXCJvZ2dcXFwiLCBcXFwibTRhXFxcIiwgXFxcIndhdlxcXCIsIFxcXCJvcHVzXFxcIl0sXFxuICAgIG1vdmllOiBbXFxcIm1wNFxcXCIsIFxcXCJta3ZcXFwiLCBcXFwiYXZpXFxcIiwgXFxcIm1vdlxcXCIsIFxcXCJybXZiXFxcIiwgXFxcIndlYm1cXFwiLCBcXFwiZmx2XFxcIiwgXFxcIm00dlxcXCIsIFxcXCJtM3U4XFxcIiwgXFxcInRzXFxcIl0sXFxuICAgIGltZzogW1xcXCJqcGdcXFwiLCBcXFwicG5nXFxcIiwgXFxcImpwZWdcXFwiLCBcXFwiZ2lmXFxcIiwgXFxcInN2Z1xcXCIsIFxcXCJyYXdcXFwiXVxcbn0pXCIsXCJwYWdlc1wiOlwiW3tcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIjEyM3BhblxcXCIsXFxcInBhdGhcXFwiOlxcXCIxMjNwYW5cXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxudHJ5IHtcXFxcbiAgICBjb25zdCB7XFxcXG4gICAgICAgIGZpbGVMaXN0LFxcXFxuICAgICAgICBnZXRJY29uXFxcXG4gICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9jb2RlXFxcXFxcXCIpXFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwi4pqZ77iP6K6+572uXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2Uvc2V0dGluZ3NcXFxcXFxcIixcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwic2Nyb2xsX2J1dHRvblxcXFxcXFwiXFxcXG4gICAgfSlcXFxcbiAgICBpZiAoZ2V0SXRlbShcXFxcXFxcInRva2VuXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpICE9IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgdmFyIHBhdGhzID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcXFxcXCJwYXRoczEyM1xcXFxcXFwiLCBbe1xcXFxuICAgICAgICAgICAgbmFtZTogXFxcXFxcXCLmoLnnm67lvZVcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGlkOiBcXFxcXFxcIjBcXFxcXFxcIlxcXFxuICAgICAgICB9XSlcXFxcbiAgICAgICAgaWYgKHBhdGhzLmxlbmd0aCA+IDEpIHtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwiPFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInNjcm9sbF9idXR0b25cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgocGF0aHMpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcGF0aHMucG9wKClcXFxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcXFxcXCJwYXRoczEyM1xcXFxcXFwiLCBwYXRocylcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9LCBwYXRocylcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcGF0aHMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubmFtZSxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJzY3JvbGxfYnV0dG9uXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKGl0ZW0sIHBhdGhzLCBpbmRleCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFxcXFxcImlkXFxcXFxcXCIsIGl0ZW0uaWQpXFxcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXFxcXFwicGF0aHMxMjNcXFxcXFxcIiwgcGF0aHMuc2xpY2UoMCwgaW5kZXggKyAxKSlcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9LCBpdGVtLCBwYXRocywgaW5kZXgpXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9KVxcXFxuICAgICAgICBmaWxlTGlzdChwYXRoc1twYXRocy5sZW5ndGggLSAxXS5pZCkuZGF0YS5JbmZvTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgICAgICAgICAgdmFyIGltZyA9IGdldEljb24oaXRlbSlcXFxcbiAgICAgICAgICAgIGlmIChpdGVtLlR5cGUgPT0gMSkge1xcXFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSAkKCkubGF6eVJ1bGUoKGlkLCBuYW1lLCBwYXRocykgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBwYXRocy5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogaWRcXFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcXFxcXCJwYXRoczEyM1xcXFxcXFwiLCBwYXRocylcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9LCBpdGVtLkZpbGVJZCwgaXRlbS5GaWxlTmFtZSwgcGF0aHMpXFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBpdGVtLkRvd25sb2FkVXJsXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLkZpbGVOYW1lLFxcXFxuICAgICAgICAgICAgICAgIHVybDogdXJsLFxcXFxuICAgICAgICAgICAgICAgIGltZzogaW1nLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImF2YXRhclxcXFxcXFwiXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9KVxcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLmnKrnmbvlvZVcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2Uvc2V0dGluZ3NcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfMVxcXFxcXFwiXFxcXG4gICAgICAgIH0pXFxcXG4gICAgfVxcXFxufSBjYXRjaCAoZSkge1xcXFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxcXG59XFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiY29kZVxcXCIsXFxcInBhdGhcXFwiOlxcXCJjb2RlXFxcIixcXFwicnVsZVxcXCI6XFxcIiQuZXhwb3J0cy5maWxlTGlzdCA9IGZ1bmN0aW9uKGlkKSB7XFxcXG4gICAgbGV0IGxpc3QgPSByZXF1ZXN0KGJ1aWxkVXJsKFxcXFxcXFwiaHR0cHM6Ly93d3cuMTIzcGFuLmNvbS9hcGkvZmlsZS9saXN0L25ld1xcXFxcXFwiLCB7XFxcXG4gICAgICAgIFxcXFxcXFwiZHJpdmVJZFxcXFxcXFwiOiAwLFxcXFxuICAgICAgICBcXFxcXFxcImxpbWl0XFxcXFxcXCI6IDEwMCxcXFxcbiAgICAgICAgXFxcXFxcXCJvcmRlckJ5XFxcXFxcXCI6IFxcXFxcXFwiZmlsZUlkXFxcXFxcXCIsXFxcXG4gICAgICAgIFxcXFxcXFwiT3JkZXJEaXJlY3Rpb25cXFxcXFxcIjogXFxcXFxcXCJhc2NcXFxcXFxcIixcXFxcbiAgICAgICAgXFxcXFxcXCJQYXJlbnRGaWxlSWRcXFxcXFxcIjogaWQsXFxcXG4gICAgICAgIFxcXFxcXFwidHJhc2hlZFxcXFxcXFwiOiBmYWxzZVxcXFxuICAgIH0pLCB7XFxcXG4gICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiQXV0aG9yaXphdGlvblxcXFxcXFwiOiBcXFxcXFxcIkJlYXJlciBcXFxcXFxcIiArIGdldEl0ZW0oXFxcXFxcXCJ0b2tlblxcXFxcXFwiKVxcXFxuICAgICAgICB9XFxcXG4gICAgfSlcXFxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShsaXN0KVxcXFxufVxcXFxuJC5leHBvcnRzLmdldEljb24gPSBmdW5jdGlvbihjb250ZW50KSB7XFxcXG4gICAgbGV0IHtcXFxcbiAgICAgICAgZ2V0SHptXFxcXG4gICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9jb2RlXFxcXFxcXCIpXFxcXG4gICAgbGV0IHJvb3QgPSBcXFxcXFxcImh0dHBzOi8vZ2l0Y29kZS5uZXQvcXFfMzIzOTQzNTEvZHIvLS9yYXcvbWFzdGVyL2ltZy/mlofku7bnsbvlnosyL1xcXFxcXFwiO1xcXFxuICAgIGlmIChjb250ZW50LlR5cGUgPT0gMSkge1xcXFxuICAgICAgICBpbWcgPSByb290ICsgXFxcXFxcXCLmlofku7blpLkuc3ZnXFxcXFxcXCJcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICBsZXQgZmlsZXMgPSAnYWl8YXBrfGF2aXxjc3N8ZG1nfGV4ZXxmbHZ8Z2lmfGhpa2VyfGh0bWx8aXNvfGpwZ3xqc3xqc29ufGxvZ3xtb3Z8bXAzfG1wNHxvdGZ8cGhwfHBuZ3xwcHR8cHNkfHRhYmxlfHR4dHx3YXZ8eGxzfHppcHxjc3N8ZG9jfGVwdWJ8ZXhjfGh0bXx4bHN4Jy5zcGxpdCgnfCcpO1xcXFxuICAgICAgICBsZXQgZmlsZU5hbWUgPSBjb250ZW50LkZpbGVOYW1lXFxcXG4gICAgICAgIGxldCBoem0gPSBnZXRIem0oZmlsZU5hbWUpXFxcXG4gICAgICAgIGlmIChmaWxlcy5pbmNsdWRlcyhoem0pKSB7XFxcXG4gICAgICAgICAgICBpbWcgPSByb290ICsgaHptICsgJy5zdmcnO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgaW1nID0gcm9vdCArIFxcXFxcXFwi5paH5Lu2LnN2Z1xcXFxcXFwiXFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIGltZ1xcXFxufVxcXFxuJC5leHBvcnRzLmdldEh6bSA9IGZ1bmN0aW9uKGZpbGVOYW1lKSB7XFxcXG4gICAgcmV0dXJuIGZpbGVOYW1lLnN1YnN0cihmaWxlTmFtZS5sYXN0SW5kZXhPZihcXFxcXFxcIi5cXFxcXFxcIikgKyAxKVxcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJ0ZXh0XzJcXFwiLFxcXCJuYW1lXFxcIjpcXFwic2V0dGluZ3NcXFwiLFxcXCJwYXRoXFxcIjpcXFwic2V0dGluZ3NcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogXFxcXFxcXCLotKblj7co5omL5py65Y+3KVxcXFxcXFwiLFxcXFxuICAgIHVybDogJChnZXRJdGVtKFxcXFxcXFwidXNlcm5hbWVcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIikpLmlucHV0KCgpID0+IHtcXFxcbiAgICAgICAgc2V0SXRlbShcXFxcXFxcInVzZXJuYW1lXFxcXFxcXCIsIGlucHV0KVxcXFxuICAgIH0pXFxcXG59KVxcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogXFxcXFxcXCLlr4bnoIFcXFxcXFxcIixcXFxcbiAgICB1cmw6ICQoZ2V0SXRlbShcXFxcXFxcInBhc3N3ZFxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKSkuaW5wdXQoKCkgPT4ge1xcXFxuICAgICAgICBzZXRJdGVtKFxcXFxcXFwicGFzc3dkXFxcXFxcXCIsIGlucHV0KVxcXFxuICAgIH0pXFxcXG59KVxcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogXFxcXFxcXCLnmbvpmYZcXFxcXFxcIixcXFxcbiAgICB1cmw6ICQoKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG4gICAgICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHBvc3QoXFxcXFxcXCJodHRwczovL3d3dy4xMjNwYW4uY29tL2FwaS91c2VyL3NpZ25faW5cXFxcXFxcIiwge1xcXFxuICAgICAgICAgICAgYm9keToge1xcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwicGFzc3BvcnRcXFxcXFxcIjogZ2V0SXRlbShcXFxcXFxcInVzZXJuYW1lXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwicGFzc3dvcmRcXFxcXFxcIjogZ2V0SXRlbShcXFxcXFxcInBhc3N3ZFxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KSlcXFxcbiAgICAgICAgaWYgKHJlcy5tZXNzYWdlID09IFxcXFxcXFwic3VjY2Vzc1xcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFwidG9rZW5cXFxcXFxcIiwgcmVzLmRhdGEudG9rZW4pXFxcXG4gICAgICAgICAgICBiYWNrKClcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v55m76ZmG5oiQ5YqfXFxcXFxcXCJcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8vXFxcXFxcXCIgKyByZXMubWVzc2FnZVxcXFxuICAgICAgICB9XFxcXG4gICAgfSksXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiXFxcXG59KVxcXFxuc2V0UmVzdWx0KGQpXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi55m+5bqm572R55uYXFxcIixcXFwicGF0aFxcXCI6XFxcIueZvuW6pue9keebmFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBcXFxcXFxcIuiuvue9rlxcXFxcXFwiLFxcXFxuICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvbG9naW4xXFxcXFxcXCIsXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF8xXFxcXFxcXCJcXFxcbn0pXFxcXG5pZiAoZ2V0SXRlbShcXFxcXFxcImFjY2Vzc190b2tlblxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKSAhPSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgdHJ5IHtcXFxcbiAgICAgICAgY29uc3Qge1xcXFxuICAgICAgICAgICAgZ2V0SWNvbixcXFxcbiAgICAgICAgICAgIGdldEh6bSxcXFxcbiAgICAgICAgICAgIGdldExpbmtcXFxcbiAgICAgICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9jb2RlMVxcXFxcXFwiKVxcXFxuICAgICAgICBsZXQgcGF0aHMgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFxcXFxcInBhdGhzYmFpZHVcXFxcXFxcIiwgW3tcXFxcbiAgICAgICAgICAgIHBhdGg6IFxcXFxcXFwiL1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgbmFtZTogXFxcXFxcXCLlrrZcXFxcXFxcIlxcXFxuICAgICAgICB9XSlcXFxcbiAgICAgICAgcGF0aHMuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5uYW1lLFxcXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChwYXRocywgaSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFxcXFxcInBhdGhzYmFpZHVcXFxcXFxcIiwgcGF0aHMuc2xpY2UoMCwgaSArIDEpKVxcXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0sIHBhdGhzLCBpKSxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJzY3JvbGxfYnV0dG9uXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHJlcXVlc3QoYnVpbGRVcmwoXFxcXFxcXCJodHRwczovL3Bhbi5iYWlkdS5jb20vcmVzdC8yLjAveHBhbi9maWxlXFxcXFxcXCIsIHtcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiYWNjZXNzX3Rva2VuXFxcXFxcXCI6IGdldEl0ZW0oXFxcXFxcXCJhY2Nlc3NfdG9rZW5iYWlkdVxcXFxcXFwiKSxcXFxcbiAgICAgICAgICAgIFxcXFxcXFwibWV0aG9kXFxcXFxcXCI6IFxcXFxcXFwibGlzdFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJkaXJcXFxcXFxcIjogcGF0aHNbcGF0aHMubGVuZ3RoIC0gMV0ucGF0aCxcXFxcbiAgICAgICAgICAgIFxcXFxcXFwid2ViXFxcXFxcXCI6IFxcXFxcXFwid2ViXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBcXFxcXFxcImxpbWl0XFxcXFxcXCI6IDAsXFxcXG4gICAgICAgICAgICBcXFxcXFxcImxpbWl0XFxcXFxcXCI6IDIwMFxcXFxuICAgICAgICB9KSkpXFxcXG4gICAgICAgIHJlcy5saXN0LmZvckVhY2goaXRlbSA9PiB7XFxcXG4gICAgICAgICAgICBpZiAoaXRlbS5pc2RpciA9PSAxKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9ICQoKS5sYXp5UnVsZSgoaXRlbSwgcGF0aHMpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcGF0aHMucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBpdGVtLnBhdGgsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLnNlcnZlcl9maWxlbmFtZVxcXFxuICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFxcXFxcInBhdGhzYmFpZHVcXFxcXFxcIiwgcGF0aHMpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfSwgaXRlbSwgcGF0aHMpXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCQubW92aWUuaW5jbHVkZXMoZ2V0SHptKGl0ZW0uc2VydmVyX2ZpbGVuYW1lKSkpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gZ2V0TGluayhcXFxcXFxcIm1vdmllXFxcXFxcXCIsIGl0ZW0uZnNfaWQsIGl0ZW0ucGF0aClcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJC5hdWRpby5pbmNsdWRlcyhnZXRIem0oaXRlbS5zZXJ2ZXJfZmlsZW5hbWUpKSkge1xcXFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBnZXRMaW5rKFxcXFxcXFwiYXVkaW9cXFxcXFxcIiwgaXRlbS5mc19pZCwgaXRlbS5wYXRoKVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmICgkLmltZy5pbmNsdWRlcyhnZXRIem0oaXRlbS5zZXJ2ZXJfZmlsZW5hbWUpKSkge1xcXFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBnZXRMaW5rKFxcXFxcXFwiaW1nXFxcXFxcXCIsIGl0ZW0uZnNfaWQsIGl0ZW0ucGF0aClcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IGdldExpbmsoXFxcXFxcXCJcXFxcXFxcIiwgaXRlbS5mc19pZCwgaXRlbS5wYXRoKVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5zZXJ2ZXJfZmlsZW5hbWUsXFxcXG4gICAgICAgICAgICAgICAgaW1nOiBnZXRJY29uKGl0ZW0pLFxcXFxuICAgICAgICAgICAgICAgIHVybDogdXJsLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImF2YXRhclxcXFxcXFwiXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9KVxcXFxuICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgbG9nKGUubWVzc2FnZSlcXFxcbiAgICAgICAgdG9hc3QoXFxcXFxcXCLlh7rnjrDplJnor6/vvIzor7fmn6XnnIvml6Xlv5dcXFxcXFxcIikgICAgICAgIFxcXFxuICAgIH1cXFxcbn1cXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJjb2RlMVxcXCIsXFxcInBhdGhcXFwiOlxcXCJjb2RlMVxcXCIsXFxcInJ1bGVcXFwiOlxcXCIkLmV4cG9ydHMuZ2V0SWNvbiA9IGZ1bmN0aW9uKGNvbnRlbnQpIHtcXFxcbiAgICBsZXQge1xcXFxuICAgICAgICBnZXRIem1cXFxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2NvZGVcXFxcXFxcIilcXFxcbiAgICBsZXQgcm9vdCA9IFxcXFxcXFwiaHR0cHM6Ly9naXRjb2RlLm5ldC9xcV8zMjM5NDM1MS9kci8tL3Jhdy9tYXN0ZXIvaW1nL+aWh+S7tuexu+WeizIvXFxcXFxcXCI7XFxcXG4gICAgaWYgKGNvbnRlbnQuaXNkaXIgPT0gMSkge1xcXFxuICAgICAgICBpbWcgPSByb290ICsgXFxcXFxcXCLmlofku7blpLkuc3ZnXFxcXFxcXCJcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICBsZXQgZmlsZXMgPSAnYWl8YXBrfGF2aXxjc3N8ZG1nfGV4ZXxmbHZ8Z2lmfGhpa2VyfGh0bWx8aXNvfGpwZ3xqc3xqc29ufGxvZ3xtb3Z8bXAzfG1wNHxvdGZ8cGhwfHBuZ3xwcHR8cHNkfHRhYmxlfHR4dHx3YXZ8eGxzfHppcHxjc3N8ZG9jfGVwdWJ8ZXhjfGh0bXx4bHN4Jy5zcGxpdCgnfCcpO1xcXFxuICAgICAgICBsZXQgZmlsZU5hbWUgPSBjb250ZW50LnNlcnZlcl9maWxlbmFtZVxcXFxuICAgICAgICBsZXQgaHptID0gZ2V0SHptKGZpbGVOYW1lKVxcXFxuICAgICAgICBpZiAoZmlsZXMuaW5jbHVkZXMoaHptKSkge1xcXFxuICAgICAgICAgICAgaW1nID0gcm9vdCArIGh6bSArICcuc3ZnJztcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGltZyA9IHJvb3QgKyBcXFxcXFxcIuaWh+S7ti5zdmdcXFxcXFxcIlxcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiBpbWdcXFxcbn1cXFxcbiQuZXhwb3J0cy5nZXRIem0gPSBmdW5jdGlvbihmaWxlTmFtZSkge1xcXFxuICAgIHJldHVybiBmaWxlTmFtZS5zdWJzdHIoZmlsZU5hbWUubGFzdEluZGV4T2YoXFxcXFxcXCIuXFxcXFxcXCIpICsgMSlcXFxcbn1cXFxcbiQuZXhwb3J0cy5nZXRMaW5rID0gZnVuY3Rpb24oZXh0LCBpZCwgcGF0aCkge1xcXFxuICAgIHJldHVybiAkKCkubGF6eVJ1bGUoKGV4dCwgaWQsIHBhdGgpID0+IHtcXFxcbiAgICAgICAgaWYgKGdldEl0ZW0oXFxcXFxcXCJqa1xcXFxcXFwiLCBcXFxcXFxcIjBcXFxcXFxcIikgPT0gXFxcXFxcXCIxXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgIHZhciByZXMgPSBKU09OLnBhcnNlKHJlcXVlc3QoYnVpbGRVcmwoXFxcXFxcXCJodHRwczovL3Bhbi5iYWlkdS5jb20vYXBpL2ZpbGVtZXRhc1xcXFxcXFwiLCB7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJhY2Nlc3NfdG9rZW5cXFxcXFxcIjogZ2V0SXRlbShcXFxcXFxcImFjY2Vzc190b2tlblxcXFxcXFwiKSxcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcImRsaW5rXFxcXFxcXCI6IFxcXFxcXFwiMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwid2ViXFxcXFxcXCI6IFxcXFxcXFwiNVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwib3JpZ2luXFxcXFxcXCI6IFxcXFxcXFwiZGxuYVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwidGFyZ2V0XFxcXFxcXCI6IGBbXFxcXFxcXFxcXFxcXFxcIiR7cGF0aH1cXFxcXFxcXFxcXFxcXFwiXWBcXFxcbiAgICAgICAgICAgIH0pKSkuaW5mb1swXS5kbGlua1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgdmFyIHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybChcXFxcXFxcImh0dHBzOi8vcGFuLmJhaWR1LmNvbS9yZXN0LzIuMC94cGFuL211bHRpbWVkaWFcXFxcXFxcIiwge1xcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiYWNjZXNzX3Rva2VuXFxcXFxcXCI6IGdldEl0ZW0oXFxcXFxcXCJhY2Nlc3NfdG9rZW5cXFxcXFxcIiksXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJtZXRob2RcXFxcXFxcIjogXFxcXFxcXCJmaWxlbWV0YXNcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcImZzaWRzXFxcXFxcXCI6IGBbJHtpZH1dYCxcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcImRsaW5rXFxcXFxcXCI6IFxcXFxcXFwiMVxcXFxcXFwiXFxcXG4gICAgICAgICAgICB9KSwge1xcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFxcXFxcXFwicGFuLmJhaWR1LmNvbVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSkpLmxpc3RbMF0uZGxpbmsgKyBcXFxcXFxcIiZhY2Nlc3NfdG9rZW49XFxcXFxcXCIgKyBnZXRJdGVtKFxcXFxcXFwiYWNjZXNzX3Rva2VuXFxcXFxcXCIpXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaWYgKGV4dCA9PSBcXFxcXFxcIm1vdmllXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICAgICAgdXJsczogW3JlcyArIFxcXFxcXFwiI2lzVmlkZW89dHJ1ZSNcXFxcXFxcIl0sXFxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlVzZXItQWdlbnRcXFxcXFxcIjogXFxcXFxcXCJwYW4uYmFpZHUuY29tXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9IGVsc2UgaWYgKGV4dCA9PSBcXFxcXFxcImF1ZGlvXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICAgICAgdXJsczogW3JlcyArIFxcXFxcXFwiI2lzTXVzaWM9dHJ1ZSNcXFxcXFxcIl0sXFxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlVzZXItQWdlbnRcXFxcXFxcIjogXFxcXFxcXCJwYW4uYmFpZHUuY29tXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9IGVsc2UgaWYgKGV4dCA9PSBcXFxcXFxcImltZ1xcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gcmVzICsgYCMuanBnO3tVc2VyLUFnZW50QHBhbi5iYWlkdS5jb219YFxcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiZG93bmxvYWQ6Ly9cXFxcXFxcIiArIHJlcyArIGA7e1VzZXItQWdlbnRAcGFuLmJhaWR1LmNvbX1gXFxcXG4gICAgICAgIH1cXFxcbiAgICB9LCBleHQsIGlkLCBwYXRoKVxcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJ0ZXh0XzJcXFwiLFxcXCJuYW1lXFxcIjpcXFwibG9naW4xXFxcIixcXFwicGF0aFxcXCI6XFxcImxvZ2luMVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBcXFxcXFxcIuiOt+WPlnRva2VuXFxcXFxcXCIsXFxcXG4gICAgdXJsOiBcXFxcXFxcImh0dHBzOi8vb3BlbmFwaS5iYWlkdS5jb20vb2F1dGgvMi4wL2F1dGhvcml6ZT9yZXNwb25zZV90eXBlPWNvZGUmY2xpZW50X2lkPWlZQ2VDOWcwOGg1dnVQOVVxdlBIS0tTVnJLRlhHYTF2JnJlZGlyZWN0X3VyaT1odHRwczovL3Rvb2wubm4uY2kvYmFpZHUvY2FsbGJhY2smc2NvcGU9YmFzaWMsbmV0ZGlzayZxcmNvZGU9MVxcXFxcXFwiXFxcXG59KVxcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogXFxcXFxcXCLnmbvpmYZcXFxcXFxcIixcXFxcbiAgICB1cmw6ICQoXFxcXFxcXCJcXFxcXFxcIiwgXFxcXFxcXCLloavlhpnojrflj5bliLDnmoR0b2tlblxcXFxcXFwiKS5pbnB1dCgoKSA9PiB7XFxcXG4gICAgICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHJlcXVlc3QoYnVpbGRVcmwoXFxcXFxcXCJodHRwczovL29wZW5hcGkuYmFpZHUuY29tL29hdXRoLzIuMC90b2tlblxcXFxcXFwiLCB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcImdyYW50X3R5cGVcXFxcXFxcIjogXFxcXFxcXCJyZWZyZXNoX3Rva2VuXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBcXFxcXFxcInJlZnJlc2hfdG9rZW5cXFxcXFxcIjogaW5wdXQsXFxcXG4gICAgICAgICAgICBcXFxcXFxcImNsaWVudF9pZFxcXFxcXFwiOiBcXFxcXFxcImlZQ2VDOWcwOGg1dnVQOVVxdlBIS0tTVnJLRlhHYTF2XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBcXFxcXFxcImNsaWVudF9zZWNyZXRcXFxcXFxcIjogXFxcXFxcXCJqWGlGTU9QVlBDV2xPMk01Q3dXUXpmZnBOUGFHVFJCR1xcXFxcXFwiXFxcXG4gICAgICAgIH0pKSlcXFxcbiAgICAgICAgaWYgKCFyZXMuYWNjZXNzX3Rva2VuKSB7XFxcXG4gICAgICAgICAgICBsb2cocmVzKVxcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/plJnor6/vvIHvvIHvvIFcXFxcXFxcIlxcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgc2V0SXRlbShcXFxcXFxcImFjY2Vzc190b2tlbmJhaWR1XFxcXFxcXCIsIHJlcy5hY2Nlc3NfdG9rZW4pXFxcXG4gICAgICAgICAgIC8vIHNldEl0ZW0oXFxcXFxcXCJyZWZyZXNoX3Rva2VuXFxcXFxcXCIsIHJlcy5yZWZyZXNoX3Rva2VuKVxcXFxuICAgICAgICAgICAgYmFjaygpXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KVxcXFxufSlcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6IGdldEl0ZW0oXFxcXFxcXCJqa1xcXFxcXFwiLCBcXFxcXFxcIjBcXFxcXFxcIikgPT0gXFxcXFxcXCIwXFxcXFxcXCIgPyBcXFxcXFxcIuWumOaWueaOpeWPo++8muS4jeaYr3ZpcOS8mumZkOmAn++8jOeos+WumlxcXFxcXFwiIDogXFxcXFxcXCLpnZ7lrpjmlrnmjqXlj6PvvJrlj6/og73kuI3pmZDpgJ/vvIzkuI3nqLPlrppcXFxcXFxcIixcXFxcbiAgICB1cmw6ICQoKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG4gICAgICAgIHNldEl0ZW0oXFxcXFxcXCJqa1xcXFxcXFwiLCBnZXRJdGVtKFxcXFxcXFwiamtcXFxcXFxcIiwgXFxcXFxcXCIwXFxcXFxcXCIpID09IFxcXFxcXFwiMFxcXFxcXFwiID8gXFxcXFxcXCIxXFxcXFxcXCIgOiBcXFxcXFxcIjBcXFxcXFxcIilcXFxcbiAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICB9KSxcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCJcXFxcbn0pXFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiUGlrcGFrXFxcIixcXFwicGF0aFxcXCI6XFxcIlBpa3Bha1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBcXFxcXFxcIueZu+mZhlxcXFxcXFwiLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfMlxcXFxcXFwiLFxcXFxuICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2Uvc2V0dGluZ3MyXFxcXFxcXCJcXFxcbn0pXFxcXG5pZiAoZ2V0SXRlbShcXFxcXFxcImFjY2Vzc190b2tlblxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKSAhPSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgdHJ5IHtcXFxcbiAgICAgICAgY29uc3Qge1xcXFxuICAgICAgICAgICAgZ2V0SHptXFxcXG4gICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvY29kZTJcXFxcXFxcIilcXFxcbiAgICAgICAgbGV0IHBhdGhzID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcXFxcXCJwYXRoc3Bpa3Bha1xcXFxcXFwiLCBbe1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJpZFxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJuYW1lXFxcXFxcXCI6IFxcXFxcXFwi5a62XFxcXFxcXCJcXFxcbiAgICAgICAgfV0pXFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLmt7vliqDno4Hpk75cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfMlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdXJsOiAkKFxcXFxcXFwiXFxcXFxcXCIsIFxcXFxcXFwi6L6T5YWl56OB5Yqb6ZO+5o6lXFxcXFxcXCIpLmlucHV0KCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJwaWtwYWthcHA6Ly9teXBpa3Bhay5jb20veHBhbi9tYWluX3RhYj90YWI9MSZhZGRfdXJsPVxcXFxcXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGlucHV0KVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgcGF0aHMuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5uYW1lLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInNjcm9sbF9idXR0b25cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgocGF0aHMsIGkpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcXFxcXCJwYXRoc3Bpa3Bha1xcXFxcXFwiLCBwYXRocy5zbGljZSgwLCBpICsgMSkpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfSwgcGF0aHMsIGkpXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9KVxcXFxuICAgICAgICBsZXQgbGlzdCA9IEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybChcXFxcXFxcImh0dHBzOi8vYXBpLWRyaXZlLm15cGlrcGFrLmNvbS9kcml2ZS92MS9maWxlc1xcXFxcXFwiLCB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcInBhcmVudF9pZFxcXFxcXFwiOiBwYXRoc1twYXRocy5sZW5ndGggLSAxXS5pZCxcXFxcbiAgICAgICAgICAgIFxcXFxcXFwidGh1bWJuYWlsX3NpemVcXFxcXFxcIjogXFxcXFxcXCJTSVpFX0xBUkdFXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBcXFxcXFxcIndpdGhfYXVkaXRcXFxcXFxcIjogXFxcXFxcXCJ0cnVlXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBcXFxcXFxcImxpbWl0XFxcXFxcXCI6IFxcXFxcXFwiMTAwMFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJmaWx0ZXJzXFxcXFxcXCI6ICd7XFxcXFxcXCJwaGFzZVxcXFxcXFwiOntcXFxcXFxcImVxXFxcXFxcXCI6XFxcXFxcXCJQSEFTRV9UWVBFX0NPTVBMRVRFXFxcXFxcXCJ9LFxcXFxcXFwidHJhc2hlZFxcXFxcXFwiOntcXFxcXFxcImVxXFxcXFxcXCI6ZmFsc2V9fScsXFxcXG4gICAgICAgICAgICBcXFxcXFxcInBhZ2VfdG9rZW5cXFxcXFxcIjogXFxcXFxcXCJcXFxcXFxcIlxcXFxuICAgICAgICB9KSwge1xcXFxuICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiQXV0aG9yaXphdGlvblxcXFxcXFwiOiBcXFxcXFxcIkJlYXJlciBcXFxcXFxcIiArIGdldEl0ZW0oXFxcXFxcXCJhY2Nlc3NfdG9rZW5cXFxcXFxcIilcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSkpXFxcXG4gICAgICAgIGxpc3QuZmlsZXMuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgICAgIGlmIChpdGVtLmtpbmQgPT0gXFxcXFxcXCJkcml2ZSNmb2xkZXJcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgIHZhciB1cmxsID0gJCgpLmxhenlSdWxlKChwYXRocywgaXRlbSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBwYXRocy5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXFxcXFwicGF0aHNwaWtwYWtcXFxcXFxcIiwgcGF0aHMpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfSwgcGF0aHMsIGl0ZW0pXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCQubW92aWUuaW5jbHVkZXMoZ2V0SHptKGl0ZW0ubmFtZSkpKSB7XFxcXG5cXFxcbiAgICAgICAgICAgICAgICB2YXIgZXh0ID0gXFxcXFxcXCIjaXNWaWRlbz10cnVlI1xcXFxcXFwiXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCQuYXVkaW8uaW5jbHVkZXMoZ2V0SHptKGl0ZW0ubmFtZSkpKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGV4dCA9IFxcXFxcXFwiI2lzTXVzaWM9dHJ1ZSNcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmICgkLmltZy5pbmNsdWRlcyhnZXRIem0oaXRlbS5uYW1lKSkpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgZXh0ID0gXFxcXFxcXCIjLmpwZ1xcXFxcXFwiXFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHZhciBleHQgPSBcXFxcXFxcIlxcXFxcXFwiXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB2YXIgdXJsID0gJCgpLmxhenlSdWxlKChpdGVtLCBleHQpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdSA9IGBodHRwczovL2FwaS1kcml2ZS5teXBpa3Bhay5jb20vZHJpdmUvdjEvZmlsZXMvJHtpdGVtLmlkfT9fbWFnaWM9MjAyMSZ0aHVtYm5haWxfc2l6ZT1TSVpFX0xBUkdFYFxcXFxuICAgICAgICAgICAgICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHJlcXVlc3QodSwge1xcXFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIkF1dGhvcml6YXRpb25cXFxcXFxcIjogXFxcXFxcXCJCZWFyZXIgXFxcXFxcXCIgKyBnZXRJdGVtKFxcXFxcXFwiYWNjZXNzX3Rva2VuXFxcXFxcXCIpXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9KSk7XFxcXG4gICAgICAgICAgICAgICAgLy9sb2cocmVzKTtcXFxcbiAgICAgICAgICAgICAgICBpZiAocmVzLmxpbmtzICYmIHJlcy5saW5rc1tcXFxcXFxcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVxcXFxcXFwiXSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gcmVzLmxpbmtzW1xcXFxcXFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXFxcXFxcXCJdLnVybDtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVybCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybCArIGV4dFxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGZvciAoaXRlbSBvZiByZXMubWVkaWFzKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdG1wID0gaXRlbS5saW5rXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wLnVybCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0bXAudXJsICsgZXh0XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSwgaXRlbSwgZXh0KVxcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5uYW1lLFxcXFxuICAgICAgICAgICAgICAgIGltZzogaXRlbS5pY29uX2xpbmssXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiYXZhdGFyXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiBpdGVtLmtpbmQgPT0gXFxcXFxcXCJkcml2ZSNmb2xkZXJcXFxcXFxcIiA/IHVybGwgOiB1cmxcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pXFxcXG4gICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICB0b2FzdChcXFxcXFxcIuajgOa1i+WIsOmUmeivr1xcXFxcXFwiKVxcXFxuICAgICAgICBsb2coZS5tZXNzYWdlKVxcXFxuICAgIH1cXFxcbn1cXFxcblxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcImNvZGUyXFxcIixcXFwicGF0aFxcXCI6XFxcImNvZGUyXFxcIixcXFwicnVsZVxcXCI6XFxcIiQuZXhwb3J0cy5sb2dpbiA9IGZ1bmN0aW9uKHVzZXJuYW1lLCBwYXNzd29yZCkge1xcXFxuICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHBvc3QoXFxcXFxcXCJodHRwczovL3VzZXIubXlwaWtwYWsuY29tL3YxL2F1dGgvc2lnbmluXFxcXFxcXCIsIHtcXFxcbiAgICAgICAgYm9keToge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJjYXB0Y2hhX3Rva2VuXFxcXFxcXCI6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBcXFxcXFxcImNsaWVudF9pZFxcXFxcXFwiOiBcXFxcXFxcIllOeFQ5dzdHTWRXdkVPS2FcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiY2xpZW50X3NlY3JldFxcXFxcXFwiOiBcXFxcXFxcImRidzJPdG1WRWV1VXZJcHRiMUNveWdcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIFxcXFxcXFwidXNlcm5hbWVcXFxcXFxcIjogdXNlcm5hbWUsXFxcXG4gICAgICAgICAgICBcXFxcXFxcInBhc3N3b3JkXFxcXFxcXCI6IHBhc3N3b3JkXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KSlcXFxcbiAgICBpZiAocmVzLmFjY2Vzc190b2tlbikge1xcXFxuICAgICAgICBzZXRJdGVtKFxcXFxcXFwiYWNjZXNzX3Rva2VuXFxcXFxcXCIsIHJlcy5hY2Nlc3NfdG9rZW4pXFxcXG4gICAgICAgIHNldEl0ZW0oXFxcXFxcXCJyZWZyZXNoX3Rva2VuXFxcXFxcXCIsIHJlcy5yZWZyZXNoX3Rva2VuKVxcXFxuICAgICAgICByZXR1cm4gdHJ1ZVxcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIGxvZyhyZXMpXFxcXG4gICAgICAgIHJldHVybiBmYWxzZVxcXFxuICAgIH1cXFxcbn1cXFxcbiQuZXhwb3J0cy5nZXRIem0gPSBmdW5jdGlvbihmaWxlTmFtZSkge1xcXFxuICAgIHJldHVybiBmaWxlTmFtZS5zdWJzdHIoZmlsZU5hbWUubGFzdEluZGV4T2YoXFxcXFxcXCIuXFxcXFxcXCIpICsgMSlcXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwidGV4dF8yXFxcIixcXFwibmFtZVxcXCI6XFxcInNldHRpbmdzMlxcXCIsXFxcInBhdGhcXFwiOlxcXCJzZXR0aW5nczJcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogXFxcXFxcXCLotKblj7co6YKu566xKVxcXFxcXFwiLFxcXFxuICAgIHVybDogJChnZXRJdGVtKFxcXFxcXFwidXNlcm5hbWVcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIikpLmlucHV0KCgpID0+IHtcXFxcbiAgICAgICAgc2V0SXRlbShcXFxcXFxcInVzZXJuYW1lXFxcXFxcXCIsIGlucHV0KVxcXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgfSlcXFxcbn0pXFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBcXFxcXFxcIuWvhueggVxcXFxcXFwiLFxcXFxuICAgIHVybDogJChnZXRJdGVtKFxcXFxcXFwicGFzc3dkXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpKS5pbnB1dCgoKSA9PiB7XFxcXG4gICAgICAgIHNldEl0ZW0oXFxcXFxcXCJwYXNzd2RcXFxcXFxcIiwgaW5wdXQpXFxcXG4gICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICB9KVxcXFxufSlcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6IFxcXFxcXFwi55m76ZmGXFxcXFxcXCIsXFxcXG4gICAgdXJsOiAkKCkubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICBjb25zdCB7XFxcXG4gICAgICAgICAgICBsb2dpblxcXFxuICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2NvZGUyXFxcXFxcXCIpXFxcXG4gICAgICAgIGxvZyhnZXRJdGVtKFxcXFxcXFwidXNlcm5hbWVcXFxcXFxcIikpXFxcXG4gICAgICAgIGlmIChsb2dpbihnZXRJdGVtKFxcXFxcXFwidXNlcm5hbWVcXFxcXFxcIiksIGdldEl0ZW0oXFxcXFxcXCJwYXNzd2RcXFxcXFxcIikpKSB7XFxcXG4gICAgICAgICAgICBiYWNrKClcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v55m76ZmG5oiQ5YqfXFxcXFxcXCJcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v55m76ZmG5aSx6LSlXFxcXFxcXCJcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIlxcXFxufSlcXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuWkqee/vOS6keebmFxcXCIsXFxcInBhdGhcXFwiOlxcXCLlpKnnv7zkupHnm5hcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxudHJ5IHtcXFxcbiAgICBpZiAoZmlsZUV4aXN0KFxcXFxcXFwiMTg5LnR4dFxcXFxcXFwiKSkge1xcXFxuICAgICAgICBjb25zdCB7XFxcXG4gICAgICAgICAgICBnZXRGaWxlcyxcXFxcbiAgICAgICAgICAgIGdldEljb25cXFxcbiAgICAgICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9jb2RlM1xcXFxcXFwiKVxcXFxuICAgICAgICB2YXIgcGF0aHMgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFxcXFxcInBhdGhzdHlcXFxcXFxcIiwgW3tcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiaWRcXFxcXFxcIjogLTExLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJuYW1lXFxcXFxcXCI6IFxcXFxcXFwi5a62XFxcXFxcXCJcXFxcbiAgICAgICAgfV0pXFxcXG4gICAgICAgIHBhdGhzLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubmFtZSxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJzY3JvbGxfYnV0dG9uXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKHBhdGhzLCBpKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXFxcXFwicGF0aHN0eVxcXFxcXFwiLCBwYXRocy5zbGljZSgwLCBpICsgMSkpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfSwgcGF0aHMsIGkpXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9KVxcXFxuICAgICAgICBsZXQgbGlzdCA9IGdldEZpbGVzKHBhdGhzW3BhdGhzLmxlbmd0aCAtIDFdLmlkKVxcXFxuICAgICAgICBsaXN0LmZpbGVMaXN0QU8uZm9sZGVyTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5uYW1lLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImF2YXRhclxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGltZzogXFxcXFxcXCJodHRwczovL2dpdGNvZGUubmV0L3FxXzMyMzk0MzUxL2RyLy0vcmF3L21hc3Rlci9pbWcv5paH5Lu257G75Z6LMi/mlofku7blpLkuc3ZnXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKHBhdGhzLCBpZCwgbmFtZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBwYXRocy5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWVcXFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcXFxcXCJwYXRoc3R5XFxcXFxcXCIsIHBhdGhzKVxcXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0sIHBhdGhzLCBpdGVtLmlkLCBpdGVtLm5hbWUpXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9KVxcXFxuICAgICAgICBsaXN0LmZpbGVMaXN0QU8uZmlsZUxpc3QuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgICAgIHZhciBpbWcgPSBnZXRJY29uKGl0ZW0ubmFtZSlcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubmFtZSxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJhdmF0YXJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBpbWc6IGltZyxcXFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoaWQsIG5hbWUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SHptXFxcXG4gICAgICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvY29kZVxcXFxcXFwiKVxcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgY29va2llID0gcmVhZEZpbGUoXFxcXFxcXCIxODkudHh0XFxcXFxcXCIpXFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gXFxcXFxcXCJodHRwczovL2Nsb3VkLjE4OS5jbi9hcGkvcG9ydGFsL2dldEZpbGVJbmZvLmFjdGlvblxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHJlcXVlc3QoYnVpbGRVcmwodSwge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJmaWxlSWRcXFxcXFxcIjogaWRcXFxcbiAgICAgICAgICAgICAgICAgICAgfSksIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBjb29raWUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJBY2NlcHRcXFxcXFxcIjogXFxcXFxcXCJhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9VVRGLThcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlVzZXItQWdlbnRcXFxcXFxcIjogUENfVUFcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSkpXFxcXG4gICAgICAgICAgICAgICAgICAgIGlmICgkLm1vdmllLmluY2x1ZGVzKGdldEh6bShuYW1lKSkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsczogW1xcXFxcXFwiaHR0cHM6XFxcXFxcXCIgKyByZXMuZG93bmxvYWRVcmwgKyBcXFxcXFxcIiNpc1ZpZGVvPXRydWUjXFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogY29va2llLnJlcGxhY2UoLzsvZywgXFxcXFxcXCLvvJvvvJtcXFxcXFxcIiksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiVXNlci1BZ2VudFxcXFxcXFwiOiBQQ19VQS5yZXBsYWNlKC87L2csIFxcXFxcXFwi77yb77ybXFxcXFxcXCIpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkLmF1ZGlvLmluY2x1ZGVzKGdldEh6bShuYW1lKSkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsczogW1xcXFxcXFwiaHR0cHM6XFxcXFxcXCIgKyByZXMuZG93bmxvYWRVcmwgKyBcXFxcXFxcIiNpc1ZpZGVvPXRydWUjXFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogY29va2llLnJlcGxhY2UoLzsvZywgXFxcXFxcXCLvvJvvvJtcXFxcXFxcIiksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiVXNlci1BZ2VudFxcXFxcXFwiOiBQQ19VQS5yZXBsYWNlKC87L2csIFxcXFxcXFwi77yb77ybXFxcXFxcXCIpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkLmltZy5pbmNsdWRlcyhnZXRIem0obmFtZSkpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJodHRwczpcXFxcXFxcIiArIHJlcy5kb3dubG9hZFVybCArIGAjLmpwZ0BVc2VyLUFnZW50PSR7UENfVUF9QENvb2tpZT0ke2Nvb2tpZX1gXFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJkb3dubG9hZDovL2h0dHBzOlxcXFxcXFwiICsgcmVzLmRvd25sb2FkVXJsICsgYEBVc2VyLUFnZW50PSR7UENfVUF9QENvb2tpZT0ke2Nvb2tpZX1gXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9LCBpdGVtLmlkLCBpdGVtLm5hbWUpXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9KVxcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIGQudW5zaGlmdCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLnmbvpmYZcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvbG9naW4zXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCJcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9XFxcXG59IGNhdGNoIChlKSB7XFxcXG4gICAgZC51bnNoaWZ0KHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwi55m76ZmGXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvbG9naW4zXFxcXFxcXCIsXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIlxcXFxuICAgIH0pXFxcXG4gICAgbG9nKGUubWVzc2FnZSlcXFxcbiAgICB0b2FzdChcXFxcXFxcIueoi+W6j+WPr+iDveWHuumUmeS6hu+8jOivt+afpeeci+aXpeW/l1xcXFxcXFwiKVxcXFxufVxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcImNvZGUzXFxcIixcXFwicGF0aFxcXCI6XFxcImNvZGUzXFxcIixcXFwicnVsZVxcXCI6XFxcIiQuZXhwb3J0cy5nZXRGaWxlcyA9IGZ1bmN0aW9uKGlkKSB7XFxcXG4gICAgbGV0IHUgPSBcXFxcXFxcImh0dHBzOi8vY2xvdWQuMTg5LmNuL2FwaS9vcGVuL2ZpbGUvbGlzdEZpbGVzLmFjdGlvblxcXFxcXFwiXFxcXG4gICAgbGV0IHJlcyA9IHJlcXVlc3QoYnVpbGRVcmwodSwge1xcXFxuICAgICAgICBcXFxcXFxcInBhZ2VTaXplXFxcXFxcXCI6IDEwMDAsXFxcXG4gICAgICAgIFxcXFxcXFwicGFnZU51bVxcXFxcXFwiOiAxLFxcXFxuICAgICAgICBcXFxcXFxcIm1lZGlhVHlwZVxcXFxcXFwiOiAwLFxcXFxuICAgICAgICBcXFxcXFxcImZvbGRlcklkXFxcXFxcXCI6IGlkLFxcXFxuICAgICAgICBcXFxcXFxcImljb25PcHRpb25cXFxcXFxcIjogNSxcXFxcbiAgICAgICAgXFxcXFxcXCJvcmRlckJ5XFxcXFxcXCI6IFxcXFxcXFwibGFzdE9wVGltZVxcXFxcXFwiLFxcXFxuICAgICAgICBcXFxcXFxcImRlc2NlbmRpbmdcXFxcXFxcIjogXFxcXFxcXCJ0cnVlXFxcXFxcXCIsXFxcXG4gICAgfSksIHtcXFxcbiAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogcmVhZEZpbGUoXFxcXFxcXCIxODkudHh0XFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJBY2NlcHRcXFxcXFxcIjogXFxcXFxcXCJhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9VVRGLThcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiVXNlci1BZ2VudFxcXFxcXFwiOiBQQ19VQVxcXFxuICAgICAgICB9XFxcXG4gICAgfSlcXFxcbiAgICB2YXIganNvbiA9IHJlcy5yZXBsYWNlKC9cXFxcXFxcXFxcXFxcXFwiaWRcXFxcXFxcXFxcXFxcXFwiOihcXFxcXFxcXGQrKS9nLCAnXFxcXFxcXCJpZFxcXFxcXFwiOlxcXFxcXFwiJDFcXFxcXFxcIicpIC8v6Kej5YazanPnmoTnsr7luqbpl67pophcXFxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uKVxcXFxufVxcXFxuJC5leHBvcnRzLmdldEljb24gPSBmdW5jdGlvbihmaWxlTmFtZSkge1xcXFxuICAgIGxldCB7XFxcXG4gICAgICAgIGdldEh6bVxcXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvY29kZVxcXFxcXFwiKVxcXFxuICAgIGxldCByb290ID0gXFxcXFxcXCJodHRwczovL2dpdGNvZGUubmV0L3FxXzMyMzk0MzUxL2RyLy0vcmF3L21hc3Rlci9pbWcv5paH5Lu257G75Z6LMi9cXFxcXFxcIjtcXFxcbiAgICBsZXQgZmlsZXMgPSAnYWl8YXBrfGF2aXxjc3N8ZG1nfGV4ZXxmbHZ8Z2lmfGhpa2VyfGh0bWx8aXNvfGpwZ3xqc3xqc29ufGxvZ3xtb3Z8bXAzfG1wNHxvdGZ8cGhwfHBuZ3xwcHR8cHNkfHRhYmxlfHR4dHx3YXZ8eGxzfHppcHxjc3N8ZG9jfGVwdWJ8ZXhjfGh0bXx4bHN4Jy5zcGxpdCgnfCcpO1xcXFxuICAgIGxldCBoem0gPSBnZXRIem0oZmlsZU5hbWUpXFxcXG4gICAgaWYgKGZpbGVzLmluY2x1ZGVzKGh6bSkpIHtcXFxcbiAgICAgICAgaW1nID0gcm9vdCArIGh6bSArICcuc3ZnJztcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICBpbWcgPSByb290ICsgXFxcXFxcXCLmlofku7Yuc3ZnXFxcXFxcXCJcXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIGltZ1xcXFxufVxcXFxuJC5leHBvcnRzLmdldEh6bSA9IGZ1bmN0aW9uKGZpbGVOYW1lKSB7XFxcXG4gICAgcmV0dXJuIGZpbGVOYW1lLnN1YnN0cihmaWxlTmFtZS5sYXN0SW5kZXhPZihcXFxcXFxcIi5cXFxcXFxcIikgKyAxKVxcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcImxvZ2luM1xcXCIsXFxcInBhdGhcXFwiOlxcXCJsb2dpbjNcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAoKSA9PiB7XFxcXG4gICAgbGV0IGMgPSBnZXRWYXIoXFxcXFxcXCJodHRwczovL2Nsb3VkLjE4OS5jbi93ZWIvbWFpblxcXFxcXFwiKTtcXFxcbiAgICBsb2coYyk7XFxcXG4gICAgc2F2ZUZpbGUoXFxcXFxcXCIxODkudHh0XFxcXFxcXCIsIGMpO1xcXFxuICAgIGNsZWFyVmFyKFxcXFxcXFwiaHR0cHM6Ly9jbG91ZC4xODkuY24vd2ViL21haW5cXFxcXFxcIik7XFxcXG59KVxcXFxuZC5wdXNoKHtcXFxcbiAgICB1cmw6IFxcXFxcXFwiaHR0cHM6Ly9jbG91ZC4xODkuY24vd2ViL2xvZ2luLmh0bWxcXFxcXFxcIixcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXFxcXFwiLFxcXFxuICAgIGRlc2M6IFxcXFxcXFwiMTAwJSYmZmxvYXRcXFxcXFxcIixcXFxcbiAgICBleHRyYToge1xcXFxuICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICB2YXIgdXJsID0gbG9jYXRpb24uaHJlZlxcXFxuICAgICAgICAgICAgaWYgKHVybC5pbmNsdWRlcyhcXFxcXFxcImh0dHBzOi8vY2xvdWQuMTg5LmNuL3dlYi9tYWluXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGNvb2tpZSA9IGZiYS5nZXRDb29raWUodXJsKTtcXFxcbiAgICAgICAgICAgICAgICBpZiAoY29va2llICE9IG51bGwgJiYgY29va2llLmxlbmd0aCA+IDApIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZmJhLnB1dFZhcihcXFxcXFxcImh0dHBzOi8vY2xvdWQuMTg5LmNuL3dlYi9tYWluXFxcXFxcXCIsIGNvb2tpZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KFxcXFxcXFwi5bey6I635Y+W5YiwY29va2llXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICBmYmEuYmFjaygpOyAgICAgICAgICAgICAgICAgIFxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSksXFxcXG4gICAgICAgIHVhOiBQQ19VQSxcXFxcbiAgICAgICAgY2FuQmFjazogdHJ1ZVxcXFxuICAgIH1cXFxcbn0pXFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5aS45YWL572R55uYXFxcIixcXFwicGF0aFxcXCI6XFxcIuWkuOWFi+e9keebmFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG50cnkge1xcXFxuICAgIGlmIChmaWxlRXhpc3QoXFxcXFxcXCJxdWFyay50eHRcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgY29uc3Qge1xcXFxuICAgICAgICAgICAgZ2V0SWNvbixcXFxcbiAgICAgICAgICAgIGdldEh6bSxcXFxcbiAgICAgICAgICAgIGdldExpbmtcXFxcbiAgICAgICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9jb2RlNFxcXFxcXFwiKVxcXFxuICAgICAgICB2YXIgY29va2llID0gcmVhZEZpbGUoXFxcXFxcXCJxdWFyay50eHRcXFxcXFxcIilcXFxcbiAgICAgICAgbGV0IHVzZXJpbmZvID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaHR0cHM6Ly9wYW4ucXVhcmsuY24vYWNjb3VudC9pbmZvXFxcXFxcXCIsIHtcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBjb29raWVcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSkpXFxcXG4gICAgICAgIGxldCBwYXRocyA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXFxcXFwicGF0aHNcXFxcXFxcIiwgW3tcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiaWRcXFxcXFxcIjogXFxcXFxcXCIwXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBcXFxcXFxcIm5hbWVcXFxcXFxcIjogXFxcXFxcXCLmoLnnm67lvZVcXFxcXFxcIlxcXFxuICAgICAgICB9XSlcXFxcbiAgICAgICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogdXNlcmluZm8uZGF0YS5uaWNrbmFtZSxcXFxcbiAgICAgICAgICAgICAgICBpbWc6IHVzZXJpbmZvLmRhdGEuYXZhdGFyVXJpLFxcXFxuICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2Uvc2V0dGluZ3M0XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiYXZhdGFyXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICBwYXRocy5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubmFtZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwic2Nyb2xsX2J1dHRvblxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgocGF0aHMsIGkpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXFxcXFwicGF0aHNcXFxcXFxcIiwgcGF0aHMuc2xpY2UoMCwgaSArIDEpKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgIH0sIHBhdGhzLCBpKVxcXFxuICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHJlcXVlc3QoYnVpbGRVcmwoXFxcXFxcXCJodHRwczovL2RyaXZlLnF1YXJrLmNuLzEvY2xvdWRkcml2ZS9maWxlL3NvcnRcXFxcXFxcIiwge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJwZGlyX2ZpZFxcXFxcXFwiOiBwYXRoc1twYXRocy5sZW5ndGggLSAxXS5pZCxcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiZnJcXFxcXFxcIjogXFxcXFxcXCJwY1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJwclxcXFxcXFwiOiBcXFxcXFxcInVjcHJvXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBcXFxcXFxcIl9zaXplXFxcXFxcXCI6IDEwLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJfZmV0Y2hfdG90YWxcXFxcXFxcIjogXFxcXFxcXCIxXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBcXFxcXFxcIl9zb3J0XFxcXFxcXCI6IFxcXFxcXFwiZmlsZV90eXBlOmFzYyxmaWxlX25hbWU6YXNjXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBcXFxcXFxcIl9wYWdlXFxcXFxcXCI6IGdldFBhcmFtKFxcXFxcXFwicGFnZVxcXFxcXFwiKVxcXFxuICAgICAgICB9KSwge1xcXFxuICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IGNvb2tpZSxcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIkFjY2VwdFxcXFxcXFwiOiBcXFxcXFxcImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vcGFuLnF1YXJrLmNuL1xcXFxcXFwiXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pKVxcXFxuICAgICAgICByZXMuZGF0YS5saXN0LmZvckVhY2goaXRlbSA9PiB7XFxcXG4gICAgICAgICAgICBpZiAoIWl0ZW0uZmlsZSkge1xcXFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSAkKCkubGF6eVJ1bGUoKGl0ZW0sIHBhdGhzKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHBhdGhzLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uZmlkLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5maWxlX25hbWVcXFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcXFxcXCJwYXRoc1xcXFxcXFwiLCBwYXRocylcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9LCBpdGVtLCBwYXRocylcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJC5tb3ZpZS5pbmNsdWRlcyhnZXRIem0oaXRlbS5maWxlX25hbWUpKSkge1xcXFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBnZXRMaW5rKGl0ZW0sIGNvb2tpZSwgXFxcXFxcXCJtb3ZpZVxcXFxcXFwiKVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmICgkLmF1ZGlvLmluY2x1ZGVzKGdldEh6bShpdGVtLmZpbGVfbmFtZSkpKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IGdldExpbmsoaXRlbSwgY29va2llLCBcXFxcXFxcImF1ZGlvXFxcXFxcXCIpXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCQuaW1nLmluY2x1ZGVzKGdldEh6bShpdGVtLmZpbGVfbmFtZSkpKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IGdldExpbmsoaXRlbSwgY29va2llLCBcXFxcXFxcImltZ1xcXFxcXFwiKVxcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gZ2V0TGluayhpdGVtLCBjb29raWUpXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLmZpbGVfbmFtZSxcXFxcbiAgICAgICAgICAgICAgICBpbWc6IGdldEljb24oaXRlbSksXFxcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiYXZhdGFyXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pXFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLnmbvpmYZcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3NldHRpbmdzNFxcXFxcXFwiXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxufSBjYXRjaCAoZSkge1xcXFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxcXG59XFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiY29kZTRcXFwiLFxcXCJwYXRoXFxcIjpcXFwiY29kZTRcXFwiLFxcXCJydWxlXFxcIjpcXFwiJC5leHBvcnRzLmdldEljb24gPSBmdW5jdGlvbihjb250ZW50KSB7XFxcXG4gICAgbGV0IHtcXFxcbiAgICAgICAgZ2V0SHptXFxcXG4gICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9jb2RlXFxcXFxcXCIpXFxcXG4gICAgbGV0IHJvb3QgPSBcXFxcXFxcImh0dHBzOi8vZ2l0Y29kZS5uZXQvcXFfMzIzOTQzNTEvZHIvLS9yYXcvbWFzdGVyL2ltZy/mlofku7bnsbvlnosyL1xcXFxcXFwiO1xcXFxuICAgIGlmICghY29udGVudC5maWxlKSB7XFxcXG4gICAgICAgIGltZyA9IHJvb3QgKyBcXFxcXFxcIuaWh+S7tuWkuS5zdmdcXFxcXFxcIlxcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIGxldCBmaWxlcyA9ICdhaXxhcGt8YXZpfGNzc3xkbWd8ZXhlfGZsdnxnaWZ8aGlrZXJ8aHRtbHxpc298anBnfGpzfGpzb258bG9nfG1vdnxtcDN8bXA0fG90ZnxwaHB8cG5nfHBwdHxwc2R8dGFibGV8dHh0fHdhdnx4bHN8emlwfGNzc3xkb2N8ZXB1YnxleGN8aHRtfHhsc3gnLnNwbGl0KCd8Jyk7XFxcXG4gICAgICAgIGxldCBmaWxlTmFtZSA9IGNvbnRlbnQuZmlsZV9uYW1lXFxcXG4gICAgICAgIGxldCBoem0gPSBnZXRIem0oZmlsZU5hbWUpXFxcXG4gICAgICAgIGlmIChmaWxlcy5pbmNsdWRlcyhoem0pKSB7XFxcXG4gICAgICAgICAgICBpbWcgPSByb290ICsgaHptICsgJy5zdmcnO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgaW1nID0gcm9vdCArIFxcXFxcXFwi5paH5Lu2LnN2Z1xcXFxcXFwiXFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIGltZ1xcXFxufVxcXFxuJC5leHBvcnRzLmdldEh6bSA9IGZ1bmN0aW9uKGZpbGVOYW1lKSB7XFxcXG4gICAgcmV0dXJuIGZpbGVOYW1lLnN1YnN0cihmaWxlTmFtZS5sYXN0SW5kZXhPZihcXFxcXFxcIi5cXFxcXFxcIikgKyAxKVxcXFxufVxcXFxuJC5leHBvcnRzLmdldExpbmsgPSBmdW5jdGlvbihpdGVtLCBjb29raWUsIGV4dCkge1xcXFxuICAgIHZhciB1cmwgPSAkKCkubGF6eVJ1bGUoKGZpZCwgY29va2llLCBleHQpID0+IHtcXFxcbiAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UocG9zdChcXFxcXFxcImh0dHBzOi8vZHJpdmUucXVhcmsuY24vMS9jbG91ZGRyaXZlL2ZpbGUvZG93bmxvYWQ/cHI9dWNwcm8mZnI9cGNcXFxcXFxcIiwge1xcXFxuICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IGNvb2tpZSxcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIkFjY2VwdFxcXFxcXFwiOiBcXFxcXFxcImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vcGFuLnF1YXJrLmNuL1xcXFxcXFwiXFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiZmlkc1xcXFxcXFwiOiBbZmlkXVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSkpXFxcXG4gICAgICAgIGlmIChleHQgPT0gXFxcXFxcXCJtb3ZpZVxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgICAgIHVybHM6IFtyZXMuZGF0YVswXS5kb3dubG9hZF91cmwgKyBcXFxcXFxcIiNpc1ZpZGVvPXRydWUjXFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogY29va2llLnJlcGxhY2UoLzsvZywgXFxcXFxcXCLvvJvvvJtcXFxcXFxcIiksXFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vcGFuLnF1YXJrLmNuL1xcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSBlbHNlIGlmIChleHQgPT0gXFxcXFxcXCJhdWRpb1xcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgICAgIHVybHM6IFtyZXMuZGF0YVswXS5kb3dubG9hZF91cmwgKyBcXFxcXFxcIiNpc011c2ljPXRydWUjXFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogY29va2llLnJlcGxhY2UoLzsvZywgXFxcXFxcXCLvvJvvvJtcXFxcXFxcIiksXFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vcGFuLnF1YXJrLmNuL1xcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSBlbHNlIGlmIChleHQgPT0gXFxcXFxcXCJpbWdcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgcmV0dXJuIHJlcy5kYXRhWzBdLmRvd25sb2FkX3VybCArIGBAUmVmZXJlcj1odHRwczovL3Bhbi5xdWFyay5jbi9AQ29va2llPSR7Y29va2llfWBcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImRvd25sb2FkOi8vXFxcXFxcXCIgKyByZXMuZGF0YVswXS5kb3dubG9hZF91cmwgKyBgQFJlZmVyZXI9aHR0cHM6Ly9wYW4ucXVhcmsuY24vQENvb2tpZT0ke2Nvb2tpZX1gXFxcXG4gICAgICAgIH1cXFxcbiAgICB9LCBpdGVtLmZpZCwgY29va2llLCBleHQpXFxcXG4gICAgcmV0dXJuIHVybFxcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcInNldHRpbmdzNFxcXCIsXFxcInBhdGhcXFwiOlxcXCJzZXR0aW5nczRcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAoKSA9PiB7XFxcXG4gICAgc2F2ZUZpbGUoXFxcXFxcXCJxdWFyay50eHRcXFxcXFxcIiwgZ2V0VmFyKFxcXFxcXFwiaHR0cHM6Ly9wYW4ucXVhcmsuY24vbGlzdCMvbGlzdC9hbGxcXFxcXFxcIikpXFxcXG4gICAgY2xlYXJWYXIoXFxcXFxcXCJodHRwczovL3Bhbi5xdWFyay5jbi9saXN0Iy9saXN0L2FsbFxcXFxcXFwiKTtcXFxcbn0pXFxcXG5kLnB1c2goe1xcXFxuICAgIHVybDogXFxcXFxcXCJodHRwczovL3Bhbi5xdWFyay5jbi9cXFxcXFxcIixcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXFxcXFwiLFxcXFxuICAgIGRlc2M6IFxcXFxcXFwiMTAwJSYmZmxvYXRcXFxcXFxcIixcXFxcbiAgICBleHRyYToge1xcXFxuICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICB2YXIgdXJsID0gbG9jYXRpb24uaHJlZlxcXFxuICAgICAgICAgICAgaWYgKHVybCA9PSBcXFxcXFxcImh0dHBzOi8vcGFuLnF1YXJrLmNuL2xpc3QjL2xpc3QvYWxsXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgY29va2llID0gZmJhLmdldENvb2tpZSh1cmwpO1xcXFxuICAgICAgICAgICAgICAgIGlmIChjb29raWUgIT0gbnVsbCAmJiBjb29raWUubGVuZ3RoID4gMCkge1xcXFxuICAgICAgICAgICAgICAgICAgICBmYmEucHV0VmFyKHVybCwgY29va2llKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoXFxcXFxcXCLlt7Lojrflj5bliLBjb29raWVcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgIGZiYS5iYWNrKCk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KSxcXFxcbiAgICAgICAgdWE6IFBDX1VBLFxcXFxuICAgICAgICBjYW5CYWNrOiB0cnVlXFxcXG4gICAgfVxcXFxufSlcXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLlhbPkuo5cXFwiLFxcXCJwYXRoXFxcIjpcXFwiYWJvdXRcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxuYWRkTGlzdGVuZXIoXFxcXFxcXCJvbkNsb3NlXFxcXFxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgIGNsZWFyTXlWYXIoXFxcXFxcXCJjXFxcXFxcXCIpO1xcXFxufSkpO1xcXFxuZC5wdXNoKCQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hYm91dDJcXFxcXFxcIikpO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICB1cmw6ICQoXFxcXFxcXCIjbm9Mb2FkaW5nI1xcXFxcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG4gICAgICAgIGxldCBjID0gcGFyc2VJbnQoZ2V0TXlWYXIoXFxcXFxcXCJjXFxcXFxcXCIsIFxcXFxcXFwiMVxcXFxcXFwiKSlcXFxcbiAgICAgICAgaWYgKGMgPj0gNSkge1xcXFxuICAgICAgICAgICAgY29uZmlybSh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5rip6aao5o+Q56S6XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgY29udGVudDogXFxcXFxcXCLnoa7lrpropoHlvIDlkK/lvIDlj5HogIXmqKHlvI/lkJfvvJ/ms6jmhI/lvIDlkK/or6XmqKHlvI/liJnooajnpLrlkI7nu63mgqjnmoTmiYDmnInmk43kvZzlnYfkuLrkuLvop4Log73liqjmk43kvZzvvIzmiYDkuqfnlJ/nmoTkuIDliIfpl67popjkuI7otKPku7vlnYfnlLHmgqjoh6rlt7Hmib/mi4VcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBjb25maXJtOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFxcXFxcImRldlxcXFxcXFwiLCBcXFxcXFxcIjFcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5bey5byA5ZCv5byA5Y+R6ICF5qih5byPXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXFxcXFwiY1xcXFxcXFwiLCBjICsgMSArIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSksXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiLFxcXFxuICAgIGRlc2M6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICBleHRyYToge1xcXFxuICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXFxcbiAgICB9XFxcXG59KTtcXFxcblxcXFxuXFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5YWz5LqOMlxcXCIsXFxcInBhdGhcXFwiOlxcXCJhYm91dDJcXFwiLFxcXCJydWxlXFxcIjpcXFwiJC5leHBvcnRzID0ge1xcXFxuICAgIHRpdGxlOiBcXFxcXFxcIuacrOinhOWImeWfuuS6juW8gOa6kOmhueebru+8mjxhIGhyZWY9XFxcXFxcXFxcXFxcXFxcImh0dHBzOi8vZ2l0aHViLmNvbS9hbGlzdC1vcmcvYWxpc3RcXFxcXFxcXFxcXFxcXFwiPkFsaXN0PC9hPu+8jOaOoue0ouS4jeS9v+eUqOacjeWKoeWZqOWunueOsEFsaXN06YC76L6R77yM5pys6KeE5YiZ5omA5pyJ5Luj56CB5YWo6YOo5byA5rqQ77yM5LuF6ZmQ5Liq5Lq65L2/55So77yM5LuF5L6b56CU56m244CB5a2m5Lmg5ZKM5rWL6K+V77yM56aB5q2i6L2s6L295YiG5Lqr5Yiw56ys5LiJ5pa55bmz5Y+wXFxcXFxcXCIsXFxcXG4gICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIixcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJyaWNoX3RleHRcXFxcXFxcIixcXFxcbiAgICBkZXNjOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIHBpY191cmw6IFxcXFxcXFwiXFxcXFxcXCJcXFxcbn1cXFwifV1cIixcInByb3h5XCI6XCJcIn0iLCJ0aXRsZSI6IjEyM3Bhbi3impnvuI/orr7nva4ifQ==
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement