Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥423Down@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImdtdE1vZGlmaWVkXCI6MCxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcInRleHRfMVwiLFwibmFtZVwiOlwiQ2xhc3NUYWJcIixcInBhdGhcIjpcIkNsYXNzVGFiXCIsXCJydWxlXCI6XCJjb25zdCBDbGFzc1RhYiA9IGZ1bmN0aW9uKGNsYXNzQXJyYXksIHBhcmFtcykge1xcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIHBhcmFtcylcXG4gICAgdGhpcy5hcnIgPSBjbGFzc0FycmF5Lm1hcCh2ID0+IHRoaXMuaW5pdCh2KSlcXG4gICAgdGhpcy5zaWduID0gJyQnICsgUUlOR19USVRMRSArICdfJyArICh0aGlzLm5hbWUgfHwgJycpICsgJ18nXFxuICAgIHRoaXMuY29sb3IgPSB0aGlzLmNvbG9yIHx8ICcjMTJiNjY4J1xcbiAgICB0aGlzLmJvdW5kYXJ5ID0gdGhpcy5ib3VuZGFyeSB8fCAnYmxhbmtfYmxvY2snXFxufVxcbkNsYXNzVGFiLnByb3RvdHlwZSA9IHtcXG4gICAgY29uc3RydWN0b3I6IENsYXNzVGFiLFxcbiAgICBsb2FkKGVsKSB7XFxuICAgICAgICBsZXQgZm9sZGVkID0gdGhpcy5mb2xkICYmIGdldFZhcignZm9sZF8nICsgdGhpcy5zaWduLCAnJylcXG4gICAgICAgIGlmICh0aGlzLmFyci5sZW5ndGggPiAxICYmIHRoaXMuZm9sZCkgZWwucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ0nICsgKGZvbGRlZCA/ICfilrYnIDogJ+KWvCcpLmZvbnRjb2xvcignIzA0OWVmZicpLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc2lnbiwgZm9sZGVkKSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dFZhcignZm9sZF8nICsgc2lnbiwgeyAnJzogJ1QnLCAnVCc6ICcnIH0gW2ZvbGRlZF0pXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfSwgdGhpcy5zaWduLCBmb2xkZWQpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgIH0pXFxuICAgICAgICBsZXQgYXJyID0gZm9sZGVkID8gW3RoaXMuYXJyWzBdXSA6IHRoaXMuYXJyXFxuICAgICAgICBhcnIuZm9yRWFjaCgodikgPT4ge1xcbiAgICAgICAgICAgIGxldCB7IGlkLCBjbGFzc19uYW1lLCBjbGFzc191cmwgfSA9IHYsXFxuICAgICAgICAgICAgc2VsZWN0ZWQgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmdldENsYXNzKGlkKSlcXG4gICAgICAgICAgICBjbGFzc19uYW1lLmZvckVhY2goKG5hbWUsIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHVybCA9IGNsYXNzX3VybFtpXSxcXG4gICAgICAgICAgICAgICAgICAgIG5vdyA9IEpTT04uc3RyaW5naWZ5KHsgbmFtZTogbmFtZSwgdXJsOiB1cmwgfSlcXG4gICAgICAgICAgICAgICAgZWwucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogc2VsZWN0ZWQgPT0gbm93ID8gJ+KAnOKAnOKAneKAnScgKyBuYW1lLmZvbnRjb2xvcih0aGlzLmNvbG9yKS5ib2xkKCkgOiBuYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBzZWxlY3RlZCA9PSBub3cgPyAnaGlrZXI6Ly9lbXB0eScgOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzaWduLCBpZCwgbm93KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKHNpZ24gKyBpZCwgbm93KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgICAgIH0sIHRoaXMuc2lnbiwgaWQsIG5vdyksXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBlbC5wdXNoKHsgY29sX3R5cGU6IHRoaXMuYm91bmRhcnkgfSlcXG4gICAgICAgIH0pXFxuICAgIH0sXFxuICAgIGluaXQoY2xhc3NPYmplY3QpIHtcXG4gICAgICAgIGlmICh0eXBlb2YgY2xhc3NPYmplY3QuY2xhc3NfbmFtZSA9PSAnc3RyaW5nJylcXG4gICAgICAgICAgICBjbGFzc09iamVjdC5jbGFzc19uYW1lID0gY2xhc3NPYmplY3QuY2xhc3NfbmFtZS5zcGxpdCgnJicpXFxuICAgICAgICBpZiAodHlwZW9mIGNsYXNzT2JqZWN0LmNsYXNzX3VybCA9PSAnc3RyaW5nJylcXG4gICAgICAgICAgICBjbGFzc09iamVjdC5jbGFzc191cmwgPSBjbGFzc09iamVjdC5jbGFzc191cmwuc3BsaXQoJyYnKS5tYXAoKHYpID0+IHYudHJpbSgpKVxcbiAgICAgICAgcmV0dXJuIGNsYXNzT2JqZWN0XFxuICAgIH0sXFxuICAgIHB1c2goY2xhc3NPYmplY3QpIHtcXG4gICAgICAgIHRoaXMuYXJyLnB1c2godGhpcy5pbml0KGNsYXNzT2JqZWN0KSlcXG4gICAgfSxcXG4gICAgZ2V0Q2xhc3MoaWQpIHtcXG4gICAgICAgIGxldCBkZWZhdWx0Q2xhc3MgPSB0aGlzLmFyci5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PSBpZClcXG4gICAgICAgIGRlZmF1bHRDbGFzcyA9IEpTT04uc3RyaW5naWZ5KGRlZmF1bHRDbGFzcyA/IHtcXG4gICAgICAgICAgICBuYW1lOiBkZWZhdWx0Q2xhc3MuY2xhc3NfbmFtZVswXSxcXG4gICAgICAgICAgICB1cmw6IGRlZmF1bHRDbGFzcy5jbGFzc191cmxbMF1cXG4gICAgICAgIH0gOiB7IG5hbWU6ICAnY2Fubm90IGZpbmQgaWQ6ICcgKyBpZCArICcgaW4gY2xhc3NUYWI6ICcgKyB0aGlzLnNpZ24sIHVybDogJyd9KVxcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZ2V0VmFyKHRoaXMuc2lnbiArIGlkLCBkZWZhdWx0Q2xhc3MpKVxcbiAgICB9LFxcbiAgICBzZXRVcmwodXJsKSB7XFxuICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UoL1xcXFwkXFxcXHsoW159XSopXFxcXH0vZywgKF8sIGlkKSA9PiB0aGlzLmdldENsYXNzKGlkKS51cmwpXFxuICAgIH1cXG59XFxuLy8g55Sf5oiQ5aS06YOo5YiG57G7XFxuY29uc3QgZnlBbGwgPSBSVUxFLnVybC5pbmNsdWRlcygnZnlBbGwnKVxcbmxldCB0YWJIZWFkZXIgPSBbXVxcbmlmIChSVUxFLmNsYXNzX25hbWUpIHRhYkhlYWRlci5wdXNoKHtcXG4gICAgaWQ6IGZ5QWxsID8gJ2Z5QWxsJyA6ICdmeWNsYXNzJyxcXG4gICAgY2xhc3NfbmFtZTogUlVMRS5jbGFzc19uYW1lLFxcbiAgICBjbGFzc191cmw6IFJVTEUuY2xhc3NfdXJsXFxufSlcXG5pZiAoUlVMRS5hcmVhX25hbWUpIHRhYkhlYWRlci5wdXNoKHtcXG4gICAgaWQ6IGZ5QWxsID8gJ2Z5QWxsJyA6ICdmeWFyZWEnLFxcbiAgICBjbGFzc19uYW1lOiBSVUxFLmFyZWFfbmFtZSxcXG4gICAgY2xhc3NfdXJsOiBSVUxFLmFyZWFfdXJsXFxufSlcXG5pZiAoUlVMRS55ZWFyX25hbWUpIHRhYkhlYWRlci5wdXNoKHtcXG4gICAgaWQ6IGZ5QWxsID8gJ2Z5QWxsJyA6ICdmeXllYXInLFxcbiAgICBjbGFzc19uYW1lOiBSVUxFLnllYXJfbmFtZSxcXG4gICAgY2xhc3NfdXJsOiBSVUxFLnllYXJfdXJsXFxufSlcXG5pZiAoUlVMRS5zb3J0X25hbWUpIHRhYkhlYWRlci5wdXNoKHtcXG4gICAgaWQ6IGZ5QWxsID8gJ2Z5QWxsJyA6ICdmeXNvcnQnLFxcbiAgICBjbGFzc19uYW1lOiBSVUxFLnNvcnRfbmFtZSxcXG4gICAgY2xhc3NfdXJsOiBSVUxFLnNvcnRfdXJsXFxufSlcXG50YWJIZWFkZXIgPSBuZXcgQ2xhc3NUYWIodGFiSGVhZGVyLCB7IG5hbWU6IFJVTEUudGl0bGUsIGZvbGQ6IHJlYWRGaWxlKCd0YWJGb2xkJyksIH0pXFxuXCJ9LHtcImNvbF90eXBlXCI6XCJpY29uXzJfcm91bmRcIixcIm5hbWVcIjpcIuiuvue9rlwiLFwicGF0aFwiOlwiQ29uZmlnXCIsXCJydWxlXCI6XCJqczpcXG5hZGRMaXN0ZW5lcignb25DbG9zZScsICdjbGVhck15VmFyKFxcXCJzb3J0RmxhZ1xcXCIpO3JlZnJlc2hQYWdlKCknKTtcXG5zZXRQYWdlVGl0bGUoJ+KamSDovbvlkIjpm4borr7nva4g4pqZJyk7XFxuY29uc3QgZGVmYXVsdERpc1RhYk1vZGlmeSA9IGZhbHNlOyAvL+m7mOiupOemgeeUqOiHquWumuS5ieWIhuexu+WFs+mXrS7lsLHmmK/lvIDlkK/oh6rlrprkuYlcXG5jb25zdCBRSU5HX1RJVExFID0gZ2V0TXlWYXIoJ215Q29sbGVjdGlvbicpLFxcbiAgICB1cmwgPSBnZXRNeVZhcigncmVtb3RlVXJsJylcXG5sZXQgZGF0YSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2RhdGFMb2FkP3J1bGU9JyArIFFJTkdfVElUTEUpKHRydWUpLFxcbiAgICBlbCA9IFt7XFxuICAgICAgICB0aXRsZTogJzxiPiDmuIXpmaTnvJPlrZjvvIznq4vljbPmm7TmlrAgPHNtYWxsPiDvvIjln7rkuo7ov5znqIvku5PlupPvvIzkuI3opoHpopHnuYHngrnlh7vvvIknLFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh1cmwpID0+IHtcXG4gICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vJykgfHwgdXJsLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSl7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ku5PlupPkuLrmnKzlnLDmlofku7bvvIzkuI3kvJrov5vooYznvJPlrZjvvIzmnKzlip/og73kuZ/ml6DmlYgnXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGRlbGV0ZUNhY2hlKHVybCk7XFxuICAgICAgICAgICAgYmFjayhmYWxzZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suabtOaWsCdcXG4gICAgICAgIH0sIHVybCksXFxuICAgICAgICBpbWc6ICdoaWtlcjovL2ltYWdlcy9pY29uNCcsXFxuICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcidcXG4gICAgfV0sXFxuICAgIHVwZGF0ZUludGVydmFsID0gcmVhZEZpbGUoJ3VwZGF0ZUludGVydmFsJykgfHwgJzEnLFxcbiAgICBuZXdXaW5kb3cgPSByZWFkRmlsZSgnbmV3V2luZG93JyksXFxuICAgIHRhYkZvbGQgPSByZWFkRmlsZSgndGFiRm9sZCcpLFxcbiAgICBkaXNUYWJNb2RpZnkgPSByZWFkRmlsZSgnZGlzVGFiTW9kaWZ5JyksXFxuICAgIGRpc2FibGVDdXN0b20gPSByZWFkRmlsZSgnZGlzYWJsZUN1c3RvbScpLFxcbiAgICBlZGl0TW9kZSA9IGRpc2FibGVDdXN0b20gPyAn5a+85YWl5rW36ZiUJyA6IGdldE15VmFyKCdlZGl0TW9kZScsICflkK/nlKgv56aB55SoJyk7XFxuaWYoZGlzVGFiTW9kaWZ5PT09Jycpe1xcbiAgICBzYXZlRmlsZSgnZGlzVGFiTW9kaWZ5JywgZGVmYXVsdERpc1RhYk1vZGlmeSsnJyk7XFxuICAgIGRpc1RhYk1vZGlmeSA9IGRlZmF1bHREaXNUYWJNb2RpZnk7XFxufWVsc2UgaWYoL3RydWV8ZmFsc2UvLnRlc3QoZGlzVGFiTW9kaWZ5KSl7XFxuICAgIGRpc1RhYk1vZGlmeSA9IEpTT04ucGFyc2UoZGlzVGFiTW9kaWZ5KTtcXG59XFxuXFxuZWwucHVzaCh7XFxuICAgIHRpdGxlOiAnICDwn5KhIOabtOaWsOmikeeOhzogJyArICh1cGRhdGVJbnRlcnZhbCA9PSAwID8gJ+aJi+WKqCcgOiB1cGRhdGVJbnRlcnZhbCArICflpKknKSArICcgICcsXFxuICAgIHVybDogJCh1cGRhdGVJbnRlcnZhbCwgJ+i+k+WFpeabtOaWsOmXtOmalO+8iOWkqe+8ie+8jOS4ujDliJnmiYvliqjmm7TmlrBcXFxcbuacrOWcsOaWh+S7tumTvuaOpeaXoOaViCcpLmlucHV0KCgpID0+IHtcXG4gICAgICAgIGlucHV0ID0gcGFyc2VJbnQoaW5wdXQpXFxuICAgICAgICBpZihOdW1iZXIuaXNOYU4oaW5wdXQpKSBpbnB1dCA9IDFcXG4gICAgICAgIGVsc2UgaWYoaW5wdXQgPCAxKSBpbnB1dCA9IDBcXG4gICAgICAgIHNhdmVGaWxlKCd1cGRhdGVJbnRlcnZhbCcsIGlucHV0LnRvU3RyaW5nKCkpXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxufSwge1xcbiAgICB0aXRsZTogJyAg8J+WpSDni6znq4vpppbpobU6ICcgKyAobmV3V2luZG93ID8gJ+aYrycgOiAn5ZCmJykgKyAnICAnLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKG5ld1dpbmRvdykgPT4ge1xcbiAgICAgICAgc2F2ZUZpbGUoJ25ld1dpbmRvdycsIG5ld1dpbmRvdyA/ICcnIDogJzEnKVxcbiAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICB9LCBuZXdXaW5kb3cpLFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxufSwge1xcbiAgICB0aXRsZTogJyAg8J+SoCDliIbnsbvmipjlj6A6ICcgKyAodGFiRm9sZCA/ICfmmK8nIDogJ+WQpicpICsgJyAgJyxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0YWJGb2xkKSA9PiB7XFxuICAgICAgICBzYXZlRmlsZSgndGFiRm9sZCcsIHRhYkZvbGQgPyAnJyA6ICcxJylcXG4gICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgfSwgdGFiRm9sZCksXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG59LCAge1xcbiAgICB0aXRsZTogJyAg8J+SoCDliIbnsbvoh6rlrprkuYk6ICcgKyAoZGlzVGFiTW9kaWZ5ID8gJ+WQpicgOiAn5pivJykgKyAnICAnLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGRpc1RhYk1vZGlmeSkgPT4ge1xcbiAgICAgICAgc2F2ZUZpbGUoJ2Rpc1RhYk1vZGlmeScsIGRpc1RhYk1vZGlmeSA/ICdmYWxzZScgOiAndHJ1ZScpO1xcbiAgICAgICAgcHV0TXlWYXIoJ3R5cGVTaG93JywgJycpO1xcbiAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgfSwgZGlzVGFiTW9kaWZ5KSxcXG4gICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbn0sIHtcXG4gICAgdGl0bGU6ICcgIPCfkrwg5aSH5Lu95oGi5aSNICAnLFxcbiAgICB1cmw6ICQoWyflpIfku70nLCAn5oGi5aSNJ10sIDEpLnNlbGVjdCgoUUlOR19USVRMRSwgdXBkYXRlSW50ZXJ2YWwsIG5ld1dpbmRvdywgdGFiRm9sZCwgZGlzYWJsZUN1c3RvbSkgPT4ge1xcbiAgICAgICAgbGV0IHVybCA9IGdldE15VmFyKCdyZW1vdGVVcmwnKVxcbiAgICAgICAgaWYgKCF1cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly8nKSAmJiAhdXJsLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSlcXG4gICAgICAgICAgICB1cmwgPSAnaGlrZXI6Ly9maWxlcy9saWJzLycgKyBtZDUodXJsKSArICcuanMnXFxuICAgICAgICBlbHNlIGlmKHVybC5zdGFydHNXaXRoKCdoaWtlcjovL3BhZ2UvJykpIHVybCA9ICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgaWYgKGlucHV0ID09ICflpIfku70nKSByZXR1cm4gJCgnaGlrZXI6Ly9maWxlcy90bXAvJyArIFFJTkdfVElUTEUgKyAnX2JhY2t1cC5qc29uJywgJ+i+k+WFpeWkh+S7vei3r+W+hCcpXFxuICAgICAgICAgICAgLmlucHV0KCh1cmwsIHVwZGF0ZUludGVydmFsLCBuZXdXaW5kb3csIHRhYkZvbGQsIGRpc2FibGVDdXN0b20pID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHJ1bGVzID0gcmVxdWVzdCh1cmwpLFxcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRGF0YSA9IHJlYWRGaWxlKCdjdXN0b21EYXRhJylcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGlucHV0LCBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJbnRlcnZhbDogdXBkYXRlSW50ZXJ2YWwsXFxuICAgICAgICAgICAgICAgICAgICBuZXdXaW5kb3c6IG5ld1dpbmRvdyxcXG4gICAgICAgICAgICAgICAgICAgIHRhYkZvbGQ6IHRhYkZvbGQsXFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQ3VzdG9tOiBkaXNhYmxlQ3VzdG9tLFxcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRGF0YTogY3VzdG9tRGF0YSxcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzOiBydWxlc1xcbiAgICAgICAgICAgICAgICB9KSlcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWkh+S7ve+8jOazqOaEj+iLpeS7k+W6k+S4uuWtkOmhtemdouWImeS4jeWkh+S7vSdcXG4gICAgICAgICAgICB9LCB1cmwsIHVwZGF0ZUludGVydmFsLCBuZXdXaW5kb3csIHRhYkZvbGQsIGRpc2FibGVDdXN0b20pXFxuICAgICAgICBlbHNlIHJldHVybiAkKCdoaWtlcjovL2ZpbGVzL3RtcC8nICsgUUlOR19USVRMRSArICdfYmFja3VwLmpzb24nLCAn6L6T5YWl5aSH5Lu96Lev5b6EJykuaW5wdXQoKHVybCkgPT4ge1xcbiAgICAgICAgICAgIGxldCB7IHVwZGF0ZUludGVydmFsLCBuZXdXaW5kb3csIHRhYkZvbGQsIGRpc2FibGVDdXN0b20sIGN1c3RvbURhdGEsIHJ1bGVzIH0gPSBKU09OLnBhcnNlKHJlcXVlc3QoaW5wdXQpKVxcbiAgICAgICAgICAgIHNhdmVGaWxlKCd1cGRhdGVJbnRlcnZhbCcsIHVwZGF0ZUludGVydmFsKVxcbiAgICAgICAgICAgIHNhdmVGaWxlKCduZXdXaW5kb3cnLCBuZXdXaW5kb3cpXFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ3RhYkZvbGQnLCB0YWJGb2xkKVxcbiAgICAgICAgICAgIHNhdmVGaWxlKCdkaXNhYmxlQ3VzdG9tJywgZGlzYWJsZUN1c3RvbSlcXG4gICAgICAgICAgICBzYXZlRmlsZSgnY3VzdG9tRGF0YScsIGN1c3RvbURhdGEpXFxuICAgICAgICAgICAgaWYocnVsZXMpIHdyaXRlRmlsZSh1cmwsIHJ1bGVzKVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5oGi5aSN77yM5aaC5p6c5LiN5oOz5ZCM5q2l6L+c56iL5LuT5bqT77yM5Y+v5Lul6K6+572u5pu05paw6aKR546H5Li65omL5YqoJ1xcbiAgICAgICAgfSwgdXJsKVxcbiAgICB9LCBRSU5HX1RJVExFLCB1cGRhdGVJbnRlcnZhbCwgbmV3V2luZG93LCB0YWJGb2xkLCBkaXNhYmxlQ3VzdG9tKSxcXG4gICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbn0sIHtcXG4gICAgdGl0bGU6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj1cXFwiIzY2NjY2NlxcXCI+PHNtYWxsPueJueWIq+m4o+iwou+8jOWwj+eoi+W6j+aPkOS+m+iAhe+8mlxcXFxuJyArXFxuICAgICAgICBkYXRhLnJlZHVjZSgoc2VsZiwgdikgPT4gdi5hdXRob3IgPyBzZWxmLmNvbmNhdCh2LmF1dGhvci5zcGxpdCgnJicpKSA6IHNlbGYsIFtdKVxcbiAgICAgICAgICAgIC5maWx0ZXIoKHYsIGksIGFycikgPT4gdiAmJiBhcnIuaW5kZXhPZih2KSA9PSBpKS5qb2luKCfjgIEnKSxcXG4gICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG59KVxcblxcbmVsLnB1c2goeyBjb2xfdHlwZTogJ2xpbmUnIH0sIHtcXG4gICAgdGl0bGU6ICfigJzigJzigJ3igJ0nICsgJ/Cfk50nLnNtYWxsKCkgKyAnJm5ic3Ag6L275ZCI6ZuG6Ieq5a6a5LmJICZuYnNwJy5ib2xkKCkuZm9udGNvbG9yKCcjNzU3NTc1JykgKyAoZGlzYWJsZUN1c3RvbSA/ICfinYwnIDogJ+KtlScpLnNtYWxsKCksXFxuICAgIHVybDogJChbKGRpc2FibGVDdXN0b20gPyAn5ZCv55SoJyA6ICfnpoHnlKgnKSArICflkIjpm4boh6rlrprkuYknLCAn5riF6Zmk6Ieq5a6a5LmJ5pWw5o2uJ10sIDEpLnNlbGVjdCgoKSA9PiB7XFxuICAgICAgICBpZiAoaW5wdXQgPT0gJ+a4hemZpOiHquWumuS5ieaVsOaNricpIHtcXG4gICAgICAgICAgICBkZWxldGVGaWxlKCdjdXN0b21EYXRhJylcXG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT0gJ+WQr+eUqOWQiOmbhuiHquWumuS5iScpIHtcXG4gICAgICAgICAgICBzYXZlRmlsZSgnZGlzYWJsZUN1c3RvbScsICcnKVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBzYXZlRmlsZSgnZGlzYWJsZUN1c3RvbScsICcxJylcXG4gICAgICAgICAgICBpbnB1dCArPSAnXFxcXG7lsI/nqIvluo/lkK/nlKgv56aB55So44CB6YeN5paw5o6S5bqP562J5pON5L2c5Z2H5LiN5Lya5L2T546w5Zyo6aaW6aG15bCP56iL5bqP5YiX6KGo5LitJ1xcbiAgICAgICAgfVxcbiAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5beyJyArIGlucHV0XFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICBleHRyYTogeyBsaW5lVmlzaWJsZTogZmFsc2UgfVxcbn0pO1xcbihkaXNhYmxlQ3VzdG9tID8gWyflr7zlhaXmtbfpmJQnXSA6IFsn5ZCv55SoL+emgeeUqCcsICfph43mlrDmjpLluo8nLCAn5pu05pS55Zu+5qCHJywgJ+WvvOWFpea1t+mYlCddKS5mb3JFYWNoKCh2KSA9PiB7XFxuICAgIGVsLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHYgPT0gZWRpdE1vZGUgPyAn4oCc4oCc4oCd4oCdJyArIHYuYm9sZCgpLmZvbnRjb2xvcignIzEyYjY2OCcpIDogdixcXG4gICAgICAgIHVybDogdiA9PSBlZGl0TW9kZSA/ICdoaWtlcjovL2VtcHR5JyA6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHYpID0+IHtcXG4gICAgICAgICAgICBwdXRNeVZhcignZWRpdE1vZGUnLCB2KVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgIH0sIHYpLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICB9KVxcbn0pO1xcbmlmKGVkaXRNb2RlID09ICflr7zlhaXmtbfpmJQnKSBlbC5wdXNoKHtcXG4gICAgdGl0bGU6ICflhajpg6jlr7zlhaUnLFxcbiAgICB1cmw6ICfmtbfpmJTop4bnlYzvv6Vob21lX3J1bGVfdXJs77+lJyArICh1cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly8nKSB8fCB1cmwuc3RhcnRzV2l0aCgnZmlsZTovLycpID8gdXJsIDogJ2hpa2VyOi8vZmlsZXMvbGlicy8nICsgbWQ1KHVybCkgKyAnLmpzJyksXFxuICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgIGV4dHJhOiB7IGxpbmVWaXNpYmxlOiBmYWxzZSB9XFxufSk7XFxuKGRpc2FibGVDdXN0b20gPyBkYXRhIDogSlNPTi5wYXJzZShyZWFkRmlsZSgnY3VzdG9tRGF0YScpIHx8ICdbXScpKS5mb3JFYWNoKCh2LCBpKSA9PiB7XFxuICAgIGxldCBkID0geyB0aXRsZTogdi50aXRsZSwgaW1nOiBkYXRhW2ldLmljb24gfVxcbiAgICBzd2l0Y2ggKGVkaXRNb2RlKSB7XFxuICAgICAgICBjYXNlICflkK/nlKgv56aB55SoJzpcXG4gICAgICAgICAgICBkLnRpdGxlID0gKHYudmlzaWJsZSA/ICfwn5+iICAnIDogJ/CflLQgICcpICsgZC50aXRsZVxcbiAgICAgICAgICAgIGQudXJsID0gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJylcXG4gICAgICAgICAgICAgICAgcnVsZXNbaV0udmlzaWJsZSA9ICFydWxlc1tpXS52aXNpYmxlXFxuICAgICAgICAgICAgICAgIHNhdmVGaWxlKCdjdXN0b21EYXRhJywgSlNPTi5zdHJpbmdpZnkocnVsZXMpKVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0sIGkpXFxuICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgIGNhc2UgJ+mHjeaWsOaOkuW6jyc6XFxuICAgICAgICAgICAgbGV0IHNvcnRGbGFnID0gcGFyc2VJbnQoZ2V0TXlWYXIoJ3NvcnRGbGFnJywgJy0xJykpXFxuICAgICAgICAgICAgZC50aXRsZSA9IChzb3J0RmxhZyA9PSBpID8gJ/CflIMgICcgOiAnJykgKyBkLnRpdGxlXFxuICAgICAgICAgICAgaWYgKHNvcnRGbGFnID09IC0xKVxcbiAgICAgICAgICAgICAgICBkLnVybCA9ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdzb3J0RmxhZycsIGkudG9TdHJpbmcoKSlcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+mAieaLqeimgeenu+WKqOWIsOeahOS9jee9ridcXG4gICAgICAgICAgICAgICAgfSwgaSlcXG4gICAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgICAgIGQudXJsID0gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgob2xkSW5kZXgsIG5ld0luZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJylcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzLnNwbGljZShuZXdJbmRleCwgMCwgcnVsZXMuc3BsaWNlKG9sZEluZGV4LCAxKVswXSlcXG4gICAgICAgICAgICAgICAgICAgIHNhdmVGaWxlKCdjdXN0b21EYXRhJywgSlNPTi5zdHJpbmdpZnkocnVsZXMpKVxcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3NvcnRGbGFnJywgJy0xJylcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICB9LCBzb3J0RmxhZywgaSlcXG4gICAgICAgICAgICBicmVha1xcbiAgICAgICAgY2FzZSAn5pu05pS55Zu+5qCHJzpcXG4gICAgICAgICAgICBkLnVybCA9ICQodi5pY29uIHx8ICcnLCAn6L6T5YWl5paw5Zu+5qCH5Zyw5Z2A5oiW6aKc6Imy5Luj56CB77yaJykuaW5wdXQoKGkpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHJ1bGVzID0gSlNPTi5wYXJzZShyZWFkRmlsZSgnY3VzdG9tRGF0YScpIHx8ICdbXScpXFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzW2ldLmljb24gPSBpbnB1dFxcbiAgICAgICAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcnVsZXNbaV0uaWNvblxcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSgnY3VzdG9tRGF0YScsIEpTT04uc3RyaW5naWZ5KHJ1bGVzKSlcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9LCBpKVxcbiAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICBjYXNlICflr7zlhaXmtbfpmJQnOlxcbiAgICAgICAgICAgIGQudXJsID0gJ3J1bGU6Ly8nICsgYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KGRhdGFbaV0pKVxcbiAgICAgICAgICAgIGJyZWFrXFxuICAgIH1cXG4gICAgZWwucHVzaChkKVxcbn0pXFxuc2V0UmVzdWx0KGVsKVxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6aG16Z2i6L295YWlXCIsXCJwYXRoXCI6XCJmcmFtZUxvYWRcIixcInJ1bGVcIjpcImpzOlxcbmNvbnN0IFFJTkdfVElUTEUgPSBnZXRNeVZhcignbXlDb2xsZWN0aW9uJylcXG5sZXQgbXlDb2xsZWN0aW9uX2VsID0gW10sXFxuICAgIHsgUlVMRSwgaXNJbmRleCwgcGFnZVRpdGxlIH0gPSBNWV9QQVJBTVMsXFxuICAgIHRoaXNSVUxFID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZGF0YUxvYWQ/cnVsZT0nICsgUUlOR19USVRMRSkoKS5maW5kKCh2KSA9PiB2LnRpdGxlID09IFJVTEUudGl0bGUpXFxuaWYgKGlzSW5kZXgpIHtcXG4gICAgUlVMRSA9IHRoaXNSVUxFXFxufSBlbHNlIHtcXG4gICAgUlVMRS5wYWdlcyA9IHRoaXNSVUxFLnBhZ2VzXFxufVxcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3ByZUZ1bmM/cnVsZT0nICsgUUlOR19USVRMRSkpLnJ1bGUpXFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvdXJsUGFyc2U/cnVsZT0nICsgUUlOR19USVRMRSkpLnJ1bGUpXFxuXFxuaWYgKGlzSW5kZXgpIHtcXG4gICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAgICAgLy8g5Yqg6L29Q2xhc3NUYWLnu4Tku7ZcXG4gICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL0NsYXNzVGFiP3J1bGU9JyArIFFJTkdfVElUTEUpKS5ydWxlKVxcbiAgICAgICAgdGFiSGVhZGVyLmxvYWQobXlDb2xsZWN0aW9uX2VsKVxcbiAgICAgICAgaWYgKFJVTEUuc2VhcmNoX3VybCkgbXlDb2xsZWN0aW9uX2VsLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5pCc57SiXFxcIixcXG4gICAgICAgICAgICBkZXNjOiBcXFwi5pCc5L2g5oOz6KaB55qELi4uXFxcIixcXG4gICAgICAgICAgICB1cmw6ICdcXFwiaGlrZXI6Ly9zZWFyY2g/cz1cXFwiK2lucHV0JyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBydWxlczogJC50b1N0cmluZygoUUlOR19USVRMRSwgdGl0bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBydWxlcyA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2RhdGFMb2FkP3J1bGU9JyArIFFJTkdfVElUTEUpKClcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzID0gW3J1bGVzLmZpbmQoKHYpID0+IHYudGl0bGUgPT0gdGl0bGUpXVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJ1bGVzKVxcbiAgICAgICAgICAgICAgICB9LCBRSU5HX1RJVExFLCBSVUxFLnRpdGxlKSxcXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcignc2VhcmNoS2V5JywgJycpLFxcbiAgICAgICAgICAgICAgICBvbkNoYW5nZTogXFxcInB1dE15VmFyKCdzZWFyY2hLZXknLGlucHV0KVxcXCJcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgfSlcXG4gICAgfVxcbiAgICAvLyDlpITnkIZNWV9SVUxFXFxuICAgIE1ZX1JVTEUudXJsID0gUlVMRS51cmxcXG4gICAgTVlfUlVMRS5jb2xfdHlwZSA9IFJVTEUuY29sX3R5cGVcXG4gICAgTVlfUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBSVUxFLmRldGFpbF9jb2xfdHlwZVxcbiAgICBNWV9SVUxFLmZpbmRfcnVsZSA9IFJVTEUuZmluZF9ydWxlXFxuICAgIE1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IFJVTEUuZGV0YWlsX2ZpbmRfcnVsZVxcbiAgICBNWV9SVUxFLnBhcmFtcyA9IHt9XFxufSBlbHNlIHtcXG4gICAgTVlfUlVMRS51cmwgPSBNWV9QQVJBTVMudXJsXFxuICAgIE1ZX1JVTEUuY29sX3R5cGUgPSBSVUxFLmRldGFpbF9jb2xfdHlwZVxcbiAgICBNWV9SVUxFLmZpbmRfcnVsZSA9IFJVTEUuZGV0YWlsX2ZpbmRfcnVsZVxcbiAgICBNWV9SVUxFLnBhcmFtcyA9IFJVTEUucGFyYW1zXFxufVxcbk1ZX1JVTEUucGFnZXMgPSBSVUxFLnBhZ2VzXFxuTVlfUlVMRS5wYWdlTGlzdCA9IEpTT04ucGFyc2UoTVlfUlVMRS5wYWdlcyB8fCAnW10nKVxcbk1ZX1JVTEUudGl0bGUgPSBSVUxFLnRpdGxlXFxuXFxuaWYgKCFpc0luZGV4KSB7XFxuICAgIGlmIChwYWdlVGl0bGUpIHNldFBhZ2VUaXRsZShwYWdlVGl0bGUpXFxuICAgIHNldExhc3RDaGFwdGVyUnVsZSh0aGlzUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZSlcXG4gICAgTVlfUEFSQU1TID0gTVlfUlVMRS5wYXJhbXNcXG59XFxuLy8g6aKE5aSE55CG5bm25Yid5aeL5YyWY29uZmlnXFxuaWYgKGlzSW5kZXggJiYgTVlfUEFHRSA9PSAxKSBldmFsKHRoaXNSVUxFLnByZVJ1bGUpXFxubGV0IF9jZmcgPSBnZXRNeVZhcignaW5pdENvbmZpZycsICd7fScpXFxuaWYgKF9jZmcgJiYgX2NmZy5sZW5ndGggPiAwKSB7XFxuICAgIGNvbmZpZyA9IEpTT04ucGFyc2UoX2NmZylcXG59XFxuXFxuLy8g5q2j5paH6Kej5p6Q6YCa55So5Y+Y6YePXFxubGV0IGFzc2lnbkxhenlSdWxlID0gJC50b1N0cmluZygoUUlOR19USVRMRSwgdGl0bGUpID0+IHtcXG4gICAgbGV0IFJVTEUgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9kYXRhTG9hZD9ydWxlPVxcXCIgKyBRSU5HX1RJVExFKSgpLmZpbmQoKHYpID0+IHYudGl0bGUgPT0gdGl0bGUpXFxuICAgIHJldHVybiB7IHBhZ2VzOiBSVUxFLnBhZ2VzLCBwYWdlTGlzdDogSlNPTi5wYXJzZShSVUxFLnBhZ2VzIHx8ICdbXScpIH1cXG59LCBRSU5HX1RJVExFLCBSVUxFLnRpdGxlKVxcbmZ1bmN0aW9uIGdlbk15UnVsZSgpIHtcXG4gICAgbGV0IHJ1bGUgPSBPYmplY3QuYXNzaWduKHt9LCBNWV9SVUxFKVxcbiAgICBkZWxldGUgcnVsZS5sYXN0X2NoYXB0ZXJfcnVsZVxcbiAgICBkZWxldGUgcnVsZS5wcmVSdWxlXFxuICAgIGRlbGV0ZSBydWxlLnBhZ2VMaXN0XFxuICAgIGRlbGV0ZSBydWxlLnBhZ2VzXFxuICAgIHJldHVybiBydWxlXFxufVxcbmZ1bmN0aW9uIHJ1bkNvZGUocnVsZSkge1xcbiAgICB0cnkge1xcbiAgICAgICAgbGV0IFtpbnB1dCwgY29kZV0gPSBydWxlLnNwbGl0KCcuanM6JylcXG4gICAgICAgIHJldHVybiBjb2RlID8gZXZhbChjb2RlKSA6IHJ1bGVcXG4gICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gcnVsZSB9XFxufVxcbmZ1bmN0aW9uIGdlbkV4VXJsKHVybCkge1xcbiAgICB1cmwgPSB1cmwuc3BsaXQoJzsnKVxcbiAgICByZXR1cm4gdXJsLnNoaWZ0KCkgKyAnOycgKyBwYXJhbUhhbmRsZSh1cmwsIHRoaXNSVUxFLnVhLCBNWV9SVUxFLnVybClcXG59XFxuLy8g5q2j5paH6Kej5p6QXFxuaWYgKE1ZX1JVTEUuZmluZF9ydWxlLnN0YXJ0c1dpdGgoJ2pzOicpKSB7XFxuICAgIHNldFJlc3VsdCA9IGZ1bmN0aW9uKGVsLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKSB7XFxuICAgICAgICBwYXJhbTEgPSBDQUxMQkFDS19LRVlcXG4gICAgICAgIHBhcmFtMiA9IE1ZX1JVTEVcXG4gICAgICAgIHBhcmFtMyA9IE1ZX1RZUEVcXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVsLmRhdGEpKSBlbCA9IGVsLmRhdGFcXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG15Q29sbGVjdGlvbl9lbCwgZWwubWFwKCh2KSA9PiB7XFxuICAgICAgICAgICAgbGV0IE1ZX19SVUxFID0gT2JqZWN0LmFzc2lnbihnZW5NeVJ1bGUoKSwgeyBwYXJhbXM6IHYuZXh0cmEgfHwge30gfSlcXG4gICAgICAgICAgICB2LmNvbF90eXBlID0gdi5jb2xfdHlwZSB8fCBNWV9SVUxFLmNvbF90eXBlXFxuXFxuICAgICAgICAgICAgaWYgKCF2LnVybCB8fCBbJ3J1bGUnLCAncGljcycsICd0b2FzdCcsICdpbnB1dCcsICdjb3B5JywgJ2VkaXRGaWxlJywgJ3g1JywgJ3g1V2ViVmlldycsICd4NVBsYXknLCAnd2ViJywgJ3NlbGVjdCcsICd4NVJ1bGUnLCAnd2ViUnVsZScsICdkb3dubG9hZCcsICdzaGFyZSddLmZpbmQoKHZ2KSA9PiB2LnVybC5zdGFydHNXaXRoKHZ2ICsgJzovLycpKSB8fCBbJ3g1X3dlYnZpZXdfc2luZ2xlJywgJ2lucHV0J10uZmluZCgodnYpID0+IHYuY29sX3R5cGUgPT0gdnYpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5pbmNsdWRlcygnQHJ1bGU9JykpIHtcXG4gICAgICAgICAgICAgICAgbGV0IFtfLCB1cmwsIHJ1bGVdID0gdi51cmwubWF0Y2goL14oW1xcXFxzXFxcXFNdKj8pQHJ1bGU9KFtcXFxcc1xcXFxTXSopJC8pXFxuICAgICAgICAgICAgICAgIHYudXJsID0gdXJsXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBydWxlXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9jb2xfdHlwZSA9IE1ZX1JVTEUuY29sX3R5cGVcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSkge1xcbiAgICAgICAgICAgICAgICBpZiAodi51cmwuaW5jbHVkZXMoJ3J1bGU9JykgfHwgKHYuZXh0cmEgfHwge30pLnJ1bGUpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgICAgICBsZXQgW18sIHBhdGgsIGZsYWcsIHBhcmFtc10gPSB2LnVybC5tYXRjaCgvXmhpa2VyOlxcXFwvXFxcXC9wYWdlXFxcXC8oLis/KSgjLio/KT8oPzpcXFxcPyguKikpPyQvKSxcXG4gICAgICAgICAgICAgICAgICAgIHN1YlBhZ2UgPSBNWV9SVUxFLnBhZ2VMaXN0LmZpbmQoKHYpID0+IHYucGF0aCA9PSBwYXRoKSxcXG4gICAgICAgICAgICAgICAgICAgIHN1YlVybCA9IChwYXJhbXMgfHwgJycpLnNwbGl0KCcmJykuZmluZCgodikgPT4gdi5zdGFydHNXaXRoKCd1cmw9JykpXFxuICAgICAgICAgICAgICAgIHYudXJsID0gKHN1YlVybCA/IHN1YlVybC5zbGljZSg0KS5yZXBsYWNlKC/vvJ/vvJ8vZywgJz8nKS5yZXBsYWNlKC/vvIbvvIYvZywgJyYnKSA6ICh2LmV4dHJhIHx8IHt9KS51cmwpIHx8ICdoaWtlcjovL2VtcHR5JyArIGZsYWcgKyAnPycgKyAocGFyYW1zIHx8ICcnKVxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gc3ViUGFnZS5ydWxlXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9jb2xfdHlwZSA9IHN1YlBhZ2UuY29sX3R5cGVcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLmluY2x1ZGVzKCdAbGF6eVJ1bGU9JykpIHtcXG4gICAgICAgICAgICAgICAgbGV0IHJlSW5kZXggPSB2LnVybC5pbmRleE9mKCcuanM6JylcXG4gICAgICAgICAgICAgICAgaWYgKHJlSW5kZXggPj0gMCkgdi51cmwgPSB2LnVybC5zbGljZSgwLCByZUluZGV4KSArICcuanM6XFxcXG5pZihNWV9SVUxFKU9iamVjdC5hc3NpZ24oTVlfUlVMRSwgJyArIGFzc2lnbkxhenlSdWxlICsgJyk7JyArIHYudXJsLnNsaWNlKHJlSW5kZXggKyA0KVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNJbmRleCkge1xcbiAgICAgICAgICAgICAgICBpZiAoIU1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSB8fCAvaGlrZXI6XFxcXC9cXFxcLyg/IWVtcHR5LiskKS8udGVzdCh2LnVybCkpIHJldHVybiB2XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdi5leHRyYSA9IHtcXG4gICAgICAgICAgICAgICAgdXJsOiBnZW5FeFVybCh2LnVybCksXFxuICAgICAgICAgICAgICAgIFJVTEU6IE1ZX19SVUxFLFxcbiAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IGlzSW5kZXggJiYgdi50aXRsZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2LnVybCA9ICdoaWtlcjovL3BhZ2UvZnJhbWVMb2FkP3J1bGU9JyArIFFJTkdfVElUTEVcXG4gICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgfSkpXFxuICAgICAgICBtZXRob2Rfc2V0UmVzdWx0Lmludm9rZShqYXZhQ29udGV4dCwgbXlDb2xsZWN0aW9uX2VsLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKVxcbiAgICB9XFxuICAgIHNldEhvbWVSZXN1bHQgPSBzZXRSZXN1bHRcXG4gICAgc2V0U2VhcmNoUmVzdWx0ID0gc2V0UmVzdWx0XFxuXFxuICAgIGV2YWwoTVlfUlVMRS5maW5kX3J1bGUuc2xpY2UoMykpXFxufSBlbHNlIHtcXG4gICAgbGV0IFtfLCBmaW5kUnVsZSwgZGV0YWlsRmluZFJ1bGVdID0gTVlfUlVMRS5maW5kX3J1bGUubWF0Y2goL14oW1xcXFxzXFxcXFNdKj8pKD86PT0+KFtcXFxcc1xcXFxTXSopKT8kLylcXG4gICAgZmluZFJ1bGUgPSBmaW5kUnVsZS5zcGxpdCgnOycpXFxuICAgIHBhcnNlRG9tRm9yQXJyYXkoZ2V0UmVzQ29kZSgpLCBmaW5kUnVsZS5zaGlmdCgpKS5mb3JFYWNoKChkYXRhKSA9PiB7XFxuICAgICAgICBsZXQgW3RpdGxlLCBpbWcsIGRlc2MsIHVybF0gPSBmaW5kUnVsZS5tYXAoKHYsIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh2ID09ICcqJykgcmV0dXJuICcnXFxuICAgICAgICAgICAgICAgICAgICBlbHNlIHYgPSAoaSA9PSAxIHx8IGkgPT0gMykgP1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tKGRhdGEsIHYpIDpcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvbUZvckh0bWwoZGF0YSwgdilcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpICE9IDMpIHYgPSBydW5Db2RlKHYpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IHJldHVybiAnJyB9XFxuICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgcmVzID0ge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsIHVybDogdXJsLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLCBpbWc6IGltZyxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IE1ZX1JVTEUuY29sX3R5cGVcXG4gICAgICAgICAgICB9XFxuICAgICAgICBpZiAocmVzLnVybCkge1xcbiAgICAgICAgICAgIGlmIChyZXMudXJsLmluY2x1ZGVzKCdAbGF6eVJ1bGU9JykpIHtcXG4gICAgICAgICAgICAgICAgbGV0IHJlSW5kZXggPSByZXMudXJsLmluZGV4T2YoJy5qczonKVxcbiAgICAgICAgICAgICAgICBpZiAocmVJbmRleCA+PSAwKSByZXMudXJsID0gcmVzLnVybC5zbGljZSgwLCByZUluZGV4KSArICcuanM6XFxcXG5pZihNWV9SVUxFKU9iamVjdC5hc3NpZ24oTVlfUlVMRSwgJyArIGFzc2lnbkxhenlSdWxlICsgJyk7JyArIHJlcy51cmwuc2xpY2UocmVJbmRleCArIDQpXFxuICAgICAgICAgICAgfSBlbHNlICBpZiAoZGV0YWlsRmluZFJ1bGUpIHtcXG4gICAgICAgICAgICAgICAgcmVzLmV4dHJhID0ge1xcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBnZW5FeFVybCh1cmwpLFxcbiAgICAgICAgICAgICAgICAgICAgUlVMRTogT2JqZWN0LmFzc2lnbihnZW5NeVJ1bGUoKSwgeyBkZXRhaWxfZmluZF9ydWxlOiBkZXRhaWxGaW5kUnVsZSB9KSxcXG4gICAgICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTogaXNJbmRleCAmJiB0aXRsZVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJlcy51cmwgPSAnaGlrZXI6Ly9wYWdlL2ZyYW1lTG9hZD9ydWxlPScgKyBRSU5HX1RJVExFXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUpIHtcXG4gICAgICAgICAgICAgICAgcmVzLmV4dHJhID0ge1xcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBnZW5FeFVybCh1cmwpLFxcbiAgICAgICAgICAgICAgICAgICAgUlVMRTogZ2VuTXlSdWxlKCksXFxuICAgICAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IGlzSW5kZXggJiYgdGl0bGVcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXMudXJsID0gJ2hpa2VyOi8vcGFnZS9mcmFtZUxvYWQ/cnVsZT0nICsgUUlOR19USVRMRVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIG15Q29sbGVjdGlvbl9lbC5wdXNoKHJlcylcXG4gICAgfSlcXG4gICAgc2V0UmVzdWx0KG15Q29sbGVjdGlvbl9lbClcXG59XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmlbDmja7ovb3lhaVcIixcInBhdGhcIjpcImRhdGFMb2FkXCIsXCJydWxlXCI6XCIkLmV4cG9ydHMgPSBmdW5jdGlvbihzaG93QWxsKSB7XFxuICAgIGxldCB1cmwgPSBnZXRNeVZhcigncmVtb3RlVXJsJyksXFxuICAgICAgICBkYXRhID0gW11cXG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCdoaWtlcjovLycpIHx8IHVybC5zdGFydHNXaXRoKCdmaWxlOi8vJykpIHtcXG4gICAgICAgIC8vIOWmguaenOS4uuacrOWcsOaWh+S7tuWImeS4jei/m+ihjOe8k+WtmFxcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBsZXQgb3JpRGF0YSA9IGZldGNoKHVybClcXG4gICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSlcXG4gICAgICAgICAgICAgICAgb3JpRGF0YSA9IEpTT04ucGFyc2Uob3JpRGF0YSkucnVsZVxcbiAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKG9yaURhdGEpXFxuICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgLy8g6I635Y+W6L+c56iL5pWw5o2u77yM5qOA5p+l6Ze06ZqU6buY6K6k5LiA5aSpXFxuICAgICAgICBsZXQgaW50ZXJ2YWwgPSBwYXJzZUludChyZWFkRmlsZSgndXBkYXRlSW50ZXJ2YWwnKSB8fCAnMScpLFxcbiAgICAgICAgICAgIG9sZERhdGEgPSBmZXRjaCgnaGlrZXI6Ly9maWxlcy9saWJzLycgKyBtZDUodXJsKSArICcuanMnKSxcXG4gICAgICAgICAgICByZW1vdGVEYXRhID0gW11cXG4gICAgICAgIGlmKGludGVydmFsID09IDApIGludGVydmFsID0gLTFcXG4gICAgICAgIHRyeSB7IHJlbW90ZURhdGEgPSBKU09OLnBhcnNlKGZldGNoQ2FjaGUodXJsLCAyNCAqIGludGVydmFsLCB7dGltZW91dDo1MDAwMH0pKSB9IGNhdGNoKGUpIHt9XFxuICAgICAgICBpZighQXJyYXkuaXNBcnJheShyZW1vdGVEYXRhKSkgcmVtb3RlRGF0YSA9IFtdXFxuICAgICAgICBpZiAocmVtb3RlRGF0YS5sZW5ndGggPCAzKSB7XFxuICAgICAgICAgICAgbG9nKCfmnKrojrflj5bliLDmlbDmja4nKVxcbiAgICAgICAgICAgIGlmIChvbGREYXRhKSB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvbGlicy8nICsgbWQ1KHVybCkgKyAnLmpzJywgb2xkRGF0YSlcXG4gICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShvbGREYXRhIHx8ICdbXScpXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGxvZygn5bey6I635Y+W5Yiw5pWw5o2uJylcXG4gICAgICAgICAgICBkYXRhID0gcmVtb3RlRGF0YVxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGRhdGEgPSBkYXRhLmZpbHRlcigodikgPT4geyByZXR1cm4gdi50aXRsZSAhPSBnZXRNeVZhcignbXlDb2xsZWN0aW9uJykgJiYgISh2LmF1dGhvciB8fCAnJykuaW5jbHVkZXMoJ+i9u+WQiOmbhueUn+aIkOWZqCcpIH0pXFxuICAgIGlmIChyZWFkRmlsZSgnZGlzYWJsZUN1c3RvbScpKSByZXR1cm4gZGF0YVxcbiAgICBlbHNlIHsgLy8g5YaZ5YWl6Ieq5a6a5LmJ5pWw5o2uXFxuICAgICAgICBsZXQgY3VzdG9tRGF0YSA9IEpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKSxcXG4gICAgICAgICAgICByZXdyaXRlRGF0YSA9IFtdXFxuICAgICAgICBjdXN0b21EYXRhID0gY3VzdG9tRGF0YS5yZWR1Y2UoKHNlbGYsIHYpID0+IHtcXG4gICAgICAgICAgICBsZXQgaW5kZXggPSBkYXRhLmZpbmRJbmRleCgodnYpID0+IHYudGl0bGUgPT0gdnYudGl0bGUpXFxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcXG4gICAgICAgICAgICAgICAgc2VsZi5wdXNoKHYpXFxuICAgICAgICAgICAgICAgIGxldCBydWxlID0gZGF0YS5zcGxpY2UoaW5kZXgsIDEpWzBdXFxuICAgICAgICAgICAgICAgIGlmIChzaG93QWxsIHx8IHYudmlzaWJsZSlcXG4gICAgICAgICAgICAgICAgICAgIHJld3JpdGVEYXRhLnB1c2goT2JqZWN0LmFzc2lnbihydWxlLCB2KSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIHNlbGZcXG4gICAgICAgIH0sIFtdKVxcbiAgICAgICAgZGF0YS5mb3JFYWNoKCh2KSA9PiBjdXN0b21EYXRhLnB1c2goeyB0aXRsZTogdi50aXRsZSwgdmlzaWJsZTogdHJ1ZSB9KSlcXG4gICAgICAgIHNhdmVGaWxlKCdjdXN0b21EYXRhJywgSlNPTi5zdHJpbmdpZnkoY3VzdG9tRGF0YSkpXFxuICAgICAgICByZXR1cm4gcmV3cml0ZURhdGEuY29uY2F0KGRhdGEpXFxuICAgIH1cXG59XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlh73mlbDph43lhplcIixcInBhdGhcIjpcInByZUZ1bmNcIixcInJ1bGVcIjpcIi8vIOmYsuatonJlcXVpcmXlpJrmrKHov5DooYxcXG5sZXQgckNhY2hlID0ge31cXG5yZXF1aXJlID0gZnVuY3Rpb24ocGFyYW0wLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBwYXJhbTQpIHtcXG4gICAgaWYgKCFwYXJhbTAgfHwgckNhY2hlW3BhcmFtMF0gIT0gbnVsbCkge1xcbiAgICAgICAgcmV0dXJuXFxuICAgIH1cXG4gICAgckNhY2hlW3BhcmFtMF0gPSAxXFxuICAgIHBhcmFtMiA9IHBhcmFtMiB8fCAwXFxuICAgIHBhcmFtMyA9IE1ZX1RJQ0tFVFxcbiAgICBwYXJhbTQgPSBldmFsXFxuICAgIHJldHVybiBtZXRob2RfcmVxdWlyZS5pbnZva2UoamF2YUNvbnRleHQsIHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMywgcGFyYW00KVxcbn1cXG5yZXF1aXJlQ2FjaGUgPSBmdW5jdGlvbihwYXJhbTAsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCwgcGFyYW01KSB7XFxuICAgIGlmICghcGFyYW0wIHx8IHJDYWNoZVtwYXJhbTBdICE9IG51bGwpIHtcXG4gICAgICAgIHJldHVyblxcbiAgICB9XFxuICAgIHJDYWNoZVtwYXJhbTBdID0gMVxcbiAgICBwYXJhbTMgPSBwYXJhbTMgfHwgMFxcbiAgICBwYXJhbTQgPSBNWV9USUNLRVRcXG4gICAgcGFyYW01ID0gZXZhbFxcbiAgICByZXR1cm4gbWV0aG9kX3JlcXVpcmVDYWNoZS5pbnZva2UoamF2YUNvbnRleHQsIHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMywgcGFyYW00LCBwYXJhbTUpXFxufVxcbnJjID0gcmVxdWlyZUNhY2hlXFxuXFxuLy8g5pyA5paw56ug6IqC6KeE5YiZ5rOo5YWl6aKE5aSE55CG5Luj56CBXFxuc2V0TGFzdENoYXB0ZXJSdWxlID0gZnVuY3Rpb24ocGFyYW0wKSB7XFxuICAgIGlmICghcGFyYW0wKSByZXR1cm5cXG4gICAgaWYgKHBhcmFtMC5zdGFydHNXaXRoKFxcXCJqczpcXFwiKSAmJiB0aGlzUlVMRS5wcmVSdWxlKSB7XFxuICAgICAgICBwYXJhbTAgPSAnanM6XFxcXG50cnl7ZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UvcHJlRnVuYz9ydWxlPScgKyBRSU5HX1RJVExFICsgJ1xcXCIpKS5ydWxlKTtcXFxcXFxuICAgICAgICAgICAgZXZhbChiYXNlNjREZWNvZGUoXFxcIicgKyBiYXNlNjRFbmNvZGUodGhpc1JVTEUucHJlUnVsZSkgKyAnXFxcIikpO1xcXFxcXG4gICAgICAgICAgICBsZXQgX2NmZyA9IGdldE15VmFyKFxcXCJpbml0Q29uZmlnXFxcIiwgXFxcInt9XFxcIik7XFxcXFxcbiAgICAgICAgICAgIGlmIChfY2ZnICYmIF9jZmcubGVuZ3RoPjApIHtjb25maWcgPSBKU09OLnBhcnNlKF9jZmcpfX1jYXRjaChlKXtsb2coZS5tZXNzYWdlKX1cXFxcbjsnICtcXG4gICAgICAgICAgICBwYXJhbTAuc2xpY2UoMylcXG4gICAgfVxcbiAgICBtZXRob2Rfc2V0TGFzdENoYXB0ZXJSdWxlLmludm9rZShqYXZhQ29udGV4dCwgcGFyYW0wKTtcXG59XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpk77mjqXlpITnkIZcIixcInBhdGhcIjpcInVybFBhcnNlXCIsXCJydWxlXCI6XCIvLyDpppbpobXpk77mjqXmm7/mjaLliIbnsbtcXG5mdW5jdGlvbiBpbmRleFVybChwYXJhbSkge1xcbiAgICBmdW5jdGlvbiBydW5Db2RlKHJ1bGUpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgbGV0IFtpbnB1dCwgY29kZV0gPSBydWxlLnNwbGl0KCcuanM6JylcXG4gICAgICAgICAgICByZXR1cm4gY29kZSA/IGV2YWwoY29kZSkgOiBydWxlXFxuICAgICAgICB9IGNhdGNoIChlKSB7IHJldHVybiBydWxlIH1cXG4gICAgfVxcbiAgICBsZXQgeyBSVUxFLCBwYWdlTnVtLCBRSU5HX1RJVExFIH0gPSBKU09OLnBhcnNlKHBhcmFtLnNwbGl0KCcjIyMnKVsxXSlcXG4gICAgUlVMRSA9IEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKFJVTEUpKVxcbiAgICBwYWdlTnVtID0gcGFyc2VJbnQocGFnZU51bSlcXG4gICAgbGV0IHVybCA9IFJVTEUudXJsXFxuXFxuICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL0NsYXNzVGFiP3J1bGU9JyArIFFJTkdfVElUTEUpKS5ydWxlKVxcbiAgICB1cmwgPSB0YWJIZWFkZXIuc2V0VXJsKGZ5QWxsID8gdXJsLnJlcGxhY2UoL2Z5QWxsL2csICckJHtmeUFsbH0nKSA6IHVybC5yZXBsYWNlKC9meShjbGFzc3xhcmVhfHllYXJ8c29ydCkvZywgJyQke2Z5JDF9JykpXFxuICAgIHVybCA9IHVybC5yZXBsYWNlKC9meXBhZ2UoPzpAKC0/XFxcXGQrKUApPyg/OlxcXFwqKFxcXFxkKylAKT8vZywgKF8sIHN0YXJ0LCBzcGFjZSkgPT4gcGFyc2VJbnQoc3RhcnQgfHwgMCkgKyAxICsgKHBhZ2VOdW0gLSAxKSAqIHBhcnNlSW50KHNwYWNlIHx8IDEpKVxcbiAgICB1cmwgPSAvXihbXFxcXHNcXFxcU10qPykoPzpcXFxcW2ZpcnN0UGFnZT0oW1xcXFxzXFxcXFNdKj8pXFxcXF0pPyg/OihcXFxcLmpzOltcXFxcc1xcXFxTXSo/KSk/JC8uZXhlYyh1cmwpXFxuICAgIGlmIChwYWdlTnVtID09IDEgJiYgdXJsWzJdKSB1cmxbMV0gPSB1cmxbMl1cXG4gICAgaWYgKHVybFszXSAmJiAhdXJsWzFdLmluY2x1ZGVzKCcuanM6JykpIHVybFsxXSArPSB1cmxbM11cXG4gICAgcmV0dXJuIHJ1bkNvZGUodXJsWzFdKVxcbn1cXG4vLyDpk77mjqXlj4LmlbDlpITnkIZcXG5mdW5jdGlvbiBwYXJhbUhhbmRsZSh1cmxQYXJhbSwgdWEsIHVybFRtcCkge1xcbiAgICBsZXQgY2hhcnNldCwgVXNlckFnZW50XFxuICAgIHRyeSB7IC8vIOmTvuaOpeeahOe8lueggeWSjHVh5bqU6K+l5piv6aaW5YWI57un5om/6aaW6aG16ZO+5o6lXFxuICAgICAgICBbLCAsIGNoYXJzZXQsIFVzZXJBZ2VudF0gPSB1cmxUbXAuc3BsaXQoJzsnKVxcbiAgICAgICAgVXNlckFnZW50ID0gVXNlckFnZW50Lm1hdGNoKC9eeyguKil9JC8pWzFdLnNwbGl0KCcmJicpLmZpbmQoKHYpID0+IHYuc3RhcnRzV2l0aCgnVXNlci1BZ2VudEAnKSlcXG4gICAgfSBjYXRjaCAoZSkge31cXG4gICAgdXJsUGFyYW1bMF0gPSB1cmxQYXJhbVswXSB8fCAnR0VUJ1xcbiAgICB1cmxQYXJhbVsxXSA9IHVybFBhcmFtWzFdIHx8IGNoYXJzZXQgfHwgJ1VURi04J1xcbiAgICB0cnkge1xcbiAgICAgICAgdXJsUGFyYW1bMl0gPSB1cmxQYXJhbVsyXS5tYXRjaCgvXnsoLiopfSQvKVsxXS5zcGxpdCgnJiYnKVxcbiAgICB9IGNhdGNoIChlKSB7IHVybFBhcmFtWzJdID0gW10gfVxcbiAgICAvLyDmt7vliqDlhajlsYBVQVxcbiAgICBpZiAoIXVybFBhcmFtWzJdLnNvbWUoKHYpID0+IHYuc3RhcnRzV2l0aCgnVXNlci1BZ2VudEAnKSkpIHtcXG4gICAgICAgIGlmIChVc2VyQWdlbnQpIHVybFBhcmFtWzJdLnB1c2goVXNlckFnZW50KVxcbiAgICAgICAgZWxzZSBpZiAodWEgPT0gJ3BjJylcXG4gICAgICAgICAgICB1cmxQYXJhbVsyXS5wdXNoKCdVc2VyLUFnZW50QCcgKyBQQ19VQS5yZXBsYWNlKC87L2csICfvvJvvvJsnKS5yZXBsYWNlKC9cXFxcPy8sICfvvJ/vvJ8nKSlcXG4gICAgICAgIGVsc2UgaWYgKHVhID09ICdtb2JpbGUnKVxcbiAgICAgICAgICAgIHVybFBhcmFtWzJdLnB1c2goJ1VzZXItQWdlbnRAJyArIE1PQklMRV9VQS5yZXBsYWNlKC87L2csICfvvJvvvJsnKS5yZXBsYWNlKC9cXFxcPy8sICfvvJ/vvJ8nKSlcXG4gICAgfVxcbiAgICB1cmxQYXJhbVsyXSA9ICd7JyArIHVybFBhcmFtWzJdLmpvaW4oJyYmJykgKyAnfSdcXG4gICAgcmV0dXJuIHVybFBhcmFtLmpvaW4oJzsnKVxcbn1cXG5cIn0se1wibmFtZVwiOlwi5LuT5bqT5bel5YW3XCIsXCJwYXRoXCI6XCJ0b29sc1wiLFwicnVsZVwiOlwianM6XFxuJC5leHBvcnRzLnJhbmdlID0gZnVuY3Rpb24obSwgbikge1xcbiAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG0gLSBuICsgMSkgKyBuKTtcXG59XFxuJC5leHBvcnRzLmNvbG9yID0gZnVuY3Rpb24odGV4dCwgY29sb3IpIHtcXG4gICAgdGV4dCArPSBcXFwiXFxcIjtcXG4gICAgaWYgKHRleHQuaW5kZXhPZihcXFwi4oCc4oCc4oCd4oCdXFxcIikgPT09IDApIHtcXG4gICAgICAgIHRleHQucmVwbGFjZShcXFwi4oCc4oCc4oCd4oCdXFxcIiwgXFxcIlxcXCIpO1xcbiAgICB9XFxuICAgIHJldHVybiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9J1xcXCIgKyBjb2xvciArIFxcXCInPlxcXCIgKyB0ZXh0ICsgXFxcIjwvZm9udD5cXFwiO1xcbn1cXG5mdW5jdGlvbiBodG1sVGFnKHRhZywgdGV4dCkge1xcbiAgICB0ZXh0ICs9IFxcXCJcXFwiO1xcbiAgICBpZiAodGV4dC5pbmRleE9mKFxcXCLigJzigJzigJ3igJ1cXFwiKSA9PT0gMCkge1xcbiAgICAgICAgdGV4dC5yZXBsYWNlKFxcXCLigJzigJzigJ3igJ1cXFwiLCBcXFwiXFxcIik7XFxuICAgIH1cXG4gICAgcmV0dXJuIFxcXCLigJzigJzigJ3igJ1cXFwiICsgXFxcIjxcXFwiICsgdGFnICsgXFxcIj5cXFwiICsgdGV4dCArIFxcXCI8L1xcXCIgKyB0YWcgKyBcXFwiPlxcXCI7XFxuXFxufVxcblxcbmZ1bmN0aW9uIGdldE5vd0Zvcm1hdERhdGUoKSB7XFxuICAgICAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZSgpO1xcbiAgICAgICAgICAgIGxldCBzZXBlcmF0b3IxID0gXFxcIi1cXFwiO1xcbiAgICAgICAgICAgIGxldCBzZXBlcmF0b3IyID0gXFxcIjpcXFwiO1xcbiAgICAgICAgICAgIGxldCBtb250aCA9IGRhdGUuZ2V0TW9udGgoKSArIDE7XFxuICAgICAgICAgICAgbGV0IHN0ckRhdGUgPSBkYXRlLmdldERhdGUoKTtcXG4gICAgICAgICAgICBsZXQgc3RySG91cnMgPSBkYXRlLmdldEhvdXJzKCk7XFxuICAgICAgICAgICAgbGV0IHN0ck1pbnV0ZXMgPSBkYXRlLmdldE1pbnV0ZXMoKTtcXG4gICAgICAgICAgICBsZXQgc3RyU2Vjb25kcyA9IGRhdGUuZ2V0U2Vjb25kcygpKzE7XFxuICAgICAgICAgICAgaWYgKG1vbnRoID49IDEgJiYgbW9udGggPD0gOSkge1xcbiAgICAgICAgICAgICAgICBtb250aCA9IFxcXCIwXFxcIiArIG1vbnRoXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChzdHJEYXRlID49IDAgJiYgc3RyRGF0ZSA8PSA5KSB7XFxuICAgICAgICAgICAgICAgIHN0ckRhdGUgPSBcXFwiMFxcXCIgKyBzdHJEYXRlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChzdHJIb3VycyA+PSAwICYmIHN0ckhvdXJzIDw9IDkpIHtcXG4gICAgICAgICAgICAgICAgc3RySG91cnMgPSBcXFwiMFxcXCIgKyBzdHJIb3Vyc1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoc3RyTWludXRlcyA+PSAwICYmIHN0ck1pbnV0ZXMgPD0gOSkge1xcbiAgICAgICAgICAgICAgICBzdHJNaW51dGVzID0gXFxcIjBcXFwiICsgc3RyTWludXRlc1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoc3RyU2Vjb25kcyA+PSAwICYmIHN0clNlY29uZHMgPD0gOSkge1xcbiAgICAgICAgICAgICAgICBzdHJTZWNvbmRzID0gXFxcIjBcXFwiICsgc3RyU2Vjb25kc1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAvL2xldCBjdXJyZW50ZGF0ZSA9IGRhdGUuZ2V0RnVsbFllYXIoKSArIHNlcGVyYXRvcjEgKyBtb250aCArIHNlcGVyYXRvcjEgKyBzdHJEYXRlICsgXFxcIiBcXFwiICsgc3RySG91cnMgKyBzZXBlcmF0b3IyICsgc3RyTWludXRlcyArIHNlcGVyYXRvcjIgKyBzdHJTZWNvbmRzO1xcbiAgICAgICAgICAgIGxldCBjdXJyZW50ZGF0ZSA9IChkYXRlLmdldEZ1bGxZZWFyKCktMjAyMCkrJycrIG1vbnRoICsnJysgc3RyRGF0ZSArJycrIHN0ckhvdXJzKycnICsgc3RyTWludXRlcyArJycrIE1hdGguY2VpbChzdHJTZWNvbmRzLzcpO1xcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChjdXJyZW50ZGF0ZSlcXG4gICAgICAgIH1cXG4kLmV4cG9ydHMuZ2V0Tm93Rm9ybWF0RGF0ZSA9IGdldE5vd0Zvcm1hdERhdGU7XFxuJC5leHBvcnRzLmh0bWxUYWcgPSBodG1sVGFnO1xcbiQuZXhwb3J0cy5zbWFsbCA9IGZ1bmN0aW9uKHRleHQpIHtcXG4gICAgcmV0dXJuIGh0bWxUYWcoXFxcInNtYWxsXFxcIiwgdGV4dCk7XFxufVxcbiQuZXhwb3J0cy51bmlxdWUyID0gZnVuY3Rpb24gdW5pcXVlMihhcnJheSl7XFxuICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoYXJyYXkpKTtcXG59XFxuJC5leHBvcnRzLnN0ckRlYWwgPSBmdW5jdGlvbiBzdHJEZWFsKHN0cil7XFxuICAgIHN0ciA9IHN0ci5zcGxpdCgnJyk7XFxuICAgIHN0ciA9IHN0ci5maWx0ZXIoZSA9PiAoZSA+PSAwICYmIGUgPD0gOSkgfHwgKGUgPj0gJ2EnICYmIGUgPD0gJ3onKSB8fCAoZSA+PSAnQScgJiYgZSA8PSAnWicpIHx8IChlID49ICdcXFxcdTRlMDAnICYmIGUgPD0gJ1xcXFx1OWZhNScpKTtcXG4gICAgc3RyID0gc3RyLmpvaW4oJycpO1xcbiAgICByZXR1cm4gc3RyXFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6KeE5YiZ5YiX6KGoXCIsXCJwYXRoXCI6XCJkYXRhXCIsXCJydWxlXCI6XCJbe1xcbiAgICBcXFwibGFzdF9jaGFwdGVyX3J1bGVcXFwiOiBcXFwiXFxcIixcXG4gICAgXFxcInRpdGxlXFxcIjogXFxcIuWQvueIseegtOino/CdlKVcXFwiLFxcbiAgICBcXFwiYXV0aG9yXFxcIjogXFxcIkhvb2RcXFwiLFxcbiAgICBcXFwidXJsXFxcIjogXFxcImh0dHBzOi8vd3d3LjUycG9qaWUuY24vZm9ydW0ucGhwP21vZD1ndWlkZSZ2aWV3PWZ5Y2xhc3MmcGFnZT1meXBhZ2U7Z2V0O0dCS1xcXCIsXFxuICAgIFxcXCJ2ZXJzaW9uXFxcIjogNCxcXG4gICAgXFxcImNvbF90eXBlXFxcIjogXFxcInRleHRfMVxcXCIsXFxuICAgIFxcXCJjbGFzc19uYW1lXFxcIjogXFxcIuacgOaWsOeDremXqCbmnIDmlrDnsr7ljY4m5pyA5paw5Zue5aSNJuacgOaWsOWPkeihqFxcXCIsXFxuICAgIFxcXCJjbGFzc191cmxcXFwiOiBcXFwiaG90JmRpZ2VzdCZuZXcmbmV3dGhyZWFkXFxcIixcXG4gICAgXFxcImFyZWFfbmFtZVxcXCI6IFxcXCJcXFwiLFxcbiAgICBcXFwiYXJlYV91cmxcXFwiOiBcXFwiXFxcIixcXG4gICAgXFxcInNvcnRfbmFtZVxcXCI6IFxcXCJcXFwiLFxcbiAgICBcXFwieWVhcl9uYW1lXFxcIjogXFxcIlxcXCIsXFxuICAgIFxcXCJzb3J0X3VybFxcXCI6IFxcXCJcXFwiLFxcbiAgICBcXFwieWVhcl91cmxcXFwiOiBcXFwiXFxcIixcXG4gICAgXFxcImZpbmRfcnVsZVxcXCI6IFxcXCJqczpcXFxcbnZhciByZXMgPSB7fTtcXFxcbnZhciBkID0gW107XFxcXG52YXIgaHRtbCA9IGdldFJlc0NvZGUoKTtcXFxcblxcXFxuLy/liJfooahcXFxcbnZhciBsaXN0ID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCdib2R5JiZ0Ym9keVtpZF0nKTtcXFxcblxcXFxuZm9yKHZhciBpPTE7aTxsaXN0Lmxlbmd0aCsxO2krKyl7XFxcXG5kLnB1c2goe1xcXFxudGl0bGU6IChpKSsgJy4gJyArcGFyc2VEb21Gb3JIdG1sKGxpc3RbaS0xXSwnLnhzdCYmVGV4dCcpLFxcXFxudXJsOid4NTovL2h0dHBzOi8vd3d3LjUycG9qaWUuY24vJytwYXJzZURvbUZvckh0bWwobGlzdFtpLTFdLCdhJiZocmVmJyksXFxcXG5jb2xfdHlwZTogJ3RleHRfMSd9KTtcXFxcbn1cXFxcblxcXFxyXFxcXG5yZXMuZGF0YSA9IGQ7XFxcXG5zZXRIb21lUmVzdWx0KHJlcyk7XFxcIixcXG4gICAgXFxcInNlYXJjaF91cmxcXFwiOiBcXFwiaHR0cDovL3poYW5uZWkuYmFpZHUuY29tL2NzZS9zaXRlP3E9KiomcD1meXBhZ2UmY2M9NTJwb2ppZS5jblxcXCIsXFxuICAgIFxcXCJncm91cFxcXCI6IFxcXCLikaDmjqjojZBcXFwiLFxcbiAgICBcXFwic2VhcmNoRmluZFxcXCI6IFxcXCJib2R5JiYucmVzdWx0O1xcXFxuaDMmJlRleHQ7XFxcXG5hJiZocmVmO1xcXFxuKjtcXFxcbi5jLWFic3RyYWN0JiZUZXh0O1xcXFxuKlxcXCIsXFxuICAgIFxcXCJkZXRhaWxfY29sX3R5cGVcXFwiOiBcXFwibW92aWVfMVxcXCIsXFxuICAgIFxcXCJkZXRhaWxfZmluZF9ydWxlXFxcIjogXFxcIlxcXCIsXFxuICAgIFxcXCJzZGV0YWlsX2NvbF90eXBlXFxcIjogXFxcIm1vdmllXzFcXFwiLFxcbiAgICBcXFwic2RldGFpbF9maW5kX3J1bGVcXFwiOiBcXFwiXFxcIixcXG4gICAgXFxcInVhXFxcIjogXFxcInBjXFxcIixcXG4gICAgXFxcInByZVJ1bGVcXFwiOiBcXFwiXFxcIixcXG4gICAgXFxcInBhZ2VzXFxcIjogXFxcIltdXFxcIixcXG4gICAgXFxcImljb25cXFwiOiBcXFwiaHR0cHM6Ly93d3cuNTJwb2ppZS5jbi9mYXZpY29uLmljb1xcXCJcXG59LCB7XFxuICAgIFxcXCJsYXN0X2NoYXB0ZXJfcnVsZVxcXCI6IFxcXCJcXFwiLFxcbiAgICBcXFwidGl0bGVcXFwiOiBcXFwiNDIzRG93blxcXCIsXFxuICAgIFxcXCJhdXRob3JcXFwiOiBcXFwi6aaZ6ZuF5oOFXFxcIixcXG4gICAgXFxcInVybFxcXCI6IFxcXCJodHRwczovL3d3dy40MjNkb3duLmNvbS9meUFsbHBhZ2UvZnlwYWdlO2dldDt1dGYtODt7VXNlci1BZ2VudEBNb3ppbGxhLzUuMCAoTGludXjvvJvvvJsgQW5kcm9pZCAxMCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzgwLjAuMzk4Ny4xMzIgTW9iaWxlIFNhZmFyaS81MzcuMzZ9XFxcIixcXG4gICAgXFxcInZlcnNpb25cXFwiOiAxLFxcbiAgICBcXFwiY29sX3R5cGVcXFwiOiBcXFwibW92aWVfMVxcXCIsXFxuICAgIFxcXCJjbGFzc19uYW1lXFxcIjogXFxcIummlumhtSblronljZPova/ku7ZcXFwiLFxcbiAgICBcXFwidHlwZVxcXCI6IFxcXCJuZXdzXFxcIixcXG4gICAgXFxcImNsYXNzX3VybFxcXCI6IFxcXCImYXBrL1xcXCIsXFxuICAgIFxcXCJhcmVhX25hbWVcXFwiOiBcXFwi5Y6f5Yib6L2v5Lu2JuWqkuS9k+aSreaUvibnvZHpobXmtY/op4gm5Zu+5b2i5Zu+5YOPJuiBiuWkqei9r+S7tiblip7lhazova/ku7Ym5LiK5Lyg5LiL6L29JuWunueUqOi9r+S7tibns7vnu5/ovoXliqkm57O757uf5b+F5aSHJuWuieWFqOi9r+S7tibooaXkuIHnm7jlhbMm56Gs5Lu255u45YWzJua4uOaIj+i9r+S7tlxcXCIsXFxuICAgIFxcXCJhcmVhX3VybFxcXCI6IFxcXCJ6ZDQyMy8mbXVsdGltZWRpYS8mYnJvd3Nlci8maW1hZ2UvJmltLyZ3b3JrLyZkb3duLyZzYWZld29yZS8mc3lzdGVtc29mdC8mc3lzdGVtcGx1cy8mc2VjdXJpdHkvJnBhdGNoLyZoYXJkd2FyZS8mZ2FtZS9cXFwiLFxcbiAgICBcXFwic29ydF9uYW1lXFxcIjogXFxcIlxcXCIsXFxuICAgIFxcXCJ5ZWFyX25hbWVcXFwiOiBcXFwiXFxcIixcXG4gICAgXFxcInNvcnRfdXJsXFxcIjogXFxcIlxcXCIsXFxuICAgIFxcXCJ5ZWFyX3VybFxcXCI6IFxcXCJcXFwiLFxcbiAgICBcXFwiZmluZF9ydWxlXFxcIjogXFxcImpzOlxcXFxudmFyIGl0ZW1zID0gW107dmFyIGh0bWw9Z2V0UmVzQ29kZSgpO1xcXFxuLy9sb2coaHRtbCk7XFxcXG52YXIgbGlzdCA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwnLmFyY2hpdmUtbGlzdCYmbGk6bm90KDpjb250YWlucyjkvJjmg6DmjqjojZApKScpO1xcXFxuXFxcXHJcXFxcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcXFxcclxcXFxuICAgICAgICB2YXIgdGl0bGUgPSBwYXJzZURvbUZvckh0bWwobGlzdFtpXSwgJ2gyJiZUZXh0Jyk7XFxcXG4gICAgICAgIHZhciBpbWcgPSBwYXJzZURvbShsaXN0W2ldLCAnaW1nJiZzcmMnKTtcXFxcclxcXFxuICAgICAgICB2YXIgdXJsID0gcGFyc2VEb20obGlzdFtpXSwgJ2EmJmhyZWYnKTtcXFxcbiAgICAgICAgdmFyIGRlc2MgPSBwYXJzZURvbUZvckh0bWwobGlzdFtpXSwgJy5pdGVtLW1ldGEmJlRleHQnKTtcXFxcclxcXFxuICAgICAgICBpdGVtcy5wdXNoKHtcXFxcclxcXFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcXFxuICAgICAgICAgICAgcGljX3VybDogaW1nLFxcXFxyXFxcXG4gICAgICAgICAgICB1cmw6IHVybCxcXFxcbiAgICAgICAgICAgIGRlc2M6IGRlc2NcXFxcclxcXFxuICAgICAgICB9KTtcXFxcclxcXFxuICAgIH1cXFxcblxcXFxuc2V0SG9tZVJlc3VsdCh7ZGF0YTppdGVtc30pO1xcXCIsXFxuICAgIFxcXCJzZWFyY2hfdXJsXFxcIjogXFxcImh0dHBzOi8vd3d3LjQyM2Rvd24uY29tL3BhZ2UvZnlwYWdlP3M9Kio7Z2V0O3V0Zi04O3tVc2VyLUFnZW50QE1vemlsbGEvNS4wIChMaW51eO+8m++8myBBbmRyb2lkIDEwKSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzQuMCBDaHJvbWUvODAuMC4zOTg3LjEzMiBNb2JpbGUgU2FmYXJpLzUzNy4zNn1cXFwiLFxcbiAgICBcXFwiZ3JvdXBcXFwiOiBcXFwi5YW25a6DXFxcIixcXG4gICAgXFxcInNlYXJjaEZpbmRcXFwiOiBcXFwiLmFyY2hpdmUtbGlzdCYmbGk7aDImJlRleHQ7YSYmaHJlZjsuaXRlbS1jYXRlZ29yeSYmVGV4dDsuaXRlbS1tZXRhJiZUZXh0O2ltZyYmc3JjXFxcIixcXG4gICAgXFxcImRldGFpbF9jb2xfdHlwZVxcXCI6IFxcXCJtb3ZpZV8xXFxcIixcXG4gICAgXFxcImRldGFpbF9maW5kX3J1bGVcXFwiOiBcXFwianM6XFxcXG52YXIgZD1bXTtcXFxcbnZhciBodG1sPWdldFJlc0NvZGUoKTtcXFxcbnZhciB0YWJzPXBhcnNlRG9tRm9ySHRtbChodG1sLCdib2R5JiYuZW50cnkmJkh0bWwnKTtcXFxcblxcXFxuZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdHRpdGxlOiB0YWJzLFxcXFxuICAgIGRlc2M6JycsXFxcXG4gICAgcGljX3VybDonJyxcXFxcbiAgICB1cmw6JycsXFxcXG5cXFxcdFxcXFx0Y29sX3R5cGU6ICdyaWNoX3RleHQnXFxcXG59KTtcXFxcblxcXFxuc2V0SG9tZVJlc3VsdCh7ZGF0YTpkfSk7XFxcIixcXG4gICAgXFxcInNkZXRhaWxfY29sX3R5cGVcXFwiOiBcXFwibW92aWVfMVxcXCIsXFxuICAgIFxcXCJzZGV0YWlsX2ZpbmRfcnVsZVxcXCI6IFxcXCIqXFxcIixcXG4gICAgXFxcInVhXFxcIjogXFxcImF1dG9cXFwiLFxcbiAgICBcXFwicHJlUnVsZVxcXCI6IFxcXCJcXFwiLFxcbiAgICBcXFwicGFnZXNcXFwiOiBcXFwiW11cXFwiLFxcbiAgICBcXFwiaWNvblxcXCI6IFxcXCJcXFwiXFxufSwge1xcbiAgICBcXFwibGFzdF9jaGFwdGVyX3J1bGVcXFwiOiBcXFwiXFxcIixcXG4gICAgXFxcInRpdGxlXFxcIjogXFxcIuiQveWwmOS5i+acqOG0uuG1kFxcXCIsXFxuICAgIFxcXCJhdXRob3JcXFwiOiBcXFwiTmFtb1xcXCIsXFxuICAgIFxcXCJ1cmxcXFwiOiBcXFwiaHR0cHM6Ly93d3cubHVvY2hlbnpoaW11LmNvbS9wYWdlL2Z5cGFnZVxcXCIsXFxuICAgIFxcXCJ2ZXJzaW9uXFxcIjogMSxcXG4gICAgXFxcImNvbF90eXBlXFxcIjogXFxcIm1vdmllXzFfbGVmdF9waWNcXFwiLFxcbiAgICBcXFwiY2xhc3NfbmFtZVxcXCI6IFxcXCJcXFwiLFxcbiAgICBcXFwidHlwZVxcXCI6IFxcXCJvdGhlclxcXCIsXFxuICAgIFxcXCJjbGFzc191cmxcXFwiOiBcXFwiXFxcIixcXG4gICAgXFxcImFyZWFfbmFtZVxcXCI6IFxcXCJcXFwiLFxcbiAgICBcXFwiYXJlYV91cmxcXFwiOiBcXFwiXFxcIixcXG4gICAgXFxcInNvcnRfbmFtZVxcXCI6IFxcXCJcXFwiLFxcbiAgICBcXFwieWVhcl9uYW1lXFxcIjogXFxcIlxcXCIsXFxuICAgIFxcXCJzb3J0X3VybFxcXCI6IFxcXCJcXFwiLFxcbiAgICBcXFwieWVhcl91cmxcXFwiOiBcXFwiXFxcIixcXG4gICAgXFxcImZpbmRfcnVsZVxcXCI6IFxcXCJqczpcXFxcbnZhciByZXMgPSB7fTtcXFxcbnZhciBkID0gW107XFxcXG52YXIgbGlzdCA9IHBhcnNlRG9tRm9yQXJyYXkoZ2V0UmVzQ29kZSgpLCAnLmNvbnRlbnQmJi5leGNlcnB0Jyk7XFxcXG5mb3IgKHZhciBpIGluIGxpc3QpIHtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogcGFyc2VEb21Gb3JIdG1sKGxpc3RbaV0sICdoMiYmVGV4dCcpLFxcXFxuICAgICAgICBkZXNjOiBwYXJzZURvbUZvckh0bWwobGlzdFtpXSwgJy5tZXRhJiZUZXh0JyksXFxcXG4gICAgICAgIHBpY191cmw6IHBhcnNlRG9tKGxpc3RbaV0sICdpbWcmJmRhdGEtc3JjJykgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICB1cmw6IHBhcnNlRG9tKGxpc3RbaV0sICdhJiZocmVmJyksXFxcXG4gICAgfSlcXFxcbn1cXFxcbnJlcy5kYXRhID0gZDtcXFxcbnNldEhvbWVSZXN1bHQocmVzKTtcXFwiLFxcbiAgICBcXFwic2VhcmNoX3VybFxcXCI6IFxcXCJodHRwczovL3d3dy5sdW9jaGVuemhpbXUuY29tLz9zPSoqXFxcIixcXG4gICAgXFxcImdyb3VwXFxcIjogXFxcIuWFtuWug1xcXCIsXFxuICAgIFxcXCJzZWFyY2hGaW5kXFxcIjogXFxcImpzOlxcXFxudmFyIHJlcyA9IHt9O1xcXFxudmFyIGQgPSBbXTtcXFxcbnZhciBsaXN0ID0gcGFyc2VEb21Gb3JBcnJheShnZXRSZXNDb2RlKCksICdib2R5JiZhcnRpY2xlJyk7XFxcXG5mb3IgKHZhciBpIGluIGxpc3QpIHtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogcGFyc2VEb21Gb3JIdG1sKGxpc3RbaV0sICdoMiYmVGV4dCcpLFxcXFxuICAgICAgICBkZXNjOiBwYXJzZURvbUZvckh0bWwobGlzdFtpXSwgJy5ub3RlJiZUZXh0JyksICAgICAgICBcXFxcbiAgICAgICAgdXJsOiBwYXJzZURvbShsaXN0W2ldLCAnYSYmaHJlZicpLFxcXFxuICAgIH0pXFxcXG59XFxcXG5yZXMuZGF0YSA9IGQ7XFxcXG5zZXRIb21lUmVzdWx0KHJlcyk7XFxcIixcXG4gICAgXFxcImRldGFpbF9jb2xfdHlwZVxcXCI6IFxcXCJtb3ZpZV8xXFxcIixcXG4gICAgXFxcImRldGFpbF9maW5kX3J1bGVcXFwiOiBcXFwianM6dmFyIHJlcz17fTtcXFxcbnZhciBkID0gW107XFxcXG5kLnB1c2goe1xcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfMVxcXFxcXFwiLFxcXFxuICAgIHRpdGxlOiBcXFxcXFxcIuKAnOKAnOKAneKAnTxiaWc+XFxcXFxcXCIgKyBwYXJzZURvbUZvckh0bWwoZ2V0UmVzQ29kZSgpLCBcXFxcXFxcImgxJiZUZXh0XFxcXFxcXCIpICsgXFxcXFxcXCI8L2JpZz5cXFxcXFxcIixcXFxcbn0pO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogcGFyc2VEb21Gb3JIdG1sKGdldFJlc0NvZGUoKSwgXFxcXFxcXCIuYXJ0aWNsZS1jb250ZW50JiZIdG1sXFxcXFxcXCIpLnNwbGl0KCdwdXNoKHt9KTsnKVsxXSxcXFxcbiAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxcXG4gICAgZXh0cmE6IHtcXFxcbiAgICAgICAgdGV4dFNpemU6IDE2LFxcXFxuICAgICAgICBjbGljazogdHJ1ZVxcXFxuICAgIH1cXFxcbn0pO1xcXFxuc2V0UmVzdWx0KGQpO1xcXCIsXFxuICAgIFxcXCJzZGV0YWlsX2NvbF90eXBlXFxcIjogXFxcIm1vdmllXzFcXFwiLFxcbiAgICBcXFwic2RldGFpbF9maW5kX3J1bGVcXFwiOiBcXFwiKlxcXCIsXFxuICAgIFxcXCJ1YVxcXCI6IFxcXCJwY1xcXCIsXFxuICAgIFxcXCJwcmVSdWxlXFxcIjogXFxcIlxcXCIsXFxuICAgIFxcXCJwYWdlc1xcXCI6IFxcXCJbXVxcXCIsXFxuICAgIFxcXCJpY29uXFxcIjogXFxcImh0dHBzOi8vaW1nLmx1b2NoZW56aGltdS5jb20vcHVibGljLzIwMjAvMDEvaG9tZS5wbmdcXFwiXFxufSwge1xcbiAgICBcXFwibGFzdF9jaGFwdGVyX3J1bGVcXFwiOiBcXFwiXFxcIixcXG4gICAgXFxcInRpdGxlXFxcIjogXFxcIuWIhuS6q+iAhVxcXCIsXFxuICAgIFxcXCJhdXRob3JcXFwiOiBcXFwi5bCP8J+UpeaYn1xcXCIsXFxuICAgIFxcXCJ1cmxcXFwiOiBcXFwiaHR0cHM6Ly9zaGFyZXJ3LmNvbS9hL2Z5QWxsL2Z5cGFnZS9cXFwiLFxcbiAgICBcXFwidmVyc2lvblxcXCI6IDksXFxuICAgIFxcXCJjb2xfdHlwZVxcXCI6IFxcXCJtb3ZpZV8xX3ZlcnRpY2FsX3BpY1xcXCIsXFxuICAgIFxcXCJjbGFzc19uYW1lXFxcIjogXFxcIuaJi+acuui9r+S7tibovabmnLrova/ku7Ym55S16ISR6L2v5Lu2JlxcXCIsXFxuICAgIFxcXCJjbGFzc191cmxcXFwiOiBcXFwiZ2FuaHVvJnFpY2hlJmppbmd5YW4mXFxcIixcXG4gICAgXFxcImFyZWFfbmFtZVxcXCI6IFxcXCLnm5LlrZDova/ku7YmVFbotYTorq8m57K+6YCJVFZcXFwiLFxcbiAgICBcXFwiYXJlYV91cmxcXFwiOiBcXFwieml5dWFuJnR2engmanh0dlxcXCIsXFxuICAgIFxcXCJzb3J0X25hbWVcXFwiOiBcXFwiXFxcIixcXG4gICAgXFxcInllYXJfbmFtZVxcXCI6IFxcXCJcXFwiLFxcbiAgICBcXFwic29ydF91cmxcXFwiOiBcXFwiXFxcIixcXG4gICAgXFxcInllYXJfdXJsXFxcIjogXFxcIlxcXCIsXFxuICAgIFxcXCJmaW5kX3J1bGVcXFwiOiBcXFwiYm9keSYmLmFydGljbGUtbGlzdDtpbWcmJmFsdDtpbWcmJnNyYzsudGltZSYmVGV4dDthJiZocmVmXFxcIixcXG4gICAgXFxcInNlYXJjaF91cmxcXFwiOiBcXFwiaHR0cHM6Ly9zaGFyZXJ3LmNvbS9zZWFyY2gucGhwP3E9KiomcGFnZT1meXBhZ2VcXFwiLFxcbiAgICBcXFwiZ3JvdXBcXFwiOiBcXFwi5YW25a6DXFxcIixcXG4gICAgXFxcInNlYXJjaEZpbmRcXFwiOiBcXFwiYm9keSYmLmFydGljbGUtbGlzdDtpbWcmJmFsdDthJiZocmVmOy50aW1lJiZUZXh0O3AsMSYmVGV4dDtpbWcmJnNyY1xcXCIsXFxuICAgIFxcXCJkZXRhaWxfY29sX3R5cGVcXFwiOiBcXFwibW92aWVfMVxcXCIsXFxuICAgIFxcXCJkZXRhaWxfZmluZF9ydWxlXFxcIjogXFxcImpzOnZhciByZXM9e307dmFyIGQ9W107aHRtbD1nZXRSZXNDb2RlKCk7dGV4dD1wYXJzZURvbUZvckh0bWwoaHRtbCxcXFxcXFxcIi5hcnQtY29udGVudCYmSHRtbFxcXFxcXFwiKTtkLnB1c2goe3RpdGxlOnRleHQsY29sX3R5cGU6J3JpY2hfdGV4dCd9KTtyZXMuZGF0YT1kO3NldEhvbWVSZXN1bHQocmVzKTtcXFwiLFxcbiAgICBcXFwic2RldGFpbF9jb2xfdHlwZVxcXCI6IFxcXCJtb3ZpZV8xXFxcIixcXG4gICAgXFxcInNkZXRhaWxfZmluZF9ydWxlXFxcIjogXFxcIipcXFwiLFxcbiAgICBcXFwidWFcXFwiOiBcXFwibW9iaWxlXFxcIixcXG4gICAgXFxcInByZVJ1bGVcXFwiOiBcXFwiXFxcIixcXG4gICAgXFxcInBhZ2VzXFxcIjogXFxcIltdXFxcIixcXG4gICAgXFxcImljb25cXFwiOiBcXFwiaHR0cHM6Ly96My5heDF4LmNvbS8yMDIxLzExLzA1L0ltelN2ZC5wbmdcXFwiXFxufSwge1xcbiAgICBcXFwibGFzdF9jaGFwdGVyX3J1bGVcXFwiOiBcXFwiXFxcIixcXG4gICAgXFxcInRpdGxlXFxcIjogXFxcIuWPkeeOsOWwj+i9r+S7tlxcXCIsXFxuICAgIFxcXCJhdXRob3JcXFwiOiBcXFwi5bGF54S2XFxcIixcXG4gICAgXFxcInVybFxcXCI6IFxcXCJodHRwczovL3d3dy54NmcuY29tL2h0bWwvMjMtZnlwYWdlLmh0bWxcXFwiLFxcbiAgICBcXFwidmVyc2lvblxcXCI6IDMsXFxuICAgIFxcXCJjb2xfdHlwZVxcXCI6IFxcXCJtb3ZpZV8xX3ZlcnRpY2FsX3BpY1xcXCIsXFxuICAgIFxcXCJjbGFzc19uYW1lXFxcIjogXFxcIlxcXCIsXFxuICAgIFxcXCJjbGFzc191cmxcXFwiOiBcXFwiXFxcIixcXG4gICAgXFxcImFyZWFfbmFtZVxcXCI6IFxcXCJcXFwiLFxcbiAgICBcXFwiYXJlYV91cmxcXFwiOiBcXFwiXFxcIixcXG4gICAgXFxcInNvcnRfbmFtZVxcXCI6IFxcXCJcXFwiLFxcbiAgICBcXFwieWVhcl9uYW1lXFxcIjogXFxcIlxcXCIsXFxuICAgIFxcXCJzb3J0X3VybFxcXCI6IFxcXCJcXFwiLFxcbiAgICBcXFwieWVhcl91cmxcXFwiOiBcXFwiXFxcIixcXG4gICAgXFxcImZpbmRfcnVsZVxcXCI6IFxcXCIubGlzdC1zb2Z0JiZsaTsubGlzdC1pbmZvJiZhJiZUZXh0Oy5sYXl1aS1jbGVhciYmaW1nJiZzcmM7Lmxpc3QtY2EmJlRleHQ7Lmxpc3QtaW5mbyYmYSYmaHJlZlxcXCIsXFxuICAgIFxcXCJzZWFyY2hfdXJsXFxcIjogXFxcIlxcXCIsXFxuICAgIFxcXCJncm91cFxcXCI6IFxcXCLlhbblroNcXFwiLFxcbiAgICBcXFwic2VhcmNoRmluZFxcXCI6IFxcXCJcXFwiLFxcbiAgICBcXFwiZGV0YWlsX2NvbF90eXBlXFxcIjogXFxcInRleHRfM1xcXCIsXFxuICAgIFxcXCJkZXRhaWxfZmluZF9ydWxlXFxcIjogXFxcImJvZHkmJi5hcnRpY2xlLWRvd247YSYmVGV4dDsqOyo7YSYmZGF0YS11cmxcXFwiLFxcbiAgICBcXFwic2RldGFpbF9jb2xfdHlwZVxcXCI6IFxcXCJtb3ZpZV8xXFxcIixcXG4gICAgXFxcInNkZXRhaWxfZmluZF9ydWxlXFxcIjogXFxcIlxcXCIsXFxuICAgIFxcXCJ1YVxcXCI6IFxcXCJtb2JpbGVcXFwiLFxcbiAgICBcXFwicHJlUnVsZVxcXCI6IFxcXCJcXFwiLFxcbiAgICBcXFwicGFnZXNcXFwiOiBcXFwiW11cXFwiLFxcbiAgICBcXFwiaWNvblxcXCI6IFxcXCJcXFwiXFxufSwge1xcbiAgICBcXFwibGFzdF9jaGFwdGVyX3J1bGVcXFwiOiBcXFwiXFxcIixcXG4gICAgXFxcInRpdGxlXFxcIjogXFxcIlZYQVRcXFwiLFxcbiAgICBcXFwiYXV0aG9yXFxcIjogXFxcIuWwj/CflKXmmJ9cXFwiLFxcbiAgICBcXFwidXJsXFxcIjogXFxcImh0dHBzOi8vd3d3LnZ4YXQuY29tL2Z5QWxsX2Z5cGFnZS5odG1sXFxcIixcXG4gICAgXFxcInZlcnNpb25cXFwiOiAxLFxcbiAgICBcXFwiY29sX3R5cGVcXFwiOiBcXFwibW92aWVfMV92ZXJ0aWNhbF9waWNcXFwiLFxcbiAgICBcXFwiY2xhc3NfbmFtZVxcXCI6IFxcXCLova/ku7bkuIvovb0mV2luZG93cyZBbmRyb2lkJueUteinhui9r+S7tiZcXFwiLFxcbiAgICBcXFwiY2xhc3NfdXJsXFxcIjogXFxcIlJ1YW5KaWFuWGlhWmFpJldpbmRvd3MmQW5kcm9pZCZUViZcXFwiLFxcbiAgICBcXFwiYXJlYV9uYW1lXFxcIjogXFxcIuS8mOaDoOa0u+WKqCbnvZHnq5nmupDnoIEm5pyN5Yqh5ZmoJuaKgOacr+aVmeeoiyZcXFwiLFxcbiAgICBcXFwiYXJlYV91cmxcXFwiOiBcXFwiWW91SHVpSHVvRG9uZyZXYW5nWmhhbll1YW5NYSZWUFMmSmlTaHVKaWFvQ2hlbmcmXFxcIixcXG4gICAgXFxcInNvcnRfbmFtZVxcXCI6IFxcXCLkuIDnuqfpobXpnaLmj5DnpLrplJnor6/kuLrmsqHmnInkuIvkuIDpobXvvIFcXFwiLFxcbiAgICBcXFwieWVhcl9uYW1lXFxcIjogXFxcIuWFtuS7libmuLjmiI8m572R5Y+L5YiG5LqrJiZcXFwiLFxcbiAgICBcXFwic29ydF91cmxcXFwiOiBcXFwiXFxcIixcXG4gICAgXFxcInllYXJfdXJsXFxcIjogXFxcIlFpVGEmWW91WGkmV2FuZ1lvdUZlblhpYW5nJiZcXFwiLFxcbiAgICBcXFwiZmluZF9ydWxlXFxcIjogXFxcImJvZHkmJi5wb3N0O2EmJnRpdGxlO2ltZyYmc3JjOy50aW1lJiZUZXh0O2EmJmhyZWZcXFwiLFxcbiAgICBcXFwic2VhcmNoX3VybFxcXCI6IFxcXCJodHRwczovL3d3dy52eGF0LmNvbS9zZWFyY2gucGhwP3E9KiomcGFnZT1meXBhZ2VcXFwiLFxcbiAgICBcXFwiZ3JvdXBcXFwiOiBcXFwi5YW25a6DXFxcIixcXG4gICAgXFxcInNlYXJjaEZpbmRcXFwiOiBcXFwiYm9keSYmLnBvc3Q7YSYmdGl0bGU7YSYmaHJlZjsudGltZSYmVGV4dDsucG9zdCYmVGV4dDtpbWcmJnNyY1xcXCIsXFxuICAgIFxcXCJkZXRhaWxfY29sX3R5cGVcXFwiOiBcXFwibW92aWVfMVxcXCIsXFxuICAgIFxcXCJkZXRhaWxfZmluZF9ydWxlXFxcIjogXFxcImpzOnZhciByZXM9e307dmFyIGQ9W107aHRtbD1nZXRSZXNDb2RlKCk7dGV4dD1wYXJzZURvbUZvckh0bWwoaHRtbCxcXFxcXFxcIi5hcnRpY2xlLWNvbnRlbnQmJkh0bWxcXFxcXFxcIik7ZC5wdXNoKHt0aXRsZTp0ZXh0LGNvbF90eXBlOidyaWNoX3RleHQnfSk7cmVzLmRhdGE9ZDtzZXRIb21lUmVzdWx0KHJlcyk7XFxcIixcXG4gICAgXFxcInNkZXRhaWxfY29sX3R5cGVcXFwiOiBcXFwibW92aWVfMVxcXCIsXFxuICAgIFxcXCJzZGV0YWlsX2ZpbmRfcnVsZVxcXCI6IFxcXCIqXFxcIixcXG4gICAgXFxcInVhXFxcIjogXFxcIm1vYmlsZVxcXCIsXFxuICAgIFxcXCJwcmVSdWxlXFxcIjogXFxcIlxcXCIsXFxuICAgIFxcXCJwYWdlc1xcXCI6IFxcXCJbXVxcXCIsXFxuICAgIFxcXCJpY29uXFxcIjogXFxcIlxcXCJcXG59LCB7XFxuICAgIFxcXCJsYXN0X2NoYXB0ZXJfcnVsZVxcXCI6IFxcXCJcXFwiLFxcbiAgICBcXFwidGl0bGVcXFwiOiBcXFwi5byC5pif6L2v5Lu2XFxcIixcXG4gICAgXFxcImF1dGhvclxcXCI6IFxcXCLpppnpm4Xmg4VcXFwiLFxcbiAgICBcXFwidXJsXFxcIjogXFxcImh0dHA6Ly93d3cueXhzc3AuY29tL2Z5Y2xhc3MvcGFnZS9meXBhZ2VcXFwiLFxcbiAgICBcXFwidmVyc2lvblxcXCI6IDEsXFxuICAgIFxcXCJjb2xfdHlwZVxcXCI6IFxcXCJtb3ZpZV8xXFxcIixcXG4gICAgXFxcImNsYXNzX25hbWVcXFwiOiBcXFwiQW5kcm9pZCZXaW5kb3dzXFxcIixcXG4gICAgXFxcImNsYXNzX3VybFxcXCI6IFxcXCJvcy9hbmRyb2lkJm9zL3dpbmRvd3NcXFwiLFxcbiAgICBcXFwiYXJlYV9uYW1lXFxcIjogXFxcIlxcXCIsXFxuICAgIFxcXCJhcmVhX3VybFxcXCI6IFxcXCJcXFwiLFxcbiAgICBcXFwic29ydF9uYW1lXFxcIjogXFxcIlxcXCIsXFxuICAgIFxcXCJ5ZWFyX25hbWVcXFwiOiBcXFwiXFxcIixcXG4gICAgXFxcInNvcnRfdXJsXFxcIjogXFxcIlxcXCIsXFxuICAgIFxcXCJ5ZWFyX3VybFxcXCI6IFxcXCJcXFwiLFxcbiAgICBcXFwiZmluZF9ydWxlXFxcIjogXFxcIi50ZC1zcy1tYWluLWNvbnRlbnQmJi50ZF9tb2R1bGVfd3JhcDtoMyYmVGV4dDtpbWcmJnNyYzsudGQtbW9kdWxlLW1ldGEtaW5mbyYmVGV4dDthJiZocmVmXFxcIixcXG4gICAgXFxcInNlYXJjaF91cmxcXFwiOiBcXFwiaHR0cDovL3d3dy55eHNzcC5jb20vcGFnZS9meXBhZ2U/cz0qKlxcXCIsXFxuICAgIFxcXCJncm91cFxcXCI6IFxcXCLlhbblroNcXFwiLFxcbiAgICBcXFwic2VhcmNoRmluZFxcXCI6IFxcXCIudGQtc3MtbWFpbi1jb250ZW50JiYudGRfbW9kdWxlX3dyYXA7aDMmJlRleHQ7YSYmaHJlZjs7LnRkLW1vZHVsZS1tZXRhLWluZm8mJlRleHQ7aW1nJiZzcmNcXFwiLFxcbiAgICBcXFwiZGV0YWlsX2NvbF90eXBlXFxcIjogXFxcIm1vdmllXzFcXFwiLFxcbiAgICBcXFwiZGV0YWlsX2ZpbmRfcnVsZVxcXCI6IFxcXCJqczpcXFxcbnZhciBkPVtdO1xcXFxudmFyIGh0bWw9Z2V0UmVzQ29kZSgpO1xcXFxudmFyIHRhYnM9cGFyc2VEb21Gb3JIdG1sKGh0bWwsJ2JvZHkmJi50ZC1wb3N0LWNvbnRlbnQmJkh0bWwnKS5yZXBsYWNlKC9cXFxcXFxcXDxzY3JpcHRbXFxcXFxcXFxTXFxcXFxcXFxzXSo/PFxcXFxcXFxcL3NjcmlwdFxcXFxcXFxcPi9nLCcnKTtcXFxcblxcXFxuZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdHRpdGxlOiB0YWJzLFxcXFxuICAgIGRlc2M6JycsXFxcXG4gICAgcGljX3VybDonJyxcXFxcbiAgICB1cmw6JycsXFxcXG5cXFxcdFxcXFx0Y29sX3R5cGU6ICdyaWNoX3RleHQnXFxcXG59KTtcXFxcblxcXFxuc2V0SG9tZVJlc3VsdCh7ZGF0YTpkfSk7XFxcIixcXG4gICAgXFxcInNkZXRhaWxfY29sX3R5cGVcXFwiOiBcXFwibW92aWVfMVxcXCIsXFxuICAgIFxcXCJzZGV0YWlsX2ZpbmRfcnVsZVxcXCI6IFxcXCIqXFxcIixcXG4gICAgXFxcInVhXFxcIjogXFxcInBjXFxcIixcXG4gICAgXFxcInByZVJ1bGVcXFwiOiBcXFwiXFxcIixcXG4gICAgXFxcInBhZ2VzXFxcIjogXFxcIltdXFxcIixcXG4gICAgXFxcImljb25cXFwiOiBcXFwiXFxcIlxcbn0sIHtcXG4gICAgXFxcImxhc3RfY2hhcHRlcl9ydWxlXFxcIjogXFxcIlxcXCIsXFxuICAgIFxcXCJ0aXRsZVxcXCI6IFxcXCJhcGs0YWxsXFxcIixcXG4gICAgXFxcImF1dGhvclxcXCI6IFxcXCJ0ZWVcXFwiLFxcbiAgICBcXFwidXJsXFxcIjogXFxcImh0dHBzOi8vYXBrNGFsbC5jb20vYW5kcm9pZC9nZW5yZXMvZnlBbGwvcGFnZS9meXBhZ2UvXFxcIixcXG4gICAgXFxcInZlcnNpb25cXFwiOiA4LFxcbiAgICBcXFwiY29sX3R5cGVcXFwiOiBcXFwibW92aWVfMV9sZWZ0X3BpY1xcXCIsXFxuICAgIFxcXCJjbGFzc19uYW1lXFxcIjogXFxcIkFydCDvvIbvvIYgRGVzaWduJkF1dG8g77yG77yGIFZlaGljbGVzJkJvb2tzIO+8hu+8hiBSZWZlcmVuY2UmQnVzaW5lc3MmQ29taWNzJkNvbW11bmljYXRpb24mRWR1Y2F0aW9uJkVudGVydGFpbm1lbnQmRmluYW5jZSZIZWFsdGgg77yG77yGIEZpdG5lc3MmSG91c2Ug77yG77yGIEhvbWUmTGlicmFyaWVzIO+8hu+8hiBEZW1vJkxpZmVzdHlsZSZNYXBzIO+8hu+8hiBOYXZpZ2F0aW9uJk1lZGljYWwmTXVzaWMg77yG77yGIEF1ZGlvJk5ld3Mg77yG77yGIE1hZ2F6aW5lcyZQYXJlbnRpbmcmUGVyc29uYWxpemF0aW9uJlBob3RvZ3JhcGh5JlByb2R1Y3Rpdml0eSZTaG9wcGluZyZTb2NpYWwmVG9vbHMmVHJhdmVsIO+8hu+8hiBMb2NhbCZWaWRlbyBQbGF5ZXJzIO+8hu+8hiBFZGl0b3JzJldlYXRoZXJcXFwiLFxcbiAgICBcXFwidHlwZVxcXCI6IFxcXCJ0b29sXFxcIixcXG4gICAgXFxcImNsYXNzX3VybFxcXCI6IFxcXCJhcnQtZGVzaWduLyZhdXRvLXZlaGljbGVzLyZib29rcy1yZWZlcmVuY2UvJmJ1c2luZXNzLWFwcC8mY29taWNzLWFwcC8mY29tbXVuaWNhdGlvbi1hcHAvJmVkdWNhdGlvbi1tb2QtYXBwLyZlbnRlcnRhaW5tZW50LWFwcHMvJmZpbmFuY2UvJmhlYWx0aC1maXRuZXNzLyZob3VzZS1ob21lLyZsaWJyYXJpZXMtZGVtby8mbGlmZXN0eWxlLWFwcC8mbWFwcy1uYXZpZ2F0aW9uLyZtZWRpY2FsLWFwcC8mbXVzaWMtYXVkaW8vJm5ld3MtbWFnYXppbmVzLyZwYXJlbnRpbmcvJnBlcnNvbmFsaXphdGlvbi1tb2QtYXBwLyZwaG90b2dyYXBoeS8mcHJvZHVjdGl2aXR5LWFwcC8mc2hvcHBpbmctYXBwLyZzb2NpYWwtYXBwLyZ0b29scy1tb2QtYXBwLyZ0cmF2ZWwtbG9jYWwtYXBwLyZ2aWRlby1wbGF5ZXJzLWVkaXRvcnMvJndlYXRoZXItYXBwL1xcXCIsXFxuICAgIFxcXCJhcmVhX25hbWVcXFwiOiBcXFwiQWN0aW9uJkFkdmVudHVyZSZBcmNhZGUmQm9hcmQmQ2FyZCZDYXN1YWwmRWR1Y2F0aW9uYWwmTXVzaWMmUHV6emxlJlJhY2luZyZSb2xlIFBsYXlpbmcmU2ltdWxhdGlvbiZTcG9ydHMmU3RyYXRlZ3kmVHJpdmlhJldvcmRcXFwiLFxcbiAgICBcXFwiYXJlYV91cmxcXFwiOiBcXFwiYWN0aW9uLWdhbWVzLyZhZHZlbnR1cmUtZ2FtZXMvJmFyY2FkZS1nYW1lcy8mYm9hcmQtZ2FtZXMvJmNhcmQtZ2FtZXMvJmNhc3VhbC1nYW1lcy8mZWR1Y2F0aW9uYWwtZ2FtZXMvJm11c2ljLWdhbWVzLyZwdXp6bGUtZ2FtZXMvJnJhY2luZy1nYW1lcy8mcm9sZS1wbGF5aW5nLWdhbWVzLyZzaW11bGF0aW9uLWFway1nYW1lcy8mc3BvcnRzLWdhbWVzLyZzdHJhdGVneS1nYW1lcy8mdHJpdmlhLWdhbWVzLyZ3b3JkLWdhbWVzL1xcXCIsXFxuICAgIFxcXCJzb3J0X25hbWVcXFwiOiBcXFwiXFxcIixcXG4gICAgXFxcInllYXJfbmFtZVxcXCI6IFxcXCJcXFwiLFxcbiAgICBcXFwic29ydF91cmxcXFwiOiBcXFwiXFxcIixcXG4gICAgXFxcInllYXJfdXJsXFxcIjogXFxcIlxcXCIsXFxuICAgIFxcXCJmaW5kX3J1bGVcXFwiOiBcXFwibWFpbiYmYXJ0aWNsZTtoMyYmVGV4dDtpbWcsMSYmc3JjO2RkJiZUZXh0O2EmJmhyZWYuanM6aW5wdXQrJyNpbW1lcnNpdmVUaGVtZSMnXFxcIixcXG4gICAgXFxcInNlYXJjaF91cmxcXFwiOiBcXFwiaHR0cHM6Ly9hcGs0YWxsLmNvbS9zZWFyY2gvKiovcGFnZS9meXBhZ2UvXFxcIixcXG4gICAgXFxcImdyb3VwXFxcIjogXFxcIuWFtuWug1xcXCIsXFxuICAgIFxcXCJzZWFyY2hGaW5kXFxcIjogXFxcIm1haW4mJmFydGljbGU7aDMmJlRleHQ7YSYmaHJlZi5qczppbnB1dCsnI2ltbWVyc2l2ZVRoZW1lIyc7ZGQmJlRleHQ7KjtpbWcsMSYmc3JjXFxcIixcXG4gICAgXFxcImRldGFpbF9jb2xfdHlwZVxcXCI6IFxcXCJyaWNoX3RleHRcXFwiLFxcbiAgICBcXFwiZGV0YWlsX2ZpbmRfcnVsZVxcXCI6IFxcXCJqczpcXFxcbnZhciByZXMgPSB7fTtcXFxcbnZhciBkID0gW107XFxcXG52YXIgaHRtbCA9IGdldFJlc0NvZGUoKTtcXFxcbnZhciBkZXNjID0gcGRmaChodG1sLCBcXFxcXFxcIi5kZXNjJiZUZXh0XFxcXFxcXCIpICsgXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIiArIHBkZmgoaHRtbCwgXFxcXFxcXCJoMiYmVGV4dFxcXFxcXFwiKSArIFxcXFxcXFwiICAgXFxcXFxcXFwvICAgMTBcXFxcXFxcIjtcXFxcblxcXFxudmFyIGRsID0gcGQoaHRtbCwgXFxcXFxcXCIuZGxsaW5rcywxJiZhJiZocmVmXFxcXFxcXCIpICsgXFxcXFxcXCIjaW1tZXJzaXZlVGhlbWUjXFxcXFxcXCI7XFxcXG5cXFxcbmQucHVzaCh7IC8v5qCH6aKY44CB57yp55Wl5Zu+44CB566A5LuLXFxcXG4gICAgdGl0bGU6IFxcXFxcXFwi4oCc4oCc4oCd4oCdPGJpZz5cXFxcXFxcIiArIHBkZmgoaHRtbCwgXFxcXFxcXCJoMSYmVGV4dFxcXFxcXFwiKSArIFxcXFxcXFwiPC9iaWc+XFxcXFxcXCIsXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFwibW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1clxcXFxcXFwiLFxcXFxuICAgIGRlc2M6IGRlc2MsXFxcXG4gICAgcGljX3VybDogcGQoaHRtbCwgXFxcXFxcXCJhcnRpY2xlJiZpbWcsMSYmc3JjXFxcXFxcXCIpLFxcXFxuICAgIHVybDogZGxcXFxcbn0pO1xcXFxuXFxcXG5kLnB1c2goeyAvL+e6v+adoVxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcImxpbmVfYmxhbmtcXFxcXFxcIixcXFxcbn0pO1xcXFxuXFxcXG52YXIgbGlzdCA9IHBkZmEoaHRtbCwgXFxcXFxcXCIuYXBwLWRlc2MmJnB8fGxpXFxcXFxcXCIpO1xcXFxuZm9yIChpIG9mIGxpc3QpIHtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogcGRmaChpLCBcXFxcXFxcInB8fGxpJiZUZXh0XFxcXFxcXCIpLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJyaWNoX3RleHRcXFxcXFxcIixcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgIHRleHRTaXplOiAxMyxcXFxcbiAgICAgICAgICAgIGNsaWNrOiB0cnVlXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcbn07XFxcXG5cXFxcbnZhciBnYWxsZXJ5ID0gcGRmYShodG1sLCBcXFxcXFxcIiNnYWxsZXJ5LTEmJmFcXFxcXFxcIik7XFxcXG5cXFxcbmZvciAobGV0IG4gb2YgZ2FsbGVyeSkge1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBwZGZoKG4sIFxcXFxcXFwiaW1nLDEmJnRpdGxlXFxcXFxcXCIpLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJwaWNfM19zcXVhcmVcXFxcXFxcIixcXFxcbiAgICAgICAgcGljX3VybDogcGQobiwgXFxcXFxcXCJpbWcsMSYmc3JjXFxcXFxcXCIpICsgJ0BSZWZlcmVyPScsXFxcXG4gICAgICAgIHVybDogcGQobiwgXFxcXFxcXCJpbWcsMSYmc3JjXFxcXFxcXCIpICsgJyNhdXRvUGFnZSMjcmVhZFRoZW1lIydcXFxcbiAgICB9KTtcXFxcbn07XFxcXG5cXFxcbmQucHVzaCh7IC8v57q/5p2hXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFwibGluZV9ibGFua1xcXFxcXFwiLFxcXFxufSk7XFxcXG5cXFxcbi8v5bqV6YOo5LiL6L295qih5Z2XXFxcXG5kLnB1c2goe1xcXFxuICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxcXG4gICAgdGl0bGU6IFxcXFxcXFwi4oCc4oCc4oCd4oCdPGJpZz5cXFxcXFxcIiArICfngrnmraTkuIvovb0nICsgXFxcXFxcXCI8L2JpZz5cXFxcXFxcIixcXFxcbiAgICB1cmw6IGRsXFxcXG59KTtcXFxcblxcXFxuZC5wdXNoKHsgLy/nur/mnaFcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJsaW5lX2JsYW5rXFxcXFxcXCIsXFxcXG59KTtcXFxcblxcXFxucmVzLmRhdGEgPSBkO1xcXFxuc2V0UmVzdWx0KHJlcyk7XFxcIixcXG4gICAgXFxcInNkZXRhaWxfY29sX3R5cGVcXFwiOiBcXFwibW92aWVfMVxcXCIsXFxuICAgIFxcXCJzZGV0YWlsX2ZpbmRfcnVsZVxcXCI6IFxcXCIqXFxcIixcXG4gICAgXFxcInVhXFxcIjogXFxcIm1vYmlsZVxcXCIsXFxuICAgIFxcXCJwcmVSdWxlXFxcIjogXFxcIlxcXCIsXFxuICAgIFxcXCJwYWdlc1xcXCI6IFxcXCJbXVxcXCIsXFxuICAgIFxcXCJpY29uXFxcIjogXFxcImh0dHBzOi8vYXBrNGFsbC5jb20vZmF2aWNvbi5pY29cXFwiXFxufV1cIn1dLFwicGFyYW1zXCI6XCJ7XFxcIlJVTEVcXFwiOntcXFwidGl0bGVcXFwiOlxcXCI0MjNEb3duXFxcIn0sXFxcImlzSW5kZXhcXFwiOnRydWUsXFxcInVybFxcXCI6XFxcImh0dHBzOi8vd3d3LjQyM2Rvd24uY29tLyNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSMjIyN7XFxcXFxcXCJSVUxFXFxcXFxcXCI6XFxcXFxcXCJleUowYVhSc1pTSTZJalF5TTBSdmQyNGlMQ0oxY213aU9pSm9kSFJ3Y3pvdkwzZDNkeTQwTWpOa2IzZHVMbU52YlM5bWVVRnNiSEJoWjJVdlpubHdZV2RsSWl3aVkyeGhjM05mYm1GdFpTSTZJdW1tbHVtaHRTYmxyb25salpQb3ZhL2t1N1lpTENKamJHRnpjMTkxY213aU9pSW1ZWEJyTHlJc0ltRnlaV0ZmYm1GdFpTSTZJdVdPbitXSW0raTlyK1M3dGlibHFwTGt2WlBta3EzbWxMNG01NzJSNmFHMTVyV1A2S2VJSnVXYnZ1VzlvdVdidnVXRGp5Ym9nWXJscEtub3ZhL2t1N1ltNVlxZTVZV3M2TDJ2NUx1Mkp1UzRpdVM4b09TNGkraTl2U2JscnA3bmxLam92YS9rdTdZbTU3Tzc1N3VmNkw2RjVZcXBKdWV6dStlN24rVy9oZVdraHlibHJvbmxoYWpvdmEva3U3WW02S0dsNUxpQjU1dTQ1WVd6SnVlaHJPUzd0dWVidU9XRnN5Ym11TGptaUkvb3ZhL2t1N1lpTENKaGNtVmhYM1Z5YkNJNklucGtOREl6THladGRXeDBhVzFsWkdsaEx5WmljbTkzYzJWeUx5WnBiV0ZuWlM4bWFXMHZKbmR2Y21zdkptUnZkMjR2Sm5OaFptVjNiM0psTHlaemVYTjBaVzF6YjJaMEx5WnplWE4wWlcxd2JIVnpMeVp6WldOMWNtbDBlUzhtY0dGMFkyZ3ZKbWhoY21SM1lYSmxMeVpuWVcxbEx5SXNJbmxsWVhKZmJtRnRaU0k2SWlJc0lubGxZWEpmZFhKc0lqb2lJaXdpYzI5eWRGOXVZVzFsSWpvaUlpd2ljMjl5ZEY5MWNtd2lPaUlpZlE9PVxcXFxcXFwiLFxcXFxcXFwicGFnZU51bVxcXFxcXFwiOlxcXFxcXFwiZnlwYWdlXFxcXFxcXCIsXFxcXFxcXCJRSU5HX1RJVExFXFxcXFxcXCI6XFxcXFxcXCLotYTmupDovbvlkIjpm4ZcXFxcXFxcIn0uanM6ZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3VybFBhcnNl77yf77yfcnVsZT3otYTmupDovbvlkIjpm4ZcXFxcXFxcIikpLnJ1bGUp77yb77ybaW5kZXhVcmwoaW5wdXQpO2dldDt1dGYtODt7VXNlci1BZ2VudEBNb3ppbGxhLzUuMCAoTGludXjvvJvvvJsgQW5kcm9pZCAxMCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzgwLjAuMzk4Ny4xMzIgTW9iaWxlIFNhZmFyaS81MzcuMzZ9XFxcIn1cIixcInNhdmVkXCI6ZmFsc2UsXCJ0aXRsZVwiOlwi6LWE5rqQ6L275ZCI6ZuGXCIsXCJ2ZXJzaW9uXCI6MCxcInVybFwiOlwiaHR0cHM6Ly93d3cuNDIzZG93bi5jb20vI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5IyMjI3tcXFwiUlVMRVxcXCI6XFxcImV5SjBhWFJzWlNJNklqUXlNMFJ2ZDI0aUxDSjFjbXdpT2lKb2RIUndjem92TDNkM2R5NDBNak5rYjNkdUxtTnZiUzltZVVGc2JIQmhaMlV2Wm5sd1lXZGxJaXdpWTJ4aGMzTmZibUZ0WlNJNkl1bW1sdW1odFNibHJvbmxqWlBvdmEva3U3WWlMQ0pqYkdGemMxOTFjbXdpT2lJbVlYQnJMeUlzSW1GeVpXRmZibUZ0WlNJNkl1V09uK1dJbStpOXIrUzd0aWJscXBMa3ZaUG1rcTNtbEw0bTU3MlI2YUcxNXJXUDZLZUlKdVdidnVXOW91V2J2dVdEanlib2dZcmxwS25vdmEva3U3WW01WXFlNVlXczZMMnY1THUySnVTNGl1UzhvT1M0aStpOXZTYmxycDdubEtqb3ZhL2t1N1ltNTdPNzU3dWY2TDZGNVlxcEp1ZXp1K2U3bitXL2hlV2toeWJscm9ubGhham92YS9rdTdZbTZLR2w1TGlCNTV1NDVZV3pKdWVock9TN3R1ZWJ1T1dGc3libXVMam1pSS9vdmEva3U3WWlMQ0poY21WaFgzVnliQ0k2SW5wa05ESXpMeVp0ZFd4MGFXMWxaR2xoTHlaaWNtOTNjMlZ5THlacGJXRm5aUzhtYVcwdkpuZHZjbXN2Sm1SdmQyNHZKbk5oWm1WM2IzSmxMeVp6ZVhOMFpXMXpiMlowTHlaemVYTjBaVzF3YkhWekx5WnpaV04xY21sMGVTOG1jR0YwWTJndkptaGhjbVIzWVhKbEx5Wm5ZVzFsTHlJc0lubGxZWEpmYm1GdFpTSTZJaUlzSW5sbFlYSmZkWEpzSWpvaUlpd2ljMjl5ZEY5dVlXMWxJam9pSWl3aWMyOXlkRjkxY213aU9pSWlmUT09XFxcIixcXFwicGFnZU51bVxcXCI6XFxcImZ5cGFnZVxcXCIsXFxcIlFJTkdfVElUTEVcXFwiOlxcXCLotYTmupDovbvlkIjpm4ZcXFwifS5qczpldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS91cmxQYXJzZe+8n++8n3J1bGU96LWE5rqQ6L275ZCI6ZuGXFxcIikpLnJ1bGUp77yb77ybaW5kZXhVcmwoaW5wdXQpO2dldDt1dGYtODt7VXNlci1BZ2VudEBNb3ppbGxhLzUuMCAoTGludXjvvJvvvJsgQW5kcm9pZCAxMCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzgwLjAuMzk4Ny4xMzIgTW9iaWxlIFNhZmFyaS81MzcuMzZ9XCIsXCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwiZmluZF9ydWxlXCI6XCJqczpcXG5jb25zdCBRSU5HX1RJVExFID0gZ2V0TXlWYXIoJ215Q29sbGVjdGlvbicpXFxubGV0IG15Q29sbGVjdGlvbl9lbCA9IFtdLFxcbiAgICB7IFJVTEUsIGlzSW5kZXgsIHBhZ2VUaXRsZSB9ID0gTVlfUEFSQU1TLFxcbiAgICB0aGlzUlVMRSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2RhdGFMb2FkP3J1bGU9JyArIFFJTkdfVElUTEUpKCkuZmluZCgodikgPT4gdi50aXRsZSA9PSBSVUxFLnRpdGxlKVxcbmlmIChpc0luZGV4KSB7XFxuICAgIFJVTEUgPSB0aGlzUlVMRVxcbn0gZWxzZSB7XFxuICAgIFJVTEUucGFnZXMgPSB0aGlzUlVMRS5wYWdlc1xcbn1cXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9wcmVGdW5jP3J1bGU9JyArIFFJTkdfVElUTEUpKS5ydWxlKVxcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3VybFBhcnNlP3J1bGU9JyArIFFJTkdfVElUTEUpKS5ydWxlKVxcblxcbmlmIChpc0luZGV4KSB7XFxuICAgIGlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgICAgIC8vIOWKoOi9vUNsYXNzVGFi57uE5Lu2XFxuICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9DbGFzc1RhYj9ydWxlPScgKyBRSU5HX1RJVExFKSkucnVsZSlcXG4gICAgICAgIHRhYkhlYWRlci5sb2FkKG15Q29sbGVjdGlvbl9lbClcXG4gICAgICAgIGlmIChSVUxFLnNlYXJjaF91cmwpIG15Q29sbGVjdGlvbl9lbC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuaQnOe0olxcXCIsXFxuICAgICAgICAgICAgZGVzYzogXFxcIuaQnOS9oOaDs+imgeeahC4uLlxcXCIsXFxuICAgICAgICAgICAgdXJsOiAnXFxcImhpa2VyOi8vc2VhcmNoP3M9XFxcIitpbnB1dCcsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgcnVsZXM6ICQudG9TdHJpbmcoKFFJTkdfVElUTEUsIHRpdGxlKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9kYXRhTG9hZD9ydWxlPScgKyBRSU5HX1RJVExFKSgpXFxuICAgICAgICAgICAgICAgICAgICBydWxlcyA9IFtydWxlcy5maW5kKCh2KSA9PiB2LnRpdGxlID09IHRpdGxlKV1cXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShydWxlcylcXG4gICAgICAgICAgICAgICAgfSwgUUlOR19USVRMRSwgUlVMRS50aXRsZSksXFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoJ3NlYXJjaEtleScsICcnKSxcXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U6IFxcXCJwdXRNeVZhcignc2VhcmNoS2V5JyxpbnB1dClcXFwiXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgIH0pXFxuICAgIH1cXG4gICAgLy8g5aSE55CGTVlfUlVMRVxcbiAgICBNWV9SVUxFLnVybCA9IFJVTEUudXJsXFxuICAgIE1ZX1JVTEUuY29sX3R5cGUgPSBSVUxFLmNvbF90eXBlXFxuICAgIE1ZX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gUlVMRS5kZXRhaWxfY29sX3R5cGVcXG4gICAgTVlfUlVMRS5maW5kX3J1bGUgPSBSVUxFLmZpbmRfcnVsZVxcbiAgICBNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBSVUxFLmRldGFpbF9maW5kX3J1bGVcXG4gICAgTVlfUlVMRS5wYXJhbXMgPSB7fVxcbn0gZWxzZSB7XFxuICAgIE1ZX1JVTEUudXJsID0gTVlfUEFSQU1TLnVybFxcbiAgICBNWV9SVUxFLmNvbF90eXBlID0gUlVMRS5kZXRhaWxfY29sX3R5cGVcXG4gICAgTVlfUlVMRS5maW5kX3J1bGUgPSBSVUxFLmRldGFpbF9maW5kX3J1bGVcXG4gICAgTVlfUlVMRS5wYXJhbXMgPSBSVUxFLnBhcmFtc1xcbn1cXG5NWV9SVUxFLnBhZ2VzID0gUlVMRS5wYWdlc1xcbk1ZX1JVTEUucGFnZUxpc3QgPSBKU09OLnBhcnNlKE1ZX1JVTEUucGFnZXMgfHwgJ1tdJylcXG5NWV9SVUxFLnRpdGxlID0gUlVMRS50aXRsZVxcblxcbmlmICghaXNJbmRleCkge1xcbiAgICBpZiAocGFnZVRpdGxlKSBzZXRQYWdlVGl0bGUocGFnZVRpdGxlKVxcbiAgICBzZXRMYXN0Q2hhcHRlclJ1bGUodGhpc1JVTEUubGFzdF9jaGFwdGVyX3J1bGUpXFxuICAgIE1ZX1BBUkFNUyA9IE1ZX1JVTEUucGFyYW1zXFxufVxcbi8vIOmihOWkhOeQhuW5tuWIneWni+WMlmNvbmZpZ1xcbmlmIChpc0luZGV4ICYmIE1ZX1BBR0UgPT0gMSkgZXZhbCh0aGlzUlVMRS5wcmVSdWxlKVxcbmxldCBfY2ZnID0gZ2V0TXlWYXIoJ2luaXRDb25maWcnLCAne30nKVxcbmlmIChfY2ZnICYmIF9jZmcubGVuZ3RoID4gMCkge1xcbiAgICBjb25maWcgPSBKU09OLnBhcnNlKF9jZmcpXFxufVxcblxcbi8vIOato+aWh+ino+aekOmAmueUqOWPmOmHj1xcbmxldCBhc3NpZ25MYXp5UnVsZSA9ICQudG9TdHJpbmcoKFFJTkdfVElUTEUsIHRpdGxlKSA9PiB7XFxuICAgIGxldCBSVUxFID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZGF0YUxvYWQ/cnVsZT1cXFwiICsgUUlOR19USVRMRSkoKS5maW5kKCh2KSA9PiB2LnRpdGxlID09IHRpdGxlKVxcbiAgICByZXR1cm4geyBwYWdlczogUlVMRS5wYWdlcywgcGFnZUxpc3Q6IEpTT04ucGFyc2UoUlVMRS5wYWdlcyB8fCAnW10nKSB9XFxufSwgUUlOR19USVRMRSwgUlVMRS50aXRsZSlcXG5mdW5jdGlvbiBnZW5NeVJ1bGUoKSB7XFxuICAgIGxldCBydWxlID0gT2JqZWN0LmFzc2lnbih7fSwgTVlfUlVMRSlcXG4gICAgZGVsZXRlIHJ1bGUubGFzdF9jaGFwdGVyX3J1bGVcXG4gICAgZGVsZXRlIHJ1bGUucHJlUnVsZVxcbiAgICBkZWxldGUgcnVsZS5wYWdlTGlzdFxcbiAgICBkZWxldGUgcnVsZS5wYWdlc1xcbiAgICByZXR1cm4gcnVsZVxcbn1cXG5mdW5jdGlvbiBydW5Db2RlKHJ1bGUpIHtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGxldCBbaW5wdXQsIGNvZGVdID0gcnVsZS5zcGxpdCgnLmpzOicpXFxuICAgICAgICByZXR1cm4gY29kZSA/IGV2YWwoY29kZSkgOiBydWxlXFxuICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuIHJ1bGUgfVxcbn1cXG5mdW5jdGlvbiBnZW5FeFVybCh1cmwpIHtcXG4gICAgdXJsID0gdXJsLnNwbGl0KCc7JylcXG4gICAgcmV0dXJuIHVybC5zaGlmdCgpICsgJzsnICsgcGFyYW1IYW5kbGUodXJsLCB0aGlzUlVMRS51YSwgTVlfUlVMRS51cmwpXFxufVxcbi8vIOato+aWh+ino+aekFxcbmlmIChNWV9SVUxFLmZpbmRfcnVsZS5zdGFydHNXaXRoKCdqczonKSkge1xcbiAgICBzZXRSZXN1bHQgPSBmdW5jdGlvbihlbCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMykge1xcbiAgICAgICAgcGFyYW0xID0gQ0FMTEJBQ0tfS0VZXFxuICAgICAgICBwYXJhbTIgPSBNWV9SVUxFXFxuICAgICAgICBwYXJhbTMgPSBNWV9UWVBFXFxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbC5kYXRhKSkgZWwgPSBlbC5kYXRhXFxuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShteUNvbGxlY3Rpb25fZWwsIGVsLm1hcCgodikgPT4ge1xcbiAgICAgICAgICAgIGxldCBNWV9fUlVMRSA9IE9iamVjdC5hc3NpZ24oZ2VuTXlSdWxlKCksIHsgcGFyYW1zOiB2LmV4dHJhIHx8IHt9IH0pXFxuICAgICAgICAgICAgdi5jb2xfdHlwZSA9IHYuY29sX3R5cGUgfHwgTVlfUlVMRS5jb2xfdHlwZVxcblxcbiAgICAgICAgICAgIGlmICghdi51cmwgfHwgWydydWxlJywgJ3BpY3MnLCAndG9hc3QnLCAnaW5wdXQnLCAnY29weScsICdlZGl0RmlsZScsICd4NScsICd4NVdlYlZpZXcnLCAneDVQbGF5JywgJ3dlYicsICdzZWxlY3QnLCAneDVSdWxlJywgJ3dlYlJ1bGUnLCAnZG93bmxvYWQnLCAnc2hhcmUnXS5maW5kKCh2dikgPT4gdi51cmwuc3RhcnRzV2l0aCh2diArICc6Ly8nKSkgfHwgWyd4NV93ZWJ2aWV3X3NpbmdsZScsICdpbnB1dCddLmZpbmQoKHZ2KSA9PiB2LmNvbF90eXBlID09IHZ2KSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuaW5jbHVkZXMoJ0BydWxlPScpKSB7XFxuICAgICAgICAgICAgICAgIGxldCBbXywgdXJsLCBydWxlXSA9IHYudXJsLm1hdGNoKC9eKFtcXFxcc1xcXFxTXSo/KUBydWxlPShbXFxcXHNcXFxcU10qKSQvKVxcbiAgICAgICAgICAgICAgICB2LnVybCA9IHVybFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gcnVsZVxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBNWV9SVUxFLmNvbF90eXBlXFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5zdGFydHNXaXRoKCdoaWtlcjovL3BhZ2UvJykpIHtcXG4gICAgICAgICAgICAgICAgaWYgKHYudXJsLmluY2x1ZGVzKCdydWxlPScpIHx8ICh2LmV4dHJhIHx8IHt9KS5ydWxlKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICAgICAgbGV0IFtfLCBwYXRoLCBmbGFnLCBwYXJhbXNdID0gdi51cmwubWF0Y2goL15oaWtlcjpcXFxcL1xcXFwvcGFnZVxcXFwvKC4rPykoIy4qPyk/KD86XFxcXD8oLiopKT8kLyksXFxuICAgICAgICAgICAgICAgICAgICBzdWJQYWdlID0gTVlfUlVMRS5wYWdlTGlzdC5maW5kKCh2KSA9PiB2LnBhdGggPT0gcGF0aCksXFxuICAgICAgICAgICAgICAgICAgICBzdWJVcmwgPSAocGFyYW1zIHx8ICcnKS5zcGxpdCgnJicpLmZpbmQoKHYpID0+IHYuc3RhcnRzV2l0aCgndXJsPScpKVxcbiAgICAgICAgICAgICAgICB2LnVybCA9IChzdWJVcmwgPyBzdWJVcmwuc2xpY2UoNCkucmVwbGFjZSgv77yf77yfL2csICc/JykucmVwbGFjZSgv77yG77yGL2csICcmJykgOiAodi5leHRyYSB8fCB7fSkudXJsKSB8fCAnaGlrZXI6Ly9lbXB0eScgKyBmbGFnICsgJz8nICsgKHBhcmFtcyB8fCAnJylcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHN1YlBhZ2UucnVsZVxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBzdWJQYWdlLmNvbF90eXBlXFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxuICAgICAgICAgICAgICAgIGxldCByZUluZGV4ID0gdi51cmwuaW5kZXhPZignLmpzOicpXFxuICAgICAgICAgICAgICAgIGlmIChyZUluZGV4ID49IDApIHYudXJsID0gdi51cmwuc2xpY2UoMCwgcmVJbmRleCkgKyAnLmpzOlxcXFxuaWYoTVlfUlVMRSlPYmplY3QuYXNzaWduKE1ZX1JVTEUsICcgKyBhc3NpZ25MYXp5UnVsZSArICcpOycgKyB2LnVybC5zbGljZShyZUluZGV4ICsgNClcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzSW5kZXgpIHtcXG4gICAgICAgICAgICAgICAgaWYgKCFNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUgfHwgL2hpa2VyOlxcXFwvXFxcXC8oPyFlbXB0eS4rJCkvLnRlc3Qodi51cmwpKSByZXR1cm4gdlxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHYuZXh0cmEgPSB7XFxuICAgICAgICAgICAgICAgIHVybDogZ2VuRXhVcmwodi51cmwpLFxcbiAgICAgICAgICAgICAgICBSVUxFOiBNWV9fUlVMRSxcXG4gICAgICAgICAgICAgICAgcGFnZVRpdGxlOiBpc0luZGV4ICYmIHYudGl0bGVcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdi51cmwgPSAnaGlrZXI6Ly9wYWdlL2ZyYW1lTG9hZD9ydWxlPScgKyBRSU5HX1RJVExFXFxuICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgIH0pKVxcbiAgICAgICAgbWV0aG9kX3NldFJlc3VsdC5pbnZva2UoamF2YUNvbnRleHQsIG15Q29sbGVjdGlvbl9lbCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMylcXG4gICAgfVxcbiAgICBzZXRIb21lUmVzdWx0ID0gc2V0UmVzdWx0XFxuICAgIHNldFNlYXJjaFJlc3VsdCA9IHNldFJlc3VsdFxcblxcbiAgICBldmFsKE1ZX1JVTEUuZmluZF9ydWxlLnNsaWNlKDMpKVxcbn0gZWxzZSB7XFxuICAgIGxldCBbXywgZmluZFJ1bGUsIGRldGFpbEZpbmRSdWxlXSA9IE1ZX1JVTEUuZmluZF9ydWxlLm1hdGNoKC9eKFtcXFxcc1xcXFxTXSo/KSg/Oj09PihbXFxcXHNcXFxcU10qKSk/JC8pXFxuICAgIGZpbmRSdWxlID0gZmluZFJ1bGUuc3BsaXQoJzsnKVxcbiAgICBwYXJzZURvbUZvckFycmF5KGdldFJlc0NvZGUoKSwgZmluZFJ1bGUuc2hpZnQoKSkuZm9yRWFjaCgoZGF0YSkgPT4ge1xcbiAgICAgICAgbGV0IFt0aXRsZSwgaW1nLCBkZXNjLCB1cmxdID0gZmluZFJ1bGUubWFwKCh2LCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAodiA9PSAnKicpIHJldHVybiAnJ1xcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB2ID0gKGkgPT0gMSB8fCBpID09IDMpID9cXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvbShkYXRhLCB2KSA6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VEb21Gb3JIdG1sKGRhdGEsIHYpXFxuICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSAzKSB2ID0gcnVuQ29kZSh2KVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gJycgfVxcbiAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIHJlcyA9IHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLCB1cmw6IHVybCxcXG4gICAgICAgICAgICAgICAgZGVzYzogZGVzYywgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBNWV9SVUxFLmNvbF90eXBlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgaWYgKHJlcy51cmwpIHtcXG4gICAgICAgICAgICBpZiAocmVzLnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxuICAgICAgICAgICAgICAgIGxldCByZUluZGV4ID0gcmVzLnVybC5pbmRleE9mKCcuanM6JylcXG4gICAgICAgICAgICAgICAgaWYgKHJlSW5kZXggPj0gMCkgcmVzLnVybCA9IHJlcy51cmwuc2xpY2UoMCwgcmVJbmRleCkgKyAnLmpzOlxcXFxuaWYoTVlfUlVMRSlPYmplY3QuYXNzaWduKE1ZX1JVTEUsICcgKyBhc3NpZ25MYXp5UnVsZSArICcpOycgKyByZXMudXJsLnNsaWNlKHJlSW5kZXggKyA0KVxcbiAgICAgICAgICAgIH0gZWxzZSAgaWYgKGRldGFpbEZpbmRSdWxlKSB7XFxuICAgICAgICAgICAgICAgIHJlcy5leHRyYSA9IHtcXG4gICAgICAgICAgICAgICAgICAgIHVybDogZ2VuRXhVcmwodXJsKSxcXG4gICAgICAgICAgICAgICAgICAgIFJVTEU6IE9iamVjdC5hc3NpZ24oZ2VuTXlSdWxlKCksIHsgZGV0YWlsX2ZpbmRfcnVsZTogZGV0YWlsRmluZFJ1bGUgfSksXFxuICAgICAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IGlzSW5kZXggJiYgdGl0bGVcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXMudXJsID0gJ2hpa2VyOi8vcGFnZS9mcmFtZUxvYWQ/cnVsZT0nICsgUUlOR19USVRMRVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoTVlfUlVMRS5kZXRhaWxfZmluZF9ydWxlKSB7XFxuICAgICAgICAgICAgICAgIHJlcy5leHRyYSA9IHtcXG4gICAgICAgICAgICAgICAgICAgIHVybDogZ2VuRXhVcmwodXJsKSxcXG4gICAgICAgICAgICAgICAgICAgIFJVTEU6IGdlbk15UnVsZSgpLFxcbiAgICAgICAgICAgICAgICAgICAgcGFnZVRpdGxlOiBpc0luZGV4ICYmIHRpdGxlXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmVzLnVybCA9ICdoaWtlcjovL3BhZ2UvZnJhbWVMb2FkP3J1bGU9JyArIFFJTkdfVElUTEVcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBteUNvbGxlY3Rpb25fZWwucHVzaChyZXMpXFxuICAgIH0pXFxuICAgIHNldFJlc3VsdChteUNvbGxlY3Rpb25fZWwpXFxufVxcblwiLFwiZ3JvdXBcIjpcIuKRoOi9u+WQiOmbhlwiLFwidWFcIjpcImF1dG9cIixcInByZVJ1bGVcIjpcInB1dE15VmFyKCdteUNvbGxlY3Rpb24nLCBNWV9SVUxFLnRpdGxlKTtcXG5wdXRNeVZhcigncmVtb3RlVXJsJywgJ2hpa2VyOi8vcGFnZS9kYXRhJyk7XCIsXCJwYWdlc1wiOlwiW3tcXFwiY29sX3R5cGVcXFwiOlxcXCJ0ZXh0XzFcXFwiLFxcXCJuYW1lXFxcIjpcXFwiQ2xhc3NUYWJcXFwiLFxcXCJwYXRoXFxcIjpcXFwiQ2xhc3NUYWJcXFwiLFxcXCJydWxlXFxcIjpcXFwiY29uc3QgQ2xhc3NUYWIgPSBmdW5jdGlvbihjbGFzc0FycmF5LCBwYXJhbXMpIHtcXFxcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIHBhcmFtcylcXFxcbiAgICB0aGlzLmFyciA9IGNsYXNzQXJyYXkubWFwKHYgPT4gdGhpcy5pbml0KHYpKVxcXFxuICAgIHRoaXMuc2lnbiA9ICckJyArIFFJTkdfVElUTEUgKyAnXycgKyAodGhpcy5uYW1lIHx8ICcnKSArICdfJ1xcXFxuICAgIHRoaXMuY29sb3IgPSB0aGlzLmNvbG9yIHx8ICcjMTJiNjY4J1xcXFxuICAgIHRoaXMuYm91bmRhcnkgPSB0aGlzLmJvdW5kYXJ5IHx8ICdibGFua19ibG9jaydcXFxcbn1cXFxcbkNsYXNzVGFiLnByb3RvdHlwZSA9IHtcXFxcbiAgICBjb25zdHJ1Y3RvcjogQ2xhc3NUYWIsXFxcXG4gICAgbG9hZChlbCkge1xcXFxuICAgICAgICBsZXQgZm9sZGVkID0gdGhpcy5mb2xkICYmIGdldFZhcignZm9sZF8nICsgdGhpcy5zaWduLCAnJylcXFxcbiAgICAgICAgaWYgKHRoaXMuYXJyLmxlbmd0aCA+IDEgJiYgdGhpcy5mb2xkKSBlbC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdJyArIChmb2xkZWQgPyAn4pa2JyA6ICfilrwnKS5mb250Y29sb3IoJyMwNDllZmYnKSxcXFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc2lnbiwgZm9sZGVkKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgcHV0VmFyKCdmb2xkXycgKyBzaWduLCB7ICcnOiAnVCcsICdUJzogJycgfSBbZm9sZGVkXSlcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgICAgICB9LCB0aGlzLnNpZ24sIGZvbGRlZCksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIGxldCBhcnIgPSBmb2xkZWQgPyBbdGhpcy5hcnJbMF1dIDogdGhpcy5hcnJcXFxcbiAgICAgICAgYXJyLmZvckVhY2goKHYpID0+IHtcXFxcbiAgICAgICAgICAgIGxldCB7IGlkLCBjbGFzc19uYW1lLCBjbGFzc191cmwgfSA9IHYsXFxcXG4gICAgICAgICAgICBzZWxlY3RlZCA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0Q2xhc3MoaWQpKVxcXFxuICAgICAgICAgICAgY2xhc3NfbmFtZS5mb3JFYWNoKChuYW1lLCBpKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHVybCA9IGNsYXNzX3VybFtpXSxcXFxcbiAgICAgICAgICAgICAgICAgICAgbm93ID0gSlNPTi5zdHJpbmdpZnkoeyBuYW1lOiBuYW1lLCB1cmw6IHVybCB9KVxcXFxuICAgICAgICAgICAgICAgIGVsLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogc2VsZWN0ZWQgPT0gbm93ID8gJ+KAnOKAnOKAneKAnScgKyBuYW1lLmZvbnRjb2xvcih0aGlzLmNvbG9yKS5ib2xkKCkgOiBuYW1lLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHNlbGVjdGVkID09IG5vdyA/ICdoaWtlcjovL2VtcHR5JyA6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHNpZ24sIGlkLCBub3cpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcihzaWduICsgaWQsIG5vdylcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgICAgICAgICAgICAgICAgICB9LCB0aGlzLnNpZ24sIGlkLCBub3cpLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG4gICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICBlbC5wdXNoKHsgY29sX3R5cGU6IHRoaXMuYm91bmRhcnkgfSlcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9LFxcXFxuICAgIGluaXQoY2xhc3NPYmplY3QpIHtcXFxcbiAgICAgICAgaWYgKHR5cGVvZiBjbGFzc09iamVjdC5jbGFzc19uYW1lID09ICdzdHJpbmcnKVxcXFxuICAgICAgICAgICAgY2xhc3NPYmplY3QuY2xhc3NfbmFtZSA9IGNsYXNzT2JqZWN0LmNsYXNzX25hbWUuc3BsaXQoJyYnKVxcXFxuICAgICAgICBpZiAodHlwZW9mIGNsYXNzT2JqZWN0LmNsYXNzX3VybCA9PSAnc3RyaW5nJylcXFxcbiAgICAgICAgICAgIGNsYXNzT2JqZWN0LmNsYXNzX3VybCA9IGNsYXNzT2JqZWN0LmNsYXNzX3VybC5zcGxpdCgnJicpLm1hcCgodikgPT4gdi50cmltKCkpXFxcXG4gICAgICAgIHJldHVybiBjbGFzc09iamVjdFxcXFxuICAgIH0sXFxcXG4gICAgcHVzaChjbGFzc09iamVjdCkge1xcXFxuICAgICAgICB0aGlzLmFyci5wdXNoKHRoaXMuaW5pdChjbGFzc09iamVjdCkpXFxcXG4gICAgfSxcXFxcbiAgICBnZXRDbGFzcyhpZCkge1xcXFxuICAgICAgICBsZXQgZGVmYXVsdENsYXNzID0gdGhpcy5hcnIuZmluZChpdGVtID0+IGl0ZW0uaWQgPT0gaWQpXFxcXG4gICAgICAgIGRlZmF1bHRDbGFzcyA9IEpTT04uc3RyaW5naWZ5KGRlZmF1bHRDbGFzcyA/IHtcXFxcbiAgICAgICAgICAgIG5hbWU6IGRlZmF1bHRDbGFzcy5jbGFzc19uYW1lWzBdLFxcXFxuICAgICAgICAgICAgdXJsOiBkZWZhdWx0Q2xhc3MuY2xhc3NfdXJsWzBdXFxcXG4gICAgICAgIH0gOiB7IG5hbWU6ICAnY2Fubm90IGZpbmQgaWQ6ICcgKyBpZCArICcgaW4gY2xhc3NUYWI6ICcgKyB0aGlzLnNpZ24sIHVybDogJyd9KVxcXFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShnZXRWYXIodGhpcy5zaWduICsgaWQsIGRlZmF1bHRDbGFzcykpXFxcXG4gICAgfSxcXFxcbiAgICBzZXRVcmwodXJsKSB7XFxcXG4gICAgICAgIHJldHVybiB1cmwucmVwbGFjZSgvXFxcXFxcXFwkXFxcXFxcXFx7KFtefV0qKVxcXFxcXFxcfS9nLCAoXywgaWQpID0+IHRoaXMuZ2V0Q2xhc3MoaWQpLnVybClcXFxcbiAgICB9XFxcXG59XFxcXG4vLyDnlJ/miJDlpLTpg6jliIbnsbtcXFxcbmNvbnN0IGZ5QWxsID0gUlVMRS51cmwuaW5jbHVkZXMoJ2Z5QWxsJylcXFxcbmxldCB0YWJIZWFkZXIgPSBbXVxcXFxuaWYgKFJVTEUuY2xhc3NfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcXFxuICAgIGlkOiBmeUFsbCA/ICdmeUFsbCcgOiAnZnljbGFzcycsXFxcXG4gICAgY2xhc3NfbmFtZTogUlVMRS5jbGFzc19uYW1lLFxcXFxuICAgIGNsYXNzX3VybDogUlVMRS5jbGFzc191cmxcXFxcbn0pXFxcXG5pZiAoUlVMRS5hcmVhX25hbWUpIHRhYkhlYWRlci5wdXNoKHtcXFxcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5YXJlYScsXFxcXG4gICAgY2xhc3NfbmFtZTogUlVMRS5hcmVhX25hbWUsXFxcXG4gICAgY2xhc3NfdXJsOiBSVUxFLmFyZWFfdXJsXFxcXG59KVxcXFxuaWYgKFJVTEUueWVhcl9uYW1lKSB0YWJIZWFkZXIucHVzaCh7XFxcXG4gICAgaWQ6IGZ5QWxsID8gJ2Z5QWxsJyA6ICdmeXllYXInLFxcXFxuICAgIGNsYXNzX25hbWU6IFJVTEUueWVhcl9uYW1lLFxcXFxuICAgIGNsYXNzX3VybDogUlVMRS55ZWFyX3VybFxcXFxufSlcXFxcbmlmIChSVUxFLnNvcnRfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcXFxuICAgIGlkOiBmeUFsbCA/ICdmeUFsbCcgOiAnZnlzb3J0JyxcXFxcbiAgICBjbGFzc19uYW1lOiBSVUxFLnNvcnRfbmFtZSxcXFxcbiAgICBjbGFzc191cmw6IFJVTEUuc29ydF91cmxcXFxcbn0pXFxcXG50YWJIZWFkZXIgPSBuZXcgQ2xhc3NUYWIodGFiSGVhZGVyLCB7IG5hbWU6IFJVTEUudGl0bGUsIGZvbGQ6IHJlYWRGaWxlKCd0YWJGb2xkJyksIH0pXFxcXG5cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwiaWNvbl8yX3JvdW5kXFxcIixcXFwibmFtZVxcXCI6XFxcIuiuvue9rlxcXCIsXFxcInBhdGhcXFwiOlxcXCJDb25maWdcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG5hZGRMaXN0ZW5lcignb25DbG9zZScsICdjbGVhck15VmFyKFxcXFxcXFwic29ydEZsYWdcXFxcXFxcIik7cmVmcmVzaFBhZ2UoKScpO1xcXFxuc2V0UGFnZVRpdGxlKCfimpkg6L275ZCI6ZuG6K6+572uIOKamScpO1xcXFxuY29uc3QgZGVmYXVsdERpc1RhYk1vZGlmeSA9IGZhbHNlOyAvL+m7mOiupOemgeeUqOiHquWumuS5ieWIhuexu+WFs+mXrS7lsLHmmK/lvIDlkK/oh6rlrprkuYlcXFxcbmNvbnN0IFFJTkdfVElUTEUgPSBnZXRNeVZhcignbXlDb2xsZWN0aW9uJyksXFxcXG4gICAgdXJsID0gZ2V0TXlWYXIoJ3JlbW90ZVVybCcpXFxcXG5sZXQgZGF0YSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2RhdGFMb2FkP3J1bGU9JyArIFFJTkdfVElUTEUpKHRydWUpLFxcXFxuICAgIGVsID0gW3tcXFxcbiAgICAgICAgdGl0bGU6ICc8Yj4g5riF6Zmk57yT5a2Y77yM56uL5Y2z5pu05pawIDxzbWFsbD4g77yI5Z+65LqO6L+c56iL5LuT5bqT77yM5LiN6KaB6aKR57mB54K55Ye777yJJyxcXFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh1cmwpID0+IHtcXFxcbiAgICAgICAgICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly8nKSB8fCB1cmwuc3RhcnRzV2l0aCgnZmlsZTovLycpKXtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5LuT5bqT5Li65pys5Zyw5paH5Lu277yM5LiN5Lya6L+b6KGM57yT5a2Y77yM5pys5Yqf6IO95Lmf5peg5pWIJ1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgZGVsZXRlQ2FjaGUodXJsKTtcXFxcbiAgICAgICAgICAgIGJhY2soZmFsc2UpO1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suabtOaWsCdcXFxcbiAgICAgICAgfSwgdXJsKSxcXFxcbiAgICAgICAgaW1nOiAnaGlrZXI6Ly9pbWFnZXMvaWNvbjQnLFxcXFxuICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcidcXFxcbiAgICB9XSxcXFxcbiAgICB1cGRhdGVJbnRlcnZhbCA9IHJlYWRGaWxlKCd1cGRhdGVJbnRlcnZhbCcpIHx8ICcxJyxcXFxcbiAgICBuZXdXaW5kb3cgPSByZWFkRmlsZSgnbmV3V2luZG93JyksXFxcXG4gICAgdGFiRm9sZCA9IHJlYWRGaWxlKCd0YWJGb2xkJyksXFxcXG4gICAgZGlzVGFiTW9kaWZ5ID0gcmVhZEZpbGUoJ2Rpc1RhYk1vZGlmeScpLFxcXFxuICAgIGRpc2FibGVDdXN0b20gPSByZWFkRmlsZSgnZGlzYWJsZUN1c3RvbScpLFxcXFxuICAgIGVkaXRNb2RlID0gZGlzYWJsZUN1c3RvbSA/ICflr7zlhaXmtbfpmJQnIDogZ2V0TXlWYXIoJ2VkaXRNb2RlJywgJ+WQr+eUqC/npoHnlKgnKTtcXFxcbmlmKGRpc1RhYk1vZGlmeT09PScnKXtcXFxcbiAgICBzYXZlRmlsZSgnZGlzVGFiTW9kaWZ5JywgZGVmYXVsdERpc1RhYk1vZGlmeSsnJyk7XFxcXG4gICAgZGlzVGFiTW9kaWZ5ID0gZGVmYXVsdERpc1RhYk1vZGlmeTtcXFxcbn1lbHNlIGlmKC90cnVlfGZhbHNlLy50ZXN0KGRpc1RhYk1vZGlmeSkpe1xcXFxuICAgIGRpc1RhYk1vZGlmeSA9IEpTT04ucGFyc2UoZGlzVGFiTW9kaWZ5KTtcXFxcbn1cXFxcblxcXFxuZWwucHVzaCh7XFxcXG4gICAgdGl0bGU6ICcgIPCfkqEg5pu05paw6aKR546HOiAnICsgKHVwZGF0ZUludGVydmFsID09IDAgPyAn5omL5YqoJyA6IHVwZGF0ZUludGVydmFsICsgJ+WkqScpICsgJyAgJyxcXFxcbiAgICB1cmw6ICQodXBkYXRlSW50ZXJ2YWwsICfovpPlhaXmm7TmlrDpl7TpmpTvvIjlpKnvvInvvIzkuLow5YiZ5omL5Yqo5pu05pawXFxcXFxcXFxu5pys5Zyw5paH5Lu26ZO+5o6l5peg5pWIJykuaW5wdXQoKCkgPT4ge1xcXFxuICAgICAgICBpbnB1dCA9IHBhcnNlSW50KGlucHV0KVxcXFxuICAgICAgICBpZihOdW1iZXIuaXNOYU4oaW5wdXQpKSBpbnB1dCA9IDFcXFxcbiAgICAgICAgZWxzZSBpZihpbnB1dCA8IDEpIGlucHV0ID0gMFxcXFxuICAgICAgICBzYXZlRmlsZSgndXBkYXRlSW50ZXJ2YWwnLCBpbnB1dC50b1N0cmluZygpKVxcXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXFxcbiAgICB9KSxcXFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG59LCB7XFxcXG4gICAgdGl0bGU6ICcgIPCflqUg54us56uL6aaW6aG1OiAnICsgKG5ld1dpbmRvdyA/ICfmmK8nIDogJ+WQpicpICsgJyAgJyxcXFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKG5ld1dpbmRvdykgPT4ge1xcXFxuICAgICAgICBzYXZlRmlsZSgnbmV3V2luZG93JywgbmV3V2luZG93ID8gJycgOiAnMScpXFxcXG4gICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgIH0sIG5ld1dpbmRvdyksXFxcXG4gICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcXFxufSwge1xcXFxuICAgIHRpdGxlOiAnICDwn5KgIOWIhuexu+aKmOWPoDogJyArICh0YWJGb2xkID8gJ+aYrycgOiAn5ZCmJykgKyAnICAnLFxcXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodGFiRm9sZCkgPT4ge1xcXFxuICAgICAgICBzYXZlRmlsZSgndGFiRm9sZCcsIHRhYkZvbGQgPyAnJyA6ICcxJylcXFxcbiAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgfSwgdGFiRm9sZCksXFxcXG4gICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcXFxufSwgIHtcXFxcbiAgICB0aXRsZTogJyAg8J+SoCDliIbnsbvoh6rlrprkuYk6ICcgKyAoZGlzVGFiTW9kaWZ5ID8gJ+WQpicgOiAn5pivJykgKyAnICAnLFxcXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoZGlzVGFiTW9kaWZ5KSA9PiB7XFxcXG4gICAgICAgIHNhdmVGaWxlKCdkaXNUYWJNb2RpZnknLCBkaXNUYWJNb2RpZnkgPyAnZmFsc2UnIDogJ3RydWUnKTtcXFxcbiAgICAgICAgcHV0TXlWYXIoJ3R5cGVTaG93JywgJycpO1xcXFxuICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgfSwgZGlzVGFiTW9kaWZ5KSxcXFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG59LCB7XFxcXG4gICAgdGl0bGU6ICcgIPCfkrwg5aSH5Lu95oGi5aSNICAnLFxcXFxuICAgIHVybDogJChbJ+Wkh+S7vScsICfmgaLlpI0nXSwgMSkuc2VsZWN0KChRSU5HX1RJVExFLCB1cGRhdGVJbnRlcnZhbCwgbmV3V2luZG93LCB0YWJGb2xkLCBkaXNhYmxlQ3VzdG9tKSA9PiB7XFxcXG4gICAgICAgIGxldCB1cmwgPSBnZXRNeVZhcigncmVtb3RlVXJsJylcXFxcbiAgICAgICAgaWYgKCF1cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly8nKSAmJiAhdXJsLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSlcXFxcbiAgICAgICAgICAgIHVybCA9ICdoaWtlcjovL2ZpbGVzL2xpYnMvJyArIG1kNSh1cmwpICsgJy5qcydcXFxcbiAgICAgICAgZWxzZSBpZih1cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly9wYWdlLycpKSB1cmwgPSAnaGlrZXI6Ly9lbXB0eSdcXFxcbiAgICAgICAgaWYgKGlucHV0ID09ICflpIfku70nKSByZXR1cm4gJCgnaGlrZXI6Ly9maWxlcy90bXAvJyArIFFJTkdfVElUTEUgKyAnX2JhY2t1cC5qc29uJywgJ+i+k+WFpeWkh+S7vei3r+W+hCcpXFxcXG4gICAgICAgICAgICAuaW5wdXQoKHVybCwgdXBkYXRlSW50ZXJ2YWwsIG5ld1dpbmRvdywgdGFiRm9sZCwgZGlzYWJsZUN1c3RvbSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGxldCBydWxlcyA9IHJlcXVlc3QodXJsKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRGF0YSA9IHJlYWRGaWxlKCdjdXN0b21EYXRhJylcXFxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoaW5wdXQsIEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlSW50ZXJ2YWw6IHVwZGF0ZUludGVydmFsLFxcXFxuICAgICAgICAgICAgICAgICAgICBuZXdXaW5kb3c6IG5ld1dpbmRvdyxcXFxcbiAgICAgICAgICAgICAgICAgICAgdGFiRm9sZDogdGFiRm9sZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUN1c3RvbTogZGlzYWJsZUN1c3RvbSxcXFxcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRGF0YTogY3VzdG9tRGF0YSxcXFxcbiAgICAgICAgICAgICAgICAgICAgcnVsZXM6IHJ1bGVzXFxcXG4gICAgICAgICAgICAgICAgfSkpXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWkh+S7ve+8jOazqOaEj+iLpeS7k+W6k+S4uuWtkOmhtemdouWImeS4jeWkh+S7vSdcXFxcbiAgICAgICAgICAgIH0sIHVybCwgdXBkYXRlSW50ZXJ2YWwsIG5ld1dpbmRvdywgdGFiRm9sZCwgZGlzYWJsZUN1c3RvbSlcXFxcbiAgICAgICAgZWxzZSByZXR1cm4gJCgnaGlrZXI6Ly9maWxlcy90bXAvJyArIFFJTkdfVElUTEUgKyAnX2JhY2t1cC5qc29uJywgJ+i+k+WFpeWkh+S7vei3r+W+hCcpLmlucHV0KCh1cmwpID0+IHtcXFxcbiAgICAgICAgICAgIGxldCB7IHVwZGF0ZUludGVydmFsLCBuZXdXaW5kb3csIHRhYkZvbGQsIGRpc2FibGVDdXN0b20sIGN1c3RvbURhdGEsIHJ1bGVzIH0gPSBKU09OLnBhcnNlKHJlcXVlc3QoaW5wdXQpKVxcXFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ3VwZGF0ZUludGVydmFsJywgdXBkYXRlSW50ZXJ2YWwpXFxcXG4gICAgICAgICAgICBzYXZlRmlsZSgnbmV3V2luZG93JywgbmV3V2luZG93KVxcXFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ3RhYkZvbGQnLCB0YWJGb2xkKVxcXFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ2Rpc2FibGVDdXN0b20nLCBkaXNhYmxlQ3VzdG9tKVxcXFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBjdXN0b21EYXRhKVxcXFxuICAgICAgICAgICAgaWYocnVsZXMpIHdyaXRlRmlsZSh1cmwsIHJ1bGVzKVxcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suaBouWkje+8jOWmguaenOS4jeaDs+WQjOatpei/nOeoi+S7k+W6k++8jOWPr+S7peiuvue9ruabtOaWsOmikeeOh+S4uuaJi+WKqCdcXFxcbiAgICAgICAgfSwgdXJsKVxcXFxuICAgIH0sIFFJTkdfVElUTEUsIHVwZGF0ZUludGVydmFsLCBuZXdXaW5kb3csIHRhYkZvbGQsIGRpc2FibGVDdXN0b20pLFxcXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcbn0sIHtcXFxcbiAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxmb250IGNvbG9yPVxcXFxcXFwiIzY2NjY2NlxcXFxcXFwiPjxzbWFsbD7nibnliKvpuKPosKLvvIzlsI/nqIvluo/mj5DkvpvogIXvvJpcXFxcXFxcXG4nICtcXFxcbiAgICAgICAgZGF0YS5yZWR1Y2UoKHNlbGYsIHYpID0+IHYuYXV0aG9yID8gc2VsZi5jb25jYXQodi5hdXRob3Iuc3BsaXQoJyYnKSkgOiBzZWxmLCBbXSlcXFxcbiAgICAgICAgICAgIC5maWx0ZXIoKHYsIGksIGFycikgPT4gdiAmJiBhcnIuaW5kZXhPZih2KSA9PSBpKS5qb2luKCfjgIEnKSxcXFxcbiAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXFxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXG59KVxcXFxuXFxcXG5lbC5wdXNoKHsgY29sX3R5cGU6ICdsaW5lJyB9LCB7XFxcXG4gICAgdGl0bGU6ICfigJzigJzigJ3igJ0nICsgJ/Cfk50nLnNtYWxsKCkgKyAnJm5ic3Ag6L275ZCI6ZuG6Ieq5a6a5LmJICZuYnNwJy5ib2xkKCkuZm9udGNvbG9yKCcjNzU3NTc1JykgKyAoZGlzYWJsZUN1c3RvbSA/ICfinYwnIDogJ+KtlScpLnNtYWxsKCksXFxcXG4gICAgdXJsOiAkKFsoZGlzYWJsZUN1c3RvbSA/ICflkK/nlKgnIDogJ+emgeeUqCcpICsgJ+WQiOmbhuiHquWumuS5iScsICfmuIXpmaToh6rlrprkuYnmlbDmja4nXSwgMSkuc2VsZWN0KCgpID0+IHtcXFxcbiAgICAgICAgaWYgKGlucHV0ID09ICfmuIXpmaToh6rlrprkuYnmlbDmja4nKSB7XFxcXG4gICAgICAgICAgICBkZWxldGVGaWxlKCdjdXN0b21EYXRhJylcXFxcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PSAn5ZCv55So5ZCI6ZuG6Ieq5a6a5LmJJykge1xcXFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ2Rpc2FibGVDdXN0b20nLCAnJylcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHNhdmVGaWxlKCdkaXNhYmxlQ3VzdG9tJywgJzEnKVxcXFxuICAgICAgICAgICAgaW5wdXQgKz0gJ1xcXFxcXFxcbuWwj+eoi+W6j+WQr+eUqC/npoHnlKjjgIHph43mlrDmjpLluo/nrYnmk43kvZzlnYfkuI3kvJrkvZPnjrDlnKjpppbpobXlsI/nqIvluo/liJfooajkuK0nXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7InICsgaW5wdXRcXFxcbiAgICB9KSxcXFxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcXFxuICAgIGV4dHJhOiB7IGxpbmVWaXNpYmxlOiBmYWxzZSB9XFxcXG59KTtcXFxcbihkaXNhYmxlQ3VzdG9tID8gWyflr7zlhaXmtbfpmJQnXSA6IFsn5ZCv55SoL+emgeeUqCcsICfph43mlrDmjpLluo8nLCAn5pu05pS55Zu+5qCHJywgJ+WvvOWFpea1t+mYlCddKS5mb3JFYWNoKCh2KSA9PiB7XFxcXG4gICAgZWwucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiB2ID09IGVkaXRNb2RlID8gJ+KAnOKAnOKAneKAnScgKyB2LmJvbGQoKS5mb250Y29sb3IoJyMxMmI2NjgnKSA6IHYsXFxcXG4gICAgICAgIHVybDogdiA9PSBlZGl0TW9kZSA/ICdoaWtlcjovL2VtcHR5JyA6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHYpID0+IHtcXFxcbiAgICAgICAgICAgIHB1dE15VmFyKCdlZGl0TW9kZScsIHYpXFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXFxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXFxcbiAgICAgICAgfSwgdiksXFxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcbiAgICB9KVxcXFxufSk7XFxcXG5pZihlZGl0TW9kZSA9PSAn5a+85YWl5rW36ZiUJykgZWwucHVzaCh7XFxcXG4gICAgdGl0bGU6ICflhajpg6jlr7zlhaUnLFxcXFxuICAgIHVybDogJ+a1t+mYlOinhueVjO+/pWhvbWVfcnVsZV91cmzvv6UnICsgKHVybC5zdGFydHNXaXRoKCdoaWtlcjovLycpIHx8IHVybC5zdGFydHNXaXRoKCdmaWxlOi8vJykgPyB1cmwgOiAnaGlrZXI6Ly9maWxlcy9saWJzLycgKyBtZDUodXJsKSArICcuanMnKSxcXFxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcXFxuICAgIGV4dHJhOiB7IGxpbmVWaXNpYmxlOiBmYWxzZSB9XFxcXG59KTtcXFxcbihkaXNhYmxlQ3VzdG9tID8gZGF0YSA6IEpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKSkuZm9yRWFjaCgodiwgaSkgPT4ge1xcXFxuICAgIGxldCBkID0geyB0aXRsZTogdi50aXRsZSwgaW1nOiBkYXRhW2ldLmljb24gfVxcXFxuICAgIHN3aXRjaCAoZWRpdE1vZGUpIHtcXFxcbiAgICAgICAgY2FzZSAn5ZCv55SoL+emgeeUqCc6XFxcXG4gICAgICAgICAgICBkLnRpdGxlID0gKHYudmlzaWJsZSA/ICfwn5+iICAnIDogJ/CflLQgICcpICsgZC50aXRsZVxcXFxuICAgICAgICAgICAgZC51cmwgPSAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHJ1bGVzID0gSlNPTi5wYXJzZShyZWFkRmlsZSgnY3VzdG9tRGF0YScpIHx8ICdbXScpXFxcXG4gICAgICAgICAgICAgICAgcnVsZXNbaV0udmlzaWJsZSA9ICFydWxlc1tpXS52aXNpYmxlXFxcXG4gICAgICAgICAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBKU09OLnN0cmluZ2lmeShydWxlcykpXFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgICAgICAgICAgfSwgaSlcXFxcbiAgICAgICAgICAgIGJyZWFrXFxcXG4gICAgICAgIGNhc2UgJ+mHjeaWsOaOkuW6jyc6XFxcXG4gICAgICAgICAgICBsZXQgc29ydEZsYWcgPSBwYXJzZUludChnZXRNeVZhcignc29ydEZsYWcnLCAnLTEnKSlcXFxcbiAgICAgICAgICAgIGQudGl0bGUgPSAoc29ydEZsYWcgPT0gaSA/ICfwn5SDICAnIDogJycpICsgZC50aXRsZVxcXFxuICAgICAgICAgICAgaWYgKHNvcnRGbGFnID09IC0xKVxcXFxuICAgICAgICAgICAgICAgIGQudXJsID0gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignc29ydEZsYWcnLCBpLnRvU3RyaW5nKCkpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6YCJ5oup6KaB56e75Yqo5Yiw55qE5L2N572uJ1xcXFxuICAgICAgICAgICAgICAgIH0sIGkpXFxcXG4gICAgICAgICAgICBlbHNlXFxcXG4gICAgICAgICAgICAgICAgZC51cmwgPSAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChvbGRJbmRleCwgbmV3SW5kZXgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJ1bGVzID0gSlNPTi5wYXJzZShyZWFkRmlsZSgnY3VzdG9tRGF0YScpIHx8ICdbXScpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzLnNwbGljZShuZXdJbmRleCwgMCwgcnVsZXMuc3BsaWNlKG9sZEluZGV4LCAxKVswXSlcXFxcbiAgICAgICAgICAgICAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBKU09OLnN0cmluZ2lmeShydWxlcykpXFxcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdzb3J0RmxhZycsICctMScpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgICAgICAgICAgfSwgc29ydEZsYWcsIGkpXFxcXG4gICAgICAgICAgICBicmVha1xcXFxuICAgICAgICBjYXNlICfmm7TmlLnlm77moIcnOlxcXFxuICAgICAgICAgICAgZC51cmwgPSAkKHYuaWNvbiB8fCAnJywgJ+i+k+WFpeaWsOWbvuagh+WcsOWdgOaIluminOiJsuS7o+egge+8micpLmlucHV0KChpKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHJ1bGVzID0gSlNPTi5wYXJzZShyZWFkRmlsZSgnY3VzdG9tRGF0YScpIHx8ICdbXScpXFxcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0KVxcXFxuICAgICAgICAgICAgICAgICAgICBydWxlc1tpXS5pY29uID0gaW5wdXRcXFxcbiAgICAgICAgICAgICAgICBlbHNlXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBydWxlc1tpXS5pY29uXFxcXG4gICAgICAgICAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBKU09OLnN0cmluZ2lmeShydWxlcykpXFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgICAgICAgICAgfSwgaSlcXFxcbiAgICAgICAgICAgIGJyZWFrXFxcXG4gICAgICAgIGNhc2UgJ+WvvOWFpea1t+mYlCc6XFxcXG4gICAgICAgICAgICBkLnVybCA9ICdydWxlOi8vJyArIGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeShkYXRhW2ldKSlcXFxcbiAgICAgICAgICAgIGJyZWFrXFxcXG4gICAgfVxcXFxuICAgIGVsLnB1c2goZClcXFxcbn0pXFxcXG5zZXRSZXN1bHQoZWwpXFxcXG5cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLpobXpnaLovb3lhaVcXFwiLFxcXCJwYXRoXFxcIjpcXFwiZnJhbWVMb2FkXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuY29uc3QgUUlOR19USVRMRSA9IGdldE15VmFyKCdteUNvbGxlY3Rpb24nKVxcXFxubGV0IG15Q29sbGVjdGlvbl9lbCA9IFtdLFxcXFxuICAgIHsgUlVMRSwgaXNJbmRleCwgcGFnZVRpdGxlIH0gPSBNWV9QQVJBTVMsXFxcXG4gICAgdGhpc1JVTEUgPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9kYXRhTG9hZD9ydWxlPScgKyBRSU5HX1RJVExFKSgpLmZpbmQoKHYpID0+IHYudGl0bGUgPT0gUlVMRS50aXRsZSlcXFxcbmlmIChpc0luZGV4KSB7XFxcXG4gICAgUlVMRSA9IHRoaXNSVUxFXFxcXG59IGVsc2Uge1xcXFxuICAgIFJVTEUucGFnZXMgPSB0aGlzUlVMRS5wYWdlc1xcXFxufVxcXFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvcHJlRnVuYz9ydWxlPScgKyBRSU5HX1RJVExFKSkucnVsZSlcXFxcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3VybFBhcnNlP3J1bGU9JyArIFFJTkdfVElUTEUpKS5ydWxlKVxcXFxuXFxcXG5pZiAoaXNJbmRleCkge1xcXFxuICAgIGlmIChNWV9QQUdFID09IDEpIHtcXFxcbiAgICAgICAgLy8g5Yqg6L29Q2xhc3NUYWLnu4Tku7ZcXFxcbiAgICAgICAgZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvQ2xhc3NUYWI/cnVsZT0nICsgUUlOR19USVRMRSkpLnJ1bGUpXFxcXG4gICAgICAgIHRhYkhlYWRlci5sb2FkKG15Q29sbGVjdGlvbl9lbClcXFxcbiAgICAgICAgaWYgKFJVTEUuc2VhcmNoX3VybCkgbXlDb2xsZWN0aW9uX2VsLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5pCc57SiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBkZXNjOiBcXFxcXFxcIuaQnOS9oOaDs+imgeeahC4uLlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdXJsOiAnXFxcXFxcXCJoaWtlcjovL3NlYXJjaD9zPVxcXFxcXFwiK2lucHV0JyxcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgcnVsZXM6ICQudG9TdHJpbmcoKFFJTkdfVElUTEUsIHRpdGxlKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBydWxlcyA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2RhdGFMb2FkP3J1bGU9JyArIFFJTkdfVElUTEUpKClcXFxcbiAgICAgICAgICAgICAgICAgICAgcnVsZXMgPSBbcnVsZXMuZmluZCgodikgPT4gdi50aXRsZSA9PSB0aXRsZSldXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShydWxlcylcXFxcbiAgICAgICAgICAgICAgICB9LCBRSU5HX1RJVExFLCBSVUxFLnRpdGxlKSxcXFxcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKCdzZWFyY2hLZXknLCAnJyksXFxcXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U6IFxcXFxcXFwicHV0TXlWYXIoJ3NlYXJjaEtleScsaW5wdXQpXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJpbnB1dFxcXFxcXFwiLFxcXFxuICAgICAgICB9KVxcXFxuICAgIH1cXFxcbiAgICAvLyDlpITnkIZNWV9SVUxFXFxcXG4gICAgTVlfUlVMRS51cmwgPSBSVUxFLnVybFxcXFxuICAgIE1ZX1JVTEUuY29sX3R5cGUgPSBSVUxFLmNvbF90eXBlXFxcXG4gICAgTVlfUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBSVUxFLmRldGFpbF9jb2xfdHlwZVxcXFxuICAgIE1ZX1JVTEUuZmluZF9ydWxlID0gUlVMRS5maW5kX3J1bGVcXFxcbiAgICBNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBSVUxFLmRldGFpbF9maW5kX3J1bGVcXFxcbiAgICBNWV9SVUxFLnBhcmFtcyA9IHt9XFxcXG59IGVsc2Uge1xcXFxuICAgIE1ZX1JVTEUudXJsID0gTVlfUEFSQU1TLnVybFxcXFxuICAgIE1ZX1JVTEUuY29sX3R5cGUgPSBSVUxFLmRldGFpbF9jb2xfdHlwZVxcXFxuICAgIE1ZX1JVTEUuZmluZF9ydWxlID0gUlVMRS5kZXRhaWxfZmluZF9ydWxlXFxcXG4gICAgTVlfUlVMRS5wYXJhbXMgPSBSVUxFLnBhcmFtc1xcXFxufVxcXFxuTVlfUlVMRS5wYWdlcyA9IFJVTEUucGFnZXNcXFxcbk1ZX1JVTEUucGFnZUxpc3QgPSBKU09OLnBhcnNlKE1ZX1JVTEUucGFnZXMgfHwgJ1tdJylcXFxcbk1ZX1JVTEUudGl0bGUgPSBSVUxFLnRpdGxlXFxcXG5cXFxcbmlmICghaXNJbmRleCkge1xcXFxuICAgIGlmIChwYWdlVGl0bGUpIHNldFBhZ2VUaXRsZShwYWdlVGl0bGUpXFxcXG4gICAgc2V0TGFzdENoYXB0ZXJSdWxlKHRoaXNSVUxFLmxhc3RfY2hhcHRlcl9ydWxlKVxcXFxuICAgIE1ZX1BBUkFNUyA9IE1ZX1JVTEUucGFyYW1zXFxcXG59XFxcXG4vLyDpooTlpITnkIblubbliJ3lp4vljJZjb25maWdcXFxcbmlmIChpc0luZGV4ICYmIE1ZX1BBR0UgPT0gMSkgZXZhbCh0aGlzUlVMRS5wcmVSdWxlKVxcXFxubGV0IF9jZmcgPSBnZXRNeVZhcignaW5pdENvbmZpZycsICd7fScpXFxcXG5pZiAoX2NmZyAmJiBfY2ZnLmxlbmd0aCA+IDApIHtcXFxcbiAgICBjb25maWcgPSBKU09OLnBhcnNlKF9jZmcpXFxcXG59XFxcXG5cXFxcbi8vIOato+aWh+ino+aekOmAmueUqOWPmOmHj1xcXFxubGV0IGFzc2lnbkxhenlSdWxlID0gJC50b1N0cmluZygoUUlOR19USVRMRSwgdGl0bGUpID0+IHtcXFxcbiAgICBsZXQgUlVMRSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9kYXRhTG9hZD9ydWxlPVxcXFxcXFwiICsgUUlOR19USVRMRSkoKS5maW5kKCh2KSA9PiB2LnRpdGxlID09IHRpdGxlKVxcXFxuICAgIHJldHVybiB7IHBhZ2VzOiBSVUxFLnBhZ2VzLCBwYWdlTGlzdDogSlNPTi5wYXJzZShSVUxFLnBhZ2VzIHx8ICdbXScpIH1cXFxcbn0sIFFJTkdfVElUTEUsIFJVTEUudGl0bGUpXFxcXG5mdW5jdGlvbiBnZW5NeVJ1bGUoKSB7XFxcXG4gICAgbGV0IHJ1bGUgPSBPYmplY3QuYXNzaWduKHt9LCBNWV9SVUxFKVxcXFxuICAgIGRlbGV0ZSBydWxlLmxhc3RfY2hhcHRlcl9ydWxlXFxcXG4gICAgZGVsZXRlIHJ1bGUucHJlUnVsZVxcXFxuICAgIGRlbGV0ZSBydWxlLnBhZ2VMaXN0XFxcXG4gICAgZGVsZXRlIHJ1bGUucGFnZXNcXFxcbiAgICByZXR1cm4gcnVsZVxcXFxufVxcXFxuZnVuY3Rpb24gcnVuQ29kZShydWxlKSB7XFxcXG4gICAgdHJ5IHtcXFxcbiAgICAgICAgbGV0IFtpbnB1dCwgY29kZV0gPSBydWxlLnNwbGl0KCcuanM6JylcXFxcbiAgICAgICAgcmV0dXJuIGNvZGUgPyBldmFsKGNvZGUpIDogcnVsZVxcXFxuICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuIHJ1bGUgfVxcXFxufVxcXFxuZnVuY3Rpb24gZ2VuRXhVcmwodXJsKSB7XFxcXG4gICAgdXJsID0gdXJsLnNwbGl0KCc7JylcXFxcbiAgICByZXR1cm4gdXJsLnNoaWZ0KCkgKyAnOycgKyBwYXJhbUhhbmRsZSh1cmwsIHRoaXNSVUxFLnVhLCBNWV9SVUxFLnVybClcXFxcbn1cXFxcbi8vIOato+aWh+ino+aekFxcXFxuaWYgKE1ZX1JVTEUuZmluZF9ydWxlLnN0YXJ0c1dpdGgoJ2pzOicpKSB7XFxcXG4gICAgc2V0UmVzdWx0ID0gZnVuY3Rpb24oZWwsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpIHtcXFxcbiAgICAgICAgcGFyYW0xID0gQ0FMTEJBQ0tfS0VZXFxcXG4gICAgICAgIHBhcmFtMiA9IE1ZX1JVTEVcXFxcbiAgICAgICAgcGFyYW0zID0gTVlfVFlQRVxcXFxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbC5kYXRhKSkgZWwgPSBlbC5kYXRhXFxcXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG15Q29sbGVjdGlvbl9lbCwgZWwubWFwKCh2KSA9PiB7XFxcXG4gICAgICAgICAgICBsZXQgTVlfX1JVTEUgPSBPYmplY3QuYXNzaWduKGdlbk15UnVsZSgpLCB7IHBhcmFtczogdi5leHRyYSB8fCB7fSB9KVxcXFxuICAgICAgICAgICAgdi5jb2xfdHlwZSA9IHYuY29sX3R5cGUgfHwgTVlfUlVMRS5jb2xfdHlwZVxcXFxuXFxcXG4gICAgICAgICAgICBpZiAoIXYudXJsIHx8IFsncnVsZScsICdwaWNzJywgJ3RvYXN0JywgJ2lucHV0JywgJ2NvcHknLCAnZWRpdEZpbGUnLCAneDUnLCAneDVXZWJWaWV3JywgJ3g1UGxheScsICd3ZWInLCAnc2VsZWN0JywgJ3g1UnVsZScsICd3ZWJSdWxlJywgJ2Rvd25sb2FkJywgJ3NoYXJlJ10uZmluZCgodnYpID0+IHYudXJsLnN0YXJ0c1dpdGgodnYgKyAnOi8vJykpIHx8IFsneDVfd2Vidmlld19zaW5nbGUnLCAnaW5wdXQnXS5maW5kKCh2dikgPT4gdi5jb2xfdHlwZSA9PSB2dikpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gdlxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5pbmNsdWRlcygnQHJ1bGU9JykpIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgW18sIHVybCwgcnVsZV0gPSB2LnVybC5tYXRjaCgvXihbXFxcXFxcXFxzXFxcXFxcXFxTXSo/KUBydWxlPShbXFxcXFxcXFxzXFxcXFxcXFxTXSopJC8pXFxcXG4gICAgICAgICAgICAgICAgdi51cmwgPSB1cmxcXFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gcnVsZVxcXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9jb2xfdHlwZSA9IE1ZX1JVTEUuY29sX3R5cGVcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly9wYWdlLycpKSB7XFxcXG4gICAgICAgICAgICAgICAgaWYgKHYudXJsLmluY2x1ZGVzKCdydWxlPScpIHx8ICh2LmV4dHJhIHx8IHt9KS5ydWxlKVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlxcXFxuICAgICAgICAgICAgICAgIGxldCBbXywgcGF0aCwgZmxhZywgcGFyYW1zXSA9IHYudXJsLm1hdGNoKC9eaGlrZXI6XFxcXFxcXFwvXFxcXFxcXFwvcGFnZVxcXFxcXFxcLyguKz8pKCMuKj8pPyg/OlxcXFxcXFxcPyguKikpPyQvKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgc3ViUGFnZSA9IE1ZX1JVTEUucGFnZUxpc3QuZmluZCgodikgPT4gdi5wYXRoID09IHBhdGgpLFxcXFxuICAgICAgICAgICAgICAgICAgICBzdWJVcmwgPSAocGFyYW1zIHx8ICcnKS5zcGxpdCgnJicpLmZpbmQoKHYpID0+IHYuc3RhcnRzV2l0aCgndXJsPScpKVxcXFxuICAgICAgICAgICAgICAgIHYudXJsID0gKHN1YlVybCA/IHN1YlVybC5zbGljZSg0KS5yZXBsYWNlKC/vvJ/vvJ8vZywgJz8nKS5yZXBsYWNlKC/vvIbvvIYvZywgJyYnKSA6ICh2LmV4dHJhIHx8IHt9KS51cmwpIHx8ICdoaWtlcjovL2VtcHR5JyArIGZsYWcgKyAnPycgKyAocGFyYW1zIHx8ICcnKVxcXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBzdWJQYWdlLnJ1bGVcXFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBzdWJQYWdlLmNvbF90eXBlXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLmluY2x1ZGVzKCdAbGF6eVJ1bGU9JykpIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgcmVJbmRleCA9IHYudXJsLmluZGV4T2YoJy5qczonKVxcXFxuICAgICAgICAgICAgICAgIGlmIChyZUluZGV4ID49IDApIHYudXJsID0gdi51cmwuc2xpY2UoMCwgcmVJbmRleCkgKyAnLmpzOlxcXFxcXFxcbmlmKE1ZX1JVTEUpT2JqZWN0LmFzc2lnbihNWV9SVUxFLCAnICsgYXNzaWduTGF6eVJ1bGUgKyAnKTsnICsgdi51cmwuc2xpY2UocmVJbmRleCArIDQpXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNJbmRleCkge1xcXFxuICAgICAgICAgICAgICAgIGlmICghTVlfUlVMRS5kZXRhaWxfZmluZF9ydWxlIHx8IC9oaWtlcjpcXFxcXFxcXC9cXFxcXFxcXC8oPyFlbXB0eS4rJCkvLnRlc3Qodi51cmwpKSByZXR1cm4gdlxcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gdlxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgdi5leHRyYSA9IHtcXFxcbiAgICAgICAgICAgICAgICB1cmw6IGdlbkV4VXJsKHYudXJsKSxcXFxcbiAgICAgICAgICAgICAgICBSVUxFOiBNWV9fUlVMRSxcXFxcbiAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IGlzSW5kZXggJiYgdi50aXRsZVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgdi51cmwgPSAnaGlrZXI6Ly9wYWdlL2ZyYW1lTG9hZD9ydWxlPScgKyBRSU5HX1RJVExFXFxcXG4gICAgICAgICAgICByZXR1cm4gdlxcXFxuICAgICAgICB9KSlcXFxcbiAgICAgICAgbWV0aG9kX3NldFJlc3VsdC5pbnZva2UoamF2YUNvbnRleHQsIG15Q29sbGVjdGlvbl9lbCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMylcXFxcbiAgICB9XFxcXG4gICAgc2V0SG9tZVJlc3VsdCA9IHNldFJlc3VsdFxcXFxuICAgIHNldFNlYXJjaFJlc3VsdCA9IHNldFJlc3VsdFxcXFxuXFxcXG4gICAgZXZhbChNWV9SVUxFLmZpbmRfcnVsZS5zbGljZSgzKSlcXFxcbn0gZWxzZSB7XFxcXG4gICAgbGV0IFtfLCBmaW5kUnVsZSwgZGV0YWlsRmluZFJ1bGVdID0gTVlfUlVMRS5maW5kX3J1bGUubWF0Y2goL14oW1xcXFxcXFxcc1xcXFxcXFxcU10qPykoPzo9PT4oW1xcXFxcXFxcc1xcXFxcXFxcU10qKSk/JC8pXFxcXG4gICAgZmluZFJ1bGUgPSBmaW5kUnVsZS5zcGxpdCgnOycpXFxcXG4gICAgcGFyc2VEb21Gb3JBcnJheShnZXRSZXNDb2RlKCksIGZpbmRSdWxlLnNoaWZ0KCkpLmZvckVhY2goKGRhdGEpID0+IHtcXFxcbiAgICAgICAgbGV0IFt0aXRsZSwgaW1nLCBkZXNjLCB1cmxdID0gZmluZFJ1bGUubWFwKCh2LCBpKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gJyonKSByZXR1cm4gJydcXFxcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB2ID0gKGkgPT0gMSB8fCBpID09IDMpID9cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tKGRhdGEsIHYpIDpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tRm9ySHRtbChkYXRhLCB2KVxcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSAzKSB2ID0gcnVuQ29kZSh2KVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlxcXFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuICcnIH1cXFxcbiAgICAgICAgICAgIH0pLFxcXFxuICAgICAgICAgICAgcmVzID0ge1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSwgdXJsOiB1cmwsXFxcXG4gICAgICAgICAgICAgICAgZGVzYzogZGVzYywgaW1nOiBpbWcsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IE1ZX1JVTEUuY29sX3R5cGVcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgaWYgKHJlcy51cmwpIHtcXFxcbiAgICAgICAgICAgIGlmIChyZXMudXJsLmluY2x1ZGVzKCdAbGF6eVJ1bGU9JykpIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgcmVJbmRleCA9IHJlcy51cmwuaW5kZXhPZignLmpzOicpXFxcXG4gICAgICAgICAgICAgICAgaWYgKHJlSW5kZXggPj0gMCkgcmVzLnVybCA9IHJlcy51cmwuc2xpY2UoMCwgcmVJbmRleCkgKyAnLmpzOlxcXFxcXFxcbmlmKE1ZX1JVTEUpT2JqZWN0LmFzc2lnbihNWV9SVUxFLCAnICsgYXNzaWduTGF6eVJ1bGUgKyAnKTsnICsgcmVzLnVybC5zbGljZShyZUluZGV4ICsgNClcXFxcbiAgICAgICAgICAgIH0gZWxzZSAgaWYgKGRldGFpbEZpbmRSdWxlKSB7XFxcXG4gICAgICAgICAgICAgICAgcmVzLmV4dHJhID0ge1xcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGdlbkV4VXJsKHVybCksXFxcXG4gICAgICAgICAgICAgICAgICAgIFJVTEU6IE9iamVjdC5hc3NpZ24oZ2VuTXlSdWxlKCksIHsgZGV0YWlsX2ZpbmRfcnVsZTogZGV0YWlsRmluZFJ1bGUgfSksXFxcXG4gICAgICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTogaXNJbmRleCAmJiB0aXRsZVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICByZXMudXJsID0gJ2hpa2VyOi8vcGFnZS9mcmFtZUxvYWQ/cnVsZT0nICsgUUlOR19USVRMRVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUpIHtcXFxcbiAgICAgICAgICAgICAgICByZXMuZXh0cmEgPSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogZ2VuRXhVcmwodXJsKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgUlVMRTogZ2VuTXlSdWxlKCksXFxcXG4gICAgICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTogaXNJbmRleCAmJiB0aXRsZVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICByZXMudXJsID0gJ2hpa2VyOi8vcGFnZS9mcmFtZUxvYWQ/cnVsZT0nICsgUUlOR19USVRMRVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIG15Q29sbGVjdGlvbl9lbC5wdXNoKHJlcylcXFxcbiAgICB9KVxcXFxuICAgIHNldFJlc3VsdChteUNvbGxlY3Rpb25fZWwpXFxcXG59XFxcXG5cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLmlbDmja7ovb3lhaVcXFwiLFxcXCJwYXRoXFxcIjpcXFwiZGF0YUxvYWRcXFwiLFxcXCJydWxlXFxcIjpcXFwiJC5leHBvcnRzID0gZnVuY3Rpb24oc2hvd0FsbCkge1xcXFxuICAgIGxldCB1cmwgPSBnZXRNeVZhcigncmVtb3RlVXJsJyksXFxcXG4gICAgICAgIGRhdGEgPSBbXVxcXFxuICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly8nKSB8fCB1cmwuc3RhcnRzV2l0aCgnZmlsZTovLycpKSB7XFxcXG4gICAgICAgIC8vIOWmguaenOS4uuacrOWcsOaWh+S7tuWImeS4jei/m+ihjOe8k+WtmFxcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgbGV0IG9yaURhdGEgPSBmZXRjaCh1cmwpXFxcXG4gICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSlcXFxcbiAgICAgICAgICAgICAgICBvcmlEYXRhID0gSlNPTi5wYXJzZShvcmlEYXRhKS5ydWxlXFxcXG4gICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShvcmlEYXRhKVxcXFxuICAgICAgICB9IGNhdGNoIChlKSB7fVxcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIC8vIOiOt+WPlui/nOeoi+aVsOaNru+8jOajgOafpemXtOmalOm7mOiupOS4gOWkqVxcXFxuICAgICAgICBsZXQgaW50ZXJ2YWwgPSBwYXJzZUludChyZWFkRmlsZSgndXBkYXRlSW50ZXJ2YWwnKSB8fCAnMScpLFxcXFxuICAgICAgICAgICAgb2xkRGF0YSA9IGZldGNoKCdoaWtlcjovL2ZpbGVzL2xpYnMvJyArIG1kNSh1cmwpICsgJy5qcycpLFxcXFxuICAgICAgICAgICAgcmVtb3RlRGF0YSA9IFtdXFxcXG4gICAgICAgIGlmKGludGVydmFsID09IDApIGludGVydmFsID0gLTFcXFxcbiAgICAgICAgdHJ5IHsgcmVtb3RlRGF0YSA9IEpTT04ucGFyc2UoZmV0Y2hDYWNoZSh1cmwsIDI0ICogaW50ZXJ2YWwsIHt0aW1lb3V0OjUwMDAwfSkpIH0gY2F0Y2goZSkge31cXFxcbiAgICAgICAgaWYoIUFycmF5LmlzQXJyYXkocmVtb3RlRGF0YSkpIHJlbW90ZURhdGEgPSBbXVxcXFxuICAgICAgICBpZiAocmVtb3RlRGF0YS5sZW5ndGggPCAzKSB7XFxcXG4gICAgICAgICAgICBsb2coJ+acquiOt+WPluWIsOaVsOaNricpXFxcXG4gICAgICAgICAgICBpZiAob2xkRGF0YSkgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2xpYnMvJyArIG1kNSh1cmwpICsgJy5qcycsIG9sZERhdGEpXFxcXG4gICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShvbGREYXRhIHx8ICdbXScpXFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICBsb2coJ+W3suiOt+WPluWIsOaVsOaNricpXFxcXG4gICAgICAgICAgICBkYXRhID0gcmVtb3RlRGF0YVxcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIGRhdGEgPSBkYXRhLmZpbHRlcigodikgPT4geyByZXR1cm4gdi50aXRsZSAhPSBnZXRNeVZhcignbXlDb2xsZWN0aW9uJykgJiYgISh2LmF1dGhvciB8fCAnJykuaW5jbHVkZXMoJ+i9u+WQiOmbhueUn+aIkOWZqCcpIH0pXFxcXG4gICAgaWYgKHJlYWRGaWxlKCdkaXNhYmxlQ3VzdG9tJykpIHJldHVybiBkYXRhXFxcXG4gICAgZWxzZSB7IC8vIOWGmeWFpeiHquWumuS5ieaVsOaNrlxcXFxuICAgICAgICBsZXQgY3VzdG9tRGF0YSA9IEpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKSxcXFxcbiAgICAgICAgICAgIHJld3JpdGVEYXRhID0gW11cXFxcbiAgICAgICAgY3VzdG9tRGF0YSA9IGN1c3RvbURhdGEucmVkdWNlKChzZWxmLCB2KSA9PiB7XFxcXG4gICAgICAgICAgICBsZXQgaW5kZXggPSBkYXRhLmZpbmRJbmRleCgodnYpID0+IHYudGl0bGUgPT0gdnYudGl0bGUpXFxcXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xcXFxuICAgICAgICAgICAgICAgIHNlbGYucHVzaCh2KVxcXFxuICAgICAgICAgICAgICAgIGxldCBydWxlID0gZGF0YS5zcGxpY2UoaW5kZXgsIDEpWzBdXFxcXG4gICAgICAgICAgICAgICAgaWYgKHNob3dBbGwgfHwgdi52aXNpYmxlKVxcXFxuICAgICAgICAgICAgICAgICAgICByZXdyaXRlRGF0YS5wdXNoKE9iamVjdC5hc3NpZ24ocnVsZSwgdikpXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICByZXR1cm4gc2VsZlxcXFxuICAgICAgICB9LCBbXSlcXFxcbiAgICAgICAgZGF0YS5mb3JFYWNoKCh2KSA9PiBjdXN0b21EYXRhLnB1c2goeyB0aXRsZTogdi50aXRsZSwgdmlzaWJsZTogdHJ1ZSB9KSlcXFxcbiAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBKU09OLnN0cmluZ2lmeShjdXN0b21EYXRhKSlcXFxcbiAgICAgICAgcmV0dXJuIHJld3JpdGVEYXRhLmNvbmNhdChkYXRhKVxcXFxuICAgIH1cXFxcbn1cXFxcblxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuWHveaVsOmHjeWGmVxcXCIsXFxcInBhdGhcXFwiOlxcXCJwcmVGdW5jXFxcIixcXFwicnVsZVxcXCI6XFxcIi8vIOmYsuatonJlcXVpcmXlpJrmrKHov5DooYxcXFxcbmxldCByQ2FjaGUgPSB7fVxcXFxucmVxdWlyZSA9IGZ1bmN0aW9uKHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMywgcGFyYW00KSB7XFxcXG4gICAgaWYgKCFwYXJhbTAgfHwgckNhY2hlW3BhcmFtMF0gIT0gbnVsbCkge1xcXFxuICAgICAgICByZXR1cm5cXFxcbiAgICB9XFxcXG4gICAgckNhY2hlW3BhcmFtMF0gPSAxXFxcXG4gICAgcGFyYW0yID0gcGFyYW0yIHx8IDBcXFxcbiAgICBwYXJhbTMgPSBNWV9USUNLRVRcXFxcbiAgICBwYXJhbTQgPSBldmFsXFxcXG4gICAgcmV0dXJuIG1ldGhvZF9yZXF1aXJlLmludm9rZShqYXZhQ29udGV4dCwgcGFyYW0wLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBwYXJhbTQpXFxcXG59XFxcXG5yZXF1aXJlQ2FjaGUgPSBmdW5jdGlvbihwYXJhbTAsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCwgcGFyYW01KSB7XFxcXG4gICAgaWYgKCFwYXJhbTAgfHwgckNhY2hlW3BhcmFtMF0gIT0gbnVsbCkge1xcXFxuICAgICAgICByZXR1cm5cXFxcbiAgICB9XFxcXG4gICAgckNhY2hlW3BhcmFtMF0gPSAxXFxcXG4gICAgcGFyYW0zID0gcGFyYW0zIHx8IDBcXFxcbiAgICBwYXJhbTQgPSBNWV9USUNLRVRcXFxcbiAgICBwYXJhbTUgPSBldmFsXFxcXG4gICAgcmV0dXJuIG1ldGhvZF9yZXF1aXJlQ2FjaGUuaW52b2tlKGphdmFDb250ZXh0LCBwYXJhbTAsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCwgcGFyYW01KVxcXFxufVxcXFxucmMgPSByZXF1aXJlQ2FjaGVcXFxcblxcXFxuLy8g5pyA5paw56ug6IqC6KeE5YiZ5rOo5YWl6aKE5aSE55CG5Luj56CBXFxcXG5zZXRMYXN0Q2hhcHRlclJ1bGUgPSBmdW5jdGlvbihwYXJhbTApIHtcXFxcbiAgICBpZiAoIXBhcmFtMCkgcmV0dXJuXFxcXG4gICAgaWYgKHBhcmFtMC5zdGFydHNXaXRoKFxcXFxcXFwianM6XFxcXFxcXCIpICYmIHRoaXNSVUxFLnByZVJ1bGUpIHtcXFxcbiAgICAgICAgcGFyYW0wID0gJ2pzOlxcXFxcXFxcbnRyeXtldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJoaWtlcjovL3BhZ2UvcHJlRnVuYz9ydWxlPScgKyBRSU5HX1RJVExFICsgJ1xcXFxcXFwiKSkucnVsZSk7XFxcXFxcXFxcXFxcbiAgICAgICAgICAgIGV2YWwoYmFzZTY0RGVjb2RlKFxcXFxcXFwiJyArIGJhc2U2NEVuY29kZSh0aGlzUlVMRS5wcmVSdWxlKSArICdcXFxcXFxcIikpO1xcXFxcXFxcXFxcXG4gICAgICAgICAgICBsZXQgX2NmZyA9IGdldE15VmFyKFxcXFxcXFwiaW5pdENvbmZpZ1xcXFxcXFwiLCBcXFxcXFxcInt9XFxcXFxcXCIpO1xcXFxcXFxcXFxcXG4gICAgICAgICAgICBpZiAoX2NmZyAmJiBfY2ZnLmxlbmd0aD4wKSB7Y29uZmlnID0gSlNPTi5wYXJzZShfY2ZnKX19Y2F0Y2goZSl7bG9nKGUubWVzc2FnZSl9XFxcXFxcXFxuOycgK1xcXFxuICAgICAgICAgICAgcGFyYW0wLnNsaWNlKDMpXFxcXG4gICAgfVxcXFxuICAgIG1ldGhvZF9zZXRMYXN0Q2hhcHRlclJ1bGUuaW52b2tlKGphdmFDb250ZXh0LCBwYXJhbTApO1xcXFxufVxcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6ZO+5o6l5aSE55CGXFxcIixcXFwicGF0aFxcXCI6XFxcInVybFBhcnNlXFxcIixcXFwicnVsZVxcXCI6XFxcIi8vIOmmlumhtemTvuaOpeabv+aNouWIhuexu1xcXFxuZnVuY3Rpb24gaW5kZXhVcmwocGFyYW0pIHtcXFxcbiAgICBmdW5jdGlvbiBydW5Db2RlKHJ1bGUpIHtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIGxldCBbaW5wdXQsIGNvZGVdID0gcnVsZS5zcGxpdCgnLmpzOicpXFxcXG4gICAgICAgICAgICByZXR1cm4gY29kZSA/IGV2YWwoY29kZSkgOiBydWxlXFxcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuIHJ1bGUgfVxcXFxuICAgIH1cXFxcbiAgICBsZXQgeyBSVUxFLCBwYWdlTnVtLCBRSU5HX1RJVExFIH0gPSBKU09OLnBhcnNlKHBhcmFtLnNwbGl0KCcjIyMnKVsxXSlcXFxcbiAgICBSVUxFID0gSlNPTi5wYXJzZShiYXNlNjREZWNvZGUoUlVMRSkpXFxcXG4gICAgcGFnZU51bSA9IHBhcnNlSW50KHBhZ2VOdW0pXFxcXG4gICAgbGV0IHVybCA9IFJVTEUudXJsXFxcXG5cXFxcbiAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9DbGFzc1RhYj9ydWxlPScgKyBRSU5HX1RJVExFKSkucnVsZSlcXFxcbiAgICB1cmwgPSB0YWJIZWFkZXIuc2V0VXJsKGZ5QWxsID8gdXJsLnJlcGxhY2UoL2Z5QWxsL2csICckJHtmeUFsbH0nKSA6IHVybC5yZXBsYWNlKC9meShjbGFzc3xhcmVhfHllYXJ8c29ydCkvZywgJyQke2Z5JDF9JykpXFxcXG4gICAgdXJsID0gdXJsLnJlcGxhY2UoL2Z5cGFnZSg/OkAoLT9cXFxcXFxcXGQrKUApPyg/OlxcXFxcXFxcKihcXFxcXFxcXGQrKUApPy9nLCAoXywgc3RhcnQsIHNwYWNlKSA9PiBwYXJzZUludChzdGFydCB8fCAwKSArIDEgKyAocGFnZU51bSAtIDEpICogcGFyc2VJbnQoc3BhY2UgfHwgMSkpXFxcXG4gICAgdXJsID0gL14oW1xcXFxcXFxcc1xcXFxcXFxcU10qPykoPzpcXFxcXFxcXFtmaXJzdFBhZ2U9KFtcXFxcXFxcXHNcXFxcXFxcXFNdKj8pXFxcXFxcXFxdKT8oPzooXFxcXFxcXFwuanM6W1xcXFxcXFxcc1xcXFxcXFxcU10qPykpPyQvLmV4ZWModXJsKVxcXFxuICAgIGlmIChwYWdlTnVtID09IDEgJiYgdXJsWzJdKSB1cmxbMV0gPSB1cmxbMl1cXFxcbiAgICBpZiAodXJsWzNdICYmICF1cmxbMV0uaW5jbHVkZXMoJy5qczonKSkgdXJsWzFdICs9IHVybFszXVxcXFxuICAgIHJldHVybiBydW5Db2RlKHVybFsxXSlcXFxcbn1cXFxcbi8vIOmTvuaOpeWPguaVsOWkhOeQhlxcXFxuZnVuY3Rpb24gcGFyYW1IYW5kbGUodXJsUGFyYW0sIHVhLCB1cmxUbXApIHtcXFxcbiAgICBsZXQgY2hhcnNldCwgVXNlckFnZW50XFxcXG4gICAgdHJ5IHsgLy8g6ZO+5o6l55qE57yW56CB5ZKMdWHlupTor6XmmK/pppblhYjnu6fmib/pppbpobXpk77mjqVcXFxcbiAgICAgICAgWywgLCBjaGFyc2V0LCBVc2VyQWdlbnRdID0gdXJsVG1wLnNwbGl0KCc7JylcXFxcbiAgICAgICAgVXNlckFnZW50ID0gVXNlckFnZW50Lm1hdGNoKC9eeyguKil9JC8pWzFdLnNwbGl0KCcmJicpLmZpbmQoKHYpID0+IHYuc3RhcnRzV2l0aCgnVXNlci1BZ2VudEAnKSlcXFxcbiAgICB9IGNhdGNoIChlKSB7fVxcXFxuICAgIHVybFBhcmFtWzBdID0gdXJsUGFyYW1bMF0gfHwgJ0dFVCdcXFxcbiAgICB1cmxQYXJhbVsxXSA9IHVybFBhcmFtWzFdIHx8IGNoYXJzZXQgfHwgJ1VURi04J1xcXFxuICAgIHRyeSB7XFxcXG4gICAgICAgIHVybFBhcmFtWzJdID0gdXJsUGFyYW1bMl0ubWF0Y2goL157KC4qKX0kLylbMV0uc3BsaXQoJyYmJylcXFxcbiAgICB9IGNhdGNoIChlKSB7IHVybFBhcmFtWzJdID0gW10gfVxcXFxuICAgIC8vIOa3u+WKoOWFqOWxgFVBXFxcXG4gICAgaWYgKCF1cmxQYXJhbVsyXS5zb21lKCh2KSA9PiB2LnN0YXJ0c1dpdGgoJ1VzZXItQWdlbnRAJykpKSB7XFxcXG4gICAgICAgIGlmIChVc2VyQWdlbnQpIHVybFBhcmFtWzJdLnB1c2goVXNlckFnZW50KVxcXFxuICAgICAgICBlbHNlIGlmICh1YSA9PSAncGMnKVxcXFxuICAgICAgICAgICAgdXJsUGFyYW1bMl0ucHVzaCgnVXNlci1BZ2VudEAnICsgUENfVUEucmVwbGFjZSgvOy9nLCAn77yb77ybJykucmVwbGFjZSgvXFxcXFxcXFw/LywgJ++8n++8nycpKVxcXFxuICAgICAgICBlbHNlIGlmICh1YSA9PSAnbW9iaWxlJylcXFxcbiAgICAgICAgICAgIHVybFBhcmFtWzJdLnB1c2goJ1VzZXItQWdlbnRAJyArIE1PQklMRV9VQS5yZXBsYWNlKC87L2csICfvvJvvvJsnKS5yZXBsYWNlKC9cXFxcXFxcXD8vLCAn77yf77yfJykpXFxcXG4gICAgfVxcXFxuICAgIHVybFBhcmFtWzJdID0gJ3snICsgdXJsUGFyYW1bMl0uam9pbignJiYnKSArICd9J1xcXFxuICAgIHJldHVybiB1cmxQYXJhbS5qb2luKCc7JylcXFxcbn1cXFxcblxcXCJ9LHtcXFwibmFtZVxcXCI6XFxcIuS7k+W6k+W3peWFt1xcXCIsXFxcInBhdGhcXFwiOlxcXCJ0b29sc1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbiQuZXhwb3J0cy5yYW5nZSA9IGZ1bmN0aW9uKG0sIG4pIHtcXFxcbiAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG0gLSBuICsgMSkgKyBuKTtcXFxcbn1cXFxcbiQuZXhwb3J0cy5jb2xvciA9IGZ1bmN0aW9uKHRleHQsIGNvbG9yKSB7XFxcXG4gICAgdGV4dCArPSBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgIGlmICh0ZXh0LmluZGV4T2YoXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIikgPT09IDApIHtcXFxcbiAgICAgICAgdGV4dC5yZXBsYWNlKFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gXFxcXFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0nXFxcXFxcXCIgKyBjb2xvciArIFxcXFxcXFwiJz5cXFxcXFxcIiArIHRleHQgKyBcXFxcXFxcIjwvZm9udD5cXFxcXFxcIjtcXFxcbn1cXFxcbmZ1bmN0aW9uIGh0bWxUYWcodGFnLCB0ZXh0KSB7XFxcXG4gICAgdGV4dCArPSBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgIGlmICh0ZXh0LmluZGV4T2YoXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIikgPT09IDApIHtcXFxcbiAgICAgICAgdGV4dC5yZXBsYWNlKFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIiArIFxcXFxcXFwiPFxcXFxcXFwiICsgdGFnICsgXFxcXFxcXCI+XFxcXFxcXCIgKyB0ZXh0ICsgXFxcXFxcXCI8L1xcXFxcXFwiICsgdGFnICsgXFxcXFxcXCI+XFxcXFxcXCI7XFxcXG5cXFxcbn1cXFxcblxcXFxuZnVuY3Rpb24gZ2V0Tm93Rm9ybWF0RGF0ZSgpIHtcXFxcbiAgICAgICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUoKTtcXFxcbiAgICAgICAgICAgIGxldCBzZXBlcmF0b3IxID0gXFxcXFxcXCItXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICBsZXQgc2VwZXJhdG9yMiA9IFxcXFxcXFwiOlxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgbGV0IG1vbnRoID0gZGF0ZS5nZXRNb250aCgpICsgMTtcXFxcbiAgICAgICAgICAgIGxldCBzdHJEYXRlID0gZGF0ZS5nZXREYXRlKCk7XFxcXG4gICAgICAgICAgICBsZXQgc3RySG91cnMgPSBkYXRlLmdldEhvdXJzKCk7XFxcXG4gICAgICAgICAgICBsZXQgc3RyTWludXRlcyA9IGRhdGUuZ2V0TWludXRlcygpO1xcXFxuICAgICAgICAgICAgbGV0IHN0clNlY29uZHMgPSBkYXRlLmdldFNlY29uZHMoKSsxO1xcXFxuICAgICAgICAgICAgaWYgKG1vbnRoID49IDEgJiYgbW9udGggPD0gOSkge1xcXFxuICAgICAgICAgICAgICAgIG1vbnRoID0gXFxcXFxcXCIwXFxcXFxcXCIgKyBtb250aFxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaWYgKHN0ckRhdGUgPj0gMCAmJiBzdHJEYXRlIDw9IDkpIHtcXFxcbiAgICAgICAgICAgICAgICBzdHJEYXRlID0gXFxcXFxcXCIwXFxcXFxcXCIgKyBzdHJEYXRlXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpZiAoc3RySG91cnMgPj0gMCAmJiBzdHJIb3VycyA8PSA5KSB7XFxcXG4gICAgICAgICAgICAgICAgc3RySG91cnMgPSBcXFxcXFxcIjBcXFxcXFxcIiArIHN0ckhvdXJzXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpZiAoc3RyTWludXRlcyA+PSAwICYmIHN0ck1pbnV0ZXMgPD0gOSkge1xcXFxuICAgICAgICAgICAgICAgIHN0ck1pbnV0ZXMgPSBcXFxcXFxcIjBcXFxcXFxcIiArIHN0ck1pbnV0ZXNcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGlmIChzdHJTZWNvbmRzID49IDAgJiYgc3RyU2Vjb25kcyA8PSA5KSB7XFxcXG4gICAgICAgICAgICAgICAgc3RyU2Vjb25kcyA9IFxcXFxcXFwiMFxcXFxcXFwiICsgc3RyU2Vjb25kc1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgLy9sZXQgY3VycmVudGRhdGUgPSBkYXRlLmdldEZ1bGxZZWFyKCkgKyBzZXBlcmF0b3IxICsgbW9udGggKyBzZXBlcmF0b3IxICsgc3RyRGF0ZSArIFxcXFxcXFwiIFxcXFxcXFwiICsgc3RySG91cnMgKyBzZXBlcmF0b3IyICsgc3RyTWludXRlcyArIHNlcGVyYXRvcjIgKyBzdHJTZWNvbmRzO1xcXFxuICAgICAgICAgICAgbGV0IGN1cnJlbnRkYXRlID0gKGRhdGUuZ2V0RnVsbFllYXIoKS0yMDIwKSsnJysgbW9udGggKycnKyBzdHJEYXRlICsnJysgc3RySG91cnMrJycgKyBzdHJNaW51dGVzICsnJysgTWF0aC5jZWlsKHN0clNlY29uZHMvNyk7XFxcXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoY3VycmVudGRhdGUpXFxcXG4gICAgICAgIH1cXFxcbiQuZXhwb3J0cy5nZXROb3dGb3JtYXREYXRlID0gZ2V0Tm93Rm9ybWF0RGF0ZTtcXFxcbiQuZXhwb3J0cy5odG1sVGFnID0gaHRtbFRhZztcXFxcbiQuZXhwb3J0cy5zbWFsbCA9IGZ1bmN0aW9uKHRleHQpIHtcXFxcbiAgICByZXR1cm4gaHRtbFRhZyhcXFxcXFxcInNtYWxsXFxcXFxcXCIsIHRleHQpO1xcXFxufVxcXFxuJC5leHBvcnRzLnVuaXF1ZTIgPSBmdW5jdGlvbiB1bmlxdWUyKGFycmF5KXtcXFxcbiAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGFycmF5KSk7XFxcXG59XFxcXG4kLmV4cG9ydHMuc3RyRGVhbCA9IGZ1bmN0aW9uIHN0ckRlYWwoc3RyKXtcXFxcbiAgICBzdHIgPSBzdHIuc3BsaXQoJycpO1xcXFxuICAgIHN0ciA9IHN0ci5maWx0ZXIoZSA9PiAoZSA+PSAwICYmIGUgPD0gOSkgfHwgKGUgPj0gJ2EnICYmIGUgPD0gJ3onKSB8fCAoZSA+PSAnQScgJiYgZSA8PSAnWicpIHx8IChlID49ICdcXFxcXFxcXHU0ZTAwJyAmJiBlIDw9ICdcXFxcXFxcXHU5ZmE1JykpO1xcXFxuICAgIHN0ciA9IHN0ci5qb2luKCcnKTtcXFxcbiAgICByZXR1cm4gc3RyXFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6KeE5YiZ5YiX6KGoXFxcIixcXFwicGF0aFxcXCI6XFxcImRhdGFcXFwiLFxcXCJydWxlXFxcIjpcXFwiW3tcXFxcbiAgICBcXFxcXFxcImxhc3RfY2hhcHRlcl9ydWxlXFxcXFxcXCI6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJ0aXRsZVxcXFxcXFwiOiBcXFxcXFxcIuWQvueIseegtOino/CdlKVcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImF1dGhvclxcXFxcXFwiOiBcXFxcXFxcIkhvb2RcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInVybFxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vd3d3LjUycG9qaWUuY24vZm9ydW0ucGhwP21vZD1ndWlkZSZ2aWV3PWZ5Y2xhc3MmcGFnZT1meXBhZ2U7Z2V0O0dCS1xcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwidmVyc2lvblxcXFxcXFwiOiA0LFxcXFxuICAgIFxcXFxcXFwiY29sX3R5cGVcXFxcXFxcIjogXFxcXFxcXCJ0ZXh0XzFcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImNsYXNzX25hbWVcXFxcXFxcIjogXFxcXFxcXCLmnIDmlrDng63pl6gm5pyA5paw57K+5Y2OJuacgOaWsOWbnuWkjSbmnIDmlrDlj5HooahcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImNsYXNzX3VybFxcXFxcXFwiOiBcXFxcXFxcImhvdCZkaWdlc3QmbmV3Jm5ld3RocmVhZFxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiYXJlYV9uYW1lXFxcXFxcXCI6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJhcmVhX3VybFxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwic29ydF9uYW1lXFxcXFxcXCI6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJ5ZWFyX25hbWVcXFxcXFxcIjogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInNvcnRfdXJsXFxcXFxcXCI6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJ5ZWFyX3VybFxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiZmluZF9ydWxlXFxcXFxcXCI6IFxcXFxcXFwianM6XFxcXFxcXFxudmFyIHJlcyA9IHt9O1xcXFxcXFxcbnZhciBkID0gW107XFxcXFxcXFxudmFyIGh0bWwgPSBnZXRSZXNDb2RlKCk7XFxcXFxcXFxuXFxcXFxcXFxuLy/liJfooahcXFxcXFxcXG52YXIgbGlzdCA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwnYm9keSYmdGJvZHlbaWRdJyk7XFxcXFxcXFxuXFxcXFxcXFxuZm9yKHZhciBpPTE7aTxsaXN0Lmxlbmd0aCsxO2krKyl7XFxcXFxcXFxuZC5wdXNoKHtcXFxcXFxcXG50aXRsZTogKGkpKyAnLiAnICtwYXJzZURvbUZvckh0bWwobGlzdFtpLTFdLCcueHN0JiZUZXh0JyksXFxcXFxcXFxudXJsOid4NTovL2h0dHBzOi8vd3d3LjUycG9qaWUuY24vJytwYXJzZURvbUZvckh0bWwobGlzdFtpLTFdLCdhJiZocmVmJyksXFxcXFxcXFxuY29sX3R5cGU6ICd0ZXh0XzEnfSk7XFxcXFxcXFxufVxcXFxcXFxcblxcXFxcXFxcclxcXFxcXFxcbnJlcy5kYXRhID0gZDtcXFxcXFxcXG5zZXRIb21lUmVzdWx0KHJlcyk7XFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJzZWFyY2hfdXJsXFxcXFxcXCI6IFxcXFxcXFwiaHR0cDovL3poYW5uZWkuYmFpZHUuY29tL2NzZS9zaXRlP3E9KiomcD1meXBhZ2UmY2M9NTJwb2ppZS5jblxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiZ3JvdXBcXFxcXFxcIjogXFxcXFxcXCLikaDmjqjojZBcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInNlYXJjaEZpbmRcXFxcXFxcIjogXFxcXFxcXCJib2R5JiYucmVzdWx0O1xcXFxcXFxcbmgzJiZUZXh0O1xcXFxcXFxcbmEmJmhyZWY7XFxcXFxcXFxuKjtcXFxcXFxcXG4uYy1hYnN0cmFjdCYmVGV4dDtcXFxcXFxcXG4qXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJkZXRhaWxfY29sX3R5cGVcXFxcXFxcIjogXFxcXFxcXCJtb3ZpZV8xXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJkZXRhaWxfZmluZF9ydWxlXFxcXFxcXCI6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJzZGV0YWlsX2NvbF90eXBlXFxcXFxcXCI6IFxcXFxcXFwibW92aWVfMVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwic2RldGFpbF9maW5kX3J1bGVcXFxcXFxcIjogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInVhXFxcXFxcXCI6IFxcXFxcXFwicGNcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInByZVJ1bGVcXFxcXFxcIjogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInBhZ2VzXFxcXFxcXCI6IFxcXFxcXFwiW11cXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImljb25cXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3d3dy41MnBvamllLmNuL2Zhdmljb24uaWNvXFxcXFxcXCJcXFxcbn0sIHtcXFxcbiAgICBcXFxcXFxcImxhc3RfY2hhcHRlcl9ydWxlXFxcXFxcXCI6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJ0aXRsZVxcXFxcXFwiOiBcXFxcXFxcIjQyM0Rvd25cXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImF1dGhvclxcXFxcXFwiOiBcXFxcXFxcIummmembheaDhVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwidXJsXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly93d3cuNDIzZG93bi5jb20vZnlBbGxwYWdlL2Z5cGFnZTtnZXQ7dXRmLTg7e1VzZXItQWdlbnRATW96aWxsYS81LjAgKExpbnV477yb77ybIEFuZHJvaWQgMTApIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNC4wIENocm9tZS84MC4wLjM5ODcuMTMyIE1vYmlsZSBTYWZhcmkvNTM3LjM2fVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwidmVyc2lvblxcXFxcXFwiOiAxLFxcXFxuICAgIFxcXFxcXFwiY29sX3R5cGVcXFxcXFxcIjogXFxcXFxcXCJtb3ZpZV8xXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJjbGFzc19uYW1lXFxcXFxcXCI6IFxcXFxcXFwi6aaW6aG1JuWuieWNk+i9r+S7tlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwidHlwZVxcXFxcXFwiOiBcXFxcXFxcIm5ld3NcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImNsYXNzX3VybFxcXFxcXFwiOiBcXFxcXFxcIiZhcGsvXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJhcmVhX25hbWVcXFxcXFxcIjogXFxcXFxcXCLljp/liJvova/ku7Ym5aqS5L2T5pKt5pS+Jue9kemhtea1j+iniCblm77lvaLlm77lg48m6IGK5aSp6L2v5Lu2JuWKnuWFrOi9r+S7tibkuIrkvKDkuIvovb0m5a6e55So6L2v5Lu2Juezu+e7n+i+heWKqSbns7vnu5/lv4XlpIcm5a6J5YWo6L2v5Lu2JuihpeS4geebuOWFsybnoazku7bnm7jlhbMm5ri45oiP6L2v5Lu2XFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJhcmVhX3VybFxcXFxcXFwiOiBcXFxcXFxcInpkNDIzLyZtdWx0aW1lZGlhLyZicm93c2VyLyZpbWFnZS8maW0vJndvcmsvJmRvd24vJnNhZmV3b3JlLyZzeXN0ZW1zb2Z0LyZzeXN0ZW1wbHVzLyZzZWN1cml0eS8mcGF0Y2gvJmhhcmR3YXJlLyZnYW1lL1xcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwic29ydF9uYW1lXFxcXFxcXCI6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJ5ZWFyX25hbWVcXFxcXFxcIjogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInNvcnRfdXJsXFxcXFxcXCI6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJ5ZWFyX3VybFxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiZmluZF9ydWxlXFxcXFxcXCI6IFxcXFxcXFwianM6XFxcXFxcXFxudmFyIGl0ZW1zID0gW107dmFyIGh0bWw9Z2V0UmVzQ29kZSgpO1xcXFxcXFxcbi8vbG9nKGh0bWwpO1xcXFxcXFxcbnZhciBsaXN0ID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCcuYXJjaGl2ZS1saXN0JiZsaTpub3QoOmNvbnRhaW5zKOS8mOaDoOaOqOiNkCkpJyk7XFxcXFxcXFxuXFxcXFxcXFxyXFxcXFxcXFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xcXFxcXFxcclxcXFxcXFxcbiAgICAgICAgdmFyIHRpdGxlID0gcGFyc2VEb21Gb3JIdG1sKGxpc3RbaV0sICdoMiYmVGV4dCcpO1xcXFxcXFxcbiAgICAgICAgdmFyIGltZyA9IHBhcnNlRG9tKGxpc3RbaV0sICdpbWcmJnNyYycpO1xcXFxcXFxcclxcXFxcXFxcbiAgICAgICAgdmFyIHVybCA9IHBhcnNlRG9tKGxpc3RbaV0sICdhJiZocmVmJyk7XFxcXFxcXFxuICAgICAgICB2YXIgZGVzYyA9IHBhcnNlRG9tRm9ySHRtbChsaXN0W2ldLCAnLml0ZW0tbWV0YSYmVGV4dCcpO1xcXFxcXFxcclxcXFxcXFxcbiAgICAgICAgaXRlbXMucHVzaCh7XFxcXFxcXFxyXFxcXFxcXFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcXFxcXFxcbiAgICAgICAgICAgIHBpY191cmw6IGltZyxcXFxcXFxcXHJcXFxcXFxcXG4gICAgICAgICAgICB1cmw6IHVybCxcXFxcXFxcXG4gICAgICAgICAgICBkZXNjOiBkZXNjXFxcXFxcXFxyXFxcXFxcXFxuICAgICAgICB9KTtcXFxcXFxcXHJcXFxcXFxcXG4gICAgfVxcXFxcXFxcblxcXFxcXFxcbnNldEhvbWVSZXN1bHQoe2RhdGE6aXRlbXN9KTtcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInNlYXJjaF91cmxcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3d3dy40MjNkb3duLmNvbS9wYWdlL2Z5cGFnZT9zPSoqO2dldDt1dGYtODt7VXNlci1BZ2VudEBNb3ppbGxhLzUuMCAoTGludXjvvJvvvJsgQW5kcm9pZCAxMCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzgwLjAuMzk4Ny4xMzIgTW9iaWxlIFNhZmFyaS81MzcuMzZ9XFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJncm91cFxcXFxcXFwiOiBcXFxcXFxcIuWFtuWug1xcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwic2VhcmNoRmluZFxcXFxcXFwiOiBcXFxcXFxcIi5hcmNoaXZlLWxpc3QmJmxpO2gyJiZUZXh0O2EmJmhyZWY7Lml0ZW0tY2F0ZWdvcnkmJlRleHQ7Lml0ZW0tbWV0YSYmVGV4dDtpbWcmJnNyY1xcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiZGV0YWlsX2NvbF90eXBlXFxcXFxcXCI6IFxcXFxcXFwibW92aWVfMVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiZGV0YWlsX2ZpbmRfcnVsZVxcXFxcXFwiOiBcXFxcXFxcImpzOlxcXFxcXFxcbnZhciBkPVtdO1xcXFxcXFxcbnZhciBodG1sPWdldFJlc0NvZGUoKTtcXFxcXFxcXG52YXIgdGFicz1wYXJzZURvbUZvckh0bWwoaHRtbCwnYm9keSYmLmVudHJ5JiZIdG1sJyk7XFxcXFxcXFxuXFxcXFxcXFxuZC5wdXNoKHtcXFxcXFxcXG5cXFxcXFxcXHRcXFxcXFxcXHRcXFxcXFxcXHR0aXRsZTogdGFicyxcXFxcXFxcXG4gICAgZGVzYzonJyxcXFxcXFxcXG4gICAgcGljX3VybDonJyxcXFxcXFxcXG4gICAgdXJsOicnLFxcXFxcXFxcblxcXFxcXFxcdFxcXFxcXFxcdGNvbF90eXBlOiAncmljaF90ZXh0J1xcXFxcXFxcbn0pO1xcXFxcXFxcblxcXFxcXFxcbnNldEhvbWVSZXN1bHQoe2RhdGE6ZH0pO1xcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwic2RldGFpbF9jb2xfdHlwZVxcXFxcXFwiOiBcXFxcXFxcIm1vdmllXzFcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInNkZXRhaWxfZmluZF9ydWxlXFxcXFxcXCI6IFxcXFxcXFwiKlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwidWFcXFxcXFxcIjogXFxcXFxcXCJhdXRvXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJwcmVSdWxlXFxcXFxcXCI6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJwYWdlc1xcXFxcXFwiOiBcXFxcXFxcIltdXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJpY29uXFxcXFxcXCI6IFxcXFxcXFwiXFxcXFxcXCJcXFxcbn0sIHtcXFxcbiAgICBcXFxcXFxcImxhc3RfY2hhcHRlcl9ydWxlXFxcXFxcXCI6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJ0aXRsZVxcXFxcXFwiOiBcXFxcXFxcIuiQveWwmOS5i+acqOG0uuG1kFxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiYXV0aG9yXFxcXFxcXCI6IFxcXFxcXFwiTmFtb1xcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwidXJsXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly93d3cubHVvY2hlbnpoaW11LmNvbS9wYWdlL2Z5cGFnZVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwidmVyc2lvblxcXFxcXFwiOiAxLFxcXFxuICAgIFxcXFxcXFwiY29sX3R5cGVcXFxcXFxcIjogXFxcXFxcXCJtb3ZpZV8xX2xlZnRfcGljXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJjbGFzc19uYW1lXFxcXFxcXCI6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJ0eXBlXFxcXFxcXCI6IFxcXFxcXFwib3RoZXJcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImNsYXNzX3VybFxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiYXJlYV9uYW1lXFxcXFxcXCI6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJhcmVhX3VybFxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwic29ydF9uYW1lXFxcXFxcXCI6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJ5ZWFyX25hbWVcXFxcXFxcIjogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInNvcnRfdXJsXFxcXFxcXCI6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJ5ZWFyX3VybFxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiZmluZF9ydWxlXFxcXFxcXCI6IFxcXFxcXFwianM6XFxcXFxcXFxudmFyIHJlcyA9IHt9O1xcXFxcXFxcbnZhciBkID0gW107XFxcXFxcXFxudmFyIGxpc3QgPSBwYXJzZURvbUZvckFycmF5KGdldFJlc0NvZGUoKSwgJy5jb250ZW50JiYuZXhjZXJwdCcpO1xcXFxcXFxcbmZvciAodmFyIGkgaW4gbGlzdCkge1xcXFxcXFxcbiAgICBkLnB1c2goe1xcXFxcXFxcbiAgICAgICAgdGl0bGU6IHBhcnNlRG9tRm9ySHRtbChsaXN0W2ldLCAnaDImJlRleHQnKSxcXFxcXFxcXG4gICAgICAgIGRlc2M6IHBhcnNlRG9tRm9ySHRtbChsaXN0W2ldLCAnLm1ldGEmJlRleHQnKSxcXFxcXFxcXG4gICAgICAgIHBpY191cmw6IHBhcnNlRG9tKGxpc3RbaV0sICdpbWcmJmRhdGEtc3JjJykgKyBcXFxcXFxcXFxcXFxcXFwiQFJlZmVyZXI9XFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgIHVybDogcGFyc2VEb20obGlzdFtpXSwgJ2EmJmhyZWYnKSxcXFxcXFxcXG4gICAgfSlcXFxcXFxcXG59XFxcXFxcXFxucmVzLmRhdGEgPSBkO1xcXFxcXFxcbnNldEhvbWVSZXN1bHQocmVzKTtcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInNlYXJjaF91cmxcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3d3dy5sdW9jaGVuemhpbXUuY29tLz9zPSoqXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJncm91cFxcXFxcXFwiOiBcXFxcXFxcIuWFtuWug1xcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwic2VhcmNoRmluZFxcXFxcXFwiOiBcXFxcXFxcImpzOlxcXFxcXFxcbnZhciByZXMgPSB7fTtcXFxcXFxcXG52YXIgZCA9IFtdO1xcXFxcXFxcbnZhciBsaXN0ID0gcGFyc2VEb21Gb3JBcnJheShnZXRSZXNDb2RlKCksICdib2R5JiZhcnRpY2xlJyk7XFxcXFxcXFxuZm9yICh2YXIgaSBpbiBsaXN0KSB7XFxcXFxcXFxuICAgIGQucHVzaCh7XFxcXFxcXFxuICAgICAgICB0aXRsZTogcGFyc2VEb21Gb3JIdG1sKGxpc3RbaV0sICdoMiYmVGV4dCcpLFxcXFxcXFxcbiAgICAgICAgZGVzYzogcGFyc2VEb21Gb3JIdG1sKGxpc3RbaV0sICcubm90ZSYmVGV4dCcpLCAgICAgICAgXFxcXFxcXFxuICAgICAgICB1cmw6IHBhcnNlRG9tKGxpc3RbaV0sICdhJiZocmVmJyksXFxcXFxcXFxuICAgIH0pXFxcXFxcXFxufVxcXFxcXFxcbnJlcy5kYXRhID0gZDtcXFxcXFxcXG5zZXRIb21lUmVzdWx0KHJlcyk7XFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJkZXRhaWxfY29sX3R5cGVcXFxcXFxcIjogXFxcXFxcXCJtb3ZpZV8xXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJkZXRhaWxfZmluZF9ydWxlXFxcXFxcXCI6IFxcXFxcXFwianM6dmFyIHJlcz17fTtcXFxcXFxcXG52YXIgZCA9IFtdO1xcXFxcXFxcbmQucHVzaCh7XFxcXFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcXFxcXFxcXFwidGV4dF8xXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgdGl0bGU6IFxcXFxcXFxcXFxcXFxcXCLigJzigJzigJ3igJ08YmlnPlxcXFxcXFxcXFxcXFxcXCIgKyBwYXJzZURvbUZvckh0bWwoZ2V0UmVzQ29kZSgpLCBcXFxcXFxcXFxcXFxcXFwiaDEmJlRleHRcXFxcXFxcXFxcXFxcXFwiKSArIFxcXFxcXFxcXFxcXFxcXCI8L2JpZz5cXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbn0pO1xcXFxcXFxcbmQucHVzaCh7XFxcXFxcXFxuICAgIHRpdGxlOiBwYXJzZURvbUZvckh0bWwoZ2V0UmVzQ29kZSgpLCBcXFxcXFxcXFxcXFxcXFwiLmFydGljbGUtY29udGVudCYmSHRtbFxcXFxcXFxcXFxcXFxcXCIpLnNwbGl0KCdwdXNoKHt9KTsnKVsxXSxcXFxcXFxcXG4gICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcXFxcXFxcbiAgICBleHRyYToge1xcXFxcXFxcbiAgICAgICAgdGV4dFNpemU6IDE2LFxcXFxcXFxcbiAgICAgICAgY2xpY2s6IHRydWVcXFxcXFxcXG4gICAgfVxcXFxcXFxcbn0pO1xcXFxcXFxcbnNldFJlc3VsdChkKTtcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInNkZXRhaWxfY29sX3R5cGVcXFxcXFxcIjogXFxcXFxcXCJtb3ZpZV8xXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJzZGV0YWlsX2ZpbmRfcnVsZVxcXFxcXFwiOiBcXFxcXFxcIipcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInVhXFxcXFxcXCI6IFxcXFxcXFwicGNcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInByZVJ1bGVcXFxcXFxcIjogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInBhZ2VzXFxcXFxcXCI6IFxcXFxcXFwiW11cXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImljb25cXFxcXFxcIjogXFxcXFxcXCJodHRwczovL2ltZy5sdW9jaGVuemhpbXUuY29tL3B1YmxpYy8yMDIwLzAxL2hvbWUucG5nXFxcXFxcXCJcXFxcbn0sIHtcXFxcbiAgICBcXFxcXFxcImxhc3RfY2hhcHRlcl9ydWxlXFxcXFxcXCI6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJ0aXRsZVxcXFxcXFwiOiBcXFxcXFxcIuWIhuS6q+iAhVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiYXV0aG9yXFxcXFxcXCI6IFxcXFxcXFwi5bCP8J+UpeaYn1xcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwidXJsXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly9zaGFyZXJ3LmNvbS9hL2Z5QWxsL2Z5cGFnZS9cXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInZlcnNpb25cXFxcXFxcIjogOSxcXFxcbiAgICBcXFxcXFxcImNvbF90eXBlXFxcXFxcXCI6IFxcXFxcXFwibW92aWVfMV92ZXJ0aWNhbF9waWNcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImNsYXNzX25hbWVcXFxcXFxcIjogXFxcXFxcXCLmiYvmnLrova/ku7Ym6L2m5py66L2v5Lu2JueUteiEkei9r+S7tiZcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImNsYXNzX3VybFxcXFxcXFwiOiBcXFxcXFxcImdhbmh1byZxaWNoZSZqaW5neWFuJlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiYXJlYV9uYW1lXFxcXFxcXCI6IFxcXFxcXFwi55uS5a2Q6L2v5Lu2JlRW6LWE6K6vJueyvumAiVRWXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJhcmVhX3VybFxcXFxcXFwiOiBcXFxcXFxcInppeXVhbiZ0dnp4Jmp4dHZcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInNvcnRfbmFtZVxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwieWVhcl9uYW1lXFxcXFxcXCI6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJzb3J0X3VybFxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwieWVhcl91cmxcXFxcXFxcIjogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImZpbmRfcnVsZVxcXFxcXFwiOiBcXFxcXFxcImJvZHkmJi5hcnRpY2xlLWxpc3Q7aW1nJiZhbHQ7aW1nJiZzcmM7LnRpbWUmJlRleHQ7YSYmaHJlZlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwic2VhcmNoX3VybFxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vc2hhcmVydy5jb20vc2VhcmNoLnBocD9xPSoqJnBhZ2U9ZnlwYWdlXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJncm91cFxcXFxcXFwiOiBcXFxcXFxcIuWFtuWug1xcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwic2VhcmNoRmluZFxcXFxcXFwiOiBcXFxcXFxcImJvZHkmJi5hcnRpY2xlLWxpc3Q7aW1nJiZhbHQ7YSYmaHJlZjsudGltZSYmVGV4dDtwLDEmJlRleHQ7aW1nJiZzcmNcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImRldGFpbF9jb2xfdHlwZVxcXFxcXFwiOiBcXFxcXFxcIm1vdmllXzFcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImRldGFpbF9maW5kX3J1bGVcXFxcXFxcIjogXFxcXFxcXCJqczp2YXIgcmVzPXt9O3ZhciBkPVtdO2h0bWw9Z2V0UmVzQ29kZSgpO3RleHQ9cGFyc2VEb21Gb3JIdG1sKGh0bWwsXFxcXFxcXFxcXFxcXFxcIi5hcnQtY29udGVudCYmSHRtbFxcXFxcXFxcXFxcXFxcXCIpO2QucHVzaCh7dGl0bGU6dGV4dCxjb2xfdHlwZToncmljaF90ZXh0J30pO3Jlcy5kYXRhPWQ7c2V0SG9tZVJlc3VsdChyZXMpO1xcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwic2RldGFpbF9jb2xfdHlwZVxcXFxcXFwiOiBcXFxcXFxcIm1vdmllXzFcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInNkZXRhaWxfZmluZF9ydWxlXFxcXFxcXCI6IFxcXFxcXFwiKlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwidWFcXFxcXFxcIjogXFxcXFxcXCJtb2JpbGVcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInByZVJ1bGVcXFxcXFxcIjogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInBhZ2VzXFxcXFxcXCI6IFxcXFxcXFwiW11cXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImljb25cXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3ozLmF4MXguY29tLzIwMjEvMTEvMDUvSW16U3ZkLnBuZ1xcXFxcXFwiXFxcXG59LCB7XFxcXG4gICAgXFxcXFxcXCJsYXN0X2NoYXB0ZXJfcnVsZVxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwidGl0bGVcXFxcXFxcIjogXFxcXFxcXCLlj5HnjrDlsI/ova/ku7ZcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImF1dGhvclxcXFxcXFwiOiBcXFxcXFxcIuWxheeEtlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwidXJsXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly93d3cueDZnLmNvbS9odG1sLzIzLWZ5cGFnZS5odG1sXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJ2ZXJzaW9uXFxcXFxcXCI6IDMsXFxcXG4gICAgXFxcXFxcXCJjb2xfdHlwZVxcXFxcXFwiOiBcXFxcXFxcIm1vdmllXzFfdmVydGljYWxfcGljXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJjbGFzc19uYW1lXFxcXFxcXCI6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJjbGFzc191cmxcXFxcXFxcIjogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImFyZWFfbmFtZVxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiYXJlYV91cmxcXFxcXFxcIjogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInNvcnRfbmFtZVxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwieWVhcl9uYW1lXFxcXFxcXCI6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJzb3J0X3VybFxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwieWVhcl91cmxcXFxcXFxcIjogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImZpbmRfcnVsZVxcXFxcXFwiOiBcXFxcXFxcIi5saXN0LXNvZnQmJmxpOy5saXN0LWluZm8mJmEmJlRleHQ7LmxheXVpLWNsZWFyJiZpbWcmJnNyYzsubGlzdC1jYSYmVGV4dDsubGlzdC1pbmZvJiZhJiZocmVmXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJzZWFyY2hfdXJsXFxcXFxcXCI6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJncm91cFxcXFxcXFwiOiBcXFxcXFxcIuWFtuWug1xcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwic2VhcmNoRmluZFxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiZGV0YWlsX2NvbF90eXBlXFxcXFxcXCI6IFxcXFxcXFwidGV4dF8zXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJkZXRhaWxfZmluZF9ydWxlXFxcXFxcXCI6IFxcXFxcXFwiYm9keSYmLmFydGljbGUtZG93bjthJiZUZXh0Oyo7KjthJiZkYXRhLXVybFxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwic2RldGFpbF9jb2xfdHlwZVxcXFxcXFwiOiBcXFxcXFxcIm1vdmllXzFcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInNkZXRhaWxfZmluZF9ydWxlXFxcXFxcXCI6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJ1YVxcXFxcXFwiOiBcXFxcXFxcIm1vYmlsZVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwicHJlUnVsZVxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwicGFnZXNcXFxcXFxcIjogXFxcXFxcXCJbXVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiaWNvblxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiXFxcXG59LCB7XFxcXG4gICAgXFxcXFxcXCJsYXN0X2NoYXB0ZXJfcnVsZVxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwidGl0bGVcXFxcXFxcIjogXFxcXFxcXCJWWEFUXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJhdXRob3JcXFxcXFxcIjogXFxcXFxcXCLlsI/wn5Sl5pifXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJ1cmxcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3d3dy52eGF0LmNvbS9meUFsbF9meXBhZ2UuaHRtbFxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwidmVyc2lvblxcXFxcXFwiOiAxLFxcXFxuICAgIFxcXFxcXFwiY29sX3R5cGVcXFxcXFxcIjogXFxcXFxcXCJtb3ZpZV8xX3ZlcnRpY2FsX3BpY1xcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiY2xhc3NfbmFtZVxcXFxcXFwiOiBcXFxcXFxcIui9r+S7tuS4i+i9vSZXaW5kb3dzJkFuZHJvaWQm55S16KeG6L2v5Lu2JlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiY2xhc3NfdXJsXFxcXFxcXCI6IFxcXFxcXFwiUnVhbkppYW5YaWFaYWkmV2luZG93cyZBbmRyb2lkJlRWJlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiYXJlYV9uYW1lXFxcXFxcXCI6IFxcXFxcXFwi5LyY5oOg5rS75YqoJue9keermea6kOeggSbmnI3liqHlmagm5oqA5pyv5pWZ56iLJlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiYXJlYV91cmxcXFxcXFxcIjogXFxcXFxcXCJZb3VIdWlIdW9Eb25nJldhbmdaaGFuWXVhbk1hJlZQUyZKaVNodUppYW9DaGVuZyZcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInNvcnRfbmFtZVxcXFxcXFwiOiBcXFxcXFxcIuS4gOe6p+mhtemdouaPkOekuumUmeivr+S4uuayoeacieS4i+S4gOmhte+8gVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwieWVhcl9uYW1lXFxcXFxcXCI6IFxcXFxcXFwi5YW25LuWJua4uOaIjybnvZHlj4vliIbkuqsmJlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwic29ydF91cmxcXFxcXFxcIjogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInllYXJfdXJsXFxcXFxcXCI6IFxcXFxcXFwiUWlUYSZZb3VYaSZXYW5nWW91RmVuWGlhbmcmJlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiZmluZF9ydWxlXFxcXFxcXCI6IFxcXFxcXFwiYm9keSYmLnBvc3Q7YSYmdGl0bGU7aW1nJiZzcmM7LnRpbWUmJlRleHQ7YSYmaHJlZlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwic2VhcmNoX3VybFxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vd3d3LnZ4YXQuY29tL3NlYXJjaC5waHA/cT0qKiZwYWdlPWZ5cGFnZVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiZ3JvdXBcXFxcXFxcIjogXFxcXFxcXCLlhbblroNcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInNlYXJjaEZpbmRcXFxcXFxcIjogXFxcXFxcXCJib2R5JiYucG9zdDthJiZ0aXRsZTthJiZocmVmOy50aW1lJiZUZXh0Oy5wb3N0JiZUZXh0O2ltZyYmc3JjXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJkZXRhaWxfY29sX3R5cGVcXFxcXFxcIjogXFxcXFxcXCJtb3ZpZV8xXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJkZXRhaWxfZmluZF9ydWxlXFxcXFxcXCI6IFxcXFxcXFwianM6dmFyIHJlcz17fTt2YXIgZD1bXTtodG1sPWdldFJlc0NvZGUoKTt0ZXh0PXBhcnNlRG9tRm9ySHRtbChodG1sLFxcXFxcXFxcXFxcXFxcXCIuYXJ0aWNsZS1jb250ZW50JiZIdG1sXFxcXFxcXFxcXFxcXFxcIik7ZC5wdXNoKHt0aXRsZTp0ZXh0LGNvbF90eXBlOidyaWNoX3RleHQnfSk7cmVzLmRhdGE9ZDtzZXRIb21lUmVzdWx0KHJlcyk7XFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJzZGV0YWlsX2NvbF90eXBlXFxcXFxcXCI6IFxcXFxcXFwibW92aWVfMVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwic2RldGFpbF9maW5kX3J1bGVcXFxcXFxcIjogXFxcXFxcXCIqXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJ1YVxcXFxcXFwiOiBcXFxcXFxcIm1vYmlsZVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwicHJlUnVsZVxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwicGFnZXNcXFxcXFxcIjogXFxcXFxcXCJbXVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiaWNvblxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiXFxcXG59LCB7XFxcXG4gICAgXFxcXFxcXCJsYXN0X2NoYXB0ZXJfcnVsZVxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwidGl0bGVcXFxcXFxcIjogXFxcXFxcXCLlvILmmJ/ova/ku7ZcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImF1dGhvclxcXFxcXFwiOiBcXFxcXFxcIummmembheaDhVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwidXJsXFxcXFxcXCI6IFxcXFxcXFwiaHR0cDovL3d3dy55eHNzcC5jb20vZnljbGFzcy9wYWdlL2Z5cGFnZVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwidmVyc2lvblxcXFxcXFwiOiAxLFxcXFxuICAgIFxcXFxcXFwiY29sX3R5cGVcXFxcXFxcIjogXFxcXFxcXCJtb3ZpZV8xXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJjbGFzc19uYW1lXFxcXFxcXCI6IFxcXFxcXFwiQW5kcm9pZCZXaW5kb3dzXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJjbGFzc191cmxcXFxcXFxcIjogXFxcXFxcXCJvcy9hbmRyb2lkJm9zL3dpbmRvd3NcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImFyZWFfbmFtZVxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiYXJlYV91cmxcXFxcXFxcIjogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInNvcnRfbmFtZVxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwieWVhcl9uYW1lXFxcXFxcXCI6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJzb3J0X3VybFxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwieWVhcl91cmxcXFxcXFxcIjogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImZpbmRfcnVsZVxcXFxcXFwiOiBcXFxcXFxcIi50ZC1zcy1tYWluLWNvbnRlbnQmJi50ZF9tb2R1bGVfd3JhcDtoMyYmVGV4dDtpbWcmJnNyYzsudGQtbW9kdWxlLW1ldGEtaW5mbyYmVGV4dDthJiZocmVmXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJzZWFyY2hfdXJsXFxcXFxcXCI6IFxcXFxcXFwiaHR0cDovL3d3dy55eHNzcC5jb20vcGFnZS9meXBhZ2U/cz0qKlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiZ3JvdXBcXFxcXFxcIjogXFxcXFxcXCLlhbblroNcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInNlYXJjaEZpbmRcXFxcXFxcIjogXFxcXFxcXCIudGQtc3MtbWFpbi1jb250ZW50JiYudGRfbW9kdWxlX3dyYXA7aDMmJlRleHQ7YSYmaHJlZjs7LnRkLW1vZHVsZS1tZXRhLWluZm8mJlRleHQ7aW1nJiZzcmNcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImRldGFpbF9jb2xfdHlwZVxcXFxcXFwiOiBcXFxcXFxcIm1vdmllXzFcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImRldGFpbF9maW5kX3J1bGVcXFxcXFxcIjogXFxcXFxcXCJqczpcXFxcXFxcXG52YXIgZD1bXTtcXFxcXFxcXG52YXIgaHRtbD1nZXRSZXNDb2RlKCk7XFxcXFxcXFxudmFyIHRhYnM9cGFyc2VEb21Gb3JIdG1sKGh0bWwsJ2JvZHkmJi50ZC1wb3N0LWNvbnRlbnQmJkh0bWwnKS5yZXBsYWNlKC9cXFxcXFxcXFxcXFxcXFxcPHNjcmlwdFtcXFxcXFxcXFxcXFxcXFxcU1xcXFxcXFxcXFxcXFxcXFxzXSo/PFxcXFxcXFxcXFxcXFxcXFwvc2NyaXB0XFxcXFxcXFxcXFxcXFxcXD4vZywnJyk7XFxcXFxcXFxuXFxcXFxcXFxuZC5wdXNoKHtcXFxcXFxcXG5cXFxcXFxcXHRcXFxcXFxcXHRcXFxcXFxcXHR0aXRsZTogdGFicyxcXFxcXFxcXG4gICAgZGVzYzonJyxcXFxcXFxcXG4gICAgcGljX3VybDonJyxcXFxcXFxcXG4gICAgdXJsOicnLFxcXFxcXFxcblxcXFxcXFxcdFxcXFxcXFxcdGNvbF90eXBlOiAncmljaF90ZXh0J1xcXFxcXFxcbn0pO1xcXFxcXFxcblxcXFxcXFxcbnNldEhvbWVSZXN1bHQoe2RhdGE6ZH0pO1xcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwic2RldGFpbF9jb2xfdHlwZVxcXFxcXFwiOiBcXFxcXFxcIm1vdmllXzFcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInNkZXRhaWxfZmluZF9ydWxlXFxcXFxcXCI6IFxcXFxcXFwiKlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwidWFcXFxcXFxcIjogXFxcXFxcXCJwY1xcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwicHJlUnVsZVxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwicGFnZXNcXFxcXFxcIjogXFxcXFxcXCJbXVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiaWNvblxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiXFxcXG59LCB7XFxcXG4gICAgXFxcXFxcXCJsYXN0X2NoYXB0ZXJfcnVsZVxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwidGl0bGVcXFxcXFxcIjogXFxcXFxcXCJhcGs0YWxsXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJhdXRob3JcXFxcXFxcIjogXFxcXFxcXCJ0ZWVcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInVybFxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vYXBrNGFsbC5jb20vYW5kcm9pZC9nZW5yZXMvZnlBbGwvcGFnZS9meXBhZ2UvXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJ2ZXJzaW9uXFxcXFxcXCI6IDgsXFxcXG4gICAgXFxcXFxcXCJjb2xfdHlwZVxcXFxcXFwiOiBcXFxcXFxcIm1vdmllXzFfbGVmdF9waWNcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImNsYXNzX25hbWVcXFxcXFxcIjogXFxcXFxcXCJBcnQg77yG77yGIERlc2lnbiZBdXRvIO+8hu+8hiBWZWhpY2xlcyZCb29rcyDvvIbvvIYgUmVmZXJlbmNlJkJ1c2luZXNzJkNvbWljcyZDb21tdW5pY2F0aW9uJkVkdWNhdGlvbiZFbnRlcnRhaW5tZW50JkZpbmFuY2UmSGVhbHRoIO+8hu+8hiBGaXRuZXNzJkhvdXNlIO+8hu+8hiBIb21lJkxpYnJhcmllcyDvvIbvvIYgRGVtbyZMaWZlc3R5bGUmTWFwcyDvvIbvvIYgTmF2aWdhdGlvbiZNZWRpY2FsJk11c2ljIO+8hu+8hiBBdWRpbyZOZXdzIO+8hu+8hiBNYWdhemluZXMmUGFyZW50aW5nJlBlcnNvbmFsaXphdGlvbiZQaG90b2dyYXBoeSZQcm9kdWN0aXZpdHkmU2hvcHBpbmcmU29jaWFsJlRvb2xzJlRyYXZlbCDvvIbvvIYgTG9jYWwmVmlkZW8gUGxheWVycyDvvIbvvIYgRWRpdG9ycyZXZWF0aGVyXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJ0eXBlXFxcXFxcXCI6IFxcXFxcXFwidG9vbFxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiY2xhc3NfdXJsXFxcXFxcXCI6IFxcXFxcXFwiYXJ0LWRlc2lnbi8mYXV0by12ZWhpY2xlcy8mYm9va3MtcmVmZXJlbmNlLyZidXNpbmVzcy1hcHAvJmNvbWljcy1hcHAvJmNvbW11bmljYXRpb24tYXBwLyZlZHVjYXRpb24tbW9kLWFwcC8mZW50ZXJ0YWlubWVudC1hcHBzLyZmaW5hbmNlLyZoZWFsdGgtZml0bmVzcy8maG91c2UtaG9tZS8mbGlicmFyaWVzLWRlbW8vJmxpZmVzdHlsZS1hcHAvJm1hcHMtbmF2aWdhdGlvbi8mbWVkaWNhbC1hcHAvJm11c2ljLWF1ZGlvLyZuZXdzLW1hZ2F6aW5lcy8mcGFyZW50aW5nLyZwZXJzb25hbGl6YXRpb24tbW9kLWFwcC8mcGhvdG9ncmFwaHkvJnByb2R1Y3Rpdml0eS1hcHAvJnNob3BwaW5nLWFwcC8mc29jaWFsLWFwcC8mdG9vbHMtbW9kLWFwcC8mdHJhdmVsLWxvY2FsLWFwcC8mdmlkZW8tcGxheWVycy1lZGl0b3JzLyZ3ZWF0aGVyLWFwcC9cXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImFyZWFfbmFtZVxcXFxcXFwiOiBcXFxcXFxcIkFjdGlvbiZBZHZlbnR1cmUmQXJjYWRlJkJvYXJkJkNhcmQmQ2FzdWFsJkVkdWNhdGlvbmFsJk11c2ljJlB1enpsZSZSYWNpbmcmUm9sZSBQbGF5aW5nJlNpbXVsYXRpb24mU3BvcnRzJlN0cmF0ZWd5JlRyaXZpYSZXb3JkXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJhcmVhX3VybFxcXFxcXFwiOiBcXFxcXFxcImFjdGlvbi1nYW1lcy8mYWR2ZW50dXJlLWdhbWVzLyZhcmNhZGUtZ2FtZXMvJmJvYXJkLWdhbWVzLyZjYXJkLWdhbWVzLyZjYXN1YWwtZ2FtZXMvJmVkdWNhdGlvbmFsLWdhbWVzLyZtdXNpYy1nYW1lcy8mcHV6emxlLWdhbWVzLyZyYWNpbmctZ2FtZXMvJnJvbGUtcGxheWluZy1nYW1lcy8mc2ltdWxhdGlvbi1hcGstZ2FtZXMvJnNwb3J0cy1nYW1lcy8mc3RyYXRlZ3ktZ2FtZXMvJnRyaXZpYS1nYW1lcy8md29yZC1nYW1lcy9cXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInNvcnRfbmFtZVxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwieWVhcl9uYW1lXFxcXFxcXCI6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJzb3J0X3VybFxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwieWVhcl91cmxcXFxcXFxcIjogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImZpbmRfcnVsZVxcXFxcXFwiOiBcXFxcXFxcIm1haW4mJmFydGljbGU7aDMmJlRleHQ7aW1nLDEmJnNyYztkZCYmVGV4dDthJiZocmVmLmpzOmlucHV0KycjaW1tZXJzaXZlVGhlbWUjJ1xcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwic2VhcmNoX3VybFxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vYXBrNGFsbC5jb20vc2VhcmNoLyoqL3BhZ2UvZnlwYWdlL1xcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiZ3JvdXBcXFxcXFxcIjogXFxcXFxcXCLlhbblroNcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInNlYXJjaEZpbmRcXFxcXFxcIjogXFxcXFxcXCJtYWluJiZhcnRpY2xlO2gzJiZUZXh0O2EmJmhyZWYuanM6aW5wdXQrJyNpbW1lcnNpdmVUaGVtZSMnO2RkJiZUZXh0Oyo7aW1nLDEmJnNyY1xcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiZGV0YWlsX2NvbF90eXBlXFxcXFxcXCI6IFxcXFxcXFwicmljaF90ZXh0XFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJkZXRhaWxfZmluZF9ydWxlXFxcXFxcXCI6IFxcXFxcXFwianM6XFxcXFxcXFxudmFyIHJlcyA9IHt9O1xcXFxcXFxcbnZhciBkID0gW107XFxcXFxcXFxudmFyIGh0bWwgPSBnZXRSZXNDb2RlKCk7XFxcXFxcXFxudmFyIGRlc2MgPSBwZGZoKGh0bWwsIFxcXFxcXFxcXFxcXFxcXCIuZGVzYyYmVGV4dFxcXFxcXFxcXFxcXFxcXCIpICsgXFxcXFxcXFxcXFxcXFxcIlxcXFxcXFxcXFxcXFxcXFxuXFxcXFxcXFxcXFxcXFxcIiArIHBkZmgoaHRtbCwgXFxcXFxcXFxcXFxcXFxcImgyJiZUZXh0XFxcXFxcXFxcXFxcXFxcIikgKyBcXFxcXFxcXFxcXFxcXFwiICAgXFxcXFxcXFxcXFxcXFxcXC8gICAxMFxcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxuXFxcXFxcXFxudmFyIGRsID0gcGQoaHRtbCwgXFxcXFxcXFxcXFxcXFxcIi5kbGxpbmtzLDEmJmEmJmhyZWZcXFxcXFxcXFxcXFxcXFwiKSArIFxcXFxcXFxcXFxcXFxcXCIjaW1tZXJzaXZlVGhlbWUjXFxcXFxcXFxcXFxcXFxcIjtcXFxcXFxcXG5cXFxcXFxcXG5kLnB1c2goeyAvL+agh+mimOOAgee8qeeVpeWbvuOAgeeugOS7i1xcXFxcXFxcbiAgICB0aXRsZTogXFxcXFxcXFxcXFxcXFxcIuKAnOKAnOKAneKAnTxiaWc+XFxcXFxcXFxcXFxcXFxcIiArIHBkZmgoaHRtbCwgXFxcXFxcXFxcXFxcXFxcImgxJiZUZXh0XFxcXFxcXFxcXFxcXFxcIikgKyBcXFxcXFxcXFxcXFxcXFwiPC9iaWc+XFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFxcXFxcXFxcXCJtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgZGVzYzogZGVzYyxcXFxcXFxcXG4gICAgcGljX3VybDogcGQoaHRtbCwgXFxcXFxcXFxcXFxcXFxcImFydGljbGUmJmltZywxJiZzcmNcXFxcXFxcXFxcXFxcXFwiKSxcXFxcXFxcXG4gICAgdXJsOiBkbFxcXFxcXFxcbn0pO1xcXFxcXFxcblxcXFxcXFxcbmQucHVzaCh7IC8v57q/5p2hXFxcXFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcXFxcXFxcXFwibGluZV9ibGFua1xcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxufSk7XFxcXFxcXFxuXFxcXFxcXFxudmFyIGxpc3QgPSBwZGZhKGh0bWwsIFxcXFxcXFxcXFxcXFxcXCIuYXBwLWRlc2MmJnB8fGxpXFxcXFxcXFxcXFxcXFxcIik7XFxcXFxcXFxuZm9yIChpIG9mIGxpc3QpIHtcXFxcXFxcXG4gICAgZC5wdXNoKHtcXFxcXFxcXG4gICAgICAgIHRpdGxlOiBwZGZoKGksIFxcXFxcXFxcXFxcXFxcXCJwfHxsaSYmVGV4dFxcXFxcXFxcXFxcXFxcXCIpLFxcXFxcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFxcXFxcXFxcXCJyaWNoX3RleHRcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcXFxcXG4gICAgICAgICAgICB0ZXh0U2l6ZTogMTMsXFxcXFxcXFxuICAgICAgICAgICAgY2xpY2s6IHRydWVcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgfSk7XFxcXFxcXFxufTtcXFxcXFxcXG5cXFxcXFxcXG52YXIgZ2FsbGVyeSA9IHBkZmEoaHRtbCwgXFxcXFxcXFxcXFxcXFxcIiNnYWxsZXJ5LTEmJmFcXFxcXFxcXFxcXFxcXFwiKTtcXFxcXFxcXG5cXFxcXFxcXG5mb3IgKGxldCBuIG9mIGdhbGxlcnkpIHtcXFxcXFxcXG4gICAgZC5wdXNoKHtcXFxcXFxcXG4gICAgICAgIHRpdGxlOiBwZGZoKG4sIFxcXFxcXFxcXFxcXFxcXCJpbWcsMSYmdGl0bGVcXFxcXFxcXFxcXFxcXFwiKSxcXFxcXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcXFxcXFxcXFwicGljXzNfc3F1YXJlXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgIHBpY191cmw6IHBkKG4sIFxcXFxcXFxcXFxcXFxcXCJpbWcsMSYmc3JjXFxcXFxcXFxcXFxcXFxcIikgKyAnQFJlZmVyZXI9JyxcXFxcXFxcXG4gICAgICAgIHVybDogcGQobiwgXFxcXFxcXFxcXFxcXFxcImltZywxJiZzcmNcXFxcXFxcXFxcXFxcXFwiKSArICcjYXV0b1BhZ2UjI3JlYWRUaGVtZSMnXFxcXFxcXFxuICAgIH0pO1xcXFxcXFxcbn07XFxcXFxcXFxuXFxcXFxcXFxuZC5wdXNoKHsgLy/nur/mnaFcXFxcXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFxcXFxcXFxcXCJsaW5lX2JsYW5rXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG59KTtcXFxcXFxcXG5cXFxcXFxcXG4vL+W6lemDqOS4i+i9veaooeWdl1xcXFxcXFxcbmQucHVzaCh7XFxcXFxcXFxuICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxcXFxcXFxuICAgIHRpdGxlOiBcXFxcXFxcXFxcXFxcXFwi4oCc4oCc4oCd4oCdPGJpZz5cXFxcXFxcXFxcXFxcXFwiICsgJ+eCueatpOS4i+i9vScgKyBcXFxcXFxcXFxcXFxcXFwiPC9iaWc+XFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgdXJsOiBkbFxcXFxcXFxcbn0pO1xcXFxcXFxcblxcXFxcXFxcbmQucHVzaCh7IC8v57q/5p2hXFxcXFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcXFxcXFxcXFwibGluZV9ibGFua1xcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxufSk7XFxcXFxcXFxuXFxcXFxcXFxucmVzLmRhdGEgPSBkO1xcXFxcXFxcbnNldFJlc3VsdChyZXMpO1xcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwic2RldGFpbF9jb2xfdHlwZVxcXFxcXFwiOiBcXFxcXFxcIm1vdmllXzFcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInNkZXRhaWxfZmluZF9ydWxlXFxcXFxcXCI6IFxcXFxcXFwiKlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwidWFcXFxcXFxcIjogXFxcXFxcXCJtb2JpbGVcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInByZVJ1bGVcXFxcXFxcIjogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcInBhZ2VzXFxcXFxcXCI6IFxcXFxcXFwiW11cXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImljb25cXFxcXFxcIjogXFxcXFxcXCJodHRwczovL2FwazRhbGwuY29tL2Zhdmljb24uaWNvXFxcXFxcXCJcXFxcbn1dXFxcIn1dXCIsXCJwcm94eVwiOlwiXCJ9IiwicGljVXJsIjoiaGlrZXI6Ly9pbWFnZXMvaWNvbjEiLCJ0aXRsZSI6IjQyM0Rvd24ifQ==
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement