Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥断插 道长魔改@@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+3LeS8mOmFt1xcXCJdLGNvZGVzOntcXFwi5L2g54i556eR5oqAXFxcIjpcXFwiaHR0cDovL2NhY2hlLmxhbmd1YW5nLmljdTo4OC9kaWRpLnBocD91cmw9XFxcIixcXFwi6J6N5YW0XFxcIjpcXFwiaHR0cHM6Ly90ZXN0LnJvbmd4aW5ndnIuY29tL3Rlc3QvP3VybD1cXFwiLFxcXCLkurrkurrov7ct5LyY6YW3XFxcIjpcXFwiaHR0cHM6Ly9zdmlwLnJlbnJlbm1pLmNjOjIyMjIvYXBpLz9rZXk9bm40ajhydWtQWFNWelI3OEU5JnVybD1cXFwifX0pKVxcbiAgICB9XFxuICAgIHZhciBuZXdDb25maWcgPSBmYmEuZmV0Y2gobmV3Um91dGUpO1xcbiAgICB2YXIgbXlTZWxlY3QgPSBbXTtcXG4gICAgZnVuY3Rpb24gY29tcGFyZShsaXN0KSB7XFxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XFxuICAgICAgICAgICAgcmV0dXJuICFsaXN0LmluY2x1ZGVzKGl0KVxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGlmKG5ld0NvbmZpZyYmbmV3Q29uZmlnLmxlbmd0aD4yMCl7XFxuICAgICAgICBldmFsKFxcXCJuZXdDb25maWcgPVxcXCIgKyBuZXdDb25maWcgKyBcXFwiO1xcXCIpO1xcbiAgICAgICAgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHNldHRpbmdzLG5ld0NvbmZpZy5zZXR0aW5ncyk7XFxuICAgICAgICB2YXIgeWNUaXRsZSA9IFsnZGVmYXVsdFBhcnNlJywgJ2RlZmF1bHRQYXJzZVdlYicsJ21hb3NzJywgJ0NpdHlJUCcsICdjYWNoZU0zdTgnLCAncGNVQScsICdwYXJzZUxjJywgJ2dwYXJzZScsICducGFyc2UnXTtcXG4gICAgICAgIG15U2VsZWN0ID0gbmV3Q29uZmlnLnRpdGxlLmZpbHRlcihjb21wYXJlKHljVGl0bGUpKTtcXG4gICAgfVxcbiAgICAvL2ZiYS5sb2coSlNPTi5zdHJpbmdpZnkobXlTZWxlY3QpKTtcXG5cXG4gICAgbGV0IG9wdGlvbnMgPSBbXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon54ix5aWH6Im6JyxcXG4gICAgICAgICAgICBpZDoncXknLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnF5LFxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiforr7nva7niLHlpYfoibonXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+S8mOmFtycsXFxuICAgICAgICAgICAgaWQ6J3lrJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy55a1xcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifohb7orq8nLFxcbiAgICAgICAgICAgIGlkOid0eCcsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MudHhcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon6IqS5p6cJyxcXG4gICAgICAgICAgICBpZDonbWcnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLm1nXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+WTlOWTqeWTlOWTqScsXFxuICAgICAgICAgICAgaWQ6J2JsJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5ibFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifmkJzni5AnLFxcbiAgICAgICAgICAgIGlkOidzaCcsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Muc2hcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon6KW/55OcJyxcXG4gICAgICAgICAgICBpZDoneGcnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnhnXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+mYv+mHjCcsXFxuICAgICAgICAgICAgaWQ6J2FsJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5hbFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOidQUFRWJyxcXG4gICAgICAgICAgICBpZDoncHAnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnBwXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+WSquWSlScsXFxuICAgICAgICAgICAgaWQ6J21pJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5taVxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifkuZDop4YnLFxcbiAgICAgICAgICAgIGlkOidsZScsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MubGVcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTonMTkwNScsXFxuICAgICAgICAgICAgaWQ6J29uZScsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Mub25lXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+mjjuihjCcsXFxuICAgICAgICAgICAgaWQ6J2Z1bicsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MuZnVuXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+WFtuS7licsXFxuICAgICAgICAgICAgaWQ6J290aCcsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Mub3RoXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+WFqOWxgCcsXFxuICAgICAgICAgICAgaWQ6J3FqdScsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MucWp1XFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+aPkuS7ticsXFxuICAgICAgICAgICAgaWQ6J2NqJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5jalxcbiAgICAgICAgfSxcXG4gICAgXTtcXG5cXG4gICAgZnVuY3Rpb24gRGlkKGlkKXtcXG4gICAgICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XFxuICAgIH1cXG4gICAgZnVuY3Rpb24gZ2V0T3B0aW9uKGlkLHRpdGxlKSB7XFxuICAgICAgICB2YXIgb2JqID0gRGlkKGlkKTtcXG4gICAgICAgIERpZCh0aXRsZSkudmFsdWUgPSBvYmoub3B0aW9uc1tvYmouc2VsZWN0ZWRJbmRleF0udGV4dDtcXG4gICAgfVxcbiAgICBmdW5jdGlvbiByZXNldFNlbGVjdChpZCl7XFxuICAgICAgICBEaWQoaWQrXFxcIlNlbGVjdFxcXCIpLm9wdGlvbnMuc2VsZWN0ZWRJbmRleCA9IC0xO1xcbiAgICB9XFxuXFxuICAgIC8v5Ye95pWw6YOo5YiGXFxuXFxuICAgIGZ1bmN0aW9uIFRvYXN0KG1zZyxkdXJhdGlvbil7XFxuICAgICAgICBkdXJhdGlvbj1pc05hTihkdXJhdGlvbik/MjAwMDpkdXJhdGlvbjtcXG4gICAgICAgIHZhciBtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XFxuICAgICAgICBtLmlubmVySFRNTCA9IG1zZztcXG4gICAgICAgIG0uc3R5bGUuY3NzVGV4dD1cXFwid2lkdGg6NDUlOyBtaW4td2lkdGg6MTUwcHg7IGJhY2tncm91bmQ6IzMxMTsgb3BhY2l0eTowLjY7IGhlaWdodDphdXRvO21pbi1oZWlnaHQ6IDQ1cHg7IGNvbG9yOiNmZmY7IGxpbmUtaGVpZ2h0OjQ1cHg7IHRleHQtYWxpZ246Y2VudGVyOyBib3JkZXItcmFkaXVzOjEwcHg7IHBvc2l0aW9uOmZpeGVkOyB0b3A6NjAlOyBsZWZ0OjI2JTsgei1pbmRleDo5OTk5OTk7XFxcIjtcXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobSk7XFxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xcbiAgICAgICAgICAgIHZhciBkID0gMC41O1xcbiAgICAgICAgICAgIG0uc3R5bGUud2Via2l0VHJhbnNpdGlvbiA9ICctd2Via2l0LXRyYW5zZm9ybSAnICsgZCArICdzIGVhc2UtaW4sIG9wYWNpdHkgJyArIGQgKyAncyBlYXNlLWluJztcXG4gICAgICAgICAgICBtLnN0eWxlLm9wYWNpdHkgPSAnMCc7XFxuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChtKSB9LCBkICogMTAwMCk7XFxuICAgICAgICB9LCBkdXJhdGlvbik7XFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gb3BlbkRuUGFnZSgpe1xcbiAgICAgICAgZmJhLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIHJ1bGU6IFxcXCI9Xl9ePVxcXCIsXFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLnvJbovpHop6PmnpBcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3nvJbovpEjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIixcXG4gICAgICAgICAgICBncm91cDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIC8vZmluZFJ1bGU6IFxcXCJqczp0aGlzLmQ9W107JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmpzP3J1bGU9TXlGaWVsZOG0sOKBv1xcXFxcXFwiKS5lZGl0KCk7c2V0UmVzdWx0KGQpO1xcXCIsXFxuICAgICAgICAgICAgcHJlUnVsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHt9XFxuICAgICAgICB9KSk7XFxuICAgIH1cXG4gICAgZnVuY3Rpb24gb3BlblRoZW1lKCl7XFxuICAgICAgICBmYmEub3BlbihKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgcnVsZTogXFxcIj1eX149XFxcIixcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuS4u+mimOeuoeeQhlxcXCIsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPeS4u+mimCNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiLFxcbiAgICAgICAgICAgIGdyb3VwOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgcHJlUnVsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHt9XFxuICAgICAgICB9KSk7XFxuICAgIH1cXG4gICAgZnVuY3Rpb24gb3Blbkp4TWFuYWdlKCl7XFxuICAgICAgICBmYmEub3BlbihKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgcnVsZTogXFxcIj1eX149XFxcIixcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuino+aekOmFjee9rueuoeeQhlxcXCIsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPeino+aekCNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiLFxcbiAgICAgICAgICAgIGdyb3VwOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgcHJlUnVsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHt9XFxuICAgICAgICB9KSk7XFxuICAgIH1cXG4gICAgZnVuY3Rpb24gY2FuY2VsKCl7XFxuICAgICAgICBpZighbXlTZXQpe1xcbiAgICAgICAgICAgIGZiYS53cml0ZUZpbGUob2xkUm91dGUsIEpTT04uc3RyaW5naWZ5KHNldHRpbmdzLCBudWxsLCA0KSk7XFxuICAgICAgICAgICAgZmJhLnJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgZmJhLmJhY2soZmFsc2UpO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGZ1bmN0aW9uIGNsaWNrbWUobXNnLGR1cmF0aW9uLHRpdGxlKXtcXG4gICAgICAgIHRyeXtcXG4gICAgICAgICAgICBmb3IobGV0IGtleSBpbiBzZXR0aW5ncyl7XFxuICAgICAgICAgICAgICAgIC8vIGZiYS5sb2coRGlkKGtleSkrJycra2V5KTtcXG4gICAgICAgICAgICAgICAgdHJ5e1xcbiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3Nba2V5XSA9IERpZChrZXkpLnZhbHVlO1xcbiAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XFxuICAgICAgICAgICAgICAgICAgICBhbGVydChcXFwi5pyq6I635Y+W5Yiw6IqC54K5OlxcXCIra2V5K1xcXCJcXFxcblxcXCIrZS5tZXNzYWdlKTtcXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZihteVNlbGVjdCl7XFxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obmV3Q29uZmlnLnNldHRpbmdzLCBzZXR0aW5ncyk7XFxuICAgICAgICAgICAgICAgIGZiYS53cml0ZUZpbGUobmV3Um91dGUsICQkJC5zdHJpbmdpZnkobmV3Q29uZmlnKSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGZiYS53cml0ZUZpbGUob2xkUm91dGUsICQkJC5zdHJpbmdpZnkoc2V0dGluZ3MpKTtcXG4gICAgICAgICAgICBUb2FzdChtc2csZHVyYXRpb24pO1xcbiAgICAgICAgICAgIGlmKHRpdGxlPT09XFxcIuWFs1xcXCIpe1xcbiAgICAgICAgICAgICAgICBmYmEuYmFjaygpO1xcbiAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICBmYmEucmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfWNhdGNoKGUpe1xcbiAgICAgICAgICAgIGFsZXJ0KGUubWVzc2FnZSlcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICAvL2xldCB3aWR0aD13aW5kb3cuc2NyZWVuLmF2YWlsV2lkdGg7XFxuICAgIC8vbGV0IHdpZHRoUHg9d2lkdGgtMzkzKzUyO1xcbiAgICAvL2FsZXJ0KFxcXCLlvZPliY3liIbovqjnjoc6XFxcIit3aW5kb3cuc2NyZWVuLmF2YWlsV2lkdGgrXFxcIipcXFwiK3dpbmRvdy5zY3JlZW4uaGVpZ2h0KTtcXG4gICAgdmFyIHZlcmluZm8gPSBbe1xcbiAgICAgICAgaWQ6J2RuJyxcXG4gICAgICAgIGF1dGhvcjon5pat5b+1JyxcXG4gICAgICAgIGF2YXRhcjonaHR0cHM6Ly9zMy5heDF4LmNvbS8yMDIxLzAyLzIyL3k3d2I5Ty5qcGcnLFxcbiAgICAgICAgb3B0aW9uOm9wZW5EblBhZ2UsXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGlkOidkeicsXFxuICAgICAgICBhdXRob3I6J+mBk+mVvycsXFxuICAgICAgICBhdmF0YXI6J2h0dHA6Ly9xMS5xbG9nby5jbi9nP2I9cXEmbms9NDM0ODU3MDA1JnM9NjQwJyxcXG4gICAgICAgIG9wdGlvbjpvcGVuVGhlbWVcXG4gICAgfSxcXG4gICAge1xcbiAgICBpZDonbG0nLFxcbiAgICAgICAgYXV0aG9yOiAn6JOd6I6TJyxcXG4gICAgICAgIGF2YXRhcjogJ2h0dHA6Ly9xMS5xbG9nby5jbi9nP2I9cXEmbms9MjU3OTk0OTM3OCZzPTY0MCcsXFxuICAgICAgICBvcHRpb246b3Blbkp4TWFuYWdlXFxuICAgIH1cXG4gICAgXTtcXG5cXG4gICAgZnVuY3Rpb24gZG9PcHRpb24ob3B0aW9uX2lkKXtcXG4gICAgICAgIGxldCB2ZXIgPSB2ZXJpbmZvLmZpbHRlcihpdD0+aXQuaWQ9PT1vcHRpb25faWQpWzBdO1xcbiAgICAgICAgdmVyLm9wdGlvbigpO1xcbiAgICB9XFxuXFxuICAgIGNvbnN0IFJlbmRlckh0bWxBcHAgPSB7XFxuICAgICAgICBkYXRhKCkge1xcbiAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgIC8vIHJhd0h0bWw6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6IHJlZFxcXCI+6L+Z6YeM5Lya5pi+56S657qi6Imy77yBPC9zcGFuPicsXFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6b3B0aW9ucyxcXG4gICAgICAgICAgICAgICAgdmVyaW5mbzp2ZXJpbmZvLFxcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjpwbGFjZWhvbGRlcixcXG4gICAgICAgICAgICAgICAgdGlwczp0aXBzLFxcbiAgICAgICAgICAgICAgICB0aGVtZXM6dGhlbWVzLFxcbiAgICAgICAgICAgICAgICBteVNlbGVjdDpteVNlbGVjdCxcXG4gICAgICAgICAgICAgICAgLy8gY2pTZWw6Wyfor7fpgInmi6nmj5Lku7YgKOWPquS9nOeUqGxhenlSdWxlKScsJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnLCdoaWtlcjovL2ZpbGVzL3J1bGVzL2R6SG91c2UvanMvc3JjYXV0by5qcycsJ2hpa2VyOi8vZmlsZXMvcnVsZXMvanMvUGFyc2UtVjJfRG4uanMnXSxcXG4gICAgICAgICAgICAgICAgY2pTZWw6Wyfor7fpgInmi6nmj5Lku7YgKOWPquS9nOeUqGxhenlSdWxlKScsJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnXSxcXG4gICAgICAgICAgICAgICAgc2V0dGluZ3M6c2V0dGluZ3MsXFxuICAgICAgICAgICAgICAgIHNob3dUaXBzOmZhbHNlLFxcbiAgICAgICAgICAgICAgICAvL3dpZHRoUHg6d2lkdGhQeFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgICAgICBtZXRob2RzOntcXG4gICAgICAgICAgICAvLyBjaGFuZ2VWYWw6ZnVuY3Rpb24oZXZlbnQpe1xcbiAgICAgICAgICAgIC8vICAgICBnZXRPcHRpb24odGhpcy5pZCx0aGlzLm5hbWUpO1xcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnNlbE9wdGlvbiA9IGV2ZW50LnRhcmdldC52YWx1ZTtcXG4gICAgICAgICAgICAvLyAgICAgYWxlcnQoXFxcIuS9oOmAieS4reS6hlxcXCIrZXZlbnQudGFyZ2V0LnZhbHVlKTtcXG4gICAgICAgICAgICAvLyB9XFxuICAgICAgICAgICAgZG9PcHRpb246ZG9PcHRpb25cXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgY29uc3QgYXBwPVZ1ZS5jcmVhdGVBcHAoUmVuZGVySHRtbEFwcCk7XFxuICAgICAgICBhcHAubW91bnQoJ2JvZHknKTtcXG4gICAgfWNhdGNoIChlKSB7XFxuICAgICAgICBjb25zb2xlLmxvZyhlLm1lc3NhZ2UpXFxuICAgIH1cXG5cXG48L3NjcmlwdD5cXG5cXG48L2JvZHk+XFxuPC9odG1sPlwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiUGFyc2VfRG4uanNcIixcInBhdGhcIjpcIlBhcnNlX0RuLmpzXCIsXCJydWxlXCI6XCIvLz09PT09PT09PT09PeWFjeWXheiwg+eUqD09PT09PT09PT09PVxcbi8v77yN77yN77yNPV5fXj1cXG5cXG52YXIgdmVyc2lvbiA9IDMuNDk7XFxudmFyIHVwZGF0ZURhdGUgPSAnMjAyMS8xMC8yOS8xMDozNSc7XFxudmFyIF9teVNldCA9IHtcXG4gICAgcWp1OiAn6buY6K6kJyxcXG4gICAgb3RoOifpgZPplb/ku5PlupPpgJrlhY0nLFxcbiAgICBjamNhY2hlOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcycsXFxuICAgIHRoZW1lY2FjaGU6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL015VGhlbWUuanNvbicsXFxuICAgIGppZXhpY2FjaGU6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL015SmlleGkuanNvbicsXFxuICAgIHg1Y2FjaGU6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmh0bWwnLFxcbiAgICBvbGRDb25maWc6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvbicsXFxuICAgIGNrTGluazogJ2h0dHBzOi8vY29kZS5hbGl5dW4uY29tL0FJOTU3L0hpa2VyL3Jhdy9tYXN0ZXIvdi8nLFxcbiAgICBjajogJ2h0dHBzOi8vY29kZS5hbGl5dW4uY29tL0FJOTU3L0hpa2VyL3Jhdy9tYXN0ZXIvdi9DbG91ZFBhcnNlLVYyX0RuLmpzJyxcXG4gICAgeDVVcmw6ICdodHRwczovL2NvZGUuYWxpeXVuLmNvbS9BSTk1Ny9IaWtlci9yYXcvbWFzdGVyL3YvUGFyc2VfRG4uaHRtbCcsXFxuICAgIHBhcnNlUm91dGU6ICdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicsXFxuICAgIHg1Um91dGU6ICdmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9jYWNoZS9QYXJzZV9Ebi5odG1sJ1xcbn07XFxudmFyIE15UGFyc2VTID0ge307XFxudmFyIG15U2V0ID0gX215U2V0O1xcbmlmIChmaWxlRXhpc3QoX215U2V0LnBhcnNlUm91dGUpKSB7XFxuICAgIGV2YWwoJ3ZhciBwYXJzZUZpbGUgPScgKyBmZXRjaChfbXlTZXQucGFyc2VSb3V0ZSkpO1xcbiAgICBNeVBhcnNlUyA9IHBhcnNlRmlsZS5jb2RlcztcXG4gICAgbXlTZXQgPSBwYXJzZUZpbGUuc2V0dGluZ3M7XFxufVxcbnZhciBwYXJzZVRpdGxlID0gW1xcbiAgICBcXFwieXVuMTcxN1xcXCIsXFxuICAgIFxcXCJQYW5HdVxcXCIsXFxuICAgIFxcXCJGdVhpbmdcXFwiLFxcbiAgICBcXFwiZGVmYXVsdFBhcnNlXFxcIixcXG4gICAgXFxcIumBk+mVv+S7k+W6k+mAmuWFjVxcXCIsXFxuICAgIFxcXCJkZWZhdWx0UGFyc2VXZWJcXFwiLFxcbiAgICBcXFwiT0vop6PmnpBcXFwiLFxcbiAgICBcXFwiTTNVOFRWXFxcIixcXG5dO1xcbi8v77yN77yN77yNPV5fXj1cXG5cXG4vL+aOpeWPo+iuvue9ri5cXG5cXG52YXIgc2V0VXJsID0gXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3orr7nva4jbm9SZWNvcmRIaXN0b3J5I1xcXCI7XFxudmFyIHNldF9zd2l0Y2ggPSBzZXRVcmw7XFxudmFyIGxhenkgPSBgZXZhbCgndmFyIGNvbmZpZyA9JyArIGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpKTtldmFsKGZldGNoKGNvbmZpZy5jaikpO2F5dG1QYXJzZShpbnB1dClgO1xcblxcbi8vdmFyIHBhcndpeCA9IGB2YXIgeXVybD0naHR0cHM6Ly9kYWlsaS5tYXlpeGlvbmdkaS5jbi8/dXJsPSc7UmVmZXJlcic6ICdodHRwczovL3d3dy5tYXlpeGlvbmdkaS5jbi95cz9pZD0nOydodHRwczovL2RhaWxpLm1heWl4aW9uZ2RpLmNuL2FwaS5waHAnLCAnUmVmZXJlcic6J2h0dHBzOi8vZGFpbGkubWF5aXhpb25nZGkuY24nO1xcbi8vIOWFqOawkWh0dHBzOi8vcGN2aWRlb2FsaXl1bi50aWFuc2hhbmdyZW5qaWFuLm1ndHYuY29tLjg4d3VtYS5jb20vP3VybD1cXG5cXG4vL++8je+8je+8jeWkhyDnlKjvvI3vvI3vvI1cXG4vKlxcbiAqIOW9seinhuW3peWcuu+8miBodHRwczovL3lzZ2MuY2MvXFxuICog5rGf5rmWOiA1NTXnlLXlvbEgaHR0cHM6Ly93d3cuNTU1ZHkyLmNvbS9waG9uZS5odG1sIO+9nCAxN+eciyBodHRwOi8vMTdrYW55eS5jbi8gaHR0cDovL2poamlleGkuMzB2ci5jbi8/dXJsPSDvvZwgaHR0cDovL2FwaS5tYWl6aW1hbGwuY29tL2luZGV4LnBocD91cmw9XFxuICog5rGf5rmWOiBodHRwOi8vd3d3LnRpYW5zaHV5dW4ubmV0L2luZGV4LnBocC92b2QvcGxheS9pZC80NDgzNzcvc2lkLzEvbmlkLzEuaHRtbFxcbiAqIOaxn+a5ljI6IGh0dHA6Ly85OGh5ay5jbi9pbmRleC5waHAvdm9kL3BsYXkvaWQvNzI4NDEvc2lkLzEvbmlkLzEuaHRtbFxcbiAqIOS6uuS6uui/tzogaHR0cHM6Ly92aXAuc3Vzb3UudHYvcGxheWVyLz91cmw9IO+9nCBodHRwczovL3d3dy5tb21kbS5jYy9cXG4gKlxcbiAqIHd1aWdlbjogaHR0cHM6Ly93d3cuNWlnZW4uY29tL2RtcGxheWVyL3BsYXllci8/dXJsPVxcbiAqIOW5sumlrSjkurrkurrov7cpOiBodHRwczovL2p4Lnp1aS5jbS8/dXJsPVxcbiAqIGh0dHBzOi8vMi42Nm1vdmllLnRvcC9wbGF5ZXIvP3VybD1cXG4gKlxcbiAqL1xcblxcblxcbnZhciB0b29scyA9IHtcXG4gICAgTUQ1OiBmdW5jdGlvbihkYXRhKSB7XFxuICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcbiAgICAgICAgcmV0dXJuIENyeXB0b0pTLk1ENShkYXRhKS50b1N0cmluZyhDcnlwdG9KUy5lbmMuSGV4KTtcXG4gICAgfSxcXG4gICAgQUVTOiBmdW5jdGlvbih0ZXh0LCBrZXksIGl2LCBpc0VuY3J5cHQpIHtcXG4gICAgICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSk7XFxuICAgICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2Uoa2V5KTtcXG4gICAgICAgIHZhciBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGl2KTtcXG4gICAgICAgIGlmIChpc0VuY3J5cHQpIHtcXG4gICAgICAgICAgICByZXR1cm4gQ3J5cHRvSlMuQUVTLmVuY3J5cHQodGV4dCwga2V5LCB7XFxuICAgICAgICAgICAgICAgIGl2OiBpdixcXG4gICAgICAgICAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsXFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcbiAgICAgICAgICAgIH0pLnRvU3RyaW5nKCk7XFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIENyeXB0b0pTLkFFUy5kZWNyeXB0KHRleHQsIGtleSwge1xcbiAgICAgICAgICAgIGl2OiBpdixcXG4gICAgICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcXG4gICAgICAgIH0pLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXG4gICAgfSxcXG4gICAgLy9hc2NpaVxcbiAgICBuZXh0Q2hhcmFjdGVyOiBmdW5jdGlvbihhc2NpaVZhbHVlLCBrKSB7XFxuICAgICAgICB2YXIgcyA9IGFzY2lpVmFsdWU7XFxuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShzICsgayk7XFxuICAgIH0sXFxuICAgIC8v5Yev5pKSXFxuICAgIGNhZXNhckNpcGhlcjogZnVuY3Rpb24oc3RyaW5nVmFsdWUsIGspIHtcXG4gICAgICAgIHZhciBuZXdTdHJpbmcgPSBcXFwiXFxcIjtcXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nVmFsdWUubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBuZXdTdHJpbmcgKz0gdGhpcy5uZXh0Q2hhcmFjdGVyKHN0cmluZ1ZhbHVlW2ldLmNoYXJDb2RlQXQoKSwgayk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gbmV3U3RyaW5nO1xcbiAgICB9LFxcbiAgICBub3dEYXRlOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIHZhciBkYXRlMSA9IG5ldyBEYXRlKCk7XFxuICAgICAgICB2YXIgZGF0ZVN0ciA9IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKGRhdGUxKSB7XFxuICAgICAgICAgICAgZGF0ZVN0ciA9IGRhdGUxLmdldEZ1bGxZZWFyKCk7XFxuICAgICAgICAgICAgdmFyIG1vbnRoID0gZGF0ZTEuZ2V0TW9udGgoKSArIDE7XFxuICAgICAgICAgICAgdmFyIGRheSA9IGRhdGUxLmdldERhdGUoKTtcXG4gICAgICAgICAgICBpZiAobW9udGggPCAxMCkge1xcbiAgICAgICAgICAgICAgICBkYXRlU3RyICs9IFxcXCItMFxcXCIgKyBtb250aDtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBkYXRlU3RyICs9IFxcXCItXFxcIiArIG1vbnRoO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoZGF5IDwgMTApIHtcXG4gICAgICAgICAgICAgICAgZGF0ZVN0ciArPSBcXFwiLTBcXFwiICsgZGF5O1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGRhdGVTdHIgKz0gXFxcIi1cXFwiICsgZGF5O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkYXRlU3RyO1xcbiAgICB9LFxcbiAgICB0b0pTT046IGZ1bmN0aW9uKGpzb24pIHtcXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShqc29uLCAoa2V5LCB2YWx1ZSkgPT4ge1xcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgNCk7XFxuICAgIH0sXFxuICAgIHRvVk51bTogZnVuY3Rpb24oYSkge1xcbiAgICAgICAgdmFyIGEgPSBhLnRvU3RyaW5nKCk7XFxuICAgICAgICB2YXIgYyA9IGEuc3BsaXQoJy4nKTtcXG4gICAgICAgIHZhciBudW1fcGxhY2UgPSBbXFxcIlxcXCIsIFxcXCIwXFxcIiwgXFxcIjAwXFxcIiwgXFxcIjAwMFxcXCIsIFxcXCIwMDAwXFxcIl0sXFxuICAgICAgICAgICAgciA9IG51bV9wbGFjZS5yZXZlcnNlKCk7XFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICB2YXIgbGVuID0gY1tpXS5sZW5ndGg7XFxuICAgICAgICAgICAgY1tpXSA9IHJbbGVuXSArIGNbaV07XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgcmVzID0gYy5qb2luKCcnKTtcXG4gICAgICAgIHJldHVybiByZXM7XFxuICAgIH0sXFxuICAgIGNwclZlcnNpb246IGZ1bmN0aW9uKGEsIGIpIHtcXG4gICAgICAgIHZhciBfYSA9IHBhcnNlSW50KHRoaXMudG9WTnVtKGEpKSxcXG4gICAgICAgICAgICBfYiA9IHBhcnNlSW50KHRoaXMudG9WTnVtKGIpKTtcXG4gICAgICAgIGIgPSBpc05hTihfYikgPyB2ZXJzaW9uIDogYjtcXG4gICAgICAgIGlmIChfYSA+IF9iKSB7XFxuICAgICAgICAgICAgcHV0VmFyKCdqeE5ld1YnLCAn5pyJ5paw54mI5pysOiAnICsgYSk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGNsZWFyVmFyKCdqeE5ld1YnKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHB1dFZhcignanhPbGRWJywgYik7XFxuICAgIH1cXG59O1xcbmlmIChnZXRWYXIoXFxcImp4T2xkVlxcXCIsIFxcXCIwXFxcIikgIT0gdmVyc2lvbikge1xcbiAgICBwdXRWYXIoJ2NqQ2FjaGUnLCBfbXlTZXQuY2pjYWNoZSk7XFxuICAgIHB1dFZhcigneDVDYWNoZScsIF9teVNldC54NUNhY2hlKTtcXG4gICAgcHV0VmFyKCdvbGRDb25maWcnLCBfbXlTZXQub2xkQ29uZmlnKTtcXG4gICAgcHV0VmFyKCdwYXJzZVJvdXRlJywgX215U2V0LnBhcnNlUm91dGUpO1xcbiAgICBsZXQganhOZXdWID0gZmV0Y2goJ2h0dHBzOi8vZ2l0ZWUuY29tL0R1YW4tTmlhbi9Ebi9yYXcvbWFzdGVyL2hpa2Vydmlldy9QYXJzZVZlcnNpb24udHh0JyksXFxuICAgICAgICBqeE9sZFYgPSAoZmV0Y2goX215U2V0LmNqY2FjaGUpLnNwbGl0KCd2ZXJzaW9uID0gXFxcIicpWzFdICsgJycpLnNwbGl0KCdcXFwiJylbMF07XFxuICAgIHRvb2xzLmNwclZlcnNpb24oanhOZXdWLCBqeE9sZFYpO1xcbn1cXG5cXG52YXIgUGFyc2VTID0ge307XFxudmFyIG9yaWdpbmFsUGFyc2VTID0ge1xcbiAgICAvLyB1cGRhdGVEYXRlOiB1cGRhdGVEYXRlLFxcbiAgICBwYXJzZUxjOidodHRwczovL2NvZGUuYWxpeXVuLmNvbS9BSTk1Ny9IaWtlci9yYXcvbWFzdGVyL3AvcGFyc2VMYy5qcycsXFxuICAgIENpdHlJUDogJ2h0dHA6Ly9wdi5zb2h1LmNvbS9jaXR5anNvbicsXFxuICAgIHBjVUE6ICdVc2VyLUFnZW50QE1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjBcXFxc77ybXFxcXO+8myBXT1c2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzQ5LjAuMjYyMy44NyBTYWZhcmkvNTM3LjM2JyxcXG4gICAgY2FjaGVNM3U4OiBmdW5jdGlvbih2VXJsLCByZWYpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIG0zdTggPSBmZXRjaCh2VXJsLCB7fSk7XFxuICAgICAgICAgICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL3ZpZGVvcy5tM3U4JywgbTN1OCk7XFxuICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgcmV0dXJuICdmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9jYWNoZS92aWRlb3MubTN1OCMnO1xcbiAgICB9LFxcbiAgICBkZWZhdWx0UGFyc2U6IGZ1bmN0aW9uKHVybCx0aW1lb3V0KSB7XFxuICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYih1cmwsdGltZW91dCk7XFxuICAgIH0sXFxuICAgIGRlZmF1bHRQYXJzZVdlYjogZnVuY3Rpb24ocGxheVVybCx0aW1lb3V0LGV4dHJhKSB7XFxuICAgICAgICAvLyBsb2coJ+S8oOWFpWRlZmF1bHRQYXJzZVdlYueahOi2heaXtjonK3RpbWVvdXQpO1xcbiAgICAgICAgdGltZW91dCA9IHBhcnNlSW50KHRpbWVvdXQpfHw1MDAwO1xcbiAgICAgICAgZXh0cmEgPSBleHRyYXx8e307XFxuICAgICAgICBsZXQgcGxheVVybExpc3QgPSBleHRyYS5wbGF5VXJsTGlzdHx8W107XFxuICAgICAgICBpZih0eXBlb2YocGxheVVybExpc3QpPT09J29iamVjdCcmJnBsYXlVcmxMaXN0Lmxlbmd0aD4wKXtcXG4gICAgICAgICAgICBwbGF5VXJsTGlzdC51bnNoaWZ0KHBsYXlVcmwpO1xcbiAgICAgICAgICAgIGxldCBwbGF5VXJscz1wbGF5VXJsTGlzdC5zbGljZSgwLDQpO1xcbiAgICAgICAgICAgIGxldCBuYW1lcz1leHRyYS5uYW1lTGlzdC5zbGljZSgwLDQpO1xcbiAgICAgICAgICAgIGxvZygn5byA5aeL5om56YeP6Kej5p6QKOW3suWOu+mHjSzlj6rlj5bliY0z5Liq5aSH6IOO77yM5Yqg6YGT6ZW/576kOjQ4NjcyMjMyOOiOt+WPluacgOaWsOmtlOaWreWKqOaAgSk6JytuYW1lcyk7XFxuICAgICAgICAgICAgY29uc3Qge0xhenlQYXJzZUZhc3R9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZ2xvYmFsUGFyc2U/cnVsZT3pgZPplb/ku5PlupNQcm8nKTtcXG4gICAgICAgICAgICBsZXQgcmV0ID0gTGF6eVBhcnNlRmFzdChwbGF5VXJscyx0aW1lb3V0LHRpbWVvdXQpO1xcbiAgICAgICAgICAgIGlmKHR5cGVvZihyZXQpPT09J29iamVjdCcmJnJldC5sZW5ndGg+MCl7XFxuICAgICAgICAgICAgICAgIC8vcmV0dXJuIHJldFswXVxcbiAgICAgICAgICAgICAgICAvL2xvZyhyZXQpO1xcbiAgICAgICAgICAgICAgICBsZXQgdiA9IGdldEFwcFZlcnNpb24oKTtcXG4gICAgICAgICAgICAgICAgaWYocGFyc2VJbnQodik+PTIxOTQmJnJldC5sZW5ndGg+MSl7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgdXJscyA9IEFycmF5LmZyb20obmV3IFNldChyZXQpKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBoZWFkZXJzID0gdXJscy5tYXAoKGl0KT0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEvOy8udGVzdChpdCl8fGl0LnNwbGl0KCc7JykubGVuZ3RoPDIpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge31cXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhlYWQgPSBpdC5zcGxpdCgnOycpWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighL0AvLnRlc3QoaGVhZCkpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZCA9IGhlYWQucmVwbGFjZSgve3x9L2csJycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkID0gaGVhZC5zcGxpdCgnJiYnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9iaiA9IHt9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gaGVhZCl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5ID0gaGVhZFtpXS5zcGxpdCgnQCcpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gaGVhZFtpXS5zcGxpdCgnQCcpWzFdLnJlcGxhY2UoLzsvLCfvvJvvvJsnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ialxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgdXJscyA9IHVybHMubWFwKGl0PT5pdC5zcGxpdCgnOycpWzBdKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7dXJsczp1cmxzLGhlYWRlcnM6aGVhZGVyc30pO1xcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRbMF1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgY29uc3Qge2xhenlQYXJzZX0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9nbG9iYWxQYXJzZT9ydWxlPemBk+mVv+S7k+W6k1BybycpO1xcbiAgICAgICAgICAgIGxldCB4NVBsYXk9bGF6eVBhcnNlKHBsYXlVcmwsdGltZW91dCk7XFxuICAgICAgICAgICAgaWYodHlwZW9mKHg1UGxheSk9PVxcXCJ1bmRlZmluZWRcXFwifHwheDVQbGF5KXtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+mBk+mVv+S7k+W6k+ino+aekOWksei0pVxcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbGV0IHRpcHM9L3g1UnVsZS8udGVzdCh4NVBsYXkpP1xcXCJ4NeWFjeWXheW8gOWni1xcXCI6XFxcIuaegemAn+WFjeWXheaOouWujOavle+8jOWcsOWdgDpcXFwiKygvXmh0dHAvLnRlc3QoeDVQbGF5KT94NVBsYXk6J+mdnuato+W4uOmTvuaOpScpO1xcbiAgICAgICAgICAgIGxvZyh0aXBzKTtcXG4gICAgICAgICAgICByZXR1cm4geDVQbGF5O1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBtYW9zczogZnVuY3Rpb24oanh1cmwsIHJlZikge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB2YXIgZ2V0VmlkZW9JbmZvID0gZnVuY3Rpb24odGV4dCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9vbHMuQUVTKHRleHQsIGtleSwgaXYpO1xcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgaWYgKHJlZikge1xcbiAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IHJlcXVlc3Qoanh1cmwsIHtcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6IHJlZlxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IHJlcXVlc3Qoanh1cmwpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoaHRtbC5pbmRleE9mKCcmYnR3YWY9JykgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgaHRtbCA9IHJlcXVlc3Qoanh1cmwgKyAnJmJ0d2FmJyArIGh0bWwubWF0Y2goLyZidHdhZiguKj8pXFxcIi8pWzFdLCB7XFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiByZWZcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIGl2ID0gaHRtbC5zcGxpdCgnYnRfdG9rZW4gPSBcXFwiJylbMV0uc3BsaXQoJ1xcXCInKVswXTtcXG4gICAgICAgICAgICBldmFsKGh0bWwubWF0Y2goL3ZhciBjb25maWcgPSB7W1xcXFxzXFxcXFNdKj99LylbMF0gKyAnJyk7XFxuICAgICAgICAgICAgaWYgKGNvbmZpZy51cmwuc2xpY2UoMCwgNCkgIT0gJ2h0dHAnKSB7XFxuICAgICAgICAgICAgICAgIGNvbmZpZy51cmwgPSBkZWNvZGVVUklDb21wb25lbnQodG9vbHMuQUVTKGNvbmZpZy51cmwsIFxcXCJkdnlZUlFsblBSQ01kUVNlXFxcIiwgaXYpKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy51cmw7XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgcmV0dXJuICcnO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBMTFE6IGZ1bmN0aW9uKGp4dXJsKSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHZhciBhcGkgPSBqeHVybC5zcGxpdCgnP3VybD0nKVswXSArIFxcXCJhcGkucGhwXFxcIjtcXG4gICAgICAgICAgICB2YXIgYjY0aWQgPSBiYXNlNjRFbmNvZGUoanh1cmwuc3BsaXQoJ3VybD0nKVsxXSk7XFxuICAgICAgICAgICAgdmFyIHBhcnNlaWQgPSB0b29scy5jYWVzYXJDaXBoZXIoYjY0aWQsIC0xKTtcXG4gICAgICAgICAgICB2YXIganNvbiA9IEpTT04ucGFyc2UocmVxdWVzdChhcGksIHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiBqeHVybFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcXG4gICAgICAgICAgICAgICAgYm9keTogJ3VybD0nICsgcGFyc2VpZFxcbiAgICAgICAgICAgIH0pKTtcXG4gICAgICAgICAgICB1cmwgPSAoanNvbi5jb2RlID09IDIwMCA/IGJhc2U2NERlY29kZSh0b29scy5jYWVzYXJDaXBoZXIoanNvbi51cmwsIC0xKSkgOiAnJyk7XFxuICAgICAgICAgICAgcmV0dXJuIHVybDtcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIFBhbkd1OiBmdW5jdGlvbih2aXBVcmwsIGRhdGEpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgLyp2YXIgcmVmID0gJ2h0dHBzOi8vd3d3LnBhbmd1amlleGkuY29tLyc7XFxuICAgICAgICAgICAgdmFyIHBhcnNlID0gJ2h0dHBzOi8vcGFuZ3VhcGkubnRyeWpkLm5ldC9qaWV4aS8/dXJsPScgKyB2aXBVcmw7XFxuICAgICAgICAgICAgdmFyIGFwaSA9ICdodHRwczovL3Bhbmd1YXBpLm50cnlqZC5uZXQvamlleGkvYXBpLnBocCc7XFxuICAgICAgICAgICAgKi9cXG4gICAgICAgICAgICAvL3ZhciByZWYgPSAnaHR0cHM6Ly94bXlzdHYuY29tLyc7XFxuICAgICAgICAgICAgLy92YXIgcGFyc2UgPSAnaHR0cHM6Ly93d3cuOTlrcHcuY29tL3Bhbmd1L2luZGV4LnBocD91cmw9JyArIHRhaWxVcmw7XFxuICAgICAgICAgICAgLy92YXIgYXBpID0gJ2h0dHBzOi8vd3d3Ljk5a3B3LmNvbS9wYW5ndS9hcGkucGhwJztcXG4gICAgICAgICAgICB2YXIgcGFyc2UgPSAnaHR0cHM6Ly93d3cucGFuZ3VqaWV4aS5jb20vcGFuZ3UvP3VybD0nICsgdmlwVXJsO1xcbiAgICAgICAgICAgIHZhciBhcGkgPSAnaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L3Bhbmd1MjAyMS9hcGkucGhwJztcXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xcbiAgICAgICAgICAgICAgICByZWYgPSBkYXRhWzBdO1xcbiAgICAgICAgICAgICAgICBwYXJzZSA9IGRhdGFbMV07XFxuICAgICAgICAgICAgICAgIGFwaSA9IGRhdGFbMl07XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciBUaW1lID0gKE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSAqIDEpLnRvU3RyaW5nKCk7XFxuICAgICAgICAgICAgdmFyIHVybCA9IEpTT04ucGFyc2UocmVxdWVzdChhcGksIHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiBwYXJzZVxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBib2R5OiAndXJsPScgKyB2aXBVcmwgKyAnJnJlZmVyZXI9JyArIGJhc2U2NEVuY29kZShwYXJzZSkgKyAnJnJlZj0xJnRpbWU9JyArIFRpbWUgKyAnJnR5cGU9Jm90aGVyPScgKyBiYXNlNjRFbmNvZGUodmlwVXJsKSArICcmaW9zPTAnLFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgIH0pKS51cmw7XFxuICAgICAgICAgICAgcmV0dXJuIHVybDtcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIHl1bjE3MTc6IGZ1bmN0aW9uICh2aXBVcmwpIHtcXG4gICAgICAgIHZhciBpc3lrID0gdmlwVXJsLmluZGV4T2YoJ3lvdWt1Jyk7XFxuICAgICAgICB2YXIgcmVmID0gXFxcImh0dHBzOi8vd3d3LjE3MTd5dW4uY29tL2p4L3R5LnBocD91cmw9XFxcIiArIHZpcFVybDtcXG4gICAgICAgIHZhciBwYXJzZSA9IFxcXCJodHRwczovLzE3MTd5dW4uY29tLnpoMTg4Lm5ldC8wODI4Lz91cmw9XFxcIiArIHZpcFVybDtcXG4gICAgICAgIHZhciBhcGkgPSBcXFwiaHR0cHM6Ly8xNzE3eXVuLmNvbS56aDE4OC5uZXQvMTAwNC8uLmluZGV4Li5waHBcXFwiO1xcbiAgICAgICAgcmV0dXJuIGlzeWsgPT0gLTEgPyB0aGlzLlBhbkd1KHZpcFVybCwgW3JlZiwgcGFyc2UsIGFwaV0pIDogdGhpcy5QYW5HdSh2aXBVcmwsIFtyZWYgKyAnLHZpcDonLCBwYXJzZSArICcsdmlwOicsIGFwaV0pO1xcbiAgICB9LFxcbiAgICBPS+ino+aekDonaHR0cHM6Ly9va2p4LmNjLz91cmw9JyxcXG4gICAgTTNVOFRWOidodHRwczovL2p4Lm0zdTgudHYvamlleGkvP3VybD0nLFxcbiAgICDpgZPplb/ku5PlupPpgJrlhY06ZnVuY3Rpb24gKHVybCx0aW1lb3V0KXtcXG4gICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlV2ViKHVybCx0aW1lb3V0KTtcXG4gICAgfSxcXG4gICAgRnVYaW5nOiBmdW5jdGlvbih2aXBVcmwpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgLy9pZih2aXBVcmwuaW5kZXhPZigndi55b3VrdScpIT0tMSl7XFxuICAgICAgICAgICAgLy8gICAgdmlwVXJsID0gKEpTT04ucGFyc2UocmVxdWVzdCh2aXBVcmwsIHtyZWRpcmVjdDpmYWxzZSwgd2l0aEhlYWRlcnM6dHJ1ZX0pKS5oZWFkZXJzLmxvY2F0aW9uICsgJycpLnJlcGxhY2UoL1xcXFw/LiovLCcnKTtcXG4gICAgICAgICAgICAvL31cXG4gICAgICAgICAgICB2YXIgcmVmID0gJ2h0dHBzOi8vangueHVldHVpZ3VhbmcuY24vamlleGkvP3VybD0nICsgdmlwVXJsO1xcbiAgICAgICAgICAgIHZhciBwYXJzZSA9IHJlZjtcXG4gICAgICAgICAgICB2YXIgYXBpID0gJ2h0dHBzOi8vangueHVldHVpZ3VhbmcuY24vamlleGkvYXBpdV9meC5waHAnO1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLlBhbkd1KHZpcFVybCwgW3JlZiwgcGFyc2UsIGFwaV0pO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiAnJztcXG4gICAgICAgIH1cXG4gICAgfSxcXG59O1xcblxcbk9iamVjdC5hc3NpZ24oUGFyc2VTLCBvcmlnaW5hbFBhcnNlUywgTXlQYXJzZVMpO1xcbi8v6KaG55uW6aG65bqP77yM56ys5LiJ5Liq6KaG55uW56ys5LqM5Liq54S25ZCO6KaG55uW56ys5LiA5LiqXFxuXFxuXFxuZnVuY3Rpb24gYXl0bVBhcnNlKHZpcFVybCxzdHJUaXRsZSx0aW1lb3V0LHBsYXlVcmwpIHtcXG4gICAgLy8g5Y+C5pWwMTrmraPniYjnvZHlnYDlnLDlnYAg5Y+C5pWwMiDlrprlkJHop6PmnpDmjqXlj6PlkI3np7Ag5Y+C5pWwMyB4Neino+aekOi2heaXtiDlj4LmlbA0IOWujOaVtOeahOaSreaUvumTvuaOpVxcbiAgICBzdHJUaXRsZSA9IHN0clRpdGxlfHwnJztcXG4gICAgcGxheVVybD1wbGF5VXJsfHwnJztcXG4gICAgLy8gbG9nKCfkvKDlhaVheXRtUGFyc2XnmoTotoXml7Y6Jyt0aW1lb3V0KTtcXG4gICAgdGltZW91dCA9IHBhcnNlSW50KHRpbWVvdXQpfHw1MDAwO1xcblxcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gICAgbGV0IGp4c1JvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlKaWV4aS5qc29uXFxcIjtcXG4gICAgbGV0IE15SmlleGkgPSB7fTtcXG4gICAgbGV0IGppZXhpcyA9IHt9O1xcbiAgICB0cnkge1xcbiAgICAgICAgTXlKaWV4aSA9IEpTT04ucGFyc2UoZmV0Y2goanhzUm91dGUpKTtcXG4gICAgICAgIGppZXhpcyA9IE15SmlleGkuamlleGlzLmZpbHRlcihpdD0+aXQubmFtZT09PU15SmlleGkubm93KVswXTtcXG4gICAgfWNhdGNoIChlKSB7fVxcbiAgICBmdW5jdGlvbiBnZXRQbGF5Sngoa2V5KXtcXG4gICAgICAgIGxldCBwbGF5VXJsTGlzdCA9IFtdOy8v5om56YeP5pKt5pS+5Zyw5Z2A5YiX6KGoXFxuICAgICAgICBsZXQgbmFtZUxpc3QgPSBbXTtcXG4gICAgICAgIGxldCBqeHMgPSBqaWV4aXNba2V5XTsgLy8g6YCC55So5LqO6L+Z5Liq572R56uZ55qE6Kej5p6Q5YiX6KGoXFxuICAgICAgICBpZihqeHMpe1xcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiBqeHMpe1xcbiAgICAgICAgICAgICAgICBpZih0eXBlb2YgUGFyc2VTW2p4c1tpXV0gPT0gJ3N0cmluZycmJlBhcnNlU1tqeHNbaV1dLm1hdGNoKC9odHRwLio/PS8pKXtcXG4gICAgICAgICAgICAgICAgICAgIHBsYXlVcmxMaXN0LnB1c2goUGFyc2VTW2p4c1tpXV0rdmlwVXJsKTtcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVMaXN0LnB1c2goanhzW2ldKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIC8vIHJldHVybiBwbGF5VXJsTGlzdFxcbiAgICAgICAgcmV0dXJuIHtwbGF5VXJsTGlzdDpwbGF5VXJsTGlzdCxuYW1lTGlzdDpuYW1lTGlzdH1cXG4gICAgfVxcbiAgICBsZXQgZXh0cmEgPSB7fTtcXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICAgIGlmKCFzdHJUaXRsZSl7XFxuICAgICAgICB2YXIgaG9zdDtcXG4gICAgICAgIHRyeXtcXG4gICAgICAgICAgICBob3N0ID0gdmlwVXJsLm1hdGNoKC9cXFxcLiguKj8pXFxcXC8vKVsxXTtcXG4gICAgICAgIH1jYXRjaChlKXtcXG4gICAgICAgICAgICBpZighL15odHRwLy50ZXN0KHBsYXlVcmwpKXtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCLmlq3mj5LosIPnlKjlpLHotKXvvIFcXFxcbumdnuato+W4uOeahHZpcOato+eJiOWcsOWdgOS4lOacquivhuWIq+WOn+ermeino+aekOaSreaUvuWcsOWdgFxcXCI7XFxuICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZVMu6YGT6ZW/5LuT5bqT6YCa5YWNKHBsYXlVcmwsdGltZW91dClcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICAvL2xvZyhob3N0KTtcXG4gICAgICAgIHN3aXRjaCAobXlTZXQucWp1KSB7XFxuICAgICAgICAgICAgY2FzZSBcXFwi6buY6K6kXFxcIjpcXG4gICAgICAgICAgICAgICAgc3dpdGNoIChob3N0KSB7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJxcS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnR4O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCd0eCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwiaXFpeWkuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5xeTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgncXknKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInlvdWt1LmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQueWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3lrJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJhbGl6eVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQuYWw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ2FsJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJtZ3R2LmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQubWc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ21nJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJiaWxpYmlsaS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LmJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdibCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwic29odS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnNoO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdzaCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwidHYuc29odS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnNoO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdzaCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwiaXhpZ3VhLmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQueGc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3hnJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJwcHR2LmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQucHA7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3BwJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJtaWd1dmlkZW8uY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5taTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnbWknKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcImxlLmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQubGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ2xlJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCIxOTA1LmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQub25lO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdvbmUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcImZ1bi50dlxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQuZnVuO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdmdW4nKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQub3RoO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnFqdTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICB9XFxuICAgIH1lbHNle1xcbiAgICAgICAgbG9nKCfmrrXmj5LmiafooYzlrprlkJHop6PmnpDnur/ot6/lpLQ6JytzdHJUaXRsZSk7XFxuICAgICAgICBzdHIgPSBzdHJUaXRsZTtcXG4gICAgfVxcbiAgICBsZXQgd2l0aEJhdGNoID0gISEoTXlKaWV4aS5pc0F1dG8gJiYgTXlKaWV4aS5hdXRvTW9kZSA9PT0gJ+mAn+W6puS8mOWFiCcpO1xcbiAgICBpZiAodHlwZW9mIFBhcnNlU1tzdHJdID09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgIGlmKC/pgJrlhY0vLnRlc3Qoc3RyKSl7XFxuICAgICAgICAgICAgcmV0dXJuIFBhcnNlU1tzdHJdKHZpcFVybCx0aW1lb3V0KTtcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciB1cmwgPSBQYXJzZVNbc3RyXSh2aXBVcmwpO1xcbiAgICAgICAgaWYgKC9eXFxcXC8vLnRlc3QodXJsKSkge1xcbiAgICAgICAgICAgIHVybCA9ICdodHRwczonICsgdXJsXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoLz1odHRwLy50ZXN0KHVybCkpIHtcXG4gICAgICAgICAgICB1cmwgPSAvJnVybD0vLnRlc3QodXJsKSA/IHVybCA6ICdodHRwJyArIGRlY29kZVVSSUNvbXBvbmVudCh1cmwuc3BsaXQoJz1odHRwJylbMV0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgLyppZih1cmwubWF0Y2goL21ndHYuY29tL2cpPT0nbWd0di5jb20nKXtcXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyAnO3tSZWZlcmVyQGh0dHBzOi8vd3d3Lm1ndHYuY29tfSc7XFxuICAgICAgICB9IGVsc2UgKi9cXG4gICAgICAgIGlmICgvXFxcXC5mbHYvLnRlc3QodXJsKSkge1xcbiAgICAgICAgICAgIHVybCA9IHVybCArICc7e1VzZXItQWdlbnRAYXBwJiZSZWZlcmVyQCcgKyB2aXBVcmwgKyAnfSc7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAodXJsID09PSAnJyB8fCB1cmwgPT09IHZpcFVybCkge1xcbiAgICAgICAgICAgIHJldHVybiB2aXBVcmw7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiB1cmwgKyAnI2lzVmlkZW89dHJ1ZSMnO1xcbiAgICAgICAgfVxcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBQYXJzZVNbc3RyXSA9PSAnc3RyaW5nJyYmUGFyc2VTW3N0cl0ubWF0Y2goL2h0dHAuKj89LykpIHtcXG4gICAgICAgIC8vIGxvZyhcXFwi5pat5o+S5byA5aeL6YCa55So5omn6KGM5YWN5ZeFIGRlZmF1bHRQYXJzZVdlYjpcXFwiK3RpbWVvdXQpO1xcbiAgICAgICAgLy9sb2coXFxcIum7mOiupHg1XFxcIitQYXJzZVMuZGVmYXVsdFBhcnNlV2ViKTtcXG4gICAgICAgIGlmKHdpdGhCYXRjaCl7XFxuICAgICAgICAgICAgaWYodHlwZW9mKGV4dHJhLnBsYXlVcmxMaXN0KT09PSdvYmplY3QnJiZleHRyYS5wbGF5VXJsTGlzdC5sZW5ndGg+MCl7XFxuICAgICAgICAgICAgICAgIGV4dHJhLnBsYXlVcmxMaXN0ID0gZXh0cmEucGxheVVybExpc3QuZmlsdGVyKGl0PT5pdCE9PShQYXJzZVNbc3RyXXx8c3RyKSArIHZpcFVybCk7XFxuICAgICAgICAgICAgICAgIGxldCBuYW1lTGlzdCA9IGV4dHJhLm5hbWVMaXN0O1xcbiAgICAgICAgICAgICAgICBuYW1lTGlzdC51bnNoaWZ0KHN0cik7XFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHVuaXF1ZTIoYXJyYXkpe1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChhcnJheSkpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGV4dHJhLm5hbWVMaXN0PXVuaXF1ZTIobmFtZUxpc3QpO1xcbiAgICAgICAgICAgICAgICBleHRyYS5wbGF5VXJsTGlzdCA9IHVuaXF1ZTIoZXh0cmEucGxheVVybExpc3QpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgIGV4dHJhID0ge31cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlV2ViP1BhcnNlUy5kZWZhdWx0UGFyc2VXZWIoKFBhcnNlU1tzdHJdfHxzdHIpICsgdmlwVXJsLHRpbWVvdXQsZXh0cmEpOihQYXJzZVNbc3RyXXx8c3RyKSArIHZpcFVybDtcXG4gICAgfSBlbHNlIGlmKHR5cGVvZihzdHIpPT09J3N0cmluZycmJnN0ci5sZW5ndGg+MSYmKHR5cGVvZiBQYXJzZVNbc3RyXT09J3VuZGVmaW5lZCd8fCFQYXJzZVNbc3RyXSkmJiEvXmh0dHAvLnRlc3Qoc3RyKSl7XFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6K+36L+b6KGM5pat5o+S6YWN572uLOaOqOiNkOaLieWPlumBk+mVv+eyvumAiSFcXFxcbuajgOa1i+WIsOaXoOaViOeahOino+aekOmFjee9rjonK3N0cjtcXG4gICAgfWVsc2Uge1xcbiAgICAgICAgcmV0dXJuIFBhcnNlUy5kZWZhdWx0UGFyc2Uoc3RyICsgdmlwVXJsLHRpbWVvdXQpO1xcbiAgICB9XFxufVxcblxcbnZhciBwbGF5UGFyc2UgPSB7XFxuICAgIHBsYXllcl94eDogZnVuY3Rpb24oanVybCwgTGFiZWwpIHtcXG4gICAgICAgIHJldHVybiAkKGp1cmwpLmxhenlSdWxlKChrKSA9PiB7XFxuICAgICAgICAgICAgdmFyIGpzVXJsID0gSlNPTi5wYXJzZShmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKSkuY2o7XFxuICAgICAgICAgICAgdmFyIExhYmVsID0gaztcXG4gICAgICAgICAgICB2YXIgZmEgPSBbJ2xldHYnLCAncHB0dicsICdxcScsICd5b3VrdScsICdxaXlpJywgJ2lxaXlpJywgJ21ndHYnLCAnYmlsaWJpbGknLCAnc29odScsICdtaWd1JywgJ20xOTA1JywgJ3ZpcCddO1xcbiAgICAgICAgICAgIHZhciBodG1sID0gcGFyc2VEb20ocmVxdWVzdChpbnB1dCksIExhYmVsKTtcXG4gICAgICAgICAgICBldmFsKGh0bWwucmVwbGFjZSgvcGxheWVyXy4qPz17LywgJ3BkYXRhPXsnKSk7XFxuICAgICAgICAgICAgZXZhbChmZXRjaChqc1VybCkpO1xcbiAgICAgICAgICAgIGlmIChwZGF0YS51cmwuc3Vic3RyKDAsIDgpLm1hdGNoKC9KVC4uSlQuLi8pKSB7XFxuICAgICAgICAgICAgICAgIHBkYXRhLnVybCA9IGJhc2U2NERlY29kZShwZGF0YS51cmwpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAocGRhdGEudXJsLnN1YnN0cigwLCA4KS5tYXRjaCgvJS4uJS4uLykpIHtcXG4gICAgICAgICAgICAgICAgcGRhdGEudXJsID0gdW5lc2NhcGUocGRhdGEudXJsKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGZhLmluY2x1ZGVzKHBkYXRhLmZyb20pKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2UocGRhdGEudXJsKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gcGRhdGEudXJsICsgJyNpc1ZpZGVvPXRydWUjJztcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCBMYWJlbClcXG4gICAgfVxcbn07XFxuZnVuY3Rpb24gbXpQb3B1cCgpIHtcXG4gICAgaWYgKGdldFZhcihcXFwiaWprLXR4XFxcIiwgXFxcIlxcXCIpID09IFxcXCIxXFxcIikge1xcbiAgICAgICAgc2V0SXRlbShcXFwidGl4aW5nXFxcIiwgXFxcIjFcXFwiKVxcbiAgICAgICAgY2xlYXJWYXIoXFxcImlqay10eFxcXCIpXFxuICAgIH1cXG4gICAgaWYgKGdldEl0ZW0oXFxcInRpeGluZ1xcXCIsIFxcXCJcXFwiKSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgY29uZmlybSh7XFxuICAgICAgICAgICAgdGl0bGU6ICflhY3otKPlo7DmmI4nLFxcbiAgICAgICAgICAgIGNvbnRlbnQ6ICfmnKznqIvluo/kuI3mj5Dkvpvop4bpopHop6PmnpDmnI3liqFcXFxcbuaJgOacieWGheWuueWdh+S7jueUqOaIt+WIhuS6q+S4reaUtumbhlxcXFxu5LuF5L6b5rWL6K+V5ZKM5a2m5Lmg5Lqk5rWBXFxcXG5cXFxcbuehruWumuWNs+iupOWPr++8jOS4jeWGjeaPkOmGkicsXFxuICAgICAgICAgICAgY29uZmlybTogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dFZhcihcXFwiaWprLXR4XFxcIiwgXFxcIjFcXFwiKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v54K55Ye75LqG56Gu6K6kXFxcIlxcblxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICB9XFxufVxcbmlmICghZ2V0VmFyKFxcXCJ0aXhpbmdcXFwiKSkge1xcbiAgICBtelBvcHVwKCk7XFxuICAgIHB1dFZhcigndGl4aW5nJywnb2snKTtcXG59XFxuXFxuZnVuY3Rpb24gc2F2ZUJ1dHRvbihjb250ZW50LG5hbWUpIHtcXG4gICAgbmFtZSA9IG5hbWV8fCcnO1xcbiAgICB2YXIgZGF0YSA9IGNvbnRlbnQuc3BsaXQoJ+KYheKYheKYhScpO1xcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDIpIHtcXG4gICAgICAgIHZhciBfZHQgPSBwYXJzZVBhc3RlKGRhdGFbMF0pO1xcbiAgICAgICAgY29udGVudCA9IF9kdC5zdWJzdHIoMCwgNikgIT09ICdlcnJvcjonID8gX2R0IDogJyc7XFxuICAgIH1cXG4gICAgZGF0YSA9IGNvbnRlbnQuc3BsaXQoJ+KYhScpO1xcbiAgICB2YXIgdHlwZSA9IGRhdGFbMF07XFxuICAgIHZhciBhcnJMaXN0ID0gW107XFxuICAgIHZhciBvYmpDb2RlID0ge307XFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDIgJiYgZGF0YVswXSAhPT0gJ+ebtOmTvicpIHtcXG4gICAgICAgIHZhciBvYmpLZXkgPSBkYXRhWzFdO1xcbiAgICAgICAgdmFyIG9ialZhbHVlID0gZGF0YVsyXTtcXG4gICAgICAgIGlmICh0eXBlID09PSAnTXlQYXJzZVMnKSB7XFxuICAgICAgICAgICAgb2JqVmFsdWUgPSBiYXNlNjREZWNvZGUob2JqVmFsdWUpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKG9ialZhbHVlLnNwbGl0KCdmdW5jdGlvbicpLmxlbmd0aCA+IDEpIHtcXG4gICAgICAgICAgICBldmFsKCdvYmpWYWx1ZT0nICsgb2JqVmFsdWUpO1xcbiAgICAgICAgfVxcbiAgICAgICAgYXJyTGlzdC5zcGxpY2UoMCwgMCwgb2JqS2V5KTsgLy/mt7vliqDpobnnm67pnZ7liKDpmaRcXG4gICAgICAgIG9iakNvZGVbb2JqS2V5XSA9IG9ialZhbHVlO1xcblxcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICfnm7Tpk74nKSB7XFxuICAgICAgICBhcnJMaXN0ID0gZGF0YTtcXG4gICAgICAgIGFyckxpc3Quc3BsaWNlKDAsIDEpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgYXJyTGlzdCA9IG51bGw7XFxuICAgIH1cXG4gICAgaWYgKGFyckxpc3QgIT0gbnVsbCkge1xcbiAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXG4gICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKHZhbCkge1xcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuaW5kZXhPZih2YWwpO1xcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XFxuICAgICAgICAgICAgICAgIHRoaXMuc3BsaWNlKGluZGV4LCAxKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9O1xcbiAgICAgICAgaWYobmFtZSl7Ly/liKDpmaTlkI3np7DliJfooajlkozku6PnoIFcXG4gICAgICAgICAgICBqc29uLnRpdGxlLnJlbW92ZShuYW1lKTtcXG4gICAgICAgICAgICBkZWxldGUganNvbi5jb2Rlc1tuYW1lXTtcXG4gICAgICAgIH1cXG4gICAgICAgIGFyckxpc3QgPSBhcnJMaXN0LmNvbmNhdChqc29uLnRpdGxlKTtcXG4gICAgICAgIGpzb24udGl0bGUgPSBBcnJheS5mcm9tKG5ldyBTZXQoYXJyTGlzdCkpO1xcbiAgICAgICAgT2JqZWN0LmFzc2lnbihqc29uLmNvZGVzLCBvYmpDb2RlKTtcXG4gICAgICAgIGlmICh0eXBlID09PSAn5rWL6K+VJykge1xcbiAgICAgICAgICAgIGV2YWwoJ3ZhciBjb25maWcgPScgKyBmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKSk7XFxuICAgICAgICAgICAgZXZhbChmZXRjaChjb25maWcuY2opKTtcXG4gICAgICAgICAgICBpZiAodHlwZW9mIFBhcnNlU1tkYXRhWzFdXSA9PSBcXFwiZnVuY3Rpb25cXFwiKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZVNbZGF0YVsxXV0oZGF0YVsyXSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlUy5kZWZhdWx0UGFyc2VXZWIoUGFyc2VTW2RhdGFbMV1dICsgZGF0YVsyXSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgJC5zdHJpbmdpZnkoanNvbikpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7Lkv53lrZjlhoXlrrlcXFwiO1xcbiAgICAgICAgfVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+aXoOazleivhuWIq+i/meS4quWGheWuueWRolxcXCJcXG4gICAgfVxcbn1cXG4vLyDku6XkuIvku6PnoIHljYPkuIfkuI3opoHmlL7lh7rmnaXlkKbliJnmiqXplJlcXG5pZiAoZ2V0SXRlbSgndXBkYXRlRGF0ZScpICE9IHVwZGF0ZURhdGUpIHtcXG4vLyBpZiAodHJ1ZSkge1xcbiAgICAvLyDmiopmdW5jdGlvbuWPmOaIkHN0cmluZ1xcbiAgICBsZXQgZnVuY3Rpb25Db2RlID0gc2F2ZUJ1dHRvbiArICc7JyttelBvcHVwO1xcbiAgICAvLyB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvcGxzY1BhcnNlLmh0bWwnLCBmZXRjaChfbXlTZXQuY2tMaW5rICsgJ3Bsc2NQYXJzZS5odG1sJykpO1xcbiAgICBzZXRJdGVtKCdteUZ1bmN0aW9uJywgZnVuY3Rpb25Db2RlKTtcXG4gICAgc2V0SXRlbSgndXBkYXRlRGF0ZScsIHVwZGF0ZURhdGUpO1xcbn1cXG52YXIgYmpJdGVtID0ge1xcbiAgICBoZlBsdWdpbjogZnVuY3Rpb24ocGFyc2VSb3V0ZSkge1xcbiAgICAgICAgcmV0dXJuICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXG4gICAgICAgICAgICBpZiAoZmlsZUV4aXN0KGspKSB7XFxuICAgICAgICAgICAgICAgIHZhciBjamNhY2hlID0gZ2V0VmFyKCdjakNhY2hlJyk7XFxuICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2goaykpO1xcbiAgICAgICAgICAgICAgICBqc29uLnNldHRpbmdzLmNqID0gY2pjYWNoZTtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGssICQuc3RyaW5naWZ5KGpzb24pKTtcXG4gICAgICAgICAgICAgICAgdmFyIG9sZFJvdXRlID0gZ2V0VmFyKCdvbGRDb25maWcnKTtcXG4gICAgICAgICAgICAgICAgdmFyIG9sZENvbmZpZyA9IGpzb24uc2V0dGluZ3M7XFxuICAgICAgICAgICAgICAgIG9sZENvbmZpZy5jaiA9IGNqY2FjaGU7XFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShvbGRSb3V0ZSwgJC5zdHJpbmdpZnkob2xkQ29uZmlnKSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aBouWkjeaIkOWKnyc7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+mcgOimgeWFiOaLieWPluWIl+ihqCdcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCBwYXJzZVJvdXRlKVxcbiAgICB9LFxcbiAgICBwdWxsQ29kZTogZnVuY3Rpb24oaykge1xcbiAgICAgICAgcmV0dXJuICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXG4gICAgICAgICAgICB2YXIgcHVsbE1vZGUgPSBrWzBdO1xcbiAgICAgICAgICAgIHZhciBwYXJzZVJvdXRlID0ga1sxXTtcXG4gICAgICAgICAgICB2YXIgcGFyc2VGaWxlID0gZmV0Y2gocGFyc2VSb3V0ZSk7XFxuICAgICAgICAgICAgaWYgKCFwYXJzZUZpbGUpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHNldHRpbmdzID0gZmV0Y2goZ2V0VmFyKCdvbGRDb25maWcnKSk7XFxuICAgICAgICAgICAgICAgIHNldHRpbmdzID0gIXNldHRpbmdzID8ge30gOiBKU09OLnBhcnNlKHNldHRpbmdzKTtcXG4gICAgICAgICAgICAgICAgdmFyIGpzb24gPSB7fTtcXG4gICAgICAgICAgICAgICAganNvbi5zZXR0aW5ncyA9IHNldHRpbmdzO1xcbiAgICAgICAgICAgICAgICBqc29uLnRpdGxlID0gW107XFxuICAgICAgICAgICAgICAgIGpzb24uY29kZXMgPSB7fTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIHBhcnNlRmlsZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciBwYXJzZVRpdGxlID0gW107XFxuICAgICAgICAgICAgdmFyIHBhcnNlQ29kZT17fTtcXG4gICAgICAgICAgICB2YXIgY2pMaW5rID0gZ2V0VmFyKCdwbHVnaW5MaW5rJyk7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgaWYoL0BiYXNlNjQ6XFxcXC9cXFxcLy8udGVzdChjakxpbmspKXtcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoYmFzZTY0RGVjb2RlKGNqTGluay5zcGxpdCgnQGJhc2U2NDovLycpWzFdKSk7XFxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKC/mj5Lku7blkI0vLnRlc3QoY2pMaW5rKSl7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVhbExpbmsgPSBjakxpbmsuc3BsaXQoJ+aPkuS7tuWQjScpWzBdLnJlcGxhY2UoL1tcXFxcc10vZywnJyk7XFxuICAgICAgICAgICAgICAgICAgICBsb2coJ+ino+aekOS6keWJquWIh+advzonK3JlYWxMaW5rKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB5UGFzdGUgPSBwYXJzZVBhc3RlKHJlYWxMaW5rKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmKC9AYmFzZTY0OlxcXFwvXFxcXC8vLnRlc3QoeVBhc3RlKSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChiYXNlNjREZWNvZGUoeVBhc3RlLnNwbGl0KCdAYmFzZTY0Oi8vJylbMV0pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIFBhcnNlUz09PSd1bmRlZmluZWQnKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mi4nlj5bkuKrpuKHmr5vmj5Lku7Ys6YeM6Z2i6L+eUGFyc2VT5a+56LGh6YO95rKh5pyJISdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1jYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6bih5q+b5o+S5Lu25omn6KGM5oql6ZSZOlxcXFxuJytlLm1lc3NhZ2U7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+acquiDveivhuWIq+S6keWJquWIh+adv+S4reeahOWGheWuuTpcXFxcbicreVBhc3RlLnN1YnN0cmluZygwLDEwMCk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2pMaW5rID09PSAnUeelnicpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBqaWV4aSA9IGZldGNoKCdoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dCcpLnNwbGl0KCdcXFxcbicpO1xcbiAgICAgICAgICAgICAgICAgICAgZm9yIChpIGluIGppZXhpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlPWppZXhpW2ldLnNwbGl0KCcmJicpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlPWppZXhpW2ldLnNwbGl0KCcmJicpWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUucHVzaCh0aXRsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb2RlW3RpdGxlXT1jb2RlO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vIH1lbHNlIGlmKC9eI1thLXpBLVowLTldezIsMTB9JC8udGVzdChjakxpbmspKXsvL+emj+WIqeWPo+S7pDLliLAxMOS9jVxcbiAgICAgICAgICAgICAgICBlbHNlIGlmKC9eI1tcXFxcU117MiwxMH0kLy50ZXN0KGNqTGluaykpey8v56aP5Yip5Y+j5LukMuWIsDEw5L2N5Lu75oSP6Z2e56m65a2X56ym5LiyXFxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7dGFza0NhbGwsIHRhc2tSdW4sdGFza1JlcX0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90YXNrQ2FsbD9ydWxlPemBk+mVv+S7k+W6k1Byb1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgLy8gbG9nKCflvIDlp4vmiafooYzku7vliqHku5PlupPojrflj5bmlq3lv7Xmj5Lku7bnpo/liKnlj6Pku6QnKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSB0YXNrQ2FsbCgxNywnRG5GdWxpJyxbY2pMaW5rXSk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXQgPSBKU09OLnBhcnNlKHJlc3VsdC5yZXN1bHQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvZyhyZXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJldC5vcHQ9PT0nZXJyb3InKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovLycrcmV0Lm1zZztcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihyZXQub3B0PT09J3VybCcpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IGZldGNoKHJldC5yZXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJyID0gaHRtbC5pbmNsdWRlcygnaHR0cCcpPyBodG1sOmJhc2U2NERlY29kZShodG1sKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGppZXhpID0gYXJyLm1hdGNoKC9bXFxcXFNdKj8sLio/W1xcXFxzXS9nKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSBpbiBqaWV4aSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlPWppZXhpW2ldLnNwbGl0KCcsJylbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZT1qaWV4aVtpXS5zcGxpdCgnLCcpWzFdLnNwbGl0KFxcXCJcXFxcblxcXCIpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09Y29kZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHJldC5vcHQ9PT0nangnKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoL1tcXFxcU10qPyxodHRwW1xcXFxTXS8udGVzdChyZXQucmV0KSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSByZXQucmV0LnNwbGl0KCcsJylbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9IHJldC5yZXQuc3BsaXQoJywnKVsxXS5zcGxpdCgnXFxcXG4nKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUucHVzaCh0aXRsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVbdGl0bGVdPWNvZGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKC9eaHR0cC8udGVzdChyZXQucmV0KSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBjakxpbmsuc3BsaXQoJyMnKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gcmV0LnJldC5zcGxpdCgnXFxcXG4nKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUucHVzaCh0aXRsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVbdGl0bGVdPWNvZGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+acquefpeeahOemj+WIqTpcXFxcbicrcmV0LnJldDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHJldC5vcHQ9PT0ndmlwSngnKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gY2pMaW5rLnNwbGl0KCcjJylbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gcmV0LnJldDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKGNvZGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlLnB1c2godGl0bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVbdGl0bGVdPS9mdW5jdGlvbi8udGVzdChjb2RlKT9ldmFsKGNvZGUpOmNvZGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S7k+W6k+mdnuacgOaWsOeJiOaIluiAheemj+WIqeekvuWKn+iDveW8gOWPkeS4rSdcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoY2pMaW5rPT09J+aWreaPkicpe1xcbiAgICAgICAgICAgICAgICAgICAgZXZhbChmZXRjaChcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qc1xcXCIpKTtcXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGU9T2JqZWN0LmtleXMoUGFyc2VTKTtcXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoL15oaWtlcjpcXFxcL1xcXFwvfF5maWxlOlxcXFwvXFxcXC98Xmh0dHB8XlxcXFwvc3RvcmFnZVxcXFwvfF5cXFxcL3NkY2FyZFxcXFwvLy50ZXN0KGNqTGluaykpe1xcbiAgICAgICAgICAgICAgICAgICAgaWYoL15cXFxcL3N0b3JhZ2VcXFxcL3xeXFxcXC9zZGNhcmRcXFxcLy8udGVzdChjakxpbmspKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjakxpbmsgPSAnZmlsZTovLycrY2pMaW5rO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgZXZhbChmZXRjaChjakxpbmspKTtcXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGU9T2JqZWN0LmtleXMoUGFyc2VTKTtcXG4gICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ouJ5Y+W5Y+j5Luk5pyJ6K+vJ1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICBsb2coZS5tZXNzYWdlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIGp4SnVkZ2UgPSB0eXBlb2YgUGFyc2VTID09ICdvYmplY3QnO1xcbiAgICAgICAgICAgIHZhciBsYkp1ZGdlID0gdHlwZW9mKHBhcnNlVGl0bGUpID09ICdvYmplY3QnO1xcbiAgICAgICAgICAgIGlmIChqeEp1ZGdlIHx8IGxiSnVkZ2UpIHtcXG4gICAgICAgICAgICAgICAgLy8gaWYgKHB1bGxNb2RlID09PSAn5YiX6KGoJykge1xcbiAgICAgICAgICAgICAgICAvLyAgICAgaWYgKCFsYkp1ZGdlKSB7XFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgcGFyc2VUaXRsZSA9IE9iamVjdC5rZXlzKFBhcnNlUyk7XFxuICAgICAgICAgICAgICAgIC8vICAgICB9XFxuICAgICAgICAgICAgICAgIC8vICAgICB2YXIgbmV3UGFyc2VUaXRsZSA9IGpzb24udGl0bGUuY29uY2F0KHBhcnNlVGl0bGUpO1xcbiAgICAgICAgICAgICAgICAvLyAgICAganNvbi50aXRsZSA9IEFycmF5LmZyb20obmV3IFNldChuZXdQYXJzZVRpdGxlKSk7XFxuICAgICAgICAgICAgICAgIC8vIH1cXG4gICAgICAgICAgICAgICAgLy8g5LiN566h5ouJ5Y+W5Luj56CB6L+Y5piv5YiX6KGo6YO96KaB5oqK5YiX6KGo5ouJ5LqGXFxuICAgICAgICAgICAgICAgIGlmICghbGJKdWRnZSkge1xcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZSA9IE9iamVjdC5rZXlzKFBhcnNlUyk7XFxuICAgICAgICAgICAgICAgICAgICBsb2cocGFyc2VUaXRsZSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdmFyIHNjT2JqZWN0ID0gW1xcXCJDaXR5SVBcXFwiLCBcXFwicGNVQVxcXCIsIFxcXCJjYWNoZU0zdThcXFwiLCBcXFwiZGVmYXVsdFBhcnNlXFxcIixcXFwiZGVmYXVsdFBhcnNlV2ViXFxcIixcXFwibWFvc3NcXFwiLCBcXFwiTExRXFxcIixcXFwicGFyc2VMY1xcXCJdO1xcbiAgICAgICAgICAgICAgICBwYXJzZVRpdGxlID0gcGFyc2VUaXRsZT9wYXJzZVRpdGxlLmZpbHRlcihpdD0+IXNjT2JqZWN0LmluY2x1ZGVzKGl0KSk6W107XFxuICAgICAgICAgICAgICAgIHZhciBuZXdQYXJzZVRpdGxlID0ganNvbi50aXRsZS5jb25jYXQocGFyc2VUaXRsZSk7XFxuICAgICAgICAgICAgICAgIGpzb24udGl0bGUgPSBBcnJheS5mcm9tKG5ldyBTZXQobmV3UGFyc2VUaXRsZSkpO1xcblxcbiAgICAgICAgICAgICAgICBpZiAocHVsbE1vZGUgPT09ICfku6PnoIEnKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9yaWdpbmFsUGFyc2VTID09ICdvYmplY3QnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSBpbiBzY09iamVjdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgb3JpZ2luYWxQYXJzZVNbc2NPYmplY3RbaV1dO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvcmlnaW5hbFBhcnNlUyA9b3JpZ2luYWxQYXJzZVMuZmlsdGVyKGl0PT4hc2NPYmplY3QuaW5jbHVkZXMoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaXQpWzBdKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihqc29uLmNvZGVzLCBvcmlnaW5hbFBhcnNlUyk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZihQYXJzZVMpPT1cXFwidW5kZWZpbmVkXFxcIil7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oanNvbi5jb2RlcywgcGFyc2VDb2RlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gXFxcInRvYXN0Oi8v5rKh5pyJ5Luj56CB77yM5LiN5Y+v5ouJ5Y+WXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGpzb24uY29kZXMsIFBhcnNlUyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vdmFyIG5ld0ZpbGUgPSB0b29scy50b0pTT04oanNvbik7Ly/oh6rlrprkuYlzdHJpbmdpZnnlh73mlbDvvIzluKbmnInovazkuYnlrZfnrKZcXG4gICAgICAgICAgICAgICAgdmFyIG5ld0ZpbGUgPSAkLnN0cmluZ2lmeShqc29uKTsgLy9KU09OLnBhcnNl5Lya5oql6ZSZXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCBuZXdGaWxlKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ouJ5Y+WJyArIHB1bGxNb2RlICsgJ+aIkOWKnyc7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+acquiOt+WPluWIsOWvueixoSc7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgW2ssIF9teVNldC5wYXJzZVJvdXRlXSlcXG4gICAgfSxcXG4gICAgcHVsbFNjcmlwdDogZnVuY3Rpb24oY2osIHg1KSB7XFxuICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcbiAgICAgICAgICAgIHZhciBjakZyb20gPSAnaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmpzP3J1bGU9TXlGaWVsZOG0sOKBvyc7XFxuICAgICAgICAgICAgdmFyIHg1RnJvbSA9ICdoaWtlcjovL3BhZ2UvUGFyc2VfRG4uaHRtbD9ydWxlPU15RmllbGThtLDigb8nO1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIHZhciBjakZpbGUgPSBKU09OLnBhcnNlKGZldGNoKGNqRnJvbSkpLnJ1bGU7XFxuICAgICAgICAgICAgICAgIHZhciB4NUZpbGUgPSBKU09OLnBhcnNlKGZldGNoKHg1RnJvbSkpLnJ1bGU7XFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShrWzBdLCBjakZpbGUpO1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoa1sxXSwgeDVGaWxlKTtcXG4gICAgICAgICAgICAgICAgY2xlYXJWYXIoJ2p4T2xkVicpO1xcbiAgICAgICAgICAgICAgICBjbGVhclZhcignanhOZXdWJyk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aLieWPluaIkOWKnyc7XFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pyq5oiQ5Yqf6I635Y+W5YaF5a65JztcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCBbY2osIHg1XSlcXG4gICAgfSxcXG4gICAgeGxTZWxlY3Q6IGZ1bmN0aW9uKGJpYW5qaSwgbGJMZW5ndGgpIHtcXG4gICAgICAgIHJldHVybiBcXFwic2VsZWN0Oi8vXFxcIiArIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICBvcHRpb25zOiBbJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXCJjb2xvcjpyZWRcXFwiIHRpdGxlPVxcXCLliKDpmaR8fCcgKyBiaWFuamkgKyAnXFxcIj7liKAg6ZmkJywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXCJjb2xvcjojRjU3NDc0XFxcIiB0aXRsZT1cXFwi6ZqQ6JePfHwnICsgYmlhbmppICsgJ1xcXCI+6ZqQIOiXjycsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFwiY29sb3I6I0ZGODAwMFxcXCIgdGl0bGU9XFxcIuS/ruaUuXx8JyArIGJpYW5qaSArICdcXFwiPuS/riDmlLknLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcImNvbG9yOiMwOThBQzFcXFwiIHRpdGxlPVxcXCLnva7pobZ8fCcgKyBiaWFuamkgKyAnMCcgKyAnXFxcIj7nva4g6aG2JywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMDk4QUMxXFxcIiB0aXRsZT1cXFwi56e75YqofHwnICsgYmlhbmppICsgJ1xcXCI+56e7IOWKqCcsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFwiY29sb3I6IzA5OEFDMVxcXCIgdGl0bGU9XFxcIue9ruW6lXx8JyArIGJpYW5qaSArIGxiTGVuZ3RoICsgJ1xcXCI+572uIOW6lScsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFwiY29sb3I6IzA0QjQzMVxcXCIgdGl0bGU9XFxcIuWIhuS6q3x8JyArIGJpYW5qaSArICdcXFwiPuWcsOadv+WIhuS6qycsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFwiY29sb3I6IzA0QjQzMVxcXCIgdGl0bGU9XFxcIuS6keWIhuS6q3x8JyArIGJpYW5qaSArICdcXFwiPuS6keadv+WIhuS6qyddLFxcbiAgICAgICAgICAgIGNvbDogJzInLFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXG4gICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxuICAgICAgICAgICAgICAgIHZhciBuZXdJbnB1dCA9IHBhcnNlRG9tRm9ySHRtbChpbnB1dCwgJ3NwYW4mJnRpdGxlJykuc3BsaXQoJ3x8Jyk7XFxuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gbmV3SW5wdXRbMF07XFxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gbmV3SW5wdXRbMV07XFxuICAgICAgICAgICAgICAgIHZhciBudW0gPSBuZXdJbnB1dFsyXTtcXG4gICAgICAgICAgICAgICAgdmFyIG51bTIgPSBuZXdJbnB1dFszXTtcXG4gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCLliKDpmaRcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCLljbPlsIbliKDpmaQ6IFxcXCIgKyBuYW1lKS5jb25maXJtKChrKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0ga1swXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bSA9IGtbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZVJvdXRlID0gZ2V0VmFyKCdwYXJzZVJvdXRlJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5jb2Rlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGpzb24uY29kZXNbbmFtZV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi50aXRsZS5zcGxpY2UobnVtLCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5bey5bCG44CWXFxcIiArIG5hbWUgKyBcXFwi44CX5Yig6ZmkXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBbbmFtZSwgbnVtXSk7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCLpmpDol49cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJoaWtlcjovL2VtcHR5I25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoaykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGtbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW0gPSBrWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uY29kZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24udGl0bGUuc3BsaWNlKG51bSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgJC5zdHJpbmdpZnkoanNvbikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3suWwhuOAllxcXCIgKyBuYW1lICsgXFxcIuOAl+makOiXj1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Y+v6IO95piv5Liq572R5Z2ALCDmgqjlj6/pgInmi6nliKDpmaRcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgW25hbWUsIG51bV0pO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwi5L+u5pS5XFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2lmIChqc29uLmNvZGVzW25hbWVdKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5Db2RlID0gbmFtZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbk5hbWUgPSBcXFwi6L+Z5piv5ZCN56ewXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5jb2Rlc1tuYW1lXSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuQ29kZSA9IGpzb24uY29kZXNbbmFtZV0udG9TdHJpbmcoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbk5hbWUgPSBuYW1lO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiaGlrZXI6Ly9lbXB0eSNub1JlY29yZEhpc3RvcnkjXFxcIikucnVsZSgoaykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKGdldEl0ZW0oJ215RnVuY3Rpb24nKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0ga1swXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUgPSBrWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfkv50g5a2YJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogc2F2ZUJ1dHRvbiArIFxcXCJzYXZlQnV0dG9uKGdldFZhcignaW5wdXRfZWRpdCcpLG5hbWUpO2JhY2soKTtcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi5bu66K6u5oyJ6buY6K6k55qE5Luj56CB5qC85byP5L+u5pS55ZOmXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IFxcXCJwdXRWYXIoJ2lucHV0X2VkaXQnLCBpbnB1dClcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcXFwiLTFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiAn5L+u5pS54piFJyArIG5hbWUgKyAn4piFJyArIGNvZGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJk8c21hbGw+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiM2RUI4OTdcXFwiPuagvOW8j+S4uu+8muaTjeS9nOexu+Wei+KYheagh+mimOKYhWZ1bmN0aW9uKCl76Ieq5a6a5LmJ5YaF5a65fTxicj7or7fli7/loavlhaXlhbbku5bmoLzlvI8nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzYXZlQnV0dG9uLG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9IHNhdmVCdXR0b24oZ2V0VmFyKCdpbnB1dF9lZGl0JyksbmFtZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFjaygpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lkv53lrZjkv67mlLlcXFxcbuivt+iHquihjOajgOa1i+ino+aekOaYr+WQpuacieiiq+imhueblueahOWGheWuuSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYodHlwZW9mKGNvZGUpPT09J3N0cmluZycmJmNvZGUubGVuZ3RoPjIpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICByZXR1cm4gY29kZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5L+d5a2Y5L+u5pS5JztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBzYXZlQnV0dG9uLG5hbWUpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJ+KAmOKAmOKAmeKAmTxiaWc+PGJpZz48c3BhbiBzdHlsZT1cXFwiY29sb3I6IzI5OEEwOFxcXCI+5L+dIOWtmCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgW25OYW1lLCBuQ29kZV0pIC8vW25hbWUsIGpzb24uY29kZXNbbmFtZV0udG9TdHJpbmcoKV0pXFxuICAgICAgICAgICAgICAgICAgICAvKn0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WPquaciee9keWdgOaIluiAheagh+mimCwg5LiN5pSv5oyB5L+u5pS5XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSovXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCLnva7pobZcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwi572u5bqVXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IGpzb24udGl0bGUuc3BsaWNlKG51bSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAganNvbi50aXRsZS5zcGxpY2UobnVtMiwgMCwgaXRlbVswXSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCLnp7vliqhcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCdoaWtlcjovL2VtcHR5I25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2JpYW5qaScsICfnp7vliqgjJyArIGspO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dDtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBudW0pO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwi5YiG5LqrXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIuS6keWIhuS6q1xcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uY29kZXNbbmFtZV0pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlVGV4dCA9IHR5cGVvZiBqc29uLmNvZGVzW25hbWVdID09ICdmdW5jdGlvbicgPyAkLnN0cmluZ2lmeShqc29uLmNvZGVzW25hbWVdKSA6IGpzb24uY29kZXNbbmFtZV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGV4dCA9ICdNeVBhcnNlU+KYhScgKyBuYW1lICsgJ+KYhScgKyBiYXNlNjRFbmNvZGUocGFyc2VUZXh0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VUZXh0ID0gJ+ebtOmTvuKYhScgKyBqc29uLnRpdGxlW251bV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09ICfkupHliIbkuqsnICYmIHBhcnNlVGV4dC5zdWJzdHIoMCwgOCkgPT0gJ015UGFyc2VTJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRleHQgPSBzaGFyZVBhc3RlKHBhcnNlVGV4dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVRleHQuc3Vic3RyKDAsIDYpICE9ICdlcnJvcjonID8gJ2NvcHk6Ly8nICsgcGFyc2VUZXh0ICsgJ1xcXFxu4piF4piF4piFXFxcXG4nICsgJ015UGFyc2VT77yaJyArIG5hbWUgOiAndG9hc3Q6Ly/liIbkuqvlpLHotKUhIeS6keWJqui0tOadv+WPr+iDveaMguS6hic7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdjb3B5Oi8vJyArIHBhcnNlVGV4dDtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mmoLkuI3mlK/mjIEnO1xcbiAgICAgICAgICAgICAgICB9IC8vc3dpdGNo55qEXFxuICAgICAgICAgICAgfSkgLy9TdHJpbmfnmoRcXG4gICAgICAgIH0pIC8vc3RyaW5naWZ555qEXFxuICAgIH0sXFxuICAgIHhqUGFyc2U6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgcmV0dXJuICQoXFxcImhpa2VyOi8vZW1wdHkjbm9IaXN0b3J5I1xcXCIpLnJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHZhciBkID0gW107XFxuICAgICAgICAgICAgZXZhbChnZXRJdGVtKCdteUZ1bmN0aW9uJykpO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn5L+dIOWtmCcsXFxuICAgICAgICAgICAgICAgIHVybDogc2F2ZUJ1dHRvbiArIFxcXCJzYXZlQnV0dG9uKGlucHV0KTtiYWNrKCk7Y2xlYXJWYXIoJ2lucHV0X2FkZCcpXFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLovpPlhaXmraPnoa7moLzlvI/lhoXlrrlcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6ICdwdXRWYXIoXFxcImlucHV0X2FkZFxcXCIsIGlucHV0KScsXFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcXFwidGV4dGFyZWFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcXFwiLTFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0VmFyKCdpbnB1dF9hZGQnKSxcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPHNtYWxsPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojNkVCODk3XFxcIj7mjInmj4/ov7Dor4nmoLzlvI/ovpPlhaUsIOivt+WLv+Whq+WFpeWFtuS7luagvOW8jzxicj7mnKzlnLDlj6Pku6Q6IOaTjeS9nOexu+Wei+KYheWQjeensOKYheS7o+eggTxicj7kupHlj6Pku6Q6IOmTvuaOpeKYheKYheKYheWQjeensDsg57qv572R5Z2AOiDnm7Tpk77imIV1cmwx4piFdXJsMicsXFxuICAgICAgICAgICAgICAgIGRlc2M6ICfigJjigJjigJnigJk8YmlnPjxiaWc+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiMyOThBMDhcXFwiPuS/nSDlrZgnLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoJ25vTG9hZGluZycpLmxhenlSdWxlKChzYXZlQnV0dG9uKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2F2ZUJ1dHRvbihnZXRWYXIoJ2lucHV0X2FkZCcpKTtcXG4gICAgICAgICAgICAgICAgfSwgc2F2ZUJ1dHRvbiksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgICAgICB9KVxcbiAgICB9LFxcbiAgICB5ZFBhcnNlOiBmdW5jdGlvbihCSm1vZGUsIGkpIHtcXG4gICAgICAgIHJldHVybiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XFxuICAgICAgICAgICAgdmFyIEEgPSBrWzBdLnNwbGl0KCcjJylbMV07XFxuICAgICAgICAgICAgdmFyIEIgPSBrWzFdO1xcbiAgICAgICAgICAgIHZhciBwYXJzZVJvdXRlID0gZ2V0VmFyKCdwYXJzZVJvdXRlJyk7XFxuICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxuICAgICAgICAgICAgdmFyIGl0ZW0gPSBqc29uLnRpdGxlLnNwbGljZShBLCAxKTsgLy8gMTog5qCH6K6w5byA5aeL5L2N572u77yMMjog5Yig6Zmk5Yiw5ZOq5Liq5L2N572uXFxuICAgICAgICAgICAganNvbi50aXRsZS5zcGxpY2UoQiwgMCwgaXRlbVswXSk7IC8vIDE6IOWQjOS4iu+8jDI6IDDooajnpLrkuI3liKDpmaTvvIwzOiDmt7vliqDlr7nosaFcXG4gICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgJC5zdHJpbmdpZnkoanNvbikpO1xcbiAgICAgICAgICAgIGNsZWFyVmFyKCdiaWFuamknKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgIH0sIFtCSm1vZGUsIGldKVxcbiAgICB9LFxcbiAgICBwbHNjUGFyc2U6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgcmV0dXJuICQoJ2hpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5IycpLnJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHZhciBkID0gW107XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfmibnph4/liKDpmaTop6PmnpAnLFxcbiAgICAgICAgICAgICAgICBkZXNjOiAnYXV0byYmZmxvYXQnLFxcbiAgICAgICAgICAgICAgICB1cmw6ICdmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9jYWNoZS9wbHNjUGFyc2UuaHRtbCcsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgICAgICB9KVxcbiAgICB9XFxufTtcXG5cXG5mdW5jdGlvbiBzZXRQYXJzZSgpIHtcXG4gICAgJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/XFxcIikuc2V0UGFyc2UoKTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLosIPnlKjot6/nlLFcIixcInBhdGhcIjpcIlJvdXRlXCIsXCJydWxlXCI6XCJqczpcXG5jb25zdCBkID0gW107XFxuY29uc3QgZGF0YSA9IHt9O1xcblxcbmRhdGEub2xkQ29uZmlnID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uXFxcIjtcXG5kYXRhLmNqUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qc1xcXCI7XFxuZGF0YS54NVJvdXRlID0gXFxcImZpbGU6Ly8vc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL2NhY2hlL1BhcnNlX0RuLmh0bWxcXFwiO1xcblxcblxcbmRhdGEuanhMYXp5ID0gXFxcImV2YWwoJ3ZhciBjb25maWcgPScgKyBmZXRjaCgnXFxcIiArIGRhdGEub2xkQ29uZmlnICsgXFxcIicpKTtldmFsKGZldGNoKGNvbmZpZy5jaikpO2F5dG1QYXJzZShpbnB1dClcXFwiO1xcblxcbmRhdGEuc3pQYXJzZSA9IFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXCI7XFxuXFxuZGF0YS5zZXRQYXJzZSA9IGZ1bmN0aW9uKCkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgZGVzYzogJzc5NScsXFxuICAgICAgICB1cmw6IHRoaXMueDVSb3V0ZSxcXG4gICAgICAgIGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnXFxuICAgIH0pO1xcbiAgICB2YXIgb2xkViA9IGdldFZhcignanhPbGRWJyk7XFxuICAgIHZhciBuZXdWID0gZ2V0VmFyKCdqeE5ld1YnKTtcXG4gICAgdmFyIHZlcnNpb25UaXBzID0gcGFyc2VGbG9hdChuZXdWKSA+IHBhcnNlRmxvYXQob2xkVikgPyAn4oCY4oCY5pyJ5paw54mI5pysOiB2JyArIG5ld1YgOiAn4oCY4oCYJztcXG4gICAgdmFyIHBpY3MgPSBbXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9zZW92eC0yMC0xMCUyMCg5MikuanBnJyxcXG4gICAgICAgICdodHRwczovL2Nkbi5zZW92eC5jb20vaW1nL21vbTIwMTglMjAoMjA3KS5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vdHZhNC5zaW5haW1nLmNuL2xhcmdlLzliZDliMTY3Z3kxZndyaDV4b2x0ZGoyMWhjMHUwdGF4LmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly90dmExLnNpbmFpbWcuY24vbGFyZ2UvMDA1QllxcGdneTFmd3JleXU0bmw2ajMxaGMwdTBhaHIuanBnJyxcXG4gICAgICAgICdodHRwczovL3MzLmJtcC5vdmgvaW1ncy8yMDIxLzEwL2Q3ZTYwYjk5MDc0MjA5M2QuanBlZycsXFxuICAgICAgICAnaHR0cHM6Ly9zMy5ibXAub3ZoL2ltZ3MvMjAyMS8xMC85MWFkNmQ2NTM4YmY4Njg5LmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly90dmExLnNpbmFpbWcuY24vbGFyZ2UvMDA1QllxcGdneTFmd3Jlc2w1cG1sajMxaGMweGN3a2EuanBnJyxcXG4gICAgICAgICdodHRwczovL3R2YTMuc2luYWltZy5jbi9sYXJnZS8wMDVCWXFwZ2d5MWZ3cmdqZGs3NG9qMzFoYzB1MGRxbi5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnNlb3Z4LmNvbS9pbWcvbW9tMjAxOCUyMCgzMjApLmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9tb20yMDE4JTIwKDgwMykuanBnJ1xcbiAgICBdO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgaW1nOiBwaWNzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwKV0sXFxuICAgICAgICB0aXRsZTogdmVyc2lvblRpcHMgKyAn4oCZ4oCZPHNtYWxsPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojNkVCODk3XFxcIj48YnI+44CA44CA54K55Ye75LiK5pa55aS05YOP6L+b5YWl57yW6L6RPGJyPueCueatpOi/m+WFpeiuuuWdm+W4luWtkOWIl+ihqCcsXFxuICAgICAgICBkZXNjOiAn5b2T5YmN54mI5pysOiB2JyArIG9sZFYsXFxuICAgICAgICB1cmw6ICdodHRwczovL2hhaWt1b3NoaWppZS5jbi91c2VyLzE5NTgnLFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xJ1xcbiAgICB9KTtcXG4gIHNldFJlc3VsdChkKTtcXG59XFxuXFxuc3dpdGNoIChnZXRQYXJhbShcXFwidHlwZVxcXCIpKSB7XFxuICAgIGNhc2UgXFxcIuiuvue9rlxcXCI6XFxuICAgICAgICBkYXRhLnNldFBhcnNlKCk7XFxuICAgICAgICAvL3NldFJlc3VsdChkKTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlIFxcXCLnvJbovpFcXFwiOlxcbiAgICAgICAgJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvanhJdGVtP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCIpLmp4TGlzdCgpO1xcbiAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgYnJlYWs7XFxuXFx0Y2FzZSBcXFwi5Li76aKYXFxcIjpcXG5cXHQgICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3RoZW1lP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCIpLnRoZW1lSW5pdCgpO1xcbiAgICAgICAgYnJlYWs7XFxuXFx0Y2FzZSBcXFwi6Kej5p6QXFxcIjpcXG5cXHQgICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2p4TWFuYWdlP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCIpLmp4TWFuYWdlKCk7XFxuICAgICAgICBicmVhaztcXG4gICAgZGVmYXVsdDpcXG4gICAgICAgICQuZXhwb3J0cyA9IGRhdGE7XFxuICAgICAgICBicmVhaztcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLop6PmnpDpobnkuLvnlYzpnaJcIixcInBhdGhcIjpcImp4SXRlbVwiLFwicnVsZVwiOlwidmFyIF8weG9kUj0nanNqaWFtaS5jb20udjYnLF8weDQ4NTU9W18weG9kUiwndzdGTHc3a2lKUT09JywnQThLdkpDL0RpUT09JywnUjhLdHc1SERxOEtTUWNPTycsJ3c1L0NnVnZDcmk5RndybDRYQlJXdzZyQ2lnPT0nLCdJVFRDbWNPd3dwM0NxQT09JywnR1FoR1k4S0onLCdHTUsxVXNLL1ZBPT0nLCd3cGpDdmlSSCcsJ0hBTVFTdzQ9JywnQXNLTkhEdkRxZz09JywnWmNLUndvWENrdz09Jywnd3AvQ213NSt3b0U9JywnSU1PL1BBbkRqZz09Jywnd294bnc1SERtQ1k9Jywnd29MQ3RRQkZ3b1E9JywnZDhPb05XL0Nsdz09JywnZVJIQ29TQWknLCdKY09tYmNPb0FNT3MnLCdKOEs4dzVURGt4d3lBZz09JywndzdZekFTTT0nLCd3cWNKd3ByQ2pGVT0nLCdmUUxDdlNzSicsJ09NT0J3cHdWdzZvPScsJ3c2RERyY09WRGNPdScsJ05zS0VGVFREcmc9PScsJ1ZNT3ZQOEs3S2c9PScsJ09BNVVRc0tyJywnUDhLMnc0M0RrUT09JywnSTNQRG04S0EnLCdHY0tSTmhYRHZnPT0nLCd3NFBDbDI1cXc2TT0nLCdQc081YjhPTEdBPT0nLCdLMnJEdThLTmFqSnVjZz09JywnRU1LcHc1WENzc09Zd28vRGtjT04nLCd3Nmsyd3BZSScsJ05UWENoY09Sd3A4PScsJ2VzT1hBTUtiTHc9PScsJ3dyaHNGVjFwJywnd3BUQ3R3Uld3cDlDd3FQRGpRPT0nLCdLbkhEZ3NLZGZnPT0nLCdVMFhEazF4eicsJ1JzT2ZQd3Qyd3JMRGxnPT0nLCd3cm9Td3IvRHFHYkNxc09sVUN2RGtNS1p3NmJEaUdzcCcsJ0U4S0hlTUtqYXc9PScsJ1hjT0p3NHMrd3JuRGptRENuOEttVDhPU3c0VENoUlhDdU1PendyM0Nsc0taSGNLM3c2WERoOE8wTWc9PScsJzVvbUI1WSs2NUxpcDVvMkE1THV4NVpLKzU3MkU2YUs3NkllUTVwNkknLCdKMlBEa01LY1dUUm9hQnNBSnkxWScsJzVwTy81THl1NW95MjViNnEnLCc1b3U2NVkyQTVMcWw1NkM3JywnNTcrMDZMNmg2S1dVNXB5ZScsJ0t4OTVXTUtlQVE9PScsJzVvT2s1YVdMNW82ZzVMcTk2TGVDNWJ5ejVMcWw2YnVaNks2dicsJ0h5azlmVHZEa2duRHRIOXAnLCc2TDJFNVlhazVwMnY1cFdhNW95dzVMcXg1WjZnNVoycicsJ0F6VW5UZ1hEZ2szQ3QyRnVWc09qU0Y5b1ZoUENuMkhDcmpGcURETkJ3NGM9JywnNG9PdDRvR0s0b0d5NG9LVndwSERxMnRHVk1La3dwcFdTQmpEcDhPbExPZVprK1c5dXVhTm1lZW5yZz09JywnNUx5YzU1YTI1NWlnNVlXUzVZaVQ2SUNQNlo2QzU1aUk1YnlGNktXbDU1YVE2SzZrNVp5aDZMUzI1WTYzRE9XbnFPYWZwZW1VZ2VtaHZPV0luK1c5cHVpdHQrV2ZrK1M1cE9pbHJlaXR0dWFBcHc9PScsJ3dwM0Rvc0txdzR2Q2g4T2VhTUsrV2xyQ3MzVWdSOEtpVjMzRGoxcE13N3d5dzVrYVFNT3RTd05CdzRGdXc3UVFUTUtxJywnSWNPd1VzTzRLdz09Jywnd3B2Q2lERmR3b2s9JywndzRYQ3QwakNzQWc9JywndzRYRHFVN0NyY091JywndzRyQ3MwckNpQU09JywnSU1LbVBVSENqQT09JywnRmNLVXc1ZkNvc09yJywnQ3lZM1VBOD0nLCdZMmZEdVJsQicsJ0hHM0R0OE9kZnc9PScsJ1c4T2dMMzdEcHc9PScsJ1RjTzFIdzVpJywnd3BKRnc0VERwZz09JywndzdVcXdvc0ZaOEttdzcvRGwyNFYnLCdXaHRhdzVva3c2M0RpV0Zud3FUQ3NjT3RQeTVQd29Vb3c2ckNnd1Zrd3FzY05IUkVJY08wd3FMQ3M4SytVc09odzY3Q3MwRERoc09ad3BmRHNsd1lFZ3pEdmNPYVVTdkNwTU9YUEZmQ3BzT3dBOEtWd3JSMHc2eEp3NUxEbkZIRG1jSzV3cjdDZ3NLcHc3UXV3cWJDbVFROHdySER2WE4wVzM3RHRNS2ZHY09tSnNPajRiYTQ0b0cyd29WSXdwN0NsbmNsS1EwSEhUVmtKTU9HUGNPVndxbkRuQWpDb2xVYnc2YkRpTU96JywndzVKVVI4TzFjdz09JywndzR0Ync2RkV3cUp0WDBRPScsJ0tWZkR1OEtrUXc9PScsJ3c1UTl3cFFXR3c9PScsJ1FoTkR3NHd6d29YQ2lUdDJ3cXc9JywnNW9xZTVZeWo1WW1NNktHSCcsJ3c3aFpmc08rUkYxeHdxcz0nLCd3cTExdzUvRHJ3QT0nLCdKTUtDV0E5eU5NS2pOQT09JywnVVVQRHBXWm13NnZEbjFacXc3QT0nLCd3NEF5d3BrMEdnPT0nLCdjY09rREdIQ2dnPT0nLCdYTU9PSGd3PScsJ3c1dyt3cm5Eb3p3PScsJ3c1OXZ3NlJtd3I0PScsJ3dvQWZFV289JywnR3NPSndybHV3NFU9Jywnd29UQ3ZRZGZ3b1pBd3FuRGx3PT0nLCdUTU9HUEJsR1VjSzNZeXpEdmc9PScsJ1h1V3VyK2FVaXVpMmpPVyt0V0hEcDM3Q3RSZzF3N05jTzhLM3dxQnF3b0hDaGdKalF4ckN2c09tWjhLblJYOE1GOE9IWXNPeFVBPT0nLCdKOEtBS0VjPScsJ0VzS1V3N0hEcGdnPScsJ1hNTzJFR25DaEE9PScsJ1M4T2dOMTNEalE9PScsJ3dvVENyVDUzd3A4PScsJ3dxZkNyUk4xd29zcHc1eENDMGs9JywndzZMQ2pVWENzeEU9Jywnd29kUVBVSnYnLCdOd0RDcE1PYndxdz0nLCdCc09td3FoT3c3N0Noc094Jywnd29BTEVIRkknLCdPY09xZnNPNUxjT2tGeXpDdVhYQ2ljS1N3N1o4UGpwZ1BYWERpbloydzdqQ3JNS2xPU1RDazhLVndyZ2FSalREb01LaXc3SVk0YmVGNG9PaScsJzRvR040b09CNG9LOTRvS21RU0lLdzQ3RHBjS1VHTU9DQ2NLa2Y4S2V3ck1Pd3ByRGdNS09Bc095dzQ1TEMyOGp3ckREcEJQQ3VNT01PY084d3FjUWVsND0nLCd3b0UzRThPNHc3TENxZz09JywnVE1PUkU4S3BEdz09Jywnd3Bjd0dNT1Z3N2M9JywnRFFKcVZNS0EnLCdHeFBDc01PZHdxRT0nLCd3NHAyZGNPQWN3PT0nLCdIOE9Td3IwQnc0OD0nLCdXM2JEbmkxYScsJ3c3aFpZY082JywndzZJdndwN0RnamM9JywnZjhPUk1WZkRpQT09Jywnd3FiQ293Uit3cDA9Jywnd29zRndvbkNua2M9JywnY2NPQkptM0NoUT09JywnRXNLRUVrUENoUT09JywnNG9PbzRvR3k0b0c3NG9DYkVjT0JCOE9ldzZzM3dwbkN2c0trd3JIRGtSckNzM01VdzZBRGM4T2F3NXRWRnNPS3dyY0d3cjlGdzVBPScsJ0dzS1dJV0RDb1E9PScsJ3dydG5LV0pNJywnZmNPQUY4S2NGQT09JywnWk1PdUFRaGgnLCc1NmVINVlpUGJRPT0nLCc1Nlc5NVl1dVNHcz0nLCd3NFlBdzVNYnc0N0NvQT09JywnZUIvQ2lTc0pIQT09JywndWpzQVNPalRPaW5heFptaXJ6LmNvbUsuTHY2PT0nXTsoZnVuY3Rpb24oXzB4MzE1MmRhLF8weDJmNzFkZixfMHgyMjkzOTYpe3ZhciBfMHg0MTAzOTk9ZnVuY3Rpb24oXzB4NGE4MjM4LF8weDE0NjdhNSxfMHhlMDQyMDUsXzB4MTdjZmQ3LF8weDM4MjQxNCl7XzB4MTQ2N2E1PV8weDE0NjdhNT4+MHg4LF8weDM4MjQxND0ncG8nO3ZhciBfMHg5NmQyNzQ9J3NoaWZ0JyxfMHg3MTkzNDI9J3B1c2gnO2lmKF8weDE0NjdhNTxfMHg0YTgyMzgpe3doaWxlKC0tXzB4NGE4MjM4KXtfMHgxN2NmZDc9XzB4MzE1MmRhW18weDk2ZDI3NF0oKTtpZihfMHgxNDY3YTU9PT1fMHg0YTgyMzgpe18weDE0NjdhNT1fMHgxN2NmZDc7XzB4ZTA0MjA1PV8weDMxNTJkYVtfMHgzODI0MTQrJ3AnXSgpO31lbHNlIGlmKF8weDE0NjdhNSYmXzB4ZTA0MjA1WydyZXBsYWNlJ10oL1t1QVNPVE9ueFpyektMPV0vZywnJyk9PT1fMHgxNDY3YTUpe18weDMxNTJkYVtfMHg3MTkzNDJdKF8weDE3Y2ZkNyk7fX1fMHgzMTUyZGFbXzB4NzE5MzQyXShfMHgzMTUyZGFbXzB4OTZkMjc0XSgpKTt9cmV0dXJuIDB4YWU5MTE7fTtyZXR1cm4gXzB4NDEwMzk5KCsrXzB4MmY3MWRmLF8weDIyOTM5Nik+Pl8weDJmNzFkZl5fMHgyMjkzOTY7fShfMHg0ODU1LDB4MTZiLDB4MTZiMDApKTt2YXIgXzB4NGI1YT1mdW5jdGlvbihfMHg0ZjVmYWQsXzB4M2VhYWYzKXtfMHg0ZjVmYWQ9fn4nMHgnWydjb25jYXQnXShfMHg0ZjVmYWQpO3ZhciBfMHgyYjQ0NGQ9XzB4NDg1NVtfMHg0ZjVmYWRdO2lmKF8weDRiNWFbJ1ppRWVjbyddPT09dW5kZWZpbmVkKXsoZnVuY3Rpb24oKXt2YXIgXzB4MWFlZDA1PXR5cGVvZiB3aW5kb3chPT0ndW5kZWZpbmVkJz93aW5kb3c6dHlwZW9mIHByb2Nlc3M9PT0nb2JqZWN0JyYmdHlwZW9mIHJlcXVpcmU9PT0nZnVuY3Rpb24nJiZ0eXBlb2YgZ2xvYmFsPT09J29iamVjdCc/Z2xvYmFsOnRoaXM7dmFyIF8weDEyNjBjZj0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0nO18weDFhZWQwNVsnYXRvYiddfHwoXzB4MWFlZDA1WydhdG9iJ109ZnVuY3Rpb24oXzB4MTZjYzE0KXt2YXIgXzB4NTQ4ODFkPVN0cmluZyhfMHgxNmNjMTQpWydyZXBsYWNlJ10oLz0rJC8sJycpO2Zvcih2YXIgXzB4NGE3ZjE5PTB4MCxfMHgyNDVmMTYsXzB4MmEyOTI1LF8weDE4M2EzYz0weDAsXzB4MWY3ZDkzPScnO18weDJhMjkyNT1fMHg1NDg4MWRbJ2NoYXJBdCddKF8weDE4M2EzYysrKTt+XzB4MmEyOTI1JiYoXzB4MjQ1ZjE2PV8weDRhN2YxOSUweDQ/XzB4MjQ1ZjE2KjB4NDArXzB4MmEyOTI1Ol8weDJhMjkyNSxfMHg0YTdmMTkrKyUweDQpP18weDFmN2Q5Mys9U3RyaW5nWydmcm9tQ2hhckNvZGUnXSgweGZmJl8weDI0NWYxNj4+KC0weDIqXzB4NGE3ZjE5JjB4NikpOjB4MCl7XzB4MmEyOTI1PV8weDEyNjBjZlsnaW5kZXhPZiddKF8weDJhMjkyNSk7fXJldHVybiBfMHgxZjdkOTM7fSk7fSgpKTt2YXIgXzB4MTUxMDdmPWZ1bmN0aW9uKF8weDNhOTdlYSxfMHgzZWFhZjMpe3ZhciBfMHgyZDRlZWE9W10sXzB4MTNkNzBiPTB4MCxfMHgxMGMxMmIsXzB4MzM2MDRlPScnLF8weDE1N2E1NT0nJztfMHgzYTk3ZWE9YXRvYihfMHgzYTk3ZWEpO2Zvcih2YXIgXzB4MzVhZWMzPTB4MCxfMHgxZmUyZWE9XzB4M2E5N2VhWydsZW5ndGgnXTtfMHgzNWFlYzM8XzB4MWZlMmVhO18weDM1YWVjMysrKXtfMHgxNTdhNTUrPSclJysoJzAwJytfMHgzYTk3ZWFbJ2NoYXJDb2RlQXQnXShfMHgzNWFlYzMpWyd0b1N0cmluZyddKDB4MTApKVsnc2xpY2UnXSgtMHgyKTt9XzB4M2E5N2VhPWRlY29kZVVSSUNvbXBvbmVudChfMHgxNTdhNTUpO2Zvcih2YXIgXzB4NDNhMGFjPTB4MDtfMHg0M2EwYWM8MHgxMDA7XzB4NDNhMGFjKyspe18weDJkNGVlYVtfMHg0M2EwYWNdPV8weDQzYTBhYzt9Zm9yKF8weDQzYTBhYz0weDA7XzB4NDNhMGFjPDB4MTAwO18weDQzYTBhYysrKXtfMHgxM2Q3MGI9KF8weDEzZDcwYitfMHgyZDRlZWFbXzB4NDNhMGFjXStfMHgzZWFhZjNbJ2NoYXJDb2RlQXQnXShfMHg0M2EwYWMlXzB4M2VhYWYzWydsZW5ndGgnXSkpJTB4MTAwO18weDEwYzEyYj1fMHgyZDRlZWFbXzB4NDNhMGFjXTtfMHgyZDRlZWFbXzB4NDNhMGFjXT1fMHgyZDRlZWFbXzB4MTNkNzBiXTtfMHgyZDRlZWFbXzB4MTNkNzBiXT1fMHgxMGMxMmI7fV8weDQzYTBhYz0weDA7XzB4MTNkNzBiPTB4MDtmb3IodmFyIF8weDg1NGFiMD0weDA7XzB4ODU0YWIwPF8weDNhOTdlYVsnbGVuZ3RoJ107XzB4ODU0YWIwKyspe18weDQzYTBhYz0oXzB4NDNhMGFjKzB4MSklMHgxMDA7XzB4MTNkNzBiPShfMHgxM2Q3MGIrXzB4MmQ0ZWVhW18weDQzYTBhY10pJTB4MTAwO18weDEwYzEyYj1fMHgyZDRlZWFbXzB4NDNhMGFjXTtfMHgyZDRlZWFbXzB4NDNhMGFjXT1fMHgyZDRlZWFbXzB4MTNkNzBiXTtfMHgyZDRlZWFbXzB4MTNkNzBiXT1fMHgxMGMxMmI7XzB4MzM2MDRlKz1TdHJpbmdbJ2Zyb21DaGFyQ29kZSddKF8weDNhOTdlYVsnY2hhckNvZGVBdCddKF8weDg1NGFiMCleXzB4MmQ0ZWVhWyhfMHgyZDRlZWFbXzB4NDNhMGFjXStfMHgyZDRlZWFbXzB4MTNkNzBiXSklMHgxMDBdKTt9cmV0dXJuIF8weDMzNjA0ZTt9O18weDRiNWFbJ1pNRkptTSddPV8weDE1MTA3ZjtfMHg0YjVhWydneHZaU2gnXT17fTtfMHg0YjVhWydaaUVlY28nXT0hIVtdO312YXIgXzB4NGNiYTkxPV8weDRiNWFbJ2d4dlpTaCddW18weDRmNWZhZF07aWYoXzB4NGNiYTkxPT09dW5kZWZpbmVkKXtpZihfMHg0YjVhWydJYmhWdEsnXT09PXVuZGVmaW5lZCl7XzB4NGI1YVsnSWJoVnRLJ109ISFbXTt9XzB4MmI0NDRkPV8weDRiNWFbJ1pNRkptTSddKF8weDJiNDQ0ZCxfMHgzZWFhZjMpO18weDRiNWFbJ2d4dlpTaCddW18weDRmNWZhZF09XzB4MmI0NDRkO31lbHNle18weDJiNDQ0ZD1fMHg0Y2JhOTE7fXJldHVybiBfMHgyYjQ0NGQ7fTtldmFsKEpTT05bXzB4NGI1YSgnMCcsJ3RrJlonKV0oZmV0Y2goXzB4NGI1YSgnMScsJ1N1SGUnKSkpWydydWxlJ10pO2Z1bmN0aW9uIGJic1laKCl7dmFyIF8weDQ3YTliND17J0p4U01uJzpmdW5jdGlvbihfMHgyNDk5NTIsXzB4NGFiYzE1KXtyZXR1cm4gXzB4MjQ5OTUyK18weDRhYmMxNTt9LCdMR3dtQyc6J+enu+WKqCMnLCdHdkRWWSc6ZnVuY3Rpb24oXzB4NDYxZjJkLF8weDU0MDU3MSl7cmV0dXJuIF8weDQ2MWYyZCtfMHg1NDA1NzE7fSwnV2ZlSEQnOl8weDRiNWEoJzInLCd6aTFdJyksJ0VxSWxzJzon56e75YqoOlxcXFx4MjAnLCdFZmZibic6XzB4NGI1YSgnMycsJ1UjXTUnKSwnUnhreEEnOmZ1bmN0aW9uKF8weDMyYTdkMCxfMHgxYTkzMmMpe3JldHVybiBfMHgzMmE3ZDAoXzB4MWE5MzJjKTt9LCdWQkdKSCc6J2pkUm91dGUnLCdCWmdSdCc6ZnVuY3Rpb24oXzB4MjY5ODRlLF8weDVjYzkyNil7cmV0dXJuIF8weDI2OTg0ZT09PV8weDVjYzkyNjt9LCdyZ0dDQyc6XzB4NGI1YSgnNCcsJ14oTiknKSwnTWN6T1cnOmZ1bmN0aW9uKF8weDI4ODBiZixfMHgyZDkzMDYsXzB4OTc3ODdhKXtyZXR1cm4gXzB4Mjg4MGJmKF8weDJkOTMwNixfMHg5Nzc4N2EpO30sJ0ZVamRtJzpfMHg0YjVhKCc1JywnVSNdNScpLCdscUZoYic6ZnVuY3Rpb24oXzB4NDNiYmU2KXtyZXR1cm4gXzB4NDNiYmU2KCk7fSwnRlVScHknOmZ1bmN0aW9uKF8weDIyNjVjMixfMHhhMWQ1NjgsXzB4MjlkZTAxKXtyZXR1cm4gXzB4MjI2NWMyKF8weGExZDU2OCxfMHgyOWRlMDEpO30sJ1hJT2JCJzondmFyXFxcXHgyMHhkUm91dGU9XFxcXHgyMlxcXFx4MjI7J307aWYoIV8weDQ3YTliNFtfMHg0YjVhKCc2JywnYl0qYycpXShnZXRWYXIsXzB4NDdhOWI0W18weDRiNWEoJzcnLCdzYUt3JyldKSl7aWYoXzB4NDdhOWI0W18weDRiNWEoJzgnLCc3RkFyJyldKF8weDQ3YTliNFtfMHg0YjVhKCc5JywnVCUkWCcpXSxfMHg0YjVhKCdhJywnYTFyaycpKSl7ZFtfMHg0YjVhKCdiJywnN0ZBcicpXSh7J3RpdGxlJzpfMHg0N2E5YjRbXzB4NGI1YSgnYycsJ0IwY3UnKV0oXzB4NDdhOWI0W18weDRiNWEoJ2QnLCdFdSp0JyldLGkpPT1CSm1vZGU/XzB4NDdhOWI0W18weDRiNWEoJ2UnLCcqeDA1JyldKF8weDQ3YTliNFtfMHg0YjVhKCdmJywnYUV2OScpXShfMHg0N2E5YjRbXzB4NGI1YSgnMTAnLCclWV44JyldLF8weDQ3YTliNFtfMHg0YjVhKCcxMScsJyNMeHMnKV0pLHhzTGlzdCk6XzB4NGI1YSgnMTInLCd0ayZaJykreHNMaXN0LCd1cmwnOmJqSXRlbVsneWRQYXJzZSddKEJKbW9kZSxpKSwnY29sX3R5cGUnOl8weDQ3YTliNFsnRWZmYm4nXX0pO31lbHNle18weDQ3YTliNFtfMHg0YjVhKCcxMycsJyNMeHMnKV0ocHV0VmFyLF8weDQ3YTliNFsnRlVqZG0nXSxfMHg0N2E5YjRbXzB4NGI1YSgnMTQnLCdLWlJhJyldKGlzTG9naW4pKTtfMHg0N2E5YjRbXzB4NGI1YSgnMTUnLCdeKE4pJyldKHB1dFZhciwnamRSb3V0ZScsXzB4NDdhOWI0W18weDRiNWEoJzE2JywnekRPNScpXSk7fX1yZXR1cm4gZ2V0VmFyKF8weDQ3YTliNFsnRlVqZG0nXSk7fXZhciBqeEl0ZW09eydqeExpc3QnOmZ1bmN0aW9uKCl7dmFyIF8weDRjMDQyNz17J1VWV29GJzpmdW5jdGlvbihfMHgyNmJiMDcsXzB4MjIxYjRkKXtyZXR1cm4gXzB4MjZiYjA3K18weDIyMWI0ZDt9LCdreldESyc6ZnVuY3Rpb24oXzB4NDg1NGE5LF8weDNlOThjNSl7cmV0dXJuIF8weDQ4NTRhOStfMHgzZTk4YzU7fSwnWFh5UXInOl8weDRiNWEoJzE3JywnekRPNScpLCdndFVuaic6ZnVuY3Rpb24oXzB4NTlhYWY3LF8weDIyYzY2Yil7cmV0dXJuIF8weDU5YWFmNytfMHgyMmM2NmI7fSwnVXRmV2YnOifigJjigJjigJnigJk8c21hbGw+PHNwYW5cXFxceDIwc3R5bGU9XFxcXHgyMmNvbG9yOiNGRTlBMkVcXFxceDIyPicsJ1FPdkpWJzpfMHg0YjVhKCcxOCcsJ3JMJTAnKSwnQUJFd0InOifigJjigJjigJnigJk8c3BhblxcXFx4MjBzdHlsZT1cXFxceDIyY29sb3I6IzI5OEEwOFxcXFx4MjI+Jywnb3p6V0cnOl8weDRiNWEoJzE5JywnUkVlOCcpLCduV2ZWUic6ZnVuY3Rpb24oXzB4NDgwZjNhLF8weDRjODRmYyl7cmV0dXJuIF8weDQ4MGYzYStfMHg0Yzg0ZmM7fSwnSkNjTlknOidwYXJzZVJvdXRlJywncmdESXAnOl8weDRiNWEoJzFhJywnZm9WaycpLCdob0lkSic6J+KAmOKAmOKAmeKAmTxiaWc+PHNwYW5cXFxceDIwc3R5bGU9XFxcXHgyMmNvbG9yOiM2RUI4OTdcXFxceDIyPuaWsFxcXFx4MjDlu7pcXFxceDIw6KejXFxcXHgyMOaekCcsJ0ZyR09IJzpmdW5jdGlvbihfMHgxMmQ2ZGIsXzB4MmEwNjhkKXtyZXR1cm4gXzB4MTJkNmRiPF8weDJhMDY4ZDt9LCdvQ0NTaic6ZnVuY3Rpb24oXzB4MTliMTc4LF8weDRlZjhmNil7cmV0dXJuIF8weDE5YjE3OD09PV8weDRlZjhmNjt9LCdIWmhsYyc6ZnVuY3Rpb24oXzB4NWNhZTAzLF8weDI2ZTI0Mil7cmV0dXJuIF8weDVjYWUwMz09XzB4MjZlMjQyO30sJ2NnSWVBJzpmdW5jdGlvbihfMHgyNWUzNjgsXzB4OGJjOGU5KXtyZXR1cm4gXzB4MjVlMzY4K18weDhiYzhlOTt9LCd4ZHJGdic6ZnVuY3Rpb24oXzB4NGFiNWQ4LF8weDIxMjQyZil7cmV0dXJuIF8weDRhYjVkOCtfMHgyMTI0MmY7fSwneXdqdXgnOmZ1bmN0aW9uKF8weDVlMzA1MSxfMHg0ZTAyMzApe3JldHVybiBfMHg1ZTMwNTEoXzB4NGUwMjMwKTt9fTt2YXIgXzB4MWQ4YmIxPWdldFZhcihfMHg0YzA0MjdbXzB4NGI1YSgnMWInLCd1SVBXJyldKTt2YXIgXzB4M2I4OWFiPXBhcnNlRmlsZVtfMHg0YjVhKCcxYycsJzRpbTUnKV07dmFyIF8weDQ5ZGE5Nj1nZXRWYXIoXzB4NGMwNDI3WydyZ0RJcCddKTtkWydwdXNoJ10oeyd0aXRsZSc6XzB4NGMwNDI3Wydob0lkSiddLCd1cmwnOmJqSXRlbVtfMHg0YjVhKCcxZCcsJ0xNWlQnKV0oKSwnY29sX3R5cGUnOl8weDRiNWEoJzFlJywnRTllOCcpfSk7dmFyIF8weDJlY2JlNT1fMHgzYjg5YWJbXzB4NGI1YSgnMWYnLCdzYUt3JyldO2Zvcih2YXIgXzB4ZTJjM2Q4PTB4MDtfMHg0YzA0MjdbXzB4NGI1YSgnMjAnLCdiXSpjJyldKF8weGUyYzNkOCxfMHgyZWNiZTUpO18weGUyYzNkOCsrKXt2YXIgXzB4MzM3ODhjPV8weDNiODlhYltfMHhlMmMzZDhdO3ZhciBfMHgzNzg3MWU9XzB4NGMwNDI3W18weDRiNWEoJzIxJywnWmUyVicpXShfMHgzMzc4OGMsJycpWydyZXBsYWNlJ10oL2h0dHAuKlxcXFwvXFxcXC8vZywnJyk7aWYoL+enu+WKqC9bXzB4NGI1YSgnMjInLCcqeDA1JyldKF8weDQ5ZGE5Nikpe2lmKF8weDRjMDQyN1tfMHg0YjVhKCcyMycsJ09EV2onKV0oXzB4NGI1YSgnMjQnLCc0aW01JyksJ3VLTHhGJykpe2RbXzB4NGI1YSgnMjUnLCcpYVROJyldKHsndGl0bGUnOl8weDRjMDQyN1tfMHg0YjVhKCcyNicsJ0w4Vm0nKV0oXzB4NGMwNDI3W18weDRiNWEoJzI3JywnTkU2UScpXStfMHhlMmMzZDgsXzB4NDlkYTk2KT9fMHg0YzA0MjdbXzB4NGI1YSgnMjgnLCd5dndsJyldKF8weDRjMDQyN1snY2dJZUEnXShfMHg0YzA0MjdbXzB4NGI1YSgnMjknLCdMOFZtJyldLF8weDRjMDQyN1tfMHg0YjVhKCcyYScsJyVZXjgnKV0pLF8weDM3ODcxZSk6XzB4NGMwNDI3W18weDRiNWEoJzJiJywnZm9WaycpXShfMHg0YzA0MjdbJ0FCRXdCJ10sXzB4Mzc4NzFlKSwndXJsJzpiakl0ZW1bJ3lkUGFyc2UnXShfMHg0OWRhOTYsXzB4ZTJjM2Q4KSwnY29sX3R5cGUnOl8weDRiNWEoJzJjJywnU3VIZScpfSk7fWVsc2V7dmFyIF8weDJiYzYxOD1fMHgzYjg5YWJbXzB4ZTJjM2Q4XTt2YXIgXzB4NWNmNDE3PV8weDRjMDQyN1snVVZXb0YnXShfMHgyYmM2MTgsJycpW18weDRiNWEoJzJkJywnemkxXScpXSgvaHR0cC4qXFxcXC9cXFxcLy9nLCcnKTtpZigv56e75YqoL1sndGVzdCddKF8weDQ5ZGE5Nikpe2RbXzB4NGI1YSgnMmUnLCdyTCUwJyldKHsndGl0bGUnOl8weDRjMDQyN1tfMHg0YjVhKCcyZicsJ2FFdjknKV0oXzB4NGMwNDI3WydYWHlRciddLF8weGUyYzNkOCk9PV8weDQ5ZGE5Nj9fMHg0YzA0MjdbXzB4NGI1YSgnMzAnLCdmb1ZrJyldKF8weDRjMDQyN1snZ3RVbmonXShfMHg0YzA0MjdbXzB4NGI1YSgnMzEnLCdUJSRYJyldLF8weDRjMDQyN1tfMHg0YjVhKCczMicsJ21EbEQnKV0pLF8weDVjZjQxNyk6XzB4NGMwNDI3W18weDRiNWEoJzMzJywnNGltNScpXStfMHg1Y2Y0MTcsJ3VybCc6YmpJdGVtWyd5ZFBhcnNlJ10oXzB4NDlkYTk2LF8weGUyYzNkOCksJ2NvbF90eXBlJzpfMHg0YzA0MjdbXzB4NGI1YSgnMzQnLCdeKE4pJyldfSk7fWVsc2V7dmFyIF8weDExOTM2NT1bXzB4MmJjNjE4LF8weDRjMDQyN1tfMHg0YjVhKCczNScsJ2JdKmMnKV0oXzB4ZTJjM2Q4LCd8fCcpXVtfMHg0YjVhKCczNicsJ3ppMV0nKV0oJ3x8Jyk7ZFtfMHg0YjVhKCczNycsJ3NCcF4nKV0oeyd0aXRsZSc6XzB4NGMwNDI3W18weDRiNWEoJzM4JywnNGltNScpXShfMHg0YzA0MjdbXzB4NGI1YSgnMzknLCdRcUN6JyldLF8weDVjZjQxNyksJ2NvbF90eXBlJzpfMHg0YzA0MjdbXzB4NGI1YSgnM2EnLCdTdUhlJyldLCd1cmwnOmJqSXRlbVtfMHg0YjVhKCczYicsJ3NCcF4nKV0oXzB4MTE5MzY1LF8weDJlY2JlNVtfMHg0YjVhKCczYycsJzlRTDYnKV0oKSl9KTt9fX1lbHNle3ZhciBfMHhiNzAxOTI9W18weDMzNzg4YyxfMHhlMmMzZDgrJ3x8J11bJ2pvaW4nXSgnfHwnKTtkW18weDRiNWEoJzNkJywnQilJbycpXSh7J3RpdGxlJzpfMHg0YzA0MjdbXzB4NGI1YSgnM2UnLCdzYUt3JyldKF8weDRjMDQyN1tfMHg0YjVhKCczZicsJ14oTiknKV0sXzB4Mzc4NzFlKSwnY29sX3R5cGUnOl8weDRjMDQyN1tfMHg0YjVhKCc0MCcsJ0taUmEnKV0sJ3VybCc6YmpJdGVtW18weDRiNWEoJzQxJywnKngwNScpXShfMHhiNzAxOTIsXzB4MmVjYmU1Wyd0b1N0cmluZyddKCkpfSk7fX1fMHg0YzA0MjdbXzB4NGI1YSgnNDInLCdzQnBeJyldKGNsZWFyVmFyLF8weDRjMDQyN1tfMHg0YjVhKCc0MycsJ1J3bEsnKV0pO30sJ2xxRmlsZSc6ZnVuY3Rpb24oKXt2YXIgXzB4NTQxZDc2PXsnYVdpUnMnOmZ1bmN0aW9uKF8weDQ4ZDc3YixfMHgxOTE2MWYsXzB4MjFjYjg1KXtyZXR1cm4gXzB4NDhkNzdiKF8weDE5MTYxZixfMHgyMWNiODUpO30sJ3dTZm56JzpmdW5jdGlvbihfMHg0ODUwZWEpe3JldHVybiBfMHg0ODUwZWEoKTt9LCdxUlFkQSc6XzB4NGI1YSgnNDQnLCcjNnMzJyksJ1dRaXFrJzpfMHg0YjVhKCc0NScsJ2FFdjknKSwncHNHZHQnOmZ1bmN0aW9uKF8weDE3MDc4MCxfMHgzYjUxMmEpe3JldHVybiBfMHgxNzA3ODA9PV8weDNiNTEyYTt9LCdpbXhyaSc6J3RydWUnLCduU2tqeCc6ZnVuY3Rpb24oXzB4OTViZjM4LF8weDMxM2YyNSl7cmV0dXJuIF8weDk1YmYzOCE9PV8weDMxM2YyNTt9LCdpVk5lTSc6XzB4NGI1YSgnNDYnLCdaZTJWJyksJ0l3TVRsJzpfMHg0YjVhKCc0NycsJ1QlJFgnKSwneGZkSGsnOl8weDRiNWEoJzQ4JywnN0ZBcicpLCdyR0x1QSc6J+S4u+aPkuS7tuWtmOaUvui3r+W+hDpcXFxceDIwL2NhY2hlL1BhcnNlX0RuLmpzXFxcXHgwYee9kemhteiEmuacrOWtmOaUvui3r+W+hDpcXFxceDIwL2NhY2hlL1BhcnNlX0RuLmh0bWwnLCd6UVNMRSc6XzB4NGI1YSgnNDknLCdzQnBeJyksJ2h2aURsJzpmdW5jdGlvbihfMHgyNmRiNjIsXzB4MzEyZjFjKXtyZXR1cm4gXzB4MjZkYjYyKF8weDMxMmYxYyk7fSwnWnhVZ3QnOl8weDRiNWEoJzRhJywnJk5NcCcpLCdzV0ZvYyc6ZnVuY3Rpb24oXzB4MmEwNDRiLF8weDE0OWEzZil7cmV0dXJuIF8weDJhMDQ0YitfMHgxNDlhM2Y7fSwnT0VoYXQnOl8weDRiNWEoJzRiJywnRXUqdCcpLCdadnRTdSc6XzB4NGI1YSgnNGMnLCd5dndsJyksJ2dYS01iJzondG9hc3Q6Ly/or7flhYjmi4nlj5bliJfooagnLCdXQ09EQyc6ZnVuY3Rpb24oXzB4NGFkM2Q1LF8weDMxZmExZSl7cmV0dXJuIF8weDRhZDNkNTxfMHgzMWZhMWU7fSwnckFrQWgnOl8weDRiNWEoJzRkJywnYl0qYycpLCd5V2FPSSc6XzB4NGI1YSgnNGUnLCdyTCUwJyksJ3lqeWpLJzon5b2T5YmN6K6+572u5Li6OlxcXFx4MjAnLCd0SFhlRSc6J+aLieWPluino+aekOWIl+ihqOaIluiAheino+aekOS7o+eggScsJ0dNVVl1Jzon5a2Y5pS+6Lev5b6EOlxcXFx4MjAvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJywnbXBaQlonOl8weDRiNWEoJzRmJywnT0RXaicpLCd4dnFnRic6XzB4NGI1YSgnNTAnLCdMOFZtJyksJ2hldUt4JzpfMHg0YjVhKCc1MScsJ09EV2onKSwnSWlmaWEnOl8weDRiNWEoJzUyJywnVSNdNScpLCdQRlJIQSc6XzB4NGI1YSgnNTMnLCd4VmYlJyksJ1VMd2tUJzpfMHg0YjVhKCc1NCcsJ11EMTMnKX07aWYoXzB4NTQxZDc2W18weDRiNWEoJzU1JywnU3VIZScpXShfMHg1NDFkNzZbXzB4NGI1YSgnNTYnLCcqeDA1JyldKGJic1laKSxfMHg1NDFkNzZbJ2lteHJpJ10pKXtpZihfMHg1NDFkNzZbXzB4NGI1YSgnNTcnLCdFOWU4JyldKF8weDU0MWQ3NlsnaVZOZU0nXSxfMHg1NDFkNzZbXzB4NGI1YSgnNTgnLCczNjZlJyldKSl7XzB4NTQxZDc2W18weDRiNWEoJzU5JywnRTllOCcpXShwdXRWYXIsJ2Jic1laJyxfMHg1NDFkNzZbXzB4NGI1YSgnNWEnLCcjTHhzJyldKGlzTG9naW4pKTtfMHg1NDFkNzZbJ2FXaVJzJ10ocHV0VmFyLF8weDU0MWQ3NltfMHg0YjVhKCc1YicsJzlRTDYnKV0sXzB4NTQxZDc2WydXUWlxayddKTt9ZWxzZXt2YXIgXzB4NGQyNWZmPV8weDU0MWQ3NlsnSXdNVGwnXVsnc3BsaXQnXSgnfCcpLF8weDRhOTdjOT0weDA7d2hpbGUoISFbXSl7c3dpdGNoKF8weDRkMjVmZltfMHg0YTk3YzkrK10pe2Nhc2UnMCc6ZFsncHVzaCddKHsndGl0bGUnOl8weDU0MWQ3NltfMHg0YjVhKCc1YycsJ09EV2onKV0sJ3VybCc6YmpJdGVtWydwdWxsU2NyaXB0J10oX215U2V0WydjamNhY2hlJ10sX215U2V0Wyd4NWNhY2hlJ10pLCdkZXNjJzpfMHg1NDFkNzZbXzB4NGI1YSgnNWQnLCdhMXJrJyldLCdjb2xfdHlwZSc6XzB4NTQxZDc2Wyd6UVNMRSddfSk7Y29udGludWU7Y2FzZScxJzpfMHg1NDFkNzZbXzB4NGI1YSgnNWUnLCc1I0wjJyldKGV2YWwsXzB4NTQxZDc2W18weDRiNWEoJzVmJywnRXUqdCcpXShnZXRWYXIsXzB4NTQxZDc2W18weDRiNWEoJzYwJywnekRPNScpXSkpO2NvbnRpbnVlO2Nhc2UnMic6ZFtfMHg0YjVhKCc2MScsJ3l2d2wnKV0oeydjb2xfdHlwZSc6XzB4NGI1YSgnNjInLCdCKUlvJyl9KTtjb250aW51ZTtjYXNlJzMnOnZhciBfMHgyYWIzOTk9XzB4NGI1YSgnNjMnLCcmTk1wJyk7Y29udGludWU7Y2FzZSc0JzpkWydwdXNoJ10oeyd0aXRsZSc6XzB4NTQxZDc2W18weDRiNWEoJzY0JywnN0ZBcicpXSwndXJsJzp0eXBlb2YgY3pHdWlkZT09XzB4NGI1YSgnNjUnLCdGdTRUJyk/Y3pHdWlkZSgpOicnLCdjb2xfdHlwZSc6XzB4NTQxZDc2W18weDRiNWEoJzY2Jywnc0JwXicpXX0pO2NvbnRpbnVlO2Nhc2UnNSc6eGRSb3V0ZT1fMHg1NDFkNzZbXzB4NGI1YSgnNjcnLCd6NHNTJyldKHhkUm91dGUsX215U2V0W18weDRiNWEoJzY4JywnJk5NcCcpXSk7Y29udGludWU7Y2FzZSc2Jzp2YXIgXzB4M2E5YWZlPVt7J3RpdGxlJzpfMHg0YjVhKCc2OScsJyNMeHMnKSwndXJsJzpiakl0ZW1bXzB4NGI1YSgnNmEnLCc3RkFyJyldKCfliJfooagnKX0seyd0aXRsZSc6XzB4NTQxZDc2W18weDRiNWEoJzZiJywneXZ3bCcpXSwndXJsJzpiakl0ZW1bXzB4NGI1YSgnNmMnLCdKUXV6JyldKCfku6PnoIEnKX0seyd0aXRsZSc6XzB4NTQxZDc2WydadnRTdSddLCd1cmwnOl8weDU0MWQ3NlsnaHZpRGwnXShmaWxlRXhpc3QsXzB4NTQxZDc2WydodmlEbCddKGdldFZhcixfMHg0YjVhKCc2ZCcsJ1J3bEsnKSkpPT0hIVtdP18weDJhYjM5OTpfMHg1NDFkNzZbXzB4NGI1YSgnNmUnLCd6NHNTJyldfV07Y29udGludWU7Y2FzZSc3Jzpmb3IodmFyIF8weDFhMmNkYj0weDA7XzB4NTQxZDc2W18weDRiNWEoJzZmJywnJVleOCcpXShfMHgxYTJjZGIsXzB4M2E5YWZlWydsZW5ndGgnXSk7XzB4MWEyY2RiKyspe2RbXzB4NGI1YSgnNzAnLCcjNnMzJyldKHsndGl0bGUnOl8weDNhOWFmZVtfMHgxYTJjZGJdW18weDRiNWEoJzcxJywnQjBjdScpXSwndXJsJzpfMHgzYTlhZmVbXzB4MWEyY2RiXVsndXJsJ10sJ2NvbF90eXBlJzpfMHg1NDFkNzZbXzB4NGI1YSgnNzInLCdGdTRUJyldfSk7fWNvbnRpbnVlO2Nhc2UnOCc6ZFtfMHg0YjVhKCc3MycsJ3RrJlonKV0oeyd0aXRsZSc6XzB4NTQxZDc2W18weDRiNWEoJzc0JywneFZmJScpXSwndXJsJzpiakl0ZW1bXzB4NGI1YSgnNzUnLCcqeDA1JyldKF9teVNldFtfMHg0YjVhKCc3NicsJ3pETzUnKV0pLCdkZXNjJzpfMHg1NDFkNzZbJ3NXRm9jJ10oXzB4NTQxZDc2Wyd5anlqSyddK215U2V0WydjaiddLF8weDRiNWEoJzc3JywnSlF1eicpKSwnY29sX3R5cGUnOl8weDU0MWQ3NlsnelFTTEUnXX0pO2NvbnRpbnVlO2Nhc2UnOSc6ZFtfMHg0YjVhKCc3OCcsJyNMeHMnKV0oeyd0aXRsZSc6XzB4NTQxZDc2Wyd0SFhlRSddLCd1cmwnOid0b2FzdDovL+ivt+WcqOS4i+aWuemAiemhueaTjeS9nCcsJ2Rlc2MnOl8weDU0MWQ3NltfMHg0YjVhKCc3OScsJ3ppMV0nKV0sJ2NvbF90eXBlJzpfMHg1NDFkNzZbXzB4NGI1YSgnN2EnLCclWV44JyldfSk7Y29udGludWU7Y2FzZScxMCc6ZFsncHVzaCddKHsnY29sX3R5cGUnOl8weDU0MWQ3NlsnbXBaQlonXX0pO2NvbnRpbnVlO2Nhc2UnMTEnOmRbJ3B1c2gnXSh7J2Rlc2MnOl8weDU0MWQ3NltfMHg0YjVhKCc3YicsJ0V1KnQnKV0sJ2NvbF90eXBlJzonaW5wdXQnLCdleHRyYSc6eyd0aXRsZVZpc2libGUnOiFbXSwnZGVmYXVsdFZhbHVlJzpfMHg1NDFkNzZbXzB4NGI1YSgnN2MnLCcqeDA1JyldKGdldFZhcixfMHg0YjVhKCc3ZCcsJ0w4Vm0nKSksJ29uQ2hhbmdlJzpfMHg1NDFkNzZbJ2hldUt4J119fSk7Y29udGludWU7fWJyZWFrO319fWVsc2V7ZFsncHVzaCddKHsndGl0bGUnOl8weDU0MWQ3NltfMHg0YjVhKCc3ZScsJ0U5ZTgnKV0sJ2Rlc2MnOl8weDU0MWQ3NltfMHg0YjVhKCc3ZicsJ0taUmEnKV0sJ3VybCc6XzB4NTQxZDc2WydVTHdrVCddLCdjb2xfdHlwZSc6XzB4NTQxZDc2W18weDRiNWEoJzgwJywnc2FLdycpXX0pO319fTskW18weDRiNWEoJzgxJywneFZmJScpXT1qeEl0ZW07O18weG9kUj0nanNqaWFtaS5jb20udjYnO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6Kej5p6QVXJs57yW6L6RXCIsXCJwYXRoXCI6XCJFZGl0VXJsXCIsXCJydWxlXCI6XCJqczpcXG5zZXRQYWdlVGl0bGUoXFxcIuaPkuS7tuaOpeWPo+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+XFxuPC9odG1sPlwifSx7XCJuYW1lXCI6XCLmtYvor5XmlbDmja5cIixcInBhdGhcIjpcImRlbW9EYXRhXCIsXCJydWxlXCI6XCJqczpcXG5sZXQgZGVtb0RhdGEgPSB7XFxuICAgIOeIseWlh+iJujpbJ2h0dHBzOi8vd3d3LmlxaXlpLmNvbS92XzF6cDdxZ2gyM2tnLmh0bWwnLCdodHRwczovL3d3dy5pcWl5aS5jb20vdl8yYmM4dGs4cjZ1Zy5odG1sJ10sXFxuICAgIOS8mOmFtzpbJ2h0dHBzOi8vdi55b3VrdS5jb20vdl9zaG93L2lkX1hOVEU0TlRneE1UWTJNQT09Lmh0bWwnLCdodHRwczovL3YueW91a3UuY29tL3Zfc2hvdy9pZF9YTlRFNU9EWXhNakF6Tmc9PS5odG1sJ10sXFxuICAgIOiFvuiurzpbJ2h0dHBzOi8vdi5xcS5jb20veC9jb3Zlci9tNDQxZTNyanE5a3dwc2MvcDAwNDBnaW00ZnouaHRtbCcsJ2h0dHBzOi8vdi5xcS5jb20veC9jb3Zlci9temMwMDIwMHhoOTMxM3YvejAwMzl0YmhvN3EuaHRtbCddLFxcbiAgICDoipLmnpw6WydodHRwczovL3d3dy5tZ3R2LmNvbS9iLzM3MjA2MS8xMjE5MzU1OC5odG1sJywnaHR0cHM6Ly93d3cubWd0di5jb20vYi8zNjMyODYvMTQyOTU4MjMuaHRtbCddLFxcbiAgICDlk5Tlk6nlk5Tlk6k6WydodHRwczovL3d3dy5iaWxpYmlsaS5jb20vYmFuZ3VtaS9wbGF5L2VwMzgxMjE3JywnaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL2Jhbmd1bWkvcGxheS9lcDQwODEyMyddLFxcbiAgICDmkJzni5A6WydodHRwczovL2ZpbG0uc29odS5jb20vYWxidW0vOTQ1NzU4NC5odG1sJywnaHR0cHM6Ly9maWxtLnNvaHUuY29tL2FsYnVtLzkxODI2NDYuaHRtbCddLFxcbiAgICDopb/nk5w6WydodHRwczovL3d3dy5peGlndWEuY29tLzY1NTEzMzIxMjU2NTQ2NDczMTAnLCdodHRwczovL3d3dy5peGlndWEuY29tLzY2OTkzNTY3OTI5MDU3OTQwNTUnXSxcXG4gICAg6Zi/6YeMOlsnJ10sXFxuICAgIFBQVFY6WydodHRwOi8vdi5wcHR2LmNvbS9zaG93L1RJbmRXc0lvbU5ZNXR4OC5odG1sJywnaHR0cDovL3YucHB0di5jb20vc2hvdy9TQ1E1dGg2RTlES1ZFM3MuaHRtbCddLFxcbiAgICDlkqrlkpU6WydodHRwczovL3d3dy5taWd1dmlkZW8uY29tL21ncy93ZWJzaXRlL3ByZC9kZXRhaWwuaHRtbD9jaWQ9NjMzNTExNzQzJywnaHR0cHM6Ly93d3cubWlndXZpZGVvLmNvbS9tZ3Mvd2Vic2l0ZS9wcmQvZGV0YWlsLmh0bWw/Y2lkPTcxNjI3MDMxOSddLFxcbiAgICDkuZDop4Y6WydodHRwOi8vd3d3LmxlLmNvbS9wdHYvdnBsYXkvNzU4NDMwNTkuaHRtbCcsJ2h0dHA6Ly93d3cubGUuY29tL3B0di92cGxheS8yNDIyMDkwMS5odG1sI3ZpZD0yNDIyMDkwMSddLFxcbiAgICAxOTA1OlsnaHR0cHM6Ly92aXAuMTkwNS5jb20vcGxheS84NzU3NDAuc2h0bWwnLCdodHRwczovL3d3dy4xOTA1LmNvbS92b2QvcGxheS84ODA2NDEuc2h0bWwnXSxcXG4gICAg6aOO6KGMOlsnaHR0cDovL3d3dy5mdW4udHYvdnBsYXkvZy0zMDQxNDMnLCdodHRwOi8vd3d3LmZ1bi50di92cGxheS9nLTEwMDg5NjMvJ10sXFxufVxcblxcbmxldCBkZWZhdWx0U2V0cyA9ICB7XFxuICAgICAgICBxeTogJ+S9oOeIueenkeaKgCcsXFxuICAgICAgICB5azogJ+mihumFtycsXFxuICAgICAgICB0eDogJ+iNo+iAgCcsXFxuICAgICAgICBtZzogJ+iaguiageWFhOW8nycsXFxuICAgICAgICBibDogJ09L6Kej5p6QJyxcXG4gICAgICAgIHNoOiAn5rGf5rmWRCcsXFxuICAgICAgICB4ZzogJ+axn+a5lkQnLFxcbiAgICAgICAgYWw6ICfmsZ/muZZEJyxcXG4gICAgICAgIHBwOiAn5Lq65Lq66L+3JyxcXG4gICAgICAgIG1pOiAnMTA4MCcsXFxuICAgICAgICBsZTogJ+i/quWlpeWXheaOoicsXFxuICAgICAgICBvdGg6ICfpgZPplb/ku5PlupPpgJrlhY0nLFxcbiAgICAgICAgZnVuOiAn6J6N5YW0JyxcXG4gICAgICAgIG9uZTonMTA4MCcsXFxuICAgICAgICBxanU6ICfpu5jorqQnLFxcbiAgICAgICAgY2o6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJ1xcbiAgICB9O1xcblxcbmxldCBmbG9vcnMgPSAn4pGg4pGh4pGi4pGj4pGk4pGl4pGm4pGn4pGo4pGp77yR77yS77yT77yU77yV77yW77yX77yY77yZ77yQ4pKI4pKJ4pKK4pKL4pKM4pKN4pKO4pKP4pKQJy5zcGxpdCgnJyk7XFxubGV0IGVtb2ppcyA9ICcj77iP4oOjfCrvuI/ig6N8MO+4j+KDo3wx77iP4oOjfDLvuI/ig6N8M++4j+KDo3w077iP4oOjfDXvuI/ig6N8Nu+4j+KDo3w377iP4oOjfDjvuI/ig6N8Oe+4j+KDo3zwn4Ww77iPfPCfhbHvuI988J+Nh3zwn42IfPCfjYl88J+Ninzwn42LfPCfjYx88J+NjXzwn42OfPCfjY988J+NkHzwn42RfPCfjZJ88J+Nk3zwn42FfPCfjYZ88J+MvXzwn42EfPCfjLB88J+Nnnzwn42WfPCfjZd88J+NlHzwn42ffPCfjZV88J+Ns3zwn42yfPCfjbF88J+NmHzwn42ZfPCfjZp88J+Nm3zwn42cfPCfjZ188J+NoHzwn42ifPCfjaN88J+NpHzwn42lfPCfjaF88J+Npnzwn42nfPCfjah88J+NqXzwn42qfPCfjoJ88J+NsHzwn42rfPCfjax88J+NrXzwn42ufPCfja988J+NvHzimJV88J+NtXzwn422fPCfjbd88J+NuHzwn425fPCfjbp88J+Nu3zwn420Jy5zcGxpdCgnfCcpO1xcbmZsb29ycyA9IGZsb29ycy5jb25jYXQoZW1vamlzKTtcXG4kLmV4cG9ydHMuZGVtb0RhdGEgPSBkZW1vRGF0YTtcXG4kLmV4cG9ydHMuZGVmYXVsdFNldHMgPSBkZWZhdWx0U2V0cztcXG4kLmV4cG9ydHMuZmxvb3JzID0gZmxvb3JzO1wifSx7XCJuYW1lXCI6XCLlt6XlhbfnsbtcIixcInBhdGhcIjpcInV0aWxzXCIsXCJydWxlXCI6XCJqczpcXG4vL+maj+acuuS7juWIl+ihqOaKveWPluS4gOS4quWFg+e0oFxcbmZ1bmN0aW9uIGdldE9uZShpdHMpIHtyZXR1cm4gIGl0c1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqaXRzLmxlbmd0aCldO31cXG4vL+WOu+mHje+8iEVTNiBTZXTvvIlcXG5mdW5jdGlvbiB1bmlxdWUyKGFycmF5KXtcXG4gICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChhcnJheSkpO1xcbn1cXG4vL+iOt+WPluWIl+ihqOS4remHjeWkjemDveWAvFxcbmZ1bmN0aW9uIGR1cGxpY2F0ZXMoYXJyKSB7XFxuICAgIGxldCByZXM9YXJyLmZpbHRlcigoeCxrKT0+e1xcbiAgICAgICAgbGV0IGE9ayoxKzE7XFxuICAgICAgICBsZXQgaW5kZXg9YXJyLmluZGV4T2YoeCxhKTtcXG4gICAgICAgIGlmKGluZGV4Pi0xKXtcXG4gICAgICAgICAgICByZXR1cm4geDtcXG4gICAgICAgIH1cXG4gICAgfSlcXG4gICAgbGV0IHJlPW5ldyBTZXQocmVzKTtcXG4gICAgcmV0dXJuIEFycmF5LmZyb20ocmUpO1xcbn1cXG4kLmV4cG9ydHMuZ2V0T25lID0gZ2V0T25lO1xcbiQuZXhwb3J0cy51bmlxdWUyID0gdW5pcXVlMjtcXG4kLmV4cG9ydHMuZHVwbGljYXRlcyA9IGR1cGxpY2F0ZXM7XCJ9LHtcIm5hbWVcIjpcIuino+aekOeuoeeQhlwiLFwicGF0aFwiOlwianhNYW5hZ2VcIixcInJ1bGVcIjpcImpzOlxcbmZ1bmN0aW9uIGp4TWFuYWdlKCl7XFxuICAgIGNvbnN0IHtjb2xvcixzbWFsbH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS91dGlsaXk/cnVsZT3pgZPplb/ku5PlupNQcm9cXFwiKTtcXG4gICAgbGV0IGQgPSBbXTtcXG4gICAgbGV0IG9wdGlvbnMgPSBbJ+mAieaLqScsJ+S/ruaUuScsJ+WIoOmZpCcsJ+WvvOWHuiddO1xcblxcbiAgICBmb3IobGV0IGkgaW4gb3B0aW9ucyl7XFxuICAgICAgICBsZXQgb3B0aW9uID0gb3B0aW9uc1tpXTtcXG4gICAgICAgIGxldCBmbGFnID0gZ2V0VmFyKCdkbi5qeG1fb3B0aW9uJywn6YCJ5oupJyk9PT1vcHRpb24/J/CfkYknOicnO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTpmbGFnK29wdGlvbixcXG4gICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKG9wdGlvbik9PntcXG4gICAgICAgICAgICAgICAgcHV0VmFyKCdkbi5qeG1fb3B0aW9uJywgb3B0aW9uKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSxvcHRpb24pLFxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgbGV0IGp4c1JvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlKaWV4aS5qc29uXFxcIjtcXG4gICAgbGV0IE15SmlleGkgPSB7amlleGlzOltdfTtcXG4gICAgbGV0IGppZXhpcyA9IHt9O1xcbiAgICB0cnkge1xcbiAgICAgICAgTXlKaWV4aSA9IEpTT04ucGFyc2UoZmV0Y2goanhzUm91dGUpKTtcXG4gICAgICAgIGppZXhpcyA9IE15SmlleGkuamlleGlzLmZpbHRlcihpdD0+aXQubmFtZT09PU15SmlleGkubm93KVswXTtcXG4gICAgfWNhdGNoIChlKSB7fVxcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6J+WvvOWFpScsXFxuICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICB1cmw6JCgnJywn6K+36L6T5YWl5a+85YWl5Y+j5LukJykuaW5wdXQoKE15SmlleGksanhzUm91dGUpPT57XFxuICAgICAgICAgICAgaWYoL17prZTmlq3op6PmnpDphY3nva5ALio/QGh0dHAvLnRlc3QoaW5wdXQpKXtcXG4gICAgICAgICAgICAgICAgbGV0IG5hbWUgPSBpbnB1dC5zcGxpdCgnQCcpWzFdO1xcbiAgICAgICAgICAgICAgICBsZXQgdXJsID0gaW5wdXQuc3BsaXQoJ0AnKVsyXTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoJ+ehruWumuimgeWvvOWFpeaWreaPkuino+aekOmFjee9ri0nK25hbWUrJyDlkJc/JykuY29uZmlybSgobmFtZSx1cmwsTXlKaWV4aSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gcGFyc2VQYXN0ZSh1cmwpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhhc0l0ID0gTXlKaWV4aS5qaWV4aXMuZmlsdGVyKGl0PT5pdC5uYW1lPT09bmFtZSk7XFxuICAgICAgICAgICAgICAgICAgICBpZihoYXNJdCYmaGFzSXQubGVuZ3RoPjApe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZCA9IG51bGw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBqIGluIE15SmlleGkuamlleGlzKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoTXlKaWV4aS5qaWV4aXNbal0ubmFtZSA9PT0gbmFtZSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGo7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBpZighaWQpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v57Si5byV6ZSZ6K+v5peg5rOV6KaG55uW5a+85YWlOlxcXFxuJytpZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2coJ+imhuebluWvvOWFpeS4u+mimGlkOicraWQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIE15SmlleGkuamlleGlzW2lkXSA9IE9iamVjdC5hc3NpZ24oSlNPTi5wYXJzZShiYXNlNjREZWNvZGUoY29udGVudCkpLHsnbmFtZSc6bmFtZX0pO1xcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXMucHVzaChPYmplY3QuYXNzaWduKEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKGNvbnRlbnQpKSx7J25hbWUnOm5hbWV9KSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5oiQ5Yqf5a+85YWl6Kej5p6Q6YWN572uOlxcXFxuJytuYW1lXFxuICAgICAgICAgICAgICAgIH0sbmFtZSx1cmwsTXlKaWV4aSxqeHNSb3V0ZSk7XFxuICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ml6Dms5Xor4bliKvnmoTlr7zlhaXlj6Pku6Q6XFxcXG4nK2lucHV0O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sTXlKaWV4aSxqeHNSb3V0ZSksXFxuICAgIH0pO1xcblxcbiAgICBsZXQgaXNBdXRvID0gTXlKaWV4aS5pc0F1dG87XFxuICAgIGxldCBhdXRvTW9kZSA9IE15SmlleGkuYXV0b01vZGU7XFxuICAgIGxldCB0aXBzID0gJ+ino+aekOmFjee9ruWIl+ihqDrlhbHorqE6Jytjb2xvcihNeUppZXhpLmppZXhpcy5sZW5ndGgsJyNmZjcwMDAnKSsn5Liq6YWN572uLOiHquWKqOaho+W8gOWFszonK2NvbG9yKGlzQXV0bz8n5byAJzon5YWzJywnI2ZmNzAwMCcpO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6TXlKaWV4aS5qaWV4aXMmJk15SmlleGkuamlleGlzLmxlbmd0aD4wP3RpcHM6XFxcIuesrOS4gOasoeWKoOi9ve+8jOeCueatpOi/m+WOu+WIneWni+WMluino+aekOWIl+ihqFxcXCIsXFxuICAgICAgICBjb2xfdHlwZTondGV4dF8xJyxcXG4gICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChNeUppZXhpLGp4c1JvdXRlKT0+e1xcbiAgICAgICAgICAgIGlmKE15SmlleGkuamlleGlzJiZNeUppZXhpLmppZXhpcy5sZW5ndGg+MCl7XFxuICAgICAgICAgICAgICAgIE15SmlleGkuaXNBdXRvID0gIU15SmlleGkuaXNBdXRvO1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgbGV0IHRpcHMgPSBNeUppZXhpLmlzQXV0bz8n5byAJzon5YWzJztcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suiuvue9ruiHquWKqOaho+aooeW8j+S4ujonK3RpcHNcXG4gICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgbGV0IGluaXRTZXQgPSB7J25vdyc6XFxcIumBk+mVv+aOqOiNkFxcXCIsJ2ppZXhpcyc6W3tuYW1lOifpgZPplb/mjqjojZAnLHF5Olsn5L2g54i556eR5oqAJ10seWs6WyfpoobphbcnXSx0eDpbJ+iNo+iAgCddLG1nOlsn6JqC6JqB5YWE5byfJ10sYmw6WydPS+ino+aekCddLHNoOlsn5rGf5rmWRCddLHhnOlsn5rGf5rmWRCddLGFsOlsn5rGf5rmWRCddLHBwOlsn5Lq65Lq66L+3J10sbWk6WycxMDgwJ10sbGU6Wyfov6rlpaXll4XmjqInXSxmdW46Wyfono3lhbQnXSxvbmU6WycxMDgwJ119XX07XFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShpbml0U2V0KSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S6Kej5p6Q6YWN572u5bey5Yid5aeL5YyWJ1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sTXlKaWV4aSxqeHNSb3V0ZSlcXG4gICAgfSk7XFxuICAgIGxldCBhdXRvTW9kZVRpcHMgPSBhdXRvTW9kZT09PSfpgJ/luqbkvJjlhYgnPyfpgJ/luqbkvJjlhYgnOifpobrluo/kvJjlhYgnO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6c21hbGwoXFxcIuWkh+iDjuWuoOW5uOaWueahiDpcXFwiKStjb2xvcihhdXRvTW9kZVRpcHMsJyNmZjcwMDAnKSxcXG4gICAgICAgIGNvbF90eXBlOid0ZXh0XzInLFxcbiAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKE15SmlleGksanhzUm91dGUpPT57XFxuICAgICAgICAgICAgTXlKaWV4aS5hdXRvTW9kZSA9IE15SmlleGkuYXV0b01vZGU9PT0n6YCf5bqm5LyY5YWIJz8n6aG65bqP5LyY5YWIJzon6YCf5bqm5LyY5YWIJztcXG4gICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lorr7nva7lpIfog47lrqDlubjmlrnmoYjkuLo6JytNeUppZXhpLmF1dG9Nb2RlXFxuICAgICAgICB9LE15SmlleGksanhzUm91dGUpXFxuICAgIH0pO1xcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6Y29sb3IoXFxcIuaBouWkjeWHuuWOguiuvue9rlxcXCIsJyNmZjcwMDAnKSxcXG4gICAgICAgIGNvbF90eXBlOid0ZXh0XzInLFxcbiAgICAgICAgdXJsOiQoXFxcIuWmguaenOS9oOeahOino+aekOeuoeeQhuaXoOazleato+W4uOeUqOS6hu+8jOatpOaWueazleWPr+S7peaVkeeglu+8jOehruiupOaBouWkjT9cXFwiKS5jb25maXJtKChqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICBsZXQgaW5pdFNldCA9IHsnbm93JzpcXFwi6YGT6ZW/5o6o6I2QXFxcIiwnamlleGlzJzpbe25hbWU6J+mBk+mVv+aOqOiNkCcscXk6WyfkvaDniLnnp5HmioAnXSx5azpbJ+mihumFtyddLHR4Olsn6I2j6ICAJ10sbWc6WyfomoLomoHlhYTlvJ8nXSxibDpbJ09L6Kej5p6QJ10sc2g6WyfmsZ/muZZEJ10seGc6WyfmsZ/muZZEJ10sYWw6WyfmsZ/muZZEJ10scHA6Wyfkurrkurrov7cnXSxtaTpbJzEwODAnXSxsZTpbJ+i/quWlpeWXheaOoiddLGZ1bjpbJ+iejeWFtCddLG9uZTpbJzEwODAnXSx9XX07XFxuICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KGluaXRTZXQpKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S6Kej5p6Q6YWN572u5bey6YeN572u5Li65Ye65Y6C6K6+572uJ1xcbiAgICAgICAgfSxqeHNSb3V0ZSlcXG4gICAgfSk7XFxuXFxuICAgIGZvcihsZXQgaSBpbiBNeUppZXhpLmppZXhpcyl7XFxuICAgICAgICBsZXQgbm93SnggPSBNeUppZXhpLmppZXhpc1tpXTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6TXlKaWV4aS5ub3c9PT1ub3dKeC5uYW1lPyfwn5GJJytub3dKeC5uYW1lOm5vd0p4Lm5hbWUsXFxuICAgICAgICAgICAgY29sX3R5cGU6J2ZsZXhfYnV0dG9uJyxcXG4gICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICAgIG5vd0p4Om5vd0p4LFxcbiAgICAgICAgICAgICAgICBNeUppZXhpOk15SmlleGksXFxuICAgICAgICAgICAgICAgIGp4c1JvdXRlOmp4c1JvdXRlXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobm93SngsTXlKaWV4aSxpLGp4c1JvdXRlKT0+e1xcbiAgICAgICAgICAgICAgICBsZXQgb3B0aW9uID0gZ2V0VmFyKCdkbi5qeG1fb3B0aW9uJywn6YCJ5oupJyk7XFxuICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0aW9uKXtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WvvOWHuic6XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5vd0p4Q29kZSA9IGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeShub3dKeCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBzaGFyZVBhc3RlKG5vd0p4Q29kZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSAn6a2U5pat6Kej5p6Q6YWN572uQCcrbm93SngubmFtZSsnQCcrdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkoY29kZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWvvOWHuuS4uuS6keWPo+S7pOW5tuWkjeWItuWIsOWJquWIh+advydcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+S/ruaUuSc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYobm93SngubmFtZT09PU15SmlleGkubm93KXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgcmV0dXJuICd0b2FzdDovL+atpOino+aekOmFjee9ruW9k+WJjeato+WcqOS9v+eUqOS4re+8jOS4jeWFgeiuuOS/ruaUuSEnXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL2p4RWRpdD9ydWxlPU15RmllbGThtLDigb8nXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL2p4RWRpdD9ydWxlPU15RmllbGThtLDigb8nXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfliKDpmaQnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCfnoa7orqTliKDpmaTop6PmnpDphY3nva46Jytub3dKeC5uYW1lKyc/JykuY29uZmlybSgobm93SngsTXlKaWV4aSxpLGp4c1JvdXRlKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihub3dKeC5uYW1lPT09TXlKaWV4aS5ub3cpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+atpOino+aekOmFjee9ruW9k+WJjeato+WcqOS9v+eUqOS4re+8jOS4jeWFgeiuuOWIoOmZpCEnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXMuc3BsaWNlKGksMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5Yig6ZmkJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sbm93SngsTXlKaWV4aSxpLGp4c1JvdXRlKVxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLm5vdz1ub3dKeC5uYW1lO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S9oOmAieaLqeS6hicrbm93SngubmFtZSsn5L2c5Li65b2T5YmN6Kej5p6Q6YWN572uJztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sbm93SngsTXlKaWV4aSxpLGp4c1JvdXRlKSxcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIHNldFJlc3VsdChkKTtcXG59XFxuJC5leHBvcnRzLmp4TWFuYWdlPWp4TWFuYWdlO1wifSx7XCJuYW1lXCI6XCLop6PmnpDnvJbovpFcIixcInBhdGhcIjpcImp4RWRpdFwiLFwicnVsZVwiOlwianM6XFxubGV0IHtub3dKeCxNeUppZXhpLGp4c1JvdXRlfSA9IE1ZX1BBUkFNUztcXG5sZXQgbm93SnhUID0gSlNPTi5wYXJzZShnZXRWYXIoJ2RuLm5vd0p4Jyl8fCd7fScpO1xcbm5vd0p4ID0gbm93SnhULm5hbWU/bm93SnhUOm5vd0p4O1xcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoKT0+e1xcbiAgICBjbGVhclZhcihcXFwiZG4uanhfdGl0bGVzXFxcIik7XFxuICAgIGNsZWFyVmFyKFxcXCJkbi5ub3dKeFxcXCIpO1xcbiAgICBjbGVhclZhcihcXFwiZG4uanhtX25hbWVcXFwiKTtcXG59KSk7XFxubGV0IGlkID0gbnVsbDtcXG5mb3IobGV0IGogaW4gTXlKaWV4aS5qaWV4aXMpe1xcbiAgICBpZihNeUppZXhpLmppZXhpc1tqXS5uYW1lID09PSBub3dKeC5uYW1lKXtcXG4gICAgICAgIGlkID0gajtcXG4gICAgICAgIGJyZWFrO1xcbiAgICB9XFxufVxcbmxldCBkID0gW107XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfphY3nva7lkI3np7AnLFxcbiAgICBkZXNjOiBcXFwi6Kej5p6Q6YWN572u5ZCN56ewLOWmgumBk+mVv+aOqOiNkFxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBvbkNoYW5nZTogXFxcInB1dFZhcignZG4uanhtX25hbWUnLGlucHV0KVxcXCIsXFxuICAgICAgICB0aXRsZVZpc2libGU6IHRydWUsXFxuICAgICAgICBkZWZhdWx0VmFsdWU6Z2V0VmFyKCdkbi5qeG1fbmFtZScsJycpfHxub3dKeC5uYW1lXFxuICAgIH0sXFxuICAgIGNvbF90eXBlOidpbnB1dCdcXG59KTtcXG4vLyBsZXQgb3B0aW9ucyA9IFsn6YCJ5oupJywn5paw5aKeJywn5Yig6ZmkJywn5om56YeP5Yig6ZmkJywn56e75YqoJ107XFxubGV0IG9wdGlvbnMgPSBbJ+aWsOWinicsJ+WIoOmZpCcsJ+enu+WKqCddO1xcblxcbmZvcihsZXQgaSBpbiBvcHRpb25zKXtcXG4gICAgbGV0IG9wdGlvbiA9IG9wdGlvbnNbaV07XFxuICAgIGxldCBmbGFnID0gZ2V0VmFyKCdkbi5qeG1fd3JpdGVNb2RlJywn5paw5aKeJyk9PT1vcHRpb24/J/CfkYknOicnO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ZmxhZytvcHRpb24sXFxuICAgICAgICAvLyBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICBjb2xfdHlwZTonZmxleF9idXR0b24nLFxcbiAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKG9wdGlvbik9PntcXG4gICAgICAgICAgICBwdXRWYXIoJ2RuLmp4bV93cml0ZU1vZGUnLCBvcHRpb24pO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICB9LG9wdGlvbiksXFxuICAgIH0pO1xcbn1cXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTonbGluZSdcXG59KTtcXG4vL+iOt+WPluaWreaPkuWIl+ihqFxcbmlmKCFnZXRWYXIoXFxcImRuLmp4X3RpdGxlc1xcXCIpKXtcXG4gICAgbGV0IHRpdGxlQXJyID0gW10sIHVybEFyciA9IFtdO1xcbiAgICB2YXIganNvbj17dGl0bGU6W10sY29kZXM6e319O1xcbiAgICBsZXQgc2V0RmlsZSA9IHJlcXVlc3QoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJyk7XFxuICAgIHRyeSB7XFxuICAgICAgICBldmFsKCdqc29uPScrc2V0RmlsZSk7XFxuICAgIH1jYXRjaCAoZSkge1xcbiAgICAgICAgbG9nKCdKc29u6Kej5p6Q5Y+R55Sf5LqG6ZSZ6K+vOicrZS5tZXNzYWdlKTtcXG4gICAgfVxcbiAgICB0aXRsZUFyciA9IGpzb24udGl0bGU7XFxuICAgIHRpdGxlQXJyLmZvckVhY2goKGl0KSA9PiB7XFxuICAgICAgICB1cmxBcnIucHVzaChqc29uLmNvZGVzW2l0XSk7XFxuICAgIH0pO1xcbiAgICBwdXRWYXIoJ2RuLmp4X3RpdGxlcycsSlNPTi5zdHJpbmdpZnkodGl0bGVBcnIpKTtcXG59XFxuXFxubGV0IHRpdGxlcyA9IEpTT04ucGFyc2UoZ2V0VmFyKCdkbi5qeF90aXRsZXMnKXx8J1tdJyk7XFxubGV0IHRpdGxlRGljID0ge1xcbiAgICBhbDon6Zi/6YeMJyxibDon5ZOU5ZOp5ZOU5ZOpJyxmdW46J+mjjuihjCcsbGU6J+S5kOinhicsbWc6J+iKkuaenCcsbWk6J+WSquWSlScscHA6J1BQVFYnLHF5OifniLHlpYfoibonLHNoOifmkJzni5AnLFxcbiAgICB0eDon6IW+6K6vJyx4Zzon6KW/55OcJyx5azon5LyY6YW3JyxvbmU6JzE5MDUnXFxufVxcblxcbi8vLS0tLS0tLS0tLS0tLS0tLS1cXG5sZXQgamRzID0gT2JqZWN0LmtleXMobm93SngpLmZpbHRlcihpdD0+aXQhPT0nbmFtZScmJml0IT09J290aCcpO1xcbmZvcihsZXQgaiBpbiBqZHMpe1xcbiAgICBsZXQganhzID0gbm93SnhbamRzW2pdXXx8W107XFxuICAgIGxldCB0aXRsZSA9IGpkc1tqXTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOnRpdGxlRGljW3RpdGxlXXx8dGl0bGUsXFxuICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodGl0bGVzLHRpdGxlLGp4cyxqeHNSb3V0ZSxNeUppZXhpLG5vd0p4KT0+e1xcbiAgICAgICAgICAgIGlmKGdldFZhcignZG4uanhtX3dyaXRlTW9kZScsJ+aWsOWinicpPT09J+aWsOWinicpe1xcbiAgICAgICAgICAgICAgICBsZXQgc2VsX3RpdGxlID0gdGl0bGVzLmZpbHRlcihpdD0+IWp4cy5pbmNsdWRlcyhpdCkpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJChzZWxfdGl0bGUsMykuc2VsZWN0KChNeUppZXhpLGp4cyxub3dKeCx0aXRsZSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZCA9IG51bGw7XFxuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGogaW4gTXlKaWV4aS5qaWV4aXMpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKE15SmlleGkuamlleGlzW2pdLm5hbWUgPT09IG5vd0p4Lm5hbWUpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGo7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGlmKCFpZCl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+e0ouW8lemUmeivr+aXoOazleS/neWtmDpcXFxcbicraWRcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGp4cy5wdXNoKGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhqeHMpO1xcbiAgICAgICAgICAgICAgICAgICAgbm93SnhbdGl0bGVdID0ganhzO1xcbiAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdID0gbm93Sng7XFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2RuLm5vd0p4JyxKU09OLnN0cmluZ2lmeShub3dKeCkpO1xcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICB9LE15SmlleGksanhzLG5vd0p4LHRpdGxlLGp4c1JvdXRlKTtcXG4gICAgICAgICAgICB9ZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LHRpdGxlcyx0aXRsZSxqeHMsanhzUm91dGUsTXlKaWV4aSxub3dKeClcXG4gICAgfSk7XFxuICAgIGZvcihsZXQgayBpbiBqeHMpe1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTpqeHNba10sXFxuICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0aXRsZXMsdGl0bGUsanhzLGp4c1JvdXRlLE15SmlleGksbm93Sngsbmp4LGlkLGssbWF4KT0+e1xcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFZhcignZG4uanhtX3dyaXRlTW9kZScsJ+aWsOWinicpKXtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WIoOmZpCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKHZhbCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmluZGV4T2YodmFsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BsaWNlKGluZGV4LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAganhzLnJlbW92ZShuangpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vd0p4W3RpdGxlXSA9IGp4cztcXG4gICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpc1tpZF0gPSBub3dKeDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2RuLm5vd0p4JyxKU09OLnN0cmluZ2lmeShub3dKeCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn56e75YqoJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChrLCfnp7vliqjliLDntKLlvJXlpJrlsJE/JykuaW5wdXQoKGssbWF4LGp4cyxub3dKeCxNeUppZXhpLGlkLHRpdGxlLGp4c1JvdXRlKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBNb3ZlKGFyciwgZnJvbUluZGV4LCB0b0luZGV4KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IGFycltmcm9tSW5kZXhdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnNwbGljZShmcm9tSW5kZXgsIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnNwbGljZSh0b0luZGV4LCAwLCBlbGVtZW50KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihwYXJzZUludChpbnB1dCk9PT1rKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/llaXkuZ/msqHlgZonXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHBhcnNlSW50KGlucHV0KT5tYXgtMXx8cGFyc2VJbnQoaW5wdXQpPC0xKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kvaDmnIDlpKfnp7vliqjojIPlm7QwLScrcGFyc2VJbnQobWF4LTEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxldCBuZXdBciA9IGp4cy5zcGxpY2UoaywgMSk7IC8vIOWIoOaOiVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqeHMudW5zaGlmdChuZXdBclswXSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vdmUoanhzLGsscGFyc2VJbnQoaW5wdXQpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm93SnhbdGl0bGVdID0ganhzO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpc1tpZF0gPSBub3dKeDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdkbi5ub3dKeCcsSlNPTi5zdHJpbmdpZnkobm93SngpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LGssbWF4LGp4cyxub3dKeCxNeUppZXhpLGlkLHRpdGxlLGp4c1JvdXRlKVxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5q2k5YWD57Sg5LiN5pSv5oyB6L+b6KGMOicrZ2V0VmFyKCdkbi5qeG1fd3JpdGVNb2RlJywn5paw5aKeJylcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sdGl0bGVzLHRpdGxlLGp4cyxqeHNSb3V0ZSxNeUppZXhpLG5vd0p4LGp4c1trXSxpZCxrLGp4cy5sZW5ndGgpXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6J2xpbmUnXFxuICAgIH0pXFxufVxcblxcbmQucHVzaCh7XFxuICAgdGl0bGU6J+S/neWtmCcsXFxuICAgY29sX3R5cGU6J3RleHRfY2VudGVyXzEnLFxcbiAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChNeUppZXhpLGlkLGp4c1JvdXRlKT0+e1xcbiAgICAgICBpZihnZXRWYXIoJ2RuLmp4bV9uYW1lJywnJykhPT1NeUppZXhpLmppZXhpc1tpZF0ubmFtZSl7XFxuICAgICAgICAgICBpZkhhcyA9IE15SmlleGkuamlleGlzLmZpbHRlcihpdD0+aXQubmFtZT09PWdldFZhcignZG4uanhtX25hbWUnLCcnKSkubGVuZ3RoPjA7XFxuICAgICAgICAgICBpZihpZkhhcyl7XFxuICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W+heS/ruaUueeahOWQjeensOmHjeWkjSzkuI3lhYHorrjkv53lrZgnXFxuICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICBNeUppZXhpLmppZXhpc1tpZF0ubmFtZSA9ICBnZXRWYXIoJ2RuLmp4bV9uYW1lJywnJyk7XFxuICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXG4gICAgICAgICAgIH1cXG4gICAgICAgfVxcbiAgICAgICBiYWNrKHRydWUpO1xcbiAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5L+d5a2YJ1xcbiAgIH0sTXlKaWV4aSxpZCxqeHNSb3V0ZSlcXG59KTtcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcIm5hbWVcIjpcIuWwj+eZveaooeW8j1wiLFwicGF0aFwiOlwic21hbGxXaGl0ZVwiLFwicnVsZVwiOlwianM6XFxuc2V0UGFnZVRpdGxlKCfpgZPplb/nu5nlsI/nmb3nmoTlhbPniLEnKTtcXG5jb25zdCB7Y29sb3IsIHNtYWxsLGFwaX0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS91dGlsaXk/cnVsZT3pgZPplb/ku5PlupNQcm9cXFwiKTtcXG5sZXQgZmlsZVJvb3QgPSBhcGkuaG9zdCsnL2hpa2VydWxlL3p5d19kYXRhLyc7XFxuLy8gbG9nKGZpbGVSb290KTtcXG5sZXQgZCA9IFtdO1xcbnZhciB0aGVtZVJvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlUaGVtZS5qc29uXFxcIjtcXG52YXIgdGhlbWVPbmxpbmUgPSBmaWxlUm9vdCsnMTEnO1xcbnZhciBvbGRSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXCI7XFxudmFyIG9sZE9ubGluZSA9IGZpbGVSb290KycxMic7XFxudmFyIG5ld1JvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uXFxcIjtcXG52YXIgbmV3T25saW5lID0gZmlsZVJvb3QrJzEzJztcXG52YXIganhzUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeUppZXhpLmpzb25cXFwiO1xcbnZhciBqeE9ubGluZSA9IGZpbGVSb290KycxNCc7XFxudmFyIGNqY2FjaGUgPSAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcyc7XFxudmFyIHg1Y2FjaGUgPSAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5odG1sJztcXG5kLnB1c2goe1xcbiAgICB0aXRsZTpzbWFsbCgn5L2g5aW9LOWwj+eZvSzljbPkvb/llaXkuZ/kuI3kvJos5Lmf5Y+v5Lul55yL5piO55m95LiL6Z2i55qE5a2X5ZCnPycpLFxcbiAgICBkZXNjOiflpoLmnpzov5jmmK/kuI3kvJos6K+35Yig5Lul5rC45rK7LOWRiui+nuS4jeiwoicsXFxuICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcbiAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKT0+e1xcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+aNruivtOS9oOS4jeacjeawlCzkuI3mib/orqToh6rlt7HmmK/lsI/nmb0/XFxcXG7ngrnmiJHlj6rmmK/kuLrkuoblrqPms4TkuIDkuIvkvaDnmoTmhKTmgJI/5ZWl5Lmf5Yir6K+05LqGLOS4i+WOu+aQniEnXFxuICAgIH0pXFxufSk7XFxuZC5wdXNoKHtcXG4gICB0aXRsZTpzbWFsbCgn5Y2V6aG56Kej5p6Q6YCJ5oup55WM6Z2i5Li76aKY5piv5LuA5LmIPycpK2NvbG9yKCfkuI3nn6XpgZMs5p2l5LiA5Lu96YGT6ZW/55qEJywnIzVGQjg3OCcpLFxcbiAgICBkZXNjOifoh6rliqjmi4nlj5bpgZPplb/nmoTkuLvpopjphY3nva7ku6Xlj4rnvZHpobXmj5Lku7blkozpnZnmgIHpobXpnaInLFxcbiAgIGNvbF90eXBlOid0ZXh0XzEnLFxcbiAgIHVybDokKCfnoa7orqTlkJc/5aaC5p6c5L2g5LiN5piv5bCP55m977yM5oC76K+l5Lya5o+Q5YmN5aSH5Lu96Ieq5bex5Li76aKY55qE5ZCnIVxcXFxuJyt0aGVtZVJvdXRlKS5jb25maXJtKChjamNhY2hlLHg1Y2FjaGUsdGhlbWVSb3V0ZSx0aGVtZU9ubGluZSk9PntcXG4gICAgICAgbGV0IHRoZW1lQ29kZSA9IGZldGNoKHRoZW1lT25saW5lKTtcXG4gICAgICAgaWYoIS9ub3dfdGhlbWUvLnRlc3QodGhlbWVDb2RlKSl7XFxuICAgICAgICAgICBsb2codGhlbWVDb2RlKTtcXG4gICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lpLHotKUh5LiO6YGT6ZW/5pyN5Yqh5Zmo6YCa6K6v6ZSZ6K+vLOS8sOiuoeaYr+e9kee7nOWNoeS6hidcXG4gICAgICAgfVxcbiAgICAgICBsZXQgY2pGcm9tID0gXFxcImhpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb9cXFwiO1xcbiAgICAgICBsZXQgeDVGcm9tID0gXFxcImhpa2VyOi8vcGFnZS9QYXJzZV9Ebi5odG1sP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCI7XFxuICAgICAgIHRyeSB7XFxuICAgICAgICAgICBsZXQgY2pGaWxlID0gSlNPTi5wYXJzZShmZXRjaChjakZyb20pKS5ydWxlO1xcbiAgICAgICAgICAgbGV0IHg1RmlsZSA9IEpTT04ucGFyc2UoZmV0Y2goeDVGcm9tKSkucnVsZTtcXG4gICAgICAgICAgIHdyaXRlRmlsZShjamNhY2hlLCBjakZpbGUpO1xcbiAgICAgICAgICAgd3JpdGVGaWxlKHg1Y2FjaGUsIHg1RmlsZSk7XFxuICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSwgdGhlbWVDb2RlKTtcXG4gICAgICAgICAgIGNsZWFyVmFyKFxcXCJqeE9sZFZcXFwiKTtcXG4gICAgICAgICAgIGNsZWFyVmFyKFxcXCJqeE5ld1ZcXFwiKTtcXG4gICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kuLvpopjlt7LmiJDlip/lupTnlKgnXFxuICAgICAgIH1cXG4gICAgICAgY2F0Y2goZSl7XFxuICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5Li76aKY5bqU55So5aSx6LSlXFxcXG7mnKrmnJ/mnJvnmoTplJnor686JytlLm1lc3NhZ2U7XFxuICAgICAgIH1cXG4gICB9LGNqY2FjaGUseDVjYWNoZSx0aGVtZVJvdXRlLHRoZW1lT25saW5lKVxcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOnNtYWxsKCfmlq3mj5Lop6PmnpDlj4rpu5jorqTliJfooajmmK/ku4DkuYg/JykrY29sb3IoJ+S4jeefpemBkyzmnaXkuIDku73pgZPplb/nmoQnLCcjNUZCODc4JyksXFxuICAgIGRlc2M6J+iHquWKqOaLieWPlumBk+mVv+WcqOeUqOeahOS4pOS4qk15UGFyc2UuanNvbuaWh+S7ticsXFxuICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcbiAgICB1cmw6JCgn56Gu6K6k5ZCXP+WmguaenOS9oOS4jeaYr+Wwj+eZve+8jOaAu+ivpeS8muaPkOWJjeWkh+S7veiHquW3seeahOmFjee9ruaWh+S7tuWQpyFcXFxcbicrb2xkUm91dGUrJ1xcXFxuJytuZXdSb3V0ZSkuY29uZmlybSgob2xkUm91dGUsb2xkT25saW5lLG5ld1JvdXRlLG5ld09ubGluZSk9PntcXG4gICAgICAgIGxldCBvbGRDb2RlID0gZmV0Y2gob2xkT25saW5lKTtcXG4gICAgICAgIGxldCBuZXdDb2RlID0gZmV0Y2gobmV3T25saW5lKTtcXG4gICAgICAgIGlmKCEvUGFyc2VfRG5cXFxcLmpzLy50ZXN0KG9sZENvZGUpfHwhL1BhcnNlX0RuXFxcXC5qcy8udGVzdChuZXdDb2RlKSl7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+Wksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcbiAgICAgICAgfVxcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB3cml0ZUZpbGUob2xkUm91dGUsIG9sZENvZGUpO1xcbiAgICAgICAgICAgIHdyaXRlRmlsZShuZXdSb3V0ZSwgbmV3Q29kZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aWreaPkuino+aekOmFjee9ruWPium7mOiupOWIl+ihqOW3sue7j+mFjee9ruaIkOWKnydcXG4gICAgICAgIH1cXG4gICAgICAgIGNhdGNoKGUpe1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/phY3nva7lupTnlKjlpLHotKVcXFxcbuacquacn+acm+eahOmUmeivrzonK2UubWVzc2FnZTtcXG4gICAgICAgIH1cXG4gICAgfSxvbGRSb3V0ZSxvbGRPbmxpbmUsbmV3Um91dGUsbmV3T25saW5lKVxcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOnNtYWxsKCfmlq3mj5Lop6PmnpDoh6rliqjmoaPmqKHlvI/mmK/ku4DkuYg/JykrY29sb3IoJ+S4jeefpemBkyzmnaXkuIDku73pgZPplb/nmoQnLCcjNUZCODc4JyksXFxuICAgIGRlc2M6J+iHquWKqOaLieWPlumBk+mVv+WcqOeUqOeahE15SmlleGkuanNvbuaWh+S7ticsXFxuICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcbiAgICB1cmw6JCgn56Gu6K6k5ZCXP+WmguaenOS9oOS4jeaYr+Wwj+eZve+8jOaAu+ivpeS8muaPkOWJjeWkh+S7veiHquW3seeahOiHquWKqOaho+aWueahiOWQpyFcXFxcbicranhzUm91dGUpLmNvbmZpcm0oKGp4c1JvdXRlLGp4T25saW5lKT0+e1xcbiAgICAgICAgbGV0IGp4Q29kZSA9IGZldGNoKGp4T25saW5lKTtcXG4gICAgICAgIGlmKCEvamlleGlzLy50ZXN0KGp4Q29kZSkpe1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lpLHotKUh5LiO6YGT6ZW/5pyN5Yqh5Zmo6YCa6K6v6ZSZ6K+vLOS8sOiuoeaYr+e9kee7nOWNoeS6hidcXG4gICAgICAgIH1cXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLCBqeENvZGUpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlq3mj5Lop6PmnpDphY3nva7lj4rpu5jorqTliJfooajlt7Lnu4/phY3nva7miJDlip8nXFxuICAgICAgICB9XFxuICAgICAgICBjYXRjaChlKXtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6Ieq5Yqo5qGj5bqU55So5aSx6LSlXFxcXG7mnKrmnJ/mnJvnmoTplJnor686JytlLm1lc3NhZ2U7XFxuICAgICAgICB9XFxuICAgIH0sanhzUm91dGUsanhPbmxpbmUpXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6c21hbGwoJ+ecn+eahOWVpeS5n+S4jeS8muS6hizov5jmh5LlvpfkuIDkuKrkuKrngrk/JykrY29sb3IoJ+S4jeefpemBkyzmnaXkuIDku73pgZPplb/nmoQnLCcjNUZCODc4JyksXFxuICAgIGRlc2M6J+iHquWKqOaLieWPlumBk+mVv+WcqOeUqOeahOS4iui/sOaJgOacieaWh+S7tlxcXFxu5LiA6ZSu5pCe5a6M55u05o6l5Y675pSv5oyB5pat5o+S55qE5bCP56iL5bqP55yL6KeG6aKR5bCx6KGM5ZWmJyxcXG4gICAgY29sX3R5cGU6J3RleHRfMScsXFxuICAgIHVybDokKCfkv67ku5nms5Xlipvml6DovrknLCfnoa7orqTlkJc/5aaC5p6c5L2g5LiN5piv5bCP55m977yM5oC76K+l5Lya5o+Q5YmN5aSH5Lu96Ieq5bex55qE5LiK6L+w5omA5pyJ5paH5Lu25ZCnIVxcXFxu6K+36L6T5YWl6YGT6ZW/5L+u5LuZ5rOV5Yqb5peg6L655p2l56Gu6K6k5omn6KGM5q2k5pON5L2cJykuaW5wdXQoKGNqY2FjaGUseDVjYWNoZSx0aGVtZVJvdXRlLG9sZFJvdXRlLG5ld1JvdXRlLGp4c1JvdXRlLHRoZW1lT25saW5lLG9sZE9ubGluZSxuZXdPbmxpbmUsanhPbmxpbmUpPT57XFxuICAgICAgICBpZihpbnB1dCE9PSfpgZPplb/kv67ku5nms5Xlipvml6DovrknKXtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pys5qyh5Y+W5raI5omn6KGMJ1xcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IHRoZW1lQ29kZSA9IGZldGNoKHRoZW1lT25saW5lKTtcXG4gICAgICAgIGlmKCEvbm93X3RoZW1lLy50ZXN0KHRoZW1lQ29kZSkpe1xcbiAgICAgICAgICAgIGxvZygndGhlbWVDb2RlOicrdGhlbWVDb2RlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ouJ5Li76aKY5aSx6LSlIeS4jumBk+mVv+acjeWKoeWZqOmAmuiur+mUmeivryzkvLDorqHmmK/nvZHnu5zljaHkuoYnXFxuICAgICAgICB9XFxuICAgICAgICBsZXQgY2pGcm9tID0gXFxcImhpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb9cXFwiO1xcbiAgICAgICAgbGV0IHg1RnJvbSA9IFxcXCJoaWtlcjovL3BhZ2UvUGFyc2VfRG4uaHRtbD9ydWxlPU15RmllbGThtLDigb9cXFwiO1xcbiAgICAgICAgbGV0IGNqRmlsZSA9IEpTT04ucGFyc2UoZmV0Y2goY2pGcm9tKSkucnVsZTtcXG4gICAgICAgIGxldCB4NUZpbGUgPSBKU09OLnBhcnNlKGZldGNoKHg1RnJvbSkpLnJ1bGU7XFxuICAgICAgICBsZXQgb2xkQ29kZSA9IGZldGNoKG9sZE9ubGluZSk7XFxuICAgICAgICBsZXQgbmV3Q29kZSA9IGZldGNoKG5ld09ubGluZSk7XFxuICAgICAgICBpZighL1BhcnNlX0RuXFxcXC5qcy8udGVzdChvbGRDb2RlKXx8IS9QYXJzZV9EblxcXFwuanMvLnRlc3QobmV3Q29kZSkpe1xcbiAgICAgICAgICAgIC8vIGxvZygnb2xkQ29kZTonK29sZENvZGUpO1xcbiAgICAgICAgICAgIC8vIGxvZygnbmV3Q29kZTonK25ld0NvZGUpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lpLHotKUh5LiO6YGT6ZW/5pyN5Yqh5Zmo6YCa6K6v6ZSZ6K+vLOS8sOiuoeaYr+e9kee7nOWNoeS6hidcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBqeENvZGUgPSBmZXRjaChqeE9ubGluZSk7XFxuICAgICAgICBpZighL2ppZXhpcy8udGVzdChqeENvZGUpKXtcXG4gICAgICAgICAgICAvLyBsb2coJ2p4Q29kZTonK2p4Q29kZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+Wksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcbiAgICAgICAgfVxcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB3cml0ZUZpbGUoY2pjYWNoZSwgY2pGaWxlKTsgLy8g5ouJ5o+S5Lu2XFxuICAgICAgICAgICAgd3JpdGVGaWxlKHg1Y2FjaGUsIHg1RmlsZSk7IC8v5ouJ572R6aG15paH5Lu2XFxuICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsIHRoZW1lQ29kZSk7IC8v5ouJ5Li76aKY5paH5Lu2XFxuICAgICAgICAgICAgY2xlYXJWYXIoXFxcImp4T2xkVlxcXCIpO1xcbiAgICAgICAgICAgIGNsZWFyVmFyKFxcXCJqeE5ld1ZcXFwiKTtcXG4gICAgICAgICAgICB3cml0ZUZpbGUob2xkUm91dGUsIG9sZENvZGUpOyAvL+aLieaWreaPkum7mOiupOmAieaLqeeVjOmdoueahOmFjee9rlxcbiAgICAgICAgICAgIHdyaXRlRmlsZShuZXdSb3V0ZSwgbmV3Q29kZSk7IC8v5ouJ5pat5o+S5YaF55qE6Kej5p6QXFxuICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLCBqeENvZGUpOyAvLyDmi4noh6rliqjmoaPmlofku7ZcXG4gICAgICAgICAgICBiYWNrKHRydWUpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlq3mj5Lop6PmnpDphY3nva7lj4rpu5jorqTliJfooajlt7Lnu4/phY3nva7miJDlip8nXFxuICAgICAgICB9XFxuICAgICAgICBjYXRjaChlKXtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5LiA6ZSu5qih5byP5bqU55So5aSx6LSlXFxcXG7mnKrmnJ/mnJvnmoTplJnor686JytlLm1lc3NhZ2U7XFxuICAgICAgICB9XFxuICAgIH0sY2pjYWNoZSx4NWNhY2hlLHRoZW1lUm91dGUsb2xkUm91dGUsbmV3Um91dGUsanhzUm91dGUsdGhlbWVPbmxpbmUsb2xkT25saW5lLG5ld09ubGluZSxqeE9ubGluZSlcXG59KTtcXG5sZXQgZGVzY0luZm8gPSAn5Li76aKY5paH5Lu2OicrdGhlbWVSb3V0ZSsnXFxcXG7kuLvnlYzpnaLphY3nva46JytvbGRSb3V0ZSsnXFxcXG7lq5bliLDnmoTop6PmnpA6JytuZXdSb3V0ZSsnXFxcXG7oh6rliqjmoaPop6PmnpA6JytqeHNSb3V0ZTtcXG5kZXNjSW5mbys9J1xcXFxu5Li75o+S5Lu2OicrY2pjYWNoZSsnXFxcXG7kuLvphY3nva7pgInmi6nnlYzpnaLmlofku7Y6Jyt4NWNhY2hlO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOifmlofku7bmj4/ov7A6XFxcXG4nK2Rlc2NJbmZvLFxcbiAgICBjb2xfdHlwZTonbG9uZ190ZXh0JyxcXG4gICAgZXh0cmE6e3RleHRTaXplOiAxMyxsaW5lVmlzaWJsZTpmYWxzZX1cXG59KTtcXG5zZXRSZXN1bHQoZCk7XCJ9XSxcInNhdmVkXCI6ZmFsc2UsXCJ0aXRsZVwiOlwiTXlGaWVsZOG0sOKBv1wiLFwidmVyc2lvblwiOjAsXCJ1cmxcIjpcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3orr7nva4jbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXCIsXCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwiZmluZF9ydWxlXCI6XCJqczpcXG5jb25zdCBkID0gW107XFxuY29uc3QgZGF0YSA9IHt9O1xcblxcbmRhdGEub2xkQ29uZmlnID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uXFxcIjtcXG5kYXRhLmNqUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qc1xcXCI7XFxuZGF0YS54NVJvdXRlID0gXFxcImZpbGU6Ly8vc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL2NhY2hlL1BhcnNlX0RuLmh0bWxcXFwiO1xcblxcblxcbmRhdGEuanhMYXp5ID0gXFxcImV2YWwoJ3ZhciBjb25maWcgPScgKyBmZXRjaCgnXFxcIiArIGRhdGEub2xkQ29uZmlnICsgXFxcIicpKTtldmFsKGZldGNoKGNvbmZpZy5jaikpO2F5dG1QYXJzZShpbnB1dClcXFwiO1xcblxcbmRhdGEuc3pQYXJzZSA9IFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXCI7XFxuXFxuZGF0YS5zZXRQYXJzZSA9IGZ1bmN0aW9uKCkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgZGVzYzogJzc5NScsXFxuICAgICAgICB1cmw6IHRoaXMueDVSb3V0ZSxcXG4gICAgICAgIGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnXFxuICAgIH0pO1xcbiAgICB2YXIgb2xkViA9IGdldFZhcignanhPbGRWJyk7XFxuICAgIHZhciBuZXdWID0gZ2V0VmFyKCdqeE5ld1YnKTtcXG4gICAgdmFyIHZlcnNpb25UaXBzID0gcGFyc2VGbG9hdChuZXdWKSA+IHBhcnNlRmxvYXQob2xkVikgPyAn4oCY4oCY5pyJ5paw54mI5pysOiB2JyArIG5ld1YgOiAn4oCY4oCYJztcXG4gICAgdmFyIHBpY3MgPSBbXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9zZW92eC0yMC0xMCUyMCg5MikuanBnJyxcXG4gICAgICAgICdodHRwczovL2Nkbi5zZW92eC5jb20vaW1nL21vbTIwMTglMjAoMjA3KS5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vdHZhNC5zaW5haW1nLmNuL2xhcmdlLzliZDliMTY3Z3kxZndyaDV4b2x0ZGoyMWhjMHUwdGF4LmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly90dmExLnNpbmFpbWcuY24vbGFyZ2UvMDA1QllxcGdneTFmd3JleXU0bmw2ajMxaGMwdTBhaHIuanBnJyxcXG4gICAgICAgICdodHRwczovL3MzLmJtcC5vdmgvaW1ncy8yMDIxLzEwL2Q3ZTYwYjk5MDc0MjA5M2QuanBlZycsXFxuICAgICAgICAnaHR0cHM6Ly9zMy5ibXAub3ZoL2ltZ3MvMjAyMS8xMC85MWFkNmQ2NTM4YmY4Njg5LmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly90dmExLnNpbmFpbWcuY24vbGFyZ2UvMDA1QllxcGdneTFmd3Jlc2w1cG1sajMxaGMweGN3a2EuanBnJyxcXG4gICAgICAgICdodHRwczovL3R2YTMuc2luYWltZy5jbi9sYXJnZS8wMDVCWXFwZ2d5MWZ3cmdqZGs3NG9qMzFoYzB1MGRxbi5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnNlb3Z4LmNvbS9pbWcvbW9tMjAxOCUyMCgzMjApLmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9tb20yMDE4JTIwKDgwMykuanBnJ1xcbiAgICBdO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgaW1nOiBwaWNzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwKV0sXFxuICAgICAgICB0aXRsZTogdmVyc2lvblRpcHMgKyAn4oCZ4oCZPHNtYWxsPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojNkVCODk3XFxcIj48YnI+44CA44CA54K55Ye75LiK5pa55aS05YOP6L+b5YWl57yW6L6RPGJyPueCueatpOi/m+WFpeiuuuWdm+W4luWtkOWIl+ihqCcsXFxuICAgICAgICBkZXNjOiAn5b2T5YmN54mI5pysOiB2JyArIG9sZFYsXFxuICAgICAgICB1cmw6ICdodHRwczovL2hhaWt1b3NoaWppZS5jbi91c2VyLzE5NTgnLFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xJ1xcbiAgICB9KTtcXG4gIHNldFJlc3VsdChkKTtcXG59XFxuXFxuc3dpdGNoIChnZXRQYXJhbShcXFwidHlwZVxcXCIpKSB7XFxuICAgIGNhc2UgXFxcIuiuvue9rlxcXCI6XFxuICAgICAgICBkYXRhLnNldFBhcnNlKCk7XFxuICAgICAgICAvL3NldFJlc3VsdChkKTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlIFxcXCLnvJbovpFcXFwiOlxcbiAgICAgICAgJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvanhJdGVtP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCIpLmp4TGlzdCgpO1xcbiAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgYnJlYWs7XFxuXFx0Y2FzZSBcXFwi5Li76aKYXFxcIjpcXG5cXHQgICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3RoZW1lP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCIpLnRoZW1lSW5pdCgpO1xcbiAgICAgICAgYnJlYWs7XFxuXFx0Y2FzZSBcXFwi6Kej5p6QXFxcIjpcXG5cXHQgICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2p4TWFuYWdlP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCIpLmp4TWFuYWdlKCk7XFxuICAgICAgICBicmVhaztcXG4gICAgZGVmYXVsdDpcXG4gICAgICAgICQuZXhwb3J0cyA9IGRhdGE7XFxuICAgICAgICBicmVhaztcXG59XCIsXCJncm91cFwiOlwi6YGT6ZW/6L2m5bqT8J+al1wiLFwidWFcIjpcIm1vYmlsZVwiLFwicHJlUnVsZVwiOlwiXCIsXCJwYWdlc1wiOlwiW3tcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIlBhcnNlX0RuLXZ1ZS5odG1sXFxcIixcXFwicGF0aFxcXCI6XFxcIlBhcnNlX0RuLmh0bWxcXFwiLFxcXCJydWxlXFxcIjpcXFwiPCFET0NUWVBFIGh0bWw+XFxcXG48aHRtbD5cXFxcbjxoZWFkPlxcXFxuICAgIDxtZXRhIGNoYXJzZXQ9XFxcXFxcXCJ1dGYtOFxcXFxcXFwiPlxcXFxuICAgIDxtZXRhIG5hbWU9XFxcXFxcXCJ2aWV3cG9ydFxcXFxcXFwiIGNvbnRlbnQ9XFxcXFxcXCJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xLG1pbmltdW0tc2NhbGU9MSxtYXhpbXVtLXNjYWxlPTEsdXNlci1zY2FsYWJsZT1ub1xcXFxcXFwiIC8+XFxcXG4gICAgPHRpdGxlPlBhcnNlX0RuX3Z1ZTwvdGl0bGU+XFxcXG4gICAgPHNjcmlwdD5cXFxcbiAgICAgICAgY29uc3QgdnVlUGF0aCA9ICdoaWtlcjovL2ZpbGVzL3J1bGVzL2R6SG91c2UvanMvdnVlLmpzJztcXFxcbiAgICAgICAgaWYodHlwZW9mKGZiYSk9PSd1bmRlZmluZWQnfHwhZmJhKXtcXFxcbiAgICAgICAgICAgIHZhciBmYmEgPSBmeV9icmlkZ2VfYXBwO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICBpZih0eXBlb2YocmVxdWVzdCk9PSd1bmRlZmluZWQnfHwhcmVxdWVzdCl7XFxcXG4gICAgICAgICAgICAgICAgZXZhbChmYmEuZ2V0SW50ZXJuYWxKcygpKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIC8vIGZiYS5sb2codnVlUGF0aCk7XFxcXG4gICAgICAgICAgICBpZighcmVxdWVzdCh2dWVQYXRoKSl7XFxcXG4gICAgICAgICAgICAgICAgZmJhLndyaXRlRmlsZSh2dWVQYXRoLHJlcXVlc3QoJ2h0dHA6Ly9oaWtlci5ub2tpYS5wcmVzcy9oaWtlcnVsZS9ydWxlbGlzdC5qc29uP2lkPTE4MjMnKSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgIGV2YWwoZmJhLmZldGNoKHZ1ZVBhdGgpKTtcXFxcbiAgICAgICAgICAgIH1jYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGUubWVzc2FnZSk7XFxcXG4gICAgICAgICAgICAgICAgZmJhLmxvZyhlLm1lc3NhZ2UpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgLy8gZmJhLmxvZygn5Yqg6L29dnVl57uE5Lu25a6M5q+VJyk7XFxcXG4gICAgICAgIH1jYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgYWxlcnQoZS5tZXNzYWdlKTtcXFxcbiAgICAgICAgfVxcXFxuICAgIDwvc2NyaXB0PlxcXFxuICAgIDwhLS0gICAgPHNjcmlwdCBzcmM9XFxcXFxcXCJodHRwczovL3VucGtnLmNvbS92dWVAbmV4dFxcXFxcXFwiPjwvc2NyaXB0Pi0tPlxcXFxuICAgIDwhLS0gICAgPHNjcmlwdCBzcmM9XFxcXFxcXCJmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9ydWxlcy9kekhvdXNlL2pzL3Z1ZS5qc1xcXFxcXFwiPjwvc2NyaXB0Pi0tPlxcXFxuICAgIDxzdHlsZT5cXFxcbiAgICAgICAgYm9keSB7XFxcXG4gICAgICAgICAgICBtYXJnaW46IDAgNXB4IDAgNXB4O1xcXFxuICAgICAgICAgICAgcGFkZGluZzogMCAwcHggMCAwcHg7XFxcXG4gICAgICAgICAgICAvKiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGOUYwREE7Ki9cXFxcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAwO1xcXFxuICAgICAgICAgICAgZm9udC1mYW1pbHk6IFxcXFxcXFwiTWljcm9zb2Z0IFlhSGVpXFxcXFxcXCIsXFxcXFxcXCLlrovkvZNcXFxcXFxcIixcXFxcXFxcIlNlZ29lIFVJXFxcXFxcXCIsIFxcXFxcXFwiTHVjaWRhIEdyYW5kZVxcXFxcXFwiLCBIZWx2ZXRpY2EsIEFyaWFsLHNhbnMtc2VyaWYsIEZyZWVTYW5zLCBBcmltbztcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAjYXBwe1xcXFxuICAgICAgICAgICAgbWFyZ2luLXRvcDotMTBweDtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAjdGlwc3tcXFxcbiAgICAgICAgICAgIG1hcmdpbi10b3A6LTEwcHg7XFxcXG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOjVweDtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAuZnVuZ3tcXFxcbiAgICAgICAgICAgIHRleHQtYWxpZ246Y2VudGVyXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgZGl2LmJveCB7XFxcXG4gICAgICAgICAgICBtYXJnaW4tdG9wOi0xcHg7XFxcXG4gICAgICAgICAgICBoZWlnaHQ6IDQzcHg7XFxcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMjBweDtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvKui+k+WFpeahhuWwuuWvuCovXFxcXG4gICAgICAgIGZvcm0ge1xcXFxuICAgICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxcXG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxcXG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcXFxcbiAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgIGlucHV0LCBsYWJlbCwgc2VsZWN0IHtcXFxcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcXFxcbiAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLyrlrZfkvZPkvY3nva4qL1xcXFxuICAgICAgICBpbnB1dCB7XFxcXG4gICAgICAgICAgICB3aWR0aDogNzclO1xcXFxuICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xcXFxuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiA2NnB4O1xcXFxuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMHB4O1xcXFxuICAgICAgICB9XFxcXG5cXFxcbiAgICAgICAgbGFiZWwge1xcXFxuICAgICAgICAgICAgdGV4dC1hbGlnbjpjZW50ZXI7XFxcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogNDNweDtcXFxcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcXFxcbiAgICAgICAgICAgIHdpZHRoOiA2MHB4O1xcXFxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcXFxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcXFxuICAgICAgICB9XFxcXG5cXFxcbiAgICAgICAgLyrlsI/moYYqL1xcXFxuICAgICAgICAuYmFyIGxhYmVsIHtcXFxcbiAgICAgICAgICAgIC8qYmFja2dyb3VuZDogI0QwNkI2QzsqL1xcXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4IDU1NXB4IDU1NXB4IDVweDtcXFxcbiAgICAgICAgICAgIHdpZHRoOiA2MHB4O1xcXFxuICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xcXFxuICAgICAgICAgICAgdG9wOiAwO1xcXFxuICAgICAgICAgICAgbGVmdDogM3B4O1xcXFxuICAgICAgICB9XFxcXG5cXFxcbiAgICAgICAgLyrovpPlhaXmoYbmoLflvI8qL1xcXFxuICAgICAgICAuYmFyIGlucHV0IHtcXFxcbiAgICAgICAgICAgIC8qYm9yZGVyLXJhZGl1czogNXB4IDU1NXB4IDU1NXB4IDVweDtcXFxcbiAgICAgICAgICAgICAqL1xcXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xcXFxuICAgICAgICB9XFxcXG5cXFxcbiAgICAgICAgLyrliJfooagqL1xcXFxuICAgICAgICBzZWxlY3Qge1xcXFxuICAgICAgICAgICAgdGV4dC1hbGlnbjpjZW50ZXI7XFxcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDo0MHB4O1xcXFxuICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xcXFxuICAgICAgICAgICAgd2lkdGg6IDIwcHg7XFxcXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxcXG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxcXG4gICAgICAgIH1cXFxcblxcXFxuICAgICAgICAvKuWIl+ihqCovXFxcXG4gICAgICAgIC5saWViIHNlbGVjdHtcXFxcbiAgICAgICAgICAgIC8qYm9yZGVyLXJhZGl1czogNHB4OyovXFxcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1NTVweCA1cHggNXB4IDU1NXB4O1xcXFxuICAgICAgICAgICAgd2lkdGg6IDgwcHg7XFxcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjtcXFxcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDtcXFxcbiAgICAgICAgICAgIHRvcDogMDtcXFxcbiAgICAgICAgICAgIHJpZ2h0OiAycHg7XFxcXG4gICAgICAgIH1cXFxcblxcXFxuICAgICAgICAvKuWktOWDjyovXFxcXG4gICAgICAgIC5yb3VuZF9pY29ue1xcXFxuICAgICAgICAgICAgd2lkdGg6IDQwcHg7XFxcXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XFxcXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xcXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xcXFxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXFxcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcXFxuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcXFxcbiAgICAgICAgfVxcXFxuICAgIDwvc3R5bGU+XFxcXG48L2hlYWQ+XFxcXG48Ym9keT5cXFxcbjxkaXYgY2xhc3M9XFxcXFxcXCJmdW5nXFxcXFxcXCI+XFxcXG4gICAgPGEgc3R5bGU9XFxcXFxcXCJmbG9hdDpsZWZ0O1xcXFxcXFwiPlxcXFxuICAgICAgICA8YnV0dG9uICA6c3R5bGU9XFxcXFxcXCInYm9yZGVyOiBub25lO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiAnK3RoZW1lcy5jbG9zZUJ0bi5iYWNrZ3JvdW5kKyc7d2lkdGg6IDgwcHg7IGZvbnQtc2l6ZTogMThweDtjb2xvcjogJyt0aGVtZXMuY2xvc2VCdG4uY29sb3JcXFxcXFxcIiBvbmNsaWNrPVxcXFxcXFwiY2FuY2VsKCk7XFxcXFxcXCI+5YWzIOmXrTwvYnV0dG9uPlxcXFxuICAgIDwvYT5cXFxcbiAgICA8YSBjbGFzcz1cXFxcXFxcImJ0biBidG4tcHJpbWFyeVxcXFxcXFwiPlxcXFxuICAgICAgICA8YnV0dG9uICA6c3R5bGU9XFxcXFxcXCInYm9yZGVyOiBub25lO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiAnK3RoZW1lcy50aXBzQnRuLmJhY2tncm91bmQrJzt3aWR0aDogMTIwcHg7IGZvbnQtc2l6ZTogMThweDtjb2xvcjogJyt0aGVtZXMudGlwc0J0bi5jb2xvclxcXFxcXFwiIEBjbGljaz1cXFxcXFxcInNob3dUaXBzPSFzaG93VGlwc1xcXFxcXFwiPnt7c2hvd1RpcHM/XFxcXFxcXCLpmpDol4/mj5DnpLpcXFxcXFxcIjpcXFxcXFxcIuaYvuekuuaPkOekulxcXFxcXFwifX08L2J1dHRvbj5cXFxcbiAgICA8L2E+XFxcXG4gICAgPGEgc3R5bGU9XFxcXFxcXCJmbG9hdDpyaWdodFxcXFxcXFwiPlxcXFxuICAgICAgICA8YnV0dG9uIDpzdHlsZT1cXFxcXFxcIidib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6ICcrdGhlbWVzLnNhdmVCdG4uYmFja2dyb3VuZCsnO3dpZHRoOiA4MHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICcrdGhlbWVzLnNhdmVCdG4uY29sb3JcXFxcXFxcIiBvbmNsaWNrPVxcXFxcXFwiY2xpY2ttZSgn6YWNIOe9riDlt7Ig5L+dIOWtmCDvvIEnLCAxMDAwLCAn5byAJyk7XFxcXFxcXCI+5L+dIOWtmDwvYnV0dG9uPlxcXFxuICAgIDwvYT5cXFxcblxcXFxuPC9kaXY+XFxcXG48YnI+XFxcXG48ZGl2IGlkPVxcXFxcXFwiYXBwXFxcXFxcXCI+XFxcXG4gICAgPGg2IGlkPVxcXFxcXFwidGlwc1xcXFxcXFwiIHYtaHRtbD1cXFxcXFxcInRpcHNcXFxcXFxcIiB2LXNob3c9XFxcXFxcXCJzaG93VGlwc1xcXFxcXFwiPjwvaDY+XFxcXG4gICAgPGRpdiBjbGFzcz1cXFxcXFxcImJveCBiYXJcXFxcXFxcIiB2LWZvcj1cXFxcXFxcIm9wdGlvbiBpbiBvcHRpb25zXFxcXFxcXCI+XFxcXG4gICAgICAgIDxmb3JtPlxcXFxuICAgICAgICAgICAgPGxhYmVsIHR5cGU9XFxcXFxcXCJzdWJtaXRcXFxcXFxcIiA6c3R5bGU9XFxcXFxcXCInYmFja2dyb3VuZDonK3RoZW1lcy5iYXJsYWJlbC5iYWNrZ3JvdW5kKyc7Y29sb3I6Jyt0aGVtZXMuYmFybGFiZWwuY29sb3JcXFxcXFxcIj57eyBvcHRpb24ubmFtZSB9fTwvbGFiZWw+XFxcXG4gICAgICAgICAgICA8aW5wdXQgOnN0eWxlPVxcXFxcXFwiJ2JhY2tncm91bmQ6Jyt0aGVtZXMuYmFySW5wdXQuYmFja2dyb3VuZCsnO2JvcmRlcjogM3B4IHNvbGlkICcrdGhlbWVzLmJhcklucHV0LmNvbG9yXFxcXFxcXCIgdHlwZT1cXFxcXFxcInRleHRcXFxcXFxcIiBvbmNsaWNrPVxcXFxcXFwicmVzZXRTZWxlY3QodGhpcy5pZClcXFxcXFxcIiA6cGxhY2Vob2xkZXI9XFxcXFxcXCJvcHRpb24ucGxhY2Vob2xkZXJ8fHBsYWNlaG9sZGVyXFxcXFxcXCIgdi1tb2RlbD1cXFxcXFxcIm9wdGlvbi52YWx1ZVxcXFxcXFwiIHYtYmluZDppZD1cXFxcXFxcIm9wdGlvbi5pZFxcXFxcXFwiPlxcXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFxcXFxcImxpZWJcXFxcXFxcIj5cXFxcbiAgICAgICAgICAgICAgICA8c2VsZWN0IDpzdHlsZT1cXFxcXFxcIidiYWNrZ3JvdW5kOicrdGhlbWVzLnNlbGVjdC5iYWNrZ3JvdW5kKyc7Y29sb3I6Jyt0aGVtZXMuc2VsZWN0LmNvbG9yXFxcXFxcXCIgOmNsZWFyYWJsZT1cXFxcXFxcInRydWVcXFxcXFxcIiBzaXplPVxcXFxcXFwiMlxcXFxcXFwiIDppZD1cXFxcXFxcIm9wdGlvbi5pZCsnU2VsZWN0J1xcXFxcXFwiIDpuYW1lPVxcXFxcXFwib3B0aW9uLmlkXFxcXFxcXCIgb25jaGFuZ2U9XFxcXFxcXCJnZXRPcHRpb24odGhpcy5pZCx0aGlzLm5hbWUpXFxcXFxcXCIgIHYtbW9kZWw9XFxcXFxcXCJvcHRpb24udmFsdWVcXFxcXFxcIj5cXFxcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2LWlmPVxcXFxcXFwib3B0aW9uLmlkIT09J3FqdScmJm9wdGlvbi5pZCE9PSdjaidcXFxcXFxcIiA6dmFsdWU9XFxcXFxcXCJzZWxcXFxcXFxcIiA6a2V5PVxcXFxcXFwiaW5kZXhcXFxcXFxcIiB2LWZvcj1cXFxcXFxcIihzZWwsaW5kZXgpIGluIG15U2VsZWN0XFxcXFxcXCI+e3sgc2VsIH19PC9vcHRpb24+XFxcXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdi1lbHNlLWlmPVxcXFxcXFwib3B0aW9uLmlkPT09J3FqdSdcXFxcXFxcIiA6dmFsdWU9XFxcXFxcXCJzZWxcXFxcXFxcIiA6a2V5PVxcXFxcXFwiaW5kZXhcXFxcXFxcIiB2LWZvcj1cXFxcXFxcIihzZWwsaW5kZXgpIGluIFsn6buY6K6kJ10uY29uY2F0KG15U2VsZWN0KVxcXFxcXFwiPnt7IHNlbCB9fTwvb3B0aW9uPlxcXFxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIDp2YWx1ZT1cXFxcXFxcInNlbFxcXFxcXFwiIDprZXk9XFxcXFxcXCJpbmRleFxcXFxcXFwiIHYtZWxzZSB2LWZvcj1cXFxcXFxcIihzZWwsaW5kZXgpIGluIGNqU2VsXFxcXFxcXCI+e3sgc2VsIH19PC9vcHRpb24+XFxcXG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XFxcXG4gICAgICAgICAgICA8L2Rpdj5cXFxcbiAgICAgICAgPC9mb3JtPlxcXFxuICAgIDwvZGl2PlxcXFxuPC9kaXY+XFxcXG48ZGl2PlxcXFxuICAgIDxhIHYtZm9yPVxcXFxcXFwidmVyIGluIHZlcmluZm9cXFxcXFxcIiBzdHlsZT1cXFxcXFxcImZsb2F0OmxlZnQ7bWFyZ2luLXRvcDoxcHg7bWFyZ2luLXJpZ2h0OiAyMHB4XFxcXFxcXCIgdi1iaW5kOmlkPSd2ZXIuaWQnIG9uY2xpY2s9XFxcXFxcXCJkb09wdGlvbih0aGlzLmlkKVxcXFxcXFwiPlxcXFxuICAgICAgICA8aW1nIDpzcmM9XFxcXFxcXCJ2ZXIuYXZhdGFyXFxcXFxcXCIgY2xhc3M9XFxcXFxcXCJyb3VuZF9pY29uXFxcXFxcXCIgIGFsdD1cXFxcXFxcIlxcXFxcXFwiPlxcXFxuICAgICAgICA8c3BhbiBzdHlsZT1cXFxcXFxcIm1hcmdpbi1sZWZ0OjEwcHg7bGluZS1oZWlnaHQ6MTBweDtmb250LXNpemU6MTJweDtjb2xvcjogZ3JleTtcXFxcXFxcIj57eyB2ZXIuYXV0aG9yIH19PC9zcGFuPlxcXFxuICAgIDwvYT5cXFxcbiAgICA8YSBzdHlsZT1cXFxcXFxcImZsb2F0OnJpZ2h0O21hcmdpbi10b3A6MTBweDtcXFxcXFxcIj5cXFxcbiAgICAgICAgPGJ1dHRvbiA6c3R5bGU9XFxcXFxcXCInYm9yZGVyOiBub25lO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOicrdGhlbWVzLnNhdmVDbG9zZUJ0bi5iYWNrZ3JvdW5kKyc7d2lkdGg6IDE2MHB4O2hlaWdodDo0MHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICcrdGhlbWVzLnNhdmVDbG9zZUJ0bi5jb2xvclxcXFxcXFwiIG9uY2xpY2s9XFxcXFxcXCJjbGlja21lKCfphY0g572uIOW3siDkv50g5a2YIO+8gScsIDEwMDAsICflhbMnKTtcXFxcXFxcIj7kv53lrZjlubblhbPpl63nlYzpnaI8L2J1dHRvbj5cXFxcbiAgICA8L2E+XFxcXG48L2Rpdj5cXFxcbjxzY3JpcHQ+XFxcXG4gICAgbGV0IHRpcHMgPSBg5o+Q56S677yaPGJyPuKRoOazqOaEj+aPkuS7tumAiemhue+8jOayoeacieaJi+WKqOWvvOWFpeaPkuS7tueahOivneS4jeeUqOWKqOWug+OAguWmguiuvue9ruS4jeW9k+S8muWvvOiHtOinhOWImeaXoOazleS9v+eUqO+8jDxicj7op6PlhrPlip7ms5XvvJrop4bnlYzmiZPlvIDmm7TlpJrorr7nva7ihpLmlofku7bnrqHnkIbihpLngrljYWNoZeKGkumVv+aMiU15UGFyc2VTZXQuanNvbuWIoOmZpOaOie+8mzxicj7ikaHlhajlsYDorr7nva7lpoLmnpzpgInmi6nkuobpnZ7pu5jorqTpgqPkuYjlhajpg6jnmoTop6PmnpDkvJrkvb/nlKjov5nkuIDorr7nva7vvIzkuI3mg7Pov5nmoLfnmoTor53or7floavlhaXpu5jorqTvvJs8YnI+4pGi57u/6Imy5L+d5a2Y5oyJ6ZKu5LuF5LuF5L+d5a2Y6YWN572u5LiN5Lya5YWz6Zet6K6+572u6aG16Z2i77yM6YWN572u5ZCO5oOz5L+d5a2Y5bm25YWz6Zet6K6+572u6aG16Z2i55qE6K+d6K+354K56JOd6Imy5oyJ6ZKu77ybPGJyPuKRo+WmguaenOmBh+WIsOS/neWtmOaMiemSrueCueS4jeWKqOaIluiAheaKpemUmeeahOaDheWGte+8jOS7peS4i+i3r+W+hOaMqOedgOWIoOmZpOS4gOmBje+8jOeEtuWQjumHjeaWsOaLieWPluaPkuS7tu+8jOe9kemhteWGjeaJk+W8gOatpOe9kemhtVvkuI3opoHlhYjmi4nku6PnoIFd44CC6K6w5b6X5aSH5Lu9PGJyPlxcXFxu5Li75o+S5Lu25a2Y5pS+6Lev5b6EOiAvY2FjaGUvUGFyc2VfRG4uanM8YnI+XFxcXG7nvZHpobXohJrmnKzlrZjmlL7ot6/lvoQ6IC9jYWNoZS9QYXJzZV9Ebi5odG1sPGJyPlxcXFxu5pen5pat5o+S6YWN572u6Lev5b6EOi9jYWNoZS9NeVBhcnNlU2V0Lmpzb248YnI+XFxcXG7mlrDmlq3mj5LphY3nva7ot6/lvoQvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uPGJyPlxcXFxuICAgIOKRpOmYheivu+WujOaPkOekuueCueWFs+mXreWKoOi9veWujOaVtOiuvue9rumhtemdou+8jOWmguWHuumXrumimOaXoOazleiHquihjOino+WGs+eCueWbvueJh+i/m+WFpeiuuuWdm+WQkeaIkeWPjemmiOOAgjxicj5gO1xcXFxuICAgIGxldCBwbGFjZWhvbGRlcj0n6L6T5YWl6Kej5p6Q5ZCN5oiW6ICFVVJMLi4uLi4uJztcXFxcbiAgICAvLyNhYTk2ZGEgI2ZjNTE4NVxcXFxuICAgIGxldCB0aGVtZXMgPSB7XFxcXG4gICAgICAgIG5hbWU6J+m7mOiupOS4u+mimCcsXFxcXG4gICAgICAgIGNsb3NlQnRuOntjb2xvcjonI2Y2ZjZmNicsYmFja2dyb3VuZDonI2FhOTZkYSd9LFxcXFxuICAgICAgICBzYXZlQnRuOntjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonIzA2ODAwNid9LFxcXFxuICAgICAgICBzYXZlQ2xvc2VCdG46e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjMDVCRkM1J30sXFxcXG4gICAgICAgIHRpcHNCdG46e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjMDVCRkM1J30sXFxcXG4gICAgICAgIGJhcmxhYmVsOntjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonI2FhOTZkYSd9LFxcXFxuICAgICAgICBiYXJJbnB1dDp7Y29sb3I6JyNhYTk2ZGEnLGJhY2tncm91bmQ6JyNmZmZmZDInfSxcXFxcbiAgICAgICAgc2VsZWN0Ontjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonI2FhOTZkYSd9LFxcXFxuICAgIH07XFxcXG4gICAgbGV0IHRoZW1lRGVmID0ge1xcXFxcXFwibmFtZVxcXFxcXFwiOlxcXFxcXFwi5pat5b+15Y6f55quXFxcXFxcXCIsXFxcXFxcXCJjbG9zZUJ0blxcXFxcXFwiOntcXFxcXFxcImNvbG9yXFxcXFxcXCI6XFxcXFxcXCIjRjlGMERBXFxcXFxcXCIsXFxcXFxcXCJiYWNrZ3JvdW5kXFxcXFxcXCI6XFxcXFxcXCIjYzU0NjRhXFxcXFxcXCJ9LFxcXFxcXFwic2F2ZUJ0blxcXFxcXFwiOntcXFxcXFxcImNvbG9yXFxcXFxcXCI6XFxcXFxcXCIjRjlGMERBXFxcXFxcXCIsXFxcXFxcXCJiYWNrZ3JvdW5kXFxcXFxcXCI6XFxcXFxcXCIjMDY4MDA2XFxcXFxcXCJ9LFxcXFxcXFwic2F2ZUNsb3NlQnRuXFxcXFxcXCI6e1xcXFxcXFwiY29sb3JcXFxcXFxcIjpcXFxcXFxcIiNGOUYwREFcXFxcXFxcIixcXFxcXFxcImJhY2tncm91bmRcXFxcXFxcIjpcXFxcXFxcIiMwNUJGQzVcXFxcXFxcIn0sXFxcXFxcXCJ0aXBzQnRuXFxcXFxcXCI6e1xcXFxcXFwiY29sb3JcXFxcXFxcIjpcXFxcXFxcIiNGOUYwREFcXFxcXFxcIixcXFxcXFxcImJhY2tncm91bmRcXFxcXFxcIjpcXFxcXFxcIiMwNUJGQzVcXFxcXFxcIn0sXFxcXFxcXCJiYXJsYWJlbFxcXFxcXFwiOntcXFxcXFxcImNvbG9yXFxcXFxcXCI6XFxcXFxcXCIjRjlGMERBXFxcXFxcXCIsXFxcXFxcXCJiYWNrZ3JvdW5kXFxcXFxcXCI6XFxcXFxcXCIjRDA2QjZDXFxcXFxcXCJ9LFxcXFxcXFwiYmFySW5wdXRcXFxcXFxcIjp7XFxcXFxcXCJjb2xvclxcXFxcXFwiOlxcXFxcXFwiI0QwNkI2Q1xcXFxcXFwiLFxcXFxcXFwiYmFja2dyb3VuZFxcXFxcXFwiOlxcXFxcXFwiI0Y5RjBEQVxcXFxcXFwifSxcXFxcXFxcInNlbGVjdFxcXFxcXFwiOntcXFxcXFxcImNvbG9yXFxcXFxcXCI6XFxcXFxcXCIjRjlGMERBXFxcXFxcXCIsXFxcXFxcXCJiYWNrZ3JvdW5kXFxcXFxcXCI6XFxcXFxcXCIjRDA2QjZDXFxcXFxcXCJ9fTtcXFxcbiAgICB2YXIgdGhlbWVSb3V0ZSA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVRoZW1lLmpzb25cXFxcXFxcIjtcXFxcbiAgICBpZighZmJhLmZldGNoKHRoZW1lUm91dGUpKXtcXFxcbiAgICAgICAgZmJhLndyaXRlRmlsZSh0aGVtZVJvdXRlLEpTT04uc3RyaW5naWZ5KHtub3dfdGhlbWU6J+m7mOiupOS4u+mimCcsdGhlbWVzOlt0aGVtZXMsdGhlbWVEZWZdfSkpXFxcXG4gICAgfVxcXFxuICAgIHRyeSB7XFxcXG4gICAgICAgIGxldCBteVRoZW1lcyA9IEpTT04ucGFyc2UoZmJhLmZldGNoKHRoZW1lUm91dGUpKTtcXFxcbiAgICAgICAgbGV0IG5vd1RoZW1lID0gbXlUaGVtZXMudGhlbWVzLmZpbHRlcihpdD0+aXQubmFtZSA9PT0gbXlUaGVtZXMubm93X3RoZW1lKTtcXFxcbiAgICAgICAgdGhlbWVzID0gbm93VGhlbWU/bm93VGhlbWVbMF06bXlUaGVtZXMudGhlbWVzWzBdO1xcXFxuICAgIH1jYXRjaCAoZSkge31cXFxcblxcXFxuICAgIC8vIOaWreW/teWIneWni+WMlumDqOWIhlxcXFxuICAgIGNvbnN0IGFsbEFwaT1bJ2h0dHBzOi8vdGVzdC5yb25neGluZ3ZyLmNvbS90ZXN0Lz91cmw9JywnaHR0cDovL2NhY2hlLmxhbmd1YW5nLmljdTo4OC9kaWRpLnBocD91cmw9J107XFxcXG4gICAgdmFyIHNldHRpbmdzID0ge1xcXFxuICAgICAgICBxeTogJ+S9oOeIueenkeaKgCcsXFxcXG4gICAgICAgIHlrOiAn6aKG6YW3JyxcXFxcbiAgICAgICAgdHg6ICfojaPogIAnLFxcXFxuICAgICAgICBtZzogJ+iaguiageWFhOW8nycsXFxcXG4gICAgICAgIGJsOiAnT0vop6PmnpAnLFxcXFxuICAgICAgICBzaDogJ+axn+a5lkQnLFxcXFxuICAgICAgICB4ZzogJ+axn+a5lkQnLFxcXFxuICAgICAgICBhbDogJ+axn+a5lkQnLFxcXFxuICAgICAgICBwcDogJ+S6uuS6uui/tycsXFxcXG4gICAgICAgIG1pOiAnMTA4MCcsXFxcXG4gICAgICAgIGxlOiAn6L+q5aWl5ZeF5o6iJyxcXFxcbiAgICAgICAgb3RoOiAn6YGT6ZW/5LuT5bqT6YCa5YWNJyxcXFxcbiAgICAgICAgb25lOiAnMTA4MCcsXFxcXG4gICAgICAgIGZ1bjogJ+iejeWFtCcsXFxcXG4gICAgICAgIHFqdTogJ+m7mOiupCcsXFxcXG4gICAgICAgIGNqOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcydcXFxcbiAgICB9O1xcXFxuICAgIHZhciBvbGRSb3V0ZSA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFxcXFxcIjtcXFxcbiAgICB2YXIgbXlTZXQgPSBmYmEuZmV0Y2gob2xkUm91dGUpO1xcXFxuICAgIHZhciBuZXdSb3V0ZSA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb25cXFxcXFxcIjtcXFxcbiAgICBpZighZmJhLmZldGNoKG5ld1JvdXRlKSl7XFxcXG4gICAgICAgIGZiYS53cml0ZUZpbGUobmV3Um91dGUsSlNPTi5zdHJpbmdpZnkoe3NldHRpbmdzOnNldHRpbmdzLHRpdGxlOltcXFxcXFxcInl1bjE3MTdcXFxcXFxcIixcXFxcXFxcIuS9oOeIueenkeaKgFxcXFxcXFwiLFxcXFxcXFwi6J6N5YW0XFxcXFxcXCIsXFxcXFxcXCLkurrkurrov7ct5LyY6YW3XFxcXFxcXCJdLGNvZGVzOntcXFxcXFxcIuS9oOeIueenkeaKgFxcXFxcXFwiOlxcXFxcXFwiaHR0cDovL2NhY2hlLmxhbmd1YW5nLmljdTo4OC9kaWRpLnBocD91cmw9XFxcXFxcXCIsXFxcXFxcXCLono3lhbRcXFxcXFxcIjpcXFxcXFxcImh0dHBzOi8vdGVzdC5yb25neGluZ3ZyLmNvbS90ZXN0Lz91cmw9XFxcXFxcXCIsXFxcXFxcXCLkurrkurrov7ct5LyY6YW3XFxcXFxcXCI6XFxcXFxcXCJodHRwczovL3N2aXAucmVucmVubWkuY2M6MjIyMi9hcGkvP2tleT1ubjRqOHJ1a1BYU1Z6Ujc4RTkmdXJsPVxcXFxcXFwifX0pKVxcXFxuICAgIH1cXFxcbiAgICB2YXIgbmV3Q29uZmlnID0gZmJhLmZldGNoKG5ld1JvdXRlKTtcXFxcbiAgICB2YXIgbXlTZWxlY3QgPSBbXTtcXFxcbiAgICBmdW5jdGlvbiBjb21wYXJlKGxpc3QpIHtcXFxcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xcXFxuICAgICAgICAgICAgcmV0dXJuICFsaXN0LmluY2x1ZGVzKGl0KVxcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIGlmKG5ld0NvbmZpZyYmbmV3Q29uZmlnLmxlbmd0aD4yMCl7XFxcXG4gICAgICAgIGV2YWwoXFxcXFxcXCJuZXdDb25maWcgPVxcXFxcXFwiICsgbmV3Q29uZmlnICsgXFxcXFxcXCI7XFxcXFxcXCIpO1xcXFxuICAgICAgICBzZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oc2V0dGluZ3MsbmV3Q29uZmlnLnNldHRpbmdzKTtcXFxcbiAgICAgICAgdmFyIHljVGl0bGUgPSBbJ2RlZmF1bHRQYXJzZScsICdkZWZhdWx0UGFyc2VXZWInLCdtYW9zcycsICdDaXR5SVAnLCAnY2FjaGVNM3U4JywgJ3BjVUEnLCAncGFyc2VMYycsICdncGFyc2UnLCAnbnBhcnNlJ107XFxcXG4gICAgICAgIG15U2VsZWN0ID0gbmV3Q29uZmlnLnRpdGxlLmZpbHRlcihjb21wYXJlKHljVGl0bGUpKTtcXFxcbiAgICB9XFxcXG4gICAgLy9mYmEubG9nKEpTT04uc3RyaW5naWZ5KG15U2VsZWN0KSk7XFxcXG5cXFxcbiAgICBsZXQgb3B0aW9ucyA9IFtcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgbmFtZTon54ix5aWH6Im6JyxcXFxcbiAgICAgICAgICAgIGlkOidxeScsXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5xeSxcXFxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiforr7nva7niLHlpYfoibonXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIG5hbWU6J+S8mOmFtycsXFxcXG4gICAgICAgICAgICBpZDoneWsnLFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MueWtcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgbmFtZTon6IW+6K6vJyxcXFxcbiAgICAgICAgICAgIGlkOid0eCcsXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy50eFxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOifoipLmnpwnLFxcXFxuICAgICAgICAgICAgaWQ6J21nJyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLm1nXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIG5hbWU6J+WTlOWTqeWTlOWTqScsXFxcXG4gICAgICAgICAgICBpZDonYmwnLFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MuYmxcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgbmFtZTon5pCc54uQJyxcXFxcbiAgICAgICAgICAgIGlkOidzaCcsXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5zaFxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOifopb/nk5wnLFxcXFxuICAgICAgICAgICAgaWQ6J3hnJyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnhnXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIG5hbWU6J+mYv+mHjCcsXFxcXG4gICAgICAgICAgICBpZDonYWwnLFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MuYWxcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgbmFtZTonUFBUVicsXFxcXG4gICAgICAgICAgICBpZDoncHAnLFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MucHBcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgbmFtZTon5ZKq5ZKVJyxcXFxcbiAgICAgICAgICAgIGlkOidtaScsXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5taVxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOifkuZDop4YnLFxcXFxuICAgICAgICAgICAgaWQ6J2xlJyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLmxlXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIG5hbWU6JzE5MDUnLFxcXFxuICAgICAgICAgICAgaWQ6J29uZScsXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5vbmVcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgbmFtZTon6aOO6KGMJyxcXFxcbiAgICAgICAgICAgIGlkOidmdW4nLFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MuZnVuXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIG5hbWU6J+WFtuS7licsXFxcXG4gICAgICAgICAgICBpZDonb3RoJyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLm90aFxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOiflhajlsYAnLFxcXFxuICAgICAgICAgICAgaWQ6J3FqdScsXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5xanVcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgbmFtZTon5o+S5Lu2JyxcXFxcbiAgICAgICAgICAgIGlkOidjaicsXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5jalxcXFxuICAgICAgICB9LFxcXFxuICAgIF07XFxcXG5cXFxcbiAgICBmdW5jdGlvbiBEaWQoaWQpe1xcXFxuICAgICAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xcXFxuICAgIH1cXFxcbiAgICBmdW5jdGlvbiBnZXRPcHRpb24oaWQsdGl0bGUpIHtcXFxcbiAgICAgICAgdmFyIG9iaiA9IERpZChpZCk7XFxcXG4gICAgICAgIERpZCh0aXRsZSkudmFsdWUgPSBvYmoub3B0aW9uc1tvYmouc2VsZWN0ZWRJbmRleF0udGV4dDtcXFxcbiAgICB9XFxcXG4gICAgZnVuY3Rpb24gcmVzZXRTZWxlY3QoaWQpe1xcXFxuICAgICAgICBEaWQoaWQrXFxcXFxcXCJTZWxlY3RcXFxcXFxcIikub3B0aW9ucy5zZWxlY3RlZEluZGV4ID0gLTE7XFxcXG4gICAgfVxcXFxuXFxcXG4gICAgLy/lh73mlbDpg6jliIZcXFxcblxcXFxuICAgIGZ1bmN0aW9uIFRvYXN0KG1zZyxkdXJhdGlvbil7XFxcXG4gICAgICAgIGR1cmF0aW9uPWlzTmFOKGR1cmF0aW9uKT8yMDAwOmR1cmF0aW9uO1xcXFxuICAgICAgICB2YXIgbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xcXFxuICAgICAgICBtLmlubmVySFRNTCA9IG1zZztcXFxcbiAgICAgICAgbS5zdHlsZS5jc3NUZXh0PVxcXFxcXFwid2lkdGg6NDUlOyBtaW4td2lkdGg6MTUwcHg7IGJhY2tncm91bmQ6IzMxMTsgb3BhY2l0eTowLjY7IGhlaWdodDphdXRvO21pbi1oZWlnaHQ6IDQ1cHg7IGNvbG9yOiNmZmY7IGxpbmUtaGVpZ2h0OjQ1cHg7IHRleHQtYWxpZ246Y2VudGVyOyBib3JkZXItcmFkaXVzOjEwcHg7IHBvc2l0aW9uOmZpeGVkOyB0b3A6NjAlOyBsZWZ0OjI2JTsgei1pbmRleDo5OTk5OTk7XFxcXFxcXCI7XFxcXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobSk7XFxcXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XFxcXG4gICAgICAgICAgICB2YXIgZCA9IDAuNTtcXFxcbiAgICAgICAgICAgIG0uc3R5bGUud2Via2l0VHJhbnNpdGlvbiA9ICctd2Via2l0LXRyYW5zZm9ybSAnICsgZCArICdzIGVhc2UtaW4sIG9wYWNpdHkgJyArIGQgKyAncyBlYXNlLWluJztcXFxcbiAgICAgICAgICAgIG0uc3R5bGUub3BhY2l0eSA9ICcwJztcXFxcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobSkgfSwgZCAqIDEwMDApO1xcXFxuICAgICAgICB9LCBkdXJhdGlvbik7XFxcXG4gICAgfVxcXFxuXFxcXG4gICAgZnVuY3Rpb24gb3BlbkRuUGFnZSgpe1xcXFxuICAgICAgICBmYmEub3BlbihKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICBydWxlOiBcXFxcXFxcIj1eX149XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLnvJbovpHop6PmnpBcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU957yW6L6RI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZ3JvdXA6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIC8vZmluZFJ1bGU6IFxcXFxcXFwianM6dGhpcy5kPVtdOyQucmVxdWlyZShcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmpzP3J1bGU9TXlGaWVsZOG0sOKBv1xcXFxcXFxcXFxcXFxcXCIpLmVkaXQoKTtzZXRSZXN1bHQoZCk7XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBwcmVSdWxlOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHt9XFxcXG4gICAgICAgIH0pKTtcXFxcbiAgICB9XFxcXG4gICAgZnVuY3Rpb24gb3BlblRoZW1lKCl7XFxcXG4gICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgICAgIHJ1bGU6IFxcXFxcXFwiPV5fXj1cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuS4u+mimOeuoeeQhlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3kuLvpopgjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBncm91cDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgcHJlUnVsZTogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7fVxcXFxuICAgICAgICB9KSk7XFxcXG4gICAgfVxcXFxuICAgIGZ1bmN0aW9uIG9wZW5KeE1hbmFnZSgpe1xcXFxuICAgICAgICBmYmEub3BlbihKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICBydWxlOiBcXFxcXFxcIj1eX149XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLop6PmnpDphY3nva7nrqHnkIZcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96Kej5p6QI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZ3JvdXA6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHByZVJ1bGU6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBleHRyYToge31cXFxcbiAgICAgICAgfSkpO1xcXFxuICAgIH1cXFxcbiAgICBmdW5jdGlvbiBjYW5jZWwoKXtcXFxcbiAgICAgICAgaWYoIW15U2V0KXtcXFxcbiAgICAgICAgICAgIGZiYS53cml0ZUZpbGUob2xkUm91dGUsIEpTT04uc3RyaW5naWZ5KHNldHRpbmdzLCBudWxsLCA0KSk7XFxcXG4gICAgICAgICAgICBmYmEucmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgZmJhLmJhY2soZmFsc2UpO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIGZ1bmN0aW9uIGNsaWNrbWUobXNnLGR1cmF0aW9uLHRpdGxlKXtcXFxcbiAgICAgICAgdHJ5e1xcXFxuICAgICAgICAgICAgZm9yKGxldCBrZXkgaW4gc2V0dGluZ3Mpe1xcXFxuICAgICAgICAgICAgICAgIC8vIGZiYS5sb2coRGlkKGtleSkrJycra2V5KTtcXFxcbiAgICAgICAgICAgICAgICB0cnl7XFxcXG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzW2tleV0gPSBEaWQoa2V5KS52YWx1ZTtcXFxcbiAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XFxcXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KFxcXFxcXFwi5pyq6I635Y+W5Yiw6IqC54K5OlxcXFxcXFwiK2tleStcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFwiK2UubWVzc2FnZSk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpZihteVNlbGVjdCl7XFxcXG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihuZXdDb25maWcuc2V0dGluZ3MsIHNldHRpbmdzKTtcXFxcbiAgICAgICAgICAgICAgICBmYmEud3JpdGVGaWxlKG5ld1JvdXRlLCAkJCQuc3RyaW5naWZ5KG5ld0NvbmZpZykpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgZmJhLndyaXRlRmlsZShvbGRSb3V0ZSwgJCQkLnN0cmluZ2lmeShzZXR0aW5ncykpO1xcXFxuICAgICAgICAgICAgVG9hc3QobXNnLGR1cmF0aW9uKTtcXFxcbiAgICAgICAgICAgIGlmKHRpdGxlPT09XFxcXFxcXCLlhbNcXFxcXFxcIil7XFxcXG4gICAgICAgICAgICAgICAgZmJhLmJhY2soKTtcXFxcbiAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgIGZiYS5yZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfWNhdGNoKGUpe1xcXFxuICAgICAgICAgICAgYWxlcnQoZS5tZXNzYWdlKVxcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuXFxcXG4gICAgLy9sZXQgd2lkdGg9d2luZG93LnNjcmVlbi5hdmFpbFdpZHRoO1xcXFxuICAgIC8vbGV0IHdpZHRoUHg9d2lkdGgtMzkzKzUyO1xcXFxuICAgIC8vYWxlcnQoXFxcXFxcXCLlvZPliY3liIbovqjnjoc6XFxcXFxcXCIrd2luZG93LnNjcmVlbi5hdmFpbFdpZHRoK1xcXFxcXFwiKlxcXFxcXFwiK3dpbmRvdy5zY3JlZW4uaGVpZ2h0KTtcXFxcbiAgICB2YXIgdmVyaW5mbyA9IFt7XFxcXG4gICAgICAgIGlkOidkbicsXFxcXG4gICAgICAgIGF1dGhvcjon5pat5b+1JyxcXFxcbiAgICAgICAgYXZhdGFyOidodHRwczovL3MzLmF4MXguY29tLzIwMjEvMDIvMjIveTd3YjlPLmpwZycsXFxcXG4gICAgICAgIG9wdGlvbjpvcGVuRG5QYWdlLFxcXFxuICAgIH0sXFxcXG4gICAge1xcXFxuICAgICAgICBpZDonZHonLFxcXFxuICAgICAgICBhdXRob3I6J+mBk+mVvycsXFxcXG4gICAgICAgIGF2YXRhcjonaHR0cDovL3ExLnFsb2dvLmNuL2c/Yj1xcSZuaz00MzQ4NTcwMDUmcz02NDAnLFxcXFxuICAgICAgICBvcHRpb246b3BlblRoZW1lXFxcXG4gICAgfSxcXFxcbiAgICB7XFxcXG4gICAgaWQ6J2xtJyxcXFxcbiAgICAgICAgYXV0aG9yOiAn6JOd6I6TJyxcXFxcbiAgICAgICAgYXZhdGFyOiAnaHR0cDovL3ExLnFsb2dvLmNuL2c/Yj1xcSZuaz0yNTc5OTQ5Mzc4JnM9NjQwJyxcXFxcbiAgICAgICAgb3B0aW9uOm9wZW5KeE1hbmFnZVxcXFxuICAgIH1cXFxcbiAgICBdO1xcXFxuXFxcXG4gICAgZnVuY3Rpb24gZG9PcHRpb24ob3B0aW9uX2lkKXtcXFxcbiAgICAgICAgbGV0IHZlciA9IHZlcmluZm8uZmlsdGVyKGl0PT5pdC5pZD09PW9wdGlvbl9pZClbMF07XFxcXG4gICAgICAgIHZlci5vcHRpb24oKTtcXFxcbiAgICB9XFxcXG5cXFxcbiAgICBjb25zdCBSZW5kZXJIdG1sQXBwID0ge1xcXFxuICAgICAgICBkYXRhKCkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIHtcXFxcbiAgICAgICAgICAgICAgICAvLyByYXdIdG1sOiAnPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjogcmVkXFxcXFxcXCI+6L+Z6YeM5Lya5pi+56S657qi6Imy77yBPC9zcGFuPicsXFxcXG4gICAgICAgICAgICAgICAgb3B0aW9uczpvcHRpb25zLFxcXFxuICAgICAgICAgICAgICAgIHZlcmluZm86dmVyaW5mbyxcXFxcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjpwbGFjZWhvbGRlcixcXFxcbiAgICAgICAgICAgICAgICB0aXBzOnRpcHMsXFxcXG4gICAgICAgICAgICAgICAgdGhlbWVzOnRoZW1lcyxcXFxcbiAgICAgICAgICAgICAgICBteVNlbGVjdDpteVNlbGVjdCxcXFxcbiAgICAgICAgICAgICAgICAvLyBjalNlbDpbJ+ivt+mAieaLqeaPkuS7tiAo5Y+q5L2c55SobGF6eVJ1bGUpJywnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcycsJ2hpa2VyOi8vZmlsZXMvcnVsZXMvZHpIb3VzZS9qcy9zcmNhdXRvLmpzJywnaGlrZXI6Ly9maWxlcy9ydWxlcy9qcy9QYXJzZS1WMl9Ebi5qcyddLFxcXFxuICAgICAgICAgICAgICAgIGNqU2VsOlsn6K+36YCJ5oup5o+S5Lu2ICjlj6rkvZznlKhsYXp5UnVsZSknLCdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJ10sXFxcXG4gICAgICAgICAgICAgICAgc2V0dGluZ3M6c2V0dGluZ3MsXFxcXG4gICAgICAgICAgICAgICAgc2hvd1RpcHM6ZmFsc2UsXFxcXG4gICAgICAgICAgICAgICAgLy93aWR0aFB4OndpZHRoUHhcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAgbWV0aG9kczp7XFxcXG4gICAgICAgICAgICAvLyBjaGFuZ2VWYWw6ZnVuY3Rpb24oZXZlbnQpe1xcXFxuICAgICAgICAgICAgLy8gICAgIGdldE9wdGlvbih0aGlzLmlkLHRoaXMubmFtZSk7XFxcXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5zZWxPcHRpb24gPSBldmVudC50YXJnZXQudmFsdWU7XFxcXG4gICAgICAgICAgICAvLyAgICAgYWxlcnQoXFxcXFxcXCLkvaDpgInkuK3kuoZcXFxcXFxcIitldmVudC50YXJnZXQudmFsdWUpO1xcXFxuICAgICAgICAgICAgLy8gfVxcXFxuICAgICAgICAgICAgZG9PcHRpb246ZG9PcHRpb25cXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICB0cnkge1xcXFxuICAgICAgICBjb25zdCBhcHA9VnVlLmNyZWF0ZUFwcChSZW5kZXJIdG1sQXBwKTtcXFxcbiAgICAgICAgYXBwLm1vdW50KCdib2R5Jyk7XFxcXG4gICAgfWNhdGNoIChlKSB7XFxcXG4gICAgICAgIGNvbnNvbGUubG9nKGUubWVzc2FnZSlcXFxcbiAgICB9XFxcXG5cXFxcbjwvc2NyaXB0PlxcXFxuXFxcXG48L2JvZHk+XFxcXG48L2h0bWw+XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiUGFyc2VfRG4uanNcXFwiLFxcXCJwYXRoXFxcIjpcXFwiUGFyc2VfRG4uanNcXFwiLFxcXCJydWxlXFxcIjpcXFwiLy89PT09PT09PT09PT3lhY3ll4XosIPnlKg9PT09PT09PT09PT1cXFxcbi8v77yN77yN77yNPV5fXj1cXFxcblxcXFxudmFyIHZlcnNpb24gPSAzLjQ5O1xcXFxudmFyIHVwZGF0ZURhdGUgPSAnMjAyMS8xMC8yOS8xMDozNSc7XFxcXG52YXIgX215U2V0ID0ge1xcXFxuICAgIHFqdTogJ+m7mOiupCcsXFxcXG4gICAgb3RoOifpgZPplb/ku5PlupPpgJrlhY0nLFxcXFxuICAgIGNqY2FjaGU6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJyxcXFxcbiAgICB0aGVtZWNhY2hlOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVRoZW1lLmpzb24nLFxcXFxuICAgIGppZXhpY2FjaGU6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL015SmlleGkuanNvbicsXFxcXG4gICAgeDVjYWNoZTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uaHRtbCcsXFxcXG4gICAgb2xkQ29uZmlnOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb24nLFxcXFxuICAgIGNrTGluazogJ2h0dHBzOi8vY29kZS5hbGl5dW4uY29tL0FJOTU3L0hpa2VyL3Jhdy9tYXN0ZXIvdi8nLFxcXFxuICAgIGNqOiAnaHR0cHM6Ly9jb2RlLmFsaXl1bi5jb20vQUk5NTcvSGlrZXIvcmF3L21hc3Rlci92L0Nsb3VkUGFyc2UtVjJfRG4uanMnLFxcXFxuICAgIHg1VXJsOiAnaHR0cHM6Ly9jb2RlLmFsaXl1bi5jb20vQUk5NTcvSGlrZXIvcmF3L21hc3Rlci92L1BhcnNlX0RuLmh0bWwnLFxcXFxuICAgIHBhcnNlUm91dGU6ICdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicsXFxcXG4gICAgeDVSb3V0ZTogJ2ZpbGU6Ly8vc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL2NhY2hlL1BhcnNlX0RuLmh0bWwnXFxcXG59O1xcXFxudmFyIE15UGFyc2VTID0ge307XFxcXG52YXIgbXlTZXQgPSBfbXlTZXQ7XFxcXG5pZiAoZmlsZUV4aXN0KF9teVNldC5wYXJzZVJvdXRlKSkge1xcXFxuICAgIGV2YWwoJ3ZhciBwYXJzZUZpbGUgPScgKyBmZXRjaChfbXlTZXQucGFyc2VSb3V0ZSkpO1xcXFxuICAgIE15UGFyc2VTID0gcGFyc2VGaWxlLmNvZGVzO1xcXFxuICAgIG15U2V0ID0gcGFyc2VGaWxlLnNldHRpbmdzO1xcXFxufVxcXFxudmFyIHBhcnNlVGl0bGUgPSBbXFxcXG4gICAgXFxcXFxcXCJ5dW4xNzE3XFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJQYW5HdVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiRnVYaW5nXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJkZWZhdWx0UGFyc2VcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcIumBk+mVv+S7k+W6k+mAmuWFjVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiZGVmYXVsdFBhcnNlV2ViXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJPS+ino+aekFxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiTTNVOFRWXFxcXFxcXCIsXFxcXG5dO1xcXFxuLy/vvI3vvI3vvI09Xl9ePVxcXFxuXFxcXG4vL+aOpeWPo+iuvue9ri5cXFxcblxcXFxudmFyIHNldFVybCA9IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPeiuvue9riNub1JlY29yZEhpc3RvcnkjXFxcXFxcXCI7XFxcXG52YXIgc2V0X3N3aXRjaCA9IHNldFVybDtcXFxcbnZhciBsYXp5ID0gYGV2YWwoJ3ZhciBjb25maWcgPScgKyBmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKSk7ZXZhbChmZXRjaChjb25maWcuY2opKTtheXRtUGFyc2UoaW5wdXQpYDtcXFxcblxcXFxuLy92YXIgcGFyd2l4ID0gYHZhciB5dXJsPSdodHRwczovL2RhaWxpLm1heWl4aW9uZ2RpLmNuLz91cmw9JztSZWZlcmVyJzogJ2h0dHBzOi8vd3d3Lm1heWl4aW9uZ2RpLmNuL3lzP2lkPSc7J2h0dHBzOi8vZGFpbGkubWF5aXhpb25nZGkuY24vYXBpLnBocCcsICdSZWZlcmVyJzonaHR0cHM6Ly9kYWlsaS5tYXlpeGlvbmdkaS5jbic7XFxcXG4vLyDlhajmsJFodHRwczovL3BjdmlkZW9hbGl5dW4udGlhbnNoYW5ncmVuamlhbi5tZ3R2LmNvbS44OHd1bWEuY29tLz91cmw9XFxcXG5cXFxcbi8v77yN77yN77yN5aSHIOeUqO+8je+8je+8jVxcXFxuLypcXFxcbiAqIOW9seinhuW3peWcuu+8miBodHRwczovL3lzZ2MuY2MvXFxcXG4gKiDmsZ/muZY6IDU1NeeUteW9sSBodHRwczovL3d3dy41NTVkeTIuY29tL3Bob25lLmh0bWwg772cIDE355yLIGh0dHA6Ly8xN2thbnl5LmNuLyBodHRwOi8vamhqaWV4aS4zMHZyLmNuLz91cmw9IO+9nCBodHRwOi8vYXBpLm1haXppbWFsbC5jb20vaW5kZXgucGhwP3VybD1cXFxcbiAqIOaxn+a5ljogaHR0cDovL3d3dy50aWFuc2h1eXVuLm5ldC9pbmRleC5waHAvdm9kL3BsYXkvaWQvNDQ4Mzc3L3NpZC8xL25pZC8xLmh0bWxcXFxcbiAqIOaxn+a5ljI6IGh0dHA6Ly85OGh5ay5jbi9pbmRleC5waHAvdm9kL3BsYXkvaWQvNzI4NDEvc2lkLzEvbmlkLzEuaHRtbFxcXFxuICog5Lq65Lq66L+3OiBodHRwczovL3ZpcC5zdXNvdS50di9wbGF5ZXIvP3VybD0g772cIGh0dHBzOi8vd3d3Lm1vbWRtLmNjL1xcXFxuICpcXFxcbiAqIHd1aWdlbjogaHR0cHM6Ly93d3cuNWlnZW4uY29tL2RtcGxheWVyL3BsYXllci8/dXJsPVxcXFxuICog5bmy6aWtKOS6uuS6uui/tyk6IGh0dHBzOi8vanguenVpLmNtLz91cmw9XFxcXG4gKiBodHRwczovLzIuNjZtb3ZpZS50b3AvcGxheWVyLz91cmw9XFxcXG4gKlxcXFxuICovXFxcXG5cXFxcblxcXFxudmFyIHRvb2xzID0ge1xcXFxuICAgIE1ENTogZnVuY3Rpb24oZGF0YSkge1xcXFxuICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcXFxuICAgICAgICByZXR1cm4gQ3J5cHRvSlMuTUQ1KGRhdGEpLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5IZXgpO1xcXFxuICAgIH0sXFxcXG4gICAgQUVTOiBmdW5jdGlvbih0ZXh0LCBrZXksIGl2LCBpc0VuY3J5cHQpIHtcXFxcbiAgICAgICAgZXZhbChnZXRDcnlwdG9KUygpKTtcXFxcbiAgICAgICAgdmFyIGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGtleSk7XFxcXG4gICAgICAgIHZhciBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGl2KTtcXFxcbiAgICAgICAgaWYgKGlzRW5jcnlwdCkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIENyeXB0b0pTLkFFUy5lbmNyeXB0KHRleHQsIGtleSwge1xcXFxuICAgICAgICAgICAgICAgIGl2OiBpdixcXFxcbiAgICAgICAgICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQyxcXFxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcXFxcbiAgICAgICAgICAgIH0pLnRvU3RyaW5nKCk7XFxcXG4gICAgICAgIH07XFxcXG4gICAgICAgIHJldHVybiBDcnlwdG9KUy5BRVMuZGVjcnlwdCh0ZXh0LCBrZXksIHtcXFxcbiAgICAgICAgICAgIGl2OiBpdixcXFxcbiAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcXFxuICAgICAgICB9KS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxcXG4gICAgfSxcXFxcbiAgICAvL2FzY2lpXFxcXG4gICAgbmV4dENoYXJhY3RlcjogZnVuY3Rpb24oYXNjaWlWYWx1ZSwgaykge1xcXFxuICAgICAgICB2YXIgcyA9IGFzY2lpVmFsdWU7XFxcXG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHMgKyBrKTtcXFxcbiAgICB9LFxcXFxuICAgIC8v5Yev5pKSXFxcXG4gICAgY2Flc2FyQ2lwaGVyOiBmdW5jdGlvbihzdHJpbmdWYWx1ZSwgaykge1xcXFxuICAgICAgICB2YXIgbmV3U3RyaW5nID0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmdWYWx1ZS5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgbmV3U3RyaW5nICs9IHRoaXMubmV4dENoYXJhY3RlcihzdHJpbmdWYWx1ZVtpXS5jaGFyQ29kZUF0KCksIGspO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiBuZXdTdHJpbmc7XFxcXG4gICAgfSxcXFxcbiAgICBub3dEYXRlOiBmdW5jdGlvbigpIHtcXFxcbiAgICAgICAgdmFyIGRhdGUxID0gbmV3IERhdGUoKTtcXFxcbiAgICAgICAgdmFyIGRhdGVTdHIgPSBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgICAgICBpZiAoZGF0ZTEpIHtcXFxcbiAgICAgICAgICAgIGRhdGVTdHIgPSBkYXRlMS5nZXRGdWxsWWVhcigpO1xcXFxuICAgICAgICAgICAgdmFyIG1vbnRoID0gZGF0ZTEuZ2V0TW9udGgoKSArIDE7XFxcXG4gICAgICAgICAgICB2YXIgZGF5ID0gZGF0ZTEuZ2V0RGF0ZSgpO1xcXFxuICAgICAgICAgICAgaWYgKG1vbnRoIDwgMTApIHtcXFxcbiAgICAgICAgICAgICAgICBkYXRlU3RyICs9IFxcXFxcXFwiLTBcXFxcXFxcIiArIG1vbnRoO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBkYXRlU3RyICs9IFxcXFxcXFwiLVxcXFxcXFwiICsgbW9udGg7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpZiAoZGF5IDwgMTApIHtcXFxcbiAgICAgICAgICAgICAgICBkYXRlU3RyICs9IFxcXFxcXFwiLTBcXFxcXFxcIiArIGRheTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgZGF0ZVN0ciArPSBcXFxcXFxcIi1cXFxcXFxcIiArIGRheTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICByZXR1cm4gZGF0ZVN0cjtcXFxcbiAgICB9LFxcXFxuICAgIHRvSlNPTjogZnVuY3Rpb24oanNvbikge1xcXFxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoanNvbiwgKGtleSwgdmFsdWUpID0+IHtcXFxcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0sIDQpO1xcXFxuICAgIH0sXFxcXG4gICAgdG9WTnVtOiBmdW5jdGlvbihhKSB7XFxcXG4gICAgICAgIHZhciBhID0gYS50b1N0cmluZygpO1xcXFxuICAgICAgICB2YXIgYyA9IGEuc3BsaXQoJy4nKTtcXFxcbiAgICAgICAgdmFyIG51bV9wbGFjZSA9IFtcXFxcXFxcIlxcXFxcXFwiLCBcXFxcXFxcIjBcXFxcXFxcIiwgXFxcXFxcXCIwMFxcXFxcXFwiLCBcXFxcXFxcIjAwMFxcXFxcXFwiLCBcXFxcXFxcIjAwMDBcXFxcXFxcIl0sXFxcXG4gICAgICAgICAgICByID0gbnVtX3BsYWNlLnJldmVyc2UoKTtcXFxcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgICAgICAgICB2YXIgbGVuID0gY1tpXS5sZW5ndGg7XFxcXG4gICAgICAgICAgICBjW2ldID0gcltsZW5dICsgY1tpXTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICB2YXIgcmVzID0gYy5qb2luKCcnKTtcXFxcbiAgICAgICAgcmV0dXJuIHJlcztcXFxcbiAgICB9LFxcXFxuICAgIGNwclZlcnNpb246IGZ1bmN0aW9uKGEsIGIpIHtcXFxcbiAgICAgICAgdmFyIF9hID0gcGFyc2VJbnQodGhpcy50b1ZOdW0oYSkpLFxcXFxuICAgICAgICAgICAgX2IgPSBwYXJzZUludCh0aGlzLnRvVk51bShiKSk7XFxcXG4gICAgICAgIGIgPSBpc05hTihfYikgPyB2ZXJzaW9uIDogYjtcXFxcbiAgICAgICAgaWYgKF9hID4gX2IpIHtcXFxcbiAgICAgICAgICAgIHB1dFZhcignanhOZXdWJywgJ+acieaWsOeJiOacrDogJyArIGEpO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgY2xlYXJWYXIoJ2p4TmV3VicpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHB1dFZhcignanhPbGRWJywgYik7XFxcXG4gICAgfVxcXFxufTtcXFxcbmlmIChnZXRWYXIoXFxcXFxcXCJqeE9sZFZcXFxcXFxcIiwgXFxcXFxcXCIwXFxcXFxcXCIpICE9IHZlcnNpb24pIHtcXFxcbiAgICBwdXRWYXIoJ2NqQ2FjaGUnLCBfbXlTZXQuY2pjYWNoZSk7XFxcXG4gICAgcHV0VmFyKCd4NUNhY2hlJywgX215U2V0Lng1Q2FjaGUpO1xcXFxuICAgIHB1dFZhcignb2xkQ29uZmlnJywgX215U2V0Lm9sZENvbmZpZyk7XFxcXG4gICAgcHV0VmFyKCdwYXJzZVJvdXRlJywgX215U2V0LnBhcnNlUm91dGUpO1xcXFxuICAgIGxldCBqeE5ld1YgPSBmZXRjaCgnaHR0cHM6Ly9naXRlZS5jb20vRHVhbi1OaWFuL0RuL3Jhdy9tYXN0ZXIvaGlrZXJ2aWV3L1BhcnNlVmVyc2lvbi50eHQnKSxcXFxcbiAgICAgICAganhPbGRWID0gKGZldGNoKF9teVNldC5jamNhY2hlKS5zcGxpdCgndmVyc2lvbiA9IFxcXFxcXFwiJylbMV0gKyAnJykuc3BsaXQoJ1xcXFxcXFwiJylbMF07XFxcXG4gICAgdG9vbHMuY3ByVmVyc2lvbihqeE5ld1YsIGp4T2xkVik7XFxcXG59XFxcXG5cXFxcbnZhciBQYXJzZVMgPSB7fTtcXFxcbnZhciBvcmlnaW5hbFBhcnNlUyA9IHtcXFxcbiAgICAvLyB1cGRhdGVEYXRlOiB1cGRhdGVEYXRlLFxcXFxuICAgIHBhcnNlTGM6J2h0dHBzOi8vY29kZS5hbGl5dW4uY29tL0FJOTU3L0hpa2VyL3Jhdy9tYXN0ZXIvcC9wYXJzZUxjLmpzJyxcXFxcbiAgICBDaXR5SVA6ICdodHRwOi8vcHYuc29odS5jb20vY2l0eWpzb24nLFxcXFxuICAgIHBjVUE6ICdVc2VyLUFnZW50QE1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjBcXFxcXFxcXO+8m1xcXFxcXFxc77ybIFdPVzY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNDkuMC4yNjIzLjg3IFNhZmFyaS81MzcuMzYnLFxcXFxuICAgIGNhY2hlTTN1ODogZnVuY3Rpb24odlVybCwgcmVmKSB7XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICB2YXIgbTN1OCA9IGZldGNoKHZVcmwsIHt9KTtcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS92aWRlb3MubTN1OCcsIG0zdTgpO1xcXFxuICAgICAgICB9IGNhdGNoIChlKSB7fVxcXFxuICAgICAgICByZXR1cm4gJ2ZpbGU6Ly8vc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL2NhY2hlL3ZpZGVvcy5tM3U4Iyc7XFxcXG4gICAgfSxcXFxcbiAgICBkZWZhdWx0UGFyc2U6IGZ1bmN0aW9uKHVybCx0aW1lb3V0KSB7XFxcXG4gICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlV2ViKHVybCx0aW1lb3V0KTtcXFxcbiAgICB9LFxcXFxuICAgIGRlZmF1bHRQYXJzZVdlYjogZnVuY3Rpb24ocGxheVVybCx0aW1lb3V0LGV4dHJhKSB7XFxcXG4gICAgICAgIC8vIGxvZygn5Lyg5YWlZGVmYXVsdFBhcnNlV2Vi55qE6LaF5pe2OicrdGltZW91dCk7XFxcXG4gICAgICAgIHRpbWVvdXQgPSBwYXJzZUludCh0aW1lb3V0KXx8NTAwMDtcXFxcbiAgICAgICAgZXh0cmEgPSBleHRyYXx8e307XFxcXG4gICAgICAgIGxldCBwbGF5VXJsTGlzdCA9IGV4dHJhLnBsYXlVcmxMaXN0fHxbXTtcXFxcbiAgICAgICAgaWYodHlwZW9mKHBsYXlVcmxMaXN0KT09PSdvYmplY3QnJiZwbGF5VXJsTGlzdC5sZW5ndGg+MCl7XFxcXG4gICAgICAgICAgICBwbGF5VXJsTGlzdC51bnNoaWZ0KHBsYXlVcmwpO1xcXFxuICAgICAgICAgICAgbGV0IHBsYXlVcmxzPXBsYXlVcmxMaXN0LnNsaWNlKDAsNCk7XFxcXG4gICAgICAgICAgICBsZXQgbmFtZXM9ZXh0cmEubmFtZUxpc3Quc2xpY2UoMCw0KTtcXFxcbiAgICAgICAgICAgIGxvZygn5byA5aeL5om56YeP6Kej5p6QKOW3suWOu+mHjSzlj6rlj5bliY0z5Liq5aSH6IOO77yM5Yqg6YGT6ZW/576kOjQ4NjcyMjMyOOiOt+WPluacgOaWsOmtlOaWreWKqOaAgSk6JytuYW1lcyk7XFxcXG4gICAgICAgICAgICBjb25zdCB7TGF6eVBhcnNlRmFzdH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9nbG9iYWxQYXJzZT9ydWxlPemBk+mVv+S7k+W6k1BybycpO1xcXFxuICAgICAgICAgICAgbGV0IHJldCA9IExhenlQYXJzZUZhc3QocGxheVVybHMsdGltZW91dCx0aW1lb3V0KTtcXFxcbiAgICAgICAgICAgIGlmKHR5cGVvZihyZXQpPT09J29iamVjdCcmJnJldC5sZW5ndGg+MCl7XFxcXG4gICAgICAgICAgICAgICAgLy9yZXR1cm4gcmV0WzBdXFxcXG4gICAgICAgICAgICAgICAgLy9sb2cocmV0KTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdiA9IGdldEFwcFZlcnNpb24oKTtcXFxcbiAgICAgICAgICAgICAgICBpZihwYXJzZUludCh2KT49MjE5NCYmcmV0Lmxlbmd0aD4xKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybHMgPSBBcnJheS5mcm9tKG5ldyBTZXQocmV0KSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBoZWFkZXJzID0gdXJscy5tYXAoKGl0KT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIS87Ly50ZXN0KGl0KXx8aXQuc3BsaXQoJzsnKS5sZW5ndGg8Mil7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGVhZCA9IGl0LnNwbGl0KCc7JylbMV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIS9ALy50ZXN0KGhlYWQpKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgPSBoZWFkLnJlcGxhY2UoL3t8fS9nLCcnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkID0gaGVhZC5zcGxpdCgnJiYnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2JqID0ge307XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIGhlYWQpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5ID0gaGVhZFtpXS5zcGxpdCgnQCcpWzBdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBoZWFkW2ldLnNwbGl0KCdAJylbMV0ucmVwbGFjZSgvOy8sJ++8m++8mycpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICB1cmxzID0gdXJscy5tYXAoaXQ9Pml0LnNwbGl0KCc7JylbMF0pO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe3VybHM6dXJscyxoZWFkZXJzOmhlYWRlcnN9KTtcXFxcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFswXVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiByZXRcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICBjb25zdCB7bGF6eVBhcnNlfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2dsb2JhbFBhcnNlP3J1bGU96YGT6ZW/5LuT5bqTUHJvJyk7XFxcXG4gICAgICAgICAgICBsZXQgeDVQbGF5PWxhenlQYXJzZShwbGF5VXJsLHRpbWVvdXQpO1xcXFxuICAgICAgICAgICAgaWYodHlwZW9mKHg1UGxheSk9PVxcXFxcXFwidW5kZWZpbmVkXFxcXFxcXCJ8fCF4NVBsYXkpe1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v6YGT6ZW/5LuT5bqT6Kej5p6Q5aSx6LSlXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGxldCB0aXBzPS94NVJ1bGUvLnRlc3QoeDVQbGF5KT9cXFxcXFxcIng15YWN5ZeF5byA5aeLXFxcXFxcXCI6XFxcXFxcXCLmnoHpgJ/lhY3ll4XmjqLlrozmr5XvvIzlnLDlnYA6XFxcXFxcXCIrKC9eaHR0cC8udGVzdCh4NVBsYXkpP3g1UGxheTon6Z2e5q2j5bi46ZO+5o6lJyk7XFxcXG4gICAgICAgICAgICBsb2codGlwcyk7XFxcXG4gICAgICAgICAgICByZXR1cm4geDVQbGF5O1xcXFxuICAgICAgICB9XFxcXG4gICAgfSxcXFxcbiAgICBtYW9zczogZnVuY3Rpb24oanh1cmwsIHJlZikge1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgdmFyIGdldFZpZGVvSW5mbyA9IGZ1bmN0aW9uKHRleHQpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9vbHMuQUVTKHRleHQsIGtleSwgaXYpO1xcXFxuICAgICAgICAgICAgfTtcXFxcbiAgICAgICAgICAgIGlmIChyZWYpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IHJlcXVlc3Qoanh1cmwsIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiByZWZcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IHJlcXVlc3Qoanh1cmwpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaWYgKGh0bWwuaW5kZXhPZignJmJ0d2FmPScpICE9IC0xKSB7XFxcXG4gICAgICAgICAgICAgICAgaHRtbCA9IHJlcXVlc3Qoanh1cmwgKyAnJmJ0d2FmJyArIGh0bWwubWF0Y2goLyZidHdhZiguKj8pXFxcXFxcXCIvKVsxXSwge1xcXFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6IHJlZlxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHZhciBpdiA9IGh0bWwuc3BsaXQoJ2J0X3Rva2VuID0gXFxcXFxcXCInKVsxXS5zcGxpdCgnXFxcXFxcXCInKVswXTtcXFxcbiAgICAgICAgICAgIGV2YWwoaHRtbC5tYXRjaCgvdmFyIGNvbmZpZyA9IHtbXFxcXFxcXFxzXFxcXFxcXFxTXSo/fS8pWzBdICsgJycpO1xcXFxuICAgICAgICAgICAgaWYgKGNvbmZpZy51cmwuc2xpY2UoMCwgNCkgIT0gJ2h0dHAnKSB7XFxcXG4gICAgICAgICAgICAgICAgY29uZmlnLnVybCA9IGRlY29kZVVSSUNvbXBvbmVudCh0b29scy5BRVMoY29uZmlnLnVybCwgXFxcXFxcXCJkdnlZUlFsblBSQ01kUVNlXFxcXFxcXCIsIGl2KSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLnVybDtcXFxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuICcnO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSxcXFxcbiAgICBMTFE6IGZ1bmN0aW9uKGp4dXJsKSB7XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICB2YXIgYXBpID0ganh1cmwuc3BsaXQoJz91cmw9JylbMF0gKyBcXFxcXFxcImFwaS5waHBcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIHZhciBiNjRpZCA9IGJhc2U2NEVuY29kZShqeHVybC5zcGxpdCgndXJsPScpWzFdKTtcXFxcbiAgICAgICAgICAgIHZhciBwYXJzZWlkID0gdG9vbHMuY2Flc2FyQ2lwaGVyKGI2NGlkLCAtMSk7XFxcXG4gICAgICAgICAgICB2YXIganNvbiA9IEpTT04ucGFyc2UocmVxdWVzdChhcGksIHtcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzoganh1cmxcXFxcbiAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxcXFxuICAgICAgICAgICAgICAgIGJvZHk6ICd1cmw9JyArIHBhcnNlaWRcXFxcbiAgICAgICAgICAgIH0pKTtcXFxcbiAgICAgICAgICAgIHVybCA9IChqc29uLmNvZGUgPT0gMjAwID8gYmFzZTY0RGVjb2RlKHRvb2xzLmNhZXNhckNpcGhlcihqc29uLnVybCwgLTEpKSA6ICcnKTtcXFxcbiAgICAgICAgICAgIHJldHVybiB1cmw7XFxcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiAnJztcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sXFxcXG4gICAgUGFuR3U6IGZ1bmN0aW9uKHZpcFVybCwgZGF0YSkge1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgLyp2YXIgcmVmID0gJ2h0dHBzOi8vd3d3LnBhbmd1amlleGkuY29tLyc7XFxcXG4gICAgICAgICAgICB2YXIgcGFyc2UgPSAnaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L2ppZXhpLz91cmw9JyArIHZpcFVybDtcXFxcbiAgICAgICAgICAgIHZhciBhcGkgPSAnaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L2ppZXhpL2FwaS5waHAnO1xcXFxuICAgICAgICAgICAgKi9cXFxcbiAgICAgICAgICAgIC8vdmFyIHJlZiA9ICdodHRwczovL3hteXN0di5jb20vJztcXFxcbiAgICAgICAgICAgIC8vdmFyIHBhcnNlID0gJ2h0dHBzOi8vd3d3Ljk5a3B3LmNvbS9wYW5ndS9pbmRleC5waHA/dXJsPScgKyB0YWlsVXJsO1xcXFxuICAgICAgICAgICAgLy92YXIgYXBpID0gJ2h0dHBzOi8vd3d3Ljk5a3B3LmNvbS9wYW5ndS9hcGkucGhwJztcXFxcbiAgICAgICAgICAgIHZhciBwYXJzZSA9ICdodHRwczovL3d3dy5wYW5ndWppZXhpLmNvbS9wYW5ndS8/dXJsPScgKyB2aXBVcmw7XFxcXG4gICAgICAgICAgICB2YXIgYXBpID0gJ2h0dHBzOi8vcGFuZ3VhcGkubnRyeWpkLm5ldC9wYW5ndTIwMjEvYXBpLnBocCc7XFxcXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xcXFxuICAgICAgICAgICAgICAgIHJlZiA9IGRhdGFbMF07XFxcXG4gICAgICAgICAgICAgICAgcGFyc2UgPSBkYXRhWzFdO1xcXFxuICAgICAgICAgICAgICAgIGFwaSA9IGRhdGFbMl07XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB2YXIgVGltZSA9IChNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkgKiAxKS50b1N0cmluZygpO1xcXFxuICAgICAgICAgICAgdmFyIHVybCA9IEpTT04ucGFyc2UocmVxdWVzdChhcGksIHtcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogcGFyc2VcXFxcbiAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgIGJvZHk6ICd1cmw9JyArIHZpcFVybCArICcmcmVmZXJlcj0nICsgYmFzZTY0RW5jb2RlKHBhcnNlKSArICcmcmVmPTEmdGltZT0nICsgVGltZSArICcmdHlwZT0mb3RoZXI9JyArIGJhc2U2NEVuY29kZSh2aXBVcmwpICsgJyZpb3M9MCcsXFxcXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXFxcbiAgICAgICAgICAgIH0pKS51cmw7XFxcXG4gICAgICAgICAgICByZXR1cm4gdXJsO1xcXFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LFxcXFxuICAgIHl1bjE3MTc6IGZ1bmN0aW9uICh2aXBVcmwpIHtcXFxcbiAgICAgICAgdmFyIGlzeWsgPSB2aXBVcmwuaW5kZXhPZigneW91a3UnKTtcXFxcbiAgICAgICAgdmFyIHJlZiA9IFxcXFxcXFwiaHR0cHM6Ly93d3cuMTcxN3l1bi5jb20vangvdHkucGhwP3VybD1cXFxcXFxcIiArIHZpcFVybDtcXFxcbiAgICAgICAgdmFyIHBhcnNlID0gXFxcXFxcXCJodHRwczovLzE3MTd5dW4uY29tLnpoMTg4Lm5ldC8wODI4Lz91cmw9XFxcXFxcXCIgKyB2aXBVcmw7XFxcXG4gICAgICAgIHZhciBhcGkgPSBcXFxcXFxcImh0dHBzOi8vMTcxN3l1bi5jb20uemgxODgubmV0LzEwMDQvLi5pbmRleC4ucGhwXFxcXFxcXCI7XFxcXG4gICAgICAgIHJldHVybiBpc3lrID09IC0xID8gdGhpcy5QYW5HdSh2aXBVcmwsIFtyZWYsIHBhcnNlLCBhcGldKSA6IHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmICsgJyx2aXA6JywgcGFyc2UgKyAnLHZpcDonLCBhcGldKTtcXFxcbiAgICB9LFxcXFxuICAgIE9L6Kej5p6QOidodHRwczovL29ranguY2MvP3VybD0nLFxcXFxuICAgIE0zVThUVjonaHR0cHM6Ly9qeC5tM3U4LnR2L2ppZXhpLz91cmw9JyxcXFxcbiAgICDpgZPplb/ku5PlupPpgJrlhY06ZnVuY3Rpb24gKHVybCx0aW1lb3V0KXtcXFxcbiAgICAgICAgcmV0dXJuIFBhcnNlUy5kZWZhdWx0UGFyc2VXZWIodXJsLHRpbWVvdXQpO1xcXFxuICAgIH0sXFxcXG4gICAgRnVYaW5nOiBmdW5jdGlvbih2aXBVcmwpIHtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIC8vaWYodmlwVXJsLmluZGV4T2YoJ3YueW91a3UnKSE9LTEpe1xcXFxuICAgICAgICAgICAgLy8gICAgdmlwVXJsID0gKEpTT04ucGFyc2UocmVxdWVzdCh2aXBVcmwsIHtyZWRpcmVjdDpmYWxzZSwgd2l0aEhlYWRlcnM6dHJ1ZX0pKS5oZWFkZXJzLmxvY2F0aW9uICsgJycpLnJlcGxhY2UoL1xcXFxcXFxcPy4qLywnJyk7XFxcXG4gICAgICAgICAgICAvL31cXFxcbiAgICAgICAgICAgIHZhciByZWYgPSAnaHR0cHM6Ly9qeC54dWV0dWlndWFuZy5jbi9qaWV4aS8/dXJsPScgKyB2aXBVcmw7XFxcXG4gICAgICAgICAgICB2YXIgcGFyc2UgPSByZWY7XFxcXG4gICAgICAgICAgICB2YXIgYXBpID0gJ2h0dHBzOi8vangueHVldHVpZ3VhbmcuY24vamlleGkvYXBpdV9meC5waHAnO1xcXFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmLCBwYXJzZSwgYXBpXSk7XFxcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiAnJztcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sXFxcXG59O1xcXFxuXFxcXG5PYmplY3QuYXNzaWduKFBhcnNlUywgb3JpZ2luYWxQYXJzZVMsIE15UGFyc2VTKTtcXFxcbi8v6KaG55uW6aG65bqP77yM56ys5LiJ5Liq6KaG55uW56ys5LqM5Liq54S25ZCO6KaG55uW56ys5LiA5LiqXFxcXG5cXFxcblxcXFxuZnVuY3Rpb24gYXl0bVBhcnNlKHZpcFVybCxzdHJUaXRsZSx0aW1lb3V0LHBsYXlVcmwpIHtcXFxcbiAgICAvLyDlj4LmlbAxOuato+eJiOe9keWdgOWcsOWdgCDlj4LmlbAyIOWumuWQkeino+aekOaOpeWPo+WQjeensCDlj4LmlbAzIHg16Kej5p6Q6LaF5pe2IOWPguaVsDQg5a6M5pW055qE5pKt5pS+6ZO+5o6lXFxcXG4gICAgc3RyVGl0bGUgPSBzdHJUaXRsZXx8Jyc7XFxcXG4gICAgcGxheVVybD1wbGF5VXJsfHwnJztcXFxcbiAgICAvLyBsb2coJ+S8oOWFpWF5dG1QYXJzZeeahOi2heaXtjonK3RpbWVvdXQpO1xcXFxuICAgIHRpbWVvdXQgPSBwYXJzZUludCh0aW1lb3V0KXx8NTAwMDtcXFxcblxcXFxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcXFxuICAgIGxldCBqeHNSb3V0ZSA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeUppZXhpLmpzb25cXFxcXFxcIjtcXFxcbiAgICBsZXQgTXlKaWV4aSA9IHt9O1xcXFxuICAgIGxldCBqaWV4aXMgPSB7fTtcXFxcbiAgICB0cnkge1xcXFxuICAgICAgICBNeUppZXhpID0gSlNPTi5wYXJzZShmZXRjaChqeHNSb3V0ZSkpO1xcXFxuICAgICAgICBqaWV4aXMgPSBNeUppZXhpLmppZXhpcy5maWx0ZXIoaXQ9Pml0Lm5hbWU9PT1NeUppZXhpLm5vdylbMF07XFxcXG4gICAgfWNhdGNoIChlKSB7fVxcXFxuICAgIGZ1bmN0aW9uIGdldFBsYXlKeChrZXkpe1xcXFxuICAgICAgICBsZXQgcGxheVVybExpc3QgPSBbXTsvL+aJuemHj+aSreaUvuWcsOWdgOWIl+ihqFxcXFxuICAgICAgICBsZXQgbmFtZUxpc3QgPSBbXTtcXFxcbiAgICAgICAgbGV0IGp4cyA9IGppZXhpc1trZXldOyAvLyDpgILnlKjkuo7ov5nkuKrnvZHnq5nnmoTop6PmnpDliJfooahcXFxcbiAgICAgICAgaWYoanhzKXtcXFxcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiBqeHMpe1xcXFxuICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBQYXJzZVNbanhzW2ldXSA9PSAnc3RyaW5nJyYmUGFyc2VTW2p4c1tpXV0ubWF0Y2goL2h0dHAuKj89Lykpe1xcXFxuICAgICAgICAgICAgICAgICAgICBwbGF5VXJsTGlzdC5wdXNoKFBhcnNlU1tqeHNbaV1dK3ZpcFVybCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVMaXN0LnB1c2goanhzW2ldKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLy8gcmV0dXJuIHBsYXlVcmxMaXN0XFxcXG4gICAgICAgIHJldHVybiB7cGxheVVybExpc3Q6cGxheVVybExpc3QsbmFtZUxpc3Q6bmFtZUxpc3R9XFxcXG4gICAgfVxcXFxuICAgIGxldCBleHRyYSA9IHt9O1xcXFxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcXFxuICAgIGlmKCFzdHJUaXRsZSl7XFxcXG4gICAgICAgIHZhciBob3N0O1xcXFxuICAgICAgICB0cnl7XFxcXG4gICAgICAgICAgICBob3N0ID0gdmlwVXJsLm1hdGNoKC9cXFxcXFxcXC4oLio/KVxcXFxcXFxcLy8pWzFdO1xcXFxuICAgICAgICB9Y2F0Y2goZSl7XFxcXG4gICAgICAgICAgICBpZighL15odHRwLy50ZXN0KHBsYXlVcmwpKXtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCLmlq3mj5LosIPnlKjlpLHotKXvvIFcXFxcXFxcXG7pnZ7mraPluLjnmoR2aXDmraPniYjlnLDlnYDkuJTmnKror4bliKvljp/nq5nop6PmnpDmkq3mlL7lnLDlnYBcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZVMu6YGT6ZW/5LuT5bqT6YCa5YWNKHBsYXlVcmwsdGltZW91dClcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvL2xvZyhob3N0KTtcXFxcbiAgICAgICAgc3dpdGNoIChteVNldC5xanUpIHtcXFxcbiAgICAgICAgICAgIGNhc2UgXFxcXFxcXCLpu5jorqRcXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGhvc3QpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcInFxLmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQudHg7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgndHgnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwiaXFpeWkuY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5xeTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdxeScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJ5b3VrdS5jb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnlrO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3lrJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcImFsaXp5XFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5hbDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdhbCcpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJtZ3R2LmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQubWc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnbWcnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwiYmlsaWJpbGkuY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5ibDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdibCcpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJzb2h1LmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQuc2g7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnc2gnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwidHYuc29odS5jb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnNoO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3NoJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcIml4aWd1YS5jb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnhnO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3hnJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcInBwdHYuY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5wcDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdwcCcpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJtaWd1dmlkZW8uY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5taTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdtaScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJsZS5jb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LmxlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ2xlJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcIjE5MDUuY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5vbmU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnb25lJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcImZ1bi50dlxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQuZnVuO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ2Z1bicpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5vdGg7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICBkZWZhdWx0OlxcXFxuICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnFqdTtcXFxcbiAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgfVxcXFxuICAgIH1lbHNle1xcXFxuICAgICAgICBsb2coJ+auteaPkuaJp+ihjOWumuWQkeino+aekOe6v+i3r+WktDonK3N0clRpdGxlKTtcXFxcbiAgICAgICAgc3RyID0gc3RyVGl0bGU7XFxcXG4gICAgfVxcXFxuICAgIGxldCB3aXRoQmF0Y2ggPSAhIShNeUppZXhpLmlzQXV0byAmJiBNeUppZXhpLmF1dG9Nb2RlID09PSAn6YCf5bqm5LyY5YWIJyk7XFxcXG4gICAgaWYgKHR5cGVvZiBQYXJzZVNbc3RyXSA9PSAnZnVuY3Rpb24nKSB7XFxcXG4gICAgICAgIGlmKC/pgJrlhY0vLnRlc3Qoc3RyKSl7XFxcXG4gICAgICAgICAgICByZXR1cm4gUGFyc2VTW3N0cl0odmlwVXJsLHRpbWVvdXQpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHZhciB1cmwgPSBQYXJzZVNbc3RyXSh2aXBVcmwpO1xcXFxuICAgICAgICBpZiAoL15cXFxcXFxcXC8vLnRlc3QodXJsKSkge1xcXFxuICAgICAgICAgICAgdXJsID0gJ2h0dHBzOicgKyB1cmxcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZiAoLz1odHRwLy50ZXN0KHVybCkpIHtcXFxcbiAgICAgICAgICAgIHVybCA9IC8mdXJsPS8udGVzdCh1cmwpID8gdXJsIDogJ2h0dHAnICsgZGVjb2RlVVJJQ29tcG9uZW50KHVybC5zcGxpdCgnPWh0dHAnKVsxXSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLyppZih1cmwubWF0Y2goL21ndHYuY29tL2cpPT0nbWd0di5jb20nKXtcXFxcbiAgICAgICAgICAgIHVybCA9IHVybCArICc7e1JlZmVyZXJAaHR0cHM6Ly93d3cubWd0di5jb219JztcXFxcbiAgICAgICAgfSBlbHNlICovXFxcXG4gICAgICAgIGlmICgvXFxcXFxcXFwuZmx2Ly50ZXN0KHVybCkpIHtcXFxcbiAgICAgICAgICAgIHVybCA9IHVybCArICc7e1VzZXItQWdlbnRAYXBwJiZSZWZlcmVyQCcgKyB2aXBVcmwgKyAnfSc7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaWYgKHVybCA9PT0gJycgfHwgdXJsID09PSB2aXBVcmwpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiB2aXBVcmw7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gdXJsICsgJyNpc1ZpZGVvPXRydWUjJztcXFxcbiAgICAgICAgfVxcXFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIFBhcnNlU1tzdHJdID09ICdzdHJpbmcnJiZQYXJzZVNbc3RyXS5tYXRjaCgvaHR0cC4qPz0vKSkge1xcXFxuICAgICAgICAvLyBsb2coXFxcXFxcXCLmlq3mj5LlvIDlp4vpgJrnlKjmiafooYzlhY3ll4UgZGVmYXVsdFBhcnNlV2ViOlxcXFxcXFwiK3RpbWVvdXQpO1xcXFxuICAgICAgICAvL2xvZyhcXFxcXFxcIum7mOiupHg1XFxcXFxcXCIrUGFyc2VTLmRlZmF1bHRQYXJzZVdlYik7XFxcXG4gICAgICAgIGlmKHdpdGhCYXRjaCl7XFxcXG4gICAgICAgICAgICBpZih0eXBlb2YoZXh0cmEucGxheVVybExpc3QpPT09J29iamVjdCcmJmV4dHJhLnBsYXlVcmxMaXN0Lmxlbmd0aD4wKXtcXFxcbiAgICAgICAgICAgICAgICBleHRyYS5wbGF5VXJsTGlzdCA9IGV4dHJhLnBsYXlVcmxMaXN0LmZpbHRlcihpdD0+aXQhPT0oUGFyc2VTW3N0cl18fHN0cikgKyB2aXBVcmwpO1xcXFxuICAgICAgICAgICAgICAgIGxldCBuYW1lTGlzdCA9IGV4dHJhLm5hbWVMaXN0O1xcXFxuICAgICAgICAgICAgICAgIG5hbWVMaXN0LnVuc2hpZnQoc3RyKTtcXFxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB1bmlxdWUyKGFycmF5KXtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChhcnJheSkpO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBleHRyYS5uYW1lTGlzdD11bmlxdWUyKG5hbWVMaXN0KTtcXFxcbiAgICAgICAgICAgICAgICBleHRyYS5wbGF5VXJsTGlzdCA9IHVuaXF1ZTIoZXh0cmEucGxheVVybExpc3QpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgIGV4dHJhID0ge31cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYj9QYXJzZVMuZGVmYXVsdFBhcnNlV2ViKChQYXJzZVNbc3RyXXx8c3RyKSArIHZpcFVybCx0aW1lb3V0LGV4dHJhKTooUGFyc2VTW3N0cl18fHN0cikgKyB2aXBVcmw7XFxcXG4gICAgfSBlbHNlIGlmKHR5cGVvZihzdHIpPT09J3N0cmluZycmJnN0ci5sZW5ndGg+MSYmKHR5cGVvZiBQYXJzZVNbc3RyXT09J3VuZGVmaW5lZCd8fCFQYXJzZVNbc3RyXSkmJiEvXmh0dHAvLnRlc3Qoc3RyKSl7XFxcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/or7fov5vooYzmlq3mj5LphY3nva4s5o6o6I2Q5ouJ5Y+W6YGT6ZW/57K+6YCJIVxcXFxcXFxcbuajgOa1i+WIsOaXoOaViOeahOino+aekOmFjee9rjonK3N0cjtcXFxcbiAgICB9ZWxzZSB7XFxcXG4gICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlKHN0ciArIHZpcFVybCx0aW1lb3V0KTtcXFxcbiAgICB9XFxcXG59XFxcXG5cXFxcbnZhciBwbGF5UGFyc2UgPSB7XFxcXG4gICAgcGxheWVyX3h4OiBmdW5jdGlvbihqdXJsLCBMYWJlbCkge1xcXFxuICAgICAgICByZXR1cm4gJChqdXJsKS5sYXp5UnVsZSgoaykgPT4ge1xcXFxuICAgICAgICAgICAgdmFyIGpzVXJsID0gSlNPTi5wYXJzZShmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKSkuY2o7XFxcXG4gICAgICAgICAgICB2YXIgTGFiZWwgPSBrO1xcXFxuICAgICAgICAgICAgdmFyIGZhID0gWydsZXR2JywgJ3BwdHYnLCAncXEnLCAneW91a3UnLCAncWl5aScsICdpcWl5aScsICdtZ3R2JywgJ2JpbGliaWxpJywgJ3NvaHUnLCAnbWlndScsICdtMTkwNScsICd2aXAnXTtcXFxcbiAgICAgICAgICAgIHZhciBodG1sID0gcGFyc2VEb20ocmVxdWVzdChpbnB1dCksIExhYmVsKTtcXFxcbiAgICAgICAgICAgIGV2YWwoaHRtbC5yZXBsYWNlKC9wbGF5ZXJfLio/PXsvLCAncGRhdGE9eycpKTtcXFxcbiAgICAgICAgICAgIGV2YWwoZmV0Y2goanNVcmwpKTtcXFxcbiAgICAgICAgICAgIGlmIChwZGF0YS51cmwuc3Vic3RyKDAsIDgpLm1hdGNoKC9KVC4uSlQuLi8pKSB7XFxcXG4gICAgICAgICAgICAgICAgcGRhdGEudXJsID0gYmFzZTY0RGVjb2RlKHBkYXRhLnVybCk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpZiAocGRhdGEudXJsLnN1YnN0cigwLCA4KS5tYXRjaCgvJS4uJS4uLykpIHtcXFxcbiAgICAgICAgICAgICAgICBwZGF0YS51cmwgPSB1bmVzY2FwZShwZGF0YS51cmwpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaWYgKGZhLmluY2x1ZGVzKHBkYXRhLmZyb20pKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF5dG1QYXJzZShwZGF0YS51cmwpO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gcGRhdGEudXJsICsgJyNpc1ZpZGVvPXRydWUjJztcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSwgTGFiZWwpXFxcXG4gICAgfVxcXFxufTtcXFxcbmZ1bmN0aW9uIG16UG9wdXAoKSB7XFxcXG4gICAgaWYgKGdldFZhcihcXFxcXFxcImlqay10eFxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKSA9PSBcXFxcXFxcIjFcXFxcXFxcIikge1xcXFxuICAgICAgICBzZXRJdGVtKFxcXFxcXFwidGl4aW5nXFxcXFxcXCIsIFxcXFxcXFwiMVxcXFxcXFwiKVxcXFxuICAgICAgICBjbGVhclZhcihcXFxcXFxcImlqay10eFxcXFxcXFwiKVxcXFxuICAgIH1cXFxcbiAgICBpZiAoZ2V0SXRlbShcXFxcXFxcInRpeGluZ1xcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKSA9PSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgICAgIGNvbmZpcm0oe1xcXFxuICAgICAgICAgICAgdGl0bGU6ICflhY3otKPlo7DmmI4nLFxcXFxuICAgICAgICAgICAgY29udGVudDogJ+acrOeoi+W6j+S4jeaPkOS+m+inhumikeino+aekOacjeWKoVxcXFxcXFxcbuaJgOacieWGheWuueWdh+S7jueUqOaIt+WIhuS6q+S4reaUtumbhlxcXFxcXFxcbuS7heS+m+a1i+ivleWSjOWtpuS5oOS6pOa1gVxcXFxcXFxcblxcXFxcXFxcbuehruWumuWNs+iupOWPr++8jOS4jeWGjeaPkOmGkicsXFxcXG4gICAgICAgICAgICBjb25maXJtOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBwdXRWYXIoXFxcXFxcXCJpamstdHhcXFxcXFxcIiwgXFxcXFxcXCIxXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+eCueWHu+S6huehruiupFxcXFxcXFwiXFxcXG5cXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pXFxcXG4gICAgfVxcXFxufVxcXFxuaWYgKCFnZXRWYXIoXFxcXFxcXCJ0aXhpbmdcXFxcXFxcIikpIHtcXFxcbiAgICBtelBvcHVwKCk7XFxcXG4gICAgcHV0VmFyKCd0aXhpbmcnLCdvaycpO1xcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiBzYXZlQnV0dG9uKGNvbnRlbnQsbmFtZSkge1xcXFxuICAgIG5hbWUgPSBuYW1lfHwnJztcXFxcbiAgICB2YXIgZGF0YSA9IGNvbnRlbnQuc3BsaXQoJ+KYheKYheKYhScpO1xcXFxuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMikge1xcXFxuICAgICAgICB2YXIgX2R0ID0gcGFyc2VQYXN0ZShkYXRhWzBdKTtcXFxcbiAgICAgICAgY29udGVudCA9IF9kdC5zdWJzdHIoMCwgNikgIT09ICdlcnJvcjonID8gX2R0IDogJyc7XFxcXG4gICAgfVxcXFxuICAgIGRhdGEgPSBjb250ZW50LnNwbGl0KCfimIUnKTtcXFxcbiAgICB2YXIgdHlwZSA9IGRhdGFbMF07XFxcXG4gICAgdmFyIGFyckxpc3QgPSBbXTtcXFxcbiAgICB2YXIgb2JqQ29kZSA9IHt9O1xcXFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDIgJiYgZGF0YVswXSAhPT0gJ+ebtOmTvicpIHtcXFxcbiAgICAgICAgdmFyIG9iaktleSA9IGRhdGFbMV07XFxcXG4gICAgICAgIHZhciBvYmpWYWx1ZSA9IGRhdGFbMl07XFxcXG4gICAgICAgIGlmICh0eXBlID09PSAnTXlQYXJzZVMnKSB7XFxcXG4gICAgICAgICAgICBvYmpWYWx1ZSA9IGJhc2U2NERlY29kZShvYmpWYWx1ZSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaWYgKG9ialZhbHVlLnNwbGl0KCdmdW5jdGlvbicpLmxlbmd0aCA+IDEpIHtcXFxcbiAgICAgICAgICAgIGV2YWwoJ29ialZhbHVlPScgKyBvYmpWYWx1ZSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgYXJyTGlzdC5zcGxpY2UoMCwgMCwgb2JqS2V5KTsgLy/mt7vliqDpobnnm67pnZ7liKDpmaRcXFxcbiAgICAgICAgb2JqQ29kZVtvYmpLZXldID0gb2JqVmFsdWU7XFxcXG5cXFxcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICfnm7Tpk74nKSB7XFxcXG4gICAgICAgIGFyckxpc3QgPSBkYXRhO1xcXFxuICAgICAgICBhcnJMaXN0LnNwbGljZSgwLCAxKTtcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICBhcnJMaXN0ID0gbnVsbDtcXFxcbiAgICB9XFxcXG4gICAgaWYgKGFyckxpc3QgIT0gbnVsbCkge1xcXFxuICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcXFxuICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXFxcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKHZhbCkge1xcXFxuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5pbmRleE9mKHZhbCk7XFxcXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xcXFxuICAgICAgICAgICAgICAgIHRoaXMuc3BsaWNlKGluZGV4LCAxKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfTtcXFxcbiAgICAgICAgaWYobmFtZSl7Ly/liKDpmaTlkI3np7DliJfooajlkozku6PnoIFcXFxcbiAgICAgICAgICAgIGpzb24udGl0bGUucmVtb3ZlKG5hbWUpO1xcXFxuICAgICAgICAgICAgZGVsZXRlIGpzb24uY29kZXNbbmFtZV07XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgYXJyTGlzdCA9IGFyckxpc3QuY29uY2F0KGpzb24udGl0bGUpO1xcXFxuICAgICAgICBqc29uLnRpdGxlID0gQXJyYXkuZnJvbShuZXcgU2V0KGFyckxpc3QpKTtcXFxcbiAgICAgICAgT2JqZWN0LmFzc2lnbihqc29uLmNvZGVzLCBvYmpDb2RlKTtcXFxcbiAgICAgICAgaWYgKHR5cGUgPT09ICfmtYvor5UnKSB7XFxcXG4gICAgICAgICAgICBldmFsKCd2YXIgY29uZmlnID0nICsgZmV0Y2goZ2V0VmFyKCdvbGRDb25maWcnKSkpO1xcXFxuICAgICAgICAgICAgZXZhbChmZXRjaChjb25maWcuY2opKTtcXFxcbiAgICAgICAgICAgIGlmICh0eXBlb2YgUGFyc2VTW2RhdGFbMV1dID09IFxcXFxcXFwiZnVuY3Rpb25cXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZVNbZGF0YVsxXV0oZGF0YVsyXSk7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlV2ViKFBhcnNlU1tkYXRhWzFdXSArIGRhdGFbMl0pO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5bey5L+d5a2Y5YaF5a65XFxcXFxcXCI7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+aXoOazleivhuWIq+i/meS4quWGheWuueWRolxcXFxcXFwiXFxcXG4gICAgfVxcXFxufVxcXFxuLy8g5Lul5LiL5Luj56CB5Y2D5LiH5LiN6KaB5pS+5Ye65p2l5ZCm5YiZ5oql6ZSZXFxcXG5pZiAoZ2V0SXRlbSgndXBkYXRlRGF0ZScpICE9IHVwZGF0ZURhdGUpIHtcXFxcbi8vIGlmICh0cnVlKSB7XFxcXG4gICAgLy8g5oqKZnVuY3Rpb27lj5jmiJBzdHJpbmdcXFxcbiAgICBsZXQgZnVuY3Rpb25Db2RlID0gc2F2ZUJ1dHRvbiArICc7JyttelBvcHVwO1xcXFxuICAgIC8vIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS9wbHNjUGFyc2UuaHRtbCcsIGZldGNoKF9teVNldC5ja0xpbmsgKyAncGxzY1BhcnNlLmh0bWwnKSk7XFxcXG4gICAgc2V0SXRlbSgnbXlGdW5jdGlvbicsIGZ1bmN0aW9uQ29kZSk7XFxcXG4gICAgc2V0SXRlbSgndXBkYXRlRGF0ZScsIHVwZGF0ZURhdGUpO1xcXFxufVxcXFxudmFyIGJqSXRlbSA9IHtcXFxcbiAgICBoZlBsdWdpbjogZnVuY3Rpb24ocGFyc2VSb3V0ZSkge1xcXFxuICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcXFxuICAgICAgICAgICAgaWYgKGZpbGVFeGlzdChrKSkge1xcXFxuICAgICAgICAgICAgICAgIHZhciBjamNhY2hlID0gZ2V0VmFyKCdjakNhY2hlJyk7XFxcXG4gICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChrKSk7XFxcXG4gICAgICAgICAgICAgICAganNvbi5zZXR0aW5ncy5jaiA9IGNqY2FjaGU7XFxcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGssICQuc3RyaW5naWZ5KGpzb24pKTtcXFxcbiAgICAgICAgICAgICAgICB2YXIgb2xkUm91dGUgPSBnZXRWYXIoJ29sZENvbmZpZycpO1xcXFxuICAgICAgICAgICAgICAgIHZhciBvbGRDb25maWcgPSBqc29uLnNldHRpbmdzO1xcXFxuICAgICAgICAgICAgICAgIG9sZENvbmZpZy5jaiA9IGNqY2FjaGU7XFxcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKG9sZFJvdXRlLCAkLnN0cmluZ2lmeShvbGRDb25maWcpKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aBouWkjeaIkOWKnyc7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/pnIDopoHlhYjmi4nlj5bliJfooagnXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0sIHBhcnNlUm91dGUpXFxcXG4gICAgfSxcXFxcbiAgICBwdWxsQ29kZTogZnVuY3Rpb24oaykge1xcXFxuICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcXFxuICAgICAgICAgICAgdmFyIHB1bGxNb2RlID0ga1swXTtcXFxcbiAgICAgICAgICAgIHZhciBwYXJzZVJvdXRlID0ga1sxXTtcXFxcbiAgICAgICAgICAgIHZhciBwYXJzZUZpbGUgPSBmZXRjaChwYXJzZVJvdXRlKTtcXFxcbiAgICAgICAgICAgIGlmICghcGFyc2VGaWxlKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHNldHRpbmdzID0gZmV0Y2goZ2V0VmFyKCdvbGRDb25maWcnKSk7XFxcXG4gICAgICAgICAgICAgICAgc2V0dGluZ3MgPSAhc2V0dGluZ3MgPyB7fSA6IEpTT04ucGFyc2Uoc2V0dGluZ3MpO1xcXFxuICAgICAgICAgICAgICAgIHZhciBqc29uID0ge307XFxcXG4gICAgICAgICAgICAgICAganNvbi5zZXR0aW5ncyA9IHNldHRpbmdzO1xcXFxuICAgICAgICAgICAgICAgIGpzb24udGl0bGUgPSBbXTtcXFxcbiAgICAgICAgICAgICAgICBqc29uLmNvZGVzID0ge307XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgcGFyc2VGaWxlKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHZhciBwYXJzZVRpdGxlID0gW107XFxcXG4gICAgICAgICAgICB2YXIgcGFyc2VDb2RlPXt9O1xcXFxuICAgICAgICAgICAgdmFyIGNqTGluayA9IGdldFZhcigncGx1Z2luTGluaycpO1xcXFxuICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICBpZigvQGJhc2U2NDpcXFxcXFxcXC9cXFxcXFxcXC8vLnRlc3QoY2pMaW5rKSl7XFxcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoYmFzZTY0RGVjb2RlKGNqTGluay5zcGxpdCgnQGJhc2U2NDovLycpWzFdKSk7XFxcXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoL+aPkuS7tuWQjS8udGVzdChjakxpbmspKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlYWxMaW5rID0gY2pMaW5rLnNwbGl0KCfmj5Lku7blkI0nKVswXS5yZXBsYWNlKC9bXFxcXFxcXFxzXS9nLCcnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbG9nKCfop6PmnpDkupHliarliIfmnb86JytyZWFsTGluayk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCB5UGFzdGUgPSBwYXJzZVBhc3RlKHJlYWxMaW5rKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYoL0BiYXNlNjQ6XFxcXFxcXFwvXFxcXFxcXFwvLy50ZXN0KHlQYXN0ZSkpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKGJhc2U2NERlY29kZSh5UGFzdGUuc3BsaXQoJ0BiYXNlNjQ6Ly8nKVsxXSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBQYXJzZVM9PT0ndW5kZWZpbmVkJyl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mi4nlj5bkuKrpuKHmr5vmj5Lku7Ys6YeM6Z2i6L+eUGFyc2VT5a+56LGh6YO95rKh5pyJISdcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9Y2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6bih5q+b5o+S5Lu25omn6KGM5oql6ZSZOlxcXFxcXFxcbicrZS5tZXNzYWdlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnKrog73or4bliKvkupHliarliIfmnb/kuK3nmoTlhoXlrrk6XFxcXFxcXFxuJyt5UGFzdGUuc3Vic3RyaW5nKDAsMTAwKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2pMaW5rID09PSAnUeelnicpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGppZXhpID0gZmV0Y2goJ2hpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0Jykuc3BsaXQoJ1xcXFxcXFxcbicpO1xcXFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgaW4gamlleGkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZT1qaWV4aVtpXS5zcGxpdCgnJiYnKVswXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlPWppZXhpW2ldLnNwbGl0KCcmJicpWzFdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09Y29kZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAvLyB9ZWxzZSBpZigvXiNbYS16QS1aMC05XXsyLDEwfSQvLnRlc3QoY2pMaW5rKSl7Ly/npo/liKnlj6Pku6Qy5YiwMTDkvY1cXFxcbiAgICAgICAgICAgICAgICBlbHNlIGlmKC9eI1tcXFxcXFxcXFNdezIsMTB9JC8udGVzdChjakxpbmspKXsvL+emj+WIqeWPo+S7pDLliLAxMOS9jeS7u+aEj+mdnuepuuWtl+espuS4slxcXFxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7dGFza0NhbGwsIHRhc2tSdW4sdGFza1JlcX0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvdGFza0NhbGw/cnVsZT3pgZPplb/ku5PlupNQcm9cXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgIC8vIGxvZygn5byA5aeL5omn6KGM5Lu75Yqh5LuT5bqT6I635Y+W5pat5b+15o+S5Lu256aP5Yip5Y+j5LukJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSB0YXNrQ2FsbCgxNywnRG5GdWxpJyxbY2pMaW5rXSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAwKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmV0ID0gSlNPTi5wYXJzZShyZXN1bHQucmVzdWx0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvZyhyZXQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmV0Lm9wdD09PSdlcnJvcicpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly8nK3JldC5tc2c7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihyZXQub3B0PT09J3VybCcpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBodG1sID0gZmV0Y2gocmV0LnJldCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFyciA9IGh0bWwuaW5jbHVkZXMoJ2h0dHAnKT8gaHRtbDpiYXNlNjREZWNvZGUoaHRtbCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGppZXhpID0gYXJyLm1hdGNoKC9bXFxcXFxcXFxTXSo/LC4qP1tcXFxcXFxcXHNdL2cpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgaW4gamlleGkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlPWppZXhpW2ldLnNwbGl0KCcsJylbMF07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlPWppZXhpW2ldLnNwbGl0KCcsJylbMV0uc3BsaXQoXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIilbMF07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUucHVzaCh0aXRsZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09Y29kZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihyZXQub3B0PT09J2p4Jyl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoL1tcXFxcXFxcXFNdKj8saHR0cFtcXFxcXFxcXFNdLy50ZXN0KHJldC5yZXQpKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gcmV0LnJldC5zcGxpdCgnLCcpWzBdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9IHJldC5yZXQuc3BsaXQoJywnKVsxXS5zcGxpdCgnXFxcXFxcXFxuJylbMF07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUucHVzaCh0aXRsZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09Y29kZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZigvXmh0dHAvLnRlc3QocmV0LnJldCkpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBjakxpbmsuc3BsaXQoJyMnKVsxXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSByZXQucmV0LnNwbGl0KCdcXFxcXFxcXG4nKVswXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb2RlW3RpdGxlXT1jb2RlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pyq55+l55qE56aP5YipOlxcXFxcXFxcbicrcmV0LnJldDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihyZXQub3B0PT09J3ZpcEp4Jyl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gY2pMaW5rLnNwbGl0KCcjJylbMV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSByZXQucmV0O1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvZyhjb2RlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlLnB1c2godGl0bGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09L2Z1bmN0aW9uLy50ZXN0KGNvZGUpP2V2YWwoY29kZSk6Y29kZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5LuT5bqT6Z2e5pyA5paw54mI5oiW6ICF56aP5Yip56S+5Yqf6IO95byA5Y+R5LitJ1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoY2pMaW5rPT09J+aWreaPkicpe1xcXFxuICAgICAgICAgICAgICAgICAgICBldmFsKGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qc1xcXFxcXFwiKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGU9T2JqZWN0LmtleXMoUGFyc2VTKTtcXFxcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZigvXmhpa2VyOlxcXFxcXFxcL1xcXFxcXFxcL3xeZmlsZTpcXFxcXFxcXC9cXFxcXFxcXC98Xmh0dHB8XlxcXFxcXFxcL3N0b3JhZ2VcXFxcXFxcXC98XlxcXFxcXFxcL3NkY2FyZFxcXFxcXFxcLy8udGVzdChjakxpbmspKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYoL15cXFxcXFxcXC9zdG9yYWdlXFxcXFxcXFwvfF5cXFxcXFxcXC9zZGNhcmRcXFxcXFxcXC8vLnRlc3QoY2pMaW5rKSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjakxpbmsgPSAnZmlsZTovLycrY2pMaW5rO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoZmV0Y2goY2pMaW5rKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGU9T2JqZWN0LmtleXMoUGFyc2VTKTtcXFxcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aLieWPluWPo+S7pOacieivrydcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgbG9nKGUubWVzc2FnZSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB2YXIganhKdWRnZSA9IHR5cGVvZiBQYXJzZVMgPT0gJ29iamVjdCc7XFxcXG4gICAgICAgICAgICB2YXIgbGJKdWRnZSA9IHR5cGVvZihwYXJzZVRpdGxlKSA9PSAnb2JqZWN0JztcXFxcbiAgICAgICAgICAgIGlmIChqeEp1ZGdlIHx8IGxiSnVkZ2UpIHtcXFxcbiAgICAgICAgICAgICAgICAvLyBpZiAocHVsbE1vZGUgPT09ICfliJfooagnKSB7XFxcXG4gICAgICAgICAgICAgICAgLy8gICAgIGlmICghbGJKdWRnZSkge1xcXFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgcGFyc2VUaXRsZSA9IE9iamVjdC5rZXlzKFBhcnNlUyk7XFxcXG4gICAgICAgICAgICAgICAgLy8gICAgIH1cXFxcbiAgICAgICAgICAgICAgICAvLyAgICAgdmFyIG5ld1BhcnNlVGl0bGUgPSBqc29uLnRpdGxlLmNvbmNhdChwYXJzZVRpdGxlKTtcXFxcbiAgICAgICAgICAgICAgICAvLyAgICAganNvbi50aXRsZSA9IEFycmF5LmZyb20obmV3IFNldChuZXdQYXJzZVRpdGxlKSk7XFxcXG4gICAgICAgICAgICAgICAgLy8gfVxcXFxuICAgICAgICAgICAgICAgIC8vIOS4jeeuoeaLieWPluS7o+eggei/mOaYr+WIl+ihqOmDveimgeaKiuWIl+ihqOaLieS6hlxcXFxuICAgICAgICAgICAgICAgIGlmICghbGJKdWRnZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlID0gT2JqZWN0LmtleXMoUGFyc2VTKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbG9nKHBhcnNlVGl0bGUpO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB2YXIgc2NPYmplY3QgPSBbXFxcXFxcXCJDaXR5SVBcXFxcXFxcIiwgXFxcXFxcXCJwY1VBXFxcXFxcXCIsIFxcXFxcXFwiY2FjaGVNM3U4XFxcXFxcXCIsIFxcXFxcXFwiZGVmYXVsdFBhcnNlXFxcXFxcXCIsXFxcXFxcXCJkZWZhdWx0UGFyc2VXZWJcXFxcXFxcIixcXFxcXFxcIm1hb3NzXFxcXFxcXCIsIFxcXFxcXFwiTExRXFxcXFxcXCIsXFxcXFxcXCJwYXJzZUxjXFxcXFxcXCJdO1xcXFxuICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUgPSBwYXJzZVRpdGxlP3BhcnNlVGl0bGUuZmlsdGVyKGl0PT4hc2NPYmplY3QuaW5jbHVkZXMoaXQpKTpbXTtcXFxcbiAgICAgICAgICAgICAgICB2YXIgbmV3UGFyc2VUaXRsZSA9IGpzb24udGl0bGUuY29uY2F0KHBhcnNlVGl0bGUpO1xcXFxuICAgICAgICAgICAgICAgIGpzb24udGl0bGUgPSBBcnJheS5mcm9tKG5ldyBTZXQobmV3UGFyc2VUaXRsZSkpO1xcXFxuXFxcXG4gICAgICAgICAgICAgICAgaWYgKHB1bGxNb2RlID09PSAn5Luj56CBJykge1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9yaWdpbmFsUGFyc2VTID09ICdvYmplY3QnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpIGluIHNjT2JqZWN0KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG9yaWdpbmFsUGFyc2VTW3NjT2JqZWN0W2ldXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yaWdpbmFsUGFyc2VTID1vcmlnaW5hbFBhcnNlUy5maWx0ZXIoaXQ9PiFzY09iamVjdC5pbmNsdWRlcyhPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpdClbMF0pKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oanNvbi5jb2Rlcywgb3JpZ2luYWxQYXJzZVMpO1xcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mKFBhcnNlUyk9PVxcXFxcXFwidW5kZWZpbmVkXFxcXFxcXCIpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oanNvbi5jb2RlcywgcGFyc2VDb2RlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3JldHVybiBcXFxcXFxcInRvYXN0Oi8v5rKh5pyJ5Luj56CB77yM5LiN5Y+v5ouJ5Y+WXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oanNvbi5jb2RlcywgUGFyc2VTKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAvL3ZhciBuZXdGaWxlID0gdG9vbHMudG9KU09OKGpzb24pOy8v6Ieq5a6a5LmJc3RyaW5naWZ55Ye95pWw77yM5bim5pyJ6L2s5LmJ5a2X56ymXFxcXG4gICAgICAgICAgICAgICAgdmFyIG5ld0ZpbGUgPSAkLnN0cmluZ2lmeShqc29uKTsgLy9KU09OLnBhcnNl5Lya5oql6ZSZXFxcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsIG5ld0ZpbGUpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ouJ5Y+WJyArIHB1bGxNb2RlICsgJ+aIkOWKnyc7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnKrojrflj5bliLDlr7nosaEnO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9LCBbaywgX215U2V0LnBhcnNlUm91dGVdKVxcXFxuICAgIH0sXFxcXG4gICAgcHVsbFNjcmlwdDogZnVuY3Rpb24oY2osIHg1KSB7XFxcXG4gICAgICAgIHJldHVybiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XFxcXG4gICAgICAgICAgICB2YXIgY2pGcm9tID0gJ2hpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb8nO1xcXFxuICAgICAgICAgICAgdmFyIHg1RnJvbSA9ICdoaWtlcjovL3BhZ2UvUGFyc2VfRG4uaHRtbD9ydWxlPU15RmllbGThtLDigb8nO1xcXFxuICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgY2pGaWxlID0gSlNPTi5wYXJzZShmZXRjaChjakZyb20pKS5ydWxlO1xcXFxuICAgICAgICAgICAgICAgIHZhciB4NUZpbGUgPSBKU09OLnBhcnNlKGZldGNoKHg1RnJvbSkpLnJ1bGU7XFxcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGtbMF0sIGNqRmlsZSk7XFxcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGtbMV0sIHg1RmlsZSk7XFxcXG4gICAgICAgICAgICAgICAgY2xlYXJWYXIoJ2p4T2xkVicpO1xcXFxuICAgICAgICAgICAgICAgIGNsZWFyVmFyKCdqeE5ld1YnKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aLieWPluaIkOWKnyc7XFxcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+acquaIkOWKn+iOt+WPluWGheWuuSc7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0sIFtjaiwgeDVdKVxcXFxuICAgIH0sXFxcXG4gICAgeGxTZWxlY3Q6IGZ1bmN0aW9uKGJpYW5qaSwgbGJMZW5ndGgpIHtcXFxcbiAgICAgICAgcmV0dXJuIFxcXFxcXFwic2VsZWN0Oi8vXFxcXFxcXCIgKyBKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICBvcHRpb25zOiBbJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6cmVkXFxcXFxcXCIgdGl0bGU9XFxcXFxcXCLliKDpmaR8fCcgKyBiaWFuamkgKyAnXFxcXFxcXCI+5YigIOmZpCcsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiNGNTc0NzRcXFxcXFxcIiB0aXRsZT1cXFxcXFxcIumakOiXj3x8JyArIGJpYW5qaSArICdcXFxcXFxcIj7pmpAg6JePJywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6I0ZGODAwMFxcXFxcXFwiIHRpdGxlPVxcXFxcXFwi5L+u5pS5fHwnICsgYmlhbmppICsgJ1xcXFxcXFwiPuS/riDmlLknLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojMDk4QUMxXFxcXFxcXCIgdGl0bGU9XFxcXFxcXCLnva7pobZ8fCcgKyBiaWFuamkgKyAnMCcgKyAnXFxcXFxcXCI+572uIOmhticsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiMwOThBQzFcXFxcXFxcIiB0aXRsZT1cXFxcXFxcIuenu+WKqHx8JyArIGJpYW5qaSArICdcXFxcXFxcIj7np7sg5YqoJywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzA5OEFDMVxcXFxcXFwiIHRpdGxlPVxcXFxcXFwi572u5bqVfHwnICsgYmlhbmppICsgbGJMZW5ndGggKyAnXFxcXFxcXCI+572uIOW6lScsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiMwNEI0MzFcXFxcXFxcIiB0aXRsZT1cXFxcXFxcIuWIhuS6q3x8JyArIGJpYW5qaSArICdcXFxcXFxcIj7lnLDmnb/liIbkuqsnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojMDRCNDMxXFxcXFxcXCIgdGl0bGU9XFxcXFxcXCLkupHliIbkuqt8fCcgKyBiaWFuamkgKyAnXFxcXFxcXCI+5LqR5p2/5YiG5LqrJ10sXFxcXG4gICAgICAgICAgICBjb2w6ICcyJyxcXFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcXFxuICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcXFxuICAgICAgICAgICAgICAgIHZhciBuZXdJbnB1dCA9IHBhcnNlRG9tRm9ySHRtbChpbnB1dCwgJ3NwYW4mJnRpdGxlJykuc3BsaXQoJ3x8Jyk7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBuZXdJbnB1dFswXTtcXFxcbiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IG5ld0lucHV0WzFdO1xcXFxuICAgICAgICAgICAgICAgIHZhciBudW0gPSBuZXdJbnB1dFsyXTtcXFxcbiAgICAgICAgICAgICAgICB2YXIgbnVtMiA9IG5ld0lucHV0WzNdO1xcXFxuICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwi5Yig6ZmkXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFxcXFxcIuWNs+WwhuWIoOmZpDogXFxcXFxcXCIgKyBuYW1lKS5jb25maXJtKChrKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBrWzBdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW0gPSBrWzFdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZVJvdXRlID0gZ2V0VmFyKCdwYXJzZVJvdXRlJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uY29kZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGpzb24uY29kZXNbbmFtZV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24udGl0bGUuc3BsaWNlKG51bSwgMSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/lt7LlsIbjgJZcXFxcXFxcIiArIG5hbWUgKyBcXFxcXFxcIuOAl+WIoOmZpFxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgW25hbWUsIG51bV0pO1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwi6ZqQ6JePXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFxcXFxcImhpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nI1xcXFxcXFwiKS5sYXp5UnVsZSgoaykgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0ga1swXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0ga1sxXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24udGl0bGUuc3BsaWNlKG51bSwgMSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/lt7LlsIbjgJZcXFxcXFxcIiArIG5hbWUgKyBcXFxcXFxcIuOAl+makOiXj1xcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5Y+v6IO95piv5Liq572R5Z2ALCDmgqjlj6/pgInmi6nliKDpmaRcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBbbmFtZSwgbnVtXSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCLkv67mlLlcXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYgKGpzb24uY29kZXNbbmFtZV0pIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuQ29kZSA9IG5hbWU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbk5hbWUgPSBcXFxcXFxcIui/meaYr+WQjeensFxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uY29kZXNbbmFtZV0pIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuQ29kZSA9IGpzb24uY29kZXNbbmFtZV0udG9TdHJpbmcoKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuTmFtZSA9IG5hbWU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFxcXFxcImhpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5I1xcXFxcXFwiKS5ydWxlKChrKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBbXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKGdldEl0ZW0oJ215RnVuY3Rpb24nKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBrWzBdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlID0ga1sxXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+S/nSDlrZgnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHNhdmVCdXR0b24gKyBcXFxcXFxcInNhdmVCdXR0b24oZ2V0VmFyKCdpbnB1dF9lZGl0JyksbmFtZSk7YmFjaygpO1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJpbnB1dFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIuW7uuiuruaMiem7mOiupOeahOS7o+eggeagvOW8j+S/ruaUueWTplxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IFxcXFxcXFwicHV0VmFyKCdpbnB1dF9lZGl0JywgaW5wdXQpXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcXFxcXFxcInRleHRhcmVhXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFxcXFxcXFwiLTFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6ICfkv67mlLnimIUnICsgbmFtZSArICfimIUnICsgY29kZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPHNtYWxsPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzZFQjg5N1xcXFxcXFwiPuagvOW8j+S4uu+8muaTjeS9nOexu+Wei+KYheagh+mimOKYhWZ1bmN0aW9uKCl76Ieq5a6a5LmJ5YaF5a65fTxicj7or7fli7/loavlhaXlhbbku5bmoLzlvI8nLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHNhdmVCdXR0b24sbmFtZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSBzYXZlQnV0dG9uKGdldFZhcignaW5wdXRfZWRpdCcpLG5hbWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFjaygpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suS/neWtmOS/ruaUuVxcXFxcXFxcbuivt+iHquihjOajgOa1i+ino+aekOaYr+WQpuacieiiq+imhueblueahOWGheWuuSc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZih0eXBlb2YoY29kZSk9PT0nc3RyaW5nJyYmY29kZS5sZW5ndGg+Mil7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgcmV0dXJuIGNvZGVcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lkv53lrZjkv67mlLknO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBzYXZlQnV0dG9uLG5hbWUpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiAn4oCY4oCY4oCZ4oCZPGJpZz48YmlnPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzI5OEEwOFxcXFxcXFwiPuS/nSDlrZgnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgW25OYW1lLCBuQ29kZV0pIC8vW25hbWUsIGpzb24uY29kZXNbbmFtZV0udG9TdHJpbmcoKV0pXFxcXG4gICAgICAgICAgICAgICAgICAgIC8qfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5Y+q5pyJ572R5Z2A5oiW6ICF5qCH6aKYLCDkuI3mlK/mjIHkv67mlLlcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgICAgICB9Ki9cXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcIue9rumhtlxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwi572u5bqVXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IGpzb24udGl0bGUuc3BsaWNlKG51bSwgMSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uLnRpdGxlLnNwbGljZShudW0yLCAwLCBpdGVtWzBdKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcIuenu+WKqFxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ2hpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdiaWFuamknLCAn56e75YqoIycgKyBrKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgbnVtKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcIuWIhuS6q1xcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwi5LqR5YiG5LqrXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5jb2Rlc1tuYW1lXSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZVRleHQgPSB0eXBlb2YganNvbi5jb2Rlc1tuYW1lXSA9PSAnZnVuY3Rpb24nID8gJC5zdHJpbmdpZnkoanNvbi5jb2Rlc1tuYW1lXSkgOiBqc29uLmNvZGVzW25hbWVdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGV4dCA9ICdNeVBhcnNlU+KYhScgKyBuYW1lICsgJ+KYhScgKyBiYXNlNjRFbmNvZGUocGFyc2VUZXh0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlVGV4dCA9ICfnm7Tpk77imIUnICsganNvbi50aXRsZVtudW1dO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gJ+S6keWIhuS6qycgJiYgcGFyc2VUZXh0LnN1YnN0cigwLCA4KSA9PSAnTXlQYXJzZVMnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUZXh0ID0gc2hhcmVQYXN0ZShwYXJzZVRleHQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVRleHQuc3Vic3RyKDAsIDYpICE9ICdlcnJvcjonID8gJ2NvcHk6Ly8nICsgcGFyc2VUZXh0ICsgJ1xcXFxcXFxcbuKYheKYheKYhVxcXFxcXFxcbicgKyAnTXlQYXJzZVPvvJonICsgbmFtZSA6ICd0b2FzdDovL+WIhuS6q+Wksei0pSEh5LqR5Ymq6LS05p2/5Y+v6IO95oyC5LqGJztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdjb3B5Oi8vJyArIHBhcnNlVGV4dDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mmoLkuI3mlK/mjIEnO1xcXFxuICAgICAgICAgICAgICAgIH0gLy9zd2l0Y2jnmoRcXFxcbiAgICAgICAgICAgIH0pIC8vU3RyaW5n55qEXFxcXG4gICAgICAgIH0pIC8vc3RyaW5naWZ555qEXFxcXG4gICAgfSxcXFxcbiAgICB4alBhcnNlOiBmdW5jdGlvbigpIHtcXFxcbiAgICAgICAgcmV0dXJuICQoXFxcXFxcXCJoaWtlcjovL2VtcHR5I25vSGlzdG9yeSNcXFxcXFxcIikucnVsZSgoKSA9PiB7XFxcXG4gICAgICAgICAgICB2YXIgZCA9IFtdO1xcXFxuICAgICAgICAgICAgZXZhbChnZXRJdGVtKCdteUZ1bmN0aW9uJykpO1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+S/nSDlrZgnLFxcXFxuICAgICAgICAgICAgICAgIHVybDogc2F2ZUJ1dHRvbiArIFxcXFxcXFwic2F2ZUJ1dHRvbihpbnB1dCk7YmFjaygpO2NsZWFyVmFyKCdpbnB1dF9hZGQnKVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImlucHV0XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLovpPlhaXmraPnoa7moLzlvI/lhoXlrrlcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogJ3B1dFZhcihcXFxcXFxcImlucHV0X2FkZFxcXFxcXFwiLCBpbnB1dCknLFxcXFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcXFxcXFxcInRleHRhcmVhXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogXFxcXFxcXCItMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcXFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcignaW5wdXRfYWRkJyksXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPHNtYWxsPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzZFQjg5N1xcXFxcXFwiPuaMieaPj+i/sOivieagvOW8j+i+k+WFpSwg6K+35Yu/5aGr5YWl5YW25LuW5qC85byPPGJyPuacrOWcsOWPo+S7pDog5pON5L2c57G75Z6L4piF5ZCN56ew4piF5Luj56CBPGJyPuS6keWPo+S7pDog6ZO+5o6l4piF4piF4piF5ZCN56ewOyDnuq/nvZHlnYA6IOebtOmTvuKYhXVybDHimIV1cmwyJyxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiAn4oCY4oCY4oCZ4oCZPGJpZz48YmlnPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzI5OEEwOFxcXFxcXFwiPuS/nSDlrZgnLFxcXFxuICAgICAgICAgICAgICAgIHVybDogJCgnbm9Mb2FkaW5nJykubGF6eVJ1bGUoKHNhdmVCdXR0b24pID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNhdmVCdXR0b24oZ2V0VmFyKCdpbnB1dF9hZGQnKSk7XFxcXG4gICAgICAgICAgICAgICAgfSwgc2F2ZUJ1dHRvbiksXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxcXG4gICAgICAgIH0pXFxcXG4gICAgfSxcXFxcbiAgICB5ZFBhcnNlOiBmdW5jdGlvbihCSm1vZGUsIGkpIHtcXFxcbiAgICAgICAgcmV0dXJuICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXFxcbiAgICAgICAgICAgIHZhciBBID0ga1swXS5zcGxpdCgnIycpWzFdO1xcXFxuICAgICAgICAgICAgdmFyIEIgPSBrWzFdO1xcXFxuICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXFxcbiAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcXFxuICAgICAgICAgICAgdmFyIGl0ZW0gPSBqc29uLnRpdGxlLnNwbGljZShBLCAxKTsgLy8gMTog5qCH6K6w5byA5aeL5L2N572u77yMMjog5Yig6Zmk5Yiw5ZOq5Liq5L2N572uXFxcXG4gICAgICAgICAgICBqc29uLnRpdGxlLnNwbGljZShCLCAwLCBpdGVtWzBdKTsgLy8gMTog5ZCM5LiK77yMMjogMOihqOekuuS4jeWIoOmZpO+8jDM6IOa3u+WKoOWvueixoVxcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXFxcbiAgICAgICAgICAgIGNsZWFyVmFyKCdiaWFuamknKTtcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxcXG4gICAgICAgIH0sIFtCSm1vZGUsIGldKVxcXFxuICAgIH0sXFxcXG4gICAgcGxzY1BhcnNlOiBmdW5jdGlvbigpIHtcXFxcbiAgICAgICAgcmV0dXJuICQoJ2hpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5IycpLnJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAgICAgdmFyIGQgPSBbXTtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfmibnph4/liKDpmaTop6PmnpAnLFxcXFxuICAgICAgICAgICAgICAgIGRlc2M6ICdhdXRvJiZmbG9hdCcsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiAnZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvY2FjaGUvcGxzY1BhcnNlLmh0bWwnLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcXFxuICAgICAgICB9KVxcXFxuICAgIH1cXFxcbn07XFxcXG5cXFxcbmZ1bmN0aW9uIHNldFBhcnNlKCkge1xcXFxuICAgICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcIikuc2V0UGFyc2UoKTtcXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLosIPnlKjot6/nlLFcXFwiLFxcXCJwYXRoXFxcIjpcXFwiUm91dGVcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG5jb25zdCBkID0gW107XFxcXG5jb25zdCBkYXRhID0ge307XFxcXG5cXFxcbmRhdGEub2xkQ29uZmlnID0gXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXFxcXFwiO1xcXFxuZGF0YS5jalJvdXRlID0gXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzXFxcXFxcXCI7XFxcXG5kYXRhLng1Um91dGUgPSBcXFxcXFxcImZpbGU6Ly8vc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL2NhY2hlL1BhcnNlX0RuLmh0bWxcXFxcXFxcIjtcXFxcblxcXFxuXFxcXG5kYXRhLmp4TGF6eSA9IFxcXFxcXFwiZXZhbCgndmFyIGNvbmZpZyA9JyArIGZldGNoKCdcXFxcXFxcIiArIGRhdGEub2xkQ29uZmlnICsgXFxcXFxcXCInKSk7ZXZhbChmZXRjaChjb25maWcuY2opKTtheXRtUGFyc2UoaW5wdXQpXFxcXFxcXCI7XFxcXG5cXFxcbmRhdGEuc3pQYXJzZSA9IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPeiuvue9riNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFxcXFxcIjtcXFxcblxcXFxuZGF0YS5zZXRQYXJzZSA9IGZ1bmN0aW9uKCkge1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIGRlc2M6ICc3OTUnLFxcXFxuICAgICAgICB1cmw6IHRoaXMueDVSb3V0ZSxcXFxcbiAgICAgICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZSdcXFxcbiAgICB9KTtcXFxcbiAgICB2YXIgb2xkViA9IGdldFZhcignanhPbGRWJyk7XFxcXG4gICAgdmFyIG5ld1YgPSBnZXRWYXIoJ2p4TmV3VicpO1xcXFxuICAgIHZhciB2ZXJzaW9uVGlwcyA9IHBhcnNlRmxvYXQobmV3VikgPiBwYXJzZUZsb2F0KG9sZFYpID8gJ+KAmOKAmOacieaWsOeJiOacrDogdicgKyBuZXdWIDogJ+KAmOKAmCc7XFxcXG4gICAgdmFyIHBpY3MgPSBbXFxcXG4gICAgICAgICdodHRwczovL2Nkbi5zZW92eC5jb20vaW1nL3Nlb3Z4LTIwLTEwJTIwKDkyKS5qcGcnLFxcXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9tb20yMDE4JTIwKDIwNykuanBnJyxcXFxcbiAgICAgICAgJ2h0dHBzOi8vdHZhNC5zaW5haW1nLmNuL2xhcmdlLzliZDliMTY3Z3kxZndyaDV4b2x0ZGoyMWhjMHUwdGF4LmpwZycsXFxcXG4gICAgICAgICdodHRwczovL3R2YTEuc2luYWltZy5jbi9sYXJnZS8wMDVCWXFwZ2d5MWZ3cmV5dTRubDZqMzFoYzB1MGFoci5qcGcnLFxcXFxuICAgICAgICAnaHR0cHM6Ly9zMy5ibXAub3ZoL2ltZ3MvMjAyMS8xMC9kN2U2MGI5OTA3NDIwOTNkLmpwZWcnLFxcXFxuICAgICAgICAnaHR0cHM6Ly9zMy5ibXAub3ZoL2ltZ3MvMjAyMS8xMC85MWFkNmQ2NTM4YmY4Njg5LmpwZycsXFxcXG4gICAgICAgICdodHRwczovL3R2YTEuc2luYWltZy5jbi9sYXJnZS8wMDVCWXFwZ2d5MWZ3cmVzbDVwbWxqMzFoYzB4Y3drYS5qcGcnLFxcXFxuICAgICAgICAnaHR0cHM6Ly90dmEzLnNpbmFpbWcuY24vbGFyZ2UvMDA1QllxcGdneTFmd3JnamRrNzRvajMxaGMwdTBkcW4uanBnJyxcXFxcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnNlb3Z4LmNvbS9pbWcvbW9tMjAxOCUyMCgzMjApLmpwZycsXFxcXG4gICAgICAgICdodHRwczovL2Nkbi5zZW92eC5jb20vaW1nL21vbTIwMTglMjAoODAzKS5qcGcnXFxcXG4gICAgXTtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICBpbWc6IHBpY3NbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTApXSxcXFxcbiAgICAgICAgdGl0bGU6IHZlcnNpb25UaXBzICsgJ+KAmeKAmTxzbWFsbD48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiM2RUI4OTdcXFxcXFxcIj48YnI+44CA44CA54K55Ye75LiK5pa55aS05YOP6L+b5YWl57yW6L6RPGJyPueCueatpOi/m+WFpeiuuuWdm+W4luWtkOWIl+ihqCcsXFxcXG4gICAgICAgIGRlc2M6ICflvZPliY3niYjmnKw6IHYnICsgb2xkVixcXFxcbiAgICAgICAgdXJsOiAnaHR0cHM6Ly9oYWlrdW9zaGlqaWUuY24vdXNlci8xOTU4JyxcXFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xJ1xcXFxuICAgIH0pO1xcXFxuICBzZXRSZXN1bHQoZCk7XFxcXG59XFxcXG5cXFxcbnN3aXRjaCAoZ2V0UGFyYW0oXFxcXFxcXCJ0eXBlXFxcXFxcXCIpKSB7XFxcXG4gICAgY2FzZSBcXFxcXFxcIuiuvue9rlxcXFxcXFwiOlxcXFxuICAgICAgICBkYXRhLnNldFBhcnNlKCk7XFxcXG4gICAgICAgIC8vc2V0UmVzdWx0KGQpO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlIFxcXFxcXFwi57yW6L6RXFxcXFxcXCI6XFxcXG4gICAgICAgICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9qeEl0ZW0/cnVsZT1NeUZpZWxk4bSw4oG/XFxcXFxcXCIpLmp4TGlzdCgpO1xcXFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuXFxcXHRjYXNlIFxcXFxcXFwi5Li76aKYXFxcXFxcXCI6XFxcXG5cXFxcdCAgICAgJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3RoZW1lP3J1bGU9TXlGaWVsZOG0sOKBv1xcXFxcXFwiKS50aGVtZUluaXQoKTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG5cXFxcdGNhc2UgXFxcXFxcXCLop6PmnpBcXFxcXFxcIjpcXFxcblxcXFx0ICAgICAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvanhNYW5hZ2U/cnVsZT1NeUZpZWxk4bSw4oG/XFxcXFxcXCIpLmp4TWFuYWdlKCk7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGRlZmF1bHQ6XFxcXG4gICAgICAgICQuZXhwb3J0cyA9IGRhdGE7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuino+aekOmhueS4u+eVjOmdolxcXCIsXFxcInBhdGhcXFwiOlxcXCJqeEl0ZW1cXFwiLFxcXCJydWxlXFxcIjpcXFwidmFyIF8weG9kUj0nanNqaWFtaS5jb20udjYnLF8weDQ4NTU9W18weG9kUiwndzdGTHc3a2lKUT09JywnQThLdkpDL0RpUT09JywnUjhLdHc1SERxOEtTUWNPTycsJ3c1L0NnVnZDcmk5RndybDRYQlJXdzZyQ2lnPT0nLCdJVFRDbWNPd3dwM0NxQT09JywnR1FoR1k4S0onLCdHTUsxVXNLL1ZBPT0nLCd3cGpDdmlSSCcsJ0hBTVFTdzQ9JywnQXNLTkhEdkRxZz09JywnWmNLUndvWENrdz09Jywnd3AvQ213NSt3b0U9JywnSU1PL1BBbkRqZz09Jywnd294bnc1SERtQ1k9Jywnd29MQ3RRQkZ3b1E9JywnZDhPb05XL0Nsdz09JywnZVJIQ29TQWknLCdKY09tYmNPb0FNT3MnLCdKOEs4dzVURGt4d3lBZz09JywndzdZekFTTT0nLCd3cWNKd3ByQ2pGVT0nLCdmUUxDdlNzSicsJ09NT0J3cHdWdzZvPScsJ3c2RERyY09WRGNPdScsJ05zS0VGVFREcmc9PScsJ1ZNT3ZQOEs3S2c9PScsJ09BNVVRc0tyJywnUDhLMnc0M0RrUT09JywnSTNQRG04S0EnLCdHY0tSTmhYRHZnPT0nLCd3NFBDbDI1cXc2TT0nLCdQc081YjhPTEdBPT0nLCdLMnJEdThLTmFqSnVjZz09JywnRU1LcHc1WENzc09Zd28vRGtjT04nLCd3Nmsyd3BZSScsJ05UWENoY09Sd3A4PScsJ2VzT1hBTUtiTHc9PScsJ3dyaHNGVjFwJywnd3BUQ3R3Uld3cDlDd3FQRGpRPT0nLCdLbkhEZ3NLZGZnPT0nLCdVMFhEazF4eicsJ1JzT2ZQd3Qyd3JMRGxnPT0nLCd3cm9Td3IvRHFHYkNxc09sVUN2RGtNS1p3NmJEaUdzcCcsJ0U4S0hlTUtqYXc9PScsJ1hjT0p3NHMrd3JuRGptRENuOEttVDhPU3c0VENoUlhDdU1PendyM0Nsc0taSGNLM3c2WERoOE8wTWc9PScsJzVvbUI1WSs2NUxpcDVvMkE1THV4NVpLKzU3MkU2YUs3NkllUTVwNkknLCdKMlBEa01LY1dUUm9hQnNBSnkxWScsJzVwTy81THl1NW95MjViNnEnLCc1b3U2NVkyQTVMcWw1NkM3JywnNTcrMDZMNmg2S1dVNXB5ZScsJ0t4OTVXTUtlQVE9PScsJzVvT2s1YVdMNW82ZzVMcTk2TGVDNWJ5ejVMcWw2YnVaNks2dicsJ0h5azlmVHZEa2duRHRIOXAnLCc2TDJFNVlhazVwMnY1cFdhNW95dzVMcXg1WjZnNVoycicsJ0F6VW5UZ1hEZ2szQ3QyRnVWc09qU0Y5b1ZoUENuMkhDcmpGcURETkJ3NGM9JywnNG9PdDRvR0s0b0d5NG9LVndwSERxMnRHVk1La3dwcFdTQmpEcDhPbExPZVprK1c5dXVhTm1lZW5yZz09JywnNUx5YzU1YTI1NWlnNVlXUzVZaVQ2SUNQNlo2QzU1aUk1YnlGNktXbDU1YVE2SzZrNVp5aDZMUzI1WTYzRE9XbnFPYWZwZW1VZ2VtaHZPV0luK1c5cHVpdHQrV2ZrK1M1cE9pbHJlaXR0dWFBcHc9PScsJ3dwM0Rvc0txdzR2Q2g4T2VhTUsrV2xyQ3MzVWdSOEtpVjMzRGoxcE13N3d5dzVrYVFNT3RTd05CdzRGdXc3UVFUTUtxJywnSWNPd1VzTzRLdz09Jywnd3B2Q2lERmR3b2s9JywndzRYQ3QwakNzQWc9JywndzRYRHFVN0NyY091JywndzRyQ3MwckNpQU09JywnSU1LbVBVSENqQT09JywnRmNLVXc1ZkNvc09yJywnQ3lZM1VBOD0nLCdZMmZEdVJsQicsJ0hHM0R0OE9kZnc9PScsJ1c4T2dMMzdEcHc9PScsJ1RjTzFIdzVpJywnd3BKRnc0VERwZz09JywndzdVcXdvc0ZaOEttdzcvRGwyNFYnLCdXaHRhdzVva3c2M0RpV0Zud3FUQ3NjT3RQeTVQd29Vb3c2ckNnd1Zrd3FzY05IUkVJY08wd3FMQ3M4SytVc09odzY3Q3MwRERoc09ad3BmRHNsd1lFZ3pEdmNPYVVTdkNwTU9YUEZmQ3BzT3dBOEtWd3JSMHc2eEp3NUxEbkZIRG1jSzV3cjdDZ3NLcHc3UXV3cWJDbVFROHdySER2WE4wVzM3RHRNS2ZHY09tSnNPajRiYTQ0b0cyd29WSXdwN0NsbmNsS1EwSEhUVmtKTU9HUGNPVndxbkRuQWpDb2xVYnc2YkRpTU96JywndzVKVVI4TzFjdz09JywndzR0Ync2RkV3cUp0WDBRPScsJ0tWZkR1OEtrUXc9PScsJ3c1UTl3cFFXR3c9PScsJ1FoTkR3NHd6d29YQ2lUdDJ3cXc9JywnNW9xZTVZeWo1WW1NNktHSCcsJ3c3aFpmc08rUkYxeHdxcz0nLCd3cTExdzUvRHJ3QT0nLCdKTUtDV0E5eU5NS2pOQT09JywnVVVQRHBXWm13NnZEbjFacXc3QT0nLCd3NEF5d3BrMEdnPT0nLCdjY09rREdIQ2dnPT0nLCdYTU9PSGd3PScsJ3c1dyt3cm5Eb3p3PScsJ3c1OXZ3NlJtd3I0PScsJ3dvQWZFV289JywnR3NPSndybHV3NFU9Jywnd29UQ3ZRZGZ3b1pBd3FuRGx3PT0nLCdUTU9HUEJsR1VjSzNZeXpEdmc9PScsJ1h1V3VyK2FVaXVpMmpPVyt0V0hEcDM3Q3RSZzF3N05jTzhLM3dxQnF3b0hDaGdKalF4ckN2c09tWjhLblJYOE1GOE9IWXNPeFVBPT0nLCdKOEtBS0VjPScsJ0VzS1V3N0hEcGdnPScsJ1hNTzJFR25DaEE9PScsJ1M4T2dOMTNEalE9PScsJ3dvVENyVDUzd3A4PScsJ3dxZkNyUk4xd29zcHc1eENDMGs9JywndzZMQ2pVWENzeEU9Jywnd29kUVBVSnYnLCdOd0RDcE1PYndxdz0nLCdCc09td3FoT3c3N0Noc094Jywnd29BTEVIRkknLCdPY09xZnNPNUxjT2tGeXpDdVhYQ2ljS1N3N1o4UGpwZ1BYWERpbloydzdqQ3JNS2xPU1RDazhLVndyZ2FSalREb01LaXc3SVk0YmVGNG9PaScsJzRvR040b09CNG9LOTRvS21RU0lLdzQ3RHBjS1VHTU9DQ2NLa2Y4S2V3ck1Pd3ByRGdNS09Bc095dzQ1TEMyOGp3ckREcEJQQ3VNT01PY084d3FjUWVsND0nLCd3b0UzRThPNHc3TENxZz09JywnVE1PUkU4S3BEdz09Jywnd3Bjd0dNT1Z3N2M9JywnRFFKcVZNS0EnLCdHeFBDc01PZHdxRT0nLCd3NHAyZGNPQWN3PT0nLCdIOE9Td3IwQnc0OD0nLCdXM2JEbmkxYScsJ3c3aFpZY082JywndzZJdndwN0RnamM9JywnZjhPUk1WZkRpQT09Jywnd3FiQ293Uit3cDA9Jywnd29zRndvbkNua2M9JywnY2NPQkptM0NoUT09JywnRXNLRUVrUENoUT09JywnNG9PbzRvR3k0b0c3NG9DYkVjT0JCOE9ldzZzM3dwbkN2c0trd3JIRGtSckNzM01VdzZBRGM4T2F3NXRWRnNPS3dyY0d3cjlGdzVBPScsJ0dzS1dJV0RDb1E9PScsJ3dydG5LV0pNJywnZmNPQUY4S2NGQT09JywnWk1PdUFRaGgnLCc1NmVINVlpUGJRPT0nLCc1Nlc5NVl1dVNHcz0nLCd3NFlBdzVNYnc0N0NvQT09JywnZUIvQ2lTc0pIQT09JywndWpzQVNPalRPaW5heFptaXJ6LmNvbUsuTHY2PT0nXTsoZnVuY3Rpb24oXzB4MzE1MmRhLF8weDJmNzFkZixfMHgyMjkzOTYpe3ZhciBfMHg0MTAzOTk9ZnVuY3Rpb24oXzB4NGE4MjM4LF8weDE0NjdhNSxfMHhlMDQyMDUsXzB4MTdjZmQ3LF8weDM4MjQxNCl7XzB4MTQ2N2E1PV8weDE0NjdhNT4+MHg4LF8weDM4MjQxND0ncG8nO3ZhciBfMHg5NmQyNzQ9J3NoaWZ0JyxfMHg3MTkzNDI9J3B1c2gnO2lmKF8weDE0NjdhNTxfMHg0YTgyMzgpe3doaWxlKC0tXzB4NGE4MjM4KXtfMHgxN2NmZDc9XzB4MzE1MmRhW18weDk2ZDI3NF0oKTtpZihfMHgxNDY3YTU9PT1fMHg0YTgyMzgpe18weDE0NjdhNT1fMHgxN2NmZDc7XzB4ZTA0MjA1PV8weDMxNTJkYVtfMHgzODI0MTQrJ3AnXSgpO31lbHNlIGlmKF8weDE0NjdhNSYmXzB4ZTA0MjA1WydyZXBsYWNlJ10oL1t1QVNPVE9ueFpyektMPV0vZywnJyk9PT1fMHgxNDY3YTUpe18weDMxNTJkYVtfMHg3MTkzNDJdKF8weDE3Y2ZkNyk7fX1fMHgzMTUyZGFbXzB4NzE5MzQyXShfMHgzMTUyZGFbXzB4OTZkMjc0XSgpKTt9cmV0dXJuIDB4YWU5MTE7fTtyZXR1cm4gXzB4NDEwMzk5KCsrXzB4MmY3MWRmLF8weDIyOTM5Nik+Pl8weDJmNzFkZl5fMHgyMjkzOTY7fShfMHg0ODU1LDB4MTZiLDB4MTZiMDApKTt2YXIgXzB4NGI1YT1mdW5jdGlvbihfMHg0ZjVmYWQsXzB4M2VhYWYzKXtfMHg0ZjVmYWQ9fn4nMHgnWydjb25jYXQnXShfMHg0ZjVmYWQpO3ZhciBfMHgyYjQ0NGQ9XzB4NDg1NVtfMHg0ZjVmYWRdO2lmKF8weDRiNWFbJ1ppRWVjbyddPT09dW5kZWZpbmVkKXsoZnVuY3Rpb24oKXt2YXIgXzB4MWFlZDA1PXR5cGVvZiB3aW5kb3chPT0ndW5kZWZpbmVkJz93aW5kb3c6dHlwZW9mIHByb2Nlc3M9PT0nb2JqZWN0JyYmdHlwZW9mIHJlcXVpcmU9PT0nZnVuY3Rpb24nJiZ0eXBlb2YgZ2xvYmFsPT09J29iamVjdCc/Z2xvYmFsOnRoaXM7dmFyIF8weDEyNjBjZj0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0nO18weDFhZWQwNVsnYXRvYiddfHwoXzB4MWFlZDA1WydhdG9iJ109ZnVuY3Rpb24oXzB4MTZjYzE0KXt2YXIgXzB4NTQ4ODFkPVN0cmluZyhfMHgxNmNjMTQpWydyZXBsYWNlJ10oLz0rJC8sJycpO2Zvcih2YXIgXzB4NGE3ZjE5PTB4MCxfMHgyNDVmMTYsXzB4MmEyOTI1LF8weDE4M2EzYz0weDAsXzB4MWY3ZDkzPScnO18weDJhMjkyNT1fMHg1NDg4MWRbJ2NoYXJBdCddKF8weDE4M2EzYysrKTt+XzB4MmEyOTI1JiYoXzB4MjQ1ZjE2PV8weDRhN2YxOSUweDQ/XzB4MjQ1ZjE2KjB4NDArXzB4MmEyOTI1Ol8weDJhMjkyNSxfMHg0YTdmMTkrKyUweDQpP18weDFmN2Q5Mys9U3RyaW5nWydmcm9tQ2hhckNvZGUnXSgweGZmJl8weDI0NWYxNj4+KC0weDIqXzB4NGE3ZjE5JjB4NikpOjB4MCl7XzB4MmEyOTI1PV8weDEyNjBjZlsnaW5kZXhPZiddKF8weDJhMjkyNSk7fXJldHVybiBfMHgxZjdkOTM7fSk7fSgpKTt2YXIgXzB4MTUxMDdmPWZ1bmN0aW9uKF8weDNhOTdlYSxfMHgzZWFhZjMpe3ZhciBfMHgyZDRlZWE9W10sXzB4MTNkNzBiPTB4MCxfMHgxMGMxMmIsXzB4MzM2MDRlPScnLF8weDE1N2E1NT0nJztfMHgzYTk3ZWE9YXRvYihfMHgzYTk3ZWEpO2Zvcih2YXIgXzB4MzVhZWMzPTB4MCxfMHgxZmUyZWE9XzB4M2E5N2VhWydsZW5ndGgnXTtfMHgzNWFlYzM8XzB4MWZlMmVhO18weDM1YWVjMysrKXtfMHgxNTdhNTUrPSclJysoJzAwJytfMHgzYTk3ZWFbJ2NoYXJDb2RlQXQnXShfMHgzNWFlYzMpWyd0b1N0cmluZyddKDB4MTApKVsnc2xpY2UnXSgtMHgyKTt9XzB4M2E5N2VhPWRlY29kZVVSSUNvbXBvbmVudChfMHgxNTdhNTUpO2Zvcih2YXIgXzB4NDNhMGFjPTB4MDtfMHg0M2EwYWM8MHgxMDA7XzB4NDNhMGFjKyspe18weDJkNGVlYVtfMHg0M2EwYWNdPV8weDQzYTBhYzt9Zm9yKF8weDQzYTBhYz0weDA7XzB4NDNhMGFjPDB4MTAwO18weDQzYTBhYysrKXtfMHgxM2Q3MGI9KF8weDEzZDcwYitfMHgyZDRlZWFbXzB4NDNhMGFjXStfMHgzZWFhZjNbJ2NoYXJDb2RlQXQnXShfMHg0M2EwYWMlXzB4M2VhYWYzWydsZW5ndGgnXSkpJTB4MTAwO18weDEwYzEyYj1fMHgyZDRlZWFbXzB4NDNhMGFjXTtfMHgyZDRlZWFbXzB4NDNhMGFjXT1fMHgyZDRlZWFbXzB4MTNkNzBiXTtfMHgyZDRlZWFbXzB4MTNkNzBiXT1fMHgxMGMxMmI7fV8weDQzYTBhYz0weDA7XzB4MTNkNzBiPTB4MDtmb3IodmFyIF8weDg1NGFiMD0weDA7XzB4ODU0YWIwPF8weDNhOTdlYVsnbGVuZ3RoJ107XzB4ODU0YWIwKyspe18weDQzYTBhYz0oXzB4NDNhMGFjKzB4MSklMHgxMDA7XzB4MTNkNzBiPShfMHgxM2Q3MGIrXzB4MmQ0ZWVhW18weDQzYTBhY10pJTB4MTAwO18weDEwYzEyYj1fMHgyZDRlZWFbXzB4NDNhMGFjXTtfMHgyZDRlZWFbXzB4NDNhMGFjXT1fMHgyZDRlZWFbXzB4MTNkNzBiXTtfMHgyZDRlZWFbXzB4MTNkNzBiXT1fMHgxMGMxMmI7XzB4MzM2MDRlKz1TdHJpbmdbJ2Zyb21DaGFyQ29kZSddKF8weDNhOTdlYVsnY2hhckNvZGVBdCddKF8weDg1NGFiMCleXzB4MmQ0ZWVhWyhfMHgyZDRlZWFbXzB4NDNhMGFjXStfMHgyZDRlZWFbXzB4MTNkNzBiXSklMHgxMDBdKTt9cmV0dXJuIF8weDMzNjA0ZTt9O18weDRiNWFbJ1pNRkptTSddPV8weDE1MTA3ZjtfMHg0YjVhWydneHZaU2gnXT17fTtfMHg0YjVhWydaaUVlY28nXT0hIVtdO312YXIgXzB4NGNiYTkxPV8weDRiNWFbJ2d4dlpTaCddW18weDRmNWZhZF07aWYoXzB4NGNiYTkxPT09dW5kZWZpbmVkKXtpZihfMHg0YjVhWydJYmhWdEsnXT09PXVuZGVmaW5lZCl7XzB4NGI1YVsnSWJoVnRLJ109ISFbXTt9XzB4MmI0NDRkPV8weDRiNWFbJ1pNRkptTSddKF8weDJiNDQ0ZCxfMHgzZWFhZjMpO18weDRiNWFbJ2d4dlpTaCddW18weDRmNWZhZF09XzB4MmI0NDRkO31lbHNle18weDJiNDQ0ZD1fMHg0Y2JhOTE7fXJldHVybiBfMHgyYjQ0NGQ7fTtldmFsKEpTT05bXzB4NGI1YSgnMCcsJ3RrJlonKV0oZmV0Y2goXzB4NGI1YSgnMScsJ1N1SGUnKSkpWydydWxlJ10pO2Z1bmN0aW9uIGJic1laKCl7dmFyIF8weDQ3YTliND17J0p4U01uJzpmdW5jdGlvbihfMHgyNDk5NTIsXzB4NGFiYzE1KXtyZXR1cm4gXzB4MjQ5OTUyK18weDRhYmMxNTt9LCdMR3dtQyc6J+enu+WKqCMnLCdHdkRWWSc6ZnVuY3Rpb24oXzB4NDYxZjJkLF8weDU0MDU3MSl7cmV0dXJuIF8weDQ2MWYyZCtfMHg1NDA1NzE7fSwnV2ZlSEQnOl8weDRiNWEoJzInLCd6aTFdJyksJ0VxSWxzJzon56e75YqoOlxcXFxcXFxceDIwJywnRWZmYm4nOl8weDRiNWEoJzMnLCdVI101JyksJ1J4a3hBJzpmdW5jdGlvbihfMHgzMmE3ZDAsXzB4MWE5MzJjKXtyZXR1cm4gXzB4MzJhN2QwKF8weDFhOTMyYyk7fSwnVkJHSkgnOidqZFJvdXRlJywnQlpnUnQnOmZ1bmN0aW9uKF8weDI2OTg0ZSxfMHg1Y2M5MjYpe3JldHVybiBfMHgyNjk4NGU9PT1fMHg1Y2M5MjY7fSwncmdHQ0MnOl8weDRiNWEoJzQnLCdeKE4pJyksJ01jek9XJzpmdW5jdGlvbihfMHgyODgwYmYsXzB4MmQ5MzA2LF8weDk3Nzg3YSl7cmV0dXJuIF8weDI4ODBiZihfMHgyZDkzMDYsXzB4OTc3ODdhKTt9LCdGVWpkbSc6XzB4NGI1YSgnNScsJ1UjXTUnKSwnbHFGaGInOmZ1bmN0aW9uKF8weDQzYmJlNil7cmV0dXJuIF8weDQzYmJlNigpO30sJ0ZVUnB5JzpmdW5jdGlvbihfMHgyMjY1YzIsXzB4YTFkNTY4LF8weDI5ZGUwMSl7cmV0dXJuIF8weDIyNjVjMihfMHhhMWQ1NjgsXzB4MjlkZTAxKTt9LCdYSU9iQic6J3ZhclxcXFxcXFxceDIweGRSb3V0ZT1cXFxcXFxcXHgyMlxcXFxcXFxceDIyOyd9O2lmKCFfMHg0N2E5YjRbXzB4NGI1YSgnNicsJ2JdKmMnKV0oZ2V0VmFyLF8weDQ3YTliNFtfMHg0YjVhKCc3Jywnc2FLdycpXSkpe2lmKF8weDQ3YTliNFtfMHg0YjVhKCc4JywnN0ZBcicpXShfMHg0N2E5YjRbXzB4NGI1YSgnOScsJ1QlJFgnKV0sXzB4NGI1YSgnYScsJ2ExcmsnKSkpe2RbXzB4NGI1YSgnYicsJzdGQXInKV0oeyd0aXRsZSc6XzB4NDdhOWI0W18weDRiNWEoJ2MnLCdCMGN1JyldKF8weDQ3YTliNFtfMHg0YjVhKCdkJywnRXUqdCcpXSxpKT09Qkptb2RlP18weDQ3YTliNFtfMHg0YjVhKCdlJywnKngwNScpXShfMHg0N2E5YjRbXzB4NGI1YSgnZicsJ2FFdjknKV0oXzB4NDdhOWI0W18weDRiNWEoJzEwJywnJVleOCcpXSxfMHg0N2E5YjRbXzB4NGI1YSgnMTEnLCcjTHhzJyldKSx4c0xpc3QpOl8weDRiNWEoJzEyJywndGsmWicpK3hzTGlzdCwndXJsJzpiakl0ZW1bJ3lkUGFyc2UnXShCSm1vZGUsaSksJ2NvbF90eXBlJzpfMHg0N2E5YjRbJ0VmZmJuJ119KTt9ZWxzZXtfMHg0N2E5YjRbXzB4NGI1YSgnMTMnLCcjTHhzJyldKHB1dFZhcixfMHg0N2E5YjRbJ0ZVamRtJ10sXzB4NDdhOWI0W18weDRiNWEoJzE0JywnS1pSYScpXShpc0xvZ2luKSk7XzB4NDdhOWI0W18weDRiNWEoJzE1JywnXihOKScpXShwdXRWYXIsJ2pkUm91dGUnLF8weDQ3YTliNFtfMHg0YjVhKCcxNicsJ3pETzUnKV0pO319cmV0dXJuIGdldFZhcihfMHg0N2E5YjRbJ0ZVamRtJ10pO312YXIganhJdGVtPXsnanhMaXN0JzpmdW5jdGlvbigpe3ZhciBfMHg0YzA0Mjc9eydVVldvRic6ZnVuY3Rpb24oXzB4MjZiYjA3LF8weDIyMWI0ZCl7cmV0dXJuIF8weDI2YmIwNytfMHgyMjFiNGQ7fSwna3pXREsnOmZ1bmN0aW9uKF8weDQ4NTRhOSxfMHgzZTk4YzUpe3JldHVybiBfMHg0ODU0YTkrXzB4M2U5OGM1O30sJ1hYeVFyJzpfMHg0YjVhKCcxNycsJ3pETzUnKSwnZ3RVbmonOmZ1bmN0aW9uKF8weDU5YWFmNyxfMHgyMmM2NmIpe3JldHVybiBfMHg1OWFhZjcrXzB4MjJjNjZiO30sJ1V0ZldmJzon4oCY4oCY4oCZ4oCZPHNtYWxsPjxzcGFuXFxcXFxcXFx4MjBzdHlsZT1cXFxcXFxcXHgyMmNvbG9yOiNGRTlBMkVcXFxcXFxcXHgyMj4nLCdRT3ZKVic6XzB4NGI1YSgnMTgnLCdyTCUwJyksJ0FCRXdCJzon4oCY4oCY4oCZ4oCZPHNwYW5cXFxcXFxcXHgyMHN0eWxlPVxcXFxcXFxceDIyY29sb3I6IzI5OEEwOFxcXFxcXFxceDIyPicsJ296eldHJzpfMHg0YjVhKCcxOScsJ1JFZTgnKSwnbldmVlInOmZ1bmN0aW9uKF8weDQ4MGYzYSxfMHg0Yzg0ZmMpe3JldHVybiBfMHg0ODBmM2ErXzB4NGM4NGZjO30sJ0pDY05ZJzoncGFyc2VSb3V0ZScsJ3JnRElwJzpfMHg0YjVhKCcxYScsJ2ZvVmsnKSwnaG9JZEonOifigJjigJjigJnigJk8YmlnPjxzcGFuXFxcXFxcXFx4MjBzdHlsZT1cXFxcXFxcXHgyMmNvbG9yOiM2RUI4OTdcXFxcXFxcXHgyMj7mlrBcXFxcXFxcXHgyMOW7ulxcXFxcXFxceDIw6KejXFxcXFxcXFx4MjDmnpAnLCdGckdPSCc6ZnVuY3Rpb24oXzB4MTJkNmRiLF8weDJhMDY4ZCl7cmV0dXJuIF8weDEyZDZkYjxfMHgyYTA2OGQ7fSwnb0NDU2onOmZ1bmN0aW9uKF8weDE5YjE3OCxfMHg0ZWY4ZjYpe3JldHVybiBfMHgxOWIxNzg9PT1fMHg0ZWY4ZjY7fSwnSFpobGMnOmZ1bmN0aW9uKF8weDVjYWUwMyxfMHgyNmUyNDIpe3JldHVybiBfMHg1Y2FlMDM9PV8weDI2ZTI0Mjt9LCdjZ0llQSc6ZnVuY3Rpb24oXzB4MjVlMzY4LF8weDhiYzhlOSl7cmV0dXJuIF8weDI1ZTM2OCtfMHg4YmM4ZTk7fSwneGRyRnYnOmZ1bmN0aW9uKF8weDRhYjVkOCxfMHgyMTI0MmYpe3JldHVybiBfMHg0YWI1ZDgrXzB4MjEyNDJmO30sJ3l3anV4JzpmdW5jdGlvbihfMHg1ZTMwNTEsXzB4NGUwMjMwKXtyZXR1cm4gXzB4NWUzMDUxKF8weDRlMDIzMCk7fX07dmFyIF8weDFkOGJiMT1nZXRWYXIoXzB4NGMwNDI3W18weDRiNWEoJzFiJywndUlQVycpXSk7dmFyIF8weDNiODlhYj1wYXJzZUZpbGVbXzB4NGI1YSgnMWMnLCc0aW01JyldO3ZhciBfMHg0OWRhOTY9Z2V0VmFyKF8weDRjMDQyN1sncmdESXAnXSk7ZFsncHVzaCddKHsndGl0bGUnOl8weDRjMDQyN1snaG9JZEonXSwndXJsJzpiakl0ZW1bXzB4NGI1YSgnMWQnLCdMTVpUJyldKCksJ2NvbF90eXBlJzpfMHg0YjVhKCcxZScsJ0U5ZTgnKX0pO3ZhciBfMHgyZWNiZTU9XzB4M2I4OWFiW18weDRiNWEoJzFmJywnc2FLdycpXTtmb3IodmFyIF8weGUyYzNkOD0weDA7XzB4NGMwNDI3W18weDRiNWEoJzIwJywnYl0qYycpXShfMHhlMmMzZDgsXzB4MmVjYmU1KTtfMHhlMmMzZDgrKyl7dmFyIF8weDMzNzg4Yz1fMHgzYjg5YWJbXzB4ZTJjM2Q4XTt2YXIgXzB4Mzc4NzFlPV8weDRjMDQyN1tfMHg0YjVhKCcyMScsJ1plMlYnKV0oXzB4MzM3ODhjLCcnKVsncmVwbGFjZSddKC9odHRwLipcXFxcXFxcXC9cXFxcXFxcXC8vZywnJyk7aWYoL+enu+WKqC9bXzB4NGI1YSgnMjInLCcqeDA1JyldKF8weDQ5ZGE5Nikpe2lmKF8weDRjMDQyN1tfMHg0YjVhKCcyMycsJ09EV2onKV0oXzB4NGI1YSgnMjQnLCc0aW01JyksJ3VLTHhGJykpe2RbXzB4NGI1YSgnMjUnLCcpYVROJyldKHsndGl0bGUnOl8weDRjMDQyN1tfMHg0YjVhKCcyNicsJ0w4Vm0nKV0oXzB4NGMwNDI3W18weDRiNWEoJzI3JywnTkU2UScpXStfMHhlMmMzZDgsXzB4NDlkYTk2KT9fMHg0YzA0MjdbXzB4NGI1YSgnMjgnLCd5dndsJyldKF8weDRjMDQyN1snY2dJZUEnXShfMHg0YzA0MjdbXzB4NGI1YSgnMjknLCdMOFZtJyldLF8weDRjMDQyN1tfMHg0YjVhKCcyYScsJyVZXjgnKV0pLF8weDM3ODcxZSk6XzB4NGMwNDI3W18weDRiNWEoJzJiJywnZm9WaycpXShfMHg0YzA0MjdbJ0FCRXdCJ10sXzB4Mzc4NzFlKSwndXJsJzpiakl0ZW1bJ3lkUGFyc2UnXShfMHg0OWRhOTYsXzB4ZTJjM2Q4KSwnY29sX3R5cGUnOl8weDRiNWEoJzJjJywnU3VIZScpfSk7fWVsc2V7dmFyIF8weDJiYzYxOD1fMHgzYjg5YWJbXzB4ZTJjM2Q4XTt2YXIgXzB4NWNmNDE3PV8weDRjMDQyN1snVVZXb0YnXShfMHgyYmM2MTgsJycpW18weDRiNWEoJzJkJywnemkxXScpXSgvaHR0cC4qXFxcXFxcXFwvXFxcXFxcXFwvL2csJycpO2lmKC/np7vliqgvWyd0ZXN0J10oXzB4NDlkYTk2KSl7ZFtfMHg0YjVhKCcyZScsJ3JMJTAnKV0oeyd0aXRsZSc6XzB4NGMwNDI3W18weDRiNWEoJzJmJywnYUV2OScpXShfMHg0YzA0MjdbJ1hYeVFyJ10sXzB4ZTJjM2Q4KT09XzB4NDlkYTk2P18weDRjMDQyN1tfMHg0YjVhKCczMCcsJ2ZvVmsnKV0oXzB4NGMwNDI3WydndFVuaiddKF8weDRjMDQyN1tfMHg0YjVhKCczMScsJ1QlJFgnKV0sXzB4NGMwNDI3W18weDRiNWEoJzMyJywnbURsRCcpXSksXzB4NWNmNDE3KTpfMHg0YzA0MjdbXzB4NGI1YSgnMzMnLCc0aW01JyldK18weDVjZjQxNywndXJsJzpiakl0ZW1bJ3lkUGFyc2UnXShfMHg0OWRhOTYsXzB4ZTJjM2Q4KSwnY29sX3R5cGUnOl8weDRjMDQyN1tfMHg0YjVhKCczNCcsJ14oTiknKV19KTt9ZWxzZXt2YXIgXzB4MTE5MzY1PVtfMHgyYmM2MTgsXzB4NGMwNDI3W18weDRiNWEoJzM1JywnYl0qYycpXShfMHhlMmMzZDgsJ3x8JyldW18weDRiNWEoJzM2JywnemkxXScpXSgnfHwnKTtkW18weDRiNWEoJzM3Jywnc0JwXicpXSh7J3RpdGxlJzpfMHg0YzA0MjdbXzB4NGI1YSgnMzgnLCc0aW01JyldKF8weDRjMDQyN1tfMHg0YjVhKCczOScsJ1FxQ3onKV0sXzB4NWNmNDE3KSwnY29sX3R5cGUnOl8weDRjMDQyN1tfMHg0YjVhKCczYScsJ1N1SGUnKV0sJ3VybCc6YmpJdGVtW18weDRiNWEoJzNiJywnc0JwXicpXShfMHgxMTkzNjUsXzB4MmVjYmU1W18weDRiNWEoJzNjJywnOVFMNicpXSgpKX0pO319fWVsc2V7dmFyIF8weGI3MDE5Mj1bXzB4MzM3ODhjLF8weGUyYzNkOCsnfHwnXVsnam9pbiddKCd8fCcpO2RbXzB4NGI1YSgnM2QnLCdCKUlvJyldKHsndGl0bGUnOl8weDRjMDQyN1tfMHg0YjVhKCczZScsJ3NhS3cnKV0oXzB4NGMwNDI3W18weDRiNWEoJzNmJywnXihOKScpXSxfMHgzNzg3MWUpLCdjb2xfdHlwZSc6XzB4NGMwNDI3W18weDRiNWEoJzQwJywnS1pSYScpXSwndXJsJzpiakl0ZW1bXzB4NGI1YSgnNDEnLCcqeDA1JyldKF8weGI3MDE5MixfMHgyZWNiZTVbJ3RvU3RyaW5nJ10oKSl9KTt9fV8weDRjMDQyN1tfMHg0YjVhKCc0MicsJ3NCcF4nKV0oY2xlYXJWYXIsXzB4NGMwNDI3W18weDRiNWEoJzQzJywnUndsSycpXSk7fSwnbHFGaWxlJzpmdW5jdGlvbigpe3ZhciBfMHg1NDFkNzY9eydhV2lScyc6ZnVuY3Rpb24oXzB4NDhkNzdiLF8weDE5MTYxZixfMHgyMWNiODUpe3JldHVybiBfMHg0OGQ3N2IoXzB4MTkxNjFmLF8weDIxY2I4NSk7fSwnd1NmbnonOmZ1bmN0aW9uKF8weDQ4NTBlYSl7cmV0dXJuIF8weDQ4NTBlYSgpO30sJ3FSUWRBJzpfMHg0YjVhKCc0NCcsJyM2czMnKSwnV1FpcWsnOl8weDRiNWEoJzQ1JywnYUV2OScpLCdwc0dkdCc6ZnVuY3Rpb24oXzB4MTcwNzgwLF8weDNiNTEyYSl7cmV0dXJuIF8weDE3MDc4MD09XzB4M2I1MTJhO30sJ2lteHJpJzondHJ1ZScsJ25Ta2p4JzpmdW5jdGlvbihfMHg5NWJmMzgsXzB4MzEzZjI1KXtyZXR1cm4gXzB4OTViZjM4IT09XzB4MzEzZjI1O30sJ2lWTmVNJzpfMHg0YjVhKCc0NicsJ1plMlYnKSwnSXdNVGwnOl8weDRiNWEoJzQ3JywnVCUkWCcpLCd4ZmRIayc6XzB4NGI1YSgnNDgnLCc3RkFyJyksJ3JHTHVBJzon5Li75o+S5Lu25a2Y5pS+6Lev5b6EOlxcXFxcXFxceDIwL2NhY2hlL1BhcnNlX0RuLmpzXFxcXFxcXFx4MGHnvZHpobXohJrmnKzlrZjmlL7ot6/lvoQ6XFxcXFxcXFx4MjAvY2FjaGUvUGFyc2VfRG4uaHRtbCcsJ3pRU0xFJzpfMHg0YjVhKCc0OScsJ3NCcF4nKSwnaHZpRGwnOmZ1bmN0aW9uKF8weDI2ZGI2MixfMHgzMTJmMWMpe3JldHVybiBfMHgyNmRiNjIoXzB4MzEyZjFjKTt9LCdaeFVndCc6XzB4NGI1YSgnNGEnLCcmTk1wJyksJ3NXRm9jJzpmdW5jdGlvbihfMHgyYTA0NGIsXzB4MTQ5YTNmKXtyZXR1cm4gXzB4MmEwNDRiK18weDE0OWEzZjt9LCdPRWhhdCc6XzB4NGI1YSgnNGInLCdFdSp0JyksJ1p2dFN1JzpfMHg0YjVhKCc0YycsJ3l2d2wnKSwnZ1hLTWInOid0b2FzdDovL+ivt+WFiOaLieWPluWIl+ihqCcsJ1dDT0RDJzpmdW5jdGlvbihfMHg0YWQzZDUsXzB4MzFmYTFlKXtyZXR1cm4gXzB4NGFkM2Q1PF8weDMxZmExZTt9LCdyQWtBaCc6XzB4NGI1YSgnNGQnLCdiXSpjJyksJ3lXYU9JJzpfMHg0YjVhKCc0ZScsJ3JMJTAnKSwneWp5aksnOiflvZPliY3orr7nva7kuLo6XFxcXFxcXFx4MjAnLCd0SFhlRSc6J+aLieWPluino+aekOWIl+ihqOaIluiAheino+aekOS7o+eggScsJ0dNVVl1Jzon5a2Y5pS+6Lev5b6EOlxcXFxcXFxceDIwL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicsJ21wWkJaJzpfMHg0YjVhKCc0ZicsJ09EV2onKSwneHZxZ0YnOl8weDRiNWEoJzUwJywnTDhWbScpLCdoZXVLeCc6XzB4NGI1YSgnNTEnLCdPRFdqJyksJ0lpZmlhJzpfMHg0YjVhKCc1MicsJ1UjXTUnKSwnUEZSSEEnOl8weDRiNWEoJzUzJywneFZmJScpLCdVTHdrVCc6XzB4NGI1YSgnNTQnLCddRDEzJyl9O2lmKF8weDU0MWQ3NltfMHg0YjVhKCc1NScsJ1N1SGUnKV0oXzB4NTQxZDc2W18weDRiNWEoJzU2JywnKngwNScpXShiYnNZWiksXzB4NTQxZDc2WydpbXhyaSddKSl7aWYoXzB4NTQxZDc2W18weDRiNWEoJzU3JywnRTllOCcpXShfMHg1NDFkNzZbJ2lWTmVNJ10sXzB4NTQxZDc2W18weDRiNWEoJzU4JywnMzY2ZScpXSkpe18weDU0MWQ3NltfMHg0YjVhKCc1OScsJ0U5ZTgnKV0ocHV0VmFyLCdiYnNZWicsXzB4NTQxZDc2W18weDRiNWEoJzVhJywnI0x4cycpXShpc0xvZ2luKSk7XzB4NTQxZDc2WydhV2lScyddKHB1dFZhcixfMHg1NDFkNzZbXzB4NGI1YSgnNWInLCc5UUw2JyldLF8weDU0MWQ3NlsnV1FpcWsnXSk7fWVsc2V7dmFyIF8weDRkMjVmZj1fMHg1NDFkNzZbJ0l3TVRsJ11bJ3NwbGl0J10oJ3wnKSxfMHg0YTk3Yzk9MHgwO3doaWxlKCEhW10pe3N3aXRjaChfMHg0ZDI1ZmZbXzB4NGE5N2M5KytdKXtjYXNlJzAnOmRbJ3B1c2gnXSh7J3RpdGxlJzpfMHg1NDFkNzZbXzB4NGI1YSgnNWMnLCdPRFdqJyldLCd1cmwnOmJqSXRlbVsncHVsbFNjcmlwdCddKF9teVNldFsnY2pjYWNoZSddLF9teVNldFsneDVjYWNoZSddKSwnZGVzYyc6XzB4NTQxZDc2W18weDRiNWEoJzVkJywnYTFyaycpXSwnY29sX3R5cGUnOl8weDU0MWQ3NlsnelFTTEUnXX0pO2NvbnRpbnVlO2Nhc2UnMSc6XzB4NTQxZDc2W18weDRiNWEoJzVlJywnNSNMIycpXShldmFsLF8weDU0MWQ3NltfMHg0YjVhKCc1ZicsJ0V1KnQnKV0oZ2V0VmFyLF8weDU0MWQ3NltfMHg0YjVhKCc2MCcsJ3pETzUnKV0pKTtjb250aW51ZTtjYXNlJzInOmRbXzB4NGI1YSgnNjEnLCd5dndsJyldKHsnY29sX3R5cGUnOl8weDRiNWEoJzYyJywnQilJbycpfSk7Y29udGludWU7Y2FzZSczJzp2YXIgXzB4MmFiMzk5PV8weDRiNWEoJzYzJywnJk5NcCcpO2NvbnRpbnVlO2Nhc2UnNCc6ZFsncHVzaCddKHsndGl0bGUnOl8weDU0MWQ3NltfMHg0YjVhKCc2NCcsJzdGQXInKV0sJ3VybCc6dHlwZW9mIGN6R3VpZGU9PV8weDRiNWEoJzY1JywnRnU0VCcpP2N6R3VpZGUoKTonJywnY29sX3R5cGUnOl8weDU0MWQ3NltfMHg0YjVhKCc2NicsJ3NCcF4nKV19KTtjb250aW51ZTtjYXNlJzUnOnhkUm91dGU9XzB4NTQxZDc2W18weDRiNWEoJzY3JywnejRzUycpXSh4ZFJvdXRlLF9teVNldFtfMHg0YjVhKCc2OCcsJyZOTXAnKV0pO2NvbnRpbnVlO2Nhc2UnNic6dmFyIF8weDNhOWFmZT1beyd0aXRsZSc6XzB4NGI1YSgnNjknLCcjTHhzJyksJ3VybCc6YmpJdGVtW18weDRiNWEoJzZhJywnN0ZBcicpXSgn5YiX6KGoJyl9LHsndGl0bGUnOl8weDU0MWQ3NltfMHg0YjVhKCc2YicsJ3l2d2wnKV0sJ3VybCc6YmpJdGVtW18weDRiNWEoJzZjJywnSlF1eicpXSgn5Luj56CBJyl9LHsndGl0bGUnOl8weDU0MWQ3NlsnWnZ0U3UnXSwndXJsJzpfMHg1NDFkNzZbJ2h2aURsJ10oZmlsZUV4aXN0LF8weDU0MWQ3NlsnaHZpRGwnXShnZXRWYXIsXzB4NGI1YSgnNmQnLCdSd2xLJykpKT09ISFbXT9fMHgyYWIzOTk6XzB4NTQxZDc2W18weDRiNWEoJzZlJywnejRzUycpXX1dO2NvbnRpbnVlO2Nhc2UnNyc6Zm9yKHZhciBfMHgxYTJjZGI9MHgwO18weDU0MWQ3NltfMHg0YjVhKCc2ZicsJyVZXjgnKV0oXzB4MWEyY2RiLF8weDNhOWFmZVsnbGVuZ3RoJ10pO18weDFhMmNkYisrKXtkW18weDRiNWEoJzcwJywnIzZzMycpXSh7J3RpdGxlJzpfMHgzYTlhZmVbXzB4MWEyY2RiXVtfMHg0YjVhKCc3MScsJ0IwY3UnKV0sJ3VybCc6XzB4M2E5YWZlW18weDFhMmNkYl1bJ3VybCddLCdjb2xfdHlwZSc6XzB4NTQxZDc2W18weDRiNWEoJzcyJywnRnU0VCcpXX0pO31jb250aW51ZTtjYXNlJzgnOmRbXzB4NGI1YSgnNzMnLCd0ayZaJyldKHsndGl0bGUnOl8weDU0MWQ3NltfMHg0YjVhKCc3NCcsJ3hWZiUnKV0sJ3VybCc6YmpJdGVtW18weDRiNWEoJzc1JywnKngwNScpXShfbXlTZXRbXzB4NGI1YSgnNzYnLCd6RE81JyldKSwnZGVzYyc6XzB4NTQxZDc2WydzV0ZvYyddKF8weDU0MWQ3NlsneWp5aksnXStteVNldFsnY2onXSxfMHg0YjVhKCc3NycsJ0pRdXonKSksJ2NvbF90eXBlJzpfMHg1NDFkNzZbJ3pRU0xFJ119KTtjb250aW51ZTtjYXNlJzknOmRbXzB4NGI1YSgnNzgnLCcjTHhzJyldKHsndGl0bGUnOl8weDU0MWQ3NlsndEhYZUUnXSwndXJsJzondG9hc3Q6Ly/or7flnKjkuIvmlrnpgInpobnmk43kvZwnLCdkZXNjJzpfMHg1NDFkNzZbXzB4NGI1YSgnNzknLCd6aTFdJyldLCdjb2xfdHlwZSc6XzB4NTQxZDc2W18weDRiNWEoJzdhJywnJVleOCcpXX0pO2NvbnRpbnVlO2Nhc2UnMTAnOmRbJ3B1c2gnXSh7J2NvbF90eXBlJzpfMHg1NDFkNzZbJ21wWkJaJ119KTtjb250aW51ZTtjYXNlJzExJzpkWydwdXNoJ10oeydkZXNjJzpfMHg1NDFkNzZbXzB4NGI1YSgnN2InLCdFdSp0JyldLCdjb2xfdHlwZSc6J2lucHV0JywnZXh0cmEnOnsndGl0bGVWaXNpYmxlJzohW10sJ2RlZmF1bHRWYWx1ZSc6XzB4NTQxZDc2W18weDRiNWEoJzdjJywnKngwNScpXShnZXRWYXIsXzB4NGI1YSgnN2QnLCdMOFZtJykpLCdvbkNoYW5nZSc6XzB4NTQxZDc2WydoZXVLeCddfX0pO2NvbnRpbnVlO31icmVhazt9fX1lbHNle2RbJ3B1c2gnXSh7J3RpdGxlJzpfMHg1NDFkNzZbXzB4NGI1YSgnN2UnLCdFOWU4JyldLCdkZXNjJzpfMHg1NDFkNzZbXzB4NGI1YSgnN2YnLCdLWlJhJyldLCd1cmwnOl8weDU0MWQ3NlsnVUx3a1QnXSwnY29sX3R5cGUnOl8weDU0MWQ3NltfMHg0YjVhKCc4MCcsJ3NhS3cnKV19KTt9fX07JFtfMHg0YjVhKCc4MScsJ3hWZiUnKV09anhJdGVtOztfMHhvZFI9J2pzamlhbWkuY29tLnY2JztcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLop6PmnpBVcmznvJbovpFcXFwiLFxcXCJwYXRoXFxcIjpcXFwiRWRpdFVybFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnNldFBhZ2VUaXRsZShcXFxcXFxcIuaPkuS7tuaOpeWPo+iuvue9rlxcXFxcXFwiKTtcXFxcbmxldCBkID0gW107XFxcXG5sZXQgcGFyc2VVcmxUZXh0ID0gcmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcXFxcXCIpO1xcXFxubGV0IHBhcnNlVXJsQXJyYXkgPSBwYXJzZVVybFRleHQuc3BsaXQoL1xcXFxcXFxcbi8pO1xcXFxubGV0IHNlbGVjdGVkID0gZ2V0SXRlbShcXFxcXFxcInNlbGVjdGVkXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxubGV0IGNsYXNzVGFiID0gW1xcXFxuICAgIFtcXFxcXFxcIumAieaLqVxcXFxcXFwiLCBcXFxcXFxcIjBcXFxcXFxcIl0sXFxcXG4gICAgW1xcXFxcXFwi5L+u5pS5XFxcXFxcXCIsIFxcXFxcXFwiMVxcXFxcXFwiXSxcXFxcbiAgICBbXFxcXFxcXCLliKDpmaRcXFxcXFxcIiwgXFxcXFxcXCIyXFxcXFxcXCJdXFxcXG5dO1xcXFxubGV0IGNsYXNzQSA9IGdldFZhcihcXFxcXFxcImNsYXNzXFxcXFxcXCIsIFxcXFxcXFwiMFxcXFxcXFwiKTtcXFxcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgY2xlYXJWYXIoXFxcXFxcXCJjbGFzc1xcXFxcXFwiKTtcXFxcbn0pKTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6IFxcXFxcXFwi5re75Yqg5paw55qE6Kej5p6QXFxcXFxcXCIsXFxcXG4gICAgdXJsOiAkKFxcXFxcXFwiXFxcXFxcXCIsXFxcXFxcXCLop6PmnpDlkI0mJuino+aekFVSTFxcXFxcXFwiKS5pbnB1dCgoKSA9PiB7XFxcXG4gICAgICAgIGxldCBwYXJzZVVybFRleHQgPSByZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFxcXFxcIik7XFxcXG4gICAgICAgIGxldCBwYXJzZVVybEFycmF5ID0gcGFyc2VVcmxUZXh0LnNwbGl0KC9cXFxcXFxcXG4vKTtcXFxcbiAgICAgICAgaWYoaW5wdXQuc3BsaXQoXFxcXFxcXCImJlxcXFxcXFwiKS5sZW5ndGghPT0yKXtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5qC85byP5LiN5q2j56GuXFxcXFxcXCI7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcGFyc2VVcmxBcnJheS5wdXNoKGlucHV0KTtcXFxcbiAgICAgICAgcGFyc2VVcmxUZXh0ID0gcGFyc2VVcmxBcnJheS5qb2luKFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIpO1xcXFxuICAgICAgICB3cml0ZUZpbGUoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXFxcXFwiLCBwYXJzZVVybFRleHQpO1xcXFxuICAgICAgICBcXFxcbiAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+S/ruaUueaIkOWKn1xcXFxcXFwiO1xcXFxuICAgIH0pLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcInNjcm9sbF9idXR0b25cXFxcXFxcIlxcXFxufSk7XFxcXG5mb3IgKGxldCBpdGVtIG9mIGNsYXNzVGFiKSB7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IGl0ZW1bMV0gPT09IGNsYXNzQSA/IFxcXFxcXFwi4oCc4oCcXFxcXFxcXCIgKyBpdGVtWzBdICsgXFxcXFxcXCLigJ3igJ1cXFxcXFxcIiA6IGl0ZW1bMF0sXFxcXG4gICAgICAgIHVybDogJChcXFxcXFxcIiNub0xvYWRpbmcjXFxcXFxcXCIpLmxhenlSdWxlKChrZXkpID0+IHtcXFxcbiAgICAgICAgICAgIHB1dFZhcihcXFxcXFxcImNsYXNzXFxcXFxcXCIsIGtleSk7XFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCI7XFxcXG4gICAgICAgIH0sIGl0ZW1bMV0pLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJzY3JvbGxfYnV0dG9uXFxcXFxcXCJcXFxcbiAgICB9KTtcXFxcbn1cXFxcbmxldCBmdW5jO1xcXFxuc3dpdGNoIChjbGFzc0EpIHtcXFxcbiAgICBjYXNlIFxcXFxcXFwiMFxcXFxcXFwiOlxcXFxuICAgICAgICBmdW5jID0gZnVuY3Rpb24odXJsLCB0aXRsZSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuICQodXJsICsgXFxcXFxcXCIjbm9Mb2FkaW5nI1xcXFxcXFwiKS5sYXp5UnVsZSgodGl0bGUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBsb2coXFxcXFxcXCJcXFxcXFxcXG7mm7TmlLnmjqXlj6M+IFxcXFxcXFwiICsgaW5wdXQpO1xcXFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcXFxcXCJzZWxlY3RlZFxcXFxcXFwiLCBpbnB1dCk7XFxcXG4gICAgICAgICAgICAgICAgc2V0SXRlbShcXFxcXFxcInNlbGVjdGVkMFxcXFxcXFwiLCB0aXRsZSArIFxcXFxcXFwiJiZcXFxcXFxcIiArIGlucHV0KTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip9cXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIH0sIHRpdGxlKTtcXFxcbiAgICAgICAgfTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSBcXFxcXFxcIjFcXFxcXFxcIjpcXFxcbiAgICAgICAgZnVuYyA9IGZ1bmN0aW9uKHVybCwgdGl0bGUsIGluZGV4KSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gJCh1cmwsIFxcXFxcXFwi6K+36L6T5YWl44CMXFxcXFxcXCIgKyB0aXRsZSArIFxcXFxcXFwi44CN55qE5paw5o6l5Y+jXFxcXFxcXCIpLmlucHV0KCh0aXRsZSwgaW5kZXgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VVcmxUZXh0ID0gcmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgIGxldCBwYXJzZVVybEFycmF5ID0gcGFyc2VVcmxUZXh0LnNwbGl0KC9cXFxcXFxcXG4vKTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWQxID0gcGFyc2VVcmxBcnJheVtpbmRleF07XFxcXG4gICAgICAgICAgICAgICAgcGFyc2VVcmxBcnJheVtpbmRleF0gPSB0aXRsZSArIFxcXFxcXFwiJiZcXFxcXFxcIiArIGlucHV0O1xcXFxuICAgICAgICAgICAgICAgIHBhcnNlVXJsVGV4dCA9IHBhcnNlVXJsQXJyYXkuam9pbihcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXFxcXFwiLCBwYXJzZVVybFRleHQpO1xcXFxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZDEgPT0gZ2V0SXRlbShcXFxcXFxcInNlbGVjdGVkMFxcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFwic2VsZWN0ZWRcXFxcXFxcIiwgaW5wdXQpO1xcXFxuICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFwic2VsZWN0ZWQwXFxcXFxcXCIsIHRpdGxlICsgXFxcXFxcXCImJlxcXFxcXFwiICsgaW5wdXQpO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip9cXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIH0sIHRpdGxlLCBpbmRleCk7XFxcXG4gICAgICAgIH07XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgXFxcXFxcXCIyXFxcXFxcXCI6XFxcXG4gICAgICAgIGZ1bmMgPSBmdW5jdGlvbih1cmwsIHRpdGxlLCBpbmRleCkge1xcXFxuICAgICAgICAgICAgcmV0dXJuICQoXFxcXFxcXCLnoa7orqTliKDpmaTjgIxcXFxcXFxcIiArIHRpdGxlICsgXFxcXFxcXCLjgI3vvJ9cXFxcXFxcIikuY29uZmlybSgodGl0bGUsIGluZGV4KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlVXJsVGV4dCA9IHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VVcmxBcnJheSA9IHBhcnNlVXJsVGV4dC5zcGxpdCgvXFxcXFxcXFxuLyk7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkMSA9IHBhcnNlVXJsQXJyYXlbaW5kZXhdO1xcXFxuICAgICAgICAgICAgICAgIHBhcnNlVXJsQXJyYXkuc3BsaWNlKGluZGV4LCAxKTtcXFxcbiAgICAgICAgICAgICAgICBwYXJzZVVybFRleHQgPSBwYXJzZVVybEFycmF5LmpvaW4oXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFxcXFxcIiwgcGFyc2VVcmxUZXh0KTtcXFxcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQxID09IGdldEl0ZW0oXFxcXFxcXCJzZWxlY3RlZDBcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlVXJsQXJyYXlbMF0pIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcXFxcXCJzZWxlY3RlZFxcXFxcXFwiLCBwYXJzZVVybEFycmF5WzBdLnNwbGl0KFxcXFxcXFwiJiZcXFxcXFxcIilbMV0gfHwgXFxcXFxcXCJcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFwic2VsZWN0ZWQwXFxcXFxcXCIsIHBhcnNlVXJsQXJyYXlbMF0pO1xcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFxcXFxcInNlbGVjdGVkXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFxcXFxcInNlbGVjdGVkMFxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip9cXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIH0sIHRpdGxlLCBpbmRleCk7XFxcXG4gICAgICAgIH07XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuXFxcXG59XFxcXG5mb3IgKGxldCBpIGluIHBhcnNlVXJsQXJyYXkpIHtcXFxcbiAgICBsZXQgaXRlbSA9IHBhcnNlVXJsQXJyYXlbaV0uc3BsaXQoXFxcXFxcXCImJlxcXFxcXFwiKTtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogc2VsZWN0ZWQgPT0gaXRlbVsxXSA/IFxcXFxcXFwi4oCY4oCYXFxcXFxcXCIgKyBpdGVtWzBdICsgXFxcXFxcXCLigJnigJlcXFxcXFxcIiA6IGl0ZW1bMF0sXFxcXG4gICAgICAgIHVybDogZnVuYyhpdGVtWzFdLCBpdGVtWzBdLCBpKSxcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF8zXFxcXFxcXCJcXFxcbiAgICB9KTtcXFxcbn1cXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLkuLvpopjnrqHnkIZcXFwiLFxcXCJwYXRoXFxcIjpcXFwidGhlbWVcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG4gICAgZnVuY3Rpb24gdGhlbWVJbml0KCl7XFxcXG4gICAgICAgIGNvbnN0IHtjb2xvcixzbWFsbH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5P3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcXFxcXCIpO1xcXFxuICAgICAgICBsZXQgZCA9IFtdO1xcXFxuICAgICAgICBsZXQgb3B0aW9ucyA9IFsn6YCJ5oupJywn5L+u5pS5Jywn5Yig6ZmkJywn5a+85Ye6J107XFxcXG5cXFxcbiAgICAgICAgZm9yKHZhciBpIGluIG9wdGlvbnMpe1xcXFxuICAgICAgICAgICAgbGV0IG9wdGlvbiA9IG9wdGlvbnNbaV07XFxcXG4gICAgICAgICAgICBsZXQgZmxhZyA9IGdldFZhcigndGhlbWUuZG5fb3B0aW9uJywn5paw5aKeJyk9PT1vcHRpb24/J/CfkYknOicnO1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTpmbGFnK29wdGlvbixcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiQob3B0aW9uKS5sYXp5UnVsZSgoKT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ3RoZW1lLmRuX29wdGlvbicsIGlucHV0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lorr7nva7mk43kvZznsbvlnovkuLo6JytpbnB1dDtcXFxcbiAgICAgICAgICAgICAgICB9KSxcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICB9XFxcXG5cXFxcbiAgICAgICAgbGV0IHRoZW1lUm91dGUgPSBcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlUaGVtZS5qc29uXFxcXFxcXCI7XFxcXG4gICAgICAgIGxldCBteVRoZW1lcyA9IHt9O1xcXFxuICAgICAgICBsZXQgdGhlbWVzID0ge307XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICBteVRoZW1lcyA9IEpTT04ucGFyc2UoZmV0Y2godGhlbWVSb3V0ZSkpO1xcXFxuICAgICAgICAgICAgdGhlbWVzID0gbXlUaGVtZXMudGhlbWVzW215VGhlbWVzLm5vd190aGVtZV07XFxcXG4gICAgICAgIH1jYXRjaCAoZSkge31cXFxcblxcXFxuXFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTon5a+85YWlJyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXFxcbiAgICAgICAgICAgIHVybDokKCcnLCfor7fovpPlhaXlr7zlhaXlj6Pku6QnKS5pbnB1dCgobXlUaGVtZXMsdGhlbWVSb3V0ZSk9PntcXFxcbiAgICAgICAgICAgICAgICBpZigvXuaWreaPkuS4u+mimEAuKj9AaHR0cC8udGVzdChpbnB1dCkpe1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGlucHV0LnNwbGl0KCdAJylbMV07XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBpbnB1dC5zcGxpdCgnQCcpWzJdO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgn56Gu5a6a6KaB5a+85YWl5pat5o+S5Li76aKYLScrbmFtZSsnIOWQlz8nKS5jb25maXJtKChuYW1lLHVybCxteVRoZW1lcyx0aGVtZVJvdXRlKT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBwYXJzZVBhc3RlKHVybCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGFzVGhlbWUgPSBteVRoZW1lcy50aGVtZXMuZmlsdGVyKGl0PT5pdC5uYW1lPT09bmFtZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihoYXNUaGVtZSYmaGFzVGhlbWUubGVuZ3RoPjApe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZCA9IG51bGw7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBqIGluIG15VGhlbWVzLnRoZW1lcyl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG15VGhlbWVzLnRoZW1lc1tqXS5uYW1lID09PSBuYW1lKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gajtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFpZCl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ntKLlvJXplJnor6/ml6Dms5Xopobnm5blr7zlhaU6XFxcXFxcXFxuJytpZFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2coJ+imhuebluWvvOWFpeS4u+mimGlkOicraWQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VGhlbWVzLnRoZW1lc1tpZF0gPSBPYmplY3QuYXNzaWduKEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKGNvbnRlbnQpKSx7J25hbWUnOm5hbWV9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VGhlbWVzLnRoZW1lcy5wdXNoKE9iamVjdC5hc3NpZ24oSlNPTi5wYXJzZShiYXNlNjREZWNvZGUoY29udGVudCkpLHsnbmFtZSc6bmFtZX0pKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvZyhteVRoZW1lcyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeShteVRoZW1lcykpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5oiQ5Yqf5a+85YWl5Li76aKYOlxcXFxcXFxcbicrbmFtZVxcXFxuICAgICAgICAgICAgICAgICAgICB9LG5hbWUsdXJsLG15VGhlbWVzLHRoZW1lUm91dGUpO1xcXFxuICAgICAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5peg5rOV6K+G5Yir55qE5a+85YWl5Y+j5LukOlxcXFxcXFxcbicraW5wdXQ7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSxteVRoZW1lcyx0aGVtZVJvdXRlKSxcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTon5paw5aKeJyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXFxcbiAgICAgICAgICAgIHVybDokKCkucnVsZSgobXlUaGVtZXMsdGhlbWVSb3V0ZSk9PntcXFxcbiAgICAgICAgICAgICAgICBsZXQgZD1bXTtcXFxcbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCk9PntcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgfSkpO1xcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5Li76aKY5ZCN56ewJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLmlq3mj5It6JOd6I6T5Li76aKYXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogXFxcXFxcXCJwdXRWYXIoJ3RoZW1lLm5ld19hZGRfbmFtZScsaW5wdXQpXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IHRydWUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcigndGhlbWUubmV3X2FkZF9uYW1lJywgJycpXFxcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDokLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdfYWRkX25hbWUgPSBnZXRWYXIoJ3RoZW1lLm5ld19hZGRfbmFtZScsICcnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kvaDovpPlhaXnmoTmmK86JytuZXdfYWRkX25hbWU7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJpbnB1dFxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLku6PnoIFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRWYXIoJ3RoZW1lLm5ld19hZGRfY29kZScsICcnKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFxcXFxcXFwidGV4dGFyZWFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDotMSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAncHV0VmFyKFxcXFxcXFwidGhlbWUubmV3X2FkZF9jb2RlXFxcXFxcXCIsaW5wdXQpJ1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6J+S/neWtmCcsXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0X2NlbnRlcl8xJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiQoKS5sYXp5UnVsZSgobXlUaGVtZXMsdGhlbWVSb3V0ZSk9PntcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gZ2V0VmFyKCd0aGVtZS5uZXdfYWRkX2NvZGUnLCAnJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGdldFZhcigndGhlbWUubmV3X2FkZF9uYW1lJywgJycpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIW5hbWUpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kvaDov5jmsqHloavlhpnkuLvpopjlkI3np7DlkaInXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3VGhlbWUgPSB7fTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGhlbWUgPSBKU09OLnBhcnNlKGNvZGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+mUmeivr+eahOS4u+mimGpzb27moLzlvI86XFxcXFxcXFxuJytlLm1lc3NhZ2U7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKG5ld1RoZW1lLHsnbmFtZSc6bmFtZX0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbXlUaGVtZXMudGhlbWVzLnB1c2gobmV3VGhlbWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkobXlUaGVtZXMpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suaWsOWinuaWreaPkuS4u+mimDonK25hbWVcXFxcbiAgICAgICAgICAgICAgICAgICAgfSxteVRoZW1lcyx0aGVtZVJvdXRlKVxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXFxcbiAgICAgICAgICAgIH0sbXlUaGVtZXMsdGhlbWVSb3V0ZSksXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6bXlUaGVtZXMudGhlbWVzPyfkuLvpopjliJfooag65YWx6K6hOicrY29sb3IobXlUaGVtZXMudGhlbWVzLmxlbmd0aCwnI2ZmNzAwMCcpKyfkuKrkuLvpopgnOlxcXFxcXFwi56ys5LiA5qyh5Yqg6L2977yM54K55q2k6L+b5Y675Yid5aeL5YyW5Li76aKY5YiX6KGoXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTondGV4dF8xJyxcXFxcbiAgICAgICAgICAgIHVybDonaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPeiuvue9riNub0hpc3RvcnkjJ1xcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOlxcXFxcXFwi5oGi5aSN5Ye65Y6C6K6+572uXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTondGV4dF9jZW50ZXJfMScsXFxcXG4gICAgICAgICAgICB1cmw6JChcXFxcXFxcIuWmguaenOS9oOeahOS4u+mimOayoeazleato+W4uOeUqOS6hu+8jOatpOaWueazleWPr+S7peaVkeeglu+8jOehruiupOaBouWkjT9cXFxcXFxcIikuY29uZmlybSgoKT0+e1xcXFxuICAgICAgICAgICAgICAgIGxldCB0aGVtZXMgPSB7bmFtZTon6buY6K6k5Li76aKYJyxjbG9zZUJ0bjp7Y29sb3I6JyNmNmY2ZjYnLGJhY2tncm91bmQ6JyNhYTk2ZGEnfSxzYXZlQnRuOntjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonIzA2ODAwNid9LHNhdmVDbG9zZUJ0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNUJGQzUnfSx0aXBzQnRuOntjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonIzA1QkZDNSd9LGJhcmxhYmVsOntjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonI2FhOTZkYSd9LGJhcklucHV0Ontjb2xvcjonI2FhOTZkYScsYmFja2dyb3VuZDonI2ZmZmZkMid9LHNlbGVjdDp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyNhYTk2ZGEnfSx9O1xcXFxuICAgICAgICAgICAgICAgIGxldCB0aGVtZURlZiA9IHtcXFxcXFxcIm5hbWVcXFxcXFxcIjpcXFxcXFxcIuaWreW/teWOn+earlxcXFxcXFwiLFxcXFxcXFwiY2xvc2VCdG5cXFxcXFxcIjp7XFxcXFxcXCJjb2xvclxcXFxcXFwiOlxcXFxcXFwiI0Y5RjBEQVxcXFxcXFwiLFxcXFxcXFwiYmFja2dyb3VuZFxcXFxcXFwiOlxcXFxcXFwiI2M1NDY0YVxcXFxcXFwifSxcXFxcXFxcInNhdmVCdG5cXFxcXFxcIjp7XFxcXFxcXCJjb2xvclxcXFxcXFwiOlxcXFxcXFwiI0Y5RjBEQVxcXFxcXFwiLFxcXFxcXFwiYmFja2dyb3VuZFxcXFxcXFwiOlxcXFxcXFwiIzA2ODAwNlxcXFxcXFwifSxcXFxcXFxcInNhdmVDbG9zZUJ0blxcXFxcXFwiOntcXFxcXFxcImNvbG9yXFxcXFxcXCI6XFxcXFxcXCIjRjlGMERBXFxcXFxcXCIsXFxcXFxcXCJiYWNrZ3JvdW5kXFxcXFxcXCI6XFxcXFxcXCIjMDVCRkM1XFxcXFxcXCJ9LFxcXFxcXFwidGlwc0J0blxcXFxcXFwiOntcXFxcXFxcImNvbG9yXFxcXFxcXCI6XFxcXFxcXCIjRjlGMERBXFxcXFxcXCIsXFxcXFxcXCJiYWNrZ3JvdW5kXFxcXFxcXCI6XFxcXFxcXCIjMDVCRkM1XFxcXFxcXCJ9LFxcXFxcXFwiYmFybGFiZWxcXFxcXFxcIjp7XFxcXFxcXCJjb2xvclxcXFxcXFwiOlxcXFxcXFwiI0Y5RjBEQVxcXFxcXFwiLFxcXFxcXFwiYmFja2dyb3VuZFxcXFxcXFwiOlxcXFxcXFwiI0QwNkI2Q1xcXFxcXFwifSxcXFxcXFxcImJhcklucHV0XFxcXFxcXCI6e1xcXFxcXFwiY29sb3JcXFxcXFxcIjpcXFxcXFxcIiNEMDZCNkNcXFxcXFxcIixcXFxcXFxcImJhY2tncm91bmRcXFxcXFxcIjpcXFxcXFxcIiNGOUYwREFcXFxcXFxcIn0sXFxcXFxcXCJzZWxlY3RcXFxcXFxcIjp7XFxcXFxcXCJjb2xvclxcXFxcXFwiOlxcXFxcXFwiI0Y5RjBEQVxcXFxcXFwiLFxcXFxcXFwiYmFja2dyb3VuZFxcXFxcXFwiOlxcXFxcXFwiI0QwNkI2Q1xcXFxcXFwifX07XFxcXG4gICAgICAgICAgICAgICAgbGV0IHRoZW1lUm91dGUgPSBcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlUaGVtZS5qc29uXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkoe25vd190aGVtZTon6buY6K6k5Li76aKYJyx0aGVtZXM6W3RoZW1lcyx0aGVtZURlZl19KSk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aWreaPkuS4u+mimOW3sumHjee9ruS4uuWHuuWOguiuvue9ridcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBmb3IodmFyIGkgaW4gbXlUaGVtZXMudGhlbWVzKXtcXFxcbiAgICAgICAgICAgIGxldCBub3dUaGVtID0gbXlUaGVtZXMudGhlbWVzW2ldO1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTpteVRoZW1lcy5ub3dfdGhlbWU9PT1ub3dUaGVtLm5hbWU/J/CfkYknK25vd1RoZW0ubmFtZTpub3dUaGVtLm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6J2ZsZXhfYnV0dG9uJyxcXFxcbiAgICAgICAgICAgICAgICB1cmw6JCgpLmxhenlSdWxlKChteXRoZW1lLG15VGhlbWVzLGksdGhlbWVSb3V0ZSk9PntcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9wdGlvbiA9IGdldFZhcigndGhlbWUuZG5fb3B0aW9uJywn5paw5aKeJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0aW9uKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WvvOWHuic6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG15dGhlbWVDb2RlID0gYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KG15dGhlbWUpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gc2hhcmVQYXN0ZShteXRoZW1lQ29kZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSAn5pat5o+S5Li76aKYQCcrbXl0aGVtZS5uYW1lKydAJyt1cmw7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weShjb2RlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5a+85Ye65Li65LqR5Y+j5Luk5bm25aSN5Yi25Yiw5Ymq5YiH5p2/J1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5L+u5pS5JzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChKU09OLnN0cmluZ2lmeShteXRoZW1lKSkuaW5wdXQoKG15dGhlbWUsbXlUaGVtZXMsaSx0aGVtZVJvdXRlKT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihteXRoZW1lLm5hbWU9PT1teVRoZW1lcy5ub3dfdGhlbWUpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+atpOS4u+mimOW9k+WJjeato+WcqOS9v+eUqOS4re+8jOS4jeWFgeiuuOS/ruaUuSEnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUaGVtZXMudGhlbWVzW2ldPUpTT04ucGFyc2UoaW5wdXQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeShteVRoZW1lcykpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suS/ruaUuSdcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LG15dGhlbWUsbXlUaGVtZXMsaSx0aGVtZVJvdXRlKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5Yig6ZmkJzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgn56Gu6K6k5Yig6Zmk5Li76aKYOicrbXl0aGVtZS5uYW1lKyc/JykuY29uZmlybSgobXl0aGVtZSxteVRoZW1lcyxpLHRoZW1lUm91dGUpPT57XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG15dGhlbWUubmFtZT09PW15VGhlbWVzLm5vd190aGVtZSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5q2k5Li76aKY5b2T5YmN5q2j5Zyo5L2/55So5Lit77yM5LiN5YWB6K645Yig6ZmkISdcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRoZW1lcy50aGVtZXMuc3BsaWNlKGksMSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLEpTT04uc3RyaW5naWZ5KG15VGhlbWVzKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5Yig6ZmkJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sbXl0aGVtZSxteVRoZW1lcyxpLHRoZW1lUm91dGUpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VGhlbWVzLm5vd190aGVtZT1teXRoZW1lLm5hbWU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkobXlUaGVtZXMpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g6YCJ5oup5LqGJytteXRoZW1lLm5hbWUrJ+S9nOS4uum7mOiupOS4u+mimCc7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9LG5vd1RoZW0sbXlUaGVtZXMsaSx0aGVtZVJvdXRlKSxcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHNldFJlc3VsdChkKTtcXFxcbiAgICB9XFxcXG4kLmV4cG9ydHMudGhlbWVJbml0PXRoZW1lSW5pdDtcXFwifSx7XFxcIm5hbWVcXFwiOlxcXCLmk43kvZzmjIflvJVcXFwiLFxcXCJwYXRoXFxcIjpcXFwiR3VpZGVcXFwiLFxcXCJydWxlXFxcIjpcXFwiPGh0bWw+XFxcXG48aGVhZD5cXFxcbiAgICA8bWV0YSBjaGFyc2V0PVxcXFxcXFwiVVRGLThcXFxcXFxcIj5cXFxcbjwvaGVhZD5cXFxcbjxib2R5PlxcXFxuPHN0cm9uZz4gPGJpZz7mi4nlj5bnr4c8L2JpZz4gPC9zdHJvbmc+XFxcXG48YnIgLz4g5pON5L2c6aG65bqP77yaXFxcXG48YnIgLz4gMS7mm7TmlrDpgZPplb/ku5PlupNQcm/liLA3NueJiOacrFxcXFxuPGJyIC8+IDIu5ouJ5Y+W5Li75o+S5Lu25ZKM572R6aG16ISa5pysXFxcXG48YnIgLz4gMy7mjqjojZDnm7TmjqXmi4nlj5bku6PnoIE8cz7mi4nlj5bliJfooajihpLmi4nlj5bku6PnoIE8L3M+XFxcXG48YnIgLz5cXFxcbjxiciAvPlxcXFxuPHN0cm9uZz48YmlnPuWPo+S7pOevhzwvYmlnPjwvc3Ryb25nPlxcXFxuPGJyIC8+6aaW6aG16L6T5YWl5qGG5pSv5oyB77yaXFxcXG48YnIgLz4xLuWIhuS6q+WHuuadpeeahOWQjOezu+WIl+aPkuS7tuS6keWJqui0tOadv+WPo+S7pFxcXFxuPGJyIC8+Mi7mnKrliqDlr4bnmoTlkIzns7vliJfmj5Lku7blnLDlnYAs5pSv5oyB5pys5Zyw5paH5Lu25aaC5Lul5LiL5qC85byP5byA5aS055qEOmZpbGU6Ly8saGlrZXI6Ly8sL3N0b3JhZ2VcXFxcbjxiciAvPjMuUeelnlxcXFxuPGJyIC8+NC7mlq3mj5JcXFxcbjxiciAvPjUuI+mBk+mVv+eyvumAiVxcXFxuPGJyIC8+Ni4jYuermVxcXFxuPGJyIC8+Ny4j5YCN6ZmGXFxcXG48YnIgLz5cXFxcbjxiciAvPlxcXFxuPHN0cm9uZz48YmlnPue8lui+keevhzwvYmlnPjwvc3Ryb25nPlxcXFxuPGJyIC8+6ZqQ6JeP5Yqf6IO96ZyA55+l77yaXFxcXG48YnIgLz7pmpDol4/lip/og73mmK/ku47liJfooajkuIrliKDpmaTmoIfpopjvvIzmlYXml6DlpI3njrDlip/og71cXFxcbjxiciAvPueci+WHhuS6hu+8jOS4jeeUqOeahOaJjeeCuemakOiXj1xcXFxuPGJyIC8+6KaB5aSN546w55qE6K+d5Y675L+u5pS55paw55qETXlQYXJzZS5qc29u77yM5ZyodGl0bGXnmoTmlbDnu4TpgqPmjInmoLzlvI/mt7vliqDmoIfpophcXFxcbjxiciAvPlxcXFxuPGJyIC8+XFxcXG48c3Ryb25nPjxiaWc+5a6M57uTPC9iaWc+PGJyIC8+PC9zdHJvbmc+XFxcXG48cD52My40OSzlsI/nmb3mnIDlkI7nmoTlgJTlvLos5bCP55m95YWz5oCA5qih5byPPC9wPlxcXFxuPHA+5LiA6ZSu5a6e546w6YWN572u5a6M5q+V5Y2z5Y+v6YCa6L+H5pSv5oyB6a2U5pat55qE5bCP56iL5bqP55yL6KeG6aKR77yM5Zue5b2S55m95auW6KeG6aKR6L+Z5Liq6ZyA5rGC5pys6LqrPC9wPlxcXFxuPHA+5o6o6I2Q5L2/55So6Z2S6LGGLGFwcOW9seinhi5kcDwvcD5cXFxcbjxwPumtlOaWrSjmlq3mj5LpgZPplb/prZTmlLnniYgp5bey5byD5Z2R6LeR6Lev77yM5oSf6LCi5Y6f5L2c6ICF5pat5b+155qE5o+S5Lu26Kej5p6Q5Y+K5pys5bCP56iL5bqP5qC45b+D5Luj56CBPC9wPlxcXFxuPC9ib2R5PlxcXFxuPC9odG1sPlxcXCJ9LHtcXFwibmFtZVxcXCI6XFxcIua1i+ivleaVsOaNrlxcXCIsXFxcInBhdGhcXFwiOlxcXCJkZW1vRGF0YVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbmxldCBkZW1vRGF0YSA9IHtcXFxcbiAgICDniLHlpYfoibo6WydodHRwczovL3d3dy5pcWl5aS5jb20vdl8xenA3cWdoMjNrZy5odG1sJywnaHR0cHM6Ly93d3cuaXFpeWkuY29tL3ZfMmJjOHRrOHI2dWcuaHRtbCddLFxcXFxuICAgIOS8mOmFtzpbJ2h0dHBzOi8vdi55b3VrdS5jb20vdl9zaG93L2lkX1hOVEU0TlRneE1UWTJNQT09Lmh0bWwnLCdodHRwczovL3YueW91a3UuY29tL3Zfc2hvdy9pZF9YTlRFNU9EWXhNakF6Tmc9PS5odG1sJ10sXFxcXG4gICAg6IW+6K6vOlsnaHR0cHM6Ly92LnFxLmNvbS94L2NvdmVyL200NDFlM3JqcTlrd3BzYy9wMDA0MGdpbTRmei5odG1sJywnaHR0cHM6Ly92LnFxLmNvbS94L2NvdmVyL216YzAwMjAweGg5MzEzdi96MDAzOXRiaG83cS5odG1sJ10sXFxcXG4gICAg6IqS5p6cOlsnaHR0cHM6Ly93d3cubWd0di5jb20vYi8zNzIwNjEvMTIxOTM1NTguaHRtbCcsJ2h0dHBzOi8vd3d3Lm1ndHYuY29tL2IvMzYzMjg2LzE0Mjk1ODIzLmh0bWwnXSxcXFxcbiAgICDlk5Tlk6nlk5Tlk6k6WydodHRwczovL3d3dy5iaWxpYmlsaS5jb20vYmFuZ3VtaS9wbGF5L2VwMzgxMjE3JywnaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL2Jhbmd1bWkvcGxheS9lcDQwODEyMyddLFxcXFxuICAgIOaQnOeLkDpbJ2h0dHBzOi8vZmlsbS5zb2h1LmNvbS9hbGJ1bS85NDU3NTg0Lmh0bWwnLCdodHRwczovL2ZpbG0uc29odS5jb20vYWxidW0vOTE4MjY0Ni5odG1sJ10sXFxcXG4gICAg6KW/55OcOlsnaHR0cHM6Ly93d3cuaXhpZ3VhLmNvbS82NTUxMzMyMTI1NjU0NjQ3MzEwJywnaHR0cHM6Ly93d3cuaXhpZ3VhLmNvbS82Njk5MzU2NzkyOTA1Nzk0MDU1J10sXFxcXG4gICAg6Zi/6YeMOlsnJ10sXFxcXG4gICAgUFBUVjpbJ2h0dHA6Ly92LnBwdHYuY29tL3Nob3cvVEluZFdzSW9tTlk1dHg4Lmh0bWwnLCdodHRwOi8vdi5wcHR2LmNvbS9zaG93L1NDUTV0aDZFOURLVkUzcy5odG1sJ10sXFxcXG4gICAg5ZKq5ZKVOlsnaHR0cHM6Ly93d3cubWlndXZpZGVvLmNvbS9tZ3Mvd2Vic2l0ZS9wcmQvZGV0YWlsLmh0bWw/Y2lkPTYzMzUxMTc0MycsJ2h0dHBzOi8vd3d3Lm1pZ3V2aWRlby5jb20vbWdzL3dlYnNpdGUvcHJkL2RldGFpbC5odG1sP2NpZD03MTYyNzAzMTknXSxcXFxcbiAgICDkuZDop4Y6WydodHRwOi8vd3d3LmxlLmNvbS9wdHYvdnBsYXkvNzU4NDMwNTkuaHRtbCcsJ2h0dHA6Ly93d3cubGUuY29tL3B0di92cGxheS8yNDIyMDkwMS5odG1sI3ZpZD0yNDIyMDkwMSddLFxcXFxuICAgIDE5MDU6WydodHRwczovL3ZpcC4xOTA1LmNvbS9wbGF5Lzg3NTc0MC5zaHRtbCcsJ2h0dHBzOi8vd3d3LjE5MDUuY29tL3ZvZC9wbGF5Lzg4MDY0MS5zaHRtbCddLFxcXFxuICAgIOmjjuihjDpbJ2h0dHA6Ly93d3cuZnVuLnR2L3ZwbGF5L2ctMzA0MTQzJywnaHR0cDovL3d3dy5mdW4udHYvdnBsYXkvZy0xMDA4OTYzLyddLFxcXFxufVxcXFxuXFxcXG5sZXQgZGVmYXVsdFNldHMgPSAge1xcXFxuICAgICAgICBxeTogJ+S9oOeIueenkeaKgCcsXFxcXG4gICAgICAgIHlrOiAn6aKG6YW3JyxcXFxcbiAgICAgICAgdHg6ICfojaPogIAnLFxcXFxuICAgICAgICBtZzogJ+iaguiageWFhOW8nycsXFxcXG4gICAgICAgIGJsOiAnT0vop6PmnpAnLFxcXFxuICAgICAgICBzaDogJ+axn+a5lkQnLFxcXFxuICAgICAgICB4ZzogJ+axn+a5lkQnLFxcXFxuICAgICAgICBhbDogJ+axn+a5lkQnLFxcXFxuICAgICAgICBwcDogJ+S6uuS6uui/tycsXFxcXG4gICAgICAgIG1pOiAnMTA4MCcsXFxcXG4gICAgICAgIGxlOiAn6L+q5aWl5ZeF5o6iJyxcXFxcbiAgICAgICAgb3RoOiAn6YGT6ZW/5LuT5bqT6YCa5YWNJyxcXFxcbiAgICAgICAgZnVuOiAn6J6N5YW0JyxcXFxcbiAgICAgICAgb25lOicxMDgwJyxcXFxcbiAgICAgICAgcWp1OiAn6buY6K6kJyxcXFxcbiAgICAgICAgY2o6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJ1xcXFxuICAgIH07XFxcXG5cXFxcbmxldCBmbG9vcnMgPSAn4pGg4pGh4pGi4pGj4pGk4pGl4pGm4pGn4pGo4pGp77yR77yS77yT77yU77yV77yW77yX77yY77yZ77yQ4pKI4pKJ4pKK4pKL4pKM4pKN4pKO4pKP4pKQJy5zcGxpdCgnJyk7XFxcXG5sZXQgZW1vamlzID0gJyPvuI/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+aekOeuoeeQhlxcXCIsXFxcInBhdGhcXFwiOlxcXCJqeE1hbmFnZVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbmZ1bmN0aW9uIGp4TWFuYWdlKCl7XFxcXG4gICAgY29uc3Qge2NvbG9yLHNtYWxsfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS91dGlsaXk/cnVsZT3pgZPplb/ku5PlupNQcm9cXFxcXFxcIik7XFxcXG4gICAgbGV0IGQgPSBbXTtcXFxcbiAgICBsZXQgb3B0aW9ucyA9IFsn6YCJ5oupJywn5L+u5pS5Jywn5Yig6ZmkJywn5a+85Ye6J107XFxcXG5cXFxcbiAgICBmb3IobGV0IGkgaW4gb3B0aW9ucyl7XFxcXG4gICAgICAgIGxldCBvcHRpb24gPSBvcHRpb25zW2ldO1xcXFxuICAgICAgICBsZXQgZmxhZyA9IGdldFZhcignZG4uanhtX29wdGlvbicsJ+mAieaLqScpPT09b3B0aW9uPyfwn5GJJzonJztcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOmZsYWcrb3B0aW9uLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcXFxuICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKG9wdGlvbik9PntcXFxcbiAgICAgICAgICAgICAgICBwdXRWYXIoJ2RuLmp4bV9vcHRpb24nLCBvcHRpb24pO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxcXG4gICAgICAgICAgICB9LG9wdGlvbiksXFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH1cXFxcbiAgICBsZXQganhzUm91dGUgPSBcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlKaWV4aS5qc29uXFxcXFxcXCI7XFxcXG4gICAgbGV0IE15SmlleGkgPSB7amlleGlzOltdfTtcXFxcbiAgICBsZXQgamlleGlzID0ge307XFxcXG4gICAgdHJ5IHtcXFxcbiAgICAgICAgTXlKaWV4aSA9IEpTT04ucGFyc2UoZmV0Y2goanhzUm91dGUpKTtcXFxcbiAgICAgICAgamlleGlzID0gTXlKaWV4aS5qaWV4aXMuZmlsdGVyKGl0PT5pdC5uYW1lPT09TXlKaWV4aS5ub3cpWzBdO1xcXFxuICAgIH1jYXRjaCAoZSkge31cXFxcblxcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiflr7zlhaUnLFxcXFxuICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxcXG4gICAgICAgIHVybDokKCcnLCfor7fovpPlhaXlr7zlhaXlj6Pku6QnKS5pbnB1dCgoTXlKaWV4aSxqeHNSb3V0ZSk9PntcXFxcbiAgICAgICAgICAgIGlmKC9e6a2U5pat6Kej5p6Q6YWN572uQC4qP0BodHRwLy50ZXN0KGlucHV0KSl7XFxcXG4gICAgICAgICAgICAgICAgbGV0IG5hbWUgPSBpbnB1dC5zcGxpdCgnQCcpWzFdO1xcXFxuICAgICAgICAgICAgICAgIGxldCB1cmwgPSBpbnB1dC5zcGxpdCgnQCcpWzJdO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAkKCfnoa7lrpropoHlr7zlhaXmlq3mj5Lop6PmnpDphY3nva4tJytuYW1lKycg5ZCXPycpLmNvbmZpcm0oKG5hbWUsdXJsLE15SmlleGksanhzUm91dGUpPT57XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gcGFyc2VQYXN0ZSh1cmwpO1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgaGFzSXQgPSBNeUppZXhpLmppZXhpcy5maWx0ZXIoaXQ9Pml0Lm5hbWU9PT1uYW1lKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYoaGFzSXQmJmhhc0l0Lmxlbmd0aD4wKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZCA9IG51bGw7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGogaW4gTXlKaWV4aS5qaWV4aXMpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKE15SmlleGkuamlleGlzW2pdLm5hbWUgPT09IG5hbWUpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGo7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFpZCl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+e0ouW8lemUmeivr+aXoOazleimhuebluWvvOWFpTpcXFxcXFxcXG4nK2lkXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2coJ+imhuebluWvvOWFpeS4u+mimGlkOicraWQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdID0gT2JqZWN0LmFzc2lnbihKU09OLnBhcnNlKGJhc2U2NERlY29kZShjb250ZW50KSkseyduYW1lJzpuYW1lfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXMucHVzaChPYmplY3QuYXNzaWduKEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKGNvbnRlbnQpKSx7J25hbWUnOm5hbWV9KSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LmiJDlip/lr7zlhaXop6PmnpDphY3nva46XFxcXFxcXFxuJytuYW1lXFxcXG4gICAgICAgICAgICAgICAgfSxuYW1lLHVybCxNeUppZXhpLGp4c1JvdXRlKTtcXFxcbiAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ml6Dms5Xor4bliKvnmoTlr7zlhaXlj6Pku6Q6XFxcXFxcXFxuJytpbnB1dDtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSxNeUppZXhpLGp4c1JvdXRlKSxcXFxcbiAgICB9KTtcXFxcblxcXFxuICAgIGxldCBpc0F1dG8gPSBNeUppZXhpLmlzQXV0bztcXFxcbiAgICBsZXQgYXV0b01vZGUgPSBNeUppZXhpLmF1dG9Nb2RlO1xcXFxuICAgIGxldCB0aXBzID0gJ+ino+aekOmFjee9ruWIl+ihqDrlhbHorqE6Jytjb2xvcihNeUppZXhpLmppZXhpcy5sZW5ndGgsJyNmZjcwMDAnKSsn5Liq6YWN572uLOiHquWKqOaho+W8gOWFszonK2NvbG9yKGlzQXV0bz8n5byAJzon5YWzJywnI2ZmNzAwMCcpO1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOk15SmlleGkuamlleGlzJiZNeUppZXhpLmppZXhpcy5sZW5ndGg+MD90aXBzOlxcXFxcXFwi56ys5LiA5qyh5Yqg6L2977yM54K55q2k6L+b5Y675Yid5aeL5YyW6Kej5p6Q5YiX6KGoXFxcXFxcXCIsXFxcXG4gICAgICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcXFxuICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoTXlKaWV4aSxqeHNSb3V0ZSk9PntcXFxcbiAgICAgICAgICAgIGlmKE15SmlleGkuamlleGlzJiZNeUppZXhpLmppZXhpcy5sZW5ndGg+MCl7XFxcXG4gICAgICAgICAgICAgICAgTXlKaWV4aS5pc0F1dG8gPSAhTXlKaWV4aS5pc0F1dG87XFxcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdGlwcyA9IE15SmlleGkuaXNBdXRvPyflvIAnOiflhbMnO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lorr7nva7oh6rliqjmoaPmqKHlvI/kuLo6Jyt0aXBzXFxcXG4gICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICBsZXQgaW5pdFNldCA9IHsnbm93JzpcXFxcXFxcIumBk+mVv+aOqOiNkFxcXFxcXFwiLCdqaWV4aXMnOlt7bmFtZTon6YGT6ZW/5o6o6I2QJyxxeTpbJ+S9oOeIueenkeaKgCddLHlrOlsn6aKG6YW3J10sdHg6WyfojaPogIAnXSxtZzpbJ+iaguiageWFhOW8nyddLGJsOlsnT0vop6PmnpAnXSxzaDpbJ+axn+a5lkQnXSx4ZzpbJ+axn+a5lkQnXSxhbDpbJ+axn+a5lkQnXSxwcDpbJ+S6uuS6uui/tyddLG1pOlsnMTA4MCddLGxlOlsn6L+q5aWl5ZeF5o6iJ10sZnVuOlsn6J6N5YW0J10sb25lOlsnMTA4MCddfV19O1xcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShpbml0U2V0KSk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aWreaPkuino+aekOmFjee9ruW3suWIneWni+WMlidcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSxNeUppZXhpLGp4c1JvdXRlKVxcXFxuICAgIH0pO1xcXFxuICAgIGxldCBhdXRvTW9kZVRpcHMgPSBhdXRvTW9kZT09PSfpgJ/luqbkvJjlhYgnPyfpgJ/luqbkvJjlhYgnOifpobrluo/kvJjlhYgnO1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOnNtYWxsKFxcXFxcXFwi5aSH6IOO5a6g5bm45pa55qGIOlxcXFxcXFwiKStjb2xvcihhdXRvTW9kZVRpcHMsJyNmZjcwMDAnKSxcXFxcbiAgICAgICAgY29sX3R5cGU6J3RleHRfMicsXFxcXG4gICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChNeUppZXhpLGp4c1JvdXRlKT0+e1xcXFxuICAgICAgICAgICAgTXlKaWV4aS5hdXRvTW9kZSA9IE15SmlleGkuYXV0b01vZGU9PT0n6YCf5bqm5LyY5YWIJz8n6aG65bqP5LyY5YWIJzon6YCf5bqm5LyY5YWIJztcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lorr7nva7lpIfog47lrqDlubjmlrnmoYjkuLo6JytNeUppZXhpLmF1dG9Nb2RlXFxcXG4gICAgICAgIH0sTXlKaWV4aSxqeHNSb3V0ZSlcXFxcbiAgICB9KTtcXFxcblxcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOmNvbG9yKFxcXFxcXFwi5oGi5aSN5Ye65Y6C6K6+572uXFxcXFxcXCIsJyNmZjcwMDAnKSxcXFxcbiAgICAgICAgY29sX3R5cGU6J3RleHRfMicsXFxcXG4gICAgICAgIHVybDokKFxcXFxcXFwi5aaC5p6c5L2g55qE6Kej5p6Q566h55CG5peg5rOV5q2j5bi455So5LqG77yM5q2k5pa55rOV5Y+v5Lul5pWR56CW77yM56Gu6K6k5oGi5aSNP1xcXFxcXFwiKS5jb25maXJtKChqeHNSb3V0ZSk9PntcXFxcbiAgICAgICAgICAgIGxldCBpbml0U2V0ID0geydub3cnOlxcXFxcXFwi6YGT6ZW/5o6o6I2QXFxcXFxcXCIsJ2ppZXhpcyc6W3tuYW1lOifpgZPplb/mjqjojZAnLHF5Olsn5L2g54i556eR5oqAJ10seWs6WyfpoobphbcnXSx0eDpbJ+iNo+iAgCddLG1nOlsn6JqC6JqB5YWE5byfJ10sYmw6WydPS+ino+aekCddLHNoOlsn5rGf5rmWRCddLHhnOlsn5rGf5rmWRCddLGFsOlsn5rGf5rmWRCddLHBwOlsn5Lq65Lq66L+3J10sbWk6WycxMDgwJ10sbGU6Wyfov6rlpaXll4XmjqInXSxmdW46Wyfono3lhbQnXSxvbmU6WycxMDgwJ10sfV19O1xcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KGluaXRTZXQpKTtcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aWreaPkuino+aekOmFjee9ruW3sumHjee9ruS4uuWHuuWOguiuvue9ridcXFxcbiAgICAgICAgfSxqeHNSb3V0ZSlcXFxcbiAgICB9KTtcXFxcblxcXFxuICAgIGZvcihsZXQgaSBpbiBNeUppZXhpLmppZXhpcyl7XFxcXG4gICAgICAgIGxldCBub3dKeCA9IE15SmlleGkuamlleGlzW2ldO1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6TXlKaWV4aS5ub3c9PT1ub3dKeC5uYW1lPyfwn5GJJytub3dKeC5uYW1lOm5vd0p4Lm5hbWUsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonZmxleF9idXR0b24nLFxcXFxuICAgICAgICAgICAgZXh0cmE6e1xcXFxuICAgICAgICAgICAgICAgIG5vd0p4Om5vd0p4LFxcXFxuICAgICAgICAgICAgICAgIE15SmlleGk6TXlKaWV4aSxcXFxcbiAgICAgICAgICAgICAgICBqeHNSb3V0ZTpqeHNSb3V0ZVxcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChub3dKeCxNeUppZXhpLGksanhzUm91dGUpPT57XFxcXG4gICAgICAgICAgICAgICAgbGV0IG9wdGlvbiA9IGdldFZhcignZG4uanhtX29wdGlvbicsJ+mAieaLqScpO1xcXFxuICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0aW9uKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn5a+85Ye6JzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBub3dKeENvZGUgPSBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkobm93SngpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBzaGFyZVBhc3RlKG5vd0p4Q29kZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9ICfprZTmlq3op6PmnpDphY3nva5AJytub3dKeC5uYW1lKydAJyt1cmw7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3B5KGNvZGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWvvOWHuuS4uuS6keWPo+S7pOW5tuWkjeWItuWIsOWJquWIh+advydcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn5L+u5pS5JzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmKG5vd0p4Lm5hbWU9PT1NeUppZXhpLm5vdyl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgcmV0dXJuICd0b2FzdDovL+atpOino+aekOmFjee9ruW9k+WJjeato+WcqOS9v+eUqOS4re+8jOS4jeWFgeiuuOS/ruaUuSEnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlbHNle1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL2p4RWRpdD9ydWxlPU15RmllbGThtLDigb8nXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9qeEVkaXQ/cnVsZT1NeUZpZWxk4bSw4oG/J1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfliKDpmaQnOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ+ehruiupOWIoOmZpOino+aekOmFjee9rjonK25vd0p4Lm5hbWUrJz8nKS5jb25maXJtKChub3dKeCxNeUppZXhpLGksanhzUm91dGUpPT57XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobm93SngubmFtZT09PU15SmlleGkubm93KXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+atpOino+aekOmFjee9ruW9k+WJjeato+WcqOS9v+eUqOS4re+8jOS4jeWFgeiuuOWIoOmZpCEnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE15SmlleGkuamlleGlzLnNwbGljZShpLDEpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWIoOmZpCdcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sbm93SngsTXlKaWV4aSxpLGp4c1JvdXRlKVxcXFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5ub3c9bm93SngubmFtZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kvaDpgInmi6nkuoYnK25vd0p4Lm5hbWUrJ+S9nOS4uuW9k+WJjeino+aekOmFjee9ric7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSxub3dKeCxNeUppZXhpLGksanhzUm91dGUpLFxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG4gICAgc2V0UmVzdWx0KGQpO1xcXFxufVxcXFxuJC5leHBvcnRzLmp4TWFuYWdlPWp4TWFuYWdlO1xcXCJ9LHtcXFwibmFtZVxcXCI6XFxcIuino+aekOe8lui+kVxcXCIsXFxcInBhdGhcXFwiOlxcXCJqeEVkaXRcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG5sZXQge25vd0p4LE15SmlleGksanhzUm91dGV9ID0gTVlfUEFSQU1TO1xcXFxubGV0IG5vd0p4VCA9IEpTT04ucGFyc2UoZ2V0VmFyKCdkbi5ub3dKeCcpfHwne30nKTtcXFxcbm5vd0p4ID0gbm93SnhULm5hbWU/bm93SnhUOm5vd0p4O1xcXFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpPT57XFxcXG4gICAgY2xlYXJWYXIoXFxcXFxcXCJkbi5qeF90aXRsZXNcXFxcXFxcIik7XFxcXG4gICAgY2xlYXJWYXIoXFxcXFxcXCJkbi5ub3dKeFxcXFxcXFwiKTtcXFxcbiAgICBjbGVhclZhcihcXFxcXFxcImRuLmp4bV9uYW1lXFxcXFxcXCIpO1xcXFxufSkpO1xcXFxubGV0IGlkID0gbnVsbDtcXFxcbmZvcihsZXQgaiBpbiBNeUppZXhpLmppZXhpcyl7XFxcXG4gICAgaWYoTXlKaWV4aS5qaWV4aXNbal0ubmFtZSA9PT0gbm93SngubmFtZSl7XFxcXG4gICAgICAgIGlkID0gajtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgfVxcXFxufVxcXFxubGV0IGQgPSBbXTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6ICfphY3nva7lkI3np7AnLFxcXFxuICAgIGRlc2M6IFxcXFxcXFwi6Kej5p6Q6YWN572u5ZCN56ewLOWmgumBk+mVv+aOqOiNkFxcXFxcXFwiLFxcXFxuICAgIGV4dHJhOiB7XFxcXG4gICAgICAgIG9uQ2hhbmdlOiBcXFxcXFxcInB1dFZhcignZG4uanhtX25hbWUnLGlucHV0KVxcXFxcXFwiLFxcXFxuICAgICAgICB0aXRsZVZpc2libGU6IHRydWUsXFxcXG4gICAgICAgIGRlZmF1bHRWYWx1ZTpnZXRWYXIoJ2RuLmp4bV9uYW1lJywnJyl8fG5vd0p4Lm5hbWVcXFxcbiAgICB9LFxcXFxuICAgIGNvbF90eXBlOidpbnB1dCdcXFxcbn0pO1xcXFxuLy8gbGV0IG9wdGlvbnMgPSBbJ+mAieaLqScsJ+aWsOWinicsJ+WIoOmZpCcsJ+aJuemHj+WIoOmZpCcsJ+enu+WKqCddO1xcXFxubGV0IG9wdGlvbnMgPSBbJ+aWsOWinicsJ+WIoOmZpCcsJ+enu+WKqCddO1xcXFxuXFxcXG5mb3IobGV0IGkgaW4gb3B0aW9ucyl7XFxcXG4gICAgbGV0IG9wdGlvbiA9IG9wdGlvbnNbaV07XFxcXG4gICAgbGV0IGZsYWcgPSBnZXRWYXIoJ2RuLmp4bV93cml0ZU1vZGUnLCfmlrDlop4nKT09PW9wdGlvbj8n8J+RiSc6Jyc7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6ZmxhZytvcHRpb24sXFxcXG4gICAgICAgIC8vIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXFxcbiAgICAgICAgY29sX3R5cGU6J2ZsZXhfYnV0dG9uJyxcXFxcbiAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKG9wdGlvbik9PntcXFxcbiAgICAgICAgICAgIHB1dFZhcignZG4uanhtX3dyaXRlTW9kZScsIG9wdGlvbik7XFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxcXG4gICAgICAgIH0sb3B0aW9uKSxcXFxcbiAgICB9KTtcXFxcbn1cXFxcbmQucHVzaCh7XFxcXG4gICAgY29sX3R5cGU6J2xpbmUnXFxcXG59KTtcXFxcbi8v6I635Y+W5pat5o+S5YiX6KGoXFxcXG5pZighZ2V0VmFyKFxcXFxcXFwiZG4uanhfdGl0bGVzXFxcXFxcXCIpKXtcXFxcbiAgICBsZXQgdGl0bGVBcnIgPSBbXSwgdXJsQXJyID0gW107XFxcXG4gICAgdmFyIGpzb249e3RpdGxlOltdLGNvZGVzOnt9fTtcXFxcbiAgICBsZXQgc2V0RmlsZSA9IHJlcXVlc3QoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJyk7XFxcXG4gICAgdHJ5IHtcXFxcbiAgICAgICAgZXZhbCgnanNvbj0nK3NldEZpbGUpO1xcXFxuICAgIH1jYXRjaCAoZSkge1xcXFxuICAgICAgICBsb2coJ0pzb27op6PmnpDlj5HnlJ/kuobplJnor686JytlLm1lc3NhZ2UpO1xcXFxuICAgIH1cXFxcbiAgICB0aXRsZUFyciA9IGpzb24udGl0bGU7XFxcXG4gICAgdGl0bGVBcnIuZm9yRWFjaCgoaXQpID0+IHtcXFxcbiAgICAgICAgdXJsQXJyLnB1c2goanNvbi5jb2Rlc1tpdF0pO1xcXFxuICAgIH0pO1xcXFxuICAgIHB1dFZhcignZG4uanhfdGl0bGVzJyxKU09OLnN0cmluZ2lmeSh0aXRsZUFycikpO1xcXFxufVxcXFxuXFxcXG5sZXQgdGl0bGVzID0gSlNPTi5wYXJzZShnZXRWYXIoJ2RuLmp4X3RpdGxlcycpfHwnW10nKTtcXFxcbmxldCB0aXRsZURpYyA9IHtcXFxcbiAgICBhbDon6Zi/6YeMJyxibDon5ZOU5ZOp5ZOU5ZOpJyxmdW46J+mjjuihjCcsbGU6J+S5kOinhicsbWc6J+iKkuaenCcsbWk6J+WSquWSlScscHA6J1BQVFYnLHF5OifniLHlpYfoibonLHNoOifmkJzni5AnLFxcXFxuICAgIHR4Oifohb7orq8nLHhnOifopb/nk5wnLHlrOifkvJjphbcnLG9uZTonMTkwNSdcXFxcbn1cXFxcblxcXFxuLy8tLS0tLS0tLS0tLS0tLS0tLVxcXFxubGV0IGpkcyA9IE9iamVjdC5rZXlzKG5vd0p4KS5maWx0ZXIoaXQ9Pml0IT09J25hbWUnJiZpdCE9PSdvdGgnKTtcXFxcbmZvcihsZXQgaiBpbiBqZHMpe1xcXFxuICAgIGxldCBqeHMgPSBub3dKeFtqZHNbal1dfHxbXTtcXFxcbiAgICBsZXQgdGl0bGUgPSBqZHNbal07XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6dGl0bGVEaWNbdGl0bGVdfHx0aXRsZSxcXFxcbiAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcXFxuICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodGl0bGVzLHRpdGxlLGp4cyxqeHNSb3V0ZSxNeUppZXhpLG5vd0p4KT0+e1xcXFxuICAgICAgICAgICAgaWYoZ2V0VmFyKCdkbi5qeG1fd3JpdGVNb2RlJywn5paw5aKeJyk9PT0n5paw5aKeJyl7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHNlbF90aXRsZSA9IHRpdGxlcy5maWx0ZXIoaXQ9PiFqeHMuaW5jbHVkZXMoaXQpKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJChzZWxfdGl0bGUsMykuc2VsZWN0KChNeUppZXhpLGp4cyxub3dKeCx0aXRsZSxqeHNSb3V0ZSk9PntcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlkID0gbnVsbDtcXFxcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBqIGluIE15SmlleGkuamlleGlzKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKE15SmlleGkuamlleGlzW2pdLm5hbWUgPT09IG5vd0p4Lm5hbWUpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gajtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICBpZighaWQpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+e0ouW8lemUmeivr+aXoOazleS/neWtmDpcXFxcXFxcXG4nK2lkXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAganhzLnB1c2goaW5wdXQpO1xcXFxuICAgICAgICAgICAgICAgICAgICBsb2coanhzKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbm93SnhbdGl0bGVdID0ganhzO1xcXFxuICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpc1tpZF0gPSBub3dKeDtcXFxcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdkbi5ub3dKeCcsSlNPTi5zdHJpbmdpZnkobm93SngpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXFxcbiAgICAgICAgICAgICAgICB9LE15SmlleGksanhzLG5vd0p4LHRpdGxlLGp4c1JvdXRlKTtcXFxcbiAgICAgICAgICAgIH1lbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0sdGl0bGVzLHRpdGxlLGp4cyxqeHNSb3V0ZSxNeUppZXhpLG5vd0p4KVxcXFxuICAgIH0pO1xcXFxuICAgIGZvcihsZXQgayBpbiBqeHMpe1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6anhzW2tdLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcXFxuICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHRpdGxlcyx0aXRsZSxqeHMsanhzUm91dGUsTXlKaWV4aSxub3dKeCxuangsaWQsayxtYXgpPT57XFxcXG4gICAgICAgICAgICAgICAgc3dpdGNoIChnZXRWYXIoJ2RuLmp4bV93cml0ZU1vZGUnLCfmlrDlop4nKSl7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WIoOmZpCc6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24odmFsKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5pbmRleE9mKHZhbCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGxpY2UoaW5kZXgsIDEpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBqeHMucmVtb3ZlKG5qeCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBub3dKeFt0aXRsZV0gPSBqeHM7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpc1tpZF0gPSBub3dKeDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcignZG4ubm93SngnLEpTT04uc3RyaW5naWZ5KG5vd0p4KSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+enu+WKqCc6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChrLCfnp7vliqjliLDntKLlvJXlpJrlsJE/JykuaW5wdXQoKGssbWF4LGp4cyxub3dKeCxNeUppZXhpLGlkLHRpdGxlLGp4c1JvdXRlKT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE1vdmUoYXJyLCBmcm9tSW5kZXgsIHRvSW5kZXgpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBhcnJbZnJvbUluZGV4XTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnNwbGljZShmcm9tSW5kZXgsIDEpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKHRvSW5kZXgsIDAsIGVsZW1lbnQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihwYXJzZUludChpbnB1dCk9PT1rKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WVpeS5n+ayoeWBmidcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihwYXJzZUludChpbnB1dCk+bWF4LTF8fHBhcnNlSW50KGlucHV0KTwtMSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kvaDmnIDlpKfnp7vliqjojIPlm7QwLScrcGFyc2VJbnQobWF4LTEpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZXQgbmV3QXIgPSBqeHMuc3BsaWNlKGssIDEpOyAvLyDliKDmjolcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqeHMudW5zaGlmdChuZXdBclswXSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTW92ZShqeHMsayxwYXJzZUludChpbnB1dCkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vd0p4W3RpdGxlXSA9IGp4cztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpc1tpZF0gPSBub3dKeDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2RuLm5vd0p4JyxKU09OLnN0cmluZ2lmeShub3dKeCkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxrLG1heCxqeHMsbm93SngsTXlKaWV4aSxpZCx0aXRsZSxqeHNSb3V0ZSlcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mraTlhYPntKDkuI3mlK/mjIHov5vooYw6JytnZXRWYXIoJ2RuLmp4bV93cml0ZU1vZGUnLCfmlrDlop4nKVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0sdGl0bGVzLHRpdGxlLGp4cyxqeHNSb3V0ZSxNeUppZXhpLG5vd0p4LGp4c1trXSxpZCxrLGp4cy5sZW5ndGgpXFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH1cXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICBjb2xfdHlwZTonbGluZSdcXFxcbiAgICB9KVxcXFxufVxcXFxuXFxcXG5kLnB1c2goe1xcXFxuICAgdGl0bGU6J+S/neWtmCcsXFxcXG4gICBjb2xfdHlwZTondGV4dF9jZW50ZXJfMScsXFxcXG4gICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoTXlKaWV4aSxpZCxqeHNSb3V0ZSk9PntcXFxcbiAgICAgICBpZihnZXRWYXIoJ2RuLmp4bV9uYW1lJywnJykhPT1NeUppZXhpLmppZXhpc1tpZF0ubmFtZSl7XFxcXG4gICAgICAgICAgIGlmSGFzID0gTXlKaWV4aS5qaWV4aXMuZmlsdGVyKGl0PT5pdC5uYW1lPT09Z2V0VmFyKCdkbi5qeG1fbmFtZScsJycpKS5sZW5ndGg+MDtcXFxcbiAgICAgICAgICAgaWYoaWZIYXMpe1xcXFxuICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W+heS/ruaUueeahOWQjeensOmHjeWkjSzkuI3lhYHorrjkv53lrZgnXFxcXG4gICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdLm5hbWUgPSAgZ2V0VmFyKCdkbi5qeG1fbmFtZScsJycpO1xcXFxuICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXFxcbiAgICAgICAgICAgfVxcXFxuICAgICAgIH1cXFxcbiAgICAgICBiYWNrKHRydWUpO1xcXFxuICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lkv53lrZgnXFxcXG4gICB9LE15SmlleGksaWQsanhzUm91dGUpXFxcXG59KTtcXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcIm5hbWVcXFwiOlxcXCLlsI/nmb3mqKHlvI9cXFwiLFxcXCJwYXRoXFxcIjpcXFwic21hbGxXaGl0ZVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnNldFBhZ2VUaXRsZSgn6YGT6ZW/57uZ5bCP55m955qE5YWz54ixJyk7XFxcXG5jb25zdCB7Y29sb3IsIHNtYWxsLGFwaX0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5P3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcXFxcXCIpO1xcXFxubGV0IGZpbGVSb290ID0gYXBpLmhvc3QrJy9oaWtlcnVsZS96eXdfZGF0YS8nO1xcXFxuLy8gbG9nKGZpbGVSb290KTtcXFxcbmxldCBkID0gW107XFxcXG52YXIgdGhlbWVSb3V0ZSA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVRoZW1lLmpzb25cXFxcXFxcIjtcXFxcbnZhciB0aGVtZU9ubGluZSA9IGZpbGVSb290KycxMSc7XFxcXG52YXIgb2xkUm91dGUgPSBcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uXFxcXFxcXCI7XFxcXG52YXIgb2xkT25saW5lID0gZmlsZVJvb3QrJzEyJztcXFxcbnZhciBuZXdSb3V0ZSA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb25cXFxcXFxcIjtcXFxcbnZhciBuZXdPbmxpbmUgPSBmaWxlUm9vdCsnMTMnO1xcXFxudmFyIGp4c1JvdXRlID0gXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015SmlleGkuanNvblxcXFxcXFwiO1xcXFxudmFyIGp4T25saW5lID0gZmlsZVJvb3QrJzE0JztcXFxcbnZhciBjamNhY2hlID0gJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnO1xcXFxudmFyIHg1Y2FjaGUgPSAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5odG1sJztcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6c21hbGwoJ+S9oOWlvSzlsI/nmb0s5Y2z5L2/5ZWl5Lmf5LiN5LyaLOS5n+WPr+S7peeci+aYjueZveS4i+mdoueahOWtl+WQpz8nKSxcXFxcbiAgICBkZXNjOiflpoLmnpzov5jmmK/kuI3kvJos6K+35Yig5Lul5rC45rK7LOWRiui+nuS4jeiwoicsXFxcXG4gICAgY29sX3R5cGU6J3RleHRfMScsXFxcXG4gICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCk9PntcXFxcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+aNruivtOS9oOS4jeacjeawlCzkuI3mib/orqToh6rlt7HmmK/lsI/nmb0/XFxcXFxcXFxu54K55oiR5Y+q5piv5Li65LqG5a6j5rOE5LiA5LiL5L2g55qE5oSk5oCSP+WVpeS5n+WIq+ivtOS6hizkuIvljrvmkJ4hJ1xcXFxuICAgIH0pXFxcXG59KTtcXFxcbmQucHVzaCh7XFxcXG4gICB0aXRsZTpzbWFsbCgn5Y2V6aG56Kej5p6Q6YCJ5oup55WM6Z2i5Li76aKY5piv5LuA5LmIPycpK2NvbG9yKCfkuI3nn6XpgZMs5p2l5LiA5Lu96YGT6ZW/55qEJywnIzVGQjg3OCcpLFxcXFxuICAgIGRlc2M6J+iHquWKqOaLieWPlumBk+mVv+eahOS4u+mimOmFjee9ruS7peWPiue9kemhteaPkuS7tuWSjOmdmeaAgemhtemdoicsXFxcXG4gICBjb2xfdHlwZTondGV4dF8xJyxcXFxcbiAgIHVybDokKCfnoa7orqTlkJc/5aaC5p6c5L2g5LiN5piv5bCP55m977yM5oC76K+l5Lya5o+Q5YmN5aSH5Lu96Ieq5bex5Li76aKY55qE5ZCnIVxcXFxcXFxcbicrdGhlbWVSb3V0ZSkuY29uZmlybSgoY2pjYWNoZSx4NWNhY2hlLHRoZW1lUm91dGUsdGhlbWVPbmxpbmUpPT57XFxcXG4gICAgICAgbGV0IHRoZW1lQ29kZSA9IGZldGNoKHRoZW1lT25saW5lKTtcXFxcbiAgICAgICBpZighL25vd190aGVtZS8udGVzdCh0aGVtZUNvZGUpKXtcXFxcbiAgICAgICAgICAgbG9nKHRoZW1lQ29kZSk7XFxcXG4gICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lpLHotKUh5LiO6YGT6ZW/5pyN5Yqh5Zmo6YCa6K6v6ZSZ6K+vLOS8sOiuoeaYr+e9kee7nOWNoeS6hidcXFxcbiAgICAgICB9XFxcXG4gICAgICAgbGV0IGNqRnJvbSA9IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmpzP3J1bGU9TXlGaWVsZOG0sOKBv1xcXFxcXFwiO1xcXFxuICAgICAgIGxldCB4NUZyb20gPSBcXFxcXFxcImhpa2VyOi8vcGFnZS9QYXJzZV9Ebi5odG1sP3J1bGU9TXlGaWVsZOG0sOKBv1xcXFxcXFwiO1xcXFxuICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgIGxldCBjakZpbGUgPSBKU09OLnBhcnNlKGZldGNoKGNqRnJvbSkpLnJ1bGU7XFxcXG4gICAgICAgICAgIGxldCB4NUZpbGUgPSBKU09OLnBhcnNlKGZldGNoKHg1RnJvbSkpLnJ1bGU7XFxcXG4gICAgICAgICAgIHdyaXRlRmlsZShjamNhY2hlLCBjakZpbGUpO1xcXFxuICAgICAgICAgICB3cml0ZUZpbGUoeDVjYWNoZSwgeDVGaWxlKTtcXFxcbiAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsIHRoZW1lQ29kZSk7XFxcXG4gICAgICAgICAgIGNsZWFyVmFyKFxcXFxcXFwianhPbGRWXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICBjbGVhclZhcihcXFxcXFxcImp4TmV3VlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5Li76aKY5bey5oiQ5Yqf5bqU55SoJ1xcXFxuICAgICAgIH1cXFxcbiAgICAgICBjYXRjaChlKXtcXFxcbiAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S4u+mimOW6lOeUqOWksei0pVxcXFxcXFxcbuacquacn+acm+eahOmUmeivrzonK2UubWVzc2FnZTtcXFxcbiAgICAgICB9XFxcXG4gICB9LGNqY2FjaGUseDVjYWNoZSx0aGVtZVJvdXRlLHRoZW1lT25saW5lKVxcXFxufSk7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOnNtYWxsKCfmlq3mj5Lop6PmnpDlj4rpu5jorqTliJfooajmmK/ku4DkuYg/JykrY29sb3IoJ+S4jeefpemBkyzmnaXkuIDku73pgZPplb/nmoQnLCcjNUZCODc4JyksXFxcXG4gICAgZGVzYzon6Ieq5Yqo5ouJ5Y+W6YGT6ZW/5Zyo55So55qE5Lik5LiqTXlQYXJzZS5qc29u5paH5Lu2JyxcXFxcbiAgICBjb2xfdHlwZTondGV4dF8xJyxcXFxcbiAgICB1cmw6JCgn56Gu6K6k5ZCXP+WmguaenOS9oOS4jeaYr+Wwj+eZve+8jOaAu+ivpeS8muaPkOWJjeWkh+S7veiHquW3seeahOmFjee9ruaWh+S7tuWQpyFcXFxcXFxcXG4nK29sZFJvdXRlKydcXFxcXFxcXG4nK25ld1JvdXRlKS5jb25maXJtKChvbGRSb3V0ZSxvbGRPbmxpbmUsbmV3Um91dGUsbmV3T25saW5lKT0+e1xcXFxuICAgICAgICBsZXQgb2xkQ29kZSA9IGZldGNoKG9sZE9ubGluZSk7XFxcXG4gICAgICAgIGxldCBuZXdDb2RlID0gZmV0Y2gobmV3T25saW5lKTtcXFxcbiAgICAgICAgaWYoIS9QYXJzZV9EblxcXFxcXFxcLmpzLy50ZXN0KG9sZENvZGUpfHwhL1BhcnNlX0RuXFxcXFxcXFwuanMvLnRlc3QobmV3Q29kZSkpe1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+Wksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUob2xkUm91dGUsIG9sZENvZGUpO1xcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKG5ld1JvdXRlLCBuZXdDb2RlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlq3mj5Lop6PmnpDphY3nva7lj4rpu5jorqTliJfooajlt7Lnu4/phY3nva7miJDlip8nXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgY2F0Y2goZSl7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6YWN572u5bqU55So5aSx6LSlXFxcXFxcXFxu5pyq5pyf5pyb55qE6ZSZ6K+vOicrZS5tZXNzYWdlO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSxvbGRSb3V0ZSxvbGRPbmxpbmUsbmV3Um91dGUsbmV3T25saW5lKVxcXFxufSk7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOnNtYWxsKCfmlq3mj5Lop6PmnpDoh6rliqjmoaPmqKHlvI/mmK/ku4DkuYg/JykrY29sb3IoJ+S4jeefpemBkyzmnaXkuIDku73pgZPplb/nmoQnLCcjNUZCODc4JyksXFxcXG4gICAgZGVzYzon6Ieq5Yqo5ouJ5Y+W6YGT6ZW/5Zyo55So55qETXlKaWV4aS5qc29u5paH5Lu2JyxcXFxcbiAgICBjb2xfdHlwZTondGV4dF8xJyxcXFxcbiAgICB1cmw6JCgn56Gu6K6k5ZCXP+WmguaenOS9oOS4jeaYr+Wwj+eZve+8jOaAu+ivpeS8muaPkOWJjeWkh+S7veiHquW3seeahOiHquWKqOaho+aWueahiOWQpyFcXFxcXFxcXG4nK2p4c1JvdXRlKS5jb25maXJtKChqeHNSb3V0ZSxqeE9ubGluZSk9PntcXFxcbiAgICAgICAgbGV0IGp4Q29kZSA9IGZldGNoKGp4T25saW5lKTtcXFxcbiAgICAgICAgaWYoIS9qaWV4aXMvLnRlc3QoanhDb2RlKSl7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5aSx6LSlIeS4jumBk+mVv+acjeWKoeWZqOmAmuiur+mUmeivryzkvLDorqHmmK/nvZHnu5zljaHkuoYnXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSwganhDb2RlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlq3mj5Lop6PmnpDphY3nva7lj4rpu5jorqTliJfooajlt7Lnu4/phY3nva7miJDlip8nXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgY2F0Y2goZSl7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6Ieq5Yqo5qGj5bqU55So5aSx6LSlXFxcXFxcXFxu5pyq5pyf5pyb55qE6ZSZ6K+vOicrZS5tZXNzYWdlO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSxqeHNSb3V0ZSxqeE9ubGluZSlcXFxcbn0pO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTpzbWFsbCgn55yf55qE5ZWl5Lmf5LiN5Lya5LqGLOi/mOaHkuW+l+S4gOS4quS4queCuT8nKStjb2xvcign5LiN55+l6YGTLOadpeS4gOS7vemBk+mVv+eahCcsJyM1RkI4NzgnKSxcXFxcbiAgICBkZXNjOifoh6rliqjmi4nlj5bpgZPplb/lnKjnlKjnmoTkuIrov7DmiYDmnInmlofku7ZcXFxcXFxcXG7kuIDplK7mkJ7lroznm7TmjqXljrvmlK/mjIHmlq3mj5LnmoTlsI/nqIvluo/nnIvop4bpopHlsLHooYzllaYnLFxcXFxuICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcXFxuICAgIHVybDokKCfkv67ku5nms5Xlipvml6DovrknLCfnoa7orqTlkJc/5aaC5p6c5L2g5LiN5piv5bCP55m977yM5oC76K+l5Lya5o+Q5YmN5aSH5Lu96Ieq5bex55qE5LiK6L+w5omA5pyJ5paH5Lu25ZCnIVxcXFxcXFxcbuivt+i+k+WFpemBk+mVv+S/ruS7meazleWKm+aXoOi+ueadpeehruiupOaJp+ihjOatpOaTjeS9nCcpLmlucHV0KChjamNhY2hlLHg1Y2FjaGUsdGhlbWVSb3V0ZSxvbGRSb3V0ZSxuZXdSb3V0ZSxqeHNSb3V0ZSx0aGVtZU9ubGluZSxvbGRPbmxpbmUsbmV3T25saW5lLGp4T25saW5lKT0+e1xcXFxuICAgICAgICBpZihpbnB1dCE9PSfpgZPplb/kv67ku5nms5Xlipvml6DovrknKXtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnKzmrKHlj5bmtojmiafooYwnXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbGV0IHRoZW1lQ29kZSA9IGZldGNoKHRoZW1lT25saW5lKTtcXFxcbiAgICAgICAgaWYoIS9ub3dfdGhlbWUvLnRlc3QodGhlbWVDb2RlKSl7XFxcXG4gICAgICAgICAgICBsb2coJ3RoZW1lQ29kZTonK3RoZW1lQ29kZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ouJ5Li76aKY5aSx6LSlIeS4jumBk+mVv+acjeWKoeWZqOmAmuiur+mUmeivryzkvLDorqHmmK/nvZHnu5zljaHkuoYnXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbGV0IGNqRnJvbSA9IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmpzP3J1bGU9TXlGaWVsZOG0sOKBv1xcXFxcXFwiO1xcXFxuICAgICAgICBsZXQgeDVGcm9tID0gXFxcXFxcXCJoaWtlcjovL3BhZ2UvUGFyc2VfRG4uaHRtbD9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcIjtcXFxcbiAgICAgICAgbGV0IGNqRmlsZSA9IEpTT04ucGFyc2UoZmV0Y2goY2pGcm9tKSkucnVsZTtcXFxcbiAgICAgICAgbGV0IHg1RmlsZSA9IEpTT04ucGFyc2UoZmV0Y2goeDVGcm9tKSkucnVsZTtcXFxcbiAgICAgICAgbGV0IG9sZENvZGUgPSBmZXRjaChvbGRPbmxpbmUpO1xcXFxuICAgICAgICBsZXQgbmV3Q29kZSA9IGZldGNoKG5ld09ubGluZSk7XFxcXG4gICAgICAgIGlmKCEvUGFyc2VfRG5cXFxcXFxcXC5qcy8udGVzdChvbGRDb2RlKXx8IS9QYXJzZV9EblxcXFxcXFxcLmpzLy50ZXN0KG5ld0NvZGUpKXtcXFxcbiAgICAgICAgICAgIC8vIGxvZygnb2xkQ29kZTonK29sZENvZGUpO1xcXFxuICAgICAgICAgICAgLy8gbG9nKCduZXdDb2RlOicrbmV3Q29kZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5aSx6LSlIeS4jumBk+mVv+acjeWKoeWZqOmAmuiur+mUmeivryzkvLDorqHmmK/nvZHnu5zljaHkuoYnXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbGV0IGp4Q29kZSA9IGZldGNoKGp4T25saW5lKTtcXFxcbiAgICAgICAgaWYoIS9qaWV4aXMvLnRlc3QoanhDb2RlKSl7XFxcXG4gICAgICAgICAgICAvLyBsb2coJ2p4Q29kZTonK2p4Q29kZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5aSx6LSlIeS4jumBk+mVv+acjeWKoeWZqOmAmuiur+mUmeivryzkvLDorqHmmK/nvZHnu5zljaHkuoYnXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZShjamNhY2hlLCBjakZpbGUpOyAvLyDmi4nmj5Lku7ZcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZSh4NWNhY2hlLCB4NUZpbGUpOyAvL+aLiee9kemhteaWh+S7tlxcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsIHRoZW1lQ29kZSk7IC8v5ouJ5Li76aKY5paH5Lu2XFxcXG4gICAgICAgICAgICBjbGVhclZhcihcXFxcXFxcImp4T2xkVlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIGNsZWFyVmFyKFxcXFxcXFwianhOZXdWXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKG9sZFJvdXRlLCBvbGRDb2RlKTsgLy/mi4nmlq3mj5Lpu5jorqTpgInmi6nnlYzpnaLnmoTphY3nva5cXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZShuZXdSb3V0ZSwgbmV3Q29kZSk7IC8v5ouJ5pat5o+S5YaF55qE6Kej5p6QXFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsIGp4Q29kZSk7IC8vIOaLieiHquWKqOaho+aWh+S7tlxcXFxuICAgICAgICAgICAgYmFjayh0cnVlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlq3mj5Lop6PmnpDphY3nva7lj4rpu5jorqTliJfooajlt7Lnu4/phY3nva7miJDlip8nXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgY2F0Y2goZSl7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5LiA6ZSu5qih5byP5bqU55So5aSx6LSlXFxcXFxcXFxu5pyq5pyf5pyb55qE6ZSZ6K+vOicrZS5tZXNzYWdlO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSxjamNhY2hlLHg1Y2FjaGUsdGhlbWVSb3V0ZSxvbGRSb3V0ZSxuZXdSb3V0ZSxqeHNSb3V0ZSx0aGVtZU9ubGluZSxvbGRPbmxpbmUsbmV3T25saW5lLGp4T25saW5lKVxcXFxufSk7XFxcXG5sZXQgZGVzY0luZm8gPSAn5Li76aKY5paH5Lu2OicrdGhlbWVSb3V0ZSsnXFxcXFxcXFxu5Li755WM6Z2i6YWN572uOicrb2xkUm91dGUrJ1xcXFxcXFxcbuWrluWIsOeahOino+aekDonK25ld1JvdXRlKydcXFxcXFxcXG7oh6rliqjmoaPop6PmnpA6JytqeHNSb3V0ZTtcXFxcbmRlc2NJbmZvKz0nXFxcXFxcXFxu5Li75o+S5Lu2OicrY2pjYWNoZSsnXFxcXFxcXFxu5Li76YWN572u6YCJ5oup55WM6Z2i5paH5Lu2OicreDVjYWNoZTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6J+aWh+S7tuaPj+i/sDpcXFxcXFxcXG4nK2Rlc2NJbmZvLFxcXFxuICAgIGNvbF90eXBlOidsb25nX3RleHQnLFxcXFxuICAgIGV4dHJhOnt0ZXh0U2l6ZTogMTMsbGluZVZpc2libGU6ZmFsc2V9XFxcXG59KTtcXFxcbnNldFJlc3VsdChkKTtcXFwifV1cIn0iLCJ0aXRsZSI6IuaWreaPkiDpgZPplb/prZTmlLkifQ==
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement