Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥断插接口设置-Ⓤ““””OK解析@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIlBhcnNlX0RuLXZ1ZS5odG1sXCIsXCJwYXRoXCI6XCJQYXJzZV9Ebi5odG1sXCIsXCJydWxlXCI6XCI8IURPQ1RZUEUgaHRtbD5cXG48aHRtbD5cXG48aGVhZD5cXG4gICAgPG1ldGEgY2hhcnNldD1cXFwidXRmLThcXFwiPlxcbiAgICA8bWV0YSBuYW1lPVxcXCJ2aWV3cG9ydFxcXCIgY29udGVudD1cXFwid2lkdGg9ZGV2aWNlLXdpZHRoLGluaXRpYWwtc2NhbGU9MSxtaW5pbXVtLXNjYWxlPTEsbWF4aW11bS1zY2FsZT0xLHVzZXItc2NhbGFibGU9bm9cXFwiIC8+XFxuICAgIDx0aXRsZT5QYXJzZV9Ebl92dWU8L3RpdGxlPlxcbiAgICA8c2NyaXB0PlxcbiAgICAgICAgY29uc3QgdnVlUGF0aCA9ICdoaWtlcjovL2ZpbGVzL3J1bGVzL2R6SG91c2UvanMvdnVlLmpzJztcXG4gICAgICAgIGlmKHR5cGVvZihmYmEpPT0ndW5kZWZpbmVkJ3x8IWZiYSl7XFxuICAgICAgICAgICAgdmFyIGZiYSA9IGZ5X2JyaWRnZV9hcHA7XFxuICAgICAgICB9XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIGlmKHR5cGVvZihyZXF1ZXN0KT09J3VuZGVmaW5lZCd8fCFyZXF1ZXN0KXtcXG4gICAgICAgICAgICAgICAgZXZhbChmYmEuZ2V0SW50ZXJuYWxKcygpKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy8gZmJhLmxvZyh2dWVQYXRoKTtcXG4gICAgICAgICAgICBpZighcmVxdWVzdCh2dWVQYXRoKSl7XFxuICAgICAgICAgICAgICAgIGZiYS53cml0ZUZpbGUodnVlUGF0aCxyZXF1ZXN0KCdodHRwOi8vaGlrZXIubm9raWEucHJlc3MvaGlrZXJ1bGUvcnVsZWxpc3QuanNvbj9pZD0xODIzJykpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICBldmFsKGZiYS5mZXRjaCh2dWVQYXRoKSk7XFxuICAgICAgICAgICAgfWNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGUubWVzc2FnZSk7XFxuICAgICAgICAgICAgICAgIGZiYS5sb2coZS5tZXNzYWdlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy8gZmJhLmxvZygn5Yqg6L29dnVl57uE5Lu25a6M5q+VJyk7XFxuICAgICAgICB9Y2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICBhbGVydChlLm1lc3NhZ2UpO1xcbiAgICAgICAgfVxcbiAgICA8L3NjcmlwdD5cXG4gICAgPCEtLSAgICA8c2NyaXB0IHNyYz1cXFwiaHR0cHM6Ly91bnBrZy5jb20vdnVlQG5leHRcXFwiPjwvc2NyaXB0Pi0tPlxcbiAgICA8IS0tICAgIDxzY3JpcHQgc3JjPVxcXCJmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9ydWxlcy9kekhvdXNlL2pzL3Z1ZS5qc1xcXCI+PC9zY3JpcHQ+LS0+XFxuICAgIDxzdHlsZT5cXG4gICAgICAgIGJvZHkge1xcbiAgICAgICAgICAgIG1hcmdpbjogMCA1cHggMCA1cHg7XFxuICAgICAgICAgICAgcGFkZGluZzogMCAwcHggMCAwcHg7XFxuICAgICAgICAgICAgLyogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjlGMERBOyovXFxuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDA7XFxuICAgICAgICAgICAgZm9udC1mYW1pbHk6IFxcXCJNaWNyb3NvZnQgWWFIZWlcXFwiLFxcXCLlrovkvZNcXFwiLFxcXCJTZWdvZSBVSVxcXCIsIFxcXCJMdWNpZGEgR3JhbmRlXFxcIiwgSGVsdmV0aWNhLCBBcmlhbCxzYW5zLXNlcmlmLCBGcmVlU2FucywgQXJpbW87XFxuICAgICAgICB9XFxuICAgICAgICAjYXBwe1xcbiAgICAgICAgICAgIG1hcmdpbi10b3A6LTEwcHg7XFxuICAgICAgICB9XFxuICAgICAgICAjdGlwc3tcXG4gICAgICAgICAgICBtYXJnaW4tdG9wOi0xMHB4O1xcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206NXB4O1xcbiAgICAgICAgfVxcbiAgICAgICAgLmZ1bmd7XFxuICAgICAgICAgICAgdGV4dC1hbGlnbjpjZW50ZXJcXG4gICAgICAgIH1cXG4gICAgICAgIGRpdi5ib3gge1xcbiAgICAgICAgICAgIG1hcmdpbi10b3A6LTFweDtcXG4gICAgICAgICAgICBoZWlnaHQ6IDQzcHg7XFxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7XFxuICAgICAgICB9XFxuICAgICAgICAvKui+k+WFpeahhuWwuuWvuCovXFxuICAgICAgICBmb3JtIHtcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpbnB1dCwgbGFiZWwsIHNlbGVjdCB7XFxuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xcbiAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7XFxuICAgICAgICB9XFxuICAgICAgICAvKuWtl+S9k+S9jee9riovXFxuICAgICAgICBpbnB1dCB7XFxuICAgICAgICAgICAgd2lkdGg6IDc3JTtcXG4gICAgICAgICAgICBoZWlnaHQ6IDMycHg7XFxuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiA2NnB4O1xcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDBweDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGxhYmVsIHtcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjtcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogNDNweDtcXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XFxuICAgICAgICAgICAgd2lkdGg6IDYwcHg7XFxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIC8q5bCP5qGGKi9cXG4gICAgICAgIC5iYXIgbGFiZWwge1xcbiAgICAgICAgICAgIC8qYmFja2dyb3VuZDogI0QwNkI2QzsqL1xcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDVweCA1NTVweCA1NTVweCA1cHg7XFxuICAgICAgICAgICAgd2lkdGg6IDYwcHg7XFxuICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xcbiAgICAgICAgICAgIHRvcDogMDtcXG4gICAgICAgICAgICBsZWZ0OiAzcHg7XFxuICAgICAgICB9XFxuXFxuICAgICAgICAvKui+k+WFpeahhuagt+W8jyovXFxuICAgICAgICAuYmFyIGlucHV0IHtcXG4gICAgICAgICAgICAvKmJvcmRlci1yYWRpdXM6IDVweCA1NTVweCA1NTVweCA1cHg7XFxuICAgICAgICAgICAgICovXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgLyrliJfooagqL1xcbiAgICAgICAgc2VsZWN0IHtcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjtcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDo0MHB4O1xcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcXG4gICAgICAgICAgICB3aWR0aDogMjBweDtcXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgLyrliJfooagqL1xcbiAgICAgICAgLmxpZWIgc2VsZWN0e1xcbiAgICAgICAgICAgIC8qYm9yZGVyLXJhZGl1czogNHB4OyovXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTU1cHggNXB4IDVweCA1NTVweDtcXG4gICAgICAgICAgICB3aWR0aDogODBweDtcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjtcXG4gICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XFxuICAgICAgICAgICAgdG9wOiAwO1xcbiAgICAgICAgICAgIHJpZ2h0OiAycHg7XFxuICAgICAgICB9XFxuXFxuICAgICAgICAvKuWktOWDjyovXFxuICAgICAgICAucm91bmRfaWNvbntcXG4gICAgICAgICAgICB3aWR0aDogNDBweDtcXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICAgICAgfVxcbiAgICA8L3N0eWxlPlxcbjwvaGVhZD5cXG48Ym9keT5cXG48ZGl2IGNsYXNzPVxcXCJmdW5nXFxcIj5cXG4gICAgPGEgc3R5bGU9XFxcImZsb2F0OmxlZnQ7XFxcIj5cXG4gICAgICAgIDxidXR0b24gIDpzdHlsZT1cXFwiJ2JvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogJyt0aGVtZXMuY2xvc2VCdG4uYmFja2dyb3VuZCsnO3dpZHRoOiA4MHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICcrdGhlbWVzLmNsb3NlQnRuLmNvbG9yXFxcIiBvbmNsaWNrPVxcXCJjYW5jZWwoKTtcXFwiPuWFsyDpl608L2J1dHRvbj5cXG4gICAgPC9hPlxcbiAgICA8YSBjbGFzcz1cXFwiYnRuIGJ0bi1wcmltYXJ5XFxcIj5cXG4gICAgICAgIDxidXR0b24gIDpzdHlsZT1cXFwiJ2JvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogJyt0aGVtZXMudGlwc0J0bi5iYWNrZ3JvdW5kKyc7d2lkdGg6IDEyMHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICcrdGhlbWVzLnRpcHNCdG4uY29sb3JcXFwiIEBjbGljaz1cXFwic2hvd1RpcHM9IXNob3dUaXBzXFxcIj57e3Nob3dUaXBzP1xcXCLpmpDol4/mj5DnpLpcXFwiOlxcXCLmmL7npLrmj5DnpLpcXFwifX08L2J1dHRvbj5cXG4gICAgPC9hPlxcbiAgICA8YSBzdHlsZT1cXFwiZmxvYXQ6cmlnaHRcXFwiPlxcbiAgICAgICAgPGJ1dHRvbiA6c3R5bGU9XFxcIidib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6ICcrdGhlbWVzLnNhdmVCdG4uYmFja2dyb3VuZCsnO3dpZHRoOiA4MHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICcrdGhlbWVzLnNhdmVCdG4uY29sb3JcXFwiIG9uY2xpY2s9XFxcImNsaWNrbWUoJ+mFjSDnva4g5beyIOS/nSDlrZgg77yBJywgMTAwMCwgJ+W8gCcpO1xcXCI+5L+dIOWtmDwvYnV0dG9uPlxcbiAgICA8L2E+XFxuXFxuPC9kaXY+XFxuPGJyPlxcbjxkaXYgaWQ9XFxcImFwcFxcXCI+XFxuICAgIDxoNiBpZD1cXFwidGlwc1xcXCIgdi1odG1sPVxcXCJ0aXBzXFxcIiB2LXNob3c9XFxcInNob3dUaXBzXFxcIj48L2g2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJib3ggYmFyXFxcIiB2LWZvcj1cXFwib3B0aW9uIGluIG9wdGlvbnNcXFwiPlxcbiAgICAgICAgPGZvcm0+XFxuICAgICAgICAgICAgPGxhYmVsIHR5cGU9XFxcInN1Ym1pdFxcXCIgOnN0eWxlPVxcXCInYmFja2dyb3VuZDonK3RoZW1lcy5iYXJsYWJlbC5iYWNrZ3JvdW5kKyc7Y29sb3I6Jyt0aGVtZXMuYmFybGFiZWwuY29sb3JcXFwiPnt7IG9wdGlvbi5uYW1lIH19PC9sYWJlbD5cXG4gICAgICAgICAgICA8aW5wdXQgOnN0eWxlPVxcXCInYmFja2dyb3VuZDonK3RoZW1lcy5iYXJJbnB1dC5iYWNrZ3JvdW5kKyc7Ym9yZGVyOiAzcHggc29saWQgJyt0aGVtZXMuYmFySW5wdXQuY29sb3JcXFwiIHR5cGU9XFxcInRleHRcXFwiIG9uY2xpY2s9XFxcInJlc2V0U2VsZWN0KHRoaXMuaWQpXFxcIiA6cGxhY2Vob2xkZXI9XFxcIm9wdGlvbi5wbGFjZWhvbGRlcnx8cGxhY2Vob2xkZXJcXFwiIHYtbW9kZWw9XFxcIm9wdGlvbi52YWx1ZVxcXCIgdi1iaW5kOmlkPVxcXCJvcHRpb24uaWRcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImxpZWJcXFwiPlxcbiAgICAgICAgICAgICAgICA8c2VsZWN0IDpzdHlsZT1cXFwiJ2JhY2tncm91bmQ6Jyt0aGVtZXMuc2VsZWN0LmJhY2tncm91bmQrJztjb2xvcjonK3RoZW1lcy5zZWxlY3QuY29sb3JcXFwiIDpjbGVhcmFibGU9XFxcInRydWVcXFwiIHNpemU9XFxcIjJcXFwiIDppZD1cXFwib3B0aW9uLmlkKydTZWxlY3QnXFxcIiA6bmFtZT1cXFwib3B0aW9uLmlkXFxcIiBvbmNoYW5nZT1cXFwiZ2V0T3B0aW9uKHRoaXMuaWQsdGhpcy5uYW1lKVxcXCIgIHYtbW9kZWw9XFxcIm9wdGlvbi52YWx1ZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHYtaWY9XFxcIm9wdGlvbi5pZCE9PSdxanUnJiZvcHRpb24uaWQhPT0nY2onXFxcIiA6dmFsdWU9XFxcInNlbFxcXCIgOmtleT1cXFwiaW5kZXhcXFwiIHYtZm9yPVxcXCIoc2VsLGluZGV4KSBpbiBteVNlbGVjdFxcXCI+e3sgc2VsIH19PC9vcHRpb24+XFxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHYtZWxzZS1pZj1cXFwib3B0aW9uLmlkPT09J3FqdSdcXFwiIDp2YWx1ZT1cXFwic2VsXFxcIiA6a2V5PVxcXCJpbmRleFxcXCIgdi1mb3I9XFxcIihzZWwsaW5kZXgpIGluIFsn6buY6K6kJ10uY29uY2F0KG15U2VsZWN0KVxcXCI+e3sgc2VsIH19PC9vcHRpb24+XFxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIDp2YWx1ZT1cXFwic2VsXFxcIiA6a2V5PVxcXCJpbmRleFxcXCIgdi1lbHNlIHYtZm9yPVxcXCIoc2VsLGluZGV4KSBpbiBjalNlbFxcXCI+e3sgc2VsIH19PC9vcHRpb24+XFxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9mb3JtPlxcbiAgICA8L2Rpdj5cXG48L2Rpdj5cXG48ZGl2PlxcbiAgICA8YSB2LWZvcj1cXFwidmVyIGluIHZlcmluZm9cXFwiIHN0eWxlPVxcXCJmbG9hdDpsZWZ0O21hcmdpbi10b3A6MXB4O21hcmdpbi1yaWdodDogMjBweFxcXCIgdi1iaW5kOmlkPSd2ZXIuaWQnIG9uY2xpY2s9XFxcImRvT3B0aW9uKHRoaXMuaWQpXFxcIj5cXG4gICAgICAgIDxpbWcgOnNyYz1cXFwidmVyLmF2YXRhclxcXCIgY2xhc3M9XFxcInJvdW5kX2ljb25cXFwiICBhbHQ9XFxcIlxcXCI+XFxuICAgICAgICA8c3BhbiBzdHlsZT1cXFwibWFyZ2luLWxlZnQ6MTBweDtsaW5lLWhlaWdodDoxMHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiBncmV5O1xcXCI+e3sgdmVyLmF1dGhvciB9fTwvc3Bhbj5cXG4gICAgPC9hPlxcbiAgICA8YSBzdHlsZT1cXFwiZmxvYXQ6cmlnaHQ7bWFyZ2luLXRvcDoxMHB4O1xcXCI+XFxuICAgICAgICA8YnV0dG9uIDpzdHlsZT1cXFwiJ2JvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDonK3RoZW1lcy5zYXZlQ2xvc2VCdG4uYmFja2dyb3VuZCsnO3dpZHRoOiAxNjBweDtoZWlnaHQ6NDBweDsgZm9udC1zaXplOiAxOHB4O2NvbG9yOiAnK3RoZW1lcy5zYXZlQ2xvc2VCdG4uY29sb3JcXFwiIG9uY2xpY2s9XFxcImNsaWNrbWUoJ+mFjSDnva4g5beyIOS/nSDlrZgg77yBJywgMTAwMCwgJ+WFsycpO1xcXCI+5L+d5a2Y5bm25YWz6Zet55WM6Z2iPC9idXR0b24+XFxuICAgIDwvYT5cXG48L2Rpdj5cXG48c2NyaXB0PlxcbiAgICBsZXQgdGlwcyA9IGDmj5DnpLrvvJo8YnI+4pGg5rOo5oSP5o+S5Lu26YCJ6aG577yM5rKh5pyJ5omL5Yqo5a+85YWl5o+S5Lu255qE6K+d5LiN55So5Yqo5a6D44CC5aaC6K6+572u5LiN5b2T5Lya5a+86Ie06KeE5YiZ5peg5rOV5L2/55So77yMPGJyPuino+WGs+WKnuazle+8muinhueVjOaJk+W8gOabtOWkmuiuvue9ruKGkuaWh+S7tueuoeeQhuKGkueCuWNhY2hl4oaS6ZW/5oyJTXlQYXJzZVNldC5qc29u5Yig6Zmk5o6J77ybPGJyPuKRoeWFqOWxgOiuvue9ruWmguaenOmAieaLqeS6humdnum7mOiupOmCo+S5iOWFqOmDqOeahOino+aekOS8muS9v+eUqOi/meS4gOiuvue9ru+8jOS4jeaDs+i/meagt+eahOivneivt+Whq+WFpem7mOiupO+8mzxicj7ikaLnu7/oibLkv53lrZjmjInpkq7ku4Xku4Xkv53lrZjphY3nva7kuI3kvJrlhbPpl63orr7nva7pobXpnaLvvIzphY3nva7lkI7mg7Pkv53lrZjlubblhbPpl63orr7nva7pobXpnaLnmoTor53or7fngrnok53oibLmjInpkq7vvJs8YnI+4pGj5aaC5p6c6YGH5Yiw5L+d5a2Y5oyJ6ZKu54K55LiN5Yqo5oiW6ICF5oql6ZSZ55qE5oOF5Ya177yM5Lul5LiL6Lev5b6E5oyo552A5Yig6Zmk5LiA6YGN77yM54S25ZCO6YeN5paw5ouJ5Y+W5o+S5Lu277yM572R6aG15YaN5omT5byA5q2k572R6aG1W+S4jeimgeWFiOaLieS7o+eggV3jgILorrDlvpflpIfku708YnI+XFxu5Li75o+S5Lu25a2Y5pS+6Lev5b6EOiAvY2FjaGUvUGFyc2VfRG4uanM8YnI+XFxu572R6aG16ISa5pys5a2Y5pS+6Lev5b6EOiAvY2FjaGUvUGFyc2VfRG4uaHRtbDxicj5cXG7ml6fmlq3mj5LphY3nva7ot6/lvoQ6L2NhY2hlL015UGFyc2VTZXQuanNvbjxicj5cXG7mlrDmlq3mj5LphY3nva7ot6/lvoQvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uPGJyPlxcbiAgICDikaTpmIXor7vlrozmj5DnpLrngrnlhbPpl63liqDovb3lrozmlbTorr7nva7pobXpnaLvvIzlpoLlh7rpl67popjml6Dms5Xoh6rooYzop6PlhrPngrnlm77niYfov5vlhaXorrrlnZvlkJHmiJHlj43ppojjgII8YnI+YDtcXG4gICAgbGV0IHBsYWNlaG9sZGVyPSfovpPlhaXop6PmnpDlkI3miJbogIVVUkwuLi4uLi4nO1xcbiAgICAvLyNhYTk2ZGEgI2ZjNTE4NVxcbiAgICBsZXQgdGhlbWVzID0ge1xcbiAgICAgICAgbmFtZTon6buY6K6k5Li76aKYJyxcXG4gICAgICAgIGNsb3NlQnRuOntjb2xvcjonI2Y2ZjZmNicsYmFja2dyb3VuZDonI2FhOTZkYSd9LFxcbiAgICAgICAgc2F2ZUJ0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNjgwMDYnfSxcXG4gICAgICAgIHNhdmVDbG9zZUJ0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNUJGQzUnfSxcXG4gICAgICAgIHRpcHNCdG46e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjMDVCRkM1J30sXFxuICAgICAgICBiYXJsYWJlbDp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyNhYTk2ZGEnfSxcXG4gICAgICAgIGJhcklucHV0Ontjb2xvcjonI2FhOTZkYScsYmFja2dyb3VuZDonI2ZmZmZkMid9LFxcbiAgICAgICAgc2VsZWN0Ontjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonI2FhOTZkYSd9LFxcbiAgICB9O1xcbiAgICBsZXQgdGhlbWVEZWYgPSB7XFxcIm5hbWVcXFwiOlxcXCLmlq3lv7Xljp/nmq5cXFwiLFxcXCJjbG9zZUJ0blxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiI2M1NDY0YVxcXCJ9LFxcXCJzYXZlQnRuXFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0Y5RjBEQVxcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjMDY4MDA2XFxcIn0sXFxcInNhdmVDbG9zZUJ0blxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiIzA1QkZDNVxcXCJ9LFxcXCJ0aXBzQnRuXFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0Y5RjBEQVxcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjMDVCRkM1XFxcIn0sXFxcImJhcmxhYmVsXFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0Y5RjBEQVxcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjRDA2QjZDXFxcIn0sXFxcImJhcklucHV0XFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0QwNkI2Q1xcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjRjlGMERBXFxcIn0sXFxcInNlbGVjdFxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiI0QwNkI2Q1xcXCJ9fTtcXG4gICAgdmFyIHRoZW1lUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVRoZW1lLmpzb25cXFwiO1xcbiAgICBpZighZmJhLmZldGNoKHRoZW1lUm91dGUpKXtcXG4gICAgICAgIGZiYS53cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeSh7bm93X3RoZW1lOifpu5jorqTkuLvpopgnLHRoZW1lczpbdGhlbWVzLHRoZW1lRGVmXX0pKVxcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgICBsZXQgbXlUaGVtZXMgPSBKU09OLnBhcnNlKGZiYS5mZXRjaCh0aGVtZVJvdXRlKSk7XFxuICAgICAgICBsZXQgbm93VGhlbWUgPSBteVRoZW1lcy50aGVtZXMuZmlsdGVyKGl0PT5pdC5uYW1lID09PSBteVRoZW1lcy5ub3dfdGhlbWUpO1xcbiAgICAgICAgdGhlbWVzID0gbm93VGhlbWU/bm93VGhlbWVbMF06bXlUaGVtZXMudGhlbWVzWzBdO1xcbiAgICB9Y2F0Y2ggKGUpIHt9XFxuXFxuICAgIC8vIOaWreW/teWIneWni+WMlumDqOWIhlxcbiAgICBjb25zdCBhbGxBcGk9WydodHRwczovL3Rlc3Qucm9uZ3hpbmd2ci5jb20vdGVzdC8/dXJsPScsJ2h0dHA6Ly9jYWNoZS5sYW5ndWFuZy5pY3U6ODgvZGlkaS5waHA/dXJsPSddO1xcbiAgICB2YXIgc2V0dGluZ3MgPSB7XFxuICAgICAgICBxeTogJ+S9oOeIueenkeaKgCcsXFxuICAgICAgICB5azogJ+mihumFtycsXFxuICAgICAgICB0eDogJ+iNo+iAgCcsXFxuICAgICAgICBtZzogJ+iaguiageWFhOW8nycsXFxuICAgICAgICBibDogJ09L6Kej5p6QJyxcXG4gICAgICAgIHNoOiAn5rGf5rmWRCcsXFxuICAgICAgICB4ZzogJ+axn+a5lkQnLFxcbiAgICAgICAgYWw6ICfmsZ/muZZEJyxcXG4gICAgICAgIHBwOiAn5Lq65Lq66L+3JyxcXG4gICAgICAgIG1pOiAnMTA4MCcsXFxuICAgICAgICBsZTogJ+i/quWlpeWXheaOoicsXFxuICAgICAgICBvdGg6ICfpgZPplb/ku5PlupPpgJrlhY0nLFxcbiAgICAgICAgb25lOiAnMTA4MCcsXFxuICAgICAgICBmdW46ICfono3lhbQnLFxcbiAgICAgICAgcWp1OiAn6buY6K6kJyxcXG4gICAgICAgIGNqOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcydcXG4gICAgfTtcXG4gICAgdmFyIG9sZFJvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uXFxcIjtcXG4gICAgdmFyIG15U2V0ID0gZmJhLmZldGNoKG9sZFJvdXRlKTtcXG4gICAgdmFyIG5ld1JvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uXFxcIjtcXG4gICAgaWYoIWZiYS5mZXRjaChuZXdSb3V0ZSkpe1xcbiAgICAgICAgZmJhLndyaXRlRmlsZShuZXdSb3V0ZSxKU09OLnN0cmluZ2lmeSh7c2V0dGluZ3M6c2V0dGluZ3MsdGl0bGU6W1xcXCJ5dW4xNzE3XFxcIixcXFwi5L2g54i556eR5oqAXFxcIixcXFwi6J6N5YW0XFxcIixcXFwi5Lq65Lq66L+3LeS8mOmFt1xcXCJdLGNvZGVzOntcXFwi5L2g54i556eR5oqAXFxcIjpcXFwiaHR0cDovL2NhY2hlLmxhbmd1YW5nLmljdTo4OC9kaWRpLnBocD91cmw9XFxcIixcXFwi6J6N5YW0XFxcIjpcXFwiaHR0cHM6Ly90ZXN0LnJvbmd4aW5ndnIuY29tL3Rlc3QvP3VybD1cXFwiLFxcXCLkurrkurrov7ct5LyY6YW3XFxcIjpcXFwiaHR0cHM6Ly9zdmlwLnJlbnJlbm1pLmNjOjIyMjIvYXBpLz9rZXk9bm40ajhydWtQWFNWelI3OEU5JnVybD1cXFwifX0pKVxcbiAgICB9XFxuICAgIHZhciBuZXdDb25maWcgPSBmYmEuZmV0Y2gobmV3Um91dGUpO1xcbiAgICB2YXIgbXlTZWxlY3QgPSBbXTtcXG4gICAgZnVuY3Rpb24gY29tcGFyZShsaXN0KSB7XFxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XFxuICAgICAgICAgICAgcmV0dXJuICFsaXN0LmluY2x1ZGVzKGl0KVxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGlmKG5ld0NvbmZpZyYmbmV3Q29uZmlnLmxlbmd0aD4yMCl7XFxuICAgICAgICBldmFsKFxcXCJuZXdDb25maWcgPVxcXCIgKyBuZXdDb25maWcgKyBcXFwiO1xcXCIpO1xcbiAgICAgICAgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHNldHRpbmdzLG5ld0NvbmZpZy5zZXR0aW5ncyk7XFxuICAgICAgICB2YXIgeWNUaXRsZSA9IFsnZGVmYXVsdFBhcnNlJywgJ2RlZmF1bHRQYXJzZVdlYicsJ21hb3NzJywgJ0NpdHlJUCcsICdjYWNoZU0zdTgnLCAncGNVQScsICdwYXJzZUxjJywgJ2dwYXJzZScsICducGFyc2UnXTtcXG4gICAgICAgIG15U2VsZWN0ID0gbmV3Q29uZmlnLnRpdGxlLmZpbHRlcihjb21wYXJlKHljVGl0bGUpKTtcXG4gICAgICAgIC8vIG15U2VsZWN0ID0gbXlTZWxlY3QubWFwKChpdCk9PntcXG4gICAgICAgIC8vICAgICBsZXQgZmxhZyA9ICfik4onO1xcbiAgICAgICAgLy8gICAgIGlmKHR5cGVvZihuZXdDb25maWcuY29kZXNbaXRdKT09PSdmdW5jdGlvbicpe1xcbiAgICAgICAgLy8gICAgICAgICBmbGFnID0gJ+KSvyc7XFxuICAgICAgICAvLyAgICAgfWVsc2UgaWYodHlwZW9mKG5ld0NvbmZpZy5jb2Rlc1tpdF0pPT09J3VuZGVmaW5lZCcpe1xcbiAgICAgICAgLy8gICAgICAgICBmbGFnID0gJyc7XFxuICAgICAgICAvLyAgICAgfVxcbiAgICAgICAgLy8gICAgIHJldHVybiBmbGFnK2l0XFxuICAgICAgICAvLyB9KTtcXG4gICAgfVxcbiAgICAvL2ZiYS5sb2coSlNPTi5zdHJpbmdpZnkobXlTZWxlY3QpKTtcXG5cXG4gICAgbGV0IG9wdGlvbnMgPSBbXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon54ix5aWH6Im6JyxcXG4gICAgICAgICAgICBpZDoncXknLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnF5LFxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiforr7nva7niLHlpYfoibonXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+S8mOmFtycsXFxuICAgICAgICAgICAgaWQ6J3lrJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy55a1xcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifohb7orq8nLFxcbiAgICAgICAgICAgIGlkOid0eCcsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MudHhcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon6IqS5p6cJyxcXG4gICAgICAgICAgICBpZDonbWcnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLm1nXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+WTlOWTqeWTlOWTqScsXFxuICAgICAgICAgICAgaWQ6J2JsJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5ibFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifmkJzni5AnLFxcbiAgICAgICAgICAgIGlkOidzaCcsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Muc2hcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon6KW/55OcJyxcXG4gICAgICAgICAgICBpZDoneGcnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnhnXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+mYv+mHjCcsXFxuICAgICAgICAgICAgaWQ6J2FsJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5hbFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOidQUFRWJyxcXG4gICAgICAgICAgICBpZDoncHAnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnBwXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+WSquWSlScsXFxuICAgICAgICAgICAgaWQ6J21pJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5taVxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifkuZDop4YnLFxcbiAgICAgICAgICAgIGlkOidsZScsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MubGVcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTonMTkwNScsXFxuICAgICAgICAgICAgaWQ6J29uZScsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Mub25lXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+mjjuihjCcsXFxuICAgICAgICAgICAgaWQ6J2Z1bicsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MuZnVuXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+WFtuS7licsXFxuICAgICAgICAgICAgaWQ6J290aCcsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Mub3RoXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+WFqOWxgCcsXFxuICAgICAgICAgICAgaWQ6J3FqdScsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MucWp1XFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+aPkuS7ticsXFxuICAgICAgICAgICAgaWQ6J2NqJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5jalxcbiAgICAgICAgfSxcXG4gICAgXTtcXG5cXG4gICAgZnVuY3Rpb24gRGlkKGlkKXtcXG4gICAgICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XFxuICAgIH1cXG4gICAgZnVuY3Rpb24gZ2V0T3B0aW9uKGlkLHRpdGxlKSB7XFxuICAgICAgICB2YXIgb2JqID0gRGlkKGlkKTtcXG4gICAgICAgIERpZCh0aXRsZSkudmFsdWUgPSBvYmoub3B0aW9uc1tvYmouc2VsZWN0ZWRJbmRleF0udGV4dDtcXG4gICAgICAgIC8vIERpZCh0aXRsZSkudmFsdWUgPSBvYmoub3B0aW9uc1tvYmouc2VsZWN0ZWRJbmRleF0udGV4dC5yZXBsYWNlKC/ik4p84pK/L2csJycpO1xcbiAgICB9XFxuICAgIGZ1bmN0aW9uIHJlc2V0U2VsZWN0KGlkKXtcXG4gICAgICAgIERpZChpZCtcXFwiU2VsZWN0XFxcIikub3B0aW9ucy5zZWxlY3RlZEluZGV4ID0gLTE7XFxuICAgIH1cXG5cXG4gICAgLy/lh73mlbDpg6jliIZcXG5cXG4gICAgZnVuY3Rpb24gVG9hc3QobXNnLGR1cmF0aW9uKXtcXG4gICAgICAgIGR1cmF0aW9uPWlzTmFOKGR1cmF0aW9uKT8yMDAwOmR1cmF0aW9uO1xcbiAgICAgICAgdmFyIG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcXG4gICAgICAgIG0uaW5uZXJIVE1MID0gbXNnO1xcbiAgICAgICAgbS5zdHlsZS5jc3NUZXh0PVxcXCJ3aWR0aDo0NSU7IG1pbi13aWR0aDoxNTBweDsgYmFja2dyb3VuZDojMzExOyBvcGFjaXR5OjAuNjsgaGVpZ2h0OmF1dG87bWluLWhlaWdodDogNDVweDsgY29sb3I6I2ZmZjsgbGluZS1oZWlnaHQ6NDVweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGJvcmRlci1yYWRpdXM6MTBweDsgcG9zaXRpb246Zml4ZWQ7IHRvcDo2MCU7IGxlZnQ6MjYlOyB6LWluZGV4Ojk5OTk5OTtcXFwiO1xcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtKTtcXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XFxuICAgICAgICAgICAgdmFyIGQgPSAwLjU7XFxuICAgICAgICAgICAgbS5zdHlsZS53ZWJraXRUcmFuc2l0aW9uID0gJy13ZWJraXQtdHJhbnNmb3JtICcgKyBkICsgJ3MgZWFzZS1pbiwgb3BhY2l0eSAnICsgZCArICdzIGVhc2UtaW4nO1xcbiAgICAgICAgICAgIG0uc3R5bGUub3BhY2l0eSA9ICcwJztcXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG0pIH0sIGQgKiAxMDAwKTtcXG4gICAgICAgIH0sIGR1cmF0aW9uKTtcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiBvcGVuRG5QYWdlKCl7XFxuICAgICAgICBmYmEub3BlbihKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgcnVsZTogXFxcIj1eX149XFxcIixcXG4gICAgICAgICAgICB0aXRsZTogXFxcIue8lui+keino+aekFxcXCIsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPee8lui+kSNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiLFxcbiAgICAgICAgICAgIGdyb3VwOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgLy9maW5kUnVsZTogXFxcImpzOnRoaXMuZD1bXTskLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvUGFyc2VfRG4uanM/cnVsZT1NeUZpZWxk4bSw4oG/XFxcXFxcXCIpLmVkaXQoKTtzZXRSZXN1bHQoZCk7XFxcIixcXG4gICAgICAgICAgICBwcmVSdWxlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBleHRyYToge31cXG4gICAgICAgIH0pKTtcXG4gICAgfVxcbiAgICBmdW5jdGlvbiBvcGVuVGhlbWUoKXtcXG4gICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICBydWxlOiBcXFwiPV5fXj1cXFwiLFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5Li76aKY566h55CGXFxcIixcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU95Li76aKYI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXCIsXFxuICAgICAgICAgICAgZ3JvdXA6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBwcmVSdWxlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBleHRyYToge31cXG4gICAgICAgIH0pKTtcXG4gICAgfVxcbiAgICBmdW5jdGlvbiBvcGVuSnhNYW5hZ2UoKXtcXG4gICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICBydWxlOiBcXFwiPV5fXj1cXFwiLFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi6Kej5p6Q6YWN572u566h55CGXFxcIixcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96Kej5p6QI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXCIsXFxuICAgICAgICAgICAgZ3JvdXA6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBwcmVSdWxlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBleHRyYToge31cXG4gICAgICAgIH0pKTtcXG4gICAgfVxcbiAgICBmdW5jdGlvbiBjYW5jZWwoKXtcXG4gICAgICAgIGlmKCFteVNldCl7XFxuICAgICAgICAgICAgZmJhLndyaXRlRmlsZShvbGRSb3V0ZSwgSlNPTi5zdHJpbmdpZnkoc2V0dGluZ3MsIG51bGwsIDQpKTtcXG4gICAgICAgICAgICBmYmEucmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICBmYmEuYmFjayhmYWxzZSk7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgZnVuY3Rpb24gY2xpY2ttZShtc2csZHVyYXRpb24sdGl0bGUpe1xcbiAgICAgICAgdHJ5e1xcbiAgICAgICAgICAgIGZvcihsZXQga2V5IGluIHNldHRpbmdzKXtcXG4gICAgICAgICAgICAgICAgLy8gZmJhLmxvZyhEaWQoa2V5KSsnJytrZXkpO1xcbiAgICAgICAgICAgICAgICB0cnl7XFxuICAgICAgICAgICAgICAgICAgICAvL3NldHRpbmdzW2tleV0gPSBEaWQoa2V5KS52YWx1ZS5yZXBsYWNlKC/ik4p84pK/L2csJycpO1xcbiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3Nba2V5XSA9IERpZChrZXkpLnZhbHVlO1xcbiAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XFxuICAgICAgICAgICAgICAgICAgICBhbGVydChcXFwi5pyq6I635Y+W5Yiw6IqC54K5OlxcXCIra2V5K1xcXCJcXFxcblxcXCIrZS5tZXNzYWdlKTtcXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZihteVNlbGVjdCl7XFxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obmV3Q29uZmlnLnNldHRpbmdzLCBzZXR0aW5ncyk7XFxuICAgICAgICAgICAgICAgIGZiYS53cml0ZUZpbGUobmV3Um91dGUsICQkJC5zdHJpbmdpZnkobmV3Q29uZmlnKSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGZiYS53cml0ZUZpbGUob2xkUm91dGUsICQkJC5zdHJpbmdpZnkoc2V0dGluZ3MpKTtcXG4gICAgICAgICAgICBUb2FzdChtc2csZHVyYXRpb24pO1xcbiAgICAgICAgICAgIGlmKHRpdGxlPT09XFxcIuWFs1xcXCIpe1xcbiAgICAgICAgICAgICAgICBmYmEuYmFjaygpO1xcbiAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICBmYmEucmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfWNhdGNoKGUpe1xcbiAgICAgICAgICAgIGFsZXJ0KGUubWVzc2FnZSlcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICAvL2xldCB3aWR0aD13aW5kb3cuc2NyZWVuLmF2YWlsV2lkdGg7XFxuICAgIC8vbGV0IHdpZHRoUHg9d2lkdGgtMzkzKzUyO1xcbiAgICAvL2FsZXJ0KFxcXCLlvZPliY3liIbovqjnjoc6XFxcIit3aW5kb3cuc2NyZWVuLmF2YWlsV2lkdGgrXFxcIipcXFwiK3dpbmRvdy5zY3JlZW4uaGVpZ2h0KTtcXG4gICAgdmFyIHZlcmluZm8gPSBbe1xcbiAgICAgICAgaWQ6J2RuJyxcXG4gICAgICAgIGF1dGhvcjon5pat5b+1JyxcXG4gICAgICAgIGF2YXRhcjonaHR0cHM6Ly9zMy5heDF4LmNvbS8yMDIxLzAyLzIyL3k3d2I5Ty5qcGcnLFxcbiAgICAgICAgb3B0aW9uOm9wZW5EblBhZ2UsXFxuICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgaWQ6J2R6JyxcXG4gICAgICAgICAgICBhdXRob3I6J+mBk+mVvycsXFxuICAgICAgICAgICAgYXZhdGFyOidodHRwOi8vcTEucWxvZ28uY24vZz9iPXFxJm5rPTQzNDg1NzAwNSZzPTY0MCcsXFxuICAgICAgICAgICAgb3B0aW9uOm9wZW5UaGVtZVxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBpZDonbG0nLFxcbiAgICAgICAgICAgIGF1dGhvcjogJ+iTneiOkycsXFxuICAgICAgICAgICAgYXZhdGFyOiAnaHR0cDovL3ExLnFsb2dvLmNuL2c/Yj1xcSZuaz0yNTc5OTQ5Mzc4JnM9NjQwJyxcXG4gICAgICAgICAgICBvcHRpb246b3Blbkp4TWFuYWdlXFxuICAgICAgICB9XFxuICAgIF07XFxuXFxuICAgIGZ1bmN0aW9uIGRvT3B0aW9uKG9wdGlvbl9pZCl7XFxuICAgICAgICBsZXQgdmVyID0gdmVyaW5mby5maWx0ZXIoaXQ9Pml0LmlkPT09b3B0aW9uX2lkKVswXTtcXG4gICAgICAgIHZlci5vcHRpb24oKTtcXG4gICAgfVxcblxcbiAgICBjb25zdCBSZW5kZXJIdG1sQXBwID0ge1xcbiAgICAgICAgZGF0YSgpIHtcXG4gICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICAvLyByYXdIdG1sOiAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiByZWRcXFwiPui/memHjOS8muaYvuekuue6ouiJsu+8gTwvc3Bhbj4nLFxcbiAgICAgICAgICAgICAgICBvcHRpb25zOm9wdGlvbnMsXFxuICAgICAgICAgICAgICAgIHZlcmluZm86dmVyaW5mbyxcXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6cGxhY2Vob2xkZXIsXFxuICAgICAgICAgICAgICAgIHRpcHM6dGlwcyxcXG4gICAgICAgICAgICAgICAgdGhlbWVzOnRoZW1lcyxcXG4gICAgICAgICAgICAgICAgbXlTZWxlY3Q6bXlTZWxlY3QsXFxuICAgICAgICAgICAgICAgIC8vIGNqU2VsOlsn6K+36YCJ5oup5o+S5Lu2ICjlj6rkvZznlKhsYXp5UnVsZSknLCdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJywnaGlrZXI6Ly9maWxlcy9ydWxlcy9kekhvdXNlL2pzL3NyY2F1dG8uanMnLCdoaWtlcjovL2ZpbGVzL3J1bGVzL2pzL1BhcnNlLVYyX0RuLmpzJ10sXFxuICAgICAgICAgICAgICAgIGNqU2VsOlsn6K+36YCJ5oup5o+S5Lu2ICjlj6rkvZznlKhsYXp5UnVsZSknLCdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJ10sXFxuICAgICAgICAgICAgICAgIHNldHRpbmdzOnNldHRpbmdzLFxcbiAgICAgICAgICAgICAgICBzaG93VGlwczpmYWxzZSxcXG4gICAgICAgICAgICAgICAgLy93aWR0aFB4OndpZHRoUHhcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LFxcbiAgICAgICAgbWV0aG9kczp7XFxuICAgICAgICAgICAgLy8gY2hhbmdlVmFsOmZ1bmN0aW9uKGV2ZW50KXtcXG4gICAgICAgICAgICAvLyAgICAgZ2V0T3B0aW9uKHRoaXMuaWQsdGhpcy5uYW1lKTtcXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5zZWxPcHRpb24gPSBldmVudC50YXJnZXQudmFsdWU7XFxuICAgICAgICAgICAgLy8gICAgIGFsZXJ0KFxcXCLkvaDpgInkuK3kuoZcXFwiK2V2ZW50LnRhcmdldC52YWx1ZSk7XFxuICAgICAgICAgICAgLy8gfVxcbiAgICAgICAgICAgIGRvT3B0aW9uOmRvT3B0aW9uXFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgdHJ5IHtcXG4gICAgICAgIGNvbnN0IGFwcD1WdWUuY3JlYXRlQXBwKFJlbmRlckh0bWxBcHApO1xcbiAgICAgICAgYXBwLm1vdW50KCdib2R5Jyk7XFxuICAgIH1jYXRjaCAoZSkge1xcbiAgICAgICAgY29uc29sZS5sb2coZS5tZXNzYWdlKVxcbiAgICB9XFxuXFxuPC9zY3JpcHQ+XFxuXFxuPC9ib2R5PlxcbjwvaHRtbD5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIlBhcnNlX0RuLmpzXCIsXCJwYXRoXCI6XCJQYXJzZV9Ebi5qc1wiLFwicnVsZVwiOlwiLy89PT09PT09PT09PT3lhY3ll4XosIPnlKg9PT09PT09PT09PT1cXG4vL++8je+8je+8jT1eX149XFxuXFxudmFyIHZlcnNpb24gPSAzLjQ5MTIxMjsvLzAzMDNcXG52YXIgdXBkYXRlRGF0ZSA9ICcyMDIxLzEyLzEyLzExOjExJztcXG52YXIgX215U2V0ID0ge1xcbiAgICBxanU6ICfpu5jorqQnLFxcbiAgICBvdGg6J+mBk+mVv+S7k+W6k+mAmuWFjScsXFxuICAgIGNqY2FjaGU6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJyxcXG4gICAgdGhlbWVjYWNoZTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvTXlUaGVtZS5qc29uJyxcXG4gICAgamlleGljYWNoZTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvTXlKaWV4aS5qc29uJyxcXG4gICAgeDVjYWNoZTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uaHRtbCcsXFxuICAgIG9sZENvbmZpZzogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uJyxcXG4gICAgY2tMaW5rOiAnaHR0cHM6Ly9jb2RlLmFsaXl1bi5jb20vQUk5NTcvSGlrZXIvcmF3L21hc3Rlci92LycsXFxuICAgIGNqOiAnaHR0cHM6Ly9jb2RlLmFsaXl1bi5jb20vQUk5NTcvSGlrZXIvcmF3L21hc3Rlci92L0Nsb3VkUGFyc2UtVjJfRG4uanMnLFxcbiAgICB4NVVybDogJ2h0dHBzOi8vY29kZS5hbGl5dW4uY29tL0FJOTU3L0hpa2VyL3Jhdy9tYXN0ZXIvdi9QYXJzZV9Ebi5odG1sJyxcXG4gICAgcGFyc2VSb3V0ZTogJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJyxcXG4gICAgeDVSb3V0ZTogJ2ZpbGU6Ly8vc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL2NhY2hlL1BhcnNlX0RuLmh0bWwnXFxufTtcXG52YXIgTXlQYXJzZVMgPSB7fTtcXG52YXIgbXlTZXQgPSBfbXlTZXQ7XFxuaWYgKGZpbGVFeGlzdChfbXlTZXQucGFyc2VSb3V0ZSkpIHtcXG4gICAgZXZhbCgndmFyIHBhcnNlRmlsZSA9JyArIGZldGNoKF9teVNldC5wYXJzZVJvdXRlKSk7XFxuICAgIE15UGFyc2VTID0gcGFyc2VGaWxlLmNvZGVzO1xcbiAgICBteVNldCA9IHBhcnNlRmlsZS5zZXR0aW5ncztcXG59XFxudmFyIHBhcnNlVGl0bGUgPSBbXFxuICAgIFxcXCJ5dW4xNzE3XFxcIixcXG4gICAgXFxcIlBhbkd1XFxcIixcXG4gICAgXFxcIkZ1WGluZ1xcXCIsXFxuICAgIFxcXCJpc1ZpZGVvXFxcIixcXG4gICAgXFxcImRlZmF1bHRQYXJzZVxcXCIsXFxuICAgIFxcXCLpgZPplb/ku5PlupPpgJrlhY1cXFwiLFxcbiAgICBcXFwiZGVmYXVsdFBhcnNlV2ViXFxcIixcXG4gICAgXFxcIk9L6Kej5p6QXFxcIixcXG4gICAgXFxcIk0zVThUVlxcXCIsXFxuXTtcXG4vL++8je+8je+8jT1eX149XFxuXFxuLy/mjqXlj6Porr7nva4uXFxuXFxudmFyIHNldFVybCA9IFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uI25vUmVjb3JkSGlzdG9yeSNcXFwiO1xcbnZhciBzZXRfc3dpdGNoID0gc2V0VXJsO1xcbnZhciBsYXp5ID0gYGV2YWwoJ3ZhciBjb25maWcgPScgKyBmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKSk7ZXZhbChmZXRjaChjb25maWcuY2opKTtheXRtUGFyc2UoaW5wdXQpYDtcXG5cXG4vL3ZhciBwYXJ3aXggPSBgdmFyIHl1cmw9J2h0dHBzOi8vZGFpbGkubWF5aXhpb25nZGkuY24vP3VybD0nO1JlZmVyZXInOiAnaHR0cHM6Ly93d3cubWF5aXhpb25nZGkuY24veXM/aWQ9JzsnaHR0cHM6Ly9kYWlsaS5tYXlpeGlvbmdkaS5jbi9hcGkucGhwJywgJ1JlZmVyZXInOidodHRwczovL2RhaWxpLm1heWl4aW9uZ2RpLmNuJztcXG4vLyDlhajmsJFodHRwczovL3BjdmlkZW9hbGl5dW4udGlhbnNoYW5ncmVuamlhbi5tZ3R2LmNvbS44OHd1bWEuY29tLz91cmw9XFxuXFxuLy/vvI3vvI3vvI3lpIcg55So77yN77yN77yNXFxuLypcXG4gKiDlvbHop4blt6XlnLrvvJogaHR0cHM6Ly95c2djLmNjL1xcbiAqIOaxn+a5ljogNTU155S15b2xIGh0dHBzOi8vd3d3LjU1NWR5Mi5jb20vcGhvbmUuaHRtbCDvvZwgMTfnnIsgaHR0cDovLzE3a2FueXkuY24vIGh0dHA6Ly9qaGppZXhpLjMwdnIuY24vP3VybD0g772cIGh0dHA6Ly9hcGkubWFpemltYWxsLmNvbS9pbmRleC5waHA/dXJsPVxcbiAqIOaxn+a5ljogaHR0cDovL3d3dy50aWFuc2h1eXVuLm5ldC9pbmRleC5waHAvdm9kL3BsYXkvaWQvNDQ4Mzc3L3NpZC8xL25pZC8xLmh0bWxcXG4gKiDmsZ/muZYyOiBodHRwOi8vOThoeWsuY24vaW5kZXgucGhwL3ZvZC9wbGF5L2lkLzcyODQxL3NpZC8xL25pZC8xLmh0bWxcXG4gKiDkurrkurrov7c6IGh0dHBzOi8vdmlwLnN1c291LnR2L3BsYXllci8/dXJsPSDvvZwgaHR0cHM6Ly93d3cubW9tZG0uY2MvXFxuICpcXG4gKiB3dWlnZW46IGh0dHBzOi8vd3d3LjVpZ2VuLmNvbS9kbXBsYXllci9wbGF5ZXIvP3VybD1cXG4gKiDlubLppa0o5Lq65Lq66L+3KTogaHR0cHM6Ly9qeC56dWkuY20vP3VybD1cXG4gKiBodHRwczovLzIuNjZtb3ZpZS50b3AvcGxheWVyLz91cmw9XFxuICpcXG4gKi9cXG5cXG5cXG52YXIgdG9vbHMgPSB7XFxuICAgIE1ENTogZnVuY3Rpb24oZGF0YSkge1xcbiAgICAgICAgZXZhbChnZXRDcnlwdG9KUygpKTtcXG4gICAgICAgIHJldHVybiBDcnlwdG9KUy5NRDUoZGF0YSkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkhleCk7XFxuICAgIH0sXFxuICAgIEFFUzogZnVuY3Rpb24odGV4dCwga2V5LCBpdiwgaXNFbmNyeXB0KSB7XFxuICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcbiAgICAgICAgdmFyIGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGtleSk7XFxuICAgICAgICB2YXIgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShpdik7XFxuICAgICAgICBpZiAoaXNFbmNyeXB0KSB7XFxuICAgICAgICAgICAgcmV0dXJuIENyeXB0b0pTLkFFUy5lbmNyeXB0KHRleHQsIGtleSwge1xcbiAgICAgICAgICAgICAgICBpdjogaXYsXFxuICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcXG4gICAgICAgICAgICB9KS50b1N0cmluZygpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBDcnlwdG9KUy5BRVMuZGVjcnlwdCh0ZXh0LCBrZXksIHtcXG4gICAgICAgICAgICBpdjogaXYsXFxuICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxuICAgICAgICB9KS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxuICAgIH0sXFxuICAgIC8vYXNjaWlcXG4gICAgbmV4dENoYXJhY3RlcjogZnVuY3Rpb24oYXNjaWlWYWx1ZSwgaykge1xcbiAgICAgICAgdmFyIHMgPSBhc2NpaVZhbHVlO1xcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocyArIGspO1xcbiAgICB9LFxcbiAgICAvL+WHr+aSklxcbiAgICBjYWVzYXJDaXBoZXI6IGZ1bmN0aW9uKHN0cmluZ1ZhbHVlLCBrKSB7XFxuICAgICAgICB2YXIgbmV3U3RyaW5nID0gXFxcIlxcXCI7XFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZ1ZhbHVlLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgbmV3U3RyaW5nICs9IHRoaXMubmV4dENoYXJhY3RlcihzdHJpbmdWYWx1ZVtpXS5jaGFyQ29kZUF0KCksIGspO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIG5ld1N0cmluZztcXG4gICAgfSxcXG4gICAgbm93RGF0ZTogZnVuY3Rpb24oKSB7XFxuICAgICAgICB2YXIgZGF0ZTEgPSBuZXcgRGF0ZSgpO1xcbiAgICAgICAgdmFyIGRhdGVTdHIgPSBcXFwiXFxcIjtcXG4gICAgICAgIGlmIChkYXRlMSkge1xcbiAgICAgICAgICAgIGRhdGVTdHIgPSBkYXRlMS5nZXRGdWxsWWVhcigpO1xcbiAgICAgICAgICAgIHZhciBtb250aCA9IGRhdGUxLmdldE1vbnRoKCkgKyAxO1xcbiAgICAgICAgICAgIHZhciBkYXkgPSBkYXRlMS5nZXREYXRlKCk7XFxuICAgICAgICAgICAgaWYgKG1vbnRoIDwgMTApIHtcXG4gICAgICAgICAgICAgICAgZGF0ZVN0ciArPSBcXFwiLTBcXFwiICsgbW9udGg7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgZGF0ZVN0ciArPSBcXFwiLVxcXCIgKyBtb250aDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGRheSA8IDEwKSB7XFxuICAgICAgICAgICAgICAgIGRhdGVTdHIgKz0gXFxcIi0wXFxcIiArIGRheTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBkYXRlU3RyICs9IFxcXCItXFxcIiArIGRheTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gZGF0ZVN0cjtcXG4gICAgfSxcXG4gICAgdG9KU09OOiBmdW5jdGlvbihqc29uKSB7XFxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoanNvbiwgKGtleSwgdmFsdWUpID0+IHtcXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIDQpO1xcbiAgICB9LFxcbiAgICB0b1ZOdW06IGZ1bmN0aW9uKGEpIHtcXG4gICAgICAgIHZhciBhID0gYS50b1N0cmluZygpO1xcbiAgICAgICAgdmFyIGMgPSBhLnNwbGl0KCcuJyk7XFxuICAgICAgICB2YXIgbnVtX3BsYWNlID0gW1xcXCJcXFwiLCBcXFwiMFxcXCIsIFxcXCIwMFxcXCIsIFxcXCIwMDBcXFwiLCBcXFwiMDAwMFxcXCJdLFxcbiAgICAgICAgICAgIHIgPSBudW1fcGxhY2UucmV2ZXJzZSgpO1xcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgdmFyIGxlbiA9IGNbaV0ubGVuZ3RoO1xcbiAgICAgICAgICAgIGNbaV0gPSByW2xlbl0gKyBjW2ldO1xcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIHJlcyA9IGMuam9pbignJyk7XFxuICAgICAgICByZXR1cm4gcmVzO1xcbiAgICB9LFxcbiAgICBjcHJWZXJzaW9uOiBmdW5jdGlvbihhLCBiKSB7XFxuICAgICAgICB2YXIgX2EgPSBwYXJzZUludCh0aGlzLnRvVk51bShhKSksXFxuICAgICAgICAgICAgX2IgPSBwYXJzZUludCh0aGlzLnRvVk51bShiKSk7XFxuICAgICAgICBiID0gaXNOYU4oX2IpID8gdmVyc2lvbiA6IGI7XFxuICAgICAgICBpZiAoX2EgPiBfYikge1xcbiAgICAgICAgICAgIHB1dFZhcignanhOZXdWJywgJ+acieaWsOeJiOacrDogJyArIGEpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBjbGVhclZhcignanhOZXdWJyk7XFxuICAgICAgICB9XFxuICAgICAgICBwdXRWYXIoJ2p4T2xkVicsIGIpO1xcbiAgICB9LFxcbiAgICBhdG9iOmZ1bmN0aW9uIChzdHIpe1xcbiAgICAgICAgcmVxdWlyZSgnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9qcy1iYXNlNjRAMy43LjIvYmFzZTY0Lm1pbi5qcycpO1xcbiAgICAgICAgcmV0dXJuIEJhc2U2NC5hdG9iKHN0cik7XFxuICAgIH0sXFxuICAgIGJ0b2E6ZnVuY3Rpb24gKHN0cil7XFxuICAgICAgICByZXF1aXJlKCdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2pzLWJhc2U2NEAzLjcuMi9iYXNlNjQubWluLmpzJyk7XFxuICAgICAgICByZXR1cm4gQmFzZTY0LmJ0b2Eoc3RyKTtcXG4gICAgfSxcXG4gICAg5rGf5rmWOmZ1bmN0aW9uIChjb25maWdfdXJsLCB0ZW0sIHRva2VuKSB7XFxuICAgICAgICByZXF1aXJlKCdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2pzLWJhc2U2NEAzLjcuMi9iYXNlNjQubWluLmpzJyk7XFxuICAgICAgICB2YXIgYXRvYj1CYXNlNjQuYXRvYjtcXG4gICAgICAgIHZhciBidG9hPUJhc2U2NC5idG9hO1xcbiAgICAgICAgdmFyIGNvbmZpZ19hID0gdGVtIHx8IFxcXCJmZnNpcmxscVxcXCI7XFxuICAgICAgICB2YXIgdmlkZW8gPSAnJztcXG4gICAgICAgIHZhciB0ZW0gPSBbXTtcXG4gICAgICAgIHZhciBjb25maWdfYXJyeSA9IFtdO1xcbiAgICAgICAgdmFyIGNvbmZpZ19iID0gY29uZmlnX2EubGVuZ3RoO1xcbiAgICAgICAgaWYgKHRva2VuID09IDB4MSkge1xcbiAgICAgICAgICAgIHZhciBjb25maWdfdXJsID0gYXRvYihjb25maWdfdXJsKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdmFyIGNvbmZpZ191cmwgPSBlbmNvZGVVUklDb21wb25lbnQoY29uZmlnX3VybCk7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgY29uZmlnX2MgPSBjb25maWdfdXJsLmxlbmd0aDtcXG4gICAgICAgIGZvciAoaSA9IDB4MDsgaSA8IDB4MTAwOyBpKyspIHtcXG4gICAgICAgICAgICB0ZW1baV0gPSBjb25maWdfYVtpICUgY29uZmlnX2JdLmNoYXJDb2RlQXQoKTtcXG4gICAgICAgICAgICBjb25maWdfYXJyeVtpXSA9IGk7XFxuICAgICAgICB9XFxuICAgICAgICBmb3IgKGogPSBpID0gMHgwOyBpIDwgMHgxMDA7IGkrKykge1xcbiAgICAgICAgICAgIGogPSAoaiArIGNvbmZpZ19hcnJ5W2ldICsgdGVtW2ldKSAlIDB4MTAwO1xcbiAgICAgICAgICAgIHRtcCA9IGNvbmZpZ19hcnJ5W2ldO1xcbiAgICAgICAgICAgIGNvbmZpZ19hcnJ5W2ldID0gY29uZmlnX2Fycnlbal07XFxuICAgICAgICAgICAgY29uZmlnX2Fycnlbal0gPSB0bXA7XFxuICAgICAgICB9XFxuICAgICAgICBmb3IgKGEgPSBqID0gaSA9IDB4MDsgaSA8IGNvbmZpZ19jOyBpKyspIHtcXG4gICAgICAgICAgICBhID0gKGEgKyAweDEpICUgMHgxMDA7XFxuICAgICAgICAgICAgaiA9IChqICsgY29uZmlnX2FycnlbYV0pICUgMHgxMDA7XFxuICAgICAgICAgICAgdG1wID0gY29uZmlnX2FycnlbYV07XFxuICAgICAgICAgICAgY29uZmlnX2FycnlbYV0gPSBjb25maWdfYXJyeVtqXTtcXG4gICAgICAgICAgICBjb25maWdfYXJyeVtqXSA9IHRtcDtcXG4gICAgICAgICAgICBrID0gY29uZmlnX2FycnlbKGNvbmZpZ19hcnJ5W2FdICsgY29uZmlnX2Fycnlbal0pICUgMHgxMDBdO1xcbiAgICAgICAgICAgIHZpZGVvICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29uZmlnX3VybFtpXS5jaGFyQ29kZUF0KCkgXiBrKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGxvZyhkZWNvZGVVUklDb21wb25lbnQodmlkZW8pKTtcXG4gICAgICAgIGlmICh0b2tlbiA9PSAweDEpIHtcXG4gICAgICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHZpZGVvKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgcmV0dXJuIGJ0b2EodmlkZW8pO1xcbiAgICAgICAgfVxcbiAgICB9XFxufTtcXG5pZiAoZ2V0VmFyKFxcXCJqeE9sZFZcXFwiLCBcXFwiMFxcXCIpICE9IHZlcnNpb24pIHtcXG4gICAgcHV0VmFyKCdjakNhY2hlJywgX215U2V0LmNqY2FjaGUpO1xcbiAgICBwdXRWYXIoJ3g1Q2FjaGUnLCBfbXlTZXQueDVDYWNoZSk7XFxuICAgIHB1dFZhcignb2xkQ29uZmlnJywgX215U2V0Lm9sZENvbmZpZyk7XFxuICAgIHB1dFZhcigncGFyc2VSb3V0ZScsIF9teVNldC5wYXJzZVJvdXRlKTtcXG4gICAgbGV0IGp4TmV3ViA9IGZldGNoKCdodHRwczovL2dpdGVlLmNvbS9EdWFuLU5pYW4vRG4vcmF3L21hc3Rlci9oaWtlcnZpZXcvUGFyc2VWZXJzaW9uLnR4dCcpLFxcbiAgICAgICAganhPbGRWID0gKGZldGNoKF9teVNldC5jamNhY2hlKS5zcGxpdCgndmVyc2lvbiA9IFxcXCInKVsxXSArICcnKS5zcGxpdCgnXFxcIicpWzBdO1xcbiAgICB0b29scy5jcHJWZXJzaW9uKGp4TmV3ViwganhPbGRWKTtcXG59XFxuXFxudmFyIFBhcnNlUyA9IHt9O1xcbnZhciBvcmlnaW5hbFBhcnNlUyA9IHtcXG4gICAgLy8gdXBkYXRlRGF0ZTogdXBkYXRlRGF0ZSxcXG4gICAgcGFyc2VMYzonaHR0cHM6Ly9jb2RlLmFsaXl1bi5jb20vQUk5NTcvSGlrZXIvcmF3L21hc3Rlci9wL3BhcnNlTGMuanMnLFxcbiAgICBDaXR5SVA6ICdodHRwOi8vcHYuc29odS5jb20vY2l0eWpzb24nLFxcbiAgICBwY1VBOiAnVXNlci1BZ2VudEBNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wXFxcXO+8m1xcXFzvvJsgV09XNjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS80OS4wLjI2MjMuODcgU2FmYXJpLzUzNy4zNicsXFxuICAgIGNhY2hlTTN1ODogZnVuY3Rpb24odlVybCwgcmVmKSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHZhciBtM3U4ID0gZmV0Y2godlVybCwge30pO1xcbiAgICAgICAgICAgIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS92aWRlb3MubTN1OCcsIG0zdTgpO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge31cXG4gICAgICAgIHJldHVybiAnZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvY2FjaGUvdmlkZW9zLm0zdTgjJztcXG4gICAgfSxcXG4gICAgaXNWaWRlbzpmdW5jdGlvbihwbGF5VXJsKXtcXG4gICAgICAgIGNvbnN0IHtpc1ZpZGVvfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2dsb2JhbFBhcnNlP3J1bGU96YGT6ZW/5LuT5bqTUHJvJyk7XFxuICAgICAgICByZXR1cm4gaXNWaWRlbyhwbGF5VXJsKVxcbiAgICB9LFxcbiAgICBkZWZhdWx0UGFyc2U6IGZ1bmN0aW9uKHVybCx0aW1lb3V0KSB7XFxuICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYih1cmwsdGltZW91dCk7XFxuICAgIH0sXFxuICAgIGRlZmF1bHRQYXJzZVdlYjogZnVuY3Rpb24ocGxheVVybCx0aW1lb3V0LGV4dHJhKSB7XFxuICAgICAgICAvLyBsb2coJ+S8oOWFpWRlZmF1bHRQYXJzZVdlYueahOi2heaXtjonK3RpbWVvdXQpO1xcbiAgICAgICAgdGltZW91dCA9IHBhcnNlSW50KHRpbWVvdXQpfHxwYXJzZUludChnZXRWYXIoJ2RwLmp4VGltZW91dCcsJzUwMDAnKSl8fDUwMDA7XFxuICAgICAgICBleHRyYSA9IGV4dHJhfHx7fTtcXG4gICAgICAgIGxldCBwbGF5VXJsTGlzdCA9IGV4dHJhLnBsYXlVcmxMaXN0fHxbXTtcXG4gICAgICAgIGlmKHR5cGVvZihwbGF5VXJsTGlzdCk9PT0nb2JqZWN0JyYmcGxheVVybExpc3QubGVuZ3RoPjApe1xcbiAgICAgICAgICAgIHBsYXlVcmxMaXN0LnVuc2hpZnQocGxheVVybCk7XFxuICAgICAgICAgICAgbGV0IHBsYXlVcmxzPXBsYXlVcmxMaXN0LnNsaWNlKDAsNCk7XFxuICAgICAgICAgICAgbGV0IG5hbWVzPWV4dHJhLm5hbWVMaXN0LnNsaWNlKDAsNCk7XFxuICAgICAgICAgICAgLy8gbG9nKCflvIDlp4vmibnph4/op6PmnpAo5bey5Y676YeNLOWPquWPluWJjTPkuKrlpIfog47vvIzliqDpgZPplb/nvqQ6NDg2NzIyMzI46I635Y+W5pyA5paw6a2U5pat5Yqo5oCBKTonK25hbWVzKTtcXG4gICAgICAgICAgICBwbGF5VXJscz1wbGF5VXJscy5tYXAoKGl0LGlkKT0+aXQrXFxcIjtcXFwiK25hbWVzW2lkXSk7XFxuICAgICAgICAgICAgLy9sb2cocGxheVVybHMpO1xcbiAgICAgICAgICAgIGNvbnN0IHtMYXp5UGFyc2VGYXN0fSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2dsb2JhbFBhcnNlP3J1bGU96YGT6ZW/5LuT5bqTUHJvJyk7XFxuICAgICAgICAgICAgbGV0IHJldCA9IExhenlQYXJzZUZhc3QocGxheVVybHMsdGltZW91dCx0aW1lb3V0KTtcXG4gICAgICAgICAgICBpZih0eXBlb2YocmV0KT09PSdvYmplY3QnJiZyZXQubGVuZ3RoPjApe1xcbiAgICAgICAgICAgICAgICAvL3JldHVybiByZXRbMF1cXG4gICAgICAgICAgICAgICAgLy9sb2cocmV0KTtcXG4gICAgICAgICAgICAgICAgbGV0IHYgPSBnZXRBcHBWZXJzaW9uKCk7XFxuICAgICAgICAgICAgICAgIGlmKHBhcnNlSW50KHYpPj0yMTk0JiZyZXQubGVuZ3RoPjEpe1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybHMgPSBBcnJheS5mcm9tKG5ldyBTZXQocmV0KSk7XFxuICAgICAgICAgICAgICAgICAgICBuYW1lcz11cmxzLm1hcCgoaXQsaWQpPT5pdC5zcGxpdChcXFwi4piFXFxcIikubGVuZ3RoPjE/aXQuc3BsaXQoXFxcIuKYhVxcXCIpWzFdOlxcXCLnur/ot686XFxcIitwYXJzZUludChpZCsxKSk7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzPXVybHMubWFwKGl0PT5pdC5zcGxpdChcXFwi4piFXFxcIilbMF0pO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhlYWRlcnMgPSB1cmxzLm1hcCgoaXQpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIS87Ly50ZXN0KGl0KXx8aXQuc3BsaXQoJzsnKS5sZW5ndGg8Mil7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7fVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGVhZCA9IGl0LnNwbGl0KCc7JylbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEvQC8udGVzdChoZWFkKXx8IS97fH0vLnRlc3QoaGVhZCkpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZD1oZWFkLnNwbGl0KFxcXCJ7XFxcIilbMV0uc3BsaXQoXFxcIn1cXFwiKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9oZWFkID0gaGVhZC5yZXBsYWNlKC97fH0vZywnJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgPSBoZWFkLnNwbGl0KCcmJicpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2JqID0ge307XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiBoZWFkKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSBoZWFkW2ldLnNwbGl0KCdAJylbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBoZWFkW2ldLnNwbGl0KCdAJylbMV0ucmVwbGFjZSgvOy8sJ++8m++8mycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzID0gdXJscy5tYXAoKGl0KT0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0dXJsPWl0LnNwbGl0KCc7JylbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXQuaW5jbHVkZXMoXFxcIiNpc1ZpZGVvPXRydWUjXFxcIikmJiF0dXJsLmluY2x1ZGVzKFxcXCIjaXNWaWRlbz10cnVlI1xcXCIpKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVybCs9XFxcIiNpc1ZpZGVvPXRydWUjXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR1cmxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHt1cmxzOnVybHMsaGVhZGVyczpoZWFkZXJzLG5hbWVzOm5hbWVzfSk7XFxuICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFswXS5zcGxpdChcXFwi4piFXFxcIilbMF1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgY29uc3Qge2xhenlQYXJzZX0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9nbG9iYWxQYXJzZT9ydWxlPemBk+mVv+S7k+W6k1BybycpO1xcbiAgICAgICAgICAgIGxldCB4NVBsYXk9bGF6eVBhcnNlKHBsYXlVcmwsdGltZW91dCk7XFxuICAgICAgICAgICAgaWYodHlwZW9mKHg1UGxheSk9PVxcXCJ1bmRlZmluZWRcXFwifHwheDVQbGF5KXtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+mBk+mVv+S7k+W6k+ino+aekOWksei0pVxcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbGV0IHRpcHM9L3g1UnVsZXx3ZWJSdWxlLy50ZXN0KHg1UGxheSk/XFxcIng1L3dlYuWFjeWXheW8gOWni1xcXCI6XFxcIuaegemAn+WFjeWXheaOouWujOavle+8jOWcsOWdgDpcXFwiKygvXmh0dHAvLnRlc3QoeDVQbGF5KT94NVBsYXk6J+mdnuato+W4uOmTvuaOpScpO1xcbiAgICAgICAgICAgIGxvZyh0aXBzKTtcXG4gICAgICAgICAgICByZXR1cm4geDVQbGF5O1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBcXFwibWFvc3NcXFwiOlxcbiAgICAgICAgZnVuY3Rpb24gKGp4dXJsLCByZWYsIGtleSkge1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLueMqyhqeHVybCwgcmVmLCBrZXkpXFxuICAgICAgICB9LFxcbiAgICDlhY3ll4U6ZnVuY3Rpb24odmlwVXJsLGspe1xcbiAgICAgICAgaz1rfHxcXFwidXJsXFxcIjtcXG4gICAgICAgIHRyeXtcXG4gICAgICAgICAgICBsZXQgcmVhbFVybD1KU09OLnBhcnNlKGZldGNoKHZpcFVybCkpW2tdO1xcbiAgICAgICAgICAgIGlmKHJlYWxVcmwuc3RhcnRzV2l0aCgnLycpKXtcXG4gICAgICAgICAgICAgICAgcmVhbFVybCA9ICdodHRwczovLycrcmVhbFVybDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWaWRlbyhyZWFsVXJsKXx8XFxcIlxcXCI7XFxuICAgICAgICB9Y2F0Y2goZSl7XFxuICAgICAgICAgICAgLy9sb2coZS5tZXNzYWdlKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcIlxcXCJcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgWDU6ZnVuY3Rpb24odmlwVXJsLHJlZil7Ly8gaHR0cHM6Ly9hcGkuNTJ3eWIuY29tL3dlYmNsb3VkLz92PWh0dHA6Ly92aXAuMTkwNS5jb20vcGxheS82OTE5NDAuc2h0bWwgaHR0cDovL3d3dy5jZGNlci5uZXQvXFxuICAgICAgICBsZXQgX3g1ID0gJC50b1N0cmluZygodmlwVXJsKSA9PiB7XFxuICAgICAgICAgICAgaWYoIWxvY2F0aW9uLmhyZWYuaW5jbHVkZXModmlwVXJsKSl7XFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSB2aXBVcmw7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmKHdpbmRvdy5jb3VudCA9PSBudWxsKXtcXG4gICAgICAgICAgICAgICAgd2luZG93LmNvdW50PTE7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHdpbmRvdy5jb3VudCsrO1xcbiAgICAgICAgICAgIGlmKCB3aW5kb3cuY291bnQgPj0gMjApe1xcbiAgICAgICAgICAgICAgICBmYmEubG9nKFxcXCLmnKrojrflj5bliLDotYTmupDlnLDlnYDvvIzot7PliLDop6PmnpDpobVcXFwiKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZpcFVybFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgdXJscyA9IF9nZXRVcmxzKCk7XFxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiB1cmxzKSB7XFxuICAgICAgICAgICAgICAgIGlmICghL3BsYXltM3U4fG0zdThcXFxcLnR2Ly50ZXN0KHVybHNbaV0pICYmIHVybHNbaV0ubWF0Y2goL1xcXFwubXAzfFxcXFwubXA0fFxcXFwubTN1OHxcXFxcLmZsdi8pKSB7XFxuICAgICAgICAgICAgICAgICAgICBmYmEubG9nKHVybHNbaV0pO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybHNbaV1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sdmlwVXJsKTtcXG4gICAgICAgIGxldCBwbGF5VXJsID0gcmVmP3JlZjp2aXBVcmw7XFxuICAgICAgICBsZXQgeDVVcmwgPSAnd2ViUnVsZTovLycrcGxheVVybCsgJ0AnICtfeDU7XFxuICAgICAgICBzaG93TG9hZGluZygn6a2U5patLmpz5ZeF5o6i5LitLi4uJyk7XFxuICAgICAgICByZXR1cm4geDVVcmxcXG4gICAgfSxcXG4gICAgJ+mBk+mVvyc6ZnVuY3Rpb24gKHZpcFVybCl7XFxuICAgICAgICBldmFsUHJpdmF0ZUpTKCd6U1d2ZStlZUE2aUwrZjJmR1RJKzFwUjhqbkxkMFNpeVY2eXZnY1BNV3dCTVA1YVlwcWhURmJJU3hudmhiMGJkNVZnaXp5VU1IZTRkbXNuR2hXTEJrcWZiNUhmTmJJVzRNQk14ekxwUC85VGpOVDhTSVFBZmpkVGo0UDhvWDM1ZWtLTnZHVnhEb2x5ZmNZcnBvS3dOb1E9PScpO1xcbiAgICAgICAgcmV0dXJuIHRoaXMu5YWN5ZeFKHZpcFVybCsnJnNlY3JldD0nK3NlY3JldClcXG4gICAgfSxcXG4gICAgJ+eMqyc6ZnVuY3Rpb24gKGp4dXJsLCByZWYsIGtleSkge1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIHZhciBnZXRWaWRlb0luZm8gPSBmdW5jdGlvbiAodGV4dCkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvb2xzLkFFUyh0ZXh0LCBrZXksIGl2KTtcXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgbGV0IGhlYWRlcnMgPSB7aGVhZGVyczoge1xcXCJSZWZlcmVyXFxcIjogcmVmfHwnJ319O1xcbiAgICAgICAgICAgICAgICBrZXkgPSBrZXkgPT0gdW5kZWZpbmVkID8gXFxcImR2eVlSUWxuUFJDTWRRU2VcXFwiIDoga2V5O1xcbiAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IHJlZj9yZXF1ZXN0KGp4dXJsLCBoZWFkZXJzKTpyZXF1ZXN0KGp4dXJsKTtcXG4gICAgICAgICAgICAgICAgaWYgKC8mYnR3YWY9Ly50ZXN0KGh0bWwpKSB7XFxuICAgICAgICAgICAgICAgICAgICBodG1sID0gcmVxdWVzdChqeHVybCArIFxcXCImYnR3YWZcXFwiICsgaHRtbC5tYXRjaCgvJmJ0d2FmKC4qPylcXFwiLylbMV0sIGhlYWRlcnMpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHZhciBpdiA9IGh0bWwuc3BsaXQoXFxcIl90b2tlbiA9IFxcXFxcXFwiXFxcIilbMV0uc3BsaXQoXFxcIlxcXFxcXFwiXFxcIilbMF07XFxuICAgICAgICAgICAgICAgIGV2YWwoaHRtbC5tYXRjaCgvdmFyIGNvbmZpZyA9IHtbXFxcXHNcXFxcU10qP30vKVswXSArIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgaWYgKCEvXmh0dHAvLnRlc3QoY29uZmlnLnVybCkpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy51cmwgPSBkZWNvZGVVUklDb21wb25lbnQodG9vbHMuQUVTKGNvbmZpZy51cmwsIGtleSwgaXYpKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLnVybDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJcXFwiO1xcbiAgICAgICAgICAgIH1cXG4gICAgfSxcXG4gICAgTExROiBmdW5jdGlvbihqeHVybCkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB2YXIgYXBpID0ganh1cmwuc3BsaXQoJz91cmw9JylbMF0gKyBcXFwiYXBpLnBocFxcXCI7XFxuICAgICAgICAgICAgdmFyIGI2NGlkID0gYmFzZTY0RW5jb2RlKGp4dXJsLnNwbGl0KCd1cmw9JylbMV0pO1xcbiAgICAgICAgICAgIHZhciBwYXJzZWlkID0gdG9vbHMuY2Flc2FyQ2lwaGVyKGI2NGlkLCAtMSk7XFxuICAgICAgICAgICAgdmFyIGpzb24gPSBKU09OLnBhcnNlKHJlcXVlc3QoYXBpLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzoganh1cmxcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXFxuICAgICAgICAgICAgICAgIGJvZHk6ICd1cmw9JyArIHBhcnNlaWRcXG4gICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgdXJsID0gKGpzb24uY29kZSA9PSAyMDAgPyBiYXNlNjREZWNvZGUodG9vbHMuY2Flc2FyQ2lwaGVyKGpzb24udXJsLCAtMSkpIDogJycpO1xcbiAgICAgICAgICAgIHJldHVybiB1cmw7XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgcmV0dXJuICcnO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBQYW5HdTogZnVuY3Rpb24odmlwVXJsLCBkYXRhKSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIC8qdmFyIHJlZiA9ICdodHRwczovL3d3dy5wYW5ndWppZXhpLmNvbS8nO1xcbiAgICAgICAgICAgIHZhciBwYXJzZSA9ICdodHRwczovL3Bhbmd1YXBpLm50cnlqZC5uZXQvamlleGkvP3VybD0nICsgdmlwVXJsO1xcbiAgICAgICAgICAgIHZhciBhcGkgPSAnaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L2ppZXhpL2FwaS5waHAnO1xcbiAgICAgICAgICAgICovXFxuICAgICAgICAgICAgLy92YXIgcmVmID0gJ2h0dHBzOi8veG15c3R2LmNvbS8nO1xcbiAgICAgICAgICAgIC8vdmFyIHBhcnNlID0gJ2h0dHBzOi8vd3d3Ljk5a3B3LmNvbS9wYW5ndS9pbmRleC5waHA/dXJsPScgKyB0YWlsVXJsO1xcbiAgICAgICAgICAgIC8vdmFyIGFwaSA9ICdodHRwczovL3d3dy45OWtwdy5jb20vcGFuZ3UvYXBpLnBocCc7XFxuICAgICAgICAgICAgdmFyIHBhcnNlID0gJ2h0dHBzOi8vd3d3LnBhbmd1amlleGkuY29tL3Bhbmd1Lz91cmw9JyArIHZpcFVybDtcXG4gICAgICAgICAgICB2YXIgYXBpID0gJ2h0dHBzOi8vcGFuZ3VhcGkubnRyeWpkLm5ldC9wYW5ndTIwMjEvYXBpLnBocCc7XFxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcXG4gICAgICAgICAgICAgICAgcmVmID0gZGF0YVswXTtcXG4gICAgICAgICAgICAgICAgcGFyc2UgPSBkYXRhWzFdO1xcbiAgICAgICAgICAgICAgICBhcGkgPSBkYXRhWzJdO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgVGltZSA9IChNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkgKiAxKS50b1N0cmluZygpO1xcbiAgICAgICAgICAgIHZhciB1cmwgPSBKU09OLnBhcnNlKHJlcXVlc3QoYXBpLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogcGFyc2VcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgYm9keTogJ3VybD0nICsgdmlwVXJsICsgJyZyZWZlcmVyPScgKyBiYXNlNjRFbmNvZGUocGFyc2UpICsgJyZyZWY9MSZ0aW1lPScgKyBUaW1lICsgJyZ0eXBlPSZvdGhlcj0nICsgYmFzZTY0RW5jb2RlKHZpcFVybCkgKyAnJmlvcz0wJyxcXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgICAgICB9KSkudXJsO1xcbiAgICAgICAgICAgIHJldHVybiB1cmw7XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgcmV0dXJuICcnO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICB5dW4xNzE3OiBmdW5jdGlvbiAodmlwVXJsKSB7XFxuICAgICAgICB2YXIgaXN5ayA9IHZpcFVybC5pbmRleE9mKCd5b3VrdScpO1xcbiAgICAgICAgdmFyIHJlZiA9IFxcXCJodHRwczovL3d3dy4xNzE3eXVuLmNvbS9qeC90eS5waHA/dXJsPVxcXCIgKyB2aXBVcmw7XFxuICAgICAgICB2YXIgcGFyc2UgPSBcXFwiaHR0cHM6Ly8xNzE3eXVuLmNvbS56aDE4OC5uZXQvMDgyOC8/dXJsPVxcXCIgKyB2aXBVcmw7XFxuICAgICAgICB2YXIgYXBpID0gXFxcImh0dHBzOi8vMTcxN3l1bi5jb20uemgxODgubmV0LzEwMDQvLi5pbmRleC4ucGhwXFxcIjtcXG4gICAgICAgIHJldHVybiBpc3lrID09IC0xID8gdGhpcy5QYW5HdSh2aXBVcmwsIFtyZWYsIHBhcnNlLCBhcGldKSA6IHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmICsgJyx2aXA6JywgcGFyc2UgKyAnLHZpcDonLCBhcGldKTtcXG4gICAgfSxcXG4gICAgT0vop6PmnpA6J2h0dHBzOi8vb2tqeC5jYy8/dXJsPScsXFxuICAgIE0zVThUVjonaHR0cHM6Ly9qeC5tM3U4LnR2L2ppZXhpLz91cmw9JyxcXG4gICAg6YGT6ZW/5LuT5bqT6YCa5YWNOmZ1bmN0aW9uICh1cmwsdGltZW91dCl7XFxuICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYih1cmwsdGltZW91dCk7XFxuICAgIH0sXFxuICAgIEZ1WGluZzogZnVuY3Rpb24odmlwVXJsKSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIC8vaWYodmlwVXJsLmluZGV4T2YoJ3YueW91a3UnKSE9LTEpe1xcbiAgICAgICAgICAgIC8vICAgIHZpcFVybCA9IChKU09OLnBhcnNlKHJlcXVlc3QodmlwVXJsLCB7cmVkaXJlY3Q6ZmFsc2UsIHdpdGhIZWFkZXJzOnRydWV9KSkuaGVhZGVycy5sb2NhdGlvbiArICcnKS5yZXBsYWNlKC9cXFxcPy4qLywnJyk7XFxuICAgICAgICAgICAgLy99XFxuICAgICAgICAgICAgdmFyIHJlZiA9ICdodHRwczovL2p4Lnh1ZXR1aWd1YW5nLmNuL2ppZXhpLz91cmw9JyArIHZpcFVybDtcXG4gICAgICAgICAgICB2YXIgcGFyc2UgPSByZWY7XFxuICAgICAgICAgICAgdmFyIGFwaSA9ICdodHRwczovL2p4Lnh1ZXR1aWd1YW5nLmNuL2ppZXhpL2FwaXVfZngucGhwJztcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5QYW5HdSh2aXBVcmwsIFtyZWYsIHBhcnNlLCBhcGldKTtcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxuICAgICAgICB9XFxuICAgIH0sXFxufTtcXG5cXG5PYmplY3QuYXNzaWduKFBhcnNlUywgb3JpZ2luYWxQYXJzZVMsIE15UGFyc2VTKTtcXG4vL+imhueblumhuuW6j++8jOesrOS4ieS4quimhuebluesrOS6jOS4queEtuWQjuimhuebluesrOS4gOS4qlxcblxcblxcbmZ1bmN0aW9uIGF5dG1QYXJzZSh2aXBVcmwsc3RyVGl0bGUsdGltZW91dCxwbGF5VXJsKSB7XFxuICAgIC8vIOWPguaVsDE65q2j54mI572R5Z2A5Zyw5Z2AIOWPguaVsDIg5a6a5ZCR6Kej5p6Q5o6l5Y+j5ZCN56ewIOWPguaVsDMgeDXop6PmnpDotoXml7Yg5Y+C5pWwNCDlrozmlbTnmoTmkq3mlL7pk77mjqVcXG4gICAgc3RyVGl0bGUgPSBzdHJUaXRsZXx8Jyc7XFxuICAgIHZpcFVybCA9IGRlY29kZVVSSUNvbXBvbmVudCh2aXBVcmwpO1xcbiAgICBwbGF5VXJsPWRlY29kZVVSSUNvbXBvbmVudChwbGF5VXJsKXx8dmlwVXJsfHwnJztcXG4gICAgLy8gbG9nKCfkvKDlhaVheXRtUGFyc2XnmoTotoXml7Y6Jyt0aW1lb3V0KTtcXG4gICAgdGltZW91dCA9IHBhcnNlSW50KHRpbWVvdXQpfHxwYXJzZUludChnZXRWYXIoJ2RwLmp4VGltZW91dCcsJzUwMDAnKSl8fDUwMDA7XFxuXFxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiAgICBsZXQganhzUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeUppZXhpLmpzb25cXFwiO1xcbiAgICBsZXQgTXlKaWV4aSA9IHt9O1xcbiAgICBsZXQgamlleGlzID0ge307XFxuICAgIHRyeSB7XFxuICAgICAgICBNeUppZXhpID0gSlNPTi5wYXJzZShmZXRjaChqeHNSb3V0ZSkpO1xcbiAgICAgICAgamlleGlzID0gTXlKaWV4aS5qaWV4aXMuZmlsdGVyKGl0PT5pdC5uYW1lPT09TXlKaWV4aS5ub3cpWzBdO1xcbiAgICB9Y2F0Y2ggKGUpIHt9XFxuICAgIGZ1bmN0aW9uIGdldFBsYXlKeChrZXkpe1xcbiAgICAgICAgbGV0IHBsYXlVcmxMaXN0ID0gW107Ly/mibnph4/mkq3mlL7lnLDlnYDliJfooahcXG4gICAgICAgIGxldCBuYW1lTGlzdCA9IFtdO1xcbiAgICAgICAgbGV0IGp4cyA9IGppZXhpc1trZXldOyAvLyDpgILnlKjkuo7ov5nkuKrnvZHnq5nnmoTop6PmnpDliJfooahcXG4gICAgICAgIGlmKGp4cyl7XFxuICAgICAgICAgICAgZm9yKGxldCBpIGluIGp4cyl7XFxuICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBQYXJzZVNbanhzW2ldXSA9PSAnc3RyaW5nJyYmUGFyc2VTW2p4c1tpXV0ubWF0Y2goL2h0dHAuKj89Lykpe1xcbiAgICAgICAgICAgICAgICAgICAgcGxheVVybExpc3QucHVzaChQYXJzZVNbanhzW2ldXSt2aXBVcmwpO1xcbiAgICAgICAgICAgICAgICAgICAgbmFtZUxpc3QucHVzaChqeHNbaV0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgLy8gcmV0dXJuIHBsYXlVcmxMaXN0XFxuICAgICAgICByZXR1cm4ge3BsYXlVcmxMaXN0OnBsYXlVcmxMaXN0LG5hbWVMaXN0Om5hbWVMaXN0fVxcbiAgICB9XFxuICAgIGxldCBleHRyYSA9IHt9O1xcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gICAgaWYoIXN0clRpdGxlKXtcXG4gICAgICAgIGlmKC9yZW5yZW5taS18ZmVuZG91XFxcXC5kdW9kdW96eXxMVHxSb25nWGluZ1ZSfDFcXFxcLnJ1aWZlbmdsYlxcXFwuY29tfHhmeXxzdW95b3xOYWlmZWltaXxsZWR1b3xsYW9kaXx4dWVyZW4vLnRlc3QodmlwVXJsKSl7XFxuICAgICAgICAgICAgc3RyID0gbXlTZXQub3RoO1xcbiAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdvdGgnKTtcXG4gICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgIHZhciBob3N0O1xcbiAgICAgICAgICAgIHRyeXtcXG4gICAgICAgICAgICAgICAgaG9zdCA9IHZpcFVybC5tYXRjaCgvXFxcXC4oLio/KVxcXFwvLylbMV07XFxuICAgICAgICAgICAgfWNhdGNoKGUpe1xcbiAgICAgICAgICAgICAgICBpZighL15odHRwLy50ZXN0KHBsYXlVcmwpKXtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwi5pat5o+S6LCD55So5aSx6LSl77yBXFxcXG7pnZ7mraPluLjnmoR2aXDmraPniYjlnLDlnYDkuJTmnKror4bliKvljp/nq5nop6PmnpDmkq3mlL7lnLDlnYBcXFwiO1xcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZVMu6YGT6ZW/5LuT5bqT6YCa5YWNKHBsYXlVcmwsdGltZW91dClcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAvL2hvc3QgPSBkZWNvZGVVUklDb21wb25lbnQoaG9zdCk7XFxuICAgICAgICAgICAgc3dpdGNoIChteVNldC5xanUpIHtcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFwi6buY6K6kXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaG9zdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInFxLmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnR4O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgndHgnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwiaXFpeWkuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQucXk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdxeScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJ5b3VrdS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC55aztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3lrJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcImFsaXp5XFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQuYWw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdhbCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJtZ3R2LmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0Lm1nO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnbWcnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwiYmlsaWJpbGkuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQuYmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdibCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJzb2h1LmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnNoO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnc2gnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwidHYuc29odS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5zaDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3NoJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIml4aWd1YS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC54ZztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3hnJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInBwdHYuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQucHA7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdwcCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJtaWd1dmlkZW8uY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQubWk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdtaScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJsZS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5sZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ2xlJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIjE5MDUuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQub25lO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnb25lJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcImZ1bi50dlxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LmZ1bjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ2Z1bicpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5vdGg7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5xanU7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1lbHNle1xcbiAgICAgICAgbG9nKCfprZTmlq3miafooYzlrprlkJHop6PmnpDnur/ot6/lpLQ6JytzdHJUaXRsZSk7XFxuICAgICAgICBzdHIgPSBzdHJUaXRsZTtcXG4gICAgfVxcbiAgICBsZXQgd2l0aEJhdGNoID0gISEoTXlKaWV4aS5pc0F1dG8gJiYgTXlKaWV4aS5hdXRvTW9kZSA9PT0gJ+mAn+W6puS8mOWFiCcpO1xcbiAgICBpZiAodHlwZW9mIFBhcnNlU1tzdHJdID09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgIGlmKC/pgJrlhY0vLnRlc3Qoc3RyKSl7XFxuICAgICAgICAgICAgcmV0dXJuIFBhcnNlU1tzdHJdKHZpcFVybCx0aW1lb3V0KTtcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciB1cmwgPSBQYXJzZVNbc3RyXSh2aXBVcmwpO1xcbiAgICAgICAgaWYoL15oaWtlcjp8XnRvYXN0OnxecnVsZTp8Xng1UnVsZTp8XndlYlJ1bGU6fF5zZWxlY3QvLnRlc3QodXJsKSl7XFxuICAgICAgICAgICAgcmV0dXJuIHVybDtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmKCF1cmwmJiEvXmh0dHAvLnRlc3QodmlwVXJsKSl7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+mtlOaWreino+aekOWksei0pT4nK3ZpcFVybFxcbiAgICAgICAgfVxcbiAgICAgICAgLy8gbG9nKHZpcFVybCsn5YWN5ZeF5o6i57uT5p6cOicrdXJsKTtcXG4gICAgICAgIGlmICgvXlxcXFwvLy50ZXN0KHVybCkpIHtcXG4gICAgICAgICAgICB1cmwgPSAnaHR0cHM6JyArIHVybFxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKC89aHR0cC8udGVzdCh1cmwpKSB7XFxuICAgICAgICAgICAgdXJsID0gLyZ1cmw9Ly50ZXN0KHVybCkgPyB1cmwgOiAnaHR0cCcgKyBkZWNvZGVVUklDb21wb25lbnQodXJsLnNwbGl0KCc9aHR0cCcpWzFdKTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8qaWYodXJsLm1hdGNoKC9tZ3R2LmNvbS9nKT09J21ndHYuY29tJyl7XFxuICAgICAgICAgICAgdXJsID0gdXJsICsgJzt7UmVmZXJlckBodHRwczovL3d3dy5tZ3R2LmNvbX0nO1xcbiAgICAgICAgfSBlbHNlICovXFxuICAgICAgICBpZiAoL1xcXFwuZmx2Ly50ZXN0KHVybCkmJiEvVXNlci1BZ2VudC8udGVzdCh1cmwpKSB7XFxuICAgICAgICAgICAgdXJsID0gdXJsICsgJzt7VXNlci1BZ2VudEBhcHAmJlJlZmVyZXJAJyArIHZpcFVybCArICd9JztcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICh1cmwgPT09ICcnIHx8IHVybCA9PT0gdmlwVXJsKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHZpcFVybDtcXG4gICAgICAgIH0gZWxzZSBpZighLyNpc1ZpZGVvPXRydWUjLy50ZXN0KHVybCkpe1xcbiAgICAgICAgICAgIHJldHVybiB1cmwgKyAnI2lzVmlkZW89dHJ1ZSMnO1xcbiAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgcmV0dXJuIHVybFxcbiAgICAgICAgfVxcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBQYXJzZVNbc3RyXSA9PSAnc3RyaW5nJyYmUGFyc2VTW3N0cl0ubWF0Y2goL2h0dHAuKj89LykpIHtcXG4gICAgICAgIC8vIGxvZyhcXFwi5pat5o+S5byA5aeL6YCa55So5omn6KGM5YWN5ZeFIGRlZmF1bHRQYXJzZVdlYjpcXFwiK3RpbWVvdXQpO1xcbiAgICAgICAgLy9sb2coXFxcIum7mOiupHg1XFxcIitQYXJzZVMuZGVmYXVsdFBhcnNlV2ViKTtcXG4gICAgICAgIGlmKHdpdGhCYXRjaCl7XFxuICAgICAgICAgICAgaWYodHlwZW9mKGV4dHJhLnBsYXlVcmxMaXN0KT09PSdvYmplY3QnJiZleHRyYS5wbGF5VXJsTGlzdC5sZW5ndGg+MCl7XFxuICAgICAgICAgICAgICAgIGV4dHJhLnBsYXlVcmxMaXN0ID0gZXh0cmEucGxheVVybExpc3QuZmlsdGVyKGl0PT5pdCE9PShQYXJzZVNbc3RyXXx8c3RyKSArIHZpcFVybCk7XFxuICAgICAgICAgICAgICAgIGxldCBuYW1lTGlzdCA9IGV4dHJhLm5hbWVMaXN0O1xcbiAgICAgICAgICAgICAgICBuYW1lTGlzdC51bnNoaWZ0KHN0cik7XFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHVuaXF1ZTIoYXJyYXkpe1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChhcnJheSkpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGV4dHJhLm5hbWVMaXN0PXVuaXF1ZTIobmFtZUxpc3QpO1xcbiAgICAgICAgICAgICAgICBleHRyYS5wbGF5VXJsTGlzdCA9IHVuaXF1ZTIoZXh0cmEucGxheVVybExpc3QpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgIGV4dHJhID0ge31cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlV2ViP1BhcnNlUy5kZWZhdWx0UGFyc2VXZWIoKFBhcnNlU1tzdHJdfHxzdHIpICsgdmlwVXJsLHRpbWVvdXQsZXh0cmEpOihQYXJzZVNbc3RyXXx8c3RyKSArIHZpcFVybDtcXG4gICAgfSBlbHNlIGlmKHR5cGVvZihzdHIpPT09J3N0cmluZycmJnN0ci5sZW5ndGg+MSYmKHR5cGVvZiBQYXJzZVNbc3RyXT09J3VuZGVmaW5lZCd8fCFQYXJzZVNbc3RyXSkmJiEvXmh0dHAvLnRlc3Qoc3RyKSl7XFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6K+36L+b6KGM5pat5o+S6YWN572uLOaOqOiNkOaLieWPlumBk+mVv+eyvumAiSFcXFxcbuajgOa1i+WIsOaXoOaViOeahOino+aekOmFjee9rjonK3N0cjtcXG4gICAgfWVsc2Uge1xcbiAgICAgICAgcmV0dXJuIFBhcnNlUy5kZWZhdWx0UGFyc2Uoc3RyICsgdmlwVXJsLHRpbWVvdXQpO1xcbiAgICB9XFxufVxcblxcbnZhciBwbGF5UGFyc2UgPSB7XFxuICAgIHBsYXllcl94eDogZnVuY3Rpb24oanVybCwgTGFiZWwpIHtcXG4gICAgICAgIHJldHVybiAkKGp1cmwpLmxhenlSdWxlKChrKSA9PiB7XFxuICAgICAgICAgICAgdmFyIGpzVXJsID0gSlNPTi5wYXJzZShmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKSkuY2o7XFxuICAgICAgICAgICAgdmFyIExhYmVsID0gaztcXG4gICAgICAgICAgICB2YXIgZmEgPSBbJ2xldHYnLCAncHB0dicsICdxcScsICd5b3VrdScsICdxaXlpJywgJ2lxaXlpJywgJ21ndHYnLCAnYmlsaWJpbGknLCAnc29odScsICdtaWd1JywgJ20xOTA1JywgJ3ZpcCddO1xcbiAgICAgICAgICAgIHZhciBodG1sID0gcGFyc2VEb20ocmVxdWVzdChpbnB1dCksIExhYmVsKTtcXG4gICAgICAgICAgICBldmFsKGh0bWwucmVwbGFjZSgvcGxheWVyXy4qPz17LywgJ3BkYXRhPXsnKSk7XFxuICAgICAgICAgICAgZXZhbChmZXRjaChqc1VybCkpO1xcbiAgICAgICAgICAgIGlmIChwZGF0YS51cmwuc3Vic3RyKDAsIDgpLm1hdGNoKC9KVC4uSlQuLi8pKSB7XFxuICAgICAgICAgICAgICAgIHBkYXRhLnVybCA9IGJhc2U2NERlY29kZShwZGF0YS51cmwpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAocGRhdGEudXJsLnN1YnN0cigwLCA4KS5tYXRjaCgvJS4uJS4uLykpIHtcXG4gICAgICAgICAgICAgICAgcGRhdGEudXJsID0gdW5lc2NhcGUocGRhdGEudXJsKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGZhLmluY2x1ZGVzKHBkYXRhLmZyb20pKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2UocGRhdGEudXJsKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gcGRhdGEudXJsICsgJyNpc1ZpZGVvPXRydWUjJztcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCBMYWJlbClcXG4gICAgfVxcbn07XFxuZnVuY3Rpb24gbXpQb3B1cCgpIHtcXG4gICAgLypcXG4gICAgaWYgKGdldFZhcihcXFwiaWprLXR4XFxcIiwgXFxcIlxcXCIpID09IFxcXCIxXFxcIikge1xcbiAgICAgICAgc2V0SXRlbShcXFwidGl4aW5nXFxcIiwgXFxcIjFcXFwiKVxcbiAgICAgICAgY2xlYXJWYXIoXFxcImlqay10eFxcXCIpXFxuICAgIH1cXG4gICAgaWYgKGdldEl0ZW0oXFxcInRpeGluZ1xcXCIsIFxcXCJcXFwiKSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgY29uZmlybSh7XFxuICAgICAgICAgICAgdGl0bGU6ICflhY3otKPlo7DmmI4nLFxcbiAgICAgICAgICAgIGNvbnRlbnQ6ICfmnKznqIvluo/kuI3mj5Dkvpvop4bpopHop6PmnpDmnI3liqFcXFxcbuaJgOacieWGheWuueWdh+S7jueUqOaIt+WIhuS6q+S4reaUtumbhlxcXFxu5LuF5L6b5rWL6K+V5ZKM5a2m5Lmg5Lqk5rWBXFxcXG5cXFxcbuehruWumuWNs+iupOWPr++8jOS4jeWGjeaPkOmGkicsXFxuICAgICAgICAgICAgY29uZmlybTogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dFZhcihcXFwiaWprLXR4XFxcIiwgXFxcIjFcXFwiKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v54K55Ye75LqG56Gu6K6kXFxcIlxcblxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICB9XFxuICAgICAqL1xcbn1cXG4vKlxcbmlmICghZ2V0VmFyKFxcXCJ0aXhpbmdcXFwiKSkge1xcbiAgICBtelBvcHVwKCk7XFxuICAgIHB1dFZhcigndGl4aW5nJywnb2snKTtcXG59XFxuKi9cXG5mdW5jdGlvbiBzYXZlQnV0dG9uKGNvbnRlbnQsbmFtZSkge1xcbiAgICBuYW1lID0gbmFtZXx8Jyc7XFxuICAgIHZhciBkYXRhID0gY29udGVudC5zcGxpdCgn4piF4piF4piFJyk7XFxuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMikge1xcbiAgICAgICAgdmFyIF9kdCA9IHBhcnNlUGFzdGUoZGF0YVswXSk7XFxuICAgICAgICBjb250ZW50ID0gX2R0LnN1YnN0cigwLCA2KSAhPT0gJ2Vycm9yOicgPyBfZHQgOiAnJztcXG4gICAgfVxcbiAgICBkYXRhID0gY29udGVudC5zcGxpdCgn4piFJyk7XFxuICAgIHZhciB0eXBlID0gZGF0YVswXTtcXG4gICAgdmFyIGFyckxpc3QgPSBbXTtcXG4gICAgdmFyIG9iakNvZGUgPSB7fTtcXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMiAmJiBkYXRhWzBdICE9PSAn55u06ZO+Jykge1xcbiAgICAgICAgdmFyIG9iaktleSA9IGRhdGFbMV07XFxuICAgICAgICB2YXIgb2JqVmFsdWUgPSBkYXRhWzJdO1xcbiAgICAgICAgaWYgKHR5cGUgPT09ICdNeVBhcnNlUycpIHtcXG4gICAgICAgICAgICBvYmpWYWx1ZSA9IGJhc2U2NERlY29kZShvYmpWYWx1ZSk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAob2JqVmFsdWUuc3BsaXQoJ2Z1bmN0aW9uJykubGVuZ3RoID4gMSkge1xcbiAgICAgICAgICAgIGV2YWwoJ29ialZhbHVlPScgKyBvYmpWYWx1ZSk7XFxuICAgICAgICB9XFxuICAgICAgICBhcnJMaXN0LnNwbGljZSgwLCAwLCBvYmpLZXkpOyAvL+a3u+WKoOmhueebrumdnuWIoOmZpFxcbiAgICAgICAgb2JqQ29kZVtvYmpLZXldID0gb2JqVmFsdWU7XFxuXFxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ+ebtOmTvicpIHtcXG4gICAgICAgIGFyckxpc3QgPSBkYXRhO1xcbiAgICAgICAgYXJyTGlzdC5zcGxpY2UoMCwgMSk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBhcnJMaXN0ID0gbnVsbDtcXG4gICAgfVxcbiAgICBpZiAoYXJyTGlzdCAhPSBudWxsKSB7XFxuICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcbiAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxuICAgICAgICBBcnJheS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24odmFsKSB7XFxuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5pbmRleE9mKHZhbCk7XFxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcXG4gICAgICAgICAgICAgICAgdGhpcy5zcGxpY2UoaW5kZXgsIDEpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH07XFxuICAgICAgICBpZihuYW1lKXsvL+WIoOmZpOWQjeensOWIl+ihqOWSjOS7o+eggVxcbiAgICAgICAgICAgIGpzb24udGl0bGUucmVtb3ZlKG5hbWUpO1xcbiAgICAgICAgICAgIGRlbGV0ZSBqc29uLmNvZGVzW25hbWVdO1xcbiAgICAgICAgfVxcbiAgICAgICAgYXJyTGlzdCA9IGFyckxpc3QuY29uY2F0KGpzb24udGl0bGUpO1xcbiAgICAgICAganNvbi50aXRsZSA9IEFycmF5LmZyb20obmV3IFNldChhcnJMaXN0KSk7XFxuICAgICAgICBPYmplY3QuYXNzaWduKGpzb24uY29kZXMsIG9iakNvZGUpO1xcbiAgICAgICAgaWYgKHR5cGUgPT09ICfmtYvor5UnKSB7XFxuICAgICAgICAgICAgZXZhbCgndmFyIGNvbmZpZyA9JyArIGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpKTtcXG4gICAgICAgICAgICBldmFsKGZldGNoKGNvbmZpZy5jaikpO1xcbiAgICAgICAgICAgIGlmICh0eXBlb2YgUGFyc2VTW2RhdGFbMV1dID09IFxcXCJmdW5jdGlvblxcXCIpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlU1tkYXRhWzFdXShkYXRhWzJdKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYihQYXJzZVNbZGF0YVsxXV0gKyBkYXRhWzJdKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3suS/neWtmOWGheWuuVxcXCI7XFxuICAgICAgICB9XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5peg5rOV6K+G5Yir6L+Z5Liq5YaF5a655ZGiXFxcIlxcbiAgICB9XFxufVxcbi8vIOS7peS4i+S7o+eggeWNg+S4h+S4jeimgeaUvuWHuuadpeWQpuWImeaKpemUmVxcbmlmIChnZXRJdGVtKCd1cGRhdGVEYXRlJykgIT0gdXBkYXRlRGF0ZSkge1xcbi8vIGlmICh0cnVlKSB7XFxuICAgIC8vIOaKimZ1bmN0aW9u5Y+Y5oiQc3RyaW5nXFxuICAgIGxldCBmdW5jdGlvbkNvZGUgPSBzYXZlQnV0dG9uICsgJzsnK216UG9wdXA7XFxuICAgIC8vIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS9wbHNjUGFyc2UuaHRtbCcsIGZldGNoKF9teVNldC5ja0xpbmsgKyAncGxzY1BhcnNlLmh0bWwnKSk7XFxuICAgIHNldEl0ZW0oJ215RnVuY3Rpb24nLCBmdW5jdGlvbkNvZGUpO1xcbiAgICBzZXRJdGVtKCd1cGRhdGVEYXRlJywgdXBkYXRlRGF0ZSk7XFxufVxcbnZhciBiakl0ZW0gPSB7XFxuICAgIGhmUGx1Z2luOiBmdW5jdGlvbihwYXJzZVJvdXRlKSB7XFxuICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcbiAgICAgICAgICAgIGlmIChmaWxlRXhpc3QoaykpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGNqY2FjaGUgPSBnZXRWYXIoJ2NqQ2FjaGUnKTtcXG4gICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChrKSk7XFxuICAgICAgICAgICAgICAgIGpzb24uc2V0dGluZ3MuY2ogPSBjamNhY2hlO1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoaywgJC5zdHJpbmdpZnkoanNvbikpO1xcbiAgICAgICAgICAgICAgICB2YXIgb2xkUm91dGUgPSBnZXRWYXIoJ29sZENvbmZpZycpO1xcbiAgICAgICAgICAgICAgICB2YXIgb2xkQ29uZmlnID0ganNvbi5zZXR0aW5ncztcXG4gICAgICAgICAgICAgICAgb2xkQ29uZmlnLmNqID0gY2pjYWNoZTtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKG9sZFJvdXRlLCAkLnN0cmluZ2lmeShvbGRDb25maWcpKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5oGi5aSN5oiQ5YqfJztcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6ZyA6KaB5YWI5ouJ5Y+W5YiX6KGoJ1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHBhcnNlUm91dGUpXFxuICAgIH0sXFxuICAgIHB1bGxDb2RlOiBmdW5jdGlvbihrKSB7XFxuICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcbiAgICAgICAgICAgIHZhciBwdWxsTW9kZSA9IGtbMF07XFxuICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBrWzFdO1xcbiAgICAgICAgICAgIHZhciBwYXJzZUZpbGUgPSBmZXRjaChwYXJzZVJvdXRlKTtcXG4gICAgICAgICAgICBpZiAoIXBhcnNlRmlsZSkge1xcbiAgICAgICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSBmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKTtcXG4gICAgICAgICAgICAgICAgc2V0dGluZ3MgPSAhc2V0dGluZ3MgPyB7fSA6IEpTT04ucGFyc2Uoc2V0dGluZ3MpO1xcbiAgICAgICAgICAgICAgICB2YXIganNvbiA9IHt9O1xcbiAgICAgICAgICAgICAgICBqc29uLnNldHRpbmdzID0gc2V0dGluZ3M7XFxuICAgICAgICAgICAgICAgIGpzb24udGl0bGUgPSBbXTtcXG4gICAgICAgICAgICAgICAganNvbi5jb2RlcyA9IHt9O1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgcGFyc2VGaWxlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIHBhcnNlVGl0bGUgPSBbXTtcXG4gICAgICAgICAgICB2YXIgcGFyc2VDb2RlPXt9O1xcbiAgICAgICAgICAgIHZhciBjakxpbmsgPSBnZXRWYXIoJ3BsdWdpbkxpbmsnKTtcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICBpZigvQGJhc2U2NDpcXFxcL1xcXFwvLy50ZXN0KGNqTGluaykpe1xcbiAgICAgICAgICAgICAgICAgICAgZXZhbChiYXNlNjREZWNvZGUoY2pMaW5rLnNwbGl0KCdAYmFzZTY0Oi8vJylbMV0pKTtcXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoL+aPkuS7tuWQjS8udGVzdChjakxpbmspKXtcXG4gICAgICAgICAgICAgICAgICAgIGxldCByZWFsTGluayA9IGNqTGluay5zcGxpdCgn5o+S5Lu25ZCNJylbMF0ucmVwbGFjZSgvW1xcXFxzXS9nLCcnKTtcXG4gICAgICAgICAgICAgICAgICAgIGxvZygn6Kej5p6Q5LqR5Ymq5YiH5p2/OicrcmVhbExpbmspO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHlQYXN0ZSA9IHBhcnNlUGFzdGUocmVhbExpbmspO1xcbiAgICAgICAgICAgICAgICAgICAgaWYoL0BiYXNlNjQ6XFxcXC9cXFxcLy8udGVzdCh5UGFzdGUpKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKGJhc2U2NERlY29kZSh5UGFzdGUuc3BsaXQoJ0BiYXNlNjQ6Ly8nKVsxXSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgUGFyc2VTPT09J3VuZGVmaW5lZCcpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aLieWPluS4qum4oeavm+aPkuS7tizph4zpnaLov55QYXJzZVPlr7nosaHpg73msqHmnIkhJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/puKHmr5vmj5Lku7bmiafooYzmiqXplJk6XFxcXG4nK2UubWVzc2FnZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pyq6IO96K+G5Yir5LqR5Ymq5YiH5p2/5Lit55qE5YaF5a65OlxcXFxuJyt5UGFzdGUuc3Vic3RyaW5nKDAsMTAwKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjakxpbmsgPT09ICdR56WeJykge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGppZXhpID0gZmV0Y2goJ2hpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0Jykuc3BsaXQoJ1xcXFxuJyk7XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgaW4gamlleGkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGU9amlleGlbaV0uc3BsaXQoJyYmJylbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGU9amlleGlbaV0uc3BsaXQoJyYmJylbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVbdGl0bGVdPWNvZGU7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy8gfWVsc2UgaWYoL14jW2EtekEtWjAtOV17MiwxMH0kLy50ZXN0KGNqTGluaykpey8v56aP5Yip5Y+j5LukMuWIsDEw5L2NXFxuICAgICAgICAgICAgICAgIGVsc2UgaWYoL14jW1xcXFxTXXsyLDEwfSQvLnRlc3QoY2pMaW5rKSl7Ly/npo/liKnlj6Pku6Qy5YiwMTDkvY3ku7vmhI/pnZ7nqbrlrZfnrKbkuLJcXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHt0YXNrQ2FsbCwgdGFza1J1bix0YXNrUmVxfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3Rhc2tDYWxsP3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAvLyBsb2coJ+W8gOWni+aJp+ihjOS7u+WKoeS7k+W6k+iOt+WPluaWreW/teaPkuS7tuemj+WIqeWPo+S7pCcpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHRhc2tDYWxsKDE3LCdEbkZ1bGknLFtjakxpbmtdKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldCA9IEpTT04ucGFyc2UocmVzdWx0LnJlc3VsdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKHJldCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmV0Lm9wdD09PSdlcnJvcicpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8vJytyZXQubXNnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHJldC5vcHQ9PT0ndXJsJyl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBodG1sID0gZmV0Y2gocmV0LnJldCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnIgPSBodG1sLmluY2x1ZGVzKCdodHRwJyk/IGh0bWw6YmFzZTY0RGVjb2RlKGh0bWwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgamlleGkgPSBhcnIubWF0Y2goL1tcXFxcU10qPywuKj9bXFxcXHNdL2cpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpIGluIGppZXhpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGU9amlleGlbaV0uc3BsaXQoJywnKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlPWppZXhpW2ldLnNwbGl0KCcsJylbMV0uc3BsaXQoXFxcIlxcXFxuXFxcIilbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlLnB1c2godGl0bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb2RlW3RpdGxlXT1jb2RlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocmV0Lm9wdD09PSdqeCcpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigvW1xcXFxTXSo/LGh0dHBbXFxcXFNdLy50ZXN0KHJldC5yZXQpKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IHJldC5yZXQuc3BsaXQoJywnKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gcmV0LnJldC5zcGxpdCgnLCcpWzFdLnNwbGl0KCdcXFxcbicpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09Y29kZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoL15odHRwLy50ZXN0KHJldC5yZXQpKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IGNqTGluay5zcGxpdCgnIycpWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSByZXQucmV0LnNwbGl0KCdcXFxcbicpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09Y29kZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pyq55+l55qE56aP5YipOlxcXFxuJytyZXQucmV0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocmV0Lm9wdD09PSd2aXBKeCcpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBjakxpbmsuc3BsaXQoJyMnKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSByZXQucmV0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2coY29kZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUucHVzaCh0aXRsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09L2Z1bmN0aW9uLy50ZXN0KGNvZGUpP2V2YWwoY29kZSk6Y29kZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5LuT5bqT6Z2e5pyA5paw54mI5oiW6ICF56aP5Yip56S+5Yqf6IO95byA5Y+R5LitJ1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihjakxpbms9PT0n5pat5o+SJyl7XFxuICAgICAgICAgICAgICAgICAgICBldmFsKGZldGNoKFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzXFxcIikpO1xcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZT1PYmplY3Qua2V5cyhQYXJzZVMpO1xcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZigvXmhpa2VyOlxcXFwvXFxcXC98XmZpbGU6XFxcXC9cXFxcL3xeaHR0cHxeXFxcXC9zdG9yYWdlXFxcXC98XlxcXFwvc2RjYXJkXFxcXC8vLnRlc3QoY2pMaW5rKSl7XFxuICAgICAgICAgICAgICAgICAgICBpZigvXlxcXFwvc3RvcmFnZVxcXFwvfF5cXFxcL3NkY2FyZFxcXFwvLy50ZXN0KGNqTGluaykpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNqTGluayA9ICdmaWxlOi8vJytjakxpbms7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBldmFsKGZldGNoKGNqTGluaykpO1xcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZT1PYmplY3Qua2V5cyhQYXJzZVMpO1xcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mi4nlj5blj6Pku6TmnInor68nXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIGxvZyhlLm1lc3NhZ2UpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIganhKdWRnZSA9IHR5cGVvZiBQYXJzZVMgPT0gJ29iamVjdCc7XFxuICAgICAgICAgICAgdmFyIGxiSnVkZ2UgPSB0eXBlb2YocGFyc2VUaXRsZSkgPT0gJ29iamVjdCc7XFxuICAgICAgICAgICAgaWYgKGp4SnVkZ2UgfHwgbGJKdWRnZSkge1xcbiAgICAgICAgICAgICAgICAvLyBpZiAocHVsbE1vZGUgPT09ICfliJfooagnKSB7XFxuICAgICAgICAgICAgICAgIC8vICAgICBpZiAoIWxiSnVkZ2UpIHtcXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBwYXJzZVRpdGxlID0gT2JqZWN0LmtleXMoUGFyc2VTKTtcXG4gICAgICAgICAgICAgICAgLy8gICAgIH1cXG4gICAgICAgICAgICAgICAgLy8gICAgIHZhciBuZXdQYXJzZVRpdGxlID0ganNvbi50aXRsZS5jb25jYXQocGFyc2VUaXRsZSk7XFxuICAgICAgICAgICAgICAgIC8vICAgICBqc29uLnRpdGxlID0gQXJyYXkuZnJvbShuZXcgU2V0KG5ld1BhcnNlVGl0bGUpKTtcXG4gICAgICAgICAgICAgICAgLy8gfVxcbiAgICAgICAgICAgICAgICAvLyDkuI3nrqHmi4nlj5bku6PnoIHov5jmmK/liJfooajpg73opoHmiorliJfooajmi4nkuoZcXG4gICAgICAgICAgICAgICAgaWYgKCFsYkp1ZGdlKSB7XFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlID0gT2JqZWN0LmtleXMoUGFyc2VTKTtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhwYXJzZVRpdGxlKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB2YXIgc2NPYmplY3QgPSBbXFxcIkNpdHlJUFxcXCIsIFxcXCJwY1VBXFxcIiwgXFxcImNhY2hlTTN1OFxcXCIsXFxcImlzVmlkZW9cXFwiLCBcXFwiZGVmYXVsdFBhcnNlXFxcIixcXFwiZGVmYXVsdFBhcnNlV2ViXFxcIixcXFwibWFvc3NcXFwiLCBcXFwiTExRXFxcIixcXFwicGFyc2VMY1xcXCJdO1xcbiAgICAgICAgICAgICAgICBwYXJzZVRpdGxlID0gcGFyc2VUaXRsZT9wYXJzZVRpdGxlLmZpbHRlcihpdD0+IXNjT2JqZWN0LmluY2x1ZGVzKGl0KSk6W107XFxuICAgICAgICAgICAgICAgIHZhciBuZXdQYXJzZVRpdGxlID0ganNvbi50aXRsZS5jb25jYXQocGFyc2VUaXRsZSk7XFxuICAgICAgICAgICAgICAgIGpzb24udGl0bGUgPSBBcnJheS5mcm9tKG5ldyBTZXQobmV3UGFyc2VUaXRsZSkpO1xcblxcbiAgICAgICAgICAgICAgICBpZiAocHVsbE1vZGUgPT09ICfku6PnoIEnKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9yaWdpbmFsUGFyc2VTID09ICdvYmplY3QnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSBpbiBzY09iamVjdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgb3JpZ2luYWxQYXJzZVNbc2NPYmplY3RbaV1dO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvcmlnaW5hbFBhcnNlUyA9b3JpZ2luYWxQYXJzZVMuZmlsdGVyKGl0PT4hc2NPYmplY3QuaW5jbHVkZXMoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaXQpWzBdKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihqc29uLmNvZGVzLCBvcmlnaW5hbFBhcnNlUyk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZihQYXJzZVMpPT1cXFwidW5kZWZpbmVkXFxcIil7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oanNvbi5jb2RlcywgcGFyc2VDb2RlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gXFxcInRvYXN0Oi8v5rKh5pyJ5Luj56CB77yM5LiN5Y+v5ouJ5Y+WXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGpzb24uY29kZXMsIFBhcnNlUyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vdmFyIG5ld0ZpbGUgPSB0b29scy50b0pTT04oanNvbik7Ly/oh6rlrprkuYlzdHJpbmdpZnnlh73mlbDvvIzluKbmnInovazkuYnlrZfnrKZcXG4gICAgICAgICAgICAgICAgdmFyIG5ld0ZpbGUgPSAkLnN0cmluZ2lmeShqc29uKTsgLy9KU09OLnBhcnNl5Lya5oql6ZSZXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCBuZXdGaWxlKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ouJ5Y+WJyArIHB1bGxNb2RlICsgJ+aIkOWKnyc7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+acquiOt+WPluWIsOWvueixoSc7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgW2ssIF9teVNldC5wYXJzZVJvdXRlXSlcXG4gICAgfSxcXG4gICAgcHVsbFNjcmlwdDogZnVuY3Rpb24oY2osIHg1KSB7XFxuICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcbiAgICAgICAgICAgIHZhciBjakZyb20gPSAnaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmpzP3J1bGU9TXlGaWVsZOG0sOKBvyc7XFxuICAgICAgICAgICAgdmFyIHg1RnJvbSA9ICdoaWtlcjovL3BhZ2UvUGFyc2VfRG4uaHRtbD9ydWxlPU15RmllbGThtLDigb8nO1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIHZhciBjakZpbGUgPSBKU09OLnBhcnNlKGZldGNoKGNqRnJvbSkpLnJ1bGU7XFxuICAgICAgICAgICAgICAgIHZhciB4NUZpbGUgPSBKU09OLnBhcnNlKGZldGNoKHg1RnJvbSkpLnJ1bGU7XFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShrWzBdLCBjakZpbGUpO1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoa1sxXSwgeDVGaWxlKTtcXG4gICAgICAgICAgICAgICAgY2xlYXJWYXIoJ2p4T2xkVicpO1xcbiAgICAgICAgICAgICAgICBjbGVhclZhcignanhOZXdWJyk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aLieWPluaIkOWKnyc7XFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pyq5oiQ5Yqf6I635Y+W5YaF5a65JztcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCBbY2osIHg1XSlcXG4gICAgfSxcXG4gICAgeGxTZWxlY3Q6IGZ1bmN0aW9uKGJpYW5qaSwgbGJMZW5ndGgpIHtcXG4gICAgICAgIHJldHVybiBcXFwic2VsZWN0Oi8vXFxcIiArIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICBvcHRpb25zOiBbJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXCJjb2xvcjpyZWRcXFwiIHRpdGxlPVxcXCLliKDpmaR8fCcgKyBiaWFuamkgKyAnXFxcIj7liKAg6ZmkJywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXCJjb2xvcjojRjU3NDc0XFxcIiB0aXRsZT1cXFwi6ZqQ6JePfHwnICsgYmlhbmppICsgJ1xcXCI+6ZqQIOiXjycsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFwiY29sb3I6I0ZGODAwMFxcXCIgdGl0bGU9XFxcIuS/ruaUuXx8JyArIGJpYW5qaSArICdcXFwiPuS/riDmlLknLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcImNvbG9yOiMwOThBQzFcXFwiIHRpdGxlPVxcXCLnva7pobZ8fCcgKyBiaWFuamkgKyAnMCcgKyAnXFxcIj7nva4g6aG2JywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMDk4QUMxXFxcIiB0aXRsZT1cXFwi56e75YqofHwnICsgYmlhbmppICsgJ1xcXCI+56e7IOWKqCcsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFwiY29sb3I6IzA5OEFDMVxcXCIgdGl0bGU9XFxcIue9ruW6lXx8JyArIGJpYW5qaSArIGxiTGVuZ3RoICsgJ1xcXCI+572uIOW6lScsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFwiY29sb3I6IzA0QjQzMVxcXCIgdGl0bGU9XFxcIuWIhuS6q3x8JyArIGJpYW5qaSArICdcXFwiPuWcsOadv+WIhuS6qycsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFwiY29sb3I6IzA0QjQzMVxcXCIgdGl0bGU9XFxcIuS6keWIhuS6q3x8JyArIGJpYW5qaSArICdcXFwiPuS6keadv+WIhuS6qyddLFxcbiAgICAgICAgICAgIGNvbDogJzInLFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXG4gICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxuICAgICAgICAgICAgICAgIHZhciBuZXdJbnB1dCA9IHBhcnNlRG9tRm9ySHRtbChpbnB1dCwgJ3NwYW4mJnRpdGxlJykuc3BsaXQoJ3x8Jyk7XFxuICAgICAgICAgICAgICAgIC8vIOS/ruaUuSzov6rov6osMCAgIOaTjeS9nOexu+WeiyzlkI3np7As57Si5byVXFxuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gbmV3SW5wdXRbMF07XFxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gbmV3SW5wdXRbMV07XFxuICAgICAgICAgICAgICAgIHZhciBudW0gPSBuZXdJbnB1dFsyXTtcXG4gICAgICAgICAgICAgICAgdmFyIG51bTIgPSBuZXdJbnB1dFszXTtcXG4gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCLliKDpmaRcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrID0gW25hbWUsIG51bV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5oC75oSf6KeJ562b6YCJ5oiW6ICF5pCc57Si5ZCO77yM55Sx5LqObnVt55qE5L2N572u5LiN5a+55Y+v6IO95Lya5Yig6Zmk6ZSZLOS6i+WunuWmguatpCzlt7Lkv64/XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIuWNs+WwhuWIoOmZpDogXFxcIiArIG5hbWUpLmNvbmZpcm0oKGspID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBrWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0ga1sxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUganNvbi5jb2Rlc1tuYW1lXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0gPSBqc29uLnRpdGxlLmluZGV4T2YobmFtZSk7IC8v6L+Z5qC35omN5Lya5b6X5Yiw5q2j56Gu55qE57Si5byVXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24udGl0bGUuc3BsaWNlKG51bSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3suWwhuOAllxcXCIgKyBuYW1lICsgXFxcIuOAl+WIoOmZpFxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgayk7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCLpmpDol49cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJoaWtlcjovL2VtcHR5I25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoaykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGtbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW0gPSBrWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uY29kZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSA9IGpzb24udGl0bGUuaW5kZXhPZihuYW1lKTsgLy/ov5nmoLfmiY3kvJrlvpfliLDmraPnoa7nmoTntKLlvJVcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24udGl0bGUuc3BsaWNlKG51bSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgJC5zdHJpbmdpZnkoanNvbikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3suWwhuOAllxcXCIgKyBuYW1lICsgXFxcIuOAl+makOiXj1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Y+v6IO95piv5Liq572R5Z2ALCDmgqjlj6/pgInmi6nliKDpmaRcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgW25hbWUsIG51bV0pO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwi5L+u5pS5XFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2lmIChqc29uLmNvZGVzW25hbWVdKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5Db2RlID0gbmFtZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGVzID0ganNvbi50aXRsZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbk5hbWUgPSBcXFwi6L+Z5piv5ZCN56ewXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5jb2Rlc1tuYW1lXSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuQ29kZSA9IGpzb24uY29kZXNbbmFtZV0udG9TdHJpbmcoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbk5hbWUgPSBuYW1lO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiaGlrZXI6Ly9lbXB0eSNub1JlY29yZEhpc3RvcnkjXFxcIikucnVsZSgoayx0aXRsZXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChnZXRJdGVtKCdteUZ1bmN0aW9uJykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGtbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlID0ga1sxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5L+dIOWtmCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHNhdmVCdXR0b24gKyBcXFwic2F2ZUJ1dHRvbihnZXRWYXIoJ2lucHV0X2VkaXQnKSxuYW1lKTtiYWNrKCk7XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuW7uuiuruaMiem7mOiupOeahOS7o+eggeagvOW8j+S/ruaUueWTplxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0VmFyKCdpbnB1dF9lZGl0JywgaW5wdXQpXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcXFwidGV4dGFyZWFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogXFxcIi0xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogJ+S/ruaUueKYhScgKyBuYW1lICsgJ+KYhScgKyBjb2RlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPHNtYWxsPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojNkVCODk3XFxcIj7moLzlvI/kuLrvvJrmk43kvZznsbvlnovimIXmoIfpopjimIVmdW5jdGlvbigpe+iHquWumuS5ieWGheWuuX08YnI+6K+35Yu/5aGr5YWl5YW25LuW5qC85byPJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc2F2ZUJ1dHRvbixuYW1lLHRpdGxlcykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0bXBBciA9IGdldFZhcignaW5wdXRfZWRpdCcpLnNwbGl0KCfimIUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0bXBBci5sZW5ndGg8Mil7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kv67mlLnmoLzlvI/mnInor6/vvIzorr/pl67ooqvmi5Lnu50nXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdOYW1lID0gdG1wQXJbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobmV3TmFtZSE9PW5hbWUmJnRpdGxlcy5pbmNsdWRlcyhuZXdOYW1lKSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCfmo4DmtYvliLDlkIzlkI3mjqXlj6M6JytuZXdOYW1lKycs5piv5ZCm6KaG55uWPycpLmNvbmZpcm0oKHNhdmVCdXR0b24sbmFtZSk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gc2F2ZUJ1dHRvbihnZXRWYXIoJ2lucHV0X2VkaXQnKSxuYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2soKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lkv53lrZjkv67mlLlcXFxcbuivt+iHquihjOajgOa1i+imhuebluWQjueahOWGheWuuSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sc2F2ZUJ1dHRvbixuYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSBzYXZlQnV0dG9uKGdldFZhcignaW5wdXRfZWRpdCcpLG5hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lkv53lrZjkv67mlLknO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZih0eXBlb2YoY29kZSk9PT0nc3RyaW5nJyYmY29kZS5sZW5ndGg+Mil7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiBjb2RlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lkv53lrZjkv67mlLknO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHNhdmVCdXR0b24sbmFtZSx0aXRsZXMpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJ+KAmOKAmOKAmeKAmTxiaWc+PGJpZz48c3BhbiBzdHlsZT1cXFwiY29sb3I6IzI5OEEwOFxcXCI+5L+dIOWtmCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgW25OYW1lLCBuQ29kZV0sdGl0bGVzKSAvL1tuYW1lLCBqc29uLmNvZGVzW25hbWVdLnRvU3RyaW5nKCldKVxcbiAgICAgICAgICAgICAgICAgICAgLyp9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lj6rmnInnvZHlnYDmiJbogIXmoIfpopgsIOS4jeaUr+aMgeS/ruaUuVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0qL1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwi572u6aG2XFxcIjpcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIue9ruW6lVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbnVtID0ganNvbi50aXRsZS5pbmRleE9mKG5hbWUpOyAvL+i/meagt+aJjeS8muW+l+WIsOato+ehrueahOe0ouW8lVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKG51bT4tMSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0ganNvbi50aXRsZS5zcGxpY2UobnVtLCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi50aXRsZS5zcGxpY2UobnVtMiwgMCwgaXRlbVswXSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+ayoeaJvuWIsDonK25hbWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwi56e75YqoXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgnaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdiaWFuamknLCAn56e75YqoIycgKyBrKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgbnVtKTtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIuWIhuS6q1xcXCI6XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCLkupHliIbkuqtcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzW25hbWVdKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZVRleHQgPSB0eXBlb2YganNvbi5jb2Rlc1tuYW1lXSA9PSAnZnVuY3Rpb24nID8gJC5zdHJpbmdpZnkoanNvbi5jb2Rlc1tuYW1lXSkgOiBqc29uLmNvZGVzW25hbWVdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRleHQgPSAnTXlQYXJzZVPimIUnICsgbmFtZSArICfimIUnICsgYmFzZTY0RW5jb2RlKHBhcnNlVGV4dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlVGV4dCA9ICfnm7Tpk77imIUnICsganNvbi50aXRsZVtudW1dO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSAn5LqR5YiG5LqrJyAmJiBwYXJzZVRleHQuc3Vic3RyKDAsIDgpID09ICdNeVBhcnNlUycpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUZXh0ID0gc2hhcmVQYXN0ZShwYXJzZVRleHQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VUZXh0LnN1YnN0cigwLCA2KSAhPSAnZXJyb3I6JyA/ICdjb3B5Oi8vJyArIHBhcnNlVGV4dCArICdcXFxcbuKYheKYheKYhVxcXFxuJyArICdNeVBhcnNlU++8micgKyBuYW1lIDogJ3RvYXN0Oi8v5YiG5Lqr5aSx6LSlISHkupHliarotLTmnb/lj6/og73mjILkuoYnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnY29weTovLycgKyBwYXJzZVRleHQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pqC5LiN5pSv5oyBJztcXG4gICAgICAgICAgICAgICAgfSAvL3N3aXRjaOeahFxcbiAgICAgICAgICAgIH0pIC8vU3RyaW5n55qEXFxuICAgICAgICB9KSAvL3N0cmluZ2lmeeeahFxcbiAgICB9LFxcbiAgICB4alBhcnNlOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIHJldHVybiAkKFxcXCJoaWtlcjovL2VtcHR5I25vSGlzdG9yeSNcXFwiKS5ydWxlKCgpID0+IHtcXG4gICAgICAgICAgICB2YXIgZCA9IFtdO1xcbiAgICAgICAgICAgIGV2YWwoZ2V0SXRlbSgnbXlGdW5jdGlvbicpKTtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+S/nSDlrZgnLFxcbiAgICAgICAgICAgICAgICB1cmw6IHNhdmVCdXR0b24gKyBcXFwic2F2ZUJ1dHRvbihpbnB1dCk7YmFjaygpO2NsZWFyVmFyKCdpbnB1dF9hZGQnKVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFwi6L6T5YWl5q2j56Gu5qC85byP5YaF5a65XFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAncHV0VmFyKFxcXCJpbnB1dF9hZGRcXFwiLCBpbnB1dCknLFxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXFxcInRleHRhcmVhXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogXFxcIi0xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcignaW5wdXRfYWRkJyksXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxzbWFsbD48c3BhbiBzdHlsZT1cXFwiY29sb3I6IzZFQjg5N1xcXCI+5oyJ5o+P6L+w6K+J5qC85byP6L6T5YWlLCDor7fli7/loavlhaXlhbbku5bmoLzlvI88YnI+5pys5Zyw5Y+j5LukOiDmk43kvZznsbvlnovimIXlkI3np7DimIXku6PnoIE8YnI+5LqR5Y+j5LukOiDpk77mjqXimIXimIXimIXlkI3np7A7IOe6r+e9keWdgDog55u06ZO+4piFdXJsMeKYhXVybDInLFxcbiAgICAgICAgICAgICAgICBkZXNjOiAn4oCY4oCY4oCZ4oCZPGJpZz48YmlnPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMjk4QTA4XFxcIj7kv50g5a2YJyxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCdub0xvYWRpbmcnKS5sYXp5UnVsZSgoc2F2ZUJ1dHRvbikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNhdmVCdXR0b24oZ2V0VmFyKCdpbnB1dF9hZGQnKSk7XFxuICAgICAgICAgICAgICAgIH0sIHNhdmVCdXR0b24pLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgfSlcXG4gICAgfSxcXG4gICAgeWRQYXJzZTogZnVuY3Rpb24oQkptb2RlLCBpKSB7XFxuICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcbiAgICAgICAgICAgIHZhciBBID0ga1swXS5zcGxpdCgnIycpWzFdO1xcbiAgICAgICAgICAgIHZhciBCID0ga1sxXTtcXG4gICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcbiAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcbiAgICAgICAgICAgIHZhciBpdGVtID0ganNvbi50aXRsZS5zcGxpY2UoQSwgMSk7IC8vIDE6IOagh+iusOW8gOWni+S9jee9ru+8jDI6IOWIoOmZpOWIsOWTquS4quS9jee9rlxcbiAgICAgICAgICAgIGpzb24udGl0bGUuc3BsaWNlKEIsIDAsIGl0ZW1bMF0pOyAvLyAxOiDlkIzkuIrvvIwyOiAw6KGo56S65LiN5Yig6Zmk77yMMzog5re75Yqg5a+56LGhXFxuICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXG4gICAgICAgICAgICBjbGVhclZhcignYmlhbmppJyk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICB9LCBbQkptb2RlLCBpXSlcXG4gICAgfSxcXG4gICAgcGxzY1BhcnNlOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIHJldHVybiAkKCdoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSMnKS5ydWxlKCgpID0+IHtcXG4gICAgICAgICAgICB2YXIgZCA9IFtdO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn5om56YeP5Yig6Zmk6Kej5p6QJyxcXG4gICAgICAgICAgICAgICAgZGVzYzogJ2F1dG8mJmZsb2F0JyxcXG4gICAgICAgICAgICAgICAgdXJsOiAnZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvY2FjaGUvcGxzY1BhcnNlLmh0bWwnLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3g1X3dlYnZpZXdfc2luZ2xlJ1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgfSlcXG4gICAgfVxcbn07XFxuXFxuZnVuY3Rpb24gc2V0UGFyc2UoKSB7XFxuICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCIpLnNldFBhcnNlKCk7XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6LCD55So6Lev55SxXCIsXCJwYXRoXCI6XCJSb3V0ZVwiLFwicnVsZVwiOlwianM6XFxuY29uc3QgZCA9IFtdO1xcbmNvbnN0IGRhdGEgPSB7fTtcXG5cXG5kYXRhLm9sZENvbmZpZyA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXCI7XFxuZGF0YS5jalJvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanNcXFwiO1xcbmRhdGEueDVSb3V0ZSA9XFxuZ2V0UGF0aCgnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5odG1sJyk7XFxuXFxuZGF0YS5qeExhenkgPSBcXFwiZXZhbCgndmFyIGNvbmZpZyA9JyArIGZldGNoKCdcXFwiICsgZGF0YS5vbGRDb25maWcgKyBcXFwiJykpO2V2YWwoZmV0Y2goY29uZmlnLmNqKSk7YXl0bVBhcnNlKGlucHV0KVxcXCI7XFxuXFxuZGF0YS5zelBhcnNlID0gXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3orr7nva4jbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIjtcXG5cXG5kYXRhLnNldFBhcnNlID0gZnVuY3Rpb24oKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBkZXNjOiAnNzk1JyxcXG4gICAgICAgIHVybDogdGhpcy54NVJvdXRlLFxcbiAgICAgICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZSdcXG4gICAgfSk7XFxuICAgIHZhciBvbGRWID0gZ2V0VmFyKCdqeE9sZFYnKTtcXG4gICAgdmFyIG5ld1YgPSBnZXRWYXIoJ2p4TmV3VicpO1xcbiAgICB2YXIgdmVyc2lvblRpcHMgPSBwYXJzZUZsb2F0KG5ld1YpID4gcGFyc2VGbG9hdChvbGRWKSA/ICfigJjigJjmnInmlrDniYjmnKw6IHYnICsgbmV3ViA6ICfigJjigJgnO1xcbiAgICB2YXIgcGljcyA9IFtcXG4gICAgICAgICdodHRwczovL2Nkbi5zZW92eC5jb20vaW1nL3Nlb3Z4LTIwLTEwJTIwKDkyKS5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnNlb3Z4LmNvbS9pbWcvbW9tMjAxOCUyMCgyMDcpLmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly90dmE0LnNpbmFpbWcuY24vbGFyZ2UvOWJkOWIxNjdneTFmd3JoNXhvbHRkajIxaGMwdTB0YXguanBnJyxcXG4gICAgICAgICdodHRwczovL3R2YTEuc2luYWltZy5jbi9sYXJnZS8wMDVCWXFwZ2d5MWZ3cmV5dTRubDZqMzFoYzB1MGFoci5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vczMuYm1wLm92aC9pbWdzLzIwMjEvMTAvZDdlNjBiOTkwNzQyMDkzZC5qcGVnJyxcXG4gICAgICAgICdodHRwczovL3MzLmJtcC5vdmgvaW1ncy8yMDIxLzEwLzkxYWQ2ZDY1MzhiZjg2ODkuanBnJyxcXG4gICAgICAgICdodHRwczovL3R2YTEuc2luYWltZy5jbi9sYXJnZS8wMDVCWXFwZ2d5MWZ3cmVzbDVwbWxqMzFoYzB4Y3drYS5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vdHZhMy5zaW5haW1nLmNuL2xhcmdlLzAwNUJZcXBnZ3kxZndyZ2pkazc0b2ozMWhjMHUwZHFuLmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9tb20yMDE4JTIwKDMyMCkuanBnJyxcXG4gICAgICAgICdodHRwczovL2Nkbi5zZW92eC5jb20vaW1nL21vbTIwMTglMjAoODAzKS5qcGcnXFxuICAgIF07XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBpbWc6IHBpY3NbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTApXSxcXG4gICAgICAgIHRpdGxlOiB2ZXJzaW9uVGlwcyArICfigJnigJk8c21hbGw+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiM2RUI4OTdcXFwiPjxicj7jgIDjgIDngrnlh7vkuIrmlrnlpLTlg4/ov5vlhaXnvJbovpE8YnI+54K55q2k6L+b5YWl6K665Z2b5biW5a2Q5YiX6KGoJyxcXG4gICAgICAgIGRlc2M6ICflvZPliY3niYjmnKw6IHYnICsgb2xkVixcXG4gICAgICAgIHVybDogJ2h0dHBzOi8vaGFpa3Vvc2hpamllLmNuL3VzZXIvMTk1OCcsXFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzEnXFxuICAgIH0pO1xcbiAgc2V0UmVzdWx0KGQpO1xcbn1cXG5cXG5zd2l0Y2ggKGdldFBhcmFtKFxcXCJ0eXBlXFxcIikpIHtcXG4gICAgY2FzZSBcXFwi6K6+572uXFxcIjpcXG4gICAgICAgIGRhdGEuc2V0UGFyc2UoKTtcXG4gICAgICAgIC8vc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgXFxcIue8lui+kVxcXCI6XFxuICAgICAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9qeEl0ZW0/cnVsZT1NeUZpZWxk4bSw4oG/XFxcIikuanhMaXN0KCk7XFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgICAgICBicmVhaztcXG5cXHRjYXNlIFxcXCLkuLvpophcXFwiOlxcblxcdCAgICAgJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdGhlbWU/cnVsZT1NeUZpZWxk4bSw4oG/XFxcIikudGhlbWVJbml0KCk7XFxuICAgICAgICBicmVhaztcXG5cXHRjYXNlIFxcXCLop6PmnpBcXFwiOlxcblxcdCAgICAgJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvanhNYW5hZ2U/cnVsZT1NeUZpZWxk4bSw4oG/XFxcIikuanhNYW5hZ2UoKTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBkZWZhdWx0OlxcbiAgICAgICAgJC5leHBvcnRzID0gZGF0YTtcXG4gICAgICAgIGJyZWFrO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuino+aekOmhueS4u+eVjOmdolwiLFwicGF0aFwiOlwianhJdGVtXCIsXCJydWxlXCI6XCJldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb8nKSkucnVsZSk7XFxudmFyIGlzTG9naW4gPSBmdW5jdGlvbiAoKXtyZXR1cm4gdHJ1ZX1cXG5mdW5jdGlvbiBiYnNZWigpIHtcXG4gICAgdmFyIF8weDQ3YTliNCA9IHtcXG4gICAgICAgICdKeFNNbic6IGZ1bmN0aW9uKF8weDI0OTk1MiwgXzB4NGFiYzE1KSB7XFxuICAgICAgICAgICAgcmV0dXJuIF8weDI0OTk1MiArIF8weDRhYmMxNTtcXG4gICAgICAgIH0sXFxuICAgICAgICAnTEd3bUMnOiAn56e75YqoIycsXFxuICAgICAgICAnR3ZEVlknOiBmdW5jdGlvbihfMHg0NjFmMmQsIF8weDU0MDU3MSkge1xcbiAgICAgICAgICAgIHJldHVybiBfMHg0NjFmMmQgKyBfMHg1NDA1NzE7XFxuICAgICAgICB9LFxcbiAgICAgICAgJ1dmZUhEJzogJ+KAmOKAmOKAmeKAmTxzbWFsbD48c3BhbiBzdHlsZT1cXFwiY29sb3I6I0ZFOUEyRVxcXCI+JyxcXG4gICAgICAgICdFcUlscyc6ICfnp7vliqg6ICcsXFxuICAgICAgICAnRWZmYm4nOiAndGV4dF8yJyxcXG4gICAgICAgICdSeGt4QSc6IGZ1bmN0aW9uKF8weDMyYTdkMCwgXzB4MWE5MzJjKSB7XFxuICAgICAgICAgICAgcmV0dXJuIF8weDMyYTdkMChfMHgxYTkzMmMpO1xcbiAgICAgICAgfSxcXG4gICAgICAgICdWQkdKSCc6ICdqZFJvdXRlJyxcXG4gICAgICAgICdCWmdSdCc6IGZ1bmN0aW9uKF8weDI2OTg0ZSwgXzB4NWNjOTI2KSB7XFxuICAgICAgICAgICAgcmV0dXJuIF8weDI2OTg0ZSA9PT0gXzB4NWNjOTI2O1xcbiAgICAgICAgfSxcXG4gICAgICAgICdyZ0dDQyc6ICd3RFZFYicsXFxuICAgICAgICAnTWN6T1cnOiBmdW5jdGlvbihfMHgyODgwYmYsIF8weDJkOTMwNiwgXzB4OTc3ODdhKSB7XFxuICAgICAgICAgICAgcmV0dXJuIF8weDI4ODBiZihfMHgyZDkzMDYsIF8weDk3Nzg3YSk7XFxuICAgICAgICB9LFxcbiAgICAgICAgJ0ZVamRtJzogJ2Jic1laJyxcXG4gICAgICAgICdscUZoYic6IGZ1bmN0aW9uKF8weDQzYmJlNikge1xcbiAgICAgICAgICAgIHJldHVybiBfMHg0M2JiZTYoKTtcXG4gICAgICAgIH0sXFxuICAgICAgICAnRlVScHknOiBmdW5jdGlvbihfMHgyMjY1YzIsIF8weGExZDU2OCwgXzB4MjlkZTAxKSB7XFxuICAgICAgICAgICAgcmV0dXJuIF8weDIyNjVjMihfMHhhMWQ1NjgsIF8weDI5ZGUwMSk7XFxuICAgICAgICB9LFxcbiAgICAgICAgJ1hJT2JCJzogJ3ZhciB4ZFJvdXRlPVxcXFxcXFwiXFxcXFxcXCI7J1xcbiAgICB9O1xcbiAgICBpZiAoIV8weDQ3YTliNFsnUnhreEEnXShnZXRWYXIsIF8weDQ3YTliNFsnVkJHSkgnXSkpIHtcXG4gICAgICAgIGlmIChfMHg0N2E5YjRbJ0JaZ1J0J10oXzB4NDdhOWI0WydyZ0dDQyddLCAnSlZrQVonKSkge1xcbiAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxuICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDQ3YTliNFsnSnhTTW4nXShfMHg0N2E5YjRbJ0xHd21DJ10sIGkpID09IEJKbW9kZSA/IF8weDQ3YTliNFsnSnhTTW4nXShfMHg0N2E5YjRbJ0d2RFZZJ10oXzB4NDdhOWI0WydXZmVIRCddLCBfMHg0N2E5YjRbJ0VxSWxzJ10pLCB4c0xpc3QpIDogJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMjk4QTA4XFxcIj4nICsgeHNMaXN0LFxcbiAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWyd5ZFBhcnNlJ10oQkptb2RlLCBpKSxcXG4gICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NDdhOWI0WydFZmZibiddXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIF8weDQ3YTliNFsnTWN6T1cnXShwdXRWYXIsIF8weDQ3YTliNFsnRlVqZG0nXSwgXzB4NDdhOWI0WydscUZoYiddKGlzTG9naW58fGZ1bmN0aW9uICgpe3JldHVybiB0cnVlfSkpO1xcbiAgICAgICAgICAgIF8weDQ3YTliNFsnRlVScHknXShwdXRWYXIsICdqZFJvdXRlJywgXzB4NDdhOWI0WydYSU9iQiddKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gZ2V0VmFyKF8weDQ3YTliNFsnRlVqZG0nXSk7XFxufVxcbnZhciBqeEl0ZW0gPSB7XFxuICAgICdqeExpc3QnOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIHZhciBfMHg0YzA0MjcgPSB7XFxuICAgICAgICAgICAgJ1VWV29GJzogZnVuY3Rpb24oXzB4MjZiYjA3LCBfMHgyMjFiNGQpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDI2YmIwNyArIF8weDIyMWI0ZDtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICdjb2xvcic6ZnVuY3Rpb24odGV4dCwgY29sb3IpIHtcXG4gICAgICAgICAgICAgICAgdGV4dCArPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICAgICAgaWYgKHRleHQuaW5kZXhPZihcXFwi4oCc4oCc4oCd4oCdXFxcIikgPT09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgIHRleHQucmVwbGFjZShcXFwi4oCc4oCc4oCd4oCdXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9J1xcXCIgKyBjb2xvciArIFxcXCInPlxcXCIgKyB0ZXh0ICsgXFxcIjwvZm9udD5cXFwiO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgJ2t6V0RLJzogZnVuY3Rpb24oXzB4NDg1NGE5LCBfMHgzZTk4YzUpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDQ4NTRhOSArIF8weDNlOThjNTtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICdYWHlRcic6ICfnp7vliqgjJyxcXG4gICAgICAgICAgICAnZ3RVbmonOiBmdW5jdGlvbihfMHg1OWFhZjcsIF8weDIyYzY2Yikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NTlhYWY3ICsgXzB4MjJjNjZiO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgJ1V0ZldmJzogJ+KAmOKAmOKAmeKAmTxzbWFsbD48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiNGRTlBMkVcXFxcXFxcIj4nLFxcbiAgICAgICAgICAgICdRT3ZKVic6ICfnp7vliqg6ICcsXFxuICAgICAgICAgICAgJ0FCRXdCJzogJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzI5OEEwOFxcXFxcXFwiPicsXFxuICAgICAgICAgICAgJ296eldHJzogJ3RleHRfMicsXFxuICAgICAgICAgICAgJ25XZlZSJzogZnVuY3Rpb24oXzB4NDgwZjNhLCBfMHg0Yzg0ZmMpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDQ4MGYzYSArIF8weDRjODRmYztcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICdKQ2NOWSc6ICdwYXJzZVJvdXRlJyxcXG4gICAgICAgICAgICAncmdESXAnOiAnYmlhbmppJyxcXG4gICAgICAgICAgICAnaG9JZEonOiAn4oCY4oCY4oCZ4oCZPGJpZz48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiM2RUI4OTdcXFxcXFxcIj7mlrAg5bu6IOinoyDmnpAnLFxcbiAgICAgICAgICAgICdGckdPSCc6IGZ1bmN0aW9uKF8weDEyZDZkYiwgXzB4MmEwNjhkKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHgxMmQ2ZGIgPCBfMHgyYTA2OGQ7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAnb0NDU2onOiBmdW5jdGlvbihfMHgxOWIxNzgsIF8weDRlZjhmNikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4MTliMTc4ID09PSBfMHg0ZWY4ZjY7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAnSFpobGMnOiBmdW5jdGlvbihfMHg1Y2FlMDMsIF8weDI2ZTI0Mikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NWNhZTAzID09IF8weDI2ZTI0MjtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICdjZ0llQSc6IGZ1bmN0aW9uKF8weDI1ZTM2OCwgXzB4OGJjOGU5KSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHgyNWUzNjggKyBfMHg4YmM4ZTk7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAneGRyRnYnOiBmdW5jdGlvbihfMHg0YWI1ZDgsIF8weDIxMjQyZikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NGFiNWQ4ICsgXzB4MjEyNDJmO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgJ3l3anV4JzogZnVuY3Rpb24oXzB4NWUzMDUxLCBfMHg0ZTAyMzApIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDVlMzA1MShfMHg0ZTAyMzApO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH07XFxuICAgICAgICB2YXIgXzB4MWQ4YmIxID0gZ2V0VmFyKF8weDRjMDQyN1snSkNjTlknXSk7XFxuICAgICAgICB2YXIgXzB4M2I4OWFiID0gcGFyc2VGaWxlWyd0aXRsZSddO1xcbiAgICAgICAgdmFyIF8weDQ5ZGE5NiA9IGdldFZhcihfMHg0YzA0MjdbJ3JnRElwJ10pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogXzB4NGMwNDI3Wydob0lkSiddLFxcbiAgICAgICAgICAgIGRlc2M6J+azqOaEjzrkvY3nva7mk43kvZzlip/og73lj6rlnKjliIbnsbvnrZvpgInkuLrlhajpg6jml7bnlJ/mlYhcXFxcbuS4i+aWueaQnOe0ouaMieWQjeensOaIluWcsOWdgCzph43nva7or7fnlZnnqbrmiJbngrnop6PmnpDmlbDph4/mjInpkq4nLFxcbiAgICAgICAgICAgIHVybDogYmpJdGVtWyd4alBhcnNlJ10oKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOmZhbHNlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOifmkJzntKInLFxcbiAgICAgICAgICAgIGRlc2M6J21lbmd4JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTonaW5wdXQnLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0VmFyKCdkcC5zZWFyY2hKeCcsaW5wdXQpXFxcIixcXG4gICAgICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiB0cnVlLFxcbiAgICAgICAgICAgICAgICB0ZXh0U2l6ZTogMTEsXFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTpnZXRWYXIoJ2RwLnNlYXJjaEp4JywnJyksXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICB1cmw6JC50b1N0cmluZygoKT0+e1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KTtcXG4gICAgICAgIGxldCBmaWx0ZXJzID0gWyflhajpg6gnLCfpk77mjqUnLCdqc29uJywn5YWN5ZeFJ107XFxuICAgICAgICBmb3IobGV0IG8gaW4gZmlsdGVycyl7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6Z2V0VmFyKCdkbi5qeF9maWx0ZXInLCflhajpg6gnKT09PWZpbHRlcnNbb10/J+KAnOKAnOKAneKAnTxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMjk4QTA4XFxcIj4nK2ZpbHRlcnNbb106ZmlsdGVyc1tvXSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaXQpPT57XFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2RuLmp4X2ZpbHRlcicsaXQpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgIH0sZmlsdGVyc1tvXSksXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgXzB4MmVjYmU1ID0gXzB4M2I4OWFiWydsZW5ndGgnXTtcXG4gICAgICAgIHZhciBqc29uPXt0aXRsZTpbXSxjb2Rlczp7fX07XFxuICAgICAgICBsZXQgc2V0RmlsZSA9IHJlcXVlc3QoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJyk7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIGV2YWwoJ2pzb249JytzZXRGaWxlKTtcXG4gICAgICAgIH1jYXRjaCAoZSkge1xcbiAgICAgICAgICAgIGxvZygnSnNvbuino+aekOWPkeeUn+S6humUmeivrzonK2UubWVzc2FnZSk7XFxuICAgICAgICB9XFxuICAgICAgICBpZihnZXRWYXIoJ2RuLmp4X2ZpbHRlcicsJ+WFqOmDqCcpPT09J+mTvuaOpScpe1xcbiAgICAgICAgICAgIF8weDNiODlhYiA9IF8weDNiODlhYi5maWx0ZXIoaXQ9PighL8KpJC8udGVzdChpdCkpJiZ0eXBlb2YoanNvbi5jb2Rlc1tfMHg0YzA0MjdbJ25XZlZSJ10oaXQsICcnKVsncmVwbGFjZSddKC9odHRwLipcXFxcL1xcXFwvL2csICcnKV0pPT09J3N0cmluZycpO1xcbiAgICAgICAgfWVsc2UgaWYoZ2V0VmFyKCdkbi5qeF9maWx0ZXInLCflhajpg6gnKT09PSflhY3ll4UnKXtcXG4gICAgICAgICAgICBfMHgzYjg5YWIgPSBfMHgzYjg5YWIuZmlsdGVyKGl0PT50eXBlb2YoanNvbi5jb2Rlc1tfMHg0YzA0MjdbJ25XZlZSJ10oaXQsICcnKVsncmVwbGFjZSddKC9odHRwLipcXFxcL1xcXFwvL2csICcnKV0pPT09J2Z1bmN0aW9uJyk7XFxuICAgICAgICB9ZWxzZSBpZihnZXRWYXIoJ2RuLmp4X2ZpbHRlcicsJ+WFqOmDqCcpPT09J2pzb24nKXtcXG4gICAgICAgICAgICBfMHgzYjg5YWIgPSBfMHgzYjg5YWIuZmlsdGVyKGl0PT4oL8KpJC8udGVzdChpdCkpJiZ0eXBlb2YoanNvbi5jb2Rlc1tfMHg0YzA0MjdbJ25XZlZSJ10oaXQsICcnKVsncmVwbGFjZSddKC9odHRwLipcXFxcL1xcXFwvL2csICcnKV0pPT09J3N0cmluZycpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYoZ2V0VmFyKCdkcC5zZWFyY2hKeCcsJycpKXtcXG4gICAgICAgICAgICBfMHgzYjg5YWIgPSBfMHgzYjg5YWIuZmlsdGVyKGl0PT4oanNvbi5jb2Rlc1tfMHg0YzA0MjdbJ25XZlZSJ10oaXQsICcnKV0rJycpLmluY2x1ZGVzKGdldFZhcignZHAuc2VhcmNoSngnKSl8fGl0LmluY2x1ZGVzKGdldFZhcignZHAuc2VhcmNoSngnLCcnKSkpO1xcbiAgICAgICAgfVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTpcXFwi6Kej5p6Q5pWwOlxcXCIrXzB4NGMwNDI3LmNvbG9yKF8weDNiODlhYi5sZW5ndGgsJyNmZjcwMDAnKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTpcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCk9PntcXG4gICAgICAgICAgICAgICAgY2xlYXJWYXIoJ2RwLnNlYXJjaEp4Jyk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6YeN572uJ1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KTtcXG4gICAgICAgIC8vIOS4i+mdouaYr+ino+aekOWIl+ihqOaOkuWIl1xcbiAgICAgICAgLy8gZm9yICh2YXIgXzB4ZTJjM2Q4ID0gMHgwOyBfMHg0YzA0MjdbJ0ZyR09IJ10oXzB4ZTJjM2Q4LCBfMHgyZWNiZTUpOyBfMHhlMmMzZDgrKykge1xcbiAgICAgICAgZm9yIChsZXQgXzB4ZTJjM2Q4IGluIF8weDNiODlhYikge1xcbiAgICAgICAgICAgIHZhciBfMHgzMzc4OGMgPSBfMHgzYjg5YWJbXzB4ZTJjM2Q4XTtcXG4gICAgICAgICAgICB2YXIgXzB4Mzc4NzFlID0gXzB4NGMwNDI3WyduV2ZWUiddKF8weDMzNzg4YywgJycpWydyZXBsYWNlJ10oL2h0dHAuKlxcXFwvXFxcXC8vZywgJycpO1xcbiAgICAgICAgICAgIGlmICgv56e75YqoLyBbJ3Rlc3QnXShfMHg0OWRhOTYpKSB7XFxuICAgICAgICAgICAgICAgIGlmIChfMHg0YzA0MjdbJ29DQ1NqJ10oJ3VLTHhGJywgJ3VLTHhGJykpIHtcXG4gICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogXzB4NGMwNDI3WydIWmhsYyddKF8weDRjMDQyN1snWFh5UXInXSArIF8weGUyYzNkOCwgXzB4NDlkYTk2KSA/IF8weDRjMDQyN1snbldmVlInXShfMHg0YzA0MjdbJ2NnSWVBJ10oXzB4NGMwNDI3WydVdGZXZiddLCBfMHg0YzA0MjdbJ1FPdkpWJ10pLCBfMHgzNzg3MWUpIDogXzB4NGMwNDI3WydjZ0llQSddKF8weDRjMDQyN1snQUJFd0InXSwgXzB4Mzc4NzFlKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWyd5ZFBhcnNlJ10oXzB4NDlkYTk2LCBfMHhlMmMzZDgpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6ICd0ZXh0XzInXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBfMHgyYmM2MTggPSBfMHgzYjg5YWJbXzB4ZTJjM2Q4XTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBfMHg1Y2Y0MTcgPSBfMHg0YzA0MjdbJ1VWV29GJ10oXzB4MmJjNjE4LCAnJylbJ3JlcGxhY2UnXSgvaHR0cC4qXFxcXC9cXFxcLy9nLCAnJyk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoL+enu+WKqC8gWyd0ZXN0J10oXzB4NDlkYTk2KSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDRjMDQyN1sna3pXREsnXShfMHg0YzA0MjdbJ1hYeVFyJ10sIF8weGUyYzNkOCkgPT0gXzB4NDlkYTk2ID8gXzB4NGMwNDI3WydndFVuaiddKF8weDRjMDQyN1snZ3RVbmonXShfMHg0YzA0MjdbJ1V0ZldmJ10sIF8weDRjMDQyN1snUU92SlYnXSksIF8weDVjZjQxNykgOiBfMHg0YzA0MjdbJ0FCRXdCJ10gKyBfMHg1Y2Y0MTcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiBiakl0ZW1bJ3lkUGFyc2UnXShfMHg0OWRhOTYsIF8weGUyYzNkOCksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDRjMDQyN1snb3p6V0cnXVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgXzB4MTE5MzY1ID0gW18weDJiYzYxOCwgXzB4NGMwNDI3WydndFVuaiddKF8weGUyYzNkOCwgJ3x8JyldWydqb2luJ10oJ3x8Jyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogXzB4NGMwNDI3WyduV2ZWUiddKF8weDRjMDQyN1snQUJFd0InXSwgXzB4NWNmNDE3KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NGMwNDI3WydvenpXRyddLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWyd4bFNlbGVjdCddKF8weDExOTM2NSwgXzB4MmVjYmU1Wyd0b1N0cmluZyddKCkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB2YXIgXzB4YjcwMTkyID0gW18weDMzNzg4YywgXzB4ZTJjM2Q4ICsgJ3x8J11bJ2pvaW4nXSgnfHwnKTtcXG4gICAgICAgICAgICAgICAgLy8g6L+q6L+q5b2x6ZmifHwwfHwgIOWQjeensHx857Si5byVIOeahOaVsOe7hFxcbiAgICAgICAgICAgICAgICAvLyBBQkV3QiDmmK/nu7/oibIgXzB4Mzc4NzFlIOaYr+agh+mimOWQjeensCAgeGRyRnbmmK/lrZfnrKbkuLLov57mjqXlh73mlbBcXG4gICAgICAgICAgICAgICAgLy8gbGV0IGZsYWcgPSAn4oCY4oCY4pOK4oCZ4oCZJztcXG4gICAgICAgICAgICAgICAgbGV0IGZsYWcgPSBfMHg0YzA0MjcuY29sb3IoJ+KTiicsJyMwMDUxZmYnKTtcXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mKGpzb24uY29kZXNbXzB4Mzc4NzFlXSk9PT0nZnVuY3Rpb24nKXtcXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsYWcgPSAn4oCc4oCc4pK/4oCd4oCdJztcXG4gICAgICAgICAgICAgICAgICAgIGZsYWcgPSBfMHg0YzA0MjcuY29sb3IoJ+KSvycsJyNmZjcwMDAnKTtcXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYodHlwZW9mKGpzb24uY29kZXNbXzB4Mzc4NzFlXSk9PT0ndW5kZWZpbmVkJyl7XFxuICAgICAgICAgICAgICAgICAgICBmbGFnID0gJyc7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy8gbGV0IGNscyA9ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6IzI5OEEwOFxcXCI+JztcXG4gICAgICAgICAgICAgICAgLy8gbGV0IHRpdGxlID0gXzB4NGMwNDI3Wyd4ZHJGdiddKF8weDRjMDQyN1snQUJFd0InXSwgZmxhZytfMHgzNzg3MWUpO1xcbiAgICAgICAgICAgICAgICAvLyBsZXQgdGl0bGUgPSBmbGFnK2NscytfMHgzNzg3MWU7XFxuICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IGZsYWcrXzB4NGMwNDI3LmNvbG9yKF8weDM3ODcxZSwnIzI5OEEwOCcpO1xcbiAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcbiAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAvLyAndGl0bGUnOiBfMHgzNzg3MWUsXFxuICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg0YzA0MjdbJ296eldHJ10sXFxuICAgICAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWyd4bFNlbGVjdCddKF8weGI3MDE5MiwgXzB4MmVjYmU1Wyd0b1N0cmluZyddKCkpXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIF8weDRjMDQyN1sneXdqdXgnXShjbGVhclZhciwgXzB4NGMwNDI3WydyZ0RJcCddKTtcXG4gICAgfSxcXG4gICAgJ2xxRmlsZSc6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgdmFyIF8weDU0MWQ3NiA9IHtcXG4gICAgICAgICAgICAnYVdpUnMnOiBmdW5jdGlvbihfMHg0OGQ3N2IsIF8weDE5MTYxZiwgXzB4MjFjYjg1KSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHg0OGQ3N2IoXzB4MTkxNjFmLCBfMHgyMWNiODUpO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgJ3dTZm56JzogZnVuY3Rpb24oXzB4NDg1MGVhKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHg0ODUwZWEoKTtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICdxUlFkQSc6ICdqZFJvdXRlJyxcXG4gICAgICAgICAgICAnV1FpcWsnOiAndmFyIHhkUm91dGU9XFxcIlxcXCI7JyxcXG4gICAgICAgICAgICAncHNHZHQnOiBmdW5jdGlvbihfMHgxNzA3ODAsIF8weDNiNTEyYSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4MTcwNzgwID09IF8weDNiNTEyYTtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICdpbXhyaSc6ICd0cnVlJyxcXG4gICAgICAgICAgICAnblNrangnOiBmdW5jdGlvbihfMHg5NWJmMzgsIF8weDMxM2YyNSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4OTViZjM4ICE9PSBfMHgzMTNmMjU7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAnaVZOZU0nOiAnZWVMSm0nLFxcbiAgICAgICAgICAgICdJd01UbCc6ICcwfDF8NXw5fDExfDN8Nnw3fDEwfDR8Mnw4JyxcXG4gICAgICAgICAgICAneGZkSGsnOiAn5ouJ5Y+W5Li75o+S5Lu25ZKM572R6aG16ISa5pysJyxcXG4gICAgICAgICAgICAnckdMdUEnOiAn5Li75o+S5Lu25a2Y5pS+6Lev5b6EOiAvY2FjaGUvUGFyc2VfRG4uanNcXFxceDBh572R6aG16ISa5pys5a2Y5pS+6Lev5b6EOiAvY2FjaGUvUGFyc2VfRG4uaHRtbCcsXFxuICAgICAgICAgICAgJ3pRU0xFJzogJ3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgICAgICdodmlEbCc6IGZ1bmN0aW9uKF8weDI2ZGI2MiwgXzB4MzEyZjFjKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHgyNmRiNjIoXzB4MzEyZjFjKTtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICdaeFVndCc6ICfmk43kvZzmjIflvJUnLFxcbiAgICAgICAgICAgICdzV0ZvYyc6IGZ1bmN0aW9uKF8weDJhMDQ0YiwgXzB4MTQ5YTNmKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHgyYTA0NGIgKyBfMHgxNDlhM2Y7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAnT0VoYXQnOiAn5ouJ5Y+W5Luj56CBJyxcXG4gICAgICAgICAgICAnWnZ0U3UnOiAn57yW6L6R6Kej5p6QJyxcXG4gICAgICAgICAgICAnZ1hLTWInOiAndG9hc3Q6Ly/or7flhYjmi4nlj5bliJfooagnLFxcbiAgICAgICAgICAgICdXQ09EQyc6IGZ1bmN0aW9uKF8weDRhZDNkNSwgXzB4MzFmYTFlKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHg0YWQzZDUgPCBfMHgzMWZhMWU7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAnckFrQWgnOiAndGV4dF8zJyxcXG4gICAgICAgICAgICAneVdhT0knOiAn5oGi5aSN5o+S5Lu26Lev5b6E5Li66buY6K6kJyxcXG4gICAgICAgICAgICAneWp5aksnOiAn5b2T5YmN6K6+572u5Li6OiAnLFxcbiAgICAgICAgICAgICd0SFhlRSc6ICfmi4nlj5bop6PmnpDliJfooajmiJbogIXop6PmnpDku6PnoIEnLFxcbiAgICAgICAgICAgICdHTVVZdSc6ICflrZjmlL7ot6/lvoQ6IC9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nLFxcbiAgICAgICAgICAgICdtcFpCWic6ICdsaW5lX2JsYW5rJyxcXG4gICAgICAgICAgICAneHZxZ0YnOiAn6L6T5YWl5pyJ5pWI5o+S5Lu25Zyw5Z2AJyxcXG4gICAgICAgICAgICAnaGV1S3gnOiAncHV0VmFyKFxcXCJwbHVnaW5MaW5rXFxcIixpbnB1dCknLFxcbiAgICAgICAgICAgICdJaWZpYSc6ICfigJjigJjigJnigJk8c3Ryb25nPjxiaWc+55m75b2V5o+Q56S6JyxcXG4gICAgICAgICAgICAnUEZSSEEnOiAn5L2/55So55u45YWz5Yqf6IO96ZyA55m75b2V6KeG55WM6K665Z2b6LSm5Y+3XFxcXG7lpoLmnInpl67popjliY3lvoDorrrlnZvkuobop6Por6bmg4UnLFxcbiAgICAgICAgICAgICdVTHdrVCc6ICdodHRwczovL2hhaWt1b3NoaWppZS5jbi91c2VyL3NpZ25pbidcXG4gICAgICAgIH07XFxuICAgICAgICBpZiAoXzB4NTQxZDc2Wydwc0dkdCddKF8weDU0MWQ3Nlsnd1NmbnonXShiYnNZWiksIF8weDU0MWQ3NlsnaW14cmknXSkpIHtcXG4gICAgICAgICAgICBpZiAoXzB4NTQxZDc2WyduU2tqeCddKF8weDU0MWQ3NlsnaVZOZU0nXSwgXzB4NTQxZDc2WydpVk5lTSddKSkge1xcbiAgICAgICAgICAgICAgICBfMHg1NDFkNzZbJ2FXaVJzJ10ocHV0VmFyLCAnYmJzWVonLCBfMHg1NDFkNzZbJ3dTZm56J10oaXNMb2dpbil8fGZ1bmN0aW9uICgpe3JldHVybiB0cnVlfSk7XFxuICAgICAgICAgICAgICAgIF8weDU0MWQ3NlsnYVdpUnMnXShwdXRWYXIsIF8weDU0MWQ3NlsncVJRZEEnXSwgXzB4NTQxZDc2WydXUWlxayddKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB2YXIgXzB4NGQyNWZmID0gXzB4NTQxZDc2WydJd01UbCddWydzcGxpdCddKCd8JyksXFxuICAgICAgICAgICAgICAgICAgICBfMHg0YTk3YzkgPSAweDA7XFxuICAgICAgICAgICAgICAgIHdoaWxlICghIVtdKSB7XFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF8weDRkMjVmZltfMHg0YTk3YzkrK10pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcwJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDU0MWQ3NlsneGZkSGsnXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiBiakl0ZW1bJ3B1bGxTY3JpcHQnXShfbXlTZXRbJ2NqY2FjaGUnXSwgX215U2V0Wyd4NWNhY2hlJ10pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc2MnOiBfMHg1NDFkNzZbJ3JHTHVBJ10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg1NDFkNzZbJ3pRU0xFJ11cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzEnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfMHg1NDFkNzZbJ2h2aURsJ10oZXZhbCwgXzB4NTQxZDc2WydodmlEbCddKGdldFZhciwgXzB4NTQxZDc2WydxUlFkQSddKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzInOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogJ2xpbmVfYmxhbmsnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICczJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF8weDJhYjM5OSA9ICdoaWtlcjovL2VtcHR5I25vSGlzdG9yeSNAcnVsZT1qczp0aGlzLmQ9W107JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvanhJdGVtP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCIpLmp4TGlzdCgpO3NldFJlc3VsdChkKTsnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc0JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDU0MWQ3NlsnWnhVZ3QnXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiB0eXBlb2YgY3pHdWlkZSA9PSAnZnVuY3Rpb24nID8gY3pHdWlkZSgpIDogJycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg1NDFkNzZbJ3pRU0xFJ11cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzUnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ZFJvdXRlID0gXzB4NTQxZDc2WydzV0ZvYyddKHhkUm91dGUsIF9teVNldFsncGFyc2VSb3V0ZSddKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnNic6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfMHgzYTlhZmUgPSBbe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogJ+aLieWPluWIl+ihqCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWydwdWxsQ29kZSddKCfliJfooagnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg1NDFkNzZbJ09FaGF0J10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWydwdWxsQ29kZSddKCfku6PnoIEnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg1NDFkNzZbJ1p2dFN1J10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogXzB4NTQxZDc2WydodmlEbCddKGZpbGVFeGlzdCwgXzB4NTQxZDc2WydodmlEbCddKGdldFZhciwgJ3BhcnNlUm91dGUnKSkgPT0gISFbXSA/IF8weDJhYjM5OSA6IF8weDU0MWQ3NlsnZ1hLTWInXVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnNyc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF8weDFhMmNkYiA9IDB4MDsgXzB4NTQxZDc2WydXQ09EQyddKF8weDFhMmNkYiwgXzB4M2E5YWZlWydsZW5ndGgnXSk7IF8weDFhMmNkYisrKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDNhOWFmZVtfMHgxYTJjZGJdWyd0aXRsZSddLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiBfMHgzYTlhZmVbXzB4MWEyY2RiXVsndXJsJ10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NTQxZDc2WydyQWtBaCddXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc4JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDU0MWQ3NlsneVdhT0knXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiBiakl0ZW1bJ2hmUGx1Z2luJ10oX215U2V0WydwYXJzZVJvdXRlJ10pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc2MnOiBfMHg1NDFkNzZbJ3NXRm9jJ10oXzB4NTQxZDc2Wyd5anlqSyddICsgbXlTZXRbJ2NqJ10sICdcXFxcbuWtmOaUvui3r+W+hDogL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NTQxZDc2Wyd6UVNMRSddXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc5JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDU0MWQ3NlsndEhYZUUnXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiAndG9hc3Q6Ly/or7flnKjkuIvmlrnpgInpobnmk43kvZwnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc2MnOiBfMHg1NDFkNzZbJ0dNVVl1J10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg1NDFkNzZbJ3pRU0xFJ11cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzEwJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDU0MWQ3NlsnbXBaQlonXVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMTEnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc2MnOiBfMHg1NDFkNzZbJ3h2cWdGJ10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiAnaW5wdXQnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4dHJhJzoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZVZpc2libGUnOiAhW10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IF8weDU0MWQ3NlsnaHZpRGwnXShnZXRWYXIsICdwbHVnaW5MaW5rJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29uQ2hhbmdlJzogXzB4NTQxZDc2WydoZXVLeCddXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBkWydwdXNoJ10oe1xcbiAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg1NDFkNzZbJ0lpZmlhJ10sXFxuICAgICAgICAgICAgICAgICdkZXNjJzogXzB4NTQxZDc2WydQRlJIQSddLFxcbiAgICAgICAgICAgICAgICAndXJsJzogXzB4NTQxZDc2WydVTHdrVCddLFxcbiAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg1NDFkNzZbJ3pRU0xFJ11cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgfVxcbn07XFxuJC5leHBvcnRzID0ganhJdGVtO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6Kej5p6QVXJs57yW6L6RXCIsXCJwYXRoXCI6XCJFZGl0VXJsXCIsXCJydWxlXCI6XCJqczpcXG5zZXRQYWdlVGl0bGUoXFxcIuaPkuS7tuaOpeWPo+iuvue9rlxcXCIpO1xcbmxldCBkID0gW107XFxubGV0IHBhcnNlVXJsVGV4dCA9IHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcIik7XFxubGV0IHBhcnNlVXJsQXJyYXkgPSBwYXJzZVVybFRleHQuc3BsaXQoL1xcXFxuLyk7XFxubGV0IHNlbGVjdGVkID0gZ2V0SXRlbShcXFwic2VsZWN0ZWRcXFwiLCBcXFwiXFxcIik7XFxubGV0IGNsYXNzVGFiID0gW1xcbiAgICBbXFxcIumAieaLqVxcXCIsIFxcXCIwXFxcIl0sXFxuICAgIFtcXFwi5L+u5pS5XFxcIiwgXFxcIjFcXFwiXSxcXG4gICAgW1xcXCLliKDpmaRcXFwiLCBcXFwiMlxcXCJdXFxuXTtcXG5sZXQgY2xhc3NBID0gZ2V0VmFyKFxcXCJjbGFzc1xcXCIsIFxcXCIwXFxcIik7XFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgY2xlYXJWYXIoXFxcImNsYXNzXFxcIik7XFxufSkpO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi5re75Yqg5paw55qE6Kej5p6QXFxcIixcXG4gICAgdXJsOiAkKFxcXCJcXFwiLFxcXCLop6PmnpDlkI0mJuino+aekFVSTFxcXCIpLmlucHV0KCgpID0+IHtcXG4gICAgICAgIGxldCBwYXJzZVVybFRleHQgPSByZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXCIpO1xcbiAgICAgICAgbGV0IHBhcnNlVXJsQXJyYXkgPSBwYXJzZVVybFRleHQuc3BsaXQoL1xcXFxuLyk7XFxuICAgICAgICBpZihpbnB1dC5zcGxpdChcXFwiJiZcXFwiKS5sZW5ndGghPT0yKXtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5qC85byP5LiN5q2j56GuXFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIHBhcnNlVXJsQXJyYXkucHVzaChpbnB1dCk7XFxuICAgICAgICBwYXJzZVVybFRleHQgPSBwYXJzZVVybEFycmF5LmpvaW4oXFxcIlxcXFxuXFxcIik7XFxuICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcIiwgcGFyc2VVcmxUZXh0KTtcXG4gICAgICAgIFxcbiAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S/ruaUueaIkOWKn1xcXCI7XFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxufSk7XFxuZm9yIChsZXQgaXRlbSBvZiBjbGFzc1RhYikge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGl0ZW1bMV0gPT09IGNsYXNzQSA/IFxcXCLigJzigJxcXFwiICsgaXRlbVswXSArIFxcXCLigJ3igJ1cXFwiIDogaXRlbVswXSxcXG4gICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoa2V5KSA9PiB7XFxuICAgICAgICAgICAgcHV0VmFyKFxcXCJjbGFzc1xcXCIsIGtleSk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICB9LCBpdGVtWzFdKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG4gICAgfSk7XFxufVxcbmxldCBmdW5jO1xcbnN3aXRjaCAoY2xhc3NBKSB7XFxuICAgIGNhc2UgXFxcIjBcXFwiOlxcbiAgICAgICAgZnVuYyA9IGZ1bmN0aW9uKHVybCwgdGl0bGUpIHtcXG4gICAgICAgICAgICByZXR1cm4gJCh1cmwgKyBcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgodGl0bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgbG9nKFxcXCJcXFxcbuabtOaUueaOpeWPoz4gXFxcIiArIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgc2V0SXRlbShcXFwic2VsZWN0ZWRcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInNlbGVjdGVkMFxcXCIsIHRpdGxlICsgXFxcIiYmXFxcIiArIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5L+u5pS55oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICB9LCB0aXRsZSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgXFxcIjFcXFwiOlxcbiAgICAgICAgZnVuYyA9IGZ1bmN0aW9uKHVybCwgdGl0bGUsIGluZGV4KSB7XFxuICAgICAgICAgICAgcmV0dXJuICQodXJsLCBcXFwi6K+36L6T5YWl44CMXFxcIiArIHRpdGxlICsgXFxcIuOAjeeahOaWsOaOpeWPo1xcXCIpLmlucHV0KCh0aXRsZSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlVXJsVGV4dCA9IHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcIik7XFxuICAgICAgICAgICAgICAgIGxldCBwYXJzZVVybEFycmF5ID0gcGFyc2VVcmxUZXh0LnNwbGl0KC9cXFxcbi8pO1xcbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWQxID0gcGFyc2VVcmxBcnJheVtpbmRleF07XFxuICAgICAgICAgICAgICAgIHBhcnNlVXJsQXJyYXlbaW5kZXhdID0gdGl0bGUgKyBcXFwiJiZcXFwiICsgaW5wdXQ7XFxuICAgICAgICAgICAgICAgIHBhcnNlVXJsVGV4dCA9IHBhcnNlVXJsQXJyYXkuam9pbihcXFwiXFxcXG5cXFwiKTtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXCIsIHBhcnNlVXJsVGV4dCk7XFxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZDEgPT0gZ2V0SXRlbShcXFwic2VsZWN0ZWQwXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInNlbGVjdGVkXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFwic2VsZWN0ZWQwXFxcIiwgdGl0bGUgKyBcXFwiJiZcXFwiICsgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S/ruaUueaIkOWKn1xcXCI7XFxuICAgICAgICAgICAgfSwgdGl0bGUsIGluZGV4KTtcXG4gICAgICAgIH07XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSBcXFwiMlxcXCI6XFxuICAgICAgICBmdW5jID0gZnVuY3Rpb24odXJsLCB0aXRsZSwgaW5kZXgpIHtcXG4gICAgICAgICAgICByZXR1cm4gJChcXFwi56Gu6K6k5Yig6Zmk44CMXFxcIiArIHRpdGxlICsgXFxcIuOAje+8n1xcXCIpLmNvbmZpcm0oKHRpdGxlLCBpbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VVcmxUZXh0ID0gcmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFwiKTtcXG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlVXJsQXJyYXkgPSBwYXJzZVVybFRleHQuc3BsaXQoL1xcXFxuLyk7XFxuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RlZDEgPSBwYXJzZVVybEFycmF5W2luZGV4XTtcXG4gICAgICAgICAgICAgICAgcGFyc2VVcmxBcnJheS5zcGxpY2UoaW5kZXgsIDEpO1xcbiAgICAgICAgICAgICAgICBwYXJzZVVybFRleHQgPSBwYXJzZVVybEFycmF5LmpvaW4oXFxcIlxcXFxuXFxcIik7XFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFwiLCBwYXJzZVVybFRleHQpO1xcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQxID09IGdldEl0ZW0oXFxcInNlbGVjdGVkMFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VVcmxBcnJheVswXSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInNlbGVjdGVkXFxcIiwgcGFyc2VVcmxBcnJheVswXS5zcGxpdChcXFwiJiZcXFwiKVsxXSB8fCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFwic2VsZWN0ZWQwXFxcIiwgcGFyc2VVcmxBcnJheVswXSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInNlbGVjdGVkXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInNlbGVjdGVkMFxcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip9cXFwiO1xcbiAgICAgICAgICAgIH0sIHRpdGxlLCBpbmRleCk7XFxuICAgICAgICB9O1xcbiAgICAgICAgYnJlYWs7XFxuXFxufVxcbmZvciAobGV0IGkgaW4gcGFyc2VVcmxBcnJheSkge1xcbiAgICBsZXQgaXRlbSA9IHBhcnNlVXJsQXJyYXlbaV0uc3BsaXQoXFxcIiYmXFxcIik7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogc2VsZWN0ZWQgPT0gaXRlbVsxXSA/IFxcXCLigJjigJhcXFwiICsgaXRlbVswXSArIFxcXCLigJnigJlcXFwiIDogaXRlbVswXSxcXG4gICAgICAgIHVybDogZnVuYyhpdGVtWzFdLCBpdGVtWzBdLCBpKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8zXFxcIlxcbiAgICB9KTtcXG59XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Li76aKY566h55CGXCIsXCJwYXRoXCI6XCJ0aGVtZVwiLFwicnVsZVwiOlwianM6XFxuICAgIGZ1bmN0aW9uIHRoZW1lSW5pdCgpe1xcbiAgICAgICAgY29uc3Qge2NvbG9yLHNtYWxsfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3V0aWxpeT9ydWxlPemBk+mVv+S7k+W6k1Byb1xcXCIpO1xcbiAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgIGxldCBvcHRpb25zID0gWyfpgInmi6knLCfkv67mlLknLCfliKDpmaQnLCflr7zlh7onXTtcXG5cXG4gICAgICAgIGZvcih2YXIgaSBpbiBvcHRpb25zKXtcXG4gICAgICAgICAgICBsZXQgb3B0aW9uID0gb3B0aW9uc1tpXTtcXG4gICAgICAgICAgICBsZXQgZmxhZyA9IGdldFZhcigndGhlbWUuZG5fb3B0aW9uJywn5paw5aKeJyk9PT1vcHRpb24/J/CfkYknOicnO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOmZsYWcrb3B0aW9uLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgICAgIHVybDokKG9wdGlvbikubGF6eVJ1bGUoKCk9PntcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcigndGhlbWUuZG5fb3B0aW9uJywgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6K6+572u5pON5L2c57G75Z6L5Li6OicraW5wdXQ7XFxuICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgbGV0IHRoZW1lUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVRoZW1lLmpzb25cXFwiO1xcbiAgICAgICAgbGV0IG15VGhlbWVzID0ge307XFxuICAgICAgICBsZXQgdGhlbWVzID0ge307XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIG15VGhlbWVzID0gSlNPTi5wYXJzZShmZXRjaCh0aGVtZVJvdXRlKSk7XFxuICAgICAgICAgICAgdGhlbWVzID0gbXlUaGVtZXMudGhlbWVzW215VGhlbWVzLm5vd190aGVtZV07XFxuICAgICAgICB9Y2F0Y2ggKGUpIHt9XFxuXFxuXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiflr7zlhaUnLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICB1cmw6JCgnJywn6K+36L6T5YWl5a+85YWl5Y+j5LukJykuaW5wdXQoKG15VGhlbWVzLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgIGlmKC9e5pat5o+S5Li76aKYQC4qP0BodHRwLy50ZXN0KGlucHV0KSl7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGlucHV0LnNwbGl0KCdAJylbMV07XFxuICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gaW5wdXQuc3BsaXQoJ0AnKVsyXTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCfnoa7lrpropoHlr7zlhaXmlq3mj5LkuLvpopgtJytuYW1lKycg5ZCXPycpLmNvbmZpcm0oKG5hbWUsdXJsLG15VGhlbWVzLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBwYXJzZVBhc3RlKHVybCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhhc1RoZW1lID0gbXlUaGVtZXMudGhlbWVzLmZpbHRlcihpdD0+aXQubmFtZT09PW5hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGhhc1RoZW1lJiZoYXNUaGVtZS5sZW5ndGg+MCl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZCA9IG51bGw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaiBpbiBteVRoZW1lcy50aGVtZXMpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobXlUaGVtZXMudGhlbWVzW2pdLm5hbWUgPT09IG5hbWUpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gajtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighaWQpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+e0ouW8lemUmeivr+aXoOazleimhuebluWvvOWFpTpcXFxcbicraWRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2coJ+imhuebluWvvOWFpeS4u+mimGlkOicraWQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRoZW1lcy50aGVtZXNbaWRdID0gT2JqZWN0LmFzc2lnbihKU09OLnBhcnNlKGJhc2U2NERlY29kZShjb250ZW50KSkseyduYW1lJzpuYW1lfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VGhlbWVzLnRoZW1lcy5wdXNoKE9iamVjdC5hc3NpZ24oSlNPTi5wYXJzZShiYXNlNjREZWNvZGUoY29udGVudCkpLHsnbmFtZSc6bmFtZX0pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKG15VGhlbWVzKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeShteVRoZW1lcykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LmiJDlip/lr7zlhaXkuLvpopg6XFxcXG4nK25hbWVcXG4gICAgICAgICAgICAgICAgICAgIH0sbmFtZSx1cmwsbXlUaGVtZXMsdGhlbWVSb3V0ZSk7XFxuICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aXoOazleivhuWIq+eahOWvvOWFpeWPo+S7pDpcXFxcbicraW5wdXQ7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LG15VGhlbWVzLHRoZW1lUm91dGUpLFxcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOifmlrDlop4nLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICB1cmw6JCgpLnJ1bGUoKG15VGhlbWVzLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgIGxldCBkPVtdO1xcbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCk9PntcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+S4u+mimOWQjeensCcsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi5pat5o+SLeiTneiOk+S4u+mimFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0VmFyKCd0aGVtZS5uZXdfYWRkX25hbWUnLGlucHV0KVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiB0cnVlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0VmFyKCd0aGVtZS5uZXdfYWRkX25hbWUnLCAnJylcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICB1cmw6JC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld19hZGRfbmFtZSA9IGdldFZhcigndGhlbWUubmV3X2FkZF9uYW1lJywgJycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kvaDovpPlhaXnmoTmmK86JytuZXdfYWRkX25hbWU7XFxuICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuS7o+eggVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcigndGhlbWUubmV3X2FkZF9jb2RlJywgJycpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0Oi0xLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAncHV0VmFyKFxcXCJ0aGVtZS5uZXdfYWRkX2NvZGVcXFwiLGlucHV0KSdcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTon5L+d5a2YJyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0X2NlbnRlcl8xJyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDokKCkubGF6eVJ1bGUoKG15VGhlbWVzLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSBnZXRWYXIoJ3RoZW1lLm5ld19hZGRfY29kZScsICcnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGdldFZhcigndGhlbWUubmV3X2FkZF9uYW1lJywgJycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFuYW1lKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S9oOi/mOayoeWhq+WGmeS4u+mimOWQjeensOWRoidcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1RoZW1lID0ge307XFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGhlbWUgPSBKU09OLnBhcnNlKGNvZGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1jYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6ZSZ6K+v55qE5Li76aKYanNvbuagvOW8jzpcXFxcbicrZS5tZXNzYWdlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKG5ld1RoZW1lLHsnbmFtZSc6bmFtZX0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG15VGhlbWVzLnRoZW1lcy5wdXNoKG5ld1RoZW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeShteVRoZW1lcykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LmlrDlop7mlq3mj5LkuLvpopg6JytuYW1lXFxuICAgICAgICAgICAgICAgICAgICB9LG15VGhlbWVzLHRoZW1lUm91dGUpXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgICAgICAgICAgfSxteVRoZW1lcyx0aGVtZVJvdXRlKSxcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTpteVRoZW1lcy50aGVtZXM/J+S4u+mimOWIl+ihqDrlhbHorqE6Jytjb2xvcihteVRoZW1lcy50aGVtZXMubGVuZ3RoLCcjZmY3MDAwJykrJ+S4quS4u+mimCc6XFxcIuesrOS4gOasoeWKoOi9ve+8jOeCueatpOi/m+WOu+WIneWni+WMluS4u+mimOWIl+ihqFxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMScsXFxuICAgICAgICAgICAgdXJsOidoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uI25vSGlzdG9yeSMnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6XFxcIuaBouWkjeWHuuWOguiuvue9rlxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgICAgIHVybDokKFxcXCLlpoLmnpzkvaDnmoTkuLvpopjmsqHms5XmraPluLjnlKjkuobvvIzmraTmlrnms5Xlj6/ku6XmlZHnoJbvvIznoa7orqTmgaLlpI0/XFxcIikuY29uZmlybSgoKT0+e1xcbiAgICAgICAgICAgICAgICBsZXQgdGhlbWVzID0ge25hbWU6J+m7mOiupOS4u+mimCcsY2xvc2VCdG46e2NvbG9yOicjZjZmNmY2JyxiYWNrZ3JvdW5kOicjYWE5NmRhJ30sc2F2ZUJ0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNjgwMDYnfSxzYXZlQ2xvc2VCdG46e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjMDVCRkM1J30sdGlwc0J0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNUJGQzUnfSxiYXJsYWJlbDp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyNhYTk2ZGEnfSxiYXJJbnB1dDp7Y29sb3I6JyNhYTk2ZGEnLGJhY2tncm91bmQ6JyNmZmZmZDInfSxzZWxlY3Q6e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjYWE5NmRhJ30sfTtcXG4gICAgICAgICAgICAgICAgbGV0IHRoZW1lRGVmID0ge1xcXCJuYW1lXFxcIjpcXFwi5pat5b+15Y6f55quXFxcIixcXFwiY2xvc2VCdG5cXFwiOntcXFwiY29sb3JcXFwiOlxcXCIjRjlGMERBXFxcIixcXFwiYmFja2dyb3VuZFxcXCI6XFxcIiNjNTQ2NGFcXFwifSxcXFwic2F2ZUJ0blxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiIzA2ODAwNlxcXCJ9LFxcXCJzYXZlQ2xvc2VCdG5cXFwiOntcXFwiY29sb3JcXFwiOlxcXCIjRjlGMERBXFxcIixcXFwiYmFja2dyb3VuZFxcXCI6XFxcIiMwNUJGQzVcXFwifSxcXFwidGlwc0J0blxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiIzA1QkZDNVxcXCJ9LFxcXCJiYXJsYWJlbFxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiI0QwNkI2Q1xcXCJ9LFxcXCJiYXJJbnB1dFxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNEMDZCNkNcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiI0Y5RjBEQVxcXCJ9LFxcXCJzZWxlY3RcXFwiOntcXFwiY29sb3JcXFwiOlxcXCIjRjlGMERBXFxcIixcXFwiYmFja2dyb3VuZFxcXCI6XFxcIiNEMDZCNkNcXFwifX07XFxuICAgICAgICAgICAgICAgIGxldCB0aGVtZVJvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlUaGVtZS5qc29uXFxcIjtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkoe25vd190aGVtZTon6buY6K6k5Li76aKYJyx0aGVtZXM6W3RoZW1lcyx0aGVtZURlZl19KSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S5Li76aKY5bey6YeN572u5Li65Ye65Y6C6K6+572uJ1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KTtcXG4gICAgICAgIGZvcih2YXIgaSBpbiBteVRoZW1lcy50aGVtZXMpe1xcbiAgICAgICAgICAgIGxldCBub3dUaGVtID0gbXlUaGVtZXMudGhlbWVzW2ldO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOm15VGhlbWVzLm5vd190aGVtZT09PW5vd1RoZW0ubmFtZT8n8J+RiScrbm93VGhlbS5uYW1lOm5vd1RoZW0ubmFtZSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6J2ZsZXhfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgdXJsOiQoKS5sYXp5UnVsZSgobXl0aGVtZSxteVRoZW1lcyxpLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9uID0gZ2V0VmFyKCd0aGVtZS5kbl9vcHRpb24nLCfmlrDlop4nKTtcXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0aW9uKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICflr7zlh7onOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbXl0aGVtZUNvZGUgPSBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkobXl0aGVtZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gc2hhcmVQYXN0ZShteXRoZW1lQ29kZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gJ+aWreaPkuS4u+mimEAnK215dGhlbWUubmFtZSsnQCcrdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5KGNvZGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5a+85Ye65Li65LqR5Y+j5Luk5bm25aSN5Yi25Yiw5Ymq5YiH5p2/J1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ+S/ruaUuSc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKEpTT04uc3RyaW5naWZ5KG15dGhlbWUpKS5pbnB1dCgobXl0aGVtZSxteVRoZW1lcyxpLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihteXRoZW1lLm5hbWU9PT1teVRoZW1lcy5ub3dfdGhlbWUpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mraTkuLvpopjlvZPliY3mraPlnKjkvb/nlKjkuK3vvIzkuI3lhYHorrjkv67mlLkhJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUaGVtZXMudGhlbWVzW2ldPUpTT04ucGFyc2UoaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkobXlUaGVtZXMpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suS/ruaUuSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxteXRoZW1lLG15VGhlbWVzLGksdGhlbWVSb3V0ZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICfliKDpmaQnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgn56Gu6K6k5Yig6Zmk5Li76aKYOicrbXl0aGVtZS5uYW1lKyc/JykuY29uZmlybSgobXl0aGVtZSxteVRoZW1lcyxpLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihteXRoZW1lLm5hbWU9PT1teVRoZW1lcy5ub3dfdGhlbWUpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mraTkuLvpopjlvZPliY3mraPlnKjkvb/nlKjkuK3vvIzkuI3lhYHorrjliKDpmaQhJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUaGVtZXMudGhlbWVzLnNwbGljZShpLDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkobXlUaGVtZXMpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWIoOmZpCdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxteXRoZW1lLG15VGhlbWVzLGksdGhlbWVSb3V0ZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRoZW1lcy5ub3dfdGhlbWU9bXl0aGVtZS5uYW1lO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeShteVRoZW1lcykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S9oOmAieaLqeS6hicrbXl0aGVtZS5uYW1lKyfkvZzkuLrpu5jorqTkuLvpopgnO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LG5vd1RoZW0sbXlUaGVtZXMsaSx0aGVtZVJvdXRlKSxcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgfVxcbiQuZXhwb3J0cy50aGVtZUluaXQ9dGhlbWVJbml0O1wifSx7XCJuYW1lXCI6XCLmk43kvZzmjIflvJVcIixcInBhdGhcIjpcIkd1aWRlXCIsXCJydWxlXCI6XCI8aHRtbD5cXG48aGVhZD5cXG4gICAgPG1ldGEgY2hhcnNldD1cXFwiVVRGLThcXFwiPlxcbjwvaGVhZD5cXG48Ym9keT5cXG48c3Ryb25nPiA8YmlnPuaLieWPluevhzwvYmlnPiA8L3N0cm9uZz5cXG48YnIgLz4g5pON5L2c6aG65bqP77yaXFxuPGJyIC8+IDEu5pu05paw6YGT6ZW/5LuT5bqTUHJv5YiwNzbniYjmnKxcXG48YnIgLz4gMi7mi4nlj5bkuLvmj5Lku7blkoznvZHpobXohJrmnKxcXG48YnIgLz4gMy7mjqjojZDnm7TmjqXmi4nlj5bku6PnoIE8cz7mi4nlj5bliJfooajihpLmi4nlj5bku6PnoIE8L3M+XFxuPGJyIC8+XFxuPGJyIC8+XFxuPHN0cm9uZz48YmlnPuWPo+S7pOevhzwvYmlnPjwvc3Ryb25nPlxcbjxiciAvPummlumhtei+k+WFpeahhuaUr+aMge+8mlxcbjxiciAvPjEu5YiG5Lqr5Ye65p2l55qE5ZCM57O75YiX5o+S5Lu25LqR5Ymq6LS05p2/5Y+j5LukXFxuPGJyIC8+Mi7mnKrliqDlr4bnmoTlkIzns7vliJfmj5Lku7blnLDlnYAs5pSv5oyB5pys5Zyw5paH5Lu25aaC5Lul5LiL5qC85byP5byA5aS055qEOmZpbGU6Ly8saGlrZXI6Ly8sL3N0b3JhZ2VcXG48YnIgLz4zLlHnpZ5cXG48YnIgLz40LuaWreaPklxcbjxiciAvPjUuI+mBk+mVv+eyvumAiVxcbjxiciAvPjYuI2Lnq5lcXG48YnIgLz43LiPlgI3pmYZcXG48YnIgLz5cXG48YnIgLz5cXG48c3Ryb25nPjxiaWc+57yW6L6R56+HPC9iaWc+PC9zdHJvbmc+XFxuPGJyIC8+6ZqQ6JeP5Yqf6IO96ZyA55+l77yaXFxuPGJyIC8+6ZqQ6JeP5Yqf6IO95piv5LuO5YiX6KGo5LiK5Yig6Zmk5qCH6aKY77yM5pWF5peg5aSN546w5Yqf6IO9XFxuPGJyIC8+55yL5YeG5LqG77yM5LiN55So55qE5omN54K56ZqQ6JePXFxuPGJyIC8+6KaB5aSN546w55qE6K+d5Y675L+u5pS55paw55qETXlQYXJzZS5qc29u77yM5ZyodGl0bGXnmoTmlbDnu4TpgqPmjInmoLzlvI/mt7vliqDmoIfpophcXG48YnIgLz5cXG48YnIgLz5cXG48c3Ryb25nPjxiaWc+5a6M57uTPC9iaWc+PGJyIC8+PC9zdHJvbmc+XFxuPHA+djMuNDks5bCP55m95pyA5ZCO55qE5YCU5by6LOWwj+eZveWFs+aAgOaooeW8jzwvcD5cXG48cD7kuIDplK7lrp7njrDphY3nva7lrozmr5XljbPlj6/pgJrov4fmlK/mjIHprZTmlq3nmoTlsI/nqIvluo/nnIvop4bpopHvvIzlm57lvZLnmb3lq5bop4bpopHov5nkuKrpnIDmsYLmnKzouqs8L3A+XFxuPHA+5o6o6I2Q5L2/55So6Z2S6LGGLGFwcOW9seinhi5kcDwvcD5cXG48cD7prZTmlq0o5pat5o+S6YGT6ZW/6a2U5pS554mIKeW3suW8g+Wdkei3kei3r++8jOaEn+iwouWOn+S9nOiAheaWreW/teeahOaPkuS7tuino+aekOWPiuacrOWwj+eoi+W6j+aguOW/g+S7o+eggTwvcD5cXG48L2JvZHk+XFxuPC9odG1sPlwifSx7XCJuYW1lXCI6XCLmtYvor5XmlbDmja5cIixcInBhdGhcIjpcImRlbW9EYXRhXCIsXCJydWxlXCI6XCJqczpcXG4gICAgbGV0IGRlbW9EYXRhID0ge1xcbiAgICAgICAg54ix5aWH6Im6OlsnaHR0cHM6Ly93d3cuaXFpeWkuY29tL3ZfMXpwN3FnaDIza2cuaHRtbCcsJ2h0dHBzOi8vd3d3LmlxaXlpLmNvbS92XzJiYzh0azhyNnVnLmh0bWwnXSxcXG4gICAgICAgIOS8mOmFtzpbJ2h0dHBzOi8vdi55b3VrdS5jb20vdl9zaG93L2lkX1hOVEU0TlRneE1UWTJNQT09Lmh0bWwnLCdodHRwczovL3YueW91a3UuY29tL3Zfc2hvdy9pZF9YTlRFNU9EWXhNakF6Tmc9PS5odG1sJ10sXFxuICAgICAgICDohb7orq86WydodHRwczovL3YucXEuY29tL3gvY292ZXIvbTQ0MWUzcmpxOWt3cHNjL3AwMDQwZ2ltNGZ6Lmh0bWwnLCdodHRwczovL3YucXEuY29tL3gvY292ZXIvbXpjMDAyMDB4aDkzMTN2L3owMDM5dGJobzdxLmh0bWwnXSxcXG4gICAgICAgIOiKkuaenDpbJ2h0dHBzOi8vd3d3Lm1ndHYuY29tL2IvMzcyMDYxLzEyMTkzNTU4Lmh0bWwnLCdodHRwczovL3d3dy5tZ3R2LmNvbS9iLzM2MzI4Ni8xNDI5NTgyMy5odG1sJ10sXFxuICAgICAgICDlk5Tlk6nlk5Tlk6k6WydodHRwczovL3d3dy5iaWxpYmlsaS5jb20vYmFuZ3VtaS9wbGF5L2VwMzgxMjE3JywnaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL2Jhbmd1bWkvcGxheS9lcDQwODEyMycsJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9iYW5ndW1pL3BsYXkvc3MzMzQzNCcsJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS92aWRlby9hdjMzNjM0ODY2MyddLFxcbiAgICAgICAg5pCc54uQOlsnaHR0cHM6Ly9maWxtLnNvaHUuY29tL2FsYnVtLzk0NTc1ODQuaHRtbCcsJ2h0dHBzOi8vZmlsbS5zb2h1LmNvbS9hbGJ1bS85MTgyNjQ2Lmh0bWwnXSxcXG4gICAgICAgIOilv+eTnDpbJ2h0dHBzOi8vd3d3Lml4aWd1YS5jb20vNjU1MTMzMjEyNTY1NDY0NzMxMCcsJ2h0dHBzOi8vd3d3Lml4aWd1YS5jb20vNjY5OTM1Njc5MjkwNTc5NDA1NSddLFxcbiAgICAgICAg6Zi/6YeMOlsnJ10sXFxuICAgICAgICBQUFRWOlsnaHR0cDovL3YucHB0di5jb20vc2hvdy9USW5kV3NJb21OWTV0eDguaHRtbCcsJ2h0dHA6Ly92LnBwdHYuY29tL3Nob3cvU0NRNXRoNkU5REtWRTNzLmh0bWwnXSxcXG4gICAgICAgIOWSquWSlTpbJ2h0dHBzOi8vd3d3Lm1pZ3V2aWRlby5jb20vbWdzL3dlYnNpdGUvcHJkL2RldGFpbC5odG1sP2NpZD02MzM1MTE3NDMnLCdodHRwczovL3d3dy5taWd1dmlkZW8uY29tL21ncy93ZWJzaXRlL3ByZC9kZXRhaWwuaHRtbD9jaWQ9NzE2MjcwMzE5J10sXFxuICAgICAgICDkuZDop4Y6WydodHRwOi8vd3d3LmxlLmNvbS9wdHYvdnBsYXkvNzU4NDMwNTkuaHRtbCcsJ2h0dHA6Ly93d3cubGUuY29tL3B0di92cGxheS8yNDIyMDkwMS5odG1sI3ZpZD0yNDIyMDkwMSddLFxcbiAgICAgICAgMTkwNTpbJ2h0dHBzOi8vdmlwLjE5MDUuY29tL3BsYXkvODc1NzQwLnNodG1sJywnaHR0cHM6Ly93d3cuMTkwNS5jb20vdm9kL3BsYXkvODgwNjQxLnNodG1sJ10sXFxuICAgICAgICDpo47ooYw6WydodHRwOi8vd3d3LmZ1bi50di92cGxheS9nLTMwNDE0MycsJ2h0dHA6Ly93d3cuZnVuLnR2L3ZwbGF5L2ctMTAwODk2My8nXSxcXG4gICAgfVxcblxcbmxldCBkZWZhdWx0U2V0cyA9ICB7XFxuICAgIHF5OiAn5L2g54i556eR5oqAJyxcXG4gICAgeWs6ICfpoobphbcnLFxcbiAgICB0eDogJ+iNo+iAgCcsXFxuICAgIG1nOiAn6JqC6JqB5YWE5byfJyxcXG4gICAgYmw6ICdPS+ino+aekCcsXFxuICAgIHNoOiAn5rGf5rmWRCcsXFxuICAgIHhnOiAn5rGf5rmWRCcsXFxuICAgIGFsOiAn5rGf5rmWRCcsXFxuICAgIHBwOiAn5Lq65Lq66L+3JyxcXG4gICAgbWk6ICcxMDgwJyxcXG4gICAgbGU6ICfov6rlpaXll4XmjqInLFxcbiAgICBvdGg6ICfpgZPplb/ku5PlupPpgJrlhY0nLFxcbiAgICBmdW46ICfono3lhbQnLFxcbiAgICBvbmU6JzEwODAnLFxcbiAgICBxanU6ICfpu5jorqQnLFxcbiAgICBjajogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnXFxufTtcXG5cXG5sZXQgZmxvb3JzID0gJ+KRoOKRoeKRouKRo+KRpOKRpeKRpuKRp+KRqOKRqe+8ke+8ku+8k++8lO+8le+8lu+8l++8mO+8me+8kOKSiOKSieKSiuKSi+KSjOKSjeKSjuKSj+KSkCcuc3BsaXQoJycpO1xcbmxldCBlbW9qaXMgPSAnI++4j+KDo3wq77iP4oOjfDDvuI/ig6N8Me+4j+KDo3wy77iP4oOjfDPvuI/ig6N8NO+4j+KDo3w177iP4oOjfDbvuI/ig6N8N++4j+KDo3w477iP4oOjfDnvuI/ig6N88J+FsO+4j3zwn4Wx77iPfPCfjYd88J+NiHzwn42JfPCfjYp88J+Ni3zwn42MfPCfjY188J+Njnzwn42PfPCfjZB88J+NkXzwn42SfPCfjZN88J+NhXzwn42GfPCfjL188J+NhHzwn4ywfPCfjZ588J+Nlnzwn42XfPCfjZR88J+Nn3zwn42VfPCfjbN88J+Nsnzwn42xfPCfjZh88J+NmXzwn42afPCfjZt88J+NnHzwn42dfPCfjaB88J+Nonzwn42jfPCfjaR88J+NpXzwn42hfPCfjaZ88J+Np3zwn42ofPCfjal88J+Nqnzwn46CfPCfjbB88J+Nq3zwn42sfPCfja188J+Nrnzwn42vfPCfjbx84piVfPCfjbV88J+Ntnzwn423fPCfjbh88J+NuXzwn426fPCfjbt88J+NtCcuc3BsaXQoJ3wnKTtcXG5mbG9vcnMgPSBmbG9vcnMuY29uY2F0KGVtb2ppcyk7XFxuJC5leHBvcnRzLmRlbW9EYXRhID0gZGVtb0RhdGE7XFxuJC5leHBvcnRzLmRlZmF1bHRTZXRzID0gZGVmYXVsdFNldHM7XFxuJC5leHBvcnRzLmZsb29ycyA9IGZsb29ycztcIn0se1wibmFtZVwiOlwi5bel5YW357G7XCIsXCJwYXRoXCI6XCJ1dGlsc1wiLFwicnVsZVwiOlwianM6XFxuLy/pmo/mnLrku47liJfooajmir3lj5bkuIDkuKrlhYPntKBcXG5mdW5jdGlvbiBnZXRPbmUoaXRzKSB7cmV0dXJuICBpdHNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKml0cy5sZW5ndGgpXTt9XFxuLy/ljrvph43vvIhFUzYgU2V077yJXFxuZnVuY3Rpb24gdW5pcXVlMihhcnJheSl7XFxuICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoYXJyYXkpKTtcXG59XFxuLy/ojrflj5bliJfooajkuK3ph43lpI3pg73lgLxcXG5mdW5jdGlvbiBkdXBsaWNhdGVzKGFycikge1xcbiAgICBsZXQgcmVzPWFyci5maWx0ZXIoKHgsayk9PntcXG4gICAgICAgIGxldCBhPWsqMSsxO1xcbiAgICAgICAgbGV0IGluZGV4PWFyci5pbmRleE9mKHgsYSk7XFxuICAgICAgICBpZihpbmRleD4tMSl7XFxuICAgICAgICAgICAgcmV0dXJuIHg7XFxuICAgICAgICB9XFxuICAgIH0pXFxuICAgIGxldCByZT1uZXcgU2V0KHJlcyk7XFxuICAgIHJldHVybiBBcnJheS5mcm9tKHJlKTtcXG59XFxuJC5leHBvcnRzLmdldE9uZSA9IGdldE9uZTtcXG4kLmV4cG9ydHMudW5pcXVlMiA9IHVuaXF1ZTI7XFxuJC5leHBvcnRzLmR1cGxpY2F0ZXMgPSBkdXBsaWNhdGVzO1wifSx7XCJuYW1lXCI6XCLop6PmnpDnrqHnkIZcIixcInBhdGhcIjpcImp4TWFuYWdlXCIsXCJydWxlXCI6XCJqczpcXG4gICAgZnVuY3Rpb24ganhNYW5hZ2UoKXtcXG4gICAgICAgIGNvbnN0IHtjb2xvcixzbWFsbH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS91dGlsaXk/cnVsZT3pgZPplb/ku5PlupNQcm9cXFwiKTtcXG4gICAgICAgIGxldCBkID0gW107XFxuICAgICAgICBsZXQgb3B0aW9ucyA9IFsn6YCJ5oupJywn5L+u5pS5Jywn5Yig6ZmkJywn5a+85Ye6J107XFxuXFxuICAgICAgICBmb3IobGV0IGkgaW4gb3B0aW9ucyl7XFxuICAgICAgICAgICAgbGV0IG9wdGlvbiA9IG9wdGlvbnNbaV07XFxuICAgICAgICAgICAgbGV0IGZsYWcgPSBnZXRWYXIoJ2RuLmp4bV9vcHRpb24nLCfpgInmi6knKT09PW9wdGlvbj8n8J+RiSc6Jyc7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ZmxhZytvcHRpb24sXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKG9wdGlvbik9PntcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcignZG4uanhtX29wdGlvbicsIG9wdGlvbik7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgICAgIH0sb3B0aW9uKSxcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBqeHNSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015SmlleGkuanNvblxcXCI7XFxuICAgICAgICBsZXQgTXlKaWV4aSA9IHtqaWV4aXM6W119O1xcbiAgICAgICAgbGV0IGppZXhpcyA9IHt9O1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBNeUppZXhpID0gSlNPTi5wYXJzZShmZXRjaChqeHNSb3V0ZSkpO1xcbiAgICAgICAgICAgIGppZXhpcyA9IE15SmlleGkuamlleGlzLmZpbHRlcihpdD0+aXQubmFtZT09PU15SmlleGkubm93KVswXTtcXG4gICAgICAgIH1jYXRjaCAoZSkge31cXG5cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6J+WvvOWFpScsXFxuICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgIHVybDokKCcnLCfor7fovpPlhaXlr7zlhaXlj6Pku6QnKS5pbnB1dCgoTXlKaWV4aSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgaWYoL17prZTmlq3op6PmnpDphY3nva5ALio/QGh0dHAvLnRlc3QoaW5wdXQpKXtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBuYW1lID0gaW5wdXQuc3BsaXQoJ0AnKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBpbnB1dC5zcGxpdCgnQCcpWzJdO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ+ehruWumuimgeWvvOWFpeaWreaPkuino+aekOmFjee9ri0nK25hbWUrJyDlkJc/JykuY29uZmlybSgobmFtZSx1cmwsTXlKaWV4aSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IHBhcnNlUGFzdGUodXJsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGFzSXQgPSBNeUppZXhpLmppZXhpcy5maWx0ZXIoaXQ9Pml0Lm5hbWU9PT1uYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihoYXNJdCYmaGFzSXQubGVuZ3RoPjApe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaWQgPSBudWxsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGogaW4gTXlKaWV4aS5qaWV4aXMpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoTXlKaWV4aS5qaWV4aXNbal0ubmFtZSA9PT0gbmFtZSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBqO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFpZCl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v57Si5byV6ZSZ6K+v5peg5rOV6KaG55uW5a+85YWlOlxcXFxuJytpZFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvZygn6KaG55uW5a+85YWl5Li76aKYaWQ6JytpZCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE15SmlleGkuamlleGlzW2lkXSA9IE9iamVjdC5hc3NpZ24oSlNPTi5wYXJzZShiYXNlNjREZWNvZGUoY29udGVudCkpLHsnbmFtZSc6bmFtZX0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpcy5wdXNoKE9iamVjdC5hc3NpZ24oSlNPTi5wYXJzZShiYXNlNjREZWNvZGUoY29udGVudCkpLHsnbmFtZSc6bmFtZX0pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5oiQ5Yqf5a+85YWl6Kej5p6Q6YWN572uOlxcXFxuJytuYW1lXFxuICAgICAgICAgICAgICAgICAgICB9LG5hbWUsdXJsLE15SmlleGksanhzUm91dGUpO1xcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ml6Dms5Xor4bliKvnmoTlr7zlhaXlj6Pku6Q6XFxcXG4nK2lucHV0O1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSxNeUppZXhpLGp4c1JvdXRlKSxcXG4gICAgICAgIH0pO1xcblxcbiAgICAgICAgbGV0IGlzQXV0byA9IE15SmlleGkuaXNBdXRvO1xcbiAgICAgICAgbGV0IGF1dG9Nb2RlID0gTXlKaWV4aS5hdXRvTW9kZTtcXG4gICAgICAgIGxldCB0aXBzID0gJ+ino+aekOmFjee9ruWIl+ihqDrlhbHorqE6Jytjb2xvcihNeUppZXhpLmppZXhpcy5sZW5ndGgsJyNmZjcwMDAnKSsn5Liq6YWN572uLOiHquWKqOaho+W8gOWFszonK2NvbG9yKGlzQXV0bz8n5byAJzon5YWzJywnI2ZmNzAwMCcpO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTpNeUppZXhpLmppZXhpcyYmTXlKaWV4aS5qaWV4aXMubGVuZ3RoPjA/dGlwczpcXFwi56ys5LiA5qyh5Yqg6L2977yM54K55q2k6L+b5Y675Yid5aeL5YyW6Kej5p6Q5YiX6KGoXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTondGV4dF8xJyxcXG4gICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoTXlKaWV4aSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgaWYoTXlKaWV4aS5qaWV4aXMmJk15SmlleGkuamlleGlzLmxlbmd0aD4wKXtcXG4gICAgICAgICAgICAgICAgICAgIE15SmlleGkuaXNBdXRvID0gIU15SmlleGkuaXNBdXRvO1xcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRpcHMgPSBNeUppZXhpLmlzQXV0bz8n5byAJzon5YWzJztcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lorr7nva7oh6rliqjmoaPmqKHlvI/kuLo6Jyt0aXBzXFxuICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGluaXRTZXQgPSB7J25vdyc6XFxcIumBk+mVv+aOqOiNkFxcXCIsJ2ppZXhpcyc6W3tuYW1lOifpgZPplb/mjqjojZAnLHF5Olsn5L2g54i556eR5oqAJ10seWs6WyfpoobphbcnXSx0eDpbJ+iNo+iAgCddLG1nOlsn6JqC6JqB5YWE5byfJ10sYmw6WydPS+ino+aekCddLHNoOlsn5rGf5rmWRCddLHhnOlsn5rGf5rmWRCddLGFsOlsn5rGf5rmWRCddLHBwOlsn5Lq65Lq66L+3J10sbWk6WycxMDgwJ10sbGU6Wyfov6rlpaXll4XmjqInXSxmdW46Wyfono3lhbQnXSxvbmU6WycxMDgwJ119XX07XFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoaW5pdFNldCkpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S6Kej5p6Q6YWN572u5bey5Yid5aeL5YyWJ1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSxNeUppZXhpLGp4c1JvdXRlKVxcbiAgICAgICAgfSk7XFxuICAgICAgICBsZXQgYXV0b01vZGVUaXBzID0gYXV0b01vZGU9PT0n6YCf5bqm5LyY5YWIJz8n6YCf5bqm5LyY5YWIJzon6aG65bqP5LyY5YWIJztcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6c21hbGwoXFxcIuWkh+iDjuWuoOW5uOaWueahiDpcXFwiKStjb2xvcihhdXRvTW9kZVRpcHMsJyNmZjcwMDAnKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTondGV4dF8yJyxcXG4gICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoTXlKaWV4aSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgTXlKaWV4aS5hdXRvTW9kZSA9IE15SmlleGkuYXV0b01vZGU9PT0n6YCf5bqm5LyY5YWIJz8n6aG65bqP5LyY5YWIJzon6YCf5bqm5LyY5YWIJztcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lorr7nva7lpIfog47lrqDlubjmlrnmoYjkuLo6JytNeUppZXhpLmF1dG9Nb2RlXFxuICAgICAgICAgICAgfSxNeUppZXhpLGp4c1JvdXRlKVxcbiAgICAgICAgfSk7XFxuXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOmNvbG9yKFxcXCLmgaLlpI3lh7rljoLorr7nva5cXFwiLCcjZmY3MDAwJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMicsXFxuICAgICAgICAgICAgdXJsOiQoXFxcIuWmguaenOS9oOeahOino+aekOeuoeeQhuaXoOazleato+W4uOeUqOS6hu+8jOatpOaWueazleWPr+S7peaVkeeglu+8jOehruiupOaBouWkjT9cXFwiKS5jb25maXJtKChqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgbGV0IGluaXRTZXQgPSB7J25vdyc6XFxcIumBk+mVv+aOqOiNkFxcXCIsJ2ppZXhpcyc6W3tuYW1lOifpgZPplb/mjqjojZAnLHF5Olsn5L2g54i556eR5oqAJ10seWs6WyfpoobphbcnXSx0eDpbJ+iNo+iAgCddLG1nOlsn6JqC6JqB5YWE5byfJ10sYmw6WydPS+ino+aekCddLHNoOlsn5rGf5rmWRCddLHhnOlsn5rGf5rmWRCddLGFsOlsn5rGf5rmWRCddLHBwOlsn5Lq65Lq66L+3J10sbWk6WycxMDgwJ10sbGU6Wyfov6rlpaXll4XmjqInXSxmdW46Wyfono3lhbQnXSxvbmU6WycxMDgwJ10sfV19O1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoaW5pdFNldCkpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aWreaPkuino+aekOmFjee9ruW3sumHjee9ruS4uuWHuuWOguiuvue9ridcXG4gICAgICAgICAgICB9LGp4c1JvdXRlKVxcbiAgICAgICAgfSk7XFxuXFxuICAgICAgICBsZXQgY2FjaGVWaWRlb1N3aXRjaCA9IGdldFZhcignZHAuY2FjaGVWaWRlbycsJ3RydWUnKT09PSd0cnVlJz8n5byAJzon5YWzJztcXG4gICAgICAgIGxldCBqeFRpbWVvdXQgPSBnZXRWYXIoJ2RwLmp4VGltZW91dCcsJzcwMDAnKTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6c21hbGwoJ+Wkmue6v+i3r+e8k+WtmDonKStjb2xvcihjYWNoZVZpZGVvU3dpdGNoLCcjZmY3MDAwJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMicsXFxuICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGNhY2hlVmlkZW9Td2l0Y2gpPT57XFxuICAgICAgICAgICAgICAgIGlmKGNhY2hlVmlkZW9Td2l0Y2g9PT0n5byAJyl7XFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2RwLmNhY2hlVmlkZW8nLCdmYWxzZScpO1xcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcignZHAuY2FjaGVWaWRlbycsJ3RydWUnKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0sY2FjaGVWaWRlb1N3aXRjaClcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTpzbWFsbCgn5YWo5bGA6Kej5p6Q6LaF5pe2OicpK2NvbG9yKGp4VGltZW91dCwnI2ZmNzAwMCcpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0XzInLFxcbiAgICAgICAgICAgIHVybDokKGp4VGltZW91dCwn6K+36K6+572u6a2U5pat6Kej5p6Q6LaF5pe2LOW/hemhu+S4uuaVtOaVsCcpLmlucHV0KCgpPT57XFxuICAgICAgICAgICAgICAgIGlmKCFwYXJzZUludChpbnB1dCkpe1xcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQgPSA3MDAwO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHB1dFZhcignZHAuanhUaW1lb3V0JyxpbnB1dCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6K6+572u5Li6OicrcGFyc2VJbnQoaW5wdXQpXFxuICAgICAgICAgICAgfSxqeFRpbWVvdXQpXFxuICAgICAgICB9KTtcXG5cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfmiZPlvIDnvJbovpHop6PmnpDmlofku7YnLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoanhzUm91dGUpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdlZGl0RmlsZTovLycranhzUm91dGU7XFxuICAgICAgICAgICAgfSxqeHNSb3V0ZSksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgfSk7XFxuXFxuICAgICAgICBmb3IobGV0IGkgaW4gTXlKaWV4aS5qaWV4aXMpe1xcbiAgICAgICAgICAgIGxldCBub3dKeCA9IE15SmlleGkuamlleGlzW2ldO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOk15SmlleGkubm93PT09bm93SngubmFtZT8n8J+RiScrbm93SngubmFtZTpub3dKeC5uYW1lLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTonZmxleF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICAgICAgICBub3dKeDpub3dKeCxcXG4gICAgICAgICAgICAgICAgICAgIE15SmlleGk6TXlKaWV4aSxcXG4gICAgICAgICAgICAgICAgICAgIGp4c1JvdXRlOmp4c1JvdXRlXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChub3dKeCxNeUppZXhpLGksanhzUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9uID0gZ2V0VmFyKCdkbi5qeG1fb3B0aW9uJywn6YCJ5oupJyk7XFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbil7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5a+85Ye6JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5vd0p4Q29kZSA9IGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeShub3dKeCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gc2hhcmVQYXN0ZShub3dKeENvZGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9ICfprZTmlq3op6PmnpDphY3nva5AJytub3dKeC5uYW1lKydAJyt1cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkoY29kZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Llr7zlh7rkuLrkupHlj6Pku6TlubblpI3liLbliLDliarliIfmnb8nXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5L+u5pS5JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYobm93SngubmFtZT09PU15SmlleGkubm93KXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiAndG9hc3Q6Ly/mraTop6PmnpDphY3nva7lvZPliY3mraPlnKjkvb/nlKjkuK3vvIzkuI3lhYHorrjkv67mlLkhJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9qeEVkaXQ/cnVsZT1NeUZpZWxk4bSw4oG/J1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL2p4RWRpdD9ydWxlPU15RmllbGThtLDigb8nXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5Yig6ZmkJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ+ehruiupOWIoOmZpOino+aekOmFjee9rjonK25vd0p4Lm5hbWUrJz8nKS5jb25maXJtKChub3dKeCxNeUppZXhpLGksanhzUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihub3dKeC5uYW1lPT09TXlKaWV4aS5ub3cpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mraTop6PmnpDphY3nva7lvZPliY3mraPlnKjkvb/nlKjkuK3vvIzkuI3lhYHorrjliKDpmaQhJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXMuc3BsaWNlKGksMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5Yig6ZmkJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LG5vd0p4LE15SmlleGksaSxqeHNSb3V0ZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLm5vdz1ub3dKeC5uYW1lO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S9oOmAieaLqeS6hicrbm93SngubmFtZSsn5L2c5Li65b2T5YmN6Kej5p6Q6YWN572uJztcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSxub3dKeCxNeUppZXhpLGksanhzUm91dGUpLFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICB9XFxuJC5leHBvcnRzLmp4TWFuYWdlPWp4TWFuYWdlO1wifSx7XCJuYW1lXCI6XCLop6PmnpDnvJbovpFcIixcInBhdGhcIjpcImp4RWRpdFwiLFwicnVsZVwiOlwianM6XFxuICAgIGxldCB7bm93SngsTXlKaWV4aSxqeHNSb3V0ZX0gPSBNWV9QQVJBTVM7XFxubGV0IG5vd0p4VCA9IEpTT04ucGFyc2UoZ2V0VmFyKCdkbi5ub3dKeCcpfHwne30nKTtcXG5ub3dKeCA9IG5vd0p4VC5uYW1lP25vd0p4VDpub3dKeDtcXG5hZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCk9PntcXG4gICAgY2xlYXJWYXIoXFxcImRuLmp4X3RpdGxlc1xcXCIpO1xcbiAgICBjbGVhclZhcihcXFwiZG4ubm93SnhcXFwiKTtcXG4gICAgY2xlYXJWYXIoXFxcImRuLmp4bV9uYW1lXFxcIik7XFxufSkpO1xcbmxldCBpZCA9IG51bGw7XFxuZm9yKGxldCBqIGluIE15SmlleGkuamlleGlzKXtcXG4gICAgaWYoTXlKaWV4aS5qaWV4aXNbal0ubmFtZSA9PT0gbm93SngubmFtZSl7XFxuICAgICAgICBpZCA9IGo7XFxuICAgICAgICBicmVhaztcXG4gICAgfVxcbn1cXG5sZXQgZCA9IFtdO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn6YWN572u5ZCN56ewJyxcXG4gICAgZGVzYzogXFxcIuino+aekOmFjee9ruWQjeensCzlpoLpgZPplb/mjqjojZBcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgb25DaGFuZ2U6IFxcXCJwdXRWYXIoJ2RuLmp4bV9uYW1lJyxpbnB1dClcXFwiLFxcbiAgICAgICAgdGl0bGVWaXNpYmxlOiB0cnVlLFxcbiAgICAgICAgZGVmYXVsdFZhbHVlOmdldFZhcignZG4uanhtX25hbWUnLCcnKXx8bm93SngubmFtZVxcbiAgICB9LFxcbiAgICBjb2xfdHlwZTonaW5wdXQnXFxufSk7XFxuLy8gbGV0IG9wdGlvbnMgPSBbJ+mAieaLqScsJ+aWsOWinicsJ+WIoOmZpCcsJ+aJuemHj+WIoOmZpCcsJ+enu+WKqCddO1xcbmxldCBvcHRpb25zID0gWyfmlrDlop4nLCfliKDpmaQnLCfnp7vliqgnXTtcXG5cXG5mb3IobGV0IGkgaW4gb3B0aW9ucyl7XFxuICAgIGxldCBvcHRpb24gPSBvcHRpb25zW2ldO1xcbiAgICBsZXQgZmxhZyA9IGdldFZhcignZG4uanhtX3dyaXRlTW9kZScsJ+aWsOWinicpPT09b3B0aW9uPyfwn5GJJzonJztcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOmZsYWcrb3B0aW9uLFxcbiAgICAgICAgLy8gY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgY29sX3R5cGU6J2ZsZXhfYnV0dG9uJyxcXG4gICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChvcHRpb24pPT57XFxuICAgICAgICAgICAgcHV0VmFyKCdkbi5qeG1fd3JpdGVNb2RlJywgb3B0aW9uKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgfSxvcHRpb24pLFxcbiAgICB9KTtcXG59XFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6J2xpbmUnXFxufSk7XFxuLy/ojrflj5bmlq3mj5LliJfooahcXG5pZighZ2V0VmFyKFxcXCJkbi5qeF90aXRsZXNcXFwiKSl7XFxuICAgIGxldCB0aXRsZUFyciA9IFtdLCB1cmxBcnIgPSBbXTtcXG4gICAgdmFyIGpzb249e3RpdGxlOltdLGNvZGVzOnt9fTtcXG4gICAgbGV0IHNldEZpbGUgPSByZXF1ZXN0KCdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicpO1xcbiAgICB0cnkge1xcbiAgICAgICAgZXZhbCgnanNvbj0nK3NldEZpbGUpO1xcbiAgICB9Y2F0Y2ggKGUpIHtcXG4gICAgICAgIGxvZygnSnNvbuino+aekOWPkeeUn+S6humUmeivrzonK2UubWVzc2FnZSk7XFxuICAgIH1cXG4gICAgdGl0bGVBcnIgPSBqc29uLnRpdGxlO1xcbiAgICB0aXRsZUFyci5mb3JFYWNoKChpdCkgPT4ge1xcbiAgICAgICAgdXJsQXJyLnB1c2goanNvbi5jb2Rlc1tpdF0pO1xcbiAgICB9KTtcXG4gICAgcHV0VmFyKCdkbi5qeF90aXRsZXMnLEpTT04uc3RyaW5naWZ5KHRpdGxlQXJyKSk7XFxufVxcblxcbmxldCB0aXRsZXMgPSBKU09OLnBhcnNlKGdldFZhcignZG4uanhfdGl0bGVzJyl8fCdbXScpO1xcbmxldCB0aXRsZURpYyA9IHtcXG4gICAgYWw6J+mYv+mHjCcsYmw6J+WTlOWTqeWTlOWTqScsZnVuOifpo47ooYwnLGxlOifkuZDop4YnLG1nOifoipLmnpwnLG1pOiflkqrlkpUnLHBwOidQUFRWJyxxeTon54ix5aWH6Im6JyxzaDon5pCc54uQJyxcXG4gICAgdHg6J+iFvuiurycseGc6J+ilv+eTnCcseWs6J+S8mOmFtycsb25lOicxOTA1JyxvdGg6J+WFtuS7lidcXG59XFxuXFxubGV0IHRpdGxlT3JkZXIgPSB7YWw6OCxibDo1LGZ1bjoxMyxsZToxMSxtZzo0LG1pOjEwLHBwOjkscXk6MSxzaDo2LFxcbiAgICB0eDozLHhnOjcseWs6MixvbmU6MTIsb3RoOjEzfTtcXG5cXG5mdW5jdGlvbiBjb21wYXJlT2QodGl0bGVPcmRlcil7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoYSwgYil7XFxuICAgICAgICBsZXQgeCA9IHRpdGxlT3JkZXJbYV07XFxuICAgICAgICBsZXQgeSA9IHRpdGxlT3JkZXJbYl07XFxuICAgICAgICByZXR1cm4geC15O1xcbiAgICB9XFxufVxcbi8vLS0tLS0tLS0tLS0tLS0tLS1cXG4vLyBsZXQgamRzID0gT2JqZWN0LmtleXMobm93SngpLmZpbHRlcihpdD0+aXQhPT0nbmFtZScmJml0IT09J290aCcpO1xcbmxldCBqZHMgPSBPYmplY3Qua2V5cyhub3dKeCkuZmlsdGVyKGl0PT5pdCE9PSduYW1lJyk7XFxuLy9sb2coamRzKTtcXG5mb3IobGV0IGsgb2YgT2JqZWN0LmtleXModGl0bGVPcmRlcikpe1xcbiAgICBpZighamRzLmluY2x1ZGVzKGspKXtcXG4gICAgICAgIGpkcy5wdXNoKGspXFxuICAgIH1cXG59XFxuamRzID0gamRzLnNvcnQoY29tcGFyZU9kKHRpdGxlT3JkZXIpKTtcXG5mb3IobGV0IGogaW4gamRzKXtcXG4gICAgbGV0IGp4cyA9IG5vd0p4W2pkc1tqXV18fFtdO1xcbiAgICBsZXQgdGl0bGUgPSBqZHNbal07XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTp0aXRsZURpY1t0aXRsZV18fHRpdGxlLFxcbiAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHRpdGxlcyx0aXRsZSxqeHMsanhzUm91dGUsTXlKaWV4aSxub3dKeCk9PntcXG4gICAgICAgICAgICB2YXIganNvbj17dGl0bGU6W10sY29kZXM6e319O1xcbiAgICAgICAgICAgIGxldCBzZXRGaWxlID0gcmVxdWVzdCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nKTtcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICBldmFsKCdqc29uPScrc2V0RmlsZSk7XFxuICAgICAgICAgICAgfWNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIGxvZygnSnNvbuino+aekOWPkeeUn+S6humUmeivrzonK2UubWVzc2FnZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmKGdldFZhcignZG4uanhtX3dyaXRlTW9kZScsJ+aWsOWinicpPT09J+aWsOWinicpe1xcbiAgICAgICAgICAgICAgICBsZXQgc2VsX3RpdGxlID0gdGl0bGVzLmZpbHRlcihpdD0+IWp4cy5pbmNsdWRlcyhpdCkpO1xcbiAgICAgICAgICAgICAgICBzZWxfdGl0bGUgPSBzZWxfdGl0bGUubWFwKChpdCk9PntcXG4gICAgICAgICAgICAgICAgICAgIGxldCBmbGFnID0gJ+KAmOKAmOKTiuKAmeKAmSc7XFxuICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YoanNvbi5jb2Rlc1tpdF0pPT09J2Z1bmN0aW9uJyl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyA9ICfigJzigJzikr/igJ3igJ0nO1xcbiAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYodHlwZW9mKGpzb24uY29kZXNbaXRdKT09PSd1bmRlZmluZWQnKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFnID0gJyc7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmxhZytpdFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoc2VsX3RpdGxlLDIpLnNlbGVjdCgoTXlKaWV4aSxqeHMsbm93SngsdGl0bGUsanhzUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoL+KAmOKAmOKTiuKAmeKAmXzigJzigJzikr/igJ3igJ0vZywnJyk7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaWQgPSBudWxsO1xcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBqIGluIE15SmlleGkuamlleGlzKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihNeUppZXhpLmppZXhpc1tqXS5uYW1lID09PSBub3dKeC5uYW1lKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBqO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBpZighaWQpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ntKLlvJXplJnor6/ml6Dms5Xkv53lrZg6XFxcXG4nK2lkXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBqeHMucHVzaChpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICBsb2coanhzKTtcXG4gICAgICAgICAgICAgICAgICAgIG5vd0p4W3RpdGxlXSA9IGp4cztcXG4gICAgICAgICAgICAgICAgICAgIE15SmlleGkuamlleGlzW2lkXSA9IG5vd0p4O1xcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdkbi5ub3dKeCcsSlNPTi5zdHJpbmdpZnkobm93SngpKTtcXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgfSxNeUppZXhpLGp4cyxub3dKeCx0aXRsZSxqeHNSb3V0ZSk7XFxuICAgICAgICAgICAgfWVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSx0aXRsZXMsdGl0bGUsanhzLGp4c1JvdXRlLE15SmlleGksbm93SngpXFxuICAgIH0pO1xcbiAgICBmb3IobGV0IGsgaW4ganhzKXtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6anhzW2tdLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodGl0bGVzLHRpdGxlLGp4cyxqeHNSb3V0ZSxNeUppZXhpLG5vd0p4LG5qeCxpZCxrLG1heCk9PntcXG4gICAgICAgICAgICAgICAgc3dpdGNoIChnZXRWYXIoJ2RuLmp4bV93cml0ZU1vZGUnLCfmlrDlop4nKSl7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfliKDpmaQnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbih2YWwpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5pbmRleE9mKHZhbCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwbGljZShpbmRleCwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGp4cy5yZW1vdmUobmp4KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBub3dKeFt0aXRsZV0gPSBqeHM7XFxuICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdID0gbm93Sng7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdkbi5ub3dKeCcsSlNPTi5zdHJpbmdpZnkobm93SngpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+enu+WKqCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoaywn56e75Yqo5Yiw57Si5byV5aSa5bCRPycpLmlucHV0KChrLG1heCxqeHMsbm93SngsTXlKaWV4aSxpZCx0aXRsZSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gTW92ZShhcnIsIGZyb21JbmRleCwgdG9JbmRleCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBhcnJbZnJvbUluZGV4XTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoZnJvbUluZGV4LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5zcGxpY2UodG9JbmRleCwgMCwgZWxlbWVudCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocGFyc2VJbnQoaW5wdXQpPT09ayl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ZWl5Lmf5rKh5YGaJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihwYXJzZUludChpbnB1dCk+bWF4LTF8fHBhcnNlSW50KGlucHV0KTwtMSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g5pyA5aSn56e75Yqo6IyD5Zu0MC0nK3BhcnNlSW50KG1heC0xKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZXQgbmV3QXIgPSBqeHMuc3BsaWNlKGssIDEpOyAvLyDliKDmjolcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ganhzLnVuc2hpZnQobmV3QXJbMF0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlKGp4cyxrLHBhcnNlSW50KGlucHV0KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vd0p4W3RpdGxlXSA9IGp4cztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdID0gbm93Sng7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcignZG4ubm93SngnLEpTT04uc3RyaW5naWZ5KG5vd0p4KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxrLG1heCxqeHMsbm93SngsTXlKaWV4aSxpZCx0aXRsZSxqeHNSb3V0ZSlcXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+atpOWFg+e0oOS4jeaUr+aMgei/m+ihjDonK2dldFZhcignZG4uanhtX3dyaXRlTW9kZScsJ+aWsOWinicpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LHRpdGxlcyx0aXRsZSxqeHMsanhzUm91dGUsTXlKaWV4aSxub3dKeCxqeHNba10saWQsayxqeHMubGVuZ3RoKVxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOidsaW5lJ1xcbiAgICB9KVxcbn1cXG5cXG5kLnB1c2goe1xcbiAgICB0aXRsZTon5L+d5a2YJyxcXG4gICAgY29sX3R5cGU6J3RleHRfY2VudGVyXzEnLFxcbiAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoTXlKaWV4aSxpZCxqeHNSb3V0ZSk9PntcXG4gICAgICAgIGlmKGdldFZhcignZG4uanhtX25hbWUnLCcnKSE9PU15SmlleGkuamlleGlzW2lkXS5uYW1lKXtcXG4gICAgICAgICAgICBpZkhhcyA9IE15SmlleGkuamlleGlzLmZpbHRlcihpdD0+aXQubmFtZT09PWdldFZhcignZG4uanhtX25hbWUnLCcnKSkubGVuZ3RoPjA7XFxuICAgICAgICAgICAgaWYoaWZIYXMpe1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5b6F5L+u5pS555qE5ZCN56ew6YeN5aSNLOS4jeWFgeiuuOS/neWtmCdcXG4gICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdLm5hbWUgPSAgZ2V0VmFyKCdkbi5qeG1fbmFtZScsJycpO1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIGJhY2sodHJ1ZSk7XFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5L+d5a2YJ1xcbiAgICB9LE15SmlleGksaWQsanhzUm91dGUpXFxufSk7XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJuYW1lXCI6XCLlsI/nmb3mqKHlvI9cIixcInBhdGhcIjpcInNtYWxsV2hpdGVcIixcInJ1bGVcIjpcImpzOlxcbnNldFBhZ2VUaXRsZSgn6YGT6ZW/57uZ5bCP55m955qE5YWz54ixJyk7XFxuY29uc3Qge2NvbG9yLCBzbWFsbCxhcGl9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5P3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcIik7XFxubGV0IGZpbGVSb290ID0gYXBpLmhvc3QrJy9oaWtlcnVsZS96eXdfZGF0YS8nO1xcbi8vIGxvZyhmaWxlUm9vdCk7XFxubGV0IGQgPSBbXTtcXG52YXIgdGhlbWVSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015VGhlbWUuanNvblxcXCI7XFxudmFyIHRoZW1lT25saW5lID0gZmlsZVJvb3QrJzExJztcXG52YXIgb2xkUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFwiO1xcbnZhciBvbGRPbmxpbmUgPSBmaWxlUm9vdCsnMTInO1xcbnZhciBuZXdSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvblxcXCI7XFxudmFyIG5ld09ubGluZSA9IGZpbGVSb290KycxMyc7XFxudmFyIGp4c1JvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlKaWV4aS5qc29uXFxcIjtcXG52YXIganhPbmxpbmUgPSBmaWxlUm9vdCsnMTQnO1xcbnZhciBjamNhY2hlID0gJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnO1xcbnZhciB4NWNhY2hlID0gJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uaHRtbCc7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6c21hbGwoJ+S9oOWlvSzlsI/nmb0s5Y2z5L2/5ZWl5Lmf5LiN5LyaLOS5n+WPr+S7peeci+aYjueZveS4i+mdoueahOWtl+WQpz8nKSxcXG4gICAgZGVzYzon5aaC5p6c6L+Y5piv5LiN5LyaLOivt+WIoOS7peawuOayuyzlkYrovp7kuI3osKInLFxcbiAgICBjb2xfdHlwZTondGV4dF8xJyxcXG4gICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCk9PntcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/mja7or7TkvaDkuI3mnI3msJQs5LiN5om/6K6k6Ieq5bex5piv5bCP55m9P1xcXFxu54K55oiR5Y+q5piv5Li65LqG5a6j5rOE5LiA5LiL5L2g55qE5oSk5oCSP+WVpeS5n+WIq+ivtOS6hizkuIvljrvmkJ4hJ1xcbiAgICB9KVxcbn0pO1xcbmQucHVzaCh7XFxuICAgdGl0bGU6c21hbGwoJ+WNlemhueino+aekOmAieaLqeeVjOmdouS4u+mimOaYr+S7gOS5iD8nKStjb2xvcign5LiN55+l6YGTLOadpeS4gOS7vemBk+mVv+eahCcsJyM1RkI4NzgnKSxcXG4gICAgZGVzYzon6Ieq5Yqo5ouJ5Y+W6YGT6ZW/55qE5Li76aKY6YWN572u5Lul5Y+K572R6aG15o+S5Lu25ZKM6Z2Z5oCB6aG16Z2iJyxcXG4gICBjb2xfdHlwZTondGV4dF8xJyxcXG4gICB1cmw6JCgn56Gu6K6k5ZCXP+WmguaenOS9oOS4jeaYr+Wwj+eZve+8jOaAu+ivpeS8muaPkOWJjeWkh+S7veiHquW3seS4u+mimOeahOWQpyFcXFxcbicrdGhlbWVSb3V0ZSkuY29uZmlybSgoY2pjYWNoZSx4NWNhY2hlLHRoZW1lUm91dGUsdGhlbWVPbmxpbmUpPT57XFxuICAgICAgIGxldCB0aGVtZUNvZGUgPSBmZXRjaCh0aGVtZU9ubGluZSk7XFxuICAgICAgIGlmKCEvbm93X3RoZW1lLy50ZXN0KHRoZW1lQ29kZSkpe1xcbiAgICAgICAgICAgbG9nKHRoZW1lQ29kZSk7XFxuICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5aSx6LSlIeS4jumBk+mVv+acjeWKoeWZqOmAmuiur+mUmeivryzkvLDorqHmmK/nvZHnu5zljaHkuoYnXFxuICAgICAgIH1cXG4gICAgICAgbGV0IGNqRnJvbSA9IFxcXCJoaWtlcjovL3BhZ2UvUGFyc2VfRG4uanM/cnVsZT1NeUZpZWxk4bSw4oG/XFxcIjtcXG4gICAgICAgbGV0IHg1RnJvbSA9IFxcXCJoaWtlcjovL3BhZ2UvUGFyc2VfRG4uaHRtbD9ydWxlPU15RmllbGThtLDigb9cXFwiO1xcbiAgICAgICB0cnkge1xcbiAgICAgICAgICAgbGV0IGNqRmlsZSA9IEpTT04ucGFyc2UoZmV0Y2goY2pGcm9tKSkucnVsZTtcXG4gICAgICAgICAgIGxldCB4NUZpbGUgPSBKU09OLnBhcnNlKGZldGNoKHg1RnJvbSkpLnJ1bGU7XFxuICAgICAgICAgICB3cml0ZUZpbGUoY2pjYWNoZSwgY2pGaWxlKTtcXG4gICAgICAgICAgIHdyaXRlRmlsZSh4NWNhY2hlLCB4NUZpbGUpO1xcbiAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsIHRoZW1lQ29kZSk7XFxuICAgICAgICAgICBjbGVhclZhcihcXFwianhPbGRWXFxcIik7XFxuICAgICAgICAgICBjbGVhclZhcihcXFwianhOZXdWXFxcIik7XFxuICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5Li76aKY5bey5oiQ5Yqf5bqU55SoJ1xcbiAgICAgICB9XFxuICAgICAgIGNhdGNoKGUpe1xcbiAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S4u+mimOW6lOeUqOWksei0pVxcXFxu5pyq5pyf5pyb55qE6ZSZ6K+vOicrZS5tZXNzYWdlO1xcbiAgICAgICB9XFxuICAgfSxjamNhY2hlLHg1Y2FjaGUsdGhlbWVSb3V0ZSx0aGVtZU9ubGluZSlcXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTpzbWFsbCgn5pat5o+S6Kej5p6Q5Y+K6buY6K6k5YiX6KGo5piv5LuA5LmIPycpK2NvbG9yKCfkuI3nn6XpgZMs5p2l5LiA5Lu96YGT6ZW/55qEJywnIzVGQjg3OCcpLFxcbiAgICBkZXNjOifoh6rliqjmi4nlj5bpgZPplb/lnKjnlKjnmoTkuKTkuKpNeVBhcnNlLmpzb27mlofku7YnLFxcbiAgICBjb2xfdHlwZTondGV4dF8xJyxcXG4gICAgdXJsOiQoJ+ehruiupOWQlz/lpoLmnpzkvaDkuI3mmK/lsI/nmb3vvIzmgLvor6XkvJrmj5DliY3lpIfku73oh6rlt7HnmoTphY3nva7mlofku7blkKchXFxcXG4nK29sZFJvdXRlKydcXFxcbicrbmV3Um91dGUpLmNvbmZpcm0oKG9sZFJvdXRlLG9sZE9ubGluZSxuZXdSb3V0ZSxuZXdPbmxpbmUpPT57XFxuICAgICAgICBsZXQgb2xkQ29kZSA9IGZldGNoKG9sZE9ubGluZSk7XFxuICAgICAgICBsZXQgbmV3Q29kZSA9IGZldGNoKG5ld09ubGluZSk7XFxuICAgICAgICBpZighL1BhcnNlX0RuXFxcXC5qcy8udGVzdChvbGRDb2RlKXx8IS9QYXJzZV9EblxcXFwuanMvLnRlc3QobmV3Q29kZSkpe1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lpLHotKUh5LiO6YGT6ZW/5pyN5Yqh5Zmo6YCa6K6v6ZSZ6K+vLOS8sOiuoeaYr+e9kee7nOWNoeS6hidcXG4gICAgICAgIH1cXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgd3JpdGVGaWxlKG9sZFJvdXRlLCBvbGRDb2RlKTtcXG4gICAgICAgICAgICB3cml0ZUZpbGUobmV3Um91dGUsIG5ld0NvZGUpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlq3mj5Lop6PmnpDphY3nva7lj4rpu5jorqTliJfooajlt7Lnu4/phY3nva7miJDlip8nXFxuICAgICAgICB9XFxuICAgICAgICBjYXRjaChlKXtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6YWN572u5bqU55So5aSx6LSlXFxcXG7mnKrmnJ/mnJvnmoTplJnor686JytlLm1lc3NhZ2U7XFxuICAgICAgICB9XFxuICAgIH0sb2xkUm91dGUsb2xkT25saW5lLG5ld1JvdXRlLG5ld09ubGluZSlcXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTpzbWFsbCgn5pat5o+S6Kej5p6Q6Ieq5Yqo5qGj5qih5byP5piv5LuA5LmIPycpK2NvbG9yKCfkuI3nn6XpgZMs5p2l5LiA5Lu96YGT6ZW/55qEJywnIzVGQjg3OCcpLFxcbiAgICBkZXNjOifoh6rliqjmi4nlj5bpgZPplb/lnKjnlKjnmoRNeUppZXhpLmpzb27mlofku7YnLFxcbiAgICBjb2xfdHlwZTondGV4dF8xJyxcXG4gICAgdXJsOiQoJ+ehruiupOWQlz/lpoLmnpzkvaDkuI3mmK/lsI/nmb3vvIzmgLvor6XkvJrmj5DliY3lpIfku73oh6rlt7HnmoToh6rliqjmoaPmlrnmoYjlkKchXFxcXG4nK2p4c1JvdXRlKS5jb25maXJtKChqeHNSb3V0ZSxqeE9ubGluZSk9PntcXG4gICAgICAgIGxldCBqeENvZGUgPSBmZXRjaChqeE9ubGluZSk7XFxuICAgICAgICBpZighL2ppZXhpcy8udGVzdChqeENvZGUpKXtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5aSx6LSlIeS4jumBk+mVv+acjeWKoeWZqOmAmuiur+mUmeivryzkvLDorqHmmK/nvZHnu5zljaHkuoYnXFxuICAgICAgICB9XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSwganhDb2RlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S6Kej5p6Q6YWN572u5Y+K6buY6K6k5YiX6KGo5bey57uP6YWN572u5oiQ5YqfJ1xcbiAgICAgICAgfVxcbiAgICAgICAgY2F0Y2goZSl7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+iHquWKqOaho+W6lOeUqOWksei0pVxcXFxu5pyq5pyf5pyb55qE6ZSZ6K+vOicrZS5tZXNzYWdlO1xcbiAgICAgICAgfVxcbiAgICB9LGp4c1JvdXRlLGp4T25saW5lKVxcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOnNtYWxsKCfnnJ/nmoTllaXkuZ/kuI3kvJrkuoYs6L+Y5oeS5b6X5LiA5Liq5Liq54K5PycpK2NvbG9yKCfkuI3nn6XpgZMs5p2l5LiA5Lu96YGT6ZW/55qEJywnIzVGQjg3OCcpLFxcbiAgICBkZXNjOifoh6rliqjmi4nlj5bpgZPplb/lnKjnlKjnmoTkuIrov7DmiYDmnInmlofku7ZcXFxcbuS4gOmUruaQnuWujOebtOaOpeWOu+aUr+aMgeaWreaPkueahOWwj+eoi+W6j+eci+inhumikeWwseihjOWVpicsXFxuICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcbiAgICB1cmw6JCgn5L+u5LuZ5rOV5Yqb5peg6L65Jywn56Gu6K6k5ZCXP+WmguaenOS9oOS4jeaYr+Wwj+eZve+8jOaAu+ivpeS8muaPkOWJjeWkh+S7veiHquW3seeahOS4iui/sOaJgOacieaWh+S7tuWQpyFcXFxcbuivt+i+k+WFpemBk+mVv+S/ruS7meazleWKm+aXoOi+ueadpeehruiupOaJp+ihjOatpOaTjeS9nCcpLmlucHV0KChjamNhY2hlLHg1Y2FjaGUsdGhlbWVSb3V0ZSxvbGRSb3V0ZSxuZXdSb3V0ZSxqeHNSb3V0ZSx0aGVtZU9ubGluZSxvbGRPbmxpbmUsbmV3T25saW5lLGp4T25saW5lKT0+e1xcbiAgICAgICAgaWYoaW5wdXQhPT0n6YGT6ZW/5L+u5LuZ5rOV5Yqb5peg6L65Jyl7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+acrOasoeWPlua2iOaJp+ihjCdcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCB0aGVtZUNvZGUgPSBmZXRjaCh0aGVtZU9ubGluZSk7XFxuICAgICAgICBpZighL25vd190aGVtZS8udGVzdCh0aGVtZUNvZGUpKXtcXG4gICAgICAgICAgICBsb2coJ3RoZW1lQ29kZTonK3RoZW1lQ29kZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aLieS4u+mimOWksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IGNqRnJvbSA9IFxcXCJoaWtlcjovL3BhZ2UvUGFyc2VfRG4uanM/cnVsZT1NeUZpZWxk4bSw4oG/XFxcIjtcXG4gICAgICAgIGxldCB4NUZyb20gPSBcXFwiaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmh0bWw/cnVsZT1NeUZpZWxk4bSw4oG/XFxcIjtcXG4gICAgICAgIGxldCBjakZpbGUgPSBKU09OLnBhcnNlKGZldGNoKGNqRnJvbSkpLnJ1bGU7XFxuICAgICAgICBsZXQgeDVGaWxlID0gSlNPTi5wYXJzZShmZXRjaCh4NUZyb20pKS5ydWxlO1xcbiAgICAgICAgbGV0IG9sZENvZGUgPSBmZXRjaChvbGRPbmxpbmUpO1xcbiAgICAgICAgbGV0IG5ld0NvZGUgPSBmZXRjaChuZXdPbmxpbmUpO1xcbiAgICAgICAgaWYoIS9QYXJzZV9EblxcXFwuanMvLnRlc3Qob2xkQ29kZSl8fCEvUGFyc2VfRG5cXFxcLmpzLy50ZXN0KG5ld0NvZGUpKXtcXG4gICAgICAgICAgICAvLyBsb2coJ29sZENvZGU6JytvbGRDb2RlKTtcXG4gICAgICAgICAgICAvLyBsb2coJ25ld0NvZGU6JytuZXdDb2RlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5aSx6LSlIeS4jumBk+mVv+acjeWKoeWZqOmAmuiur+mUmeivryzkvLDorqHmmK/nvZHnu5zljaHkuoYnXFxuICAgICAgICB9XFxuICAgICAgICBsZXQganhDb2RlID0gZmV0Y2goanhPbmxpbmUpO1xcbiAgICAgICAgaWYoIS9qaWV4aXMvLnRlc3QoanhDb2RlKSl7XFxuICAgICAgICAgICAgLy8gbG9nKCdqeENvZGU6JytqeENvZGUpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lpLHotKUh5LiO6YGT6ZW/5pyN5Yqh5Zmo6YCa6K6v6ZSZ6K+vLOS8sOiuoeaYr+e9kee7nOWNoeS6hidcXG4gICAgICAgIH1cXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgd3JpdGVGaWxlKGNqY2FjaGUsIGNqRmlsZSk7IC8vIOaLieaPkuS7tlxcbiAgICAgICAgICAgIHdyaXRlRmlsZSh4NWNhY2hlLCB4NUZpbGUpOyAvL+aLiee9kemhteaWh+S7tlxcbiAgICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLCB0aGVtZUNvZGUpOyAvL+aLieS4u+mimOaWh+S7tlxcbiAgICAgICAgICAgIGNsZWFyVmFyKFxcXCJqeE9sZFZcXFwiKTtcXG4gICAgICAgICAgICBjbGVhclZhcihcXFwianhOZXdWXFxcIik7XFxuICAgICAgICAgICAgd3JpdGVGaWxlKG9sZFJvdXRlLCBvbGRDb2RlKTsgLy/mi4nmlq3mj5Lpu5jorqTpgInmi6nnlYzpnaLnmoTphY3nva5cXG4gICAgICAgICAgICB3cml0ZUZpbGUobmV3Um91dGUsIG5ld0NvZGUpOyAvL+aLieaWreaPkuWGheeahOino+aekFxcbiAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSwganhDb2RlKTsgLy8g5ouJ6Ieq5Yqo5qGj5paH5Lu2XFxuICAgICAgICAgICAgYmFjayh0cnVlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S6Kej5p6Q6YWN572u5Y+K6buY6K6k5YiX6KGo5bey57uP6YWN572u5oiQ5YqfJ1xcbiAgICAgICAgfVxcbiAgICAgICAgY2F0Y2goZSl7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S4gOmUruaooeW8j+W6lOeUqOWksei0pVxcXFxu5pyq5pyf5pyb55qE6ZSZ6K+vOicrZS5tZXNzYWdlO1xcbiAgICAgICAgfVxcbiAgICB9LGNqY2FjaGUseDVjYWNoZSx0aGVtZVJvdXRlLG9sZFJvdXRlLG5ld1JvdXRlLGp4c1JvdXRlLHRoZW1lT25saW5lLG9sZE9ubGluZSxuZXdPbmxpbmUsanhPbmxpbmUpXFxufSk7XFxubGV0IGRlc2NJbmZvID0gJ+S4u+mimOaWh+S7tjonK3RoZW1lUm91dGUrJ1xcXFxu5Li755WM6Z2i6YWN572uOicrb2xkUm91dGUrJ1xcXFxu5auW5Yiw55qE6Kej5p6QOicrbmV3Um91dGUrJ1xcXFxu6Ieq5Yqo5qGj6Kej5p6QOicranhzUm91dGU7XFxuZGVzY0luZm8rPSdcXFxcbuS4u+aPkuS7tjonK2NqY2FjaGUrJ1xcXFxu5Li76YWN572u6YCJ5oup55WM6Z2i5paH5Lu2OicreDVjYWNoZTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTon5paH5Lu25o+P6L+wOlxcXFxuJytkZXNjSW5mbyxcXG4gICAgY29sX3R5cGU6J2xvbmdfdGV4dCcsXFxuICAgIGV4dHJhOnt0ZXh0U2l6ZTogMTMsbGluZVZpc2libGU6ZmFsc2V9XFxufSk7XFxuc2V0UmVzdWx0KGQpO1wifV0sXCJzYXZlZFwiOmZhbHNlLFwidGl0bGVcIjpcIk15RmllbGThtLDigb9cIixcInZlcnNpb25cIjowLFwidXJsXCI6XCJoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSM7Z2V0O1VURi04O3tVc2VyLUFnZW50QE1vemlsbGEvNS4wIChMaW51eO+8m++8myBBbmRyb2lkIDEx77yb77ybIE1pIDEwIFBybykgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzg4LjAuNDMyNC4xNTIgTW9iaWxlIFNhZmFyaS81MzcuMzZ9XCIsXCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwiZmluZF9ydWxlXCI6XCJqczooXFxuKGssIHRpdGxlcykgPT4ge1xcbiAgICB2YXIgZCA9IFtdO1xcbiAgICBldmFsKGdldEl0ZW0oXFxcIm15RnVuY3Rpb25cXFwiKSk7XFxuICAgIHZhciBuYW1lID0ga1swXTtcXG4gICAgdmFyIGNvZGUgPSBrWzFdO1xcbiAgICBkLnB1c2goe3RpdGxlOiBcXFwiXFxcXHU0ZmRkIFxcXFx1NWI1OFxcXCIsIHVybDogc2F2ZUJ1dHRvbiArIFxcXCJzYXZlQnV0dG9uKGdldFZhcignaW5wdXRfZWRpdCcpLG5hbWUpO2JhY2soKTtcXFwiLCBjb2xfdHlwZTogXFxcImlucHV0XFxcIiwgZGVzYzogXFxcIlxcXFx1NWVmYVxcXFx1OGJhZVxcXFx1NjMwOVxcXFx1OWVkOFxcXFx1OGJhNFxcXFx1NzY4NFxcXFx1NGVlM1xcXFx1NzgwMVxcXFx1NjgzY1xcXFx1NWYwZlxcXFx1NGZlZVxcXFx1NjUzOVxcXFx1NTRlNlxcXCIsIGV4dHJhOiB7b25DaGFuZ2U6IFxcXCJwdXRWYXIoJ2lucHV0X2VkaXQnLCBpbnB1dClcXFwiLCB0eXBlOiBcXFwidGV4dGFyZWFcXFwiLCBoZWlnaHQ6IFxcXCItMVxcXCIsIHRpdGxlVmlzaWJsZTogZmFsc2UsIGRlZmF1bHRWYWx1ZTogXFxcIlxcXFx1NGZlZVxcXFx1NjUzOVxcXFx1MjYwNVxcXCIgKyBuYW1lICsgXFxcIlxcXFx1MjYwNVxcXCIgKyBjb2RlfX0pO1xcbiAgICBkLnB1c2goe3RpdGxlOiBcXFwiXFxcXHUyMDE4XFxcXHUyMDE4XFxcXHUyMDE5XFxcXHUyMDE5PHNtYWxsPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzZFQjg5N1xcXFxcXFwiPlxcXFx1NjgzY1xcXFx1NWYwZlxcXFx1NGUzYVxcXFx1ZmYxYVxcXFx1NjRjZFxcXFx1NGY1Y1xcXFx1N2M3YlxcXFx1NTc4YlxcXFx1MjYwNVxcXFx1NjgwN1xcXFx1OTg5OFxcXFx1MjYwNWZ1bmN0aW9uKCl7XFxcXHU4MWVhXFxcXHU1YjlhXFxcXHU0ZTQ5XFxcXHU1MTg1XFxcXHU1YmI5fTxicj5cXFxcdThiZjdcXFxcdTUyZmZcXFxcdTU4NmJcXFxcdTUxNjVcXFxcdTUxNzZcXFxcdTRlZDZcXFxcdTY4M2NcXFxcdTVmMGZcXFwiLCB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKHNhdmVCdXR0b24sIG5hbWUsIHRpdGxlcykgPT4ge1xcbiAgICAgICAgbGV0IHRtcEFyID0gZ2V0VmFyKFxcXCJpbnB1dF9lZGl0XFxcIikuc3BsaXQoXFxcIlxcXFx1MjYwNVxcXCIpO1xcbiAgICAgICAgaWYgKHRtcEFyLmxlbmd0aCA8IDIpIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8vXFxcXHU0ZmVlXFxcXHU2NTM5XFxcXHU2ODNjXFxcXHU1ZjBmXFxcXHU2NzA5XFxcXHU4YmVmXFxcXHVmZjBjXFxcXHU4YmJmXFxcXHU5NWVlXFxcXHU4OGFiXFxcXHU2MmQyXFxcXHU3ZWRkXFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBuZXdOYW1lID0gdG1wQXJbMV07XFxuICAgICAgICBpZiAobmV3TmFtZSAhPT0gbmFtZSAmJiB0aXRsZXMuaW5jbHVkZXMobmV3TmFtZSkpIHtcXG4gICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcXHU2OGMwXFxcXHU2ZDRiXFxcXHU1MjMwXFxcXHU1NDBjXFxcXHU1NDBkXFxcXHU2M2E1XFxcXHU1M2UzOlxcXCIgKyBuZXdOYW1lICsgXFxcIixcXFxcdTY2MmZcXFxcdTU0MjZcXFxcdTg5ODZcXFxcdTc2ZDY/XFxcIikuY29uZmlybSgoc2F2ZUJ1dHRvbiwgbmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgY29kZSA9IHNhdmVCdXR0b24oZ2V0VmFyKFxcXCJpbnB1dF9lZGl0XFxcIiksIG5hbWUpO1xcbiAgICAgICAgICAgICAgICBiYWNrKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFxcdTVkZjJcXFxcdTRmZGRcXFxcdTViNThcXFxcdTRmZWVcXFxcdTY1MzlcXFxcblxcXFx1OGJmN1xcXFx1ODFlYVxcXFx1ODg0Y1xcXFx1NjhjMFxcXFx1NmQ0YlxcXFx1ODk4NlxcXFx1NzZkNlxcXFx1NTQwZVxcXFx1NzY4NFxcXFx1NTE4NVxcXFx1NWJiOVxcXCI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICwgc2F2ZUJ1dHRvbiwgbmFtZSk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGxldCBjb2RlID0gc2F2ZUJ1dHRvbihnZXRWYXIoXFxcImlucHV0X2VkaXRcXFwiKSwgbmFtZSk7XFxuICAgICAgICAgICAgYmFjaygpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFxcdTVkZjJcXFxcdTRmZGRcXFxcdTViNThcXFxcdTRmZWVcXFxcdTY1MzlcXFwiO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgICwgc2F2ZUJ1dHRvbiwgbmFtZSwgdGl0bGVzKSwgZGVzYzogXFxcIlxcXFx1MjAxOFxcXFx1MjAxOFxcXFx1MjAxOVxcXFx1MjAxOTxiaWc+PGJpZz48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiMyOThBMDhcXFxcXFxcIj5cXFxcdTRmZGQgXFxcXHU1YjU4XFxcIiwgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIn0pO1xcbiAgICBzZXRSZXN1bHQoZCk7XFxufVxcbikoW1xcXCJPS+ino+aekFxcXCIsXFxcImh0dHBzOi8vYXBpLm9ranguY2M6MzM4OS9qeC5waHA/dXJsPVxcXCJdLFtcXFwiIOWkp+S6qMK35qih5p2/5aWXXFxcIixcXFwi5bCP55m95LiT57q/XFxcIixcXFwi5q+S6IiM6Kej5p6QXFxcIixcXFwi5pif56m65YWN5ZeF5rWL6K+VUVxcXCIsXFxcIui/quWlpeWXheaOolxcXCIsXFxcImNrbW92XFxcIixcXFwiQmzop6PmnpBcXFwiLFxcXCJtMTkwN1xcXCIsXFxcIuiZvuexs+ino+aekFxcXCIsXFxcIuaxn+a5luWumOaWuVxcXCIsXFxcIuaYn+mpsFxcXCIsXFxcIuWwiuS6q1xcXCIsXFxcIjE3MTfkupHlpIfnlKhcXFwiLFxcXCJNYW9cXFwiLFxcXCLoiKrmtbfplJpcXFwiLFxcXCLmsZ/muZZEXFxcIixcXFwiNGtcXFwiLFxcXCJNM1U4VFZcXFwiLFxcXCJPS+ino+aekFxcXCIsXFxcInBsYXltdTM4XFxcIixcXFwi6aOe5o23XFxcIixcXFwiMTE2XFxcIixcXFwi5LmQ5Za1XFxcIixcXFwi5LyY5YWoXFxcIixcXFwiUEFSXFxcIixcXFwi5LiH56aPXFxcIixcXFwi6JOd54yrXFxcIixcXFwi55Oc55quXFxcIixcXFwi5qix6IqxXFxcIixcXFwi55m9546JXFxcIixcXFwi55m9546JQlxcXCIsXFxcIueZveeOiUNcXFwiLFxcXCLmt5jlvbFBXFxcIixcXFwi5reY5b2xQlxcXCIsXFxcIua3mOW9sURcXFwiLFxcXCLmt5jlvbFFXFxcIixcXFwi5reY5b2xRlxcXCIsXFxcIumHkem4oVxcXCIsXFxcIuWFq+S4gFxcXCIsXFxcIuWuneiOslxcXCIsXFxcIui/veWJp+i+vuS6ulxcXCIsXFxcIumAn+aQnOW9semZolxcXCIsXFxcIjY2cGFyc2VcXFwiLFxcXCLlhavkuoxcXFwiLFxcXCLlhrDosYZcXFwiLFxcXCJNMjA5MFxcXCIsXFxcIk1XMFxcXCIsXFxcIueVquiMhOW8ueW5leino+aekFxcXCIsXFxcIuaaruWFiVxcXCIsXFxcIjY2MGVcXFwiLFxcXCLkurrkurrov7dcXFwiLFxcXCLnpo/mmJ9cXFwiLFxcXCI0S+W9seinhlxcXCIsXFxcIuWkt+eLhFxcXCIsXFxcIuaXp+WfjuW9seinhlxcXCIsXFxcIuS4g+WTpVxcXCIsXFxcIjJBXFxcIixcXFwi5q615Y+LLuaXpeaJuVxcXCIsXFxcIueZvuW6plxcXCIsXFxcIuebmOWPpFxcXCIsXFxcIk1hb+WFqOe9keino+aekFxcXCIsXFxcIllpVFZcXFwiLFxcXCLlj7vnsIdcXFwiLFxcXCLlj6/kuZBcXFwiLFxcXCLnjKrouYRcXFwiLFxcXCLlsI/ni7zkupFcXFwiLFxcXCLkupHop6PmnpBcXFwiLFxcXCLnur/ot6/kuowo5Zu95aSWKVxcXCIsXFxcIue6v+i3r+S4iSjlpIfnlKgpXFxcIixcXFwiVE5WSVDkupHmkq3mlL5cXFwiLFxcXCLvvIjluKbpgInpm4bnmoTkuozmrKHop6PmnpDvvIlcXFwiLFxcXCLmgJ3kupFcXFwiLFxcXCJtM3U4XFxcIixcXFwi5pm66IO95o6l5Y+jXFxcIixcXFwi5LqR5qCWXFxcIixcXFwi5Yid5b+DXFxcIixcXFwi56We6amsXFxcIixcXFwi5LqR5rOiXFxcIixcXFwi5LmF5beyXFxcIixcXFwi55uS5a2QXFxcIixcXFwiMTfkupFcXFwiLFxcXCLkuIPlvalcXFwiLFxcXCJDS01PVlxcXCIsXFxcIuWViuiMuS/nq7nlmI5cXFwiLFxcXCJC56uZ6Kej5p6QXFxcIixcXFwi5LqR5LqRXFxcIixcXFwiQ0tcXFwiLFxcXCJDSG9rXFxcIixcXFwiRUxXXFxcIixcXFwi5a6J6YC4XFxcIixcXFwi5aSn5bmVXFxcIixcXFwi5aix5LmQXFxcIixcXFwiUkRIS1xcXCIsXFxcIkg4XFxcIixcXFwi6Kej5p6QbGFcXFwiLFxcXCLkuYXmkq1cXFwiLFxcXCLkuZ3lhatcXFwiLFxcXCLogIHmnb9cXFwiLFxcXCLmuJDmuJBcXFwiLFxcXCJNVVRWXFxcIixcXFwi5piO5pelXFxcIixcXFwi6YGH6KeBXFxcIixcXFwi6K+66K6vXFxcIixcXFwi5riF6I6yXFxcIixcXFwi6JCM5qyjXFxcIixcXFwi55m+5bqmL+minOS6plxcXCIsXFxcIue7tOWkmlxcXCIsXFxcIuaXoOWQjVxcXCIsXFxcIuWwj+iSi1xcXCIsXFxcIjA5XFxcIixcXFwi5pif56m6XFxcIixcXFwi5pyI5LquXFxcIixcXFwi5LqR56uvXFxcIixcXFwi5LqR5p6QXFxcIixcXFwiMzN0XFxcIixcXFwi5rGf5rmW56eR5oqAMlxcXCIsXFxcIua3mOW9sVxcXCIsXFxcIueehOa0vuWvuVxcXCIsXFxcIuWuj+S7lFxcXCIsXFxcIuafoOaqrFxcXCIsXFxcIuaxn+a5lkZcXFwiLFxcXCLmsZ/muZZCXFxcIixcXFwibGVlbGVvXFxcIixcXFwi54ix6KejXFxcIixcXFwi6aKG6YW3XFxcIixcXFwi5rOh5rOh5aCCXFxcIixcXFwiYXBw5b2x6KeG5bel5Y6CXFxcIixcXFwicGFyd2l4XFxcIixcXFwi5om26aOOXFxcIixcXFwi6L+95Ymn6L6+5Lq6M1xcXCIsXFxcIuiQjOeTnFxcXCIsXFxcInB0eWd4XFxcIixcXFwi6YW35ZCnXFxcIixcXFwi6auY5aSpXFxcIixcXFwi6JCM5pawXFxcIixcXFwi6I2j6ICAXFxcIixcXFwi6J6N5YW0XFxcIixcXFwi5L2g54i556eR5oqAXFxcIixcXFwi5LyY5oOg56aP5Yip6LStXFxcIixcXFwiRnVYaW5nXFxcIixcXFwi6YGT6ZW/5LuT5bqT6YCa5YWNXFxcIixcXFwib2tcXFwiLFxcXCLlubLppa0o5Lq65Lq66L+3KVxcXCIsXFxcIjY25b2x6KeGXFxcIixcXFwi6bqm5a2QXFxcIixcXFwi6JqC6JqB5YWE5byfXFxcIixcXFwi55m+5bqm6Kej5p6QXFxcIixcXFwi5LqR5rW3XFxcIixcXFwi5LqR5rW35q2j54mIXFxcIixcXFwieXVuMTcxN1xcXCIsXFxcIlBhbkd1XFxcIixcXFwiZGVmYXVsdFBhcnNlXFxcIixcXFwi5LiA6LW355m+5bqmXFxcIixcXFwiODA5MFxcXCIsXFxcIuebmOWPpGpzb25cXFwiLFxcXCI0MDgwXFxcIixcXFwi5aSc5bmVXFxcIixcXFwiMTA4MFxcXCIsXFxcIuaYn+mpsDJcXFwiLFxcXCLmmI7ml6Xop6PmnpBcXFwiLFxcXCLmmI7ml6Xop6PmnpAyXFxcIixcXFwiOTczXFxcIixcXFwi5p6X5b+X6L+cXFxcIixcXFwi5reY5b2x6JOd5YWJXFxcIixcXFwi5reY5b2xMTA4MFxcXCIsXFxcIumjnumjnuaZuuiDvVxcXCIsXFxcIuatpeatpemrmFxcXCIsXFxcIjIwMFxcXCIsXFxcIua3mOW9sUNcXFwiLFxcXCLkur/moqZB77yI5by55bmV5pKt5pS+5Zmo77yJXFxcIixcXFwi5Lq/5qKmQu+8iERQ5pKt5pS+5Zmo77yJXFxcIixcXFwi5LmQ5aSaXFxcIixcXFwiYmxib1xcXCIsXFxcIui/veWJp+WWtVxcXCIsXFxcImFuZnVuXFxcIixcXFwi54yq6LmE5b2x6ZmiMVxcXCIsXFxcIueMqui5hOW9semZojJcXFwiLFxcXCLnjKrouYTlvbHpmaIzXFxcIixcXFwibW1rdlxcXCIsXFxcIjYwanhcXFwiLFxcXCIxODDop6PmnpBcXFwiLFxcXCJwYXJ3aXggMVxcXCIsXFxcInBhcndpeCAyXFxcIixcXFwiN0tcXFwiLFxcXCLlhajmsJHop6PmnpAxXFxcIixcXFwi5YWo5rCR6Kej5p6QMlxcXCIsXFxcIuS6kWJveXNcXFwiLFxcXCLlpJzluZUxXFxcIixcXFwi5aSc5bmVMlxcXCIsXFxcIuWknOW5lTNcXFwiLFxcXCLlpJzluZU0XFxcIixcXFwi5aSc5bmVNVxcXCIsXFxcIjEyM21pbmdyZW5cXFwiLFxcXCLlpKfmoJFcXFwiLFxcXCLlpKfkuqhcXFwiLFxcXCLlk5Tlk6lcXFwiLFxcXCIxN+S6keWkh+eUqFxcXCIsXFxcIuS4h+iDveaYn+mpsFxcXCIsXFxcIuaxn+a5luS6keino+aekFxcXCIsXFxcIuiZvuexs1xcXCIsXFxcIk0xOTA3XFxcIixcXFwiQkxcXFwiLFxcXCLov6rlpaVcXFwiLFxcXCJNM1U4XFxcIixcXFwi6K+66K+6XFxcIixcXFwiT0tcXFwiLFxcXCJQTVxcXCJdKVwiLFwiZ3JvdXBcIjpcIiPvuI/ig6Plm5vlpKfnmobnqbpcIixcInVhXCI6XCJtb2JpbGVcIixcInByZVJ1bGVcIjpcIlwiLFwicGFnZXNcIjpcIlt7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJQYXJzZV9Ebi12dWUuaHRtbFxcXCIsXFxcInBhdGhcXFwiOlxcXCJQYXJzZV9Ebi5odG1sXFxcIixcXFwicnVsZVxcXCI6XFxcIjwhRE9DVFlQRSBodG1sPlxcXFxuPGh0bWw+XFxcXG48aGVhZD5cXFxcbiAgICA8bWV0YSBjaGFyc2V0PVxcXFxcXFwidXRmLThcXFxcXFxcIj5cXFxcbiAgICA8bWV0YSBuYW1lPVxcXFxcXFwidmlld3BvcnRcXFxcXFxcIiBjb250ZW50PVxcXFxcXFwid2lkdGg9ZGV2aWNlLXdpZHRoLGluaXRpYWwtc2NhbGU9MSxtaW5pbXVtLXNjYWxlPTEsbWF4aW11bS1zY2FsZT0xLHVzZXItc2NhbGFibGU9bm9cXFxcXFxcIiAvPlxcXFxuICAgIDx0aXRsZT5QYXJzZV9Ebl92dWU8L3RpdGxlPlxcXFxuICAgIDxzY3JpcHQ+XFxcXG4gICAgICAgIGNvbnN0IHZ1ZVBhdGggPSAnaGlrZXI6Ly9maWxlcy9ydWxlcy9kekhvdXNlL2pzL3Z1ZS5qcyc7XFxcXG4gICAgICAgIGlmKHR5cGVvZihmYmEpPT0ndW5kZWZpbmVkJ3x8IWZiYSl7XFxcXG4gICAgICAgICAgICB2YXIgZmJhID0gZnlfYnJpZGdlX2FwcDtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgaWYodHlwZW9mKHJlcXVlc3QpPT0ndW5kZWZpbmVkJ3x8IXJlcXVlc3Qpe1xcXFxuICAgICAgICAgICAgICAgIGV2YWwoZmJhLmdldEludGVybmFsSnMoKSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAvLyBmYmEubG9nKHZ1ZVBhdGgpO1xcXFxuICAgICAgICAgICAgaWYoIXJlcXVlc3QodnVlUGF0aCkpe1xcXFxuICAgICAgICAgICAgICAgIGZiYS53cml0ZUZpbGUodnVlUGF0aCxyZXF1ZXN0KCdodHRwOi8vaGlrZXIubm9raWEucHJlc3MvaGlrZXJ1bGUvcnVsZWxpc3QuanNvbj9pZD0xODIzJykpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICBldmFsKGZiYS5mZXRjaCh2dWVQYXRoKSk7XFxcXG4gICAgICAgICAgICB9Y2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhlLm1lc3NhZ2UpO1xcXFxuICAgICAgICAgICAgICAgIGZiYS5sb2coZS5tZXNzYWdlKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIC8vIGZiYS5sb2coJ+WKoOi9vXZ1Zee7hOS7tuWujOavlScpO1xcXFxuICAgICAgICB9Y2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgIGFsZXJ0KGUubWVzc2FnZSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICA8L3NjcmlwdD5cXFxcbiAgICA8IS0tICAgIDxzY3JpcHQgc3JjPVxcXFxcXFwiaHR0cHM6Ly91bnBrZy5jb20vdnVlQG5leHRcXFxcXFxcIj48L3NjcmlwdD4tLT5cXFxcbiAgICA8IS0tICAgIDxzY3JpcHQgc3JjPVxcXFxcXFwiZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvcnVsZXMvZHpIb3VzZS9qcy92dWUuanNcXFxcXFxcIj48L3NjcmlwdD4tLT5cXFxcbiAgICA8c3R5bGU+XFxcXG4gICAgICAgIGJvZHkge1xcXFxuICAgICAgICAgICAgbWFyZ2luOiAwIDVweCAwIDVweDtcXFxcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgMHB4IDAgMHB4O1xcXFxuICAgICAgICAgICAgLyogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjlGMERBOyovXFxcXG4gICAgICAgICAgICBmb250LXdlaWdodDogMDtcXFxcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBcXFxcXFxcIk1pY3Jvc29mdCBZYUhlaVxcXFxcXFwiLFxcXFxcXFwi5a6L5L2TXFxcXFxcXCIsXFxcXFxcXCJTZWdvZSBVSVxcXFxcXFwiLCBcXFxcXFxcIkx1Y2lkYSBHcmFuZGVcXFxcXFxcIiwgSGVsdmV0aWNhLCBBcmlhbCxzYW5zLXNlcmlmLCBGcmVlU2FucywgQXJpbW87XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgI2FwcHtcXFxcbiAgICAgICAgICAgIG1hcmdpbi10b3A6LTEwcHg7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgI3RpcHN7XFxcXG4gICAgICAgICAgICBtYXJnaW4tdG9wOi0xMHB4O1xcXFxuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTo1cHg7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLmZ1bmd7XFxcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlclxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGRpdi5ib3gge1xcXFxuICAgICAgICAgICAgbWFyZ2luLXRvcDotMXB4O1xcXFxuICAgICAgICAgICAgaGVpZ2h0OiA0M3B4O1xcXFxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLyrovpPlhaXmoYblsLrlr7gqL1xcXFxuICAgICAgICBmb3JtIHtcXFxcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcXFxuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xcXFxuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XFxcXG4gICAgICAgIH1cXFxcblxcXFxuICAgICAgICBpbnB1dCwgbGFiZWwsIHNlbGVjdCB7XFxcXG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XFxcXG4gICAgICAgICAgICBvdXRsaW5lOiBub25lO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC8q5a2X5L2T5L2N572uKi9cXFxcbiAgICAgICAgaW5wdXQge1xcXFxuICAgICAgICAgICAgd2lkdGg6IDc3JTtcXFxcbiAgICAgICAgICAgIGhlaWdodDogMzJweDtcXFxcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogNjZweDtcXFxcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDBweDtcXFxcbiAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgIGxhYmVsIHtcXFxcbiAgICAgICAgICAgIHRleHQtYWxpZ246Y2VudGVyO1xcXFxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDQzcHg7XFxcXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XFxcXG4gICAgICAgICAgICB3aWR0aDogNjBweDtcXFxcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcXFxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXFxcbiAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgIC8q5bCP5qGGKi9cXFxcbiAgICAgICAgLmJhciBsYWJlbCB7XFxcXG4gICAgICAgICAgICAvKmJhY2tncm91bmQ6ICNEMDZCNkM7Ki9cXFxcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDVweCA1NTVweCA1NTVweCA1cHg7XFxcXG4gICAgICAgICAgICB3aWR0aDogNjBweDtcXFxcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDtcXFxcbiAgICAgICAgICAgIHRvcDogMDtcXFxcbiAgICAgICAgICAgIGxlZnQ6IDNweDtcXFxcbiAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgIC8q6L6T5YWl5qGG5qC35byPKi9cXFxcbiAgICAgICAgLmJhciBpbnB1dCB7XFxcXG4gICAgICAgICAgICAvKmJvcmRlci1yYWRpdXM6IDVweCA1NTVweCA1NTVweCA1cHg7XFxcXG4gICAgICAgICAgICAgKi9cXFxcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcXFxcbiAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgIC8q5YiX6KGoKi9cXFxcbiAgICAgICAgc2VsZWN0IHtcXFxcbiAgICAgICAgICAgIHRleHQtYWxpZ246Y2VudGVyO1xcXFxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6NDBweDtcXFxcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcXFxcbiAgICAgICAgICAgIHdpZHRoOiAyMHB4O1xcXFxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcXFxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcXFxuICAgICAgICB9XFxcXG5cXFxcbiAgICAgICAgLyrliJfooagqL1xcXFxuICAgICAgICAubGllYiBzZWxlY3R7XFxcXG4gICAgICAgICAgICAvKmJvcmRlci1yYWRpdXM6IDRweDsqL1xcXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTU1cHggNXB4IDVweCA1NTVweDtcXFxcbiAgICAgICAgICAgIHdpZHRoOiA4MHB4O1xcXFxuICAgICAgICAgICAgdGV4dC1hbGlnbjpjZW50ZXI7XFxcXG4gICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XFxcXG4gICAgICAgICAgICB0b3A6IDA7XFxcXG4gICAgICAgICAgICByaWdodDogMnB4O1xcXFxuICAgICAgICB9XFxcXG5cXFxcbiAgICAgICAgLyrlpLTlg48qL1xcXFxuICAgICAgICAucm91bmRfaWNvbntcXFxcbiAgICAgICAgICAgIHdpZHRoOiA0MHB4O1xcXFxuICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xcXFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcXFxcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcXFxcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxcXG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXFxcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XFxcXG4gICAgICAgIH1cXFxcbiAgICA8L3N0eWxlPlxcXFxuPC9oZWFkPlxcXFxuPGJvZHk+XFxcXG48ZGl2IGNsYXNzPVxcXFxcXFwiZnVuZ1xcXFxcXFwiPlxcXFxuICAgIDxhIHN0eWxlPVxcXFxcXFwiZmxvYXQ6bGVmdDtcXFxcXFxcIj5cXFxcbiAgICAgICAgPGJ1dHRvbiAgOnN0eWxlPVxcXFxcXFwiJ2JvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogJyt0aGVtZXMuY2xvc2VCdG4uYmFja2dyb3VuZCsnO3dpZHRoOiA4MHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICcrdGhlbWVzLmNsb3NlQnRuLmNvbG9yXFxcXFxcXCIgb25jbGljaz1cXFxcXFxcImNhbmNlbCgpO1xcXFxcXFwiPuWFsyDpl608L2J1dHRvbj5cXFxcbiAgICA8L2E+XFxcXG4gICAgPGEgY2xhc3M9XFxcXFxcXCJidG4gYnRuLXByaW1hcnlcXFxcXFxcIj5cXFxcbiAgICAgICAgPGJ1dHRvbiAgOnN0eWxlPVxcXFxcXFwiJ2JvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogJyt0aGVtZXMudGlwc0J0bi5iYWNrZ3JvdW5kKyc7d2lkdGg6IDEyMHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICcrdGhlbWVzLnRpcHNCdG4uY29sb3JcXFxcXFxcIiBAY2xpY2s9XFxcXFxcXCJzaG93VGlwcz0hc2hvd1RpcHNcXFxcXFxcIj57e3Nob3dUaXBzP1xcXFxcXFwi6ZqQ6JeP5o+Q56S6XFxcXFxcXCI6XFxcXFxcXCLmmL7npLrmj5DnpLpcXFxcXFxcIn19PC9idXR0b24+XFxcXG4gICAgPC9hPlxcXFxuICAgIDxhIHN0eWxlPVxcXFxcXFwiZmxvYXQ6cmlnaHRcXFxcXFxcIj5cXFxcbiAgICAgICAgPGJ1dHRvbiA6c3R5bGU9XFxcXFxcXCInYm9yZGVyOiBub25lO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiAnK3RoZW1lcy5zYXZlQnRuLmJhY2tncm91bmQrJzt3aWR0aDogODBweDsgZm9udC1zaXplOiAxOHB4O2NvbG9yOiAnK3RoZW1lcy5zYXZlQnRuLmNvbG9yXFxcXFxcXCIgb25jbGljaz1cXFxcXFxcImNsaWNrbWUoJ+mFjSDnva4g5beyIOS/nSDlrZgg77yBJywgMTAwMCwgJ+W8gCcpO1xcXFxcXFwiPuS/nSDlrZg8L2J1dHRvbj5cXFxcbiAgICA8L2E+XFxcXG5cXFxcbjwvZGl2PlxcXFxuPGJyPlxcXFxuPGRpdiBpZD1cXFxcXFxcImFwcFxcXFxcXFwiPlxcXFxuICAgIDxoNiBpZD1cXFxcXFxcInRpcHNcXFxcXFxcIiB2LWh0bWw9XFxcXFxcXCJ0aXBzXFxcXFxcXCIgdi1zaG93PVxcXFxcXFwic2hvd1RpcHNcXFxcXFxcIj48L2g2PlxcXFxuICAgIDxkaXYgY2xhc3M9XFxcXFxcXCJib3ggYmFyXFxcXFxcXCIgdi1mb3I9XFxcXFxcXCJvcHRpb24gaW4gb3B0aW9uc1xcXFxcXFwiPlxcXFxuICAgICAgICA8Zm9ybT5cXFxcbiAgICAgICAgICAgIDxsYWJlbCB0eXBlPVxcXFxcXFwic3VibWl0XFxcXFxcXCIgOnN0eWxlPVxcXFxcXFwiJ2JhY2tncm91bmQ6Jyt0aGVtZXMuYmFybGFiZWwuYmFja2dyb3VuZCsnO2NvbG9yOicrdGhlbWVzLmJhcmxhYmVsLmNvbG9yXFxcXFxcXCI+e3sgb3B0aW9uLm5hbWUgfX08L2xhYmVsPlxcXFxuICAgICAgICAgICAgPGlucHV0IDpzdHlsZT1cXFxcXFxcIidiYWNrZ3JvdW5kOicrdGhlbWVzLmJhcklucHV0LmJhY2tncm91bmQrJztib3JkZXI6IDNweCBzb2xpZCAnK3RoZW1lcy5iYXJJbnB1dC5jb2xvclxcXFxcXFwiIHR5cGU9XFxcXFxcXCJ0ZXh0XFxcXFxcXCIgb25jbGljaz1cXFxcXFxcInJlc2V0U2VsZWN0KHRoaXMuaWQpXFxcXFxcXCIgOnBsYWNlaG9sZGVyPVxcXFxcXFwib3B0aW9uLnBsYWNlaG9sZGVyfHxwbGFjZWhvbGRlclxcXFxcXFwiIHYtbW9kZWw9XFxcXFxcXCJvcHRpb24udmFsdWVcXFxcXFxcIiB2LWJpbmQ6aWQ9XFxcXFxcXCJvcHRpb24uaWRcXFxcXFxcIj5cXFxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcXFxcXCJsaWViXFxcXFxcXCI+XFxcXG4gICAgICAgICAgICAgICAgPHNlbGVjdCA6c3R5bGU9XFxcXFxcXCInYmFja2dyb3VuZDonK3RoZW1lcy5zZWxlY3QuYmFja2dyb3VuZCsnO2NvbG9yOicrdGhlbWVzLnNlbGVjdC5jb2xvclxcXFxcXFwiIDpjbGVhcmFibGU9XFxcXFxcXCJ0cnVlXFxcXFxcXCIgc2l6ZT1cXFxcXFxcIjJcXFxcXFxcIiA6aWQ9XFxcXFxcXCJvcHRpb24uaWQrJ1NlbGVjdCdcXFxcXFxcIiA6bmFtZT1cXFxcXFxcIm9wdGlvbi5pZFxcXFxcXFwiIG9uY2hhbmdlPVxcXFxcXFwiZ2V0T3B0aW9uKHRoaXMuaWQsdGhpcy5uYW1lKVxcXFxcXFwiICB2LW1vZGVsPVxcXFxcXFwib3B0aW9uLnZhbHVlXFxcXFxcXCI+XFxcXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdi1pZj1cXFxcXFxcIm9wdGlvbi5pZCE9PSdxanUnJiZvcHRpb24uaWQhPT0nY2onXFxcXFxcXCIgOnZhbHVlPVxcXFxcXFwic2VsXFxcXFxcXCIgOmtleT1cXFxcXFxcImluZGV4XFxcXFxcXCIgdi1mb3I9XFxcXFxcXCIoc2VsLGluZGV4KSBpbiBteVNlbGVjdFxcXFxcXFwiPnt7IHNlbCB9fTwvb3B0aW9uPlxcXFxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHYtZWxzZS1pZj1cXFxcXFxcIm9wdGlvbi5pZD09PSdxanUnXFxcXFxcXCIgOnZhbHVlPVxcXFxcXFwic2VsXFxcXFxcXCIgOmtleT1cXFxcXFxcImluZGV4XFxcXFxcXCIgdi1mb3I9XFxcXFxcXCIoc2VsLGluZGV4KSBpbiBbJ+m7mOiupCddLmNvbmNhdChteVNlbGVjdClcXFxcXFxcIj57eyBzZWwgfX08L29wdGlvbj5cXFxcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiA6dmFsdWU9XFxcXFxcXCJzZWxcXFxcXFxcIiA6a2V5PVxcXFxcXFwiaW5kZXhcXFxcXFxcIiB2LWVsc2Ugdi1mb3I9XFxcXFxcXCIoc2VsLGluZGV4KSBpbiBjalNlbFxcXFxcXFwiPnt7IHNlbCB9fTwvb3B0aW9uPlxcXFxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxcXFxuICAgICAgICAgICAgPC9kaXY+XFxcXG4gICAgICAgIDwvZm9ybT5cXFxcbiAgICA8L2Rpdj5cXFxcbjwvZGl2PlxcXFxuPGRpdj5cXFxcbiAgICA8YSB2LWZvcj1cXFxcXFxcInZlciBpbiB2ZXJpbmZvXFxcXFxcXCIgc3R5bGU9XFxcXFxcXCJmbG9hdDpsZWZ0O21hcmdpbi10b3A6MXB4O21hcmdpbi1yaWdodDogMjBweFxcXFxcXFwiIHYtYmluZDppZD0ndmVyLmlkJyBvbmNsaWNrPVxcXFxcXFwiZG9PcHRpb24odGhpcy5pZClcXFxcXFxcIj5cXFxcbiAgICAgICAgPGltZyA6c3JjPVxcXFxcXFwidmVyLmF2YXRhclxcXFxcXFwiIGNsYXNzPVxcXFxcXFwicm91bmRfaWNvblxcXFxcXFwiICBhbHQ9XFxcXFxcXCJcXFxcXFxcIj5cXFxcbiAgICAgICAgPHNwYW4gc3R5bGU9XFxcXFxcXCJtYXJnaW4tbGVmdDoxMHB4O2xpbmUtaGVpZ2h0OjEwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6IGdyZXk7XFxcXFxcXCI+e3sgdmVyLmF1dGhvciB9fTwvc3Bhbj5cXFxcbiAgICA8L2E+XFxcXG4gICAgPGEgc3R5bGU9XFxcXFxcXCJmbG9hdDpyaWdodDttYXJnaW4tdG9wOjEwcHg7XFxcXFxcXCI+XFxcXG4gICAgICAgIDxidXR0b24gOnN0eWxlPVxcXFxcXFwiJ2JvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDonK3RoZW1lcy5zYXZlQ2xvc2VCdG4uYmFja2dyb3VuZCsnO3dpZHRoOiAxNjBweDtoZWlnaHQ6NDBweDsgZm9udC1zaXplOiAxOHB4O2NvbG9yOiAnK3RoZW1lcy5zYXZlQ2xvc2VCdG4uY29sb3JcXFxcXFxcIiBvbmNsaWNrPVxcXFxcXFwiY2xpY2ttZSgn6YWNIOe9riDlt7Ig5L+dIOWtmCDvvIEnLCAxMDAwLCAn5YWzJyk7XFxcXFxcXCI+5L+d5a2Y5bm25YWz6Zet55WM6Z2iPC9idXR0b24+XFxcXG4gICAgPC9hPlxcXFxuPC9kaXY+XFxcXG48c2NyaXB0PlxcXFxuICAgIGxldCB0aXBzID0gYOaPkOekuu+8mjxicj7ikaDms6jmhI/mj5Lku7bpgInpobnvvIzmsqHmnInmiYvliqjlr7zlhaXmj5Lku7bnmoTor53kuI3nlKjliqjlroPjgILlpoLorr7nva7kuI3lvZPkvJrlr7zoh7Top4TliJnml6Dms5Xkvb/nlKjvvIw8YnI+6Kej5Yaz5Yqe5rOV77ya6KeG55WM5omT5byA5pu05aSa6K6+572u4oaS5paH5Lu2566h55CG4oaS54K5Y2FjaGXihpLplb/mjIlNeVBhcnNlU2V0Lmpzb27liKDpmaTmjonvvJs8YnI+4pGh5YWo5bGA6K6+572u5aaC5p6c6YCJ5oup5LqG6Z2e6buY6K6k6YKj5LmI5YWo6YOo55qE6Kej5p6Q5Lya5L2/55So6L+Z5LiA6K6+572u77yM5LiN5oOz6L+Z5qC355qE6K+d6K+35aGr5YWl6buY6K6k77ybPGJyPuKRoue7v+iJsuS/neWtmOaMiemSruS7heS7heS/neWtmOmFjee9ruS4jeS8muWFs+mXreiuvue9rumhtemdou+8jOmFjee9ruWQjuaDs+S/neWtmOW5tuWFs+mXreiuvue9rumhtemdoueahOivneivt+eCueiTneiJsuaMiemSru+8mzxicj7ikaPlpoLmnpzpgYfliLDkv53lrZjmjInpkq7ngrnkuI3liqjmiJbogIXmiqXplJnnmoTmg4XlhrXvvIzku6XkuIvot6/lvoTmjKjnnYDliKDpmaTkuIDpgY3vvIznhLblkI7ph43mlrDmi4nlj5bmj5Lku7bvvIznvZHpobXlho3miZPlvIDmraTnvZHpobVb5LiN6KaB5YWI5ouJ5Luj56CBXeOAguiusOW+l+Wkh+S7vTxicj5cXFxcbuS4u+aPkuS7tuWtmOaUvui3r+W+hDogL2NhY2hlL1BhcnNlX0RuLmpzPGJyPlxcXFxu572R6aG16ISa5pys5a2Y5pS+6Lev5b6EOiAvY2FjaGUvUGFyc2VfRG4uaHRtbDxicj5cXFxcbuaXp+aWreaPkumFjee9rui3r+W+hDovY2FjaGUvTXlQYXJzZVNldC5qc29uPGJyPlxcXFxu5paw5pat5o+S6YWN572u6Lev5b6EL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbjxicj5cXFxcbiAgICDikaTpmIXor7vlrozmj5DnpLrngrnlhbPpl63liqDovb3lrozmlbTorr7nva7pobXpnaLvvIzlpoLlh7rpl67popjml6Dms5Xoh6rooYzop6PlhrPngrnlm77niYfov5vlhaXorrrlnZvlkJHmiJHlj43ppojjgII8YnI+YDtcXFxcbiAgICBsZXQgcGxhY2Vob2xkZXI9J+i+k+WFpeino+aekOWQjeaIluiAhVVSTC4uLi4uLic7XFxcXG4gICAgLy8jYWE5NmRhICNmYzUxODVcXFxcbiAgICBsZXQgdGhlbWVzID0ge1xcXFxuICAgICAgICBuYW1lOifpu5jorqTkuLvpopgnLFxcXFxuICAgICAgICBjbG9zZUJ0bjp7Y29sb3I6JyNmNmY2ZjYnLGJhY2tncm91bmQ6JyNhYTk2ZGEnfSxcXFxcbiAgICAgICAgc2F2ZUJ0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNjgwMDYnfSxcXFxcbiAgICAgICAgc2F2ZUNsb3NlQnRuOntjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonIzA1QkZDNSd9LFxcXFxuICAgICAgICB0aXBzQnRuOntjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonIzA1QkZDNSd9LFxcXFxuICAgICAgICBiYXJsYWJlbDp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyNhYTk2ZGEnfSxcXFxcbiAgICAgICAgYmFySW5wdXQ6e2NvbG9yOicjYWE5NmRhJyxiYWNrZ3JvdW5kOicjZmZmZmQyJ30sXFxcXG4gICAgICAgIHNlbGVjdDp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyNhYTk2ZGEnfSxcXFxcbiAgICB9O1xcXFxuICAgIGxldCB0aGVtZURlZiA9IHtcXFxcXFxcIm5hbWVcXFxcXFxcIjpcXFxcXFxcIuaWreW/teWOn+earlxcXFxcXFwiLFxcXFxcXFwiY2xvc2VCdG5cXFxcXFxcIjp7XFxcXFxcXCJjb2xvclxcXFxcXFwiOlxcXFxcXFwiI0Y5RjBEQVxcXFxcXFwiLFxcXFxcXFwiYmFja2dyb3VuZFxcXFxcXFwiOlxcXFxcXFwiI2M1NDY0YVxcXFxcXFwifSxcXFxcXFxcInNhdmVCdG5cXFxcXFxcIjp7XFxcXFxcXCJjb2xvclxcXFxcXFwiOlxcXFxcXFwiI0Y5RjBEQVxcXFxcXFwiLFxcXFxcXFwiYmFja2dyb3VuZFxcXFxcXFwiOlxcXFxcXFwiIzA2ODAwNlxcXFxcXFwifSxcXFxcXFxcInNhdmVDbG9zZUJ0blxcXFxcXFwiOntcXFxcXFxcImNvbG9yXFxcXFxcXCI6XFxcXFxcXCIjRjlGMERBXFxcXFxcXCIsXFxcXFxcXCJiYWNrZ3JvdW5kXFxcXFxcXCI6XFxcXFxcXCIjMDVCRkM1XFxcXFxcXCJ9LFxcXFxcXFwidGlwc0J0blxcXFxcXFwiOntcXFxcXFxcImNvbG9yXFxcXFxcXCI6XFxcXFxcXCIjRjlGMERBXFxcXFxcXCIsXFxcXFxcXCJiYWNrZ3JvdW5kXFxcXFxcXCI6XFxcXFxcXCIjMDVCRkM1XFxcXFxcXCJ9LFxcXFxcXFwiYmFybGFiZWxcXFxcXFxcIjp7XFxcXFxcXCJjb2xvclxcXFxcXFwiOlxcXFxcXFwiI0Y5RjBEQVxcXFxcXFwiLFxcXFxcXFwiYmFja2dyb3VuZFxcXFxcXFwiOlxcXFxcXFwiI0QwNkI2Q1xcXFxcXFwifSxcXFxcXFxcImJhcklucHV0XFxcXFxcXCI6e1xcXFxcXFwiY29sb3JcXFxcXFxcIjpcXFxcXFxcIiNEMDZCNkNcXFxcXFxcIixcXFxcXFxcImJhY2tncm91bmRcXFxcXFxcIjpcXFxcXFxcIiNGOUYwREFcXFxcXFxcIn0sXFxcXFxcXCJzZWxlY3RcXFxcXFxcIjp7XFxcXFxcXCJjb2xvclxcXFxcXFwiOlxcXFxcXFwiI0Y5RjBEQVxcXFxcXFwiLFxcXFxcXFwiYmFja2dyb3VuZFxcXFxcXFwiOlxcXFxcXFwiI0QwNkI2Q1xcXFxcXFwifX07XFxcXG4gICAgdmFyIHRoZW1lUm91dGUgPSBcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlUaGVtZS5qc29uXFxcXFxcXCI7XFxcXG4gICAgaWYoIWZiYS5mZXRjaCh0aGVtZVJvdXRlKSl7XFxcXG4gICAgICAgIGZiYS53cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeSh7bm93X3RoZW1lOifpu5jorqTkuLvpopgnLHRoZW1lczpbdGhlbWVzLHRoZW1lRGVmXX0pKVxcXFxuICAgIH1cXFxcbiAgICB0cnkge1xcXFxuICAgICAgICBsZXQgbXlUaGVtZXMgPSBKU09OLnBhcnNlKGZiYS5mZXRjaCh0aGVtZVJvdXRlKSk7XFxcXG4gICAgICAgIGxldCBub3dUaGVtZSA9IG15VGhlbWVzLnRoZW1lcy5maWx0ZXIoaXQ9Pml0Lm5hbWUgPT09IG15VGhlbWVzLm5vd190aGVtZSk7XFxcXG4gICAgICAgIHRoZW1lcyA9IG5vd1RoZW1lP25vd1RoZW1lWzBdOm15VGhlbWVzLnRoZW1lc1swXTtcXFxcbiAgICB9Y2F0Y2ggKGUpIHt9XFxcXG5cXFxcbiAgICAvLyDmlq3lv7XliJ3lp4vljJbpg6jliIZcXFxcbiAgICBjb25zdCBhbGxBcGk9WydodHRwczovL3Rlc3Qucm9uZ3hpbmd2ci5jb20vdGVzdC8/dXJsPScsJ2h0dHA6Ly9jYWNoZS5sYW5ndWFuZy5pY3U6ODgvZGlkaS5waHA/dXJsPSddO1xcXFxuICAgIHZhciBzZXR0aW5ncyA9IHtcXFxcbiAgICAgICAgcXk6ICfkvaDniLnnp5HmioAnLFxcXFxuICAgICAgICB5azogJ+mihumFtycsXFxcXG4gICAgICAgIHR4OiAn6I2j6ICAJyxcXFxcbiAgICAgICAgbWc6ICfomoLomoHlhYTlvJ8nLFxcXFxuICAgICAgICBibDogJ09L6Kej5p6QJyxcXFxcbiAgICAgICAgc2g6ICfmsZ/muZZEJyxcXFxcbiAgICAgICAgeGc6ICfmsZ/muZZEJyxcXFxcbiAgICAgICAgYWw6ICfmsZ/muZZEJyxcXFxcbiAgICAgICAgcHA6ICfkurrkurrov7cnLFxcXFxuICAgICAgICBtaTogJzEwODAnLFxcXFxuICAgICAgICBsZTogJ+i/quWlpeWXheaOoicsXFxcXG4gICAgICAgIG90aDogJ+mBk+mVv+S7k+W6k+mAmuWFjScsXFxcXG4gICAgICAgIG9uZTogJzEwODAnLFxcXFxuICAgICAgICBmdW46ICfono3lhbQnLFxcXFxuICAgICAgICBxanU6ICfpu5jorqQnLFxcXFxuICAgICAgICBjajogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnXFxcXG4gICAgfTtcXFxcbiAgICB2YXIgb2xkUm91dGUgPSBcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uXFxcXFxcXCI7XFxcXG4gICAgdmFyIG15U2V0ID0gZmJhLmZldGNoKG9sZFJvdXRlKTtcXFxcbiAgICB2YXIgbmV3Um91dGUgPSBcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uXFxcXFxcXCI7XFxcXG4gICAgaWYoIWZiYS5mZXRjaChuZXdSb3V0ZSkpe1xcXFxuICAgICAgICBmYmEud3JpdGVGaWxlKG5ld1JvdXRlLEpTT04uc3RyaW5naWZ5KHtzZXR0aW5nczpzZXR0aW5ncyx0aXRsZTpbXFxcXFxcXCJ5dW4xNzE3XFxcXFxcXCIsXFxcXFxcXCLkvaDniLnnp5HmioBcXFxcXFxcIixcXFxcXFxcIuiejeWFtFxcXFxcXFwiLFxcXFxcXFwi5Lq65Lq66L+3LeS8mOmFt1xcXFxcXFwiXSxjb2Rlczp7XFxcXFxcXCLkvaDniLnnp5HmioBcXFxcXFxcIjpcXFxcXFxcImh0dHA6Ly9jYWNoZS5sYW5ndWFuZy5pY3U6ODgvZGlkaS5waHA/dXJsPVxcXFxcXFwiLFxcXFxcXFwi6J6N5YW0XFxcXFxcXCI6XFxcXFxcXCJodHRwczovL3Rlc3Qucm9uZ3hpbmd2ci5jb20vdGVzdC8/dXJsPVxcXFxcXFwiLFxcXFxcXFwi5Lq65Lq66L+3LeS8mOmFt1xcXFxcXFwiOlxcXFxcXFwiaHR0cHM6Ly9zdmlwLnJlbnJlbm1pLmNjOjIyMjIvYXBpLz9rZXk9bm40ajhydWtQWFNWelI3OEU5JnVybD1cXFxcXFxcIn19KSlcXFxcbiAgICB9XFxcXG4gICAgdmFyIG5ld0NvbmZpZyA9IGZiYS5mZXRjaChuZXdSb3V0ZSk7XFxcXG4gICAgdmFyIG15U2VsZWN0ID0gW107XFxcXG4gICAgZnVuY3Rpb24gY29tcGFyZShsaXN0KSB7XFxcXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiAhbGlzdC5pbmNsdWRlcyhpdClcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICBpZihuZXdDb25maWcmJm5ld0NvbmZpZy5sZW5ndGg+MjApe1xcXFxuICAgICAgICBldmFsKFxcXFxcXFwibmV3Q29uZmlnID1cXFxcXFxcIiArIG5ld0NvbmZpZyArIFxcXFxcXFwiO1xcXFxcXFwiKTtcXFxcbiAgICAgICAgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHNldHRpbmdzLG5ld0NvbmZpZy5zZXR0aW5ncyk7XFxcXG4gICAgICAgIHZhciB5Y1RpdGxlID0gWydkZWZhdWx0UGFyc2UnLCAnZGVmYXVsdFBhcnNlV2ViJywnbWFvc3MnLCAnQ2l0eUlQJywgJ2NhY2hlTTN1OCcsICdwY1VBJywgJ3BhcnNlTGMnLCAnZ3BhcnNlJywgJ25wYXJzZSddO1xcXFxuICAgICAgICBteVNlbGVjdCA9IG5ld0NvbmZpZy50aXRsZS5maWx0ZXIoY29tcGFyZSh5Y1RpdGxlKSk7XFxcXG4gICAgICAgIC8vIG15U2VsZWN0ID0gbXlTZWxlY3QubWFwKChpdCk9PntcXFxcbiAgICAgICAgLy8gICAgIGxldCBmbGFnID0gJ+KTiic7XFxcXG4gICAgICAgIC8vICAgICBpZih0eXBlb2YobmV3Q29uZmlnLmNvZGVzW2l0XSk9PT0nZnVuY3Rpb24nKXtcXFxcbiAgICAgICAgLy8gICAgICAgICBmbGFnID0gJ+KSvyc7XFxcXG4gICAgICAgIC8vICAgICB9ZWxzZSBpZih0eXBlb2YobmV3Q29uZmlnLmNvZGVzW2l0XSk9PT0ndW5kZWZpbmVkJyl7XFxcXG4gICAgICAgIC8vICAgICAgICAgZmxhZyA9ICcnO1xcXFxuICAgICAgICAvLyAgICAgfVxcXFxuICAgICAgICAvLyAgICAgcmV0dXJuIGZsYWcraXRcXFxcbiAgICAgICAgLy8gfSk7XFxcXG4gICAgfVxcXFxuICAgIC8vZmJhLmxvZyhKU09OLnN0cmluZ2lmeShteVNlbGVjdCkpO1xcXFxuXFxcXG4gICAgbGV0IG9wdGlvbnMgPSBbXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIG5hbWU6J+eIseWlh+iJuicsXFxcXG4gICAgICAgICAgICBpZDoncXknLFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MucXksXFxcXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjon6K6+572u54ix5aWH6Im6J1xcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOifkvJjphbcnLFxcXFxuICAgICAgICAgICAgaWQ6J3lrJyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnlrXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIG5hbWU6J+iFvuiurycsXFxcXG4gICAgICAgICAgICBpZDondHgnLFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MudHhcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgbmFtZTon6IqS5p6cJyxcXFxcbiAgICAgICAgICAgIGlkOidtZycsXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5tZ1xcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOiflk5Tlk6nlk5Tlk6knLFxcXFxuICAgICAgICAgICAgaWQ6J2JsJyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLmJsXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIG5hbWU6J+aQnOeLkCcsXFxcXG4gICAgICAgICAgICBpZDonc2gnLFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Muc2hcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgbmFtZTon6KW/55OcJyxcXFxcbiAgICAgICAgICAgIGlkOid4ZycsXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy54Z1xcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOifpmL/ph4wnLFxcXFxuICAgICAgICAgICAgaWQ6J2FsJyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLmFsXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIG5hbWU6J1BQVFYnLFxcXFxuICAgICAgICAgICAgaWQ6J3BwJyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnBwXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIG5hbWU6J+WSquWSlScsXFxcXG4gICAgICAgICAgICBpZDonbWknLFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MubWlcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgbmFtZTon5LmQ6KeGJyxcXFxcbiAgICAgICAgICAgIGlkOidsZScsXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5sZVxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOicxOTA1JyxcXFxcbiAgICAgICAgICAgIGlkOidvbmUnLFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Mub25lXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIG5hbWU6J+mjjuihjCcsXFxcXG4gICAgICAgICAgICBpZDonZnVuJyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLmZ1blxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOiflhbbku5YnLFxcXFxuICAgICAgICAgICAgaWQ6J290aCcsXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5vdGhcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgbmFtZTon5YWo5bGAJyxcXFxcbiAgICAgICAgICAgIGlkOidxanUnLFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MucWp1XFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIG5hbWU6J+aPkuS7ticsXFxcXG4gICAgICAgICAgICBpZDonY2onLFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MuY2pcXFxcbiAgICAgICAgfSxcXFxcbiAgICBdO1xcXFxuXFxcXG4gICAgZnVuY3Rpb24gRGlkKGlkKXtcXFxcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcXFxcbiAgICB9XFxcXG4gICAgZnVuY3Rpb24gZ2V0T3B0aW9uKGlkLHRpdGxlKSB7XFxcXG4gICAgICAgIHZhciBvYmogPSBEaWQoaWQpO1xcXFxuICAgICAgICBEaWQodGl0bGUpLnZhbHVlID0gb2JqLm9wdGlvbnNbb2JqLnNlbGVjdGVkSW5kZXhdLnRleHQ7XFxcXG4gICAgICAgIC8vIERpZCh0aXRsZSkudmFsdWUgPSBvYmoub3B0aW9uc1tvYmouc2VsZWN0ZWRJbmRleF0udGV4dC5yZXBsYWNlKC/ik4p84pK/L2csJycpO1xcXFxuICAgIH1cXFxcbiAgICBmdW5jdGlvbiByZXNldFNlbGVjdChpZCl7XFxcXG4gICAgICAgIERpZChpZCtcXFxcXFxcIlNlbGVjdFxcXFxcXFwiKS5vcHRpb25zLnNlbGVjdGVkSW5kZXggPSAtMTtcXFxcbiAgICB9XFxcXG5cXFxcbiAgICAvL+WHveaVsOmDqOWIhlxcXFxuXFxcXG4gICAgZnVuY3Rpb24gVG9hc3QobXNnLGR1cmF0aW9uKXtcXFxcbiAgICAgICAgZHVyYXRpb249aXNOYU4oZHVyYXRpb24pPzIwMDA6ZHVyYXRpb247XFxcXG4gICAgICAgIHZhciBtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XFxcXG4gICAgICAgIG0uaW5uZXJIVE1MID0gbXNnO1xcXFxuICAgICAgICBtLnN0eWxlLmNzc1RleHQ9XFxcXFxcXCJ3aWR0aDo0NSU7IG1pbi13aWR0aDoxNTBweDsgYmFja2dyb3VuZDojMzExOyBvcGFjaXR5OjAuNjsgaGVpZ2h0OmF1dG87bWluLWhlaWdodDogNDVweDsgY29sb3I6I2ZmZjsgbGluZS1oZWlnaHQ6NDVweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGJvcmRlci1yYWRpdXM6MTBweDsgcG9zaXRpb246Zml4ZWQ7IHRvcDo2MCU7IGxlZnQ6MjYlOyB6LWluZGV4Ojk5OTk5OTtcXFxcXFxcIjtcXFxcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtKTtcXFxcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcXFxcbiAgICAgICAgICAgIHZhciBkID0gMC41O1xcXFxuICAgICAgICAgICAgbS5zdHlsZS53ZWJraXRUcmFuc2l0aW9uID0gJy13ZWJraXQtdHJhbnNmb3JtICcgKyBkICsgJ3MgZWFzZS1pbiwgb3BhY2l0eSAnICsgZCArICdzIGVhc2UtaW4nO1xcXFxuICAgICAgICAgICAgbS5zdHlsZS5vcGFjaXR5ID0gJzAnO1xcXFxuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChtKSB9LCBkICogMTAwMCk7XFxcXG4gICAgICAgIH0sIGR1cmF0aW9uKTtcXFxcbiAgICB9XFxcXG5cXFxcbiAgICBmdW5jdGlvbiBvcGVuRG5QYWdlKCl7XFxcXG4gICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgICAgIHJ1bGU6IFxcXFxcXFwiPV5fXj1cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIue8lui+keino+aekFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3nvJbovpEjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBncm91cDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgLy9maW5kUnVsZTogXFxcXFxcXCJqczp0aGlzLmQ9W107JC5yZXF1aXJlKFxcXFxcXFxcXFxcXFxcXCJoaWtlcjovL3BhZ2UvUGFyc2VfRG4uanM/cnVsZT1NeUZpZWxk4bSw4oG/XFxcXFxcXFxcXFxcXFxcIikuZWRpdCgpO3NldFJlc3VsdChkKTtcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHByZVJ1bGU6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBleHRyYToge31cXFxcbiAgICAgICAgfSkpO1xcXFxuICAgIH1cXFxcbiAgICBmdW5jdGlvbiBvcGVuVGhlbWUoKXtcXFxcbiAgICAgICAgZmJhLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgcnVsZTogXFxcXFxcXCI9Xl9ePVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5Li76aKY566h55CGXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPeS4u+mimCNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGdyb3VwOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBwcmVSdWxlOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHt9XFxcXG4gICAgICAgIH0pKTtcXFxcbiAgICB9XFxcXG4gICAgZnVuY3Rpb24gb3Blbkp4TWFuYWdlKCl7XFxcXG4gICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgICAgIHJ1bGU6IFxcXFxcXFwiPV5fXj1cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuino+aekOmFjee9rueuoeeQhlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3op6PmnpAjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBncm91cDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgcHJlUnVsZTogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7fVxcXFxuICAgICAgICB9KSk7XFxcXG4gICAgfVxcXFxuICAgIGZ1bmN0aW9uIGNhbmNlbCgpe1xcXFxuICAgICAgICBpZighbXlTZXQpe1xcXFxuICAgICAgICAgICAgZmJhLndyaXRlRmlsZShvbGRSb3V0ZSwgSlNPTi5zdHJpbmdpZnkoc2V0dGluZ3MsIG51bGwsIDQpKTtcXFxcbiAgICAgICAgICAgIGZiYS5yZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICBmYmEuYmFjayhmYWxzZSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgZnVuY3Rpb24gY2xpY2ttZShtc2csZHVyYXRpb24sdGl0bGUpe1xcXFxuICAgICAgICB0cnl7XFxcXG4gICAgICAgICAgICBmb3IobGV0IGtleSBpbiBzZXR0aW5ncyl7XFxcXG4gICAgICAgICAgICAgICAgLy8gZmJhLmxvZyhEaWQoa2V5KSsnJytrZXkpO1xcXFxuICAgICAgICAgICAgICAgIHRyeXtcXFxcbiAgICAgICAgICAgICAgICAgICAgLy9zZXR0aW5nc1trZXldID0gRGlkKGtleSkudmFsdWUucmVwbGFjZSgv4pOKfOKSvy9nLCcnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3Nba2V5XSA9IERpZChrZXkpLnZhbHVlO1xcXFxuICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoXFxcXFxcXCLmnKrojrflj5bliLDoioLngrk6XFxcXFxcXCIra2V5K1xcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIrZS5tZXNzYWdlKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG5cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGlmKG15U2VsZWN0KXtcXFxcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKG5ld0NvbmZpZy5zZXR0aW5ncywgc2V0dGluZ3MpO1xcXFxuICAgICAgICAgICAgICAgIGZiYS53cml0ZUZpbGUobmV3Um91dGUsICQkJC5zdHJpbmdpZnkobmV3Q29uZmlnKSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBmYmEud3JpdGVGaWxlKG9sZFJvdXRlLCAkJCQuc3RyaW5naWZ5KHNldHRpbmdzKSk7XFxcXG4gICAgICAgICAgICBUb2FzdChtc2csZHVyYXRpb24pO1xcXFxuICAgICAgICAgICAgaWYodGl0bGU9PT1cXFxcXFxcIuWFs1xcXFxcXFwiKXtcXFxcbiAgICAgICAgICAgICAgICBmYmEuYmFjaygpO1xcXFxuICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgZmJhLnJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9Y2F0Y2goZSl7XFxcXG4gICAgICAgICAgICBhbGVydChlLm1lc3NhZ2UpXFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG5cXFxcbiAgICAvL2xldCB3aWR0aD13aW5kb3cuc2NyZWVuLmF2YWlsV2lkdGg7XFxcXG4gICAgLy9sZXQgd2lkdGhQeD13aWR0aC0zOTMrNTI7XFxcXG4gICAgLy9hbGVydChcXFxcXFxcIuW9k+WJjeWIhui+qOeOhzpcXFxcXFxcIit3aW5kb3cuc2NyZWVuLmF2YWlsV2lkdGgrXFxcXFxcXCIqXFxcXFxcXCIrd2luZG93LnNjcmVlbi5oZWlnaHQpO1xcXFxuICAgIHZhciB2ZXJpbmZvID0gW3tcXFxcbiAgICAgICAgaWQ6J2RuJyxcXFxcbiAgICAgICAgYXV0aG9yOifmlq3lv7UnLFxcXFxuICAgICAgICBhdmF0YXI6J2h0dHBzOi8vczMuYXgxeC5jb20vMjAyMS8wMi8yMi95N3diOU8uanBnJyxcXFxcbiAgICAgICAgb3B0aW9uOm9wZW5EblBhZ2UsXFxcXG4gICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgaWQ6J2R6JyxcXFxcbiAgICAgICAgICAgIGF1dGhvcjon6YGT6ZW/JyxcXFxcbiAgICAgICAgICAgIGF2YXRhcjonaHR0cDovL3ExLnFsb2dvLmNuL2c/Yj1xcSZuaz00MzQ4NTcwMDUmcz02NDAnLFxcXFxuICAgICAgICAgICAgb3B0aW9uOm9wZW5UaGVtZVxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBpZDonbG0nLFxcXFxuICAgICAgICAgICAgYXV0aG9yOiAn6JOd6I6TJyxcXFxcbiAgICAgICAgICAgIGF2YXRhcjogJ2h0dHA6Ly9xMS5xbG9nby5jbi9nP2I9cXEmbms9MjU3OTk0OTM3OCZzPTY0MCcsXFxcXG4gICAgICAgICAgICBvcHRpb246b3Blbkp4TWFuYWdlXFxcXG4gICAgICAgIH1cXFxcbiAgICBdO1xcXFxuXFxcXG4gICAgZnVuY3Rpb24gZG9PcHRpb24ob3B0aW9uX2lkKXtcXFxcbiAgICAgICAgbGV0IHZlciA9IHZlcmluZm8uZmlsdGVyKGl0PT5pdC5pZD09PW9wdGlvbl9pZClbMF07XFxcXG4gICAgICAgIHZlci5vcHRpb24oKTtcXFxcbiAgICB9XFxcXG5cXFxcbiAgICBjb25zdCBSZW5kZXJIdG1sQXBwID0ge1xcXFxuICAgICAgICBkYXRhKCkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIHtcXFxcbiAgICAgICAgICAgICAgICAvLyByYXdIdG1sOiAnPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjogcmVkXFxcXFxcXCI+6L+Z6YeM5Lya5pi+56S657qi6Imy77yBPC9zcGFuPicsXFxcXG4gICAgICAgICAgICAgICAgb3B0aW9uczpvcHRpb25zLFxcXFxuICAgICAgICAgICAgICAgIHZlcmluZm86dmVyaW5mbyxcXFxcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjpwbGFjZWhvbGRlcixcXFxcbiAgICAgICAgICAgICAgICB0aXBzOnRpcHMsXFxcXG4gICAgICAgICAgICAgICAgdGhlbWVzOnRoZW1lcyxcXFxcbiAgICAgICAgICAgICAgICBteVNlbGVjdDpteVNlbGVjdCxcXFxcbiAgICAgICAgICAgICAgICAvLyBjalNlbDpbJ+ivt+mAieaLqeaPkuS7tiAo5Y+q5L2c55SobGF6eVJ1bGUpJywnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcycsJ2hpa2VyOi8vZmlsZXMvcnVsZXMvZHpIb3VzZS9qcy9zcmNhdXRvLmpzJywnaGlrZXI6Ly9maWxlcy9ydWxlcy9qcy9QYXJzZS1WMl9Ebi5qcyddLFxcXFxuICAgICAgICAgICAgICAgIGNqU2VsOlsn6K+36YCJ5oup5o+S5Lu2ICjlj6rkvZznlKhsYXp5UnVsZSknLCdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJ10sXFxcXG4gICAgICAgICAgICAgICAgc2V0dGluZ3M6c2V0dGluZ3MsXFxcXG4gICAgICAgICAgICAgICAgc2hvd1RpcHM6ZmFsc2UsXFxcXG4gICAgICAgICAgICAgICAgLy93aWR0aFB4OndpZHRoUHhcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAgbWV0aG9kczp7XFxcXG4gICAgICAgICAgICAvLyBjaGFuZ2VWYWw6ZnVuY3Rpb24oZXZlbnQpe1xcXFxuICAgICAgICAgICAgLy8gICAgIGdldE9wdGlvbih0aGlzLmlkLHRoaXMubmFtZSk7XFxcXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5zZWxPcHRpb24gPSBldmVudC50YXJnZXQudmFsdWU7XFxcXG4gICAgICAgICAgICAvLyAgICAgYWxlcnQoXFxcXFxcXCLkvaDpgInkuK3kuoZcXFxcXFxcIitldmVudC50YXJnZXQudmFsdWUpO1xcXFxuICAgICAgICAgICAgLy8gfVxcXFxuICAgICAgICAgICAgZG9PcHRpb246ZG9PcHRpb25cXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICB0cnkge1xcXFxuICAgICAgICBjb25zdCBhcHA9VnVlLmNyZWF0ZUFwcChSZW5kZXJIdG1sQXBwKTtcXFxcbiAgICAgICAgYXBwLm1vdW50KCdib2R5Jyk7XFxcXG4gICAgfWNhdGNoIChlKSB7XFxcXG4gICAgICAgIGNvbnNvbGUubG9nKGUubWVzc2FnZSlcXFxcbiAgICB9XFxcXG5cXFxcbjwvc2NyaXB0PlxcXFxuXFxcXG48L2JvZHk+XFxcXG48L2h0bWw+XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiUGFyc2VfRG4uanNcXFwiLFxcXCJwYXRoXFxcIjpcXFwiUGFyc2VfRG4uanNcXFwiLFxcXCJydWxlXFxcIjpcXFwiLy89PT09PT09PT09PT3lhY3ll4XosIPnlKg9PT09PT09PT09PT1cXFxcbi8v77yN77yN77yNPV5fXj1cXFxcblxcXFxudmFyIHZlcnNpb24gPSAzLjQ5MTIxMjsvLzAzMDNcXFxcbnZhciB1cGRhdGVEYXRlID0gJzIwMjEvMTIvMTIvMTE6MTEnO1xcXFxudmFyIF9teVNldCA9IHtcXFxcbiAgICBxanU6ICfpu5jorqQnLFxcXFxuICAgIG90aDon6YGT6ZW/5LuT5bqT6YCa5YWNJyxcXFxcbiAgICBjamNhY2hlOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcycsXFxcXG4gICAgdGhlbWVjYWNoZTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvTXlUaGVtZS5qc29uJyxcXFxcbiAgICBqaWV4aWNhY2hlOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9NeUppZXhpLmpzb24nLFxcXFxuICAgIHg1Y2FjaGU6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmh0bWwnLFxcXFxuICAgIG9sZENvbmZpZzogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uJyxcXFxcbiAgICBja0xpbms6ICdodHRwczovL2NvZGUuYWxpeXVuLmNvbS9BSTk1Ny9IaWtlci9yYXcvbWFzdGVyL3YvJyxcXFxcbiAgICBjajogJ2h0dHBzOi8vY29kZS5hbGl5dW4uY29tL0FJOTU3L0hpa2VyL3Jhdy9tYXN0ZXIvdi9DbG91ZFBhcnNlLVYyX0RuLmpzJyxcXFxcbiAgICB4NVVybDogJ2h0dHBzOi8vY29kZS5hbGl5dW4uY29tL0FJOTU3L0hpa2VyL3Jhdy9tYXN0ZXIvdi9QYXJzZV9Ebi5odG1sJyxcXFxcbiAgICBwYXJzZVJvdXRlOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nLFxcXFxuICAgIHg1Um91dGU6ICdmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9jYWNoZS9QYXJzZV9Ebi5odG1sJ1xcXFxufTtcXFxcbnZhciBNeVBhcnNlUyA9IHt9O1xcXFxudmFyIG15U2V0ID0gX215U2V0O1xcXFxuaWYgKGZpbGVFeGlzdChfbXlTZXQucGFyc2VSb3V0ZSkpIHtcXFxcbiAgICBldmFsKCd2YXIgcGFyc2VGaWxlID0nICsgZmV0Y2goX215U2V0LnBhcnNlUm91dGUpKTtcXFxcbiAgICBNeVBhcnNlUyA9IHBhcnNlRmlsZS5jb2RlcztcXFxcbiAgICBteVNldCA9IHBhcnNlRmlsZS5zZXR0aW5ncztcXFxcbn1cXFxcbnZhciBwYXJzZVRpdGxlID0gW1xcXFxuICAgIFxcXFxcXFwieXVuMTcxN1xcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiUGFuR3VcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcIkZ1WGluZ1xcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiaXNWaWRlb1xcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiZGVmYXVsdFBhcnNlXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCLpgZPplb/ku5PlupPpgJrlhY1cXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImRlZmF1bHRQYXJzZVdlYlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiT0vop6PmnpBcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcIk0zVThUVlxcXFxcXFwiLFxcXFxuXTtcXFxcbi8v77yN77yN77yNPV5fXj1cXFxcblxcXFxuLy/mjqXlj6Porr7nva4uXFxcXG5cXFxcbnZhciBzZXRVcmwgPSBcXFxcXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3orr7nva4jbm9SZWNvcmRIaXN0b3J5I1xcXFxcXFwiO1xcXFxudmFyIHNldF9zd2l0Y2ggPSBzZXRVcmw7XFxcXG52YXIgbGF6eSA9IGBldmFsKCd2YXIgY29uZmlnID0nICsgZmV0Y2goZ2V0VmFyKCdvbGRDb25maWcnKSkpO2V2YWwoZmV0Y2goY29uZmlnLmNqKSk7YXl0bVBhcnNlKGlucHV0KWA7XFxcXG5cXFxcbi8vdmFyIHBhcndpeCA9IGB2YXIgeXVybD0naHR0cHM6Ly9kYWlsaS5tYXlpeGlvbmdkaS5jbi8/dXJsPSc7UmVmZXJlcic6ICdodHRwczovL3d3dy5tYXlpeGlvbmdkaS5jbi95cz9pZD0nOydodHRwczovL2RhaWxpLm1heWl4aW9uZ2RpLmNuL2FwaS5waHAnLCAnUmVmZXJlcic6J2h0dHBzOi8vZGFpbGkubWF5aXhpb25nZGkuY24nO1xcXFxuLy8g5YWo5rCRaHR0cHM6Ly9wY3ZpZGVvYWxpeXVuLnRpYW5zaGFuZ3JlbmppYW4ubWd0di5jb20uODh3dW1hLmNvbS8/dXJsPVxcXFxuXFxcXG4vL++8je+8je+8jeWkhyDnlKjvvI3vvI3vvI1cXFxcbi8qXFxcXG4gKiDlvbHop4blt6XlnLrvvJogaHR0cHM6Ly95c2djLmNjL1xcXFxuICog5rGf5rmWOiA1NTXnlLXlvbEgaHR0cHM6Ly93d3cuNTU1ZHkyLmNvbS9waG9uZS5odG1sIO+9nCAxN+eciyBodHRwOi8vMTdrYW55eS5jbi8gaHR0cDovL2poamlleGkuMzB2ci5jbi8/dXJsPSDvvZwgaHR0cDovL2FwaS5tYWl6aW1hbGwuY29tL2luZGV4LnBocD91cmw9XFxcXG4gKiDmsZ/muZY6IGh0dHA6Ly93d3cudGlhbnNodXl1bi5uZXQvaW5kZXgucGhwL3ZvZC9wbGF5L2lkLzQ0ODM3Ny9zaWQvMS9uaWQvMS5odG1sXFxcXG4gKiDmsZ/muZYyOiBodHRwOi8vOThoeWsuY24vaW5kZXgucGhwL3ZvZC9wbGF5L2lkLzcyODQxL3NpZC8xL25pZC8xLmh0bWxcXFxcbiAqIOS6uuS6uui/tzogaHR0cHM6Ly92aXAuc3Vzb3UudHYvcGxheWVyLz91cmw9IO+9nCBodHRwczovL3d3dy5tb21kbS5jYy9cXFxcbiAqXFxcXG4gKiB3dWlnZW46IGh0dHBzOi8vd3d3LjVpZ2VuLmNvbS9kbXBsYXllci9wbGF5ZXIvP3VybD1cXFxcbiAqIOW5sumlrSjkurrkurrov7cpOiBodHRwczovL2p4Lnp1aS5jbS8/dXJsPVxcXFxuICogaHR0cHM6Ly8yLjY2bW92aWUudG9wL3BsYXllci8/dXJsPVxcXFxuICpcXFxcbiAqL1xcXFxuXFxcXG5cXFxcbnZhciB0b29scyA9IHtcXFxcbiAgICBNRDU6IGZ1bmN0aW9uKGRhdGEpIHtcXFxcbiAgICAgICAgZXZhbChnZXRDcnlwdG9KUygpKTtcXFxcbiAgICAgICAgcmV0dXJuIENyeXB0b0pTLk1ENShkYXRhKS50b1N0cmluZyhDcnlwdG9KUy5lbmMuSGV4KTtcXFxcbiAgICB9LFxcXFxuICAgIEFFUzogZnVuY3Rpb24odGV4dCwga2V5LCBpdiwgaXNFbmNyeXB0KSB7XFxcXG4gICAgICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSk7XFxcXG4gICAgICAgIHZhciBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShrZXkpO1xcXFxuICAgICAgICB2YXIgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShpdik7XFxcXG4gICAgICAgIGlmIChpc0VuY3J5cHQpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBDcnlwdG9KUy5BRVMuZW5jcnlwdCh0ZXh0LCBrZXksIHtcXFxcbiAgICAgICAgICAgICAgICBpdjogaXYsXFxcXG4gICAgICAgICAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsXFxcXG4gICAgICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxcXG4gICAgICAgICAgICB9KS50b1N0cmluZygpO1xcXFxuICAgICAgICB9O1xcXFxuICAgICAgICByZXR1cm4gQ3J5cHRvSlMuQUVTLmRlY3J5cHQodGV4dCwga2V5LCB7XFxcXG4gICAgICAgICAgICBpdjogaXYsXFxcXG4gICAgICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcXFxcbiAgICAgICAgfSkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpO1xcXFxuICAgIH0sXFxcXG4gICAgLy9hc2NpaVxcXFxuICAgIG5leHRDaGFyYWN0ZXI6IGZ1bmN0aW9uKGFzY2lpVmFsdWUsIGspIHtcXFxcbiAgICAgICAgdmFyIHMgPSBhc2NpaVZhbHVlO1xcXFxuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShzICsgayk7XFxcXG4gICAgfSxcXFxcbiAgICAvL+WHr+aSklxcXFxuICAgIGNhZXNhckNpcGhlcjogZnVuY3Rpb24oc3RyaW5nVmFsdWUsIGspIHtcXFxcbiAgICAgICAgdmFyIG5ld1N0cmluZyA9IFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nVmFsdWUubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgIG5ld1N0cmluZyArPSB0aGlzLm5leHRDaGFyYWN0ZXIoc3RyaW5nVmFsdWVbaV0uY2hhckNvZGVBdCgpLCBrKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICByZXR1cm4gbmV3U3RyaW5nO1xcXFxuICAgIH0sXFxcXG4gICAgbm93RGF0ZTogZnVuY3Rpb24oKSB7XFxcXG4gICAgICAgIHZhciBkYXRlMSA9IG5ldyBEYXRlKCk7XFxcXG4gICAgICAgIHZhciBkYXRlU3RyID0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICAgICAgaWYgKGRhdGUxKSB7XFxcXG4gICAgICAgICAgICBkYXRlU3RyID0gZGF0ZTEuZ2V0RnVsbFllYXIoKTtcXFxcbiAgICAgICAgICAgIHZhciBtb250aCA9IGRhdGUxLmdldE1vbnRoKCkgKyAxO1xcXFxuICAgICAgICAgICAgdmFyIGRheSA9IGRhdGUxLmdldERhdGUoKTtcXFxcbiAgICAgICAgICAgIGlmIChtb250aCA8IDEwKSB7XFxcXG4gICAgICAgICAgICAgICAgZGF0ZVN0ciArPSBcXFxcXFxcIi0wXFxcXFxcXCIgKyBtb250aDtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgZGF0ZVN0ciArPSBcXFxcXFxcIi1cXFxcXFxcIiArIG1vbnRoO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaWYgKGRheSA8IDEwKSB7XFxcXG4gICAgICAgICAgICAgICAgZGF0ZVN0ciArPSBcXFxcXFxcIi0wXFxcXFxcXCIgKyBkYXk7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIGRhdGVTdHIgKz0gXFxcXFxcXCItXFxcXFxcXCIgKyBkYXk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIGRhdGVTdHI7XFxcXG4gICAgfSxcXFxcbiAgICB0b0pTT046IGZ1bmN0aW9uKGpzb24pIHtcXFxcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGpzb24sIChrZXksIHZhbHVlKSA9PiB7XFxcXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9LCA0KTtcXFxcbiAgICB9LFxcXFxuICAgIHRvVk51bTogZnVuY3Rpb24oYSkge1xcXFxuICAgICAgICB2YXIgYSA9IGEudG9TdHJpbmcoKTtcXFxcbiAgICAgICAgdmFyIGMgPSBhLnNwbGl0KCcuJyk7XFxcXG4gICAgICAgIHZhciBudW1fcGxhY2UgPSBbXFxcXFxcXCJcXFxcXFxcIiwgXFxcXFxcXCIwXFxcXFxcXCIsIFxcXFxcXFwiMDBcXFxcXFxcIiwgXFxcXFxcXCIwMDBcXFxcXFxcIiwgXFxcXFxcXCIwMDAwXFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgciA9IG51bV9wbGFjZS5yZXZlcnNlKCk7XFxcXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYy5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgdmFyIGxlbiA9IGNbaV0ubGVuZ3RoO1xcXFxuICAgICAgICAgICAgY1tpXSA9IHJbbGVuXSArIGNbaV07XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgdmFyIHJlcyA9IGMuam9pbignJyk7XFxcXG4gICAgICAgIHJldHVybiByZXM7XFxcXG4gICAgfSxcXFxcbiAgICBjcHJWZXJzaW9uOiBmdW5jdGlvbihhLCBiKSB7XFxcXG4gICAgICAgIHZhciBfYSA9IHBhcnNlSW50KHRoaXMudG9WTnVtKGEpKSxcXFxcbiAgICAgICAgICAgIF9iID0gcGFyc2VJbnQodGhpcy50b1ZOdW0oYikpO1xcXFxuICAgICAgICBiID0gaXNOYU4oX2IpID8gdmVyc2lvbiA6IGI7XFxcXG4gICAgICAgIGlmIChfYSA+IF9iKSB7XFxcXG4gICAgICAgICAgICBwdXRWYXIoJ2p4TmV3VicsICfmnInmlrDniYjmnKw6ICcgKyBhKTtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGNsZWFyVmFyKCdqeE5ld1YnKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBwdXRWYXIoJ2p4T2xkVicsIGIpO1xcXFxuICAgIH0sXFxcXG4gICAgYXRvYjpmdW5jdGlvbiAoc3RyKXtcXFxcbiAgICAgICAgcmVxdWlyZSgnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9qcy1iYXNlNjRAMy43LjIvYmFzZTY0Lm1pbi5qcycpO1xcXFxuICAgICAgICByZXR1cm4gQmFzZTY0LmF0b2Ioc3RyKTtcXFxcbiAgICB9LFxcXFxuICAgIGJ0b2E6ZnVuY3Rpb24gKHN0cil7XFxcXG4gICAgICAgIHJlcXVpcmUoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vanMtYmFzZTY0QDMuNy4yL2Jhc2U2NC5taW4uanMnKTtcXFxcbiAgICAgICAgcmV0dXJuIEJhc2U2NC5idG9hKHN0cik7XFxcXG4gICAgfSxcXFxcbiAgICDmsZ/muZY6ZnVuY3Rpb24gKGNvbmZpZ191cmwsIHRlbSwgdG9rZW4pIHtcXFxcbiAgICAgICAgcmVxdWlyZSgnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9qcy1iYXNlNjRAMy43LjIvYmFzZTY0Lm1pbi5qcycpO1xcXFxuICAgICAgICB2YXIgYXRvYj1CYXNlNjQuYXRvYjtcXFxcbiAgICAgICAgdmFyIGJ0b2E9QmFzZTY0LmJ0b2E7XFxcXG4gICAgICAgIHZhciBjb25maWdfYSA9IHRlbSB8fCBcXFxcXFxcImZmc2lybGxxXFxcXFxcXCI7XFxcXG4gICAgICAgIHZhciB2aWRlbyA9ICcnO1xcXFxuICAgICAgICB2YXIgdGVtID0gW107XFxcXG4gICAgICAgIHZhciBjb25maWdfYXJyeSA9IFtdO1xcXFxuICAgICAgICB2YXIgY29uZmlnX2IgPSBjb25maWdfYS5sZW5ndGg7XFxcXG4gICAgICAgIGlmICh0b2tlbiA9PSAweDEpIHtcXFxcbiAgICAgICAgICAgIHZhciBjb25maWdfdXJsID0gYXRvYihjb25maWdfdXJsKTtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHZhciBjb25maWdfdXJsID0gZW5jb2RlVVJJQ29tcG9uZW50KGNvbmZpZ191cmwpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHZhciBjb25maWdfYyA9IGNvbmZpZ191cmwubGVuZ3RoO1xcXFxuICAgICAgICBmb3IgKGkgPSAweDA7IGkgPCAweDEwMDsgaSsrKSB7XFxcXG4gICAgICAgICAgICB0ZW1baV0gPSBjb25maWdfYVtpICUgY29uZmlnX2JdLmNoYXJDb2RlQXQoKTtcXFxcbiAgICAgICAgICAgIGNvbmZpZ19hcnJ5W2ldID0gaTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBmb3IgKGogPSBpID0gMHgwOyBpIDwgMHgxMDA7IGkrKykge1xcXFxuICAgICAgICAgICAgaiA9IChqICsgY29uZmlnX2FycnlbaV0gKyB0ZW1baV0pICUgMHgxMDA7XFxcXG4gICAgICAgICAgICB0bXAgPSBjb25maWdfYXJyeVtpXTtcXFxcbiAgICAgICAgICAgIGNvbmZpZ19hcnJ5W2ldID0gY29uZmlnX2Fycnlbal07XFxcXG4gICAgICAgICAgICBjb25maWdfYXJyeVtqXSA9IHRtcDtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBmb3IgKGEgPSBqID0gaSA9IDB4MDsgaSA8IGNvbmZpZ19jOyBpKyspIHtcXFxcbiAgICAgICAgICAgIGEgPSAoYSArIDB4MSkgJSAweDEwMDtcXFxcbiAgICAgICAgICAgIGogPSAoaiArIGNvbmZpZ19hcnJ5W2FdKSAlIDB4MTAwO1xcXFxuICAgICAgICAgICAgdG1wID0gY29uZmlnX2FycnlbYV07XFxcXG4gICAgICAgICAgICBjb25maWdfYXJyeVthXSA9IGNvbmZpZ19hcnJ5W2pdO1xcXFxuICAgICAgICAgICAgY29uZmlnX2Fycnlbal0gPSB0bXA7XFxcXG4gICAgICAgICAgICBrID0gY29uZmlnX2FycnlbKGNvbmZpZ19hcnJ5W2FdICsgY29uZmlnX2Fycnlbal0pICUgMHgxMDBdO1xcXFxuICAgICAgICAgICAgdmlkZW8gKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb25maWdfdXJsW2ldLmNoYXJDb2RlQXQoKSBeIGspO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGxvZyhkZWNvZGVVUklDb21wb25lbnQodmlkZW8pKTtcXFxcbiAgICAgICAgaWYgKHRva2VuID09IDB4MSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh2aWRlbyk7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gYnRvYSh2aWRlbyk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG59O1xcXFxuaWYgKGdldFZhcihcXFxcXFxcImp4T2xkVlxcXFxcXFwiLCBcXFxcXFxcIjBcXFxcXFxcIikgIT0gdmVyc2lvbikge1xcXFxuICAgIHB1dFZhcignY2pDYWNoZScsIF9teVNldC5jamNhY2hlKTtcXFxcbiAgICBwdXRWYXIoJ3g1Q2FjaGUnLCBfbXlTZXQueDVDYWNoZSk7XFxcXG4gICAgcHV0VmFyKCdvbGRDb25maWcnLCBfbXlTZXQub2xkQ29uZmlnKTtcXFxcbiAgICBwdXRWYXIoJ3BhcnNlUm91dGUnLCBfbXlTZXQucGFyc2VSb3V0ZSk7XFxcXG4gICAgbGV0IGp4TmV3ViA9IGZldGNoKCdodHRwczovL2dpdGVlLmNvbS9EdWFuLU5pYW4vRG4vcmF3L21hc3Rlci9oaWtlcnZpZXcvUGFyc2VWZXJzaW9uLnR4dCcpLFxcXFxuICAgICAgICBqeE9sZFYgPSAoZmV0Y2goX215U2V0LmNqY2FjaGUpLnNwbGl0KCd2ZXJzaW9uID0gXFxcXFxcXCInKVsxXSArICcnKS5zcGxpdCgnXFxcXFxcXCInKVswXTtcXFxcbiAgICB0b29scy5jcHJWZXJzaW9uKGp4TmV3ViwganhPbGRWKTtcXFxcbn1cXFxcblxcXFxudmFyIFBhcnNlUyA9IHt9O1xcXFxudmFyIG9yaWdpbmFsUGFyc2VTID0ge1xcXFxuICAgIC8vIHVwZGF0ZURhdGU6IHVwZGF0ZURhdGUsXFxcXG4gICAgcGFyc2VMYzonaHR0cHM6Ly9jb2RlLmFsaXl1bi5jb20vQUk5NTcvSGlrZXIvcmF3L21hc3Rlci9wL3BhcnNlTGMuanMnLFxcXFxuICAgIENpdHlJUDogJ2h0dHA6Ly9wdi5zb2h1LmNvbS9jaXR5anNvbicsXFxcXG4gICAgcGNVQTogJ1VzZXItQWdlbnRATW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMFxcXFxcXFxc77ybXFxcXFxcXFzvvJsgV09XNjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS80OS4wLjI2MjMuODcgU2FmYXJpLzUzNy4zNicsXFxcXG4gICAgY2FjaGVNM3U4OiBmdW5jdGlvbih2VXJsLCByZWYpIHtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIHZhciBtM3U4ID0gZmV0Y2godlVybCwge30pO1xcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL3ZpZGVvcy5tM3U4JywgbTN1OCk7XFxcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxcXG4gICAgICAgIHJldHVybiAnZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvY2FjaGUvdmlkZW9zLm0zdTgjJztcXFxcbiAgICB9LFxcXFxuICAgIGlzVmlkZW86ZnVuY3Rpb24ocGxheVVybCl7XFxcXG4gICAgICAgIGNvbnN0IHtpc1ZpZGVvfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2dsb2JhbFBhcnNlP3J1bGU96YGT6ZW/5LuT5bqTUHJvJyk7XFxcXG4gICAgICAgIHJldHVybiBpc1ZpZGVvKHBsYXlVcmwpXFxcXG4gICAgfSxcXFxcbiAgICBkZWZhdWx0UGFyc2U6IGZ1bmN0aW9uKHVybCx0aW1lb3V0KSB7XFxcXG4gICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlV2ViKHVybCx0aW1lb3V0KTtcXFxcbiAgICB9LFxcXFxuICAgIGRlZmF1bHRQYXJzZVdlYjogZnVuY3Rpb24ocGxheVVybCx0aW1lb3V0LGV4dHJhKSB7XFxcXG4gICAgICAgIC8vIGxvZygn5Lyg5YWlZGVmYXVsdFBhcnNlV2Vi55qE6LaF5pe2OicrdGltZW91dCk7XFxcXG4gICAgICAgIHRpbWVvdXQgPSBwYXJzZUludCh0aW1lb3V0KXx8cGFyc2VJbnQoZ2V0VmFyKCdkcC5qeFRpbWVvdXQnLCc1MDAwJykpfHw1MDAwO1xcXFxuICAgICAgICBleHRyYSA9IGV4dHJhfHx7fTtcXFxcbiAgICAgICAgbGV0IHBsYXlVcmxMaXN0ID0gZXh0cmEucGxheVVybExpc3R8fFtdO1xcXFxuICAgICAgICBpZih0eXBlb2YocGxheVVybExpc3QpPT09J29iamVjdCcmJnBsYXlVcmxMaXN0Lmxlbmd0aD4wKXtcXFxcbiAgICAgICAgICAgIHBsYXlVcmxMaXN0LnVuc2hpZnQocGxheVVybCk7XFxcXG4gICAgICAgICAgICBsZXQgcGxheVVybHM9cGxheVVybExpc3Quc2xpY2UoMCw0KTtcXFxcbiAgICAgICAgICAgIGxldCBuYW1lcz1leHRyYS5uYW1lTGlzdC5zbGljZSgwLDQpO1xcXFxuICAgICAgICAgICAgLy8gbG9nKCflvIDlp4vmibnph4/op6PmnpAo5bey5Y676YeNLOWPquWPluWJjTPkuKrlpIfog47vvIzliqDpgZPplb/nvqQ6NDg2NzIyMzI46I635Y+W5pyA5paw6a2U5pat5Yqo5oCBKTonK25hbWVzKTtcXFxcbiAgICAgICAgICAgIHBsYXlVcmxzPXBsYXlVcmxzLm1hcCgoaXQsaWQpPT5pdCtcXFxcXFxcIjtcXFxcXFxcIituYW1lc1tpZF0pO1xcXFxuICAgICAgICAgICAgLy9sb2cocGxheVVybHMpO1xcXFxuICAgICAgICAgICAgY29uc3Qge0xhenlQYXJzZUZhc3R9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZ2xvYmFsUGFyc2U/cnVsZT3pgZPplb/ku5PlupNQcm8nKTtcXFxcbiAgICAgICAgICAgIGxldCByZXQgPSBMYXp5UGFyc2VGYXN0KHBsYXlVcmxzLHRpbWVvdXQsdGltZW91dCk7XFxcXG4gICAgICAgICAgICBpZih0eXBlb2YocmV0KT09PSdvYmplY3QnJiZyZXQubGVuZ3RoPjApe1xcXFxuICAgICAgICAgICAgICAgIC8vcmV0dXJuIHJldFswXVxcXFxuICAgICAgICAgICAgICAgIC8vbG9nKHJldCk7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHYgPSBnZXRBcHBWZXJzaW9uKCk7XFxcXG4gICAgICAgICAgICAgICAgaWYocGFyc2VJbnQodik+PTIxOTQmJnJldC5sZW5ndGg+MSl7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cmxzID0gQXJyYXkuZnJvbShuZXcgU2V0KHJldCkpO1xcXFxuICAgICAgICAgICAgICAgICAgICBuYW1lcz11cmxzLm1hcCgoaXQsaWQpPT5pdC5zcGxpdChcXFxcXFxcIuKYhVxcXFxcXFwiKS5sZW5ndGg+MT9pdC5zcGxpdChcXFxcXFxcIuKYhVxcXFxcXFwiKVsxXTpcXFxcXFxcIue6v+i3rzpcXFxcXFxcIitwYXJzZUludChpZCsxKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHVybHM9dXJscy5tYXAoaXQ9Pml0LnNwbGl0KFxcXFxcXFwi4piFXFxcXFxcXCIpWzBdKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhlYWRlcnMgPSB1cmxzLm1hcCgoaXQpPT57XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZighLzsvLnRlc3QoaXQpfHxpdC5zcGxpdCgnOycpLmxlbmd0aDwyKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge31cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBoZWFkID0gaXQuc3BsaXQoJzsnKVsxXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighL0AvLnRlc3QoaGVhZCl8fCEve3x9Ly50ZXN0KGhlYWQpKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQ9aGVhZC5zcGxpdChcXFxcXFxcIntcXFxcXFxcIilbMV0uc3BsaXQoXFxcXFxcXCJ9XFxcXFxcXCIpWzBdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaGVhZCA9IGhlYWQucmVwbGFjZSgve3x9L2csJycpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgPSBoZWFkLnNwbGl0KCcmJicpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmogPSB7fTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gaGVhZCl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSBoZWFkW2ldLnNwbGl0KCdAJylbMF07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGhlYWRbaV0uc3BsaXQoJ0AnKVsxXS5yZXBsYWNlKC87Lywn77yb77ybJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHVybHMgPSB1cmxzLm1hcCgoaXQpPT57XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdHVybD1pdC5zcGxpdCgnOycpWzBdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXQuaW5jbHVkZXMoXFxcXFxcXCIjaXNWaWRlbz10cnVlI1xcXFxcXFwiKSYmIXR1cmwuaW5jbHVkZXMoXFxcXFxcXCIjaXNWaWRlbz10cnVlI1xcXFxcXFwiKSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVybCs9XFxcXFxcXCIjaXNWaWRlbz10cnVlI1xcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR1cmxcXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7dXJsczp1cmxzLGhlYWRlcnM6aGVhZGVycyxuYW1lczpuYW1lc30pO1xcXFxuICAgICAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0WzBdLnNwbGl0KFxcXFxcXFwi4piFXFxcXFxcXCIpWzBdXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldFxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgIGNvbnN0IHtsYXp5UGFyc2V9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZ2xvYmFsUGFyc2U/cnVsZT3pgZPplb/ku5PlupNQcm8nKTtcXFxcbiAgICAgICAgICAgIGxldCB4NVBsYXk9bGF6eVBhcnNlKHBsYXlVcmwsdGltZW91dCk7XFxcXG4gICAgICAgICAgICBpZih0eXBlb2YoeDVQbGF5KT09XFxcXFxcXCJ1bmRlZmluZWRcXFxcXFxcInx8IXg1UGxheSl7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/pgZPplb/ku5PlupPop6PmnpDlpLHotKVcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgbGV0IHRpcHM9L3g1UnVsZXx3ZWJSdWxlLy50ZXN0KHg1UGxheSk/XFxcXFxcXCJ4NS93ZWLlhY3ll4XlvIDlp4tcXFxcXFxcIjpcXFxcXFxcIuaegemAn+WFjeWXheaOouWujOavle+8jOWcsOWdgDpcXFxcXFxcIisoL15odHRwLy50ZXN0KHg1UGxheSk/eDVQbGF5OifpnZ7mraPluLjpk77mjqUnKTtcXFxcbiAgICAgICAgICAgIGxvZyh0aXBzKTtcXFxcbiAgICAgICAgICAgIHJldHVybiB4NVBsYXk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LFxcXFxuICAgIFxcXFxcXFwibWFvc3NcXFxcXFxcIjpcXFxcbiAgICAgICAgZnVuY3Rpb24gKGp4dXJsLCByZWYsIGtleSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMu54yrKGp4dXJsLCByZWYsIGtleSlcXFxcbiAgICAgICAgfSxcXFxcbiAgICDlhY3ll4U6ZnVuY3Rpb24odmlwVXJsLGspe1xcXFxuICAgICAgICBrPWt8fFxcXFxcXFwidXJsXFxcXFxcXCI7XFxcXG4gICAgICAgIHRyeXtcXFxcbiAgICAgICAgICAgIGxldCByZWFsVXJsPUpTT04ucGFyc2UoZmV0Y2godmlwVXJsKSlba107XFxcXG4gICAgICAgICAgICBpZihyZWFsVXJsLnN0YXJ0c1dpdGgoJy8nKSl7XFxcXG4gICAgICAgICAgICAgICAgcmVhbFVybCA9ICdodHRwczovLycrcmVhbFVybDtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzVmlkZW8ocmVhbFVybCl8fFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgICAgIH1jYXRjaChlKXtcXFxcbiAgICAgICAgICAgIC8vbG9nKGUubWVzc2FnZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJcXFxcXFxcIlxcXFxuICAgICAgICB9XFxcXG4gICAgfSxcXFxcbiAgICBYNTpmdW5jdGlvbih2aXBVcmwscmVmKXsvLyBodHRwczovL2FwaS41Mnd5Yi5jb20vd2ViY2xvdWQvP3Y9aHR0cDovL3ZpcC4xOTA1LmNvbS9wbGF5LzY5MTk0MC5zaHRtbCBodHRwOi8vd3d3LmNkY2VyLm5ldC9cXFxcbiAgICAgICAgbGV0IF94NSA9ICQudG9TdHJpbmcoKHZpcFVybCkgPT4ge1xcXFxuICAgICAgICAgICAgaWYoIWxvY2F0aW9uLmhyZWYuaW5jbHVkZXModmlwVXJsKSl7XFxcXG4gICAgICAgICAgICAgICAgbG9jYXRpb24uaHJlZiA9IHZpcFVybDtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGlmKHdpbmRvdy5jb3VudCA9PSBudWxsKXtcXFxcbiAgICAgICAgICAgICAgICB3aW5kb3cuY291bnQ9MTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHdpbmRvdy5jb3VudCsrO1xcXFxuICAgICAgICAgICAgaWYoIHdpbmRvdy5jb3VudCA+PSAyMCl7XFxcXG4gICAgICAgICAgICAgICAgZmJhLmxvZyhcXFxcXFxcIuacquiOt+WPluWIsOi1hOa6kOWcsOWdgO+8jOi3s+WIsOino+aekOmhtVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gdmlwVXJsXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB2YXIgdXJscyA9IF9nZXRVcmxzKCk7XFxcXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIHVybHMpIHtcXFxcbiAgICAgICAgICAgICAgICBpZiAoIS9wbGF5bTN1OHxtM3U4XFxcXFxcXFwudHYvLnRlc3QodXJsc1tpXSkgJiYgdXJsc1tpXS5tYXRjaCgvXFxcXFxcXFwubXAzfFxcXFxcXFxcLm1wNHxcXFxcXFxcXC5tM3U4fFxcXFxcXFxcLmZsdi8pKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGZiYS5sb2codXJsc1tpXSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmxzW2ldXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9LHZpcFVybCk7XFxcXG4gICAgICAgIGxldCBwbGF5VXJsID0gcmVmP3JlZjp2aXBVcmw7XFxcXG4gICAgICAgIGxldCB4NVVybCA9ICd3ZWJSdWxlOi8vJytwbGF5VXJsKyAnQCcgK194NTtcXFxcbiAgICAgICAgc2hvd0xvYWRpbmcoJ+mtlOaWrS5qc+WXheaOouS4rS4uLicpO1xcXFxuICAgICAgICByZXR1cm4geDVVcmxcXFxcbiAgICB9LFxcXFxuICAgICfpgZPplb8nOmZ1bmN0aW9uICh2aXBVcmwpe1xcXFxuICAgICAgICBldmFsUHJpdmF0ZUpTKCd6U1d2ZStlZUE2aUwrZjJmR1RJKzFwUjhqbkxkMFNpeVY2eXZnY1BNV3dCTVA1YVlwcWhURmJJU3hudmhiMGJkNVZnaXp5VU1IZTRkbXNuR2hXTEJrcWZiNUhmTmJJVzRNQk14ekxwUC85VGpOVDhTSVFBZmpkVGo0UDhvWDM1ZWtLTnZHVnhEb2x5ZmNZcnBvS3dOb1E9PScpO1xcXFxuICAgICAgICByZXR1cm4gdGhpcy7lhY3ll4UodmlwVXJsKycmc2VjcmV0PScrc2VjcmV0KVxcXFxuICAgIH0sXFxcXG4gICAgJ+eMqyc6ZnVuY3Rpb24gKGp4dXJsLCByZWYsIGtleSkge1xcXFxuICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgZ2V0VmlkZW9JbmZvID0gZnVuY3Rpb24gKHRleHQpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvb2xzLkFFUyh0ZXh0LCBrZXksIGl2KTtcXFxcbiAgICAgICAgICAgICAgICB9O1xcXFxuICAgICAgICAgICAgICAgIGxldCBoZWFkZXJzID0ge2hlYWRlcnM6IHtcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogcmVmfHwnJ319O1xcXFxuICAgICAgICAgICAgICAgIGtleSA9IGtleSA9PSB1bmRlZmluZWQgPyBcXFxcXFxcImR2eVlSUWxuUFJDTWRRU2VcXFxcXFxcIiA6IGtleTtcXFxcbiAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IHJlZj9yZXF1ZXN0KGp4dXJsLCBoZWFkZXJzKTpyZXF1ZXN0KGp4dXJsKTtcXFxcbiAgICAgICAgICAgICAgICBpZiAoLyZidHdhZj0vLnRlc3QoaHRtbCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaHRtbCA9IHJlcXVlc3Qoanh1cmwgKyBcXFxcXFxcIiZidHdhZlxcXFxcXFwiICsgaHRtbC5tYXRjaCgvJmJ0d2FmKC4qPylcXFxcXFxcIi8pWzFdLCBoZWFkZXJzKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgdmFyIGl2ID0gaHRtbC5zcGxpdChcXFxcXFxcIl90b2tlbiA9IFxcXFxcXFxcXFxcXFxcXCJcXFxcXFxcIilbMV0uc3BsaXQoXFxcXFxcXCJcXFxcXFxcXFxcXFxcXFwiXFxcXFxcXCIpWzBdO1xcXFxuICAgICAgICAgICAgICAgIGV2YWwoaHRtbC5tYXRjaCgvdmFyIGNvbmZpZyA9IHtbXFxcXFxcXFxzXFxcXFxcXFxTXSo/fS8pWzBdICsgXFxcXFxcXCJcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgaWYgKCEvXmh0dHAvLnRlc3QoY29uZmlnLnVybCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLnVybCA9IGRlY29kZVVSSUNvbXBvbmVudCh0b29scy5BRVMoY29uZmlnLnVybCwga2V5LCBpdikpO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLnVybDtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgfSxcXFxcbiAgICBMTFE6IGZ1bmN0aW9uKGp4dXJsKSB7XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICB2YXIgYXBpID0ganh1cmwuc3BsaXQoJz91cmw9JylbMF0gKyBcXFxcXFxcImFwaS5waHBcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIHZhciBiNjRpZCA9IGJhc2U2NEVuY29kZShqeHVybC5zcGxpdCgndXJsPScpWzFdKTtcXFxcbiAgICAgICAgICAgIHZhciBwYXJzZWlkID0gdG9vbHMuY2Flc2FyQ2lwaGVyKGI2NGlkLCAtMSk7XFxcXG4gICAgICAgICAgICB2YXIganNvbiA9IEpTT04ucGFyc2UocmVxdWVzdChhcGksIHtcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzoganh1cmxcXFxcbiAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxcXFxuICAgICAgICAgICAgICAgIGJvZHk6ICd1cmw9JyArIHBhcnNlaWRcXFxcbiAgICAgICAgICAgIH0pKTtcXFxcbiAgICAgICAgICAgIHVybCA9IChqc29uLmNvZGUgPT0gMjAwID8gYmFzZTY0RGVjb2RlKHRvb2xzLmNhZXNhckNpcGhlcihqc29uLnVybCwgLTEpKSA6ICcnKTtcXFxcbiAgICAgICAgICAgIHJldHVybiB1cmw7XFxcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiAnJztcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sXFxcXG4gICAgUGFuR3U6IGZ1bmN0aW9uKHZpcFVybCwgZGF0YSkge1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgLyp2YXIgcmVmID0gJ2h0dHBzOi8vd3d3LnBhbmd1amlleGkuY29tLyc7XFxcXG4gICAgICAgICAgICB2YXIgcGFyc2UgPSAnaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L2ppZXhpLz91cmw9JyArIHZpcFVybDtcXFxcbiAgICAgICAgICAgIHZhciBhcGkgPSAnaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L2ppZXhpL2FwaS5waHAnO1xcXFxuICAgICAgICAgICAgKi9cXFxcbiAgICAgICAgICAgIC8vdmFyIHJlZiA9ICdodHRwczovL3hteXN0di5jb20vJztcXFxcbiAgICAgICAgICAgIC8vdmFyIHBhcnNlID0gJ2h0dHBzOi8vd3d3Ljk5a3B3LmNvbS9wYW5ndS9pbmRleC5waHA/dXJsPScgKyB0YWlsVXJsO1xcXFxuICAgICAgICAgICAgLy92YXIgYXBpID0gJ2h0dHBzOi8vd3d3Ljk5a3B3LmNvbS9wYW5ndS9hcGkucGhwJztcXFxcbiAgICAgICAgICAgIHZhciBwYXJzZSA9ICdodHRwczovL3d3dy5wYW5ndWppZXhpLmNvbS9wYW5ndS8/dXJsPScgKyB2aXBVcmw7XFxcXG4gICAgICAgICAgICB2YXIgYXBpID0gJ2h0dHBzOi8vcGFuZ3VhcGkubnRyeWpkLm5ldC9wYW5ndTIwMjEvYXBpLnBocCc7XFxcXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xcXFxuICAgICAgICAgICAgICAgIHJlZiA9IGRhdGFbMF07XFxcXG4gICAgICAgICAgICAgICAgcGFyc2UgPSBkYXRhWzFdO1xcXFxuICAgICAgICAgICAgICAgIGFwaSA9IGRhdGFbMl07XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB2YXIgVGltZSA9IChNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkgKiAxKS50b1N0cmluZygpO1xcXFxuICAgICAgICAgICAgdmFyIHVybCA9IEpTT04ucGFyc2UocmVxdWVzdChhcGksIHtcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogcGFyc2VcXFxcbiAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgIGJvZHk6ICd1cmw9JyArIHZpcFVybCArICcmcmVmZXJlcj0nICsgYmFzZTY0RW5jb2RlKHBhcnNlKSArICcmcmVmPTEmdGltZT0nICsgVGltZSArICcmdHlwZT0mb3RoZXI9JyArIGJhc2U2NEVuY29kZSh2aXBVcmwpICsgJyZpb3M9MCcsXFxcXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXFxcbiAgICAgICAgICAgIH0pKS51cmw7XFxcXG4gICAgICAgICAgICByZXR1cm4gdXJsO1xcXFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LFxcXFxuICAgIHl1bjE3MTc6IGZ1bmN0aW9uICh2aXBVcmwpIHtcXFxcbiAgICAgICAgdmFyIGlzeWsgPSB2aXBVcmwuaW5kZXhPZigneW91a3UnKTtcXFxcbiAgICAgICAgdmFyIHJlZiA9IFxcXFxcXFwiaHR0cHM6Ly93d3cuMTcxN3l1bi5jb20vangvdHkucGhwP3VybD1cXFxcXFxcIiArIHZpcFVybDtcXFxcbiAgICAgICAgdmFyIHBhcnNlID0gXFxcXFxcXCJodHRwczovLzE3MTd5dW4uY29tLnpoMTg4Lm5ldC8wODI4Lz91cmw9XFxcXFxcXCIgKyB2aXBVcmw7XFxcXG4gICAgICAgIHZhciBhcGkgPSBcXFxcXFxcImh0dHBzOi8vMTcxN3l1bi5jb20uemgxODgubmV0LzEwMDQvLi5pbmRleC4ucGhwXFxcXFxcXCI7XFxcXG4gICAgICAgIHJldHVybiBpc3lrID09IC0xID8gdGhpcy5QYW5HdSh2aXBVcmwsIFtyZWYsIHBhcnNlLCBhcGldKSA6IHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmICsgJyx2aXA6JywgcGFyc2UgKyAnLHZpcDonLCBhcGldKTtcXFxcbiAgICB9LFxcXFxuICAgIE9L6Kej5p6QOidodHRwczovL29ranguY2MvP3VybD0nLFxcXFxuICAgIE0zVThUVjonaHR0cHM6Ly9qeC5tM3U4LnR2L2ppZXhpLz91cmw9JyxcXFxcbiAgICDpgZPplb/ku5PlupPpgJrlhY06ZnVuY3Rpb24gKHVybCx0aW1lb3V0KXtcXFxcbiAgICAgICAgcmV0dXJuIFBhcnNlUy5kZWZhdWx0UGFyc2VXZWIodXJsLHRpbWVvdXQpO1xcXFxuICAgIH0sXFxcXG4gICAgRnVYaW5nOiBmdW5jdGlvbih2aXBVcmwpIHtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIC8vaWYodmlwVXJsLmluZGV4T2YoJ3YueW91a3UnKSE9LTEpe1xcXFxuICAgICAgICAgICAgLy8gICAgdmlwVXJsID0gKEpTT04ucGFyc2UocmVxdWVzdCh2aXBVcmwsIHtyZWRpcmVjdDpmYWxzZSwgd2l0aEhlYWRlcnM6dHJ1ZX0pKS5oZWFkZXJzLmxvY2F0aW9uICsgJycpLnJlcGxhY2UoL1xcXFxcXFxcPy4qLywnJyk7XFxcXG4gICAgICAgICAgICAvL31cXFxcbiAgICAgICAgICAgIHZhciByZWYgPSAnaHR0cHM6Ly9qeC54dWV0dWlndWFuZy5jbi9qaWV4aS8/dXJsPScgKyB2aXBVcmw7XFxcXG4gICAgICAgICAgICB2YXIgcGFyc2UgPSByZWY7XFxcXG4gICAgICAgICAgICB2YXIgYXBpID0gJ2h0dHBzOi8vangueHVldHVpZ3VhbmcuY24vamlleGkvYXBpdV9meC5waHAnO1xcXFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmLCBwYXJzZSwgYXBpXSk7XFxcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiAnJztcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sXFxcXG59O1xcXFxuXFxcXG5PYmplY3QuYXNzaWduKFBhcnNlUywgb3JpZ2luYWxQYXJzZVMsIE15UGFyc2VTKTtcXFxcbi8v6KaG55uW6aG65bqP77yM56ys5LiJ5Liq6KaG55uW56ys5LqM5Liq54S25ZCO6KaG55uW56ys5LiA5LiqXFxcXG5cXFxcblxcXFxuZnVuY3Rpb24gYXl0bVBhcnNlKHZpcFVybCxzdHJUaXRsZSx0aW1lb3V0LHBsYXlVcmwpIHtcXFxcbiAgICAvLyDlj4LmlbAxOuato+eJiOe9keWdgOWcsOWdgCDlj4LmlbAyIOWumuWQkeino+aekOaOpeWPo+WQjeensCDlj4LmlbAzIHg16Kej5p6Q6LaF5pe2IOWPguaVsDQg5a6M5pW055qE5pKt5pS+6ZO+5o6lXFxcXG4gICAgc3RyVGl0bGUgPSBzdHJUaXRsZXx8Jyc7XFxcXG4gICAgdmlwVXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KHZpcFVybCk7XFxcXG4gICAgcGxheVVybD1kZWNvZGVVUklDb21wb25lbnQocGxheVVybCl8fHZpcFVybHx8Jyc7XFxcXG4gICAgLy8gbG9nKCfkvKDlhaVheXRtUGFyc2XnmoTotoXml7Y6Jyt0aW1lb3V0KTtcXFxcbiAgICB0aW1lb3V0ID0gcGFyc2VJbnQodGltZW91dCl8fHBhcnNlSW50KGdldFZhcignZHAuanhUaW1lb3V0JywnNTAwMCcpKXx8NTAwMDtcXFxcblxcXFxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcXFxuICAgIGxldCBqeHNSb3V0ZSA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeUppZXhpLmpzb25cXFxcXFxcIjtcXFxcbiAgICBsZXQgTXlKaWV4aSA9IHt9O1xcXFxuICAgIGxldCBqaWV4aXMgPSB7fTtcXFxcbiAgICB0cnkge1xcXFxuICAgICAgICBNeUppZXhpID0gSlNPTi5wYXJzZShmZXRjaChqeHNSb3V0ZSkpO1xcXFxuICAgICAgICBqaWV4aXMgPSBNeUppZXhpLmppZXhpcy5maWx0ZXIoaXQ9Pml0Lm5hbWU9PT1NeUppZXhpLm5vdylbMF07XFxcXG4gICAgfWNhdGNoIChlKSB7fVxcXFxuICAgIGZ1bmN0aW9uIGdldFBsYXlKeChrZXkpe1xcXFxuICAgICAgICBsZXQgcGxheVVybExpc3QgPSBbXTsvL+aJuemHj+aSreaUvuWcsOWdgOWIl+ihqFxcXFxuICAgICAgICBsZXQgbmFtZUxpc3QgPSBbXTtcXFxcbiAgICAgICAgbGV0IGp4cyA9IGppZXhpc1trZXldOyAvLyDpgILnlKjkuo7ov5nkuKrnvZHnq5nnmoTop6PmnpDliJfooahcXFxcbiAgICAgICAgaWYoanhzKXtcXFxcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiBqeHMpe1xcXFxuICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBQYXJzZVNbanhzW2ldXSA9PSAnc3RyaW5nJyYmUGFyc2VTW2p4c1tpXV0ubWF0Y2goL2h0dHAuKj89Lykpe1xcXFxuICAgICAgICAgICAgICAgICAgICBwbGF5VXJsTGlzdC5wdXNoKFBhcnNlU1tqeHNbaV1dK3ZpcFVybCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVMaXN0LnB1c2goanhzW2ldKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLy8gcmV0dXJuIHBsYXlVcmxMaXN0XFxcXG4gICAgICAgIHJldHVybiB7cGxheVVybExpc3Q6cGxheVVybExpc3QsbmFtZUxpc3Q6bmFtZUxpc3R9XFxcXG4gICAgfVxcXFxuICAgIGxldCBleHRyYSA9IHt9O1xcXFxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcXFxuICAgIGlmKCFzdHJUaXRsZSl7XFxcXG4gICAgICAgIGlmKC9yZW5yZW5taS18ZmVuZG91XFxcXFxcXFwuZHVvZHVvenl8TFR8Um9uZ1hpbmdWUnwxXFxcXFxcXFwucnVpZmVuZ2xiXFxcXFxcXFwuY29tfHhmeXxzdW95b3xOYWlmZWltaXxsZWR1b3xsYW9kaXx4dWVyZW4vLnRlc3QodmlwVXJsKSl7XFxcXG4gICAgICAgICAgICBzdHIgPSBteVNldC5vdGg7XFxcXG4gICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnb3RoJyk7XFxcXG4gICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgdmFyIGhvc3Q7XFxcXG4gICAgICAgICAgICB0cnl7XFxcXG4gICAgICAgICAgICAgICAgaG9zdCA9IHZpcFVybC5tYXRjaCgvXFxcXFxcXFwuKC4qPylcXFxcXFxcXC8vKVsxXTtcXFxcbiAgICAgICAgICAgIH1jYXRjaChlKXtcXFxcbiAgICAgICAgICAgICAgICBpZighL15odHRwLy50ZXN0KHBsYXlVcmwpKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwi5pat5o+S6LCD55So5aSx6LSl77yBXFxcXFxcXFxu6Z2e5q2j5bi455qEdmlw5q2j54mI5Zyw5Z2A5LiU5pyq6K+G5Yir5Y6f56uZ6Kej5p6Q5pKt5pS+5Zyw5Z2AXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZVMu6YGT6ZW/5LuT5bqT6YCa5YWNKHBsYXlVcmwsdGltZW91dClcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAvL2hvc3QgPSBkZWNvZGVVUklDb21wb25lbnQoaG9zdCk7XFxcXG4gICAgICAgICAgICBzd2l0Y2ggKG15U2V0LnFqdSkge1xcXFxuICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCLpu5jorqRcXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChob3N0KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwicXEuY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQudHg7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3R4Jyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwiaXFpeWkuY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQucXk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3F5Jyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwieW91a3UuY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQueWs7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3lrJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwiYWxpenlcXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5hbDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnYWwnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJtZ3R2LmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0Lm1nO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdtZycpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcImJpbGliaWxpLmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LmJsO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdibCcpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcInNvaHUuY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQuc2g7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3NoJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwidHYuc29odS5jb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5zaDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnc2gnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJpeGlndWEuY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQueGc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3hnJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwicHB0di5jb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5wcDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgncHAnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJtaWd1dmlkZW8uY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQubWk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ21pJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwibGUuY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQubGU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ2xlJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwiMTkwNS5jb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5vbmU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ29uZScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcImZ1bi50dlxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LmZ1bjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnZnVuJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0Lm90aDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxcXFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5xanU7XFxcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgfWVsc2V7XFxcXG4gICAgICAgIGxvZygn6a2U5pat5omn6KGM5a6a5ZCR6Kej5p6Q57q/6Lev5aS0Oicrc3RyVGl0bGUpO1xcXFxuICAgICAgICBzdHIgPSBzdHJUaXRsZTtcXFxcbiAgICB9XFxcXG4gICAgbGV0IHdpdGhCYXRjaCA9ICEhKE15SmlleGkuaXNBdXRvICYmIE15SmlleGkuYXV0b01vZGUgPT09ICfpgJ/luqbkvJjlhYgnKTtcXFxcbiAgICBpZiAodHlwZW9mIFBhcnNlU1tzdHJdID09ICdmdW5jdGlvbicpIHtcXFxcbiAgICAgICAgaWYoL+mAmuWFjS8udGVzdChzdHIpKXtcXFxcbiAgICAgICAgICAgIHJldHVybiBQYXJzZVNbc3RyXSh2aXBVcmwsdGltZW91dCk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgdmFyIHVybCA9IFBhcnNlU1tzdHJdKHZpcFVybCk7XFxcXG4gICAgICAgIGlmKC9eaGlrZXI6fF50b2FzdDp8XnJ1bGU6fF54NVJ1bGU6fF53ZWJSdWxlOnxec2VsZWN0Ly50ZXN0KHVybCkpe1xcXFxuICAgICAgICAgICAgcmV0dXJuIHVybDtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZighdXJsJiYhL15odHRwLy50ZXN0KHZpcFVybCkpe1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+mtlOaWreino+aekOWksei0pT4nK3ZpcFVybFxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC8vIGxvZyh2aXBVcmwrJ+WFjeWXheaOoue7k+aenDonK3VybCk7XFxcXG4gICAgICAgIGlmICgvXlxcXFxcXFxcLy8udGVzdCh1cmwpKSB7XFxcXG4gICAgICAgICAgICB1cmwgPSAnaHR0cHM6JyArIHVybFxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmICgvPWh0dHAvLnRlc3QodXJsKSkge1xcXFxuICAgICAgICAgICAgdXJsID0gLyZ1cmw9Ly50ZXN0KHVybCkgPyB1cmwgOiAnaHR0cCcgKyBkZWNvZGVVUklDb21wb25lbnQodXJsLnNwbGl0KCc9aHR0cCcpWzFdKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvKmlmKHVybC5tYXRjaCgvbWd0di5jb20vZyk9PSdtZ3R2LmNvbScpe1xcXFxuICAgICAgICAgICAgdXJsID0gdXJsICsgJzt7UmVmZXJlckBodHRwczovL3d3dy5tZ3R2LmNvbX0nO1xcXFxuICAgICAgICB9IGVsc2UgKi9cXFxcbiAgICAgICAgaWYgKC9cXFxcXFxcXC5mbHYvLnRlc3QodXJsKSYmIS9Vc2VyLUFnZW50Ly50ZXN0KHVybCkpIHtcXFxcbiAgICAgICAgICAgIHVybCA9IHVybCArICc7e1VzZXItQWdlbnRAYXBwJiZSZWZlcmVyQCcgKyB2aXBVcmwgKyAnfSc7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaWYgKHVybCA9PT0gJycgfHwgdXJsID09PSB2aXBVcmwpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiB2aXBVcmw7XFxcXG4gICAgICAgIH0gZWxzZSBpZighLyNpc1ZpZGVvPXRydWUjLy50ZXN0KHVybCkpe1xcXFxuICAgICAgICAgICAgcmV0dXJuIHVybCArICcjaXNWaWRlbz10cnVlIyc7XFxcXG4gICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgcmV0dXJuIHVybFxcXFxuICAgICAgICB9XFxcXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgUGFyc2VTW3N0cl0gPT0gJ3N0cmluZycmJlBhcnNlU1tzdHJdLm1hdGNoKC9odHRwLio/PS8pKSB7XFxcXG4gICAgICAgIC8vIGxvZyhcXFxcXFxcIuaWreaPkuW8gOWni+mAmueUqOaJp+ihjOWFjeWXhSBkZWZhdWx0UGFyc2VXZWI6XFxcXFxcXCIrdGltZW91dCk7XFxcXG4gICAgICAgIC8vbG9nKFxcXFxcXFwi6buY6K6keDVcXFxcXFxcIitQYXJzZVMuZGVmYXVsdFBhcnNlV2ViKTtcXFxcbiAgICAgICAgaWYod2l0aEJhdGNoKXtcXFxcbiAgICAgICAgICAgIGlmKHR5cGVvZihleHRyYS5wbGF5VXJsTGlzdCk9PT0nb2JqZWN0JyYmZXh0cmEucGxheVVybExpc3QubGVuZ3RoPjApe1xcXFxuICAgICAgICAgICAgICAgIGV4dHJhLnBsYXlVcmxMaXN0ID0gZXh0cmEucGxheVVybExpc3QuZmlsdGVyKGl0PT5pdCE9PShQYXJzZVNbc3RyXXx8c3RyKSArIHZpcFVybCk7XFxcXG4gICAgICAgICAgICAgICAgbGV0IG5hbWVMaXN0ID0gZXh0cmEubmFtZUxpc3Q7XFxcXG4gICAgICAgICAgICAgICAgbmFtZUxpc3QudW5zaGlmdChzdHIpO1xcXFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHVuaXF1ZTIoYXJyYXkpe1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGFycmF5KSk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGV4dHJhLm5hbWVMaXN0PXVuaXF1ZTIobmFtZUxpc3QpO1xcXFxuICAgICAgICAgICAgICAgIGV4dHJhLnBsYXlVcmxMaXN0ID0gdW5pcXVlMihleHRyYS5wbGF5VXJsTGlzdCk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgZXh0cmEgPSB7fVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlV2ViP1BhcnNlUy5kZWZhdWx0UGFyc2VXZWIoKFBhcnNlU1tzdHJdfHxzdHIpICsgdmlwVXJsLHRpbWVvdXQsZXh0cmEpOihQYXJzZVNbc3RyXXx8c3RyKSArIHZpcFVybDtcXFxcbiAgICB9IGVsc2UgaWYodHlwZW9mKHN0cik9PT0nc3RyaW5nJyYmc3RyLmxlbmd0aD4xJiYodHlwZW9mIFBhcnNlU1tzdHJdPT0ndW5kZWZpbmVkJ3x8IVBhcnNlU1tzdHJdKSYmIS9eaHR0cC8udGVzdChzdHIpKXtcXFxcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+ivt+i/m+ihjOaWreaPkumFjee9rizmjqjojZDmi4nlj5bpgZPplb/nsr7pgIkhXFxcXFxcXFxu5qOA5rWL5Yiw5peg5pWI55qE6Kej5p6Q6YWN572uOicrc3RyO1xcXFxuICAgIH1lbHNlIHtcXFxcbiAgICAgICAgcmV0dXJuIFBhcnNlUy5kZWZhdWx0UGFyc2Uoc3RyICsgdmlwVXJsLHRpbWVvdXQpO1xcXFxuICAgIH1cXFxcbn1cXFxcblxcXFxudmFyIHBsYXlQYXJzZSA9IHtcXFxcbiAgICBwbGF5ZXJfeHg6IGZ1bmN0aW9uKGp1cmwsIExhYmVsKSB7XFxcXG4gICAgICAgIHJldHVybiAkKGp1cmwpLmxhenlSdWxlKChrKSA9PiB7XFxcXG4gICAgICAgICAgICB2YXIganNVcmwgPSBKU09OLnBhcnNlKGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpKS5jajtcXFxcbiAgICAgICAgICAgIHZhciBMYWJlbCA9IGs7XFxcXG4gICAgICAgICAgICB2YXIgZmEgPSBbJ2xldHYnLCAncHB0dicsICdxcScsICd5b3VrdScsICdxaXlpJywgJ2lxaXlpJywgJ21ndHYnLCAnYmlsaWJpbGknLCAnc29odScsICdtaWd1JywgJ20xOTA1JywgJ3ZpcCddO1xcXFxuICAgICAgICAgICAgdmFyIGh0bWwgPSBwYXJzZURvbShyZXF1ZXN0KGlucHV0KSwgTGFiZWwpO1xcXFxuICAgICAgICAgICAgZXZhbChodG1sLnJlcGxhY2UoL3BsYXllcl8uKj89ey8sICdwZGF0YT17JykpO1xcXFxuICAgICAgICAgICAgZXZhbChmZXRjaChqc1VybCkpO1xcXFxuICAgICAgICAgICAgaWYgKHBkYXRhLnVybC5zdWJzdHIoMCwgOCkubWF0Y2goL0pULi5KVC4uLykpIHtcXFxcbiAgICAgICAgICAgICAgICBwZGF0YS51cmwgPSBiYXNlNjREZWNvZGUocGRhdGEudXJsKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGlmIChwZGF0YS51cmwuc3Vic3RyKDAsIDgpLm1hdGNoKC8lLi4lLi4vKSkge1xcXFxuICAgICAgICAgICAgICAgIHBkYXRhLnVybCA9IHVuZXNjYXBlKHBkYXRhLnVybCk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpZiAoZmEuaW5jbHVkZXMocGRhdGEuZnJvbSkpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gYXl0bVBhcnNlKHBkYXRhLnVybCk7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBwZGF0YS51cmwgKyAnI2lzVmlkZW89dHJ1ZSMnO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9LCBMYWJlbClcXFxcbiAgICB9XFxcXG59O1xcXFxuZnVuY3Rpb24gbXpQb3B1cCgpIHtcXFxcbiAgICAvKlxcXFxuICAgIGlmIChnZXRWYXIoXFxcXFxcXCJpamstdHhcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIikgPT0gXFxcXFxcXCIxXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgc2V0SXRlbShcXFxcXFxcInRpeGluZ1xcXFxcXFwiLCBcXFxcXFxcIjFcXFxcXFxcIilcXFxcbiAgICAgICAgY2xlYXJWYXIoXFxcXFxcXCJpamstdHhcXFxcXFxcIilcXFxcbiAgICB9XFxcXG4gICAgaWYgKGdldEl0ZW0oXFxcXFxcXCJ0aXhpbmdcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIikgPT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICBjb25maXJtKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAn5YWN6LSj5aOw5piOJyxcXFxcbiAgICAgICAgICAgIGNvbnRlbnQ6ICfmnKznqIvluo/kuI3mj5Dkvpvop4bpopHop6PmnpDmnI3liqFcXFxcXFxcXG7miYDmnInlhoXlrrnlnYfku47nlKjmiLfliIbkuqvkuK3mlLbpm4ZcXFxcXFxcXG7ku4XkvpvmtYvor5XlkozlrabkuaDkuqTmtYFcXFxcXFxcXG5cXFxcXFxcXG7noa7lrprljbPorqTlj6/vvIzkuI3lho3mj5DphpInLFxcXFxuICAgICAgICAgICAgY29uZmlybTogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgcHV0VmFyKFxcXFxcXFwiaWprLXR4XFxcXFxcXCIsIFxcXFxcXFwiMVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/ngrnlh7vkuobnoa7orqRcXFxcXFxcIlxcXFxuXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9KVxcXFxuICAgIH1cXFxcbiAgICAgKi9cXFxcbn1cXFxcbi8qXFxcXG5pZiAoIWdldFZhcihcXFxcXFxcInRpeGluZ1xcXFxcXFwiKSkge1xcXFxuICAgIG16UG9wdXAoKTtcXFxcbiAgICBwdXRWYXIoJ3RpeGluZycsJ29rJyk7XFxcXG59XFxcXG4qL1xcXFxuZnVuY3Rpb24gc2F2ZUJ1dHRvbihjb250ZW50LG5hbWUpIHtcXFxcbiAgICBuYW1lID0gbmFtZXx8Jyc7XFxcXG4gICAgdmFyIGRhdGEgPSBjb250ZW50LnNwbGl0KCfimIXimIXimIUnKTtcXFxcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDIpIHtcXFxcbiAgICAgICAgdmFyIF9kdCA9IHBhcnNlUGFzdGUoZGF0YVswXSk7XFxcXG4gICAgICAgIGNvbnRlbnQgPSBfZHQuc3Vic3RyKDAsIDYpICE9PSAnZXJyb3I6JyA/IF9kdCA6ICcnO1xcXFxuICAgIH1cXFxcbiAgICBkYXRhID0gY29udGVudC5zcGxpdCgn4piFJyk7XFxcXG4gICAgdmFyIHR5cGUgPSBkYXRhWzBdO1xcXFxuICAgIHZhciBhcnJMaXN0ID0gW107XFxcXG4gICAgdmFyIG9iakNvZGUgPSB7fTtcXFxcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAyICYmIGRhdGFbMF0gIT09ICfnm7Tpk74nKSB7XFxcXG4gICAgICAgIHZhciBvYmpLZXkgPSBkYXRhWzFdO1xcXFxuICAgICAgICB2YXIgb2JqVmFsdWUgPSBkYXRhWzJdO1xcXFxuICAgICAgICBpZiAodHlwZSA9PT0gJ015UGFyc2VTJykge1xcXFxuICAgICAgICAgICAgb2JqVmFsdWUgPSBiYXNlNjREZWNvZGUob2JqVmFsdWUpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmIChvYmpWYWx1ZS5zcGxpdCgnZnVuY3Rpb24nKS5sZW5ndGggPiAxKSB7XFxcXG4gICAgICAgICAgICBldmFsKCdvYmpWYWx1ZT0nICsgb2JqVmFsdWUpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGFyckxpc3Quc3BsaWNlKDAsIDAsIG9iaktleSk7IC8v5re75Yqg6aG555uu6Z2e5Yig6ZmkXFxcXG4gICAgICAgIG9iakNvZGVbb2JqS2V5XSA9IG9ialZhbHVlO1xcXFxuXFxcXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAn55u06ZO+Jykge1xcXFxuICAgICAgICBhcnJMaXN0ID0gZGF0YTtcXFxcbiAgICAgICAgYXJyTGlzdC5zcGxpY2UoMCwgMSk7XFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgYXJyTGlzdCA9IG51bGw7XFxcXG4gICAgfVxcXFxuICAgIGlmIChhcnJMaXN0ICE9IG51bGwpIHtcXFxcbiAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXFxcbiAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxcXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbih2YWwpIHtcXFxcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuaW5kZXhPZih2YWwpO1xcXFxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICB0aGlzLnNwbGljZShpbmRleCwgMSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH07XFxcXG4gICAgICAgIGlmKG5hbWUpey8v5Yig6Zmk5ZCN56ew5YiX6KGo5ZKM5Luj56CBXFxcXG4gICAgICAgICAgICBqc29uLnRpdGxlLnJlbW92ZShuYW1lKTtcXFxcbiAgICAgICAgICAgIGRlbGV0ZSBqc29uLmNvZGVzW25hbWVdO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGFyckxpc3QgPSBhcnJMaXN0LmNvbmNhdChqc29uLnRpdGxlKTtcXFxcbiAgICAgICAganNvbi50aXRsZSA9IEFycmF5LmZyb20obmV3IFNldChhcnJMaXN0KSk7XFxcXG4gICAgICAgIE9iamVjdC5hc3NpZ24oanNvbi5jb2Rlcywgb2JqQ29kZSk7XFxcXG4gICAgICAgIGlmICh0eXBlID09PSAn5rWL6K+VJykge1xcXFxuICAgICAgICAgICAgZXZhbCgndmFyIGNvbmZpZyA9JyArIGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpKTtcXFxcbiAgICAgICAgICAgIGV2YWwoZmV0Y2goY29uZmlnLmNqKSk7XFxcXG4gICAgICAgICAgICBpZiAodHlwZW9mIFBhcnNlU1tkYXRhWzFdXSA9PSBcXFxcXFxcImZ1bmN0aW9uXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTW2RhdGFbMV1dKGRhdGFbMl0pO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYihQYXJzZVNbZGF0YVsxXV0gKyBkYXRhWzJdKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+W3suS/neWtmOWGheWuuVxcXFxcXFwiO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/ml6Dms5Xor4bliKvov5nkuKrlhoXlrrnlkaJcXFxcXFxcIlxcXFxuICAgIH1cXFxcbn1cXFxcbi8vIOS7peS4i+S7o+eggeWNg+S4h+S4jeimgeaUvuWHuuadpeWQpuWImeaKpemUmVxcXFxuaWYgKGdldEl0ZW0oJ3VwZGF0ZURhdGUnKSAhPSB1cGRhdGVEYXRlKSB7XFxcXG4vLyBpZiAodHJ1ZSkge1xcXFxuICAgIC8vIOaKimZ1bmN0aW9u5Y+Y5oiQc3RyaW5nXFxcXG4gICAgbGV0IGZ1bmN0aW9uQ29kZSA9IHNhdmVCdXR0b24gKyAnOycrbXpQb3B1cDtcXFxcbiAgICAvLyB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvcGxzY1BhcnNlLmh0bWwnLCBmZXRjaChfbXlTZXQuY2tMaW5rICsgJ3Bsc2NQYXJzZS5odG1sJykpO1xcXFxuICAgIHNldEl0ZW0oJ215RnVuY3Rpb24nLCBmdW5jdGlvbkNvZGUpO1xcXFxuICAgIHNldEl0ZW0oJ3VwZGF0ZURhdGUnLCB1cGRhdGVEYXRlKTtcXFxcbn1cXFxcbnZhciBiakl0ZW0gPSB7XFxcXG4gICAgaGZQbHVnaW46IGZ1bmN0aW9uKHBhcnNlUm91dGUpIHtcXFxcbiAgICAgICAgcmV0dXJuICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXFxcbiAgICAgICAgICAgIGlmIChmaWxlRXhpc3QoaykpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgY2pjYWNoZSA9IGdldFZhcignY2pDYWNoZScpO1xcXFxuICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2goaykpO1xcXFxuICAgICAgICAgICAgICAgIGpzb24uc2V0dGluZ3MuY2ogPSBjamNhY2hlO1xcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShrLCAkLnN0cmluZ2lmeShqc29uKSk7XFxcXG4gICAgICAgICAgICAgICAgdmFyIG9sZFJvdXRlID0gZ2V0VmFyKCdvbGRDb25maWcnKTtcXFxcbiAgICAgICAgICAgICAgICB2YXIgb2xkQ29uZmlnID0ganNvbi5zZXR0aW5ncztcXFxcbiAgICAgICAgICAgICAgICBvbGRDb25maWcuY2ogPSBjamNhY2hlO1xcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShvbGRSb3V0ZSwgJC5zdHJpbmdpZnkob2xkQ29uZmlnKSk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mgaLlpI3miJDlip8nO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6ZyA6KaB5YWI5ouJ5Y+W5YiX6KGoJ1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9LCBwYXJzZVJvdXRlKVxcXFxuICAgIH0sXFxcXG4gICAgcHVsbENvZGU6IGZ1bmN0aW9uKGspIHtcXFxcbiAgICAgICAgcmV0dXJuICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXFxcbiAgICAgICAgICAgIHZhciBwdWxsTW9kZSA9IGtbMF07XFxcXG4gICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGtbMV07XFxcXG4gICAgICAgICAgICB2YXIgcGFyc2VGaWxlID0gZmV0Y2gocGFyc2VSb3V0ZSk7XFxcXG4gICAgICAgICAgICBpZiAoIXBhcnNlRmlsZSkge1xcXFxuICAgICAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpO1xcXFxuICAgICAgICAgICAgICAgIHNldHRpbmdzID0gIXNldHRpbmdzID8ge30gOiBKU09OLnBhcnNlKHNldHRpbmdzKTtcXFxcbiAgICAgICAgICAgICAgICB2YXIganNvbiA9IHt9O1xcXFxuICAgICAgICAgICAgICAgIGpzb24uc2V0dGluZ3MgPSBzZXR0aW5ncztcXFxcbiAgICAgICAgICAgICAgICBqc29uLnRpdGxlID0gW107XFxcXG4gICAgICAgICAgICAgICAganNvbi5jb2RlcyA9IHt9O1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIHBhcnNlRmlsZSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB2YXIgcGFyc2VUaXRsZSA9IFtdO1xcXFxuICAgICAgICAgICAgdmFyIHBhcnNlQ29kZT17fTtcXFxcbiAgICAgICAgICAgIHZhciBjakxpbmsgPSBnZXRWYXIoJ3BsdWdpbkxpbmsnKTtcXFxcbiAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgaWYoL0BiYXNlNjQ6XFxcXFxcXFwvXFxcXFxcXFwvLy50ZXN0KGNqTGluaykpe1xcXFxuICAgICAgICAgICAgICAgICAgICBldmFsKGJhc2U2NERlY29kZShjakxpbmsuc3BsaXQoJ0BiYXNlNjQ6Ly8nKVsxXSkpO1xcXFxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKC/mj5Lku7blkI0vLnRlc3QoY2pMaW5rKSl7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCByZWFsTGluayA9IGNqTGluay5zcGxpdCgn5o+S5Lu25ZCNJylbMF0ucmVwbGFjZSgvW1xcXFxcXFxcc10vZywnJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxvZygn6Kej5p6Q5LqR5Ymq5YiH5p2/OicrcmVhbExpbmspO1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgeVBhc3RlID0gcGFyc2VQYXN0ZShyZWFsTGluayk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmKC9AYmFzZTY0OlxcXFxcXFxcL1xcXFxcXFxcLy8udGVzdCh5UGFzdGUpKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChiYXNlNjREZWNvZGUoeVBhc3RlLnNwbGl0KCdAYmFzZTY0Oi8vJylbMV0pKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgUGFyc2VTPT09J3VuZGVmaW5lZCcpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ouJ5Y+W5Liq6bih5q+b5o+S5Lu2LOmHjOmdoui/nlBhcnNlU+WvueixoemDveayoeaciSEnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+m4oeavm+aPkuS7tuaJp+ihjOaKpemUmTpcXFxcXFxcXG4nK2UubWVzc2FnZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pyq6IO96K+G5Yir5LqR5Ymq5YiH5p2/5Lit55qE5YaF5a65OlxcXFxcXFxcbicreVBhc3RlLnN1YnN0cmluZygwLDEwMCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNqTGluayA9PT0gJ1HnpZ4nKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBqaWV4aSA9IGZldGNoKCdoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dCcpLnNwbGl0KCdcXFxcXFxcXG4nKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgZm9yIChpIGluIGppZXhpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGU9amlleGlbaV0uc3BsaXQoJyYmJylbMF07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZT1qaWV4aVtpXS5zcGxpdCgnJiYnKVsxXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUucHVzaCh0aXRsZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVbdGl0bGVdPWNvZGU7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgLy8gfWVsc2UgaWYoL14jW2EtekEtWjAtOV17MiwxMH0kLy50ZXN0KGNqTGluaykpey8v56aP5Yip5Y+j5LukMuWIsDEw5L2NXFxcXG4gICAgICAgICAgICAgICAgZWxzZSBpZigvXiNbXFxcXFxcXFxTXXsyLDEwfSQvLnRlc3QoY2pMaW5rKSl7Ly/npo/liKnlj6Pku6Qy5YiwMTDkvY3ku7vmhI/pnZ7nqbrlrZfnrKbkuLJcXFxcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qge3Rhc2tDYWxsLCB0YXNrUnVuLHRhc2tSZXF9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3Rhc2tDYWxsP3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAvLyBsb2coJ+W8gOWni+aJp+ihjOS7u+WKoeS7k+W6k+iOt+WPluaWreW/teaPkuS7tuemj+WIqeWPo+S7pCcpO1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gdGFza0NhbGwoMTcsJ0RuRnVsaScsW2NqTGlua10pO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gMCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldCA9IEpTT04ucGFyc2UocmVzdWx0LnJlc3VsdCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2cocmV0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJldC5vcHQ9PT0nZXJyb3InKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8vJytyZXQubXNnO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocmV0Lm9wdD09PSd1cmwnKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IGZldGNoKHJldC5yZXQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnIgPSBodG1sLmluY2x1ZGVzKCdodHRwJyk/IGh0bWw6YmFzZTY0RGVjb2RlKGh0bWwpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqaWV4aSA9IGFyci5tYXRjaCgvW1xcXFxcXFxcU10qPywuKj9bXFxcXFxcXFxzXS9nKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpIGluIGppZXhpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZT1qaWV4aVtpXS5zcGxpdCgnLCcpWzBdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZT1qaWV4aVtpXS5zcGxpdCgnLCcpWzFdLnNwbGl0KFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIpWzBdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlLnB1c2godGl0bGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVbdGl0bGVdPWNvZGU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocmV0Lm9wdD09PSdqeCcpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKC9bXFxcXFxcXFxTXSo/LGh0dHBbXFxcXFxcXFxTXS8udGVzdChyZXQucmV0KSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IHJldC5yZXQuc3BsaXQoJywnKVswXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSByZXQucmV0LnNwbGl0KCcsJylbMV0uc3BsaXQoJ1xcXFxcXFxcbicpWzBdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlLnB1c2godGl0bGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVbdGl0bGVdPWNvZGU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoL15odHRwLy50ZXN0KHJldC5yZXQpKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gY2pMaW5rLnNwbGl0KCcjJylbMV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gcmV0LnJldC5zcGxpdCgnXFxcXFxcXFxuJylbMF07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUucHVzaCh0aXRsZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09Y29kZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+acquefpeeahOemj+WIqTpcXFxcXFxcXG4nK3JldC5yZXQ7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocmV0Lm9wdD09PSd2aXBKeCcpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IGNqTGluay5zcGxpdCgnIycpWzFdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gcmV0LnJldDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2coY29kZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVbdGl0bGVdPS9mdW5jdGlvbi8udGVzdChjb2RlKT9ldmFsKGNvZGUpOmNvZGU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S7k+W6k+mdnuacgOaWsOeJiOaIluiAheemj+WIqeekvuWKn+iDveW8gOWPkeS4rSdcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKGNqTGluaz09PSfmlq3mj5InKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgZXZhbChmZXRjaChcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanNcXFxcXFxcIikpO1xcXFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlPU9iamVjdC5rZXlzKFBhcnNlUyk7XFxcXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoL15oaWtlcjpcXFxcXFxcXC9cXFxcXFxcXC98XmZpbGU6XFxcXFxcXFwvXFxcXFxcXFwvfF5odHRwfF5cXFxcXFxcXC9zdG9yYWdlXFxcXFxcXFwvfF5cXFxcXFxcXC9zZGNhcmRcXFxcXFxcXC8vLnRlc3QoY2pMaW5rKSl7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmKC9eXFxcXFxcXFwvc3RvcmFnZVxcXFxcXFxcL3xeXFxcXFxcXFwvc2RjYXJkXFxcXFxcXFwvLy50ZXN0KGNqTGluaykpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2pMaW5rID0gJ2ZpbGU6Ly8nK2NqTGluaztcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICBldmFsKGZldGNoKGNqTGluaykpO1xcXFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlPU9iamVjdC5rZXlzKFBhcnNlUyk7XFxcXG4gICAgICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mi4nlj5blj6Pku6TmnInor68nXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgIGxvZyhlLm1lc3NhZ2UpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgdmFyIGp4SnVkZ2UgPSB0eXBlb2YgUGFyc2VTID09ICdvYmplY3QnO1xcXFxuICAgICAgICAgICAgdmFyIGxiSnVkZ2UgPSB0eXBlb2YocGFyc2VUaXRsZSkgPT0gJ29iamVjdCc7XFxcXG4gICAgICAgICAgICBpZiAoanhKdWRnZSB8fCBsYkp1ZGdlKSB7XFxcXG4gICAgICAgICAgICAgICAgLy8gaWYgKHB1bGxNb2RlID09PSAn5YiX6KGoJykge1xcXFxuICAgICAgICAgICAgICAgIC8vICAgICBpZiAoIWxiSnVkZ2UpIHtcXFxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIHBhcnNlVGl0bGUgPSBPYmplY3Qua2V5cyhQYXJzZVMpO1xcXFxuICAgICAgICAgICAgICAgIC8vICAgICB9XFxcXG4gICAgICAgICAgICAgICAgLy8gICAgIHZhciBuZXdQYXJzZVRpdGxlID0ganNvbi50aXRsZS5jb25jYXQocGFyc2VUaXRsZSk7XFxcXG4gICAgICAgICAgICAgICAgLy8gICAgIGpzb24udGl0bGUgPSBBcnJheS5mcm9tKG5ldyBTZXQobmV3UGFyc2VUaXRsZSkpO1xcXFxuICAgICAgICAgICAgICAgIC8vIH1cXFxcbiAgICAgICAgICAgICAgICAvLyDkuI3nrqHmi4nlj5bku6PnoIHov5jmmK/liJfooajpg73opoHmiorliJfooajmi4nkuoZcXFxcbiAgICAgICAgICAgICAgICBpZiAoIWxiSnVkZ2UpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZSA9IE9iamVjdC5rZXlzKFBhcnNlUyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhwYXJzZVRpdGxlKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgdmFyIHNjT2JqZWN0ID0gW1xcXFxcXFwiQ2l0eUlQXFxcXFxcXCIsIFxcXFxcXFwicGNVQVxcXFxcXFwiLCBcXFxcXFxcImNhY2hlTTN1OFxcXFxcXFwiLFxcXFxcXFwiaXNWaWRlb1xcXFxcXFwiLCBcXFxcXFxcImRlZmF1bHRQYXJzZVxcXFxcXFwiLFxcXFxcXFwiZGVmYXVsdFBhcnNlV2ViXFxcXFxcXCIsXFxcXFxcXCJtYW9zc1xcXFxcXFwiLCBcXFxcXFxcIkxMUVxcXFxcXFwiLFxcXFxcXFwicGFyc2VMY1xcXFxcXFwiXTtcXFxcbiAgICAgICAgICAgICAgICBwYXJzZVRpdGxlID0gcGFyc2VUaXRsZT9wYXJzZVRpdGxlLmZpbHRlcihpdD0+IXNjT2JqZWN0LmluY2x1ZGVzKGl0KSk6W107XFxcXG4gICAgICAgICAgICAgICAgdmFyIG5ld1BhcnNlVGl0bGUgPSBqc29uLnRpdGxlLmNvbmNhdChwYXJzZVRpdGxlKTtcXFxcbiAgICAgICAgICAgICAgICBqc29uLnRpdGxlID0gQXJyYXkuZnJvbShuZXcgU2V0KG5ld1BhcnNlVGl0bGUpKTtcXFxcblxcXFxuICAgICAgICAgICAgICAgIGlmIChwdWxsTW9kZSA9PT0gJ+S7o+eggScpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcmlnaW5hbFBhcnNlUyA9PSAnb2JqZWN0Jykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSBpbiBzY09iamVjdCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBvcmlnaW5hbFBhcnNlU1tzY09iamVjdFtpXV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvcmlnaW5hbFBhcnNlUyA9b3JpZ2luYWxQYXJzZVMuZmlsdGVyKGl0PT4hc2NPYmplY3QuaW5jbHVkZXMoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaXQpWzBdKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGpzb24uY29kZXMsIG9yaWdpbmFsUGFyc2VTKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZihQYXJzZVMpPT1cXFxcXFxcInVuZGVmaW5lZFxcXFxcXFwiKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGpzb24uY29kZXMsIHBhcnNlQ29kZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+ayoeacieS7o+egge+8jOS4jeWPr+aLieWPllxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGpzb24uY29kZXMsIFBhcnNlUyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgLy92YXIgbmV3RmlsZSA9IHRvb2xzLnRvSlNPTihqc29uKTsvL+iHquWumuS5iXN0cmluZ2lmeeWHveaVsO+8jOW4puaciei9rOS5ieWtl+esplxcXFxuICAgICAgICAgICAgICAgIHZhciBuZXdGaWxlID0gJC5zdHJpbmdpZnkoanNvbik7IC8vSlNPTi5wYXJzZeS8muaKpemUmVxcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCBuZXdGaWxlKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aLieWPlicgKyBwdWxsTW9kZSArICfmiJDlip8nO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pyq6I635Y+W5Yiw5a+56LGhJztcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSwgW2ssIF9teVNldC5wYXJzZVJvdXRlXSlcXFxcbiAgICB9LFxcXFxuICAgIHB1bGxTY3JpcHQ6IGZ1bmN0aW9uKGNqLCB4NSkge1xcXFxuICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcXFxuICAgICAgICAgICAgdmFyIGNqRnJvbSA9ICdoaWtlcjovL3BhZ2UvUGFyc2VfRG4uanM/cnVsZT1NeUZpZWxk4bSw4oG/JztcXFxcbiAgICAgICAgICAgIHZhciB4NUZyb20gPSAnaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmh0bWw/cnVsZT1NeUZpZWxk4bSw4oG/JztcXFxcbiAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGNqRmlsZSA9IEpTT04ucGFyc2UoZmV0Y2goY2pGcm9tKSkucnVsZTtcXFxcbiAgICAgICAgICAgICAgICB2YXIgeDVGaWxlID0gSlNPTi5wYXJzZShmZXRjaCh4NUZyb20pKS5ydWxlO1xcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShrWzBdLCBjakZpbGUpO1xcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShrWzFdLCB4NUZpbGUpO1xcXFxuICAgICAgICAgICAgICAgIGNsZWFyVmFyKCdqeE9sZFYnKTtcXFxcbiAgICAgICAgICAgICAgICBjbGVhclZhcignanhOZXdWJyk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mi4nlj5bmiJDlip8nO1xcXFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnKrmiJDlip/ojrflj5blhoXlrrknO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9LCBbY2osIHg1XSlcXFxcbiAgICB9LFxcXFxuICAgIHhsU2VsZWN0OiBmdW5jdGlvbihiaWFuamksIGxiTGVuZ3RoKSB7XFxcXG4gICAgICAgIHJldHVybiBcXFxcXFxcInNlbGVjdDovL1xcXFxcXFwiICsgSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgb3B0aW9uczogWyfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOnJlZFxcXFxcXFwiIHRpdGxlPVxcXFxcXFwi5Yig6ZmkfHwnICsgYmlhbmppICsgJ1xcXFxcXFwiPuWIoCDpmaQnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojRjU3NDc0XFxcXFxcXCIgdGl0bGU9XFxcXFxcXCLpmpDol498fCcgKyBiaWFuamkgKyAnXFxcXFxcXCI+6ZqQIOiXjycsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiNGRjgwMDBcXFxcXFxcIiB0aXRsZT1cXFxcXFxcIuS/ruaUuXx8JyArIGJpYW5qaSArICdcXFxcXFxcIj7kv64g5pS5JywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzA5OEFDMVxcXFxcXFwiIHRpdGxlPVxcXFxcXFwi572u6aG2fHwnICsgYmlhbmppICsgJzAnICsgJ1xcXFxcXFwiPue9riDpobYnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojMDk4QUMxXFxcXFxcXCIgdGl0bGU9XFxcXFxcXCLnp7vliqh8fCcgKyBiaWFuamkgKyAnXFxcXFxcXCI+56e7IOWKqCcsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiMwOThBQzFcXFxcXFxcIiB0aXRsZT1cXFxcXFxcIue9ruW6lXx8JyArIGJpYW5qaSArIGxiTGVuZ3RoICsgJ1xcXFxcXFwiPue9riDlupUnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojMDRCNDMxXFxcXFxcXCIgdGl0bGU9XFxcXFxcXCLliIbkuqt8fCcgKyBiaWFuamkgKyAnXFxcXFxcXCI+5Zyw5p2/5YiG5LqrJywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzA0QjQzMVxcXFxcXFwiIHRpdGxlPVxcXFxcXFwi5LqR5YiG5LqrfHwnICsgYmlhbmppICsgJ1xcXFxcXFwiPuS6keadv+WIhuS6qyddLFxcXFxuICAgICAgICAgICAgY29sOiAnMicsXFxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXFxcbiAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXFxcbiAgICAgICAgICAgICAgICB2YXIgbmV3SW5wdXQgPSBwYXJzZURvbUZvckh0bWwoaW5wdXQsICdzcGFuJiZ0aXRsZScpLnNwbGl0KCd8fCcpO1xcXFxuICAgICAgICAgICAgICAgIC8vIOS/ruaUuSzov6rov6osMCAgIOaTjeS9nOexu+WeiyzlkI3np7As57Si5byVXFxcXG4gICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBuZXdJbnB1dFswXTtcXFxcbiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IG5ld0lucHV0WzFdO1xcXFxuICAgICAgICAgICAgICAgIHZhciBudW0gPSBuZXdJbnB1dFsyXTtcXFxcbiAgICAgICAgICAgICAgICB2YXIgbnVtMiA9IG5ld0lucHV0WzNdO1xcXFxuICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwi5Yig6ZmkXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgayA9IFtuYW1lLCBudW1dO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5oC75oSf6KeJ562b6YCJ5oiW6ICF5pCc57Si5ZCO77yM55Sx5LqObnVt55qE5L2N572u5LiN5a+55Y+v6IO95Lya5Yig6Zmk6ZSZLOS6i+WunuWmguatpCzlt7Lkv64/XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFxcXFxcIuWNs+WwhuWIoOmZpDogXFxcXFxcXCIgKyBuYW1lKS5jb25maXJtKChrKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBrWzBdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW0gPSBrWzFdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZVJvdXRlID0gZ2V0VmFyKCdwYXJzZVJvdXRlJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uY29kZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGpzb24uY29kZXNbbmFtZV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSA9IGpzb24udGl0bGUuaW5kZXhPZihuYW1lKTsgLy/ov5nmoLfmiY3kvJrlvpfliLDmraPnoa7nmoTntKLlvJVcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLnRpdGxlLnNwbGljZShudW0sIDEpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5bey5bCG44CWXFxcXFxcXCIgKyBuYW1lICsgXFxcXFxcXCLjgJfliKDpmaRcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGspO1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwi6ZqQ6JePXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFxcXFxcImhpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nI1xcXFxcXFwiKS5sYXp5UnVsZSgoaykgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0ga1swXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0ga1sxXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSA9IGpzb24udGl0bGUuaW5kZXhPZihuYW1lKTsgLy/ov5nmoLfmiY3kvJrlvpfliLDmraPnoa7nmoTntKLlvJVcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi50aXRsZS5zcGxpY2UobnVtLCAxKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+W3suWwhuOAllxcXFxcXFwiICsgbmFtZSArIFxcXFxcXFwi44CX6ZqQ6JePXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/lj6/og73mmK/kuKrnvZHlnYAsIOaCqOWPr+mAieaLqeWIoOmZpFxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtuYW1lLCBudW1dKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcIuS/ruaUuVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiAoanNvbi5jb2Rlc1tuYW1lXSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5Db2RlID0gbmFtZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZXMgPSBqc29uLnRpdGxlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5OYW1lID0gXFxcXFxcXCLov5nmmK/lkI3np7BcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzW25hbWVdKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbkNvZGUgPSBqc29uLmNvZGVzW25hbWVdLnRvU3RyaW5nKCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbk5hbWUgPSBuYW1lO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcXFxcXCJoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSNcXFxcXFxcIikucnVsZSgoayx0aXRsZXMpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IFtdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoZ2V0SXRlbSgnbXlGdW5jdGlvbicpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGtbMF07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUgPSBrWzFdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5L+dIOWtmCcsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogc2F2ZUJ1dHRvbiArIFxcXFxcXFwic2F2ZUJ1dHRvbihnZXRWYXIoJ2lucHV0X2VkaXQnKSxuYW1lKTtiYWNrKCk7XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImlucHV0XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwi5bu66K6u5oyJ6buY6K6k55qE5Luj56CB5qC85byP5L+u5pS55ZOmXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogXFxcXFxcXCJwdXRWYXIoJ2lucHV0X2VkaXQnLCBpbnB1dClcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFxcXFxcXFwidGV4dGFyZWFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogXFxcXFxcXCItMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogJ+S/ruaUueKYhScgKyBuYW1lICsgJ+KYhScgKyBjb2RlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJk8c21hbGw+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojNkVCODk3XFxcXFxcXCI+5qC85byP5Li677ya5pON5L2c57G75Z6L4piF5qCH6aKY4piFZnVuY3Rpb24oKXvoh6rlrprkuYnlhoXlrrl9PGJyPuivt+WLv+Whq+WFpeWFtuS7luagvOW8jycsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc2F2ZUJ1dHRvbixuYW1lLHRpdGxlcykgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRtcEFyID0gZ2V0VmFyKCdpbnB1dF9lZGl0Jykuc3BsaXQoJ+KYhScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodG1wQXIubGVuZ3RoPDIpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kv67mlLnmoLzlvI/mnInor6/vvIzorr/pl67ooqvmi5Lnu50nXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3TmFtZSA9IHRtcEFyWzFdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobmV3TmFtZSE9PW5hbWUmJnRpdGxlcy5pbmNsdWRlcyhuZXdOYW1lKSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ+ajgOa1i+WIsOWQjOWQjeaOpeWPozonK25ld05hbWUrJyzmmK/lkKbopobnm5Y/JykuY29uZmlybSgoc2F2ZUJ1dHRvbixuYW1lKT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9IHNhdmVCdXR0b24oZ2V0VmFyKCdpbnB1dF9lZGl0JyksbmFtZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2soKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suS/neWtmOS/ruaUuVxcXFxcXFxcbuivt+iHquihjOajgOa1i+imhuebluWQjueahOWGheWuuSc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxzYXZlQnV0dG9uLG5hbWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSBzYXZlQnV0dG9uKGdldFZhcignaW5wdXRfZWRpdCcpLG5hbWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2soKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5L+d5a2Y5L+u5pS5JztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmKHR5cGVvZihjb2RlKT09PSdzdHJpbmcnJiZjb2RlLmxlbmd0aD4yKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICByZXR1cm4gY29kZVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgcmV0dXJuICd0b2FzdDovL+W3suS/neWtmOS/ruaUuSc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHNhdmVCdXR0b24sbmFtZSx0aXRsZXMpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiAn4oCY4oCY4oCZ4oCZPGJpZz48YmlnPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzI5OEEwOFxcXFxcXFwiPuS/nSDlrZgnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgW25OYW1lLCBuQ29kZV0sdGl0bGVzKSAvL1tuYW1lLCBqc29uLmNvZGVzW25hbWVdLnRvU3RyaW5nKCldKVxcXFxuICAgICAgICAgICAgICAgICAgICAvKn0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+WPquaciee9keWdgOaIluiAheagh+mimCwg5LiN5pSv5oyB5L+u5pS5XFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgfSovXFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCLnva7pobZcXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcIue9ruW6lVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBudW0gPSBqc29uLnRpdGxlLmluZGV4T2YobmFtZSk7IC8v6L+Z5qC35omN5Lya5b6X5Yiw5q2j56Gu55qE57Si5byVXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihudW0+LTEpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0ganNvbi50aXRsZS5zcGxpY2UobnVtLCAxKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLnRpdGxlLnNwbGljZShudW0yLCAwLCBpdGVtWzBdKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgJC5zdHJpbmdpZnkoanNvbikpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/msqHmib7liLA6JytuYW1lO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCLnp7vliqhcXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCdoaWtlcjovL2VtcHR5I25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcignYmlhbmppJywgJ+enu+WKqCMnICsgayk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG51bSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCLliIbkuqtcXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcIuS6keWIhuS6q1xcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uY29kZXNbbmFtZV0pIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VUZXh0ID0gdHlwZW9mIGpzb24uY29kZXNbbmFtZV0gPT0gJ2Z1bmN0aW9uJyA/ICQuc3RyaW5naWZ5KGpzb24uY29kZXNbbmFtZV0pIDoganNvbi5jb2Rlc1tuYW1lXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRleHQgPSAnTXlQYXJzZVPimIUnICsgbmFtZSArICfimIUnICsgYmFzZTY0RW5jb2RlKHBhcnNlVGV4dCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZVRleHQgPSAn55u06ZO+4piFJyArIGpzb24udGl0bGVbbnVtXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09ICfkupHliIbkuqsnICYmIHBhcnNlVGV4dC5zdWJzdHIoMCwgOCkgPT0gJ015UGFyc2VTJykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGV4dCA9IHNoYXJlUGFzdGUocGFyc2VUZXh0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VUZXh0LnN1YnN0cigwLCA2KSAhPSAnZXJyb3I6JyA/ICdjb3B5Oi8vJyArIHBhcnNlVGV4dCArICdcXFxcXFxcXG7imIXimIXimIVcXFxcXFxcXG4nICsgJ015UGFyc2VT77yaJyArIG5hbWUgOiAndG9hc3Q6Ly/liIbkuqvlpLHotKUhIeS6keWJqui0tOadv+WPr+iDveaMguS6hic7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnY29weTovLycgKyBwYXJzZVRleHQ7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pqC5LiN5pSv5oyBJztcXFxcbiAgICAgICAgICAgICAgICB9IC8vc3dpdGNo55qEXFxcXG4gICAgICAgICAgICB9KSAvL1N0cmluZ+eahFxcXFxuICAgICAgICB9KSAvL3N0cmluZ2lmeeeahFxcXFxuICAgIH0sXFxcXG4gICAgeGpQYXJzZTogZnVuY3Rpb24oKSB7XFxcXG4gICAgICAgIHJldHVybiAkKFxcXFxcXFwiaGlrZXI6Ly9lbXB0eSNub0hpc3RvcnkjXFxcXFxcXCIpLnJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAgICAgdmFyIGQgPSBbXTtcXFxcbiAgICAgICAgICAgIGV2YWwoZ2V0SXRlbSgnbXlGdW5jdGlvbicpKTtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfkv50g5a2YJyxcXFxcbiAgICAgICAgICAgICAgICB1cmw6IHNhdmVCdXR0b24gKyBcXFxcXFxcInNhdmVCdXR0b24oaW5wdXQpO2JhY2soKTtjbGVhclZhcignaW5wdXRfYWRkJylcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJpbnB1dFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwi6L6T5YWl5q2j56Gu5qC85byP5YaF5a65XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6ICdwdXRWYXIoXFxcXFxcXCJpbnB1dF9hZGRcXFxcXFxcIiwgaW5wdXQpJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXFxcXFxcXCJ0ZXh0YXJlYVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFxcXFxcXFwiLTFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRWYXIoJ2lucHV0X2FkZCcpLFxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxzbWFsbD48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiM2RUI4OTdcXFxcXFxcIj7mjInmj4/ov7Dor4nmoLzlvI/ovpPlhaUsIOivt+WLv+Whq+WFpeWFtuS7luagvOW8jzxicj7mnKzlnLDlj6Pku6Q6IOaTjeS9nOexu+Wei+KYheWQjeensOKYheS7o+eggTxicj7kupHlj6Pku6Q6IOmTvuaOpeKYheKYheKYheWQjeensDsg57qv572R5Z2AOiDnm7Tpk77imIV1cmwx4piFdXJsMicsXFxcXG4gICAgICAgICAgICAgICAgZGVzYzogJ+KAmOKAmOKAmeKAmTxiaWc+PGJpZz48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiMyOThBMDhcXFxcXFxcIj7kv50g5a2YJyxcXFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoJ25vTG9hZGluZycpLmxhenlSdWxlKChzYXZlQnV0dG9uKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzYXZlQnV0dG9uKGdldFZhcignaW5wdXRfYWRkJykpO1xcXFxuICAgICAgICAgICAgICAgIH0sIHNhdmVCdXR0b24pLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcXFxuICAgICAgICB9KVxcXFxuICAgIH0sXFxcXG4gICAgeWRQYXJzZTogZnVuY3Rpb24oQkptb2RlLCBpKSB7XFxcXG4gICAgICAgIHJldHVybiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XFxcXG4gICAgICAgICAgICB2YXIgQSA9IGtbMF0uc3BsaXQoJyMnKVsxXTtcXFxcbiAgICAgICAgICAgIHZhciBCID0ga1sxXTtcXFxcbiAgICAgICAgICAgIHZhciBwYXJzZVJvdXRlID0gZ2V0VmFyKCdwYXJzZVJvdXRlJyk7XFxcXG4gICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXFxcbiAgICAgICAgICAgIHZhciBpdGVtID0ganNvbi50aXRsZS5zcGxpY2UoQSwgMSk7IC8vIDE6IOagh+iusOW8gOWni+S9jee9ru+8jDI6IOWIoOmZpOWIsOWTquS4quS9jee9rlxcXFxuICAgICAgICAgICAganNvbi50aXRsZS5zcGxpY2UoQiwgMCwgaXRlbVswXSk7IC8vIDE6IOWQjOS4iu+8jDI6IDDooajnpLrkuI3liKDpmaTvvIwzOiDmt7vliqDlr7nosaFcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxcXG4gICAgICAgICAgICBjbGVhclZhcignYmlhbmppJyk7XFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcXFxuICAgICAgICB9LCBbQkptb2RlLCBpXSlcXFxcbiAgICB9LFxcXFxuICAgIHBsc2NQYXJzZTogZnVuY3Rpb24oKSB7XFxcXG4gICAgICAgIHJldHVybiAkKCdoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSMnKS5ydWxlKCgpID0+IHtcXFxcbiAgICAgICAgICAgIHZhciBkID0gW107XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn5om56YeP5Yig6Zmk6Kej5p6QJyxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiAnYXV0byYmZmxvYXQnLFxcXFxuICAgICAgICAgICAgICAgIHVybDogJ2ZpbGU6Ly8vc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL2NhY2hlL3Bsc2NQYXJzZS5odG1sJyxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3g1X3dlYnZpZXdfc2luZ2xlJ1xcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9XFxcXG59O1xcXFxuXFxcXG5mdW5jdGlvbiBzZXRQYXJzZSgpIHtcXFxcbiAgICAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/XFxcXFxcXCIpLnNldFBhcnNlKCk7XFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6LCD55So6Lev55SxXFxcIixcXFwicGF0aFxcXCI6XFxcIlJvdXRlXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuY29uc3QgZCA9IFtdO1xcXFxuY29uc3QgZGF0YSA9IHt9O1xcXFxuXFxcXG5kYXRhLm9sZENvbmZpZyA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFxcXFxcIjtcXFxcbmRhdGEuY2pSb3V0ZSA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qc1xcXFxcXFwiO1xcXFxuZGF0YS54NVJvdXRlID1cXFxcbmdldFBhdGgoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uaHRtbCcpO1xcXFxuXFxcXG5kYXRhLmp4TGF6eSA9IFxcXFxcXFwiZXZhbCgndmFyIGNvbmZpZyA9JyArIGZldGNoKCdcXFxcXFxcIiArIGRhdGEub2xkQ29uZmlnICsgXFxcXFxcXCInKSk7ZXZhbChmZXRjaChjb25maWcuY2opKTtheXRtUGFyc2UoaW5wdXQpXFxcXFxcXCI7XFxcXG5cXFxcbmRhdGEuc3pQYXJzZSA9IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPeiuvue9riNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFxcXFxcIjtcXFxcblxcXFxuZGF0YS5zZXRQYXJzZSA9IGZ1bmN0aW9uKCkge1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIGRlc2M6ICc3OTUnLFxcXFxuICAgICAgICB1cmw6IHRoaXMueDVSb3V0ZSxcXFxcbiAgICAgICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZSdcXFxcbiAgICB9KTtcXFxcbiAgICB2YXIgb2xkViA9IGdldFZhcignanhPbGRWJyk7XFxcXG4gICAgdmFyIG5ld1YgPSBnZXRWYXIoJ2p4TmV3VicpO1xcXFxuICAgIHZhciB2ZXJzaW9uVGlwcyA9IHBhcnNlRmxvYXQobmV3VikgPiBwYXJzZUZsb2F0KG9sZFYpID8gJ+KAmOKAmOacieaWsOeJiOacrDogdicgKyBuZXdWIDogJ+KAmOKAmCc7XFxcXG4gICAgdmFyIHBpY3MgPSBbXFxcXG4gICAgICAgICdodHRwczovL2Nkbi5zZW92eC5jb20vaW1nL3Nlb3Z4LTIwLTEwJTIwKDkyKS5qcGcnLFxcXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9tb20yMDE4JTIwKDIwNykuanBnJyxcXFxcbiAgICAgICAgJ2h0dHBzOi8vdHZhNC5zaW5haW1nLmNuL2xhcmdlLzliZDliMTY3Z3kxZndyaDV4b2x0ZGoyMWhjMHUwdGF4LmpwZycsXFxcXG4gICAgICAgICdodHRwczovL3R2YTEuc2luYWltZy5jbi9sYXJnZS8wMDVCWXFwZ2d5MWZ3cmV5dTRubDZqMzFoYzB1MGFoci5qcGcnLFxcXFxuICAgICAgICAnaHR0cHM6Ly9zMy5ibXAub3ZoL2ltZ3MvMjAyMS8xMC9kN2U2MGI5OTA3NDIwOTNkLmpwZWcnLFxcXFxuICAgICAgICAnaHR0cHM6Ly9zMy5ibXAub3ZoL2ltZ3MvMjAyMS8xMC85MWFkNmQ2NTM4YmY4Njg5LmpwZycsXFxcXG4gICAgICAgICdodHRwczovL3R2YTEuc2luYWltZy5jbi9sYXJnZS8wMDVCWXFwZ2d5MWZ3cmVzbDVwbWxqMzFoYzB4Y3drYS5qcGcnLFxcXFxuICAgICAgICAnaHR0cHM6Ly90dmEzLnNpbmFpbWcuY24vbGFyZ2UvMDA1QllxcGdneTFmd3JnamRrNzRvajMxaGMwdTBkcW4uanBnJyxcXFxcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnNlb3Z4LmNvbS9pbWcvbW9tMjAxOCUyMCgzMjApLmpwZycsXFxcXG4gICAgICAgICdodHRwczovL2Nkbi5zZW92eC5jb20vaW1nL21vbTIwMTglMjAoODAzKS5qcGcnXFxcXG4gICAgXTtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICBpbWc6IHBpY3NbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTApXSxcXFxcbiAgICAgICAgdGl0bGU6IHZlcnNpb25UaXBzICsgJ+KAmeKAmTxzbWFsbD48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiM2RUI4OTdcXFxcXFxcIj48YnI+44CA44CA54K55Ye75LiK5pa55aS05YOP6L+b5YWl57yW6L6RPGJyPueCueatpOi/m+WFpeiuuuWdm+W4luWtkOWIl+ihqCcsXFxcXG4gICAgICAgIGRlc2M6ICflvZPliY3niYjmnKw6IHYnICsgb2xkVixcXFxcbiAgICAgICAgdXJsOiAnaHR0cHM6Ly9oYWlrdW9zaGlqaWUuY24vdXNlci8xOTU4JyxcXFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xJ1xcXFxuICAgIH0pO1xcXFxuICBzZXRSZXN1bHQoZCk7XFxcXG59XFxcXG5cXFxcbnN3aXRjaCAoZ2V0UGFyYW0oXFxcXFxcXCJ0eXBlXFxcXFxcXCIpKSB7XFxcXG4gICAgY2FzZSBcXFxcXFxcIuiuvue9rlxcXFxcXFwiOlxcXFxuICAgICAgICBkYXRhLnNldFBhcnNlKCk7XFxcXG4gICAgICAgIC8vc2V0UmVzdWx0KGQpO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlIFxcXFxcXFwi57yW6L6RXFxcXFxcXCI6XFxcXG4gICAgICAgICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9qeEl0ZW0/cnVsZT1NeUZpZWxk4bSw4oG/XFxcXFxcXCIpLmp4TGlzdCgpO1xcXFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuXFxcXHRjYXNlIFxcXFxcXFwi5Li76aKYXFxcXFxcXCI6XFxcXG5cXFxcdCAgICAgJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3RoZW1lP3J1bGU9TXlGaWVsZOG0sOKBv1xcXFxcXFwiKS50aGVtZUluaXQoKTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG5cXFxcdGNhc2UgXFxcXFxcXCLop6PmnpBcXFxcXFxcIjpcXFxcblxcXFx0ICAgICAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvanhNYW5hZ2U/cnVsZT1NeUZpZWxk4bSw4oG/XFxcXFxcXCIpLmp4TWFuYWdlKCk7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGRlZmF1bHQ6XFxcXG4gICAgICAgICQuZXhwb3J0cyA9IGRhdGE7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuino+aekOmhueS4u+eVjOmdolxcXCIsXFxcInBhdGhcXFwiOlxcXCJqeEl0ZW1cXFwiLFxcXCJydWxlXFxcIjpcXFwiZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvUGFyc2VfRG4uanM/cnVsZT1NeUZpZWxk4bSw4oG/JykpLnJ1bGUpO1xcXFxudmFyIGlzTG9naW4gPSBmdW5jdGlvbiAoKXtyZXR1cm4gdHJ1ZX1cXFxcbmZ1bmN0aW9uIGJic1laKCkge1xcXFxuICAgIHZhciBfMHg0N2E5YjQgPSB7XFxcXG4gICAgICAgICdKeFNNbic6IGZ1bmN0aW9uKF8weDI0OTk1MiwgXzB4NGFiYzE1KSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gXzB4MjQ5OTUyICsgXzB4NGFiYzE1O1xcXFxuICAgICAgICB9LFxcXFxuICAgICAgICAnTEd3bUMnOiAn56e75YqoIycsXFxcXG4gICAgICAgICdHdkRWWSc6IGZ1bmN0aW9uKF8weDQ2MWYyZCwgXzB4NTQwNTcxKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gXzB4NDYxZjJkICsgXzB4NTQwNTcxO1xcXFxuICAgICAgICB9LFxcXFxuICAgICAgICAnV2ZlSEQnOiAn4oCY4oCY4oCZ4oCZPHNtYWxsPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6I0ZFOUEyRVxcXFxcXFwiPicsXFxcXG4gICAgICAgICdFcUlscyc6ICfnp7vliqg6ICcsXFxcXG4gICAgICAgICdFZmZibic6ICd0ZXh0XzInLFxcXFxuICAgICAgICAnUnhreEEnOiBmdW5jdGlvbihfMHgzMmE3ZDAsIF8weDFhOTMyYykge1xcXFxuICAgICAgICAgICAgcmV0dXJuIF8weDMyYTdkMChfMHgxYTkzMmMpO1xcXFxuICAgICAgICB9LFxcXFxuICAgICAgICAnVkJHSkgnOiAnamRSb3V0ZScsXFxcXG4gICAgICAgICdCWmdSdCc6IGZ1bmN0aW9uKF8weDI2OTg0ZSwgXzB4NWNjOTI2KSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gXzB4MjY5ODRlID09PSBfMHg1Y2M5MjY7XFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgICdyZ0dDQyc6ICd3RFZFYicsXFxcXG4gICAgICAgICdNY3pPVyc6IGZ1bmN0aW9uKF8weDI4ODBiZiwgXzB4MmQ5MzA2LCBfMHg5Nzc4N2EpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBfMHgyODgwYmYoXzB4MmQ5MzA2LCBfMHg5Nzc4N2EpO1xcXFxuICAgICAgICB9LFxcXFxuICAgICAgICAnRlVqZG0nOiAnYmJzWVonLFxcXFxuICAgICAgICAnbHFGaGInOiBmdW5jdGlvbihfMHg0M2JiZTYpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBfMHg0M2JiZTYoKTtcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAgJ0ZVUnB5JzogZnVuY3Rpb24oXzB4MjI2NWMyLCBfMHhhMWQ1NjgsIF8weDI5ZGUwMSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIF8weDIyNjVjMihfMHhhMWQ1NjgsIF8weDI5ZGUwMSk7XFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgICdYSU9iQic6ICd2YXIgeGRSb3V0ZT1cXFxcXFxcXFxcXFxcXFwiXFxcXFxcXFxcXFxcXFxcIjsnXFxcXG4gICAgfTtcXFxcbiAgICBpZiAoIV8weDQ3YTliNFsnUnhreEEnXShnZXRWYXIsIF8weDQ3YTliNFsnVkJHSkgnXSkpIHtcXFxcbiAgICAgICAgaWYgKF8weDQ3YTliNFsnQlpnUnQnXShfMHg0N2E5YjRbJ3JnR0NDJ10sICdKVmtBWicpKSB7XFxcXG4gICAgICAgICAgICBkWydwdXNoJ10oe1xcXFxuICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDQ3YTliNFsnSnhTTW4nXShfMHg0N2E5YjRbJ0xHd21DJ10sIGkpID09IEJKbW9kZSA/IF8weDQ3YTliNFsnSnhTTW4nXShfMHg0N2E5YjRbJ0d2RFZZJ10oXzB4NDdhOWI0WydXZmVIRCddLCBfMHg0N2E5YjRbJ0VxSWxzJ10pLCB4c0xpc3QpIDogJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzI5OEEwOFxcXFxcXFwiPicgKyB4c0xpc3QsXFxcXG4gICAgICAgICAgICAgICAgJ3VybCc6IGJqSXRlbVsneWRQYXJzZSddKEJKbW9kZSwgaSksXFxcXG4gICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NDdhOWI0WydFZmZibiddXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIF8weDQ3YTliNFsnTWN6T1cnXShwdXRWYXIsIF8weDQ3YTliNFsnRlVqZG0nXSwgXzB4NDdhOWI0WydscUZoYiddKGlzTG9naW58fGZ1bmN0aW9uICgpe3JldHVybiB0cnVlfSkpO1xcXFxuICAgICAgICAgICAgXzB4NDdhOWI0WydGVVJweSddKHB1dFZhciwgJ2pkUm91dGUnLCBfMHg0N2E5YjRbJ1hJT2JCJ10pO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiBnZXRWYXIoXzB4NDdhOWI0WydGVWpkbSddKTtcXFxcbn1cXFxcbnZhciBqeEl0ZW0gPSB7XFxcXG4gICAgJ2p4TGlzdCc6IGZ1bmN0aW9uKCkge1xcXFxuICAgICAgICB2YXIgXzB4NGMwNDI3ID0ge1xcXFxuICAgICAgICAgICAgJ1VWV29GJzogZnVuY3Rpb24oXzB4MjZiYjA3LCBfMHgyMjFiNGQpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4MjZiYjA3ICsgXzB4MjIxYjRkO1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICdjb2xvcic6ZnVuY3Rpb24odGV4dCwgY29sb3IpIHtcXFxcbiAgICAgICAgICAgICAgICB0ZXh0ICs9IFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgaWYgKHRleHQuaW5kZXhPZihcXFxcXFxcIuKAnOKAnOKAneKAnVxcXFxcXFwiKSA9PT0gMCkge1xcXFxuICAgICAgICAgICAgICAgICAgICB0ZXh0LnJlcGxhY2UoXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSdcXFxcXFxcIiArIGNvbG9yICsgXFxcXFxcXCInPlxcXFxcXFwiICsgdGV4dCArIFxcXFxcXFwiPC9mb250PlxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICdreldESyc6IGZ1bmN0aW9uKF8weDQ4NTRhOSwgXzB4M2U5OGM1KSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDQ4NTRhOSArIF8weDNlOThjNTtcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAnWFh5UXInOiAn56e75YqoIycsXFxcXG4gICAgICAgICAgICAnZ3RVbmonOiBmdW5jdGlvbihfMHg1OWFhZjcsIF8weDIyYzY2Yikge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHg1OWFhZjcgKyBfMHgyMmM2NmI7XFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgJ1V0ZldmJzogJ+KAmOKAmOKAmeKAmTxzbWFsbD48c3BhbiBzdHlsZT1cXFxcXFxcXFxcXFxcXFwiY29sb3I6I0ZFOUEyRVxcXFxcXFxcXFxcXFxcXCI+JyxcXFxcbiAgICAgICAgICAgICdRT3ZKVic6ICfnp7vliqg6ICcsXFxcXG4gICAgICAgICAgICAnQUJFd0InOiAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXFxcXFxcXFxcImNvbG9yOiMyOThBMDhcXFxcXFxcXFxcXFxcXFwiPicsXFxcXG4gICAgICAgICAgICAnb3p6V0cnOiAndGV4dF8yJyxcXFxcbiAgICAgICAgICAgICduV2ZWUic6IGZ1bmN0aW9uKF8weDQ4MGYzYSwgXzB4NGM4NGZjKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDQ4MGYzYSArIF8weDRjODRmYztcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAnSkNjTlknOiAncGFyc2VSb3V0ZScsXFxcXG4gICAgICAgICAgICAncmdESXAnOiAnYmlhbmppJyxcXFxcbiAgICAgICAgICAgICdob0lkSic6ICfigJjigJjigJnigJk8YmlnPjxzcGFuIHN0eWxlPVxcXFxcXFxcXFxcXFxcXCJjb2xvcjojNkVCODk3XFxcXFxcXFxcXFxcXFxcIj7mlrAg5bu6IOinoyDmnpAnLFxcXFxuICAgICAgICAgICAgJ0ZyR09IJzogZnVuY3Rpb24oXzB4MTJkNmRiLCBfMHgyYTA2OGQpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4MTJkNmRiIDwgXzB4MmEwNjhkO1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICdvQ0NTaic6IGZ1bmN0aW9uKF8weDE5YjE3OCwgXzB4NGVmOGY2KSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDE5YjE3OCA9PT0gXzB4NGVmOGY2O1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICdIWmhsYyc6IGZ1bmN0aW9uKF8weDVjYWUwMywgXzB4MjZlMjQyKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDVjYWUwMyA9PSBfMHgyNmUyNDI7XFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgJ2NnSWVBJzogZnVuY3Rpb24oXzB4MjVlMzY4LCBfMHg4YmM4ZTkpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4MjVlMzY4ICsgXzB4OGJjOGU5O1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICd4ZHJGdic6IGZ1bmN0aW9uKF8weDRhYjVkOCwgXzB4MjEyNDJmKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDRhYjVkOCArIF8weDIxMjQyZjtcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAneXdqdXgnOiBmdW5jdGlvbihfMHg1ZTMwNTEsIF8weDRlMDIzMCkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHg1ZTMwNTEoXzB4NGUwMjMwKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfTtcXFxcbiAgICAgICAgdmFyIF8weDFkOGJiMSA9IGdldFZhcihfMHg0YzA0MjdbJ0pDY05ZJ10pO1xcXFxuICAgICAgICB2YXIgXzB4M2I4OWFiID0gcGFyc2VGaWxlWyd0aXRsZSddO1xcXFxuICAgICAgICB2YXIgXzB4NDlkYTk2ID0gZ2V0VmFyKF8weDRjMDQyN1sncmdESXAnXSk7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogXzB4NGMwNDI3Wydob0lkSiddLFxcXFxuICAgICAgICAgICAgZGVzYzon5rOo5oSPOuS9jee9ruaTjeS9nOWKn+iDveWPquWcqOWIhuexu+etm+mAieS4uuWFqOmDqOaXtueUn+aViFxcXFxcXFxcbuS4i+aWueaQnOe0ouaMieWQjeensOaIluWcsOWdgCzph43nva7or7fnlZnnqbrmiJbngrnop6PmnpDmlbDph4/mjInpkq4nLFxcXFxuICAgICAgICAgICAgdXJsOiBiakl0ZW1bJ3hqUGFyc2UnXSgpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgbGluZVZpc2libGU6ZmFsc2VcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTon5pCc57SiJyxcXFxcbiAgICAgICAgICAgIGRlc2M6J21lbmd4JyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidpbnB1dCcsXFxcXG4gICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFxcXFxcInB1dFZhcignZHAuc2VhcmNoSngnLGlucHV0KVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogdHJ1ZSxcXFxcbiAgICAgICAgICAgICAgICB0ZXh0U2l6ZTogMTEsXFxcXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOmdldFZhcignZHAuc2VhcmNoSngnLCcnKSxcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICB1cmw6JC50b1N0cmluZygoKT0+e1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBsZXQgZmlsdGVycyA9IFsn5YWo6YOoJywn6ZO+5o6lJywnanNvbicsJ+WFjeWXhSddO1xcXFxuICAgICAgICBmb3IobGV0IG8gaW4gZmlsdGVycyl7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOmdldFZhcignZG4uanhfZmlsdGVyJywn5YWo6YOoJyk9PT1maWx0ZXJzW29dPyfigJzigJzigJ3igJ08c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiMyOThBMDhcXFxcXFxcIj4nK2ZpbHRlcnNbb106ZmlsdGVyc1tvXSxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGl0KT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2RuLmp4X2ZpbHRlcicsaXQpO1xcXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgICAgICAgICAgICAgIH0sZmlsdGVyc1tvXSksXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICB2YXIgXzB4MmVjYmU1ID0gXzB4M2I4OWFiWydsZW5ndGgnXTtcXFxcbiAgICAgICAgdmFyIGpzb249e3RpdGxlOltdLGNvZGVzOnt9fTtcXFxcbiAgICAgICAgbGV0IHNldEZpbGUgPSByZXF1ZXN0KCdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicpO1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgZXZhbCgnanNvbj0nK3NldEZpbGUpO1xcXFxuICAgICAgICB9Y2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgIGxvZygnSnNvbuino+aekOWPkeeUn+S6humUmeivrzonK2UubWVzc2FnZSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaWYoZ2V0VmFyKCdkbi5qeF9maWx0ZXInLCflhajpg6gnKT09PSfpk77mjqUnKXtcXFxcbiAgICAgICAgICAgIF8weDNiODlhYiA9IF8weDNiODlhYi5maWx0ZXIoaXQ9PighL8KpJC8udGVzdChpdCkpJiZ0eXBlb2YoanNvbi5jb2Rlc1tfMHg0YzA0MjdbJ25XZlZSJ10oaXQsICcnKVsncmVwbGFjZSddKC9odHRwLipcXFxcXFxcXC9cXFxcXFxcXC8vZywgJycpXSk9PT0nc3RyaW5nJyk7XFxcXG4gICAgICAgIH1lbHNlIGlmKGdldFZhcignZG4uanhfZmlsdGVyJywn5YWo6YOoJyk9PT0n5YWN5ZeFJyl7XFxcXG4gICAgICAgICAgICBfMHgzYjg5YWIgPSBfMHgzYjg5YWIuZmlsdGVyKGl0PT50eXBlb2YoanNvbi5jb2Rlc1tfMHg0YzA0MjdbJ25XZlZSJ10oaXQsICcnKVsncmVwbGFjZSddKC9odHRwLipcXFxcXFxcXC9cXFxcXFxcXC8vZywgJycpXSk9PT0nZnVuY3Rpb24nKTtcXFxcbiAgICAgICAgfWVsc2UgaWYoZ2V0VmFyKCdkbi5qeF9maWx0ZXInLCflhajpg6gnKT09PSdqc29uJyl7XFxcXG4gICAgICAgICAgICBfMHgzYjg5YWIgPSBfMHgzYjg5YWIuZmlsdGVyKGl0PT4oL8KpJC8udGVzdChpdCkpJiZ0eXBlb2YoanNvbi5jb2Rlc1tfMHg0YzA0MjdbJ25XZlZSJ10oaXQsICcnKVsncmVwbGFjZSddKC9odHRwLipcXFxcXFxcXC9cXFxcXFxcXC8vZywgJycpXSk9PT0nc3RyaW5nJyk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaWYoZ2V0VmFyKCdkcC5zZWFyY2hKeCcsJycpKXtcXFxcbiAgICAgICAgICAgIF8weDNiODlhYiA9IF8weDNiODlhYi5maWx0ZXIoaXQ9Pihqc29uLmNvZGVzW18weDRjMDQyN1snbldmVlInXShpdCwgJycpXSsnJykuaW5jbHVkZXMoZ2V0VmFyKCdkcC5zZWFyY2hKeCcpKXx8aXQuaW5jbHVkZXMoZ2V0VmFyKCdkcC5zZWFyY2hKeCcsJycpKSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOlxcXFxcXFwi6Kej5p6Q5pWwOlxcXFxcXFwiK18weDRjMDQyNy5jb2xvcihfMHgzYjg5YWIubGVuZ3RoLCcjZmY3MDAwJyksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTpcXFxcXFxcInNjcm9sbF9idXR0b25cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpPT57XFxcXG4gICAgICAgICAgICAgICAgY2xlYXJWYXIoJ2RwLnNlYXJjaEp4Jyk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3sumHjee9ridcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICAvLyDkuIvpnaLmmK/op6PmnpDliJfooajmjpLliJdcXFxcbiAgICAgICAgLy8gZm9yICh2YXIgXzB4ZTJjM2Q4ID0gMHgwOyBfMHg0YzA0MjdbJ0ZyR09IJ10oXzB4ZTJjM2Q4LCBfMHgyZWNiZTUpOyBfMHhlMmMzZDgrKykge1xcXFxuICAgICAgICBmb3IgKGxldCBfMHhlMmMzZDggaW4gXzB4M2I4OWFiKSB7XFxcXG4gICAgICAgICAgICB2YXIgXzB4MzM3ODhjID0gXzB4M2I4OWFiW18weGUyYzNkOF07XFxcXG4gICAgICAgICAgICB2YXIgXzB4Mzc4NzFlID0gXzB4NGMwNDI3WyduV2ZWUiddKF8weDMzNzg4YywgJycpWydyZXBsYWNlJ10oL2h0dHAuKlxcXFxcXFxcL1xcXFxcXFxcLy9nLCAnJyk7XFxcXG4gICAgICAgICAgICBpZiAoL+enu+WKqC8gWyd0ZXN0J10oXzB4NDlkYTk2KSkge1xcXFxuICAgICAgICAgICAgICAgIGlmIChfMHg0YzA0MjdbJ29DQ1NqJ10oJ3VLTHhGJywgJ3VLTHhGJykpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDRjMDQyN1snSFpobGMnXShfMHg0YzA0MjdbJ1hYeVFyJ10gKyBfMHhlMmMzZDgsIF8weDQ5ZGE5NikgPyBfMHg0YzA0MjdbJ25XZlZSJ10oXzB4NGMwNDI3WydjZ0llQSddKF8weDRjMDQyN1snVXRmV2YnXSwgXzB4NGMwNDI3WydRT3ZKViddKSwgXzB4Mzc4NzFlKSA6IF8weDRjMDQyN1snY2dJZUEnXShfMHg0YzA0MjdbJ0FCRXdCJ10sIF8weDM3ODcxZSksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWyd5ZFBhcnNlJ10oXzB4NDlkYTk2LCBfMHhlMmMzZDgpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogJ3RleHRfMidcXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIF8weDJiYzYxOCA9IF8weDNiODlhYltfMHhlMmMzZDhdO1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgXzB4NWNmNDE3ID0gXzB4NGMwNDI3WydVVldvRiddKF8weDJiYzYxOCwgJycpWydyZXBsYWNlJ10oL2h0dHAuKlxcXFxcXFxcL1xcXFxcXFxcLy9nLCAnJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmICgv56e75YqoLyBbJ3Rlc3QnXShfMHg0OWRhOTYpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDRjMDQyN1sna3pXREsnXShfMHg0YzA0MjdbJ1hYeVFyJ10sIF8weGUyYzNkOCkgPT0gXzB4NDlkYTk2ID8gXzB4NGMwNDI3WydndFVuaiddKF8weDRjMDQyN1snZ3RVbmonXShfMHg0YzA0MjdbJ1V0ZldmJ10sIF8weDRjMDQyN1snUU92SlYnXSksIF8weDVjZjQxNykgOiBfMHg0YzA0MjdbJ0FCRXdCJ10gKyBfMHg1Y2Y0MTcsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCc6IGJqSXRlbVsneWRQYXJzZSddKF8weDQ5ZGE5NiwgXzB4ZTJjM2Q4KSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg0YzA0MjdbJ296eldHJ11cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF8weDExOTM2NSA9IFtfMHgyYmM2MTgsIF8weDRjMDQyN1snZ3RVbmonXShfMHhlMmMzZDgsICd8fCcpXVsnam9pbiddKCd8fCcpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg0YzA0MjdbJ25XZlZSJ10oXzB4NGMwNDI3WydBQkV3QiddLCBfMHg1Y2Y0MTcpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDRjMDQyN1snb3p6V0cnXSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWyd4bFNlbGVjdCddKF8weDExOTM2NSwgXzB4MmVjYmU1Wyd0b1N0cmluZyddKCkpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIF8weGI3MDE5MiA9IFtfMHgzMzc4OGMsIF8weGUyYzNkOCArICd8fCddWydqb2luJ10oJ3x8Jyk7XFxcXG4gICAgICAgICAgICAgICAgLy8g6L+q6L+q5b2x6ZmifHwwfHwgIOWQjeensHx857Si5byVIOeahOaVsOe7hFxcXFxuICAgICAgICAgICAgICAgIC8vIEFCRXdCIOaYr+e7v+iJsiBfMHgzNzg3MWUg5piv5qCH6aKY5ZCN56ewICB4ZHJGduaYr+Wtl+espuS4sui/nuaOpeWHveaVsFxcXFxuICAgICAgICAgICAgICAgIC8vIGxldCBmbGFnID0gJ+KAmOKAmOKTiuKAmeKAmSc7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGZsYWcgPSBfMHg0YzA0MjcuY29sb3IoJ+KTiicsJyMwMDUxZmYnKTtcXFxcbiAgICAgICAgICAgICAgICBpZih0eXBlb2YoanNvbi5jb2Rlc1tfMHgzNzg3MWVdKT09PSdmdW5jdGlvbicpe1xcXFxuICAgICAgICAgICAgICAgICAgICAvLyBmbGFnID0gJ+KAnOKAnOKSv+KAneKAnSc7XFxcXG4gICAgICAgICAgICAgICAgICAgIGZsYWcgPSBfMHg0YzA0MjcuY29sb3IoJ+KSvycsJyNmZjcwMDAnKTtcXFxcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YoanNvbi5jb2Rlc1tfMHgzNzg3MWVdKT09PSd1bmRlZmluZWQnKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgZmxhZyA9ICcnO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAvLyBsZXQgY2xzID0gJzxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzI5OEEwOFxcXFxcXFwiPic7XFxcXG4gICAgICAgICAgICAgICAgLy8gbGV0IHRpdGxlID0gXzB4NGMwNDI3Wyd4ZHJGdiddKF8weDRjMDQyN1snQUJFd0InXSwgZmxhZytfMHgzNzg3MWUpO1xcXFxuICAgICAgICAgICAgICAgIC8vIGxldCB0aXRsZSA9IGZsYWcrY2xzK18weDM3ODcxZTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBmbGFnK18weDRjMDQyNy5jb2xvcihfMHgzNzg3MWUsJyMyOThBMDgnKTtcXFxcbiAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcXFxuICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiB0aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgLy8gJ3RpdGxlJzogXzB4Mzc4NzFlLFxcXFxuICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg0YzA0MjdbJ296eldHJ10sXFxcXG4gICAgICAgICAgICAgICAgICAgICd1cmwnOiBiakl0ZW1bJ3hsU2VsZWN0J10oXzB4YjcwMTkyLCBfMHgyZWNiZTVbJ3RvU3RyaW5nJ10oKSlcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBfMHg0YzA0MjdbJ3l3anV4J10oY2xlYXJWYXIsIF8weDRjMDQyN1sncmdESXAnXSk7XFxcXG4gICAgfSxcXFxcbiAgICAnbHFGaWxlJzogZnVuY3Rpb24oKSB7XFxcXG4gICAgICAgIHZhciBfMHg1NDFkNzYgPSB7XFxcXG4gICAgICAgICAgICAnYVdpUnMnOiBmdW5jdGlvbihfMHg0OGQ3N2IsIF8weDE5MTYxZiwgXzB4MjFjYjg1KSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDQ4ZDc3YihfMHgxOTE2MWYsIF8weDIxY2I4NSk7XFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgJ3dTZm56JzogZnVuY3Rpb24oXzB4NDg1MGVhKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDQ4NTBlYSgpO1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICdxUlFkQSc6ICdqZFJvdXRlJyxcXFxcbiAgICAgICAgICAgICdXUWlxayc6ICd2YXIgeGRSb3V0ZT1cXFxcXFxcIlxcXFxcXFwiOycsXFxcXG4gICAgICAgICAgICAncHNHZHQnOiBmdW5jdGlvbihfMHgxNzA3ODAsIF8weDNiNTEyYSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHgxNzA3ODAgPT0gXzB4M2I1MTJhO1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICdpbXhyaSc6ICd0cnVlJyxcXFxcbiAgICAgICAgICAgICduU2tqeCc6IGZ1bmN0aW9uKF8weDk1YmYzOCwgXzB4MzEzZjI1KSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDk1YmYzOCAhPT0gXzB4MzEzZjI1O1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICdpVk5lTSc6ICdlZUxKbScsXFxcXG4gICAgICAgICAgICAnSXdNVGwnOiAnMHwxfDV8OXwxMXwzfDZ8N3wxMHw0fDJ8OCcsXFxcXG4gICAgICAgICAgICAneGZkSGsnOiAn5ouJ5Y+W5Li75o+S5Lu25ZKM572R6aG16ISa5pysJyxcXFxcbiAgICAgICAgICAgICdyR0x1QSc6ICfkuLvmj5Lku7blrZjmlL7ot6/lvoQ6IC9jYWNoZS9QYXJzZV9Ebi5qc1xcXFxcXFxceDBh572R6aG16ISa5pys5a2Y5pS+6Lev5b6EOiAvY2FjaGUvUGFyc2VfRG4uaHRtbCcsXFxcXG4gICAgICAgICAgICAnelFTTEUnOiAndGV4dF9jZW50ZXJfMScsXFxcXG4gICAgICAgICAgICAnaHZpRGwnOiBmdW5jdGlvbihfMHgyNmRiNjIsIF8weDMxMmYxYykge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHgyNmRiNjIoXzB4MzEyZjFjKTtcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAnWnhVZ3QnOiAn5pON5L2c5oyH5byVJyxcXFxcbiAgICAgICAgICAgICdzV0ZvYyc6IGZ1bmN0aW9uKF8weDJhMDQ0YiwgXzB4MTQ5YTNmKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDJhMDQ0YiArIF8weDE0OWEzZjtcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAnT0VoYXQnOiAn5ouJ5Y+W5Luj56CBJyxcXFxcbiAgICAgICAgICAgICdadnRTdSc6ICfnvJbovpHop6PmnpAnLFxcXFxuICAgICAgICAgICAgJ2dYS01iJzogJ3RvYXN0Oi8v6K+35YWI5ouJ5Y+W5YiX6KGoJyxcXFxcbiAgICAgICAgICAgICdXQ09EQyc6IGZ1bmN0aW9uKF8weDRhZDNkNSwgXzB4MzFmYTFlKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDRhZDNkNSA8IF8weDMxZmExZTtcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAnckFrQWgnOiAndGV4dF8zJyxcXFxcbiAgICAgICAgICAgICd5V2FPSSc6ICfmgaLlpI3mj5Lku7bot6/lvoTkuLrpu5jorqQnLFxcXFxuICAgICAgICAgICAgJ3lqeWpLJzogJ+W9k+WJjeiuvue9ruS4ujogJyxcXFxcbiAgICAgICAgICAgICd0SFhlRSc6ICfmi4nlj5bop6PmnpDliJfooajmiJbogIXop6PmnpDku6PnoIEnLFxcXFxuICAgICAgICAgICAgJ0dNVVl1JzogJ+WtmOaUvui3r+W+hDogL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicsXFxcXG4gICAgICAgICAgICAnbXBaQlonOiAnbGluZV9ibGFuaycsXFxcXG4gICAgICAgICAgICAneHZxZ0YnOiAn6L6T5YWl5pyJ5pWI5o+S5Lu25Zyw5Z2AJyxcXFxcbiAgICAgICAgICAgICdoZXVLeCc6ICdwdXRWYXIoXFxcXFxcXCJwbHVnaW5MaW5rXFxcXFxcXCIsaW5wdXQpJyxcXFxcbiAgICAgICAgICAgICdJaWZpYSc6ICfigJjigJjigJnigJk8c3Ryb25nPjxiaWc+55m75b2V5o+Q56S6JyxcXFxcbiAgICAgICAgICAgICdQRlJIQSc6ICfkvb/nlKjnm7jlhbPlip/og73pnIDnmbvlvZXop4bnlYzorrrlnZvotKblj7dcXFxcXFxcXG7lpoLmnInpl67popjliY3lvoDorrrlnZvkuobop6Por6bmg4UnLFxcXFxuICAgICAgICAgICAgJ1VMd2tUJzogJ2h0dHBzOi8vaGFpa3Vvc2hpamllLmNuL3VzZXIvc2lnbmluJ1xcXFxuICAgICAgICB9O1xcXFxuICAgICAgICBpZiAoXzB4NTQxZDc2Wydwc0dkdCddKF8weDU0MWQ3Nlsnd1NmbnonXShiYnNZWiksIF8weDU0MWQ3NlsnaW14cmknXSkpIHtcXFxcbiAgICAgICAgICAgIGlmIChfMHg1NDFkNzZbJ25Ta2p4J10oXzB4NTQxZDc2WydpVk5lTSddLCBfMHg1NDFkNzZbJ2lWTmVNJ10pKSB7XFxcXG4gICAgICAgICAgICAgICAgXzB4NTQxZDc2WydhV2lScyddKHB1dFZhciwgJ2Jic1laJywgXzB4NTQxZDc2Wyd3U2ZueiddKGlzTG9naW4pfHxmdW5jdGlvbiAoKXtyZXR1cm4gdHJ1ZX0pO1xcXFxuICAgICAgICAgICAgICAgIF8weDU0MWQ3NlsnYVdpUnMnXShwdXRWYXIsIF8weDU0MWQ3NlsncVJRZEEnXSwgXzB4NTQxZDc2WydXUWlxayddKTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIF8weDRkMjVmZiA9IF8weDU0MWQ3NlsnSXdNVGwnXVsnc3BsaXQnXSgnfCcpLFxcXFxuICAgICAgICAgICAgICAgICAgICBfMHg0YTk3YzkgPSAweDA7XFxcXG4gICAgICAgICAgICAgICAgd2hpbGUgKCEhW10pIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfMHg0ZDI1ZmZbXzB4NGE5N2M5KytdKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcwJzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg1NDFkNzZbJ3hmZEhrJ10sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiBiakl0ZW1bJ3B1bGxTY3JpcHQnXShfbXlTZXRbJ2NqY2FjaGUnXSwgX215U2V0Wyd4NWNhY2hlJ10pLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVzYyc6IF8weDU0MWQ3NlsnckdMdUEnXSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NTQxZDc2Wyd6UVNMRSddXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcxJzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfMHg1NDFkNzZbJ2h2aURsJ10oZXZhbCwgXzB4NTQxZDc2WydodmlEbCddKGdldFZhciwgXzB4NTQxZDc2WydxUlFkQSddKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcyJzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiAnbGluZV9ibGFuaydcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzMnOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfMHgyYWIzOTkgPSAnaGlrZXI6Ly9lbXB0eSNub0hpc3RvcnkjQHJ1bGU9anM6dGhpcy5kPVtdOyQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9qeEl0ZW0/cnVsZT1NeUZpZWxk4bSw4oG/XFxcXFxcXCIpLmp4TGlzdCgpO3NldFJlc3VsdChkKTsnO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnNCc6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogXzB4NTQxZDc2WydaeFVndCddLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogdHlwZW9mIGN6R3VpZGUgPT0gJ2Z1bmN0aW9uJyA/IGN6R3VpZGUoKSA6ICcnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg1NDFkNzZbJ3pRU0xFJ11cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzUnOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhkUm91dGUgPSBfMHg1NDFkNzZbJ3NXRm9jJ10oeGRSb3V0ZSwgX215U2V0WydwYXJzZVJvdXRlJ10pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnNic6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF8weDNhOWFmZSA9IFt7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6ICfmi4nlj5bliJfooagnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWydwdWxsQ29kZSddKCfliJfooagnKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogXzB4NTQxZDc2WydPRWhhdCddLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWydwdWxsQ29kZSddKCfku6PnoIEnKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogXzB4NTQxZDc2WydadnRTdSddLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogXzB4NTQxZDc2WydodmlEbCddKGZpbGVFeGlzdCwgXzB4NTQxZDc2WydodmlEbCddKGdldFZhciwgJ3BhcnNlUm91dGUnKSkgPT0gISFbXSA/IF8weDJhYjM5OSA6IF8weDU0MWQ3NlsnZ1hLTWInXVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnNyc6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgXzB4MWEyY2RiID0gMHgwOyBfMHg1NDFkNzZbJ1dDT0RDJ10oXzB4MWEyY2RiLCBfMHgzYTlhZmVbJ2xlbmd0aCddKTsgXzB4MWEyY2RiKyspIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDNhOWFmZVtfMHgxYTJjZGJdWyd0aXRsZSddLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCc6IF8weDNhOWFmZVtfMHgxYTJjZGJdWyd1cmwnXSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDU0MWQ3NlsnckFrQWgnXVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc4JzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg1NDFkNzZbJ3lXYU9JJ10sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiBiakl0ZW1bJ2hmUGx1Z2luJ10oX215U2V0WydwYXJzZVJvdXRlJ10pLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVzYyc6IF8weDU0MWQ3Nlsnc1dGb2MnXShfMHg1NDFkNzZbJ3lqeWpLJ10gKyBteVNldFsnY2onXSwgJ1xcXFxcXFxcbuWtmOaUvui3r+W+hDogL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg1NDFkNzZbJ3pRU0xFJ11cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzknOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDU0MWQ3NlsndEhYZUUnXSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCc6ICd0b2FzdDovL+ivt+WcqOS4i+aWuemAiemhueaTjeS9nCcsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXNjJzogXzB4NTQxZDc2WydHTVVZdSddLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg1NDFkNzZbJ3pRU0xFJ11cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzEwJzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg1NDFkNzZbJ21wWkJaJ11cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzExJzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVzYyc6IF8weDU0MWQ3NlsneHZxZ0YnXSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogJ2lucHV0JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4dHJhJzoge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlVmlzaWJsZSc6ICFbXSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWZhdWx0VmFsdWUnOiBfMHg1NDFkNzZbJ2h2aURsJ10oZ2V0VmFyLCAncGx1Z2luTGluaycpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29uQ2hhbmdlJzogXzB4NTQxZDc2WydoZXVLeCddXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICBkWydwdXNoJ10oe1xcXFxuICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDU0MWQ3NlsnSWlmaWEnXSxcXFxcbiAgICAgICAgICAgICAgICAnZGVzYyc6IF8weDU0MWQ3NlsnUEZSSEEnXSxcXFxcbiAgICAgICAgICAgICAgICAndXJsJzogXzB4NTQxZDc2WydVTHdrVCddLFxcXFxuICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDU0MWQ3NlsnelFTTEUnXVxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG59O1xcXFxuJC5leHBvcnRzID0ganhJdGVtO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuino+aekFVybOe8lui+kVxcXCIsXFxcInBhdGhcXFwiOlxcXCJFZGl0VXJsXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuc2V0UGFnZVRpdGxlKFxcXFxcXFwi5o+S5Lu25o6l5Y+j6K6+572uXFxcXFxcXCIpO1xcXFxubGV0IGQgPSBbXTtcXFxcbmxldCBwYXJzZVVybFRleHQgPSByZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFxcXFxcIik7XFxcXG5sZXQgcGFyc2VVcmxBcnJheSA9IHBhcnNlVXJsVGV4dC5zcGxpdCgvXFxcXFxcXFxuLyk7XFxcXG5sZXQgc2VsZWN0ZWQgPSBnZXRJdGVtKFxcXFxcXFwic2VsZWN0ZWRcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIik7XFxcXG5sZXQgY2xhc3NUYWIgPSBbXFxcXG4gICAgW1xcXFxcXFwi6YCJ5oupXFxcXFxcXCIsIFxcXFxcXFwiMFxcXFxcXFwiXSxcXFxcbiAgICBbXFxcXFxcXCLkv67mlLlcXFxcXFxcIiwgXFxcXFxcXCIxXFxcXFxcXCJdLFxcXFxuICAgIFtcXFxcXFxcIuWIoOmZpFxcXFxcXFwiLCBcXFxcXFxcIjJcXFxcXFxcIl1cXFxcbl07XFxcXG5sZXQgY2xhc3NBID0gZ2V0VmFyKFxcXFxcXFwiY2xhc3NcXFxcXFxcIiwgXFxcXFxcXCIwXFxcXFxcXCIpO1xcXFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICBjbGVhclZhcihcXFxcXFxcImNsYXNzXFxcXFxcXCIpO1xcXFxufSkpO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogXFxcXFxcXCLmt7vliqDmlrDnmoTop6PmnpBcXFxcXFxcIixcXFxcbiAgICB1cmw6ICQoXFxcXFxcXCJcXFxcXFxcIixcXFxcXFxcIuino+aekOWQjSYm6Kej5p6QVVJMXFxcXFxcXCIpLmlucHV0KCgpID0+IHtcXFxcbiAgICAgICAgbGV0IHBhcnNlVXJsVGV4dCA9IHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXFxcXFwiKTtcXFxcbiAgICAgICAgbGV0IHBhcnNlVXJsQXJyYXkgPSBwYXJzZVVybFRleHQuc3BsaXQoL1xcXFxcXFxcbi8pO1xcXFxuICAgICAgICBpZihpbnB1dC5zcGxpdChcXFxcXFxcIiYmXFxcXFxcXCIpLmxlbmd0aCE9PTIpe1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/moLzlvI/kuI3mraPnoa5cXFxcXFxcIjtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBwYXJzZVVybEFycmF5LnB1c2goaW5wdXQpO1xcXFxuICAgICAgICBwYXJzZVVybFRleHQgPSBwYXJzZVVybEFycmF5LmpvaW4oXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIik7XFxcXG4gICAgICAgIHdyaXRlRmlsZShcXFxcXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcXFxcXCIsIHBhcnNlVXJsVGV4dCk7XFxcXG4gICAgICAgIFxcXFxuICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5L+u5pS55oiQ5YqfXFxcXFxcXCI7XFxcXG4gICAgfSksXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFwic2Nyb2xsX2J1dHRvblxcXFxcXFwiXFxcXG59KTtcXFxcbmZvciAobGV0IGl0ZW0gb2YgY2xhc3NUYWIpIHtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogaXRlbVsxXSA9PT0gY2xhc3NBID8gXFxcXFxcXCLigJzigJxcXFxcXFxcIiArIGl0ZW1bMF0gKyBcXFxcXFxcIuKAneKAnVxcXFxcXFwiIDogaXRlbVswXSxcXFxcbiAgICAgICAgdXJsOiAkKFxcXFxcXFwiI25vTG9hZGluZyNcXFxcXFxcIikubGF6eVJ1bGUoKGtleSkgPT4ge1xcXFxuICAgICAgICAgICAgcHV0VmFyKFxcXFxcXFwiY2xhc3NcXFxcXFxcIiwga2V5KTtcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcbiAgICAgICAgfSwgaXRlbVsxXSksXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInNjcm9sbF9idXR0b25cXFxcXFxcIlxcXFxuICAgIH0pO1xcXFxufVxcXFxubGV0IGZ1bmM7XFxcXG5zd2l0Y2ggKGNsYXNzQSkge1xcXFxuICAgIGNhc2UgXFxcXFxcXCIwXFxcXFxcXCI6XFxcXG4gICAgICAgIGZ1bmMgPSBmdW5jdGlvbih1cmwsIHRpdGxlKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gJCh1cmwgKyBcXFxcXFxcIiNub0xvYWRpbmcjXFxcXFxcXCIpLmxhenlSdWxlKCh0aXRsZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGxvZyhcXFxcXFxcIlxcXFxcXFxcbuabtOaUueaOpeWPoz4gXFxcXFxcXCIgKyBpbnB1dCk7XFxcXG4gICAgICAgICAgICAgICAgc2V0SXRlbShcXFxcXFxcInNlbGVjdGVkXFxcXFxcXCIsIGlucHV0KTtcXFxcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFwic2VsZWN0ZWQwXFxcXFxcXCIsIHRpdGxlICsgXFxcXFxcXCImJlxcXFxcXFwiICsgaW5wdXQpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+S/ruaUueaIkOWKn1xcXFxcXFwiO1xcXFxuICAgICAgICAgICAgfSwgdGl0bGUpO1xcXFxuICAgICAgICB9O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlIFxcXFxcXFwiMVxcXFxcXFwiOlxcXFxuICAgICAgICBmdW5jID0gZnVuY3Rpb24odXJsLCB0aXRsZSwgaW5kZXgpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiAkKHVybCwgXFxcXFxcXCLor7fovpPlhaXjgIxcXFxcXFxcIiArIHRpdGxlICsgXFxcXFxcXCLjgI3nmoTmlrDmjqXlj6NcXFxcXFxcIikuaW5wdXQoKHRpdGxlLCBpbmRleCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGxldCBwYXJzZVVybFRleHQgPSByZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlVXJsQXJyYXkgPSBwYXJzZVVybFRleHQuc3BsaXQoL1xcXFxcXFxcbi8pO1xcXFxuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RlZDEgPSBwYXJzZVVybEFycmF5W2luZGV4XTtcXFxcbiAgICAgICAgICAgICAgICBwYXJzZVVybEFycmF5W2luZGV4XSA9IHRpdGxlICsgXFxcXFxcXCImJlxcXFxcXFwiICsgaW5wdXQ7XFxcXG4gICAgICAgICAgICAgICAgcGFyc2VVcmxUZXh0ID0gcGFyc2VVcmxBcnJheS5qb2luKFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShcXFxcXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcXFxcXCIsIHBhcnNlVXJsVGV4dCk7XFxcXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkMSA9PSBnZXRJdGVtKFxcXFxcXFwic2VsZWN0ZWQwXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcXFxcXCJzZWxlY3RlZFxcXFxcXFwiLCBpbnB1dCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcXFxcXCJzZWxlY3RlZDBcXFxcXFxcIiwgdGl0bGUgKyBcXFxcXFxcIiYmXFxcXFxcXCIgKyBpbnB1dCk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+S/ruaUueaIkOWKn1xcXFxcXFwiO1xcXFxuICAgICAgICAgICAgfSwgdGl0bGUsIGluZGV4KTtcXFxcbiAgICAgICAgfTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSBcXFxcXFxcIjJcXFxcXFxcIjpcXFxcbiAgICAgICAgZnVuYyA9IGZ1bmN0aW9uKHVybCwgdGl0bGUsIGluZGV4KSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gJChcXFxcXFxcIuehruiupOWIoOmZpOOAjFxcXFxcXFwiICsgdGl0bGUgKyBcXFxcXFxcIuOAje+8n1xcXFxcXFwiKS5jb25maXJtKCh0aXRsZSwgaW5kZXgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VVcmxUZXh0ID0gcmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgIGxldCBwYXJzZVVybEFycmF5ID0gcGFyc2VVcmxUZXh0LnNwbGl0KC9cXFxcXFxcXG4vKTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWQxID0gcGFyc2VVcmxBcnJheVtpbmRleF07XFxcXG4gICAgICAgICAgICAgICAgcGFyc2VVcmxBcnJheS5zcGxpY2UoaW5kZXgsIDEpO1xcXFxuICAgICAgICAgICAgICAgIHBhcnNlVXJsVGV4dCA9IHBhcnNlVXJsQXJyYXkuam9pbihcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXFxcXFwiLCBwYXJzZVVybFRleHQpO1xcXFxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZDEgPT0gZ2V0SXRlbShcXFxcXFxcInNlbGVjdGVkMFxcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VVcmxBcnJheVswXSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFxcXFxcInNlbGVjdGVkXFxcXFxcXCIsIHBhcnNlVXJsQXJyYXlbMF0uc3BsaXQoXFxcXFxcXCImJlxcXFxcXFwiKVsxXSB8fCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcXFxcXCJzZWxlY3RlZDBcXFxcXFxcIiwgcGFyc2VVcmxBcnJheVswXSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFwic2VsZWN0ZWRcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFwic2VsZWN0ZWQwXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+S/ruaUueaIkOWKn1xcXFxcXFwiO1xcXFxuICAgICAgICAgICAgfSwgdGl0bGUsIGluZGV4KTtcXFxcbiAgICAgICAgfTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG5cXFxcbn1cXFxcbmZvciAobGV0IGkgaW4gcGFyc2VVcmxBcnJheSkge1xcXFxuICAgIGxldCBpdGVtID0gcGFyc2VVcmxBcnJheVtpXS5zcGxpdChcXFxcXFxcIiYmXFxcXFxcXCIpO1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBzZWxlY3RlZCA9PSBpdGVtWzFdID8gXFxcXFxcXCLigJjigJhcXFxcXFxcIiArIGl0ZW1bMF0gKyBcXFxcXFxcIuKAmeKAmVxcXFxcXFwiIDogaXRlbVswXSxcXFxcbiAgICAgICAgdXJsOiBmdW5jKGl0ZW1bMV0sIGl0ZW1bMF0sIGkpLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzNcXFxcXFxcIlxcXFxuICAgIH0pO1xcXFxufVxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuS4u+mimOeuoeeQhlxcXCIsXFxcInBhdGhcXFwiOlxcXCJ0aGVtZVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbiAgICBmdW5jdGlvbiB0aGVtZUluaXQoKXtcXFxcbiAgICAgICAgY29uc3Qge2NvbG9yLHNtYWxsfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS91dGlsaXk/cnVsZT3pgZPplb/ku5PlupNQcm9cXFxcXFxcIik7XFxcXG4gICAgICAgIGxldCBkID0gW107XFxcXG4gICAgICAgIGxldCBvcHRpb25zID0gWyfpgInmi6knLCfkv67mlLknLCfliKDpmaQnLCflr7zlh7onXTtcXFxcblxcXFxuICAgICAgICBmb3IodmFyIGkgaW4gb3B0aW9ucyl7XFxcXG4gICAgICAgICAgICBsZXQgb3B0aW9uID0gb3B0aW9uc1tpXTtcXFxcbiAgICAgICAgICAgIGxldCBmbGFnID0gZ2V0VmFyKCd0aGVtZS5kbl9vcHRpb24nLCfmlrDlop4nKT09PW9wdGlvbj8n8J+RiSc6Jyc7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOmZsYWcrb3B0aW9uLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXFxcbiAgICAgICAgICAgICAgICB1cmw6JChvcHRpb24pLmxhenlSdWxlKCgpPT57XFxcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcigndGhlbWUuZG5fb3B0aW9uJywgaW5wdXQpO1xcXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suiuvue9ruaTjeS9nOexu+Wei+S4ujonK2lucHV0O1xcXFxuICAgICAgICAgICAgICAgIH0pLFxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgIH1cXFxcblxcXFxuICAgICAgICBsZXQgdGhlbWVSb3V0ZSA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVRoZW1lLmpzb25cXFxcXFxcIjtcXFxcbiAgICAgICAgbGV0IG15VGhlbWVzID0ge307XFxcXG4gICAgICAgIGxldCB0aGVtZXMgPSB7fTtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIG15VGhlbWVzID0gSlNPTi5wYXJzZShmZXRjaCh0aGVtZVJvdXRlKSk7XFxcXG4gICAgICAgICAgICB0aGVtZXMgPSBteVRoZW1lcy50aGVtZXNbbXlUaGVtZXMubm93X3RoZW1lXTtcXFxcbiAgICAgICAgfWNhdGNoIChlKSB7fVxcXFxuXFxcXG5cXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiflr7zlhaUnLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcXFxuICAgICAgICAgICAgdXJsOiQoJycsJ+ivt+i+k+WFpeWvvOWFpeWPo+S7pCcpLmlucHV0KChteVRoZW1lcyx0aGVtZVJvdXRlKT0+e1xcXFxuICAgICAgICAgICAgICAgIGlmKC9e5pat5o+S5Li76aKYQC4qP0BodHRwLy50ZXN0KGlucHV0KSl7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBuYW1lID0gaW5wdXQuc3BsaXQoJ0AnKVsxXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IGlucHV0LnNwbGl0KCdAJylbMl07XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCfnoa7lrpropoHlr7zlhaXmlq3mj5LkuLvpopgtJytuYW1lKycg5ZCXPycpLmNvbmZpcm0oKG5hbWUsdXJsLG15VGhlbWVzLHRoZW1lUm91dGUpPT57XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IHBhcnNlUGFzdGUodXJsKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBoYXNUaGVtZSA9IG15VGhlbWVzLnRoZW1lcy5maWx0ZXIoaXQ9Pml0Lm5hbWU9PT1uYW1lKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGhhc1RoZW1lJiZoYXNUaGVtZS5sZW5ndGg+MCl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlkID0gbnVsbDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGogaW4gbXlUaGVtZXMudGhlbWVzKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobXlUaGVtZXMudGhlbWVzW2pdLm5hbWUgPT09IG5hbWUpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBqO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWlkKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+e0ouW8lemUmeivr+aXoOazleimhuebluWvvOWFpTpcXFxcXFxcXG4nK2lkXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvZygn6KaG55uW5a+85YWl5Li76aKYaWQ6JytpZCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUaGVtZXMudGhlbWVzW2lkXSA9IE9iamVjdC5hc3NpZ24oSlNPTi5wYXJzZShiYXNlNjREZWNvZGUoY29udGVudCkpLHsnbmFtZSc6bmFtZX0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUaGVtZXMudGhlbWVzLnB1c2goT2JqZWN0LmFzc2lnbihKU09OLnBhcnNlKGJhc2U2NERlY29kZShjb250ZW50KSkseyduYW1lJzpuYW1lfSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKG15VGhlbWVzKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLEpTT04uc3RyaW5naWZ5KG15VGhlbWVzKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LmiJDlip/lr7zlhaXkuLvpopg6XFxcXFxcXFxuJytuYW1lXFxcXG4gICAgICAgICAgICAgICAgICAgIH0sbmFtZSx1cmwsbXlUaGVtZXMsdGhlbWVSb3V0ZSk7XFxcXG4gICAgICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ml6Dms5Xor4bliKvnmoTlr7zlhaXlj6Pku6Q6XFxcXFxcXFxuJytpbnB1dDtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9LG15VGhlbWVzLHRoZW1lUm91dGUpLFxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOifmlrDlop4nLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcXFxuICAgICAgICAgICAgdXJsOiQoKS5ydWxlKChteVRoZW1lcyx0aGVtZVJvdXRlKT0+e1xcXFxuICAgICAgICAgICAgICAgIGxldCBkPVtdO1xcXFxuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoKT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICB9KSk7XFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfkuLvpopjlkI3np7AnLFxcXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIuaWreaPki3ok53ojpPkuLvpophcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFxcXFxcInB1dFZhcigndGhlbWUubmV3X2FkZF9uYW1lJyxpbnB1dClcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogdHJ1ZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0VmFyKCd0aGVtZS5uZXdfYWRkX25hbWUnLCAnJylcXFxcbiAgICAgICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld19hZGRfbmFtZSA9IGdldFZhcigndGhlbWUubmV3X2FkZF9uYW1lJywgJycpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S9oOi+k+WFpeeahOaYrzonK25ld19hZGRfbmFtZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSksXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImlucHV0XFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIuS7o+eggVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcigndGhlbWUubmV3X2FkZF9jb2RlJywgJycpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXFxcXFxcXCJ0ZXh0YXJlYVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0Oi0xLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6ICdwdXRWYXIoXFxcXFxcXCJ0aGVtZS5uZXdfYWRkX2NvZGVcXFxcXFxcIixpbnB1dCknXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTon5L+d5a2YJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfY2VudGVyXzEnLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6JCgpLmxhenlSdWxlKChteVRoZW1lcyx0aGVtZVJvdXRlKT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSBnZXRWYXIoJ3RoZW1lLm5ld19hZGRfY29kZScsICcnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuYW1lID0gZ2V0VmFyKCd0aGVtZS5uZXdfYWRkX25hbWUnLCAnJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZighbmFtZSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S9oOi/mOayoeWhq+WGmeS4u+mimOWQjeensOWRoidcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdUaGVtZSA9IHt9O1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdUaGVtZSA9IEpTT04ucGFyc2UoY29kZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9Y2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6ZSZ6K+v55qE5Li76aKYanNvbuagvOW8jzpcXFxcXFxcXG4nK2UubWVzc2FnZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obmV3VGhlbWUseyduYW1lJzpuYW1lfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBteVRoZW1lcy50aGVtZXMucHVzaChuZXdUaGVtZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeShteVRoZW1lcykpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5paw5aKe5pat5o+S5Li76aKYOicrbmFtZVxcXFxuICAgICAgICAgICAgICAgICAgICB9LG15VGhlbWVzLHRoZW1lUm91dGUpXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcXFxuICAgICAgICAgICAgfSxteVRoZW1lcyx0aGVtZVJvdXRlKSxcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTpteVRoZW1lcy50aGVtZXM/J+S4u+mimOWIl+ihqDrlhbHorqE6Jytjb2xvcihteVRoZW1lcy50aGVtZXMubGVuZ3RoLCcjZmY3MDAwJykrJ+S4quS4u+mimCc6XFxcXFxcXCLnrKzkuIDmrKHliqDovb3vvIzngrnmraTov5vljrvliJ3lp4vljJbkuLvpopjliJfooahcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcXFxuICAgICAgICAgICAgdXJsOidoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uI25vSGlzdG9yeSMnXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6XFxcXFxcXCLmgaLlpI3lh7rljoLorr7nva5cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0X2NlbnRlcl8xJyxcXFxcbiAgICAgICAgICAgIHVybDokKFxcXFxcXFwi5aaC5p6c5L2g55qE5Li76aKY5rKh5rOV5q2j5bi455So5LqG77yM5q2k5pa55rOV5Y+v5Lul5pWR56CW77yM56Gu6K6k5oGi5aSNP1xcXFxcXFwiKS5jb25maXJtKCgpPT57XFxcXG4gICAgICAgICAgICAgICAgbGV0IHRoZW1lcyA9IHtuYW1lOifpu5jorqTkuLvpopgnLGNsb3NlQnRuOntjb2xvcjonI2Y2ZjZmNicsYmFja2dyb3VuZDonI2FhOTZkYSd9LHNhdmVCdG46e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjMDY4MDA2J30sc2F2ZUNsb3NlQnRuOntjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonIzA1QkZDNSd9LHRpcHNCdG46e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjMDVCRkM1J30sYmFybGFiZWw6e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjYWE5NmRhJ30sYmFySW5wdXQ6e2NvbG9yOicjYWE5NmRhJyxiYWNrZ3JvdW5kOicjZmZmZmQyJ30sc2VsZWN0Ontjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonI2FhOTZkYSd9LH07XFxcXG4gICAgICAgICAgICAgICAgbGV0IHRoZW1lRGVmID0ge1xcXFxcXFwibmFtZVxcXFxcXFwiOlxcXFxcXFwi5pat5b+15Y6f55quXFxcXFxcXCIsXFxcXFxcXCJjbG9zZUJ0blxcXFxcXFwiOntcXFxcXFxcImNvbG9yXFxcXFxcXCI6XFxcXFxcXCIjRjlGMERBXFxcXFxcXCIsXFxcXFxcXCJiYWNrZ3JvdW5kXFxcXFxcXCI6XFxcXFxcXCIjYzU0NjRhXFxcXFxcXCJ9LFxcXFxcXFwic2F2ZUJ0blxcXFxcXFwiOntcXFxcXFxcImNvbG9yXFxcXFxcXCI6XFxcXFxcXCIjRjlGMERBXFxcXFxcXCIsXFxcXFxcXCJiYWNrZ3JvdW5kXFxcXFxcXCI6XFxcXFxcXCIjMDY4MDA2XFxcXFxcXCJ9LFxcXFxcXFwic2F2ZUNsb3NlQnRuXFxcXFxcXCI6e1xcXFxcXFwiY29sb3JcXFxcXFxcIjpcXFxcXFxcIiNGOUYwREFcXFxcXFxcIixcXFxcXFxcImJhY2tncm91bmRcXFxcXFxcIjpcXFxcXFxcIiMwNUJGQzVcXFxcXFxcIn0sXFxcXFxcXCJ0aXBzQnRuXFxcXFxcXCI6e1xcXFxcXFwiY29sb3JcXFxcXFxcIjpcXFxcXFxcIiNGOUYwREFcXFxcXFxcIixcXFxcXFxcImJhY2tncm91bmRcXFxcXFxcIjpcXFxcXFxcIiMwNUJGQzVcXFxcXFxcIn0sXFxcXFxcXCJiYXJsYWJlbFxcXFxcXFwiOntcXFxcXFxcImNvbG9yXFxcXFxcXCI6XFxcXFxcXCIjRjlGMERBXFxcXFxcXCIsXFxcXFxcXCJiYWNrZ3JvdW5kXFxcXFxcXCI6XFxcXFxcXCIjRDA2QjZDXFxcXFxcXCJ9LFxcXFxcXFwiYmFySW5wdXRcXFxcXFxcIjp7XFxcXFxcXCJjb2xvclxcXFxcXFwiOlxcXFxcXFwiI0QwNkI2Q1xcXFxcXFwiLFxcXFxcXFwiYmFja2dyb3VuZFxcXFxcXFwiOlxcXFxcXFwiI0Y5RjBEQVxcXFxcXFwifSxcXFxcXFxcInNlbGVjdFxcXFxcXFwiOntcXFxcXFxcImNvbG9yXFxcXFxcXCI6XFxcXFxcXCIjRjlGMERBXFxcXFxcXCIsXFxcXFxcXCJiYWNrZ3JvdW5kXFxcXFxcXCI6XFxcXFxcXCIjRDA2QjZDXFxcXFxcXCJ9fTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdGhlbWVSb3V0ZSA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVRoZW1lLmpzb25cXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeSh7bm93X3RoZW1lOifpu5jorqTkuLvpopgnLHRoZW1lczpbdGhlbWVzLHRoZW1lRGVmXX0pKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S5Li76aKY5bey6YeN572u5Li65Ye65Y6C6K6+572uJ1xcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGZvcih2YXIgaSBpbiBteVRoZW1lcy50aGVtZXMpe1xcXFxuICAgICAgICAgICAgbGV0IG5vd1RoZW0gPSBteVRoZW1lcy50aGVtZXNbaV07XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOm15VGhlbWVzLm5vd190aGVtZT09PW5vd1RoZW0ubmFtZT8n8J+RiScrbm93VGhlbS5uYW1lOm5vd1RoZW0ubmFtZSxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTonZmxleF9idXR0b24nLFxcXFxuICAgICAgICAgICAgICAgIHVybDokKCkubGF6eVJ1bGUoKG15dGhlbWUsbXlUaGVtZXMsaSx0aGVtZVJvdXRlKT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9uID0gZ2V0VmFyKCd0aGVtZS5kbl9vcHRpb24nLCfmlrDlop4nKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChvcHRpb24pe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5a+85Ye6JzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbXl0aGVtZUNvZGUgPSBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkobXl0aGVtZSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBzaGFyZVBhc3RlKG15dGhlbWVDb2RlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9ICfmlq3mj5LkuLvpophAJytteXRoZW1lLm5hbWUrJ0AnK3VybDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5KGNvZGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Llr7zlh7rkuLrkupHlj6Pku6TlubblpI3liLbliLDliarliIfmnb8nXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICfkv67mlLknOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKEpTT04uc3RyaW5naWZ5KG15dGhlbWUpKS5pbnB1dCgobXl0aGVtZSxteVRoZW1lcyxpLHRoZW1lUm91dGUpPT57XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG15dGhlbWUubmFtZT09PW15VGhlbWVzLm5vd190aGVtZSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5q2k5Li76aKY5b2T5YmN5q2j5Zyo5L2/55So5Lit77yM5LiN5YWB6K645L+u5pS5ISdcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRoZW1lcy50aGVtZXNbaV09SlNPTi5wYXJzZShpbnB1dCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLEpTT04uc3RyaW5naWZ5KG15VGhlbWVzKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5L+u5pS5J1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sbXl0aGVtZSxteVRoZW1lcyxpLHRoZW1lUm91dGUpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICfliKDpmaQnOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCfnoa7orqTliKDpmaTkuLvpopg6JytteXRoZW1lLm5hbWUrJz8nKS5jb25maXJtKChteXRoZW1lLG15VGhlbWVzLGksdGhlbWVSb3V0ZSk9PntcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobXl0aGVtZS5uYW1lPT09bXlUaGVtZXMubm93X3RoZW1lKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mraTkuLvpopjlvZPliY3mraPlnKjkvb/nlKjkuK3vvIzkuI3lhYHorrjliKDpmaQhJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VGhlbWVzLnRoZW1lcy5zcGxpY2UoaSwxKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkobXlUaGVtZXMpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LliKDpmaQnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxteXRoZW1lLG15VGhlbWVzLGksdGhlbWVSb3V0ZSlcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUaGVtZXMubm93X3RoZW1lPW15dGhlbWUubmFtZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeShteVRoZW1lcykpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kvaDpgInmi6nkuoYnK215dGhlbWUubmFtZSsn5L2c5Li66buY6K6k5Li76aKYJztcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0sbm93VGhlbSxteVRoZW1lcyxpLHRoZW1lUm91dGUpLFxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgc2V0UmVzdWx0KGQpO1xcXFxuICAgIH1cXFxcbiQuZXhwb3J0cy50aGVtZUluaXQ9dGhlbWVJbml0O1xcXCJ9LHtcXFwibmFtZVxcXCI6XFxcIuaTjeS9nOaMh+W8lVxcXCIsXFxcInBhdGhcXFwiOlxcXCJHdWlkZVxcXCIsXFxcInJ1bGVcXFwiOlxcXCI8aHRtbD5cXFxcbjxoZWFkPlxcXFxuICAgIDxtZXRhIGNoYXJzZXQ9XFxcXFxcXCJVVEYtOFxcXFxcXFwiPlxcXFxuPC9oZWFkPlxcXFxuPGJvZHk+XFxcXG48c3Ryb25nPiA8YmlnPuaLieWPluevhzwvYmlnPiA8L3N0cm9uZz5cXFxcbjxiciAvPiDmk43kvZzpobrluo/vvJpcXFxcbjxiciAvPiAxLuabtOaWsOmBk+mVv+S7k+W6k1Byb+WIsDc254mI5pysXFxcXG48YnIgLz4gMi7mi4nlj5bkuLvmj5Lku7blkoznvZHpobXohJrmnKxcXFxcbjxiciAvPiAzLuaOqOiNkOebtOaOpeaLieWPluS7o+eggTxzPuaLieWPluWIl+ihqOKGkuaLieWPluS7o+eggTwvcz5cXFxcbjxiciAvPlxcXFxuPGJyIC8+XFxcXG48c3Ryb25nPjxiaWc+5Y+j5Luk56+HPC9iaWc+PC9zdHJvbmc+XFxcXG48YnIgLz7pppbpobXovpPlhaXmoYbmlK/mjIHvvJpcXFxcbjxiciAvPjEu5YiG5Lqr5Ye65p2l55qE5ZCM57O75YiX5o+S5Lu25LqR5Ymq6LS05p2/5Y+j5LukXFxcXG48YnIgLz4yLuacquWKoOWvhueahOWQjOezu+WIl+aPkuS7tuWcsOWdgCzmlK/mjIHmnKzlnLDmlofku7blpoLku6XkuIvmoLzlvI/lvIDlpLTnmoQ6ZmlsZTovLyxoaWtlcjovLywvc3RvcmFnZVxcXFxuPGJyIC8+My5R56WeXFxcXG48YnIgLz40LuaWreaPklxcXFxuPGJyIC8+NS4j6YGT6ZW/57K+6YCJXFxcXG48YnIgLz42LiNi56uZXFxcXG48YnIgLz43LiPlgI3pmYZcXFxcbjxiciAvPlxcXFxuPGJyIC8+XFxcXG48c3Ryb25nPjxiaWc+57yW6L6R56+HPC9iaWc+PC9zdHJvbmc+XFxcXG48YnIgLz7pmpDol4/lip/og73pnIDnn6XvvJpcXFxcbjxiciAvPumakOiXj+WKn+iDveaYr+S7juWIl+ihqOS4iuWIoOmZpOagh+mimO+8jOaVheaXoOWkjeeOsOWKn+iDvVxcXFxuPGJyIC8+55yL5YeG5LqG77yM5LiN55So55qE5omN54K56ZqQ6JePXFxcXG48YnIgLz7opoHlpI3njrDnmoTor53ljrvkv67mlLnmlrDnmoRNeVBhcnNlLmpzb27vvIzlnKh0aXRsZeeahOaVsOe7hOmCo+aMieagvOW8j+a3u+WKoOagh+mimFxcXFxuPGJyIC8+XFxcXG48YnIgLz5cXFxcbjxzdHJvbmc+PGJpZz7lroznu5M8L2JpZz48YnIgLz48L3N0cm9uZz5cXFxcbjxwPnYzLjQ5LOWwj+eZveacgOWQjueahOWAlOW8uizlsI/nmb3lhbPmgIDmqKHlvI88L3A+XFxcXG48cD7kuIDplK7lrp7njrDphY3nva7lrozmr5XljbPlj6/pgJrov4fmlK/mjIHprZTmlq3nmoTlsI/nqIvluo/nnIvop4bpopHvvIzlm57lvZLnmb3lq5bop4bpopHov5nkuKrpnIDmsYLmnKzouqs8L3A+XFxcXG48cD7mjqjojZDkvb/nlKjpnZLosYYsYXBw5b2x6KeGLmRwPC9wPlxcXFxuPHA+6a2U5patKOaWreaPkumBk+mVv+mtlOaUueeJiCnlt7LlvIPlnZHot5Hot6/vvIzmhJ/osKLljp/kvZzogIXmlq3lv7XnmoTmj5Lku7bop6PmnpDlj4rmnKzlsI/nqIvluo/moLjlv4Pku6PnoIE8L3A+XFxcXG48L2JvZHk+XFxcXG48L2h0bWw+XFxcIn0se1xcXCJuYW1lXFxcIjpcXFwi5rWL6K+V5pWw5o2uXFxcIixcXFwicGF0aFxcXCI6XFxcImRlbW9EYXRhXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuICAgIGxldCBkZW1vRGF0YSA9IHtcXFxcbiAgICAgICAg54ix5aWH6Im6OlsnaHR0cHM6Ly93d3cuaXFpeWkuY29tL3ZfMXpwN3FnaDIza2cuaHRtbCcsJ2h0dHBzOi8vd3d3LmlxaXlpLmNvbS92XzJiYzh0azhyNnVnLmh0bWwnXSxcXFxcbiAgICAgICAg5LyY6YW3OlsnaHR0cHM6Ly92LnlvdWt1LmNvbS92X3Nob3cvaWRfWE5URTROVGd4TVRZMk1BPT0uaHRtbCcsJ2h0dHBzOi8vdi55b3VrdS5jb20vdl9zaG93L2lkX1hOVEU1T0RZeE1qQXpOZz09Lmh0bWwnXSxcXFxcbiAgICAgICAg6IW+6K6vOlsnaHR0cHM6Ly92LnFxLmNvbS94L2NvdmVyL200NDFlM3JqcTlrd3BzYy9wMDA0MGdpbTRmei5odG1sJywnaHR0cHM6Ly92LnFxLmNvbS94L2NvdmVyL216YzAwMjAweGg5MzEzdi96MDAzOXRiaG83cS5odG1sJ10sXFxcXG4gICAgICAgIOiKkuaenDpbJ2h0dHBzOi8vd3d3Lm1ndHYuY29tL2IvMzcyMDYxLzEyMTkzNTU4Lmh0bWwnLCdodHRwczovL3d3dy5tZ3R2LmNvbS9iLzM2MzI4Ni8xNDI5NTgyMy5odG1sJ10sXFxcXG4gICAgICAgIOWTlOWTqeWTlOWTqTpbJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9iYW5ndW1pL3BsYXkvZXAzODEyMTcnLCdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vYmFuZ3VtaS9wbGF5L2VwNDA4MTIzJywnaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL2Jhbmd1bWkvcGxheS9zczMzNDM0JywnaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL3ZpZGVvL2F2MzM2MzQ4NjYzJ10sXFxcXG4gICAgICAgIOaQnOeLkDpbJ2h0dHBzOi8vZmlsbS5zb2h1LmNvbS9hbGJ1bS85NDU3NTg0Lmh0bWwnLCdodHRwczovL2ZpbG0uc29odS5jb20vYWxidW0vOTE4MjY0Ni5odG1sJ10sXFxcXG4gICAgICAgIOilv+eTnDpbJ2h0dHBzOi8vd3d3Lml4aWd1YS5jb20vNjU1MTMzMjEyNTY1NDY0NzMxMCcsJ2h0dHBzOi8vd3d3Lml4aWd1YS5jb20vNjY5OTM1Njc5MjkwNTc5NDA1NSddLFxcXFxuICAgICAgICDpmL/ph4w6WycnXSxcXFxcbiAgICAgICAgUFBUVjpbJ2h0dHA6Ly92LnBwdHYuY29tL3Nob3cvVEluZFdzSW9tTlk1dHg4Lmh0bWwnLCdodHRwOi8vdi5wcHR2LmNvbS9zaG93L1NDUTV0aDZFOURLVkUzcy5odG1sJ10sXFxcXG4gICAgICAgIOWSquWSlTpbJ2h0dHBzOi8vd3d3Lm1pZ3V2aWRlby5jb20vbWdzL3dlYnNpdGUvcHJkL2RldGFpbC5odG1sP2NpZD02MzM1MTE3NDMnLCdodHRwczovL3d3dy5taWd1dmlkZW8uY29tL21ncy93ZWJzaXRlL3ByZC9kZXRhaWwuaHRtbD9jaWQ9NzE2MjcwMzE5J10sXFxcXG4gICAgICAgIOS5kOinhjpbJ2h0dHA6Ly93d3cubGUuY29tL3B0di92cGxheS83NTg0MzA1OS5odG1sJywnaHR0cDovL3d3dy5sZS5jb20vcHR2L3ZwbGF5LzI0MjIwOTAxLmh0bWwjdmlkPTI0MjIwOTAxJ10sXFxcXG4gICAgICAgIDE5MDU6WydodHRwczovL3ZpcC4xOTA1LmNvbS9wbGF5Lzg3NTc0MC5zaHRtbCcsJ2h0dHBzOi8vd3d3LjE5MDUuY29tL3ZvZC9wbGF5Lzg4MDY0MS5zaHRtbCddLFxcXFxuICAgICAgICDpo47ooYw6WydodHRwOi8vd3d3LmZ1bi50di92cGxheS9nLTMwNDE0MycsJ2h0dHA6Ly93d3cuZnVuLnR2L3ZwbGF5L2ctMTAwODk2My8nXSxcXFxcbiAgICB9XFxcXG5cXFxcbmxldCBkZWZhdWx0U2V0cyA9ICB7XFxcXG4gICAgcXk6ICfkvaDniLnnp5HmioAnLFxcXFxuICAgIHlrOiAn6aKG6YW3JyxcXFxcbiAgICB0eDogJ+iNo+iAgCcsXFxcXG4gICAgbWc6ICfomoLomoHlhYTlvJ8nLFxcXFxuICAgIGJsOiAnT0vop6PmnpAnLFxcXFxuICAgIHNoOiAn5rGf5rmWRCcsXFxcXG4gICAgeGc6ICfmsZ/muZZEJyxcXFxcbiAgICBhbDogJ+axn+a5lkQnLFxcXFxuICAgIHBwOiAn5Lq65Lq66L+3JyxcXFxcbiAgICBtaTogJzEwODAnLFxcXFxuICAgIGxlOiAn6L+q5aWl5ZeF5o6iJyxcXFxcbiAgICBvdGg6ICfpgZPplb/ku5PlupPpgJrlhY0nLFxcXFxuICAgIGZ1bjogJ+iejeWFtCcsXFxcXG4gICAgb25lOicxMDgwJyxcXFxcbiAgICBxanU6ICfpu5jorqQnLFxcXFxuICAgIGNqOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcydcXFxcbn07XFxcXG5cXFxcbmxldCBmbG9vcnMgPSAn4pGg4pGh4pGi4pGj4pGk4pGl4pGm4pGn4pGo4pGp77yR77yS77yT77yU77yV77yW77yX77yY77yZ77yQ4pKI4pKJ4pKK4pKL4pKM4pKN4pKO4pKP4pKQJy5zcGxpdCgnJyk7XFxcXG5sZXQgZW1vamlzID0gJyPvuI/ig6N8Ku+4j+KDo3ww77iP4oOjfDHvuI/ig6N8Mu+4j+KDo3wz77iP4oOjfDTvuI/ig6N8Ne+4j+KDo3w277iP4oOjfDfvuI/ig6N8OO+4j+KDo3w577iP4oOjfPCfhbDvuI988J+Fse+4j3zwn42HfPCfjYh88J+NiXzwn42KfPCfjYt88J+NjHzwn42NfPCfjY588J+Nj3zwn42QfPCfjZF88J+Nknzwn42TfPCfjYV88J+Nhnzwn4y9fPCfjYR88J+MsHzwn42efPCfjZZ88J+Nl3zwn42UfPCfjZ988J+NlXzwn42zfPCfjbJ88J+NsXzwn42YfPCfjZl88J+Nmnzwn42bfPCfjZx88J+NnXzwn42gfPCfjaJ88J+No3zwn42kfPCfjaV88J+NoXzwn42mfPCfjad88J+NqHzwn42pfPCfjap88J+Ognzwn42wfPCfjat88J+NrHzwn42tfPCfja588J+Nr3zwn428fOKYlXzwn421fPCfjbZ88J+Nt3zwn424fPCfjbl88J+Nunzwn427fPCfjbQnLnNwbGl0KCd8Jyk7XFxcXG5mbG9vcnMgPSBmbG9vcnMuY29uY2F0KGVtb2ppcyk7XFxcXG4kLmV4cG9ydHMuZGVtb0RhdGEgPSBkZW1vRGF0YTtcXFxcbiQuZXhwb3J0cy5kZWZhdWx0U2V0cyA9IGRlZmF1bHRTZXRzO1xcXFxuJC5leHBvcnRzLmZsb29ycyA9IGZsb29ycztcXFwifSx7XFxcIm5hbWVcXFwiOlxcXCLlt6XlhbfnsbtcXFwiLFxcXCJwYXRoXFxcIjpcXFwidXRpbHNcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG4vL+maj+acuuS7juWIl+ihqOaKveWPluS4gOS4quWFg+e0oFxcXFxuZnVuY3Rpb24gZ2V0T25lKGl0cykge3JldHVybiAgaXRzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSppdHMubGVuZ3RoKV07fVxcXFxuLy/ljrvph43vvIhFUzYgU2V077yJXFxcXG5mdW5jdGlvbiB1bmlxdWUyKGFycmF5KXtcXFxcbiAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGFycmF5KSk7XFxcXG59XFxcXG4vL+iOt+WPluWIl+ihqOS4remHjeWkjemDveWAvFxcXFxuZnVuY3Rpb24gZHVwbGljYXRlcyhhcnIpIHtcXFxcbiAgICBsZXQgcmVzPWFyci5maWx0ZXIoKHgsayk9PntcXFxcbiAgICAgICAgbGV0IGE9ayoxKzE7XFxcXG4gICAgICAgIGxldCBpbmRleD1hcnIuaW5kZXhPZih4LGEpO1xcXFxuICAgICAgICBpZihpbmRleD4tMSl7XFxcXG4gICAgICAgICAgICByZXR1cm4geDtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pXFxcXG4gICAgbGV0IHJlPW5ldyBTZXQocmVzKTtcXFxcbiAgICByZXR1cm4gQXJyYXkuZnJvbShyZSk7XFxcXG59XFxcXG4kLmV4cG9ydHMuZ2V0T25lID0gZ2V0T25lO1xcXFxuJC5leHBvcnRzLnVuaXF1ZTIgPSB1bmlxdWUyO1xcXFxuJC5leHBvcnRzLmR1cGxpY2F0ZXMgPSBkdXBsaWNhdGVzO1xcXCJ9LHtcXFwibmFtZVxcXCI6XFxcIuino+aekOeuoeeQhlxcXCIsXFxcInBhdGhcXFwiOlxcXCJqeE1hbmFnZVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbiAgICBmdW5jdGlvbiBqeE1hbmFnZSgpe1xcXFxuICAgICAgICBjb25zdCB7Y29sb3Isc21hbGx9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3V0aWxpeT9ydWxlPemBk+mVv+S7k+W6k1Byb1xcXFxcXFwiKTtcXFxcbiAgICAgICAgbGV0IGQgPSBbXTtcXFxcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBbJ+mAieaLqScsJ+S/ruaUuScsJ+WIoOmZpCcsJ+WvvOWHuiddO1xcXFxuXFxcXG4gICAgICAgIGZvcihsZXQgaSBpbiBvcHRpb25zKXtcXFxcbiAgICAgICAgICAgIGxldCBvcHRpb24gPSBvcHRpb25zW2ldO1xcXFxuICAgICAgICAgICAgbGV0IGZsYWcgPSBnZXRWYXIoJ2RuLmp4bV9vcHRpb24nLCfpgInmi6knKT09PW9wdGlvbj8n8J+RiSc6Jyc7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOmZsYWcrb3B0aW9uLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXFxcbiAgICAgICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgob3B0aW9uKT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2RuLmp4bV9vcHRpb24nLCBvcHRpb24pO1xcXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXFxcbiAgICAgICAgICAgICAgICB9LG9wdGlvbiksXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBsZXQganhzUm91dGUgPSBcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlKaWV4aS5qc29uXFxcXFxcXCI7XFxcXG4gICAgICAgIGxldCBNeUppZXhpID0ge2ppZXhpczpbXX07XFxcXG4gICAgICAgIGxldCBqaWV4aXMgPSB7fTtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIE15SmlleGkgPSBKU09OLnBhcnNlKGZldGNoKGp4c1JvdXRlKSk7XFxcXG4gICAgICAgICAgICBqaWV4aXMgPSBNeUppZXhpLmppZXhpcy5maWx0ZXIoaXQ9Pml0Lm5hbWU9PT1NeUppZXhpLm5vdylbMF07XFxcXG4gICAgICAgIH1jYXRjaCAoZSkge31cXFxcblxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6J+WvvOWFpScsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxcXG4gICAgICAgICAgICB1cmw6JCgnJywn6K+36L6T5YWl5a+85YWl5Y+j5LukJykuaW5wdXQoKE15SmlleGksanhzUm91dGUpPT57XFxcXG4gICAgICAgICAgICAgICAgaWYoL17prZTmlq3op6PmnpDphY3nva5ALio/QGh0dHAvLnRlc3QoaW5wdXQpKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5hbWUgPSBpbnB1dC5zcGxpdCgnQCcpWzFdO1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gaW5wdXQuc3BsaXQoJ0AnKVsyXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ+ehruWumuimgeWvvOWFpeaWreaPkuino+aekOmFjee9ri0nK25hbWUrJyDlkJc/JykuY29uZmlybSgobmFtZSx1cmwsTXlKaWV4aSxqeHNSb3V0ZSk9PntcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gcGFyc2VQYXN0ZSh1cmwpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhhc0l0ID0gTXlKaWV4aS5qaWV4aXMuZmlsdGVyKGl0PT5pdC5uYW1lPT09bmFtZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihoYXNJdCYmaGFzSXQubGVuZ3RoPjApe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZCA9IG51bGw7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBqIGluIE15SmlleGkuamlleGlzKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoTXlKaWV4aS5qaWV4aXNbal0ubmFtZSA9PT0gbmFtZSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGo7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighaWQpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v57Si5byV6ZSZ6K+v5peg5rOV6KaG55uW5a+85YWlOlxcXFxcXFxcbicraWRcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKCfopobnm5blr7zlhaXkuLvpophpZDonK2lkKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpc1tpZF0gPSBPYmplY3QuYXNzaWduKEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKGNvbnRlbnQpKSx7J25hbWUnOm5hbWV9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE15SmlleGkuamlleGlzLnB1c2goT2JqZWN0LmFzc2lnbihKU09OLnBhcnNlKGJhc2U2NERlY29kZShjb250ZW50KSkseyduYW1lJzpuYW1lfSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suaIkOWKn+WvvOWFpeino+aekOmFjee9rjpcXFxcXFxcXG4nK25hbWVcXFxcbiAgICAgICAgICAgICAgICAgICAgfSxuYW1lLHVybCxNeUppZXhpLGp4c1JvdXRlKTtcXFxcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aXoOazleivhuWIq+eahOWvvOWFpeWPo+S7pDpcXFxcXFxcXG4nK2lucHV0O1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0sTXlKaWV4aSxqeHNSb3V0ZSksXFxcXG4gICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgIGxldCBpc0F1dG8gPSBNeUppZXhpLmlzQXV0bztcXFxcbiAgICAgICAgbGV0IGF1dG9Nb2RlID0gTXlKaWV4aS5hdXRvTW9kZTtcXFxcbiAgICAgICAgbGV0IHRpcHMgPSAn6Kej5p6Q6YWN572u5YiX6KGoOuWFseiuoTonK2NvbG9yKE15SmlleGkuamlleGlzLmxlbmd0aCwnI2ZmNzAwMCcpKyfkuKrphY3nva4s6Ieq5Yqo5qGj5byA5YWzOicrY29sb3IoaXNBdXRvPyflvIAnOiflhbMnLCcjZmY3MDAwJyk7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTpNeUppZXhpLmppZXhpcyYmTXlKaWV4aS5qaWV4aXMubGVuZ3RoPjA/dGlwczpcXFxcXFxcIuesrOS4gOasoeWKoOi9ve+8jOeCueatpOi/m+WOu+WIneWni+WMluino+aekOWIl+ihqFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMScsXFxcXG4gICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoTXlKaWV4aSxqeHNSb3V0ZSk9PntcXFxcbiAgICAgICAgICAgICAgICBpZihNeUppZXhpLmppZXhpcyYmTXlKaWV4aS5qaWV4aXMubGVuZ3RoPjApe1xcXFxuICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmlzQXV0byA9ICFNeUppZXhpLmlzQXV0bztcXFxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCB0aXBzID0gTXlKaWV4aS5pc0F1dG8/J+W8gCc6J+WFsyc7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lorr7nva7oh6rliqjmoaPmqKHlvI/kuLo6Jyt0aXBzXFxcXG4gICAgICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBpbml0U2V0ID0geydub3cnOlxcXFxcXFwi6YGT6ZW/5o6o6I2QXFxcXFxcXCIsJ2ppZXhpcyc6W3tuYW1lOifpgZPplb/mjqjojZAnLHF5Olsn5L2g54i556eR5oqAJ10seWs6WyfpoobphbcnXSx0eDpbJ+iNo+iAgCddLG1nOlsn6JqC6JqB5YWE5byfJ10sYmw6WydPS+ino+aekCddLHNoOlsn5rGf5rmWRCddLHhnOlsn5rGf5rmWRCddLGFsOlsn5rGf5rmWRCddLHBwOlsn5Lq65Lq66L+3J10sbWk6WycxMDgwJ10sbGU6Wyfov6rlpaXll4XmjqInXSxmdW46Wyfono3lhbQnXSxvbmU6WycxMDgwJ119XX07XFxcXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShpbml0U2V0KSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S6Kej5p6Q6YWN572u5bey5Yid5aeL5YyWJ1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0sTXlKaWV4aSxqeHNSb3V0ZSlcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGxldCBhdXRvTW9kZVRpcHMgPSBhdXRvTW9kZT09PSfpgJ/luqbkvJjlhYgnPyfpgJ/luqbkvJjlhYgnOifpobrluo/kvJjlhYgnO1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6c21hbGwoXFxcXFxcXCLlpIfog47lrqDlubjmlrnmoYg6XFxcXFxcXCIpK2NvbG9yKGF1dG9Nb2RlVGlwcywnI2ZmNzAwMCcpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMicsXFxcXG4gICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoTXlKaWV4aSxqeHNSb3V0ZSk9PntcXFxcbiAgICAgICAgICAgICAgICBNeUppZXhpLmF1dG9Nb2RlID0gTXlKaWV4aS5hdXRvTW9kZT09PSfpgJ/luqbkvJjlhYgnPyfpobrluo/kvJjlhYgnOifpgJ/luqbkvJjlhYgnO1xcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suiuvue9ruWkh+iDjuWuoOW5uOaWueahiOS4ujonK015SmlleGkuYXV0b01vZGVcXFxcbiAgICAgICAgICAgIH0sTXlKaWV4aSxqeHNSb3V0ZSlcXFxcbiAgICAgICAgfSk7XFxcXG5cXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOmNvbG9yKFxcXFxcXFwi5oGi5aSN5Ye65Y6C6K6+572uXFxcXFxcXCIsJyNmZjcwMDAnKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0XzInLFxcXFxuICAgICAgICAgICAgdXJsOiQoXFxcXFxcXCLlpoLmnpzkvaDnmoTop6PmnpDnrqHnkIbml6Dms5XmraPluLjnlKjkuobvvIzmraTmlrnms5Xlj6/ku6XmlZHnoJbvvIznoa7orqTmgaLlpI0/XFxcXFxcXCIpLmNvbmZpcm0oKGp4c1JvdXRlKT0+e1xcXFxuICAgICAgICAgICAgICAgIGxldCBpbml0U2V0ID0geydub3cnOlxcXFxcXFwi6YGT6ZW/5o6o6I2QXFxcXFxcXCIsJ2ppZXhpcyc6W3tuYW1lOifpgZPplb/mjqjojZAnLHF5Olsn5L2g54i556eR5oqAJ10seWs6WyfpoobphbcnXSx0eDpbJ+iNo+iAgCddLG1nOlsn6JqC6JqB5YWE5byfJ10sYmw6WydPS+ino+aekCddLHNoOlsn5rGf5rmWRCddLHhnOlsn5rGf5rmWRCddLGFsOlsn5rGf5rmWRCddLHBwOlsn5Lq65Lq66L+3J10sbWk6WycxMDgwJ10sbGU6Wyfov6rlpaXll4XmjqInXSxmdW46Wyfono3lhbQnXSxvbmU6WycxMDgwJ10sfV19O1xcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShpbml0U2V0KSk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aWreaPkuino+aekOmFjee9ruW3sumHjee9ruS4uuWHuuWOguiuvue9ridcXFxcbiAgICAgICAgICAgIH0sanhzUm91dGUpXFxcXG4gICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgIGxldCBjYWNoZVZpZGVvU3dpdGNoID0gZ2V0VmFyKCdkcC5jYWNoZVZpZGVvJywndHJ1ZScpPT09J3RydWUnPyflvIAnOiflhbMnO1xcXFxuICAgICAgICBsZXQganhUaW1lb3V0ID0gZ2V0VmFyKCdkcC5qeFRpbWVvdXQnLCc3MDAwJyk7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTpzbWFsbCgn5aSa57q/6Lev57yT5a2YOicpK2NvbG9yKGNhY2hlVmlkZW9Td2l0Y2gsJyNmZjcwMDAnKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0XzInLFxcXFxuICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGNhY2hlVmlkZW9Td2l0Y2gpPT57XFxcXG4gICAgICAgICAgICAgICAgaWYoY2FjaGVWaWRlb1N3aXRjaD09PSflvIAnKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdkcC5jYWNoZVZpZGVvJywnZmFsc2UnKTtcXFxcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdkcC5jYWNoZVZpZGVvJywndHJ1ZScpO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgICAgICB9LGNhY2hlVmlkZW9Td2l0Y2gpXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6c21hbGwoJ+WFqOWxgOino+aekOi2heaXtjonKStjb2xvcihqeFRpbWVvdXQsJyNmZjcwMDAnKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0XzInLFxcXFxuICAgICAgICAgICAgdXJsOiQoanhUaW1lb3V0LCfor7forr7nva7prZTmlq3op6PmnpDotoXml7Ys5b+F6aG75Li65pW05pWwJykuaW5wdXQoKCk9PntcXFxcbiAgICAgICAgICAgICAgICBpZighcGFyc2VJbnQoaW5wdXQpKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQgPSA3MDAwO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBwdXRWYXIoJ2RwLmp4VGltZW91dCcsaW5wdXQpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lorr7nva7kuLo6JytwYXJzZUludChpbnB1dClcXFxcbiAgICAgICAgICAgIH0sanhUaW1lb3V0KVxcXFxuICAgICAgICB9KTtcXFxcblxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6ICfmiZPlvIDnvJbovpHop6PmnpDmlofku7YnLFxcXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChqeHNSb3V0ZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAnZWRpdEZpbGU6Ly8nK2p4c1JvdXRlO1xcXFxuICAgICAgICAgICAgfSxqeHNSb3V0ZSksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXG4gICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgIGZvcihsZXQgaSBpbiBNeUppZXhpLmppZXhpcyl7XFxcXG4gICAgICAgICAgICBsZXQgbm93SnggPSBNeUppZXhpLmppZXhpc1tpXTtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6TXlKaWV4aS5ub3c9PT1ub3dKeC5uYW1lPyfwn5GJJytub3dKeC5uYW1lOm5vd0p4Lm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6J2ZsZXhfYnV0dG9uJyxcXFxcbiAgICAgICAgICAgICAgICBleHRyYTp7XFxcXG4gICAgICAgICAgICAgICAgICAgIG5vd0p4Om5vd0p4LFxcXFxuICAgICAgICAgICAgICAgICAgICBNeUppZXhpOk15SmlleGksXFxcXG4gICAgICAgICAgICAgICAgICAgIGp4c1JvdXRlOmp4c1JvdXRlXFxcXG4gICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobm93SngsTXlKaWV4aSxpLGp4c1JvdXRlKT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9uID0gZ2V0VmFyKCdkbi5qeG1fb3B0aW9uJywn6YCJ5oupJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0aW9uKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WvvOWHuic6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5vd0p4Q29kZSA9IGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeShub3dKeCkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBzaGFyZVBhc3RlKG5vd0p4Q29kZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSAn6a2U5pat6Kej5p6Q6YWN572uQCcrbm93SngubmFtZSsnQCcrdXJsO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkoY29kZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWvvOWHuuS4uuS6keWPo+S7pOW5tuWkjeWItuWIsOWJquWIh+advydcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ+S/ruaUuSc6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYobm93SngubmFtZT09PU15SmlleGkubm93KXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgcmV0dXJuICd0b2FzdDovL+atpOino+aekOmFjee9ruW9k+WJjeato+WcqOS9v+eUqOS4re+8jOS4jeWFgeiuuOS/ruaUuSEnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVsc2V7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL2p4RWRpdD9ydWxlPU15RmllbGThtLDigb8nXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL2p4RWRpdD9ydWxlPU15RmllbGThtLDigb8nXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICfliKDpmaQnOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCfnoa7orqTliKDpmaTop6PmnpDphY3nva46Jytub3dKeC5uYW1lKyc/JykuY29uZmlybSgobm93SngsTXlKaWV4aSxpLGp4c1JvdXRlKT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihub3dKeC5uYW1lPT09TXlKaWV4aS5ub3cpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+atpOino+aekOmFjee9ruW9k+WJjeato+WcqOS9v+eUqOS4re+8jOS4jeWFgeiuuOWIoOmZpCEnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXMuc3BsaWNlKGksMSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5Yig6ZmkJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sbm93SngsTXlKaWV4aSxpLGp4c1JvdXRlKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLm5vdz1ub3dKeC5uYW1lO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S9oOmAieaLqeS6hicrbm93SngubmFtZSsn5L2c5Li65b2T5YmN6Kej5p6Q6YWN572uJztcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0sbm93SngsTXlKaWV4aSxpLGp4c1JvdXRlKSxcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHNldFJlc3VsdChkKTtcXFxcbiAgICB9XFxcXG4kLmV4cG9ydHMuanhNYW5hZ2U9anhNYW5hZ2U7XFxcIn0se1xcXCJuYW1lXFxcIjpcXFwi6Kej5p6Q57yW6L6RXFxcIixcXFwicGF0aFxcXCI6XFxcImp4RWRpdFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbiAgICBsZXQge25vd0p4LE15SmlleGksanhzUm91dGV9ID0gTVlfUEFSQU1TO1xcXFxubGV0IG5vd0p4VCA9IEpTT04ucGFyc2UoZ2V0VmFyKCdkbi5ub3dKeCcpfHwne30nKTtcXFxcbm5vd0p4ID0gbm93SnhULm5hbWU/bm93SnhUOm5vd0p4O1xcXFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpPT57XFxcXG4gICAgY2xlYXJWYXIoXFxcXFxcXCJkbi5qeF90aXRsZXNcXFxcXFxcIik7XFxcXG4gICAgY2xlYXJWYXIoXFxcXFxcXCJkbi5ub3dKeFxcXFxcXFwiKTtcXFxcbiAgICBjbGVhclZhcihcXFxcXFxcImRuLmp4bV9uYW1lXFxcXFxcXCIpO1xcXFxufSkpO1xcXFxubGV0IGlkID0gbnVsbDtcXFxcbmZvcihsZXQgaiBpbiBNeUppZXhpLmppZXhpcyl7XFxcXG4gICAgaWYoTXlKaWV4aS5qaWV4aXNbal0ubmFtZSA9PT0gbm93SngubmFtZSl7XFxcXG4gICAgICAgIGlkID0gajtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgfVxcXFxufVxcXFxubGV0IGQgPSBbXTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6ICfphY3nva7lkI3np7AnLFxcXFxuICAgIGRlc2M6IFxcXFxcXFwi6Kej5p6Q6YWN572u5ZCN56ewLOWmgumBk+mVv+aOqOiNkFxcXFxcXFwiLFxcXFxuICAgIGV4dHJhOiB7XFxcXG4gICAgICAgIG9uQ2hhbmdlOiBcXFxcXFxcInB1dFZhcignZG4uanhtX25hbWUnLGlucHV0KVxcXFxcXFwiLFxcXFxuICAgICAgICB0aXRsZVZpc2libGU6IHRydWUsXFxcXG4gICAgICAgIGRlZmF1bHRWYWx1ZTpnZXRWYXIoJ2RuLmp4bV9uYW1lJywnJyl8fG5vd0p4Lm5hbWVcXFxcbiAgICB9LFxcXFxuICAgIGNvbF90eXBlOidpbnB1dCdcXFxcbn0pO1xcXFxuLy8gbGV0IG9wdGlvbnMgPSBbJ+mAieaLqScsJ+aWsOWinicsJ+WIoOmZpCcsJ+aJuemHj+WIoOmZpCcsJ+enu+WKqCddO1xcXFxubGV0IG9wdGlvbnMgPSBbJ+aWsOWinicsJ+WIoOmZpCcsJ+enu+WKqCddO1xcXFxuXFxcXG5mb3IobGV0IGkgaW4gb3B0aW9ucyl7XFxcXG4gICAgbGV0IG9wdGlvbiA9IG9wdGlvbnNbaV07XFxcXG4gICAgbGV0IGZsYWcgPSBnZXRWYXIoJ2RuLmp4bV93cml0ZU1vZGUnLCfmlrDlop4nKT09PW9wdGlvbj8n8J+RiSc6Jyc7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6ZmxhZytvcHRpb24sXFxcXG4gICAgICAgIC8vIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXFxcbiAgICAgICAgY29sX3R5cGU6J2ZsZXhfYnV0dG9uJyxcXFxcbiAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKG9wdGlvbik9PntcXFxcbiAgICAgICAgICAgIHB1dFZhcignZG4uanhtX3dyaXRlTW9kZScsIG9wdGlvbik7XFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxcXG4gICAgICAgIH0sb3B0aW9uKSxcXFxcbiAgICB9KTtcXFxcbn1cXFxcbmQucHVzaCh7XFxcXG4gICAgY29sX3R5cGU6J2xpbmUnXFxcXG59KTtcXFxcbi8v6I635Y+W5pat5o+S5YiX6KGoXFxcXG5pZighZ2V0VmFyKFxcXFxcXFwiZG4uanhfdGl0bGVzXFxcXFxcXCIpKXtcXFxcbiAgICBsZXQgdGl0bGVBcnIgPSBbXSwgdXJsQXJyID0gW107XFxcXG4gICAgdmFyIGpzb249e3RpdGxlOltdLGNvZGVzOnt9fTtcXFxcbiAgICBsZXQgc2V0RmlsZSA9IHJlcXVlc3QoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJyk7XFxcXG4gICAgdHJ5IHtcXFxcbiAgICAgICAgZXZhbCgnanNvbj0nK3NldEZpbGUpO1xcXFxuICAgIH1jYXRjaCAoZSkge1xcXFxuICAgICAgICBsb2coJ0pzb27op6PmnpDlj5HnlJ/kuobplJnor686JytlLm1lc3NhZ2UpO1xcXFxuICAgIH1cXFxcbiAgICB0aXRsZUFyciA9IGpzb24udGl0bGU7XFxcXG4gICAgdGl0bGVBcnIuZm9yRWFjaCgoaXQpID0+IHtcXFxcbiAgICAgICAgdXJsQXJyLnB1c2goanNvbi5jb2Rlc1tpdF0pO1xcXFxuICAgIH0pO1xcXFxuICAgIHB1dFZhcignZG4uanhfdGl0bGVzJyxKU09OLnN0cmluZ2lmeSh0aXRsZUFycikpO1xcXFxufVxcXFxuXFxcXG5sZXQgdGl0bGVzID0gSlNPTi5wYXJzZShnZXRWYXIoJ2RuLmp4X3RpdGxlcycpfHwnW10nKTtcXFxcbmxldCB0aXRsZURpYyA9IHtcXFxcbiAgICBhbDon6Zi/6YeMJyxibDon5ZOU5ZOp5ZOU5ZOpJyxmdW46J+mjjuihjCcsbGU6J+S5kOinhicsbWc6J+iKkuaenCcsbWk6J+WSquWSlScscHA6J1BQVFYnLHF5OifniLHlpYfoibonLHNoOifmkJzni5AnLFxcXFxuICAgIHR4Oifohb7orq8nLHhnOifopb/nk5wnLHlrOifkvJjphbcnLG9uZTonMTkwNScsb3RoOiflhbbku5YnXFxcXG59XFxcXG5cXFxcbmxldCB0aXRsZU9yZGVyID0ge2FsOjgsYmw6NSxmdW46MTMsbGU6MTEsbWc6NCxtaToxMCxwcDo5LHF5OjEsc2g6NixcXFxcbiAgICB0eDozLHhnOjcseWs6MixvbmU6MTIsb3RoOjEzfTtcXFxcblxcXFxuZnVuY3Rpb24gY29tcGFyZU9kKHRpdGxlT3JkZXIpe1xcXFxuICAgIHJldHVybiBmdW5jdGlvbiAoYSwgYil7XFxcXG4gICAgICAgIGxldCB4ID0gdGl0bGVPcmRlclthXTtcXFxcbiAgICAgICAgbGV0IHkgPSB0aXRsZU9yZGVyW2JdO1xcXFxuICAgICAgICByZXR1cm4geC15O1xcXFxuICAgIH1cXFxcbn1cXFxcbi8vLS0tLS0tLS0tLS0tLS0tLS1cXFxcbi8vIGxldCBqZHMgPSBPYmplY3Qua2V5cyhub3dKeCkuZmlsdGVyKGl0PT5pdCE9PSduYW1lJyYmaXQhPT0nb3RoJyk7XFxcXG5sZXQgamRzID0gT2JqZWN0LmtleXMobm93SngpLmZpbHRlcihpdD0+aXQhPT0nbmFtZScpO1xcXFxuLy9sb2coamRzKTtcXFxcbmZvcihsZXQgayBvZiBPYmplY3Qua2V5cyh0aXRsZU9yZGVyKSl7XFxcXG4gICAgaWYoIWpkcy5pbmNsdWRlcyhrKSl7XFxcXG4gICAgICAgIGpkcy5wdXNoKGspXFxcXG4gICAgfVxcXFxufVxcXFxuamRzID0gamRzLnNvcnQoY29tcGFyZU9kKHRpdGxlT3JkZXIpKTtcXFxcbmZvcihsZXQgaiBpbiBqZHMpe1xcXFxuICAgIGxldCBqeHMgPSBub3dKeFtqZHNbal1dfHxbXTtcXFxcbiAgICBsZXQgdGl0bGUgPSBqZHNbal07XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6dGl0bGVEaWNbdGl0bGVdfHx0aXRsZSxcXFxcbiAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcXFxuICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodGl0bGVzLHRpdGxlLGp4cyxqeHNSb3V0ZSxNeUppZXhpLG5vd0p4KT0+e1xcXFxuICAgICAgICAgICAgdmFyIGpzb249e3RpdGxlOltdLGNvZGVzOnt9fTtcXFxcbiAgICAgICAgICAgIGxldCBzZXRGaWxlID0gcmVxdWVzdCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nKTtcXFxcbiAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgZXZhbCgnanNvbj0nK3NldEZpbGUpO1xcXFxuICAgICAgICAgICAgfWNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgbG9nKCdKc29u6Kej5p6Q5Y+R55Sf5LqG6ZSZ6K+vOicrZS5tZXNzYWdlKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGlmKGdldFZhcignZG4uanhtX3dyaXRlTW9kZScsJ+aWsOWinicpPT09J+aWsOWinicpe1xcXFxuICAgICAgICAgICAgICAgIGxldCBzZWxfdGl0bGUgPSB0aXRsZXMuZmlsdGVyKGl0PT4hanhzLmluY2x1ZGVzKGl0KSk7XFxcXG4gICAgICAgICAgICAgICAgc2VsX3RpdGxlID0gc2VsX3RpdGxlLm1hcCgoaXQpPT57XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBmbGFnID0gJ+KAmOKAmOKTiuKAmeKAmSc7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZihqc29uLmNvZGVzW2l0XSk9PT0nZnVuY3Rpb24nKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgPSAn4oCc4oCc4pK/4oCd4oCdJztcXFxcbiAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYodHlwZW9mKGpzb24uY29kZXNbaXRdKT09PSd1bmRlZmluZWQnKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgPSAnJztcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmxhZytpdFxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAkKHNlbF90aXRsZSwyKS5zZWxlY3QoKE15SmlleGksanhzLG5vd0p4LHRpdGxlLGp4c1JvdXRlKT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoL+KAmOKAmOKTiuKAmeKAmXzigJzigJzikr/igJ3igJ0vZywnJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZCA9IG51bGw7XFxcXG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaiBpbiBNeUppZXhpLmppZXhpcyl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihNeUppZXhpLmppZXhpc1tqXS5uYW1lID09PSBub3dKeC5uYW1lKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGo7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgaWYoIWlkKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ntKLlvJXplJnor6/ml6Dms5Xkv53lrZg6XFxcXFxcXFxuJytpZFxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIGp4cy5wdXNoKGlucHV0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbG9nKGp4cyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIG5vd0p4W3RpdGxlXSA9IGp4cztcXFxcbiAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdID0gbm93Sng7XFxcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcignZG4ubm93SngnLEpTT04uc3RyaW5naWZ5KG5vd0p4KSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgICAgICAgICAgfSxNeUppZXhpLGp4cyxub3dKeCx0aXRsZSxqeHNSb3V0ZSk7XFxcXG4gICAgICAgICAgICB9ZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9LHRpdGxlcyx0aXRsZSxqeHMsanhzUm91dGUsTXlKaWV4aSxub3dKeClcXFxcbiAgICB9KTtcXFxcbiAgICBmb3IobGV0IGsgaW4ganhzKXtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOmp4c1trXSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXFxcbiAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0aXRsZXMsdGl0bGUsanhzLGp4c1JvdXRlLE15SmlleGksbm93Sngsbmp4LGlkLGssbWF4KT0+e1xcXFxuICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VmFyKCdkbi5qeG1fd3JpdGVNb2RlJywn5paw5aKeJykpe1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfliKDpmaQnOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKHZhbCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuaW5kZXhPZih2YWwpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BsaWNlKGluZGV4LCAxKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAganhzLnJlbW92ZShuangpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbm93SnhbdGl0bGVdID0ganhzO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdID0gbm93Sng7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2RuLm5vd0p4JyxKU09OLnN0cmluZ2lmeShub3dKeCkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfnp7vliqgnOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoaywn56e75Yqo5Yiw57Si5byV5aSa5bCRPycpLmlucHV0KChrLG1heCxqeHMsbm93SngsTXlKaWV4aSxpZCx0aXRsZSxqeHNSb3V0ZSk9PntcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBNb3ZlKGFyciwgZnJvbUluZGV4LCB0b0luZGV4KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gYXJyW2Zyb21JbmRleF07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoZnJvbUluZGV4LCAxKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnNwbGljZSh0b0luZGV4LCAwLCBlbGVtZW50KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocGFyc2VJbnQoaW5wdXQpPT09ayl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/llaXkuZ/msqHlgZonXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocGFyc2VJbnQoaW5wdXQpPm1heC0xfHxwYXJzZUludChpbnB1dCk8LTEpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g5pyA5aSn56e75Yqo6IyD5Zu0MC0nK3BhcnNlSW50KG1heC0xKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGV0IG5ld0FyID0ganhzLnNwbGljZShrLCAxKTsgLy8g5Yig5o6JXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ganhzLnVuc2hpZnQobmV3QXJbMF0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vdmUoanhzLGsscGFyc2VJbnQoaW5wdXQpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3dKeFt0aXRsZV0gPSBqeHM7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdID0gbm93Sng7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdkbi5ub3dKeCcsSlNPTi5zdHJpbmdpZnkobm93SngpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sayxtYXgsanhzLG5vd0p4LE15SmlleGksaWQsdGl0bGUsanhzUm91dGUpXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5q2k5YWD57Sg5LiN5pSv5oyB6L+b6KGMOicrZ2V0VmFyKCdkbi5qeG1fd3JpdGVNb2RlJywn5paw5aKeJylcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9LHRpdGxlcyx0aXRsZSxqeHMsanhzUm91dGUsTXlKaWV4aSxub3dKeCxqeHNba10saWQsayxqeHMubGVuZ3RoKVxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgY29sX3R5cGU6J2xpbmUnXFxcXG4gICAgfSlcXFxcbn1cXFxcblxcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTon5L+d5a2YJyxcXFxcbiAgICBjb2xfdHlwZTondGV4dF9jZW50ZXJfMScsXFxcXG4gICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKE15SmlleGksaWQsanhzUm91dGUpPT57XFxcXG4gICAgICAgIGlmKGdldFZhcignZG4uanhtX25hbWUnLCcnKSE9PU15SmlleGkuamlleGlzW2lkXS5uYW1lKXtcXFxcbiAgICAgICAgICAgIGlmSGFzID0gTXlKaWV4aS5qaWV4aXMuZmlsdGVyKGl0PT5pdC5uYW1lPT09Z2V0VmFyKCdkbi5qeG1fbmFtZScsJycpKS5sZW5ndGg+MDtcXFxcbiAgICAgICAgICAgIGlmKGlmSGFzKXtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5b6F5L+u5pS555qE5ZCN56ew6YeN5aSNLOS4jeWFgeiuuOS/neWtmCdcXFxcbiAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgIE15SmlleGkuamlleGlzW2lkXS5uYW1lID0gIGdldFZhcignZG4uanhtX25hbWUnLCcnKTtcXFxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGJhY2sodHJ1ZSk7XFxcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lkv53lrZgnXFxcXG4gICAgfSxNeUppZXhpLGlkLGp4c1JvdXRlKVxcXFxufSk7XFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJuYW1lXFxcIjpcXFwi5bCP55m95qih5byPXFxcIixcXFwicGF0aFxcXCI6XFxcInNtYWxsV2hpdGVcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG5zZXRQYWdlVGl0bGUoJ+mBk+mVv+e7meWwj+eZveeahOWFs+eIsScpO1xcXFxuY29uc3Qge2NvbG9yLCBzbWFsbCxhcGl9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3V0aWxpeT9ydWxlPemBk+mVv+S7k+W6k1Byb1xcXFxcXFwiKTtcXFxcbmxldCBmaWxlUm9vdCA9IGFwaS5ob3N0KycvaGlrZXJ1bGUvenl3X2RhdGEvJztcXFxcbi8vIGxvZyhmaWxlUm9vdCk7XFxcXG5sZXQgZCA9IFtdO1xcXFxudmFyIHRoZW1lUm91dGUgPSBcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlUaGVtZS5qc29uXFxcXFxcXCI7XFxcXG52YXIgdGhlbWVPbmxpbmUgPSBmaWxlUm9vdCsnMTEnO1xcXFxudmFyIG9sZFJvdXRlID0gXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXFxcXFwiO1xcXFxudmFyIG9sZE9ubGluZSA9IGZpbGVSb290KycxMic7XFxcXG52YXIgbmV3Um91dGUgPSBcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uXFxcXFxcXCI7XFxcXG52YXIgbmV3T25saW5lID0gZmlsZVJvb3QrJzEzJztcXFxcbnZhciBqeHNSb3V0ZSA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeUppZXhpLmpzb25cXFxcXFxcIjtcXFxcbnZhciBqeE9ubGluZSA9IGZpbGVSb290KycxNCc7XFxcXG52YXIgY2pjYWNoZSA9ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJztcXFxcbnZhciB4NWNhY2hlID0gJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uaHRtbCc7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOnNtYWxsKCfkvaDlpb0s5bCP55m9LOWNs+S9v+WVpeS5n+S4jeS8mizkuZ/lj6/ku6XnnIvmmI7nmb3kuIvpnaLnmoTlrZflkKc/JyksXFxcXG4gICAgZGVzYzon5aaC5p6c6L+Y5piv5LiN5LyaLOivt+WIoOS7peawuOayuyzlkYrovp7kuI3osKInLFxcXFxuICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcXFxuICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpPT57XFxcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/mja7or7TkvaDkuI3mnI3msJQs5LiN5om/6K6k6Ieq5bex5piv5bCP55m9P1xcXFxcXFxcbueCueaIkeWPquaYr+S4uuS6huWuo+azhOS4gOS4i+S9oOeahOaEpOaAkj/llaXkuZ/liKvor7TkuoYs5LiL5Y675pCeISdcXFxcbiAgICB9KVxcXFxufSk7XFxcXG5kLnB1c2goe1xcXFxuICAgdGl0bGU6c21hbGwoJ+WNlemhueino+aekOmAieaLqeeVjOmdouS4u+mimOaYr+S7gOS5iD8nKStjb2xvcign5LiN55+l6YGTLOadpeS4gOS7vemBk+mVv+eahCcsJyM1RkI4NzgnKSxcXFxcbiAgICBkZXNjOifoh6rliqjmi4nlj5bpgZPplb/nmoTkuLvpopjphY3nva7ku6Xlj4rnvZHpobXmj5Lku7blkozpnZnmgIHpobXpnaInLFxcXFxuICAgY29sX3R5cGU6J3RleHRfMScsXFxcXG4gICB1cmw6JCgn56Gu6K6k5ZCXP+WmguaenOS9oOS4jeaYr+Wwj+eZve+8jOaAu+ivpeS8muaPkOWJjeWkh+S7veiHquW3seS4u+mimOeahOWQpyFcXFxcXFxcXG4nK3RoZW1lUm91dGUpLmNvbmZpcm0oKGNqY2FjaGUseDVjYWNoZSx0aGVtZVJvdXRlLHRoZW1lT25saW5lKT0+e1xcXFxuICAgICAgIGxldCB0aGVtZUNvZGUgPSBmZXRjaCh0aGVtZU9ubGluZSk7XFxcXG4gICAgICAgaWYoIS9ub3dfdGhlbWUvLnRlc3QodGhlbWVDb2RlKSl7XFxcXG4gICAgICAgICAgIGxvZyh0aGVtZUNvZGUpO1xcXFxuICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5aSx6LSlIeS4jumBk+mVv+acjeWKoeWZqOmAmuiur+mUmeivryzkvLDorqHmmK/nvZHnu5zljaHkuoYnXFxcXG4gICAgICAgfVxcXFxuICAgICAgIGxldCBjakZyb20gPSBcXFxcXFxcImhpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcIjtcXFxcbiAgICAgICBsZXQgeDVGcm9tID0gXFxcXFxcXCJoaWtlcjovL3BhZ2UvUGFyc2VfRG4uaHRtbD9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcIjtcXFxcbiAgICAgICB0cnkge1xcXFxuICAgICAgICAgICBsZXQgY2pGaWxlID0gSlNPTi5wYXJzZShmZXRjaChjakZyb20pKS5ydWxlO1xcXFxuICAgICAgICAgICBsZXQgeDVGaWxlID0gSlNPTi5wYXJzZShmZXRjaCh4NUZyb20pKS5ydWxlO1xcXFxuICAgICAgICAgICB3cml0ZUZpbGUoY2pjYWNoZSwgY2pGaWxlKTtcXFxcbiAgICAgICAgICAgd3JpdGVGaWxlKHg1Y2FjaGUsIHg1RmlsZSk7XFxcXG4gICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLCB0aGVtZUNvZGUpO1xcXFxuICAgICAgICAgICBjbGVhclZhcihcXFxcXFxcImp4T2xkVlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgY2xlYXJWYXIoXFxcXFxcXCJqeE5ld1ZcXFxcXFxcIik7XFxcXG4gICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S4u+mimOW3suaIkOWKn+W6lOeUqCdcXFxcbiAgICAgICB9XFxcXG4gICAgICAgY2F0Y2goZSl7XFxcXG4gICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kuLvpopjlupTnlKjlpLHotKVcXFxcXFxcXG7mnKrmnJ/mnJvnmoTplJnor686JytlLm1lc3NhZ2U7XFxcXG4gICAgICAgfVxcXFxuICAgfSxjamNhY2hlLHg1Y2FjaGUsdGhlbWVSb3V0ZSx0aGVtZU9ubGluZSlcXFxcbn0pO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTpzbWFsbCgn5pat5o+S6Kej5p6Q5Y+K6buY6K6k5YiX6KGo5piv5LuA5LmIPycpK2NvbG9yKCfkuI3nn6XpgZMs5p2l5LiA5Lu96YGT6ZW/55qEJywnIzVGQjg3OCcpLFxcXFxuICAgIGRlc2M6J+iHquWKqOaLieWPlumBk+mVv+WcqOeUqOeahOS4pOS4qk15UGFyc2UuanNvbuaWh+S7ticsXFxcXG4gICAgY29sX3R5cGU6J3RleHRfMScsXFxcXG4gICAgdXJsOiQoJ+ehruiupOWQlz/lpoLmnpzkvaDkuI3mmK/lsI/nmb3vvIzmgLvor6XkvJrmj5DliY3lpIfku73oh6rlt7HnmoTphY3nva7mlofku7blkKchXFxcXFxcXFxuJytvbGRSb3V0ZSsnXFxcXFxcXFxuJytuZXdSb3V0ZSkuY29uZmlybSgob2xkUm91dGUsb2xkT25saW5lLG5ld1JvdXRlLG5ld09ubGluZSk9PntcXFxcbiAgICAgICAgbGV0IG9sZENvZGUgPSBmZXRjaChvbGRPbmxpbmUpO1xcXFxuICAgICAgICBsZXQgbmV3Q29kZSA9IGZldGNoKG5ld09ubGluZSk7XFxcXG4gICAgICAgIGlmKCEvUGFyc2VfRG5cXFxcXFxcXC5qcy8udGVzdChvbGRDb2RlKXx8IS9QYXJzZV9EblxcXFxcXFxcLmpzLy50ZXN0KG5ld0NvZGUpKXtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lpLHotKUh5LiO6YGT6ZW/5pyN5Yqh5Zmo6YCa6K6v6ZSZ6K+vLOS8sOiuoeaYr+e9kee7nOWNoeS6hidcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKG9sZFJvdXRlLCBvbGRDb2RlKTtcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZShuZXdSb3V0ZSwgbmV3Q29kZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S6Kej5p6Q6YWN572u5Y+K6buY6K6k5YiX6KGo5bey57uP6YWN572u5oiQ5YqfJ1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGNhdGNoKGUpe1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+mFjee9ruW6lOeUqOWksei0pVxcXFxcXFxcbuacquacn+acm+eahOmUmeivrzonK2UubWVzc2FnZTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sb2xkUm91dGUsb2xkT25saW5lLG5ld1JvdXRlLG5ld09ubGluZSlcXFxcbn0pO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTpzbWFsbCgn5pat5o+S6Kej5p6Q6Ieq5Yqo5qGj5qih5byP5piv5LuA5LmIPycpK2NvbG9yKCfkuI3nn6XpgZMs5p2l5LiA5Lu96YGT6ZW/55qEJywnIzVGQjg3OCcpLFxcXFxuICAgIGRlc2M6J+iHquWKqOaLieWPlumBk+mVv+WcqOeUqOeahE15SmlleGkuanNvbuaWh+S7ticsXFxcXG4gICAgY29sX3R5cGU6J3RleHRfMScsXFxcXG4gICAgdXJsOiQoJ+ehruiupOWQlz/lpoLmnpzkvaDkuI3mmK/lsI/nmb3vvIzmgLvor6XkvJrmj5DliY3lpIfku73oh6rlt7HnmoToh6rliqjmoaPmlrnmoYjlkKchXFxcXFxcXFxuJytqeHNSb3V0ZSkuY29uZmlybSgoanhzUm91dGUsanhPbmxpbmUpPT57XFxcXG4gICAgICAgIGxldCBqeENvZGUgPSBmZXRjaChqeE9ubGluZSk7XFxcXG4gICAgICAgIGlmKCEvamlleGlzLy50ZXN0KGp4Q29kZSkpe1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+Wksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsIGp4Q29kZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S6Kej5p6Q6YWN572u5Y+K6buY6K6k5YiX6KGo5bey57uP6YWN572u5oiQ5YqfJ1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGNhdGNoKGUpe1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+iHquWKqOaho+W6lOeUqOWksei0pVxcXFxcXFxcbuacquacn+acm+eahOmUmeivrzonK2UubWVzc2FnZTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sanhzUm91dGUsanhPbmxpbmUpXFxcXG59KTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6c21hbGwoJ+ecn+eahOWVpeS5n+S4jeS8muS6hizov5jmh5LlvpfkuIDkuKrkuKrngrk/JykrY29sb3IoJ+S4jeefpemBkyzmnaXkuIDku73pgZPplb/nmoQnLCcjNUZCODc4JyksXFxcXG4gICAgZGVzYzon6Ieq5Yqo5ouJ5Y+W6YGT6ZW/5Zyo55So55qE5LiK6L+w5omA5pyJ5paH5Lu2XFxcXFxcXFxu5LiA6ZSu5pCe5a6M55u05o6l5Y675pSv5oyB5pat5o+S55qE5bCP56iL5bqP55yL6KeG6aKR5bCx6KGM5ZWmJyxcXFxcbiAgICBjb2xfdHlwZTondGV4dF8xJyxcXFxcbiAgICB1cmw6JCgn5L+u5LuZ5rOV5Yqb5peg6L65Jywn56Gu6K6k5ZCXP+WmguaenOS9oOS4jeaYr+Wwj+eZve+8jOaAu+ivpeS8muaPkOWJjeWkh+S7veiHquW3seeahOS4iui/sOaJgOacieaWh+S7tuWQpyFcXFxcXFxcXG7or7fovpPlhaXpgZPplb/kv67ku5nms5Xlipvml6DovrnmnaXnoa7orqTmiafooYzmraTmk43kvZwnKS5pbnB1dCgoY2pjYWNoZSx4NWNhY2hlLHRoZW1lUm91dGUsb2xkUm91dGUsbmV3Um91dGUsanhzUm91dGUsdGhlbWVPbmxpbmUsb2xkT25saW5lLG5ld09ubGluZSxqeE9ubGluZSk9PntcXFxcbiAgICAgICAgaWYoaW5wdXQhPT0n6YGT6ZW/5L+u5LuZ5rOV5Yqb5peg6L65Jyl7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pys5qyh5Y+W5raI5omn6KGMJ1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGxldCB0aGVtZUNvZGUgPSBmZXRjaCh0aGVtZU9ubGluZSk7XFxcXG4gICAgICAgIGlmKCEvbm93X3RoZW1lLy50ZXN0KHRoZW1lQ29kZSkpe1xcXFxuICAgICAgICAgICAgbG9nKCd0aGVtZUNvZGU6Jyt0aGVtZUNvZGUpO1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aLieS4u+mimOWksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGxldCBjakZyb20gPSBcXFxcXFxcImhpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcIjtcXFxcbiAgICAgICAgbGV0IHg1RnJvbSA9IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmh0bWw/cnVsZT1NeUZpZWxk4bSw4oG/XFxcXFxcXCI7XFxcXG4gICAgICAgIGxldCBjakZpbGUgPSBKU09OLnBhcnNlKGZldGNoKGNqRnJvbSkpLnJ1bGU7XFxcXG4gICAgICAgIGxldCB4NUZpbGUgPSBKU09OLnBhcnNlKGZldGNoKHg1RnJvbSkpLnJ1bGU7XFxcXG4gICAgICAgIGxldCBvbGRDb2RlID0gZmV0Y2gob2xkT25saW5lKTtcXFxcbiAgICAgICAgbGV0IG5ld0NvZGUgPSBmZXRjaChuZXdPbmxpbmUpO1xcXFxuICAgICAgICBpZighL1BhcnNlX0RuXFxcXFxcXFwuanMvLnRlc3Qob2xkQ29kZSl8fCEvUGFyc2VfRG5cXFxcXFxcXC5qcy8udGVzdChuZXdDb2RlKSl7XFxcXG4gICAgICAgICAgICAvLyBsb2coJ29sZENvZGU6JytvbGRDb2RlKTtcXFxcbiAgICAgICAgICAgIC8vIGxvZygnbmV3Q29kZTonK25ld0NvZGUpO1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+Wksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGxldCBqeENvZGUgPSBmZXRjaChqeE9ubGluZSk7XFxcXG4gICAgICAgIGlmKCEvamlleGlzLy50ZXN0KGp4Q29kZSkpe1xcXFxuICAgICAgICAgICAgLy8gbG9nKCdqeENvZGU6JytqeENvZGUpO1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+Wksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUoY2pjYWNoZSwgY2pGaWxlKTsgLy8g5ouJ5o+S5Lu2XFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUoeDVjYWNoZSwgeDVGaWxlKTsgLy/mi4nnvZHpobXmlofku7ZcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLCB0aGVtZUNvZGUpOyAvL+aLieS4u+mimOaWh+S7tlxcXFxuICAgICAgICAgICAgY2xlYXJWYXIoXFxcXFxcXCJqeE9sZFZcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICBjbGVhclZhcihcXFxcXFxcImp4TmV3VlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZShvbGRSb3V0ZSwgb2xkQ29kZSk7IC8v5ouJ5pat5o+S6buY6K6k6YCJ5oup55WM6Z2i55qE6YWN572uXFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUobmV3Um91dGUsIG5ld0NvZGUpOyAvL+aLieaWreaPkuWGheeahOino+aekFxcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLCBqeENvZGUpOyAvLyDmi4noh6rliqjmoaPmlofku7ZcXFxcbiAgICAgICAgICAgIGJhY2sodHJ1ZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S6Kej5p6Q6YWN572u5Y+K6buY6K6k5YiX6KGo5bey57uP6YWN572u5oiQ5YqfJ1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGNhdGNoKGUpe1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S4gOmUruaooeW8j+W6lOeUqOWksei0pVxcXFxcXFxcbuacquacn+acm+eahOmUmeivrzonK2UubWVzc2FnZTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sY2pjYWNoZSx4NWNhY2hlLHRoZW1lUm91dGUsb2xkUm91dGUsbmV3Um91dGUsanhzUm91dGUsdGhlbWVPbmxpbmUsb2xkT25saW5lLG5ld09ubGluZSxqeE9ubGluZSlcXFxcbn0pO1xcXFxubGV0IGRlc2NJbmZvID0gJ+S4u+mimOaWh+S7tjonK3RoZW1lUm91dGUrJ1xcXFxcXFxcbuS4u+eVjOmdoumFjee9rjonK29sZFJvdXRlKydcXFxcXFxcXG7lq5bliLDnmoTop6PmnpA6JytuZXdSb3V0ZSsnXFxcXFxcXFxu6Ieq5Yqo5qGj6Kej5p6QOicranhzUm91dGU7XFxcXG5kZXNjSW5mbys9J1xcXFxcXFxcbuS4u+aPkuS7tjonK2NqY2FjaGUrJ1xcXFxcXFxcbuS4u+mFjee9rumAieaLqeeVjOmdouaWh+S7tjonK3g1Y2FjaGU7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOifmlofku7bmj4/ov7A6XFxcXFxcXFxuJytkZXNjSW5mbyxcXFxcbiAgICBjb2xfdHlwZTonbG9uZ190ZXh0JyxcXFxcbiAgICBleHRyYTp7dGV4dFNpemU6IDEzLGxpbmVWaXNpYmxlOmZhbHNlfVxcXFxufSk7XFxcXG5zZXRSZXN1bHQoZCk7XFxcIn1dXCJ9IiwidGl0bGUiOiLmlq3mj5LmjqXlj6Porr7nva4t4pOK4oCc4oCc4oCd4oCdT0vop6PmnpAifQ==
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement