xiaomianao666

小程序:Quark.简

Apr 23rd, 2024
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@Quark.简@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoiUXVhcmsu566AIiwiYXV0aG9yIjoiQExveURnSWsiLCJ1cmwiOiJoaWtlcjovL2VtcHR5IyMiLCJ2ZXJzaW9uIjoxNSwiY29sX3R5cGUiOiJtb3ZpZV8zIiwiY2xhc3NfbmFtZSI6IiIsInR5cGUiOiJ2aWRlbyIsImNsYXNzX3VybCI6IiIsImFyZWFfbmFtZSI6IiIsImFyZWFfdXJsIjoiIiwic29ydF9uYW1lIjoiIiwieWVhcl9uYW1lIjoiIiwic29ydF91cmwiOiIiLCJ5ZWFyX3VybCI6IiIsImZpbmRfcnVsZSI6ImpzOlxubGV0IGQgPSBbXTtcblxubGV0IGNvb2tpZSA9IGdldEl0ZW0oXCJxdWFya0Nvb2tpZVwiLCBcIlwiKTtcblxuaWYgKCEkLnJlcXVpcmUoXCJ0b29sXCIpLmlzTG9naW5Db29raWUoY29va2llKSkge1xuICAgIGNsZWFySXRlbShcInF1YXJrQ29va2llXCIpO1xuICAgIGQucHVzaCh7XG4gICAgICAgIHRpdGxlOiAnPGZvbnQgY29sb3I9XCIjMTNCNjFCXCI+4paQIDwvZm9udD48Yj7muKnppqjmj5DnpLo8Yj4nLFxuICAgICAgICBjb2xfdHlwZTogXCJyaWNoX3RleHRcIixcbiAgICB9KTtcbiAgICBkLnB1c2goe1xuICAgICAgICB1cmw6ICQucmVxdWlyZShcImFjY291bnRcIiwgdHJ1ZSksXG4gICAgICAgIGNvbF90eXBlOiBcInRleHRfMVwiLFxuICAgICAgICB0aXRsZTogXCLmnKrmo4DmtYvliLDnmbvlvZXkv6Hmga/vvIzngrnmiJHot7PovaznmbvlvZXotKblj7fpobXpnaLvvIzojrflj5ZRdWFyayBDb29raWXlkI7mlrnlj6/kvb/nlKhcIixcbiAgICAgICAgZXh0cmE6IHtcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogXCLnmbvlvZXlpLjlhYvkupHnm5hcIlxuICAgICAgICB9XG4gICAgfSk7XG59XG5kLnB1c2goe1xuICAgIHRpdGxlOiBcIuS6keeugFwiLFxuICAgIHVybDogXCJoaWtlcjovL2hvbWVA5LqR55uY5ZCbLueugFwiLFxuICAgIHBpY191cmw6IFwiaGlrZXI6Ly9pbWFnZXMvaWNvbl9sZWZ0NlwiLFxuICAgIGNvbF90eXBlOiBcImljb25fcm91bmRfc21hbGxfNFwiXG59KTtcbmQucHVzaCh7XG4gICAgdGl0bGU6IFwi5pS26JePXCIsXG4gICAgdXJsOiBcImhpa2VyOi8vY29sbGVjdGlvbj9ydWxlPVwiK01ZX1JVTEUudGl0bGUsXG4gICAgcGljX3VybDogXCJoaWtlcjovL2ltYWdlcy9pY29uX2dvb2Q2XCIsXG4gICAgY29sX3R5cGU6IFwiaWNvbl9yb3VuZF9zbWFsbF80XCJcbn0pO1xuZC5wdXNoKHtcbiAgICB0aXRsZTogXCLljoblj7JcIixcbiAgICB1cmw6IFwiaGlrZXI6Ly9oaXN0b3J5P3J1bGU9XCIrTVlfUlVMRS50aXRsZSxcbiAgICBwaWNfdXJsOiBcImhpa2VyOi8vaW1hZ2VzL2ljb25fdGltZTZcIixcbiAgICBjb2xfdHlwZTogXCJpY29uX3JvdW5kX3NtYWxsXzRcIlxufSk7XG5kLnB1c2goe1xuICAgIHRpdGxlOiBcIui0puWPt1wiLFxuICAgIHVybDogJC5yZXF1aXJlKFwiYWNjb3VudFwiLCB0cnVlKSxcbiAgICBwaWNfdXJsOiBcImhpa2VyOi8vaW1hZ2VzL2ljb25fc2V0dGluZzZcIixcbiAgICBjb2xfdHlwZTogXCJpY29uX3JvdW5kX3NtYWxsXzRcIlxufSk7XG5kLnB1c2goe1xuICAgIHRpdGxlOiAn5omT5byAJyxcbiAgICBkZXNjOiAn6K+36L6T5YWl6ZO+5o6lL+aQnOe0ouWFs+mUruivjScsXG4gICAgY29sX3R5cGU6ICdpbnB1dCcsXG4gICAgdXJsOiAkLnRvU3RyaW5nKCgpID0+IHtcbiAgICAgICAgaWYoIWlucHV0KSByZXR1cm4gXCJ0b2FzdDovL+ivt+i+k+WFpeWGheWuuVwiO1xuICAgICAgICBpZiAoIWlucHV0LnN0YXJ0c1dpdGgoXCJodHRwczovL3Bhbi5xdWFyay5jbi9zL1wiKSl7XG4gICAgICAgICAgICByZXR1cm4gXCJoaWtlcjovL3BhZ2Uvc291I25vSGlzdG9yeSM/cnVsZT3kupHnm5jlkJsu566AJnA9ZnlwYWdlJnNlYXJjaFRlcm1zPVwiK2VuY29kZVVSSUNvbXBvbmVudChpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiaGlrZXI6Ly9wYWdlL3F1YXJrTGlzdD9yZWFsdXJsPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGlucHV0KSArIFwiJnNoYXJlUHdkPVwiO1xuICAgIH0pLFxuICAgIGV4dHJhOntcbiAgICAgICAgaGlkZVNldHRpbmc6IHRydWUsXG4gICAgICAgIHBhZ2VUaXRsZTogXCLmkJzntKJcIlxuICAgIH1cbn0pO1xuc2V0UmVzdWx0KGQpOyIsInNlYXJjaF91cmwiOiIiLCJncm91cCI6IuKRoOe9keebmCIsInNlYXJjaEZpbmQiOiIiLCJkZXRhaWxfY29sX3R5cGUiOiJtb3ZpZV8xIiwiZGV0YWlsX2ZpbmRfcnVsZSI6IiIsInNkZXRhaWxfY29sX3R5cGUiOiJtb3ZpZV8xIiwic2RldGFpbF9maW5kX3J1bGUiOiIiLCJ1YSI6Im1vYmlsZSIsInByZVJ1bGUiOiIiLCJwYWdlcyI6Ilt7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5aS45YWL5YiX6KGoQVBJXCIsXCJwYXRoXCI6XCJRdWFya1NoYXJlQXBpXCIsXCJydWxlXCI6XCJqczpcXG4vL0BhdXRob3IgTG95RGdJa1xcbmxldCBodHRwUmVxdWVzdCA9ICQucmVxdWlyZShcXFwiaHR0cFJlcXVlc3RcXFwiKTtcXG5jb25zdCBiYXNlVXJsID0gXFxcImh0dHBzOi8vcGFuLnF1YXJrLmNuXFxcIjtcXG5cXG5mdW5jdGlvbiBRdWFya1NoYXJlQXBpKHNoYXJlSWQsIHNoYXJlUHdkKSB7XFxuICAgIHRoaXMuc2hhcmVJZCA9IHNoYXJlSWQ7XFxuICAgIHRoaXMuc2hhcmVQd2QgPSBzaGFyZVB3ZDtcXG4gICAgdGhpcy5yZWZyZXNoQ2FsbEJhY2sgPSAoKCkgPT4gdm9pZCAwKTtcXG4gICAgLy90aGlzLnNoYXJlVG9rZW4gPSBzaGFyZVRva2VuIHx8IHRoaXMuZ2V0U2hhcmVUb2tlbigpO1xcbn1cXG5PYmplY3QuYXNzaWduKFF1YXJrU2hhcmVBcGkucHJvdG90eXBlLCB7XFxuICAgIHNldFJlZnJlc2gocmVmcmVzaENhbGxCYWNrKSB7XFxuICAgICAgICB0aGlzLnJlZnJlc2hDYWxsQmFjayA9IHJlZnJlc2hDYWxsQmFjaztcXG4gICAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LFxcbiAgICBzZXRUb2tlbihzaGFyZVRva2VuKSB7XFxuICAgICAgICB0aGlzLnNoYXJlVG9rZW4gPSBzaGFyZVRva2VuO1xcbiAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgIH0sXFxuICAgIHJlcXVlc3RIdHRwKGFwaSkge1xcbiAgICAgICAgcmV0dXJuIG5ldyBodHRwUmVxdWVzdChiYXNlVXJsK2FwaSkuc3VjY2VzcygoYm9keSkgPT4ge1xcbiAgICAgICAgICAgIGlmIChib2R5LnN0YXR1cyAhPT0gMjAwKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihib2R5Lm1lc3NhZ2UpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gYm9keTtcXG4gICAgICAgIH0pO1xcbiAgICB9LFxcbiAgICBnZXRUb2tlbigpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnNoYXJlVG9rZW4gfHwgdGhpcy5nZXRTaGFyZVRva2VuKCk7XFxuICAgIH0sXFxuXFxuICAgIGdldFNoYXJlVG9rZW4oKSB7XFxuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5yZXF1ZXN0SHR0cChcXFwiLzEvY2xvdWRkcml2ZS9zaGFyZS9zaGFyZXBhZ2UvdG9rZW5cXFwiKS5ib2R5KHtcXG4gICAgICAgICAgICBcXFwicHdkX2lkXFxcIjogdGhpcy5zaGFyZUlkLFxcbiAgICAgICAgICAgIFxcXCJwYXNzY29kZVxcXCI6IHRoaXMuc2hhcmVQd2QsXFxuICAgICAgICB9KS5ib2R5VG9TdHJpbmcodHJ1ZSkuc2V0U3RhcnRSZXF1ZXN0RnVuYyhwb3N0KS5zdGFydCh0cnVlKTtcXG4gICAgICAgIHRoaXMuc2hhcmVUb2tlbiA9IHJlc3VsdC5kYXRhLnN0b2tlbjtcXG4gICAgICAgIHRoaXMucmVmcmVzaENhbGxCYWNrKHJlc3VsdC5kYXRhLnN0b2tlbiwgdGhpcyk7XFxuICAgICAgICByZXR1cm4gdGhpcy5zaGFyZVRva2VuO1xcbiAgICB9LFxcbiAgICBnZXRMaXN0RmlsZShmaWxlSWQsIHBhZ2UsIG9yZGVyQnkpIHtcXG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLnJlcXVlc3RIdHRwKFxcXCIvMS9jbG91ZGRyaXZlL3NoYXJlL3NoYXJlcGFnZS9kZXRhaWw/cHI9dWNwcm8mZnI9cGNcXFwiKS5idWlsZFVybCh7XFxuICAgICAgICAgICAgcHdkX2lkOiB0aGlzLnNoYXJlSWQgfHwgXFxcIlxcXCIsXFxuICAgICAgICAgICAgc3Rva2VuOiBlbmNvZGVVUklDb21wb25lbnQodGhpcy5nZXRUb2tlbigpIHx8IFxcXCJcXFwiKSxcXG4gICAgICAgICAgICBwZGlyX2ZpZDogZmlsZUlkIHx8IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGZvcmNlOiAwLFxcbiAgICAgICAgICAgIF9wYWdlOiBwYWdlLFxcbiAgICAgICAgICAgIF9zaXplOiA1MCxcXG4gICAgICAgICAgICBfZmV0Y2hfYmFubmVyOiAxLFxcbiAgICAgICAgICAgIF9mZXRjaF9zaGFyZTogMSxcXG4gICAgICAgICAgICBfZmV0Y2hfdG90YWw6IDEsXFxuICAgICAgICAgICAgX3NvcnQ6IFxcXCJmaWxlX3R5cGU6YXNjLFxcXCIgKyBvcmRlckJ5XFxuICAgICAgICB9KS5lcnJvcldpdGhSZXRyeSgoZXJyLCByZXMsIGh0dHApID0+IHtcXG4gICAgICAgICAgICBpZiAoSlNPTi5wYXJzZShyZXMuYm9keSkubWVzc2FnZS5pbmNsdWRlcygnc3Rva2VuJykpIHtcXG4gICAgICAgICAgICAgICAgaHR0cC5tZXJnZUhlYWRBbmRCb2R5KHtcXG4gICAgICAgICAgICAgICAgICAgIGJ1aWxkVXJsOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Rva2VuOiBlbmNvZGVVUklDb21wb25lbnQodGhpcy5nZXRTaGFyZVRva2VuKCl8fFxcXCJcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSkuc3RhcnQodHJ1ZSk7XFxuICAgICAgICByZXR1cm4gcmVzdWx0O1xcbiAgICB9XFxufSk7XFxuJC5leHBvcnRzID0gUXVhcmtTaGFyZUFwaTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcImh0dHBSZXF1ZXN0XCIsXCJwYXRoXCI6XCJodHRwUmVxdWVzdFwiLFwicnVsZVwiOlwiZnVuY3Rpb24gaHR0cFJlcXVlc3QodXJsLCBvcHRpb25zKSB7XFxuICAgIHRoaXMucmV0cnlDb3VudCA9IDA7XFxuICAgIHRoaXMudXJsID0gdXJsO1xcbiAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XFxuICAgICAgICB3aXRoSGVhZGVyczogdHJ1ZVxcbiAgICB9KTtcXG4gICAgdGhpcy5lcnJvckNhbGxiYWNrID0gKGVyciwgcmVzKSA9PiB7dGhyb3cgZXJyfTtcXG4gICAgdGhpcy5lcnJvckNhbGxiYWNrV2l0aFJldHJ5ID0gKGVyciwgcmVzLCB0cnlSZXN0YXJ0KSA9PiBmYWxzZTtcXG4gICAgdGhpcy5zdWNjZXNzQ2FsbGJhY2sgPSAoYm9keSwgc3RhdHVzQ29kZSwgaGVhZGVycykgPT4gYm9keTtcXG4gICAgdGhpcy5lcnJvclR5cGVDYWxsYmFjayA9IChlcnIsIHJlcykgPT4gZXJyO1xcbiAgICB0aGlzLnN0YXJ0UmVxdWVzdCA9IGZldGNoO1xcbiAgICB0aGlzLl9ib2R5VG9TdHJpbmcgPSBmYWxzZTtcXG4gICAgdGhpcy5idWlsZFBhcmFtID0gdm9pZCgwKTtcXG59XFxuXFxuT2JqZWN0LmFzc2lnbihodHRwUmVxdWVzdC5wcm90b3R5cGUsIHtcXG4gICAgYm9keVRvU3RyaW5nKGZsYWcpIHtcXG4gICAgICAgIHRoaXMuX2JvZHlUb1N0cmluZyA9ICEhZmxhZztcXG4gICAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LFxcbiAgICBib2R5KGJvZHkpIHtcXG4gICAgICAgIHRoaXMub3B0aW9ucy5ib2R5ID0gYm9keSB8fCB2b2lkIDA7XFxuICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgfSxcXG4gICAgYnVpbGRVcmwoYnVpbGRQYXJhbSkge1xcbiAgICAgICAgdGhpcy5idWlsZFBhcmFtID0gYnVpbGRQYXJhbSB8fCB7fTtcXG4gICAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LFxcbiAgICBzZXRTdGFydFJlcXVlc3RGdW5jKGZ1bmMpIHtcXG4gICAgICAgIHRoaXMuc3RhcnRSZXF1ZXN0ID0gZnVuYztcXG4gICAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LFxcbiAgICBoZWFkZXJzKGhlYWRlcnMpIHtcXG4gICAgICAgIHRoaXMub3B0aW9ucy5oZWFkZXJzID0gaGVhZGVycyB8fCB2b2lkIDA7XFxuICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgfSxcXG4gICAgc3VjY2VzcyhzdWNjZXNzQ2FsbGJhY2spIHtcXG4gICAgICAgIGlmICh0eXBlb2Ygc3VjY2Vzc0NhbGxiYWNrICE9PSBcXFwiZnVuY3Rpb25cXFwiKSByZXR1cm4gdGhpcztcXG4gICAgICAgIHRoaXMuc3VjY2Vzc0NhbGxiYWNrID0gc3VjY2Vzc0NhbGxiYWNrO1xcbiAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgIH0sXFxuICAgIGVycm9yKGVycm9yQ2FsbGJhY2spIHtcXG4gICAgICAgIGlmICh0eXBlb2YgZXJyb3JDYWxsYmFjayAhPT0gXFxcImZ1bmN0aW9uXFxcIikgcmV0dXJuIHRoaXM7XFxuICAgICAgICB0aGlzLmVycm9yQ2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrO1xcbiAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgIH0sXFxuICAgIGVycm9yVHlwZShlcnJvclR5cGVDYWxsYmFjaykge1xcbiAgICAgICAgaWYgKHR5cGVvZiBlcnJvclR5cGVDYWxsYmFjayAhPT0gXFxcImZ1bmN0aW9uXFxcIikgcmV0dXJuIHRoaXM7XFxuICAgICAgICB0aGlzLmVycm9yVHlwZUNhbGxiYWNrID0gZXJyb3JUeXBlQ2FsbGJhY2s7XFxuICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgfSxcXG4gICAgZXJyb3JXaXRoUmV0cnkocmV0cnlDb3VudCwgZXJyb3JDYWxsYmFja1dpdGhSZXRyeSkge1xcbiAgICAgICAgaWYgKHR5cGVvZiByZXRyeUNvdW50ID09PSBcXFwiZnVuY3Rpb25cXFwiICYmIHR5cGVvZiBlcnJvckNhbGxiYWNrV2l0aFJldHJ5ID09PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgIGVycm9yQ2FsbGJhY2tXaXRoUmV0cnkgPSByZXRyeUNvdW50O1xcbiAgICAgICAgICAgIHJldHJ5Q291bnQgPSAxO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHR5cGVvZiBlcnJvckNhbGxiYWNrV2l0aFJldHJ5ICE9PSBcXFwiZnVuY3Rpb25cXFwiKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9XFxuICAgICAgICB0aGlzLnJldHJ5Q291bnQgPSBOdW1iZXIocmV0cnlDb3VudCk7XFxuICAgICAgICB0aGlzLmVycm9yQ2FsbGJhY2tXaXRoUmV0cnkgPSBlcnJvckNhbGxiYWNrV2l0aFJldHJ5O1xcbiAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgIH0sXFxuICAgIHN0YXJ0KHRvSnNvbikge1xcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLm9wdGlvbnMpO1xcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmJvZHkgPT09IFxcXCJvYmplY3RcXFwiICYmIHRoaXMuX2JvZHlUb1N0cmluZykge1xcbiAgICAgICAgICAgIG9wdGlvbnMuYm9keSA9IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuYm9keSk7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgcmVzID0gSlNPTi5wYXJzZSh0aGlzLnN0YXJ0UmVxdWVzdCh0aGlzLmJ1aWxkUGFyYW0/YnVpbGRVcmwodGhpcy51cmwsIHRoaXMuYnVpbGRQYXJhbSk6dGhpcy51cmwsIG9wdGlvbnMpKTtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID49IDIwMCAmJiByZXMuc3RhdHVzQ29kZSA8PSAzMDApIHtcXG4gICAgICAgICAgICAgICAgbGV0IGJvZHkgPSByZXMuYm9keTtcXG4gICAgICAgICAgICAgICAgaWYgKHRvSnNvbikge1xcbiAgICAgICAgICAgICAgICAgICAgYm9keSA9IEpTT04ucGFyc2UoYm9keSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VjY2Vzc0NhbGxiYWNrKGJvZHksIHJlcyk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFN0cmluZyhyZXMuc3RhdHVzQ29kZSkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGVyciA9IHRoaXMuZXJyb3JUeXBlQ2FsbGJhY2soZXJyLCByZXMpO1xcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG5cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHRoaXMucmV0cnlDb3VudCkge1xcbiAgICAgICAgICAgICAgICBsZXQgdHJ5UmVzdWx0ID0gdGhpcy5lcnJvckNhbGxiYWNrV2l0aFJldHJ5KGVyciwgcmVzLCB0aGlzKTtcXG4gICAgICAgICAgICAgICAgaWYgKHRyeVJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXRyeUNvdW50LS07XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdGFydCh0b0pzb24pO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXRyeUNvdW50ID0gMDtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yQ2FsbGJhY2soZXJyLCByZXMpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JDYWxsYmFjayhlcnIsIHJlcyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcXG4gICAgICAgICAgICB3aXRoSGVhZGVyczogdHJ1ZVxcbiAgICAgICAgfSk7XFxuICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgfSxcXG4gICAgbWVyZ2VIZWFkQW5kQm9keShvcHRpb25zKSB7XFxuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLmhlYWRlcnN8fHt9LCBvcHRpb25zLmhlYWRlcnMpO1xcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuYm9keSA9PT0gXFxcIm9iamVjdFxcXCIgJiYgdHlwZW9mIG9wdGlvbnMuYm9keSA9PT0gXFxcIm9iamVjdFxcXCIpIHtcXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucy5ib2R5fHx7fSwgb3B0aW9ucy5ib2R5KTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5idWlsZFVybCA9PT0gXFxcIm9iamVjdFxcXCIpIHtcXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuYnVpbGRQYXJhbXx8e30sIG9wdGlvbnMuYnVpbGRVcmwpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgIH1cXG59KTtcXG5cXG5PYmplY3QuYXNzaWduKGh0dHBSZXF1ZXN0LCB7XFxuICAgIGZldGNoKHVybCwgb3B0aW9ucykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBodHRwUmVxdWVzdCh1cmwsIG9wdGlvbnMpO1xcbiAgICB9LFxcbiAgICBwb3N0KHVybCwgb3B0aW9ucykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBodHRwUmVxdWVzdCh1cmwsIG9wdGlvbnMpLnNldFN0YXJ0UmVxdWVzdEZ1bmMocG9zdCk7XFxuICAgIH0sXFxuICAgIHJlcXVlc3QodXJsLCBvcHRpb25zKSB7XFxuICAgICAgICByZXR1cm4gbmV3IGh0dHBSZXF1ZXN0KHVybCwgb3B0aW9ucykuc2V0U3RhcnRSZXF1ZXN0RnVuYyhyZXF1ZXN0KTtcXG4gICAgfSxcXG4gICAgcG9zdFJlcXVlc3QodXJsLCBvcHRpb25zKSB7XFxuICAgICAgICByZXR1cm4gbmV3IGh0dHBSZXF1ZXN0KHVybCwgb3B0aW9ucykuc2V0U3RhcnRSZXF1ZXN0RnVuYyhwb3N0UmVxdWVzdCk7XFxuICAgIH0sXFxuICAgIGZldGNoQ29va2llKHVybCwgb3B0aW9ucykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBodHRwUmVxdWVzdCh1cmwsIG9wdGlvbnMpLnNldFN0YXJ0UmVxdWVzdEZ1bmMoZmV0Y2hDb29raWUpO1xcbiAgICB9XFxufSk7XFxuJC5leHBvcnRzID0gaHR0cFJlcXVlc3Q7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlpLjlhYvliJfooahcIixcInBhdGhcIjpcInF1YXJrTGlzdFwiLFwicnVsZVwiOlwianM6XFxubGV0IGQgPSBbXTtcXG5cXG5hZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICgpID0+IGNsZWFyTXlWYXIoXFxcInBsYXlVcmxDYWNoZVxcXCIpKTtcXG5hZGRMaXN0ZW5lcihcXFwib25SZWZyZXNoXFxcIiwgKCkgPT4gY2xlYXJNeVZhcihcXFwicGxheVVybENhY2hlXFxcIikpO1xcbmxldCBzb1VybCA9IGRlY29kZVVSSUNvbXBvbmVudChnZXRQYXJhbShcXFwicmVhbHVybFxcXCIsIFxcXCJcXFwiKSk7XFxubGV0IHJlYWx1cmwgPSBzb1VybC5zcGxpdChcXFwiP1xcXCIpWzBdO1xcbmxldCB1cmxEYXRhID0gcmVhbHVybC5zcGxpdChcXFwiL1xcXCIpO1xcblxcbmxldCBzaGFyZUlkID0gTVlfUEFSQU1TLnNoYXJlSWQgfHwgdXJsRGF0YVs0XS5yZXBsYWNlKFxcXCIjXFxcIiwgXFxcIlxcXCIpO1xcbmxldCBzaGFyZVB3ZCA9IGdldFBhcmFtKFxcXCJzaGFyZVB3ZFxcXCIsIE1ZX1BBUkFNUy5zaGFyZVB3ZCB8fCBnZXRQYXJhbShcXFwicGFzc2NvZGVcXFwiLCBcXFwiXFxcIiwgc29VcmwpIHx8IFxcXCJcXFwiKTtcXG5sZXQgc2hhcmVUb2tlbiA9IGdldFBhcmFtKFxcXCJzaGFyZVRva2VuXFxcIiwgTVlfUEFSQU1TLnNoYXJlVG9rZW4gfHwgXFxcIlxcXCIpO1xcblxcbmxldCBmaWxlSWQgPSBNWV9QQVJBTVMuZmlsZUlkO1xcblxcbmxldCBzb3J0ID0ge1xcbiAgICBcXFwi5ZCN56ew5q2j5bqPXFxcIjogXFxcImZpbGVfbmFtZTphc2NcXFwiLFxcbiAgICBcXFwi5ZCN56ew5YCS5bqPXFxcIjogXFxcImZpbGVfbmFtZTpkZXNjXFxcIixcXG4gICAgXFxcIuaXtumXtOato+W6j1xcXCI6IFxcXCJ1cGRhdGVkX2F0OmFzY1xcXCIsXFxuICAgIFxcXCLml7bpl7TlgJLluo9cXFwiOiBcXFwidXBkYXRlZF9hdDpkZXNjXFxcIlxcbn07XFxubGV0IHN0eWxlcyA9IFtcXFwidGV4dF8xXFxcIiwgXFxcImF2YXRhclxcXCJdO1xcblxcbmxldCBzb3J0VmFsdWUgPSBzb3J0W2dldEl0ZW0oXFxcInNvcnRLZXlcXFwiLCBcXFwi5ZCN56ew5q2j5bqPXFxcIildO1xcbmxldCBzdHlsZSA9IGdldEl0ZW0oXFxcInN0eWxlXFxcIiwgc3R5bGVzWzBdKTtcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogc3R5bGUsXFxuICAgICAgICB1cmw6ICQoc3R5bGVzLCAxLCAn6K+36YCJ5oupJykuc2VsZWN0KCgpID0+IHtcXG4gICAgICAgICAgICBzZXRJdGVtKCdzdHlsZScsIGlucHV0KTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgfSksXFxuICAgICAgICBwaWNfdXJsOiBcXFwiaHR0cHM6Ly9oaWtlcmZhbnMuY29tL2ltZy9hbGlfaWNvbi5zdmdcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzRcXFwiXFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGdldEl0ZW0oXFxcInNvcnRLZXlcXFwiLCBcXFwi5ZCN56ew5q2j5bqPXFxcIiksXFxuICAgICAgICB1cmw6ICQoT2JqZWN0LmtleXMoc29ydCksIDEsICfor7fpgInmi6knKS5zZWxlY3QoKCkgPT4ge1xcbiAgICAgICAgICAgIHNldEl0ZW0oXFxcInNvcnRLZXlcXFwiLCBpbnB1dClcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgfSksXFxuICAgICAgICBwaWNfdXJsOiBcXFwiaHR0cHM6Ly9oaWtlcmZhbnMuY29tL2ltZy9hbGlfc29ydC5zdmdcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzRcXFwiXFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGdldEl0ZW0oXFxcInF1YXJrX3BsYXlNb2RlXFxcIiwgXFxcIui9rOeggVxcXCIpLFxcbiAgICAgICAgdXJsOiAkKFtcXFwi6L2s56CBXFxcIiwgXFxcIuWOn+eUu1xcXCJdLCAyLCBcXFwi5pKt5pS+5qih5byPXFxcIikuc2VsZWN0KCgpID0+IHtcXG4gICAgICAgICAgICBzZXRJdGVtKFxcXCJxdWFya19wbGF5TW9kZVxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/liIfmjaLmiJDlip9cXFwiO1xcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcImljb25fc21hbGxfNFxcXCIsXFxuICAgICAgICBwaWNfdXJsOiBcXFwiaHR0cHM6Ly9oaWtlcmZhbnMuY29tL2ltZy9hbGlfcGxheS5zdmdcXFwiLFxcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5Yqf6IO9XFxcIixcXG4gICAgICAgIHVybDogJChbXFxcIui3s+i9rOWkuOWFi0FQUFxcXCIsIFxcXCLlpI3liLbliIbkuqvpk77mjqVcXFwiLCBcXFwi5Liq5Lq66LSm5Y+3566h55CGXFxcIiwgXFxcIuWOn+eUu+S4i+i9vee6v+eoi1xcXCJdLCAyKS5zZWxlY3QoKHNoYXJlSWQsIHNoYXJlUHdkKSA9PiB7XFxuICAgICAgICAgICAgaWYgKGlucHV0ID09PSBcXFwi6Lez6L2s5aS45YWLQVBQXFxcIikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInFrbGluazovL3d3dy51Yy5jbi9iMjBiODRmZDczNWE4ZGQzZjc1NDExMjliYWNjNGU5YT9hY3Rpb249b3Blbl91cmwmdXJsPWh0dHBzOi8vcGFuLnF1YXJrLmNuL3MvXFxcIiArIHNoYXJlSWQ7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gXFxcIuS4quS6uui0puWPt+euoeeQhlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiYWNjb3VudFxcXCIpO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IFxcXCLljp/nlLvkuIvovb3nur/nqItcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkKGdldEl0ZW0oXFxcInNwZWVkVGhyZWFkXFxcIiwgXFxcIjEwXFxcIiksIFxcXCLor7fovpPlhaUzLTMy5LmL6Ze055qE5pW05pWwXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNwZWVkVGhyZWFkID0gcGFyc2VJbnQoaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNwZWVkVGhyZWFkIDwgMyB8fCBzcGVlZFRocmVhZCA+IDMyKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+iuvue9ruS4jeWQiOazlVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJzcGVlZFRocmVhZFxcXCIsIFN0cmluZyhzcGVlZFRocmVhZCkpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+iuvue9ruaIkOWKn1xcXCI7XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IFxcXCLlpI3liLbliIbkuqvpk77mjqVcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiY29weTovL1xcXCIgKyBidWlsZFVybChcXFwiaHR0cHM6Ly9wYW4ucXVhcmsuY24vcy9cXFwiICsgc2hhcmVJZCwge1xcbiAgICAgICAgICAgICAgICAgICAgcGFzc2NvZGU6IHNoYXJlUHdkXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHNoYXJlSWQsIHNoYXJlUHdkKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF80XFxcIixcXG4gICAgICAgIHBpY191cmw6IFxcXCJodHRwczovL2hpa2VyZmFucy5jb20vaW1nL2FsaV9maWxlaW50by5zdmdcXFwiLFxcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXG4gICAgfSk7XFxufVxcblxcblxcbmxldCBRdWFya1NoYXJlQXBpID0gJC5yZXF1aXJlKFxcXCJRdWFya1NoYXJlQXBpXFxcIik7XFxubGV0IHF1YXJrU2hhcmVBcGkgPSBuZXcgUXVhcmtTaGFyZUFwaShzaGFyZUlkLCBzaGFyZVB3ZCkuc2V0VG9rZW4oc2hhcmVUb2tlbikuc2V0UmVmcmVzaCgoc2hhcmVUb2tlbikgPT4ge1xcbiAgICBNWV9QQVJBTVMuc2hhcmVUb2tlbiA9IHNoYXJlVG9rZW47XFxuICAgIHNldFBhZ2VQYXJhbXMoTVlfUEFSQU1TKTtcXG59KTtcXG5cXG5mdW5jdGlvbiBmb3JtYXRTaXplKHNpemUpIHtcXG4gICAgaWYgKCFzaXplKSB7XFxuICAgICAgICByZXR1cm4gJyc7XFxuICAgIH1cXG4gICAgY29uc3QgdW5pdHMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXTtcXG4gICAgbGV0IGkgPSAwO1xcbiAgICB3aGlsZSAoc2l6ZSA+PSAxMDI0KSB7XFxuICAgICAgICBzaXplIC89IDEwMjQ7XFxuICAgICAgICBpKys7XFxuICAgIH1cXG4gICAgc2l6ZSA9IGkgPyBOdW1iZXIoc2l6ZS50b0ZpeGVkKDIpKSA6IHNpemU7XFxuICAgIHJldHVybiBgJHtzaXplfSAke3VuaXRzW2ldfWA7XFxufVxcblxcbmxldCBzdWJFeHRzID0gW1xcXCJ2dHRcXFwiLCBcXFwic3J0XFxcIiwgXFxcImFzc1xcXCJdO1xcbmxldCB0aXRsZUhlYWQgPSB7XFxuICAgIHZpZGVvOiBcXFwi8J+OrFxcXCIsXFxuICAgIGF1ZGlvOiBcXFwi8J+OtVxcXCIsXFxuICAgIGRvYzogXFxcIvCfk5FcXFwiLFxcbiAgICBpbWFnZTogXFxcIvCflrxcXFwiLFxcbiAgICBhcmNoaXZlOiBcXFwi8J+TplxcXCIsXFxuICAgIFxcXCJkZWZhdWx0XFxcIjogXFxcIuKdk1xcXCJcXG59O1xcblxcbmZ1bmN0aW9uIGdldEhlYWQodHlwZSwgZXh0KSB7XFxuICAgIGxldCBoZWFkID0gdGl0bGVIZWFkW3R5cGVdO1xcbiAgICAvKmlmIChzdWJFeHRzLmluY2x1ZGVzKGV4dCkpIHtcXG4gICAgICAgIGhlYWQgPSBcXFwi8J+VuFxcXCI7XFxuICAgIH0qL1xcbiAgICByZXR1cm4gaGVhZCB8fCBcXFwi4p2TXFxcIjtcXG59XFxudHJ5IHtcXG4gICAgdmFyIHJlcyA9IHF1YXJrU2hhcmVBcGkuZ2V0TGlzdEZpbGUoZmlsZUlkLCBNWV9QQUdFLCBzb3J0VmFsdWUpO1xcbiAgICAvL+iuvue9ruagh+mimFxcbiAgICBzZXRQYWdlVGl0bGUocmVzLmRhdGEuc2hhcmUudGl0bGUpO1xcbiAgICB2YXIgbGlzdCA9IHJlcy5kYXRhLmxpc3QgfHwgW107XFxuICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMCAmJiAhZmlsZUlkKSB7XFxuICAgICAgICByZXMgPSBxdWFya1NoYXJlQXBpLmdldExpc3RGaWxlKHJlcy5kYXRhLnNoYXJlLmZpcnN0X2ZpZCwgTVlfUEFHRSwgc29ydFZhbHVlKTtcXG4gICAgICAgIHNldFBhZ2VUaXRsZShyZXMuZGF0YS5zaGFyZS50aXRsZSk7XFxuICAgICAgICB2YXIgbGlzdCA9IHJlcy5kYXRhLmxpc3QgfHwgW107XFxuICAgIH1cXG4gICAgbGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgLy/liKTmlq3mmK/lkKbmlofku7blpLlcXG4gICAgICAgIGlmIChpdGVtLmRpcikge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi8J+TglxcXCIgKyBpdGVtLmZpbGVfbmFtZSxcXG4gICAgICAgICAgICAgICAgZGVzYzogJC5kYXRlRm9ybWF0KGl0ZW0udXBkYXRlZF9hdCwgJ3l5eXktTU0tZGQnKSArICcgICcgKyBpdGVtLmluY2x1ZGVfaXRlbXMgKyAn6aG5ICAnLFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBcXFwiaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tZXNzeS8yNy5zdmdcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvcXVhcmtMaXN0P3BhZ2U9ZnlwYWdlXFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IHN0eWxlLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVJZCxcXG4gICAgICAgICAgICAgICAgICAgIHNoYXJlUHdkLFxcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVUb2tlbjogcXVhcmtTaGFyZUFwaS5nZXRUb2tlbigpLFxcbiAgICAgICAgICAgICAgICAgICAgZmlsZUlkOiBpdGVtLmZpZCxcXG4gICAgICAgICAgICAgICAgICAgIGluaGVyaXRUaXRsZTogZmFsc2VcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogZ2V0SGVhZChpdGVtLm9ial9jYXRlZ29yeSkgKyBpdGVtLmZpbGVfbmFtZSxcXG4gICAgICAgICAgICAgICAgZGVzYzogJC5kYXRlRm9ybWF0KGl0ZW0udXBkYXRlZF9hdCwgJ3l5eXktTU0tZGQnKSArICcgICcgKyBmb3JtYXRTaXplKGl0ZW0uc2l6ZSksXFxuICAgICAgICAgICAgICAgIHBpY191cmw6IGl0ZW0udGh1bWJuYWlsLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoZmlkLCBmaWRfdG9rZW4sIHB3ZF9pZCwgc3Rva2VuLCBjYXRlZ29yeSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBsYXlVcmxDYWNoZSA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJwbGF5VXJsQ2FjaGVcXFwiLCB7fSk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAocGxheVVybENhY2hlW2ZpZF0pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGxheVVybENhY2hlW2ZpZF07XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSAkLnJlcXVpcmUoXFxcInBsYXlcXFwiKS5nZXRQbGF5VXJsKGZpZCwgZmlkX3Rva2VuLCBwd2RfaWQsIHN0b2tlbiwgY2F0ZWdvcnkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYXlVcmxDYWNoZVtmaWRdID0gdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJwbGF5VXJsQ2FjaGVcXFwiLCBwbGF5VXJsQ2FjaGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmw7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0sIGl0ZW0uZmlkLCBpdGVtLnNoYXJlX2ZpZF90b2tlbiwgc2hhcmVJZCwgcXVhcmtTaGFyZUFwaS5nZXRUb2tlbigpLCBpdGVtLm9ial9jYXRlZ29yeSksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBzdHlsZSxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLmZpZCxcXG4gICAgICAgICAgICAgICAgICAgIGluaGVyaXRUaXRsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICBjbHM6ICdwbGF5bGlzdCAnICsgaXRlbS5vYmpfY2F0ZWdvcnlcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZSdcXG4gICAgICAgIH0pO1xcbiAgICB9KTtcXG59IGNhdGNoIChlKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogZS5tZXNzYWdlLFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIGlmIChlLm1lc3NhZ2UuaW5jbHVkZXMoXFxcIuaPkOWPlueggVxcXCIpKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi6L6T5YWl5o+Q5Y+W56CBXFxcIixcXG4gICAgICAgICAgICB1cmw6ICQoKS5pbnB1dCgoTVlfUEFSQU1TKSA9PiB7XFxuICAgICAgICAgICAgICAgIHNldFBhZ2VQYXJhbXMoT2JqZWN0LmFzc2lnbih7fSwgTVlfUEFSQU1TLCB7XFxuICAgICAgICAgICAgICAgICAgICBzaGFyZVB3ZDogaW5wdXRcXG4gICAgICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIH0sIE1ZX1BBUkFNUyksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIlxcbiAgICAgICAgfSk7XFxuICAgIH1cXG59XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwicGxheVwiLFwicGF0aFwiOlwicGxheVwiLFwicnVsZVwiOlwianM6XFxuY29uc3QgY29va2llID0gZ2V0SXRlbShcXFwicXVhcmtDb29raWVcXFwiLCBcXFwiXFxcIik7XFxubGV0IGh0dHBSZXF1ZXN0ID0gJC5yZXF1aXJlKFxcXCJodHRwUmVxdWVzdFxcXCIpO1xcblxcbmZ1bmN0aW9uIENvb2tpZU1hbmFnZShjb29raWUpIHtcXG4gICAgdGhpcy5jb29raWUgPSB7fTtcXG4gICAgdGhpcy5hZGQoY29va2llKTtcXG59XFxuT2JqZWN0LmFzc2lnbihDb29raWVNYW5hZ2UucHJvdG90eXBlLCB7XFxuICAgIGFkZChjb29raWUpIHtcXG4gICAgICAgIGxldCBjb29raWVzID0gW107XFxuICAgICAgICBpZiAodHlwZW9mIGNvb2tpZSA9PT0gXFxcInN0cmluZ1xcXCIpIHtcXG4gICAgICAgICAgICBjb29raWVzID0gY29va2llLnNwbGl0KFxcXCI7XFxcIik7XFxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY29va2llKSkge1xcbiAgICAgICAgICAgIGNvb2tpZXMgPSBjb29raWU7XFxuICAgICAgICB9XFxuICAgICAgICBjb29raWVzLmZvckVhY2godiA9PiB7XFxuICAgICAgICAgICAgdiA9IHYuc3BsaXQoXFxcIj1cXFwiKTtcXG4gICAgICAgICAgICBpZiAodi5sZW5ndGggPCAyKSByZXR1cm47XFxuICAgICAgICAgICAgdGhpcy5jb29raWVbdlswXS50cmltKCldID0gdlsxXS50cmltKCk7XFxuICAgICAgICB9KTtcXG4gICAgfSxcXG4gICAgZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuY29va2llKS5tYXAodiA9PiB2WzBdICsgXFxcIj1cXFwiICsgdlsxXSkuam9pbihcXFwiO1xcXCIpO1xcbiAgICB9XFxufSk7XFxuY29uc3QgY29va2llTWFuYWdlID0gbmV3IENvb2tpZU1hbmFnZShjb29raWUpO1xcblxcbmZ1bmN0aW9uIHdhaXRTbGVlcCh0aW1lKSB7XFxuICAgIGphdmEubGFuZy5UaHJlYWQuc2xlZXAodGltZSB8fCA2MDApO1xcbn1cXG5cXG5mdW5jdGlvbiByZXF1ZXN0SHR0cCh1cmwpIHtcXG4gICAgcmV0dXJuIG5ldyBodHRwUmVxdWVzdCh1cmwpXFxuICAgICAgICAuc3VjY2VzcygoYm9keSwgcmVzKSA9PiB7XFxuICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzICE9PSAyMDApIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGJvZHkubWVzc2FnZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGNvb2tpZU1hbmFnZS5hZGQocmVzLmhlYWRlcnNbXFxcInNldC1jb29raWVcXFwiXSk7XFxuICAgICAgICAgICAgcmV0dXJuIGJvZHk7XFxuICAgICAgICB9KVxcbiAgICAgICAgLmVycm9yVHlwZSgoZXJyLCByZXMpID0+IHtcXG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKEpTT04ucGFyc2UocmVzLmJvZHkpLm1lc3NhZ2UpO1xcbiAgICAgICAgfSlcXG4gICAgICAgIC5ib2R5VG9TdHJpbmcodHJ1ZSlcXG4gICAgICAgIC5oZWFkZXJzKHtcXG4gICAgICAgICAgICBjb29raWU6IGNvb2tpZU1hbmFnZS5nZXQoKSxcXG4gICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFxcXCJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBxdWFyay1jbG91ZC1kcml2ZS8yLjUuMjAgQ2hyb21lLzEwMC4wLjQ4OTYuMTYwIEVsZWN0cm9uLzE4LjMuNS40LWI0Nzg0OTExMDAgU2FmYXJpLzUzNy4zNiBDaGFubmVsL3Bja2tfb3RoZXJfY2hcXFwiLFxcbiAgICAgICAgICAgIFxcXCJyZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vZHJpdmUucXVhcmsuY24vXFxcIlxcbiAgICAgICAgfSk7XFxufVxcblxcbmZ1bmN0aW9uIGdldERyaXZlSW5mbygpIHtcXG4gICAgcmV0dXJuIHJlcXVlc3RIdHRwKFxcXCJodHRwczovL2RyaXZlLnF1YXJrLmNuLzEvY2xvdWRkcml2ZS9zaGFyZS9zaGFyZXBhZ2UvZGlyP3ByPXVjcHJvJmZyPXBjJmF2ZXI9MVxcXCIpLnN0YXJ0KHRydWUpO1xcbn1cXG5cXG5mdW5jdGlvbiBjcmVhdGVTYXZlVGFzayhmaWQsIGZpZF90b2tlbiwgcHdkX2lkLCBzdG9rZW4pIHtcXG4gICAgbGV0IGRyaXZlSW5mbyA9IGdldERyaXZlSW5mbygpO1xcbiAgICByZXR1cm4gcmVxdWVzdEh0dHAoXFxcImh0dHBzOi8vZHJpdmUucXVhcmsuY24vMS9jbG91ZGRyaXZlL3NoYXJlL3NoYXJlcGFnZS9zYXZlP3ByPXVjcHJvJmZyPXBjXFxcIikuc2V0U3RhcnRSZXF1ZXN0RnVuYyhwb3N0KS5ib2R5KHtcXG4gICAgICAgIFxcXCJmaWRfbGlzdFxcXCI6IFtcXG4gICAgICAgICAgICBmaWRcXG4gICAgICAgIF0sXFxuICAgICAgICBcXFwiZmlkX3Rva2VuX2xpc3RcXFwiOiBbXFxuICAgICAgICAgICAgZmlkX3Rva2VuXFxuICAgICAgICBdLFxcbiAgICAgICAgXFxcInRvX3BkaXJfZmlkXFxcIjogZHJpdmVJbmZvLmRhdGEuZGlyLmZpZCxcXG4gICAgICAgIFxcXCJwd2RfaWRcXFwiOiBwd2RfaWQsXFxuICAgICAgICBcXFwic3Rva2VuXFxcIjogc3Rva2VuLFxcbiAgICAgICAgXFxcInBkaXJfZmlkXFxcIjogZHJpdmVJbmZvLmRhdGEuZGlyLnBkaXJfZmlkXFxuICAgIH0pLnN0YXJ0KHRydWUpO1xcbn1cXG5cXG5mdW5jdGlvbiBjcmVhdGVEZWxldGVUYXNrKGZpZCkge1xcbiAgICBsZXQgZHJpdmVJbmZvID0gZ2V0RHJpdmVJbmZvKCk7XFxuICAgIHJldHVybiByZXF1ZXN0SHR0cChcXFwiaHR0cHM6Ly9kcml2ZS5xdWFyay5jbi8xL2Nsb3VkZHJpdmUvZmlsZS9kZWxldGU/cHI9dWNwcm8mZnI9cGNcXFwiKS5zZXRTdGFydFJlcXVlc3RGdW5jKHBvc3QpLmJvZHkoe1xcbiAgICAgICAgXFxcImFjdGlvbl90eXBlXFxcIjogMixcXG4gICAgICAgIFxcXCJmaWxlbGlzdFxcXCI6IFtcXG4gICAgICAgICAgICBmaWRcXG4gICAgICAgIF0sXFxuICAgICAgICBcXFwiZXhjbHVkZV9maWRzXFxcIjogW11cXG4gICAgfSkuc3RhcnQodHJ1ZSk7XFxufVxcblxcbmZ1bmN0aW9uIHRhc2sodGFza19pZCwgcmV0cnlfaW5kZXgpIHtcXG4gICAgcmV0dXJuIHJlcXVlc3RIdHRwKFxcXCJodHRwczovL2RyaXZlLnF1YXJrLmNuLzEvY2xvdWRkcml2ZS90YXNrXFxcIikuYnVpbGRVcmwoe1xcbiAgICAgICAgcHI6IFxcXCJ1Y3Byb1xcXCIsXFxuICAgICAgICBmcjogXFxcInBjXFxcIixcXG4gICAgICAgIHRhc2tfaWQ6IHRhc2tfaWQsXFxuICAgICAgICByZXRyeV9pbmRleDogcmV0cnlfaW5kZXhcXG4gICAgfSkuc3RhcnQodHJ1ZSk7XFxufVxcblxcbmZ1bmN0aW9uIHF1ZXJ5VGFzayh0YXNrX2lkKSB7XFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgOTsgaSsrKSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIGxldCByZXMgPSB0YXNrKHRhc2tfaWQsIGkgKyBcXFwiXFxcIik7XFxuICAgICAgICAgICAgaWYgKHJlcy5kYXRhLnN0YXR1cyA9PT0gMikge1xcbiAgICAgICAgICAgICAgICB3YWl0U2xlZXAoMTAwMCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiByZXMuZGF0YS5zYXZlX2FzLnNhdmVfYXNfdG9wX2ZpZHNbMF07XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHdhaXRTbGVlcCgzMDAqKGkrMSkpO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge31cXG4gICAgfVxcbiAgICByZXR1cm4gdm9pZCgwKTtcXG59XFxuXFxuZnVuY3Rpb24gcXVlcnlUYXNrU3RhdHVzKHRhc2tfaWQpIHtcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgbGV0IHJlcyA9IHRhc2sodGFza19pZCwgaSArIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICBpZiAocmVzLmRhdGEuc3RhdHVzID09PSAyKSB7XFxuICAgICAgICAgICAgICAgIHdhaXRTbGVlcCgxMDAwKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHdhaXRTbGVlcCgzMDApO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge31cXG4gICAgfVxcbiAgICByZXR1cm4gZmFsc2U7XFxufVxcblxcbmZ1bmN0aW9uIGdldFByZXZpZXdWaWRlbyhmaWQpIHtcXG4gICAgcmV0dXJuIHJlcXVlc3RIdHRwKFxcXCJodHRwczovL2RyaXZlLnF1YXJrLmNuLzEvY2xvdWRkcml2ZS9maWxlL3YyL3BsYXk/cHI9dWNwcm8mZnI9cGNcXFwiKS5ib2R5KHtcXG4gICAgICAgIFxcXCJmaWRcXFwiOiBmaWQsXFxuICAgICAgICBcXFwicmVzb2x1dGlvbnNcXFwiOiBcXFwibm9ybWFsLGxvdyxoaWdoLHN1cGVyLDJrLDRrXFxcIixcXG4gICAgICAgIFxcXCJzdXBwb3J0c1xcXCI6IFxcXCJmbXA0LG0zdThcXFwiXFxuICAgIH0pLnNldFN0YXJ0UmVxdWVzdEZ1bmMocG9zdCkuc3RhcnQodHJ1ZSk7XFxufVxcblxcbmZ1bmN0aW9uIGdldERvd25sb2FkVXJsKGZpZCkge1xcbiAgICByZXR1cm4gcmVxdWVzdEh0dHAoXFxcImh0dHBzOi8vZHJpdmUucXVhcmsuY24vMS9jbG91ZGRyaXZlL2ZpbGUvZG93bmxvYWQ/cHI9dWNwcm8mZnI9cGNcXFwiKS5ib2R5KHtcXG4gICAgICAgIFxcXCJmaWRzXFxcIjogW2ZpZF1cXG4gICAgfSkuc2V0U3RhcnRSZXF1ZXN0RnVuYyhwb3N0KS5zdGFydCh0cnVlKTtcXG59XFxuXFxuZnVuY3Rpb24gZ2V0UGxheVVybChmaWQsIGZpZF90b2tlbiwgcHdkX2lkLCBzdG9rZW4sIGNhdGVnb3J5KSB7XFxuICAgIHRyeSB7XFxuICAgICAgICBpZiAoIWNvb2tpZSkgcmV0dXJuIFxcXCJ0b2FzdDovL+ivt+eZu+W9lei0puWPt1xcXCI7XFxuICAgICAgICBsZXQgdGFza0lkID0gY3JlYXRlU2F2ZVRhc2soZmlkLCBmaWRfdG9rZW4sIHB3ZF9pZCwgc3Rva2VuKS5kYXRhLnRhc2tfaWQ7XFxuICAgICAgICBsZXQgYXNmaWQgPSBxdWVyeVRhc2sodGFza0lkKTtcXG4gICAgICAgIGlmICghYXNmaWQpIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6I635Y+W5aSx6LSlXFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBwbGF5Q29va2llID0gY29va2llTWFuYWdlLmdldCgpO1xcbiAgICAgICAgbGV0IHBsYXlIZWFkZXIgPSB7XFxuICAgICAgICAgICAgUmVmZXJlcjogXFxcImh0dHA6Ly9wYW4ucXVhcmsuY24vXFxcIixcXG4gICAgICAgICAgICBjb29raWU6IHBsYXlDb29raWUsXFxuICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBcXFwiY29tLnN0dWIuU3R1YkFwcC8xLjMuMCAoTGludXg7QW5kcm9pZCAxNCkgQW5kcm9pZFhNZWRpYTMvMS4xLjFcXFwiXFxuICAgICAgICB9O1xcbiAgICAgICAgaWYgKGNhdGVnb3J5ID09IFxcXCJ2aWRlb1xcXCIpIHtcXG4gICAgICAgICAgICBsZXQgcGxheU1vZGUgPSBnZXRJdGVtKFxcXCJxdWFya19wbGF5TW9kZVxcXCIsIFxcXCLovaznoIFcXFwiKTtcXG4gICAgICAgICAgICBpZiAocGxheU1vZGUgPT09IFxcXCLovaznoIFcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGxldCB2aWRlb1JlcyA9IGdldFByZXZpZXdWaWRlbyhhc2ZpZCk7XFxuICAgICAgICAgICAgICAgIGxldCB2aWRlb0xpc3QgPSB2aWRlb1Jlcy5kYXRhLnZpZGVvX2xpc3Q7XFxuICAgICAgICAgICAgICAgIGxldCBwbGF5TGlzdCA9IHtcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVzOiBbXSxcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFtdLFxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogW11cXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgdmlkZW9MaXN0LmZpbHRlcih2ID0+IHYuYWNjZXNzYWJsZSkuZm9yRWFjaCh2ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHBsYXlMaXN0Lm5hbWVzLnB1c2godi5yZXNvbHV0aW9uKTtcXG4gICAgICAgICAgICAgICAgICAgIHBsYXlMaXN0LnVybHMucHVzaCh2LnZpZGVvX2luZm8udXJsICsgXFxcIiNpc1ZpZGVvPXRydWUjXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBwbGF5TGlzdC5oZWFkZXJzLnB1c2gocGxheUhlYWRlcik7XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBjcmVhdGVEZWxldGVUYXNrKGFzZmlkKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHBsYXlMaXN0KTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBsZXQgcGxheVVybCA9IGdldERvd25sb2FkVXJsKGFzZmlkKS5kYXRhWzBdLmRvd25sb2FkX3VybDtcXG4gICAgICAgICAgICAgICAgbGV0IHBsYXlMaXN0ID0ge1xcbiAgICAgICAgICAgICAgICAgICAgbmFtZXM6IFtcXFwi5Y6f55S7XFxcIl0sXFxuICAgICAgICAgICAgICAgICAgICB1cmxzOiBbcGxheVVybCArIFxcXCIjaXNWaWRlbz10cnVlIyNmYXN0UGxheU1vZGUjI3RocmVhZHM9XFxcIiArIGdldEl0ZW0oXFxcInNwZWVkVGhyZWFkXFxcIiwgXFxcIjEwXFxcIikgKyBcXFwiI1xcXCJdLFxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogW3BsYXlIZWFkZXJdXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgY3JlYXRlRGVsZXRlVGFzayhhc2ZpZCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShwbGF5TGlzdCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBsZXQgcGxheVVybCA9IGdldERvd25sb2FkVXJsKGFzZmlkKS5kYXRhWzBdLmRvd25sb2FkX3VybDtcXG4gICAgICAgICAgICBjcmVhdGVEZWxldGVUYXNrKGFzZmlkKTtcXG4gICAgICAgICAgICBpZiAoY2F0ZWdvcnkgPT09ICdhdWRpbycpIHtcXG4gICAgICAgICAgICAgICAgbGV0IHBsYXlMaXN0ID0ge1xcbiAgICAgICAgICAgICAgICAgICAgbmFtZXM6IFtcXFwi6Z+z6aKRXFxcIl0sXFxuICAgICAgICAgICAgICAgICAgICB1cmxzOiBbcGxheVVybCArIFxcXCIjaXNWaWRlbz10cnVlI1xcXCJdLFxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogW3BsYXlIZWFkZXJdLFxcbiAgICAgICAgICAgICAgICAgICAgbHlyaWM6IFxcXCJcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHBsYXlMaXN0KTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNhdGVnb3J5ID09PSAnaW1hZ2UnKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkKHBsYXlVcmwsIHBsYXlIZWFkZXIpLmltYWdlKCk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcGxheUhlYWRlciA9IE9iamVjdC5rZXlzKHBsYXlIZWFkZXIpLm1hcChrZXkgPT4ga2V5ICsgXFxcIkBcXFwiICsgU3RyaW5nKHBsYXlIZWFkZXJba2V5XSkucmVwbGFjZSgvOy9nLCBcXFwi77yb77ybXFxcIikpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImRvd25sb2FkOi8vXFxcIiArIHBsYXlVcmwgKyBcXFwiO3tcXFwiICsgcGxheUhlYWRlci5qb2luKFxcXCImJlxcXCIpICsgXFxcIn1cXFwiO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgaWYgKGUubWVzc2FnZS5pbmNsdWRlcyhcXFwicmVxdWlyZSBsb2dpblxcXCIpKSB7XFxuICAgICAgICAgICAgdG9hc3QoXFxcIuacqueZu+W9leaIlueZu+W9lei/h+acn++8jOivt+mHjeaWsOeZu+W9lVxcXCIpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL2xvZ2luXFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFwiICsgZS50b1N0cmluZygpO1xcbiAgICB9XFxufVxcblxcbiQuZXhwb3J0cyA9IHtcXG4gICAgZ2V0UGxheVVybFxcbn07XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLnmbvlvZXotKblj7dcIixcInBhdGhcIjpcImxvZ2luXCIsXCJydWxlXCI6XCJqczpcXG5sZXQgZCA9IFtdO1xcbnNldFBhZ2VUaXRsZShcXFwi55m75b2V5aS45YWL6LSm5Y+3XFxcIik7XFxuYWRkTGlzdGVuZXIoXFxcIm9uQ2xvc2VcXFwiLCAoKSA9PiBjbGVhck15VmFyKFxcXCJjb29raWVcXFwiKSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLigJzigJznoa7orqTnmbvlvZXigJ3igJ1cXFwiLFxcbiAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgLy9sZXQgY20gPSBhbmRyb2lkLndlYmtpdC5Db29raWVNYW5hZ2VyLmdldEluc3RhbmNlKCk7XFxuICAgICAgICAvL2xldCBjb29raWUgPSBTdHJpbmcoY20uZ2V0Q29va2llKFxcXCJodHRwczovL3Bhbi5xdWFyay5jblxcXCIpIHx8IFxcXCJcXFwiKTtcXG4gICAgICAgIGxldCBjb29raWUgPSBnZXRNeVZhcihcXFwiY29va2llXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgaWYgKCQucmVxdWlyZShcXFwidG9vbFxcXCIpLmlzTG9naW5Db29raWUoY29va2llKSkge1xcbiAgICAgICAgICAgIHNldEl0ZW0oXFxcInF1YXJrQ29va2llXFxcIiwgY29va2llKTtcXG4gICAgICAgICAgICBiYWNrKCk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+eZu+W9leaIkOWKn1xcXCI7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5pyq55m75b2VXFxcIjtcXG4gICAgfSksXFxuICAgIGRlc2M6IFxcXCLigJzigJzigJ3igJ08c21hbGw+54K55Ye75aS05YOP5Y+v5Lul6YCA5Ye66LSm5Y+36YeN5paw55m75b2VPC9zbWFsbD5cXFwiLFxcbiAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6IFxcXCJsaW5lX2JsYW5rXFxcIlxcbn0pO1xcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiBcXFwieDVfd2Vidmlld19zaW5nbGVcXFwiLFxcbiAgICB1cmw6IFxcXCJodHRwczovL3Bhbi5xdWFyay5jblxcXCIsXFxuICAgIGRlc2M6IFxcXCJsaXN0JiZzY3JlZW4tMTUwXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIHVhOiBQQ19VQSxcXG4gICAgICAgIGpzOiAkLnRvU3RyaW5nKCh0aXRsZSkgPT4ge1xcbiAgICAgICAgICAgIGxldCBjb29raWU9XFxcIlxcXCI7XFxuICAgICAgICAgICAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBjb29raWUgPSBmYmEuZ2V0Q29va2llKFxcXCJodHRwczovL3Bhbi5xdWFyay5jblxcXCIpO1xcbiAgICAgICAgICAgICAgICBmYmEucHV0VmFyKHRpdGxlICsgXFxcIkBjb29raWVcXFwiLCBjb29raWUpO1xcbiAgICAgICAgICAgIH0sIDIwMCk7XFxuICAgICAgICB9LCBNWV9SVUxFLnRpdGxlKVxcbiAgICB9XFxufSk7XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlt6XlhbdcIixcInBhdGhcIjpcInRvb2xcIixcInJ1bGVcIjpcImpzOlxcblxcbiQuZXhwb3J0cz17XFxuICAgIGlzTG9naW5Db29raWUoY29va2llKXtcXG4gICAgICAgIHJldHVybiAhIShjb29raWUgICYmIGNvb2tpZS5pbmNsdWRlcyhcXFwiX191aWQ9XFxcIikgJiYgY29va2llLmluY2x1ZGVzKFxcXCJfX3B1dXM9XFxcIikpO1xcbiAgICB9XFxufTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS4quS6uui0puWPt+iuvue9rlwiLFwicGF0aFwiOlwiYWNjb3VudFwiLFwicnVsZVwiOlwiJC5leHBvcnRzID0gJChbXFxcIkNvb2tpZeeZu+W9lVxcXCIsIFxcXCLnvZHpobXnmbvlvZVcXFwiLCBcXFwi5LuOVFZCT1jojrflj5ZDb29raWVcXFwiLCBcXFwi5aSN5Yi2Q29va2llXFxcIiwgXFxcIua4hemZpENvb2tpZVxcXCJdKS5zZWxlY3QoKGlzcikgPT4ge1xcbiAgICBpZiAoaW5wdXQgPT09IFxcXCLnvZHpobXnmbvlvZVcXFwiKSB7XFxuICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9sb2dpbiNub1JlY29yZEhpc3RvcnkjI25vSGlzdG9yeSNcXFwiO1xcbiAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBcXFwiQ29va2ll55m75b2VXFxcIikge1xcbiAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLor7fovpPlhaVDb29raWVcXFwiKS5pbnB1dCgoaXNyKSA9PiB7XFxuICAgICAgICAgICAgaWYgKCQucmVxdWlyZShcXFwidG9vbFxcXCIpLmlzTG9naW5Db29raWUoaW5wdXQpKSB7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInF1YXJrQ29va2llXFxcIiwgaW5wdXQucmVwbGFjZSgvXFxcXHMvZywgXFxcIlxcXCIpKTtcXG4gICAgICAgICAgICAgICAgaXNyICYmIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/orr7nva7miJDlip9cXFwiO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9Db29raWXmoLzlvI/plJnor69cXFwiO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIGlzcik7XFxuICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IFxcXCLku45UVkJPWOiOt+WPlkNvb2tpZVxcXCIpIHtcXG4gICAgICAgIGxldCBwYXRoID0gXFxcIi9zdG9yYWdlL2VtdWxhdGVkLzAvVFYvLnF1YXJrX3VzZXJcXFwiO1xcbiAgICAgICAgaWYgKGZpbGVFeGlzdChcXFwiZmlsZTovL1xcXCIgKyBwYXRoKSkge1xcbiAgICAgICAgICAgIGlmICghbmV3IGphdmEuaW8uRmlsZShwYXRoKS5jYW5SZWFkKCkpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIuayoeacieadg+mZkOivu+WPlkNvb2tpZeaWh+S7tu+8jOivt+aJk+W8gOaJgOacieaWh+S7tuadg+mZkFxcXFxu5rW36ZiU6K6+572uLT7mm7TlpJrlip/og70tPuWGhemDqOaWh+S7tueuoeeQhi0+5Y+z5LiK6KeSXFxcIikuY29uZmlybSgoKSA9PiB7fSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGxldCBqc29uID0gSlNPTi5wYXJzZShmZXRjaChcXFwiZmlsZTovL1xcXCIgKyBwYXRoKSk7XFxuICAgICAgICAgICAgICAgIGxldCBjb29raWUgPSBqc29uLmNvb2tpZTtcXG4gICAgICAgICAgICAgICAgaWYgKCQucmVxdWlyZShcXFwidG9vbFxcXCIpLmlzTG9naW5Db29raWUoY29va2llKSkge1xcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFwicXVhcmtDb29raWVcXFwiLCBjb29raWUpO1xcbiAgICAgICAgICAgICAgICAgICAgaXNyICYmIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6K6+572u5oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9Db29raWXmoLzlvI/plJnor69cXFwiO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6I635Y+W5aSx6LSl5YWx5Lqr5paH5Lu25o2f5Z2PXFxcIjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiAkKFxcXCLmnKrmo4DmtYvliLBUVkJPWOeahENvb2tpZeaWh+S7tlxcXFxu6K+35L2/55So6L+H5ZCO5YaN5bCd6K+VXFxcIikuY29uZmlybSgoKSA9PiB7fSk7XFxuICAgICAgICB9XFxuICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IFxcXCLlpI3liLZDb29raWVcXFwiKSB7XFxuICAgICAgICBsZXQgY29va2llID0gZ2V0SXRlbShcXFwicXVhcmtDb29raWVcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICBpZiAoY29va2llKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJjb3B5Oi8vXFxcIiArIGNvb2tpZTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+acqueZu+W9lVxcXCI7XFxuICAgICAgICB9XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBjbGVhckl0ZW0oXFxcInF1YXJrQ29va2llXFxcIik7XFxuICAgICAgICBpc3IgJiYgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/pgIDlh7rnmbvlvZVcXFwiO1xcbiAgICB9XFxufSwgJC5pbXBvcnRQYXJhbSk7XCJ9XSIsImljb24iOiIiLCJwcm94eSI6IiJ9
Add Comment
Please, Sign In to add comment