Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@集芳阁云搜@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi6ZuG6Iqz6ZiB5LqR5pCcIiwiYXV0aG9yIjoiUiIsInVybCI6Imhpa2VyOi8vZW1wdHkjI2h0dHBzOi8veG4tLXNvLWpiYWl0YW8tY29tLXpyMXo1NTA0YS5kaXpoaS1qZmdzb3UuY29tLyIsInZlcnNpb24iOjIwMjMxMDE0LCJjb2xfdHlwZSI6InRleHRfMSIsImNsYXNzX25hbWUiOiIiLCJ0eXBlIjoidmlkZW8iLCJjbGFzc191cmwiOiIiLCJhcmVhX25hbWUiOiIiLCJhcmVhX3VybCI6IiIsInNvcnRfbmFtZSI6IiIsInllYXJfbmFtZSI6IiIsInNvcnRfdXJsIjoiIiwieWVhcl91cmwiOiIiLCJmaW5kX3J1bGUiOiJqczpcbnZhciBkID0gW107XG5NWV9VUkwgPSBNWV9VUkwucmVwbGFjZSgnaGlrZXI6Ly9lbXB0eSMjJywgJycpO1xuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9yZXBhaXInKSkucnVsZSk7XG52YXIgaHRtbCA9IGd1YXJkKE1ZX1VSTCk7XG5cblxuZC5wdXNoKHtcbiAgICAvL3RpdGxlOiAnPHNwYW4gc3R5bGU9XCJjb2xvcjojZmY2NjAwXCI+PGI+XFx0576O5aW95Y2z5Yi75byA5aeLLi4uXFx0XFx0XFx0PC9iPjwvc3Bhbj4nLFxuICAgIHVybDogXCJoaWtlcjovL2VtcHR5XCIsXG4gICAgcGljX3VybDogJC5yZXF1aXJlKFwiaW1nXCIpLmltZzEsXG4gICAgY29sX3R5cGU6ICdwaWNfMV9jZW50ZXInXG59KTtcblxuaWYgKE1ZX1BBR0UgPT0gMSkge1xuICAgIGQucHVzaCh7XG4gICAgICAgIHRpdGxlOiBcIvCflI1cIixcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKChNWV9IT01FKSA9PiB7XG4gICAgICAgICAgICByZXF1aXJlKCdoaWtlcjovL3BhZ2UvamllbWknKVxuICAgICAgICAgICAgaW5wdXQgPSBlbmNyeXB0RGF0YShpbnB1dClcbiAgICAgICAgICAgIHB1dE15VmFyKCdrZXl3b3JkJywgaW5wdXQpO1xuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2Uvc3M/dXJsPScgKyBNWV9IT01FICsgJy9zZWFyY2gucGhwP2s9JyArIGlucHV0ICsgJ++8hu+8hnA9ZnlwYWdlJztcbiAgICAgICAgfSwgTVlfSE9NRSksXG4gICAgICAgIGRlc2M6ICfnvo7lpb3ljbPliLvlvIDlp4suLi4nLC8v5pCc57Si5YWz6ZSu6K+NXG4gICAgICAgIGNvbF90eXBlOiBcImlucHV0XCIsXG4gICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKCdrZXl3b3JkJywgJycpIHx8IFwiXCIsXG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxudmFyIGxpbmtzID0gcGRmYShodG1sLCBcImJvZHkmJi5saW5rJiZhXCIpO1xuZm9yICh2YXIgaSBpbiBsaW5rcykge1xuICAgIHZhciB0aXRsZSA9IHBkZmgobGlua3NbaV0sICdhJiZUZXh0Jyk7XG4gICAgZC5wdXNoKHtcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08c21hbGw+PGZvbnQgY29sb3I9IzFFOTBGRj4nICsgdGl0bGUgKyAnPC9mb250Pjwvc21hbGw+JyxcbiAgICAgICAgZGVzYzogJycsXG4gICAgICAgIHBpY191cmw6ICcnLFxuICAgICAgICB1cmw6IHBkKGxpbmtzW2ldLCAnYSYmaHJlZicpICsgJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodGl0bGUpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0KCdoaWtlcjovL2hvbWVAJyArIHRpdGxlKSA9PSAnbnVsbCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJ0b2FzdDovL+Wwj+eoi+W6j+S8vOS5juW5tuS4jeWtmOWcqFwiXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBcImhpa2VyOi8vaG9tZS9AXCIgKyB0aXRsZVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0aXRsZSksXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcbiAgICB9KTtcbn07XG5cbmQucHVzaCh7XG4gICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48bWlkZGxlPjxmb250IGNvbG9yPVwicmVkXCI+8J+MgOS7iuaXpeabtOaWsDwvZm9udD48L21pZGRsZT48L2I+JyxcbiAgICAvLzp1cmw6ICd0b2FzdDovL+acieW/l+iAhe+8jOS6i+ern+aIkCcsXG4gICAgdXJsOiAnaGlrZXI6Ly9wYWdlL3NzP3VybD0nICsgTVlfSE9NRSArICcvbmV3bGlzdC5waHDvvJ/vvJ9wPWZ5cGFnZScsXG4gICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbicsLy/nu4Tku7bmoLflvI9cbn0pO1xuXG4vL3ZhciBhY3QgPSBbXCLni4Lpo5lcIixcIuS7luaYr+iwgVwiLCBcIuS6uuS4lumXtFwiXTtcbnZhciBhY3QgPSBKU09OLnBhcnNlKGh0bWwubWF0Y2goL3ZhciByZWNvbW1hbmRsaXN0ID0oLio/KVxcOy8pWzFdKTtcbmZvciAodmFyIGkgaW4gYWN0KSB7XG4gIFxuICByZXF1aXJlKCdoaWtlcjovL3BhZ2UvamllbWknKVxuICAgICAgbGV0ICAgaW5hID0gZW5jcnlwdERhdGEoYWN0W2ldKVxuICAgIGQucHVzaCh7XG4gICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cIiMwMDhCOEJcIj4nICsgYWN0W2ldICsgJzwvZm9udD48L21pZGRsZT48L2I+JyxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL3NzP3VybD0nICsgTVlfSE9NRSArICcvc2VhcmNoLnBocD9rPScgKyBpbmEgKyAn77yG77yGcD1meXBhZ2UnLFxuICAgICAgICAgICAgXG4gICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nLFxuICAgIH0pXG59O1xuXG5zZXRSZXN1bHQoZCkiLCJzZWFyY2hfdXJsIjoiaGlrZXI6Ly9lbXB0eSMjKioiLCJncm91cCI6IuKRoeKdpO+4j+KAjfCflKUiLCJzZWFyY2hGaW5kIjoianM6XG52YXIgZCA9IFtdO1xubGV0IGtleSA9IE1ZX1VSTC5zcGxpdChcIiMjXCIpWzFdO1xucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2ppZW1pJylcbmxldCAgIGluYSA9IGVuY3J5cHREYXRhKGtleSlcbmQucHVzaCh7XG4gICAgdGl0bGU6IFwi54K55oiR5byA5aeL6IGa5ZCI5pCc57SiXCIgKyBrZXksXG4gICAgdXJsOiAnaGlrZXI6Ly9wYWdlL3NzP3VybD1odHRwczovL+Wkh+eUqGpmZy1qYmFpdGFvLWNvbS5qaWZhbmdn5Y675o6JLmNvbS9zZWFyY2gucGhwP2s9JyArIGluYSArICfvvIbvvIZwPWZ5cGFnZScsXG4gICAgZXh0cmE6IHtcbiAgICAgICAgcGFnZVRpdGxlOiBcIuaQnOe0olwiICsga2V5LFxuICAgICAgICBrZXk6IGtleVxuICAgIH1cbn0pO1xuXG5zZXRSZXN1bHQoZCk7IiwiZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsImRldGFpbF9maW5kX3J1bGUiOiIiLCJzZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsInNkZXRhaWxfZmluZF9ydWxlIjoiKiIsInVhIjoibW9iaWxlIiwicHJlUnVsZSI6Ii8vICAgICAgaHR0cHM6Ly9qaWZhbmdnZS5jbHViIiwicGFnZXMiOiJbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuino+aekFwiLFwicGF0aFwiOlwibGF6eVwiLFwicnVsZVwiOlwidmFyIGxhenkgPSAkKCcnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICB2YXIgaHRtbCA9IHBkZmgocmVxdWVzdChpbnB1dCwge30pLCAnYm9keSYmLnBsYXlzb3VyY2UmJmEmJnBsYXlkYXRhJyk7XFxuICAgICAgICBpZiAoaHRtbCkge1xcbiAgICAgICAgICAgIHJldHVybiBodG1sO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5rSX5rSX552h5ZCnJztcXG4gICAgICAgIH0gIFxcbn0pO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfMV9sZWZ0X3BpY1wiLFwibmFtZVwiOlwi5pCc57Si6aG16Z2i5YaF5a65XCIsXCJwYXRoXCI6XCJzc1wiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG4vL2NvbnN0IGhvc3QgPSAnaHR0cHM6Ly93d3cuc3V5aW5nLmxpZmUvaW5kZXgucGhwL3ZvZC9zaG93L2lkLzEuaHRtbCc7XFxuXFxuYWRkTGlzdGVuZXIoXFxcIm9uQ2xvc2VcXFwiLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgbGV0IGtleXMgPSBsaXN0TXlWYXJLZXlzKCk7XFxuICAgIGZvciAobGV0IGl0IG9mIGtleXMpIHtcXG4gICAgICAgIGNsZWFyTXlWYXIoaXQpO1xcbiAgICB9XFxufSkpO1xcblxcbnZhciBnZXRSYW5nZUNvbG9ycyA9IGZ1bmN0aW9uKCkge8KgwqDCoMKgwqDCoMKgXFxuICAgIHJldHVybiAnIycgKyAoJzAwMDAwJyArIChNYXRoLnJhbmRvbSgpICogMHgxMDAwMDAwIDw8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTvCoMKgwqDCoMKgXFxufVxcbmNvbnN0IOS4i+S4gOmhtSA9IFxcXCJwZChodG1sLCAnYTptYXRjaGVzKOS4i+S4gOmhtSkmJmhyZWYnKVxcXCI7XFxuY29uc3QgcGFnZSA9IE1ZX1BBR0U7XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9kdGZsJykpLnJ1bGUpXFxuXFxudmFyIOWumuS9jeS/oeaBryA9IFt7XFxuICAgIOWkp+exu+WumuS9jTogJy52ZmlsdGVyJyxcXG4gICAg5bCP57G7OiAnYm9keSYmYTpub3QoOm1hdGNoZXMo6aaW6aG1fOi1hOiur3xBUFB85LiT6aKYfOekvue+pHzng63mkJx855WZ6KiAfOemj+WIqXzotZ7liql85ZGo6KGofOaOkuihjHzmjqjojZB85pu05aSafOabtOaWsCkpJyxcXG4gICAg6ZO+5o6l5aSE55CGOiAodSkgPT4ge1xcbiAgICAgICAvL2xldCB1cmwgPSB1LnJlcGxhY2UoL3R5cGUoXFxcXC9cXFxcZCspXFxcXC5odG1sLywgJ3Nob3ckMS0tLS0tLS0tLS0tLmh0bWwnKTtcXG4gICAgICAgIGxldCB1cmwgPSB1LnJlcGxhY2UoL3R5cGUvLCAnc2hvdycpO1xcbiAgICAgICAgcmV0dXJuIHVybFxcbiAgICB9XFxufSwge1xcbiAgICDkuIDnuqflrprkvY06ICdib2R5JiYuc29ydGJhciwxOm46bm90KDpoYXMoOm1hdGNoZXMo6aKR6YGTKSkpfHwuc2l0ZS10YWJzJyxcXG5cXG59XVxcblxcbi8vTVlfVVJMPSBob3N0O1xcbk1ZX1VSTCA9IE1ZX1VSTC5yZXBsYWNlKCdoaWtlcjovL2VtcHR5IyMnLCAnJylcXG5sZXQgdHJ1ZV91cmwgPSBnZXRUcnVlbGluayhNWV9SVUxFLnVybCwgTVlfVVJMLCBwYWdlKTtcXG5sb2codHJ1ZV91cmwpXFxuXFxudmFyIGh0bWwgPSByZXF1ZXN0KHRydWVfdXJsKVxcblxcbmlmIChNWV9QQUdFID09IDEpIHtcXG50cnl7XFxuICAgIGQucHVzaCh7ICAgICBcXG4gICAgICAgIHRpdGxlOiBcXFwi8J+UjVxcXCIgKyc8bWlkZGxlPjxmb250IGNvbG9yPSNGRjAwRkY+JytwZGZoKGh0bWwsXFxcIiNjb250ZW50bGlzdCYmc3BhbiYmVGV4dFxcXCIpKyc8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgICAgIHVybDogXFxcIidoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIixcXG4gICAgfSk7XFxufWNhdGNoe31cXG59XFxuXFxuY29uc3QgZGMgPSBkeW5hbWljQ2xhc3Moe1xcbiAgICDliIbnsbvpopzoibI6IGdldFJhbmdlQ29sb3JzKClcXG59KTtcXG5kYy7lvIDlkK/mipjlj6AoZmFsc2UpXFxuZGMu5byA5ZCv5pCc57SiKGZhbHNlKVxcbmRjLuWIm+W7uuWKqOaAgeWIhuexuyjlrprkvY3kv6Hmga8pXFxuXFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGF6eScsIHt9KSkucnVsZSk7XFxuXFxudmFyIHBhcnNlUnVsZSA9IHtcXG4gICAgbGlzdDogJ2JvZHkmJi51Y29udGVudCYmbGknLCAvL+e7n+S4gGl0ZW1cXG4gICAgdGl0bGU6ICcuY3RpdGxlJiZUZXh0JyxcXG4gICAgY29udGVudDogJy52b2R0aW1lJiZUZXh0JyxcXG4gICAgZGVzYzogJy52b2R0aW1lJiZUZXh0JyxcXG4gICAgZGVzYzE6ICcudGltZSYmVGV4dCcsXFxuICAgIGltZzogJy5jb3ZlciYmc3R5bGUnLFxcbiAgICB1cmw6ICdhJiZocmVmJyxcXG4gICAgcmVmOiAnQFJlZmVyZXI9JyxcXG4gICAgaW10OiB0cnVlLFxcbiAgICBiYWNraW1nOiB0cnVlLFxcbn1cXG5cXG5DcmVhdGUuTGlzdChkLCBodG1sLCBwYXJzZVJ1bGUpO1xcbmF1dG9QYWdlKCk7XFxuXFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmkJzntKLliJfooajliJvlu7pcIixcInBhdGhcIjpcImR0ZmxcIixcInJ1bGVcIjpcImpzOlxcbi8qXFxu5LiA57qn5bCB6KOFIFxcbuWKqOaAgeWIhuexuyDliJfooajliJvlu7og6Ieq5Yqo5LiL5LiA6aG1XFxudmVyIDIwMjMxMDA1MDEgMS4wXFxuKi9cXG5cXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9sYXp5Jywge30pKS5ydWxlKTtcXG5cXG52YXIgZ2V0UmFuZ2VDb2xvcnMgPSBmdW5jdGlvbigpIHtcXG4gICAgcmV0dXJuICcjJyArICgnMDAwMDAnICsgKE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAgPDwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xcbn1cXG5cXG5mdW5jdGlvbiBkeW5hbWljQ2xhc3Mob3B0aW9ucykge1xcbiAgICBjb25zdCBvYmogPSB7XFxuICAgICAgICAvL+m7mOiupOWAvFxcbiAgICAgICAgbGF5b3V0OiBcXFwidW5kZWZpbmVkXFxcIixcXG4gICAgICAgIGh0bWw6IFxcXCJlbXB0eVxcXCIsXFxuICAgICAgICBwYWdlOiAwLFxcbiAgICAgICAg5YiG57G76aKc6ImyOiBcXFwiI0ZBNzI5OFxcXCIsXFxuICAgICAgICDmipjlj6A6IFxcXCLigJzigJzigJ3igJ08Yj5cXFwiICsgXFxcIuKIp1xcXCIuZm9udGNvbG9yKFxcXCIjMWFhZDE5XFxcIikgKyBcXFwiPC9iPlxcXCIsXFxuICAgICAgICDlsZXlvIA6IFxcXCLigJzigJzigJ3igJ08Yj5cXFwiICsgXFxcIuKIqFxcXCIuZm9udGNvbG9yKFxcXCIjRkYwMDAwXFxcIikgKyBcXFwiPC9iPlxcXCIsXFxuICAgICAgICBvcGVuOiB0cnVlLFxcbiAgICAgICAgc3RhdGU6IE1ZX1JVTEUudXJsLFxcbiAgICAgICAgc2VhcmNoOiBmYWxzZSxcXG4gICAgICAgIGNsZWFyczogW10sXFxuICAgICAgICBjbGVhcmFsbDogW1xcXCJ5aV9maXJzdHBhZ2VcXFwiXSxcXG4gICAgICAgIGRlYnVnOiBmYWxzZSxcXG5cXG4gICAgICAgIOmihOiuvihwYXJhbSkge1xcbiAgICAgICAgICAgIGlmIChwYXJhbSA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICAgICAgcGFyYW0gPSBbXTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgT2JqZWN0LmtleXMocGFyYW0pLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XFxuICAgICAgICAgICAgICAgIC8vIOWvueavj+S4quWxnuaAp+WQjeaJp+ihjOaTjeS9nFxcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcmFtW3Byb3BlcnR5XTsgLy8g6I635Y+W5bGe5oCn5YC8XFxuICAgICAgICAgICAgICAgIC8vIOWcqOi/memHjOaJp+ihjOaCqOeahOaTjeS9nFxcbiAgICAgICAgICAgICAgICB0aGlzW3Byb3BlcnR5XSA9IHZhbHVlO1xcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cocHJvcGVydHkgKyBcXFwiOlxcXCIgKyB2YWx1ZSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0sXFxuICAgICAgICBldmFsSlNSdWxlKGl0ZW0sIGpzUnVsZSkge1xcbiAgICAgICAgICAgIGxldCBydWxlID0ganNSdWxlLnJlcGxhY2UoXFxcIkBqczpcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgcnVsZSA9IHJ1bGUudHJpbSgpO1xcbiAgICAgICAgICAgIC8vbG9nKCQuc3RyaW5naWZ5KHJ1bGUpKVxcbiAgICAgICAgICAgIGxldCBpbnB1dCA9IGl0ZW07XFxuICAgICAgICAgICAgaWYgKHJ1bGUuc3RhcnRzV2l0aChcXFwiKFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGV2YWwoXFxcInJlc3VsdCA9IFxcXCIgKyBydWxlKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAvKipcXG4gICAgICAgICAgICAgICAgICog6L+Y5Y6f5oiQICQudG9TdHJpbmcoLi4uKSDnmoTmnIDnu4jnu5PmnpzvvIzovr7liLDmnIDnu4jlpITnkIbmlrnlvI/ot5/kuIrpnaLnmoQgaWYg5LiA6Ie055qE55uu55qEXFxuICAgICAgICAgICAgICAgICAqL1xcbiAgICAgICAgICAgICAgICBldmFsKFxcXCJyZXN1bHQgPSBcXFwiICsgXFxcIigoKSA9PiB7XFxcIiArIHJ1bGUgKyBcXFwifSkoKVxcXCIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0IHx8IFxcXCJcXFwiO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGdldFRpdGxlKHNyYywgY2F0ZWdvcnkpIHtcXG4gICAgICAgICAgICBsZXQgdGl0bGUgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICBsZXQgdGl0bGVSdWxlID0gY2F0ZWdvcnkgfHwgXFxcImEmJlRleHRcXFwiO1xcbiAgICAgICAgICAgIGlmICh0aXRsZVJ1bGUuc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlID0gdGhpcy5ldmFsSlNSdWxlKHNyYywgdGl0bGVSdWxlKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB0aXRsZSA9IHBhcnNlRG9tRm9ySHRtbChzcmMsIHRpdGxlUnVsZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiB0aXRsZSB8fCBcXFwiXFxcIjtcXG4gICAgICAgIH0sXFxuICAgICAgICBnZXRVcmwoc3JjLCBjYXRlZ29yeSkge1xcbiAgICAgICAgICAgIGxldCB1cmwgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICBsZXQgdXJsUnVsZSA9IGNhdGVnb3J5LumTvuaOpSB8fCBcXFwiYSYmaHJlZlxcXCI7XFxuICAgICAgICAgICAgaWYgKHVybFJ1bGUuc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHRoaXMuZXZhbEpTUnVsZShzcmMsIHVybFJ1bGUpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHBkKHNyYywgdXJsUnVsZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2F0ZWdvcnku6ZO+5o6l5aSE55CGID09IFxcXCJmdW5jdGlvblxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gY2F0ZWdvcnku6ZO+5o6l5aSE55CGKHVybCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiB1cmwgfHwgXFxcIlxcXCI7XFxuICAgICAgICB9LFxcbiAgICAgICAgaXNOdWxsKHBhcmFtKSB7XFxuICAgICAgICAgICAgaWYgKHBhcmFtID09IG51bGwpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH0sXFxuICAgICAgICBpc0Jvb2xlYW4odmFyaWFibGUpIHtcXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhcmlhYmxlICE9PSBcXFwiYm9vbGVhblxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLlvIDlkK/mipjlj6Dor7fkvKDlhaXluIPlsJTlgLxcXFwiKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LFxcbiAgICAgICAg5riF6ZmkKGxpc3QpIHtcXG4gICAgICAgICAgICBpZiAodGhpcy5pc051bGwobGlzdCkpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChsaXN0LmNvbnN0cnVjdG9yID09IFN0cmluZykge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIua4hemZpOaKpemUmTror7fkvKDliJfooahcXFwiKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdGhpcy5jbGVhcnMgPSBsaXN0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOWFqOa4hShsaXN0KSB7XFxuICAgICAgICAgICAgaWYgKHRoaXMuaXNOdWxsKGxpc3QpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgYyA9IHRoaXMuY2xlYXJhbGw7XFxuICAgICAgICAgICAgbGlzdCA9IGMuY29uY2F0KGxpc3QpO1xcbiAgICAgICAgICAgIHRoaXMuY2xlYXJhbGwgPSBsaXN0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOa6kOeggShpbnB1dCkge1xcbiAgICAgICAgICAgIHRoaXMuaHRtbCA9IGlucHV0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOeVjOmdoihpbnB1dCkge1xcbiAgICAgICAgICAgIHRoaXMubGF5b3V0ID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg6aG156CBKGlucHV0KSB7XFxuICAgICAgICAgICAgdGhpcy5wYWdlID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg54q25oCBKGlucHV0KSB7XFxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IGlucHV0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOW8gOWQr+aQnOe0oihpbnB1dCkge1xcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICAgICAgaW5wdXQgPSB0cnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0aGlzLnNlYXJjaCA9IGlucHV0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOW8gOWQr+aKmOWPoChpbnB1dCkge1xcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICAgICAgaW5wdXQgPSB0cnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0aGlzLmlzQm9vbGVhbihpbnB1dCk7XFxuICAgICAgICAgICAgdGhpcy5vcGVuID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAgc2V0VGl0bGUoaywgaSwgdCkge1xcbiAgICAgICAgICAgIHJldHVybiBrID09IGkgPyBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIHQuZm9udGNvbG9yKHRoaXMu5YiG57G76aKc6ImyKSA6IHQ7XFxuICAgICAgICB9LFxcbiAgICAgICAgYWN0aW9uKG9iaikge1xcbiAgICAgICAgICAgIHJldHVybiBbe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIua4hemZpOeKtuaAgVxcXCIsXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChvYmopID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhvYmopO1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihvYmouc3RhdGUpO1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihcXFwiaGVhZC5jYXRlXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBvYmouYWxsLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBvYmouY2wuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIH0sIG9iaiksXFxuICAgICAgICAgICAgfSwgXTtcXG4gICAgICAgIH0sXFxuICAgICAgICBjaGVja1BhcmFtKCkge1xcbiAgICAgICAgICAgIHZhciBvYmogPSB7fTtcXG4gICAgICAgICAgICBpZiAodGhpcy5wYWdlID09IDAgJiYgdHlwZW9mIHBhZ2UgPT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fkvKDlhaXpobXnoIFcXFwiKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBhZ2UgPT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIG9ialtcXFwi6aG156CBXFxcIl0gPSB0aGlzLnBhZ2U7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIumhteeggVxcXCJdID0gcGFnZTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAodGhpcy5odG1sID09IFxcXCJlbXB0eVxcXCIgJiYgdHlwZW9mIGh0bWwgPT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fkvKDlhaXmupDnoIFcXFwiKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGh0bWwgPT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIG9ialtcXFwi5rqQ56CBXFxcIl0gPSB0aGlzLmh0bWw7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIua6kOeggVxcXCJdID0gaHRtbDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAodGhpcy5sYXlvdXQgPT0gXFxcInVuZGVmaW5lZFxcXCIgJiYgdHlwZW9mIGQgPT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fkvKDlhaXnlYzpnaJcXFwiKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGQgPT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIG9ialtcXFwi55WM6Z2iXFxcIl0gPSB0aGlzLmxheW91dDtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIG9ialtcXFwi55WM6Z2iXFxcIl0gPSBkO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBvYmo7XFxuICAgICAgICB9LFxcbiAgICAgICAg5Yib5bu65Yqo5oCB5YiG57G7KHJ1bGVPYmopIHtcXG4gICAgICAgICAgICBpZiAocnVsZU9iaiA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICAgICAgcnVsZU9iaiA9IFtdO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAvL+WIneWni+WMluWPmOmHj+W8gOWni1xcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtID0gdGhpcy5jaGVja1BhcmFtKCk7XFxuICAgICAgICAgICAgY29uc3QgcGFnZSA9IHBhcmFtLumhteeggTtcXG4gICAgICAgICAgICBjb25zdCBodG1sID0gcGFyYW0u5rqQ56CBO1xcbiAgICAgICAgICAgIGNvbnN0IGQgPSBwYXJhbS7nlYzpnaI7XFxuICAgICAgICAgICAgY29uc3Qg54q25oCBID0gdGhpcy5zdGF0ZTtcXG4gICAgICAgICAgICBjb25zdCBzZWFyY2ggPSB0aGlzLnNlYXJjaDtcXG4gICAgICAgICAgICBjb25zdCBlbXB0eSA9IFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICBjb25zdCDmipjlj6DnirbmgIEgPSB0aGlzLm9wZW47XFxuICAgICAgICAgICAgdmFyIOWxleW8gCA9IHRoaXMu5bGV5byAO1xcbiAgICAgICAgICAgIHZhciDmipjlj6AgPSB0aGlzLuaKmOWPoDtcXG4gICAgICAgICAgICB2YXIg5YWo5riFID0gdGhpcy5jbGVhcmFsbDtcXG4gICAgICAgICAgICB2YXIg5riF6ZmkID0gdGhpcy5jbGVhcnM7XFxuICAgICAgICAgICAgLy/liJ3lp4vljJblj5jph4/nu5PmnZ9cXG4gICAgICAgICAgICBsZXQgaW5pdF9jYXRlID0gbmV3IEFycmF5KDIwKS5maWxsKFxcXCIwXFxcIik7XFxuICAgICAgICAgICAgY29uc3QgZm9sZCA9IGdldE15VmFyKE1ZX1JVTEUuZ3JvdXAsIFxcXCIwXFxcIik7XFxuICAgICAgICAgICAgY29uc3QgY2F0ZV90ZW1wID0gSlNPTi5wYXJzZShcXG4gICAgICAgICAgICAgICAgZ2V0TXlWYXIoXFxcImhlYWQuY2F0ZVxcXCIsIEpTT04uc3RyaW5naWZ5KGluaXRfY2F0ZSkpXFxuICAgICAgICAgICAgKTtcXG4gICAgICAgICAgICBpZiAoc2VhcmNoICYmIHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiJ2hpa2VyOi8vc2VhcmNoP3J1bGU9XFxcIiArIE1ZX1JVTEUudGl0bGUgKyBcXFwiJnM9JytpbnB1dFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi5pCc57Si5YWz6ZSu6K+NXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXCJrZXl3b3JkXFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImtleXdvcmRcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IFtdO1xcbiAgICAgICAgICAgIHJ1bGVPYmouZm9yRWFjaCgoeCkgPT4ge1xcbiAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IFtdO1xcbiAgICAgICAgICAgICAgICBpZiAoeC5qc29uICE9IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgICAgICAgICAgeC5qc29uLm1hcChrID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzLnB1c2goSlNPTi5zdHJpbmdpZnkoaykucmVwbGFjZSgvXlxcXFxbfFxcXFxdJC9nLCAnJykpXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmICh4LuS4gOe6p+WumuS9jSkge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHgu5LiA57qn5a6a5L2NLnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSB0aGlzLmV2YWxKU1J1bGUoaHRtbCwgeC7kuIDnuqflrprkvY0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gcGRmYShodG1sLCB4LuS4gOe6p+WumuS9jSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKHgu5aSn57G75a6a5L2NKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoeC7lpKfnsbvlrprkvY0uc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHRoaXMuZXZhbEpTUnVsZShodG1sLCB4LuWkp+exu+WumuS9jSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBbcGRmYShodG1sLCB4LuWkp+exu+WumuS9jSkuam9pbignXFxcXG4nKV07XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy8tLemineWkluWkhOeQhi0tXFxuICAgICAgICAgICAgICAgIGlmICgoJ+WinuWKoCcgaW4geCkpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh4LuWinuWKoC5jb25zdHJ1Y3RvciA9PSBTdHJpbmcpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB4LuWinuWKoCA9IGV2YWwoeC7lop7liqApO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgc2xpc3QgPSB4LuWinuWKoC5jb25jYXQoc2xpc3QpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmICgoJ+ihpeWFhScgaW4geCkpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh4LuihpeWFhS5jb25zdHJ1Y3RvciA9PSBTdHJpbmcpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB4LuihpeWFhSA9IGV2YWwoeC7ooaXlhYUpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgc2xpc3QgPSBzbGlzdC5jb25jYXQoeC7ooaXlhYUpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vLS3pop3lpJblpITnkIYtLVxcbiAgICAgICAgICAgICAgICB2YXIg5LiA57qnID0gbGlzdC5tYXAoKHMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBzbGlzdCA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoXFxcIuWwj+exu1xcXCIgaW4geCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB4LuWwj+exuyA9IFxcXCJib2R5JiZhOm5vdCg6bWF0Y2hlcyjpppbpobUpKTpub3QoYTpub3QoW2hyZWZdKSlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHgu5bCP57G7LnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNsaXN0ID0gdGhpcy5ldmFsSlNSdWxlKHMsIHgu5bCP57G7KTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpc3QgPSBwZGZhKHMsIHgu5bCP57G7KTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHZhciDlrprkvY0gPSBzbGlzdC5tYXAoKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSB0aGlzLmdldFRpdGxlKGl0ZW0sIHgu5qCH6aKYKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXJsID0gdGhpcy5nZXRVcmwoaXRlbSwgeCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHVybFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaik7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiDlrprkvY07XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAvL2xvZyjkuIDnuqcpXFxuICAgICAgICAgICAgICAgIC8vbG9nKOS4gOe6py5sZW5ndGgpXFxuICAgICAgICAgICAgICAgIGlmICjkuIDnuqcubGVuZ3RoID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNhdGVnb3JpZXMucHVzaCjkuIDnuqcuam9pbihcXFwiXFxcXG5cXFwiKSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICDkuIDnuqcuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3JpZXMucHVzaChpdGVtLmpvaW4oXFxcIixcXFwiKSk7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvL2xvZyhjYXRlZ29yaWVzKVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGlmICjmipjlj6DnirbmgIEpIHtcXG4gICAgICAgICAgICAgICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZm9sZCA9PT0gXFxcIjFcXFwiID8g5oqY5Y+gIDog5bGV5byALFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZShcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvbGQsIHUsIGFsbCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoTVlfUlVMRS5ncm91cCwgZm9sZCA9PT0gXFxcIjFcXFwiID8gXFxcIjBcXFwiIDogXFxcIjFcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qYWxsLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOyovXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDnirbmgIEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIOWFqOa4hVxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IHRoaXMuYWN0aW9uKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiDnirbmgIEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGw6IOWFqOa4hSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsOiDmuIXpmaQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgIGNhdGVnb3JpZXMuZm9yRWFjaCgoY2F0ZWdvcnksIGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyhjYXRlZ29yaWVzKVxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN1Yl9jYXRlZ29yaWVzID0gW107XFxuICAgICAgICAgICAgICAgICAgICAvKmlmICjlsI/nsbvlrprkvY0uaW5jbHVkZXMoXFxcIjtcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcyA9IHBkZmEoY2F0ZWdvcnksIOWwj+exu+WumuS9jS5zcGxpdChcXFwiO1xcXCIpWzBdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yl9jYXRlZ29yaWVzLmxlbmd0aCA9PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMgPSBwZGZhKGNhdGVnb3J5LCDlsI/nsbvlrprkvY0uc3BsaXQoXFxcIjtcXFwiKVsxXSk7XFxuICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ki9cXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKGluZGV4KVxcbiAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMgPSBKU09OLnBhcnNlKGBbJHtjYXRlZ29yeX1dYCk7XFxuICAgICAgICAgICAgICAgICAgICAvLyBzdWJfY2F0ZWdvcmllcyA9IHBkZmEoY2F0ZWdvcnksIOWwj+exu+WumuS9jSk7XFxuICAgICAgICAgICAgICAgICAgICAvL31cXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xldCB0aXRsZSA9IHBkZmgoaXRlbSwgX+Wkp+exu+agh+mimCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IGl0ZW0udGl0bGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yg5o6S6ZmkICE9IFxcXCJ1bmRlZmluZWRcXFwiICYmIOaOkumZpCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSB0aXRsZS5yZXBsYWNlKG5ld1JlZ0V4cCjmjpLpmaQsIFxcXCJnXFxcIiksIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQganNvbiA9ICcnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSBpdGVtLnVybDtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtcyA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVfdGVtcDogY2F0ZV90ZW1wLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJzOiDmuIXpmaQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uOiBqc29uLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IOeKtuaAgSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbGNsZWFyczog5YWo5riFLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xldCB1cmwgPSBwZChpdGVtLCBf5aSn57G76ZO+5o6lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IGl0ZW0udXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmlmICjlpKfnsbvlpITnkIYpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSDkuIDnuqfliIbnsbvlpITnkIYodXJsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSovXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKHVybClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLnNldFRpdGxlKGtleS50b1N0cmluZygpLCBjYXRlX3RlbXBbaW5kZXhdLCB0aXRsZSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKFxcXCJoaWtlcjovL2VtcHR5I25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgocGFyYW1zKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld19jYXRlID0gW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmNsZWFycy5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmFsbGNsZWFycy5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmNhdGVfdGVtcC5mb3JFYWNoKChjYXRlLCBpbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY2F0ZS5wdXNoKGluZGV4ID09PSAwID8gcGFyYW1zLmtleS50b1N0cmluZygpIDogXFxcIjBcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiaGVhZC5jYXRlXFxcIiwgSlNPTi5zdHJpbmdpZnkobmV3X2NhdGUpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmpzb24uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiZHRfXFxcIiArIHBhcmFtcy5qc29uLnR5cGUsIHBhcmFtcy5qc29uLnZhbHVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihwYXJhbXMuc3RhdGUsIHBhcmFtcy5qc29uKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHBhcmFtcyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkID09PSBcXFwiMVxcXCIgfHwg5oqY5Y+g54q25oCBID09IGZhbHNlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMuZm9yRWFjaCgoaXRlbSwga2V5KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBleHRyYXBvcyA9IGZhbHNlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmlmIChpdGVtLmluY2x1ZGVzKCd0eXBlPVxcXCJAZXh0cmFcXFwiJykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYXBvcyA9IHRydWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2coJ+mZhOWKoOWumuS9jScpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0qL1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXh0cmFwb3MpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IHBkZmgoaXRlbSwgXFxcImEmJlRleHRcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yg5o6S6ZmkICE9IFxcXCJ1bmRlZmluZWRcXFwiICYmIOaOkumZpCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShuZXcgUmVnRXhwKOaOkumZpCwgXFxcImdcXFwiKSwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpzb24gPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogcGRmaChpdGVtLCBcXFwiYSYmc3RhdGVcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGRmaChpdGVtLCBcXFwiYSYmdmFsdWVcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ZhciB0aXRsZSA9IHBkZmgoaXRlbSwg5YiG57G75qCH6aKYKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IGl0ZW0udGl0bGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIOaOkumZpCAhPSBcXFwidW5kZWZpbmVkXFxcIiAmJiDmjpLpmaQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UobmV3IFJlZ0V4cCjmjpLpmaQsIFxcXCJnXFxcIiksIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqc29uID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnN3aXRjaCAodHJ1ZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIOWIhuexu+mTvuaOpS5pbmNsdWRlcyhcXFwiQEBAXFxcIik6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHBkZmgoaXRlbSwg5YiG57G76ZO+5o6lLnNwbGl0KFxcXCJAQEBcXFwiKVswXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGRmaChpdGVtLCDliIbnsbvpk77mjqUuc3BsaXQoXFxcIkBAQFxcXCIpWzFdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIOWIhuexu+mTvuaOpS5pbmNsdWRlcyhcXFwiQEBcXFwiKTpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTog5YiG57G76ZO+5o6lLnNwbGl0KFxcXCJAQFxcXCIpWzBdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBkZmgoaXRlbSwg5YiG57G76ZO+5o6lLnNwbGl0KFxcXCJAQFxcXCIpWzFdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSBpdGVtLnVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqc29uID0gcGQoaXRlbSwg5YiG57G76ZO+5o6lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0qL1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IGl0ZW0udXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp2YXIganNvbj3liIbnsbvpk77mjqUuaW5jbHVkZXMoJ0BAQCcpP3tcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6cGRmaChpdGVtLOWIhuexu+mTvuaOpS5zcGxpdCgnQEBAJylbMF0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6cGRmaChpdGVtLOWIhuexu+mTvuaOpS5zcGxpdCgnQEBAJylbMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OnBkKGl0ZW0s5YiG57G76ZO+5o6lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb2495YiG57G76ZO+5o6lLmluY2x1ZGVzKCdAQCcpP3tcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU65YiG57G76ZO+5o6lLnNwbGl0KCdAQCcpWzBdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6cGRmaChpdGVtLOWIhuexu+mTvuaOpS5zcGxpdCgnQEAnKVsxXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH06cGQoaXRlbSzliIbnsbvpk77mjqUpOyovXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtcyA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVfdGVtcDogY2F0ZV90ZW1wLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbjoganNvbixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiDnirbmgIEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxjbGVhcnM6IOWFqOa4hSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLnNldFRpdGxlKGtleS50b1N0cmluZygpLCBjYXRlX3RlbXBbaW5kZXhdLCB0aXRsZSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoXFxcImhpa2VyOi8vZW1wdHlcXFwiICsgXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKHBhcmFtcykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hbGxjbGVhcnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5jYXRlX3RlbXBbcGFyYW1zLmluZGV4XSA9IHBhcmFtcy5rZXkudG9TdHJpbmcoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiaGVhZC5jYXRlXFxcIiwgSlNPTi5zdHJpbmdpZnkocGFyYW1zLmNhdGVfdGVtcCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMuanNvbi5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJkdF9cXFwiICsgcGFyYW1zLmpzb24udHlwZSwgcGFyYW1zLmpzb24udmFsdWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHBhcmFtcy5zdGF0ZSwgcGFyYW1zLmpzb24pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBwYXJhbXMpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgIH07XFxuICAgIG9iai7pooTorr4ob3B0aW9ucyk7XFxuICAgIHJldHVybiBvYmo7XFxufVxcblxcbi8vLueKtuaAgShcXFwidXJsXFxcIilcXG4vLy7nlYzpnaIoZClcXG4vLy7mupDnoIEoeGh0bWwpXFxuLy8u5YWo5riFKFtcXFwiMVxcXCIsIFxcXCIyXFxcIl0pXFxuLy8u5riF6ZmkKClcXG4vLy7lvIDlkK/mipjlj6AoKVxcbi8vLumhteeggShwYWdlKVxcbi8vLuWIm+W7uuWKqOaAgeWIhuexuyjlrprkvY3liJfooagpO1xcblxcbmZ1bmN0aW9uIGdldE9iamZ1YyhvYmopIHtcXG4gICAgY29uc3QgbWV0aG9kcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikuZmlsdGVyKFxcbiAgICAgICAgKG5hbWUpID0+IHR5cGVvZiBvYmpbbmFtZV0gPT09IFxcXCJmdW5jdGlvblxcXCJcXG4gICAgKTtcXG4gICAgaWYgKG1ldGhvZHMubGVuZ3RoID09IDApIHtcXG4gICAgICAgIGNvbnNvbGUubG9nKG9iai50b1N0cmluZygpKTtcXG4gICAgICAgIHJldHVybjtcXG4gICAgfVxcbiAgICBjb25zdCBmb3JtYXR0ZWRTdHJpbmcgPSBtZXRob2RzXFxuICAgICAgICAubWFwKChuYW1lKSA9PiB7XFxuICAgICAgICAgICAgY29uc3QgZm4gPSBvYmpbbmFtZV07XFxuICAgICAgICAgICAgY29uc3QgZm5TdHJpbmcgPSBgJHtuYW1lfTogJHtmbi50b1N0cmluZygpfWA7XFxuICAgICAgICAgICAgY29uc3QgcmVzdG9yZWRGblN0cmluZyA9IGZuU3RyaW5nLnJlcGxhY2UoXFxuICAgICAgICAgICAgICAgIC9cXFxcXFxcXHUoW1xcXFxkXFxcXHddezR9KS9naSxcXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24obWF0Y2gsIGdycCkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoZ3JwLCAxNikpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgKTtcXG4gICAgICAgICAgICByZXR1cm4gcmVzdG9yZWRGblN0cmluZztcXG4gICAgICAgIH0pXFxuICAgICAgICAuam9pbihcXFwiXFxcXG5cXFwiKTtcXG4gICAgY29uc29sZS5sb2coZm9ybWF0dGVkU3RyaW5nKTtcXG59XFxuXFxuLypcXG52ZXIgMjAyMy0wNi0xNiAgMS4wXFxuKi9cXG52YXIg54q25oCBID1cXG4gICAgdHlwZW9mIOeKtuaAgeagh+iusCAhPSBcXFwidW5kZWZpbmVkXFxcIiAmJiDnirbmgIHmoIforrAgIT0gXFxcIlxcXCIgPyDnirbmgIHmoIforrAgOiBNWV9SVUxFLnVybDtcXG5cXG5sZXQgZHRfZGVidWcgPSBmYWxzZTtcXG5cXG5hZGRMaXN0ZW5lcihcXG4gICAgXFxcIm9uQ2xvc2VcXFwiLFxcbiAgICAkLnRvU3RyaW5nKCgpID0+IHt9KVxcbik7XFxuXFxudmFyIENyZWF0ZSA9IHtcXG4gICAgc3BhZ2U6IHtcXG4gICAgICAgIGdldDogZnVuY3Rpb24oKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHN0b3JhZ2UwLmdldE15VmFyKFxcXCJzcGFnZVxcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgIH0sXFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHVybCkge1xcbiAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJzcGFnZVxcXCIsIHVybCk7XFxuICAgICAgICB9LFxcbiAgICB9LFxcbiAgICBuZXh0UGFnZTogZnVuY3Rpb24oKSB7XFxuICAgICAgICB2YXIgcmVzdWx0ID0gZmFsc2U7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHZhciBuZXh0ID0gZXZhbCjkuIvkuIDpobUpO1xcbiAgICAgICAgICAgIC8vbG9nKCduOicrbmV4dClcXG4gICAgICAgICAgICBpZiAobmV4dCA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+S4i+S4gOmhtemTvuaOpeS4uuepuicpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XFxuICAgICAgICAgICAgaWYgKHRydWVfdXJsID09IG5leHQpIHtcXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIC8vbG9nKFxcXCLlj6/og73kuI3lrZjlnKjkuIvkuIDpobXmiJbogIXkuIvkuIDpobXlrprkvY3mnInpl67pophcXFwiKTtcXG4gICAgICAgICAgICBsb2coXFxcIumUmeivr+S/oeaBrzpcXFwiICsgZS5tZXNzYWdlKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICgobmV4dCA9PSBcXFwiXFxcIiB8fCBuZXh0ID09IHVuZGVmaW5lZCkgJiYgcGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgbmV4dCA9IHRydWVfdXJsO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAvL3Jlc3VsdD1mYWxzZTtcXG4gICAgICAgICAgICBuZXh0ID0gZ2V0TXlWYXIo54q25oCBKTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKCdsJyt0cnVlX3VybClcXG4gICAgICAgIC8vbG9nKCduJytuZXh0KVxcbiAgICAgICAgaWYgKHBhZ2UgIT0gMSkge1xcbiAgICAgICAgICAgIGlmICh0cnVlX3VybCA9PSBuZXh0ICYmICFyZXN1bHQpIHtcXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gcmVzdWx0O1xcbiAgICAgICAgLy9wdXRNeVZhcijnirbmgIEsIG5leHQpO1xcbiAgICB9LFxcbiAgICBnZXRCYWNrSW1hZ2U6IGZ1bmN0aW9uKGltZ3VybCkge1xcbiAgICAgICAgdmFyIHJlc3VsdCA9IGltZ3VybDtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgcmVzdWx0ID0gL3VybCg/OlxcXFxzKyk/XFxcXCgoLio/KVxcXFwpL2dcXG4gICAgICAgICAgICAgICAgLmV4ZWMoaW1ndXJsKVsxXVxcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvKCd8XFxcInwmcXVvdDspL2dtLCBcXFwiXFxcIik7XFxuICAgICAgICB9IGNhdGNoIHt9XFxuICAgICAgICByZXR1cm4gcmVzdWx0O1xcbiAgICB9LFxcbiAgICBodHRwSGFuZGxlOiBmdW5jdGlvbihpbnB1dCkge1xcbiAgICAgICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoXFxcImh0dHBcXFwiKSkge1xcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcXG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQuc3RhcnRzV2l0aChcXFwiLy9cXFwiKSkge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaHR0cHM6XFxcIiArIGlucHV0O1xcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5zdGFydHNXaXRoKFxcXCIvXFxcIikpIHtcXG4gICAgICAgICAgICByZXR1cm4gTVlfSE9NRSArIGlucHV0O1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBpbWdIYW5kbGU6IGZ1bmN0aW9uKGl0ZW0sIHJ1bGUpIHtcXG4gICAgICAgIHZhciBpbWcgPSBcXFwiXFxcIjtcXG4gICAgICAgIGlmIChydWxlLmltZy5zdGFydHNXaXRoKFxcXCJwZFxcXCIpKSB7XFxuICAgICAgICAgICAgaW1nID0gZXZhbChydWxlLmltZyk7XFxuICAgICAgICB9IGVsc2UgaWYgKHJ1bGUuYmFja2ltZykge1xcbiAgICAgICAgICAgIGltZyA9IHBkZmgoaXRlbSwgcnVsZS5pbWcpO1xcbiAgICAgICAgICAgIGltZyA9IHRoaXMuZ2V0QmFja0ltYWdlKGltZyk7XFxuICAgICAgICAgICAgaW1nID0gdGhpcy5odHRwSGFuZGxlKGltZyk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGltZyA9IHBkZmgoaXRlbSwgcnVsZS5pbWcpO1xcbiAgICAgICAgICAgIGlmICghaW1nLnN0YXJ0c1dpdGgoXFxcImh0dHBcXFwiKSkge1xcbiAgICAgICAgICAgICAgICBpbWcgPSBwZChpdGVtLCBydWxlLmltZyk7XFxuICAgICAgICAgICAgICAgIGltZyA9IHRoaXMuaHR0cEhhbmRsZShpbWcpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBpbWcgKyBydWxlLnJlZjtcXG4gICAgfSxcXG4gICAgdXJsSGFuZGxlOiBmdW5jdGlvbihpdGVtLCBydWxlKSB7XFxuICAgICAgICB2YXIgaHJlZiA9IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKHJ1bGUudXJsLnN0YXJ0c1dpdGgoXFxcInBkXFxcIikpIHtcXG4gICAgICAgICAgICBocmVmID0gZXZhbChydWxlLnVybCk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGhyZWYgPSBwZChpdGVtLCBydWxlLnVybCk7XFxuICAgICAgICB9XFxuICAgICAgICBocmVmID0gcnVsZS5pbXQgPyBocmVmICsgXFxcIiNpbW1lcnNpdmVUaGVtZSNcXFwiIDogaHJlZjtcXG4gICAgICAgIHJldHVybiBocmVmO1xcbiAgICB9LFxcbiAgICBzZXRDb250ZW50OiBmdW5jdGlvbihpdGVtLCBpbnB1dCkge1xcbiAgICAgICAgbGV0IG91dHB1dCA9IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKGlucHV0ID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aChcXFwicGRcXFwiKSkge1xcbiAgICAgICAgICAgIG91dHB1dCA9IGV2YWwoaW5wdXQpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBvdXRwdXQgPSBwZGZoKGl0ZW0sIGlucHV0KTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XFxuICAgIH0sXFxuICAgIHJlZnJlc2g6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgYWRkTGlzdGVuZXIoXFxuICAgICAgICAgICAgXFxcIm9uUmVmcmVzaFxcXCIsXFxuICAgICAgICAgICAgJC50b1N0cmluZygodSkgPT4ge1xcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKFxcXCJ5aWxpc3RcXFwiKTtcXG4gICAgICAgICAgICAgICAgLy92YXIgcCA9IHN0b3JhZ2UwLmdldE15VmFyKCdzcGFnZScsICcnKTtcXG4gICAgICAgICAgICAgICAgLy9wdXRNeVZhcih1LCBwKTtcXG4gICAgICAgICAgICB9LCDnirbmgIEpXFxuICAgICAgICApO1xcbiAgICB9LFxcbiAgICBqc29uTGlzdDogZnVuY3Rpb24oYXJyLCBqc29uLCBydWxlKSB7XFxuICAgICAgICBpZiAoanNvbi5jb25zdHJ1Y3RvciAhPSBPYmplY3QpIHtcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICBqc29uID0gSlNPTi5wYXJzZShqc29uKTtcXG4gICAgICAgICAgICB9IGNhdGNoIHt9XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgZGVidWcgPSBydWxlLmRlYnVnID8gcnVsZS5kZWJ1ZyA6IGZhbHNlO1xcbiAgICAgICAganNvbltydWxlLmxpc3RdLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICBpZiAoZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgbG9nKGl0ZW0pXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciBpbWcgPSBldmFsKHJ1bGUuaW1nKSArIHJ1bGUucmVmO1xcbiAgICAgICAgICAgIHZhciBocmVmID0gZXZhbChydWxlLnVybCk7XFxuICAgICAgICAgICAgaHJlZiA9IHJ1bGUuaW10ID8gaHJlZiArIFxcXCIjaW1tZXJzaXZlVGhlbWUjXFxcIiA6IGhyZWY7XFxuICAgICAgICAgICAgdmFyIGxhenkgPSBydWxlLmxhenkgPyBydWxlLmxhenkgOiBcXFwiXFxcIjtcXG4gICAgICAgICAgICB2YXIgZGQgPSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBldmFsKHJ1bGUudGl0bGUpLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBldmFsKHJ1bGUuZGVzYyksXFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGV2YWwocnVsZS5jb250ZW50KSxcXG4gICAgICAgICAgICAgICAgcGljX3VybDogaW1nLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5IyNcXFwiICsgaHJlZixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IHJ1bGUuY29sX3R5cGUsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICB9O1xcblxcbiAgICAgICAgICAgIGlmIChsYXp5ICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGRkW1xcXCJ1cmxcXFwiXSA9IGhyZWYgKyBsYXp5O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBhcnIucHVzaChkZCk7XFxuICAgICAgICB9KTtcXG4gICAgfSxcXG4gICAgcnVsZUxpc3Q6IGZ1bmN0aW9uKGFyciwgaHRtbCwgcnVsZSkge1xcbiAgICAgICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsIHJ1bGUubGlzdCk7XFxuICAgICAgICBsaXN0LmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSB0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS50aXRsZSk7XFxuICAgICAgICAgICAgdmFyIGRlc2MgPSB0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS5kZXNjKTtcXG4gICAgICAgICAgICB2YXIgaW1nID0gdGhpcy5pbWdIYW5kbGUoaXRlbSwgcnVsZSk7XFxuICAgICAgICAgICAgdmFyIHVybCA9IHRoaXMudXJsSGFuZGxlKGl0ZW0sIHJ1bGUpO1xcbiAgICAgICAgICAgIHZhciBjb250ZW50ID0gdGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUuY29udGVudCk7XFxuICAgICAgICAgICAgdmFyIGxhenkgPSBydWxlLmxhenkgPyBydWxlLmxhenkgOiBcXFwiXFxcIjtcXG4gICAgICAgICAgICB2YXIgZGQgPSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgZGVzYzogZGVzYyxcXG4gICAgICAgICAgICAgICAgcGljX3VybDogaW1nLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5IyNcXFwiICsgdXJsLFxcbiAgICAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50LFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogcnVsZS5jb2xfdHlwZSxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgaWYgKGxhenkgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgZGRbXFxcInVybFxcXCJdID0gdXJsICsgbGF6eTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgYXJyLnB1c2goZGQpO1xcbiAgICAgICAgfSk7XFxuICAgIH0sXFxuICAgIExpc3Q6IGZ1bmN0aW9uKGFyciwgaHRtbCwgcnVsZSwgcGFyYW0pIHtcXG4gICAgICAgIHBhcmFtID0gcGFyYW0gPyBwYXJhbSA6IHt9O1xcbiAgICAgICAgdmFyIGF1dG8gPSBwYXJhbS5hdXRvID8gcGFyYW0uYXV0byA6IGZhbHNlO1xcbiAgICAgICAgdmFyIHNob3cgPSBwYXJhbS5zaG93ID8gcGFyYW0uc2hvdyA6IGZhbHNlO1xcbiAgICAgICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgIC8vdGhpcy5zcGFnZS5zZXQodHJ1ZV91cmwpO1xcbiAgICAgICAgfVxcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XFxuICAgICAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgcnVsZS5saXN0KTtcXG4gICAgICAgIC8vbG9nKHRoaXMubmV4dFBhZ2UoKSlcXG4gICAgICAgIGlmICgoc3RvcmFnZTAuZ2V0TXlWYXIoJ3lpX2lzbmV4dCcsICd0JykgPT0gJ3QnICYmIGxpc3QubGVuZ3RoID4gMCkgfHwgcGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgbGlzdC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0oXFxcInBhZ2VudW1cXFwiKTtcXG4gICAgICAgICAgICAgICAgZGVsZXRlSXRlbShcXFwicGFnZWxpbmVcXFwiKTtcXG4gICAgICAgICAgICAgICAgdmFyIGlkID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgIHZhciBjbHMgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gdGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUudGl0bGUpO1xcbiAgICAgICAgICAgICAgICB2YXIgZGVzYyA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmRlc2MpO1xcbiAgICAgICAgICAgICAgICB2YXIgZGVzYzEgPSB0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS5kZXNjMSk7XFxudmFyIGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTsgLy8g5Yib5bu65LiA5LiqRGF0ZeWvueixoe+8jOihqOekuuW9k+WJjeaXpeacn+WSjOaXtumXtFxcbnZhciB5ZWFyID0gY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKTsgLy8g6I635Y+W5bm05Lu9XFxudmFyIG1vbnRoID0gY3VycmVudERhdGUuZ2V0TW9udGgoKSArIDE7IC8vIOiOt+WPluaciOS7ve+8iOazqOaEj+aciOS7veaYr+S7jjDlvIDlp4vorqHmlbDvvIzmiYDku6XopoHliqAx77yJXFxudmFyIGRhdGUgPSBjdXJyZW50RGF0ZS5nZXREYXRlKCk7IC8vIOiOt+WPluaXpeacn1xcbnZhciBmb3JtYXR0ZWREYXRlID0geWVhciArIFxcXCItXFxcIiArIG1vbnRoICsgXFxcIi1cXFwiICsgZGF0ZTsgLy8g55Sf5oiQ5qC85byP5YyW55qE5pel5pyf5a2X56ym5LiyXFxuICAgICAgICAgICAgICAgIHZhciBkZXNjMiA9IGRlc2MxP2Rlc2MxOmZvcm1hdHRlZERhdGU7XFxuICAgICAgICAgICAgICAgIHZhciBpbWcgPSB0aGlzLmltZ0hhbmRsZShpdGVtLCBydWxlKTtcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IHRoaXMudXJsSGFuZGxlKGl0ZW0sIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmNvbnRlbnQpO1xcbiAgICAgICAgICAgICAgICBpZiAoaSA9PSBsaXN0Lmxlbmd0aCAtIDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlkID0gXFxcImxhc3RpZF9cXFwiICsgcGFnZTtcXG4gICAgICAgICAgICAgICAgICAgIGNscyA9IFxcXCJsYXN0bWFya1xcXCI7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHNtYWxsPjxmb250IGNvbG9yPWdyZXk+Jyt0aXRsZSsnPC9mb250Pjwvc21hbGw+JyxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6ICfij7AnICsgZGVzYyArICdcXFxcdFxcXFx0XFxcXHRcXFxcdPCfk4YnICsgZGVzYzIsXFxuICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHVybCArIGxhenksXFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50LFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IHJ1bGUuY29sX3R5cGUsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbHM6IGNscyxcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBpZiAoaSA9PSBsaXN0Lmxlbmd0aCAtIDEgJiYgc2hvdykge1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcXFwicGFnZWxpbmVcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLigJzigJzigJ3igJ08c21hbGw+5Yqg6L295LitLi4uPC9zbWFsbD5cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFxcXCJwYWdlbnVtXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdXBkYXRlSXRlbShcXFwicGFnZW51bVxcXCIsIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+PHNtYWxsPuWIsOW6leS6hjwvc21hbGw+PC9mb250PicsXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFxcXCJsYXN0XFxcIixcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PSAwICYmIHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibGluZVxcXCIsXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+PHNtYWxsPuaXoOWGheWuuTwvc21hbGw+PC9mb250PicsXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge30sXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAodGhpcy5uZXh0UGFnZSgpKSB7XFxuICAgICAgICAgICAgLy9sb2coJ3QnKTtcXG4gICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcigneWlfaXNuZXh0JywgJ3QnKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgLy9sb2coJ2YnKTtcXG4gICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcigneWlfaXNuZXh0JywgJ2YnKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChhdXRvKSB7XFxuICAgICAgICAgICAgLy9jcmVhdGVOZXh0UGFnZSgpO1xcbiAgICAgICAgICAgIGF1dG9QYWdlKCk7XFxuICAgICAgICB9XFxuICAgIH0sXFxufTtcXG5cXG52YXIgZXh0TWV0aG9kID0ge1xcbiAgICBUb1BhcmFtczogZnVuY3Rpb24oKSB7XFxuICAgICAgICB2YXIganNvbiA9IGFyZ3VtZW50c1swXTtcXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhqc29uKVxcbiAgICAgICAgICAgIC5tYXAoKGtleSkgPT4ga2V5ICsgXFxcIj1cXFwiICsganNvbltrZXldKVxcbiAgICAgICAgICAgIC5qb2luKFxcXCImXFxcIik7XFxuICAgIH0sXFxuICAgIHVybFBhcnNlOiBmdW5jdGlvbih1KSB7XFxuICAgICAgICB2YXIgZGljdCA9IHt9O1xcbiAgICAgICAgZGljdC5Tb3VyY2UgPSB1O1xcbiAgICAgICAgbGV0IHBhcmFtcyA9ICh1cmwpID0+IHtcXG4gICAgICAgICAgICBsZXQgcXVlcnlQYXJhbXMgPSB7fTtcXG4gICAgICAgICAgICBsZXQgcmVnID0gLyhbXj89Jl0rKT0oW14/PSZdKykvZztcXG4gICAgICAgICAgICB1cmwucmVwbGFjZShyZWcsIGZ1bmN0aW9uKCkge1xcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc1thcmd1bWVudHNbMV1dID0gYXJndW1lbnRzWzJdO1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiBxdWVyeVBhcmFtcztcXG4gICAgICAgIH07XFxuICAgICAgICB2YXIgamF2YVVybCA9IEphdmFJbXBvcnRlcihqYXZhLm5ldC5VUkwpO1xcbiAgICAgICAgd2l0aChqYXZhVXJsKSB7XFxuICAgICAgICAgICAgdmFyIHVybCA9IG5ldyBVUkwodSk7XFxuICAgICAgICAgICAgZGljdC5Qcm90b2NvbCA9IHVybC5nZXRQcm90b2NvbCgpO1xcbiAgICAgICAgICAgIGRpY3QuSG9zdCA9IHVybC5nZXRIb3N0KCk7XFxuICAgICAgICAgICAgZGljdC5Qb3J0ID0gdXJsLmdldFBvcnQoKTtcXG4gICAgICAgICAgICBkaWN0LkZpbGUgPSB1cmwuZ2V0RmlsZSgpO1xcbiAgICAgICAgICAgIGRpY3QuUGF0aCA9IHVybC5nZXRQYXRoKCk7XFxuICAgICAgICAgICAgZGljdC5SZWYgPSB1cmwuZ2V0UmVmKCk7XFxuICAgICAgICAgICAgZGljdC5Ib3N0cyA9IGAke2RpY3QuUHJvdG9jb2x9Oi8vJHt1cmwuZ2V0SG9zdCgpfWA7XFxuICAgICAgICB9XFxuICAgICAgICBkaWN0LlBhcmFtcyA9IHBhcmFtcyh1KTtcXG4gICAgICAgIHJldHVybiBkaWN0O1xcbiAgICB9LFxcbiAgICBpc0VxdWFsOiBmdW5jdGlvbih4LCB5KSB7XFxuICAgICAgICBjb25zdCBvayA9IE9iamVjdC5rZXlzLFxcbiAgICAgICAgICAgIHR4ID0gdHlwZW9mIHgsXFxuICAgICAgICAgICAgdHkgPSB0eXBlb2YgeTtcXG4gICAgICAgIHJldHVybiB4ICYmIHkgJiYgdHggPT09IFxcXCJvYmplY3RcXFwiICYmIHR4ID09PSB0eSA/XFxuICAgICAgICAgICAgb2soeCkubGVuZ3RoID09PSBvayh5KS5sZW5ndGggJiZcXG4gICAgICAgICAgICBvayh4KS5ldmVyeSgoa2V5KSA9PiB0aGlzLmlzRXF1YWwoeFtrZXldLCB5W2tleV0pKSA6XFxuICAgICAgICAgICAgeCA9PT0geTtcXG4gICAgfSxcXG4gICAgZmluZERpZmZlcmVudEluZGV4OiBmdW5jdGlvbihzdHIxLCBzdHIyKSB7XFxuICAgICAgICBjb25zdCBkaWZmQ2hhcnMgPSBbXTtcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyMi5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIGlmIChzdHIxW2ldICE9PSBzdHIyW2ldKSB7XFxuICAgICAgICAgICAgICAgIGRpZmZDaGFycy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxcbiAgICAgICAgICAgICAgICAgICAgczE6IHN0cjFbaV0sXFxuICAgICAgICAgICAgICAgICAgICBzMjogc3RyMltpXSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGRpZmZDaGFycztcXG4gICAgfSxcXG4gICAgcmVwbGFjZUNoYXJBdDogZnVuY3Rpb24oc3RyLCBpbmRleCwgcmVwbGFjZW1lbnQpIHtcXG4gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gc3RyLmxlbmd0aCkge1xcbiAgICAgICAgICAgIHJldHVybiBzdHI7XFxuICAgICAgICB9XFxuICAgICAgICAvL2xvZyhpbmRleClcXG4gICAgICAgIGNvbnN0IGFyciA9IHN0ci5zcGxpdChcXFwiXFxcIik7XFxuICAgICAgICBhcnJbaW5kZXhdID0gcmVwbGFjZW1lbnQ7XFxuICAgICAgICByZXR1cm4gYXJyLmpvaW4oXFxcIlxcXCIpO1xcbiAgICB9LFxcbiAgICBnZXRPYmplY3RLZXlzRGlmZjogZnVuY3Rpb24ob2JqMSwgb2JqMikge1xcbiAgICAgICAgY29uc3QgZGlmZmVyZW50S2V5cyA9IFtdO1xcbiAgICAgICAgZm9yIChsZXQga2V5IGluIG9iajEpIHtcXG4gICAgICAgICAgICBpZiAoIW9iajIuaGFzT3duUHJvcGVydHkoa2V5KSB8fCBvYmoxW2tleV0gIT09IG9iajJba2V5XSkge1xcbiAgICAgICAgICAgICAgICBkaWZmZXJlbnRLZXlzLnB1c2goa2V5KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gb2JqMikge1xcbiAgICAgICAgICAgIGlmICghb2JqMS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XFxuICAgICAgICAgICAgICAgIGRpZmZlcmVudEtleXMucHVzaChrZXkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkaWZmZXJlbnRLZXlzO1xcbiAgICB9LFxcbiAgICBnZXROZXh0VXJsOiBmdW5jdGlvbihzb3VyY2UsIHRhcmdldCwgcGFyYW1zKSB7XFxuICAgICAgICB2YXIgdTEgPSB0aGlzLnVybFBhcnNlKHNvdXJjZSk7XFxuICAgICAgICB2YXIgdTIgPSB0aGlzLnVybFBhcnNlKHRhcmdldCk7XFxuICAgICAgICB2YXIgcGEgPSB1bmRlZmluZWQ7XFxuICAgICAgICBpZiAodHlwZW9mIHBhcmFtcyA9PSBcXFwib2JqZWN0XFxcIikge1xcbiAgICAgICAgICAgIHBhID0gcGFyYW1zLmhhc093blByb3BlcnR5KFxcXCLnibnlvoFcXFwiKSA/IHBhcmFtcy7nibnlvoEgOiB1bmRlZmluZWQ7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgbmV4dHVybCA9IHNvdXJjZTtcXG4gICAgICAgIHZhciBjYSA9IE9iamVjdC5rZXlzKHUyLlBhcmFtcykubGVuZ3RoID09IDAgPyBcXFwiXFxcIiA6IFxcXCI/XFxcIjtcXG4gICAgICAgIGlmIChwYSAhPSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICB2YXIgcnMgPSBTdHJpbmcodTIuUGF0aCkucmVwbGFjZShuZXcgUmVnRXhwKHBhKSwgXFxcIiQxZnlwYWdlXFxcIik7XFxuICAgICAgICAgICAgbmV4dHVybCA9IHUyLkhvc3RzICsgcnMgKyBjYSArIHRoaXMuVG9QYXJhbXModTIuUGFyYW1zKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaWYgKHRoaXMuaXNFcXVhbCh1MS5QYXJhbXMsIHUyLlBhcmFtcykpIHtcXG4gICAgICAgICAgICAgICAgaWYgKGR0X2RlYnVnKSB7XFxuICAgICAgICAgICAgICAgICAgICBsb2codTEuUGF0aCk7XFxuICAgICAgICAgICAgICAgICAgICBsb2codTIuUGF0aCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdmFyIGRmID0gdGhpcy5maW5kRGlmZmVyZW50SW5kZXgoU3RyaW5nKHUxLlBhdGgpLCBTdHJpbmcodTIuUGF0aCkpO1xcbiAgICAgICAgICAgICAgICBpZiAoZHRfZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhkZik7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKGRmLmxlbmd0aCA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgcmUgPSBkZlswXS5pbmRleDtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBmID0gZGYuZmlsdGVyKCh4KSA9PiAvXFxcXGQrLy50ZXN0KHguczIpKTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciByZSA9IGZbMF0uaW5kZXg7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdmFyIGVxID0gdGhpcy5yZXBsYWNlQ2hhckF0KFN0cmluZyh1Mi5QYXRoKSwgcmUsIFxcXCJmeXBhZ2VcXFwiKTtcXG4gICAgICAgICAgICAgICAgbmV4dHVybCA9IHUyLkhvc3RzICsgZXEgKyBjYSArIHRoaXMuVG9QYXJhbXModTIuUGFyYW1zKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB2YXIgZXAgPSB0aGlzLmdldE9iamVjdEtleXNEaWZmKHUxLlBhcmFtcywgdTIuUGFyYW1zKVxcbiAgICAgICAgICAgICAgICBpZiAoZXAubGVuZ3RoID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHUxLlBhcmFtc1tlcFswXV0gPSAnZnlwYWdlJ1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKGVwKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB2YXIgZXEgPSBTdHJpbmcodTEuUGF0aCkucmVwbGFjZSgvXFxcXGQrLywgXFxcImZ5cGFnZVxcXCIpO1xcbiAgICAgICAgICAgICAgICBuZXh0dXJsID0gdTEuSG9zdHMgKyBlcSArIGNhICsgdGhpcy5Ub1BhcmFtcyh1MS5QYXJhbXMpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKCduZXh0OicrbmV4dHVybClcXG4gICAgICAgIHJldHVybiBuZXh0dXJsO1xcbiAgICB9LFxcbn07XFxuXFxuZnVuY3Rpb24gZ2V0VHJ1ZWxpbmsobWFyaywgdXJsLCBwYWdlKSB7XFxuICAgIHZhciBwID0gZ2V0TXlWYXIobWFyaywgdXJsKS5yZXBsYWNlKFxcXCJmeXBhZ2VcXFwiLCBwYWdlKTtcXG4gICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgcmV0dXJuIGdldE15VmFyKFxcXCJ5aV9maXJzdHBhZ2VcXFwiLCBwKTtcXG4gICAgfSBlbHNlIGlmIChwICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICByZXR1cm4gcDtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiB1cmw7XFxuICAgIH1cXG59XFxuLy/mnoTlu7pcXG5mdW5jdGlvbiBjcmVhdGVOZXh0UGFnZSgpIHtcXG4gICAgbGV0IHN0YXJ0bnVtID0gMTtcXG4gICAgdmFyIG9iaiA9IGFyZ3VtZW50c1swXTtcXG4gICAgaWYgKHRydWVfdXJsICE9IGdldE15VmFyKFxcXCJ5aV9wYWdldXJsXFxcIiwgXFxcIlxcXCIpKSB7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJ5aV9wYWdldXJsXFxcIik7XFxuICAgIH1cXG4gICAgaWYgKHBhZ2UgPT0gc3RhcnRudW0gJiYgZ2V0TXlWYXIoXFxcInlpX3BhZ2V1cmxcXFwiKSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgcHV0TXlWYXIoXFxcInlpX2ZpcnN0cGFnZVxcXCIsIHRydWVfdXJsKTtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIG5leHQgPSBldmFsKOS4i+S4gOmhtSk7XFxuICAgICAgICAgICAgLy9sb2coXFxcIm5leHRcXFwiKTtcXG4gICAgICAgICAgICAvL2xvZyhuZXh0KTtcXG4gICAgICAgIH0gY2F0Y2gge1xcbiAgICAgICAgICAgIGxvZyhcXFwi5Y+v6IO95LiN5a2Y5Zyo5LiL5LiA6aG15oiW6ICF5LiL5LiA6aG15a6a5L2N5pyJ6Zeu6aKYXFxcIik7XFxuICAgICAgICAgICAgbmV4dCA9IFxcXCJcXFwiO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKG5leHQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICB2YXIgbnh1cmwgPSBleHRNZXRob2QuZ2V0TmV4dFVybCh0cnVlX3VybCwgbmV4dCwgb2JqKTtcXG4gICAgICAgICAgICAvL2xvZyhcXFwibnh1cmw6XFxcIiArIG54dXJsKTtcXG4gICAgICAgICAgICBwdXRNeVZhcijnirbmgIEsIG54dXJsKTtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwieWlfcGFnZXVybFxcXCIsIG54dXJsKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBhdXRvUGFnZSgpIHtcXG4gICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgcHV0TXlWYXIoXFxcInlpX2ZpcnN0cGFnZVxcXCIsIHRydWVfdXJsKTtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgdmFyIG5leHQgPSBldmFsKOS4i+S4gOmhtSk7XFxuICAgICAgICAvL2xvZyhcXFwibmV4dFxcXCIpO1xcbiAgICAgICAgLy9sb2coJ25leHQ6JytuZXh0KTtcXG4gICAgfSBjYXRjaCB7XFxuICAgICAgICBsb2coXFxcIuWPr+iDveS4jeWtmOWcqOS4i+S4gOmhteaIluiAheS4i+S4gOmhteWumuS9jeaciemXrumimFxcXCIpO1xcbiAgICAgICAgbmV4dCA9IFxcXCJcXFwiO1xcbiAgICB9XFxuICAgIGlmIChuZXh0ICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICBwdXRNeVZhcijnirbmgIEsIG5leHQpO1xcbiAgICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5a2Y5YKoY29va2llXCIsXCJwYXRoXCI6XCJyZXBhaXJcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkb2N1bWVudCA9IHt9O1xcbnZhciB3aW5kb3cgPSB7XFxuICAgIGxvY2F0aW9uOiB7XFxuICAgICAgICByZWxvYWQ6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgICAgIHJldHVybjtcXG4gICAgICAgIH1cXG4gICAgfVxcbn07XFxuXFxuLy8g5a6a5LmJ5LiA5Liq5a+56LGh55So5LqO5a2Y5YKoIGNvb2tpZSDlkI3np7DlkozlgLznmoTplK7lgLzlr7lcXG52YXIgY29va2llcyA9IHt9O1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShkb2N1bWVudCwgJ2Nvb2tpZScsIHtcXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGNvb2tpZXMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9PSR7dmFsdWV9YCkuam9pbignOyAnKTtcXG4gICAgfSxcXG4gICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xcbiAgICAgICAgdmFyIGxpc3QgPSBbXTtcXG4gICAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcygnOycpKSB7XFxuICAgICAgICAgICAgbGlzdCA9IHZhbHVlLnNwbGl0KCc7Jyk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGxpc3QgPSBbdmFsdWVdO1xcbiAgICAgICAgfVxcbiAgICAgICAgbGlzdC5mb3JFYWNoKHggPT4ge1xcbiAgICAgICAgICAgIHZhciBpbmRleCA9IHguaW5kZXhPZihcXFwiPVxcXCIpO1xcbiAgICAgICAgICAgIHZhciBrZXkgPSB4LnN1YnN0cmluZygwLCBpbmRleCkudHJpbSgpO1xcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHguc3Vic3RyaW5nKGluZGV4ICsgMSk7XFxuICAgICAgICAgICAgY29va2llc1trZXldID0gdmFsdWU7XFxuICAgICAgICB9KVxcbiAgICB9XFxufSk7XFxuXFxuZnVuY3Rpb24gZ3VhcmQodXJsLCBoZWFkb2JqKSB7XFxuICAgIHZhciBoZWFkID0gaGVhZG9iaiA/IGhlYWRvYmo6e1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIENvb2tpZTogZ2V0Q29va2llKHVybCksXFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgdmFyIGh0bWwgPSBmZXRjaCh1cmwsIGhlYWQpO1xcbiAgICBpZiAoaHRtbC5pbmNsdWRlcygnX2d1YXJkL2F1dG8uanMnKSkge1xcbiAgICAgICAgZG9jdW1lbnRbXFxcImNvb2tpZVxcXCJdID0gZ2V0Q29va2llKHVybCk7XFxuICAgICAgICBldmFsKGZldGNoKGdldEhvbWUodXJsKSArICcvX2d1YXJkL2F1dG8uanMnKSlcXG4gICAgICAgIGh0bWwgPSBmZXRjaCh1cmwsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgIENvb2tpZTogZG9jdW1lbnRbXFxcImNvb2tpZVxcXCJdLFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIC8vbG9nKGRvY3VtZW50W1xcXCJjb29raWVcXFwiXSlcXG4gICAgcmV0dXJuIGh0bWw7XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiaW1nXCIsXCJwYXRoXCI6XCJpbWdcIixcInJ1bGVcIjpcInZhciBpbWcxID0gXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaWRYUm1MVGdpUHo0TkNqd2hMUzBnUjJWdVpYSmhkRzl5T2lCQlpHOWlaU0JKYkd4MWMzUnlZWFJ2Y2lBeU5pNHdMaklzSUZOV1J5QkZlSEJ2Y25RZ1VHeDFaeTFKYmlBdUlGTldSeUJXWlhKemFXOXVPaUEyTGpBd0lFSjFhV3hrSURBcElDQXRMVDROQ2p4emRtY2dkbVZ5YzJsdmJqMGlNUzR4SWlCcFpEMGk1WnUrNWJHQ1h6RWlJSGh0Ykc1elBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHlNREF3TDNOMlp5SWdlRzFzYm5NNmVHeHBibXM5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZlR3hwYm1zaUlIZzlJakJ3ZUNJZ2VUMGlNSEI0SWcwS0NTQjJhV1YzUW05NFBTSXdJREFnTlRBd0lERTFPQzQySWlCemRIbHNaVDBpWlc1aFlteGxMV0poWTJ0bmNtOTFibVE2Ym1WM0lEQWdNQ0ExTURBZ01UVTRMalk3SWlCNGJXdzZjM0JoWTJVOUluQnlaWE5sY25abElqNE5Danh6ZEhsc1pTQjBlWEJsUFNKMFpYaDBMMk56Y3lJK0RRb0pMbk4wTUh0bWFXeHNPaU0wTWpnMVJqUTdmUTBLQ1M1emRERjdabWxzYkRvak5ESTBNalF5TzMwTkNqd3ZjM1I1YkdVK0RRbzhaejROQ2drOGNHRjBhQ0JqYkdGemN6MGljM1F3SWlCa1BTSk5NekVzTVRVdU5XTXRNQzQxTERVdE1TNDVMRGt1TWkwMExqSXNNVEl1T0VnMU1tTXRNUzQ1TFRVdU1TMDBMall0T0M0NUxUZ3VNaTB4TVM0emJEQXVPQzB5TGpOak1TNDVMREFzTlM0eUxEQXVOQ3c1TGpnc01TNHlEUW9KQ1dNMExqZ3NNQzQ0TERndU1pd3lMakVzTVRBdU1pd3pMamxqTVN3eExqSXNNUzQxTERJdU9Dd3hMalVzTkM0M1l5MHdMalFzTVM0M0xURXVNU3d6TFRJdU1pd3pMamxJT0RWak1pNHlMREFzTlM0eUxURXVNU3c0TGprdE15NHliRE11T1N3MkxqZElOalV1TW5ZM0xqaG9NVGN1TlEwS0NRbGpNaTR5TERBc05TNHlMVEVzT0M0NUxUTXVNV3d6TGprc05pNDJTRFkxTGpKV05URm9NVGN1TldNeUxqSXNNQ3cxTGpJdE1TdzRMamt0TXk0eGJETXVPU3cyTGpaSU5qVXVNblk1U0RnMVl6SXVNaXd3TERVdU1pMHhMRGd1T1MwekxqRnNNeTQ1TERZdU5rZzJNUzQwZGprdU0yZ3hOUzQ1RFFvSkNXTXlMamdzTUN3M0xqY3RNUzR5TERFMExqZ3RNeTQxYkRVc04wZzJNUzQwVmpFd09VZzBOVlkzT1M0MlNESTBMamxqTFRNdU5Td3dMVGd1TkN3eExqSXRNVFF1T0N3ekxqVnNMVFV0TjBnME5XTXRNQzR5TFRFdU9DMHhMakV0TXk0eExUSXVOaTB6TGpsMkxUSnNNVFF1TkMwekxqVklPUzR6RFFvSkNWWTBNQzQxWXkweExqVXNNQzQxTFRNdU1Td3hMVFF1Tnl3eExqTnNMVEF1T0MweExqRmpOQzQxTFRVc055NHlMVEV3TGpJc09DNHlMVEUxTGpaak1DMHdMamt0TUM0M0xURXVPQzB5TFRJdU4zWXRNUzQyVERNeExERTFMalY2SUUwek5pNDFMRGd5TGpZTkNna0pZeTB3TGpjc05pNDNMVE11TkN3eE1pNHhMVGd1TVN3eE5pNHlZeTAwTGpnc05DNHlMVEV4TGpVc055NHpMVEl3TGpNc09TNHhiQzB4TGpJdE1TNDFZelF1TlMwMExqSXNOeTR5TFRndU5TdzRMakl0TVRJdU9HTXdMVEV0TUM0MkxURXVPUzB4TGprdE1pNDRkaTB4TGpsTU16WXVOU3c0TWk0MmVnMEtDUWtnVFRRNExqVXNNemt1TlhZdE55NDRTREkxTGpKMk55NDRTRFE0TGpWNklFMDBPQzQxTERVd0xqaFdORE5JTWpVdU1uWTNMamhJTkRndU5Yb2dUVFE0TGpVc05qTXVNbll0T1VneU5TNHlkamxJTkRndU5Yb2dUVGN3TGpjc09ETXVOR00zTGpJc01pNHlMREV6TGpRc05DNDVMREU0TGpZc09DNHhEUW9KQ1dNMExqUXNNeXcyTGpjc05pNHpMRFl1Tnl3NUxqaGpMVEF1Tnl3MExUTXVNaXcyTGpFdE55NDFMRFl1TW1NdE1pNDNMREF0TlM0eUxURXVOUzAzTGpRdE5DNDJZeTB6TGpZdE55NDRMVGN1TnkweE15NDNMVEV5TGpRdE1UY3VOVXczTUM0M0xEZ3pMalI2SWk4K0RRb0pQSEJoZEdnZ1kyeGhjM005SW5OME1DSWdaRDBpVFRFNU1pNHpMREl6TGpKc05TNHhMRFV1T0dndE1USXVPSFkzTGpsb0xURTJMak5XTWpsb0xUTTJMakYyT1dndE1UWXVNM1l0T0M0NVl5MHhMamtzTUM0eUxUUXVOQ3d4TFRjdU5Dd3lMak5zTFRVdU1TMDFMamxvTVRJdU5IWXRNaTQzRFFvSkNXTXdMVEF1T1Mwd0xqY3RNUzQzTFRJdE1pNDBkaTB5TGpOc01UZ3VNeTB6TGpWMk1UQXVPR2d6Tmk0eGRpMHlMamRqTUMwd0xqY3RNQzQ0TFRFdU5DMHlMak10TWxZeE9Hd3hPQzQyTFRNdU5YWXhNQzQ0UXpFNE5pNHlMREkxTGpRc01UZzRMamdzTWpRdU5pd3hPVEl1TXl3eU15NHllZzBLQ1FrZ1RURTVNUzQ1TERRMUxqTnNOUzR4TERVdU9XZ3ROalV1TjNZeE5TNHpZekl1TVMwd0xqa3NNeTR4TFRFdU15d3pMVEV1TTJNekxqRXRNUzR4TERZdU55MHhMallzTVRFdE1TNDJhRE14TGpoak9TNHhMREFzTVRNdU5pd3pMallzTVRNdU5pd3hNQzQ0ZGpJekxqUU5DZ2tKWXkwd0xqRXNNaTQ0TFRFdU55dzFMakl0TkM0M0xEY3VNV010TWk0ekxERXVNeTAxTGpRc01TNDVMVGt1TkN3eExqbGpMVGd1TkN3d0xURTFMall0TWk0ekxUSXhMamd0Tnk0eGJESXRNUzQ1WXpZc01pNDRMREV3TGpZc05DNHpMREUwTERRdU0yTXhMalVzTUN3eUxqSXRNUzR5TERJdU15MHpMalVOQ2drSlZqY3pZekF0TXk0NUxUSXROUzQ1TFRVdU9TMDFMamxvTFRJeUxqRmpMVFF1TVN3d0xUY3VOQ3d3TGpVdE1UQXVNU3d4TGpac0xUTXVPU3d4TGpkMk1qWXVOMk10TUM0MkxEWXVPQzAwTGpNc01UQXVNaTB4TVM0eUxERXdMakpqTFRVc01DMHhNQzR4TFRJdU1TMHhOUzR5TFRZdU0yd3lMVEV1T1EwS0NRbGpNaTQxTERFdU15dzBMallzTVM0NUxEWXVNeXd4TGpsak1Td3dMREV1TlMwd0xqZ3NNUzQxTFRJdU0xWTFNUzQxWXkweExqa3NNQzQwTFRNdU9Td3hMakV0Tmk0eUxESnNMVFV1TVMwMUxqaG9OREl1TkdNdE1TNDVMVFl1TVMwMExqWXRNVEF1TmkwNExqSXRNVE11Tm13d0xqY3RNaTQzRFFvSkNXTXlMaklzTUN3MUxqZ3NNQzQxTERFd0xqZ3NNUzQwWXpVdU15d3hMakVzT1M0eExESXVOeXd4TVM0eUxEUXVPV014TGpFc01TNDFMREV1Tnl3ekxqVXNNUzQzTERVdU9HTXRNQzQxTERFdU9TMHhMak1zTXk0ekxUSXVOU3cwTGpOSU1UZ3pEUW9KQ1VNeE9EUXVOeXcwTnk0M0xERTROeTQyTERRMkxqa3NNVGt4TGprc05EVXVNM29pTHo0TkNnazhjR0YwYUNCamJHRnpjejBpYzNRd0lpQmtQU0pOTWpRMUxqSXNNekZqTFRBdU15d3lMalV0TUM0NUxEUXVOUzB4TGpZc05pNHpZekl1TlMwd0xqVXNOQzQ0TFRBdU9DdzNMVEF1T0dneE5TNHlZekV1Tnl3d0xETXVOU3d3TGpRc05TNDBMREV1TW1NeUxqWXNNUzR5TERNdU9Td3pMRE11T1N3MUxqUU5DZ2tKWXpBc01TNDFMVEF1Tnl3ekxqSXRNaTR5TERWakxUTXVPU3cwTGpJdE9TdzRMakV0TVRVdU15d3hNUzQxWXpVdU55d3pMREV5TGpFc05TNHpMREU1TGpFc055NHhkaTAwTW1Nd0xUSXVOUzB4TGpndE15NDRMVFV1TlMwekxqbG9MVEU0TGpaakxUSXVNeXd3TFRVdU5Td3dMamd0T1M0NExESXVOQTBLQ1Fsc0xUVXVNUzAxTGpsb05ERXVObU01TERBc01UTXVOU3d6TERFekxqWXNPWFkzTVM0NVl5MHdMamdzTlM0MkxUUXVOeXc0TGpjdE1URXVOaXc1TGpKakxUWXVNaTB3TGpFdE1URXVPUzB5TGpndE1UY3VNUzA0TGpKc01TNDJMVEV1TldNeUxqa3NNUzQxTERVc01pNHpMRFl1Tml3eUxqTU5DZ2tKWXpJdU55d3dMRFF1TVMwd0xqa3NOQzR6TFRJdU4xWTJPQzQyWXkweE1pNHhMVEF1TlMweU1TNDVMVEl0TWprdU5DMDBMalJqTFRndU15d3pMVEUzTGpFc05DNDJMVEkyTGpVc05DNDVkak00TGpSb0xURTFMakpXTkRFdU9HTXdMVEV1T1Mwd0xqa3RNeTR5TFRJdU55MHpMamxXTXpZTkNna0piREUzTGprdE5DNHpkak0xWXpVdU9DMHhMalVzTVRFdU1pMHpMamNzTVRZdU5DMDJMalpqTFRJdU1TMHhMakV0TkM0eUxUSXVNaTAyTGpRdE15NDFZeTB4TGpNdE1DNDJMVEl1T1Mwd0xqa3ROUzR4TFRBdU9Xd3RNQzQwTFRFdU1td3hOUzQyTFRjdU9BMEtDUWxqTWk0eUxESXVNeXcwTGpRc05DNHpMRFl1T0N3MkxqSmpOUzAwTERndU5TMDRMakVzTVRBdU5pMHhNbU13TFRBdU55MHdMamd0TVM0eExUSXVNeTB4TGpGb0xUVXVOV010TXk0eUxEQXROaTR5TERBdU5DMDRMamtzTVM0eFl5MHdMamNzTVM0eUxURXVOaXd5TGpJdE1pNDJMRE1OQ2drSll5MHpMamtzTXk0MUxUa3VNeXcxTGpndE1UWXVOQ3cyTGpoc0xUQXVPQzB4TGpWak1pMHhMak1zTXk0NExUTXVNeXcxTGpNdE5TNDVZekV1TkMweUxqVXNNaTR4TFRRdU15d3lMakV0TlM0MVl6QXRNQzQ1TFRBdU5pMHhMalV0TVM0NUxURXVPWFl0TVM0eVRESTBOUzR5TERNeGVnMEtDUWtnVFRJeE1TNDBMREV6TGpWak55NHhMREV1Tml3eE15NHlMRE11TlN3eE9DNHpMRFV1T0dNMExqUXNNaTR4TERZdU5pdzBMalVzTmk0MkxEY3VNV010TUM0MkxEUXRNeTR4TERZdU1TMDNMalFzTmk0ell5MHlMamNzTUMwMUxqSXRNUzQyTFRjdU5TMDBMamNOQ2drSll5MHpMalF0TlM0MUxUY3VOUzA1TGpZdE1USXRNVEl1TkV3eU1URXVOQ3d4TXk0MWVpQk5NalF4TGpNc05qZ3VOM1l6TGpGak1pNHhMVEF1T0N3MExURXVNaXcxTGpndE1TNHlhREUwTGpSak55NDRMREFzTVRFdU5pd3pMamtzTVRFdU5pd3hNUzQzZGpFMExqTklNakkyVmpjNExqTU5DZ2tKWXkwd0xqRXRNUzQxTFRFdE1pNDBMVEl1TnkweUxqZDJMVEV1TlV3eU5ERXVNeXcyT0M0M2VpQk5NalF4TGpNc09UTXVNbWd4TlM0MVZqYzRMamhqTUMwekxqRXRNUzQyTFRRdU5pMDBMamN0TkM0MlNESTBOMk10TVM0NExEQXRNeTQzTERBdU5DMDFMamdzTVM0eVRESTBNUzR6TERrekxqSU5DZ2tKVERJME1TNHpMRGt6TGpKNklpOCtEUW9KUEhCaGRHZ2dZMnhoYzNNOUluTjBNQ0lnWkQwaVRUTTVNQzQ0TERVd2JEVXVNU3cyTGpOb0xUUTBMalpzTFRJMExqWXNOREl1T0dNd0xERXVOU3d3TGprc01pNHpMREl1Tnl3eUxqTm9NelZqTXk0eUxEQXNPQzR4TFRFdU5Td3hOQzQxTFRRdU5RMEtDUWxqTFRRdU1pMHhNaTR4TFRrdU1TMHlNUzQxTFRFMExqVXRNamd1TW13eExqVXRNUzQyWXpndU1pdzBMak1zTVRVdU1TdzVMallzTWpFc01UVXVOMk0xTERVdU9TdzNMalVzTVRJdU15dzNMalVzTVRrdU0yTXRNQzQyTERNdU5TMHlMamdzTlM0ekxUWXVOeXcxTGpRTkNna0pZeTB5TGpRc01DMDBMall0TVM0MExUWXVOaTAwTGpOakxUQXVNeTB4TFRBdU55MHlMVEV0TTJNdE5pNDVMRE11TVMweE1pNHhMRFF1TmkweE5TNDNMRFF1Tm1ndE5UQXVNV010TkM0MkxEQXROeTB5TGpFdE55MDJMakpqTUMwd0xqWXNNQzQwTFRFdU9Dd3hMakl0TXk0MmJESXpMakl0TXpndU9BMEtDUWxJTXpFNVl5MHlMallzTUMwMkxqUXNNQzQ1TFRFeExqSXNNaTQzYkMwMUxqRXROaTR5YURjMkxqbERNemd4TGpjc05USXVPQ3d6T0RVdU5TdzFNUzQ1TERNNU1DNDRMRFV3ZWlCTk16ZzBMamNzTVRndU5tdzFMakVzTlM0NWFDMDJOeTR5WXkweExqa3NNQzAwTGpZc01DNDRMVGd1TWl3eUxqTU5DZ2tKYkMwMUxqRXROUzQ1YURZM0xqSkRNemM0TERJd0xqa3NNemd3TGpnc01qQXVNU3d6T0RRdU55d3hPQzQyZWlJdlBnMEtDVHh3WVhSb0lHTnNZWE56UFNKemREQWlJR1E5SWswME1qWXVOeXd4TkM0M2RqRXpMamxqTVM0ekxUQXVOQ3d5TGpjdE1DNDVMRFF1TXkweExqVnNOUzR4TERVdU9HZ3RPUzQwVmpVMFl6SXRNUzQyTERRdE15NHpMRFV1T0MwMUxqRnNNUzR5TERBdU53MEtDUWxqTFRFdU1pdzBMamd0TXk0MUxEa3VOUzAzTERFMExqTjJNelF1TTJNdE1DNDVMRFl0TkM0MExEa3VNaTB4TUM0MUxEa3VOMk10TkM0MExUQXVNUzA0TGpZdE1TNDVMVEV5TGpRdE5TNDBiREV1TmkweVl6RXVOeXd4TGpFc015d3hMallzTXk0NUxERXVOZzBLQ1Fsak1TNDNMREFzTWk0MUxURXVNaXd5TGpjdE15NDFkaTB5TUdNdE1TNDVMREV1TkMwekxqa3NNaTQzTFRVdU9Dd3pMamhzTFRNdU5TMHhOeTQxYkRFdU1TMHdMamhqTUM0MUxEQXVPQ3d4TGpJc01TNHlMRElzTVM0eVl6RXVOUzB3TGpFc015NDJMVEF1T0N3MkxqSXRNUzQ1ZGkwek1BMEtDUWxqTFRFdU5pd3dMalV0TXk0MExERXVNUzAxTGpRc01td3ROUzR4TFRVdU9VZzBNVEpXTWpaak1DMHlMakl0TUM0NUxUTXVPQzB5TGpjdE5DNDNkaTB4TGpsTU5ESTJMamNzTVRRdU4zb2dUVFEwTmk0NUxERTFMalZzT1M0MkxEaGpMVEF1TVMweExqVXRNUzB5TGpZdE1pNDNMVE11TTNZdE1TNDJEUW9KQ1d3eE55NHhMVFF1TTNZMkxqSm9NVEl1TkdNMkxqSXNNQ3c1TGpRc015dzVMalFzT0M0NWRqTXlMak5vTFRJeExqaDJOUzQwYURFMkxqTmpOQzR5TERBc05pNHpMREV1TWl3MkxqTXNNeTQxWXpBc01pNDRMVEV1T0N3MkxqUXROUzR6TERFd0xqY05DZ2tKWXkwMExqRXNOUzA0TGpjc09TNHlMVEV6TGpnc01USXVPR00yTGpJc05DNHhMREV6TGpFc055NDRMREl3TGpZc01URnNMVEF1Tnl3eExqWmpMVGd1TWkweExqTXRNVFV1TlMweUxqZ3RNakV1T0MwMExqaGpMVEl1TkMwd0xqY3ROQzQzTFRFdU5pMDNMVEl1TmcwS0NRbGpMVGt1T0N3MExqUXRNakF1T0N3M0xUTXpMakVzTnk0NGJDMHdMak10TVM0Mll6Z3RNaTQ1TERFMUxqSXROaTQ1TERJeExqZ3RNVEV1T0VNME5EZ3VOaXc1TUM0MkxEUTBNeTQyTERnM0xEUXpPU3c0TTJNdE1DNDNMVEF1TnkweExqWXRNUzR4TFRJdU5pMHhMakVOQ2drSll5MHdMak1zTUMwd0xqa3NNQzR5TFRJc01DNDNiQzB4TGpJdE1pNHpiREUzTGpVdE55NDRZek11TlN3MExqVXNOeTQzTERndU9Td3hNaTQyTERFekxqRmpOQzQwTFRRdU15dzRMak10T0M0NUxERXhMalF0TVRNdU9XTXdMVEF1T0Mwd0xqVXRNUzR5TFRFdU5TMHhMakpvTFRJM0xqY05DZ2tKWXkweUxqTXNNQzAxTGpJc01DNDNMVGd1Tml3eWJDMDBMak10TlM0MWFESXpMamgyTFRVdU5HZ3RNakF1TWxZeU55NDVTRFF6Tkd3dE1DNDBMVEV1Tm1NMExURXVOeXczTGpZdE5Dd3hNQzQzTFRkak1TNHhMVEV1TVN3eExqY3RNaTR6TERFdU55MHpMalZNTkRRMkxqa3NNVFV1TlhvTkNna0pJRTAwTlRZdU5pdzBNUzR4VmpJMExqaGpMVEl1TVN3d0xqa3ROQzQxTERFdU5TMDNMakVzTW5ZeE1DNDFZekV1TWkwd0xqVXNNaTQxTFRFdU1Td3pMamt0TWt3ME5UWXVOaXcwTVM0eGVpQk5ORFUyTGpZc05UZ3VNbFkwTVM0NGFDMDNMakYyTVRZdU0wdzBOVFl1Tml3MU9DNHlEUW9KQ1V3ME5UWXVOaXcxT0M0eWVpQk5ORGN3TGprc01qUXVNWFl4TXk0MGFEY3VPSFl0TVRKakxUQXVNUzB4TFRBdU9TMHhMalV0TWk0ekxURXVOVWcwTnpaakxUQXVOeXd3TFRJc01DNDFMVE11T1N3eExqVk1ORGN3TGprc01qUXVNWG9nVFRRM01DNDVMRE01TGpkMk1UZ3VOV2czTGpoMkxURTNEUW9KQ1dNdE1TNHpMREF1TXkweUxqa3NNQzQ1TFRRdU55d3hMamhNTkRjd0xqa3NNemt1TjNvaUx6NE5Dand2Wno0TkNqeHdZWFJvSUdOc1lYTnpQU0p6ZERFaUlHUTlJazB4TVRndU1Td3hNall1Tld3NUxqa3RNQzR5ZGpJeVl5MHdMak1zTkM0MExUTXVNaXcyTGpZdE9DNDFMRFl1T0dNdE5TNDNMREF1T0MwNExqUXROeTR6TFRNdE9HTTBMVEF1TWl3ekxqTXNOUzQxTFRBdU15dzBMamtOQ2dsak1DNDVMREl1TlN3MkxqRXNNUzR4TERVdU5DMHlMakZqTUN3d0xEQXRNVGd1T1N3d0xURTRMamxqTUM0eUxUSXVNUzB3TGprdE15NHhMVE11TlMweUxqbERNVEU0TGpFc01USTRMakVzTVRFNExqRXNNVEkyTGpVc01URTRMakVzTVRJMkxqVjZJRTB4TWpBdU55d3hNVGt1T0EwS0NXTXdMVFF1T0N3M0xqUXROQzQzTERjdU1pd3dRekV5T0N3eE1qUXVOQ3d4TWpBdU9Td3hNalF1TlN3eE1qQXVOeXd4TVRrdU9Ib2lMejROQ2p4d1lYUm9JR05zWVhOelBTSnpkREVpSUdROUlrMHhORFl1TWl3eE5EY3VNV2d0TVRNdU5YWXRNUzQzWXpJdU55d3dMakVzTXk0NUxUQXVPU3d6TGpZdE1pNDVWakV6TVdNd0xqSXRNaTR4TFRFdE15NHhMVE11TmkweUxqbDJMVEV1Tm13eE1DMHdMakoyTVRZdU1RMEtDV010TUM0eUxESXVNU3d3TGprc015NHhMRE11TlN3eUxqbFdNVFEzTGpGNklFMHhNelV1TlN3eE1Ua3VPR013TFRRdU9DdzNMalF0TkM0M0xEY3VNaXd3UXpFME1pNDVMREV5TkM0MExERXpOUzQxTERFeU5DNDFMREV6TlM0MUxERXhPUzQ0ZWlJdlBnMEtQSEJoZEdnZ1kyeGhjM005SW5OME1TSWdaRDBpVFRFM05pNHlMREV5Tmk0MGRqRXVPV2d0TlM0MWRqRTBMakpqTFRBdU5Td3lMaklzTVN3ekxqSXNOQzQxTERJdU9YWXhMamRvTFRFMUxqRjJMVEV1TjJNekxEQXVNaXcwTGpNdE1DNDNMRFF0TWk0NWRpMHhOQzR5YUMwMGRpMHhMamxvTkEwS0NXTXRNUzQ1TFRrdU9Td3hOQzQwTFRFeUxqWXNNVFl1TVMwMUxqTmpNQ3cyTFRFd0xqTXNNUzQxTFRVdE1pNHlZeTAwTGpndE1TNDBMVFF1Tml3ekxqa3ROQzQwTERjdU5Fd3hOell1TWl3eE1qWXVORXd4TnpZdU1pd3hNall1TkhvaUx6NE5Danh3WVhSb0lHTnNZWE56UFNKemRERWlJR1E5SWsweE9UWXVOaXd4TXpFdU9YWXhNQzR5WXpBc015NDNMREl1T0N3ekxqUXNNeTB3TGpWb01TNDJZekV1TWl3MUxqWXROeTQ1TERndU1TMHhNQzR5TERNdU1XTXRNVE11TkN3NUxqSXRNakV0Tnk0ekxUQXVPQzB4TUM0MkRRb0pZekF1T0MwMExqZ3RNaTR4TFRjdU55MDJMamt0TlM0MWRqQXVNbU0zTGpJc01pNDFMVE11TVN3eE1DNHlMVFFzTWk0MVF6RTNPQzQ1TERFeU5DNDFMREU1Tnk0M0xERXlNeTQxTERFNU5pNDJMREV6TVM0NWVpQk5NVGt3TERFME1TNHhkaTAxRFFvSlF6RTNPQzQwTERFek9TNHhMREU0T0M0eExERTFNaTR4TERFNU1Dd3hOREV1TVhvaUx6NE5Danh3WVhSb0lHTnNZWE56UFNKemRERWlJR1E5SWsweU1UVXVNU3d4TkRjdU1VZ3lNREoyTFRFdU4yTXlMalFzTUM0eExETXVOUzB3TGprc015NHpMVEl1T1ZZeE16RmpNQzR5TFRJdU1TMHdMamt0TXk0eExUTXVNeTB5TGpsMkxURXVObXc1TGpRdE1DNHlkak11TVEwS0NXTTBMakV0TlM0MkxERXpMVFF1T0N3eE15d3lMamhqTUN3d0xEQXNNVEF1TWl3d0xERXdMakpqTFRBdU1pd3lMakVzTUM0NExETXVNU3d6TGpFc01pNDVkakV1TjBneU1UaGpMVEF1TmkweExqY3NNUzQzTFRJd0xqRXRNUzQ1TFRFNUxqRmpMVFF1T1N3d0xqUXROQzQwTERFd0xqTXROQzR6TERFMExqUU5DZ2xqTFRBdU1pd3lMakVzTUM0NUxETXVNU3d6TGpVc01pNDVkakV1T1VneU1UVXVNWG9pTHo0TkNqeHdZWFJvSUdOc1lYTnpQU0p6ZERFaUlHUTlJazB5TkRjdU1pd3hNalV1TVdNdE1DNDVMREF0TVM0ekxEQXVPUzB4TGpRc01pNHpZell1TVN3MUxESXVNaXd4TWk0MUxUWXVOU3d4TWk0ell5MHhMaklzTUM0eUxUUXVPQzB4TGpNdE5Td3dMalZqTUN3d0xqY3NNUzQzTERFdU1pdzFMREV1TkEwS0NXTTNMallzTUM0eUxERXhMalFzTWk0eExERXhMalFzTlM0M1l5MHdMalVzTkM0MUxUUXVNaXcyTGprdE1URXVNeXczTGpOakxUa3VPQ3d3TGpVdE1UVXVOUzAzTGpZdE5TMDVZeTAwTGpndE1TMDJMak10TlM0eUxUQXVOUzAzTGpOakxUa3VPQzAxTGpnc01TNHpMVEUxTGpVc09TNDVMVEV4TGpnTkNnbGpNUzR6TFRjdU5Td3hNeTR4TFRFc05TNHlMREV1TjBNeU5EY3NNVEk0TGpNc01qUTJMallzTVRJMkxqWXNNalEzTGpJc01USTFMakY2SUUweU5EUXVPU3d4TkRrdU4yTXhMalF0TXk0MUxURXhMalV0TkM0ekxURXhMakV0TUM0MURRb0pRekl6TXk0eExERTFNeTR6TERJME5TNHlMREUxTkN3eU5EUXVPU3d4TkRrdU4zb2dUVEl6T1M0MkxERXlOeTQyWXkwMExqVXRNQzQzTFRRdU15d3hNUzQwTERBc01UQXVOa015TkRNdU55d3hNemtzTWpRekxqZ3NNVEkyTGprc01qTTVMallzTVRJM0xqWjZJaTgrRFFvOGNHRjBhQ0JqYkdGemN6MGljM1F4SWlCa1BTSk5Namd6TGpZc01USTFMakZqTFRBdU9Td3dMVEV1TXl3d0xqa3RNUzQwTERJdU0yTTJMakVzTlN3eUxqSXNNVEl1TlMwMkxqVXNNVEl1TTJNdE1TNHlMREF1TWkwMExqZ3RNUzR6TFRVc01DNDFZekFzTUM0M0xERXVOeXd4TGpJc05Td3hMalFOQ2dsak55NDJMREF1TWl3eE1TNDBMREl1TVN3eE1TNDBMRFV1TjJNdE1DNDFMRFF1TlMwMExqSXNOaTQ1TFRFeExqTXNOeTR6WXkwNUxqZ3NNQzQxTFRFMUxqVXROeTQyTFRVdE9XTXROQzQ0TFRFdE5pNHpMVFV1TWkwd0xqVXROeTR6WXkwNUxqZ3ROUzQ0TERFdU15MHhOUzQxTERrdU9TMHhNUzQ0RFFvSll6RXVNeTAzTGpVc01UTXVNUzB4TERVdU1pd3hMamRETWpnekxqUXNNVEk0TGpNc01qZ3lMamtzTVRJMkxqWXNNamd6TGpZc01USTFMakY2SUUweU9ERXVNeXd4TkRrdU4yTXhMalF0TXk0MUxURXhMalV0TkM0ekxURXhMakV0TUM0MURRb0pRekkyT1M0MUxERTFNeTR6TERJNE1TNDJMREUxTkN3eU9ERXVNeXd4TkRrdU4zb2dUVEkzTlM0NUxERXlOeTQyWXkwMExqVXRNQzQzTFRRdU15d3hNUzQwTERBc01UQXVOa015T0RBc01UTTVMREk0TUM0eExERXlOaTQ1TERJM05TNDVMREV5Tnk0MmVpSXZQZzBLUEhCaGRHZ2dZMnhoYzNNOUluTjBNU0lnWkQwaVRUTXhNQzQ1TERFek5pNDNhQzB4TkdNdE1DNDBMREV3TERjdU5Dd3hNUzQxTERFeUxqVXNOQzQxYkRFdU5Dd3dMamxqTFRRdU55dzVMalF0TWpFdU1pdzFMak10TWpFdE5TNDBEUW9KUXpJNU1DNHlMREV5TXk0MExETXhNUzQwTERFeU1TNDFMRE14TUM0NUxERXpOaTQzZWlCTk1qazJMamtzTVRNMExqaG9OaTQ1UXpNd05DNHpMREV5TkM0MExESTVOeTR4TERFeU5TNHlMREk1Tmk0NUxERXpOQzQ0ZWlJdlBnMEtQSEJoZEdnZ1kyeGhjM005SW5OME1TSWdaRDBpVFRNeE5TNDBMREUwTXk0NFl6QXROQzQyTERjdU5DMDBMamNzTnk0MExEQkRNekl6TERFME9DNHlMRE14TlM0eUxERTBPQzR4TERNeE5TNDBMREUwTXk0NGVpSXZQZzBLUEdjK0RRb0pQSEJoZEdnZ1kyeGhjM005SW5OME1TSWdaRDBpVFRNMU1DNHpMREV6TlM0Mll5MHdMamdzTmk0eUxUUXVOQ3c1TGpVdE1UQXVPQ3c1TGpoakxUWXVOaTB3TGpNdE1UQXVNaTB6TGpZdE1UQXVPQzA1TGpoak1DNDRMVFl1TXl3MExqUXRPUzQzTERFd0xqZ3RNVEF1TWcwS0NRbERNelExTGprc01USTFMamtzTXpRNUxqVXNNVEk1TGpNc016VXdMak1zTVRNMUxqWjZJRTB6TkRNdU15d3hNelV1Tm1Nd0xUVXVOeTB4TGpNdE9DNDJMVE11T1MwNExqZGpMVEl1Tml3d0xqRXRNeTQ1TERNdE15NDVMRGd1TjJNd0xqRXNOUzQzTERFdU5DdzRMallzTXk0NUxEZ3VOdzBLQ1FsRE16UXhMamtzTVRRMExqSXNNelF6TGpJc01UUXhMak1zTXpRekxqTXNNVE0xTGpaNklpOCtEUW9KUEhCaGRHZ2dZMnhoYzNNOUluTjBNU0lnWkQwaVRUTTJOQ3d4TkRVdU0wZ3pOVEYyTFRFdU5tTXlMalFzTUM0eExETXVOQzB3TGpnc015NHlMVEl1TjNZdE1UQXVOMk13TGpJdE1TNDVMVEF1T1MweUxqa3RNeTR5TFRJdU4zWXRNUzQxYkRndU55MHdMakoyTkM0MGFEQXVNZzBLQ1Fsak1TNHpMVE11TWl3ekxqRXROQzQ0TERVdU5TMDBMamhqTWk0MUxEQXVNU3d6TGpnc01TNHpMRE11T1N3ekxqWmpMVEF1TVN3eUxURXVNU3d6TGpFdE1pNDVMRE11TW1NdE1TNDRMVEF1TVMweUxqZ3RNUzR4TFRJdU9TMHpMakZqTUMwd0xqSXNNQzR4TFRBdU5Td3dMakl0TUM0NERRb0pDV013TFRBdU15d3dMVEF1TlN3d0xUQXVObU10TWk0MExERXVPQzB6TGpZc05TNDVMVE11Tml3eE1pNHhZeTB3TGpRc01pNDVMREF1T1N3MExqSXNNeTQ1TERNdU9WWXhORFV1TTNvaUx6NE5DZ2s4Y0dGMGFDQmpiR0Z6Y3owaWMzUXhJaUJrUFNKTk16ZzJMakVzTVRJMExqaG9MVEF1TW1NdE1DNDJMREF1TWkweExEQXVPUzB4TGpFc01pNHhZekV1T0N3eExqUXNNaTQzTERNdU1Td3lMamNzTlM0eVl5MHdMaklzTkMwekxqRXNOaTR4TFRndU55dzJMak1OQ2drSll5MHdMallzTUMweExqTXRNQzR4TFRJdU1TMHdMakpqTFRBdU15MHdMakV0TUM0MkxUQXVNaTB4TFRBdU1tTXRNUzR4TERBdE1TNDJMREF1TXkweExqWXNNQzQ0WXpBc01DNDJMREV1Tml3eExqRXNOQzQzTERFdU0yTTNMakVzTUM0eUxERXdMamNzTWl3eE1DNDNMRFV1TXcwS0NRbGpMVEF1TkN3MExqSXRNeTQ1TERZdU5TMHhNQzQxTERZdU9HTXROaTR5TFRBdU1pMDVMall0TVM0NUxURXdMVFV1TW1Nd0xqTXRNUzQ0TERJdU1TMHlMamtzTlM0ekxUTXVNbU10TUM0eUxUQXVNUzB3TGpZdE1DNHpMVEV1TVMwd0xqVmpMVEl0TUM0MExUTXRNUzQxTFRJdU9TMHpMakVOQ2drSll6QXRNUzR5TERFdU1pMHlMak1zTXk0MkxUTXVNbU10TWk0ekxURXVNaTB6TGpRdE1pNDVMVE11TmkwMVl6QXVNeTAwTGpFc015NHlMVFl1TXl3NExqY3ROaTQyWXpFdU5Dd3dMREl1Tnl3d0xqSXNOQ3d3TGpaak1DNDFMVEl1TWl3eExqZ3RNeTR5TERNdU9TMHpMaklOQ2drSll6SXVNaXd3TGpFc015NHpMREVzTXk0MExESXVOMk10TUM0eExERXVNeTB3TGprc01pMHlMalFzTWk0eFl5MHhMak1zTUMweExqa3RNQzQyTFRFdU9TMHhMamhETXpnMUxqa3NNVEkxTGpVc016ZzFMamtzTVRJMUxqRXNNemcyTGpFc01USTBMamg2SUUwek9EUXNNVFEzTGpjTkNna0pZekF1TVMweExqa3RNUzQ1TFRJdU9TMDJMVEl1TjJNdE15d3dMVFF1TlN3d0xqZ3ROQzQwTERJdU0yTXdMakVzTWl3eExqa3NNeTR4TERVdU5Td3pMakpETXpneUxqSXNNVFV3TGpRc016Z3pMamdzTVRRNUxqUXNNemcwTERFME55NDNlaUJOTXpjNExqa3NNVEkzTGpFTkNna0pZeTB5TERBdE15NHhMREV1TmkwekxqRXNOQzQ0WXpBc015NHpMREVzTlN3ekxqRXNOV014TGprc01Dd3lMamt0TVM0M0xESXVPUzAxUXpNNE1TNDVMREV5T0M0M0xETTRNQzQ1TERFeU55NHhMRE0zT0M0NUxERXlOeTR4ZWlJdlBnMEtQQzluUGcwS1BDOXpkbWMrRFFvPVxcXCJcXG5cXG4kLmV4cG9ydHMuaW1nMSA9IGltZzE7XCJ9LHtcIm5hbWVcIjpcIuino+WvhlwiLFwicGF0aFwiOlwiamllbWlcIixcInJ1bGVcIjpcImZ1bmN0aW9uIGVuY3J5cHREYXRhKHdvcmQpIHtcXG5ldmFsKGdldENyeXB0b0pTKCkpO1xcbmNvbnN0IGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKFxcXCIyZDRlYmI3Y2I3NjdkYWIxXFxcIik7XFxuY29uc3QgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFwiNzU2M2NhNGFmNDFiZDBmYlxcXCIpO1xcbiAgY29uc3QgZW5jcnlwdGVkID0gQ3J5cHRvSlMuQUVTLmVuY3J5cHQod29yZCxrZXksIHtcXG4gICAgaXY6IGl2LFxcbiAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuWmVyb1BhZGRpbmcsXFxuICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDXFxuICB9KTtcXG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoZW5jcnlwdGVkLnRvU3RyaW5nKCkpO1xcbn1cIn1dIiwiaWNvbiI6Imh0dHBzOi8vaW1nLnZpbnVhLmNuL2ltYWdlcy96U3h0VS5wbmciLCJwcm94eSI6IiJ9
Add Comment
Please, Sign In to add comment