xiaomianao666

小程序:云盘君(推送)

Mar 26th, 2024
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@云盘君(推送)@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi5LqR55uY5ZCbKOaOqOmAgSkiLCJhdXRob3IiOiLlsI/mo4noooTwn4yeKOaOqOmAgeS4juWOn+eUu+WKn+iDvWJ56aaZ6ZuF5oOFKSIsInVybCI6Imhpa2VyOi8vZW1wdHkjI2Z5cGFnZSIsInZlcnNpb24iOjE0LCJjb2xfdHlwZSI6Im1vdmllXzMiLCJjbGFzc19uYW1lIjoiIiwidHlwZSI6InRvb2wiLCJjbGFzc191cmwiOiIiLCJhcmVhX25hbWUiOiIiLCJhcmVhX3VybCI6IiIsInNvcnRfbmFtZSI6IiIsInllYXJfbmFtZSI6IiIsInNvcnRfdXJsIjoiIiwieWVhcl91cmwiOiIiLCJmaW5kX3J1bGUiOiJqczpcbnZhciBkID0gW107XG5hZGRMaXN0ZW5lcihcbiAgICAnb25SZWZyZXNoJywgJC50b1N0cmluZygoKSA9PiB7XG4gICAgICAgIGNsZWFyTXlWYXIoJ3MnKVxuICAgIH0pXG4pXG5pZiAoIWZpbGVFeGlzdChcImhpa2VyOi8vZmlsZXMvcnVsZXMvaWN5L2ljeS1hbGktdG9rZW4uanNvblwiKSkge1xuICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaChcImhpa2VyOi8vcGFnZS9Mb2dpblwiKSkucnVsZSk7XG59IGVsc2Uge1xuICAgIGxldCBudG9rZW4gPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2ljeS9pY3ktYWxpLXRva2VuLmpzb24nLCB7fSkpO1xuICAgIGlmIChudG9rZW5bMF0ucmVmcmVzaF90b2tlbikge1xuICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goXCJoaWtlcjovL3BhZ2Uvc291XCIpKS5ydWxlKTtcbiAgICAgICAgbGV0IHMgPSBnZXRNeVZhcigncycsICcnKTtcbiAgICAgICAgaWYgKHMgPT0gXCJcIikge1xuICAgICAgICAgICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xuXG4gICAgICAgICAgICAgICAgaGVhZGVyID0ge1xuICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6ICdNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgNi4wOyBOZXh1cyA1IEJ1aWxkL01SQTU4TikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzk5LjAuNDg0NC41MSBNb2JpbGUgU2FmYXJpLzUzNy4zNicsXG4gICAgICAgICAgICAgICAgICAgICdIb3N0JzogJ3RvcC5iYWlkdS5jb20nLFxuICAgICAgICAgICAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicsXG4gICAgICAgICAgICAgICAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiAnemgtQ04semg7cT0wLjksZW4tVVM7cT0wLjgsZW47cT0wLjcnLFxuICAgICAgICAgICAgICAgICAgICAnQWNjZXB0LUVuY29kaW5nJzogJ2d6aXAsIGRlZmxhdGUsIGJyJyxcbiAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiAnaHR0cHM6Ly90b3AuYmFpZHUuY29tL2JvYXJkP3RhYj1ub3ZlbCcsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBqc29uO1xuICAgICAgICAgICAgICAgIGQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAoZ2V0TXlWYXIoJ3RvcGJhaWR1JywgJzEnKSA9PSAnMScgPyAn55S16KeG5Ymn54Ot5pCc5qac4oiaJyA6ICfnlLXop4bliafng63mkJzmppwnKSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBgaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjQGxhenlSdWxlPS5qczpnZXRNeVZhcigndG9wYmFpZHUnLCcxJyk9PScxJz9wdXRNeVZhcigndG9wYmFpZHUnLCcwJyk6cHV0TXlWYXIoJ3RvcGJhaWR1JywnMScpO3JlZnJlc2hQYWdlKCk7J2hpa2VyOi8vZW1wdHknYCxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbidcbiAgICAgICAgICAgICAgICB9LHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IChnZXRNeVZhcigndG9wYmFpZHUnLCAnMScpID09ICcwJyA/ICfnlLXlvbHng63mkJzmppziiJonIDogJ+eUteW9seeDreaQnOamnCcpLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGBoaWtlcjovL2VtcHR5I25vTG9hZGluZyNAbGF6eVJ1bGU9LmpzOmdldE15VmFyKCd0b3BiYWlkdScsJzEnKT09JzEnP3B1dE15VmFyKCd0b3BiYWlkdScsJzAnKTpwdXRNeVZhcigndG9wYmFpZHUnLCcxJyk7cmVmcmVzaFBhZ2UoKTsnaGlrZXI6Ly9lbXB0eSdgLFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJ1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKGdldE15VmFyKCd0b3BiYWlkdScsICcxJykgPT0gXCIxXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdldE15VmFyKCdkc2pqc29uJywgXCJcIikgPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IHJlcXVlc3QoJ2h0dHBzOi8vdG9wLmJhaWR1LmNvbS9hcGkvYm9hcmQ/cGxhdGZvcm09d2lzZSZ0YWI9dGVsZXBsYXkmdGFnPSU3QiU3RCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2Rzampzb24nLCBqc29uKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSBnZXRNeVZhcignZHNqanNvbicpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdldE15VmFyKCdkeWpzb24nLCAnJykgPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IHJlcXVlc3QoJ2h0dHBzOi8vdG9wLmJhaWR1LmNvbS9hcGkvYm9hcmQ/cGxhdGZvcm09d2lzZSZ0YWI9bW92aWUmdGFnPSU3QiU3RCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2R5anNvbicsIGpzb24pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IGdldE15VmFyKCdkeWpzb24nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgbGlzdCA9IEpTT04ucGFyc2UoanNvbikuZGF0YS5jYXJkc1swXS5jb250ZW50O1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBuYW1lID0gbGlzdFtpXS53b3JkICsgJyAgICAoJyArIGxpc3RbaV0uc2hvd1syXSArICcpJztcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlcyA9IGxpc3RbaV0uZGVzYztcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpID09IFwiMFwiID8gJ+KAnOKAnOKAneKAnTxzcGFuIHN0eWxlPVwiY29sb3I6I2ZmMzMwMFwiPicgKyAocGFyc2VJbnQoaSkgKyAxKS50b1N0cmluZygpICsgJzwvc3Bhbj4nICsgXCJcXHRcXHRcXHRcIiArIG5hbWUgOiBpID09IFwiMVwiID8gJ+KAnOKAnOKAneKAnTxzcGFuIHN0eWxlPVwiY29sb3I6I2ZmNjYwMFwiPicgKyAocGFyc2VJbnQoaSkgKyAxKS50b1N0cmluZygpICsgJzwvc3Bhbj4nICsgXCJcXHRcXHRcXHRcIiArIG5hbWUgOiBpID09IFwiMlwiID8gJ+KAnOKAnOKAneKAnTxzcGFuIHN0eWxlPVwiY29sb3I6I2ZmOTkwMFwiPicgKyAocGFyc2VJbnQoaSkgKyAxKS50b1N0cmluZygpICsgJzwvc3Bhbj4nICsgXCJcXHRcXHRcXHRcIiArIG5hbWUgOiAn4oCc4oCc4oCd4oCdPHNwYW4+JyArIChwYXJzZUludChpKSArIDEpLnRvU3RyaW5nKCkgKyAnPC9zcGFuPicgKyBcIlxcdFxcdFxcdFwiICsgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnNwbGl0KCcgICAgKCcpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdzJywgbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBuYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcInRleHRfMVwiXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaChcImhpa2VyOi8vcGFnZS9Mb2dpblwiKSkucnVsZSk7XG4gICAgfVxuICAgIC8vc2V0UmVzdWx0KGQpO1xufVxuc2V0UmVzdWx0KGQpOyIsInNlYXJjaF91cmwiOiJoaWtlcjovL2VtcHR5IyMqKiIsImdyb3VwIjoi8J+NiuW3peWFtyIsInNlYXJjaEZpbmQiOiJqczpcbnZhciBkID0gW107XG5sZXQga2V5ID0gTVlfVVJMLnNwbGl0KFwiIyNcIilbMV07XG5kLnB1c2goe1xuICAgIHRpdGxlOiBcIueCueaIkeW8gOWni+iBmuWQiOaQnOe0olwiICsga2V5LFxuICAgIHVybDogXCJoaWtlcjovL3BhZ2Uvc291cD9wPWZ5cGFnZVwiLFxuICAgIGV4dHJhOiB7XG4gICAgICAgIHBhZ2VUaXRsZTogXCLmkJzntKJcIiArIGtleSxcbiAgICAgICAga2V5OiBrZXlcbiAgICB9XG59KTtcblxuc2V0UmVzdWx0KGQpOyIsImRldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJkZXRhaWxfZmluZF9ydWxlIjoiIiwic2RldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJzZGV0YWlsX2ZpbmRfcnVsZSI6IiIsInVhIjoibW9iaWxlIiwicHJlUnVsZSI6ImxldCByZWFjY2Vzc1RrID0gZ2V0TXlWYXIoXCJhbGlhY2Nlc3NUa1wiLCAnJyk7XG5sZXQgdGltZVRva2VuID0gZ2V0TXlWYXIoJ3RpbWVUb2tlbicsICcwJyk7XG5pZiAocmVhY2Nlc3NUayA9PSAnJyB8fCAocGFyc2VJbnQodGltZVRva2VuKSAtIHBhcnNlSW50KG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkpLnRvU3RyaW5nKCkgPD0gNjAwKSB7XG4gICAgbGV0IG50b2tlbiA9IFtdO1xuICAgIGxldCByZWZ0b2tlbiA9IFwiXCI7XG4gICAgaWYgKCFmaWxlRXhpc3QoXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2ljeS9pY3ktYWxpLXRva2VuLmpzb25cIikpIHtcbiAgICAgICAgdG9hc3QoJ+eUqOaIt+S/oeaBr+iOt+WPluWksei0pe+8jOivt+eZu+WFpei0puWPt+OAgicpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG50b2tlbiA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMvaWN5L2ljeS1hbGktdG9rZW4uanNvbicsIHt9KSk7XG4gICAgICAgIGlmIChudG9rZW5bMF0ucmVmcmVzaF90b2tlbikge1xuICAgICAgICAgICAgcmVmdG9rZW4gPSBudG9rZW5bMF0ucmVmcmVzaF90b2tlbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvYXN0KCfnlKjmiLfkv6Hmga/ojrflj5blpLHotKXvvIzor7fnmbvlhaXotKblj7fjgIInKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVmdG9rZW4ubGVuZ3RoID09IDMyKSB7XG4gICAgICAgIHZhciByZWZyZXNoID0gZmV0Y2goJ2h0dHBzOi8vYXV0aC5hbGl5dW5kcml2ZS5jb20vdjIvYWNjb3VudC90b2tlbicsIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogUENfVUEsXG4gICAgICAgICAgICAgICAgJ1JlZmVyZXInOiAnaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tLydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBib2R5OiAne1wicmVmcmVzaF90b2tlblwiOlwiJyArIHJlZnRva2VuICsgJ1wiLFwiZ3JhbnRfdHlwZVwiOlwicmVmcmVzaF90b2tlblwifScsXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xuICAgICAgICB9KTtcbiAgICAgICAgbnRva2VuWzBdID0gSlNPTi5wYXJzZShyZWZyZXNoKTtcbiAgICAgICAgd3JpdGVGaWxlKFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9pY3kvaWN5LWFsaS10b2tlbi5qc29uXCIsIEpTT04uc3RyaW5naWZ5KG50b2tlbikpO1xuICAgICAgICBsb2coJ+i/kOihjOmihOWkhOeQhicpO1xuICAgICAgICBpZiAoIWZpbGVFeGlzdChcImhpa2VyOi8vZmlsZXMvcnVsZXMvaWN5L2ljeS1hbGktdG9rZW4uanNvblwiKSB8fCByZWZyZXNoLmxlbmd0aCA+IDMwMCkge1xuICAgICAgICAgICAgdmFyIHJlZnJlc2ggPSBmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9pY3kvaWN5LWFsaS10b2tlbi5qc29uJywge30pO1xuICAgICAgICAgICAgcHV0TXlWYXIoJ3RpbWVUb2tlbicsIChwYXJzZUludChKU09OLnBhcnNlKHJlZnJlc2gpWzBdLmV4cGlyZXNfaW4pICsgcGFyc2VJbnQobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBsZXQgZGVmZHJpdmVpZCA9IEpTT04ucGFyc2UocmVmcmVzaClbMF0uZGVmYXVsdF9kcml2ZV9pZDtcbiAgICAgICAgICAgIHB1dE15VmFyKCdkZWZkcml2ZWlkJywgZGVmZHJpdmVpZCk7XG4gICAgICAgICAgICB2YXIgYWNjZXNzVGsgPSBKU09OLnBhcnNlKHJlZnJlc2gpWzBdLnRva2VuX3R5cGUgKyAnICcgKyBKU09OLnBhcnNlKHJlZnJlc2gpWzBdLmFjY2Vzc190b2tlbjtcbiAgICAgICAgICAgIC8vbG9nKGFjY2Vzc1RrKTtcbiAgICAgICAgICAgIHB1dE15VmFyKFwiYWxpYWNjZXNzVGtcIiwgYWNjZXNzVGspO1xuICAgICAgICAgICAgbGV0IHVzZXJyZXNpbmZvID0gSlNPTi5wYXJzZShmZXRjaChcImh0dHBzOi8vdXNlci5hbGl5dW5kcml2ZS5jb20vdjIvdXNlci9nZXRcIiwge1xuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiBQQ19VQSxcbiAgICAgICAgICAgICAgICAgICAgXCJhdXRob3JpemF0aW9uXCI6IGFjY2Vzc1RrLFxuICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYm9keToge30sXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGlmICh1c2VycmVzaW5mby5yZXNvdXJjZV9kcml2ZV9pZCkge1xuICAgICAgICAgICAgICAgIGxldCByZXNkcml2ZWlkID0gdXNlcnJlc2luZm8ucmVzb3VyY2VfZHJpdmVfaWQ7XG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3Jlc2RyaXZlaWQnLCByZXNkcml2ZWlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0iLCJwYWdlcyI6Ilt7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6KeE5YiZ5YiX6KGoXCIsXCJwYXRoXCI6XCJkYXRhXCIsXCJydWxlXCI6XCJ2YXIgd3JhcHUgPSAodSkgPT4ge1xcbiAgICBpZiAoY29uZmlnLm1vZGUgPT0gXFxcIuacrOWcsOi9rOeggVxcXCIpIHtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJ1xcbiAgICB9XFxuICAgIGlmICgvYWxpeXVuZHJpdmUvLnRlc3QodSkpIHtcXG4gICAgICAgIGNvbnN0IFtsaW5rLCBfc2hhcmVfcHdkXSA9IHUuc3BsaXQoJz9zaGFyZV9wd2Q9Jyk7XFxuICAgICAgICBjb25zdCBbX2xpbmssIF9mb2xkZXJJRF0gPSBsaW5rLnNwbGl0KCcvZm9sZGVyLycpO1xcbiAgICAgICAgbGV0IHNoYXJlX3B3ZCA9IChfc2hhcmVfcHdkIHx8ICcnKS5zcGxpdCgnI25hbWU9JylbMF0gfHwgJyc7XFxuICAgICAgICBsZXQgc2hhcmVJZCA9IF9saW5rLnNwbGl0KCdjb20vcy8nKVsxXTtcXG4gICAgICAgIHJldHVybiAnc21hcnRkcml2ZTovL3NoYXJlL2Jyb3dzZT9zaGFyZUlkPScgKyBzaGFyZUlkICsgJyZzaGFyZVB3ZD0nICsgc2hhcmVfcHdkO1xcbiAgICB9XFxuICAgIHJldHVybiBcXFwid2ViOi8vXFxcIiArIHU7XFxufTtcXG5cXG52YXIgY2hlY2thbGkgPSAocmVhbHVybCkgPT4ge1xcbiAgICB0cnkge1xcbiAgICAgICAgbGV0IHNoYXJlSWQgPSByZWFsdXJsLnNwbGl0KFxcXCJjb20vcy9cXFwiKVsxXS5zdWJzdHJpbmcoMCwgMTEpO1xcbiAgICAgICAgaWYgKHJlYWx1cmwuaW5jbHVkZXMoXFxcImNvbS9zL1xcXCIpICYmIHJlYWx1cmwgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICBsZXQgc2hhcmUgPSBmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYWxpeXVuZHJpdmUuY29tL2Fkcml2ZS92My9zaGFyZV9saW5rL2dldF9zaGFyZV9ieV9hbm9ueW1vdXNcXFwiLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxuICAgICAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL1xcXCJcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcInNoYXJlX2lkXFxcIjogc2hhcmVJZFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGlmIChzaGFyZS5pbmNsdWRlcyhcXFwic2hhcmVfbGluayBpc1xcXCIpIHx8IHNoYXJlLmluY2x1ZGVzKFxcXCJzaGFyZV9saW5rIGNhbm5vdFxcXCIpKSByZXR1cm4gZmFsc2U7XFxuICAgICAgICB9XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgIHJldHVybiB0cnVlO1xcbn1cXG5cXG5sZXQgcnVsZXMgPSBbe1xcbiAgICAgICAgbmFtZTogXFxcIuS6keebmOi1hOa6kFxcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCB1cmwgPSBcXFwiaHR0cHM6Ly9yZXMueXVucGFuLndpbi8/UGFnZUluZGV4PVxcXCIgKyBwYWdlICsgXFxcIiZQYWdlU2l6ZT0xMiZLZXl3b3JkPVxcXCIgKyBzICsgXFxcIiZUeXBlPSZUYWc9XFxcIjtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QodXJsLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vcmVzLnl1bnBhbi53aW4vXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcIm1haW4mJi5jYXJkXFxcIik7XFxuICAgICAgICAgICAgLy9sb2coYXJyKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBwZGZoKGl0LCBcXFwiLmNhcmQtbGluaywxJiZvbmNsaWNrXFxcIikubWF0Y2goL2h0dHBzOlxcXFwvXFxcXC8od3d3XFxcXC5hbGl5dW5kcml2ZVxcXFwuY29tXFxcXC9zfGFseXdwXFxcXC5uZXQpXFxcXC9cXFxcdyovZykgfHwgW107XFxuICAgICAgICAgICAgICAgIHUgPSB1Lmxlbmd0aCA+IDAgPyB1WzBdIDogdXJsO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXQsIFxcXCIuY2FyZC10aXRsZSYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgcGljX3VybDogcGQoaXQsIFxcXCJpbWcmJnNyY1xcXCIsIHVybCksXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogd3JhcHUodSksXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+5LqR55uY6LWE5rqQPC9mb250PiZuYnNwO1xcXCIgKyAocGRmaChpdCwgXFxcIi5jYXJkLXRleHQsLTEmJlRleHRcXFwiKSkgKyBcXFwiXFxcXG5cXFwiICsgKHUpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0sIHtcXG4gICAgICAgIG5hbWU6IFxcXCJVUOS6keaQnFxcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCB1cmwgPSBcXFwiaHR0cHM6Ly91cGFwaS5qdWFwcDkuY29tL3NlYXJjaD9rZXl3b3JkPVxcXCIgKyBzICsgXFxcIiZwYWdlPVxcXCIgKyBwYWdlICsgXFxcIiZzX3R5cGU9MVxcXCI7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KHVybCwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwiQWNjZXB0XFxcIjpcXFwiKi8vKlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy51cHl1bnNvLmNvbS9cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcIk9yaWdpblxcXCI6XFxcImh0dHBzOi8vd3d3LnVweXVuc28uY29tXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgLy9sb2coYmFzZTY0RGVjb2RlKGh0bWwpKTtcXG4gICAgICAgICAgICBsZXQgYXJyID0gSlNPTi5wYXJzZShiYXNlNjREZWNvZGUoaHRtbCkpLnJlc3VsdC5pdGVtcztcXG4gICAgICAgICAgICAvL2xvZyhhcnIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcbiAgICAgICAgICAgICAgICBsZXQgdSA9IGl0LnBhZ2VfdXJsO1xcbiAgICAgICAgICAgICAgICAvL3UgPSB1Lmxlbmd0aCA+IDAgPyB1WzBdIDogdXJsO1xcbiAgICAgICAgICAgICAgICBpZiAoIXUuaW5jbHVkZXMoXFxcImFsaXl1bmRyaXZlXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXQudGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogd3JhcHUodSksXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+VVDkupHmkJw8L2ZvbnQ+Jm5ic3A7XFxcIiArIFxcXCJcXFxcblxcXCIgKyAodSksXFxuICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgICAgbmFtZTogXFxcIueMq+eLuOebmOaQnFxcXCIsXFxuICAgICAgICBwYWdlOiBmYWxzZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoXFxcImh0dHBzOi8vd3d3LmFsaXBhbnNvdS5jb20vc2VhcmNoP2s9XFxcIiArIHMsIHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYWxpcGFuc291LmNvbS9zZWFyY2g/az1cXFwiICsgc1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcIiNhcHAmJmFcXFwiKTtcXG4gICAgICAgICAgICAvL2xvZyhhcnIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgbGV0IGl0ID0gXFxcIjxkaXY+XFxcIiArIGFycltpXSArIFxcXCI8L2Rpdj5cXFwiO1xcbiAgICAgICAgICAgICAgICBsZXQgdSA9IHBkZmgoaXQsIFxcXCJhJiZocmVmXFxcIik7XFxuICAgICAgICAgICAgICAgIC8vbG9nKHUpO1xcbiAgICAgICAgICAgICAgICBpZiAoIXUuaW5jbHVkZXMoXFxcIi9zL1xcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB1ID0gXFxcImh0dHBzOi8vd3d3LmFsaXBhbnNvdS5jb21cXFwiICsgdS5yZXBsYWNlKFxcXCIvcy9cXFwiLCBcXFwiL2N2L1xcXCIpO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXQsIFxcXCJ0ZW1wbGF0ZSYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKHUpLmxhenlSdWxlKCh3cmFwdSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChpbnB1dCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogXFxcIm5vX3Nob3dfZG9uYXRlPTFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBpbnB1dC5yZXBsYWNlKFxcXCIvY3YvXFxcIiwgXFxcIi9zL1xcXCIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0OiBmYWxzZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgPSBwYXJzZURvbUZvckh0bWwoaHRtbCwgJ2EmJmhyZWYnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3ZhciBfbGlua3MgPSBodG1sLm1hdGNoKC9odHRwczpcXFxcL1xcXFwvKHd3d1xcXFwuYWxpeXVuZHJpdmVcXFxcLmNvbVxcXFwvc3xhbHl3cFxcXFwubmV0KVxcXFwvXFxcXHcqL2cpIHx8IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKF9saW5rcyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGh0bWwubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3JldHVybiAnaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9JyArIF9saW5rc1swXSArICc/P2Z5cGFnZSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudChodG1sKSArICc/Pz9meXBhZ2UnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHUoaHRtbCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXB1KSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7njKvni7jnm5jmkJw8L2ZvbnQ+Jm5ic3A7XFxcIiArIHBkZmgoaXQsIFxcXCJ0ZW1wbGF0ZSwxJiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgICAgbmFtZTogXFxcIuaYk+aQnFxcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSk7XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24ga2V5ZW4oc3RyKSB7XFxuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFwiNE9Ub1NjVUZPYWVWVHJIRVxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFwiOUNMR2FvMXZIS3FtMTdPelxcXCIpO1xcbiAgICAgICAgICAgICAgICB2YXIgZW5jcnlwdGVkID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoe1xcbiAgICAgICAgICAgICAgICAgICAgY2lwaGVydGV4dDogQ3J5cHRvSlMuZW5jLkJhc2U2NC5wYXJzZShzdHIpXFxuICAgICAgICAgICAgICAgIH0sIGtleSwge1xcbiAgICAgICAgICAgICAgICAgICAgaXY6IGl2LFxcbiAgICAgICAgICAgICAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsXFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcXG4gICAgICAgICAgICAgICAgfSkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jcnlwdGVkO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoXFxcImh0dHBzOi8veWlzby5mdW4vYXBpL3NlYXJjaD9uYW1lPVxcXCIgKyBzICsgXFxcIiZwYWdlTm89XFxcIiArIHBhZ2UsIHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly95aXNvLmZ1bi9pbmZvP3NlYXJjaEtleT1cXFwiICsgcyxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBnZXRJdGVtKCd5aXNvdWNvb2tlJywgJycpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAvL2xvZyhodG1sKTtcXG4gICAgICAgICAgICBpZiAoaHRtbC5pbmNsdWRlcygn55m75b2V55So5oi35peg6ZmQ5Yi2JykpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGkgPSAwO1xcbiAgICAgICAgICAgICAgICBkbyB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgdHlpbWdsaW4gPSAnaHR0cHM6Ly95aXNvLmZ1bi9hcGkvdXNlci9sb2dpbi9jYXB0Y2hhP3Q9JyArIHBhcnNlSW50KG5ldyBEYXRlKCkuZ2V0VGltZSgpKSArICcnO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGltZyA9IGNvbnZlcnRCYXNlNjRJbWFnZSh0eWltZ2xpbikuc3BsaXQoJywnKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb2QgPSByZXF1ZXN0KCdodHRwczovL2FwaS5ubi5jaS9vY3IvYjY0L3RleHQnLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ3RleHQvcGxhaW4nXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5OiBpbWcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZlciA9IEpTT04ucGFyc2UocmVxdWVzdCgnaHR0cHM6Ly95aXNvLmZ1bi9hcGkvdXNlci9sb2dpbicsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWZlcmVyJzogJ2h0dHBzOi8veWlzby5mdW4vbG9naW4nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29va2llJzogZ2V0Q29va2llKHR5aW1nbGluKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwidXNlck5hbWVcXFwiOiBcXFwidHZib3gyMDIzXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInBhc3N3b3JkXFxcIjogXFxcIlR2Ym94MjAyM1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJjb2RlXFxcIjogY29kXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZlci5jb2RlID09IDIwMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZygn5piT5pCc55m75YWl6aqM6K+B5oiQ5YqfJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgneWlzb3Vjb29rZScsIGdldENvb2tpZSgnaHR0cHM6Ly95aXNvLmZ1bicpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sID0gcmVxdWVzdChcXFwiaHR0cHM6Ly95aXNvLmZ1bi9hcGkvc2VhcmNoP25hbWU9XFxcIiArIHMgKyBcXFwiJnBhZ2VObz1cXFwiICsgcGFnZSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3lpc28uZnVuL2luZm8/c2VhcmNoS2V5PVxcXCIgKyBzLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IGdldEl0ZW0oJ3lpc291Y29va2UnLCAnJylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgaSsrO1xcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChpIDwgNCk7XFxuXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCBhcnIgPSBKU09OLnBhcnNlKGh0bWwpLmRhdGEubGlzdDtcXG4gICAgICAgICAgICAvL2xvZyhhcnIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcbiAgICAgICAgICAgICAgICBsZXQgdSA9IGtleWVuKGl0LnVybCk7XFxuICAgICAgICAgICAgICAgIC8vbG9nKHUpO1xcbiAgICAgICAgICAgICAgICBpZiAodSA9PSBudWxsIHx8ICF1LmluY2x1ZGVzKFxcXCJhbGl5dW5cXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIGl0Lm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogd3JhcHUodSksXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+5piT5pCcPC9mb250PiZuYnNwO1xcXCIgKyAoaXQuZ210U2hhcmUgfHwgaXQuZ210Q3JlYXRlKSArIFxcXCJcXFxcblxcXCIgKyAodSksXFxuICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgICAgbmFtZTogXFxcIuaJvui1hOa6kFxcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldGh0bWwoKSB7XFxuICAgICAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChcXFwiaHR0cHM6Ly96aGFveml5dWFuLm1lL3NvP2ZpbGVuYW1lPVxcXCIgKyBzICsgXFxcIiZwYWdlPVxcXCIgKyBwYWdlLCB7XFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly96aGFveml5dWFuLm1lL3N0b3AuaHRtbFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcIm9yaWdpblxcXCI6IFxcXCJodHRwczovL3poYW96aXl1YW4ubWVcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBnZXRJdGVtKFxcXCJ6enljb29rZVxcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwidXBncmFkZS1pbnNlY3VyZS1yZXF1ZXN0c1xcXCI6IFxcXCIxXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwiY29udGVudC10eXBlXFxcIjogXFxcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBodG1sO1xcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgdmFyIGh0bWwgPSBnZXRodG1sKCk7XFxuICAgICAgICAgICAgaWYgKCFodG1sLmluY2x1ZGVzKFxcXCJzZWFyY2hfYm94XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgbGV0IHVzZXIgPSAnZFhObGNtNWhiV1U5ZVhCcU1qQXlNeVp3WVhOemQyOXlaRDE1Y0dveU1ESXonO1xcbiAgICAgICAgICAgICAgICBsZXQgY29vayA9IEpTT04ucGFyc2UoZmV0Y2hDb29raWUoJ2h0dHBzOi8vemhhb3ppeXVhbi5tZS9sb2dpdS5odG1sJywge1xcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogTU9CSUxFX1VBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnT3JpZ2luJzogJ2h0dHBzOi8vemhhb3ppeXVhbi5tZScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiAnaHR0cHM6Ly96aGFveml5dWFuLm1lL2xvZ2luLmh0bWwnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ1cGdyYWRlLWluc2VjdXJlLXJlcXVlc3RzXFxcIjogXFxcIjFcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgYm9keTogYmFzZTY0RGVjb2RlKHVzZXIpLFxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXFxuICAgICAgICAgICAgICAgICAgICBvbmx5SGVhZGVyczogdHJ1ZSxcXG4gICAgICAgICAgICAgICAgICAgIHdpdGhIZWFkZXJzOiB0cnVlXFxuICAgICAgICAgICAgICAgIH0pKS5qb2luKCc7Jyk7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInp6eWNvb2tlXFxcIiwgY29vayk7XFxuICAgICAgICAgICAgICAgIGxvZyhcXFwi5om+6LWE5rqQ55m75YWlXFxcIik7XFxuICAgICAgICAgICAgICAgIGh0bWwgPSBnZXRodG1sKCk7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCJib2R5JiYubmV3c0xpc3QmJmxpOm5vdCg6Zmlyc3QtY2hpbGQpXFxcIik7XFxuICAgICAgICAgICAgLy9sb2coYXJyKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBwZGZoKGl0LCBcXFwiYSYmaHJlZlxcXCIpO1xcbiAgICAgICAgICAgICAgICBpZiAodSA9PSBudWxsKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB1ID0gXFxcImh0dHBzOi8vemhhb3ppeXVhbi5tZS9cXFwiICsgdTtcXG4gICAgICAgICAgICAgICAgLy9sb2codSk7XFxuICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IHBkZmgoaXQsIFxcXCIubmV3c190ZXh0JiZoMyYmVGV4dFxcXCIpO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPuaJvui1hOa6kDwvZm9udD4mbmJzcDtcXFwiICsgKHBkZmgoaXQsIFxcXCIubmV3c190ZXh0JiZwJiZUZXh0XFxcIikpLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKHUpLmxhenlSdWxlKCh3cmFwdSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9saW5rcyA9IGh0bWwubWF0Y2goL2h0dHBzOlxcXFwvXFxcXC8od3d3XFxcXC5hbGl5dW5kcml2ZVxcXFwuY29tXFxcXC9zfGFseXdwXFxcXC5uZXQpXFxcXC9cXFxcdyovZykgfHwgW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2coX2xpbmtzKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2xpbmtzLmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyBfbGlua3NbMF0gKyAnPz9meXBhZ2UnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3JldHVybiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQoX2xpbmtzWzBdKSArICc/Pz9meXBhZ2UnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHUoX2xpbmtzWzBdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHUpXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgICAgbmFtZTogXFxcIuWwj+e6uOadoVxcXCIsXFxuICAgICAgICBwYWdlOiBmYWxzZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBmdW5jdGlvbiBnZXR0b2tlbigpIHtcXG4gICAgICAgICAgICAgICAgaWYgKGdldE15VmFyKCd4enl0b2tlbicsICcnKS5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRva2VuID0gSlNPTi5wYXJzZShwb3N0KCdodHRwczovL2dpdGNhZmUubmV0L3Rvb2wvYWxpcGFwZXIvJywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiAnaHR0cHM6Ly91LmdpdGNhZmUubmV0LydcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAnZ2V0X3Rva2VuJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pKS5kYXRhO1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3h6dHRva2VuJywgdG9rZW4pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRNeVZhcigneHp0dG9rZW4nLCAnJyk7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNhdF9jb2RlKGEpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGQsIGUsIGIgPSBbXFxcIuWNjuivreeUteinhlxcXCIsIFxcXCLml6Xpn6nnlLXop4ZcXFwiLCBcXFwi5qyn576O55S16KeGXFxcIiwgXFxcIuWFtuS7lueUteinhlxcXCIsIFxcXCLljY7or63nlLXlvbFcXFwiLCBcXFwi5pel6Z+p55S15b2xXFxcIiwgXFxcIuasp+e+jueUteW9sVxcXCIsIFxcXCLlhbbku5bnlLXlvbFcXFwiLCBcXFwi5Y2O6K+t5Yqo5ryrXFxcIiwgXFxcIuaXpemfqeWKqOa8q1xcXCIsIFxcXCLmrKfnvo7liqjmvKtcXFwiLCBcXFwi57qq5b2V54mHXFxcIiwgXFxcIue7vOiJuueJh1xcXCIsIFxcXCLmlZnogrLln7norq1cXFwiLCBcXFwi5YW25LuW6KeG6aKRXFxcIiwgXFxcIuWNjuivremfs+S5kFxcXCIsIFxcXCLml6Xpn6npn7PkuZBcXFwiLCBcXFwi5qyn576O6Z+z5LmQXFxcIiwgXFxcIuWFtuS7lumfs+S5kFxcXCIsIFxcXCLlqLHkuZDova/ku7ZcXFwiLCBcXFwi57O757uf6L2v5Lu2XFxcIiwgXFxcIue9kee7nOi9r+S7tlxcXCIsIFxcXCLlip7lhazova/ku7ZcXFwiLCBcXFwi5YW25LuW6L2v5Lu2XFxcIiwgXFxcIua8q+eUu1xcXCIsIFxcXCLlsI/or7RcXFwiLCBcXFwi5Ye654mI5LmmXFxcIiwgXFxcIuefpeivhuWfueiurVxcXCIsIFxcXCLlhbbku5bmlofmoaNcXFwiLCBcXFwi5aOB57q4XFxcIiwgXFxcIuS6uueJqVxcXCIsIFxcXCLpo47mma9cXFwiLCBcXFwi5YW25LuW5Zu+54mHXFxcIiwgXFxcIuWFtuS7llxcXCJdLFxcbiAgICAgICAgICAgICAgICAgICAgYyA9IFtcXFwiaHlkc1xcXCIsIFxcXCJyaGRzXFxcIiwgXFxcIm9tZHNcXFwiLCBcXFwicXRkc1xcXCIsIFxcXCJoeWR5XFxcIiwgXFxcInJoZHlcXFwiLCBcXFwib21keVxcXCIsIFxcXCJxdGR5XFxcIiwgXFxcImh5ZG1cXFwiLCBcXFwicmhkbVxcXCIsIFxcXCJvbWRtXFxcIiwgXFxcImpscFxcXCIsIFxcXCJ6eXBcXFwiLCBcXFwianlweFxcXCIsIFxcXCJxdHNwXFxcIiwgXFxcImh5eXlcXFwiLCBcXFwicmh5eVxcXCIsIFxcXCJvbXl5XFxcIiwgXFxcInF0eXlcXFwiLCBcXFwia2ZyalxcXCIsIFxcXCJ4dHJqXFxcIiwgXFxcIndscmpcXFwiLCBcXFwiYmdyalxcXCIsIFxcXCJxdHJqXFxcIiwgXFxcIm1oXFxcIiwgXFxcInhzXFxcIiwgXFxcImNic1xcXCIsIFxcXCJ6c3B4XFxcIiwgXFxcInF0d2RcXFwiLCBcXFwiYnpcXFwiLCBcXFwicndcXFwiLCBcXFwiZmpcXFwiLCBcXFwicXR0cFxcXCIsIFxcXCJxdFxcXCJdO1xcbiAgICAgICAgICAgICAgICBmb3IgKGQgPSAwLCBlID0gYy5sZW5ndGg7IGUgPiBkOyBkKyspXFxuICAgICAgICAgICAgICAgICAgICBpZiAoY1tkXSA9PSBhKSByZXR1cm4gYltkXTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHBvc3QoXFxcImh0dHBzOi8vZ2l0Y2FmZS5uZXQvdG9vbC9hbGlwYXBlci9cXFwiLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vdS5naXRjYWZlLm5ldC8nXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGJvZHk6IHtcXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogXFxcInNlYXJjaFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBmcm9tOiBcXFwid2ViXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHRva2VuOiBnZXR0b2tlbigpLFxcbiAgICAgICAgICAgICAgICAgICAga2V5d29yZDogc1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBsZXQgbGlzdCA9IEpTT04ucGFyc2UoaHRtbCk7XFxuICAgICAgICAgICAgaWYgKGxpc3QuZGF0YSkge1xcbiAgICAgICAgICAgICAgICBsaXN0ID0gbGlzdC5kYXRhO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgbGV0IGl0ID0gbGlzdFtpXVxcbiAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBpdC50aXRsZTtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBpdC5hbGlrZXk7XFxuICAgICAgICAgICAgICAgIGlmICh1ID09IG51bGwpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGxldCBtdXJsID0gJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS9zLycgKyB1O1xcblxcbiAgICAgICAgICAgICAgICBpZiAoIWNoZWNrYWxpKG11cmwpKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAodGl0bGUuaW5jbHVkZXMocykpIHtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLiiJogXFxcIiArIHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7lsI/nurjmnaE8L2ZvbnQ+Jm5ic3A7XFxcIiArIGNhdF9jb2RlKGl0LmNhdCksXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzOiBpdC5kZXNcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9aHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL3MvJyArIG11cmwgKyAnPz9meXBhZ2UnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogd3JhcHUobXVybClcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KCdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vcy8nICsgbXVybCkgKyAnPz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAgICBuYW1lOiBcXFwi546p5YG25ZOl5ZOlXFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IHVybCA9IFxcXCJodHRwOi8vd29nZy54eXovaW5kZXgucGhwL3ZvZHNlYXJjaC9cXFwiICsgcyArIFxcXCItLS0tLS0tLS0tXFxcIiArIHBhZ2UgKyBcXFwiLS0tLmh0bWxcXFwiO1xcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdCh1cmwsIHt9KTtcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnLm1vZHVsZS1pdGVtcyYmLm1vZHVsZS1zZWFyY2gtaXRlbScpO1xcbiAgICAgICAgICAgIC8vbG9nKGFycik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBsZXQgYmV0ID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcbiAgICAgICAgICAgICAgICBsZXQgdXRpdGxlID0gcGFyc2VEb21Gb3JIdG1sKGl0LCAnaDMmJmEmJlRleHQnKTtcXG4gICAgICAgICAgICAgICAgbGV0IHVzZXJpYWwgPSBwYXJzZURvbUZvckh0bWwoaXQsICcudmlkZW8tc2VyaWFsJiZUZXh0Jyk7XFxuICAgICAgICAgICAgICAgIGxldCB1aW1hZ2UgPSBwYXJzZURvbShpdCwgJy5sYXp5bG9hZCYmZGF0YS1zcmMnLCAnaHR0cDovL3dvZ2cueHl6LycpO1xcbiAgICAgICAgICAgICAgICBsZXQgdSA9IHBhcnNlRG9tKGl0LCAnaDMmJmEmJmhyZWYnLCAnaHR0cDovL3dvZ2cueHl6LycpO1xcbiAgICAgICAgICAgICAgICAvL2xldCBkZXQgPSByZXF1ZXN0KHUsIHt9KTtcXG4gICAgICAgICAgICAgICAgYmV0LnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHV0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogdSxcXG4gICAgICAgICAgICAgICAgICAgIGltYWdlOiB1aW1hZ2UsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiB1c2VyaWFsXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoYmV0Lmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICAgICAgbGV0IGJldGggPSBiYXRjaEZldGNoKGJldCk7XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmV0aC5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxpc3QgPSBwYXJzZURvbUZvckFycmF5KGJldGhbaV0sICcubW9kdWxlLXBsYXllci1saXN0JiZwJylcXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGlzdC5sZW5ndGg7IGorKykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1ID0gcGFyc2VEb21Gb3JIdG1sKGxpc3Rbal0sICdwJiZUZXh0Jyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1LmluY2x1ZGVzKFxcXCIvcy9cXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGJldFtpXS50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljX3VybDogYmV0W2ldLmltYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudCh1KSArICc/Pz9meXBhZ2UnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KHUpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+546p5YG25ZOl5ZOlPC9mb250PiZuYnNwO1xcXCIgKyAoYmV0W2ldLmRlc2MpICsgJ1xcXFxuJyArIHUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0sIHtcXG4gICAgICAgIG5hbWU6IFxcXCLpmL/ph4zkupHnm5jnvZFcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBsZXQgdXJsID0gXFxcImh0dHBzOi8vd3d3LmFseXB3LmNuL3NlYXJjaC5waHA/cT1cXFwiICsgcyArIFxcXCImcGFnZT1cXFwiICsgcGFnZTtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QodXJsLCB7fSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwgJy5saXN0JiZsaScpO1xcbiAgICAgICAgICAgIC8vbG9nKGFycik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBsZXQgYmV0ID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcbiAgICAgICAgICAgICAgICBsZXQgdXRpdGxlID0gcGFyc2VEb21Gb3JIdG1sKGl0LCAnYSYmdGl0bGUnKTtcXG4gICAgICAgICAgICAgICAgbGV0IHVzZXJpYWwgPSBwYXJzZURvbUZvckh0bWwoaXQsICcuZmEtY2xvY2stbyYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgICBsZXQgdWltYWdlID0gcGFyc2VEb20oaXQsICdpbWcmJnNyYycsICdodHRwczovL3d3dy5hbHlwdy5jbi8nKTtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBwYXJzZURvbShpdCwgJ2EmJmhyZWYnLCAnaHR0cHM6Ly93d3cuYWx5cHcuY24vJyk7XFxuICAgICAgICAgICAgICAgIC8vbGV0IGRldCA9IHJlcXVlc3QodSwge30pO1xcbiAgICAgICAgICAgICAgICBpZiAoIXV0aXRsZS5pbmNsdWRlcyhzKSkge1xcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgYmV0LnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHV0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogdSxcXG4gICAgICAgICAgICAgICAgICAgIGltYWdlOiB1aW1hZ2UsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiB1c2VyaWFsXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAvL2xvZyhiZXQpO1xcbiAgICAgICAgICAgIGlmIChiZXQubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgICAgICBsZXQgYmV0aCA9IGJhdGNoRmV0Y2goYmV0KTtcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiZXRoLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgbGlzdCA9IHBhcnNlRG9tRm9yQXJyYXkoYmV0aFtpXSwgJ2JvZHkmJmFbaHJlZl49aHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL3MvXScpXFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyhsaXN0KTtcXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGlzdC5sZW5ndGg7IGorKykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1ID0gcGFyc2VEb21Gb3JIdG1sKGxpc3Rbal0sICdhJiZocmVmJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGJldFtpXS50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljX3VybDogYmV0W2ldLmltYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudCh1KSArICc/Pz9meXBhZ2UnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KHUpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+6Zi/6YeM5LqR55uY572RPC9mb250PiZuYnNwO1xcXCIgKyAoYmV0W2ldLmRlc2MpICsgJ1xcXFxuJyArIHUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIC8q5aSx5pWIIHtcXG4gICAgICAgICAgICBuYW1lOiBcXFwi5Zyf5ouo6bygXFxcIixcXG4gICAgICAgICAgICBwYWdlOiBmYWxzZSxcXG4gICAgICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgICAgIGxldCBodG1sID0gZmV0Y2goJ2h0dHBzOi8vd3d3LnRic2R5LmNvbS9zZWFyY2guaHRtbD9rZXl3b3JkPScgKyBzICsgJyZjYXRlZ29yeT05ODM5MjAmZGF0YV90eXBlPTk4NzkxMCcsIHtcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6IFBDX1VBXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICBsZXQgYXJyID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnLnNlYXJjaF9yZXN1bHRfbmV0ZGlza19saXN0JiZhJyk7XFxuICAgICAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyhpdCk7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IHBhcnNlRG9tRm9ySHRtbChpdCwgJ2EmJmhyZWYnKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB0aXQgPSBwYXJzZURvbUZvckh0bWwoaXQsICcubmV0ZGlza19pdGVtX2RldGFpbF9uYW1lJiZUZXh0Jyk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRpdC5pbmNsdWRlcyhzKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgLy9sb2codSk7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdSArICc/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudCh1KSArICc/Pz9meXBhZ2UnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogd3JhcHUodSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPuWcn+aLqOm8oOaQnDwvZm9udD4mbmJzcDtcXFwiICsgXFxcIlxcXFxuXFxcIiArIHUsXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCovXFxuICAgIHtcXG4gICAgICAgIG5hbWU6IFxcXCLpmL/ph4zmkJxcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdCgnaHR0cHM6Ly9hbGlzby5jYy9zLycgKyBzICsgJy0nICsgcGFnZSArICctMC5odG1sJywge30pO1xcblxcbiAgICAgICAgICAgIGxldCBsaXN0ID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnLnNlYXJjaC1yZXN1bHQmJi5yZXNvdXJjZS1pdGVtJyk7XFxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaXN0Lmxlbmd0aDsgaisrKSB7XFxuICAgICAgICAgICAgICAgIGxldCB1ID0gbGlzdFtqXTtcXG4gICAgICAgICAgICAgICAgbGV0IHRpdCA9IHBhcnNlRG9tRm9ySHRtbCh1LCAnaDMmJlRleHQnKTtcXG4gICAgICAgICAgICAgICAgaWYgKCF0aXQuaW5jbHVkZXMocykpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0LFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKHBhcnNlRG9tKHUsICdoMyYmYSYmaHJlZicsICdodHRwczovL2FsaXNvLmNjLycpKS5sYXp5UnVsZSgod3JhcHUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlY3J5KHN0cikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcIjlFQjIwRERGRDZBRkJENjhcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuY3J5cHRlZCA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KHN0ciwga2V5LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdjoga2V5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW5jcnlwdGVkO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBidXQgPSBwYXJzZURvbShodG1sLCAnLmJ1dHRvbiYmaHJlZicsICdodHRwczovL2FsaXNvLmNjLycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKGJ1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGdvdCA9IHJlcXVlc3QoYnV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2xvZyhnb3QpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwocGFyc2VEb21Gb3JIdG1sKGdvdCwgJ2hlYWQmJnNjcmlwdCwxJiZIdG1sJykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwdShkZWNyeShiYXNlNjQuc3BsaXQoJyEnKVswXSkpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHUpLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPumYv+mHjOaQnDwvZm9udD4mbmJzcDtcXFwiICsgcGFyc2VEb21Gb3JIdG1sKHUsICcudGltZSYmVGV4dCcpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIC8q5aSx5pWIe1xcbiAgICAgICAgICAgbmFtZTogXFxcIuWcn+eLl+aQnFxcXCIsXFxuICAgICAgICAgICBwYWdlOiBmYWxzZSxcXG4gICAgICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoJ2h0dHBzOi8vd3d3LnR1Z291c291LmNvbS9zZWFyY2gnLCB7XFxuICAgICAgICAgICAgICAgICAgIGJvZHk6ICdrZXl3b3JkPScgKyBzLFxcbiAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgIGxldCBhcnIgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsICcubGF5dWktY29udGFpbmVyLDEmJi5sYXl1aS1yb3c6aGFzKGEpJyk7XFxuICAgICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxuICAgICAgICAgICAgICAgICAgIGxldCB1ID0gcGFyc2VEb21Gb3JIdG1sKGl0LCAnYSYmaHJlZicpO1xcbiAgICAgICAgICAgICAgICAgICBpZiAoIXUuaW5jbHVkZXMoXFxcIi9zL1xcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAvL2xvZyh1KTtcXG4gICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwYXJzZURvbUZvckh0bWwoaXQsICdhJiZUZXh0JyksXFxuICAgICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgICAgIHVybDogd3JhcHUodSksXFxuICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+5Zyf54uX5pCcPC9mb250PiZuYnNwO1xcXCIgKyBwYXJzZURvbUZvckh0bWwoaXQsICdwLC0xJiZUZXh0JykgKyBcXFwiXFxcXG5cXFwiICsgdSxcXG4gICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgICAgfVxcbiAgICAgICB9LCAqL1xcbiAgICB7XFxuICAgICAgICBuYW1lOiBcXFwi5LqR55uY5YiG5Lqr56S+XFxcIixcXG4gICAgICAgIHBhZ2U6IGZhbHNlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSk7XFxuXFxuICAgICAgICAgICAgZnVuY3Rpb24gZGVjcnkoc3RyKSB7XFxuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFwiNUY2QjJBSzMzREFTRDEyM1xcXCIpO1xcbiAgICAgICAgICAgICAgICB2YXIgZW5jcnlwdGVkID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoc3RyLCBrZXksIHtcXG4gICAgICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuRUNCLFxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxuICAgICAgICAgICAgICAgIH0pLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3J5cHRlZDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KCdodHRwczovL3d3dy55dW5wYW5mZW54aWFuZy5jbi9hcGkvYmJzL2FwaS9nZXRkYXRhP2tleT0nICsgcyArICcmdHlwZT12aWRlbycsIHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cueXVucGFuZmVueGlhbmcuY24vXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgbGV0IGpzb24gPSBkZWNyeShKU09OLnBhcnNlKGh0bWwpLmRhdGEpO1xcbiAgICAgICAgICAgIC8vbG9nKGpzb24pO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBKU09OLnBhcnNlKGpzb24pOyAvL1swXS5yZXN1bHQuaXRlbXM7XFxuICAgICAgICAgICAgLy9sb2coYXJyKTtcXG5cXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGxldCBiZXQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxuICAgICAgICAgICAgICAgIGxldCB1cmwgPSBpdC5waWQ7XFxuICAgICAgICAgICAgICAgIGJldC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2h0dHBzOi8vd3d3Lnl1bnBhbmZlbnhpYW5nLmNuL2FwaS9iYnMvYXBpL2dldGFydGljbGU/aWQ9JyArIHVybCxcXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3Lnl1bnBhbmZlbnhpYW5nLmNuL1xcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAvL2xvZyh1KTtcXG4gICAgICAgICAgICBsZXQgYmV0aCA9IGJhdGNoRmV0Y2goYmV0KTtcXG5cXG4gICAgICAgICAgICAvL2xvZyhhcnRpY2xlKTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJldGgubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGJldGhbaV0pLmRhdGE7XFxuICAgICAgICAgICAgICAgIC8vbG9nKGpzb24pO1xcbiAgICAgICAgICAgICAgICBsZXQgbGlzdCA9IGpzb24uZG93bmxvYWQuc3BsaXQoJ0AnKTtcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaXN0Lmxlbmd0aDsgaisrKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IGxpc3Rbal07XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBqc29uLnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9JyArIHUgKyAnPz9meXBhZ2UnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KCdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vcy8nICsgdSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPuS6keebmOWIhuS6q+ekvjwvZm9udD4mbmJzcDtcXFwiICsgKGpzb24uY3JlYXRldGltZSkgKyBcXFwiXFxcXG5cXFwiICsgKCdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vcy8nICsgdSksXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgICAgbmFtZTogXFxcIuebmOaQnFxcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIHBhZ2UgPSAocGFnZSAtIDEpICogMTA7XFxuICAgICAgICAgICAgbGV0IHVybCA9IFxcXCJodHRwczovL3d3dy5wYW5zZWFyY2gubWUvc2VhcmNoP2tleXdvcmQ9XFxcIiArIHMgKyBcXFwiJm9mZnNldD1cXFwiICsgcGFnZSArIFxcXCImcGFuPWFsaXl1bmRyaXZlXFxcIjtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QodXJsLCB7fSk7XFxuXFxuICAgICAgICAgICAgbGV0IGFyciA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwgJy5ncmlkJiYuc2hhZG93OmhhcyhhW2hyZWZePWh0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS9zL10pJyk7XFxuICAgICAgICAgICAgLy9sb2coYXJyKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBwYXJzZURvbUZvckh0bWwoaXQsICdhW2hyZWZePWh0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS9zL10mJmhyZWYnKTtcXG4gICAgICAgICAgICAgICAgLy9sb2codSk7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGFyc2VEb21Gb3JIdG1sKGl0LCAnLmJyZWFrLWFsbCYmVGV4dCcpLnNwbGl0KCdodHRwJylbMF0sXFxuICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBwYXJzZURvbUZvckh0bWwoaXQsICdpbWcmJnNyYycpLFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdSArICc/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KHUpICsgJz8/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KHUpLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPuebmOaQnDwvZm9udD4mbmJzcDtcXFwiICsgKHBhcnNlRG9tRm9ySHRtbChpdCwgJ3AmJlRleHQnKSkgKyBcXFwiXFxcXG5cXFwiICsgKHUpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIG5hbWU6IFxcXCJET1ZY5pCcXFxcIixcXG4gICAgICAgIHBhZ2U6IGZhbHNlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCB1cmwgPSBcXFwiaHR0cHM6Ly9hcGkuZG92eC50ay9hbGkvc2VhcmNoP3dkPVxcXCIgKyBzO1xcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdCh1cmwsIHt9KTtcXG4gICAgICAgICAgICAvL2xvZyhiYXNlNjREZWNvZGUoaHRtbCkpO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBKU09OLnBhcnNlKGh0bWwpLmxpc3Q7XFxuICAgICAgICAgICAgLy9sb2coYXJyKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBpdC52b2RfY29udGVudDtcXG4gICAgICAgICAgICAgICAgLy91ID0gdS5sZW5ndGggPiAwID8gdVswXSA6IHVybDtcXG4gICAgICAgICAgICAgICAgaWYgKCF1LmluY2x1ZGVzKFxcXCJhbGl5dW5kcml2ZVxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoIWNoZWNrYWxpKHUpKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLiiJogXFxcIiArIGl0LnZvZF9uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgcGljX3VybDogaXQudm9kX3BpYyxcXG4gICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9JyArIHUgKyAnPz9meXBhZ2UnLFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudCh1KSArICc/Pz9meXBhZ2UnLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB3cmFwdSh1KSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT5ET1ZY5pCcPC9mb250PiZuYnNwO1xcXCIgKyBcXFwiXFxcXG5cXFwiICsgKHUpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIG5hbWU6IFxcXCLlv4XlupRcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBsZXQgdXJsID0gXFxcImh0dHBzOi8vY24uYmluZy5jb20vc2VhcmNoP3E9XFxcIiArIHMgKyBcXFwiK2FsaXl1bmRyaXZlJnFzPWRzJmZvcm09UUJSRVxcXCI7XFxuICAgICAgICAgICAgaWYgKHBhZ2UgIT0gMSkge1xcbiAgICAgICAgICAgICAgICB1cmwgPSBnZXRNeVZhcihcXFwiYmluZ1xcXCIsIHVybCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdCh1cmwsIHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly9jbi5iaW5nLmNvbS9cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgLy9cXFwiWC1SZXF1ZXN0ZWQtV2l0aFxcXCI6IFxcXCJjb20uZXhhbXBsZS5oaWtlcnZpZXdcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcIkFjY2VwdFxcXCI6IFxcXCJ0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxpY2F0aW9uL3htbDtxPTAuOSxpbWFnZS9hdmlmLGltYWdlL3dlYnAsaW1hZ2UvYXBuZywqLyo7cT0wLjgsYXBwbGljYXRpb24vc2lnbmVkLWV4Y2hhbmdlO3Y9YjM7cT0wLjlcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFwiYm9keSYmYVxcXCIpO1xcbiAgICAgICAgICAgIC8vbG9nKGFycik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxuICAgICAgICAgICAgICAgIGxldCB1ID0gcGQoaXQsIFxcXCJhJiZocmVmXFxcIiwgdXJsKTtcXG4gICAgICAgICAgICAgICAgbGV0IHQgPSBwZGZoKGl0LCBcXFwiYSYmVGV4dFxcXCIpO1xcbiAgICAgICAgICAgICAgICBpZiAoaXQuaW5jbHVkZXMoXFxcIk5leHQgcGFnZVxcXCIpIHx8IGl0LmluY2x1ZGVzKFxcXCLkuIvkuIDpobVcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUyID0gcGQoaXQsIFxcXCJhJiZocmVmXFxcIiwgdXJsKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKFxcXCJuZXh0IHBhZ2VcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKHUyKTtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJiaW5nXFxcIiwgdTIpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmICh1ID09IG51bGwgfHwgdCA9PSBudWxsIHx8ICFpdC5pbmNsdWRlcyhzKSkge1xcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKCFpdC5pbmNsdWRlcyhcXFwi572R55uYXFxcIikgJiYgIWl0LmluY2x1ZGVzKFxcXCLkupHnm5hcXFwiKSAmJlxcbiAgICAgICAgICAgICAgICAgICAgIWl0LmluY2x1ZGVzKFxcXCJhbGl5dW5kcml2ZVxcXCIpICYmICFpdC5pbmNsdWRlcyhcXFwieXVucGFuXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmICh1LnN0YXJ0c1dpdGgoXFxcImh0dHBzOi8vY24uYmluZy5jb20vXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGxldCBkb20gPSBnZXRIb21lKHUpLnJlcGxhY2UoXFxcImh0dHA6Ly9cXFwiLCBcXFwiXFxcIikucmVwbGFjZShcXFwiaHR0cHM6Ly9cXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgIGxldCBfbGlua3MgPSB0Lm1hdGNoKC9odHRwczpcXFxcL1xcXFwvKHd3d1xcXFwuYWxpeXVuZHJpdmVcXFxcLmNvbVxcXFwvc3xhbHl3cFxcXFwubmV0KVxcXFwvXFxcXHcqL2cpIHx8IFtdO1xcbiAgICAgICAgICAgICAgICAvL2xvZyhfbGlua3MpO1xcbiAgICAgICAgICAgICAgICBsZXQgYyA9IG51bGw7XFxuICAgICAgICAgICAgICAgIC8vbG9nKF9saW5rcyk7XFxuICAgICAgICAgICAgICAgIC8vaWYgKF9saW5rcy5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgICAgIC8vYyA9ICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudChfbGlua3NbMF0pICsgJz8/P2Z5cGFnZSc7XFxuICAgICAgICAgICAgICAgIC8vYz13cmFwdShfbGlua3NbMF0pXFxuICAgICAgICAgICAgICAgIC8vfVxcbiAgICAgICAgICAgICAgICBpZiAoX2xpbmtzLmxlbmd0aCA+IDEgJiYgX2xpbmtzWzFdLnJlcGxhY2UoX2xpbmtzWzBdLCBcXFwiXFxcIikucmVwbGFjZSgvW2EtekEtWjAtOV0rL2csIFxcXCJcXFwiKSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgYyA9IHdyYXB1KF9saW5rc1sxXSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoX2xpbmtzLmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICAgICAgICAgIGMgPSB3cmFwdShfbGlua3NbMF0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdCxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7lv4XlupQ8L2ZvbnQ+Jm5ic3A7XFxcIiArIGRvbSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogYyAhPSBudWxsID8gYyA6ICQodSkubGF6eVJ1bGUoKHdyYXB1LCBtb2RlKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2xpbmtzID0gaHRtbC5tYXRjaCgvaHR0cHM6XFxcXC9cXFxcLyh3d3dcXFxcLmFsaXl1bmRyaXZlXFxcXC5jb21cXFxcL3N8YWx5d3BcXFxcLm5ldClcXFxcL1xcXFx3Ki9nKSB8fCBbXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2xvZyhfbGlua3MpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYgKF9saW5rcy5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyBfbGlua3NbMF0gKyAnPz9meXBhZ2UnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudChfbGlua3NbMF0pICsgJz8/P2Z5cGFnZSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9saW5rcy5sZW5ndGggPiAxICYmIF9saW5rc1sxXS5yZXBsYWNlKF9saW5rc1swXSwgXFxcIlxcXCIpLnJlcGxhY2UoL1thLXpBLVowLTldKy9nLCBcXFwiXFxcIikgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXB1KF9saW5rc1sxXSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfbGlua3MubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHUoX2xpbmtzWzBdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcnVsZSA9IE1ZX1JVTEUudGl0bGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3lzZng/cnVsZT1cXFwiICsgcnVsZSArIFxcXCImcj1cXFwiICsgcnVsZSArIFxcXCImbW9kZT1cXFwiICsgbW9kZSArIFxcXCIjI1xcXCIgKyBpbnB1dDtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwdSwgY29uZmlnLm1vZGUpXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH1cXG4gICAgfVxcbl07XFxuXFxuLypcXG5sZXQgY2NvZiA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2Njb2YnKVxcbnJ1bGVzLnB1c2goY2NvZilcXG4qL1xcbi8v5bm25Y+R6KeE5YiZ5pWwXFxubGV0IHNpemUgPSAxMDtcXG5cXG4kLmV4cG9ydHMgPSBmdW5jdGlvbihwYWdlLCBydWxlKSB7XFxuICAgIGlmICghcGFnZSAmJiAhcnVsZSkge1xcbiAgICAgICAgcmV0dXJuIHJ1bGVzLm1hcChpdCA9PiBpdC5uYW1lKTtcXG4gICAgfVxcbiAgICBpZiAocnVsZSAhPSBudWxsKSB7XFxuICAgICAgICBpZiAocGFnZSAhPSBudWxsICYmIHBhZ2UgPiAxKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVzLmZpbHRlcihpID0+IGkubmFtZSA9PSBydWxlICYmIGkucGFnZSk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gcnVsZXMuZmlsdGVyKGkgPT4gaS5uYW1lID09IHJ1bGUpO1xcbiAgICB9XFxuICAgIGxldCBzdGFydCA9IChwYWdlIC0gMSkgKiBzaXplO1xcbiAgICBpZiAocnVsZXMubGVuZ3RoIDwgc3RhcnQgKyAxKSB7XFxuICAgICAgICByZXR1cm4gW107XFxuICAgIH1cXG4gICAgbGV0IGxlbiA9IHNpemU7XFxuICAgIGlmIChydWxlcy5sZW5ndGggPCBwYWdlICogc2l6ZSkge1xcbiAgICAgICAgbGVuID0gcnVsZXMubGVuZ3RoIC0gc3RhcnRcXG4gICAgfVxcbiAgICByZXR1cm4gcnVsZXMuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgbGVuKTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmkJzntKJcIixcInBhdGhcIjpcInNvdVwiLFwicnVsZVwiOlwibGV0IHIgPSBnZXRJdGVtKFxcXCJyXFxcIiwgXFxcIlxcXCIpO1xcbmlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgbGV0IHIxID0gZmV0Y2goXFxcImhpa2VyOi8vaG9tZUBYWVHmjqjpgIFcXFwiKTtcXG4gICAgaWYgKCFyMSB8fCByMS5sZW5ndGggPD0gNSkge1xcbiAgICAgICAgbGV0IHJ1ID0gJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCLmtbfpmJTop4bnlYzop4TliJnliIbkuqvvvIzlvZPliY3liIbkuqvnmoTmmK/vvJrlsI/nqIvluo/vv6Vob21lX3J1bGVfdjLvv6ViYXNlNjQ6Ly9AWFlR5o6o6YCBQGV5SnNZWE4wWDJOb1lYQjBaWEpmY25Wc1pTSTZJaUlzSW5ScGRHeGxJam9pV0ZsUjVvNm82WUNCSWl3aVlYVjBhRzl5SWpvaTZhYVo2WnVGNW9PRklpd2lkWEpzSWpvaWFHbHJaWEk2THk5bGJYQjBlU0lzSW5abGNuTnBiMjRpT2pFc0ltTnZiRjkwZVhCbElqb2liVzkyYVdWZk15SXNJbU5zWVhOelgyNWhiV1VpT2lJaUxDSjBlWEJsSWpvaWRHOXZiQ0lzSW1Oc1lYTnpYM1Z5YkNJNklpSXNJbUZ5WldGZmJtRnRaU0k2SWlJc0ltRnlaV0ZmZFhKc0lqb2lJaXdpYzI5eWRGOXVZVzFsSWpvaUlpd2llV1ZoY2w5dVlXMWxJam9pSWl3aWMyOXlkRjkxY213aU9pSWlMQ0o1WldGeVgzVnliQ0k2SWlJc0ltWnBibVJmY25Wc1pTSTZJbXB6T2x4dWJHVjBJR1FnUFNCYlhUdGNibVF1Y0hWemFDaDdYRzRnSUNBZ2RHbDBiR1U2SUNmb3JyN252YTdubExYb3A0WkpVQ2NzWEc0Z0lDQWdkWEpzT2lCY0ltbHVjSFYwT2k4dlhDSWdLeUJuWlhSSmRHVnRLQ2RvYVd0bGNuUjJZbTk0YzJWMEp5d2dKMmgwZEhBNkx5OG5JQ3NnWjJWMFNWQW9LU0FySUNjNk9UazNPQ2NwSUNzZ1hDSXZMeTh2NksrMzZMNlQ1WVdsZEhaaWIzam1qcWpwZ0lGSlVPV2NzT1dkZ08rOGpPV21nbWgwZEhBNkx5OWNJaUFySUdkbGRFbFFLQ2tnS3lCY0lqbzVPVGM0TG1wek9uTmxkRWwwWlcwb0oyaHBhMlZ5ZEhaaWIzaHpaWFFuTEdsdWNIVjBLVHR5WldaeVpYTm9VR0ZuWlNncFhDSXNYRzRnSUNBZ1kyOXNYM1I1Y0dVNklDZHpZM0p2Ykd4ZlluVjBkRzl1SjF4dWZTazdYRzVrTG5CMWMyZ29lMXh1SUNBZ0lIUnBkR3hsT2lCblpYUkpkR1Z0S0Nkb2FXdGxjblIyWW05NGMyVjBKeXdnSnljcExGeHVJQ0FnSUM4dmRYSnNPaUFuYUdsclpYSTZMeTlsYlhCMGVTY3NYRzRnSUNBZ2RYSnNPaUJjSW1sdWNIVjBPaTh2WENJZ0t5Qm5aWFJKZEdWdEtDZG9hV3RsY25SMlltOTRjMlYwSnl3Z0oyaDBkSEE2THk4bklDc2daMlYwU1ZBb0tTQXJJQ2M2T1RrM09DY3BJQ3NnWENJdkx5OHY2SyszNkw2VDVZV2xkSFppYjNqbWpxanBnSUZKVU9XY3NPV2RnTys4ak9XbWdtaDBkSEE2THk5Y0lpQXJJR2RsZEVsUUtDa2dLeUJjSWpvNU9UYzRMbXB6T25ObGRFbDBaVzBvSjJocGEyVnlkSFppYjNoelpYUW5MR2x1Y0hWMEtUdHlaV1p5WlhOb1VHRm5aU2dwWENJc1hHNGdJQ0FnWTI5c1gzUjVjR1U2SUNkelkzSnZiR3hmWW5WMGRHOXVKMXh1ZlNrN1hHNWNibVF1Y0hWemFDaDdYRzRnSUNBZ2RHbDBiR1U2SUZ3aTVvNm82WUNCWENJc1hHNGdJQ0FnZFhKc09pQWtMblJ2VTNSeWFXNW5LQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdZMnhsWVhKTmVWWmhjaWduYm1GdFpTY3BPMXh1SUNBZ0lDQWdJQ0F2TDNaaGNpQnNhVzVySUQwZ0oyaHBhMlZ5T2k4dmNHRm5aUzl3ZFhOb0xtaDBiV3cvZFhKc1BTY2dLeUJsYm1OdlpHVlZVa2xEYjIxd2IyNWxiblFvYVc1d2RYUXVjbVZ3YkdGalpTaGNJaU5wYzAxMWMybGpQWFJ5ZFdValhDSXNJQ2NuS1M1eVpYQnNZV05sS0NjamFYTldhV1JsYnoxMGNuVmxJeWNzSUNjbktTazdYRzRnSUNBZ0lDQWdJSFpoY2lCc2FXNXJJRDBnWENKb2FXdGxjam92TDNCaFoyVXZjSFZ6YUQ5d2RYTm9kWEpzUFZ3aUlDc2daVzVqYjJSbFZWSkpRMjl0Y0c5dVpXNTBLR2x1Y0hWMEtUdGNibHh1SUNBZ0lDQWdJQ0JwWmlBb2FXNXdkWFF1YzNSaGNuUnpWMmwwYUNnbmFIUjBjQ2NwSUh4OElHbHVjSFYwTG5OMFlYSjBjMWRwZEdnb0oyMWhaMjVsZERvbktTQjhmQ0FvYVc1d2RYUXVhVzVqYkhWa1pYTW9YQ0pjWEc1Y0lpa2dKaVlnSVdsdWNIVjBMbk4wWVhKMGMxZHBkR2dvWENKN1hDSXBLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHeHBibXM3WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb2FXNXdkWFF1YzNSaGNuUnpWMmwwYUNoY0ludGNJaWtnSmlZZ2FXNXdkWFF1Wlc1a2MxZHBkR2dvWENKOVhDSXBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2JHbHVhenRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJR2xtSUNndlhGd3VkRzl5Y21WdWRIeGxaREpyWEZ3Nkx5NTBaWE4wS0dsdWNIVjBLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlDZDBiMkZ6ZERvdkwrUzRqZWFVcithTWdlYU9xT21BZ2VpL21lZW5qZW1UdnVhT3BlT0FnaWRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlBbmRHOWhjM1E2THkvb3I3Zm92cFBsaGFYbXJhUG5vYTdubW9UcGs3N21qcVhqZ0lJblhHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOUtTeGNiaUFnSUNCbGVIUnlZVG9nZTF4dUlDQWdJQ0FnSUNCMGFYUnNaVlpwYzJsaWJHVTZJSFJ5ZFdWY2JpQWdJQ0I5TEZ4dUlDQWdJR052YkY5MGVYQmxPaUFuYVc1d2RYUW5YRzU5S1R0Y2JtUXVjSFZ6YUNoN1hHNGdJQ0FnZEdsMGJHVTZJRndpVkZaQzVwQ2M1N1NpWENJc1hHNGdJQ0FnZFhKc09pQWtMblJ2VTNSeWFXNW5LQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdiR1YwSUhSMmFYQWdQU0JuWlhSSmRHVnRLQ2RvYVd0bGNuUjJZbTk0YzJWMEp5d2dKeWNwTzF4dUlDQWdJQ0FnSUNCc1pYUWdjM1JoZEdVZ1BTQW5abUZzYzJVbk8xeHVJQ0FnSUNBZ0lDQnBaaUFvZEhacGNDQWhQU0FuSnlBbUppQjBkbWx3TG1sdVkyeDFaR1Z6S0NjNk9UazNKeWtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCemRHRjBaU0E5SUhKbGNYVmxjM1FvZEhacGNDQXJJQ2N2WVdOMGFXOXVKeXdnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdobFlXUmxjbk02SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdKME52Ym5SbGJuUXRWSGx3WlNjNklDZGhjSEJzYVdOaGRHbHZiaTk0TFhkM2R5MW1iM0p0TFhWeWJHVnVZMjlrWldRbkxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2THlkWUxWSmxjWFZsYzNSbFpDMVhhWFJvSnpvZ0oxaE5URWgwZEhCU1pYRjFaWE4wSnl4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdKMUpsWm1WeVpYSW5PaUIwZG1sd1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBhVzFsYjNWME9pQXlNREF3TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdKdlpIazZJQ2RrYnoxelpXRnlZMmdtZDI5eVpEMG5JQ3NnYVc1d2RYUXNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiV1YwYUc5a09pQW5VRTlUVkNkY2JpQWdJQ0FnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDOHZiRzluS0hOMFlYUmxLVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tITjBZWFJsSUQwOUlDZHZheWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQW5kRzloYzNRNkx5L21rSnpudEtMbWpxanBnSUhtaUpEbGlwL3Z2SXpvcjdmbXM2am1oSS9vcDRMbm5Jdm5sTFhvcDRibnE2OTBkbUp2ZU9lVmpPbWRvaWM3WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0ozUnZZWE4wT2k4djVwQ2M1N1NpNW82bzZZQ0I1YVN4NkxTbEoxeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZTa3NYRzRnSUNBZ1pYaDBjbUU2SUh0Y2JpQWdJQ0FnSUNBZ2RHbDBiR1ZXYVhOcFlteGxPaUIwY25WbFhHNGdJQ0FnZlN4Y2JpQWdJQ0JqYjJ4ZmRIbHdaVG9nSjJsdWNIVjBKMXh1ZlNrN1hHNHZMK2l3ZytlVXFPUzdvK2VnZ2Vla3V1UytpMXh1THk5eVpYUjFjbTRnSjJocGEyVnlPaTh2Y0dGblpTOXdkWE5vUDNKMWJHVTlXRmxSNW82bzZZQ0JKbkIxYzJoMWNtdzlKeUFySUdWdVkyOWtaVlZTU1VOdmJYQnZibVZ1ZENocGJuQjFkQ2s3WEc0dkwzVnliRG9nSjJocGEyVnlPaTh2Y0dGblpTOXdkWE5vUDNKMWJHVTlXRmxSNW82bzZZQ0JKbkIxYzJoMWNtdzlKeXRsYm1OdlpHVlZVa2xEYjIxd2IyNWxiblFvZFhKc0tUdGNibVF1Y0hWemFDaDdYRzRnSUNBZ2RHbDBiR1U2SUNma3VJdm92YjFVVmtKdmVPYU9xT21BZ2VhUGt1Uzd0aWNzWEc0Z0lDQWdkWEpzT2lBbmFIUjBjSE02THk5bWNtRnRZV2RwZEM1dmNtY3ZiSHByTWpNMU5Ua3ZkSFppYjNndkxTOTBjbVZsTDIxaGFXNG5MRnh1SUNBZ0lHTnZiRjkwZVhCbE9pQW5kR1Y0ZEY4eUoxeHVmU2s3WEc1a0xuQjFjMmdvZTF4dUlDQWdJSFJwZEd4bE9pQW41cCtsNTV5TFZGYm9ycjdudmE3bWxabm5xSXNuTEZ4dUlDQWdJSFZ5YkRvZ0oyaDBkSEJ6T2k4dlpuSmhiV0ZuYVhRdWIzSm5MMng2YXpJek5UVTVMM1IyWW05NEx5MHZZbXh2WWk5dFlXbHVMeVZGTkNWQ1JDVkNSaVZGTnlVNU5DVkJPQ1ZGT0NWQlJpVkNOQ1ZGTmlVNU9DVTRSUzBsUlRVbFFrWWxPRFVsUlRjbE9VTWxPRUl2V0ZsUlZGWkNiM2dsUlRZbFFVUWxRVFVsUlRrbFFVRWxRVFFsUlRZbE9UTWxPRVFsUlRRbFFrUWxPVU1sUlRnbFFVWWxRalFsUlRZbE9UZ2xPRVV1Y0dSbUp5eGNiaUFnSUNCamIyeGZkSGx3WlRvZ0ozUmxlSFJmTWlkY2JuMHBPMXh1WkM1d2RYTm9LSHRjYmlBZ0lDQjBhWFJzWlRvZ1hDTG1qcWpwZ0lIbHBLZmxycmJtbDQ5Y0lpeGNiaUFnSUNCMWNtdzZJQ2RvZEhSd2N6b3ZMM0JrTG5GeExtTnZiUzl6THpVMU0zTm1iSGRxWlQ5emFHRnlaVk52ZFhKalpUMDFKeXhjYmlBZ0lDQmpiMnhmZEhsd1pUb2dYQ0owWlhoMFh6RmNJbHh1ZlNrN1hHNTJZWElnYW5WdGNDQTlJRnNuZEhaaWIzamt1cEhubTVqbWpxanBnSUVuTENBbjVMcVI1NXVZNVpDYktPYU9xT21BZ1NrbkxDQW5RVW5sdmJIbWtKd281bzZvNllDQktTY3NJQ2ROV2VtWXYrbUhqT1M2a2VlYm1DY3NJQ2ZwcHBubWc0WGx2YkhvcDRZbkxDZm9tWTduaVpubm03VG1rcTBvNW82bzZZQ0JLU2RkTzF4dVptOXlJQ2gyWVhJZ2FpQnBiaUJxZFcxd0tTQjdYRzRnSUNBZ1pDNXdkWE5vS0h0Y2JpQWdJQ0FnSUNBZ2RHbDBiR1U2SUdwMWJYQmJhbDBzWEc0Z0lDQWdJQ0FnSUhWeWJEb2dKMmhwYTJWeU9pOHZhRzl0WlVBbklDc2dhblZ0Y0Z0cVhTeGNiaUFnSUNBZ0lDQWdZMjlzWDNSNWNHVTZJRndpZEdWNGRGOHpYQ0pjYmlBZ0lDQjlLVHRjYm4xY2JuTmxkRkpsYzNWc2RDaGtLVHNpTENKelpXRnlZMmhmZFhKc0lqb2lJaXdpWjNKdmRYQWlPaUxpa2FIcHBwbnBtNFhtZzRVaUxDSnpaV0Z5WTJoR2FXNWtJam9pSWl3aVpHVjBZV2xzWDJOdmJGOTBlWEJsSWpvaWJXOTJhV1ZmTVNJc0ltUmxkR0ZwYkY5bWFXNWtYM0oxYkdVaU9pSWlMQ0p6WkdWMFlXbHNYMk52YkY5MGVYQmxJam9pYlc5MmFXVmZNU0lzSW5Oa1pYUmhhV3hmWm1sdVpGOXlkV3hsSWpvaUlpd2lkV0VpT2lKdGIySnBiR1VpTENKd2NtVlNkV3hsSWpvaUlpd2ljR0ZuWlhNaU9pSmJlMXdpWTI5c1gzUjVjR1ZjSWpwY0ltMXZkbWxsWHpOY0lpeGNJbTVoYldWY0lqcGNJdWFPcU9tQWdWd2lMRndpY0dGMGFGd2lPbHdpY0hWemFGd2lMRndpY25Wc1pWd2lPbHdpYW5NNlhGeHViR1YwSUdsMFpXMXpJRDBnVzEwN1hGeHViR1YwSUhCMWMyaHBiaUE5SUdSbFkyOWtaVlZTU1VOdmJYQnZibVZ1ZENoblpYUlFZWEpoYlNoY1hGd2ljSFZ6YUhWeWJGeGNYQ0lwS1R0Y1hHNXNaWFFnZEhacGNDQTlJR2RsZEVsMFpXMG9KMmhwYTJWeWRIWmliM2h6WlhRbkxDQW5KeWs3WEZ4dVhGeHVhWFJsYlhNdWNIVnphQ2g3WEZ4dUlDQWdJSFJwZEd4bE9pQW41NVMxNktlR1NWRHZ2Sm9uSUNzZ2RIWnBjQ3hjWEc0Z0lDQWdkWEpzT2lCY1hGd2lhVzV3ZFhRNkx5OWNYRndpSUNzZ1oyVjBTWFJsYlNnbmFHbHJaWEowZG1KdmVITmxkQ2NzSUNkb2RIUndPaTh2SnlBcklHZGxkRWxRS0NrZ0t5QW5Pams1TnpnbktTQXJJRnhjWENJdkx5OHY2SyszNkw2VDVZV2xWRlpDYjNqbnE2L25tb1JKVU9XY3NPV2RnTys4ak9XbWdtaDBkSEE2THk5Y1hGd2lJQ3NnWjJWMFNWQW9LU0FySUZ4Y1hDSTZPVGszT0M1cWN6cHpaWFJKZEdWdEtDZG9hV3RsY25SMlltOTRjMlYwSnl4cGJuQjFkQ2s3Y21WbWNtVnphRkJoWjJVb0tWeGNYQ0lzWEZ4dUlDQWdJR052YkY5MGVYQmxPaUFuWm14bGVGOWlkWFIwYjI0blhGeHVmU2s3WEZ4dWRtRnlJSEIxY213Z1BTQndkWE5vYVc0N1hGeHVYRnh1YVdZZ0tIQjFjMmhwYmk1cGJtTnNkV1JsY3lnblhGeGNYRzRuS1NBbUppQWhjSFZ6YUdsdUxuTjBZWEowYzFkcGRHZ29KM3NuS1NrZ2UxeGNiaUFnSUNCd2RYSnNJRDBnY0hWemFHbHVMbkpsY0d4aFkyVW9YRnhjSWx4Y1hGeHVYRnhjSWl3Z0p5UW5LVHRjWEc1OVhGeHVhV1lnS0hCMWMyaHBiaTV6ZEdGeWRITlhhWFJvS0Nkb2RIUndKeWtnSmlZZ2NIVnphR2x1TG1sdVkyeDFaR1Z6S0NjN2V5Y3BLU0I3WEZ4dUlDQWdJSEIxY213Z1BTQktVMDlPTG5OMGNtbHVaMmxtZVNoN1hGeHVJQ0FnSUNBZ0lDQmNYRndpYm1GdFpWeGNYQ0k2SUZ4Y1hDTG10YmZwbUpUbm03VHBrNzdtanFqcGdJRmNYRndpTEZ4Y2JpQWdJQ0FnSUNBZ1hGeGNJblZ5YkZ4Y1hDSTZJSEIxYzJocGJseGNiaUFnSUNCOUtWeGNibjFjWEc1cFppQW9jSFZ6YUdsdUxuTjBZWEowYzFkcGRHZ29KMmgwZEhCek9pOHZkM2QzTG1Gc2FYbDFibVJ5YVhabExtTnZiUzl6THljcEtTQjdYRnh1SUNBZ0lHeGxkQ0J5WldaMGIydGxiaUE5SUVwVFQwNHVjR0Z5YzJVb1ptVjBZMmdvSjJocGEyVnlPaTh2Wm1sc1pYTXZjblZzWlhNdmFXTjVMMmxqZVMxaGJHa3RkRzlyWlc0dWFuTnZiaWNzSUh0OUtTbGJNRjB1Y21WbWNtVnphRjkwYjJ0bGJqdGNYRzRnSUNBZ2NIVnliQ0E5SUVwVFQwNHVjM1J5YVc1bmFXWjVLSHRjWEc0Z0lDQWdJQ0FnSUZ4Y1hDSjFjbXhjWEZ3aU9pQndkWE5vYVc0c1hGeHVJQ0FnSUNBZ0lDQmNYRndpY21WbWNtVnphRjkwYjJ0bGJseGNYQ0k2SUhKbFpuUnZhMlZ1WEZ4dUlDQWdJSDBwWEZ4dWZWeGNibWxtSUNod2RYTm9hVzR1YVc1amJIVmtaWE1vSnpvMU1qQXlNQ2NwS1NCN1hGeHVJQ0FnSUdsbUlDaHdkWE5vYVc0dWFXNWpiSFZrWlhNb0ozSmxaR2x5WldOMFVHeGhlVlZ5YkNjcEtTQjdYRnh1SUNBZ0lDQWdJQ0J3ZFhKc0lEMGdTbE5QVGk1emRISnBibWRwWm5rb2UxeGNiaUFnSUNBZ0lDQWdJQ0FnSUZ4Y1hDSnVZVzFsWEZ4Y0lqb2dYRnhjSXVhMXQrbVlsT2FLbGVXeGorZWJ0T21Udmx4Y1hDSXNYRnh1SUNBZ0lDQWdJQ0FnSUNBZ1hGeGNJblZ5YkZ4Y1hDSTZJSEIxYzJocGJseGNiaUFnSUNBZ0lDQWdmU2xjWEc0Z0lDQWdmU0JsYkhObElIdGNYRzRnSUNBZ0lDQWdJSEIxY213Z1BTQktVMDlPTG5OMGNtbHVaMmxtZVNoN1hGeHVJQ0FnSUNBZ0lDQWdJQ0FnWEZ4Y0ltNWhiV1ZjWEZ3aU9pQmNYRndpNXJXMzZaaVU1NzJSNmFHMTVvcVY1YkdQWEZ4Y0lpeGNYRzRnSUNBZ0lDQWdJQ0FnSUNCY1hGd2lkWEpzWEZ4Y0lqb2djSFZ6YUdsdVhGeHVJQ0FnSUNBZ0lDQjlLVnhjYmlBZ0lDQjlYRnh1ZlZ4Y2JseGNiaTh2Ykc5bktDZm1qcWpwZ0lFbkszQjFjbXdwTzF4Y2JuWmhjaUJ6ZEdGMFpTQTlJSEpsY1hWbGMzUW9kSFpwY0NBcklDY3ZZV04wYVc5dUp5d2dlMXhjYmlBZ0lDQm9aV0ZrWlhKek9pQjdYRnh1SUNBZ0lDQWdJQ0FuUTI5dWRHVnVkQzFVZVhCbEp6b2dKMkZ3Y0d4cFkyRjBhVzl1TDNndGQzZDNMV1p2Y20wdGRYSnNaVzVqYjJSbFpDY3NYRnh1SUNBZ0lDQWdJQ0F2THlkWUxWSmxjWFZsYzNSbFpDMVhhWFJvSnpvZ0oxaE5URWgwZEhCU1pYRjFaWE4wSnl4Y1hHNGdJQ0FnSUNBZ0lDZFNaV1psY21WeUp6b2dkSFpwY0Z4Y2JpQWdJQ0I5TEZ4Y2JpQWdJQ0IwYVcxbGIzVjBPaUF5TURBd0xGeGNiaUFnSUNCaWIyUjVPaUFuWkc4OWNIVnphQ1oxY213OUp5QXJJSEIxY213dWNtVndiR0ZqWlNndlhGeGNYQ1l2Wnl3Z0orKzhodSs4aGljcExuSmxjR3hoWTJVb0wzWnBaR1Z2WEZ4Y1hEcGNYRnhjTDF4Y1hGd3ZMMmNzSnljcExGeGNiaUFnSUNCdFpYUm9iMlE2SUNkUVQxTlVKMXhjYm4wcE8xeGNiaTh2Ykc5bktITjBZWFJsS1R0Y1hHNXBaaUFvYzNSaGRHVWdQVDBnSjI5ckp5a2dlMXhjYmlBZ0lDQXZMMnh2WnloemRHRjBaU2s3WEZ4dUlDQWdJR2wwWlcxekxuQjFjMmdvZTF4Y2JpQWdJQ0FnSUNBZ2RHbDBiR1U2SUZ4Y1hDTGlpSnBjWEZ3aUlDc2djM1JoZEdVc1hGeHVJQ0FnSUNBZ0lDQjFjbXc2SUZ4Y1hDSm9hV3RsY2pvdkwyVnRjSFI1WEZ4Y0lpeGNYRzRnSUNBZ0lDQWdJR052YkY5MGVYQmxPaUJjWEZ3aWRHVjRkRjlqWlc1MFpYSmZNVnhjWENKY1hHNGdJQ0FnZlNrN1hGeHVmU0JsYkhObElIdGNYRzRnSUNBZ0x5OXNiMmNvYzNSaGRHVXBPMXhjYmlBZ0lDQnBkR1Z0Y3k1d2RYTm9LSHRjWEc0Z0lDQWdJQ0FnSUhScGRHeGxPaUJjWEZ3aTRwV3pYRnhjSWlBcklITjBZWFJsTEZ4Y2JpQWdJQ0FnSUNBZ2RYSnNPaUJjWEZ3aWFHbHJaWEk2THk5bGJYQjBlVnhjWENJc1hGeHVJQ0FnSUNBZ0lDQmpiMnhmZEhsd1pUb2dYRnhjSW5SbGVIUmZZMlZ1ZEdWeVh6RmNYRndpWEZ4dUlDQWdJSDBwTzF4Y2JseGNibjFjWEc1elpYUlNaWE4xYkhRb2FYUmxiWE1wTzF3aWZWMGlMQ0pwWTI5dUlqb2lJaXdpY0hKdmVIa2lPaUlpZlE9PVxcXCJcXG4gICAgICAgIH0pO1xcbiAgICAgICAgY29uZmlybSh7XFxuICAgICAgICAgICAgdGl0bGU6IE1ZX1JVTEUudGl0bGUgKyAn5o+Q56S6JyxcXG4gICAgICAgICAgICBjb250ZW50OiAn5pys6KeE5YiZ5L6d6LWWWFlR5o6o6YCB6KeE5YiZ77yM54K55Ye75LiL6Z2i55qE56Gu5a6a5oyJ6ZKu5a+85YWlWFlR5o6o6YCB77yM5rOo5oSP5a+85YWl5ZCO5LiA5a6a6KaB5ZyoWFlR5o6o6YCB6YeM6K6+572u5aW9VFbnq69JUO+8jOWQpuWImeaOqOmAgeWKn+iDveS4jeiDveeUqCcsXFxuICAgICAgICAgICAgY29uZmlybTogcnUsXFxuICAgICAgICAgICAgY2FuY2VsOiBydVxcbiAgICAgICAgfSlcXG4gICAgfVxcbiAgICBhZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwic1xcXCIpO1xcbiAgICB9KSk7XFxuXFxuICAgIGxldCB0aXAgPSBcXFwiWFlR5o6o6YCBXFxcIjtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiB0aXAsXFxuICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKHRpcCkgPT4ge1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9ob21lQFhZUeaOqOmAgSdcXG4gICAgICAgIH0sIHRpcCksXFxuICAgICAgICBjb2xfdHlwZTogXFxcImljb25fMl9yb3VuZFxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgIHBpY191cmw6IFxcXCJoaWtlcjovL2ltYWdlcy9hY2NvdW50XFxcIlxcbiAgICB9KTtcXG4gICAgbGV0IGRtb2RlID0gZ2V0SXRlbShcXFwiZG1vZGVcXFwiLCBcXFwi5pys5Zyw6L2s56CBXFxcIik7XFxuICAgIGluaXRDb25maWcoe1xcbiAgICAgICAgbW9kZTogZG1vZGVcXG4gICAgfSk7XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuaooeW8j++8mlxcXCIgKyBkbW9kZSxcXG4gICAgICAgIHVybDogXFxcInNlbGVjdDovL1xcXCIgKyBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLpgInmi6nmqKHlvI9cXFwiLFxcbiAgICAgICAgICAgIG9wdGlvbnM6IFtcXFwi5pys5Zyw6L2s56CBXFxcIiwgXFxcIuWumOaWuUFQUFxcXCJdLFxcbiAgICAgICAgICAgIGNvbDogMSxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcImRtb2RlXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gXFxcIuWumOaWuUFQUFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip/vvIzor7fnoa7kv53miYvmnLrmnInlronoo4XpmL/ph4zkupHnm5jlrpjmlrlBUFBcXFwiO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S/ruaUueaIkOWKn+OAglxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl8yX3JvdW5kXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgcGljX3VybDogXFxcImhpa2VyOi8vaW1hZ2VzL2ljb24xXFxcIlxcbiAgICB9KTtcXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn5pCc57SiJyxcXG4gICAgICAgIGRlc2M6ICfor7fovpPlhaXlhbPplK7or40nLFxcbiAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgIGlmIChpbnB1dC5zdGFydHNXaXRoKCdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vcy8nKSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KGlucHV0KSArICc/Pz9meXBhZ2UnO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCdzJywgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSksXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoJ3MnLCAnJylcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIGxldCBydWxlcyA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFwiKSgpO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCJcXFwiID09IHIgPyBcXFwi4oCc4oCc5YWo6YOo4oCd4oCdXFxcIiA6IFxcXCLlhajpg6hcXFwiLFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICBjbGVhckl0ZW0oXFxcInJcXFwiKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgcGljX3VybDogXFxcIlxcXCJcXG4gICAgfSk7XFxuICAgIGZvciAobGV0IGl0IG9mIHJ1bGVzKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBpdCA9PSByID8gXFxcIuKAnOKAnFxcXCIgKyBpdCArIFxcXCLigJ3igJ1cXFwiIDogaXQsXFxuICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChyKSA9PiB7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInJcXFwiLCByKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgIH0sIGl0KSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIHBpY191cmw6IFxcXCJcXFwiXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6ICdsaW5lJyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6ICd5cGotbCdcXG4gICAgICAgIH1cXG4gICAgfSk7XFxufVxcbmxldCBzID0gZ2V0TXlWYXIoJ3MnLCAnJyk7XFxuaWYgKHMgIT0gXFxcIlxcXCIpIHtcXG4gICAgbGV0IHAgPSBNWV9QQUdFO1xcbiAgICBsZXQgZGF0YSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFwiKShwLCByICE9IFxcXCJcXFwiID8gciA6IG51bGwpO1xcblxcbiAgICBsZXQgcGFnZWlkID0gXFxcInlwai1wYWdlXFxcIiArIHA7XFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLliqDovb3nrKxcXFwiICsgcCArIFxcXCLpobXkuK3vvIzov5vluqbvvJoxL1xcXCIgKyBkYXRhLmxlbmd0aCxcXG4gICAgICAgICAgICB1cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgICAgICAgcGljX3VybDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6IHBhZ2VpZFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIHNldFJlc3VsdChkKTtcXG4gICAgLy9sb2coZGF0YS5sZW5ndGgpO1xcblxcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XFxuICAgICAgICAvL+Wkmue6v+eoi+WKoOi9vSAgICAgICAgXFxuICAgICAgICBsZXQgcmVhbFBhZ2UgPSBcXFwiXFxcIiA9PSByID8gMSA6IHA7XFxuICAgICAgICBsZXQgdGFza3MgPSBkYXRhLm1hcChpdCA9PiB7XFxuICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24ocnVsZSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGUuZmluZChzLCByZWFsUGFnZSk7XFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIHBhcmFtOiBpdCxcXG4gICAgICAgICAgICAgICAgaWQ6IFxcXCJydWxlQFxcXCIgKyBpdC5uYW1lXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuXFxuICAgICAgICBiYXRjaEV4ZWN1dGUodGFza3MsIHtcXG4gICAgICAgICAgICBmdW5jOiBmdW5jdGlvbihwYXJhbSwgaWQsIGVycm9yLCByZXN1bHQpIHtcXG4gICAgICAgICAgICAgICAgLy9sb2coXFxcImxpc3RlbmVyOiBcXFwiICsgKHJlc3VsdCB8fCBbXSkubGVuZ3RoKVxcbiAgICAgICAgICAgICAgICBwYXJhbS5pID0gcGFyYW0uaSArIDE7XFxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaXQgb2YgcmVzdWx0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLmogPSBwYXJhbS5qICsgMTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUJlZm9yZShwYWdlaWQsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdC50aXRsZS5pbmNsdWRlcyhcXFwi4oCc4oCc4oCd4oCdXFxcIikgPyBpdC50aXRsZSA6IFxcXCLigJzigJzigJ3igJ1cXFwiICsgaXQudGl0bGUucmVwbGFjZShuZXcgUmVnRXhwKFxcXCI8ZW0+fDwvZW0+XFxcIiwgXFxcImdcXFwiKSwgXFxcIlxcXCIpLnJlcGxhY2UobmV3IFJlZ0V4cChzLCBcXFwiZ1xcXCIpLCBcXFwiPHN0cm9uZz48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiAjMUU5MEZGXFxcXFxcXCI+XFxcIiArIHMgKyBcXFwiPC9zcGFuPjwvc3Ryb25nPlxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogaXQuZGVzYyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogaXQudXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljX3VybDogaXQucGljX3VybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBpdC5waWNfdXJsID8gJ21vdmllXzFfdmVydGljYWxfcGljJyA6IFxcXCJ0ZXh0XzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXFxcIl9fYXBwXFxcIiArIE1ZX1BBR0UgKyBcXFwiQFxcXCIgKyBwYXJhbS5qLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRUaXRsZTogZmFsc2VcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcblxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmIChwYXJhbS5pID49IHBhcmFtLmFsbCkge1xcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbShwYWdlaWQpXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuWKoOi9veesrFxcXCIgKyBNWV9QQUdFICsgXFxcIumhteS4re+8jOi/m+W6pu+8mlxcXCIgKyAocGFyYW0uaSArIDEpICsgXFxcIi9cXFwiICsgcGFyYW0uYWxsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogcGFnZWlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgcGFyYW06IHtcXG4gICAgICAgICAgICAgICAgYWxsOiBkYXRhLmxlbmd0aCxcXG4gICAgICAgICAgICAgICAgaTogMCxcXG4gICAgICAgICAgICAgICAgajogLTFcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pCc57Si6aG16Z2iXCIsXCJwYXRoXCI6XCJzb3VwXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmlmIChNWV9QQVJBTVMua2V5KSB7XFxuICAgIHB1dE15VmFyKFxcXCJzXFxcIiwgTVlfUEFSQU1TLmtleSk7XFxufVxcbmV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL3NvdVxcXCIpKS5ydWxlKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIkNDT0ZcIixcInBhdGhcIjpcImNjb2ZcIixcInJ1bGVcIjpcInZhciB3cmFwdSA9ICh1KSA9PiB7XFxuICAgIGlmKGNvbmZpZy5tb2RlID09IFxcXCLmnKzlnLDovaznoIFcXFwiKXtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJ1xcbiAgICB9XFxuICAgIGlmICgvYWxpeXVuZHJpdmUvLnRlc3QodSkpIHtcXG4gICAgICAgIGNvbnN0IFtsaW5rLCBfc2hhcmVfcHdkXSA9IHUuc3BsaXQoJz9zaGFyZV9wd2Q9Jyk7XFxuICAgICAgICBjb25zdCBbX2xpbmssIF9mb2xkZXJJRF0gPSBsaW5rLnNwbGl0KCcvZm9sZGVyLycpO1xcbiAgICAgICAgbGV0IHNoYXJlX3B3ZCA9IChfc2hhcmVfcHdkIHx8ICcnKS5zcGxpdCgnI25hbWU9JylbMF0gfHwgJyc7XFxuICAgICAgICBsZXQgc2hhcmVJZCA9IF9saW5rLnNwbGl0KCdjb20vcy8nKVsxXTtcXG4gICAgICAgIHJldHVybiAnc21hcnRkcml2ZTovL3NoYXJlL2Jyb3dzZT9zaGFyZUlkPScgKyBzaGFyZUlkICsgJyZzaGFyZVB3ZD0nICsgc2hhcmVfcHdkO1xcbiAgICB9XFxuICAgIHJldHVybiBcXFwid2ViOi8vXFxcIiArIHU7XFxufTtcXG5cXG4kLmV4cG9ydHMgPSB7XFxuICAgIG5hbWU6ICdDQ09GJyxcXG4gICAgcGFnZTogdHJ1ZSxcXG4gICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgbGV0IGQgPSBbXVxcbiAgICAgICAgY29uc3Qge1xcbiAgICAgICAgICAgIGJ5dGVzVG9TaXplLFxcbiAgICAgICAgICAgIGNvbG9yXFxuICAgICAgICB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvdG9vbHMnKTtcXG4gICAgICAgIGxldCBodG1sID0gZmV0Y2goJ2h0dHBzOi8vcGFuLmNjb2YuY2MvYXBpL3NlYXJjaCcsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJjb250ZW50LXR5cGVcXFwiOiAnYXBwbGljYXRpb24vanNvbicsXFxuICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vcGFuLmNjb2YuY2Mvc2VhcmNoP2tleXdvcmQ9JyArIHNcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIGJvZHk6IHtcXG4gICAgICAgICAgICAgICAgXFxcInBhZ2VTaXplXFxcIjogMjAsXFxuICAgICAgICAgICAgICAgIFxcXCJwYWdlTnVtXFxcIjogcGFnZSxcXG4gICAgICAgICAgICAgICAgXFxcImtleXdvcmRcXFwiOiBzLFxcbiAgICAgICAgICAgICAgICBcXFwiZnJvbU1vYmlsZVxcXCI6IHRydWVcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICB9KVxcbiAgICAgICAgbGV0IGxpc3QgPSBKU09OLnBhcnNlKGh0bWwpXFxuICAgICAgICAgICAgLmRhdGEucm93c1xcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgbGV0IGl0ID0gbGlzdFtpXVxcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IGl0LmZpbGVOYW1lXFxuICAgICAgICAgICAgbGV0IG11cmwgPSBpdC51cmxcXG4gICAgICAgICAgICBsZXQgdHlwZSA9IGl0LnR5cGUucmVwbGFjZSgvZm9sZGVyLywgJ+aWh+S7tuWkuScpLnJlcGxhY2UoL2ZpbGUvLCAn5paH5Lu2JylcXG4gICAgICAgICAgICBpZiAodGl0bGUuaW5jbHVkZXMocykpIHtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT5DQ09GPC9mb250PiZuYnNwOycgKyAn5paH5Lu257G75Z6L77yaJyArIHR5cGUgKyAn77yM5paH5Lu25aSn5bCP77yaJyArIGJ5dGVzVG9TaXplKGl0LnNpemUpLFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgbXVybCArICc/P2Z5cGFnZSdcXG4gICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQobXVybCkgKyAnPz8/ZnlwYWdlJ1xcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB3cmFwdShtdXJsKVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkXFxuICAgIH1cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlt6XlhbdcIixcInBhdGhcIjpcInRvb2xzXCIsXCJydWxlXCI6XCJmdW5jdGlvbiBieXRlc1RvU2l6ZShzaXplKSB7XFxuICAgIGlmIChzaXplIDwgMC4xICogMTAyNCkge1xcbiAgICAgICAgLy/lsI/kuo4wLjFLQu+8jOWImei9rOWMluaIkEJcXG4gICAgICAgIHNpemUgPSBzaXplLnRvRml4ZWQoMikgKyBcXFwiQlxcXCI7XFxuICAgIH0gZWxzZSBpZiAoc2l6ZSA8IDAuMSAqIDEwMjQgKiAxMDI0KSB7XFxuICAgICAgICAvLyDlsI/kuo4wLjFNQu+8jOWImei9rOWMluaIkEtCXFxuICAgICAgICBzaXplID0gKHNpemUgLyAxMDI0KS50b0ZpeGVkKDIpICsgXFxcIktCXFxcIjtcXG4gICAgfSBlbHNlIGlmIChzaXplIDwgMC4xICogMTAyNCAqIDEwMjQgKiAxMDI0KSB7XFxuICAgICAgICAvLyDlsI/kuo4wLjFHQu+8jOWImei9rOWMluaIkE1CXFxuICAgICAgICBzaXplID0gKHNpemUgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDIpICsgXFxcIk1CXFxcIjtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIC8vIOWFtuS7lui9rOWMluaIkEdCXFxuICAgICAgICBzaXplID0gKHNpemUgLyAoMTAyNCAqIDEwMjQgKiAxMDI0KSkudG9GaXhlZCgyKSArIFxcXCJHQlxcXCI7XFxuICAgIH1cXG4gICAgLy8g6L2s5oiQ5a2X56ym5LiyXFxuICAgIGxldCBzaXplU3RyID0gc2l6ZSArIFxcXCJcXFwiLFxcbiAgICAgICAgLy8g6I635Y+W5bCP5pWw54K55aSE55qE57Si5byVXFxuICAgICAgICBpbmRleCA9IHNpemVTdHIuaW5kZXhPZihcXFwiLlxcXCIpLFxcbiAgICAgICAgLy8g6I635Y+W5bCP5pWw54K55ZCO5Lik5L2N55qE5YC8XFxuICAgICAgICBkb3UgPSBzaXplU3RyLnN1YnN0cihpbmRleCArIDEsIDIpO1xcbiAgICAvLyDliKTmlq3lkI7kuKTkvY3mmK/lkKbkuLowMO+8jOWmguaenOaYr+WImeWIoOmZpDAwXFxuICAgIGlmIChkb3UgPT09IFxcXCIwMFxcXCIpIHJldHVybiBzaXplU3RyLnN1YnN0cmluZygwLCBpbmRleCkgKyBzaXplU3RyLnN1YnN0cihpbmRleCArIDMsIDIpO1xcbiAgICByZXR1cm4gc2l6ZTtcXG59XFxuJC5leHBvcnRzLmJ5dGVzVG9TaXplID0gYnl0ZXNUb1NpemU7XFxuJC5leHBvcnRzLmNvbG9yID0gZnVuY3Rpb24odGV4dCwgY29sb3IpIHtcXG4gICAgdGV4dCArPSBcXFwiXFxcIjtcXG4gICAgaWYgKHRleHQuaW5kZXhPZihcXFwi4oCc4oCc4oCd4oCdXFxcIikgPT09IDApIHtcXG4gICAgICAgIHRleHQucmVwbGFjZShcXFwi4oCc4oCc4oCd4oCdXFxcIiwgXFxcIlxcXCIpO1xcbiAgICB9XFxuICAgIHJldHVybiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9J1xcXCIgKyBjb2xvciArIFxcXCInPlxcXCIgKyB0ZXh0ICsgXFxcIjwvZm9udD5cXFwiO1xcbn1cXG5cXG4kLmV4cG9ydHMuc2xlZXAgPSBmdW5jdGlvbih0aW1lb3V0KSB7XFxuICAgIGphdmEubGFuZy5UaHJlYWQuc2xlZXAodGltZW91dCk7XFxufVxcblxcbmZ1bmN0aW9uIGh0bWxUYWcodGFnLCB0ZXh0KSB7XFxuICAgIHRleHQgKz0gXFxcIlxcXCI7XFxuICAgIGlmICh0ZXh0LmluZGV4T2YoXFxcIuKAnOKAnOKAneKAnVxcXCIpID09PSAwKSB7XFxuICAgICAgICB0ZXh0LnJlcGxhY2UoXFxcIuKAnOKAnOKAneKAnVxcXCIsIFxcXCJcXFwiKTtcXG4gICAgfVxcbiAgICByZXR1cm4gXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBcXFwiPFxcXCIgKyB0YWcgKyBcXFwiPlxcXCIgKyB0ZXh0ICsgXFxcIjwvXFxcIiArIHRhZyArIFxcXCI+XFxcIjtcXG5cXG59XFxuJC5leHBvcnRzLmh0bWxUYWcgPSBodG1sVGFnO1xcbiQuZXhwb3J0cy5zbWFsbCA9IGZ1bmN0aW9uKHRleHQpIHtcXG4gICAgcmV0dXJuIGh0bWxUYWcoXFxcInNtYWxsXFxcIiwgdGV4dCk7XFxufVxcblxcbmZ1bmN0aW9uIGdldFRpbWUoZmlsZSxpc1N0YW5kYXJkKSB7XFxuICAgIGlzU3RhbmRhcmQgPSBpc1N0YW5kYXJkfHxmYWxzZTtcXG4gICAgbGV0IHRUaW1lID0gZmlsZS51cGRhdGVkX2F0IHx8IGZpbGUudGltZV9zdHIgfHwgXFxcIlxcXCI7XFxuICAgIHRUaW1lID0gdFRpbWUuc3BsaXQoXFxcIlRcXFwiKTtcXG4gICAgbGV0IGRhdGUgPSB0VGltZVswXTtcXG4gICAgaWYoaXNTdGFuZGFyZCl7XFxuICAgICAgICBkYXRlID0gZGF0ZS5yZXBsYWNlKC8tL2csXFxcIi9cXFwiKTtcXG4gICAgfVxcbiAgICB0VGltZSA9IHRUaW1lWzFdLnNwbGl0KC9afFxcXFwuLyk7XFxuICAgIGRhdGUgKz0gXFxcIiBcXFwiICsgdFRpbWVbMF07XFxuICAgIHJldHVybiBkYXRlO1xcbn1cXG5mdW5jdGlvbiBnZXRUaW1lSW50KHRpbWVTdHIpe1xcbiAgICByZXR1cm4gKG5ldyBEYXRlKHRpbWVTdHIpKS5nZXRUaW1lKClcXG59XFxuJC5leHBvcnRzLmdldFRpbWUgPSBnZXRUaW1lO1xcblxcbmxldCBjaG5OdW1DaGFyID0ge1xcbiAgICDpm7Y6IDAsXFxuICAgIOS4gDogMSxcXG4gICAg5LqMOiAyLFxcbiAgICDkuIk6IDMsXFxuICAgIOWbmzogNCxcXG4gICAg5LqUOiA1LFxcbiAgICDlha06IDYsXFxuICAgIOS4gzogNyxcXG4gICAg5YWrOiA4LFxcbiAgICDkuZ06IDlcXG59O1xcblxcbmxldCBjaG5OYW1lVmFsdWUgPSB7XFxuICAgIOWNgToge1xcbiAgICAgICAgdmFsdWU6IDEwLFxcbiAgICAgICAgc2VjVW5pdDogZmFsc2VcXG4gICAgfSxcXG4gICAg55m+OiB7XFxuICAgICAgICB2YWx1ZTogMTAwLFxcbiAgICAgICAgc2VjVW5pdDogZmFsc2VcXG4gICAgfSxcXG4gICAg5Y2DOiB7XFxuICAgICAgICB2YWx1ZTogMTAwMCxcXG4gICAgICAgIHNlY1VuaXQ6IGZhbHNlXFxuICAgIH0sXFxuICAgIOS4hzoge1xcbiAgICAgICAgdmFsdWU6IDEwMDAwLFxcbiAgICAgICAgc2VjVW5pdDogdHJ1ZVxcbiAgICB9LFxcbiAgICDkur86IHtcXG4gICAgICAgIHZhbHVlOiAxMDAwMDAwMDAsXFxuICAgICAgICBzZWNVbml0OiB0cnVlXFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gQ2hpbmVzZVRvTnVtYmVyKGNoblN0cikge1xcbiAgICBsZXQgcnRuID0gMDtcXG4gICAgbGV0IHNlY3Rpb24gPSAwO1xcbiAgICBsZXQgbnVtYmVyID0gMDtcXG4gICAgbGV0IHNlY1VuaXQgPSBmYWxzZTtcXG4gICAgbGV0IHN0ciA9IGNoblN0ci5zcGxpdCgnJyk7XFxuXFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICBsZXQgbnVtID0gY2huTnVtQ2hhcltzdHJbaV1dO1xcbiAgICAgICAgaWYgKHR5cGVvZiBudW0gIT09ICd1bmRlZmluZWQnKSB7XFxuICAgICAgICAgICAgbnVtYmVyID0gbnVtO1xcbiAgICAgICAgICAgIGlmIChpID09PSBzdHIubGVuZ3RoIC0gMSkge1xcbiAgICAgICAgICAgICAgICBzZWN0aW9uICs9IG51bWJlcjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGxldCB1bml0ID0gY2huTmFtZVZhbHVlW3N0cltpXV0udmFsdWU7XFxuICAgICAgICAgICAgc2VjVW5pdCA9IGNobk5hbWVWYWx1ZVtzdHJbaV1dLnNlY1VuaXQ7XFxuICAgICAgICAgICAgaWYgKHNlY1VuaXQpIHtcXG4gICAgICAgICAgICAgICAgc2VjdGlvbiA9IChzZWN0aW9uICsgbnVtYmVyKSAqIHVuaXQ7XFxuICAgICAgICAgICAgICAgIHJ0biArPSBzZWN0aW9uO1xcbiAgICAgICAgICAgICAgICBzZWN0aW9uID0gMDtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBzZWN0aW9uICs9IChudW1iZXIgKiB1bml0KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbnVtYmVyID0gMDtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gcnRuICsgc2VjdGlvbjtcXG59XFxuXFxuZnVuY3Rpb24gbmFtZUNvbXBhcmUoYSwgYikge1xcbiAgICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbClcXG4gICAgICAgIHJldHVybiBhID09IG51bGwgPyBiID09IG51bGwgPyAwIDogLTEgOiAxO1xcblxcbiAgICBhID0gYS5yZXBsYWNlKC8oW+mbtuS4gOS6jOS4ieWbm+S6lOWFreS4g+WFq+S5neWNgeeZvuWNg+S4h+S6v10pL2csIGZ1bmN0aW9uKG1hdGNoLCBwMSwgcDIsIHAzLCBvZmZzZXQsIHN0cmluZykge1xcbiAgICAgICAgLy8gcDEgaXMgbm9uZGlnaXRzLCBwMiBkaWdpdHMsIGFuZCBwMyBub24tYWxwaGFudW1lcmljc1xcbiAgICAgICAgcmV0dXJuIENoaW5lc2VUb051bWJlcihwMSk7XFxuICAgIH0pXFxuICAgIGIgPSBiLnJlcGxhY2UoLyhb6Zu25LiA5LqM5LiJ5Zub5LqU5YWt5LiD5YWr5Lmd5Y2B55m+5Y2D5LiH5Lq/XSkvZywgZnVuY3Rpb24obWF0Y2gsIHAxLCBwMiwgcDMsIG9mZnNldCwgc3RyaW5nKSB7XFxuICAgICAgICAvLyBwMSBpcyBub25kaWdpdHMsIHAyIGRpZ2l0cywgYW5kIHAzIG5vbi1hbHBoYW51bWVyaWNzXFxuICAgICAgICByZXR1cm4gQ2hpbmVzZVRvTnVtYmVyKHAxKTtcXG4gICAgfSlcXG5cXG4gICAgbGV0IE5VTUJFUlMgPSBqYXZhLnV0aWwucmVnZXguUGF0dGVybi5jb21waWxlKFxcXCIoPzw9XFxcXFxcXFxEKSg/PVxcXFxcXFxcZCl8KD88PVxcXFxcXFxcZCkoPz1cXFxcXFxcXEQpXFxcIilcXG4gICAgbGV0IHNwbGl0MSA9IE5VTUJFUlMuc3BsaXQobmV3IGphdmEubGFuZy5TdHJpbmcoYSkpO1xcbiAgICBsZXQgc3BsaXQyID0gTlVNQkVSUy5zcGxpdChuZXcgamF2YS5sYW5nLlN0cmluZyhiKSk7XFxuXFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTWF0aC5taW4oc3BsaXQxLmxlbmd0aCwgc3BsaXQyLmxlbmd0aCk7IGkrKykge1xcbiAgICAgICAgbGV0IGMxID0gc3BsaXQxW2ldLmNoYXJDb2RlQXQoMCk7XFxuICAgICAgICBsZXQgYzIgPSBzcGxpdDJbaV0uY2hhckNvZGVBdCgwKTtcXG4gICAgICAgIGxldCBjbXAgPSAwO1xcbiAgICAgICAgbGV0IHplcm9DaGFyQ29kZSA9ICcwJy5jaGFyQ29kZUF0KDApO1xcbiAgICAgICAgbGV0IG5pbmVDaGFyQ29kZSA9ICc5Jy5jaGFyQ29kZUF0KDApO1xcblxcbiAgICAgICAgaWYgKGMxID49IHplcm9DaGFyQ29kZSAmJiBjMSA8PSBuaW5lQ2hhckNvZGUgJiYgYzIgPj0gemVyb0NoYXJDb2RlICYmIGMyIDw9IG5pbmVDaGFyQ29kZSkge1xcbiAgICAgICAgICAgIGNtcCA9IG5ldyBqYXZhLm1hdGguQmlnSW50ZWdlcihzcGxpdDFbaV0pLmNvbXBhcmVUbyhuZXcgamF2YS5tYXRoLkJpZ0ludGVnZXIoc3BsaXQyW2ldKSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpZiAoY21wID09PSAwKSB7XFxuICAgICAgICAgICAgbGV0IHJlZ2V4ID0gL1thLXpBLVowLTldL1xcbiAgICAgICAgICAgIGxldCBzMSA9IFN0cmluZyhzcGxpdDFbaV0pXFxuICAgICAgICAgICAgbGV0IHMyID0gU3RyaW5nKHNwbGl0MltpXSlcXG4gICAgICAgICAgICBpZiAocmVnZXgudGVzdChzMSkgfHwgcmVnZXgudGVzdChzMikpIHtcXG4gICAgICAgICAgICAgICAgY21wID0gbmV3IGphdmEubGFuZy5TdHJpbmcoc3BsaXQxW2ldKS5jb21wYXJlVG8obmV3IGphdmEubGFuZy5TdHJpbmcoc3BsaXQyW2ldKSk7XFxuICAgICAgICAgICAgICAgIC8vIGNtcCA9IHMxLmxvY2FsZUNvbXBhcmUoczIsICdlbicpXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgY21wID0gczEubG9jYWxlQ29tcGFyZShzMiwgJ3poJylcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpZiAoY21wICE9PSAwKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGNtcDtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBsZXQgbGVuZ3RoQ21wID0gc3BsaXQxLmxlbmd0aCAtIHNwbGl0Mi5sZW5ndGg7XFxuICAgIC8vIGlmIChsZW5ndGhDbXAgIT09IDApIGxlbmd0aENtcCA9IGxlbmd0aENtcCA+IDAgPyAtMSA6IDE7XFxuICAgIHJldHVybiBsZW5ndGhDbXA7XFxufVxcblxcbiQuZXhwb3J0cy5zb3J0cyA9IGZ1bmN0aW9uKGxpc3QsIHNvcnQpIHtcXG4gICAgaWYgKHNvcnQgPT09IFxcXCLnsbvlnotcXFwiKSB7XFxuICAgICAgICAvLyBsb2coXFxcIuexu+Wei+aOkuW6j1xcXCIpO1xcbiAgICAgICAgbGlzdC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcXG4gICAgICAgICAgICByZXR1cm4gYS50eXBlIC0gYi50eXBlXFxuICAgICAgICB9KTtcXG4gICAgfSBlbHNlIGlmIChzb3J0ID09PSBcXFwi5ZCN56ewXFxcIikge1xcbiAgICAgICAgLy8gbG9nKFxcXCLlkI3np7DmjpLluo9cXFwiKTtcXG4gICAgICAgIC8vIGxpc3Quc29ydChmdW5jdGlvbihhLCBiKSB7XFxuICAgICAgICAvLyAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSwgXFxcInpoXFxcIilcXG4gICAgICAgIC8vIH0pO1xcbiAgICAgICAgbGlzdC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcXG4gICAgICAgICAgICByZXR1cm4gbmFtZUNvbXBhcmUoYS5uYW1lfHxhLnRpdGxlLCBiLm5hbWV8fGIudGl0bGUpO1xcbiAgICAgICAgfSk7XFxuICAgIH0gZWxzZSBpZiAoc29ydCA9PT0gXFxcIuWkp+Wwj1xcXCIpIHtcXG4gICAgICAgIC8vIGxvZyhcXFwi5aSn5bCP5o6S5bqPXFxcIik7XFxuICAgICAgICBsaXN0LnNvcnQoZnVuY3Rpb24oYSwgYikge1xcbiAgICAgICAgICAgIHJldHVybiAoYS5zaXplIHx8IE51bWJlcihhLnNpemVfc3RyKSB8fCAwKSAtIChiLnNpemUgfHwgTnVtYmVyKGIuc2l6ZV9zdHIpIHx8IDApO1xcbiAgICAgICAgfSk7XFxuICAgIH1lbHNlIGlmIChzb3J0ID09PSBcXFwi5pe26Ze0XFxcIikge1xcbiAgICAgICAgLy8gbG9nKFxcXCLml7bpl7TmjpLluo9cXFwiKTtcXG4gICAgICAgIGxpc3Quc29ydChmdW5jdGlvbihhLCBiKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGdldFRpbWVJbnQoZ2V0VGltZShhLHRydWUpKSAtIGdldFRpbWVJbnQoZ2V0VGltZShiLHRydWUpKVxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGxpc3RcXG59XFxuXFxuZnVuY3Rpb24gc2ltaWxhcihzLCB0LCBmKSB7Ly/liKTmlq3kuKTkuKrlrZfnrKbkuLLkuYvpl7TnmoTnm7jkvLzluqZcXG4gICAgaWYgKCFzIHx8ICF0KSB7XFxuICAgICAgICByZXR1cm4gMFxcbiAgICB9XFxuICAgIGlmKHMgPT09IHQpe1xcbiAgICAgICAgcmV0dXJuIDEwMDtcXG4gICAgfVxcbiAgICB2YXIgbCA9IHMubGVuZ3RoID4gdC5sZW5ndGggPyBzLmxlbmd0aCA6IHQubGVuZ3RoXFxuICAgIHZhciBuID0gcy5sZW5ndGhcXG4gICAgdmFyIG0gPSB0Lmxlbmd0aFxcbiAgICB2YXIgZCA9IFtdXFxuICAgIGYgPSBmIHx8IDJcXG4gICAgdmFyIG1pbiA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XFxuICAgICAgICByZXR1cm4gYSA8IGIgPyAoYSA8IGMgPyBhIDogYykgOiAoYiA8IGMgPyBiIDogYylcXG4gICAgfVxcbiAgICB2YXIgaSwgaiwgc2ksIHRqLCBjb3N0XFxuICAgIGlmIChuID09PSAwKSByZXR1cm4gbVxcbiAgICBpZiAobSA9PT0gMCkgcmV0dXJuIG5cXG4gICAgZm9yIChpID0gMDsgaSA8PSBuOyBpKyspIHtcXG4gICAgICAgIGRbaV0gPSBbXVxcbiAgICAgICAgZFtpXVswXSA9IGlcXG4gICAgfVxcbiAgICBmb3IgKGogPSAwOyBqIDw9IG07IGorKykge1xcbiAgICAgICAgZFswXVtqXSA9IGpcXG4gICAgfVxcbiAgICBmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykge1xcbiAgICAgICAgc2kgPSBzLmNoYXJBdChpIC0gMSlcXG4gICAgICAgIGZvciAoaiA9IDE7IGogPD0gbTsgaisrKSB7XFxuICAgICAgICAgICAgdGogPSB0LmNoYXJBdChqIC0gMSlcXG4gICAgICAgICAgICBpZiAoc2kgPT09IHRqKSB7XFxuICAgICAgICAgICAgICAgIGNvc3QgPSAwXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgY29zdCA9IDFcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZFtpXVtqXSA9IG1pbihkW2kgLSAxXVtqXSArIDEsIGRbaV1baiAtIDFdICsgMSwgZFtpIC0gMV1baiAtIDFdICsgY29zdClcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBsZXQgcmVzID0gKDEgLSBkW25dW21dIC8gbCkgKjEwMFxcbiAgICByZXR1cm4gcmVzLnRvRml4ZWQoZilcXG59XFxuXFxuJC5leHBvcnRzLnNpbWlsYXIgPSBzaW1pbGFyO1xcbiQuZXhwb3J0cy5yZW1vdmVFeHQgPSBmdW5jdGlvbiAoZmlsZSl7XFxuICAgIHJldHVybiBmaWxlLnNwbGl0KCcuJykuc2xpY2UoMCwtMSkuam9pbignLicpXFxufTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcInVcIixcInBhdGhcIjpcInVcIixcInJ1bGVcIjpcIiQuZXhwb3J0cyA9IGZ1bmN0aW9uKHJ1bGUsIG9yaWdpbiwgbW9kZSkge1xcbiAgICByZXR1cm4gJC50b1N0cmluZygocnVsZSwgb3JpZ2luLCBtb2RlKSA9PiB7XFxuICAgICAgICBsZXQgaG9zdCA9IG9yaWdpbi5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcImh0dHA6Ly98aHR0cHM6Ly9cXFwiKSwgXFxcIlxcXCIpLnNwbGl0KFxcXCIvXFxcIilbMF07XFxuICAgICAgICBsZXQgaG9zdHMgPSBob3N0LnNwbGl0KFxcXCIuXFxcIik7XFxuICAgICAgICBpZiAoaG9zdHMubGVuZ3RoID4gMikge1xcbiAgICAgICAgICAgIGhvc3QgPSBob3N0c1tob3N0cy5sZW5ndGggLSAyXSArIFxcXCIuXFxcIiArIGhvc3RzW2hvc3RzLmxlbmd0aCAtIDFdO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoXFxcIm1hZ25ldFxcXCIpKSB7XFxuICAgICAgICAgICAgY29uZmlybSh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5rip6aao5o+Q56S6XFxcIixcXG4gICAgICAgICAgICAgICAgY29udGVudDogXFxcIuajgOa1i+WIsOaWsOeahOejgemTvuWcsOWdgO+8jOeCueWHu+ehruWumuaMiemSruWNs+WPr+aSreaUvu+8jOeCueWHu+WPlua2iOaMiemSruWPr+S7peWkjeWItumTvuaOpVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbmZpcm06ICQudG9TdHJpbmcoKG1hZykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hZztcXG4gICAgICAgICAgICAgICAgfSwgaW5wdXQpLFxcbiAgICAgICAgICAgICAgICBjYW5jZWw6ICQudG9TdHJpbmcoKG1hZykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJjb3B5Oi8vXFxcIiArIG1hZ1xcbiAgICAgICAgICAgICAgICB9LCBpbnB1dClcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5pbmNsdWRlcyhcXFwiYWxpeXVuZHJpdmUuY29tXFxcIikgJiYgbW9kZSAhPSBcXFwi5a6Y5pa5QVBQXFxcIikge1xcbiAgICAgICAgICAgIC8vbG9nKGlucHV0KTtcXG4gICAgICAgICAgICBpZiAoaW5wdXQuaW5jbHVkZXMoJ2NoZWNrdXJsP3VybD0nKSAmJiBpbnB1dC5pbmNsdWRlcygnJnVybHJlZmVyJykpIHtcXG4gICAgICAgICAgICAgICAgaW5wdXQgPSBkZWNvZGVVUklDb21wb25lbnQoaW5wdXQuc3BsaXQoJyZ1cmxyZWZlcicpWzBdLnNwbGl0KCdjaGVja3VybD91cmw9JylbMV0pO1xcbiAgICAgICAgICAgICAgICAvL2xvZygn6LS05ZCnJytpbnB1dCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiAkLnRvU3RyaW5nKCh1cmwsIHJ1bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi6Zi/6YeM5LqR55uYXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIC8vdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9XFxcIiArIHVybCArICc/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvcHVzaD9ydWxlPVxcXCIgKyBydWxlICsgXFxcIiZ1cmw9aGlrZXI6Ly9lbXB0eSMjXFxcIiArIGVuY29kZVVSSUNvbXBvbmVudCh1cmwpICsgJz8/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgIH0pKVxcbiAgICAgICAgICAgIH0sIGlucHV0LCBydWxlKVxcbiAgICAgICAgfSBlbHNlIGlmICgvXFxcXC4obXAzfGZsYWN8bTRhKSQvLnRlc3QoaW5wdXQpKSB7XFxuICAgICAgICAgICAgLy9sb2coaW5wdXQpO1xcbiAgICAgICAgICAgIHJldHVybiAkLnRvU3RyaW5nKCh1cmwsIHJ1bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5wbGF5VmlkZW8odXJsKTtcXG4gICAgICAgICAgICB9LCBpbnB1dCwgcnVsZSlcXG4gICAgICAgIH0gZWxzZSBpZiAoIWlucHV0LmluY2x1ZGVzKGhvc3QpICYmIGlucHV0LnN0YXJ0c1dpdGgoXFxcImh0dHBcXFwiKSkge1xcbiAgICAgICAgICAgIC8vbG9nKGlucHV0KTtcXG4gICAgICAgICAgICByZXR1cm4gJC50b1N0cmluZygodXJsLCBydWxlLCBtb2RlKSA9PiB7XFxuICAgICAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAub3BlbihKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuivpuaDhVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UveXNmeD9ydWxlPVxcXCIgKyBydWxlICsgXFxcIiZyPVxcXCIgKyBydWxlICsgXFxcIiZtb2RlPVxcXCIgKyBtb2RlICsgXFxcIiMjXFxcIiArIHVybCxcXG4gICAgICAgICAgICAgICAgfSkpXFxuICAgICAgICAgICAgfSwgaW5wdXQsIHJ1bGUsIG1vZGUpO1xcbiAgICAgICAgfSBlbHNlIGlmICghaW5wdXQuc3RhcnRzV2l0aChcXFwiaHR0cFxcXCIpKSB7XFxuICAgICAgICAgICAgLy9sb2coaW5wdXQpO1xcbiAgICAgICAgICAgIC8v6IO95ZSk6LW3QVBQ55qE55m95ZCN5Y2VXFxuICAgICAgICAgICAgbGV0IHdoaXRlID0gW1xcbiAgICAgICAgICAgICAgICBcXFwicWtsaW5rXFxcIixcXG4gICAgICAgICAgICAgICAgXFxcImJkbmV0ZGlza1xcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJ4dW5sZWlhcHBcXFwiXFxuICAgICAgICAgICAgXTtcXG4gICAgICAgICAgICBsZXQgaW5XaGl0ZSA9IHdoaXRlLmZpbHRlcihpdCA9PiBpbnB1dC5zdGFydHNXaXRoKGl0KSkubGVuZ3RoID4gMDtcXG4gICAgICAgICAgICBpZiAoIWluV2hpdGUpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gJC50b1N0cmluZygodXJsLCBydWxlKSA9PiB7XFxuICAgICAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAub3BlblRoaXJkQXBwICYmIGZ5X2JyaWRnZV9hcHAub3BlblRoaXJkQXBwKHVybCk7XFxuICAgICAgICAgICAgfSwgaW5wdXQsIHJ1bGUpXFxuICAgICAgICB9IGVsc2Uge1xcblxcbiAgICAgICAgfVxcbiAgICB9LCBydWxlLCBvcmlnaW4sIG1vZGUpO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcInlzZnhcIixcInBhdGhcIjpcInlzZnhcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxubGV0IHJ1bGUgPSBnZXRQYXJhbShcXFwiclxcXCIpLnNwbGl0KFxcXCIjI1xcXCIpWzBdO1xcbmxldCBtb2RlID0gKGdldFBhcmFtKFxcXCJtb2RlXFxcIikgfHwgXFxcIlxcXCIpLnNwbGl0KFxcXCIjI1xcXCIpWzBdO1xcbmxldCB1cmwgPSBNWV9VUkwuc3BsaXQoXFxcIiMjXFxcIilbMV07XFxubGV0IGl0ZSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3VcXFwiKShydWxlLCBnZXRIb21lKHVybCksbW9kZSk7XFxubGV0IGpzID0gJC50b1N0cmluZygoKSA9PiB7XFxuICAgIHRyeSB7XFxuICAgICAgICBpZiAoZG9jdW1lbnQudGl0bGUgJiYgZG9jdW1lbnQudGl0bGUubGVuZ3RoKSB7XFxuICAgICAgICAgICAgbGV0IHIgPSAkJCQoKS5sYXp5UnVsZSgodCkgPT4ge1xcbiAgICAgICAgICAgICAgICBzZXRQYWdlVGl0bGUodCk7XFxuICAgICAgICAgICAgfSwgZG9jdW1lbnQudGl0bGUpO1xcbiAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAucGFyc2VMYXp5UnVsZShyKTtcXG4gICAgICAgIH1cXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgZnlfYnJpZGdlX2FwcC5sb2coZS50b1N0cmluZygpKTtcXG4gICAgfVxcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwiXFxcIixcXG4gICAgdXJsOiB1cmwsXFxuICAgIGNvbF90eXBlOiBcXFwieDVfd2Vidmlld19zaW5nbGVcXFwiLFxcbiAgICBkZXNjOiBcXFwiMTAwJSYmZmxvYXRcXFwiLFxcbiAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIHVybEludGVyY2VwdG9yOiBpdGUsXFxuICAgICAgICBqczoganMsXFxuICAgICAgICBjYW5CYWNrOiB0cnVlLFxcbiAgICAgICAganNMb2FkaW5nSW5qZWN0OiB0cnVlLFxcbiAgICAgICAgZmxvYXRWaWRlbzogdHJ1ZVxcbiAgICB9XFxufSk7XFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6IFxcXCJsaW5lXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGlkOiB1cmxcXG4gICAgfVxcbn0pO1xcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaOqOmAgVwiLFwicGF0aFwiOlwicHVzaFwiLFwicnVsZVwiOlwianM6XFxuLy9sb2coTVlfVVJMKTtcXG52YXIgaXRlbXMgPSBbXTtcXG52YXIgcmVhbHVybCA9IE1ZX1VSTC5zcGxpdCgnIyMnKVsxXS5zcGxpdCgnPz8/JylbMF07XFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi8J+TvSDmjqjpgIHliLBUVkJveCDwn5O6XFxcIixcXG4gICAgICAgIHVybDogJChyZWFsdXJsKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgaW5wdXQgPSBkZWNvZGVVUklDb21wb25lbnQoaW5wdXQpO1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3B1c2g/cnVsZT1YWVHmjqjpgIEmcHVzaHVybD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGlucHV0KTtcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzJcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIlxcbiAgICB9LCB7XFxuICAgICAgICB0aXRsZTogXFxcIuKYge+4j+mYv+mHjEFQUOaJk+W8gPCfkr1cXFwiLFxcbiAgICAgICAgdXJsOiAkKHJlYWx1cmwpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICAvL2lucHV0ID0gZGVjb2RlVVJJQ29tcG9uZW50KGlucHV0KTtcXG4gICAgICAgICAgICBjb25zdCBbbGluaywgX3NoYXJlX3B3ZF0gPSBkZWNvZGVVUklDb21wb25lbnQoaW5wdXQpLnNwbGl0KCc/c2hhcmVfcHdkPScpO1xcbiAgICAgICAgICAgIGNvbnN0IFtfbGluaywgX2ZvbGRlcklEXSA9IGxpbmsuc3BsaXQoJy9mb2xkZXIvJyk7XFxuICAgICAgICAgICAgbGV0IHNoYXJlX3B3ZCA9IChfc2hhcmVfcHdkIHx8ICcnKS5zcGxpdCgnI25hbWU9JylbMF0gfHwgJyc7XFxuICAgICAgICAgICAgbGV0IHNoYXJlSWQgPSBfbGluay5zcGxpdCgnY29tL3MvJylbMV07XFxuICAgICAgICAgICAgcmV0dXJuICdzbWFydGRyaXZlOi8vc2hhcmUvYnJvd3NlP3NoYXJlSWQ9JyArIHNoYXJlSWQgKyAnJnNoYXJlUHdkPScgKyBzaGFyZV9wd2Q7XFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgcGljX3VybDogXFxcIlxcXCJcXG4gICAgfSk7XFxufVxcbmlmIChkZWNvZGVVUklDb21wb25lbnQocmVhbHVybCkuaW5jbHVkZXMoJ3d3dy5hbGl5dW5kcml2ZScpICYmICFyZWFsdXJsLmluY2x1ZGVzKCclM0IlN0InKSkge1xcbiAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9zaGFyaWQnLCB7fSkpLnJ1bGUpXFxufVxcbnNldFJlc3VsdChpdGVtcyk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmjqjpgIHku6PnoIFcIixcInBhdGhcIjpcInB1c2hjb2RlXCIsXCJydWxlXCI6XCJqczpcXG5sZXQgcHVzaCA9IEpTT04uc3RyaW5naWZ5KHtcXG4gICAgXFxcIm5hbWVcXFwiOiBwdXNobmFtZSxcXG4gICAgXFxcInVybFxcXCI6IHR1aXNvbmcuam9pbignIycpLFxcbiAgICBcXFwic2hhcmVfaWRcXFwiOiBzaGFyZUlkLFxcbiAgICBcXFwicmVmcmVzaF90b2tlblxcXCI6IHJlZnRva2VuXFxufSkucmVwbGFjZSgvXFxcXCYvZywgJ++8hu+8hicpO1xcbmlmICh0dWlzb25nLmxlbmd0aCA+IDApIHtcXG4gICAgaXRlbXMudW5zaGlmdCh7XFxuICAgICAgICB0aXRsZTogXFxcIvCfk73mjqjpgIHlvZPliY3pobXpn7Pop4bpopHwn5O6XFxcIixcXG4gICAgICAgIHVybDogJChwdXNoKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2UvcHVzaD9ydWxlPVhZUeaOqOmAgSZwdXNodXJsPScgKyBlbmNvZGVVUklDb21wb25lbnQoaW5wdXQpO1xcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxuICAgIH0pO1xcbiAgICBpdGVtcy51bnNoaWZ0KHtcXG4gICAgICAgIHRpdGxlOiAoZ2V0SXRlbSgncXVhbGl0eScsICcnKSA9PSAnMScgPyAn5Y6f55S75pKt4oiaJyA6ICfovaznoIHmkq3iiJonKSxcXG4gICAgICAgIHVybDogYGhpa2VyOi8vZW1wdHlAbGF6eVJ1bGU9LmpzOmdldEl0ZW0oJ3F1YWxpdHknLCcwJyk9PScxJz9zZXRJdGVtKCdxdWFsaXR5JywnMCcpOnNldEl0ZW0oJ3F1YWxpdHknLCcxJyk7cmVmcmVzaFBhZ2UoKTsndG9hc3Q6Ly/liIfmjaLmiJDlip/vvIEnYCxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgfSk7XFxuICAgIGl0ZW1zLnVuc2hpZnQoe1xcbiAgICAgICAgdGl0bGU6IChnZXRJdGVtKCdzaW5nbGVwdXNoJywgJycpID09ICcxJyA/ICfljZXmjqjiiJonIDogJ+WNleaOqOKVsycpLFxcbiAgICAgICAgdXJsOiBgaGlrZXI6Ly9lbXB0eUBsYXp5UnVsZT0uanM6Z2V0SXRlbSgnc2luZ2xlcHVzaCcsJzAnKT09JzEnP3NldEl0ZW0oJ3NpbmdsZXB1c2gnLCcwJyk6c2V0SXRlbSgnc2luZ2xlcHVzaCcsJzEnKTtyZWZyZXNoUGFnZSgpOyd0b2FzdDovL+WIh+aNouaIkOWKn++8gSdgLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICB9KTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLliIbkuqvotYTmupDkuIDnuqdcIixcInBhdGhcIjpcInNoYXJpZFwiLFwicnVsZVwiOlwianM6XFxuLy92YXIgaXRlbXMgPSBbXTtcXG5mdW5jdGlvbiBmb3JtYXREYXRlKF9kYXRlLCBfZm10KSB7XFxuICAgIGxldCBmbXQgPSBfZm10IHx8IFxcXCJ5eXl5LU1NLWRkIEhIOm1tOnNzXFxcIjtcXG4gICAgY29uc3QgZGF0ZSA9ICFpc05hTihfZGF0ZSkgPyBuZXcgRGF0ZShfZGF0ZSAqIDEwMDApIDogbmV3IERhdGUoX2RhdGUpO1xcbiAgICBjb25zdCBvID0ge1xcbiAgICAgICAgXFxcIk0rXFxcIjogZGF0ZS5nZXRNb250aCgpICsgMSwgLy/mnIjku70gXFxuICAgICAgICBcXFwiZCtcXFwiOiBkYXRlLmdldERhdGUoKSwgLy/ml6UgXFxuICAgICAgICBcXFwiaCtcXFwiOiBkYXRlLmdldEhvdXJzKCkgJSAxMiA9PSAwID8gMTIgOiBkYXRlLmdldEhvdXJzKCkgJSAxMixcXG4gICAgICAgIFxcXCJIK1xcXCI6IGRhdGUuZ2V0SG91cnMoKSwgLy/lsI/ml7YgXFxuICAgICAgICBcXFwibStcXFwiOiBkYXRlLmdldE1pbnV0ZXMoKSwgLy/liIYgXFxuICAgICAgICBcXFwicytcXFwiOiBkYXRlLmdldFNlY29uZHMoKSwgLy/np5IgXFxuICAgICAgICBcXFwicStcXFwiOiBNYXRoLmZsb29yKChkYXRlLmdldE1vbnRoKCkgKyAzKSAvIDMpLCAvL+Wto+W6piBcXG4gICAgICAgIFxcXCJTXFxcIjogZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAvL+avq+enkiBcXG4gICAgfTtcXG4gICAgaWYgKC8oeSspLy50ZXN0KGZtdCkpIHtcXG4gICAgICAgIGZtdCA9IGZtdC5yZXBsYWNlKFJlZ0V4cC4kMSwgKGRhdGUuZ2V0RnVsbFllYXIoKSArIFxcXCJcXFwiKS5zdWJzdHIoNCAtIFJlZ0V4cC4kMS5sZW5ndGgpKTtcXG4gICAgfVxcbiAgICBmb3IgKGxldCBrIGluIG8pIHtcXG4gICAgICAgIGlmIChuZXcgUmVnRXhwKFxcXCIoXFxcIiArIGsgKyBcXFwiKVxcXCIpLnRlc3QoZm10KSkge1xcbiAgICAgICAgICAgIGZtdCA9IGZtdC5yZXBsYWNlKFJlZ0V4cC4kMSwgKFJlZ0V4cC4kMS5sZW5ndGggPT0gMSkgPyAob1trXSkgOiAoKFxcXCIwMFxcXCIgKyBvW2tdKS5zdWJzdHIoKFxcXCJcXFwiICsgb1trXSkubGVuZ3RoKSkpO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiBmbXQ7XFxufTtcXG5cXG5mdW5jdGlvbiBmb3JtYXRTaXplKHNpemUpIHtcXG4gICAgaWYgKCFzaXplKSB7XFxuICAgICAgICByZXR1cm4gJyc7XFxuICAgIH1cXG4gICAgY29uc3QgdW5pdHMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXTtcXG4gICAgbGV0IGkgPSAwO1xcbiAgICB3aGlsZSAoc2l6ZSA+PSAxMDI0KSB7XFxuICAgICAgICBzaXplIC89IDEwMjQ7XFxuICAgICAgICBpKys7XFxuICAgIH1cXG4gICAgc2l6ZSA9IGkgPyBOdW1iZXIoc2l6ZS50b0ZpeGVkKDIpKSA6IHNpemU7XFxuICAgIHJldHVybiBgJHtzaXplfSAke3VuaXRzW2ldfWA7XFxufVxcbi8vbG9nKHJlYWx1cmwpO1xcblxcbmlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgY2xlYXJNeVZhcignbmV4dHBhZ2UnKTtcXG59XFxuaWYgKE1ZX1BBR0UgPiAxICYmIGdldE15VmFyKCduZXh0cGFnZScsICcnKSA9PSAnJykge1xcbiAgICBsb2coJ+ayoeacieS4i+S4gOmhtScpO1xcbn0gZWxzZSB7XFxuICAgIHRyeSB7XFxuICAgICAgICB2YXIgcmVmdG9rZW4gPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2ljeS9pY3ktYWxpLXRva2VuLmpzb24nLCB7fSkpWzBdLnJlZnJlc2hfdG9rZW47XFxuICAgICAgICB2YXIgc2hhcmVJZCA9IGRlY29kZVVSSUNvbXBvbmVudChyZWFsdXJsKS5zcGxpdCgnY29tL3MvJylbMV0uc3Vic3RyaW5nKDAsIDExKTtcXG4gICAgICAgIGxldCBnZXRzaGFyID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS9hZHJpdmUvdjMvc2hhcmVfbGluay9nZXRfc2hhcmVfYnlfYW5vbnltb3VzJywge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgYm9keTogJ3tcXFwic2hhcmVfaWRcXFwiOlxcXCInICsgc2hhcmVJZCArICdcXFwifScsXFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgIH0pO1xcbiAgICAgICAgLy9sb2coZ2V0c2hhcik7XFxuICAgICAgICBpZiAoZ2V0c2hhci5pbmNsdWRlcyhcXFwic2hhcmVfbGluayBpcyBmb3JiaWRkZW5cXFwiKSkge1xcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+aWh+S7tui/neinhO+8jOagueaNruebuOWFs+azleW+i+azleinhOimgeaxgu+8jOivpeaWh+S7tuW3suemgeatouiuv+mXruOAgicsXFxuICAgICAgICAgICAgICAgIHVybDogZGVjb2RlVVJJQ29tcG9uZW50KGdldFJlc0NvZGUoKS5zcGxpdCgnIyMnKVsxXSksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChnZXRzaGFyLmluY2x1ZGVzKFxcXCJzaGFyZV9saW5rIGlzIGNhbmNlbGxlZFxcXCIpIHx8IGdldHNoYXIuaW5jbHVkZXMoXFxcInNoYXJlX2xpbmsgaXMgZXhwaXJlZFxcXCIpKSB7XFxuICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn5p2l5pma5ZWm77yM6K+l5YiG5Lqr5bey5aSx5pWI44CCJyxcXG4gICAgICAgICAgICAgICAgdXJsOiBkZWNvZGVVUklDb21wb25lbnQoZ2V0UmVzQ29kZSgpLnNwbGl0KCcjIycpWzFdKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGdldHNoYXIuaW5jbHVkZXMoXFxcInNoYXJlX2xpbmsgY2Fubm90IGJlIGZvdW5kXFxcIikpIHtcXG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfkvaDmiZPlvIDnmoTpk77mjqXmnInor6/vvIzor7fph43or5XjgIInLFxcbiAgICAgICAgICAgICAgICB1cmw6IGRlY29kZVVSSUNvbXBvbmVudChnZXRSZXNDb2RlKCkuc3BsaXQoJyMjJylbMV0pLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBsZXQgcHVzaG5hbWUgPSBKU09OLnBhcnNlKGdldHNoYXIpLmZpbGVfaW5mb3NbMF0uZmlsZV9uYW1lO1xcblxcbiAgICAgICAgdmFyIHNoYXJldG9rZW4gPSBKU09OLnBhcnNlKGZldGNoKCdodHRwczovL2FwaS5hbGl5dW5kcml2ZS5jb20vdjIvc2hhcmVfbGluay9nZXRfc2hhcmVfdG9rZW4nLCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBib2R5OiAne1xcXCJzaGFyZV9wd2RcXFwiOlxcXCJcXFwiLFxcXCJzaGFyZV9pZFxcXCI6XFxcIicgKyBzaGFyZUlkICsgJ1xcXCJ9JyxcXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgfSkpLnNoYXJlX3Rva2VuO1xcbiAgICAgICAgLy9sb2coc2hhcmV0b2tlbik7XFxuXFxuICAgICAgICBsZXQgbmV4dCA9IGdldE15VmFyKCduZXh0cGFnZScsICcnKSAhPSAnJyA/ICcsXFxcIm1hcmtlclxcXCI6XFxcIicgKyBnZXRNeVZhcignbmV4dHBhZ2UnKSArICdcXFwiJyA6ICcnO1xcbiAgICAgICAgaWYgKCFkZWNvZGVVUklDb21wb25lbnQocmVhbHVybCkuaW5jbHVkZXMoJy9mb2xkZXIvJykpIHtcXG4gICAgICAgICAgICAvL2lmKCFsaXN0eXAgPT0gJ2ZvbGRlcicpe1xcbiAgICAgICAgICAgIHZhciByZXNjb2QgPSBmZXRjaCgnaHR0cHM6Ly9hcGkuYWxpeXVuZHJpdmUuY29tL2Fkcml2ZS92My9maWxlL2xpc3QnLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxuICAgICAgICAgICAgICAgICAgICAnWC1TaGFyZS1Ub2tlbic6IHNoYXJldG9rZW5cXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgYm9keTogJ3tcXFwic2hhcmVfaWRcXFwiOlxcXCInICsgc2hhcmVJZCArICdcXFwiLFxcXCJwYXJlbnRfZmlsZV9pZFxcXCI6XFxcInJvb3RcXFwiLFxcXCJsaW1pdFxcXCI6MTAwLFxcXCJpbWFnZV90aHVtYm5haWxfcHJvY2Vzc1xcXCI6XFxcImltYWdlL3Jlc2l6ZSx3XzE2MC9mb3JtYXQsanBlZ1xcXCIsXFxcImltYWdlX3VybF9wcm9jZXNzXFxcIjpcXFwiaW1hZ2UvcmVzaXplLHdfMTkyMC9mb3JtYXQsanBlZ1xcXCIsXFxcInZpZGVvX3RodW1ibmFpbF9wcm9jZXNzXFxcIjpcXFwidmlkZW8vc25hcHNob3QsdF8xMDAwLGZfanBnLGFyX2F1dG8sd18zMDBcXFwiLFxcXCJvcmRlcl9ieVxcXCI6XFxcIm5hbWVcXFwiLFxcXCJvcmRlcl9kaXJlY3Rpb25cXFwiOlxcXCJBU0NcXFwiJyArIG5leHQgKyAnfScsXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgLy9sb2cocmVzY29kKTtcXG4gICAgICAgICAgICBpZiAocmVzY29kLmluY2x1ZGVzKFxcXCJQYXJhbUZsb3dFeGNlcHRpb25cXFwiKSkge1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgbGlzdHlwID0gSlNPTi5wYXJzZShyZXNjb2QpLml0ZW1zWzBdLnR5cGU7XFxuICAgICAgICAgICAgdmFyIHBmaWxlaWQgPSBKU09OLnBhcnNlKHJlc2NvZCkuaXRlbXNbMF0uZmlsZV9pZDtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdmFyIGxpc3R5cCA9ICdmb2xkZXInO1xcbiAgICAgICAgICAgIHZhciBwZmlsZWlkID0gZGVjb2RlVVJJQ29tcG9uZW50KHJlYWx1cmwpLnNwbGl0KCdmb2xkZXIvJylbMV1cXG5cXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKGh0bWwpO1xcbiAgICAgICAgaWYgKGxpc3R5cCA9PSAnZm9sZGVyJykge1xcbiAgICAgICAgICAgIHZhciByZXNjb2QgPSBmZXRjaCgnaHR0cHM6Ly9hcGkuYWxpeXVuZHJpdmUuY29tL2Fkcml2ZS92My9maWxlL2xpc3QnLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxuICAgICAgICAgICAgICAgICAgICAnWC1TaGFyZS1Ub2tlbic6IHNoYXJldG9rZW5cXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgYm9keTogJ3tcXFwic2hhcmVfaWRcXFwiOlxcXCInICsgc2hhcmVJZCArICdcXFwiLFxcXCJwYXJlbnRfZmlsZV9pZFxcXCI6XFxcIicgKyBwZmlsZWlkICsgJ1xcXCIsXFxcImxpbWl0XFxcIjoxMDAsXFxcImltYWdlX3RodW1ibmFpbF9wcm9jZXNzXFxcIjpcXFwiaW1hZ2UvcmVzaXplLHdfMTYwL2Zvcm1hdCxqcGVnXFxcIixcXFwiaW1hZ2VfdXJsX3Byb2Nlc3NcXFwiOlxcXCJpbWFnZVxcXFwvcmVzaXplLHdfMTkyMC9mb3JtYXQsanBlZ1xcXCIsXFxcInZpZGVvX3RodW1ibmFpbF9wcm9jZXNzXFxcIjpcXFwidmlkZW8vc25hcHNob3QsdF8xMDAwLGZfanBnLGFyX2F1dG8sd18zMDBcXFwiLFxcXCJvcmRlcl9ieVxcXCI6XFxcIm5hbWVcXFwiLFxcXCJvcmRlcl9kaXJlY3Rpb25cXFwiOlxcXCJBU0NcXFwiJyArIG5leHQgKyAnfScsXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgaWYgKHJlc2NvZC5pbmNsdWRlcyhcXFwiUGFyYW1GbG93RXhjZXB0aW9uXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IC8v5Y+W5paH5Lu25aS5XFxuICAgICAgICAvL2xvZyhyZXNjb2QpO1xcblxcblxcbiAgICAgICAgaWYgKEpTT04ucGFyc2UocmVzY29kKS5uZXh0X21hcmtlcikge1xcbiAgICAgICAgICAgIGxldCBtYXJrZXIgPSBKU09OLnBhcnNlKHJlc2NvZCkubmV4dF9tYXJrZXI7XFxuICAgICAgICAgICAgaWYgKG1hcmtlci5sZW5ndGggPiAxMCkge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcignbmV4dHBhZ2UnLCBtYXJrZXIpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ25leHRwYWdlJyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIGNvbnRzID0gSlNPTi5wYXJzZShyZXNjb2QpLml0ZW1zO1xcbiAgICAgICAgaWYgKGNvbnRzLmxlbmd0aCA8IDEpIHtcXG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfor6Xmlofku7blpLnkuIvmsqHmnInliIbkuqvnmoTmlofku7YnLFxcbiAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIGRvbmd0YWkgPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGF6eXVybCcsIHt9KSkucnVsZS50b1N0cmluZygpO1xcblxcbiAgICAgICAgdmFyIHR1aXNvbmcgPSBbXTtcXG4gICAgICAgIHZhciB6aW11ID0gW107XFxuICAgICAgICBmb3IgKGxldCBpIGluIGNvbnRzKSB7XFxuICAgICAgICAgICAgLy92YXIgbGlzdHlwID0gY29udHNbaV0udHlwZTtcXG4gICAgICAgICAgICBpZiAoY29udHNbaV0udHlwZSAhPSAnZm9sZGVyJykge1xcbiAgICAgICAgICAgICAgICBsZXQgZm5hbWUgPSBjb250c1tpXS5uYW1lO1xcbiAgICAgICAgICAgICAgICBsZXQgZnR5cGUgPSBmbmFtZS50b0xvd2VyQ2FzZSgpO1xcbiAgICAgICAgICAgICAgICBsZXQgY2F0ZSA9IGNvbnRzW2ldLmNhdGVnb3J5O1xcbiAgICAgICAgICAgICAgICBpZiAoZnR5cGUuZW5kc1dpdGgoJy5zcnQnKSB8fCBmdHlwZS5lbmRzV2l0aCgnLnZ0dCcpIHx8IGZ0eXBlLmVuZHNXaXRoKCcuYXNzJykpIHtcXG4gICAgICAgICAgICAgICAgICAgIHppbXUucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0OiBmbmFtZS5zdWJzdHJpbmcoMCwgZm5hbWUubGFzdEluZGV4T2YoXFxcIi5cXFwiKSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0OiBjb250c1tpXS5maWxlX2V4dGVuc2lvbixcXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWQ6IGNvbnRzW2ldLmZpbGVfaWRcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICBpZiAoY2F0ZSA9PSAndmlkZW8nIHx8IGNhdGUgPT0gJ2F1ZGlvJykge1xcbiAgICAgICAgICAgICAgICAgICAgdHVpc29uZy5wdXNoKFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuYW1lLnJlcGxhY2UoL1xcXFwjL2csICdfJykucmVwbGFjZSgvXFxcXCQvZywgJ18nKSArICckJyArIGNhdGUgKyAnfCcgKyBjb250c1tpXS5maWxlX2lkXFxuICAgICAgICAgICAgICAgICAgICApO1xcbiAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGZvciAodmFyIGkgaW4gY29udHMpIHtcXG4gICAgICAgICAgICB2YXIgbGlzdHlwID0gY29udHNbaV0udHlwZTtcXG4gICAgICAgICAgICBpZiAobGlzdHlwICE9ICdmb2xkZXInKSB7XFxuICAgICAgICAgICAgICAgIHZhciBjYXRlID0gY29udHNbaV0uY2F0ZWdvcnk7XFxuICAgICAgICAgICAgICAgIHZhciBmbmFtZSA9IGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgICAgIGlmIChjYXRlID09ICd2aWRlbycpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5O6JyArIGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F0ZSA9PSAnZG9jJykge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gJ/Cfk5YnICsgY29udHNbaV0ubmFtZTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjYXRlID09ICdpbWFnZScpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5a8JyArIGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F0ZSA9PSAnemlwJykge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gJ/Cfk6YnICsgY29udHNbaV0ubmFtZTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IGNvbnRzW2ldLm5hbWVcXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAvLyBpZiAoY2F0ZSA9PSAndmlkZW8nIHx8IGNhdGUgPT0gJ2F1ZGlvJyB8fCBjYXRlID09ICdpbWFnZScpIHtcXG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoY29udHNbaV0uZmlsZV9pZCkubGF6eVJ1bGUoKHNoYXJlSWQsIGRvbmd0YWksIGNhdGUsIGZuYW1lLCByZWZ0b2tlbiwgemltdSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXRJdGVtKCdzaW5nbGVwdXNoJywgJycpID09ICcxJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9wdXNoP3J1bGU9WFlR5o6o6YCBJnB1c2h1cmw9JyArIGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwibmFtZVxcXCI6IGZuYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInJlZnJlc2hfdG9rZW5cXFwiOiByZWZ0b2tlbixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ1cmxcXFwiOiBmbmFtZS5yZXBsYWNlKC9cXFxcIy9nLCAnXycpLnJlcGxhY2UoL1xcXFwkL2csICdfJykgKyAnJCcgKyBjYXRlICsgJ3wnICsgaW5wdXQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwic2hhcmVfaWRcXFwiOiBzaGFyZUlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKGRvbmd0YWkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGxheVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0sIHNoYXJlSWQsIGRvbmd0YWksIGNhdGUsIGZuYW1lLCByZWZ0b2tlbiwgemltdSksXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBmb3JtYXREYXRlKGNvbnRzW2ldLnVwZGF0ZWRfYXQpICsgJyAgJyArIGZvcm1hdFNpemUoY29udHNbaV0uc2l6ZSksXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfmjqjpgIHliLBUVkJveCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChzaGFyZUlkLCBmaWxlaWQsIGNhdGUsIGZuYW1lLCByZWZ0b2tlbikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2UvcHVzaD9ydWxlPVhZUeaOqOmAgSZwdXNodXJsPScgKyBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogZm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInJlZnJlc2hfdG9rZW5cXFwiOiByZWZ0b2tlbixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwidXJsXFxcIjogZm5hbWUucmVwbGFjZSgvXFxcXCMvZywgJ18nKS5yZXBsYWNlKC9cXFxcJC9nLCAnXycpICsgJyQnICsgY2F0ZSArICd8JyArIGZpbGVpZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwic2hhcmVfaWRcXFwiOiBzaGFyZUlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHNoYXJlSWQsIGNvbnRzW2ldLmZpbGVfaWQsIGNhdGUsIGZuYW1lLCByZWZ0b2tlbilcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogY29udHNbaV0uZmlsZV9pZFxcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8xJ1xcblxcbiAgICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICAgICAgLyp9IGVsc2UgaWYgKGkgPT0gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICflvZPliY3mlofku7blpLnkuIvmsqHmnInpn7Pop4bpopHmlofku7YnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9Ki9cXG5cXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn8J+TgicgKyBjb250c1tpXS5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5JyArIGNvbnRzW2ldLmZpbGVfaWQgKyAnPz8/ZnlwYWdlJykucnVsZSgoc2hhcmVJZCwgc2hhcmV0b2tlbiwgcHVzaG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9ydWxlbG9vcCcsIHt9KSkucnVsZSk7XFxuICAgICAgICAgICAgICAgICAgICB9LCBzaGFyZUlkLCBzaGFyZXRva2VuLCBjb250c1tpXS5uYW1lKSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nXFxuICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgIH0gLy9lbmQgaWZcXG4gICAgICAgIH0gLy9lbmQgZm9yIGlcXG4gICAgICAgIC8vbG9nKHR1aXNvbmcpO1xcbiAgICAgICAgZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvcHVzaGNvZGUnLCB7fSkpLnJ1bGUpO1xcblxcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAvKlxcbiAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfmrKfmrKfvvIzmiqXplJnkuobjgIInLFxcbiAgICAgICAgICAgIHVybDogZGVjb2RlVVJJQ29tcG9uZW50KGdldFJlc0NvZGUoKS5zcGxpdCgnIyMnKVsxXSksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICAqL1xcbiAgICB9XFxufVxcbi8qXFxuc2V0SG9tZVJlc3VsdCh7XFxuICAgIGRhdGE6IGl0ZW1zXFxufSk7XFxuKi9cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWIhuS6q+i1hOa6kOW1jOWll1wiLFwicGF0aFwiOlwicnVsZWxvb3BcIixcInJ1bGVcIjpcInZhciBpdGVtcyA9IFtdO1xcblxcbmZ1bmN0aW9uIGZvcm1hdERhdGUoX2RhdGUsIF9mbXQpIHtcXG4gICAgbGV0IGZtdCA9IF9mbXQgfHwgXFxcInl5eXktTU0tZGQgSEg6bW06c3NcXFwiO1xcbiAgICBjb25zdCBkYXRlID0gIWlzTmFOKF9kYXRlKSA/IG5ldyBEYXRlKF9kYXRlICogMTAwMCkgOiBuZXcgRGF0ZShfZGF0ZSk7XFxuICAgIGNvbnN0IG8gPSB7XFxuICAgICAgICBcXFwiTStcXFwiOiBkYXRlLmdldE1vbnRoKCkgKyAxLCAvL+aciOS7vSBcXG4gICAgICAgIFxcXCJkK1xcXCI6IGRhdGUuZ2V0RGF0ZSgpLCAvL+aXpSBcXG4gICAgICAgIFxcXCJoK1xcXCI6IGRhdGUuZ2V0SG91cnMoKSAlIDEyID09IDAgPyAxMiA6IGRhdGUuZ2V0SG91cnMoKSAlIDEyLFxcbiAgICAgICAgXFxcIkgrXFxcIjogZGF0ZS5nZXRIb3VycygpLCAvL+Wwj+aXtiBcXG4gICAgICAgIFxcXCJtK1xcXCI6IGRhdGUuZ2V0TWludXRlcygpLCAvL+WIhiBcXG4gICAgICAgIFxcXCJzK1xcXCI6IGRhdGUuZ2V0U2Vjb25kcygpLCAvL+enkiBcXG4gICAgICAgIFxcXCJxK1xcXCI6IE1hdGguZmxvb3IoKGRhdGUuZ2V0TW9udGgoKSArIDMpIC8gMyksIC8v5a2j5bqmIFxcbiAgICAgICAgXFxcIlNcXFwiOiBkYXRlLmdldE1pbGxpc2Vjb25kcygpIC8v5q+r56eSIFxcbiAgICB9O1xcbiAgICBpZiAoLyh5KykvLnRlc3QoZm10KSkge1xcbiAgICAgICAgZm10ID0gZm10LnJlcGxhY2UoUmVnRXhwLiQxLCAoZGF0ZS5nZXRGdWxsWWVhcigpICsgXFxcIlxcXCIpLnN1YnN0cig0IC0gUmVnRXhwLiQxLmxlbmd0aCkpO1xcbiAgICB9XFxuICAgIGZvciAobGV0IGsgaW4gbykge1xcbiAgICAgICAgaWYgKG5ldyBSZWdFeHAoXFxcIihcXFwiICsgayArIFxcXCIpXFxcIikudGVzdChmbXQpKSB7XFxuICAgICAgICAgICAgZm10ID0gZm10LnJlcGxhY2UoUmVnRXhwLiQxLCAoUmVnRXhwLiQxLmxlbmd0aCA9PSAxKSA/IChvW2tdKSA6ICgoXFxcIjAwXFxcIiArIG9ba10pLnN1YnN0cigoXFxcIlxcXCIgKyBvW2tdKS5sZW5ndGgpKSk7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIGZtdDtcXG59O1xcblxcbmZ1bmN0aW9uIGZvcm1hdFNpemUoc2l6ZSkge1xcbiAgICBpZiAoIXNpemUpIHtcXG4gICAgICAgIHJldHVybiAnJztcXG4gICAgfVxcbiAgICBjb25zdCB1bml0cyA9IFsnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQiddO1xcbiAgICBsZXQgaSA9IDA7XFxuICAgIHdoaWxlIChzaXplID49IDEwMjQpIHtcXG4gICAgICAgIHNpemUgLz0gMTAyNDtcXG4gICAgICAgIGkrKztcXG4gICAgfVxcbiAgICBzaXplID0gaSA/IE51bWJlcihzaXplLnRvRml4ZWQoMikpIDogc2l6ZTtcXG4gICAgcmV0dXJuIGAke3NpemV9ICR7dW5pdHNbaV19YDtcXG59XFxuXFxuLy9sb2coZ2V0UmVzQ29kZSgpKTtcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgIGNsZWFyTXlWYXIoJ25leHRwYWdlJyk7XFxuICAgIGl0ZW1zLnVuc2hpZnQoe1xcbiAgICAgICAgdGl0bGU6IFxcXCLwn5O95o6o6YCB5b2T5YmN5paH5Lu25aS58J+TulxcXCIsXFxuICAgICAgICB1cmw6ICQoJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS9zLycgKyBzaGFyZUlkICsgJy9mb2xkZXIvJyArIGdldFJlc0NvZGUoKS5zcGxpdCgnPz8/JylbMF0pLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9wdXNoP3J1bGU9WFlR5o6o6YCBJnB1c2h1cmw9JyArIGVuY29kZVVSSUNvbXBvbmVudChpbnB1dCk7XFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG4gICAgfSk7XFxufVxcbmlmIChNWV9QQUdFID4gMSAmJiBnZXRNeVZhcignbmV4dHBhZ2UnLCAnJykgPT0gJycpIHtcXG4gICAgbG9nKCfmsqHmnInkuIvkuIDpobUnKTtcXG59IGVsc2Uge1xcbiAgICBsZXQgcmVmdG9rZW4gPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2ljeS9pY3ktYWxpLXRva2VuLmpzb24nLCB7fSkpWzBdLnJlZnJlc2hfdG9rZW47XFxuXFxuICAgIGxldCBuZXh0ID0gZ2V0TXlWYXIoJ25leHRwYWdlJywgJycpICE9ICcnID8gJyxcXFwibWFya2VyXFxcIjpcXFwiJyArIGdldE15VmFyKCduZXh0cGFnZScpICsgJ1xcXCInIDogJyc7XFxuXFxuICAgIHZhciByZXNjb2QgPSBmZXRjaCgnaHR0cHM6Ly9hcGkuYWxpeXVuZHJpdmUuY29tL2Fkcml2ZS92My9maWxlL2xpc3QnLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcXG4gICAgICAgICAgICAnWC1TaGFyZS1Ub2tlbic6IHNoYXJldG9rZW5cXG4gICAgICAgIH0sXFxuICAgICAgICBib2R5OiAne1xcXCJzaGFyZV9pZFxcXCI6XFxcIicgKyBzaGFyZUlkICsgJ1xcXCIsXFxcInBhcmVudF9maWxlX2lkXFxcIjpcXFwiJyArIGdldFJlc0NvZGUoKS5zcGxpdCgnPz8/JylbMF0gKyAnXFxcIixcXFwibGltaXRcXFwiOjEwMCxcXFwiaW1hZ2VfdGh1bWJuYWlsX3Byb2Nlc3NcXFwiOlxcXCJpbWFnZS9yZXNpemUsd18xNjAvZm9ybWF0LGpwZWdcXFwiLFxcXCJpbWFnZV91cmxfcHJvY2Vzc1xcXCI6XFxcImltYWdlXFxcXC9yZXNpemUsd18xOTIwL2Zvcm1hdCxqcGVnXFxcIixcXFwidmlkZW9fdGh1bWJuYWlsX3Byb2Nlc3NcXFwiOlxcXCJ2aWRlby9zbmFwc2hvdCx0XzEwMDAsZl9qcGcsYXJfYXV0byx3XzMwMFxcXCIsXFxcIm9yZGVyX2J5XFxcIjpcXFwibmFtZVxcXCIsXFxcIm9yZGVyX2RpcmVjdGlvblxcXCI6XFxcIkFTQ1xcXCInICsgbmV4dCArICd9JyxcXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgIH0pO1xcbiAgICAvL2xvZyhyZXNjb2QpO1xcbiAgICBpZiAocmVzY29kLmluY2x1ZGVzKFxcXCJQYXJhbUZsb3dFeGNlcHRpb25cXFwiKSkge1xcbiAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgfVxcbiAgICBpZiAoSlNPTi5wYXJzZShyZXNjb2QpLm5leHRfbWFya2VyKSB7XFxuICAgICAgICBsZXQgbWFya2VyID0gSlNPTi5wYXJzZShyZXNjb2QpLm5leHRfbWFya2VyO1xcbiAgICAgICAgaWYgKG1hcmtlci5sZW5ndGggPiAxMCkge1xcbiAgICAgICAgICAgIHB1dE15VmFyKCduZXh0cGFnZScsIG1hcmtlcik7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGNsZWFyTXlWYXIoJ25leHRwYWdlJyk7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgdmFyIGNvbnRzID0gSlNPTi5wYXJzZShyZXNjb2QpLml0ZW1zO1xcbiAgICAvKlxcbiAgICBpZiAoY29udHMubGVuZ3RoIDwgMSkge1xcbiAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfor6Xmlofku7blpLnkuIvmsqHmnInliIbkuqvnmoTmlofku7YnLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgICovXFxuICAgIHZhciBkb25ndGFpID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2xhenl1cmwnLCB7fSkpLnJ1bGUudG9TdHJpbmcoKTtcXG4gICAgXFxuICAgIHZhciB0dWlzb25nID0gW107XFxuICAgIHZhciB6aW11ID0gW107XFxuICAgIGZvciAobGV0IGkgaW4gY29udHMpIHtcXG4gICAgICAgIC8vdmFyIGxpc3R5cCA9IGNvbnRzW2ldLnR5cGU7XFxuICAgICAgICBpZiAoY29udHNbaV0udHlwZSAhPSAnZm9sZGVyJykge1xcbiAgICAgICAgICAgIGxldCBmbmFtZSA9IGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUudG9Mb3dlckNhc2UoKTtcXG4gICAgICAgICAgICBsZXQgY2F0ZSA9IGNvbnRzW2ldLmNhdGVnb3J5O1xcbiAgICAgICAgICAgIGlmIChmdHlwZS5lbmRzV2l0aCgnLnNydCcpIHx8IGZ0eXBlLmVuZHNXaXRoKCcudnR0JykgfHwgZnR5cGUuZW5kc1dpdGgoJy5hc3MnKSkge1xcbiAgICAgICAgICAgICAgICB6aW11LnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0OiBmbmFtZS5zdWJzdHJpbmcoMCwgZm5hbWUubGFzdEluZGV4T2YoXFxcIi5cXFwiKSksXFxuICAgICAgICAgICAgICAgICAgICBleHQ6IGNvbnRzW2ldLmZpbGVfZXh0ZW5zaW9uLFxcbiAgICAgICAgICAgICAgICAgICAgZmlkOiBjb250c1tpXS5maWxlX2lkXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgaWYgKGNhdGUgPT0gJ3ZpZGVvJyB8fCBjYXRlID09ICdhdWRpbycpIHtcXG4gICAgICAgICAgICAgICAgdHVpc29uZy5wdXNoKFxcbiAgICAgICAgICAgICAgICAgICAgZm5hbWUucmVwbGFjZSgvXFxcXCMvZywgJ18nKS5yZXBsYWNlKC9cXFxcJC9nLCAnXycpICsgJyQnICsgY2F0ZSArICd8JyArIGNvbnRzW2ldLmZpbGVfaWRcXG4gICAgICAgICAgICAgICAgKTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIFxcbiAgICBmb3IgKHZhciBpIGluIGNvbnRzKSB7XFxuICAgICAgICB2YXIgbGlzdHlwID0gY29udHNbaV0udHlwZTtcXG4gICAgICAgIGlmIChsaXN0eXAgIT0gJ2ZvbGRlcicpIHtcXG4gICAgICAgICAgICB2YXIgY2F0ZSA9IGNvbnRzW2ldLmNhdGVnb3J5O1xcbiAgICAgICAgICAgIHZhciBmbmFtZSA9IGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgaWYgKGNhdGUgPT0gJ3ZpZGVvJykge1xcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+TuicgKyBjb250c1tpXS5uYW1lO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F0ZSA9PSAnZG9jJykge1xcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+TlicgKyBjb250c1tpXS5uYW1lO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F0ZSA9PSAnaW1hZ2UnKSB7XFxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5a8JyArIGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChjYXRlID09ICd6aXAnKSB7XFxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5OmJyArIGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gY29udHNbaV0ubmFtZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAvL2lmIChjYXRlID09ICd2aWRlbycgfHwgY2F0ZSA9PSAnYXVkaW8nIHx8IGNhdGUgPT0gJ2ltYWdlJykge1xcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgIHVybDogJChjb250c1tpXS5maWxlX2lkKS5sYXp5UnVsZSgoc2hhcmVJZCwgZG9uZ3RhaSwgY2F0ZSwgZm5hbWUsIHJlZnRva2VuLHppbXUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChnZXRJdGVtKCdzaW5nbGVwdXNoJywgJycpID09ICcxJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3B1c2g/cnVsZT1YWVHmjqjpgIEmcHVzaHVybD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIm5hbWVcXFwiOiBmbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInJlZnJlc2hfdG9rZW5cXFwiOiByZWZ0b2tlbixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInVybFxcXCI6IGZuYW1lLnJlcGxhY2UoL1xcXFwjL2csICdfJykucmVwbGFjZSgvXFxcXCQvZywgJ18nKSArICckJyArIGNhdGUgKyAnfCcgKyBpbnB1dCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInNoYXJlX2lkXFxcIjogc2hhcmVJZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChkb25ndGFpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGxheVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LCBzaGFyZUlkLCBkb25ndGFpLCBjYXRlLCBmbmFtZSwgcmVmdG9rZW4semltdSksXFxuICAgICAgICAgICAgICAgIGRlc2M6IGZvcm1hdERhdGUoY29udHNbaV0udXBkYXRlZF9hdCkgKyAnICAnICsgZm9ybWF0U2l6ZShjb250c1tpXS5zaXplKSxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+aOqOmAgeWIsFRWQm94JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoc2hhcmVJZCwgZmlsZWlkLCBjYXRlLCBmbmFtZSwgcmVmdG9rZW4pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2UvcHVzaD9ydWxlPVhZUeaOqOmAgSZwdXNodXJsPScgKyBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIm5hbWVcXFwiOiBmbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJyZWZyZXNoX3Rva2VuXFxcIjogcmVmdG9rZW4sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwidXJsXFxcIjogZm5hbWUucmVwbGFjZSgvXFxcXCMvZywgJ18nKS5yZXBsYWNlKC9cXFxcJC9nLCAnXycpICsgJyQnICsgY2F0ZSArICd8JyArIGZpbGVpZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJzaGFyZV9pZFxcXCI6IHNoYXJlSWRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHNoYXJlSWQsIGNvbnRzW2ldLmZpbGVfaWQsIGNhdGUsIGZuYW1lLCByZWZ0b2tlbilcXG4gICAgICAgICAgICAgICAgICAgIH1dLFxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGNvbnRzW2ldLmZpbGVfaWRcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnXFxuXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgLy99XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ/Cfk4InICsgY29udHNbaV0ubmFtZSxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5JyArIGNvbnRzW2ldLmZpbGVfaWQgKyAnPz8/ZnlwYWdlJykucnVsZSgoc2hhcmVJZCwgc2hhcmV0b2tlbiwgcHVzaG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3J1bGVsb29wJywge30pKS5ydWxlKTtcXG4gICAgICAgICAgICAgICAgfSwgc2hhcmVJZCwgc2hhcmV0b2tlbiwgY29udHNbaV0ubmFtZSksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nXFxuICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICB9IC8vZW5kIGlmXFxuXFxuXFxuICAgIH1cXG4gICAgZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvcHVzaGNvZGUnLCB7fSkpLnJ1bGUpO1xcbn1cXG5zZXRIb21lUmVzdWx0KHtcXG4gICAgZGF0YTogaXRlbXNcXG59KTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWIhuS6q+i1hOa6kOWKqOaAgeino+aekFwiLFwicGF0aFwiOlwibGF6eXVybFwiLFwicnVsZVwiOlwidmFyIGRlZmRyaXZlaWQgPSBnZXRNeVZhcignZGVmZHJpdmVpZCcsICcnKSxcXG4gICAgcmVhY2Nlc3NUayA9IGdldE15VmFyKFxcXCJhbGlhY2Nlc3NUa1xcXCIsICcnKSxcXG4gICAgdGltZVRva2VuID0gZ2V0TXlWYXIoJ3RpbWVUb2tlbicsICcwJyksXFxuICAgIHN0VG9rZW4gPSBnZXRNeVZhcignc3RUb2tlbicsICcwJyksXFxuICAgIHNoYXJlaWlkID0gZ2V0TXlWYXIoJ3NoYXJlaWlkJywgc2hhcmVJZCksXFxuICAgIHNoYXJldG9rZW4gPSBnZXRJdGVtKCdzaGFyZXRva2VuJywgJycpLFxcbiAgICByZXNkcml2ZWlkID0gZ2V0TXlWYXIoJ3Jlc2RyaXZlaWQnLCAnJyksXFxuICAgIGZ0eXBlID0gZm5hbWUudG9Mb3dlckNhc2UoKTtcXG4vL2xvZygocGFyc2VJbnQodGltZVRva2VuKSAtIHBhcnNlSW50KG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkpLnRvU3RyaW5nKCkpO1xcbmZ1bmN0aW9uIGFjY2Vzc1RrKCkge1xcbiAgICBpZiAocmVhY2Nlc3NUayA9PSAnJyB8fCAocGFyc2VJbnQodGltZVRva2VuKSAtIHBhcnNlSW50KG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkpLnRvU3RyaW5nKCkgPD0gNjAwKSB7XFxuICAgICAgICBsb2coJ+WIt+aWsHJlYWNjZXNzVGsnKTtcXG4gICAgICAgIGxldCBudG9rZW4gPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2ljeS9pY3ktYWxpLXRva2VuLmpzb24nLCB7fSkpO1xcbiAgICAgICAgdmFyIHJlZnRva2VuID0gbnRva2VuWzBdLnJlZnJlc2hfdG9rZW47XFxuICAgICAgICBsZXQgcmVmcmVzaCA9IGZldGNoKCdodHRwczovL2F1dGguYWxpeXVuZHJpdmUuY29tL3YyL2FjY291bnQvdG9rZW4nLCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6IFBDX1VBLFxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxcbiAgICAgICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vJ1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgYm9keTogJ3tcXFwicmVmcmVzaF90b2tlblxcXCI6XFxcIicgKyByZWZ0b2tlbiArICdcXFwiLFxcXCJncmFudF90eXBlXFxcIjpcXFwicmVmcmVzaF90b2tlblxcXCJ9JyxcXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBudG9rZW5bMF0gPSBKU09OLnBhcnNlKHJlZnJlc2gpO1xcbiAgICAgICAgaWYgKCFmaWxlRXhpc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvaWN5L2ljeS1hbGktdG9rZW4uanNvblxcXCIpIHx8IHJlZnJlc2gubGVuZ3RoID4gMzAwKSB7XFxuICAgICAgICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2ljeS9pY3ktYWxpLXRva2VuLmpzb25cXFwiLCBKU09OLnN0cmluZ2lmeShudG9rZW4pKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHB1dE15VmFyKCd0aW1lVG9rZW4nLCAocGFyc2VJbnQoSlNPTi5wYXJzZShyZWZyZXNoKS5leHBpcmVzX2luKSArIHBhcnNlSW50KG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkpLnRvU3RyaW5nKCkpO1xcbiAgICAgICAgZGVmZHJpdmVpZCA9IEpTT04ucGFyc2UocmVmcmVzaCkuZGVmYXVsdF9kcml2ZV9pZDtcXG4gICAgICAgIHB1dE15VmFyKCdkZWZkcml2ZWlkJywgZGVmZHJpdmVpZCk7XFxuICAgICAgICByZWFjY2Vzc1RrID0gSlNPTi5wYXJzZShyZWZyZXNoKS50b2tlbl90eXBlICsgJyAnICsgSlNPTi5wYXJzZShyZWZyZXNoKS5hY2Nlc3NfdG9rZW47XFxuICAgICAgICBwdXRNeVZhcihcXFwiYWxpYWNjZXNzVGtcXFwiLCByZWFjY2Vzc1RrKTtcXG5cXG4gICAgfVxcbn07XFxuXFxuZnVuY3Rpb24gcmVzb3VyY2VJRCgpIHtcXG4gICAgbGV0IHVzZXJyZXNpbmZvID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly91c2VyLmFsaXl1bmRyaXZlLmNvbS92Mi91c2VyL2dldFxcXCIsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxcbiAgICAgICAgICAgICdVc2VyLUFnZW50JzogUENfVUEsXFxuICAgICAgICAgICAgXFxcImF1dGhvcml6YXRpb25cXFwiOiByZWFjY2Vzc1RrLFxcbiAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS8nXFxuICAgICAgICB9LFxcbiAgICAgICAgYm9keToge30sXFxuICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICB9KSk7XFxuICAgIGlmICh1c2VycmVzaW5mby5yZXNvdXJjZV9kcml2ZV9pZCkge1xcbiAgICAgICAgcmVzZHJpdmVpZCA9IHVzZXJyZXNpbmZvLnJlc291cmNlX2RyaXZlX2lkO1xcbiAgICAgICAgcHV0TXlWYXIoJ3Jlc2RyaXZlaWQnLCByZXNkcml2ZWlkKTtcXG4gICAgfVxcbn1cXG5cXG5hY2Nlc3NUaygpO1xcbnJlc291cmNlSUQoKTtcXG4vL+WIt+aWsHNoYXJldG9rZW5cXG5pZiAoc2hhcmVpaWQgIT0gc2hhcmVJZCB8fCAocGFyc2VJbnQoc3RUb2tlbikgLSBwYXJzZUludChuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApKS50b1N0cmluZygpIDw9IDYwMCkge1xcbiAgICB2YXIgc2hhcmV0ayA9IGZldGNoKCdodHRwczovL2FwaS5hbGl5dW5kcml2ZS5jb20vdjIvc2hhcmVfbGluay9nZXRfc2hhcmVfdG9rZW4nLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiBQQ19VQSxcXG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXFxuICAgICAgICB9LFxcbiAgICAgICAgYm9keTogJ3tcXFwic2hhcmVfcHdkXFxcIjpcXFwiXFxcIixcXFwic2hhcmVfaWRcXFwiOlxcXCInICsgc2hhcmVJZCArICdcXFwifScsXFxuICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICB9KTtcXG4gICAgbG9nKCfliLfmlrBzaGFyZXRva2VuJyk7XFxuICAgIHNoYXJldG9rZW4gPSBKU09OLnBhcnNlKHNoYXJldGspLnNoYXJlX3Rva2VuO1xcbiAgICBzZXRJdGVtKCdzaGFyZXRva2VuJywgSlNPTi5wYXJzZShzaGFyZXRrKS5zaGFyZV90b2tlbik7XFxuICAgIHB1dE15VmFyKCdzdFRva2VuJywgKHBhcnNlSW50KEpTT04ucGFyc2Uoc2hhcmV0aykuZXhwaXJlc19pbikgKyBwYXJzZUludChuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApKS50b1N0cmluZygpKTtcXG4gICAgcHV0TXlWYXIoJ3NoYXJlaWlkJywgc2hhcmVJZCk7XFxufVxcbi8vbG9nKHppbXUpO1xcbmNvbnN0IHRyYW5zY29kaW5nID0ge1xcbiAgICBVSEQ6IFxcXCI0SyDotoXmuIVcXFwiLFxcbiAgICBRSEQ6IFxcXCIySyDotoXmuIVcXFwiLFxcbiAgICBGSEQ6IFxcXCIxMDgwIOWFqOmrmOa4hVxcXCIsXFxuICAgIEhEOiBcXFwiNzIwIOmrmOa4hVxcXCIsXFxuICAgIFNEOiBcXFwiNTQwIOagh+a4hVxcXCIsXFxuICAgIExEOiBcXFwiMzYwIOa1geeVhVxcXCJcXG59O1xcbmlmICghZmlsZUV4aXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2ljeS9pY3ktYWxpLU9wZW5Ub2tlbi5qc29uXFxcIikpIHtcXG4gICAgdmFyIE9wZW5Ub2tlbiA9IHtcXG4gICAgICAgICdSZWZyZXNoVG9rZW5PcGVuJzogJycsXFxuICAgICAgICAnQWNjZXNzVG9rZW5PcGVuJzogJydcXG4gICAgfTtcXG59IGVsc2Uge1xcbiAgICB2YXIgT3BlblRva2VuID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9pY3kvaWN5LWFsaS1PcGVuVG9rZW4uanNvbicsIHt9KSk7XFxufVxcbi8vdmFyIHJlZnRva2VuID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9pY3kvaWN5LWFsaS10b2tlbi5qc29uJywge30pKVswXS5yZWZyZXNoX3Rva2VuO1xcbmZ1bmN0aW9uIGdldHN1Yih6bWZpZCwgem1leHQpIHtcXG4gICAgdHJ5IHtcXG4gICAgICAgIHZhciBqc29uID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS92Mi9maWxlL2dldF9zaGFyZV9saW5rX2Rvd25sb2FkX3VybCcsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxuICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogcmVhY2Nlc3NUayxcXG4gICAgICAgICAgICAgICAgJ1gtU2hhcmUtVG9rZW4nOiBzaGFyZXRva2VuXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBib2R5OiAne1xcXCJzaGFyZV9pZFxcXCI6XFxcIicgKyBzaGFyZUlkICsgJ1xcXCIsXFxcImZpbGVfaWRcXFwiOlxcXCInICsgem1maWQgKyAnXFxcIn0nLFxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICB9KTtcXG4gICAgICAgIC8vbG9nKGpzb24pO1xcbiAgICAgICAgbGV0IHppbXVsID0gSlNPTi5wYXJzZShqc29uKS5kb3dubG9hZF91cmw7XFxuICAgICAgICBkb3dubG9hZEZpbGUoemltdWwsICdoaWtlcjovL2ZpbGVzL2Rvd25sb2FkL3N1YnRpdGxpbmcuJyArIHptZXh0LCB7XFxuICAgICAgICAgICAgJ1JlZmVyZXInOiAnaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tLydcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmV0dXJuIGdldFBhdGgoJ2hpa2VyOi8vZmlsZXMvZG93bmxvYWQvc3VidGl0bGluZy4nICsgem1leHQpXFxuICAgICAgICAvL3JldHVybiB6aW11bFxcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICByZXR1cm4gXFxcIlxcXCI7XFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gYWxpU2hhcmVQbGF5VXJsKHNoYXJlX2lkLCBmaWxlX2lkLCBhbGl0b2tlbikge1xcbiAgICB0cnkge1xcbiAgICAgICAgZnVuY3Rpb24gZ2V0Tm93VGltZSgpIHtcXG4gICAgICAgICAgICBjb25zdCB5eSA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKVxcbiAgICAgICAgICAgIGNvbnN0IE1NID0gKG5ldyBEYXRlKCkuZ2V0TW9udGgoKSArIDEpIDwgMTAgPyAnMCcgKyAobmV3IERhdGUoKS5nZXRNb250aCgpICsgMSkgOiAobmV3IERhdGUoKS5nZXRNb250aCgpICsgMSlcXG4gICAgICAgICAgICBjb25zdCBkZCA9IG5ldyBEYXRlKCkuZ2V0RGF0ZSgpIDwgMTAgPyAnMCcgKyBuZXcgRGF0ZSgpLmdldERhdGUoKSA6IG5ldyBEYXRlKCkuZ2V0RGF0ZSgpXFxuICAgICAgICAgICAgY29uc3QgSEggPSBuZXcgRGF0ZSgpLmdldEhvdXJzKCkgPCAxMCA/ICcwJyArIG5ldyBEYXRlKCkuZ2V0SG91cnMoKSA6IG5ldyBEYXRlKCkuZ2V0SG91cnMoKVxcbiAgICAgICAgICAgIGNvbnN0IG1tID0gbmV3IERhdGUoKS5nZXRNaW51dGVzKCkgPCAxMCA/ICcwJyArIG5ldyBEYXRlKCkuZ2V0TWludXRlcygpIDogbmV3IERhdGUoKS5nZXRNaW51dGVzKClcXG4gICAgICAgICAgICByZXR1cm4geXkgKyAnJyArIGRkICsgJycgKyBISCArICcnICsgTU0gKyAnJyArIG1tXFxuICAgICAgICB9XFxuXFxuICAgICAgICBsZXQgc2hhcmV0b2tlbiA9IEpTT04ucGFyc2UocmVxdWVzdCgnaHR0cHM6Ly9hcGkuYWxpeXVuZHJpdmUuY29tL3YyL3NoYXJlX2xpbmsvZ2V0X3NoYXJlX3Rva2VuJywge1xcbiAgICAgICAgICAgIGJvZHk6IHtcXG4gICAgICAgICAgICAgICAgXFxcInNoYXJlX3B3ZFxcXCI6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwic2hhcmVfaWRcXFwiOiBzaGFyZV9pZFxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXFxuICAgICAgICAgICAgdGltZW91dDogMzAwMFxcbiAgICAgICAgfSkpLnNoYXJlX3Rva2VuO1xcblxcbiAgICAgICAgbGV0IGhlYWRlcnMgPSB7XFxuICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9VVRGLTgnLFxcbiAgICAgICAgICAgIFxcXCJvcmlnaW5cXFwiOiBcXFwiaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tXFxcIixcXG4gICAgICAgICAgICBcXFwicmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vXFxcIixcXG4gICAgICAgICAgICAvL1xcXCJ1c2VyLWFnZW50XFxcIjogXFxcIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTAuMC4wLjAgU2FmYXJpLzUzNy4zNlxcXCIsXFxuICAgICAgICAgICAgXFxcInVzZXItYWdlbnRcXFwiOiBQQ19VQSxcXG4gICAgICAgICAgICBcXFwieC1jYW5hcnlcXFwiOiBcXFwiY2xpZW50PXdlYixhcHA9YWRyaXZlLHZlcnNpb249djMuMS4wXFxcIlxcbiAgICAgICAgfTtcXG4gICAgICAgIGxldCBub3d0aW1lID0gRGF0ZS5ub3coKTtcXG4gICAgICAgIGxldCBvbGR0aW1lID0gcGFyc2VJbnQoZ2V0TXlWYXIoJ3VzZXJpbmZvQ2hlY2t0aW1lJywgJzAnKS5yZXBsYWNlKCd0aW1lJywgJycpKTtcXG4gICAgICAgIGxldCB1c2VyaW5mbztcXG4gICAgICAgIGxldCBhbGl1c2VyaW5mbyA9IHN0b3JhZ2UwLmdldE15VmFyKCdhbGl1c2VyaW5mbycpO1xcbiAgICAgICAgaWYgKGFsaXVzZXJpbmZvICYmIGFsaXVzZXJpbmZvLnVzZXJfaWQgJiYgbm93dGltZSA8IChvbGR0aW1lICsgMSAqIDYwICogNjAgKiAxMDAwKSkge1xcbiAgICAgICAgICAgIHVzZXJpbmZvID0gYWxpdXNlcmluZm87XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHVzZXJpbmZvID0gSlNPTi5wYXJzZShyZXF1ZXN0KCdodHRwczovL2F1dGguYWxpeXVuZHJpdmUuY29tL3YyL2FjY291bnQvdG9rZW4nLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXFxuICAgICAgICAgICAgICAgIGJvZHk6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJyZWZyZXNoX3Rva2VuXFxcIjogYWxpdG9rZW4sXFxuICAgICAgICAgICAgICAgICAgICBcXFwiZ3JhbnRfdHlwZVxcXCI6IFxcXCJyZWZyZXNoX3Rva2VuXFxcIlxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcXG4gICAgICAgICAgICAgICAgdGltZW91dDogMzAwMFxcbiAgICAgICAgICAgIH0pKTtcXG4gICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcignYWxpdXNlcmluZm8nLCB1c2VyaW5mbyk7XFxuICAgICAgICAgICAgcHV0TXlWYXIoJ3VzZXJpbmZvQ2hlY2t0aW1lJywgbm93dGltZSArICd0aW1lJyk7XFxuICAgICAgICB9XFxuICAgICAgICBsZXQgYXV0aG9yaXphdGlvbiA9ICdCZWFyZXIgJyArIHVzZXJpbmZvLmFjY2Vzc190b2tlbjtcXG4gICAgICAgIGxldCBkZXZpY2VJZCA9IHVzZXJpbmZvLmRldmljZV9pZDtcXG4gICAgICAgIGxldCB1c2VySWQgPSB1c2VyaW5mby51c2VyX2lkO1xcbiAgICAgICAgbGV0IHNpZ25hdHVyZTtcXG5cXG4gICAgICAgIGxldCBhcyA9IGp1c3RUZXN0U2lnbihcXFwiNWRkZTRlMWJkZjllNDk2NmIzODdiYTU4ZjRiM2ZkYzNcXFwiLCBkZXZpY2VJZCwgdXNlcklkKTtcXG4gICAgICAgIC8vbG9nKGEpO1xcbiAgICAgICAgbGV0IGJwID0gYXMuc3BsaXQoXFxcIiMjXFxcIik7XFxuICAgICAgICB2YXIgc2lnbiA9IGJwWzBdO1xcbiAgICAgICAgdmFyIHB1YktleSA9IGJwW2JwLmxlbmd0aCAtIDFdO1xcblxcbiAgICAgICAgbGV0IGkgPSAwO1xcbiAgICAgICAgZG8ge1xcblxcbiAgICAgICAgICAgIGxldCBzZXNzID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS91c2Vycy92MS91c2Vycy9kZXZpY2UvY3JlYXRlX3Nlc3Npb24nLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxuICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6IFBDX1VBLFxcbiAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiAnaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tLycsXFxuICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6IGF1dGhvcml6YXRpb24sXFxuICAgICAgICAgICAgICAgICAgICAnWC1TaGFyZS1Ub2tlbic6IHNoYXJldG9rZW4sXFxuICAgICAgICAgICAgICAgICAgICAneC1kZXZpY2UtaWQnOiBkZXZpY2VJZCxcXG4gICAgICAgICAgICAgICAgICAgICd4LXNpZ25hdHVyZSc6IHNpZ25cXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgYm9keTogJ3tcXFwiZGV2aWNlTmFtZVxcXCI6XFxcIkNocm9tZea1j+iniOWZqFxcXCIsXFxcIm1vZGVsTmFtZVxcXCI6XFxcIldpbmRvd3PnvZHpobXniYhcXFwiLFxcXCJub25jZVxcXCI6MCxcXFwicHViS2V5XFxcIjpcXFwiJyArIHB1YktleSArICdcXFwiLFxcXCJyZWZyZXNoVG9rZW5cXFwiOlxcXCInICsgYWxpdG9rZW4gKyAnXFxcIn0nLFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGlmIChzZXNzLmluY2x1ZGVzKCdzdWNjZXNzJykpIHtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxvZygnY3JlYXRlX3Nlc3Npb24gJyArIHNlc3MpO1xcbiAgICAgICAgICAgIGFzID0ganVzdFRlc3RTaWduKFxcXCI1ZGRlNGUxYmRmOWU0OTY2YjM4N2JhNThmNGIzZmRjM1xcXCIsIGRldmljZUlkLCB1c2VySWQpO1xcbiAgICAgICAgICAgIC8vbG9nKGEpO1xcbiAgICAgICAgICAgIGJwID0gYXMuc3BsaXQoXFxcIiMjXFxcIik7XFxuICAgICAgICAgICAgc2lnbiA9IGJwWzBdO1xcbiAgICAgICAgICAgIHB1YktleSA9IGJwW2JwLmxlbmd0aCAtIDFdO1xcbiAgICAgICAgICAgIGkrKztcXG4gICAgICAgIH0gd2hpbGUgKGkgPCA1KTtcXG5cXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ247XFxuICAgICAgICBoZWFkZXJzWydhdXRob3JpemF0aW9uJ10gPSBhdXRob3JpemF0aW9uO1xcbiAgICAgICAgaGVhZGVyc1sneC1kZXZpY2UtaWQnXSA9IGRldmljZUlkO1xcbiAgICAgICAgaGVhZGVyc1sneC1zaWduYXR1cmUnXSA9IHNpZ25hdHVyZTtcXG4gICAgICAgIGxldCBhbGl5dW5VcmwgPSBbXTtcXG4gICAgICAgIGhlYWRlcnNbJ3gtc2hhcmUtdG9rZW4nXSA9IHNoYXJldG9rZW47XFxuICAgICAgICBoZWFkZXJzWydmaWxlaWQnXSA9IHVzZXJJZDtcXG4gICAgICAgIGxldCBkYXRhID0ge1xcbiAgICAgICAgICAgIFxcXCJjYXRlZ29yeVxcXCI6IFxcXCJsaXZlX3RyYW5zY29kaW5nXFxcIixcXG4gICAgICAgICAgICBcXFwiZmlsZV9pZFxcXCI6IGZpbGVfaWQsXFxuICAgICAgICAgICAgXFxcImdldF9wcmV2aWV3X3VybFxcXCI6IHRydWUsXFxuICAgICAgICAgICAgXFxcInNoYXJlX2lkXFxcIjogc2hhcmVfaWQsXFxuICAgICAgICAgICAgXFxcInRlbXBsYXRlX2lkXFxcIjogXFxcIlxcXCIsXFxuICAgICAgICAgICAgXFxcImdldF9zdWJ0aXRsZV9pbmZvXFxcIjogdHJ1ZVxcbiAgICAgICAgfVxcbiAgICAgICAgLy9sb2coZGF0YSk7XFxuICAgICAgICBsZXQganNvbiA9IEpTT04ucGFyc2UocmVxdWVzdCgnaHR0cHM6Ly9hcGkuYWxpeXVuZHJpdmUuY29tL3YyL2ZpbGUvZ2V0X3NoYXJlX2xpbmtfdmlkZW9fcHJldmlld19wbGF5X2luZm8nLCB7XFxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcXG4gICAgICAgICAgICBib2R5OiBkYXRhLFxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxcbiAgICAgICAgICAgIHRpbWVvdXQ6IDMwMDBcXG4gICAgICAgIH0pKTtcXG4gICAgICAgIGFsaXl1blVybCA9IGpzb24udmlkZW9fcHJldmlld19wbGF5X2luZm8ubGl2ZV90cmFuc2NvZGluZ190YXNrX2xpc3Q7XFxuICAgICAgICBhbGl5dW5VcmwucmV2ZXJzZSgpO1xcblxcbiAgICAgICAgcmV0dXJuIGFsaXl1blVybDtcXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgbG9nKCfmoLnmja7lhbHkuqvpk77mjqXojrflj5bmkq3mlL7lnLDlnYDlpLHotKU+JyArIGUubWVzc2FnZSk7XFxuICAgICAgICByZXR1cm4gXFxcIlxcXCI7XFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gZ2V0QWxpVXJsKHNoYXJlX2lkLCBmaWxlX2lkLCBhbGl0b2tlbikge1xcbiAgICB0cnkge1xcbiAgICAgICAgbGV0IHVybHMgPSBbXTtcXG4gICAgICAgIGxldCBuYW1lcyA9IFtdO1xcbiAgICAgICAgbGV0IGhlYWRzID0gW107XFxuICAgICAgICBsZXQgdSA9IHN0YXJ0UHJveHlTZXJ2ZXIoJC50b1N0cmluZygoYWxpU2hhcmVQbGF5VXJsLCBmaWxlX2lkLCBzaGFyZV9pZCwgYWxpdG9rZW4pID0+IHtcXG4gICAgICAgICAgICBmdW5jdGlvbiBnZXR1cmwoZmlsZWlkLCBsaW5lKSB7XFxuICAgICAgICAgICAgICAgIC8v6aKE5Yqg6L295pe25Lya5Y+YZmlsZV9pZCzmiYDku6V0c+i/h+acn+abtOaWsOaXtui/mOWPluWOn+adpeeahGlkXFxuICAgICAgICAgICAgICAgIGxldCBwbGF5VXJsTGlzdCA9IGFsaVNoYXJlUGxheVVybChzaGFyZV9pZCwgZmlsZWlkLCBhbGl0b2tlbikgfHwgW107XFxuICAgICAgICAgICAgICAgIGxldCBhbGl1cmw7XFxuICAgICAgICAgICAgICAgIHBsYXlVcmxMaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnRlbXBsYXRlX2lkID09IGxpbmUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGl1cmwgPSBpdGVtLnVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvKmFsaXVybCA9IEpTT04ucGFyc2UocmVxdWVzdChpdGVtLnVybCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6IFBDX1VBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiAnaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tLydcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25seUhlYWRlcnM6IHRydWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0OiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDogMzAwMFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKS5oZWFkZXJzLmxvY2F0aW9uWzBdOyovXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIC8v5LiK6Z2i5piv6I635Y+W6Zi/6YeM55qE5pKt5pS+5Zyw5Z2AXFxuICAgICAgICAgICAgICAgIC8vbG9nKFxcXCLmiJHlnKjku6PnkIZcXFwiICsgYWxpdXJsKTtcXG4gICAgICAgICAgICAgICAgbGV0IGhvbWUgPSBhbGl1cmwuc3BsaXQoJ21lZGlhLm0zdTgnKVswXTtcXG4gICAgICAgICAgICAgICAgbGV0IGYgPSBmZXRjaChhbGl1cmwsIHtcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6IFBDX1VBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS8nXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dDogMzAwMFxcbiAgICAgICAgICAgICAgICB9KS5zcGxpdChcXFwiXFxcXG5cXFwiKTtcXG4gICAgICAgICAgICAgICAgbGV0IGZmID0gZi5tYXAoaXQgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0LnN0YXJ0c1dpdGgoXFxcIm1lZGlhLVxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCIvcHJveHk/dXJsPVxcXCIgKyBiYXNlNjRFbmNvZGUoaG9tZSArIGl0KTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdDtcXG4gICAgICAgICAgICAgICAgfSkuam9pbihcXFwiXFxcXG5cXFwiKTtcXG4gICAgICAgICAgICAgICAgLy9sb2coJ3VmaWQtJytmaWxlaWQpO1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvX2ZpbGVTZWxlY3RfJyArIGZpbGVpZCArICcubTN1OCcsIGZmKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZmO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQgdXJsID0gYmFzZTY0RGVjb2RlKE1ZX1BBUkFNUy51cmwpO1xcbiAgICAgICAgICAgIGlmICh1cmwuaW5jbHVkZXMoXFxcIi50c1xcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGxldCBmaWQgPSB1cmwuc3BsaXQoJyZmPScpWzFdLnNwbGl0KCcmJylbMF07XFxuICAgICAgICAgICAgICAgIC8vbG9nKCdzZmlkLScrZmlkKTtcXG4gICAgICAgICAgICAgICAgbGV0IGYgPSBmZXRjaCgnaGlrZXI6Ly9maWxlcy9jYWNoZS9fZmlsZVNlbGVjdF8nICsgZmlkICsgJy5tM3U4Jykuc3BsaXQoXFxcIlxcXFxuXFxcIik7XFxuICAgICAgICAgICAgICAgIGYuZm9yRWFjaChpdCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoaXQgJiYgaXQuc3RhcnRzV2l0aCgnL3Byb3h5P3VybD0nKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmdXJsID0gYmFzZTY0RGVjb2RlKGl0LnJlcGxhY2UoJy9wcm94eT91cmw9JywgJycpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXJsLnN1YnN0cih1cmwuaW5kZXhPZignL21lZGlhLScpLCB1cmwuaW5kZXhPZignLnRzJykpID09IGZ1cmwuc3Vic3RyKGZ1cmwuaW5kZXhPZignL21lZGlhLScpLCBmdXJsLmluZGV4T2YoJy50cycpKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBmdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgbGV0IGV4cGlyZXMgPSB1cmwuc3BsaXQoJ3gtb3NzLWV4cGlyZXM9JylbMV0uc3BsaXQoJyYnKVswXTtcXG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdHRpbWUgPSBwYXJzZUludChleHBpcmVzKSAtIERhdGUubm93KCkgLyAxMDAwO1xcbiAgICAgICAgICAgICAgICBpZiAobGFzdHRpbWUgPCA2MCkge1xcbiAgICAgICAgICAgICAgICAgICAgLy9sb2coJ+i/h+acn+abtOaWsCcpXFxuICAgICAgICAgICAgICAgICAgICBsZXQgbGluZSA9IHVybC5zcGxpdCgnL21lZGlhJylbMF07IC8v5Y+W5LmL5YmN5pKt5pS+55qEdHPmrrXnur/ot69cXG4gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN1YnN0cmluZyhsaW5lLmxhc3RJbmRleE9mKCcvJykgKyAxKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBmID0gZ2V0dXJsKGZpZCwgbGluZSkuc3BsaXQoXFxcIlxcXFxuXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBmLmZvckVhY2goaXQgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdCAmJiBpdC5zdGFydHNXaXRoKCcvcHJveHk/dXJsPScpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmdXJsID0gYmFzZTY0RGVjb2RlKGl0LnJlcGxhY2UoJy9wcm94eT91cmw9JywgJycpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVybC5zdWJzdHIodXJsLmluZGV4T2YoJy9tZWRpYS0nKSwgdXJsLmluZGV4T2YoJy50cycpKSA9PSBmdXJsLnN1YnN0cihmdXJsLmluZGV4T2YoJy9tZWRpYS0nKSwgZnVybC5pbmRleE9mKCcudHMnKSkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IGZ1cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KVxcblxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgLy9sb2coJ+acqui/h+acnycpXFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyhcXFwi5Luj55CGdHPvvJpcXFwiICsgdXJsKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogMzAyLFxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJMb2NhdGlvblxcXCI6IHVybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS8nXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIC8vbG9nKCfpppbmrKHmm7TmlrAnKVxcbiAgICAgICAgICAgICAgICBsZXQgbGluZSA9IHVybC5zcGxpdCgnfCcpWzFdO1xcbiAgICAgICAgICAgICAgICBsZXQgZmYgPSBnZXR1cmwoZmlsZV9pZCwgbGluZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBmZjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCBhbGlTaGFyZVBsYXlVcmwsIGZpbGVfaWQsIHNoYXJlX2lkLCBhbGl0b2tlbikpO1xcblxcbiAgICAgICAgbGV0IHBsYXlVcmxMaXN0ID0gYWxpU2hhcmVQbGF5VXJsKHNoYXJlX2lkLCBmaWxlX2lkLCBhbGl0b2tlbikgfHwgW107XFxuXFxuICAgICAgICBpZiAocGxheVVybExpc3QubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgIHBsYXlVcmxMaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgdXJscy5wdXNoKHUgKyBcXFwiP3VybD1cXFwiICsgYmFzZTY0RW5jb2RlKGl0ZW0udXJsICsgXFxcInxcXFwiICsgaXRlbS50ZW1wbGF0ZV9pZCkgKyBcXFwiIy5tM3U4XFxcIik7XFxuICAgICAgICAgICAgICAgIG5hbWVzLnB1c2godHJhbnNjb2RpbmdbaXRlbS50ZW1wbGF0ZV9pZF0gPyB0cmFuc2NvZGluZ1tpdGVtLnRlbXBsYXRlX2lkXSA6IGl0ZW0udGVtcGxhdGVfaGVpZ2h0KTtcXG4gICAgICAgICAgICAgICAgaGVhZHMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6IFBDX1VBLFxcbiAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiAnaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tLydcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB2YXIgbXVsdCA9IHtcXG4gICAgICAgICAgICAgICAgdXJsczogdXJscyxcXG4gICAgICAgICAgICAgICAgbmFtZXM6IG5hbWVzLFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkc1xcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgaWYgKHppbXUubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpIGluIHppbXUpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB6aW11dCA9IHppbXVbaV0udGl0O1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZuYW1lLmluY2x1ZGVzKHppbXV0KSB8fCB6aW11dC5pbmNsdWRlcyhmbmFtZS5zdWJzdHJpbmcoMCwgZm5hbWUubGFzdEluZGV4T2YoJy4nKSkpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbXVsdFsnc3VidGl0bGUnXSA9IGdldHN1Yih6aW11W2ldLmZpZCwgemltdVtpXS5leHQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIHJldHVybiBtdWx0O1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBsb2coJ+acquiOt+WPlumYv+mHjOaSreaUvuWcsOWdgO+8jOW7uuiurumHjei/m+i9r+S7tuWGjeivleS4gOasoScpXFxuICAgICAgICAgICAgcmV0dXJuIHt9O1xcbiAgICAgICAgfVxcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICBsb2coJ+iOt+WPluWFseS6q+mTvuaOpeaSreaUvuWcsOWdgOWksei0pT4nICsgZS5tZXNzYWdlKTtcXG4gICAgICAgIHJldHVybiB7fTtcXG4gICAgfVxcbn1cXG5cXG5pZiAoY2F0ZSA9PSAndmlkZW8nKSB7XFxuICAgIC8vbG9nKHJlYWNjZXNzVGspOyBcXG4gICAgaWYgKGdldEl0ZW0oJ3F1YWxpdHknLCAnJykgPT0gJzEnKSB7XFxuICAgICAgICAvL+WOn+eUu1xcbiAgICAgICAgLy9hY2Nlc3NUaygpO1xcblxcbiAgICAgICAgZnVuY3Rpb24gb2F1dGhSZWRpcmVjdChjb2RlKSB7XFxuICAgICAgICAgICAgLy9sb2coY29kZSk7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgaWYgKGdldE15VmFyKCdvcmVkJywgJzEnKSAhPSAnMCcpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBqc29uID0gZmV0Y2goJ2h0dHBzOi8vYXBpLnhob2ZlLnRvcC9hbGlzdC9hbGlfb3Blbi9jb2RlJywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiBQQ19VQSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiAnaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tLydcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImNvZGVcXFwiOiBjb2RlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiZ3JhbnRfdHlwZVxcXCI6IFxcXCJhdXRob3JpemF0aW9uX2NvZGVcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoanNvbiA9PSBcXFwiXFxcInx8IUpTT04ucGFyc2UoanNvbikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uID0gZmV0Y2goJ2h0dHBzOi8vYXBpLWNmLm5uLmNpL2FsaXN0L2FsaV9vcGVuL2NvZGUnLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogUENfVUEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vJ1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiY29kZVxcXCI6IGNvZGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiZ3JhbnRfdHlwZVxcXCI6IFxcXCJhdXRob3JpemF0aW9uX2NvZGVcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBsb2coJ+iOt+WPllJlZnJlc2hUb2tlbk9wZW4nKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmluY2x1ZGVzKCdUb28gTWFueSBSZXF1ZXN0cycpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ29yZWQnLCAnMCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KCfor7fmsYLlpKrpopHnuYHvvIzooqvlsIHpmZDliLbkuoYnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2xvZygn6K+35rGC5aSq6aKR57mB77yM6KKr5bCBSVDkuoYnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdvcmVkJywgJzEnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSlNPTi5wYXJzZShqc29uKS5yZWZyZXNoX3Rva2VuKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBnZXRSZWZyZXNoVG9rZW5PcGVuID0gSlNPTi5wYXJzZShqc29uKS5yZWZyZXNoX3Rva2VuO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVuVG9rZW4uUmVmcmVzaFRva2VuT3BlbiA9IGdldFJlZnJlc2hUb2tlbk9wZW47XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBnZXRBY2Nlc3NUb2tlbk9wZW4gPSBKU09OLnBhcnNlKGpzb24pLnRva2VuX3R5cGUgKyAnICcgKyBKU09OLnBhcnNlKGpzb24pLmFjY2Vzc190b2tlbjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlblRva2VuLkFjY2Vzc1Rva2VuT3BlbiA9IGdldEFjY2Vzc1Rva2VuT3BlbjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2ljeS9pY3ktYWxpLU9wZW5Ub2tlbi5qc29uXFxcIiwgSlNPTi5zdHJpbmdpZnkoT3BlblRva2VuKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdyZWRpcmVjdCcsICcxJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cXG4gICAgICAgIH07XFxuXFxuICAgICAgICBmdW5jdGlvbiBvYXV0aFJlcXVlc3QoKSB7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgbGV0IGpzb24gPSBmZXRjaCgnaHR0cHM6Ly9vcGVuLmFsaXl1bmRyaXZlLmNvbS9vYXV0aC91c2Vycy9hdXRob3JpemU/Y2xpZW50X2lkPScgKyAnNzY5MTdjY2NjZDQ0NDFjMzk0NTdhMDRmNjA4NGZiMmYnICsgJyZyZWRpcmVjdF91cmk9aHR0cHM6Ly9hbGlzdC5ubi5jaS90b29sL2FsaXl1bmRyaXZlL2NhbGxiYWNrJnNjb3BlPXVzZXI6YmFzZSxmaWxlOmFsbDpyZWFkLGZpbGU6YWxsOndyaXRlJnN0YXRlPScsIHtcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6IFBDX1VBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS8nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdhdXRob3JpemF0aW9uJzogcmVhY2Nlc3NUaywgLy9nZXRBY2Nlc3NUb2tlblxcbiAgICAgICAgICAgICAgICAgICAgICAgICd4LWNhbmFyeSc6ICdjbGllbnQ9d2ViLGFwcD1zaGFyZSx2ZXJzaW9uPXYyLjMuMScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3gtc2hhcmUtdG9rZW4nOiBzaGFyZXRva2VuXFxuXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJhdXRob3JpemVcXFwiOiAxLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJzY29wZVxcXCI6IFxcXCJ1c2VyOmJhc2UsZmlsZTphbGw6cmVhZCxmaWxlOmFsbDp3cml0ZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgLy9sb2coJ29hdXRocmVxXFxcXG4nICsganNvbik7XFxuICAgICAgICAgICAgICAgIGxldCBjb2RlID0gSlNPTi5wYXJzZShqc29uKS5yZWRpcmVjdFVyaS5zcGxpdChcXFwiY29kZT1cXFwiKVsxXTtcXG4gICAgICAgICAgICAgICAgLy9sb2coY29kZSk7XFxuICAgICAgICAgICAgICAgIG9hdXRoUmVkaXJlY3QoY29kZSk7XFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICByZWFjY2Vzc1RrID0gJyc7XFxuICAgICAgICAgICAgICAgIGFjY2Vzc1RrKCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfTtcXG5cXG4gICAgICAgIGZ1bmN0aW9uIHJlZnJlc2hPcGVuVG9rZW4oKSB7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgaWYgKGdldE15VmFyKCdyb3QnLCAnMScpICE9ICcwJykge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGpzb24gPSBmZXRjaCgnaHR0cHM6Ly9hcGkueGhvZmUudG9wL2FsaXN0L2FsaV9vcGVuL3Rva2VuJywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiBQQ19VQSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiAnaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tLydcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dyYW50X3R5cGUnOiAncmVmcmVzaF90b2tlbicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWZyZXNoX3Rva2VuJzogT3BlblRva2VuLlJlZnJlc2hUb2tlbk9wZW5cXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChqc29uID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IGZldGNoKCdodHRwczovL2FwaS1jZi5ubi5jaS9hbGlzdC9hbGlfb3Blbi9jb2RlJywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6IFBDX1VBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiAnaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tLydcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dyYW50X3R5cGUnOiAncmVmcmVzaF90b2tlbicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVmcmVzaF90b2tlbic6IE9wZW5Ub2tlbi5SZWZyZXNoVG9rZW5PcGVuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBsb2coJ+iOt+WPlkFjY2Vzc1Rva2VuT3BlbicpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uaW5jbHVkZXMoJ1RvbyBNYW55IFJlcXVlc3RzJykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigncm90JywgJzAnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2FzdCgn6K+35rGC5aSq6aKR57mB77yM6KKr5bCB6ZmQ5Yi25LqGJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2coJ+ivt+axguWkqumikee5ge+8jOiiq+WwgUlQ5LqGJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigncm90JywgJzEnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSlNPTi5wYXJzZShqc29uKS5yZWZyZXNoX3Rva2VuKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBnZXRSZWZyZXNoVG9rZW5PcGVuID0gSlNPTi5wYXJzZShqc29uKS5yZWZyZXNoX3Rva2VuO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVuVG9rZW4uUmVmcmVzaFRva2VuT3BlbiA9IGdldFJlZnJlc2hUb2tlbk9wZW47XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBnZXRBY2Nlc3NUb2tlbk9wZW4gPSBKU09OLnBhcnNlKGpzb24pLnRva2VuX3R5cGUgKyAnICcgKyBKU09OLnBhcnNlKGpzb24pLmFjY2Vzc190b2tlbjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlblRva2VuLkFjY2Vzc1Rva2VuT3BlbiA9IGdldEFjY2Vzc1Rva2VuT3BlbjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2ljeS9pY3ktYWxpLU9wZW5Ub2tlbi5qc29uXFxcIiwgSlNPTi5zdHJpbmdpZnkoT3BlblRva2VuKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cXG4gICAgICAgIH07XFxuXFxuICAgICAgICBmdW5jdGlvbiBjb3B5KGZpbGVJZCkge1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGxldCBqc29uID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS9hZHJpdmUvdjIvYmF0Y2gnLCB7XFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiBQQ19VQSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnYXV0aG9yaXphdGlvbic6IHJlYWNjZXNzVGssXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9nZXRBY2Nlc3NUb2tlblxcbiAgICAgICAgICAgICAgICAgICAgICAgICd4LWNhbmFyeSc6ICdjbGllbnQ9d2ViLGFwcD1zaGFyZSx2ZXJzaW9uPXYyLjMuMScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3gtc2hhcmUtdG9rZW4nOiBzaGFyZXRva2VuXFxuXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJyZXF1ZXN0c1xcXCI6IFt7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJib2R5XFxcIjoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImZpbGVfaWRcXFwiOiBmaWxlSWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwic2hhcmVfaWRcXFwiOiBzaGFyZUlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImF1dG9fcmVuYW1lXFxcIjogdHJ1ZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ0b19wYXJlbnRfZmlsZV9pZFxcXCI6IFxcXCJyb290XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ0b19kcml2ZV9pZFxcXCI6IGRlZmRyaXZlaWRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImhlYWRlcnNcXFwiOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiQ29udGVudC1UeXBlXFxcIjogXFxcImFwcGxpY2F0aW9uL2pzb25cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJpZFxcXCI6IFxcXCIwXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIm1ldGhvZFxcXCI6IFxcXCJQT1NUXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInVybFxcXCI6IFxcXCIvZmlsZS9jb3B5XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1dLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJyZXNvdXJjZVxcXCI6IFxcXCJmaWxlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAvL2xvZygnY29weVxcXFxuJyArIGpzb24pO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uKS5yZXNwb25zZXNbMF0uYm9keS5maWxlX2lkO1xcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJcXFwiO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH07XFxuXFxuICAgICAgICBmdW5jdGlvbiBvcGVuKGZpbGVJZCkge1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGxldCBqc29uID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgIGxldCBudW1iZXIgPSAwO1xcbiAgICAgICAgICAgICAgICBkbyB7XFxuICAgICAgICAgICAgICAgICAgICBqc29uID0gZmV0Y2goJ2h0dHBzOi8vb3Blbi5hbGl5dW5kcml2ZS5jb20vYWRyaXZlL3YxLjAvb3BlbkZpbGUvZ2V0RG93bmxvYWRVcmwnLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6IFBDX1VBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F1dGhvcml6YXRpb24nOiBPcGVuVG9rZW4uQWNjZXNzVG9rZW5PcGVuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZ2V0QWNjZXNzVG9rZW5PcGVuXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxlX2lkJzogZmlsZUlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZHJpdmVfaWQnOiBkZWZkcml2ZWlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAvL2xvZygnb3BlblxcXFxuJyArIGpzb24pO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uaW5jbHVkZXMoJ1xcXCJ1cmxcXFwiOlxcXCJodHRwJykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmluY2x1ZGVzKFxcXCJUb29NYW55UmVxdWVzdHNcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlZShmaWxlSWQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KCdUb28gTWFueSBSZXF1ZXN0cycpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdldE15VmFyKCdyZWRpcmVjdCcsICcwJykgPT0gJzAnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgb2F1dGhSZXF1ZXN0KCk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hPcGVuVG9rZW4oKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIG51bWJlcisrXFxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKG51bWJlciA8IDIpO1xcbiAgICAgICAgICAgICAgICAvL2RlbGV0ZWUoZmlsZUlkKTtcXG4gICAgICAgICAgICAgICAgaWYgKGpzb24uaW5jbHVkZXMoJ2h0dHAnKSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoanNvbikudXJsICsgJyNpc1ZpZGVvPXRydWUjO3tSZWZlcmVyQGh0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS99JztcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhqc29uKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfTtcXG5cXG4gICAgICAgIGZ1bmN0aW9uIGRlbGV0ZWUoZmlsZUlkKSB7XFxuXFxuICAgICAgICAgICAgZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS9hZHJpdmUvdjIvYmF0Y2gnLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogUENfVUEsXFxuICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vJyxcXG4gICAgICAgICAgICAgICAgICAgICdhdXRob3JpemF0aW9uJzogcmVhY2Nlc3NUayxcXG4gICAgICAgICAgICAgICAgICAgICd4LWNhbmFyeSc6ICdjbGllbnQ9d2ViLGFwcD1zaGFyZSx2ZXJzaW9uPXYyLjMuMScsXFxuICAgICAgICAgICAgICAgICAgICAneC1zaGFyZS10b2tlbic6IHNoYXJldG9rZW5cXG5cXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcInJlcXVlc3RzXFxcIjogW3tcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwiYm9keVxcXCI6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImRyaXZlX2lkXFxcIjogZGVmZHJpdmVpZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImZpbGVfaWRcXFwiOiBmaWxlSWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJoZWFkZXJzXFxcIjoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiQ29udGVudC1UeXBlXFxcIjogXFxcImFwcGxpY2F0aW9uL2pzb25cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwiaWRcXFwiOiBmaWxlSWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcIm1ldGhvZFxcXCI6IFxcXCJQT1NUXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwidXJsXFxcIjogXFxcIi9maWxlL2RlbGV0ZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH1dLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcInJlc291cmNlXFxcIjogXFxcImZpbGVcXFwiXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgLy9sb2coJ+WIoOmZpCAnICsgZGVsKTtcXG4gICAgICAgICAgICAvKlxcbiAgICAgICAgICAgIGZldGNoKCdodHRwczovL29wZW4uYWxpeXVuZHJpdmUuY29tL2Fkcml2ZS92MS4wL29wZW5GaWxlL2RlbGV0ZScsIHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiBQQ19VQSxcXG4gICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS8nLFxcbiAgICAgICAgICAgICAgICAgICAgJ2F1dGhvcml6YXRpb24nOiBnZXRJdGVtKCdnZXRBY2Nlc3NUb2tlbk9wZW4nLCAnJyksXFxuICAgICAgICAgICAgICAgICAgICAneC1zaGFyZS10b2tlbic6IHNoYXJldG9rZW5cXG5cXG5cXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcImRyaXZlX2lkXFxcIjogZGVmZHJpdmVpZCxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJmaWxlX2lkXFxcIjogZmlsZUlkXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgKi9cXG4gICAgICAgICAgICAvL2xvZygnZGVsZVxcXFxuJyArIGpzb24pO1xcbiAgICAgICAgfTtcXG5cXG4gICAgICAgIC8v5aSE55CG6KeG6aKRICBcXG4gICAgICAgIHZhciBkc2lkID0gc2hhcmVJZDtcXG4gICAgICAgIHZhciBkZmlkID0gaW5wdXQ7XFxuICAgICAgICBpZiAocmVzZHJpdmVpZCAhPSBudWxsICYmIHJlc2RyaXZlaWQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICBkZWZkcml2ZWlkID0gcmVzZHJpdmVpZDtcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBmaWxlSWQgPSBjb3B5KGRmaWQpO1xcbiAgICAgICAgdmFyIHBsYXkgPSBvcGVuKGZpbGVJZCk7XFxuICAgICAgICBpZiAoZmlsZUlkLmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICBkZWxldGVlKGZpbGVJZCk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoemltdS5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgZm9yIChsZXQgaSBpbiB6aW11KSB7XFxuICAgICAgICAgICAgICAgIHZhciB6aW11dCA9IHppbXVbaV0udGl0O1xcbiAgICAgICAgICAgICAgICBpZiAoZm5hbWUuaW5jbHVkZXMoemltdXQpIHx8IHppbXV0LmluY2x1ZGVzKGZuYW1lLnN1YnN0cmluZygwLCBmbmFtZS5sYXN0SW5kZXhPZignLicpKSkpIHtcXG4gICAgICAgICAgICAgICAgICAgIHBsYXkgPSBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsczogW3BsYXkuc3BsaXQoJzt7JylbMF1dLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IFt7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS8nXFxuICAgICAgICAgICAgICAgICAgICAgICAgfV0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VidGl0bGU6IGdldHN1Yih6aW11W2ldLmZpZCwgemltdVtpXS5leHQpXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICAvL+aZrueUuyAgXFxuICAgICAgICB2YXIgZHNpZCA9IHNoYXJlSWQ7XFxuICAgICAgICB2YXIgZGZpZCA9IGlucHV0O1xcblxcbiAgICAgICAgaWYgKGNhdGUgPT0gJ3ZpZGVvJykge1xcbiAgICAgICAgICAgIHZhciBwbGF5ID0gSlNPTi5zdHJpbmdpZnkoZ2V0QWxpVXJsKFxcbiAgICAgICAgICAgICAgICBzaGFyZUlkLFxcbiAgICAgICAgICAgICAgICBpbnB1dCxcXG4gICAgICAgICAgICAgICAgcmVmdG9rZW5cXG4gICAgICAgICAgICApKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbn0gZWxzZSBpZiAoY2F0ZSA9PSAnaW1hZ2UnKSB7XFxuICAgIC8v5aSE55CG5paH5qGjXFxuICAgIC8vYWNjZXNzVGsoKTtcXG5cXG4gICAgdmFyIGpzb24gPSBmZXRjaCgnaHR0cHM6Ly9hcGkuYWxpeXVuZHJpdmUuY29tL3YyL2ZpbGUvZ2V0X3NoYXJlX2xpbmtfZG93bmxvYWRfdXJsJywge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxuICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiByZWFjY2Vzc1RrLFxcbiAgICAgICAgICAgICdYLVNoYXJlLVRva2VuJzogc2hhcmV0b2tlblxcbiAgICAgICAgfSxcXG4gICAgICAgIGJvZHk6ICd7XFxcInNoYXJlX2lkXFxcIjpcXFwiJyArIHNoYXJlSWQgKyAnXFxcIixcXFwiZXhwaXJlX3NlY1xcXCI6IDYwMCxcXFwiZmlsZV9pZFxcXCI6XFxcIicgKyBpbnB1dCArICdcXFwifScsXFxuICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICB9KTtcXG5cXG4gICAgLy9sb2coanNvbik7XFxuICAgIC8qXFxuICAgICAgICB2YXIgbG9jbGluayA9IEpTT04ucGFyc2UoZmV0Y2goSlNPTi5wYXJzZShqc29uKS5kb3dubG9hZF91cmwsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogTU9CSUxFX1VBLFxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXFxuICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS8nXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICByZWRpcmVjdDogZmFsc2UsXFxuICAgICAgICAgICAgd2l0aFN0YXR1c0NvZGU6IHRydWVcXG4gICAgICAgIH0pKS5oZWFkZXJzLmxvY2F0aW9uWzBdO1xcbiAgICAgICAgKi9cXG4gICAgdmFyIGxvY2xpbmsgPSBKU09OLnBhcnNlKGpzb24pLmRvd25sb2FkX3VybDtcXG4gICAgLy9sb2cobG9jbGluayk7XFxuICAgIGlmIChjYXRlID09ICdpbWFnZScpIHtcXG4gICAgICAgIHZhciBwbGF5ID0gJ3BpY3M6Ly8nICsgbG9jbGluayArICdAUmVmZXJlcj1odHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vJztcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHZhciBwbGF5ID0gbG9jbGluayArICc7e1JlZmVyZXJAaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL30nO1xcbiAgICB9XFxufSBlbHNlIGlmIChjYXRlID09ICdhdWRpbycpIHtcXG4gICAgdmFyIGpzb24gPSBmZXRjaCgnaHR0cHM6Ly9hcGkuYWxpeXVuZHJpdmUuY29tL3YyL2ZpbGUvZ2V0X3NoYXJlX2xpbmtfZG93bmxvYWRfdXJsJywge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxuICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiByZWFjY2Vzc1RrLFxcbiAgICAgICAgICAgICdYLVNoYXJlLVRva2VuJzogc2hhcmV0b2tlblxcbiAgICAgICAgfSxcXG4gICAgICAgIGJvZHk6ICd7XFxcInNoYXJlX2lkXFxcIjpcXFwiJyArIHNoYXJlSWQgKyAnXFxcIixcXFwiZ2V0X2F1ZGlvX3BsYXlfaW5mb1xcXCI6IHRydWUsXFxcImZpbGVfaWRcXFwiOlxcXCInICsgaW5wdXQgKyAnXFxcIn0nLFxcbiAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgfSk7XFxuICAgIC8vbG9nKGpzb24pO1xcbiAgICB2YXIgcGxheSA9IEpTT04ucGFyc2UoanNvbikuZG93bmxvYWRfdXJsICsgJyNpc011c2ljPXRydWUjO3tSZWZlcmVyQGh0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS99JztcXG59IGVsc2UgaWYgKGZ0eXBlLmVuZHNXaXRoKCcuc3J0JykgfHwgZnR5cGUuZW5kc1dpdGgoJy52dHQnKSB8fCBmdHlwZS5lbmRzV2l0aCgnLmFzcycpKSB7XFxuICAgIHZhciBqc29uID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS92Mi9maWxlL2dldF9zaGFyZV9saW5rX2Rvd25sb2FkX3VybCcsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxcbiAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogcmVhY2Nlc3NUayxcXG4gICAgICAgICAgICAnWC1TaGFyZS1Ub2tlbic6IHNoYXJldG9rZW5cXG4gICAgICAgIH0sXFxuICAgICAgICBib2R5OiAne1xcXCJzaGFyZV9pZFxcXCI6XFxcIicgKyBzaGFyZUlkICsgJ1xcXCIsXFxcImZpbGVfaWRcXFwiOlxcXCInICsgaW5wdXQgKyAnXFxcIn0nLFxcbiAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgfSk7XFxuICAgIC8vbG9nKGpzb24pO1xcbiAgICB2YXIgemltdWwgPSBKU09OLnBhcnNlKGpzb24pLmRvd25sb2FkX3VybDtcXG4gICAgZG93bmxvYWRGaWxlKHppbXVsLCAnaGlrZXI6Ly9maWxlcy9kb3dubG9hZC9YWVFfc3VidGl0bGluZycgKyBmbmFtZS5zdWJzdHJpbmcoZm5hbWUubGFzdEluZGV4T2YoXFxcIi5cXFwiKSksIHtcXG4gICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS8nXFxuICAgIH0pO1xcbiAgICB2YXIgcGxheSA9ICd0b2FzdDovL+Wtl+W5leaWh+S7tuW3suS4i+i9veWIsGhpa2VyOi8vZmlsZXMvZG93bmxvYWQvWFlRX3N1YnRpdGxpbmcnICsgZm5hbWUuc3Vic3RyaW5nKGZuYW1lLmxhc3RJbmRleE9mKFxcXCIuXFxcIikpXFxuICAgIC8vICsgJzt7UmVmZXJlckBodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vfSc7XFxufSBlbHNlIHtcXG4gICAgdmFyIHBsYXkgPSAndG9hc3Q6Ly/or6XmoLzlvI/mmoLmnKrmlK/mjIHvvIznm67liY3lj6rmlK/mjIHop4bpopHjgIInXFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi55m75YWl6LSm5Y+3XCIsXCJwYXRoXCI6XCJMb2dpblwiLFwicnVsZVwiOlwiZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLim4XvuI/ngrnlh7vmiJHnmbvlvZVcXFwiLFxcbiAgICB1cmw6ICQoXFxcImhpa2VyOi8vZW1wdHkjIyNub1JlY29yZEhpc3RvcnkjI25vSGlzdG9yeSNcXFwiKS5ydWxlKCgpID0+IHtcXG4gICAgICAgIGxldCBkID0gW107XFxuICAgICAgICBsZXQgbnRva2VuID0gW107XFxuICAgICAgICBpZiAoZmlsZUV4aXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2ljeS9pY3ktYWxpLXRva2VuLmpzb25cXFwiKSkge1xcbiAgICAgICAgICAgIG50b2tlbiA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMvaWN5L2ljeS1hbGktdG9rZW4uanNvbicsIHt9KSk7XFxuICAgICAgICB9XFxuICAgICAgICBsZXQgdXJsID0gJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS9zaWduJ1xcbiAgICAgICAgbGV0IGpzID0gJC50b1N0cmluZygobnRva2VuKSA9PiB7XFxuICAgICAgICAgICAgY29uc3QgdG9rZW5GdW5jdGlvbiA9IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0b2tlbicpKVxcbiAgICAgICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udXNlcl9pZCkge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFsaXN0ZmlsZSA9IFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2ljeS9pY3ktYWxpLXRva2VuLmpzb25cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgbnRva2VuWzBdID0gdG9rZW47XFxuICAgICAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLndyaXRlRmlsZShhbGlzdGZpbGUsIEpTT04uc3RyaW5naWZ5KG50b2tlbikpO1xcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmNsZWFyKCk7XFxuICAgICAgICAgICAgICAgICAgICBhbGVydCgnVE9LRU7ojrflj5bmiJDlip/vvIzov5Tlm57lkI7liLfmlrDpobXpnaLvvIEnKTtcXG4gICAgICAgICAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAucGFyc2VMYXp5UnVsZShgaGlrZXI6Ly9lbXB0eUBsYXp5UnVsZT0uanM6cmVmcmVzaFg1V2ViVmlldygnJyk7YCk7XFxuICAgICAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLmJhY2soKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHRva2VuX3RpbWVyKCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIHRva2VuX3RpbWVyID0gZnVuY3Rpb24oKSB7XFxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQodG9rZW5GdW5jdGlvbiwgNTAwKVxcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgdG9rZW5GdW5jdGlvbigpO1xcbiAgICAgICAgfSwgbnRva2VuKVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB1cmw6IHVybCxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3g1X3dlYnZpZXdfc2luZ2xlJyxcXG4gICAgICAgICAgICBkZXNjOiAnMTAwJSYmZmxvYXQnLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGNhbkJhY2s6IHRydWUsXFxuICAgICAgICAgICAgICAgIHVhOiBQQ19VQSxcXG4gICAgICAgICAgICAgICAganM6IGpzXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG59KTtcIn1dIiwiaWNvbiI6IiIsInByb3h5IjoiIn0=
Add Comment
Please, Sign In to add comment