xiaomianao666

小程序:JavDB✈️🐹

May 24th, 2024
434
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@JavDB✈️🐹@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoiSmF2RELinIjvuI/wn5C5IiwiYXV0aG9yIjoiUiIsInVybCI6Imhpa2VyOi8vZW1wdHkjI2h0dHBzOi8vamF2ZGIzNjUuY29tLyMjZnlwYWdlIiwidmVyc2lvbiI6MjAyNDAxMjUsImNvbF90eXBlIjoibW92aWVfMyIsImNsYXNzX25hbWUiOiIiLCJ0eXBlIjoibXVzaWMiLCJjbGFzc191cmwiOiIiLCJhcmVhX25hbWUiOiIiLCJhcmVhX3VybCI6IiIsInNvcnRfbmFtZSI6IiIsInllYXJfbmFtZSI6IiIsInNvcnRfdXJsIjoiIiwieWVhcl91cmwiOiIiLCJmaW5kX3J1bGUiOiJqczpcbnZhciBkID0gW107XG5hZGRMaXN0ZW5lcihcIm9uQ2xvc2VcIiwgJC50b1N0cmluZygoKSA9PiB7XG4gICAgbGV0IGtleXMgPSBsaXN0TXlWYXJLZXlzKCk7XG4gICAgZm9yIChsZXQgaXQgb2Yga2V5cykge1xuICAgICAgICBjbGVhck15VmFyKGl0KTtcbiAgICB9XG59KSk7XG5cbnZhciBnZXRSYW5nZUNvbG9ycyA9IGZ1bmN0aW9uKCkge8KgXG4gICAgcmV0dXJuICcjRkY2Njk5JzvCoMKgwqDCoMKgwqDCoFxuICAgIC8vcmV0dXJuICcjJyArICgnMDAwMDAnICsgKE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAgPDwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO8KgwqDCoMKgwqBcbn1cbmNvbnN0IOS4i+S4gOmhtSA9IFwicGQoaHRtbCwgJ2E6bWF0Y2hlcyjkuIvkuIApJiZocmVmJylcIjtcbmNvbnN0IHBhZ2UgPSBNWV9QQUdFO1xuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS95aScpKS5ydWxlKVxuTVlfVVJMID0gTVlfVVJMLnNwbGl0KCcjIycpWzFdXG5sZXQgdHJ1ZV91cmwgPSBnZXRUcnVlbGluayhNWV9SVUxFLnVybCwgTVlfVVJMLCBwYWdlKTtcbk1ZX1VSTCA9IHRydWVfdXJsO1xubG9nKHRydWVfdXJsKTtcblxudmFyIGh0bWwgPSBmZXRjaCh0cnVlX3VybCwge1xuICAgIGhlYWRlcnM6IHtcbiAgICAgICAgY29va2llOiBmZXRjaFBDKCdoaWtlcjovL2ZpbGVzL2NhY2hlL2phdmRiL2phdmRiX2Nvb2tpZS50eHQnKSB8fCAnJyxcbiAgICB9LFxuICAgIHJlZGlyZWN0OiBmYWxzZVxufSk7XG5pZiAoL3JlZGlyZWN0ZWQvLnRlc3QoaHRtbCkpIHtcbiAgICB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvamF2ZGIvamF2ZGJfY29va2llLnR4dCcsICcnKTtcbiAgICBodG1sID0gZmV0Y2godHJ1ZV91cmwsIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgY29va2llOiBmZXRjaFBDKCdoaWtlcjovL2ZpbGVzL2NhY2hlL2phdmRiL2phdmRiX2Nvb2tpZS50eHQnKSB8fCAnJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVkaXJlY3Q6IGZhbHNlXG4gICAgfSlcbn1cbnZhciDlrprkvY3kv6Hmga8gPSBbe1xuICAgIOWkp+exu+WumuS9jTogJy5uYXZiYXItc3RhcnQmJi5uYXZiYXItbGluaycsXG4gICAg5aKe5YqgOiBbJzxhIGhyZWY9XCInICsgTVlfSE9NRSArICdcIj7pppbpobU8L0E+JywgJzxhIGhyZWY9XCIvYWJvdXRcIj7mlLbol488L0E+JywgJzxhIGhyZWY9XCIvdXNlcnNcIj7miJHnmoQ8L0E+JywgXSxcbiAgICDlsI/nsbs6ICdib2R5JiZhOm5vdCg6bWF0Y2hlcyjwn5SlKSknLFxuICAgIOmTvuaOpeWkhOeQhjogKHUpID0+IHtcbiAgICAgICAgbGV0IHVybCA9IHUucmVwbGFjZSgvdHlwZShcXC9cXGQrKVxcLmh0bWwvLCAnc2hvdyQxLS0tLS0tLS0tLS0uaHRtbCcpO1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgfVxufSwge1xuICAgIOS4gOe6p+WumuS9jTogJ2JvZHkmJi50YWJzfHwuYnV0dG9ucy5oYXMtYWRkb25zJyxcbiAgICDlsI/nsbs6ICdib2R5JiZhOm5vdCg6bWF0Y2hlcyjng63mkq18MjUwfOWwgemdonznjJzkvaApKScsXG59LCB7XG4gICAg5LiA57qn5a6a5L2NOiAnI3RhZ3MmJmR0JyxcbiAgICDlsI/nsbs6ICdib2R5JiZhOm5vdCg6bWF0Y2hlcyjmm7TlpJopKScsXG59LCB7XG4gICAg5LiA57qn5a6a5L2NOiAnLmFjdG9yLWZpbHRlciYmLmZpbHRlci1zbGlkZXI6bWF0Y2hlcyjouqvpq5gpJyxcbiAgICDlsI/nsbs6ICdib2R5JiYuZmlsdGVyLXNsaWRlcicsXG4gICAg6KGl5YWFOiBbXG4gICAgICAgICc8aW5wdXQgaWQ9XCIvYWN0b3JzL2NlbnNvcmVkP3Q9ZmlsdGVyJmFnZT0xOSUyQzY1JmhlaWdodD0xMzAlMkMxNDcmY3VwPTAlMkMxNSZidXN0PTcwJTJDMTIwJndhaXN0PTUwJTJDOTAmaGlwcz03MCUyQzEyMFwiPjEzMC0xNDcnLFxuICAgICAgICAnPGlucHV0IGlkPVwiL2FjdG9ycy9jZW5zb3JlZD90PWZpbHRlciZhZ2U9MTklMkM2NSZoZWlnaHQ9MTQ3JTJDMTYwJmN1cD0wJTJDMTUmYnVzdD03MCUyQzEyMCZ3YWlzdD01MCUyQzkwJmhpcHM9NzAlMkMxMjBcIj4xNDctMTYwJyxcbiAgICAgICAgJzxpbnB1dCBpZD1cIi9hY3RvcnMvY2Vuc29yZWQ/dD1maWx0ZXImYWdlPTE5JTJDNjUmaGVpZ2h0PTE2MCUyQzE2NSZjdXA9MCUyQzE1JmJ1c3Q9NzAlMkMxMjAmd2Fpc3Q9NTAlMkM5MCZoaXBzPTcwJTJDMTIwXCI+MTYwLTE2NScsXG4gICAgICAgICc8aW5wdXQgaWQ9XCIvYWN0b3JzL2NlbnNvcmVkP3Q9ZmlsdGVyJmFnZT0xOSUyQzY1JmhlaWdodD0xNjUlMkMxNjkmY3VwPTAlMkMxNSZidXN0PTcwJTJDMTIwJndhaXN0PTUwJTJDOTAmaGlwcz03MCUyQzEyMFwiPjE2NS0xNjknLFxuICAgICAgICAnPGlucHV0IGlkPVwiL2FjdG9ycy9jZW5zb3JlZD90PWZpbHRlciZhZ2U9MTklMkM2NSZoZWlnaHQ9MTY5JTJDMTc1JmN1cD0wJTJDMTUmYnVzdD03MCUyQzEyMCZ3YWlzdD01MCUyQzkwJmhpcHM9NzAlMkMxMjBcIj4xNjktMTc1JyxcbiAgICAgICAgJzxpbnB1dCBpZD1cIi9hY3RvcnMvY2Vuc29yZWQ/dD1maWx0ZXImYWdlPTE5JTJDNjUmaGVpZ2h0PTE3NSUyQzE4NSZjdXA9MCUyQzE1JmJ1c3Q9NzAlMkMxMjAmd2Fpc3Q9NTAlMkM5MCZoaXBzPTcwJTJDMTIwXCI+MTc1LTE4NScsXG4gICAgXSxcbiAgICDmoIfpopg6ICdUZXh0JyxcbiAgICDpk77mjqU6ICdpbnB1dCYmaWQuanM6aW5wdXQucmVwbGFjZShcImFmLWhlaWdodC1pbnB1dFwiLFwiL2FjdG9ycy9jZW5zb3JlZFwiKScsXG59LCB7XG4gICAg5LiA57qn5a6a5L2NOiAnLmFjdG9yLWZpbHRlciYmLmZpbHRlci1zbGlkZXI6bWF0Y2hlcyjnvanmna8pJyxcbiAgICDlsI/nsbs6ICdib2R5JiYuZmlsdGVyLXNsaWRlcicsXG4gICAg6KGl5YWFOiBbXG4gICAgICAgICc8aW5wdXQgaWQ9XCIvYWN0b3JzL2NlbnNvcmVkP3Q9ZmlsdGVyJmFnZT0xOSUyQzY1JmhlaWdodD0xMzAlMkMxODUmY3VwPTAlMkMxJmJ1c3Q9NzAlMkMxMTUmd2Fpc3Q9NTAlMkM5MCZoaXBzPTcwJTJDMTIwXCI+QScsXG4gICAgICAgICc8aW5wdXQgaWQ9XCIvYWN0b3JzL2NlbnNvcmVkP3Q9ZmlsdGVyJmFnZT0xOSUyQzY1JmhlaWdodD0xMzAlMkMxODUmY3VwPTElMkMzJmJ1c3Q9NzAlMkMxMTUmd2Fpc3Q9NTAlMkM5MCZoaXBzPTcwJTJDMTIwXCI+QkMnLFxuICAgICAgICAnPGlucHV0IGlkPVwiL2FjdG9ycy9jZW5zb3JlZD90PWZpbHRlciZhZ2U9MTklMkM2NSZoZWlnaHQ9MTMwJTJDMTg1JmN1cD0zJTJDNCZidXN0PTcwJTJDMTE1JndhaXN0PTUwJTJDOTAmaGlwcz03MCUyQzEyMFwiPkQnLFxuICAgICAgICAnPGlucHV0IGlkPVwiL2FjdG9ycy9jZW5zb3JlZD90PWZpbHRlciZhZ2U9MTklMkM2NSZoZWlnaHQ9MTMwJTJDMTg1JmN1cD00JTJDNiZidXN0PTcwJTJDMTE1JndhaXN0PTUwJTJDOTAmaGlwcz03MCUyQzEyMFwiPkVGJyxcbiAgICAgICAgJzxpbnB1dCBpZD1cIi9hY3RvcnMvY2Vuc29yZWQ/dD1maWx0ZXImYWdlPTE5JTJDNjUmaGVpZ2h0PTEzMCUyQzE4NSZjdXA9NiUyQzgmYnVzdD03MCUyQzExNSZ3YWlzdD01MCUyQzkwJmhpcHM9NzAlMkMxMjBcIj5HSCcsXG4gICAgICAgICc8aW5wdXQgaWQ9XCIvYWN0b3JzL2NlbnNvcmVkP3Q9ZmlsdGVyJmFnZT0xOSUyQzY1JmhlaWdodD0xMzAlMkMxODUmY3VwPTglMkMxMCZidXN0PTcwJTJDMTE1JndhaXN0PTUwJTJDOTAmaGlwcz03MCUyQzEyMFwiPklKJyxcbiAgICAgICAgJzxpbnB1dCBpZD1cIi9hY3RvcnMvY2Vuc29yZWQ/dD1maWx0ZXImYWdlPTE5JTJDNjUmaGVpZ2h0PTEzMCUyQzE4NSZjdXA9MTAlMkMxNSZidXN0PTcwJTJDMTE1JndhaXN0PTUwJTJDOTAmaGlwcz03MCUyQzEyMFwiPkt+JyxcbiAgICBdLFxuICAgIOagh+mimDogJ1RleHQnLFxuICAgIOmTvuaOpTogJ2lucHV0JiZpZC5qczppbnB1dC5yZXBsYWNlKFwiYWYtY3VwLWlucHV0XCIsXCIvYWN0b3JzL2NlbnNvcmVkXCIpJyxcbn1dXG5jb25zdCBkYyA9IGR5bmFtaWNDbGFzcyh7XG4gICAg5YiG57G76aKc6ImyOiBnZXRSYW5nZUNvbG9ycygpXG59KTtcbmRjLuW8gOWQr+aKmOWPoChmYWxzZSlcbmRjLuW8gOWQr+aQnOe0oigpXG5kYy7liJvlu7rliqjmgIHliIbnsbso5a6a5L2N5L+h5oGvKVxuXG5cbmlmICh0cnVlX3VybC5pbmNsdWRlcygnL2Fib3V0JykpIHtcbiAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL+aUtuiXjycpKS5ydWxlKVxufSBlbHNlIGlmICh0cnVlX3VybC5pbmNsdWRlcygnL3VzZXJzJykpIHtcbiAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL3VzZXJzJykpLnJ1bGUpXG59IGVsc2Uge1xuICAgIHZhciBwYXJzZVJ1bGUgPSB7XG4gICAgICAgIGxpc3Q6ICdib2R5JiYuaXRlbScsIC8v57uf5LiAaXRlbVxuICAgICAgICB0aXRsZTogJy52aWRlby10aXRsZSYmVGV4dCcsXG4gICAgICAgIGRlc2MxOiAnLnRhZyYmVGV4dCcsXG4gICAgICAgIGRlc2M6ICcubWV0YSYmVGV4dCcsXG4gICAgICAgIGltZzogJ2ltZ3x8YSYmc3JjfHxkYXRhLW9yaWdpbmFsJyxcbiAgICAgICAgdXJsOiAnYSYmaHJlZicsXG4gICAgICAgIHJlZjogJ0BSZWZlcmVyPScsXG4gICAgICAgIGNvbF90eXBlOiAnbW92aWVfMicsXG4gICAgICAgIGltdDogZmFsc2UsXG4gICAgICAgIC8vYmFja2ltZzogdHJ1ZSxcbiAgICB9XG5cbiAgICB2YXIgcGFyc2VSdWxlMSA9IHtcbiAgICAgICAgbGlzdDogJ2JvZHkmJi5hY3Rvci1ib3gnLCAvL+e7n+S4gGl0ZW1cbiAgICAgICAgdGl0bGU6ICdhJiZ0aXRsZScsXG4gICAgICAgIGRlc2M6ICcubWV0YSYmVGV4dCcsXG4gICAgICAgIGltZzogJ2ltZ3x8YSYmc3JjfHxkYXRhLW9yaWdpbmFsJyxcbiAgICAgICAgdXJsOiAnYSYmaHJlZicsXG4gICAgICAgIHJlZjogJ0BSZWZlcmVyPScsXG4gICAgICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMycsXG4gICAgICAgIGltdDogZmFsc2UsXG4gICAgICAgIC8vYmFja2ltZzogdHJ1ZSxcbiAgICB9XG5cbiAgICB2YXIgcGFyc2VSdWxlMiA9IHtcbiAgICAgICAgbGlzdDogJyNzZXJpZXMmJi5ib3gnLCAvL+e7n+S4gGl0ZW1cbiAgICAgICAgdGl0bGU6ICdzdHJvbmcmJlRleHQnLFxuICAgICAgICBkZXNjOiAnc3BhbiYmVGV4dCcsXG4gICAgICAgIGltZzogJ2EmJmhyZWYuanM6aW5wdXQucmVwbGFjZShpbnB1dCxcImh0dHBzOi8vYXBpLmJ0c3R1LmNuL3NqYnovYXBpLnBocCNcIiknLFxuICAgICAgICB1cmw6ICdhJiZocmVmJyxcbiAgICAgICAgcmVmOiAnQFJlZmVyZXI9JyxcbiAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxuICAgICAgICBpbXQ6IGZhbHNlLFxuICAgICAgICAvL2JhY2tpbWc6IHRydWUsXG4gICAgfVxuXG4gICAgdmFyIHBhcnNlUnVsZTMgPSB7XG4gICAgICAgIGxpc3Q6ICcjbWFrZXJzJiYuYm94JywgLy/nu5/kuIBpdGVtXG4gICAgICAgIHRpdGxlOiAnc3Ryb25nJiZUZXh0JyxcbiAgICAgICAgZGVzYzogJ3NwYW4mJlRleHQnLFxuICAgICAgICBpbWc6ICdhJiZocmVmLmpzOmlucHV0LnJlcGxhY2UoaW5wdXQsXCJodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21vdmllLzMwLnN2Z1wiKScsXG4gICAgICAgIHVybDogJ2EmJmhyZWYnLFxuICAgICAgICByZWY6ICdAUmVmZXJlcj0nLFxuICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXG4gICAgICAgIGltdDogZmFsc2UsXG4gICAgICAgIC8vYmFja2ltZzogdHJ1ZSxcbiAgICB9XG4gICAgQ3JlYXRlLnJ1bGVMaXN0KGQsIGh0bWwsIHBhcnNlUnVsZSk7XG4gICAgQ3JlYXRlLkxpc3QoZCwgaHRtbCwgcGFyc2VSdWxlMSk7XG4gICAgQ3JlYXRlLkxpc3QoZCwgaHRtbCwgcGFyc2VSdWxlMik7XG4gICAgQ3JlYXRlLkxpc3QoZCwgaHRtbCwgcGFyc2VSdWxlMyk7XG4gICAgYXV0b1BhZ2UoKTtcbn1cblxuc2V0UmVzdWx0KGQpIiwic2VhcmNoX3VybCI6Imhpa2VyOi8vZW1wdHkjIyoqIiwiZ3JvdXAiOiLnpo/liKkiLCJzZWFyY2hGaW5kIjoianM6XG52YXIgZCA9IFtdO1xubGV0IEhPTUUgPSBcImhpa2VyOi8vZW1wdHkjI1wiICsgTVlfUlVMRS51cmwuc3BsaXQoXCIjI1wiKVsxXTtcbmxldCBrZXkgPSBNWV9VUkwuc3BsaXQoXCIjI1wiKVsxXTtcbmQucHVzaCh7XG4gICAgdGl0bGU6IFwi54K55oiR5byA5aeL6IGa5ZCI5pCc57SiXCIgKyBrZXksXG4gICAgdXJsOiBIT01FICsgXCIvc2VhcmNoP2Y9YWxsJnBhZ2U9ZnlwYWdlJnE9XCIgKyBrZXkgKyAnQHJ1bGU9anM6JC5yZXF1aXJlKFwieWpcIiknLFxuICAgIGV4dHJhOiB7XG4gICAgICAgIHBhZ2VUaXRsZToga2V5LFxuICAgICAgICBrZXk6IGtleVxuICAgIH1cbn0pO1xuXG5zZXRSZXN1bHQoZCk7IiwiZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsImRldGFpbF9maW5kX3J1bGUiOiIiLCJzZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsInNkZXRhaWxfZmluZF9ydWxlIjoiKiIsInVhIjoibW9iaWxlIiwicHJlUnVsZSI6Ii8vQExveURnSWvlpKfkvazlhpnnmoToh6rliqjmm7TmlrDvvIzlpI3liLbpu4/otLTlsLHlrozkuovvvIzmhJ/osKLlpKfkvaznmoTliIbkuqtcbi8qXG4gICAgICAgICAgICBsZXQgTVlfSE9NRSA9IE1ZX1JVTEUudXJsLm1hdGNoKC9odHRwcz86XFwvXFwvW14jLz8mXSsvKVswXTtcbiAgICAgICAgICAgIGxldCBodG1sID0gSlNPTi5wYXJzZShmZXRjaChNWV9IT01FLHtvbmx5SGVhZGVyczp0cnVlLHRpbWVvdXQ6NTAwMH0pKTtcbmlmIChodG1sLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgIGNvbmZpcm0oe1xuICAgICAgICB0aXRsZTogXCLnvZHlnYDkuI3pgJos5piv5ZCm5pu05pawXCIsXG4gICAgICAgIGNvbnRlbnQ6IFwi57+75aKZ5ZCO5YaN54K55Ye756Gu5a6aXFxu5oiW6Ieq6KGM5qOA5p+l572R5Z2AXCIsXG4gICAgICAgIGNvbmZpcm06ICgpID0+IHtcbiAgICAgICAgICAgIHZhciB5b25naml1ID0gXCJodHRwczovL2phdmRiLmNvbVwiO1xuICAgICAgICAgICAgbGV0IGh0bWwgPUpTT04ucGFyc2UoZmV0Y2goeW9uZ2ppdSx7b25seUhlYWRlcnM6dHJ1ZSx0aW1lb3V0OjMwMDB9KSk7XG4gICAgICAgICAgICBpZiAoaHRtbC5zdGF0dXNDb2RlID09IDAgfHwgIWh0bWwpIHtcbiAgICAgICAgIC8vcmV0dXJuIFwidG9hc3Q6Ly/mm7TmlrDlpLHotKUs6K+357+75aKZLOiwouiwolwiXG4gICAgICAgICAgICAgICBjb25maXJtKHt0aXRsZTon5pu05paw5aSx6LSlJywgY29udGVudDon6K+357+75aKZ5ZCO5YaN5pu05paw77yM6LCi6LCiJywgXG4gICAgICAgICAgICAgICAgICAgY29uZmlybTokLnRvU3RyaW5nKCgpPT57cmVmcmVzaFBhZ2UoKX0pLCBcbiAgICAgICAgICAgICAgICAgICBjYW5jZWw6JC50b1N0cmluZygoKT0+e30pfSlcbiAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBzaG93TG9hZGluZyhcIuato+WcqOiOt+WPluWPr+eUqOWfn+WQjVwiKTtcbiAgICAgICAgICAgIHZhciBob21lID0gTVlfUlVMRS51cmwubWF0Y2goL2h0dHBzPzpcXC9cXC9bXiMvPyZdKy8pWzBdO1xuICAgICAgICAgICAgdmFyIGh0bSA9IGZldGNoKHlvbmdqaXUpXG4gICAgICAgICAgICB2YXIgaG9zdCA9IHBkZmgoaHRtLCBcImJvZHkmJmRhdGEtZG9tYWluXCIpO1xuICAgICAgICAgICAgaGlkZUxvYWRpbmcoKTtcbiAgICAgICAgICAgIGlmICghaG9zdCkgcmV0dXJuIFwidG9hc3Q6Ly/ojrflj5blpLHotKVcIjtcbiAgICAgICAgICAgIGlmIChob21lID09IGhvc3QpIHJldHVybiBcInRvYXN0Oi8v5piv5pyA5paw572R5Z2A77yM6K+356iN5ZCO5Yi35paw6K+V6K+VXCI7XG4gICAgICAgICAgICB0b2FzdChob3N0KTtcbiAgICAgICAgICAgIC8oaHR0cHM/OlxcL1xcL1teIy8/Jl0rKS8udGVzdChNWV9SVUxFLnVybCk7XG4gICAgICAgICAgICBNWV9SVUxFLnVybCA9IE1ZX1JVTEUudXJsLnJlcGxhY2UoUmVnRXhwLiQxLCBob3N0KTtcbiAgICAgICAgICAgIHJldHVybiBcInJ1bGU6Ly9cIiArIGJhc2U2NEVuY29kZShcIua1t+mYlOinhueVjO+/pWhvbWVfcnVsZe+/pVwiICsgSlNPTi5zdHJpbmdpZnkoTVlfUlVMRSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FuY2VsOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gXCJ0b2FzdDovL/CfmIdcIjtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgfVxuKi9cbmlmIChyZXF1ZXN0KCdoaWtlcjovL2hvbWVA56OB5Yqb5ZCbLueugCcpID09ICdudWxsJykge1xuICAgIGNvbmZpcm0oe1xuICAgICAgICB0aXRsZTogJ+S+nei1luajgOa1iycsXG4gICAgICAgIGNvbnRlbnQ6ICfmo4DmtYvliLDnvLrlsJHno4HlipvlkJsu566AXFxu6K+35a+85YWlIScsXG4gICAgICAgIGNvbmZpcm06ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZVBhc3RlKFwi5LqRNm9vb29sZS94eHh4eHgvanVtZ2p1dWN6eGJ1dnNhaVwiKTtcbiAgICAgICAgfVxuICAgIH0pXG59XG5cbi8qcmVnaXN0ZXJETlMoe1xuICAgICdqYXZkYi5jb20nOiAnaHR0cHM6Ly8xLjEuMS4xL2Rucy1xdWVyeScsXG4gICAgJ2phdmRiMzY1LmNvbSc6ICdodHRwczovLzEuMS4xLjEvZG5zLXF1ZXJ5J1xufSk7Ki8iLCJwYWdlcyI6Ilt7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pGg5LiA57qn5YiG57G75YiX6KGoXCIsXCJwYXRoXCI6XCJ5aVwiLFwicnVsZVwiOlwianM6XFxuLypcXG5ieSDOsSh6ZXRhbHBoYSlcXG7kuIDnuqflsIHoo4VcXG7liqjmgIHliIbnsbsg5YiX6KGo5Yib5bu6IOiHquWKqOS4i+S4gOmhtVxcbnZlciAyMDIzMTAxNyAxLjBcXG4qL1xcblxcbi8v6ZqP5py66aKc6ImyXFxudmFyIGdldFJhbmdlQ29sb3JzID0gZnVuY3Rpb24oKSB7wqBcXG4gICAgcmV0dXJuICcjRkY2Njk5JzvCoMKgwqDCoMKgwqDCoFxcbiAgICAvL3JldHVybiAnIycgKyAoJzAwMDAwJyArIChNYXRoLnJhbmRvbSgpICogMHgxMDAwMDAwIDw8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTvCoMKgwqDCoMKgXFxufVxcblxcbi8v5Yqo5oCB5YiG57G7XFxuZnVuY3Rpb24gZHluYW1pY0NsYXNzKG9wdGlvbnMpIHtcXG4gICAgY29uc3Qgb2JqID0ge1xcbiAgICAgICAgLy/pu5jorqTlgLxcXG4gICAgICAgIGxheW91dDogXFxcInVuZGVmaW5lZFxcXCIsXFxuICAgICAgICBodG1sOiBcXFwiZW1wdHlcXFwiLFxcbiAgICAgICAgcGFnZTogMCxcXG4gICAgICAgIOWIhuexu+minOiJsjogXFxcIiNGQTcyOThcXFwiLFxcbiAgICAgICAg5oqY5Y+gOiBcXFwi4oCc4oCc4oCd4oCdPGI+XFxcIiArIFxcXCLiiKdcXFwiLmZvbnRjb2xvcihcXFwiIzFhYWQxOVxcXCIpICsgXFxcIjwvYj5cXFwiLFxcbiAgICAgICAg5bGV5byAOiBcXFwi4oCc4oCc4oCd4oCdPGI+XFxcIiArIFxcXCLiiKhcXFwiLmZvbnRjb2xvcihcXFwiI0ZGMDAwMFxcXCIpICsgXFxcIjwvYj5cXFwiLFxcbiAgICAgICAgb3BlbjogdHJ1ZSxcXG4gICAgICAgIHN0YXRlOiBNWV9SVUxFLnVybCxcXG4gICAgICAgIHNlYXJjaDogZmFsc2UsXFxuICAgICAgICBjbGVhcnM6IFtdLFxcbiAgICAgICAgY2xlYXJhbGw6IFtcXFwieWlfZmlyc3RwYWdlXFxcIl0sXFxuICAgICAgICBkZWJ1ZzogZmFsc2UsXFxuXFxuICAgICAgICDpooTorr4ocGFyYW0pIHtcXG4gICAgICAgICAgICBpZiAocGFyYW0gPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgIHBhcmFtID0gW107XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHBhcmFtKS5mb3JFYWNoKChwcm9wZXJ0eSkgPT4ge1xcbiAgICAgICAgICAgICAgICAvLyDlr7nmr4/kuKrlsZ7mgKflkI3miafooYzmk43kvZxcXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJhbVtwcm9wZXJ0eV07IC8vIOiOt+WPluWxnuaAp+WAvFxcbiAgICAgICAgICAgICAgICAvLyDlnKjov5nph4zmiafooYzmgqjnmoTmk43kvZxcXG4gICAgICAgICAgICAgICAgdGhpc1twcm9wZXJ0eV0gPSB2YWx1ZTtcXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHByb3BlcnR5ICsgXFxcIjpcXFwiICsgdmFsdWUpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9LFxcbiAgICAgICAgZXZhbEpTUnVsZShpdGVtLFxcbiAgICAgICAgICAgIGpzUnVsZSkge1xcbiAgICAgICAgICAgIGxldCBydWxlID0ganNSdWxlLnJlcGxhY2UoXFxcIkBqczpcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiXFxcIik7XFxuICAgICAgICAgICAgcnVsZSA9IHJ1bGUudHJpbSgpO1xcbiAgICAgICAgICAgIC8vbG9nKCQuc3RyaW5naWZ5KHJ1bGUpKVxcbiAgICAgICAgICAgIGxldCBpbnB1dCA9IGl0ZW07XFxuICAgICAgICAgICAgaWYgKHJ1bGUuc3RhcnRzV2l0aChcXFwiKFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGV2YWwoXFxcInJlc3VsdCA9IFxcXCIgKyBydWxlKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAvKipcXG4gICAgICAgICAgICAgICAgICog6L+Y5Y6f5oiQICQudG9TdHJpbmcoLi4uKSDnmoTmnIDnu4jnu5PmnpzvvIzovr7liLDmnIDnu4jlpITnkIbmlrnlvI/ot5/kuIrpnaLnmoQgaWYg5LiA6Ie055qE55uu55qEXFxuICAgICAgICAgICAgICAgICAqL1xcbiAgICAgICAgICAgICAgICBldmFsKFxcXCJyZXN1bHQgPSBcXFwiICsgXFxcIigoKSA9PiB7XFxcIiArIHJ1bGUgKyBcXFwifSkoKVxcXCIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0IHx8IFxcXCJcXFwiO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGdldFRpdGxlKHNyYywgY2F0ZWdvcnkpIHtcXG4gICAgICAgICAgICBsZXQgdGl0bGUgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICBsZXQgdGl0bGVSdWxlID0gY2F0ZWdvcnkgfHwgXFxcImEmJlRleHRcXFwiO1xcbiAgICAgICAgICAgIGlmICh0aXRsZVJ1bGUuc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlID0gdGhpcy5ldmFsSlNSdWxlKHNyYywgdGl0bGVSdWxlKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB0aXRsZSA9IHBhcnNlRG9tRm9ySHRtbChzcmMsIHRpdGxlUnVsZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiB0aXRsZSB8fCBcXFwiXFxcIjtcXG4gICAgICAgIH0sXFxuICAgICAgICBnZXRVcmwoc3JjLCBjYXRlZ29yeSkge1xcbiAgICAgICAgICAgIGxldCB1cmwgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICBsZXQgdXJsUnVsZSA9IGNhdGVnb3J5LumTvuaOpSB8fCBcXFwiYSYmaHJlZlxcXCI7XFxuICAgICAgICAgICAgaWYgKHVybFJ1bGUuc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHRoaXMuZXZhbEpTUnVsZShzcmMsIHVybFJ1bGUpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHBkKHNyYywgdXJsUnVsZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2F0ZWdvcnku6ZO+5o6l5aSE55CGID09IFxcXCJmdW5jdGlvblxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gY2F0ZWdvcnku6ZO+5o6l5aSE55CGKHVybCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiB1cmwgfHwgXFxcIlxcXCI7XFxuICAgICAgICB9LFxcbiAgICAgICAgaXNOdWxsKHBhcmFtKSB7XFxuICAgICAgICAgICAgaWYgKHBhcmFtID09IG51bGwpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH0sXFxuICAgICAgICBpc0Jvb2xlYW4odmFyaWFibGUpIHtcXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhcmlhYmxlICE9PSBcXFwiYm9vbGVhblxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLlvIDlkK/mipjlj6Dor7fkvKDlhaXluIPlsJTlgLxcXFwiKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LFxcbiAgICAgICAg5riF6ZmkKGxpc3QpIHtcXG4gICAgICAgICAgICBpZiAodGhpcy5pc051bGwobGlzdCkpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChsaXN0LmNvbnN0cnVjdG9yID09IFN0cmluZykge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIua4hemZpOaKpemUmTror7fkvKDliJfooahcXFwiKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdGhpcy5jbGVhcnMgPSBsaXN0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOWFqOa4hShsaXN0KSB7XFxuICAgICAgICAgICAgaWYgKHRoaXMuaXNOdWxsKGxpc3QpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgYyA9IHRoaXMuY2xlYXJhbGw7XFxuICAgICAgICAgICAgbGlzdCA9IGMuY29uY2F0KGxpc3QpO1xcbiAgICAgICAgICAgIHRoaXMuY2xlYXJhbGwgPSBsaXN0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOa6kOeggShpbnB1dCkge1xcbiAgICAgICAgICAgIHRoaXMuaHRtbCA9IGlucHV0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOeVjOmdoihpbnB1dCkge1xcbiAgICAgICAgICAgIHRoaXMubGF5b3V0ID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg6aG156CBKGlucHV0KSB7XFxuICAgICAgICAgICAgdGhpcy5wYWdlID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg54q25oCBKGlucHV0KSB7XFxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IGlucHV0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOW8gOWQr+aQnOe0oihpbnB1dCkge1xcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICAgICAgaW5wdXQgPSB0cnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0aGlzLnNlYXJjaCA9IGlucHV0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOW8gOWQr+aKmOWPoChpbnB1dCkge1xcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICAgICAgaW5wdXQgPSB0cnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0aGlzLmlzQm9vbGVhbihpbnB1dCk7XFxuICAgICAgICAgICAgdGhpcy5vcGVuID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAgc2V0VGl0bGUoaywgaSwgdCkge1xcbiAgICAgICAgICAgIHJldHVybiBrID09IGkgPyBcXFwi4oCc4oCc4oCd4oCdPGI+XFxcIiArIHQuZm9udGNvbG9yKHRoaXMu5YiG57G76aKc6ImyKSA6IHQ7XFxuICAgICAgICB9LFxcbiAgICAgICAgYWN0aW9uKG9iaikge1xcbiAgICAgICAgICAgIHJldHVybiBbe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIua4hemZpOeKtuaAgVxcXCIsXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChvYmopID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhvYmopO1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihvYmouc3RhdGUpO1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihcXFwiaGVhZC5jYXRlXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdjYXRlX2J1dHRvbicpO1xcbiAgICAgICAgICAgICAgICAgICAgb2JqLmFsbC5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgb2JqLmNsLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICB9LCBvYmopLFxcbiAgICAgICAgICAgIH0sIF07XFxuICAgICAgICB9LFxcbiAgICAgICAgY2hlY2tQYXJhbSgpIHtcXG4gICAgICAgICAgICB2YXIgb2JqID0ge307XFxuICAgICAgICAgICAgaWYgKHRoaXMucGFnZSA9PSAwICYmIHR5cGVvZiBwYWdlID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+35Lyg5YWl6aG156CBXFxcIik7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYWdlID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIumhteeggVxcXCJdID0gdGhpcy5wYWdlO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLpobXnoIFcXFwiXSA9IHBhZ2U7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHRoaXMuaHRtbCA9PSBcXFwiZW1wdHlcXFwiICYmIHR5cGVvZiBodG1sID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+35Lyg5YWl5rqQ56CBXFxcIik7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBodG1sID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIua6kOeggVxcXCJdID0gdGhpcy5odG1sO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLmupDnoIFcXFwiXSA9IGh0bWw7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHRoaXMubGF5b3V0ID09IFxcXCJ1bmRlZmluZWRcXFwiICYmIHR5cGVvZiBkID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+35Lyg5YWl55WM6Z2iXFxcIik7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIueVjOmdolxcXCJdID0gdGhpcy5sYXlvdXQ7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIueVjOmdolxcXCJdID0gZDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gb2JqO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOWIm+W7uuWKqOaAgeWIhuexuyhydWxlT2JqKSB7XFxuICAgICAgICAgICAgbGV0IGl0ZW1zID0gW107XFxuICAgICAgICAgICAgbGV0IGNhdGVzID0gW107XFxuICAgICAgICAgICAgaWYgKHJ1bGVPYmogPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgIHJ1bGVPYmogPSBbXTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy/liJ3lp4vljJblj5jph4/lvIDlp4tcXG4gICAgICAgICAgICBjb25zdCBwYXJhbSA9IHRoaXMuY2hlY2tQYXJhbSgpO1xcbiAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBwYXJhbS7pobXnoIE7XFxuICAgICAgICAgICAgY29uc3QgaHRtbCA9IHBhcmFtLua6kOeggTtcXG4gICAgICAgICAgICBjb25zdCBkID0gcGFyYW0u55WM6Z2iO1xcbiAgICAgICAgICAgIGNvbnN0IOeKtuaAgSA9IHRoaXMuc3RhdGU7XFxuICAgICAgICAgICAgY29uc3Qgc2VhcmNoID0gdGhpcy5zZWFyY2g7XFxuICAgICAgICAgICAgY29uc3QgZW1wdHkgPSBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgY29uc3Qg5oqY5Y+g54q25oCBID0gdGhpcy5vcGVuO1xcbiAgICAgICAgICAgIHZhciDlsZXlvIAgPSB0aGlzLuWxleW8gDtcXG4gICAgICAgICAgICB2YXIg5oqY5Y+gID0gdGhpcy7mipjlj6A7XFxuICAgICAgICAgICAgdmFyIOWFqOa4hSA9IHRoaXMuY2xlYXJhbGw7XFxuICAgICAgICAgICAgdmFyIOa4hemZpCA9IHRoaXMuY2xlYXJzO1xcbiAgICAgICAgICAgIC8v5Yid5aeL5YyW5Y+Y6YeP57uT5p2fXFxuICAgICAgICAgICAgbGV0IGluaXRfY2F0ZSA9IG5ldyBBcnJheSgyMCkuZmlsbChcXFwiMFxcXCIpO1xcbiAgICAgICAgICAgIGNvbnN0IGZvbGQgPSBnZXRNeVZhcihNWV9SVUxFLmdyb3VwLCBcXFwiMFxcXCIpO1xcbiAgICAgICAgICAgIGNvbnN0IGNhdGVfdGVtcCA9IEpTT04ucGFyc2UoXFxuICAgICAgICAgICAgICAgIGdldE15VmFyKFxcXCJoZWFkLmNhdGVcXFwiLCBKU09OLnN0cmluZ2lmeShpbml0X2NhdGUpKVxcbiAgICAgICAgICAgICk7XFxuICAgICAgICAgICAgaWYgKHNlYXJjaCAmJiBwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCInaGlrZXI6Ly9zZWFyY2g/cnVsZT1cXFwiICsgTVlfUlVMRS50aXRsZSArIFxcXCImcz0nK2lucHV0XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLmkJzntKLlhbPplK7or41cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcImtleXdvcmRcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwia2V5d29yZFxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gW107XFxuICAgICAgICAgICAgcnVsZU9iai5mb3JFYWNoKCh4KSA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gW107XFxuICAgICAgICAgICAgICAgIC8vbG9nKHgpXFxuICAgICAgICAgICAgICAgIGlmICh4Lmpzb24gIT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgICAgICB4Lmpzb24ubWFwKGsgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3JpZXMucHVzaChKU09OLnN0cmluZ2lmeShrKS5yZXBsYWNlKC9eXFxcXFt8XFxcXF0kL2csICcnKSlcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICAvL2NhdGVnb3JpZXMucHVzaCh4Lmpzb24pXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKHgu5LiA57qn5a6a5L2NKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoeC7kuIDnuqflrprkvY0uc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHRoaXMuZXZhbEpTUnVsZShodG1sLCB4LuS4gOe6p+WumuS9jSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBwZGZhKGh0bWwsIHgu5LiA57qn5a6a5L2NKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoeC7lpKfnsbvlrprkvY0pIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh4LuWkp+exu+WumuS9jS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gdGhpcy5ldmFsSlNSdWxlKGh0bWwsIHgu5aSn57G75a6a5L2NKTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IFtwZGZhKGh0bWwsIHgu5aSn57G75a6a5L2NKS5qb2luKCdcXFxcbicpXTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcblxcblxcbiAgICAgICAgICAgICAgICB2YXIg5LiA57qnID0gbGlzdC5tYXAoKHMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBzbGlzdCA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoXFxcIuWwj+exu1xcXCIgaW4geCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB4LuWwj+exuyA9IFxcXCJib2R5JiZhOm5vdCg6bWF0Y2hlcyjpppbpobUpKTpub3QoYTpub3QoW2hyZWZdKSlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHgu5bCP57G7LnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNsaXN0ID0gdGhpcy5ldmFsSlNSdWxlKHMsIHgu5bCP57G7KTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpc3QgPSBwZGZhKHMsIHgu5bCP57G7KTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIC8vLS3pop3lpJblpITnkIYtLVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKCgn5aKe5YqgJyBpbiB4KSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4LuWinuWKoC5jb25zdHJ1Y3RvciA9PSBTdHJpbmcpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeC7lop7liqAgPSBldmFsKHgu5aKe5YqgKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpc3QgPSB4LuWinuWKoC5jb25jYXQoc2xpc3QpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKCgn6KGl5YWFJyBpbiB4KSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4LuihpeWFhS5jb25zdHJ1Y3RvciA9PSBTdHJpbmcpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeC7ooaXlhYUgPSBldmFsKHgu6KGl5YWFKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpc3QgPSBzbGlzdC5jb25jYXQoeC7ooaXlhYUpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgLy8tLemineWkluWkhOeQhi0tXFxuICAgICAgICAgICAgICAgICAgICB2YXIg5a6a5L2NID0gc2xpc3QubWFwKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gdGhpcy5nZXRUaXRsZShpdGVtLCB4Luagh+mimCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IHRoaXMuZ2V0VXJsKGl0ZW0sIHgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoJ2V4dCcgaW4geCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqWydleHQnXSA9IHguZXh0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIOWumuS9jTtcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIC8vbG9nKOS4gOe6pylcXG4gICAgICAgICAgICAgICAgLy9sb2co5LiA57qnLmxlbmd0aClcXG4gICAgICAgICAgICAgICAgaWYgKOS4gOe6py5sZW5ndGggPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5wdXNoKOS4gOe6py5qb2luKFxcXCJcXFxcblxcXCIpKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIOS4gOe6py5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5wdXNoKGl0ZW0uam9pbihcXFwiLFxcXCIpKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vbG9nKGNhdGVnb3JpZXMpXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgaWYgKOaKmOWPoOeKtuaAgSkge1xcbiAgICAgICAgICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZm9sZCA9PT0gXFxcIjFcXFwiID8g5oqY5Y+gIDog5bGV5byALFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZShcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRpdGxlLCBmb2xkLCB1LCBhbGwsIGV4cHMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb2xkID0gZ2V0TXlWYXIoTVlfUlVMRS5ncm91cCwgZm9sZCk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgW+WxleW8gCwg5oqY5Y+gXSA9IGV4cHM7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZCA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN4ID0gZmluZEl0ZW1zQnlDbHModGl0bGUgKyAnY2F0ZV9idXR0b24nKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcignY2F0ZV9idXR0b24nLCBjeCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbUJ5Q2xzKHRpdGxlICsgJ2NhdGVfYnV0dG9uJyk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjeCA9IHN0b3JhZ2UwLmdldE15VmFyKCdjYXRlX2J1dHRvbicsIFtdKS5tYXAoeCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhbJ2NvbF90eXBlJ10gPSB4Wydjb2xfdHlwZSddID8geFsnY29sX3R5cGUnXSA6IHhbJ3R5cGUnXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKHRpdGxlICsgJ2NhdGVfbGluZScsIGN4KVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyphbGwuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ki9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0odGl0bGUgKyAnY2F0ZV9leHAnLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGZvbGQgPT0gMSA/IOWxleW8gCA6IOaKmOWPoCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihNWV9SVUxFLmdyb3VwLCBmb2xkID09PSBcXFwiMVxcXCIgPyBcXFwiMFxcXCIgOiBcXFwiMVxcXCIpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNWV9SVUxFLnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDnirbmgIEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIOWFqOa4hSwgW+WxleW8gCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOaKmOWPoFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogTVlfUlVMRS50aXRsZSArICdjYXRlX2V4cCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdDbGljazogdGhpcy5hY3Rpb24oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IOeKtuaAgSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbDog5YWo5riFLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2w6IOa4hemZpCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5mb3JFYWNoKChjYXRlZ29yeSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKGNhdGVnb3J5KVxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN1Yl9jYXRlZ29yaWVzID0gW107XFxuICAgICAgICAgICAgICAgICAgICAvKmlmICjlsI/nsbvlrprkvY0uaW5jbHVkZXMoXFxcIjtcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcyA9IHBkZmEoY2F0ZWdvcnksIOWwj+exu+WumuS9jS5zcGxpdChcXFwiO1xcXCIpWzBdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yl9jYXRlZ29yaWVzLmxlbmd0aCA9PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMgPSBwZGZhKGNhdGVnb3J5LCDlsI/nsbvlrprkvY0uc3BsaXQoXFxcIjtcXFwiKVsxXSk7XFxuICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ki9cXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKGluZGV4KVxcbiAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMgPSBKU09OLnBhcnNlKGBbJHtjYXRlZ29yeX1dYCk7XFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyhzdWJfY2F0ZWdvcmllcylcXG4gICAgICAgICAgICAgICAgICAgIC8vIHN1Yl9jYXRlZ29yaWVzID0gcGRmYShjYXRlZ29yeSwg5bCP57G75a6a5L2NKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vfVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy/lpKfnsbtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcy5mb3JFYWNoKChpdGVtLCBrZXkpID0+IHtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sZXQgdGl0bGUgPSBwZGZoKGl0ZW0sIF/lpKfnsbvmoIfpopgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBpdGVtLnRpdGxlO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIOaOkumZpCAhPSBcXFwidW5kZWZpbmVkXFxcIiAmJiDmjpLpmaQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShuZXdSZWdFeHAo5o6S6ZmkLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGpzb24gPSAnJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0gaXRlbS51cmw7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbXMgPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlX3RlbXA6IGNhdGVfdGVtcCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogcGFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyczog5riF6ZmkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbjoganNvbixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiDnirbmgIEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxjbGVhcnM6IOWFqOa4hSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sZXQgdXJsID0gcGQoaXRlbSwgX+Wkp+exu+mTvuaOpSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBpdGVtLnVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyppZiAo5aSn57G75aSE55CGKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0g5LiA57qn5YiG57G75aSE55CGKHVybCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0qL1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xvZyh1cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuc2V0VGl0bGUoa2V5LnRvU3RyaW5nKCksIGNhdGVfdGVtcFtpbmRleF0sIHRpdGxlKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoXFxcImhpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld19jYXRlID0gW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5jbGVhcnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hbGxjbGVhcnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ2NhdGVfYnV0dG9uJyk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5jYXRlX3RlbXAuZm9yRWFjaCgoY2F0ZSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jYXRlLnB1c2goaW5kZXggPT09IDAgPyBwYXJhbXMua2V5LnRvU3RyaW5nKCkgOiBcXFwiMFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImhlYWQuY2F0ZVxcXCIsIEpTT04uc3RyaW5naWZ5KG5ld19jYXRlKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMuanNvbi5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiZHRfXFxcIiArIHBhcmFtcy5qc29uLnR5cGUsIHBhcmFtcy5qc29uLnZhbHVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHBhcmFtcy5zdGF0ZSwgcGFyYW1zLmpzb24pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IE1ZX1JVTEUudGl0bGUgKyAnY2F0ZV9saW5lJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL+Wwj+exu1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXh0cmFwb3MgPSBmYWxzZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyppZiAoaXRlbS5pbmNsdWRlcygndHlwZT1cXFwiQGV4dHJhXFxcIicpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFwb3MgPSB0cnVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKCfpmYTliqDlrprkvY0nKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ki9cXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJhcG9zKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBwZGZoKGl0ZW0sIFxcXCJhJiZUZXh0XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIOaOkumZpCAhPSBcXFwidW5kZWZpbmVkXFxcIiAmJiDmjpLpmaQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UobmV3IFJlZ0V4cCjmjpLpmaQsIFxcXCJnXFxcIiksIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqc29uID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHBkZmgoaXRlbSwgXFxcImEmJnN0YXRlXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBkZmgoaXRlbSwgXFxcImEmJnZhbHVlXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgdGl0bGUgPSBwZGZoKGl0ZW0sIOWIhuexu+agh+mimCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBpdGVtLnRpdGxlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiDmjpLpmaQgIT0gXFxcInVuZGVmaW5lZFxcXCIgJiYg5o6S6ZmkICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSB0aXRsZS5yZXBsYWNlKG5ldyBSZWdFeHAo5o6S6ZmkLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganNvbiA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypzd2l0Y2ggKHRydWUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSDliIbnsbvpk77mjqUuaW5jbHVkZXMoXFxcIkBAQFxcXCIpOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBwZGZoKGl0ZW0sIOWIhuexu+mTvuaOpS5zcGxpdChcXFwiQEBAXFxcIilbMF0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBkZmgoaXRlbSwg5YiG57G76ZO+5o6lLnNwbGl0KFxcXCJAQEBcXFwiKVsxXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSDliIbnsbvpk77mjqUuaW5jbHVkZXMoXFxcIkBAXFxcIik6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IOWIhuexu+mTvuaOpS5zcGxpdChcXFwiQEBcXFwiKVswXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwZGZoKGl0ZW0sIOWIhuexu+mTvuaOpS5zcGxpdChcXFwiQEBcXFwiKVsxXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0gaXRlbS51cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ganNvbiA9IHBkKGl0ZW0sIOWIhuexu+mTvuaOpSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ki9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSBpdGVtLnVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdmFyIGpzb2495YiG57G76ZO+5o6lLmluY2x1ZGVzKCdAQEAnKT97XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOnBkZmgoaXRlbSzliIbnsbvpk77mjqUuc3BsaXQoJ0BAQCcpWzBdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOnBkZmgoaXRlbSzliIbnsbvpk77mjqUuc3BsaXQoJ0BAQCcpWzFdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTpwZChpdGVtLOWIhuexu+mTvuaOpSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb2495YiG57G76ZO+5o6lLmluY2x1ZGVzKCdAQCcpP3tcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU65YiG57G76ZO+5o6lLnNwbGl0KCdAQCcpWzBdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6cGRmaChpdGVtLOWIhuexu+mTvuaOpS5zcGxpdCgnQEAnKVsxXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH06cGQoaXRlbSzliIbnsbvpk77mjqUpOyovXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtcyA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVfdGVtcDogY2F0ZV90ZW1wLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbjoganNvbixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiDnirbmgIEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxjbGVhcnM6IOWFqOa4hSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy5zZXRUaXRsZShrZXkudG9TdHJpbmcoKSwgY2F0ZV90ZW1wW2luZGV4XSwgdGl0bGUpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKFxcXCJoaWtlcjovL2VtcHR5XFxcIiArIFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmFsbGNsZWFycy5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcignY2F0ZV9idXR0b24nKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmNhdGVfdGVtcFtwYXJhbXMuaW5kZXhdID0gcGFyYW1zLmtleS50b1N0cmluZygpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiaGVhZC5jYXRlXFxcIiwgSlNPTi5zdHJpbmdpZnkocGFyYW1zLmNhdGVfdGVtcCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmpzb24uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImR0X1xcXCIgKyBwYXJhbXMuanNvbi50eXBlLCBwYXJhbXMuanNvbi52YWx1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihwYXJhbXMuc3RhdGUsIHBhcmFtcy5qc29uKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsczogTVlfUlVMRS50aXRsZSArICdjYXRlX2J1dHRvbicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsczogTVlfUlVMRS50aXRsZSArICdjYXRlX2J1dHRvbicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChmb2xkID09PSBcXFwiMVxcXCIgfHwg5oqY5Y+g54q25oCBID09IGZhbHNlKSB7XFxuICAgICAgICAgICAgICAgIGl0ZW1zID0gaXRlbXMuY29uY2F0KGNhdGVzKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGZvbGQgPT09IFxcXCIwXFxcIikge1xcbiAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcignY2F0ZV9idXR0b24nLCBjYXRlcylcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzZXRQcmVSZXN1bHQgIT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICAgICAgICAgICAgaXRlbXMgPSBkLmNvbmNhdChpdGVtcyk7XFxuICAgICAgICAgICAgICAgIC8v5riF56m657un5om/5pWw57uEXFxuICAgICAgICAgICAgICAgIGQubGVuZ3RoID0gMDtcXG4gICAgICAgICAgICAgICAgc2V0UHJlUmVzdWx0KGl0ZW1zKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgIH07XFxuICAgIG9iai7pooTorr4ob3B0aW9ucyk7XFxuICAgIHJldHVybiBvYmo7XFxufVxcblxcbnZhciDnirbmgIEgPVxcbiAgICB0eXBlb2Yg54q25oCB5qCH6K6wICE9IFxcXCJ1bmRlZmluZWRcXFwiICYmIOeKtuaAgeagh+iusCAhPSBcXFwiXFxcIiA/IOeKtuaAgeagh+iusCA6IE1ZX1JVTEUudXJsO1xcblxcbmxldCBkdF9kZWJ1ZyA9IGZhbHNlO1xcblxcbmFkZExpc3RlbmVyKFxcbiAgICBcXFwib25DbG9zZVxcXCIsXFxuICAgICQudG9TdHJpbmcoKCkgPT4ge30pXFxuKTtcXG5cXG52YXIgQ3JlYXRlID0ge1xcbiAgICBuZXh0UGFnZTogZnVuY3Rpb24oKSB7XFxuICAgICAgICB2YXIgcmVzdWx0ID0gZmFsc2U7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHZhciBuZXh0ID0gZXZhbCjkuIvkuIDpobUpO1xcbiAgICAgICAgICAgIC8vbG9nKCduOicrbmV4dClcXG4gICAgICAgICAgICBpZiAobmV4dCA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+S4i+S4gOmhtemTvuaOpeS4uuepuicpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XFxuICAgICAgICAgICAgaWYgKHRydWVfdXJsID09IG5leHQpIHtcXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIC8vbG9nKFxcXCLlj6/og73kuI3lrZjlnKjkuIvkuIDpobXmiJbogIXkuIvkuIDpobXlrprkvY3mnInpl67pophcXFwiKTtcXG4gICAgICAgICAgICBsb2coXFxcIumUmeivr+S/oeaBrzpcXFwiICsgZS5tZXNzYWdlKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICgobmV4dCA9PSBcXFwiXFxcIiB8fCBuZXh0ID09IHVuZGVmaW5lZCkgJiYgcGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgbmV4dCA9IHRydWVfdXJsO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAvL3Jlc3VsdD1mYWxzZTtcXG4gICAgICAgICAgICBuZXh0ID0gZ2V0TXlWYXIo54q25oCBKTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKCdsJyt0cnVlX3VybClcXG4gICAgICAgIC8vbG9nKCduJytuZXh0KVxcbiAgICAgICAgaWYgKHBhZ2UgIT0gMSkge1xcbiAgICAgICAgICAgIGlmICh0cnVlX3VybCA9PSBuZXh0ICYmICFyZXN1bHQpIHtcXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gcmVzdWx0O1xcbiAgICAgICAgLy9wdXRNeVZhcijnirbmgIEsIG5leHQpO1xcbiAgICB9LFxcbiAgICBnZXRCYWNrSW1hZ2U6IGZ1bmN0aW9uKGltZ3VybCkge1xcbiAgICAgICAgdmFyIHJlc3VsdCA9IGltZ3VybDtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgcmVzdWx0ID0gL3VybCg/OlxcXFxzKyk/XFxcXCgoLio/KVxcXFwpL2dcXG4gICAgICAgICAgICAgICAgLmV4ZWMoaW1ndXJsKVsxXVxcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvKCd8XFxcInwmcXVvdDspL2dtLCBcXFwiXFxcIik7XFxuICAgICAgICB9IGNhdGNoIHt9XFxuICAgICAgICByZXR1cm4gcmVzdWx0O1xcbiAgICB9LFxcbiAgICBodHRwSGFuZGxlOiBmdW5jdGlvbihpbnB1dCkge1xcbiAgICAgICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoXFxcImh0dHBcXFwiKSkge1xcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcXG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQuc3RhcnRzV2l0aChcXFwiLy9cXFwiKSkge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaHR0cHM6XFxcIiArIGlucHV0O1xcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5zdGFydHNXaXRoKFxcXCIvXFxcIikpIHtcXG4gICAgICAgICAgICByZXR1cm4gTVlfSE9NRSArIGlucHV0O1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBpbWdIYW5kbGU6IGZ1bmN0aW9uKGl0ZW0sIHJ1bGUpIHtcXG4gICAgICAgIHZhciBpbWcgPSBcXFwiXFxcIjtcXG4gICAgICAgIGlmIChydWxlLmltZy5zdGFydHNXaXRoKFxcXCJwZFxcXCIpKSB7XFxuICAgICAgICAgICAgaW1nID0gZXZhbChydWxlLmltZyk7XFxuICAgICAgICB9IGVsc2UgaWYgKHJ1bGUuYmFja2ltZykge1xcbiAgICAgICAgICAgIGltZyA9IHBkZmgoaXRlbSwgcnVsZS5pbWcpO1xcbiAgICAgICAgICAgIGltZyA9IHRoaXMuZ2V0QmFja0ltYWdlKGltZyk7XFxuICAgICAgICAgICAgaW1nID0gdGhpcy5odHRwSGFuZGxlKGltZyk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGltZyA9IHBkZmgoaXRlbSwgcnVsZS5pbWcpO1xcbiAgICAgICAgICAgIGlmICghaW1nLnN0YXJ0c1dpdGgoXFxcImh0dHBcXFwiKSkge1xcbiAgICAgICAgICAgICAgICBpbWcgPSBwZChpdGVtLCBydWxlLmltZyk7XFxuICAgICAgICAgICAgICAgIGltZyA9IHRoaXMuaHR0cEhhbmRsZShpbWcpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBpbWcgKyBydWxlLnJlZjtcXG4gICAgfSxcXG4gICAgdXJsSGFuZGxlOiBmdW5jdGlvbihpdGVtLCBydWxlKSB7XFxuICAgICAgICB2YXIgaHJlZiA9IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKHJ1bGUudXJsLnN0YXJ0c1dpdGgoXFxcInBkXFxcIikpIHtcXG4gICAgICAgICAgICBocmVmID0gZXZhbChydWxlLnVybCk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGhyZWYgPSBwZChpdGVtLCBydWxlLnVybCk7XFxuICAgICAgICB9XFxuICAgICAgICBocmVmID0gcnVsZS5pbXQgPyBocmVmICsgXFxcIiNpbW1lcnNpdmVUaGVtZSNcXFwiIDogaHJlZjtcXG4gICAgICAgIHJldHVybiBocmVmO1xcbiAgICB9LFxcbiAgICBzZXRDb250ZW50OiBmdW5jdGlvbihpdGVtLCBpbnB1dCkge1xcbiAgICAgICAgbGV0IG91dHB1dCA9IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKGlucHV0ID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aChcXFwicGRcXFwiKSkge1xcbiAgICAgICAgICAgIG91dHB1dCA9IGV2YWwoaW5wdXQpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBvdXRwdXQgPSBwZGZoKGl0ZW0sIGlucHV0KTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XFxuICAgIH0sXFxuICAgIHJlZnJlc2g6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgYWRkTGlzdGVuZXIoXFxuICAgICAgICAgICAgXFxcIm9uUmVmcmVzaFxcXCIsXFxuICAgICAgICAgICAgJC50b1N0cmluZygodSkgPT4ge1xcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKFxcXCJ5aWxpc3RcXFwiKTtcXG4gICAgICAgICAgICAgICAgLy92YXIgcCA9IHN0b3JhZ2UwLmdldE15VmFyKCdzcGFnZScsICcnKTtcXG4gICAgICAgICAgICAgICAgLy9wdXRNeVZhcih1LCBwKTtcXG4gICAgICAgICAgICB9LCDnirbmgIEpXFxuICAgICAgICApO1xcbiAgICB9LFxcbiAgICBnZXRCb29sZWFuVmFsdWU6IGZ1bmN0aW9uKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcXG4gICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gQm9vbGVhbih2YWx1ZSkgOiAoZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiB0cnVlKTtcXG4gICAgfSxcXG4gICAgZGVidWdsb2c6IGZ1bmN0aW9uKGksIGl0ZW0sIHJ1bGUsIG9iaikge1xcbiAgICAgICAgbG9nKCctLS0tLS0tLS0tJyArIChpICsgMSkgKyAnOuiwg+ivleW8gOWniy0tLS0tLS0tLS0nKTtcXG4gICAgICAgIGlmIChpdGVtLmNvbnN0cnVjdG9yID09IE9iamVjdCkge1xcbiAgICAgICAgICAgIGl0ZW0gPSBKU09OLnN0cmluZ2lmeShpdGVtKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGxvZygnaXRlbeWGheWuuTpcXFxcclxcXFxuJyArIGl0ZW0gKyAnXFxcXHJcXFxcbicgK1xcbiAgICAgICAgICAgIGBcXFxcblxcXFx0dGl0bGXlrprkvY06ICAke3J1bGUudGl0bGV9ICAtLS0+IOe7k+aenDogICR7b2JqLnRpdGxlfWAgK1xcbiAgICAgICAgICAgIGBcXFxcblxcXFx0ZGVzY+WumuS9jTogICR7cnVsZS5kZXNjfSAgLS0tPiDnu5Pmnpw6ICAke29iai5kZXNjfWAgK1xcbiAgICAgICAgICAgIGBcXFxcblxcXFx0aW1n5a6a5L2NOiAgJHtydWxlLmltZ30gIC0tLT4g57uT5p6cOiAgJHtvYmouaW1nfWAgK1xcbiAgICAgICAgICAgIChydWxlLmNvbnRlbnQgIT0gdW5kZWZpbmVkID8gYFxcXFxuXFxcXHRjb250ZW505a6a5L2NOiAgJHtydWxlLmNvbnRlbnR9ICAtLS0+IOe7k+aenDogICR7b2JqLmNvbnRlbnR9YCA6ICcnKSArXFxuICAgICAgICAgICAgYFxcXFxuXFxcXHR1cmzlrprkvY06ICAke3J1bGUudXJsfSAgLS0tPiDnu5Pmnpw6ICAke29iai51cmx9YFxcbiAgICAgICAgKTtcXG4gICAgICAgIGxvZygnLS0tLS0tLS0tLScgKyAoaSArIDEpICsgJzrosIPor5Xnu5PmnZ8tLS0tLS0tLS0tJyk7XFxuICAgIH0sXFxuICAgIGpzb25MaXN0OiBmdW5jdGlvbihhcnIsIGpzb24sIHJ1bGUpIHtcXG4gICAgICAgIGlmIChqc29uLmNvbnN0cnVjdG9yICE9IE9iamVjdCkge1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGpzb24gPSBKU09OLnBhcnNlKGpzb24pO1xcbiAgICAgICAgICAgIH0gY2F0Y2gge31cXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChqc29uW3J1bGUubGlzdF0gPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgYXJyLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxmb250IGNvbG9yPVxcXCJncmV5XFxcIj48c21hbGw+5peg5YaF5a65PC9zbWFsbD48L2ZvbnQ+JyxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7fSxcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICByZXR1cm47XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgZGVidWcgPSB0aGlzLmdldEJvb2xlYW5WYWx1ZShydWxlLmRlYnVnLCBmYWxzZSk7XFxuICAgICAgICB2YXIgZW1wdHkgPSB0aGlzLmdldEJvb2xlYW5WYWx1ZShydWxlLmVtcHR5KTtcXG4gICAgICAgIGlmIChkZWJ1Zykge1xcbiAgICAgICAgICAgIGxvZygn5a6a5L2N5YiX6KGoOicgKyBydWxlLmxpc3QpO1xcbiAgICAgICAgfVxcbiAgICAgICAganNvbltydWxlLmxpc3RdLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSBldmFsKHJ1bGUudGl0bGUpO1xcbiAgICAgICAgICAgIHZhciBkZXNjID0gZXZhbChydWxlLmRlc2MpO1xcbiAgICAgICAgICAgIHZhciBjb250ZW50ID0gZXZhbChydWxlLmNvbnRlbnQpO1xcbiAgICAgICAgICAgIHZhciBpbWcgPSBldmFsKHJ1bGUuaW1nKSArIHJ1bGUucmVmO1xcbiAgICAgICAgICAgIHZhciBocmVmID0gZXZhbChydWxlLnVybCk7XFxuICAgICAgICAgICAgdmFyIHVybCA9IHJ1bGUuaW10ID8gaHJlZiArIFxcXCIjaW1tZXJzaXZlVGhlbWUjXFxcIiA6IGhyZWY7XFxuICAgICAgICAgICAgdmFyIGxhenkgPSBydWxlLmxhenkgPyBydWxlLmxhenkgOiBcXFwiXFxcIjtcXG5cXG4gICAgICAgICAgICB2YXIgZGQgPSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgZGVzYzogZGVzYyxcXG4gICAgICAgICAgICAgICAgY29udGVudDogY29udGVudCxcXG4gICAgICAgICAgICAgICAgcGljX3VybDogaW1nLFxcbiAgICAgICAgICAgICAgICB1cmw6IChlbXB0eSA/IFxcXCJoaWtlcjovL2VtcHR5IyNcXFwiIDogJycpICsgdXJsLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogcnVsZS5jb2xfdHlwZSxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIH07XFxuXFxuICAgICAgICAgICAgaWYgKGRlYnVnKSB7XFxuICAgICAgICAgICAgICAgIHZhciByeCA9IHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYyxcXG4gICAgICAgICAgICAgICAgICAgIGltZyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXFxuICAgICAgICAgICAgICAgICAgICB1cmxcXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgdGhpcy5kZWJ1Z2xvZyhpLCBpdGVtLCBydWxlLCByeCk7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGlmIChsYXp5ICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGRkW1xcXCJ1cmxcXFwiXSA9IGhyZWYgKyBsYXp5O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBhcnIucHVzaChkZCk7XFxuICAgICAgICB9KTtcXG4gICAgfSxcXG4gICAgcnVsZUxpc3Q6IGZ1bmN0aW9uKGFyciwgaHRtbCwgcnVsZSkge1xcbiAgICAgICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsXFxuICAgICAgICAgICAgcnVsZS5saXN0KTtcXG4gICAgICAgIHZhciBkZWJ1ZyA9IHRoaXMuZ2V0Qm9vbGVhblZhbHVlKHJ1bGUuZGVidWcsXFxuICAgICAgICAgICAgZmFsc2UpO1xcbiAgICAgICAgdmFyIGVtcHR5ID0gdGhpcy5nZXRCb29sZWFuVmFsdWUocnVsZS5lbXB0eSk7XFxuICAgICAgICBpZiAoZGVidWcpIHtcXG4gICAgICAgICAgICBsb2coJ+WumuS9jeWIl+ihqDonICsgcnVsZS5saXN0KTtcXG4gICAgICAgIH1cXG4gICAgICAgIGxpc3QuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLnRpdGxlKTtcXG4gICAgICAgICAgICB2YXIgZGVzYyA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmRlc2MpO1xcbiAgICAgICAgICAgIHZhciBkZXNjMSA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmRlc2MxKTtcXG4gICAgICAgICAgICB2YXIgZGVzYzIgPSB0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS5kZXNjMik7XFxuICAgICAgICAgICAgdmFyIGltZyA9IHRoaXMuaW1nSGFuZGxlKGl0ZW0sIHJ1bGUpO1xcbiAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLnVybEhhbmRsZShpdGVtLCBydWxlKTtcXG4gICAgICAgICAgICB2YXIgY29udGVudCA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmNvbnRlbnQpO1xcblxcbiAgICAgICAgICAgIGlmIChkZWJ1Zykge1xcbiAgICAgICAgICAgICAgICB2YXIgcnggPSB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2MsXFxuICAgICAgICAgICAgICAgICAgICBpbWcsXFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxcbiAgICAgICAgICAgICAgICAgICAgdXJsXFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIHRoaXMuZGVidWdsb2coaSwgaXRlbSwgcnVsZSwgcngpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICB2YXIgbGF6eSA9IHJ1bGUubGF6eSA/IHJ1bGUubGF6eSA6IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIHZhciBkZCA9IHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjMSArIFxcXCJcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXCIgKyBkZXNjLFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICAgICAgICAgIHVybDogKGVtcHR5ID8gXFxcImhpa2VyOi8vZW1wdHkjI1xcXCIgOiAnJykgKyB1cmwgKyAnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJlalxcXCIpJyxcXG4gICAgICAgICAgICAgICAgY29udGVudDogY29udGVudCxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IHJ1bGUuY29sX3R5cGUsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIGlmIChsYXp5ICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGRkW1xcXCJ1cmxcXFwiXSA9IHVybCArIGxhenk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGFyci5wdXNoKGRkKTtcXG4gICAgICAgIH0pO1xcbiAgICB9LFxcbiAgICBMaXN0OiBmdW5jdGlvbihhcnIsIGh0bWwsIHJ1bGUsIHBhcmFtKSB7XFxuICAgICAgICBwYXJhbSA9IHBhcmFtID8gcGFyYW0gOiB7fTtcXG4gICAgICAgIHZhciBhdXRvID0gcGFyYW0uYXV0byA/IHBhcmFtLmF1dG8gOiBmYWxzZTtcXG4gICAgICAgIHZhciBzaG93ID0gcGFyYW0uc2hvdyA/IHBhcmFtLnNob3cgOiBmYWxzZTtcXG4gICAgICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAvL3RoaXMuc3BhZ2Uuc2V0KHRydWVfdXJsKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xcbiAgICAgICAgdmFyIGRlYnVnID0gdGhpcy5nZXRCb29sZWFuVmFsdWUocnVsZS5kZWJ1ZywgZmFsc2UpO1xcbiAgICAgICAgdmFyIGVtcHR5ID0gdGhpcy5nZXRCb29sZWFuVmFsdWUocnVsZS5lbXB0eSk7XFxuICAgICAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgcnVsZS5saXN0KTtcXG4gICAgICAgIGlmIChkZWJ1Zykge1xcbiAgICAgICAgICAgIGxvZygn5a6a5L2N5YiX6KGoOicgKyBydWxlLmxpc3QpO1xcbiAgICAgICAgfVxcbiAgICAgICAgLy9sb2codGhpcy5uZXh0UGFnZSgpKVxcbiAgICAgICAgaWYgKChzdG9yYWdlMC5nZXRNeVZhcigneWlfaXNuZXh0JywgJ3QnKSA9PSAndCcgJiYgbGlzdC5sZW5ndGggPiAwKSB8fCBwYWdlID09IDEpIHtcXG4gICAgICAgICAgICBsaXN0LmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgZGVsZXRlSXRlbShcXFwicGFnZW51bVxcXCIpO1xcbiAgICAgICAgICAgICAgICBkZWxldGVJdGVtKFxcXCJwYWdlbGluZVxcXCIpO1xcbiAgICAgICAgICAgICAgICB2YXIgaWQgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICAgICAgdmFyIGNscyA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSB0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS50aXRsZSk7XFxuICAgICAgICAgICAgICAgIHZhciBkZXNjID0gdGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUuZGVzYyk7XFxuICAgICAgICAgICAgICAgIHZhciBpbWcgPSB0aGlzLmltZ0hhbmRsZShpdGVtLCBydWxlKTtcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IHRoaXMudXJsSGFuZGxlKGl0ZW0sIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmNvbnRlbnQpO1xcblxcbiAgICAgICAgICAgICAgICBpZiAoZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciByeCA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybFxcbiAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWdsb2coaSwgaXRlbSwgcnVsZSwgcngpO1xcbiAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgIGlmIChpID09IGxpc3QubGVuZ3RoIC0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgaWQgPSBcXFwibGFzdGlkX1xcXCIgKyBwYWdlO1xcbiAgICAgICAgICAgICAgICAgICAgY2xzID0gXFxcImxhc3RtYXJrXFxcIjtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogZGVzYyxcXG4gICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGltZyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogKGVtcHR5ID8gXFxcImhpa2VyOi8vZW1wdHkjI1xcXCIgOiAnJykgKyB1cmwgKyAnP3BhZ2U9ZnlwYWdlQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJ5alxcXCIpJyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogcnVsZS5jb2xfdHlwZSxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogY2xzLFxcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGlmIChpID09IGxpc3QubGVuZ3RoIC0gMSAmJiBzaG93KSB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibGluZVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFxcXCJwYWdlbGluZVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnTxzbWFsbD7liqDovb3kuK0uLi48L3NtYWxsPlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXFxcInBhZ2VudW1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB1cGRhdGVJdGVtKFxcXCJwYWdlbnVtXFxcIiwge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxmb250IGNvbG9yPVxcXCJncmV5XFxcIj48c21hbGw+5Yiw5bqV5LqGPC9zbWFsbD48L2ZvbnQ+JyxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBpZDogXFxcImxhc3RcXFwiLFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgLypcXG4gICAgICAgICAgICAgICAgaWYgKGxpc3QubGVuZ3RoID09IDAgJiYgcGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibGluZVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+PHNtYWxsPuaXoOWGheWuuTwvc21hbGw+PC9mb250PicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge30sXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSovXFxuICAgICAgICBpZiAodGhpcy5uZXh0UGFnZSgpKSB7XFxuICAgICAgICAgICAgLy9sb2coJ3QnKTtcXG4gICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcigneWlfaXNuZXh0JywgJ3QnKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgLy9sb2coJ2YnKTtcXG4gICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcigneWlfaXNuZXh0JywgJ2YnKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChhdXRvKSB7XFxuICAgICAgICAgICAgLy9jcmVhdGVOZXh0UGFnZSgpO1xcbiAgICAgICAgICAgIGF1dG9QYWdlKCk7XFxuICAgICAgICB9XFxuICAgIH0sXFxufTtcXG5cXG52YXIgZXh0TWV0aG9kID0ge1xcbiAgICBUb1BhcmFtczogZnVuY3Rpb24oKSB7XFxuICAgICAgICB2YXIganNvbiA9IGFyZ3VtZW50c1swXTtcXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhqc29uKVxcbiAgICAgICAgICAgIC5tYXAoKGtleSkgPT4ga2V5ICsgXFxcIj1cXFwiICsganNvbltrZXldKVxcbiAgICAgICAgICAgIC5qb2luKFxcXCImXFxcIik7XFxuICAgIH0sXFxuICAgIHVybFBhcnNlOiBmdW5jdGlvbih1KSB7XFxuICAgICAgICB2YXIgZGljdCA9IHt9O1xcbiAgICAgICAgZGljdC5Tb3VyY2UgPSB1O1xcbiAgICAgICAgbGV0IHBhcmFtcyA9ICh1cmwpID0+IHtcXG4gICAgICAgICAgICBsZXQgcXVlcnlQYXJhbXMgPSB7fTtcXG4gICAgICAgICAgICBsZXQgcmVnID0gLyhbXj89Jl0rKT0oW14/PSZdKykvZztcXG4gICAgICAgICAgICB1cmwucmVwbGFjZShyZWcsIGZ1bmN0aW9uKCkge1xcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc1thcmd1bWVudHNbMV1dID0gYXJndW1lbnRzWzJdO1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiBxdWVyeVBhcmFtcztcXG4gICAgICAgIH07XFxuICAgICAgICB2YXIgamF2YVVybCA9IEphdmFJbXBvcnRlcihqYXZhLm5ldC5VUkwpO1xcbiAgICAgICAgd2l0aChqYXZhVXJsKSB7XFxuICAgICAgICAgICAgdmFyIHVybCA9IG5ldyBVUkwodSk7XFxuICAgICAgICAgICAgZGljdC5Qcm90b2NvbCA9IHVybC5nZXRQcm90b2NvbCgpO1xcbiAgICAgICAgICAgIGRpY3QuSG9zdCA9IHVybC5nZXRIb3N0KCk7XFxuICAgICAgICAgICAgZGljdC5Qb3J0ID0gdXJsLmdldFBvcnQoKTtcXG4gICAgICAgICAgICBkaWN0LkZpbGUgPSB1cmwuZ2V0RmlsZSgpO1xcbiAgICAgICAgICAgIGRpY3QuUGF0aCA9IHVybC5nZXRQYXRoKCk7XFxuICAgICAgICAgICAgZGljdC5SZWYgPSB1cmwuZ2V0UmVmKCk7XFxuICAgICAgICAgICAgZGljdC5Ib3N0cyA9IGAke2RpY3QuUHJvdG9jb2x9Oi8vJHt1cmwuZ2V0SG9zdCgpfWA7XFxuICAgICAgICB9XFxuICAgICAgICBkaWN0LlBhcmFtcyA9IHBhcmFtcyh1KTtcXG4gICAgICAgIHJldHVybiBkaWN0O1xcbiAgICB9LFxcbiAgICBpc0VxdWFsOiBmdW5jdGlvbih4LCB5KSB7XFxuICAgICAgICBjb25zdCBvayA9IE9iamVjdC5rZXlzLFxcbiAgICAgICAgICAgIHR4ID0gdHlwZW9mIHgsXFxuICAgICAgICAgICAgdHkgPSB0eXBlb2YgeTtcXG4gICAgICAgIHJldHVybiB4ICYmIHkgJiYgdHggPT09IFxcXCJvYmplY3RcXFwiICYmIHR4ID09PSB0eSA/XFxuICAgICAgICAgICAgb2soeCkubGVuZ3RoID09PSBvayh5KS5sZW5ndGggJiZcXG4gICAgICAgICAgICBvayh4KS5ldmVyeSgoa2V5KSA9PiB0aGlzLmlzRXF1YWwoeFtrZXldLCB5W2tleV0pKSA6IHggPT09IHk7XFxuICAgIH0sXFxuICAgIGZpbmREaWZmZXJlbnRJbmRleDogZnVuY3Rpb24oc3RyMSwgc3RyMikge1xcbiAgICAgICAgY29uc3QgZGlmZkNoYXJzID0gW107XFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cjIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBpZiAoc3RyMVtpXSAhPT0gc3RyMltpXSkge1xcbiAgICAgICAgICAgICAgICBkaWZmQ2hhcnMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcXG4gICAgICAgICAgICAgICAgICAgIHMxOiBzdHIxW2ldLFxcbiAgICAgICAgICAgICAgICAgICAgczI6IHN0cjJbaV0sXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkaWZmQ2hhcnM7XFxuICAgIH0sXFxuICAgIHJlcGxhY2VDaGFyQXQ6IGZ1bmN0aW9uKHN0ciwgaW5kZXgsIHJlcGxhY2VtZW50KSB7XFxuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHN0ci5sZW5ndGgpIHtcXG4gICAgICAgICAgICByZXR1cm4gc3RyO1xcbiAgICAgICAgfVxcbiAgICAgICAgLy9sb2coaW5kZXgpXFxuICAgICAgICBjb25zdCBhcnIgPSBzdHIuc3BsaXQoXFxcIlxcXCIpO1xcbiAgICAgICAgYXJyW2luZGV4XSA9IHJlcGxhY2VtZW50O1xcbiAgICAgICAgcmV0dXJuIGFyci5qb2luKFxcXCJcXFwiKTtcXG4gICAgfSxcXG4gICAgZ2V0T2JqZWN0S2V5c0RpZmY6IGZ1bmN0aW9uKG9iajEsIG9iajIpIHtcXG4gICAgICAgIGNvbnN0IGRpZmZlcmVudEtleXMgPSBbXTtcXG4gICAgICAgIGZvciAobGV0IGtleSBpbiBvYmoxKSB7XFxuICAgICAgICAgICAgaWYgKCFvYmoyLmhhc093blByb3BlcnR5KGtleSkgfHwgb2JqMVtrZXldICE9PSBvYmoyW2tleV0pIHtcXG4gICAgICAgICAgICAgICAgZGlmZmVyZW50S2V5cy5wdXNoKGtleSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgZm9yIChsZXQga2V5IGluIG9iajIpIHtcXG4gICAgICAgICAgICBpZiAoIW9iajEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xcbiAgICAgICAgICAgICAgICBkaWZmZXJlbnRLZXlzLnB1c2goa2V5KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gZGlmZmVyZW50S2V5cztcXG4gICAgfSxcXG4gICAgZ2V0TmV4dFVybDogZnVuY3Rpb24oc291cmNlLCB0YXJnZXQsIHBhcmFtcykge1xcbiAgICAgICAgdmFyIHUxID0gdGhpcy51cmxQYXJzZShzb3VyY2UpO1xcbiAgICAgICAgdmFyIHUyID0gdGhpcy51cmxQYXJzZSh0YXJnZXQpO1xcbiAgICAgICAgdmFyIHBhID0gdW5kZWZpbmVkO1xcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJhbXMgPT0gXFxcIm9iamVjdFxcXCIpIHtcXG4gICAgICAgICAgICBwYSA9IHBhcmFtcy5oYXNPd25Qcm9wZXJ0eShcXFwi54m55b6BXFxcIikgPyBwYXJhbXMu54m55b6BIDogdW5kZWZpbmVkO1xcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIG5leHR1cmwgPSBzb3VyY2U7XFxuICAgICAgICB2YXIgY2EgPSBPYmplY3Qua2V5cyh1Mi5QYXJhbXMpLmxlbmd0aCA9PSAwID8gXFxcIlxcXCIgOiBcXFwiP1xcXCI7XFxuICAgICAgICBpZiAocGEgIT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgdmFyIHJzID0gU3RyaW5nKHUyLlBhdGgpLnJlcGxhY2UobmV3IFJlZ0V4cChwYSksIFxcXCIkMWZ5cGFnZVxcXCIpO1xcbiAgICAgICAgICAgIG5leHR1cmwgPSB1Mi5Ib3N0cyArIHJzICsgY2EgKyB0aGlzLlRvUGFyYW1zKHUyLlBhcmFtcyk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRXF1YWwodTEuUGFyYW1zLCB1Mi5QYXJhbXMpKSB7XFxuICAgICAgICAgICAgICAgIGlmIChkdF9kZWJ1Zykge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKHUxLlBhdGgpO1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKHUyLlBhdGgpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHZhciBkZiA9IHRoaXMuZmluZERpZmZlcmVudEluZGV4KFN0cmluZyh1MS5QYXRoKSwgU3RyaW5nKHUyLlBhdGgpKTtcXG4gICAgICAgICAgICAgICAgaWYgKGR0X2RlYnVnKSB7XFxuICAgICAgICAgICAgICAgICAgICBsb2coZGYpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmIChkZi5sZW5ndGggPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlID0gZGZbMF0uaW5kZXg7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgZiA9IGRmLmZpbHRlcigoeCkgPT4gL1xcXFxkKy8udGVzdCh4LnMyKSk7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgcmUgPSBmWzBdLmluZGV4O1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHZhciBlcSA9IHRoaXMucmVwbGFjZUNoYXJBdChTdHJpbmcodTIuUGF0aCksIHJlLCBcXFwiZnlwYWdlXFxcIik7XFxuICAgICAgICAgICAgICAgIG5leHR1cmwgPSB1Mi5Ib3N0cyArIGVxICsgY2EgKyB0aGlzLlRvUGFyYW1zKHUyLlBhcmFtcyk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdmFyIGVwID0gdGhpcy5nZXRPYmplY3RLZXlzRGlmZih1MS5QYXJhbXMsIHUyLlBhcmFtcylcXG4gICAgICAgICAgICAgICAgaWYgKGVwLmxlbmd0aCA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICB1MS5QYXJhbXNbZXBbMF1dID0gJ2Z5cGFnZSdcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhlcCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdmFyIGVxID0gU3RyaW5nKHUxLlBhdGgpLnJlcGxhY2UoL1xcXFxkKy8sIFxcXCJmeXBhZ2VcXFwiKTtcXG4gICAgICAgICAgICAgICAgbmV4dHVybCA9IHUxLkhvc3RzICsgZXEgKyBjYSArIHRoaXMuVG9QYXJhbXModTEuUGFyYW1zKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICAvL2xvZygnbmV4dDonK25leHR1cmwpXFxuICAgICAgICByZXR1cm4gbmV4dHVybDtcXG4gICAgfSxcXG59O1xcblxcbmZ1bmN0aW9uIGdldFRydWVsaW5rKG1hcmssIHVybCwgcGFnZSkge1xcbiAgICB2YXIgcCA9IGdldE15VmFyKG1hcmssIHVybCkucmVwbGFjZShcXFwiZnlwYWdlXFxcIiwgcGFnZSk7XFxuICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgIHJldHVybiBnZXRNeVZhcihcXFwieWlfZmlyc3RwYWdlXFxcIiwgcCk7XFxuICAgIH0gZWxzZSBpZiAocCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgcmV0dXJuIHA7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICByZXR1cm4gdXJsO1xcbiAgICB9XFxufVxcbi8v5p6E5bu6XFxuZnVuY3Rpb24gY3JlYXRlTmV4dFBhZ2UoKSB7XFxuICAgIGxldCBzdGFydG51bSA9IDE7XFxuICAgIHZhciBvYmogPSBhcmd1bWVudHNbMF07XFxuICAgIGlmICh0cnVlX3VybCAhPSBnZXRNeVZhcihcXFwieWlfcGFnZXVybFxcXCIsIFxcXCJcXFwiKSkge1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwieWlfcGFnZXVybFxcXCIpO1xcbiAgICB9XFxuICAgIGlmIChwYWdlID09IHN0YXJ0bnVtICYmIGdldE15VmFyKFxcXCJ5aV9wYWdldXJsXFxcIikgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIHB1dE15VmFyKFxcXCJ5aV9maXJzdHBhZ2VcXFwiLCB0cnVlX3VybCk7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHZhciBuZXh0ID0gZXZhbCjkuIvkuIDpobUpO1xcbiAgICAgICAgICAgIC8vbG9nKFxcXCJuZXh0XFxcIik7XFxuICAgICAgICAgICAgLy9sb2cobmV4dCk7XFxuICAgICAgICB9IGNhdGNoIHtcXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICBuZXh0ID0gXFxcIlxcXCI7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAobmV4dCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgIHZhciBueHVybCA9IGV4dE1ldGhvZC5nZXROZXh0VXJsKHRydWVfdXJsLCBuZXh0LCBvYmopO1xcbiAgICAgICAgICAgIC8vbG9nKFxcXCJueHVybDpcXFwiICsgbnh1cmwpO1xcbiAgICAgICAgICAgIHB1dE15VmFyKOeKtuaAgSwgbnh1cmwpO1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJ5aV9wYWdldXJsXFxcIiwgbnh1cmwpO1xcbiAgICAgICAgfVxcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIGF1dG9QYWdlKCkge1xcbiAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICBwdXRNeVZhcihcXFwieWlfZmlyc3RwYWdlXFxcIiwgdHJ1ZV91cmwpO1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgICB2YXIgbmV4dCA9IGV2YWwo5LiL5LiA6aG1KTtcXG4gICAgICAgIC8vbG9nKFxcXCJuZXh0XFxcIik7XFxuICAgICAgICAvL2xvZygnbmV4dDonK25leHQpO1xcbiAgICB9IGNhdGNoIHtcXG4gICAgICAgIFxcbiAgICAgICAgbmV4dCA9IFxcXCJcXFwiO1xcbiAgICB9XFxuICAgIGlmIChuZXh0ICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICBwdXRNeVZhcijnirbmgIEsIG5leHQpO1xcbiAgICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pGh5LqM57qn5aSW6YOo6Kej5p6QXCIsXCJwYXRoXCI6XCJ0b29sXCIsXCJydWxlXCI6XCIvL3ZhciB0aXRsZSA9IHBhcnNlRG9tRm9ySHRtbChodG1sLCDmkJzntKLmoIfnrb4pO1xcbi8vdmFyIHRpdGxlID0gTVlfUEFSQU1TLnRpdGxlO1xcbi8vbG9nKHRpdGxlKVxcblxcbi8vVGhpc3NBVlxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiI2Y2NzI4MFxcXCI+IFRoaXNBVjwvZm9udD48L21pZGRsZT4nLFxcbiAgICBwaWNfdXJsOiAnaHR0cHM6Ly9jZG40Lmljb25maW5kZXIuY29tL2RhdGEvaWNvbnMvbG9nb3MtYW5kLWJyYW5kcy81MTIvMjMyX05pbnRlbmRvX1N3aXRjaF9sb2dvLTEyOC5wbmcnLFxcbiAgICB1cmw6ICQoJycpLmxhenlSdWxlKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgIHZhciBhdiA9IFxcXCJodHRwczovL3RoaXNhdi5jb20vY24vXFxcIiArIOivhuWIq+eggTtcXG4gICAgICAgIC8vbG9nKGF2KVxcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB2YXIgaHRtbCA9IGZldGNoKGF2LCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjApJ1xcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiA1MDAwXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgZXZhbChodG1sLm1hdGNoKC9ldmFsLio/XFxcXG4vKVswXSlcXG4gICAgICAgICAgICAvLyDojrflj5bnlLvotKjliJfooajvvIzlubbljrvmnIDpq5jnlLvotKhcXG4gICAgICAgICAgICBsZXQgZ3JvdXBfcXVhbGl0eSA9IGZldGNoKHNvdXJjZSwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwib3JpZ2luXFxcIjogXFxcImh0dHBzOi8vdGhpc2F2LmNvbVxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgaGdoZXN0X3F1YWxpdHkgPSBncm91cF9xdWFsaXR5Lm1hdGNoKC9eKC4qKVxcXFwubTN1OCQvZ20pXFxuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5yZXBsYWNlKFxcXCJwbGF5bGlzdC5tM3U4XFxcIiwgaGdoZXN0X3F1YWxpdHlbaGdoZXN0X3F1YWxpdHkubGVuZ3RoIC0gMV0pICsgJzt7T3JpZ2luQGh0dHBzOi8vdGhpc2F2LmNvbX0nXFxuICAgICAgICB9IGNhdGNoIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5oyC5qKv5oiW5rKh5pyJ5q2k5b2x54mHXFxcIlxcbiAgICAgICAgfVxcbiAgICB9LCDor4bliKvnoIEpLFxcbiAgICBjb2xfdHlwZTogJ2ljb25fNScsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgdGl0bGU6ICfmn6XnnIvnvZHlnYAnLFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJodHRwczovL3RoaXNhdi5jb20vY24vXFxcIiArIOivhuWIq+eggTtcXG4gICAgICAgICAgICB9LCDor4bliKvnoIEpXFxuICAgICAgICB9XVxcbiAgICB9XFxufSk7XFxuXFxuLy9NSVNTQVZcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiPjxtaWRkbGU+PGZvbnQgY29sb3I9XFxcIiNmNjcyODBcXFwiPiBNSVNTQVY8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgcGljX3VybDogJ2h0dHBzOi8vY2RuMS5pY29uZmluZGVyLmNvbS9kYXRhL2ljb25zL2ZydWl0cy1uLXZlZ2V0YWJsZXMtY29sb3JlZC1ncmFkaWVudC8xMjgvY2F1bGlmbG93ZXItMTI4LnBuZycsXFxuICAgIHVybDogJCgnJykubGF6eVJ1bGUoKOivhuWIq+eggSkgPT4ge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB2YXIgYXYgPSBcXFwiaHR0cHM6Ly9taXNzYXYudG8vc2VhcmNoL21vdmllL1xcXCIgKyDor4bliKvnoIE7XFxuICAgICAgICAgICAgdmFyIHVybHMgPSBbXTtcXG4gICAgICAgICAgICB2YXIgbGlzdCA9IHBkZmEoZmV0Y2goYXYsIHtcXG4gICAgICAgICAgICAgICAgdGltZW91dDogNTAwMFxcbiAgICAgICAgICAgIH0pLCBcXFwiLnZpZGVvcy1saXN0JiZhcnRpY2xlXFxcIik7XFxuICAgICAgICAgICAgZm9yICh2YXIgaiBpbiBsaXN0KSB7XFxuICAgICAgICAgICAgICAgIHVybHMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHBkZmgobGlzdFtqXSwgXFxcImEmJmhyZWZcXFwiKVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgcGxheXMgPSBiZih1cmxzKS5tYXAoaCA9PiBoLm1hdGNoKC9zcmM9XFxcIiguKj8pXFxcIi8pWzFdLnNwbGl0KFxcXCImXFxcIilbMF0ucmVwbGFjZShcXFwiP2lkPVxcXCIsIFxcXCJobHMvXFxcIikgKyBcXFwiLm0zdThcXFwiKVxcbiAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgIHVybHM6IHBsYXlzXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBjYXRjaCB7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgdmFyIGF2ID0gXFxcImh0dHBzOi8vbWlzc2F2LnRvL3NlYXJjaC9tb3ZpZS9cXFwiICsg6K+G5Yir56CBLnJlcGxhY2UoL1xcXFwtfFxcXFxfLywgXFxcIiUyMFxcXCIpO1xcbiAgICAgICAgICAgICAgICB2YXIgdXJscyA9IFtdO1xcbiAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IHBkZmEoZmV0Y2goYXYsIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDUwMDBcXG4gICAgICAgICAgICAgICAgfSksIFxcXCIudmlkZW9zLWxpc3QmJmFydGljbGVcXFwiKTtcXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiBpbiBsaXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogcGRmaChsaXN0W2pdLCBcXFwiYSYmaHJlZlxcXCIpXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHZhciBwbGF5cyA9IGJmKHVybHMpLm1hcChoID0+IGgubWF0Y2goL3NyYz1cXFwiKC4qPylcXFwiLylbMV0uc3BsaXQoXFxcIiZcXFwiKVswXS5yZXBsYWNlKFxcXCI/aWQ9XFxcIiwgXFxcImhscy9cXFwiKSArIFxcXCIubTN1OFxcXCIpXFxuICAgICAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzOiBwbGF5c1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBjYXRjaCB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/msqHmnInmraTlvbHniYdcXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9LCDor4bliKvnoIEpLFxcbiAgICBjb2xfdHlwZTogJ2ljb25fNScsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgdGl0bGU6ICfmn6XnnIvnvZHlnYAnLFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJodHRwczovL21pc3Nhdi50by9zZWFyY2gvbW92aWUvXFxcIiArIOivhuWIq+eggVxcbiAgICAgICAgICAgIH0sIOivhuWIq+eggSlcXG4gICAgICAgIH1dXFxuICAgIH1cXG59KTtcXG5cXG4vL25qYXZcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiPjxtaWRkbGU+PGZvbnQgY29sb3I9XFxcIiNmNjcyODBcXFwiPiBuSmF2LnR2PC9mb250PjwvbWlkZGxlPicsXFxuICAgIHBpY191cmw6ICdodHRwczovL2NkbjIuaWNvbmZpbmRlci5jb20vZGF0YS9pY29ucy9zb2NpYWwtaWNvbnMtMzMvMTI4L0ZhY2Vib29rX01lc3Nlbmdlci0xMjgucG5nJyxcXG4gICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICB2YXIgYXYgPSBcXFwiaHR0cHM6Ly9uamF2LnR2L3poL3YvXFxcIiArIOivhuWIq+eggTtcXG4gICAgICAgIC8vbG9nKGF2KVxcbiAgICAgICAgdmFyIGh0bWwgPSBmZXRjaChhdiwge1xcbiAgICAgICAgICAgIHRpbWVvdXQ6IDUwMDBcXG4gICAgICAgIH0pXFxuICAgICAgICBpZiAoIWh0bWwgfHwgaHRtbC5pbmNsdWRlcyhcXFwi6K+35qOA5p+l5Zyw5Z2A5qCP5Lit55qE572R5Z2AXFxcIikpIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5oyC5qKv5oiW5rKh5pyJ5q2k5b2x54mHXFxcIlxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInZpZGVvOi8vXFxcIiArIGF2O1xcbiAgICAgICAgfVxcbiAgICB9LCDor4bliKvnoIEpLFxcbiAgICBjb2xfdHlwZTogJ2ljb25fNScsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICB2aWRlb0V4Y2x1ZGVSdWxlczogWycyNDAnXSxcXG4gICAgICAgIGJsb2NrUnVsZXM6IFsnKi5kb3BwaW9jZG4uKiddLFxcbiAgICAgICAgYmxvY2tSdWxlczogWydkbW0uY28uanAnXSxcXG4gICAgICAgIC8vdmlkZW9SdWxlczogWycqbTN1OConXSxcXG4gICAgICAgIGNhY2hlTTN1ODogdHJ1ZSxcXG4gICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICB0aXRsZTogJ+afpeeci+e9keWdgCcsXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKOivhuWIq+eggSkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImh0dHBzOi8vbmphdi50di96aC92L1xcXCIgKyDor4bliKvnoIE7XFxuICAgICAgICAgICAgfSwg6K+G5Yir56CBKVxcbiAgICAgICAgfV1cXG4gICAgfVxcbn0pO1xcblxcbi8vYXYwMVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiI2Y2NzI4MFxcXCI+IEFWMDE8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgcGljX3VybDogJ2h0dHBzOi8vY2RuMi5pY29uZmluZGVyLmNvbS9kYXRhL2ljb25zL293bC0xMC81MDAvbmltNTMyXzExX3B1cnBsZV9vd2xfa2lkX2JpcnRoZGF5X2ZhY2VfZXllLTEyOC5wbmcnLFxcbiAgICB1cmw6ICQoJycpLmxhenlSdWxlKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgIHZhciBhdiA9IFxcXCJodHRwczovL3d3dy5hdjAxLnR2L1xcXCIgKyDor4bliKvnoIE7XFxuICAgICAgICAvL2xvZyhhdilcXG4gICAgICAgIHZhciBodG1sID0gZmV0Y2goYXYsIHtcXG4gICAgICAgICAgICB0aW1lb3V0OiA1MDAwXFxuICAgICAgICB9KVxcbiAgICAgICAgdmFyIGNvZGUgPSBwZGZoKGh0bWwsICcjcGx5cl92aWRlbyYmcG9zdGVyJylcXG4gICAgICAgIGxvZyhjb2RlKVxcbiAgICAgICAgaWYgKCFjb2RlKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+aMguair+aIluayoeacieatpOW9seeJh1xcXCJcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ2aWRlbzovL1xcXCIgKyBhdjtcXG4gICAgICAgIH1cXG4gICAgfSwg6K+G5Yir56CBKSxcXG4gICAgY29sX3R5cGU6ICdpY29uXzUnLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgdmlkZW9FeGNsdWRlUnVsZXM6IFsnZG9wcGlvY2RuJ10sXFxuICAgICAgICB2aWRlb0V4Y2x1ZGVSdWxlczogWycyNDAnXSxcXG4gICAgICAgIHZpZGVvRXhjbHVkZVJ1bGVzOiBbJzQ4MCddLFxcbiAgICAgICAgYmxvY2tSdWxlczogWycuZG9wcGlvY2RuLiddLFxcbiAgICAgICAgYmxvY2tSdWxlczogWydkbW0uY28uanAnXSxcXG4gICAgICAgIC8vdmlkZW9SdWxlczogWycqbTN1OConXSxcXG4gICAgICAgIGNhY2hlTTN1ODogdHJ1ZSxcXG4gICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICB0aXRsZTogJ+afpeeci+e9keWdgCcsXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKOivhuWIq+eggSkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImh0dHBzOi8vd3d3LmF2MDEudHYvXFxcIiArIOivhuWIq+eggTtcXG4gICAgICAgICAgICB9LCDor4bliKvnoIEpXFxuICAgICAgICB9XVxcbiAgICB9XFxufSk7XFxuXFxuLy9KYWJsZVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiI2Y2NzI4MFxcXCI+IEphYmxlPC9mb250PjwvbWlkZGxlPicsXFxuICAgIHBpY191cmw6ICdodHRwczovL2NkbjMuaWNvbmZpbmRlci5jb20vZGF0YS9pY29ucy9jYXQtcG93ZXItcHJlbWl1bS8xMjAvY2F0X2Zvb2Rsb3ZlLTEyOC5wbmcnLFxcbiAgICB1cmw6ICQoJycpLmxhenlSdWxlKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgIHZhciBhdiA9IFxcXCJodHRwczovL2phYmxlLnR2L3ZpZGVvcy9cXFwiICsg6K+G5Yir56CBICsgXFxcIi9cXFwiO1xcbiAgICAgICAgLy9sb2coYXYpXFxuICAgICAgICAvLyByZXF1ZXN0KFxcXCJodHRwczovL2phYmxlLnR2L1xcXCIpXFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHZhciBodG1sID0gZmV0Y2goYXYsIHtcXG4gICAgICAgICAgICAgICAgdGltZW91dDogNTAwMFxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgdmFyIHVybCA9IGh0bWwubWF0Y2goL2h0dHBzPzpcXFxcL1xcXFwvXFxcXFMrP1xcXFwubTN1OC8pWzBdXFxuICAgICAgICAgICAgcmV0dXJuIHVybFxcbiAgICAgICAgfSBjYXRjaCB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+ayoeacieaMguair+WtkOaIluayoeacieatpOW9seeJh1xcXCJcXG4gICAgICAgIH1cXG4gICAgfSwg6K+G5Yir56CBKSxcXG4gICAgY29sX3R5cGU6ICdpY29uXzUnLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgIHRpdGxlOiAn5p+l55yL572R5Z2AJyxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaHR0cHM6Ly9qYWJsZS50di92aWRlb3MvXFxcIiArIOivhuWIq+eggSArIFxcXCIvXFxcIjtcXG4gICAgICAgICAgICB9LCDor4bliKvnoIEpXFxuICAgICAgICB9XVxcbiAgICB9XFxufSk7XFxuXFxuLy9UaGlzc0FW56C06KejXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48bWlkZGxlPjxmb250IGNvbG9yPVxcXCIjZjY3MjgwXFxcIj7nhKHnorznoLTop6M8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgcGljX3VybDogJ2h0dHBzOi8vY2RuNC5pY29uZmluZGVyLmNvbS9kYXRhL2ljb25zL3NvY2lhbC1tZWRpYS1mbGF0LTcvNjQvU29jaWFsLW1lZGlhX1NuYXBjaGF0LTEyOC5wbmcnLFxcbiAgICB1cmw6ICQoJycpLmxhenlSdWxlKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgIHZhciBhdiA9IFxcXCJodHRwczovL3RoaXNhdi5jb20vY24vXFxcIiArIOivhuWIq+eggSArIFxcXCItdW5jZW5zb3JlZC1sZWFrXFxcIjtcXG4gICAgICAgIC8vbG9nKGF2KVxcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB2YXIgaHRtbCA9IGZldGNoKGF2LCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjApJ1xcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiA1MDAwXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgZXZhbChodG1sLm1hdGNoKC9ldmFsLio/XFxcXG4vKVswXSlcXG4gICAgICAgICAgICAvLyDojrflj5bnlLvotKjliJfooajvvIzlubbljrvmnIDpq5jnlLvotKhcXG4gICAgICAgICAgICBsZXQgZ3JvdXBfcXVhbGl0eSA9IGZldGNoKHNvdXJjZSwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwib3JpZ2luXFxcIjogXFxcImh0dHBzOi8vdGhpc2F2LmNvbVxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgaGdoZXN0X3F1YWxpdHkgPSBncm91cF9xdWFsaXR5Lm1hdGNoKC9eKC4qKVxcXFwubTN1OCQvZ20pXFxuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5yZXBsYWNlKFxcXCJwbGF5bGlzdC5tM3U4XFxcIiwgaGdoZXN0X3F1YWxpdHlbaGdoZXN0X3F1YWxpdHkubGVuZ3RoIC0gMV0pICsgJzt7T3JpZ2luQGh0dHBzOi8vdGhpc2F2LmNvbX0nXFxuICAgICAgICB9IGNhdGNoIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5oyC5qKv5oiW5rKh5pyJ5q2k5b2x54mHXFxcIlxcbiAgICAgICAgfVxcbiAgICB9LCDor4bliKvnoIEpLFxcbiAgICBjb2xfdHlwZTogJ2ljb25fNScsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgdGl0bGU6ICfmn6XnnIvnvZHlnYAnLFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJodHRwczovL3RoaXNhdi5jb20vY24vXFxcIiArIOivhuWIq+eggSArIFxcXCItdW5jZW5zb3JlZC1sZWFrXFxcIjtcXG4gICAgICAgICAgICB9LCDor4bliKvnoIEpXFxuICAgICAgICB9XVxcbiAgICB9XFxufSk7XFxuXFxuLy9uamF256C06KejXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48bWlkZGxlPjxmb250IGNvbG9yPVxcXCIjZjY3MjgwXFxcIj4gbkphduegtOinozwvZm9udD48L21pZGRsZT4nLFxcbiAgICBwaWNfdXJsOiAnaHR0cHM6Ly9jZG4wLmljb25maW5kZXIuY29tL2RhdGEvaWNvbnMvQ3V0ZU1vbnN0ZXJzUE5HLzEyOC9ibHVlX21vbnN0ZXIucG5nJyxcXG4gICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICB2YXIgYXYgPSBcXFwiaHR0cHM6Ly9uamF2LnR2L3poL3YvXFxcIiArIOivhuWIq+eggSArIFxcXCItdW5jZW5zb3JlZC1sZWFrZWRcXFwiO1xcbiAgICAgICAgLy9sb2coYXYpXFxuICAgICAgICB2YXIgaHRtbCA9IGZldGNoKGF2LCB7XFxuICAgICAgICAgICAgdGltZW91dDogNTAwMFxcbiAgICAgICAgfSlcXG4gICAgICAgIGlmICghaHRtbCB8fCBodG1sLmluY2x1ZGVzKFxcXCLor7fmo4Dmn6XlnLDlnYDmoI/kuK3nmoTnvZHlnYBcXFwiKSkge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/mjILmoq/miJbmsqHmnInmraTlvbHniYdcXFwiXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidmlkZW86Ly9cXFwiICsgYXY7XFxuICAgICAgICB9XFxuICAgIH0sIOivhuWIq+eggSksXFxuICAgIGNvbF90eXBlOiAnaWNvbl81JyxcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIHZpZGVvRXhjbHVkZVJ1bGVzOiBbJzI0MCddLFxcbiAgICAgICAgYmxvY2tSdWxlczogWycqLmRvcHBpb2Nkbi4qJ10sXFxuICAgICAgICBibG9ja1J1bGVzOiBbJ2RtbS5jby5qcCddLFxcbiAgICAgICAgLy92aWRlb1J1bGVzOiBbJyptM3U4KiddLFxcbiAgICAgICAgY2FjaGVNM3U4OiB0cnVlLFxcbiAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgIHRpdGxlOiAn5p+l55yL572R5Z2AJyxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaHR0cHM6Ly9uamF2LnR2L3poL3YvXFxcIiArIOivhuWIq+eggSArIFxcXCItdW5jZW5zb3JlZC1sZWFrZWRcXFwiO1xcbiAgICAgICAgICAgIH0sIOivhuWIq+eggSlcXG4gICAgICAgIH1dXFxuICAgIH1cXG59KTtcXG5cXG4vL1N1cGphdlxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiI2Y2NzI4MFxcXCI+U3VwamF2PC9mb250PjwvbWlkZGxlPicsXFxuICAgIHBpY191cmw6ICdodHRwczovL2NkbjMuaWNvbmZpbmRlci5jb20vZGF0YS9pY29ucy9sb2dvcy1icmFuZHMtMy8yNC9sb2dvX2JyYW5kX2JyYW5kc19sb2dvc19za3JpbGwtMTI4LnBuZycsXFxuICAgIHVybDogXFxcIng1Oi8vaHR0cHM6Ly9zdXBqYXYuY29tL3poLz9zPVxcXCIgKyDor4bliKvnoIEsXFxuICAgIGNvbF90eXBlOiAnaWNvbl81JyxcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICB0aXRsZTogJ+WPrOWUpOmbqOingScsXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKOivhuWIq+eggSkgPT4ge1xcbiAgICAgICAgICAgICAgICAvKlxcbiAgICAgICAgICAgICAgICBvcGVuQXBwSW50ZW50KCdjb20ueXVqaWFuLlJlc2lkZU1lbnVEZW1vJywgJ2NuLnl1amlhbi5NYWluQWN0aXZpdHknLCB7aW50ZW50RGF0YTogJ2h0dHBzOi8vc3VwamF2LmNvbS96aC8/cz0nICsg6K+G5Yir56CBfSlcXG4gICAgICAgICAgICAgICAgKi9cXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ5amJyb3dzZXI6Ly9zZWFyY2g/cT1odHRwczovL3N1cGphdi5jb20vemgvP3M9XFxcIiArIOivhuWIq+eggVxcbiAgICAgICAgICAgIH0sIOivhuWIq+eggSlcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogJ+afpeeci+e9keWdgCcsXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKOivhuWIq+eggSkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImh0dHBzOi8vc3VwamF2LmNvbS96aC8/cz1cXFwiICsg6K+G5Yir56CBXFxuICAgICAgICAgICAgfSwg6K+G5Yir56CBKVxcbiAgICAgICAgfV1cXG4gICAgfVxcbn0pO1xcblxcbi8v6IGa5pCcXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48bWlkZGxlPjxmb250IGNvbG9yPVxcXCIjZjY3MjgwXFxcIj7ogZrmkJwg4oCiIFI8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgcGljX3VybDogJ2h0dHBzOi8vY2RuNC5pY29uZmluZGVyLmNvbS9kYXRhL2ljb25zL2Vzc2VudGlhbHMtNzIvMjQvMDAyXy1fU2VhcmNoLTEyOC5wbmcnLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL3NlYXJjaD9zPVxcXCIgKyDor4bliKvnoIEgKyBcXFwiJnJ1bGU95aW955yL6KeG6aKRJnNpbXBsZT1mYWxzZVxcXCIsXFxuICAgIGNvbF90eXBlOiAnaWNvbl81JyxcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICB0aXRsZTogJ0phdi5HdXJ1JyxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaHR0cHM6Ly9qYXYuZ3VydS8/cz1cXFwiICsg6K+G5Yir56CBO1xcbiAgICAgICAgICAgIH0sIOivhuWIq+eggSlcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogJ0phdkJhbmdlcnMnLFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJodHRwczovL3d3dy5qYXZiYW5nZXJzLmNvbS9zZWFyY2gvXFxcIiArIOivhuWIq+eggSArICcvJztcXG4gICAgICAgICAgICB9LCDor4bliKvnoIEpXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6ICflpI3liLbor4bliKvnoIEnLFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJjb3B5Oi8vXFxcIiArIOivhuWIq+eggTtcXG4gICAgICAgICAgICB9LCDor4bliKvnoIEpXFxuICAgICAgICB9XVxcbiAgICB9XFxufSk7XFxuXFxuXFxuLy/no4HlipvlkJsu566AXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48bWlkZGxlPjxmb250IGNvbG9yPVxcXCIjZjY3MjgwXFxcIj7no4HlipvlkJsu566APC9mb250PjwvbWlkZGxlPicsXFxuICAgIHBpY191cmw6ICdodHRwczovL2NkbjQuaWNvbmZpbmRlci5jb20vZGF0YS9pY29ucy9zaG9wcGluZy1kb29kbGUvNTEyL1Nob3BwaW5nLTMxLTEyOC5wbmcnLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2Uvc291P3J1bGU956OB5Yqb5ZCbLueugCZwPWZ5cGFnZSZzZWFyY2hUZXJtcz1cXFwiICsg6K+G5Yir56CBLFxcbiAgICBjb2xfdHlwZTogJ2ljb25fNScsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgdGl0bGU6ICfosLfmrYzmkJzntKInLFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJodHRwczovL3d3dy5nb29nbGUuY29tL3NlYXJjaD9xPVxcXCIgKyDor4bliKvnoIE7XFxuICAgICAgICAgICAgfSwg6K+G5Yir56CBKVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiAnWWFuZGV45pCc57SiJyxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaHR0cHM6Ly95YW5kZXguY29tL3NlYXJjaC90b3VjaC8/dGV4dD1cXFwiICsg6K+G5Yir56CBO1xcbiAgICAgICAgICAgIH0sIOivhuWIq+eggSlcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogJ+WkjeWItuivhuWIq+eggScsXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKOivhuWIq+eggSkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly9cXFwiICsg6K+G5Yir56CBO1xcbiAgICAgICAgICAgIH0sIOivhuWIq+eggSlcXG4gICAgICAgIH1dXFxuICAgIH1cXG59KTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuino+aekFwiLFwicGF0aFwiOlwibGF6eVwiLFwicnVsZVwiOlwidmFyIGxhenkgPSAkKCcnKS5sYXp5UnVsZSgoTVlfSE9NRSkgPT4ge1xcbiAgICB2YXIgaW5wID0gZmV0Y2goaW5wdXQse30pOyBcXG4gICAgcmV0dXJuIFxcXCJwaWNzOi8vXFxcIitwZGZhKGlucCwgJy5wcmV2aWV3LWltYWdlcyYmYSwxOicpLm1hcChpbWcgPT5wZChpbWcsICdhJiZocmVmJykrXFxcIkBSZWZlcmVyPVxcXCIsKS5qb2luKFxcXCImJlxcXCIpICBcXG59LE1ZX0hPTUUpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLikaDkuIDnuqfpobXpnaLlhoXlrrlcIixcInBhdGhcIjpcInlqXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcblxcbmFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgKCkgPT4ge1xcbiAgICBjbGVhck15VmFyKFxcXCJ1cmxcXFwiKTtcXG4gICAgY2xlYXJNeVZhcihcXFwibmV4dFBhZ2VcXFwiKTtcXG4gICAgY2xlYXJJdGVtKCdub3cnKVxcbiAgICBjbGVhckl0ZW0oJ25vJylcXG4gICAgY2xlYXJJdGVtKCdwYWdlcycpXFxufSk7XFxuYWRkTGlzdGVuZXIoXFxcIm9uUmVmcmVzaFxcXCIsICgpID0+IHtcXG4gICAgY2xlYXJNeVZhcihcXFwidXJsXFxcIik7XFxuICAgIGNsZWFyTXlWYXIoXFxcIm5leHRQYWdlXFxcIik7XFxuICAgIGNsZWFySXRlbSgnbm93Jyk7XFxuICAgIGNsZWFySXRlbSgnbm8nKTtcXG4gICAgY2xlYXJJdGVtKCdwYWdlcycpXFxufSk7XFxuXFxuTVlfVVJMID0gTVlfVVJMLnJlcGxhY2UoJ2hpa2VyOi8vZW1wdHkjIycsICcnKTtcXG5sZXQgdHJ1ZV91cmwgPSBnZXRNeVZhcihcXFwidXJsXFxcIiwgTVlfVVJMKTtcXG5jb25zdCBwYWdlID0gTVlfUEFHRTtcXG4vL+iOt+WPluS4iuasoee8k+WtmOeahOS4i+mhtemTvuaOpVxcbmxldCBuZXh0UGFnZSA9IGdldE15VmFyKFxcXCJuZXh0UGFnZVxcXCIsIFxcXCJcXFwiKTtcXG4vL+WmguaenOacieS4i+S4gOmhteS4lOS4jeaYr+esrOS4gOmhteWwseS9v+eUqOS4i+S4gOmhtemTvuaOpVxcbmlmIChuZXh0UGFnZSAmJiBNWV9QQUdFID4gMSkge1xcbiAgICB0cnVlX3VybCA9IG5leHRQYWdlO1xcbn1cXG5sb2codHJ1ZV91cmwpO1xcbnZhciBodG1sID0gZmV0Y2godHJ1ZV91cmwsIHtcXG4gICAgaGVhZGVyczoge1xcbiAgICAgICAgY29va2llOiBmZXRjaFBDKCdoaWtlcjovL2ZpbGVzL2NhY2hlL2phdmRiL2phdmRiX2Nvb2tpZS50eHQnKSxcXG4gICAgfVxcbn0pO1xcblxcbnRyeSB7XFxuICAgIC8v57yT5a2Y5LiL5LiA6aG1XFxuICAgIGxldCBuZXh0VXJsID0gcGQoaHRtbCwgXFxcImE6Y29udGFpbnMo5LiL5LiAKSYmaHJlZlxcXCIpO1xcbiAgICBwdXRNeVZhcihcXFwibmV4dFBhZ2VcXFwiLCBuZXh0VXJsIHx8IFxcXCJoaWtlcjovL2VtcHR5XFxcIik7XFxuICAgIC8vbG9nKFxcXCLkuIvkuIDpobXvvJpcXFwiICsgbmV4dFVybClcXG59IGNhdGNoIChlKSB7XFxuICAgIC8vY2xlYXJNeVZhcihcXFwibmV4dFBhZ2VcXFwiKTtcXG4gICAgbGV0IG5leHRVcmwgPSBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgIHRvYXN0KFxcXCLlpb3lg4/msqHmnInkuIvkuIDpobXkuobvvIFcXFwiKTtcXG59XFxuXFxudmFyIHBhZ2VzO1xcbmlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgLy/mvJTlkZjlm75cXG4gICAgdHJ5IHtcXG4gICAgICAgIHZhciBpbWcgPSBwZGZoKGh0bWwsIFxcXCIuc2VjdGlvbi1jb2x1bW5zJiYuaW1hZ2UmJi5hdmF0YXImJnN0eWxlXFxcIik7XFxuICAgICAgICB2YXIg5o+P6L+wMSA9IHBkZmgoaHRtbCwgXFxcIi5hY3Rvci1zZWN0aW9uLW5hbWUmJlRleHRcXFwiKTtcXG4gICAgICAgIHZhciDmj4/ov7AyID0gcGRmaChodG1sLCBcXFwiLnNlY3Rpb24tbWV0YSYmVGV4dFxcXCIpO1xcbiAgICAgICAgdmFyIG51bSA9IOaPj+i/sDIubWF0Y2goL1xcXFxkKy8pWzBdO1xcbiAgICAgICAgdmFyIHBhZ2VzID0gTWF0aC5mbG9vcihudW0gLyA0MCk7XFxuICAgICAgICBpZiAobnVtICUgNDAgIT09IDApIHtcXG4gICAgICAgICAgICBwYWdlcyArPSAxO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIHVybCA9IE1ZX1VSTC5yZXBsYWNlKC9cXFxcL1xcXFwvXFxcXHcrXFxcXC4vLCAnLy9qYXZkYi4nKS5yZXBsYWNlKCdwYWdlPTEnLCAncGFnZT1meXBhZ2UnKTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCJKYXZEQlxcXCIsXFxuICAgICAgICAgICAgZGVzYzogXFxcIjBcXFwiLFxcbiAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgIHVybDogJ2NvcHk6Ly9oaWtlcjovL3BhZ2UveWo/dXJsPScgKyBNWV9VUkwucmVwbGFjZSgvXFxcXC9cXFxcL1xcXFx3K1xcXFwuLywgJy8vamF2ZGIuJykucmVwbGFjZSgncGFnZT0xJywgJ3BhZ2U9ZnlwYWdlJykgKyAnJnJ1bGU9SmF2REInLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiY2FyZF9waWNfMlxcXCIsXFxuICAgICAgICB9KTtcXG4gICAgICAgIHZhciBsaXN0QWN0b3JzID0gSlNPTi5wYXJzZShmZXRjaFBDKCdoaWtlcjovL2ZpbGVzL2NhY2hlL2phdmRiL2phdmRiX2FjdG9yLnR4dCcpIHx8ICdbXScpO1xcbiAgICAgICAgaWYgKGxpc3RBY3RvcnMuaW5kZXhPZijmj4/ov7AxICsgJ0BAJyArIGltZyArICdAQCcgKyB1cmwpID09ICctMScpIHtcXG4gICAgICAgICAgICB2YXIg5o+P6L+wMyA9ICfinpXliqDlhaXmlLbol48nXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHZhciDmj4/ov7AzID0gJ+KdpO+4j+W3suaUtuiXjydcXG4gICAgICAgIH1cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48c21hbGw+PGZvbnQgY29sb3I9XFxcIiNmZTVjNGJcXFwiPuemu+aAneS6lOmmlsK35YW25ZubXFxcXG5cXFxcdFxcXFx0XFxcXHTllJDCt+WFg+eouVxcXFxu5pu+57uP5rKn5rW36Zq+5Li65rC077yMXFxcXG7pmaTljbTlt6vlsbHkuI3mmK/kupHjgIJcXFxcbuWPluasoeiKseS4m+aHkuWbnumhvu+8jFxcXFxu5Y2K57yY5L+u6YGT5Y2K57yY5ZCb44CCXFxcXG5cXFxcbjwvZm9udD48L3NtYWxsPjxiPjxzbWFsbD48Zm9udCBjb2xvcj1cXFwiI0ZGNjY5OVxcXCI+JyArIOaPj+i/sDEuc2xpY2UoMCwgMTApICsgJ1xcXFxuJyArIOaPj+i/sDIgKyAnXFxcXG4nICsg5o+P6L+wMyxcXG4gICAgICAgICAgICAvL3RpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PHNtYWxsPjxmb250IGNvbG9yPVxcXCIjZmU1YzRiXFxcIj7nprvmgJ3kupTpppbCt+WFtuWbm8K35ZSQwrflhYPnqLlcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx05pu+57uP5rKn5rW36Zq+5Li65rC077yMXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdOmZpOWNtOW3q+WxseS4jeaYr+S6keOAglxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHTlj5bmrKHoirHkuJvmh5Llm57pob7vvIxcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx05Y2K57yY5L+u6YGT5Y2K57yY5ZCb44CCXFxcXG48L2ZvbnQ+PC9zbWFsbD48Yj48c21hbGw+PGZvbnQgY29sb3I9XFxcIiNGRjY2OTlcXFwiPiAnICsg5o+P6L+wMS5zbGljZSgwLCAxMCkgKyAnPC9mb250Pjwvc21hbGw+PGI+PHNtYWxsPjxmb250IGNvbG9yPVxcXCIjI0ZGNjY5OVxcXCI+XFxcXG4gJyArIOaPj+i/sDIgKyAnPC9mb250Pjwvc21hbGw+PGI+PHNtYWxsPjxmb250IGNvbG9yPVxcXCIjRkY2Njk5XFxcIj5cXFxcbuS5n+iuuOaciScgKyBwYWdlcyArICfpobXvvIzmsqHpqpfkvaDlkKc8L2ZvbnQ+PC9zbWFsbD4nLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICB2YXIgc3RyID0gZmV0Y2hQQygnaGlrZXI6Ly9maWxlcy9jYWNoZS9qYXZkYi9qYXZkYl9hY3Rvci50eHQnKTtcXG4gICAgICAgICAgICAgICAgaWYgKCFzdHIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gW25hbWVdO1xcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL2phdmRiL2phdmRiX2FjdG9yLnR4dCcsIEpTT04uc3RyaW5naWZ5KGxpc3QpKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gSlNPTi5wYXJzZShzdHIpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QuaW5kZXhPZihuYW1lKSA9PSAnLTEnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC5wdXNoKG5hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS9qYXZkYi9qYXZkYl9hY3Rvci50eHQnLCBKU09OLnN0cmluZ2lmeShsaXN0KSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgY29weShuYW1lKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sIOaPj+i/sDEgKyAnQEAnICsgaW1nICsgJ0BAJyArIHVybCksXFxuICAgICAgICAgICAgZGVzYzogJzAnLFxcbiAgICAgICAgICAgIC8vaW1nOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJjYXJkX3BpY18yXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBcXFwiZ3JhZGllbnRcXFwiOiB0cnVlLFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9IGNhdGNoIHt9XFxuICAgIGlmICh0eXBlb2YgcGFnZXMgIT09ICd1bmRlZmluZWQnICYmIHBhZ2VzICE9PSBudWxsKSB7XFxuICAgICAgICBzZXRJdGVtKCdwYWdlcycsIHBhZ2VzLnRvU3RyaW5nKCkpO1xcbiAgICB9XFxuXFxuICAgIC8v5ryU5ZGY5YiG57G7XFxuICAgIHRyeSB7XFxuICAgICAgICB2YXIgY2F0ZWdvcnkgPSBwZGZhKGh0bWwsIFxcXCIuYWN0b3ItdGFncyYmLnRhZ1xcXCIpXFxuICAgICAgICBsZXQgbm8gPSBnZXRJdGVtKCdubycsICflhajpg6gnKTtcXG4gICAgICAgIGNhdGVnb3J5LmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgdmFyIHRpdGxlID0gcGRmaChpdGVtLCBcXFwiVGV4dFxcXCIpO1xcbiAgICAgICAgICAgIHZhciB1cmwgPSBwZChpdGVtLCBcXFwiYSYmaHJlZlxcXCIpICE9PSAnJyA/IHBkKGl0ZW0sIFxcXCJhJiZocmVmXFxcIikgOiBwZChpdGVtLCBcXFwiYnV0dG9uJiZvbmNsaWNrLmpzOmlucHV0LnNwbGl0KCdcXFxcJycpWzFdXFxcIik7XFxuICAgICAgICAgICAgdXJsID0gdXJsLmluY2x1ZGVzKCc/cGFnZScpID8gdXJsIDogKHVybC5pbmNsdWRlcygnPycpID8gdXJsICsgXFxcIiZwYWdlPTFcXFwiIDogdXJsICsgXFxcIj9wYWdlPTFcXFwiKVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBubyA9PSB0aXRsZSA/ICfigJzigJzigJ3igJ08Yj4nICsgdGl0bGUuZm9udGNvbG9yKCcjRkY2Njk5JykgOiAn4oCc4oCc4oCd4oCdJyArIHRpdGxlLmZvbnRjb2xvcignIzAwMDAwMCcpLFxcbiAgICAgICAgICAgICAgICB1cmw6IHVybCArICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHRpdGxlKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJub1xcXCIsIHRpdGxlKTtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJ1cmxcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICAgICAgfSwgdGl0bGUpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICB9IGNhdGNoIHt9XFxuICAgIC8v5YiG5YmyXFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbiAgICB9KVxcbn1cXG5cXG52YXIgcGFnZXMgPSBnZXRJdGVtKCdwYWdlcycpO1xcblxcbnRyeSB7XFxuICAgIGxldCBub3cgPSBnZXRJdGVtKCdub3cnKTtcXG4gICAgaWYgKHBhZ2VzID4gMSAmJiBwYWdlcyA8IDM3KSB7XFxuICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8PSBwYWdlczsgaisrKSB7XFxuICAgICAgICAgICAgdmFyIHVybCA9IHRydWVfdXJsLnJlcGxhY2UoL3BhZ2U9XFxcXGQrLywgJ3BhZ2U9JyArIGopO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBqID09IE1ZX1BBR0UgfHwgbm93ID09IChqICsgJ+mhtScpID8gJ+KAnOKAnOKAneKAnScgKyAoaiArICfpobUnKS5mb250Y29sb3IoJyNGRjY2OTknKSA6IChqICsgJ+mhtScpLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQodXJsICsgJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGopID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcIm5vd1xcXCIsIChqICsgJ+mhtScpKTtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJ1cmxcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgICAgICB9LCBqKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICB9IGVsc2UgaWYgKHBhZ2VzID4gMzcpIHtcXG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDw9IDYxOyBqICs9IChqID09IDEpID8gMiA6IDMpIHtcXG4gICAgICAgICAgICB2YXIgdXJsID0gdHJ1ZV91cmwucmVwbGFjZSgvcGFnZT1cXFxcZCsvLCAncGFnZT0nICsgaik7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGogPT0gTVlfUEFHRSB8fCBub3cgPT0gKGogKyAn6aG1JykgPyAn4oCc4oCc4oCd4oCdJyArIChqICsgJ+mhtScpLmZvbnRjb2xvcignI0ZGNjY5OScpIDogKGogKyAn6aG1JyksXFxuICAgICAgICAgICAgICAgIHVybDogJCh1cmwgKyAnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFwibm93XFxcIiwgKGogKyAn6aG1JykpO1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInVybFxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgICAgIH0sIGopLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgIH1cXG59IGNhdGNoIHt9XFxuXFxuXFxubGV0IGxpc3QgPSBwZGZhKGh0bWwsICdib2R5JiYuaXRlbScpO1xcbmlmIChsaXN0Lmxlbmd0aCA+IDApIHtcXG4gICAgbGlzdC5mb3JFYWNoKHggPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogcGRmaCh4LCAnLnZpZGVvLXRpdGxlJiZUZXh0JyksXFxuICAgICAgICAgICAgZGVzYzogcGRmaCh4LCAnLm1ldGEmJlRleHQnKSxcXG4gICAgICAgICAgICBpbWc6IHBkKHgsICdpbWd8fGEmJnNyY3x8ZGF0YS1vcmlnaW5hbCcpLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9laj91cmw9JyArIHBkKHgsICdhJiZocmVmJykgKyAnI25vSGlzdG9yeSMnLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMicsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgcGFnZVRpdGxlOiBwZGZoKHgsICcudmlkZW8tdGl0bGUmJlRleHQnKSxcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfSlcXG59IGVsc2Uge1xcbiAgICAvKmZ1bmN0aW9uIGdldEJpZ1RleHQodGV4dCwgY291bnQpIHtcXG4gICAgICAgIGlmIChjb3VudCA+IDApIHtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcXG4gICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuYmlnKCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IC1jb3VudDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnNtYWxsKCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIHRleHQ7XFxuICAgIH1cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIGdldEJpZ1RleHQoXFxcIjxiaWc+PGZvbnQgY29sb3I9JyNGRUJENkYnPuW3sue7j+i2hei/h+S6huacgOe7iOmhteeggTwvZm9udD48L2JpZz48YnI+PHNtYWxsPjxmb250IGNvbG9yPScjRkI2QzczJz7kuI3kv6Hngrnlh7vmiZPlvIDnvZHpobU8L2ZvbnQ+PC9zbWFsbD5cXFwiLCA1KSxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHRydWVfdXJsKSA9PiB7XFxuICAgICAgICAgICAgcmV0dXJuIHRydWVfdXJsXFxuICAgICAgICB9LCB0cnVlX3VybCksXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICB9KSovXFxufVxcblxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pGg5LqM57qn6aG16Z2i5YaF5a65XCIsXCJwYXRoXCI6XCJlalwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXVxcbk1ZX1VSTCA9IE1ZX1VSTC5yZXBsYWNlKCdoaWtlcjovL2VtcHR5IyMnLCAnJyk7XFxubG9nKE1ZX1VSTCk7XFxudmFyIGlkID0gTVlfVVJMLnNwbGl0KCcvJykuYXQoLTEpO1xcbnZhciBodG1sID0gZmV0Y2goTVlfVVJMLCB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgICAgIGNvb2tpZTogZmV0Y2hQQygnaGlrZXI6Ly9maWxlcy9jYWNoZS9qYXZkYi9qYXZkYl9jb29raWUudHh0JyksXFxuICAgIH1cXG59KTtcXG52YXIgYXV0aGVudGljaXR5X3Rva2VuID0gcGRmaChodG1sLCAnaW5wdXRbbmFtZT1cXFwiYXV0aGVudGljaXR5X3Rva2VuXFxcIl0mJnZhbHVlJyk7XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGF6eScsIHt9KSkucnVsZSk7XFxudmFyIHRpdGxlID0gcGRmaChodG1sLCAnaDImJlRleHQnKTtcXG5pZiAodGl0bGUgIT09IG51bGwpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPG1pZGRsZT48Zm9udCBjb2xvcj0jRkZBNTAwPicgKyB0aXRsZSArICc8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgICAgIHVybDogTVlfVVJMLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+WkjeWItuagh+mimCcsXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh0aXRsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJjb3B5Oi8vXFxcIiArIHRpdGxlXFxuICAgICAgICAgICAgICAgIH0sIHRpdGxlKVxcbiAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfnmb7luqbnv7vor5EnLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodGl0bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwieDU6Ly9odHRwczovL2ZhbnlpLmJhaWR1LmNvbS8janAvemgvXFxcIiArIHRpdGxlXFxuICAgICAgICAgICAgICAgIH0sIHRpdGxlKVxcbiAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICdEZWVwbOe/u+ivkScsXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh0aXRsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ4NTovL2h0dHBzOi8vd3d3LmRlZXBsLmNvbS96aC90cmFuc2xhdG9yLW1vYmlsZSNqYS96aC9cXFwiICsgdGl0bGVcXG4gICAgICAgICAgICAgICAgfSwgdGl0bGUpXFxuICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+iwt+atjOe/u+ivkScsXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh0aXRsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ4NTovL2h0dHBzOi8vdHJhbnNsYXRlLmdvb2dsZS5jb20vP2hsPXpoLUNOJnNsPWphJnRsPXpoLUNOJnRleHQ9XFxcIiArIHRpdGxlXFxuICAgICAgICAgICAgICAgIH0sIHRpdGxlKVxcbiAgICAgICAgICAgIH1dXFxuICAgICAgICB9XFxuICAgIH0pXFxufVxcblxcbnZhciDor4bliKvnoIEgPSBwZGZoKGh0bWwsICdib2R5JiYuZmlyc3QtYmxvY2smJi52YWx1ZSYmVGV4dCcpO1xcbnZhciBpbWcgPSBwZChodG1sLCAnLmNvbHVtbi12aWRlby1jb3ZlciYmaW1nJiZzcmMnKTtcXG5kLnB1c2goe1xcbiAgICBpbWc6IGltZyxcXG4gICAgdXJsOiBpbWcsXFxuICAgIGNvbF90eXBlOiAncGljXzFfZnVsbCcsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgdGl0bGU6ICfpm6jop4FTdXBqYXYnLFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgICAgICAgICAgLy9vcGVuQXBwSW50ZW50KCdjb20ueXVqaWFuLlJlc2lkZU1lbnVEZW1vJywgJ2NuLnl1amlhbi5NYWluQWN0aXZpdHknLCB7aW50ZW50RGF0YTogJ2h0dHBzOi8vc3VwamF2LmNvbS96aC8/cz0nICsg6K+G5Yir56CBfSlcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ5amJyb3dzZXI6Ly9zZWFyY2g/cT1odHRwczovL3N1cGphdi5jb20vemgvP3M9XFxcIiArIOivhuWIq+eggVxcbiAgICAgICAgICAgIH0sIOivhuWIq+eggSlcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogJ+afpeeci+e9keWdgCcsXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKOivhuWIq+eggSkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImh0dHBzOi8vc3VwamF2LmNvbS96aC8/cz1cXFwiICsg6K+G5Yir56CBXFxuICAgICAgICAgICAgfSwg6K+G5Yir56CBKVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiAn5aSN5Yi25Zu+54mHJyxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygoaW1nKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiY29weTovL1xcXCIgKyBpbWdcXG4gICAgICAgICAgICB9LCBpbWcpXFxuICAgICAgICB9XVxcbiAgICB9XFxufSk7XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvdG9vbCcsIHt9KSkucnVsZSk7XFxuXFxuXFxubGV0IGluZm8gPSBwZGZhKGh0bWwsICcucGFuZWwmJi5wYW5lbC1ibG9jazptYXRjaGVzKOeVquiZn3zml6XmnJ985pmC6ZW3KScpO1xcbmluZm8uZm9yRWFjaCgobGlzdCwgaW5kZXgpID0+IHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBwZGZoKGxpc3QsICdzdHJvbmcmJlRleHQnKSxcXG4gICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgfSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxmb250IGNvbG9yPSM5MzcwREI+JyArIHBkZmgobGlzdCwgJy52YWx1ZSYmVGV4dCcpICsgJzwvZm9udD4nLFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgICAgICBcXFwiY29weTovL1xcXCIgKyDor4bliKvnoIE7XFxuICAgICAgICAgICAgdG9hc3QoJ+eVquWPt+W3suWkjeWIticpO1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICB9LCDor4bliKvnoIEpLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfosLfmrYzmkJzntKInLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNoP3E9XFxcIiArIOivhuWIq+eggTtcXG4gICAgICAgICAgICAgICAgfSwg6K+G5Yir56CBKVxcbiAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfno4HlipvmkJzmoIfpopgnLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodGl0bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3NvdT9ydWxlPeejgeWKm+WQmy7nroAmcD1meXBhZ2Umc2VhcmNoVGVybXM9XFxcIiArIHRpdGxlXFxuICAgICAgICAgICAgICAgIH0sIHRpdGxlKVxcbiAgICAgICAgICAgIH1dXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBpZiAoaW5kZXggPT0gMCkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogcGRmaChodG1sLCAnLmJ1dHRvbl90byYmc3BhbiwxJiZUZXh0JyksXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpZCwgYXV0aGVudGljaXR5X3Rva2VuLCB1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgZmV0Y2hQQygnaHR0cHM6Ly9qYXZkYjM2NS5jb20vdi8nICsgaWQgKyAnL3Jldmlld3Mvd2FudF90b193YXRjaCcsIHtcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAnYWNjZXB0JzogJ3RleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0LCAqLyo7IHE9MC4wMScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdvcmlnaW4nOiAnaHR0cHM6Ly9qYXZkYjM2NS5jb20nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdyZWZlcmVyJzogdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICd4LWNzcmYtdG9rZW4nOiBhdXRoZW50aWNpdHlfdG9rZW4sXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2Nvb2tpZSc6IGZldGNoUEMoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvamF2ZGIvamF2ZGJfY29va2llLnR4dCcpLFxcbiBcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2F1dGhlbnRpY2l0eV90b2tlbic6IGF1dGhlbnRpY2l0eV90b2tlbixcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sIGlkLCBhdXRoZW50aWNpdHlfdG9rZW4sIE1ZX1VSTCksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgIH0pO1xcblxcbiAgICAgICAgdmFyIGxpc3RWaWRlb3MgPSBKU09OLnBhcnNlKGZldGNoUEMoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvamF2ZGIvamF2ZGJfdmlkZW8udHh0JykgfHwgJ1tdJyk7XFxuICAgICAgICB2YXIgc3RyID0gdGl0bGUgKyAnQEAnICsgaW1nICsgJ0BAJyArIE1ZX1VSTDtcXG4gICAgICAgIGlmIChsaXN0VmlkZW9zLmluZGV4T2Yoc3RyKSA9PSAnLTEnKSB7XFxuICAgICAgICAgICAgdmFyIHQgPSAn4p6V5Yqg5YWl5pS26JePJ1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB2YXIgdCA9ICfinaTvuI/lt7LmlLbol48nXFxuICAgICAgICB9XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9I0ZGMDAwMD4nICsgdCxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgdmFyIHN0ciA9IGZldGNoUEMoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvamF2ZGIvamF2ZGJfdmlkZW8udHh0Jyk7XFxuICAgICAgICAgICAgICAgIGlmICghc3RyKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IFtuYW1lXTtcXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS9qYXZkYi9qYXZkYl92aWRlby50eHQnLCBKU09OLnN0cmluZ2lmeShsaXN0KSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IEpTT04ucGFyc2Uoc3RyKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaXN0LmluZGV4T2YobmFtZSkgPT0gJy0xJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QucHVzaChuYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvamF2ZGIvamF2ZGJfdmlkZW8udHh0JywgSlNPTi5zdHJpbmdpZnkobGlzdCkpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LCBzdHIpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCIsXFxuICAgIH0pXFxufSk7XFxuLy/mvJTlkZhcXG52YXIgYXJ0cyA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5wYW5lbC1ibG9jazpjb250YWlucyjmvJTlk6E6KSYmYScpO1xcbmlmIChhcnRzLmxlbmd0aCA+IDApIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5ryU5ZOhOlxcXCIsXFxuICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfmn6XnnIvnvZHlnYAnLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImh0dHBzOi8vdGhpc2F2LmNvbS9jbi9cXFwiICsg6K+G5Yir56CBICsgXFxcIi11bmNlbnNvcmVkLWxlYWtcXFwiO1xcbiAgICAgICAgICAgICAgICB9LCDor4bliKvnoIEpXFxuICAgICAgICAgICAgfV1cXG4gICAgICAgIH1cXG4gICAgfSlcXG4gICAgZm9yICh2YXIgaSBpbiBhcnRzKSB7XFxuICAgICAgICB2YXIgdGl0bGUgPSBwZGZoKGFydHNbaV0sICdUZXh0Jyk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiI2MxMzE0MVxcXCI+JyArIHRpdGxlICsgJzwvZm9udD48L21pZGRsZT48L2I+JyxcXG4gICAgICAgICAgICB1cmw6IHBkKGFydHNbaV0sICdhJiZocmVmJykgKyAnP3BhZ2U9ZnlwYWdlQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UveWpcXFwiKScsIC8v6ZO+5o6lXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJywgLy/nu4Tku7bmoLflvI9cXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+WkjeWItua8lOWRmCcsXFxuICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodGl0bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly9cXFwiICsgdGl0bGU7XFxuICAgICAgICAgICAgICAgICAgICB9LCB0aXRsZSlcXG4gICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfosLfmrYzmkJzntKInLFxcbiAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHRpdGxlKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJodHRwczovL3d3dy5nb29nbGUuY29tL3NlYXJjaD9xPVxcXCIgKyB0aXRsZTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHRpdGxlKVxcbiAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+eZvuW6puaQnOe0oicsXFxuICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodGl0bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImh0dHBzOi8vd3d3LmJhaWR1LmNvbS9zP3dkPVxcXCIgKyB0aXRsZTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHRpdGxlKVxcbiAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+ejgeWKm+aQnOa8lOWRmCcsXFxuICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodGl0bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9zb3U/cnVsZT3no4HlipvlkJsu566AJnA9ZnlwYWdlJnNlYXJjaFRlcm1zPVxcXCIgKyB0aXRsZVxcbiAgICAgICAgICAgICAgICAgICAgfSwgdGl0bGUpXFxuICAgICAgICAgICAgICAgIH1dXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgfVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXG4gICAgfSlcXG59XFxuXFxuLy/nsbvliKtcXG52YXIgYXJ0cyA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5wYW5lbC1ibG9jazpjb250YWlucyjpoZ7liKUpJiZhJyk7XFxuaWYgKGFydHMubGVuZ3RoID4gMCkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLpoZ7liKU6XFxcIixcXG4gICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgdmlkZW9FeGNsdWRlUnVsZXM6IFsnMjQwJ10sXFxuICAgICAgICAgICAgYmxvY2tSdWxlczogWycuZG9wcGlvY2RuLiddLFxcbiAgICAgICAgICAgIGJsb2NrUnVsZXM6IFsnZG1tLmNvLmpwJ10sXFxuICAgICAgICAgICAgLy92aWRlb1J1bGVzOiBbJyptM3U4KiddLFxcbiAgICAgICAgICAgIGNhY2hlTTN1ODogdHJ1ZSxcXG4gICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn5p+l55yL572R5Z2AJyxcXG4gICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKOivhuWIq+eggSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJodHRwczovL25qYXYudHYvemgvdi9cXFwiICsg6K+G5Yir56CBICsgXFxcIi11bmNlbnNvcmVkLWxlYWtlZFxcXCI7XFxuICAgICAgICAgICAgICAgIH0sIOivhuWIq+eggSlcXG4gICAgICAgICAgICB9XVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgZm9yICh2YXIgaSBpbiBhcnRzKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiIzAwOEI4QlxcXCI+JyArIHBkZmgoYXJ0c1tpXSwgJ1RleHQnKSArICc8L2ZvbnQ+PC9taWRkbGU+PC9iPicsXFxuICAgICAgICAgICAgdXJsOiBwZChhcnRzW2ldLCAnYSYmaHJlZicpICsgJyZwYWdlPWZ5cGFnZUBydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3lqXFxcIiknLCAvL+mTvuaOpVxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgcGFnZVRpdGxlOiBwZGZoKGFydHNbaV0sICdUZXh0JylcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICB9XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbiAgICB9KVxcbn1cXG5cXG4vL+ezu+WIl1xcbnZhciBhcnRzID0gcGRmYShodG1sLCAnYm9keSYmLnBhbmVsLWJsb2NrOmNvbnRhaW5zKOezu+WIlykmJmEnKTtcXG5pZiAoYXJ0cy5sZW5ndGggPiAwKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuezu+WIlzpcXFwiLFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICB9KVxcbiAgICBmb3IgKHZhciBpIGluIGFydHMpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48bWlkZGxlPjxmb250IGNvbG9yPVxcXCIjMDA4QjhCXFxcIj4nICsgcGRmaChhcnRzW2ldLCAnVGV4dCcpICsgJzwvZm9udD48L21pZGRsZT48L2I+JyxcXG4gICAgICAgICAgICB1cmw6IHBkKGFydHNbaV0sICdhJiZocmVmJykgKyAnP3BhZ2U9ZnlwYWdlQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UveWpcXFwiKScsIC8v6ZO+5o6lXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IHBkZmgoYXJ0c1tpXSwgJ1RleHQnKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH1cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgIH0pXFxufVxcbi8v5a+85ryUXFxudHJ5IHtcXG4gICAgdmFyIGRpcmVjdG9yID0gcGRmaChodG1sLCAnLnBhbmVsJiYucGFuZWwtYmxvY2s6bWF0Y2hlcyjlsI7mvJQpJiYudmFsdWUmJlRleHQnKTtcXG4gICAgaWYgKGRpcmVjdG9yKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5bCO5ryUOlxcXCIsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgIH0pXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiIzFFOTBGRlxcXCI+JyArIGRpcmVjdG9yICsgJzwvZm9udD48L21pZGRsZT48L2I+JyxcXG4gICAgICAgICAgICB1cmw6IHBkKGh0bWwsICcucGFuZWwmJi5wYW5lbC1ibG9jazptYXRjaGVzKOWwjua8lCkmJmEmJmhyZWYnKSArICc/cGFnZT1meXBhZ2VAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS95alxcXCIpJywgLy/pk77mjqVcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLCAvL+e7hOS7tuagt+W8j1xcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTogZGlyZWN0b3JcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaycsXFxuICAgICAgICB9KTtcXG4gICAgfVxcblxcbn0gY2F0Y2gge31cXG4vL+eJh+WVhlxcbnRyeSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIueJh+WVhjpcXFwiLFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICB9KVxcbiAgICB2YXIgbWFrZXJzID0gcGRmaChodG1sLCAnLnBhbmVsJiYucGFuZWwtYmxvY2s6bWF0Y2hlcyjniYfllYYpJiYudmFsdWUmJlRleHQnKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiIzFFOTBGRlxcXCI+JyArIG1ha2VycyArICc8L2ZvbnQ+PC9taWRkbGU+PC9iPicsXFxuICAgICAgICB1cmw6IHBkKGh0bWwsICcucGFuZWwmJi5wYW5lbC1ibG9jazptYXRjaGVzKOeJh+WVhikmJmEmJmhyZWYnKSArICcmcGFnZT1meXBhZ2VAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS95alxcXCIpJywgLy/pk77mjqVcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogbWFrZXJzXFxuICAgICAgICB9XFxuICAgIH0pXFxufSBjYXRjaCB7fVxcblxcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxufSlcXG5cXG50cnkge1xcbiAgICB2YXIg55+t6KmVID0gcGRmaChodG1sLCBcXFwiLnRhYnMmJmxpW2RhdGEtbW92aWUtdGFiLXRhcmdldD1yZXZpZXdUYWJdJiZUZXh0XFxcIilcXG4gICAgdmFyIGNpbGkgPSBwZGZhKGh0bWwsICdib2R5JiYuaXRlbS5jb2x1bW5zLmlzLWRlc2t0b3AnKTtcXG4gICAgdmFyIHRhYnMgPSBbXFxcIuejgemPiChcXFwiICsgY2lsaS5sZW5ndGggKyBcXFwiKVxcXCIsIFxcXCLpoJDopr1cXFwiLCDnn63oqZVdO1xcblxcbiAgICBmdW5jdGlvbiBzZXRUYWJzKHRhYnMsIHRhYnVybCkge1xcbiAgICAgICAgdmFyIENvbG9yMSA9IFxcXCIjMTNCNjZBXFxcIjtcXG5cXG4gICAgICAgIGZ1bmN0aW9uIGdldEhlYWQodGl0bGUpIHtcXG4gICAgICAgICAgICByZXR1cm4gJ+KAmOKAmOKAmeKAmTxzdHJvbmc+PGZvbnQgY29sb3I9XFxcIicgKyBDb2xvcjEgKyAnXFxcIj4nICsgdGl0bGUgKyAnPC9mb250Pjwvc3Ryb25nPic7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgQ29sb3IyID0gXFxcIiNmNjcyODBcXFwiO1xcblxcbiAgICAgICAgZnVuY3Rpb24gZ2V0SGVhcih0aXRsZSkge1xcbiAgICAgICAgICAgIHJldHVybiAn4oCY4oCY4oCZ4oCZPHN0cm9uZz48Zm9udCBjb2xvcj1cXFwiJyArIENvbG9yMiArICdcXFwiPicgKyB0aXRsZSArICc8L2ZvbnQ+PC9zdHJvbmc+JztcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGZvciAodmFyIGkgaW4gdGFicykge1xcbiAgICAgICAgICAgIHZhciB0YWJuYW1lID0gdGFic1tpXTtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIodGFidXJsLCAnMScpID09IGkgPyBnZXRIZWFkKHRhYm5hbWUpIDogZ2V0SGVhcih0YWJuYW1lKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbicsXFxuICAgICAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgodGFibmFtZSwgdGFidXJsLCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcih0YWJ1cmwsIGkpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgIH0sIHRhYm5hbWUsIHRhYnVybCwgaSlcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHZhciBsaXN0cyA9IFtdO1xcblxcbiAgICBmdW5jdGlvbiBzZXRMaXN0cyhsaXN0cywgaW5kZXgpIHtcXG4gICAgICAgIGZ1bmN0aW9uIHBsYXlMaXN0cygpIHtcXG4gICAgICAgICAgICBpZiAoaW5kZXggPT0gMSkge1xcbiAgICAgICAgICAgICAgICAvL+mihOiniOinhumikVxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08bWlkZGxlPjxmb250IGNvbG9yPWJsYWNrPvCfk7rpoJDopr3oppbpoLvikaA8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogTVlfVVJMICsgJCgnJykubGF6eVJ1bGUoKOivhuWIq+eggSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBodG1sID0gcmVxdWVzdChpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IHBkZmgoaHRtbCwgXFxcIi5tZXNzYWdlLWJvZHkmJnNvdXJjZSYmc3JjXFxcIilcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1cmwuc3RhcnRzV2l0aChcXFwiaHR0cFxcXCIpICYmIHVybCAhPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IFxcXCJodHRwczpcXFwiICsgdXJsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXJsID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5rKS5pyJ6aCQ6Ka95ZKvXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+aykuaciemgkOimveWSr1xcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9LCDor4bliKvnoIEpLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzInLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPG1pZGRsZT48Zm9udCBjb2xvcj1ibGFjaz7wn5O66aCQ6Ka96KaW6aC74pGhPC9mb250PjwvbWlkZGxlPicsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIiArICQoJycpLmxhenlSdWxlKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VhcmNoID0gXFxcImh0dHBzOi8vamF2c3VidGl0bGVkLmNvbS96aC9zZWFyY2g/a2V5d29yZHM9XFxcIiArIOivhuWIq+eggVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZXVybCA9IFxcXCJodHRwczovL2phdnN1YnRpdGxlZC5jb20vXFxcIiArIHBkZmgocmVxdWVzdChzZWFyY2gpLCBcXFwiYm9keSYmLnZpZGVvYm94JiZhJiZocmVmXFxcIilcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXlsaXN0ID0gZmV0Y2goY29kZXVybCkubWF0Y2goL2h0dHBzPzpcXFxcL1xcXFwvXFxcXFMrXFxcXC5tM3U4LylbMF1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXloZCA9IGZldGNoKHBsYXlsaXN0KS5tYXRjaCgvW15cXFwiXFxcXG5dK1xcXFwubTN1OC9nKS5wb3AoKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXJsID0gcGxheWxpc3QucmVwbGFjZShcXFwicGxheWxpc3QubTN1OFxcXCIsIHBsYXloZClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5oyC5qKv5oiW5rKS5pyJ6aCQ6Ka95ZKvXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0sIOivhuWIq+eggSksXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMicsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAvL+mihOiniOWbvueJh1xcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxpc3IgPSBwZGZhKGh0bWwsIFxcXCIucHJldmlldy1pbWFnZXMmJi50aWxlLWl0ZW1cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsIFxcXCIucHJldmlldy1pbWFnZXMmJi50aWxlLWl0ZW0sMDo5XFxcIilcXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaXN0Lmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxtaWRkbGU+PGZvbnQgY29sb3I9I0ZGOEMwMD7wn6eW8J+Pu+KAjeKZgO+4j+aoo+WTgeWcluWDjzog5YWx5pyJJyArIGxpc3IubGVuZ3RoICsgJ+W8teWclueJh/CfkYc8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBNWV9VUkwgKyAkKCcnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IHJlcXVlc3QoaW5wdXQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGljcyA9IHBkZmEoaHRtbCwgXFxcIi5wcmV2aWV3LWltYWdlcyYmLnRpbGUtaXRlbVxcXCIpLm1hcChpdGVtID0+IHBkZmgoaXRlbSwgXFxcImEmJmhyZWZcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwicGljczovL1xcXCIgKyBwaWNzLmpvaW4oXFxcIiYmXFxcIilcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8xJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGxpc3QuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IHBkZmgoaXRlbSwgXFxcImEmJmhyZWZcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBwZGZoKGl0ZW0sIFxcXCJhJiZocmVmXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicGljXzNfc3F1YXJlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIHt9XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PSAwKSB7XFxuICAgICAgICAgICAgICAgIC8v56OB5Yqb5YaF5a65XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICBjaWxpLmZvckVhY2godmlkZW8gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IHBkZmgodmlkZW8sICdhJiZUZXh0Jyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBwZGZoKHZpZGVvLCAnLm1ldGEmJlRleHQnKS5tYXRjaCgvXFxcXGQrKD86XFxcXC5cXFxcZCspP1tnbV0oYik/L2kpWzBdXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gJzAuMDBHQidcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHBkZmgodmlkZW8sICcudGFncyYmVGV4dCcpXFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXC4/dG9ycmVudC9nLCAnJylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcLj9tcDQvZ2ksICcnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFwuP2F2aS9naSwgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXC4/aGQvZ2ksICcnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFwuP21rdi9naSwgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXF8/c2QvZ2ksICcnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxkKyg/OlxcXFwuXFxcXGQrKT9bZ21dKGIpPy9naSwgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXGQr5YCL5paH5Lu2L2csICcnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxzL2csICcnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL0BbXFxcXHU0ZTAwLVxcXFx1OWZhNV0rL2csICcnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL0AvZywgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXCwvZywgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgv44CQLio/44CRL2csICcnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxbLio/XFxcXF0vZywgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXC4/W1xcXFx1NGUwMC1cXFxcdTlmYTVcXFxcdTA4MDAtXFxcXHU0ZTAwXFxcXHUzMDQwLVxcXFx1MzBmZl0rL2csICcnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFwuP1tcXFxcdTMwNDAtXFxcXHUzMDlGXFxcXHUzMEEwLVxcXFx1MzBGRl0rL2csICcnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL15cXFxcZCtcXFxcLS8sICcnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL15cXFxcLSsvLCAnJylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9eXFxcXF8rLywgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXCgvZywgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXCkvZywgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXC0kLywgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXCMkLywgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXChcXFxcdytcXFxcKS9nLCAnJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IHRhZyArICfwn5OAXFxcXHQnICsgc2l6ZSArICdcXFxcdFxcXFx08J+Xk1xcXFx0JyArIHBkZmgodmlkZW8sICcudGltZSYmVGV4dCcpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiAnaHR0cHM6Ly9pbWcudmludWEuY24vaW1hZ2VzL09jcXBqLnBuZycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogcGQodmlkZW8sICdhJiZocmVmJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH0gY2F0Y2gge31cXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID09IDIpIHtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSBwZChodG1sLCBcXFwiLnRhYnMmJmxpW2RhdGEtbW92aWUtdGFiLXRhcmdldD1yZXZpZXdUYWJdJiZhJiZkYXRhLXVybFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICB2YXIgaCA9IGZldGNoKHVybClcXG4gICAgICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gcGRmYShoLCBcXFwiLm1lc3NhZ2UtYm9keSYmLnJldmlldy1pdGVtOmhhcygucmV2aWV3LXRpdGxlKVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICBsaXN0LmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2MgPSAnPG1pZGRsZT48Zm9udCBjb2xvcj0jRkY4QzAwPicgKyBwZGZoKGl0ZW0sIFxcXCIucmV2aWV3LXRpdGxlLS0ubGlrZXMtLS5yZXBvcnQmJlRleHRcXFwiKSArICc8L2ZvbnQ+PC9taWRkbGU+JztcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZGVzYyArICc8YnI+JyArICc8c21hbGw+PGZvbnQgY29sb3I9I2ZmNjg3Nz5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0JyArIHBkZmgoaXRlbSwgXFxcIi5jb250ZW50JiZUZXh0XFxcIikgKyAnPC9mb250Pjwvc21hbGw+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHNtYWxsPjxmb250IGNvbG9yPSMxM0I2NkE+5pu05aSa55+t6KmV5Y+v5oiQ5Li6VklQ5oiW6Iez5a6Y5pa5QXBw5Lit5p+l55yLPC9mb250Pjwvc21hbGw+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJycpLmxhenlSdWxlKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbkFwcEludGVudCgneHh4LnBvcm5odWIuZnVjaycsICd4eHgucG9ybmh1Yi5mdWNrLk1haW5BY3Rpdml0eScsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudERhdGE6IOivhuWIq+eggVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly9cXFwiICsg6K+G5Yir56CBXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwg6K+G5Yir56CBKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH0gY2F0Y2gge31cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBwbGF5TGlzdHMoKVxcbiAgICB9XFxuXFxuICAgIHNldFRhYnModGFicywgTVlfVVJMKTtcXG4gICAgc2V0TGlzdHMobGlzdHMsIGdldE15VmFyKE1ZX1VSTCwgJzEnKSk7XFxufSBjYXRjaCAoZSkge31cXG5cXG50cnkge1xcbiAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5tZXNzYWdlOm1hdGNoZXMo6YKE5Ye65ryU6YGOKSYmLnRpbGUtc21hbGwmJmEnKTtcXG4gICAgaWYgKGxpc3QubGVuZ3RoICE9IDApIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6ICNmNjcyODA7XFxcIj48Yj5UQSjlgJEp6YKE5Ye65ryU6YGOPC9zcGFuPicsXFxuICAgICAgICAgICAgcGljX3VybDogXFxcImh0dHBzOi8vbGFubWVpZ3VvamlhbmcuY29tL3R1Ymlhby9rZS8xMDAucG5nXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXG4gICAgICAgIH0pO1xcbiAgICAgICAgbGlzdC5mb3JFYWNoKHZpZGVvID0+IHtcXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSBwZGZoKHZpZGVvLCAnLnZpZGVvLW51bWJlciYmVGV4dCcpICsgJyAnICsgcGRmaCh2aWRlbywgJ2EmJnRpdGxlJyk7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBwZGZoKHZpZGVvLCAnLnZpZGVvLW51bWJlciYmVGV4dCcpLFxcbiAgICAgICAgICAgICAgICBpbWc6IHBkKHZpZGVvLCAnaW1nJiZzcmMnKSArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgICAgICAgICB1cmw6IHBkKHZpZGVvLCAnYSYmaHJlZicpICsgJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiZWpcXFwiKScsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMycsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9KTtcXG4gICAgfVxcbn0gY2F0Y2ggKGVycikge307XFxuXFxuXFxuXFxuXFxudHJ5IHtcXG4gICAgdmFyIGxpc3QyID0gcGRmYShodG1sLCAnYm9keSYmLm1lc3NhZ2U6bWF0Y2hlcyjkvaDlj6/og73kuZ/llpzmraEpJiYudGlsZS1zbWFsbCYmYScpOyAvL+WIl+ihqFxcbiAgICBpZiAobGlzdDIubGVuZ3RoICE9IDApIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6ICNmNjcyODA7XFxcIj48Yj7kvaDlj6/og73kuZ/llpzmraE8L3NwYW4+JyxcXG4gICAgICAgICAgICBwaWNfdXJsOiBcXFwiaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL2tlLzEwMC5wbmdcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0J1xcbiAgICAgICAgfSk7XFxuICAgICAgICBsaXN0Mi5mb3JFYWNoKHZpZGVvID0+IHtcXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSBwZGZoKHZpZGVvLCAnLnZpZGVvLW51bWJlciYmVGV4dCcpICsgJyAnICsgcGRmaCh2aWRlbywgJ2EmJnRpdGxlJyk7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBwZGZoKHZpZGVvLCAnLnZpZGVvLW51bWJlciYmVGV4dCcpLFxcbiAgICAgICAgICAgICAgICBpbWc6IHBkKHZpZGVvLCAnaW1nJiZzcmMnKSArIFxcXCJAUmVmZXJlcj1cXFwiLCAvL+WbvueJh1xcbiAgICAgICAgICAgICAgICB1cmw6IHBkKHZpZGVvLCAnYSYmaHJlZicpICsgJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiZWpcXFwiKScsIC8v6ZO+5o6lXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMycsIC8v57uE5Lu25qC35byPXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9KTtcXG4gICAgfVxcbn0gY2F0Y2ggKGVycikge307XFxuXFxuXFxuLyp2YXIg6K+G5Yir56CBID0gZ2V0UGFnZVRpdGxlKCkuc3BsaXQoXFxcIiBcXFwiKVswXS5yZXBsYWNlKFxcXCJGQzJcXFwiLCBcXFwiRkMyLVBQVlxcXCIpO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwiZmMy6ZyA6KaBVklQ55m75b2VXFxcIixcXG4gICAgZGVzYzogXFxcIjMwMOWkp+a0i++8jOS4jeeci+S5n+e9ou+8jOiwt+atjOaQnOe0ouS4gOS4i1xcXCIsXFxuICAgIHVybDogXFxcImh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNoP3E9XFxcIiArIOivhuWIq+eggSxcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICB9XFxufSk7XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvdG9vbCcsIHt9KSkucnVsZSk7Ki9cXG5cXG5cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaUtuiXj1wiLFwicGF0aFwiOlwi5pS26JePXCIsXCJydWxlXCI6XCJbJ+a8lOWRmCcsICflvbHniYcnXS5mb3JFYWNoKChsaXN0LCBpbmRleCkgPT4ge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGluZGV4ID09IGdldE15VmFyKCdjb2xsZWN0JywgJzAnKSA/ICfigJjigJjigJnigJk8Yj48Zm9udCBjb2xvcj1cXFwiI0ZGNjY5OVxcXCI+JyArIGxpc3QgOiBsaXN0LFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpbmRleCkgPT4ge1xcbiAgICAgICAgICAgIHB1dE15VmFyKCdjb2xsZWN0JywgaW5kZXgpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgfSwgaW5kZXgpLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICB9KTtcXG59KTtcXG52YXIgdSA9IGdldE15VmFyKCdjb2xsZWN0JywgJzAnKSA9PSAnMCcgPyAnaGlrZXI6Ly9maWxlcy9jYWNoZS9qYXZkYi9qYXZkYl9hY3Rvci50eHQnIDogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvamF2ZGIvamF2ZGJfdmlkZW8udHh0JztcXG52YXIgbGlzdCA9IEpTT04ucGFyc2UoZmV0Y2hQQyh1KSB8fCAnW10nKTtcXG5saXN0LmZvckVhY2goKGxpc3QpID0+IHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBsaXN0LnNwbGl0KCdAQCcpWzBdLFxcbiAgICAgICAgaW1nOiBsaXN0LnNwbGl0KCdAQCcpWzFdLFxcbiAgICAgICAgdXJsOiBnZXRNeVZhcignY29sbGVjdCcsICcwJykgPT0gJzAnID8gJ2hpa2VyOi8vcGFnZS95aicgOiAnaGlrZXI6Ly9wYWdlL2VqJyxcXG4gICAgICAgIGNvbF90eXBlOiBnZXRNeVZhcignY29sbGVjdCcsICcwJykgPT0gJzAnID8gJ2NhcmRfcGljXzMnIDogJ21vdmllXzInLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICB1cmw6IGxpc3Quc3BsaXQoJ0BAJylbMl0sXFxuICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+WPlua2iOaUtuiXjycsXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChsaXN0LCB1KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2UoZmV0Y2hQQyh1KSB8fCAnW10nKTtcXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLmZpbHRlcih4ID0+IHggIT0gbGlzdCk7XFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUodSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcXG4gICAgICAgICAgICAgICAgfSwgbGlzdCwgdSlcXG4gICAgICAgICAgICB9XSxcXG4gICAgICAgIH1cXG4gICAgfSk7XFxufSk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJ1c2Vyc1wiLFwicGF0aFwiOlwidXNlcnNcIixcInJ1bGVcIjpcInJjKGZldGNoUEMoJ2h0dHBzOi8vZ2l0ZWUuY29tL21pc3R5d2F0ZXIvaGlrZXJfaW5mby9yYXcvbWFzdGVyL2dpdGh1YnByb3h5Lmpzb24nKSArICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbWlzdHl3YXRlci9oaWtlci9tYWluL2YnLCAyNCk7XFxudmFyIGRhdGFDbGFzczAgPSBbe1xcbiAgICB0aXRsZTogJ+W9seeJhybmlLbol48m5biz6JmfJyxcXG4gICAgaWQ6ICcwJjEmMidcXG59XTtcXG5kYXRhQ2xhc3MwLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XFxuICAgIGNsYXNzVG9wKGluZGV4LCBpdGVtLCAnbXknLCBkLCAxKTtcXG59KTtcXG52YXIgaW5kZXgwID0gZ2V0TXlWYXIoJ215Y2luZGV4MCcsICcwJyk7XFxudmFyIF9jID0gZ2V0TXlWYXIoJ215YzAnLCAnMCcpO1xcbmlmIChfYyAhPSBnZXRNeVZhcignbXlfYycsICcwJykpIHtcXG4gICAgY2xlYXJNeVZhcignbXljMScpO1xcbiAgICBwdXRNeVZhcignbXljaW5kZXgxJywgJzAnKTtcXG59XFxuc3dpdGNoIChpbmRleDApIHtcXG4gICAgY2FzZSAnMCc6XFxuICAgICAgICB2YXIgZGF0YUNsYXNzMSA9IFt7XFxuICAgICAgICAgICAgdGl0bGU6ICfov5HmnJ/ngI/opr0m5oOz55yL55qE5b2x54mHJueci+mBjueahOW9seeJhybmiJHnmoTmuIXllq4m5pS26JeP55qE5riF5ZauJyxcXG4gICAgICAgICAgICBpZDogJ3JlY2VudF92aWRlb3Mmd2FudF93YXRjaF92aWRlb3Mmd2F0Y2hlZF92aWRlb3MmbGlzdHMmZmF2b3JpdGVfbGlzdHMnXFxuICAgICAgICB9XTtcXG4gICAgICAgIHZhciBteWMxID0gJ3JlY2VudF92aWRlb3MnO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJzEnOlxcbiAgICAgICAgdmFyIGRhdGFDbGFzczEgPSBbe1xcbiAgICAgICAgICAgIHRpdGxlOiAn5ryU5ZOhJuezu+WIlybniYfllYYm5bCO5ryUJueVquiZnycsXFxuICAgICAgICAgICAgaWQ6ICdjb2xsZWN0aW9uX2FjdG9ycyZjb2xsZWN0aW9uX3NlcmllcyZjb2xsZWN0aW9uX21ha2VycyZjb2xsZWN0aW9uX2RpcmVjdG9ycyZjb2xsZWN0aW9uX2NvZGVzJ1xcbiAgICAgICAgfV07XFxuICAgICAgICB2YXIgbXljMSA9ICdjb2xsZWN0aW9uX2FjdG9ycyc7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAnMic6XFxuICAgICAgICB2YXIgZGF0YUNsYXNzMSA9IFt7XFxuICAgICAgICAgICAgdGl0bGU6ICflgIvkurrkv6Hmga8m5pSv5LuY6KiY6YyEJueZu+W9lSbpgIDlh7onLFxcbiAgICAgICAgICAgIGlkOiAncHJvZmlsZSZ0cmFuc2FjdGlvbl9sb2dzJmxvZ2luJmxvZ291dCdcXG4gICAgICAgIH1dO1xcbiAgICAgICAgdmFyIG15YzEgPSAncHJvZmlsZSc7XFxuICAgICAgICBicmVhaztcXG59XFxuZGF0YUNsYXNzMS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xcbiAgICBjbGFzc1RvcChwYXJzZUludChpbmRleCkgKyAxLCBpdGVtLCAnbXknLCBkLCAxLCAxKTtcXG59KTtcXG5cXG5odG1sID0gZmV0Y2goJ2h0dHBzOi8vamF2ZGIzNjUuY29tL3VzZXJzLycgKyBnZXRNeVZhcignbXljMScsIG15YzEpLCB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgICAgIGNvb2tpZTogZmV0Y2hQQygnaGlrZXI6Ly9maWxlcy9jYWNoZS9qYXZkYi9qYXZkYl9jb29raWUudHh0JyksXFxuICAgIH0sXFxuICAgIHJlZGlyZWN0OiBmYWxzZVxcbn0pO1xcblxcbmlmICgvdmlkZW9zLy50ZXN0KGdldE15VmFyKCdteWMxJywgbXljMSkpKSB7XFxuICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCAnLm1vdmllLWxpc3QmJi5pdGVtJyk7XFxuICAgIGxpc3QuZm9yRWFjaCgobGlzdCkgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogcGRmaChsaXN0LCAnLnZpZGVvLXRpdGxlJiZUZXh0JyksXFxuICAgICAgICAgICAgaW1nOiBwZChsaXN0LCAnaW1nJiZzcmMnKSxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvZWonLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMicsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgdXJsOiBwZChsaXN0LCAnYSYmaHJlZicpLFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9KTtcXG59IGVsc2UgaWYgKC9jb2xsZWN0aW9uLy50ZXN0KGdldE15VmFyKCdteWMxJywgbXljMSkpKSB7XFxuICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCAnYm9keSYmZGl2LmJveCcpO1xcbiAgICBsaXN0LmZvckVhY2goKGxpc3QpID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHBkZmgobGlzdCwgJ3N0cm9uZyYmVGV4dCcpLFxcbiAgICAgICAgICAgIGltZzogcGQobGlzdCwgJ2ltZyYmc3JjJyksXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL3lpJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzMnLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIHVybDogcGQobGlzdCwgJ2EmJmhyZWYnKSxcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfSk7XFxufSBlbHNlIGlmICgvbG9naW4vLnRlc3QoZ2V0TXlWYXIoJ215YzEnLCBteWMxKSkpIHtcXG4gICAgaWYoZmV0Y2hQQygnaGlrZXI6Ly9maWxlcy9jYWNoZS9qYXZkYi9qYXZkYl9jb29raWUudHh0Jykpe1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogc2IoJ+i0puWPt+W3sueZu+W9lScsJ2ZmMDAwMCcpLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfngrnlh7vnmbvlvZXotKblj7cnLFxcbiAgICAgICAgdXJsOiAkKCdodHRwczovL2phdmRiMzY1LmNvbS9sb2dpbicpLnJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHZhciBkID0gW107XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZScsXFxuICAgICAgICAgICAgICAgIHVybDogTVlfVVJMLFxcbiAgICAgICAgICAgICAgICBkZXNjOiAnbGlzdCYmc2NyZWVuJyxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIHVhOiBQQ19VQSxcXG4gICAgICAgICAgICAgICAgICAgIHNob3dQcm9ncmVzczogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrKCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xldCBub2RlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyN0YWdzJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbyA9IGZiYS5nZXRDb29raWUodSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZmJhLmxvZygnY286Ojo6OjonICsgY28pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY28uaW5jbHVkZXMoJ3JlbWVtYmVyX21lX3Rva2VuJykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiYS5wYXJzZUxhenlSdWxlKCQkJCgpLmxhenlSdWxlKChjbykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS9qYXZkYi9qYXZkYl9jb29raWUudHh0JywgY28pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KCfotKblj7flt7LnmbvlvZUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgY28pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2ssIDUwMCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2soKTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIE1ZX1VSTClcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiBzZXRSZXN1bHQoZCk7XFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgfSk7XFxufWVsc2UgaWYgKC9sb2dvdXQvLnRlc3QoZ2V0TXlWYXIoJ215YzEnLCBteWMxKSkpIHtcXG4gICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL2phdmRiL2phdmRiX2Nvb2tpZS50eHQnLCAnJyk7XFxuICAgIHRvYXN0KCfotKblj7flt7Lnmbvlh7onKTtcXG59XFxucHV0TXlWYXIoJ215X2MnLCBfYyk7XCJ9XSIsImljb24iOiJodHRwczovL2MwLmpkYnN0YXRpYy5jb20vaW1hZ2VzL2xvZ29fMTIweDEyMC5wbmciLCJwcm94eSI6IiJ9
Add Comment
Please, Sign In to add comment