Advertisement
xiaomianao666

邀您一起看:失控玩家

Jan 15th, 2022
292
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥失控玩家@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcInRleHRfMVwiLFwibmFtZVwiOlwiQ2xhc3NUYWJcIixcInBhdGhcIjpcIkNsYXNzVGFiXCIsXCJydWxlXCI6XCJmdW5jdGlvbiBDbGFzc1RhYihjbGFzc0FycmF5LCBwYXJhbXMpIHtcXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBwYXJhbXMpXFxuICAgIHRoaXMuYXJyID0gY2xhc3NBcnJheS5tYXAodiA9PiB0aGlzLmluaXQodikpXFxuICAgIHRoaXMuc2lnbiA9ICckJyArIE1ZX1JVTEUudGl0bGUgKyAnXycgKyAodGhpcy5uYW1lIHx8ICcnKSArICdfJ1xcbiAgICB0aGlzLmNvbG9yID0gdGhpcy5jb2xvciB8fCAnIzEyYjY2OCdcXG4gICAgdGhpcy5ib3VuZGFyeSA9IHRoaXMuYm91bmRhcnkgfHwgJ2JsYW5rX2Jsb2NrJ1xcbn1cXG5DbGFzc1RhYi5wcm90b3R5cGUgPSB7XFxuICAgIGNvbnN0cnVjdG9yOiBDbGFzc1RhYixcXG4gICAgbG9hZChlbCkge1xcbiAgICAgICAgbGV0IGZvbGRlZCA9IGdldFZhcignZm9sZF8nICsgdGhpcy5zaWduLCAnJylcXG4gICAgICAgIGlmICh0aGlzLmZvbGQpIGVsLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHNwYW4gc3R5bGU9XFxcImNvbG9yOiMwNDllZmZcXFwiPicgKyAoZm9sZGVkID8gJ+KWticgOiAn4pa8JyksXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzaWduLCBmb2xkZWQpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0VmFyKCdmb2xkXycgKyBzaWduLCB7ICcnOiAnVCcsICdUJzogJycgfSBbZm9sZGVkXSlcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9LCB0aGlzLnNpZ24sIGZvbGRlZCksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgfSlcXG4gICAgICAgIGxldCBhcnIgPSBmb2xkZWQgPyBbdGhpcy5hcnJbMF1dIDogdGhpcy5hcnJcXG4gICAgICAgIGFyci5mb3JFYWNoKCh2KSA9PiB7XFxuICAgICAgICAgICAgbGV0IHsgaWQsIGNsYXNzX25hbWUsIGNsYXNzX3VybCB9ID0gdixcXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmdldENsYXNzKGlkKSlcXG4gICAgICAgICAgICBjbGFzc19uYW1lLmZvckVhY2goKG5hbWUsIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHVybCA9IGNsYXNzX3VybFtpXSxcXG4gICAgICAgICAgICAgICAgICAgIG5vdyA9IEpTT04uc3RyaW5naWZ5KHsgbmFtZTogbmFtZSwgdXJsOiB1cmwgfSlcXG4gICAgICAgICAgICAgICAgZWwucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogKHNlbGVjdGVkID09IG5vdyA/ICfigJzigJzigJ3igJ08c3BhbiBzdHlsZT1cXFwiY29sb3I6JyArIHRoaXMuY29sb3IgKyAnXFxcIj48Yj4nIDogJycpICsgbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc2lnbiwgaWQsIG5vdykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcihzaWduICsgaWQsIG5vdylcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoc2lnbiwgbm93KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgICAgIH0sIHRoaXMuc2lnbiwgaWQsIG5vdyksXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBlbC5wdXNoKHsgY29sX3R5cGU6IHRoaXMuYm91bmRhcnkgfSlcXG4gICAgICAgIH0pXFxuICAgIH0sXFxuICAgIGluaXQoY2xhc3NPYmplY3QpIHtcXG4gICAgICAgIGlmICh0eXBlb2YgY2xhc3NPYmplY3QuY2xhc3NfbmFtZSA9PSAnc3RyaW5nJylcXG4gICAgICAgICAgICBjbGFzc09iamVjdC5jbGFzc19uYW1lID0gY2xhc3NPYmplY3QuY2xhc3NfbmFtZS5zcGxpdCgnJicpXFxuICAgICAgICBpZiAodHlwZW9mIGNsYXNzT2JqZWN0LmNsYXNzX3VybCA9PSAnc3RyaW5nJylcXG4gICAgICAgICAgICBjbGFzc09iamVjdC5jbGFzc191cmwgPSBjbGFzc09iamVjdC5jbGFzc191cmwuc3BsaXQoJyYnKS5tYXAoKHYpID0+IHYudHJpbSgpKVxcbiAgICAgICAgcmV0dXJuIGNsYXNzT2JqZWN0XFxuICAgIH0sXFxuICAgIHB1c2goY2xhc3NPYmplY3QpIHtcXG4gICAgICAgIHRoaXMuYXJyLnB1c2godGhpcy5pbml0KGNsYXNzT2JqZWN0KSlcXG4gICAgfSxcXG4gICAgZ2V0Q2xhc3MoaWQpIHtcXG4gICAgICAgIGxldCBkZWZhdWx0Q2xhc3MgPSB0aGlzLmFyci5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PSBpZClcXG4gICAgICAgIGlmIChkZWZhdWx0Q2xhc3MpIGRlZmF1bHRDbGFzcyA9IEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICBuYW1lOiBkZWZhdWx0Q2xhc3MuY2xhc3NfbmFtZVswXSxcXG4gICAgICAgICAgICB1cmw6IGRlZmF1bHRDbGFzcy5jbGFzc191cmxbMF1cXG4gICAgICAgIH0pXFxuICAgICAgICBlbHNlIHRocm93IG5ldyBFcnJvcignY2Fubm90IGZpbmQgaWQ6ICcgKyBpZCArICcgaW4gY2xhc3NUYWI6ICcgKyB0aGlzLnNpZ24pXFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShnZXRWYXIodGhpcy5zaWduICsgaWQsIGRlZmF1bHRDbGFzcykpXFxuICAgIH0sXFxuICAgIGdldExhc3RDbGljaygpIHtcXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGdldFZhcih0aGlzLnNpZ24sICd7fScpKVxcbiAgICB9LFxcbiAgICBzZXRVcmwodXJsKSB7XFxuICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UoL1xcXFwkXFxcXHsoW159XSopXFxcXH0vZywgKF8sIGlkKSA9PiB0aGlzLmdldENsYXNzKGlkKS51cmwpXFxuICAgIH1cXG59XFxuJC5leHBvcnRzID0gQ2xhc3NUYWJcXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIummlumhtVwiLFwicGF0aFwiOlwiaW5kZXhMb2FkXCIsXCJydWxlXCI6XCJqczpcXG5sZXQgbXlDb2xsZWN0aW9uX2VsID0gW10sXFxuICAgIHBhZ2VOdW0gPSBwYXJzZUludChNWV9VUkwuc3BsaXQoJyMnKVsxXSksXFxuICAgIFJVTEUgPSBNWV9QQVJBTVMuUlVMRSxcXG4gICAgZnlBbGwgPSBSVUxFLnVybC5pbmNsdWRlcygnZnlBbGwnKSxcXG4gICAgLy8g5Yqg6L29Q2xhc3NUYWLnu4Tku7ZcXG4gICAgQ2xhc3NUYWIgPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9DbGFzc1RhYj9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSksXFxuICAgIHRhYkhlYWRlciA9IFtdXFxuXFxuaWYgKFJVTEUuY2xhc3NfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5Y2xhc3MnLFxcbiAgICBjbGFzc19uYW1lOiBSVUxFLmNsYXNzX25hbWUsXFxuICAgIGNsYXNzX3VybDogUlVMRS5jbGFzc191cmxcXG59KVxcbmlmIChSVUxFLmFyZWFfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5YXJlYScsXFxuICAgIGNsYXNzX25hbWU6IFJVTEUuYXJlYV9uYW1lLFxcbiAgICBjbGFzc191cmw6IFJVTEUuYXJlYV91cmxcXG59KVxcbmlmIChSVUxFLnllYXJfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5eWVhcicsXFxuICAgIGNsYXNzX25hbWU6IFJVTEUueWVhcl9uYW1lLFxcbiAgICBjbGFzc191cmw6IFJVTEUueWVhcl91cmxcXG59KVxcbmlmIChSVUxFLnNvcnRfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5c29ydCcsXFxuICAgIGNsYXNzX25hbWU6IFJVTEUuc29ydF9uYW1lLFxcbiAgICBjbGFzc191cmw6IFJVTEUuc29ydF91cmxcXG59KVxcbnRhYkhlYWRlciA9IG5ldyBDbGFzc1RhYih0YWJIZWFkZXIsIHsgbmFtZTogUlVMRS50aXRsZSB9KVxcbmlmIChwYWdlTnVtID09IDEpIHtcXG4gICAgYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAnY2xlYXJWYXIoXFxcIm15Q29sbGVjdGlvbi1zZWFyY2hNb2RlXFxcIiknKVxcbiAgICBwdXRWYXIoJ215Q29sbGVjdGlvbi1zZWFyY2hNb2RlJywgUlVMRS50aXRsZSlcXG4gICAgdGFiSGVhZGVyLmxvYWQobXlDb2xsZWN0aW9uX2VsKVxcbiAgICBpZiAoUlVMRS5zZWFyY2hfdXJsKSBteUNvbGxlY3Rpb25fZWwucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuaQnOe0olxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwi5pCc5L2g5oOz6KaB55qELi4uXFxcIixcXG4gICAgICAgIHVybDogJ1xcXCJoaWtlcjovL3BhZ2Uvc2luZ2xlU2VhcmNoP2tleXdvcmQ9XFxcIitpbnB1dCtcXFwiJnBhZ2U9ZnlwYWdlXFxcIicsXFxuICAgICAgICBleHRyYTogeyBydWxlOiBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSwgUlVMRTogUlVMRSB9LFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgIH0pXFxufVxcbi8vIOWkhOeQhk1ZX1VSTOWSjE1ZX1JVTEVcXG5NWV9SVUxFLnVhID0gUlVMRS51YVxcbk1ZX1JVTEUudGl0bGUgPSBSVUxFLnRpdGxlXFxuTVlfUlVMRS5jb2xfdHlwZSA9IFJVTEUuY29sX3R5cGVcXG5NWV9SVUxFLmRldGFpbF9jb2xfdHlwZSA9IFJVTEUuZGV0YWlsX2NvbF90eXBlXFxuTVlfUlVMRS5maW5kX3J1bGUgPSBSVUxFLmZpbmRfcnVsZVxcbk1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IFJVTEUuZGV0YWlsX2ZpbmRfcnVsZVxcbk1ZX1JVTEUucHJlUnVsZSA9IFJVTEUucHJlUnVsZVxcbk1ZX1JVTEUucGFnZUxpc3QgPSBKU09OLnBhcnNlKFJVTEUucGFnZXMgfHwgJ1tdJylcXG5NWV9SVUxFLnBhZ2VzID0gSlNPTi5zdHJpbmdpZnkoTVlfUlVMRS5wYWdlTGlzdClcXG5NWV9SVUxFLmxhc3RfY2hhcHRlcl9ydWxlID0gUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZVxcbk1ZX1JVTEUucGFyYW1zID0ge31cXG5cXG5jb25zdCB7IHJ1bkNvZGUsIHVybFBhcnNlIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS91dGlsaXR5P3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpKVxcbnZhciB7IE1ZX1VSTCwgTVlfVVJMX09wdGlvbnMgfSA9IHVybFBhcnNlKFJVTEUudXJsLCB7fSwgcGFnZU51bSwgKHVybCkgPT4ge1xcbiAgICB1cmxbMF0gPSBmeUFsbCA/IHVybFswXS5yZXBsYWNlKC9meUFsbC9nLCAnJCR7ZnlBbGx9JykgOiB1cmxbMF0ucmVwbGFjZSgvZnkoY2xhc3N8YXJlYXx5ZWFyfHNvcnQpL2csICckJHtmeSQxfScpXFxuICAgIHVybFswXSA9IHRhYkhlYWRlci5zZXRVcmwodXJsWzBdKVxcbn0pLFxcbiAgICBpbmRleEh0bWwgPSBmZXRjaChNWV9VUkwsIE1ZX1VSTF9PcHRpb25zKVxcbk1ZX1JVTEUudXJsID0gTVlfVVJMXFxuTVlfUlVMRS51cmxIZWFkZXJzID0gTVlfVVJMX09wdGlvbnMuaGVhZGVyc1xcbi8vIOato+aWh+ino+aekFxcbmlmIChwYWdlTnVtID09IDEpIGV2YWwoTVlfUlVMRS5wcmVSdWxlKVxcbmlmIChNWV9SVUxFLmZpbmRfcnVsZS5zdGFydHNXaXRoKCdqczonKSkge1xcbiAgICBmdW5jdGlvbiBnZXRVcmwoKSB7XFxuICAgICAgICByZXR1cm4gTVlfVVJMXFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gZ2V0UmVzQ29kZSgpIHtcXG4gICAgICAgIHJldHVybiBpbmRleEh0bWxcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiBzZXRSZXN1bHQoZWwsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpIHtcXG4gICAgICAgIHBhcmFtMSA9IENBTExCQUNLX0tFWVxcbiAgICAgICAgcGFyYW0yID0gTVlfUlVMRVxcbiAgICAgICAgcGFyYW0zID0gTVlfVFlQRVxcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWwuZGF0YSkpIGVsID0gZWwuZGF0YVxcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobXlDb2xsZWN0aW9uX2VsLCBlbC5tYXAoKHYpID0+IHtcXG4gICAgICAgICAgICBsZXQgTVlfX1JVTEUgPSBPYmplY3QuYXNzaWduKHt9LCBNWV9SVUxFKVxcbiAgICAgICAgICAgIHYuY29sX3R5cGUgPSB2LmNvbF90eXBlIHx8IE1ZX1JVTEUuY29sX3R5cGVcXG5cXG4gICAgICAgICAgICBpZiAoIXYudXJsIHx8IFsncnVsZScsICdwaWNzJywgJ3RvYXN0JywgJ2lucHV0JywgJ2NvcHknLCAnZWRpdEZpbGUnLCAneDUnLCAneDVXZWJWaWV3JywgJ3g1UGxheScsICd3ZWInLCAnc2VsZWN0JywgJ3g1UnVsZScsICd3ZWJSdWxlJ10uZmluZCgodnYpID0+IHYudXJsLnN0YXJ0c1dpdGgodnYgKyAnOi8vJykpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5pbmNsdWRlcygnQHJ1bGU9JykpIHtcXG4gICAgICAgICAgICAgICAgbGV0IFtfLCB1cmwsIHJ1bGVdID0gdi51cmwubWF0Y2goL14oW1xcXFxzXFxcXFNdKj8pQHJ1bGU9KFtcXFxcc1xcXFxTXSopJC8pXFxuICAgICAgICAgICAgICAgIHYudXJsID0gdXJsXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBydWxlXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9jb2xfdHlwZSA9IE1ZX1JVTEUuY29sX3R5cGVcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSkge1xcbiAgICAgICAgICAgICAgICBpZiAodi51cmwuaW5jbHVkZXMoJ3J1bGU9JykgfHwgKHYuZXh0cmEgfHwge30pLnJ1bGUpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgICAgICBsZXQgW18sIHBhdGgsIHBhcmFtc10gPSB2LnVybC5zcGxpdCgnIycpWzBdLm1hdGNoKC9eaGlrZXI6XFxcXC9cXFxcL3BhZ2VcXFxcLyguKz8pKD86XFxcXD8oLiopKT8kLyksXFxuICAgICAgICAgICAgICAgICAgICBzdWJQYWdlID0gTVlfUlVMRS5wYWdlTGlzdC5maW5kKCh2KSA9PiB2LnBhdGggPT0gcGF0aCksXFxuICAgICAgICAgICAgICAgICAgICBzdWJVcmwgPSAocGFyYW1zIHx8ICcnKS5zcGxpdCgnJicpLmZpbmQoKHYpID0+IHYuc3RhcnRzV2l0aCgndXJsPScpKVxcbiAgICAgICAgICAgICAgICB2LnVybCA9IHN1YlVybCA/IHN1YlVybC5zbGljZSg0KS5yZXBsYWNlKC/vvJ/vvJ8vZywgJz8nKS5yZXBsYWNlKC/vvIbvvIYvZywgJyYnKSA6ICh2LmV4dHJhIHx8IHt9KS51cmwgfHwgJ2hpa2VyOi8vZW1wdHk/JyArIChwYXJhbXMgfHwgJycpXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBzdWJQYWdlLnJ1bGVcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gc3ViUGFnZS5jb2xfdHlwZVxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5wYXJhbXMgPSB2LmV4dHJhIHx8IHt9XFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxuICAgICAgICAgICAgICAgIHYudXJsID0gdi51cmwucmVwbGFjZSgnLmpzOicsICcuanM6XFxcXG5pZihNWV9SVUxFKU9iamVjdC5hc3NpZ24oTVlfUlVMRSwnICsgJC5zdHJpbmdpZnkoeyBwYWdlczogTVlfUlVMRS5wYWdlcywgcGFnZUxpc3Q6IE1ZX1JVTEUucGFnZUxpc3QsIGZpbmRfcnVsZTogJycsIHBhcmFtczogJycgfSkgKyAnKTtNWV9VUkw9XFxcIicgKyBNWV9VUkwgKyAnXFxcIjsnKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIU1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSB8fCB2LnVybC5zdGFydHNXaXRoKCdoaWtlcjovLycpKSB7IHJldHVybiB2IH1cXG4gICAgICAgICAgICB2LmV4dHJhID0geyB1cmw6IHYudXJsLCBSVUxFOiBNWV9fUlVMRSwgcGFnZVRpdGxlOiB2LnRpdGxlIH1cXG4gICAgICAgICAgICB2LnVybCA9ICdoaWtlcjovL3BhZ2UvZGV0YWlsTG9hZD9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKVxcbiAgICAgICAgICAgIGlmICh2LmV4dHJhLlJVTEUudXJsLmluY2x1ZGVzKCcjaW1tZXJzaXZlVGhlbWUjJykpIHYudXJsICs9ICcmI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgfSkpXFxuICAgICAgICBtZXRob2Rfc2V0UmVzdWx0Lmludm9rZShqYXZhQ29udGV4dCwgbXlDb2xsZWN0aW9uX2VsLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKVxcbiAgICB9XFxuICAgIHNldEhvbWVSZXN1bHQgPSBzZXRSZXN1bHRcXG4gICAgc2V0U2VhcmNoUmVzdWx0ID0gc2V0UmVzdWx0XFxuXFxuICAgIGV2YWwoTVlfUlVMRS5maW5kX3J1bGUuc2xpY2UoMykpXFxufSBlbHNlIHtcXG4gICAgbGV0IGZpbmRSdWxlID0gTVlfUlVMRS5maW5kX3J1bGUuc3BsaXQoJzsnKVxcbiAgICBwYXJzZURvbUZvckFycmF5KGluZGV4SHRtbCwgZmluZFJ1bGUuc2hpZnQoKSkuZm9yRWFjaCgoZGF0YSkgPT4ge1xcbiAgICAgICAgbGV0IFt0aXRsZSwgaW1nLCBkZXNjLCB1cmxdID0gZmluZFJ1bGUubWFwKCh2LCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAodiA9PSAnKicpIHJldHVybiAnJ1xcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB2ID0gKGkgPT0gMSB8fCBpID09IDMpID9cXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvbShkYXRhLCB2KSA6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VEb21Gb3JIdG1sKGRhdGEsIHYpXFxuICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSAzKSB2ID0gcnVuQ29kZSh2KVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gJycgfVxcbiAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIHJlcyA9IHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcXG4gICAgICAgICAgICAgICAgZGVzYzogZGVzYyxcXG4gICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBNWV9SVUxFLmNvbF90eXBlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgaWYgKHJlcy51cmwpIHtcXG4gICAgICAgICAgICBpZiAocmVzLnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxuICAgICAgICAgICAgICAgIHJlcy51cmwgPSByZXMudXJsLnJlcGxhY2UoJy5qczonLCAnLmpzOlxcXFxuaWYoTVlfUlVMRSlPYmplY3QuYXNzaWduKE1ZX1JVTEUsJyArICQuc3RyaW5naWZ5KHsgcGFnZXM6IE1ZX1JVTEUucGFnZXMsIHBhZ2VMaXN0OiBNWV9SVUxFLnBhZ2VMaXN0LCBmaW5kX3J1bGU6ICcnLCBwYXJhbXM6ICcnIH0pICsgJyk7TVlfVVJMPVxcXCInICsgTVlfVVJMICsgJ1xcXCI7JylcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKE1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSkge1xcbiAgICAgICAgICAgICAgICByZXMuZXh0cmEgPSB7IHVybDogdXJsLCBSVUxFOiBNWV9SVUxFLCBwYWdlVGl0bGU6IHRpdGxlIH1cXG4gICAgICAgICAgICAgICAgcmVzLnVybCA9ICdoaWtlcjovL3BhZ2UvZGV0YWlsTG9hZD9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKVxcbiAgICAgICAgICAgICAgICBpZiAocmVzLmV4dHJhLlJVTEUudXJsLmluY2x1ZGVzKCcjaW1tZXJzaXZlVGhlbWUjJykpIHJlcy51cmwgKz0gJyYjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIG15Q29sbGVjdGlvbl9lbC5wdXNoKHJlcylcXG4gICAgfSlcXG4gICAgc2V0UmVzdWx0KG15Q29sbGVjdGlvbl9lbClcXG59XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLor6bmg4VcIixcInBhdGhcIjpcImRldGFpbExvYWRcIixcInJ1bGVcIjpcImpzOlxcbmxldCBteUNvbGxlY3Rpb25fZWwgPSBbXSxcXG4gICAgcGFnZU51bSA9IDFcXG5cXG4vLyDlpITnkIZNWV9VUkzlkoxNWV9SVUxFXFxubGV0IFJVTEUgPSBNWV9QQVJBTVMuUlVMRVxcbk1ZX1JVTEUudWEgPSBSVUxFLnVhXFxuTVlfUlVMRS50aXRsZSA9IFJVTEUudGl0bGVcXG5NWV9SVUxFLmNvbF90eXBlID0gUlVMRS5kZXRhaWxfY29sX3R5cGVcXG5NWV9SVUxFLmZpbmRfcnVsZSA9IFJVTEUuZGV0YWlsX2ZpbmRfcnVsZVxcbk1ZX1JVTEUucHJlUnVsZSA9IFJVTEUucHJlUnVsZVxcbk1ZX1JVTEUucGFnZUxpc3QgPSBSVUxFLnBhZ2VMaXN0XFxuTVlfUlVMRS5wYWdlcyA9IFJVTEUucGFnZXNcXG5NWV9SVUxFLmxhc3RfY2hhcHRlcl9ydWxlID0gUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZVxcbk1ZX1JVTEUucGFyYW1zID0gUlVMRS5wYXJhbXNcXG5cXG5jb25zdCB7IHJ1bkNvZGUsIHVybFBhcnNlIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS91dGlsaXR5P3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpKVxcbmxldCBmeXBhZ2VGbGFnID0gTVlfUEFSQU1TLnVybC5pbmRleE9mKCdmeXBhZ2UnKVxcbmlmIChmeXBhZ2VGbGFnID49IDApIHBhZ2VOdW0gPSBwYXJzZUludCgvXlxcXFxkKy8uZXhlYyhNWV9VUkwuc2xpY2UoZnlwYWdlRmxhZykpKVxcbnZhciB7IE1ZX1VSTCwgTVlfVVJMX09wdGlvbnMgfSA9IHVybFBhcnNlKE1ZX1BBUkFNUy51cmwsIFJVTEUudXJsSGVhZGVycywgcGFnZU51bSksXFxuICAgIGluZGV4SHRtbCA9IGZldGNoKE1ZX1VSTCwgTVlfVVJMX09wdGlvbnMpXFxuTVlfUlVMRS51cmwgPSBNWV9VUkxcXG5NWV9SVUxFLnVybEhlYWRlcnMgPSBNWV9VUkxfT3B0aW9ucy5oZWFkZXJzXFxuLy8g6Kej5p6Q5q2j5paHXFxuaWYgKE1ZX1BBUkFNUy5wYWdlVGl0bGUpIHNldFBhZ2VUaXRsZShNWV9QQVJBTVMucGFnZVRpdGxlKVxcbmV2YWwoTVlfUlVMRS5wcmVSdWxlKVxcbnNldExhc3RDaGFwdGVyUnVsZShNWV9SVUxFLmxhc3RfY2hhcHRlcl9ydWxlKVxcbk1ZX1BBUkFNUyA9IE1ZX1JVTEUucGFyYW1zXFxuaWYgKE1ZX1JVTEUuZmluZF9ydWxlLnN0YXJ0c1dpdGgoJ2pzOicpKSB7XFxuICAgIGZ1bmN0aW9uIGdldFVybCgpIHtcXG4gICAgICAgIHJldHVybiBNWV9VUkxcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiBnZXRSZXNDb2RlKCkge1xcbiAgICAgICAgcmV0dXJuIGluZGV4SHRtbFxcbiAgICB9XFxuXFxuICAgIGZ1bmN0aW9uIHNldFJlc3VsdChlbCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMykge1xcbiAgICAgICAgcGFyYW0xID0gQ0FMTEJBQ0tfS0VZXFxuICAgICAgICBwYXJhbTIgPSBNWV9SVUxFXFxuICAgICAgICBwYXJhbTMgPSBNWV9UWVBFXFxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbC5kYXRhKSkgZWwgPSBlbC5kYXRhXFxuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShteUNvbGxlY3Rpb25fZWwsIGVsLm1hcCgodikgPT4ge1xcbiAgICAgICAgICAgIGxldCBNWV9fUlVMRSA9IE9iamVjdC5hc3NpZ24oe30sIE1ZX1JVTEUpXFxuICAgICAgICAgICAgdi5jb2xfdHlwZSA9IHYuY29sX3R5cGUgfHwgTVlfUlVMRS5jb2xfdHlwZVxcblxcbiAgICAgICAgICAgIGlmICghdi51cmwgfHwgWydydWxlJywgJ3BpY3MnLCAndG9hc3QnLCAnaW5wdXQnLCAnY29weScsICdlZGl0RmlsZScsICd4NScsICd4NVdlYlZpZXcnLCAneDVQbGF5JywgJ3dlYicsICdzZWxlY3QnLCAneDVSdWxlJywgJ3dlYlJ1bGUnXS5maW5kKCh2dikgPT4gdi51cmwuc3RhcnRzV2l0aCh2diArICc6Ly8nKSkpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLmluY2x1ZGVzKCdAcnVsZT0nKSkge1xcbiAgICAgICAgICAgICAgICBsZXQgW18sIHVybCwgcnVsZV0gPSB2LnVybC5tYXRjaCgvXihbXFxcXHNcXFxcU10qPylAcnVsZT0oW1xcXFxzXFxcXFNdKikkLylcXG4gICAgICAgICAgICAgICAgdi51cmwgPSB1cmxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHJ1bGVcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gTVlfUlVMRS5jb2xfdHlwZVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly9wYWdlLycpKSB7XFxuICAgICAgICAgICAgICAgIGlmICh2LnVybC5pbmNsdWRlcygncnVsZT0nKSB8fCAodi5leHRyYSB8fCB7fSkucnVsZSlcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICAgICAgICAgIGxldCBbXywgcGF0aCwgcGFyYW1zXSA9IHYudXJsLnNwbGl0KCcjJylbMF0ubWF0Y2goL15oaWtlcjpcXFxcL1xcXFwvcGFnZVxcXFwvKC4rPykoPzpcXFxcPyguKikpPyQvKSxcXG4gICAgICAgICAgICAgICAgICAgIHN1YlBhZ2UgPSBNWV9SVUxFLnBhZ2VMaXN0LmZpbmQoKHYpID0+IHYucGF0aCA9PSBwYXRoKSxcXG4gICAgICAgICAgICAgICAgICAgIHN1YlVybCA9IChwYXJhbXMgfHwgJycpLnNwbGl0KCcmJykuZmluZCgodikgPT4gdi5zdGFydHNXaXRoKCd1cmw9JykpXFxuICAgICAgICAgICAgICAgIHYudXJsID0gc3ViVXJsID8gc3ViVXJsLnNsaWNlKDQpLnJlcGxhY2UoL++8n++8ny9nLCAnPycpLnJlcGxhY2UoL++8hu+8hi9nLCAnJicpIDogKHYuZXh0cmEgfHwge30pLnVybCB8fCAnaGlrZXI6Ly9lbXB0eT8nICsgKHBhcmFtcyB8fCAnJylcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHN1YlBhZ2UucnVsZVxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBzdWJQYWdlLmNvbF90eXBlXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLnBhcmFtcyA9IHYuZXh0cmEgfHwge31cXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLmluY2x1ZGVzKCdAbGF6eVJ1bGU9JykpIHtcXG4gICAgICAgICAgICAgICAgdi51cmwgPSB2LnVybC5yZXBsYWNlKCcuanM6JywgJy5qczpcXFxcbmlmKE1ZX1JVTEUpT2JqZWN0LmFzc2lnbihNWV9SVUxFLCcgKyAkLnN0cmluZ2lmeSh7IHBhZ2VzOiBNWV9SVUxFLnBhZ2VzLCBwYWdlTGlzdDogTVlfUlVMRS5wYWdlTGlzdCwgZmluZF9ydWxlOiAnJywgcGFyYW1zOiAnJyB9KSArICcpO01ZX1VSTD1cXFwiJyArIE1ZX1VSTCArICdcXFwiOycpXFxuICAgICAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICAgICAgfSBlbHNlIHsgcmV0dXJuIHYgfVxcbiAgICAgICAgICAgIHYuZXh0cmEgPSB7IHVybDogdi51cmwsIFJVTEU6IE1ZX19SVUxFIH1cXG4gICAgICAgICAgICB2LnVybCA9ICdoaWtlcjovL3BhZ2UvZGV0YWlsTG9hZD9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKVxcbiAgICAgICAgICAgIGlmICh2LmV4dHJhLlJVTEUudXJsLmluY2x1ZGVzKCcjaW1tZXJzaXZlVGhlbWUjJykpIHYudXJsICs9ICcmI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgfSkpXFxuICAgICAgICBtZXRob2Rfc2V0UmVzdWx0Lmludm9rZShqYXZhQ29udGV4dCwgbXlDb2xsZWN0aW9uX2VsLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKVxcbiAgICB9XFxuICAgIHNldEhvbWVSZXN1bHQgPSBzZXRSZXN1bHRcXG4gICAgc2V0U2VhcmNoUmVzdWx0ID0gc2V0UmVzdWx0XFxuXFxuICAgIGV2YWwoTVlfUlVMRS5maW5kX3J1bGUuc2xpY2UoMykpXFxufSBlbHNlIHtcXG4gICAgbGV0IFtfLCBmaW5kUnVsZSwgZGV0YWlsRmluZFJ1bGVdID0gTVlfUlVMRS5maW5kX3J1bGUubWF0Y2goL14oLio/KSg/Oj09PiguKikpPyQvKVxcbiAgICBmaW5kUnVsZSA9IGZpbmRSdWxlLnNwbGl0KCc7JylcXG4gICAgcGFyc2VEb21Gb3JBcnJheShpbmRleEh0bWwsIGZpbmRSdWxlLnNoaWZ0KCkpLmZvckVhY2goKGRhdGEpID0+IHtcXG4gICAgICAgIGxldCBbdGl0bGUsIGltZywgZGVzYywgdXJsXSA9IGZpbmRSdWxlLm1hcCgodiwgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gJyonKSByZXR1cm4gJydcXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgdiA9IChpID09IDEgfHwgaSA9PSAzKSA/XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VEb20oZGF0YSwgdikgOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tRm9ySHRtbChkYXRhLCB2KVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gMykgdiA9IHJ1bkNvZGUodilcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuICcnIH1cXG4gICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICByZXMgPSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICAgICAgICAgIGRlc2M6IGRlc2MsXFxuICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogTVlfUlVMRS5jb2xfdHlwZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIGlmIChyZXMudXJsKSB7XFxuICAgICAgICAgICAgaWYgKHJlcy51cmwuaW5jbHVkZXMoJ0BsYXp5UnVsZT0nKSkge1xcbiAgICAgICAgICAgICAgICByZXMudXJsID0gcmVzLnVybC5yZXBsYWNlKCcuanM6JywgJy5qczpcXFxcbmlmKE1ZX1JVTEUpT2JqZWN0LmFzc2lnbihNWV9SVUxFLCcgKyAkLnN0cmluZ2lmeSh7IHBhZ2VzOiBNWV9SVUxFLnBhZ2VzLCBwYWdlTGlzdDogTVlfUlVMRS5wYWdlTGlzdCwgZmluZF9ydWxlOiAnJywgcGFyYW1zOiAnJyB9KSArICcpO01ZX1VSTD1cXFwiJyArIE1ZX1VSTCArICdcXFwiOycpXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChkZXRhaWxGaW5kUnVsZSkge1xcbiAgICAgICAgICAgICAgICByZXMuZXh0cmEgPSB7IHVybDogdXJsLCBSVUxFOiBPYmplY3QuYXNzaWduKHt9LCBNWV9SVUxFLCB7IGRldGFpbF9maW5kX3J1bGU6IGRldGFpbEZpbmRSdWxlIH0pIH1cXG4gICAgICAgICAgICAgICAgcmVzLnVybCA9ICdoaWtlcjovL3BhZ2UvZGV0YWlsTG9hZD9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKVxcbiAgICAgICAgICAgICAgICBpZiAocmVzLmV4dHJhLlJVTEUudXJsLmluY2x1ZGVzKCcjaW1tZXJzaXZlVGhlbWUjJykpIHJlcy51cmwgKz0gJyYjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIG15Q29sbGVjdGlvbl9lbC5wdXNoKHJlcylcXG4gICAgfSlcXG4gICAgc2V0UmVzdWx0KG15Q29sbGVjdGlvbl9lbClcXG59XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlt6Xlhbfpm4ZcIixcInBhdGhcIjpcInV0aWxpdHlcIixcInJ1bGVcIjpcIiQuZXhwb3J0cyA9IHtcXG4gICAgZGF0YUxvYWQ6IGZ1bmN0aW9uKHNob3dBbGwpIHtcXG4gICAgICAgIC8v5qOA5p+l6Ze06ZqU77yM6buY6K6k5LiA5aSpXFxuICAgICAgICBsZXQgaW50ZXJ2YWwgPSBwYXJzZUludChyZWFkRmlsZSgndXBkYXRlSW50ZXJ2YWwnKSB8fCAnMScpLFxcbiAgICAgICAgICAgIHRpbWUgPSBwYXJzZUludChyZWFkRmlsZSgndXBkYXRlVGltZScpKSB8fCAwLFxcbiAgICAgICAgICAgIG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpLFxcbiAgICAgICAgICAgIGRhdGEgPSBbXVxcbiAgICAgICAgaWYgKHRpbWUgPT0gMCB8fCBpbnRlcnZhbCA+IDAgJiYgbm93IC0gdGltZSA+IDEwMDAgKiA2MCAqIDYwICogMjQgKiBpbnRlcnZhbCkge1xcbiAgICAgICAgICAgIC8vIOiOt+WPlui/nOeoi+aVsOaNrlxcbiAgICAgICAgICAgIGxldCB1cmwgPSBnZXRJdGVtKCdyZW1vdGVVcmwnKVxcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGxldCByZW1vdGVEYXRhID0gZmV0Y2godXJsKVxcbiAgICAgICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSlcXG4gICAgICAgICAgICAgICAgICAgIHJlbW90ZURhdGEgPSBKU09OLnBhcnNlKHJlbW90ZURhdGEpLnJ1bGVcXG4gICAgICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UocmVtb3RlRGF0YSlcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgICAgIGlmKGRhdGEubGVuZ3RoID09IDApIHtcXG4gICAgICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UocmVhZEZpbGUoJ2RhdGFDYWNoZScpIHx8ICdbXScpXFxuICAgICAgICAgICAgICAgIGxvZygn5rKh5pyJ6I635Y+W5Yiw5pu05paw5pWw5o2uJylcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5maWx0ZXIoKHYpID0+IHsgcmV0dXJuIHYudGl0bGUgIT0gZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJykgJiYgIXYuYXV0aG9yLmluY2x1ZGVzKCfovbvlkIjpm4bnlJ/miJDlmagnKSB9KVxcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSgnZGF0YUNhY2hlJywgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXFxuICAgICAgICAgICAgICAgIHNhdmVGaWxlKCd1cGRhdGVUaW1lJywgbm93LnRvU3RyaW5nKCkpXFxuICAgICAgICAgICAgICAgIGxvZygn5pu05paw5pWw5o2u5bey5YaZ5YWl5pys5ZywJylcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdkYXRhQ2FjaGUnKSB8fCAnW10nKVxcbiAgICAgICAgfVxcbiAgICAgICAgLy8g5YaZ5YWl6Ieq5a6a5LmJ5pWw5o2uXFxuICAgICAgICBsZXQgY3VzdG9tRGF0YSA9IEpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKSxcXG4gICAgICAgICAgICByZXdyaXRlRGF0YSA9IFtdXFxuICAgICAgICBjdXN0b21EYXRhID0gY3VzdG9tRGF0YS5yZWR1Y2UoKHNlbGYsIHYpID0+IHtcXG4gICAgICAgICAgICBsZXQgaW5kZXggPSBkYXRhLmZpbmRJbmRleCgodnYpID0+IHYudGl0bGUgPT0gdnYudGl0bGUpXFxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcXG4gICAgICAgICAgICAgICAgc2VsZi5wdXNoKHYpXFxuICAgICAgICAgICAgICAgIGxldCBydWxlID0gZGF0YS5zcGxpY2UoaW5kZXgsIDEpWzBdXFxuICAgICAgICAgICAgICAgIGlmKHNob3dBbGwgfHwgdi52aXNpYmxlKVxcbiAgICAgICAgICAgICAgICAgICAgcmV3cml0ZURhdGEucHVzaChPYmplY3QuYXNzaWduKHJ1bGUsIHYpKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gc2VsZlxcbiAgICAgICAgfSwgW10pXFxuICAgICAgICBkYXRhLmZvckVhY2goKHYpID0+IGN1c3RvbURhdGEucHVzaCh7IHRpdGxlOiB2LnRpdGxlLCB2aXNpYmxlOiB0cnVlIH0pKVxcbiAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBKU09OLnN0cmluZ2lmeShjdXN0b21EYXRhKSlcXG4gICAgICAgIHJldHVybiByZXdyaXRlRGF0YS5jb25jYXQoZGF0YSlcXG4gICAgfSxcXG4gICAgcnVuQ29kZTogZnVuY3Rpb24ocnVsZSkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBsZXQgW2lucHV0LCBjb2RlXSA9IHJ1bGUuc3BsaXQoJy5qczonKVxcbiAgICAgICAgICAgIHJldHVybiBjb2RlID8gZXZhbChjb2RlKSA6IHJ1bGVcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuIHJ1bGUgfVxcbiAgICB9LFxcbiAgICB1cmxQYXJzZTogZnVuY3Rpb24odXJsLCBoZWFkZXJzLCBwYWdlTnVtLCBmdW5jKSB7XFxuICAgICAgICB1cmwgPSB1cmwuc3BsaXQoJzsnKS5tYXAoKHYpID0+IHYucmVwbGFjZSgv77yb77ybL2csICc7JykpXFxuICAgICAgICBpZiAoZnVuYykgZnVuYyh1cmwpXFxuICAgICAgICB1cmxbMF0gPSB1cmxbMF0ucmVwbGFjZSgvZnlwYWdlKD86QCgtP1xcXFxkKylAKT8oPzpcXFxcKihcXFxcZCspQCk/LywgKF8sIHN0YXJ0LCBzcGFjZSkgPT4gcGFyc2VJbnQoc3RhcnQgfHwgMCkgKyAxICsgKHBhZ2VOdW0gLSAxKSAqIHBhcnNlSW50KHNwYWNlIHx8IDEpKVxcbiAgICAgICAgdXJsWzBdID0gL14oW1xcXFxzXFxcXFNdKj8pKD86XFxcXFtmaXJzdFBhZ2U9KFtcXFxcc1xcXFxTXSo/KVxcXFxdKT8kLy5leGVjKHVybFswXSlcXG4gICAgICAgIHVybFswXSA9IHJ1bkNvZGUodXJsWzBdWzJdICYmIHBhZ2VOdW0gPT0gMSA/IHVybFswXVsyXSA6IHVybFswXVsxXSlcXG4gICAgICAgIGxldCBvcHRpb25zID0geyBoZWFkZXJzOiBoZWFkZXJzLCBtZXRob2Q6IHVybFsxXSB9XFxuICAgICAgICAvLyBwb3N05pa55rOV5pe26L2s5o2i5Y+C5pWwXFxuICAgICAgICBpZiAoL15wb3N0JC9pLnRlc3Qob3B0aW9uc1snbWV0aG9kJ10pKSB7XFxuICAgICAgICAgICAgbGV0IFtvcmlVcmwsIGJvZHldID0gdXJsWzBdLnNwbGl0KCc/JylcXG4gICAgICAgICAgICB1cmxbMF0gPSBvcmlVcmwucmVwbGFjZSgv77yf77yfL2csICc/JylcXG4gICAgICAgICAgICBpZiAoYm9keS5zdGFydHNXaXRoKCdKc29uQm9keT0nKSkgYm9keSA9IGJvZHkuc2xpY2UoOSlcXG4gICAgICAgICAgICBvcHRpb25zWydib2R5J10gPSBib2R5XFxuICAgICAgICB9XFxuICAgICAgICBpZiAodXJsWzJdKSBvcHRpb25zLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQvcGxhaW47Y2hhcnN0PScgKyB1cmxbMl1cXG4gICAgICAgIGlmICh1cmxbM10pIHVybFszXS5tYXRjaCgveyguKil9LylbMV0uc3BsaXQoJyYmJykuZm9yRWFjaCgodikgPT4ge1xcbiAgICAgICAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSB2LnNwbGl0KCdAJylcXG4gICAgICAgICAgICBvcHRpb25zLmhlYWRlcnNba2V5XSA9IHJ1bkNvZGUodmFsdWUpXFxuICAgICAgICB9KVxcbiAgICAgICAgLy8g5re75Yqg5YWo5bGAVUFcXG4gICAgICAgIGlmICghb3B0aW9ucy5oZWFkZXJzWydVc2VyLUFnZW50J10pIHtcXG4gICAgICAgICAgICBpZiAoTVlfUlVMRS51YSA9PSAncGMnKVxcbiAgICAgICAgICAgICAgICBvcHRpb25zLmhlYWRlcnNbJ1VzZXItQWdlbnQnXSA9IFBDX1VBXFxuICAgICAgICAgICAgZWxzZSBpZiAoTVlfUlVMRS51YSA9PSAnbW9iaWxlJylcXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydVc2VyLUFnZW50J10gPSBNT0JJTEVfVUFcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB7IE1ZX1VSTDogdXJsWzBdLCBNWV9VUkxfT3B0aW9uczogb3B0aW9ucyB9XFxuICAgIH1cXG59XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8xX3ZlcnRpY2FsX3BpY1wiLFwibmFtZVwiOlwi5Y2V5pCcXCIsXCJwYXRoXCI6XCJzaW5nbGVTZWFyY2hcIixcInJ1bGVcIjpcImpzOlxcbmxldCBteUNvbGxlY3Rpb25fZWwgPSBbXSxcXG4gICAgUlVMRSA9IE1ZX1BBUkFNUy5SVUxFLFxcbiAgICBrZXl3b3JkID0gZ2V0UGFyYW0oJ2tleXdvcmQnKSxcXG4gICAgcGFnZU51bSA9IHBhcnNlSW50KGdldFBhcmFtKCdwYWdlJykpXFxuXFxuLy8g5aSE55CGTVlfVVJM5ZKMTVlfUlVMRVxcbk1ZX1RZUEUgPSAnc2VhcmNoJ1xcbk1ZX1JVTEUudWEgPSBSVUxFLnVhXFxuTVlfUlVMRS50aXRsZSA9IFJVTEUudGl0bGVcXG5NWV9SVUxFLmNvbF90eXBlID0gUlVMRS5jb2xfdHlwZVxcbk1ZX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gWycnLCAnKiddLmluY2x1ZGVzKFJVTEUuc2RldGFpbF9maW5kX3J1bGUpID8gUlVMRS5kZXRhaWxfY29sX3R5cGUgOiBSVUxFLnNkZXRhaWxfY29sX3R5cGVcXG5NWV9SVUxFLmZpbmRfcnVsZSA9IFJVTEUuc2VhcmNoRmluZFxcbk1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IFsnJywgJyonXS5pbmNsdWRlcyhSVUxFLnNkZXRhaWxfZmluZF9ydWxlKSA/IFJVTEUuZGV0YWlsX2ZpbmRfcnVsZSA6IFJVTEUuc2RldGFpbF9maW5kX3J1bGVcXG5NWV9SVUxFLnByZVJ1bGUgPSBSVUxFLnByZVJ1bGVcXG5NWV9SVUxFLnBhZ2VMaXN0ID0gSlNPTi5wYXJzZShSVUxFLnBhZ2VzIHx8ICdbXScpXFxuTVlfUlVMRS5wYWdlcyA9IEpTT04uc3RyaW5naWZ5KE1ZX1JVTEUucGFnZUxpc3QpXFxuTVlfUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZSA9IFJVTEUubGFzdF9jaGFwdGVyX3J1bGVcXG5NWV9SVUxFLnBhcmFtcyA9IHt9XFxuXFxuY29uc3QgeyBydW5Db2RlLCB1cmxQYXJzZSB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvdXRpbGl0eT9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSlcXG52YXIgeyBNWV9VUkwsIE1ZX1VSTF9PcHRpb25zIH0gPSB1cmxQYXJzZShSVUxFLnNlYXJjaF91cmwsIHt9LCBwYWdlTnVtLCAodXJsKSA9PiB7XFxuICAgIHVybFswXSA9IHVybFswXS5yZXBsYWNlKHVybFswXS5pbmNsdWRlcygnJSUnKSA/IC8lJS9nIDogL1xcXFwqXFxcXCovZywgZW5jb2RlU3RyKGtleXdvcmQsIHVybFsyXSkpXFxufSksXFxuICAgIGluZGV4SHRtbCA9IGZldGNoKE1ZX1VSTCwgTVlfVVJMX09wdGlvbnMpXFxuTVlfUlVMRS51cmwgPSBNWV9VUkxcXG5NWV9SVUxFLnVybEhlYWRlcnMgPSBNWV9VUkxfT3B0aW9ucy5oZWFkZXJzXFxuLy8g5q2j5paH6Kej5p6QXFxuaWYgKHBhZ2VOdW0gPT0gMSkgc2V0UGFnZVRpdGxlKCfigJwnICsga2V5d29yZCArICfigJ3nmoTmkJzntKLnu5PmnpwnKVxcbmlmIChNWV9SVUxFLmZpbmRfcnVsZS5zdGFydHNXaXRoKCdqczonKSkge1xcbiAgICBmdW5jdGlvbiBnZXRVcmwoKSB7XFxuICAgICAgICByZXR1cm4gTVlfVVJMXFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gZ2V0UmVzQ29kZSgpIHtcXG4gICAgICAgIHJldHVybiBpbmRleEh0bWxcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiBzZXRSZXN1bHQoZWwsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpIHtcXG4gICAgICAgIHBhcmFtMSA9IENBTExCQUNLX0tFWVxcbiAgICAgICAgcGFyYW0yID0gTVlfUlVMRVxcbiAgICAgICAgcGFyYW0zID0gTVlfVFlQRVxcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWwuZGF0YSkpIGVsID0gZWwuZGF0YVxcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobXlDb2xsZWN0aW9uX2VsLCBlbC5tYXAoKHYpID0+IHtcXG4gICAgICAgICAgICBsZXQgTVlfX1JVTEUgPSBPYmplY3QuYXNzaWduKHt9LCBNWV9SVUxFKSxcXG4gICAgICAgICAgICAgICAgc3ViVGl0bGUgPSB2LnRpdGxlXFxuICAgICAgICAgICAgdi50aXRsZSArPSAn4oCc4oCc4oCd4oCdPGJyPicgKyAoUlVMRS50aXRsZS5mb250Y29sb3IoJyMxMmI2NjgnKSArICcg4paqICcgKyAodi5kZXNjIHx8ICcnKS5mb250Y29sb3IoJyM2NjY2NjYnKSkuc21hbGwoKVxcbiAgICAgICAgICAgIHYuZGVzYyA9IHYuY29udGVudCB8fCAnJ1xcbiAgICAgICAgICAgIGlmKCF2LmltZyAmJiAhdi5waWNfdXJsKSB2LmNvbF90eXBlID0gJ3RleHRfMSdcXG4gICAgICAgICAgICBkZWxldGUgdi5jb250ZW50XFxuXFxuICAgICAgICAgICAgaWYgKCF2LnVybCB8fCBbJ3J1bGUnLCAncGljcycsICd0b2FzdCcsICdpbnB1dCcsICdjb3B5JywgJ2VkaXRGaWxlJywgJ3g1JywgJ3g1V2ViVmlldycsICd4NVBsYXknLCAnd2ViJywgJ3NlbGVjdCcsICd4NVJ1bGUnLCAnd2ViUnVsZSddLmZpbmQoKHZ2KSA9PiB2LnVybC5zdGFydHNXaXRoKHZ2ICsgJzovLycpKSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuaW5jbHVkZXMoJ0BydWxlPScpKSB7XFxuICAgICAgICAgICAgICAgIGxldCBbXywgdXJsLCBydWxlXSA9IHYudXJsLm1hdGNoKC9eKFtcXFxcc1xcXFxTXSo/KUBydWxlPShbXFxcXHNcXFxcU10qKSQvKVxcbiAgICAgICAgICAgICAgICB2LnVybCA9IHVybFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gcnVsZVxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBNWV9SVUxFLmNvbF90eXBlXFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5zdGFydHNXaXRoKCdoaWtlcjovL3BhZ2UvJykpIHtcXG4gICAgICAgICAgICAgICAgaWYgKHYudXJsLmluY2x1ZGVzKCdydWxlPScpIHx8ICh2LmV4dHJhIHx8IHt9KS5ydWxlKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICAgICAgbGV0IFtfLCBwYXRoLCBwYXJhbXNdID0gdi51cmwuc3BsaXQoJyMnKVswXS5tYXRjaCgvXmhpa2VyOlxcXFwvXFxcXC9wYWdlXFxcXC8oLis/KSg/OlxcXFw/KC4qKSk/JC8pLFxcbiAgICAgICAgICAgICAgICAgICAgc3ViUGFnZSA9IE1ZX1JVTEUucGFnZUxpc3QuZmluZCgodikgPT4gdi5wYXRoID09IHBhdGgpLFxcbiAgICAgICAgICAgICAgICAgICAgc3ViVXJsID0gKHBhcmFtcyB8fCAnJykuc3BsaXQoJyYnKS5maW5kKCh2KSA9PiB2LnN0YXJ0c1dpdGgoJ3VybD0nKSlcXG4gICAgICAgICAgICAgICAgdi51cmwgPSBzdWJVcmwgPyBzdWJVcmwuc2xpY2UoNCkucmVwbGFjZSgv77yf77yfL2csICc/JykucmVwbGFjZSgv77yG77yGL2csICcmJykgOiAodi5leHRyYSB8fCB7fSkudXJsIHx8ICdoaWtlcjovL2VtcHR5PycgKyAocGFyYW1zIHx8ICcnKVxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gc3ViUGFnZS5ydWxlXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9jb2xfdHlwZSA9IHN1YlBhZ2UuY29sX3R5cGVcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUucGFyYW1zID0gdi5leHRyYSB8fCB7fVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuaW5jbHVkZXMoJ0BsYXp5UnVsZT0nKSkge1xcbiAgICAgICAgICAgICAgICB2LnVybCA9IHYudXJsLnJlcGxhY2UoJy5qczonLCAnLmpzOlxcXFxuaWYoTVlfUlVMRSlPYmplY3QuYXNzaWduKE1ZX1JVTEUsJyArICQuc3RyaW5naWZ5KHsgcGFnZXM6IE1ZX1JVTEUucGFnZXMsIHBhZ2VMaXN0OiBNWV9SVUxFLnBhZ2VMaXN0LCBmaW5kX3J1bGU6ICcnLCBwYXJhbXM6ICcnIH0pICsgJyk7TVlfVVJMPVxcXCInICsgTVlfVVJMICsgJ1xcXCI7JylcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUgfHwgdi51cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly8nKSkgeyByZXR1cm4gdiB9XFxuICAgICAgICAgICAgdi5leHRyYSA9IHsgdXJsOiB2LnVybCwgUlVMRTogTVlfX1JVTEUsIHBhZ2VUaXRsZTogc3ViVGl0bGUgfVxcbiAgICAgICAgICAgIHYudXJsID0gJ2hpa2VyOi8vcGFnZS9kZXRhaWxMb2FkP3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpXFxuICAgICAgICAgICAgaWYgKHYuZXh0cmEuUlVMRS51cmwuaW5jbHVkZXMoJyNpbW1lcnNpdmVUaGVtZSMnKSkgdi51cmwgKz0gJyYjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICB9KSlcXG4gICAgICAgIG1ldGhvZF9zZXRSZXN1bHQuaW52b2tlKGphdmFDb250ZXh0LCBteUNvbGxlY3Rpb25fZWwsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpXFxuICAgIH1cXG4gICAgc2V0SG9tZVJlc3VsdCA9IHNldFJlc3VsdFxcbiAgICBzZXRTZWFyY2hSZXN1bHQgPSBzZXRSZXN1bHRcXG5cXG4gICAgZXZhbChNWV9SVUxFLmZpbmRfcnVsZS5zbGljZSgzKSlcXG59IGVsc2Uge1xcbiAgICBsZXQgZmluZFJ1bGUgPSBNWV9SVUxFLmZpbmRfcnVsZS5zcGxpdCgnOycpXFxuICAgIHBhcnNlRG9tRm9yQXJyYXkoaW5kZXhIdG1sLCBmaW5kUnVsZS5zaGlmdCgpKS5mb3JFYWNoKChkYXRhKSA9PiB7XFxuICAgICAgICBsZXQgW3RpdGxlLCB1cmwsIGRlc2MsIGNvbnRlbnQsIGltZ10gPSBmaW5kUnVsZS5tYXAoKHYsIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh2ID09ICcqJykgcmV0dXJuICcnXFxuICAgICAgICAgICAgICAgICAgICBlbHNlIHYgPSAoaSA9PSAxIHx8IGkgPT0gNCkgP1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tKGRhdGEsIHYpIDpcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvbUZvckh0bWwoZGF0YSwgdilcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpICE9IDEpIHYgPSBydW5Db2RlKHYpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IHJldHVybiAnJyB9XFxuICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgcmVzID0ge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUgKyAn4oCc4oCc4oCd4oCdPGJyPicgKyAoUlVMRS50aXRsZS5mb250Y29sb3IoJyMxMmI2NjgnKSArICcg4paqICcgKyBkZXNjLmZvbnRjb2xvcignIzY2NjY2NicpKS5zbWFsbCgpLFxcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcXG4gICAgICAgICAgICAgICAgZGVzYzogY29udGVudCxcXG4gICAgICAgICAgICAgICAgaW1nOiBpbWdcXG4gICAgICAgICAgICB9XFxuICAgICAgICBpZighcmVzLmltZykgcmVzLmNvbF90eXBlID0gJ3RleHRfMSdcXG4gICAgICAgIGlmIChyZXMudXJsKSB7XFxuICAgICAgICAgICAgaWYgKHJlcy51cmwuaW5jbHVkZXMoJ0BsYXp5UnVsZT0nKSkge1xcbiAgICAgICAgICAgICAgICByZXMudXJsID0gcmVzLnVybC5yZXBsYWNlKCcuanM6JywgJy5qczpcXFxcbmlmKE1ZX1JVTEUpT2JqZWN0LmFzc2lnbihNWV9SVUxFLCcgKyAkLnN0cmluZ2lmeSh7IHBhZ2VzOiBNWV9SVUxFLnBhZ2VzLCBwYWdlTGlzdDogTVlfUlVMRS5wYWdlTGlzdCwgZmluZF9ydWxlOiAnJywgcGFyYW1zOiAnJyB9KSArICcpO01ZX1VSTD1cXFwiJyArIE1ZX1VSTCArICdcXFwiOycpXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUpIHtcXG4gICAgICAgICAgICAgICAgcmVzLmV4dHJhID0geyB1cmw6IHVybCwgUlVMRTogTVlfUlVMRSwgcGFnZVRpdGxlOiB0aXRsZSB9XFxuICAgICAgICAgICAgICAgIHJlcy51cmwgPSAnaGlrZXI6Ly9wYWdlL2RldGFpbExvYWQ/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJylcXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5leHRyYS5SVUxFLnVybC5pbmNsdWRlcygnI2ltbWVyc2l2ZVRoZW1lIycpKSByZXMudXJsICs9ICcmI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBteUNvbGxlY3Rpb25fZWwucHVzaChyZXMpXFxuICAgIH0pXFxuICAgIHNldFJlc3VsdChteUNvbGxlY3Rpb25fZWwpXFxufVxcblwifSx7XCJjb2xfdHlwZVwiOlwiaWNvbl8yX3JvdW5kXCIsXCJuYW1lXCI6XCLorr7nva5cIixcInBhdGhcIjpcIkNvbmZpZ1wiLFwicnVsZVwiOlwianM6XFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAnY2xlYXJWYXIoXFxcIm15Q29sbGVjdGlvbi1zb3J0RmxhZ1xcXCIpO3JlZnJlc2hQYWdlKCknKVxcbnNldFBhZ2VUaXRsZSgn4pqZIOi9u+WQiOmbhuiuvue9riDimpknKVxcbmNvbnN0IHsgZGF0YUxvYWQgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL3V0aWxpdHk/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJykpXFxubGV0IGRhdGEgPSBkYXRhTG9hZCh0cnVlKSxcXG4gICAgZWwgPSBbe1xcbiAgICAgICAgdGl0bGU6ICfmuIXpmaTnvJPlrZgs56uL5Y2z5pu05pawIDxzbWFsbD4g77yI5Z+65LqO6L+c56iL5LuT5bqTLOS4jeimgemikee5geeCueWHu++8iScsXFxuICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgZGVsZXRlRmlsZSgndXBkYXRlVGltZScpXFxuICAgICAgICAgICAgYmFjayhmYWxzZSlcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5pu05pawJ1xcbiAgICAgICAgfSksXFxuICAgICAgICBpbWc6ICdoaWtlcjovL2ltYWdlcy9pY29uMScsXFxuICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcidcXG4gICAgfV0sXFxuICAgIHNlYXJjaFRoZCA9IHJlYWRGaWxlKCdzZWFyY2hUaGQnKSB8fCAnNScsXFxuICAgIHVwZGF0ZUludGVydmFsID0gcmVhZEZpbGUoJ3VwZGF0ZUludGVydmFsJykgfHwgJzEnLFxcbiAgICBuZXdXaW5kb3cgPSByZWFkRmlsZSgnbmV3V2luZG93JyksXFxuICAgIGVkaXRNb2RlID0gZ2V0VmFyKCdteUNvbGxlY3Rpb24tZWRpdE1vZGUnLCAn5ZCv55SoL+emgeeUqCcpXFxuXFxuZWwucHVzaCh7XFxuICAgIHRpdGxlOiAnICDwn5SNIOaQnOe0ouaooeW8jzogJyArIChzZWFyY2hUaGQgPT0gMCA/ICfliJcnIDogJ+iBmicgKyBzZWFyY2hUaGQpICsgJyAgJyxcXG4gICAgdXJsOiAkKFsn5YiX6KGo5pCc57SiJywgJ+iBmuWQiOaQnOe0oiddLCAxKS5zZWxlY3QoKHNlYXJjaFRoZCkgPT4ge1xcbiAgICAgICAgaWYgKGlucHV0ID09ICfliJfooajmkJzntKInKSB7XFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ3NlYXJjaFRoZCcsICcwJylcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGlmIChzZWFyY2hUaGQgPT0gMCkgc2VhcmNoVGhkID0gNVxcbiAgICAgICAgICAgIHJldHVybiAkKHNlYXJjaFRoZCwgJ+i+k+WFpeaQnOe0oue6v+eoi++8jOacgOWlveS4jeimgei2hei/hzE2JykuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSgnc2VhcmNoVGhkJywgaW5wdXQpXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICB9LCBzZWFyY2hUaGQpLFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxufSwge1xcbiAgICB0aXRsZTogJyAg8J+SoSDmm7TmlrDpopHnjoc6ICcgKyAodXBkYXRlSW50ZXJ2YWwgPCAxID8gJ+aJi+WKqCcgOiB1cGRhdGVJbnRlcnZhbCArICflpKknKSArICcgICcsXFxuICAgIHVybDogJCh1cGRhdGVJbnRlcnZhbCwgJ+i+k+WFpeabtOaWsOmXtOmalO+8iOWkqe+8ie+8jOS4ujDliJnmiYvliqjmm7TmlrAnKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICBzYXZlRmlsZSgndXBkYXRlSW50ZXJ2YWwnLCBpbnB1dClcXG4gICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG59LCB7XFxuICAgIHRpdGxlOiAnICDwn5alIOeLrOeri+mmlumhtTogJyArIChuZXdXaW5kb3cgPyAn5pivJyA6ICflkKYnKSArICcgICcsXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobmV3V2luZG93KSA9PiB7XFxuICAgICAgICBzYXZlRmlsZSgnbmV3V2luZG93JywgbmV3V2luZG93ID8gJycgOiAnMScpXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgIH0sIG5ld1dpbmRvdyksXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG59LCB7XFxuICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcIiM2NjY2NjZcXFwiPjxzbWFsbD7nibnliKvpuKPosKLvvIzlsI/nqIvluo/mj5DkvpvogIXvvJpcXFxcbicgK1xcbiAgICAgICAgZGF0YS5yZWR1Y2UoKHNlbGYsIHYpID0+IHYuYXV0aG9yID8gc2VsZi5jb25jYXQodi5hdXRob3Iuc3BsaXQoJyYnKSkgOiBzZWxmLCBbXSlcXG4gICAgICAgIC5maWx0ZXIoKHYsIGksIGFycikgPT4gdiAmJiBhcnIuaW5kZXhPZih2KSA9PSBpKS5qb2luKCfjgIEnKSxcXG4gICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG59KVxcblxcbmVsLnB1c2goeyBjb2xfdHlwZTogJ2xpbmUnIH0sIHsgY29sX3R5cGU6ICdiaWdfYmxhbmtfYmxvY2snIH0pO1xcblsn5ZCv55SoL+emgeeUqCcsICfph43mlrDmjpLluo8nLCAn5pu05pS55Zu+5qCHJywgJ+WvvOWFpea1t+mYlCddLmZvckVhY2goKHYpID0+IHtcXG4gICAgZWwucHVzaCh7XFxuICAgICAgICB0aXRsZTogdiA9PSBlZGl0TW9kZSA/ICfigJzigJzigJ3igJ0nICsgdi5ib2xkKCkuZm9udGNvbG9yKCcjMTJiNjY4JykgOiB2LFxcbiAgICAgICAgdXJsOiB2ID09IGVkaXRNb2RlID8gJ2hpa2VyOi8vZW1wdHknIDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodikgPT4ge1xcbiAgICAgICAgICAgIHB1dFZhcignbXlDb2xsZWN0aW9uLWVkaXRNb2RlJywgdilcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICB9LCB2KSxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgfSlcXG59KVxcbmVsLnB1c2goe1xcbiAgICB0aXRsZTogJ+aBouWkjeWHuuWOguaVsOaNricsXFxuICAgIHVybDogJCgn56Gu5a6a6KaB5oGi5aSN5Ye65Y6C77yM5riF5qWa6Ieq5a6a5LmJ5pWw5o2u5ZCX77yfJykuY29uZmlybSgoKSA9PiB7XFxuICAgICAgICBkZWxldGVGaWxlKCdjdXN0b21EYXRhJylcXG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suaBouWkjeWHuuWOguaVsOaNridcXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG59KVxcblxcbkpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKS5mb3JFYWNoKCh2LCBpKSA9PiB7XFxuICAgIGxldCBkID0geyB0aXRsZTogdi50aXRsZSwgaW1nOiBkYXRhW2ldLmljb24gfVxcbiAgICBzd2l0Y2ggKGVkaXRNb2RlKSB7XFxuICAgICAgICBjYXNlICflkK/nlKgv56aB55SoJzpcXG4gICAgICAgICAgICBkLnRpdGxlID0gKHYudmlzaWJsZSA/ICfwn5+iICAnIDogJ/CflLQgICcpICsgZC50aXRsZVxcbiAgICAgICAgICAgIGQudXJsID0gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgocnVsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJyksXFxuICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHJ1bGVzLmZpbmRJbmRleCgodikgPT4gdi50aXRsZSA9PSBydWxlLnRpdGxlKVxcbiAgICAgICAgICAgICAgICBydWxlc1tpbmRleF0udmlzaWJsZSA9ICFydWxlc1tpbmRleF0udmlzaWJsZVxcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSgnY3VzdG9tRGF0YScsIEpTT04uc3RyaW5naWZ5KHJ1bGVzKSlcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9LCB2KVxcbiAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICBjYXNlICfph43mlrDmjpLluo8nOlxcbiAgICAgICAgICAgIGxldCBzb3J0RmxhZyA9IHBhcnNlSW50KGdldFZhcignbXlDb2xsZWN0aW9uLXNvcnRGbGFnJywgJy0xJykpXFxuICAgICAgICAgICAgZC50aXRsZSA9IChzb3J0RmxhZyA9PSBpID8gJ/CflIMgICcgOiAnJykgKyBkLnRpdGxlXFxuICAgICAgICAgICAgaWYgKHNvcnRGbGFnID09IC0xKVxcbiAgICAgICAgICAgICAgICBkLnVybCA9ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcignbXlDb2xsZWN0aW9uLXNvcnRGbGFnJywgaS50b1N0cmluZygpKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6YCJ5oup6KaB56e75Yqo5Yiw55qE5L2N572uJ1xcbiAgICAgICAgICAgICAgICB9LCBpKVxcbiAgICAgICAgICAgIGVsc2VcXG4gICAgICAgICAgICAgICAgZC51cmwgPSAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChvbGRJbmRleCwgbmV3SW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBydWxlcyA9IEpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKVxcbiAgICAgICAgICAgICAgICAgICAgcnVsZXMuc3BsaWNlKG5ld0luZGV4LCAwLCBydWxlcy5zcGxpY2Uob2xkSW5kZXgsIDEpWzBdKVxcbiAgICAgICAgICAgICAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBKU09OLnN0cmluZ2lmeShydWxlcykpXFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ215Q29sbGVjdGlvbi1zb3J0RmxhZycsICctMScpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgfSwgc29ydEZsYWcsIGkpXFxuICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgIGNhc2UgJ+abtOaUueWbvuaghyc6XFxuICAgICAgICAgICAgZC51cmwgPSAkKHYuaWNvbiB8fCAnJywgJ+i+k+WFpeaWsOWbvuagh+WcsOWdgOaIluminOiJsuS7o+egge+8micpLmlucHV0KChydWxlKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBydWxlcyA9IEpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKSxcXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcnVsZXMuZmluZEluZGV4KCh2KSA9PiB2LnRpdGxlID09IHJ1bGUudGl0bGUpXFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzW2luZGV4XS5pY29uID0gaW5wdXRcXG4gICAgICAgICAgICAgICAgZWxzZVxcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJ1bGVzW2luZGV4XS5pY29uXFxuICAgICAgICAgICAgICAgIHNhdmVGaWxlKCdjdXN0b21EYXRhJywgSlNPTi5zdHJpbmdpZnkocnVsZXMpKVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0sIHYpXFxuICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgIGNhc2UgJ+WvvOWFpea1t+mYlCc6XFxuICAgICAgICAgICAgZC51cmwgPSAncnVsZTovLycgKyBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkoZGF0YVtpXSkpXFxuICAgICAgICAgICAgYnJlYWtcXG4gICAgfVxcbiAgICBlbC5wdXNoKGQpXFxufSlcXG5zZXRSZXN1bHQoZWwpXFxuXCJ9XSxcInBhcmFtc1wiOlwie1xcXCJSVUxFXFxcIjp7XFxcImJhc2VVcmxcXFwiOlxcXCJodHRwOi8vaGlrZXI6XFxcIixcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwiZGV0YWlsX2NvbF90eXBlXFxcIjpcXFwibW92aWVfMVxcXCIsXFxcImRldGFpbF9maW5kX3J1bGVcXFwiOlxcXCJqczpcXFxcclxcXFxudmFyIHJlcyA9IHt9O1xcXFxyXFxcXG52YXIgZCA9IFtdO1xcXFxuZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdHRpdGxlOiAnJyxcXFxcbiAgICBkZXNjOiczMjAmJmZsb2F0JyxcXFxcbiAgICB1cmw6JycsXFxcXG4gICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZSdcXFxcbn0pO1xcXFxuXFxcXG4vL+WFjeWXhVxcXFxudmFyIGxhenkgPSBgQGxhenlSdWxlPS5qczp2YXIgaHQ9cGFyc2VEb21Gb3JIdG1sKHJlcXVlc3QoaW5wdXQse30pLCcuZW1iZWQtcmVzcG9uc2l2ZSYmc2NyaXB0JiZIdG1sJykucmVwbGFjZSgvcGxheWVyXy4qPz17LywncGxheWVyX2FhYWE9eycpO2V2YWwoaHQpO3ZhciB1cmw9ZGVjb2RlVVJJQ29tcG9uZW50KHBsYXllcl9hYWFhLnVybCk7aWYodXJsLnNlYXJjaCgvaHRtbC8pPj0wKXt2YXIgZnVybD0naHR0cHM6Ly9va2p4LmNjLz91cmw9Jyt1cmw7O3JlZnJlc2hYNVdlYlZpZXcoZnVybCk7J3RvYXN0Oi8v5YiH5o2iWDXmkq3mlL7vvIEnfWVsc2V7dXJsfWBcXFxcclxcXFxudmFyIGh0bWw9ZmV0Y2gocGFyc2VEb20oZ2V0UmVzQ29kZSgpLCAnLnBsYXktYnRuJiZhJiZocmVmJykse30pO1xcXFxyXFxcXG4vLyDlrZBcXFxcclxcXFxudmFyIGRlc19kZXNjID0gcGFyc2VEb21Gb3JIdG1sKGdldFJlc0NvZGUoKSwgJ2hlYWQmJm1ldGEsMSYmY29udGVudCcpO1xcXFxyXFxcXG4vLyDkuJFcXFxcclxcXFxudmFyIGRlc19waWMgPSBwYXJzZURvbShnZXRSZXNDb2RlKCksICdib2R5JiYuc3R1aS1jb250ZW50X190aHVtYiYmaW1nJiZkYXRhLW9yaWdpbmFsJyk7XFxcXHJcXFxcbi8vIOWvhVxcXFxyXFxcXG52YXIgdGFicyA9IHBhcnNlRG9tKGh0bWwsICdib2R5JiYucGxheS10YWImJkh0bWwnKS5tYXRjaCgvaHJlZj1bXFxcXFxcXFxzXFxcXFxcXFxTXSo/PFxcXFxcXFxcL2EvZyk7XFxcXHJcXFxcbi8vIOWNr1xcXFxyXFxcXG52YXIgY29udHMgPSBwYXJzZURvbShodG1sLCAnYm9keSYmLnBsYXktY29udGVudCYmSHRtbCcpLm1hdGNoKC9jbGFzcz1cXFxcXFxcXFxcXFxcXFwic3R1aS1wbGF5X19saXN0W1xcXFxcXFxcc1xcXFxcXFxcU10qPzxcXFxcXFxcXC91bD4vZyk7XFxcXHJcXFxcblxcXFxyXFxcXG5kLnB1c2goe1xcXFxyXFxcXG5cXFxcdHRpdGxlOiAn5YWx5pyJJyArIGNvbnRzLmxlbmd0aCArICfmnaHnur/ot68nLFxcXFxyXFxcXG4gZGVzYzogZGVzX2Rlc2Muc3BsaXQoJzonKVsxXSxcXFxcclxcXFxuXFxcXHRwaWNfdXJsOiBkZXNfcGljLFxcXFxyXFxcXG5cXFxcdHVybDogZ2V0VXJsKCksXFxcXHJcXFxcblxcXFx0Y29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYydcXFxcclxcXFxufSk7XFxcXG5cXFxcbmZvciAodmFyIGkgPSAwOyBpIDwgY29udHMubGVuZ3RoOyBpKyspIHtcXFxcblxcXFx0dmFyIGxpc3QgPSBjb250c1tpXS5tYXRjaCgvPGFbXFxcXFxcXFxzXFxcXFxcXFxTXSo/PFxcXFxcXFxcL2EvZyk7XFxcXG5cXFxcdGlmIChsaXN0ICE9IG51bGwpIHtcXFxcblxcXFx0XFxcXHRkLnB1c2goe1xcXFxuXFxcXHRcXFxcdFxcXFx0dGl0bGU6dGFic1tpXS5zcGxpdChcXFxcXFxcIj5cXFxcXFxcIilbMV0uc3BsaXQoXFxcXFxcXCI8XFxcXFxcXCIpWzBdLFxcXFxuXFxcXHRcXFxcdFxcXFx0Y29sX3R5cGU6ICd0ZXh0XzEnXFxcXG5cXFxcdFxcXFx0fSk7XFxcXG5cXFxcdFxcXFx0Zm9yICh2YXIgaiA9IDA7IGogPCBsaXN0Lmxlbmd0aDsgaisrKSB7XFxcXG5cXFxcdFxcXFx0XFxcXHRkLnB1c2goe1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR0aXRsZTogbGlzdFtqXS5zcGxpdCgnPicpWzFdLnNwbGl0KCc8JylbMF0sXFxcXHR1cmw6cGFyc2VEb20obGlzdFtqXSwnYSYmaHJlZicpK2xhenksY29sX3R5cGU6IGxpc3QubGVuZ3RoID4zPyd0ZXh0XzMnOid0ZXh0XzInXFxcXG5cXFxcdFxcXFx0XFxcXHR9KTtcXFxcblxcXFx0XFxcXHR9XFxcXG5cXFxcdH1cXFxcbn1cXFxcbnJlcy5kYXRhID0gZDtcXFxcbnNldEhvbWVSZXN1bHQocmVzKTtcXFwiLFxcXCJmaW5kX3J1bGVcXFwiOlxcXCJqczpcXFxcbnZhciByZXMgPSB7fTtcXFxcbnZhciBkID0gW107XFxcXG52YXIgaHRtbCA9IGdldFJlc0NvZGUoKTtcXFxcbnZhciBsaXN0ID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCcuc3R1aS12b2RsaXN0JiZsaScpO1xcXFxuZm9yICh2YXIgaiBpbiBsaXN0KSB7XFxcXG4gIGQucHVzaCh7XFxcXG4gICAgIHRpdGxlOiBwYXJzZURvbUZvckh0bWwobGlzdFtqXSwgJ2EmJnRpdGxlJyksXFxcXG4gICAgIGRlc2M6cGFyc2VEb21Gb3JIdG1sKGxpc3Rbal0sICcucGljLXRleHQmJlRleHQnKSxcXFxcbiAgICAgcGljX3VybDogcGFyc2VEb20obGlzdFtqXSwgJ2EmJmRhdGEtb3JpZ2luYWwnKSsnQFJlZmVyZXI9JyxcXFxcbiAgICAgdXJsOiBwYXJzZURvbShsaXN0W2pdLCAnYSYmaHJlZicpXFxcXG4gIH0pO1xcXFxufVxcXFxucmVzLmRhdGEgPSBkO1xcXFxuc2V0SG9tZVJlc3VsdChyZXMpO1xcXCIsXFxcImxhc3RfY2hhcHRlcl9ydWxlXFxcIjpcXFwiXFxcIixcXFwicGFnZUxpc3RcXFwiOltdLFxcXCJwYWdlc1xcXCI6XFxcIltdXFxcIixcXFwicGFyYW1zXFxcIjp7fSxcXFwicGluWWluVGl0bGVcXFwiOlxcXCJcXFwiLFxcXCJwcmVSdWxlXFxcIjpcXFwiXFxcIixcXFwic2VhcmNoRmluZFxcXCI6XFxcImpzOlxcXFxudmFyIHsgZGF0YUxvYWQsIHJ1bkNvZGUsIHVybFBhcnNlIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS91dGlsaXR5P3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpKVxcXFxubGV0IG15Q29sbGVjdGlvbl9lbCA9IFtdLFxcXFxuICAgIHNlYXJjaFRoZCA9IHBhcnNlSW50KHJlYWRGaWxlKCdzZWFyY2hUaGQnKSB8fCAnNScpLFxcXFxuICAgIGtleXdvcmQgPSBnZXRQYXJhbSgna2V5d29yZCcpLFxcXFxuICAgIHBhZ2VOdW0gPSBwYXJzZUludChnZXRQYXJhbSgncGFnZScpKSxcXFxcbiAgICBSVUxFUyA9IGRhdGFMb2FkKCkuZmlsdGVyKCh2KSA9PiB2LnNlYXJjaF91cmwpXFxcXG5pZiAoc2VhcmNoVGhkID09IDApIHtcXFxcbiAgICBteUNvbGxlY3Rpb25fZWwucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiAoJ+KshyDpgInmi6nkuIDkuKrlsI/nqIvluo/mn6XnnIsnICsga2V5d29yZCArICfnmoTmkJzntKLnu5Pmnpwg4qyHJykuc21hbGwoKSxcXFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eSdcXFxcbiAgICB9KVxcXFxuICAgIFJVTEVTLmZvckVhY2goKHYpID0+IG15Q29sbGVjdGlvbl9lbC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IHYudGl0bGUsXFxcXG4gICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2Uvc2luZ2xlU2VhcmNoP2tleXdvcmQ9XFxcXFxcXCIgKyBrZXl3b3JkICsgXFxcXFxcXCImcGFnZT1meXBhZ2VcXFxcXFxcIixcXFxcbiAgICAgICAgZXh0cmE6IHsgcnVsZTogZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJyksIFJVTEU6IHYgfSxcXFxcbiAgICB9KSlcXFxcbn0gZWxzZSBpZiAoc2VhcmNoVGhkID4gMCkge1xcXFxuICAgIGxldCBzZWFyY2hDb3VudCA9IHBhZ2VOdW0gKiBzZWFyY2hUaGQsXFxcXG4gICAgICAgIHNlYXJjaFRhZyA9IHsgdGl0bGU6ICfirIYg5bey5pCc57Si5LqGJyArIHNlYXJjaENvdW50ICsgJ+S4quWwj+eoi+W6jyDirIZcXFxcXFxcXG7irIcg5LiL6Z2i6L+Y5pyJJyArIFJVTEVTLnNsaWNlKHNlYXJjaENvdW50KS5sZW5ndGggKyAn5Liq5bCP56iL5bqPIOKshycgfVxcXFxuICAgIFJVTEVTID0gUlVMRVMuc2xpY2Uoc2VhcmNoQ291bnQgLSBzZWFyY2hUaGQsIHNlYXJjaENvdW50KVxcXFxuICAgIGlmICghUlVMRVMubGVuZ3RoKSBzZXRSZXN1bHQoW10pXFxcXG5cXFxcbiAgICBsZXQgVVJMUyA9IFJVTEVTLm1hcCgoUlVMRSkgPT4ge1xcXFxuICAgICAgICBNWV9SVUxFLnVhID0gUlVMRS51YVxcXFxuICAgICAgICBsZXQgdXJsUmVxID0gdXJsUGFyc2UoUlVMRS5zZWFyY2hfdXJsLCB7fSwgMSwgKHVybCkgPT4ge1xcXFxuICAgICAgICAgICAgdXJsWzBdID0gdXJsWzBdLnJlcGxhY2UodXJsWzBdLmluY2x1ZGVzKCclJScpID8gLyUlL2cgOiAvXFxcXFxcXFwqXFxcXFxcXFwqL2csIGVuY29kZVN0cihrZXl3b3JkLCB1cmxbMl0pKVxcXFxuICAgICAgICB9KVxcXFxuICAgICAgICByZXR1cm4geyB1cmw6IHVybFJlcS5NWV9VUkwsIG9wdGlvbnM6IHVybFJlcS5NWV9VUkxfT3B0aW9ucyB9XFxcXG4gICAgfSlcXFxcbiAgICBiYXRjaEZldGNoKFVSTFMpLmZvckVhY2goKGluZGV4SHRtbCwgaW5kZXgpID0+IHtcXFxcbiAgICAgICAgLy8g5aSE55CGTVlfVVJM5ZKMTVlfUlVMRVxcXFxuICAgICAgICBsZXQgUlVMRSA9IFJVTEVTW2luZGV4XVxcXFxuICAgICAgICBNWV9VUkwgPSBVUkxTW2luZGV4XS51cmxcXFxcbiAgICAgICAgTVlfUlVMRS51YSA9IFJVTEUudWFcXFxcbiAgICAgICAgTVlfUlVMRS5jb2xfdHlwZSA9IFJVTEUuY29sX3R5cGVcXFxcbiAgICAgICAgTVlfUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBbJycsICcqJ10uaW5jbHVkZXMoUlVMRS5zZGV0YWlsX2ZpbmRfcnVsZSkgPyBSVUxFLmRldGFpbF9jb2xfdHlwZSA6IFJVTEUuc2RldGFpbF9jb2xfdHlwZVxcXFxuICAgICAgICBNWV9SVUxFLmZpbmRfcnVsZSA9IFJVTEUuc2VhcmNoRmluZFxcXFxuICAgICAgICBNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBbJycsICcqJ10uaW5jbHVkZXMoUlVMRS5zZGV0YWlsX2ZpbmRfcnVsZSkgPyBSVUxFLmRldGFpbF9maW5kX3J1bGUgOiBSVUxFLnNkZXRhaWxfZmluZF9ydWxlXFxcXG4gICAgICAgIE1ZX1JVTEUucHJlUnVsZSA9IFJVTEUucHJlUnVsZVxcXFxuICAgICAgICBNWV9SVUxFLnBhZ2VMaXN0ID0gSlNPTi5wYXJzZShSVUxFLnBhZ2VzIHx8ICdbXScpXFxcXG4gICAgICAgIE1ZX1JVTEUucGFnZXMgPSBKU09OLnN0cmluZ2lmeShNWV9SVUxFLnBhZ2VMaXN0KVxcXFxuICAgICAgICBNWV9SVUxFLmxhc3RfY2hhcHRlcl9ydWxlID0gUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZVxcXFxuICAgICAgICBNWV9SVUxFLnBhcmFtcyA9IHt9XFxcXG4gICAgICAgIE1ZX1JVTEUudXJsID0gTVlfVVJMXFxcXG4gICAgICAgIE1ZX1JVTEUudXJsSGVhZGVycyA9IFVSTFNbaW5kZXhdLm9wdGlvbnMuaGVhZGVyc1xcXFxuXFxcXG4gICAgICAgIC8vIOato+aWh+ino+aekFxcXFxuICAgICAgICBldmFsKE1ZX1JVTEUucHJlUnVsZSlcXFxcbiAgICAgICAgaWYgKE1ZX1JVTEUuZmluZF9ydWxlLnN0YXJ0c1dpdGgoJ2pzOicpKSB7XFxcXG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRVcmwoKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1ZX1VSTFxcXFxuICAgICAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRSZXNDb2RlKCkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBpbmRleEh0bWxcXFxcbiAgICAgICAgICAgIH1cXFxcblxcXFxuICAgICAgICAgICAgc2V0UmVzdWx0ID0gZnVuY3Rpb24oZWwpIHtcXFxcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbC5kYXRhKSkgZWwgPSBlbC5kYXRhXFxcXG4gICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobXlDb2xsZWN0aW9uX2VsLCBlbC5tYXAoKHYpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IE1ZX19SVUxFID0gT2JqZWN0LmFzc2lnbih7fSwgTVlfUlVMRSwgeyB0aXRsZTogUlVMRS50aXRsZSB9KVxcXFxuICAgICAgICAgICAgICAgICAgICB2LmRlc2MgPSBSVUxFLnRpdGxlICsgJyDilqogJyArICh2LmRlc2MgfHwgJycpXFxcXG5cXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2LnVybCB8fCBbJ3J1bGUnLCAncGljcycsICd0b2FzdCcsICdpbnB1dCcsICdjb3B5JywgJ2VkaXRGaWxlJywgJ3g1JywgJ3g1V2ViVmlldycsICd4NVBsYXknLCAnd2ViJywgJ3NlbGVjdCcsICd4NVJ1bGUnLCAnd2ViUnVsZSddLmZpbmQoKHZ2KSA9PiB2LnVybC5zdGFydHNXaXRoKHZ2ICsgJzovLycpKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5pbmNsdWRlcygnQHJ1bGU9JykpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBbXywgdXJsLCBydWxlXSA9IHYudXJsLm1hdGNoKC9eKFtcXFxcXFxcXHNcXFxcXFxcXFNdKj8pQHJ1bGU9KFtcXFxcXFxcXHNcXFxcXFxcXFNdKikkLylcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHYudXJsID0gdXJsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gcnVsZVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gTVlfUlVMRS5jb2xfdHlwZVxcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYudXJsLmluY2x1ZGVzKCdydWxlPScpIHx8ICh2LmV4dHJhIHx8IHt9KS5ydWxlKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgW18sIHBhdGgsIHBhcmFtc10gPSB2LnVybC5zcGxpdCgnIycpWzBdLm1hdGNoKC9eaGlrZXI6XFxcXFxcXFwvXFxcXFxcXFwvcGFnZVxcXFxcXFxcLyguKz8pKD86XFxcXFxcXFw/KC4qKSk/JC8pLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlBhZ2UgPSBNWV9SVUxFLnBhZ2VMaXN0LmZpbmQoKHYpID0+IHYucGF0aCA9PSBwYXRoKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJVcmwgPSAocGFyYW1zIHx8ICcnKS5zcGxpdCgnJicpLmZpbmQoKHYpID0+IHYuc3RhcnRzV2l0aCgndXJsPScpKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdi51cmwgPSBzdWJVcmwgPyBzdWJVcmwuc2xpY2UoNCkucmVwbGFjZSgv77yf77yfL2csICc/JykucmVwbGFjZSgv77yG77yGL2csICcmJykgOiAodi5leHRyYSB8fCB7fSkudXJsIHx8ICdoaWtlcjovL2VtcHR5PycgKyAocGFyYW1zIHx8ICcnKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHN1YlBhZ2UucnVsZVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gc3ViUGFnZS5jb2xfdHlwZVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgTVlfX1JVTEUucGFyYW1zID0gdi5leHRyYSB8fCB7fVxcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLmluY2x1ZGVzKCdAbGF6eVJ1bGU9JykpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHYudXJsID0gdi51cmwucmVwbGFjZSgnLmpzOicsICcuanM6XFxcXFxcXFxuaWYoTVlfUlVMRSlPYmplY3QuYXNzaWduKE1ZX1JVTEUsJyArICQuc3RyaW5naWZ5KHsgcGFnZXM6IE1ZX1JVTEUucGFnZXMsIHBhZ2VMaXN0OiBNWV9SVUxFLnBhZ2VMaXN0LCBmaW5kX3J1bGU6ICcnLCBwYXJhbXM6ICcnIH0pICsgJyk7TVlfVVJMPVxcXFxcXFwiJyArIE1ZX1VSTCArICdcXFxcXFxcIjsnKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghTVlfUlVMRS5kZXRhaWxfZmluZF9ydWxlIHx8IHYudXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vJykpIHsgcmV0dXJuIHYgfVxcXFxuICAgICAgICAgICAgICAgICAgICB2LmV4dHJhID0geyB1cmw6IHYudXJsLCBSVUxFOiBNWV9fUlVMRSwgcGFnZVRpdGxlOiB2LnRpdGxlIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgdi51cmwgPSAnaGlrZXI6Ly9wYWdlL2RldGFpbExvYWQ/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJylcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYuZXh0cmEuUlVMRS51cmwuaW5jbHVkZXMoJyNpbW1lcnNpdmVUaGVtZSMnKSkgdi51cmwgKz0gJyYjaW1tZXJzaXZlVGhlbWUjJ1xcXFxuXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2XFxcXG4gICAgICAgICAgICAgICAgfSkpXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBzZXRIb21lUmVzdWx0ID0gc2V0UmVzdWx0XFxcXG4gICAgICAgICAgICBzZXRTZWFyY2hSZXN1bHQgPSBzZXRSZXN1bHRcXFxcblxcXFxuICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICBldmFsKE1ZX1JVTEUuZmluZF9ydWxlLnNsaWNlKDMpKVxcXFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGxldCBmaW5kUnVsZSA9IE1ZX1JVTEUuZmluZF9ydWxlLnNwbGl0KCc7JylcXFxcbiAgICAgICAgICAgIHBhcnNlRG9tRm9yQXJyYXkoaW5kZXhIdG1sLCBmaW5kUnVsZS5zaGlmdCgpKS5mb3JFYWNoKChkYXRhKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IFt0aXRsZSwgdXJsLCBkZXNjLCBjb250ZW50LCBpbWddID0gZmluZFJ1bGUubWFwKCh2LCBpKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ID09ICcqJykgcmV0dXJuICcnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB2ID0gKGkgPT0gMSB8fCBpID09IDQpID9cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VEb20oZGF0YSwgdikgOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvbUZvckh0bWwoZGF0YSwgdilcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSAxKSB2ID0gcnVuQ29kZSh2KVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IHJldHVybiAnJyB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pLFxcXFxuICAgICAgICAgICAgICAgICAgICByZXMgPSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHVybCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFJVTEUudGl0bGUgKyAnIOKWqiAnICsgZGVzYyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGltZ1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgaWYgKHJlcy51cmwpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IE1ZX19SVUxFID0gT2JqZWN0LmFzc2lnbih7fSwgTVlfUlVMRSwgeyB0aXRsZTogUlVMRS50aXRsZSB9KVxcXFxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzLnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXMudXJsID0gcmVzLnVybC5yZXBsYWNlKCcuanM6JywgJy5qczpcXFxcXFxcXG5pZihNWV9SVUxFKU9iamVjdC5hc3NpZ24oTVlfUlVMRSwnICsgJC5zdHJpbmdpZnkoeyBwYWdlczogTVlfX1JVTEUucGFnZXMsIHBhZ2VMaXN0OiBNWV9fUlVMRS5wYWdlTGlzdCwgZmluZF9ydWxlOiAnJywgcGFyYW1zOiAnJyB9KSArICcpO01ZX1VSTD1cXFxcXFxcIicgKyBNWV9VUkwgKyAnXFxcXFxcXCI7JylcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5leHRyYSA9IHsgdXJsOiB1cmwsIFJVTEU6IE1ZX19SVUxFLCBwYWdlVGl0bGU6IHRpdGxlIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcy51cmwgPSAnaGlrZXI6Ly9wYWdlL2RldGFpbExvYWQ/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJylcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMuZXh0cmEuUlVMRS51cmwuaW5jbHVkZXMoJyNpbW1lcnNpdmVUaGVtZSMnKSkgcmVzLnVybCArPSAnJiNpbW1lcnNpdmVUaGVtZSMnXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgbXlDb2xsZWN0aW9uX2VsLnB1c2gocmVzKVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pXFxcXG4gICAgbXlDb2xsZWN0aW9uX2VsLnB1c2goc2VhcmNoVGFnKVxcXFxufVxcXFxubWV0aG9kX3NldFJlc3VsdC5pbnZva2UoamF2YUNvbnRleHQsIG15Q29sbGVjdGlvbl9lbCwgQ0FMTEJBQ0tfS0VZLCBNWV9SVUxFLCBNWV9UWVBFKVxcXFxuXFxcIixcXFwic2VhcmNoVXJsXFxcIjpcXFwiaGlrZXI6Ly9lbXB0eT9rZXl3b3JkPSoqJnBhZ2U9ZnlwYWdlXFxcIixcXFwidGl0bGVcXFwiOlxcXCJHT+W9semZolxcXCIsXFxcInVhXFxcIjpcXFwibW9iaWxlXFxcIixcXFwidXJsXFxcIjpcXFwiaHR0cDovL3d3dy5hb29iLnRvcC9pbmRleC5waHAvdm9kL3NlYXJjaC9wYWdlLzEvd2Qv5aSx5o6n546p5a62Lmh0bWxcXFwiLFxcXCJ1cmxIZWFkZXJzXFxcIjp7XFxcIlVzZXItQWdlbnRcXFwiOlxcXCJNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgMTE7IE1pIDEwIFBybykgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzg4LjAuNDMyNC4xNTIgTW9iaWxlIFNhZmFyaS81MzcuMzZcXFwifSxcXFwid2VpZ2h0XFxcIjowfSxcXFwicGFnZVRpdGxlXFxcIjpcXFwi5aSx5o6n546p5a62XFxcIixcXFwidXJsXFxcIjpcXFwiaHR0cDovL3d3dy5hb29iLnRvcC9pbmRleC5waHAvdm9kL2RldGFpbC9pZC80NTk2My5odG1sXFxcIn1cIixcInNhdmVkXCI6ZmFsc2UsXCJ0aXRsZVwiOlwi6L275ZCI6ZuGLuiXjeWHi1wiLFwidmVyc2lvblwiOjAsXCJ1cmxcIjpcImh0dHA6Ly93d3cuYW9vYi50b3AvaW5kZXgucGhwL3ZvZC9kZXRhaWwvaWQvNDU5NjMuaHRtbFwiLFwiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcImZpbmRfcnVsZVwiOlwianM6XFxubGV0IG15Q29sbGVjdGlvbl9lbCA9IFtdLFxcbiAgICBwYWdlTnVtID0gMVxcblxcbi8vIOWkhOeQhk1ZX1VSTOWSjE1ZX1JVTEVcXG5sZXQgUlVMRSA9IE1ZX1BBUkFNUy5SVUxFXFxuTVlfUlVMRS51YSA9IFJVTEUudWFcXG5NWV9SVUxFLnRpdGxlID0gUlVMRS50aXRsZVxcbk1ZX1JVTEUuY29sX3R5cGUgPSBSVUxFLmRldGFpbF9jb2xfdHlwZVxcbk1ZX1JVTEUuZmluZF9ydWxlID0gUlVMRS5kZXRhaWxfZmluZF9ydWxlXFxuTVlfUlVMRS5wcmVSdWxlID0gUlVMRS5wcmVSdWxlXFxuTVlfUlVMRS5wYWdlTGlzdCA9IFJVTEUucGFnZUxpc3RcXG5NWV9SVUxFLnBhZ2VzID0gUlVMRS5wYWdlc1xcbk1ZX1JVTEUubGFzdF9jaGFwdGVyX3J1bGUgPSBSVUxFLmxhc3RfY2hhcHRlcl9ydWxlXFxuTVlfUlVMRS5wYXJhbXMgPSBSVUxFLnBhcmFtc1xcblxcbmNvbnN0IHsgcnVuQ29kZSwgdXJsUGFyc2UgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL3V0aWxpdHk/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJykpXFxubGV0IGZ5cGFnZUZsYWcgPSBNWV9QQVJBTVMudXJsLmluZGV4T2YoJ2Z5cGFnZScpXFxuaWYgKGZ5cGFnZUZsYWcgPj0gMCkgcGFnZU51bSA9IHBhcnNlSW50KC9eXFxcXGQrLy5leGVjKE1ZX1VSTC5zbGljZShmeXBhZ2VGbGFnKSkpXFxudmFyIHsgTVlfVVJMLCBNWV9VUkxfT3B0aW9ucyB9ID0gdXJsUGFyc2UoTVlfUEFSQU1TLnVybCwgUlVMRS51cmxIZWFkZXJzLCBwYWdlTnVtKSxcXG4gICAgaW5kZXhIdG1sID0gZmV0Y2goTVlfVVJMLCBNWV9VUkxfT3B0aW9ucylcXG5NWV9SVUxFLnVybCA9IE1ZX1VSTFxcbk1ZX1JVTEUudXJsSGVhZGVycyA9IE1ZX1VSTF9PcHRpb25zLmhlYWRlcnNcXG4vLyDop6PmnpDmraPmlodcXG5pZiAoTVlfUEFSQU1TLnBhZ2VUaXRsZSkgc2V0UGFnZVRpdGxlKE1ZX1BBUkFNUy5wYWdlVGl0bGUpXFxuZXZhbChNWV9SVUxFLnByZVJ1bGUpXFxuc2V0TGFzdENoYXB0ZXJSdWxlKE1ZX1JVTEUubGFzdF9jaGFwdGVyX3J1bGUpXFxuTVlfUEFSQU1TID0gTVlfUlVMRS5wYXJhbXNcXG5pZiAoTVlfUlVMRS5maW5kX3J1bGUuc3RhcnRzV2l0aCgnanM6JykpIHtcXG4gICAgZnVuY3Rpb24gZ2V0VXJsKCkge1xcbiAgICAgICAgcmV0dXJuIE1ZX1VSTFxcbiAgICB9XFxuXFxuICAgIGZ1bmN0aW9uIGdldFJlc0NvZGUoKSB7XFxuICAgICAgICByZXR1cm4gaW5kZXhIdG1sXFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gc2V0UmVzdWx0KGVsLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKSB7XFxuICAgICAgICBwYXJhbTEgPSBDQUxMQkFDS19LRVlcXG4gICAgICAgIHBhcmFtMiA9IE1ZX1JVTEVcXG4gICAgICAgIHBhcmFtMyA9IE1ZX1RZUEVcXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVsLmRhdGEpKSBlbCA9IGVsLmRhdGFcXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG15Q29sbGVjdGlvbl9lbCwgZWwubWFwKCh2KSA9PiB7XFxuICAgICAgICAgICAgbGV0IE1ZX19SVUxFID0gT2JqZWN0LmFzc2lnbih7fSwgTVlfUlVMRSlcXG4gICAgICAgICAgICB2LmNvbF90eXBlID0gdi5jb2xfdHlwZSB8fCBNWV9SVUxFLmNvbF90eXBlXFxuXFxuICAgICAgICAgICAgaWYgKCF2LnVybCB8fCBbJ3J1bGUnLCAncGljcycsICd0b2FzdCcsICdpbnB1dCcsICdjb3B5JywgJ2VkaXRGaWxlJywgJ3g1JywgJ3g1V2ViVmlldycsICd4NVBsYXknLCAnd2ViJywgJ3NlbGVjdCcsICd4NVJ1bGUnLCAnd2ViUnVsZSddLmZpbmQoKHZ2KSA9PiB2LnVybC5zdGFydHNXaXRoKHZ2ICsgJzovLycpKSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuaW5jbHVkZXMoJ0BydWxlPScpKSB7XFxuICAgICAgICAgICAgICAgIGxldCBbXywgdXJsLCBydWxlXSA9IHYudXJsLm1hdGNoKC9eKFtcXFxcc1xcXFxTXSo/KUBydWxlPShbXFxcXHNcXFxcU10qKSQvKVxcbiAgICAgICAgICAgICAgICB2LnVybCA9IHVybFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gcnVsZVxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBNWV9SVUxFLmNvbF90eXBlXFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5zdGFydHNXaXRoKCdoaWtlcjovL3BhZ2UvJykpIHtcXG4gICAgICAgICAgICAgICAgaWYgKHYudXJsLmluY2x1ZGVzKCdydWxlPScpIHx8ICh2LmV4dHJhIHx8IHt9KS5ydWxlKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICAgICAgbGV0IFtfLCBwYXRoLCBwYXJhbXNdID0gdi51cmwuc3BsaXQoJyMnKVswXS5tYXRjaCgvXmhpa2VyOlxcXFwvXFxcXC9wYWdlXFxcXC8oLis/KSg/OlxcXFw/KC4qKSk/JC8pLFxcbiAgICAgICAgICAgICAgICAgICAgc3ViUGFnZSA9IE1ZX1JVTEUucGFnZUxpc3QuZmluZCgodikgPT4gdi5wYXRoID09IHBhdGgpLFxcbiAgICAgICAgICAgICAgICAgICAgc3ViVXJsID0gKHBhcmFtcyB8fCAnJykuc3BsaXQoJyYnKS5maW5kKCh2KSA9PiB2LnN0YXJ0c1dpdGgoJ3VybD0nKSlcXG4gICAgICAgICAgICAgICAgdi51cmwgPSBzdWJVcmwgPyBzdWJVcmwuc2xpY2UoNCkucmVwbGFjZSgv77yf77yfL2csICc/JykucmVwbGFjZSgv77yG77yGL2csICcmJykgOiAodi5leHRyYSB8fCB7fSkudXJsIHx8ICdoaWtlcjovL2VtcHR5PycgKyAocGFyYW1zIHx8ICcnKVxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gc3ViUGFnZS5ydWxlXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9jb2xfdHlwZSA9IHN1YlBhZ2UuY29sX3R5cGVcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUucGFyYW1zID0gdi5leHRyYSB8fCB7fVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuaW5jbHVkZXMoJ0BsYXp5UnVsZT0nKSkge1xcbiAgICAgICAgICAgICAgICB2LnVybCA9IHYudXJsLnJlcGxhY2UoJy5qczonLCAnLmpzOlxcXFxuaWYoTVlfUlVMRSlPYmplY3QuYXNzaWduKE1ZX1JVTEUsJyArICQuc3RyaW5naWZ5KHsgcGFnZXM6IE1ZX1JVTEUucGFnZXMsIHBhZ2VMaXN0OiBNWV9SVUxFLnBhZ2VMaXN0LCBmaW5kX3J1bGU6ICcnLCBwYXJhbXM6ICcnIH0pICsgJyk7TVlfVVJMPVxcXCInICsgTVlfVVJMICsgJ1xcXCI7JylcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICB9IGVsc2UgeyByZXR1cm4gdiB9XFxuICAgICAgICAgICAgdi5leHRyYSA9IHsgdXJsOiB2LnVybCwgUlVMRTogTVlfX1JVTEUgfVxcbiAgICAgICAgICAgIHYudXJsID0gJ2hpa2VyOi8vcGFnZS9kZXRhaWxMb2FkP3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpXFxuICAgICAgICAgICAgaWYgKHYuZXh0cmEuUlVMRS51cmwuaW5jbHVkZXMoJyNpbW1lcnNpdmVUaGVtZSMnKSkgdi51cmwgKz0gJyYjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICB9KSlcXG4gICAgICAgIG1ldGhvZF9zZXRSZXN1bHQuaW52b2tlKGphdmFDb250ZXh0LCBteUNvbGxlY3Rpb25fZWwsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpXFxuICAgIH1cXG4gICAgc2V0SG9tZVJlc3VsdCA9IHNldFJlc3VsdFxcbiAgICBzZXRTZWFyY2hSZXN1bHQgPSBzZXRSZXN1bHRcXG5cXG4gICAgZXZhbChNWV9SVUxFLmZpbmRfcnVsZS5zbGljZSgzKSlcXG59IGVsc2Uge1xcbiAgICBsZXQgW18sIGZpbmRSdWxlLCBkZXRhaWxGaW5kUnVsZV0gPSBNWV9SVUxFLmZpbmRfcnVsZS5tYXRjaCgvXiguKj8pKD86PT0+KC4qKSk/JC8pXFxuICAgIGZpbmRSdWxlID0gZmluZFJ1bGUuc3BsaXQoJzsnKVxcbiAgICBwYXJzZURvbUZvckFycmF5KGluZGV4SHRtbCwgZmluZFJ1bGUuc2hpZnQoKSkuZm9yRWFjaCgoZGF0YSkgPT4ge1xcbiAgICAgICAgbGV0IFt0aXRsZSwgaW1nLCBkZXNjLCB1cmxdID0gZmluZFJ1bGUubWFwKCh2LCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAodiA9PSAnKicpIHJldHVybiAnJ1xcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB2ID0gKGkgPT0gMSB8fCBpID09IDMpID9cXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvbShkYXRhLCB2KSA6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VEb21Gb3JIdG1sKGRhdGEsIHYpXFxuICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSAzKSB2ID0gcnVuQ29kZSh2KVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gJycgfVxcbiAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIHJlcyA9IHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcXG4gICAgICAgICAgICAgICAgZGVzYzogZGVzYyxcXG4gICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBNWV9SVUxFLmNvbF90eXBlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgaWYgKHJlcy51cmwpIHtcXG4gICAgICAgICAgICBpZiAocmVzLnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxuICAgICAgICAgICAgICAgIHJlcy51cmwgPSByZXMudXJsLnJlcGxhY2UoJy5qczonLCAnLmpzOlxcXFxuaWYoTVlfUlVMRSlPYmplY3QuYXNzaWduKE1ZX1JVTEUsJyArICQuc3RyaW5naWZ5KHsgcGFnZXM6IE1ZX1JVTEUucGFnZXMsIHBhZ2VMaXN0OiBNWV9SVUxFLnBhZ2VMaXN0LCBmaW5kX3J1bGU6ICcnLCBwYXJhbXM6ICcnIH0pICsgJyk7TVlfVVJMPVxcXCInICsgTVlfVVJMICsgJ1xcXCI7JylcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRldGFpbEZpbmRSdWxlKSB7XFxuICAgICAgICAgICAgICAgIHJlcy5leHRyYSA9IHsgdXJsOiB1cmwsIFJVTEU6IE9iamVjdC5hc3NpZ24oe30sIE1ZX1JVTEUsIHsgZGV0YWlsX2ZpbmRfcnVsZTogZGV0YWlsRmluZFJ1bGUgfSkgfVxcbiAgICAgICAgICAgICAgICByZXMudXJsID0gJ2hpa2VyOi8vcGFnZS9kZXRhaWxMb2FkP3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpXFxuICAgICAgICAgICAgICAgIGlmIChyZXMuZXh0cmEuUlVMRS51cmwuaW5jbHVkZXMoJyNpbW1lcnNpdmVUaGVtZSMnKSkgcmVzLnVybCArPSAnJiNpbW1lcnNpdmVUaGVtZSMnXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgbXlDb2xsZWN0aW9uX2VsLnB1c2gocmVzKVxcbiAgICB9KVxcbiAgICBzZXRSZXN1bHQobXlDb2xsZWN0aW9uX2VsKVxcbn1cXG5cIixcImdyb3VwXCI6XCLikaDovbvlkIjpm4ZcIixcInVhXCI6XCJtb2JpbGVcIixcInByZVJ1bGVcIjpcInNldEl0ZW0oJ215Q29sbGVjdGlvbicsIE1ZX1JVTEUudGl0bGUpXFxuc2V0SXRlbSgncmVtb3RlVXJsJywgJ2h0dHA6Ly9oaWtlci5ub2tpYS5wcmVzcy9oaWtlcnVsZS9kZXYvanNvbl9saXN0P25hbWU9MTI4NjA5ODExNCcpXFxuLy8gXFxuLy8g5YyF6KO56ZSZ6K+vXCIsXCJwYWdlc1wiOlwiW3tcXFwiY29sX3R5cGVcXFwiOlxcXCJ0ZXh0XzFcXFwiLFxcXCJuYW1lXFxcIjpcXFwiQ2xhc3NUYWJcXFwiLFxcXCJwYXRoXFxcIjpcXFwiQ2xhc3NUYWJcXFwiLFxcXCJydWxlXFxcIjpcXFwiZnVuY3Rpb24gQ2xhc3NUYWIoY2xhc3NBcnJheSwgcGFyYW1zKSB7XFxcXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBwYXJhbXMpXFxcXG4gICAgdGhpcy5hcnIgPSBjbGFzc0FycmF5Lm1hcCh2ID0+IHRoaXMuaW5pdCh2KSlcXFxcbiAgICB0aGlzLnNpZ24gPSAnJCcgKyBNWV9SVUxFLnRpdGxlICsgJ18nICsgKHRoaXMubmFtZSB8fCAnJykgKyAnXydcXFxcbiAgICB0aGlzLmNvbG9yID0gdGhpcy5jb2xvciB8fCAnIzEyYjY2OCdcXFxcbiAgICB0aGlzLmJvdW5kYXJ5ID0gdGhpcy5ib3VuZGFyeSB8fCAnYmxhbmtfYmxvY2snXFxcXG59XFxcXG5DbGFzc1RhYi5wcm90b3R5cGUgPSB7XFxcXG4gICAgY29uc3RydWN0b3I6IENsYXNzVGFiLFxcXFxuICAgIGxvYWQoZWwpIHtcXFxcbiAgICAgICAgbGV0IGZvbGRlZCA9IGdldFZhcignZm9sZF8nICsgdGhpcy5zaWduLCAnJylcXFxcbiAgICAgICAgaWYgKHRoaXMuZm9sZCkgZWwucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzA0OWVmZlxcXFxcXFwiPicgKyAoZm9sZGVkID8gJ+KWticgOiAn4pa8JyksXFxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHNpZ24sIGZvbGRlZCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHB1dFZhcignZm9sZF8nICsgc2lnbiwgeyAnJzogJ1QnLCAnVCc6ICcnIH0gW2ZvbGRlZF0pXFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgICAgICAgICAgfSwgdGhpcy5zaWduLCBmb2xkZWQpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcXFxuICAgICAgICB9KVxcXFxuICAgICAgICBsZXQgYXJyID0gZm9sZGVkID8gW3RoaXMuYXJyWzBdXSA6IHRoaXMuYXJyXFxcXG4gICAgICAgIGFyci5mb3JFYWNoKCh2KSA9PiB7XFxcXG4gICAgICAgICAgICBsZXQgeyBpZCwgY2xhc3NfbmFtZSwgY2xhc3NfdXJsIH0gPSB2LFxcXFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkID0gSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRDbGFzcyhpZCkpXFxcXG4gICAgICAgICAgICBjbGFzc19uYW1lLmZvckVhY2goKG5hbWUsIGkpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdXJsID0gY2xhc3NfdXJsW2ldLFxcXFxuICAgICAgICAgICAgICAgICAgICBub3cgPSBKU09OLnN0cmluZ2lmeSh7IG5hbWU6IG5hbWUsIHVybDogdXJsIH0pXFxcXG4gICAgICAgICAgICAgICAgZWwucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAoc2VsZWN0ZWQgPT0gbm93ID8gJ+KAnOKAnOKAneKAnTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6JyArIHRoaXMuY29sb3IgKyAnXFxcXFxcXCI+PGI+JyA6ICcnKSArIG5hbWUsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc2lnbiwgaWQsIG5vdykgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKHNpZ24gKyBpZCwgbm93KVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKHNpZ24sIG5vdylcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgICAgICAgICAgICAgICAgICB9LCB0aGlzLnNpZ24sIGlkLCBub3cpLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG4gICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICBlbC5wdXNoKHsgY29sX3R5cGU6IHRoaXMuYm91bmRhcnkgfSlcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9LFxcXFxuICAgIGluaXQoY2xhc3NPYmplY3QpIHtcXFxcbiAgICAgICAgaWYgKHR5cGVvZiBjbGFzc09iamVjdC5jbGFzc19uYW1lID09ICdzdHJpbmcnKVxcXFxuICAgICAgICAgICAgY2xhc3NPYmplY3QuY2xhc3NfbmFtZSA9IGNsYXNzT2JqZWN0LmNsYXNzX25hbWUuc3BsaXQoJyYnKVxcXFxuICAgICAgICBpZiAodHlwZW9mIGNsYXNzT2JqZWN0LmNsYXNzX3VybCA9PSAnc3RyaW5nJylcXFxcbiAgICAgICAgICAgIGNsYXNzT2JqZWN0LmNsYXNzX3VybCA9IGNsYXNzT2JqZWN0LmNsYXNzX3VybC5zcGxpdCgnJicpLm1hcCgodikgPT4gdi50cmltKCkpXFxcXG4gICAgICAgIHJldHVybiBjbGFzc09iamVjdFxcXFxuICAgIH0sXFxcXG4gICAgcHVzaChjbGFzc09iamVjdCkge1xcXFxuICAgICAgICB0aGlzLmFyci5wdXNoKHRoaXMuaW5pdChjbGFzc09iamVjdCkpXFxcXG4gICAgfSxcXFxcbiAgICBnZXRDbGFzcyhpZCkge1xcXFxuICAgICAgICBsZXQgZGVmYXVsdENsYXNzID0gdGhpcy5hcnIuZmluZChpdGVtID0+IGl0ZW0uaWQgPT0gaWQpXFxcXG4gICAgICAgIGlmIChkZWZhdWx0Q2xhc3MpIGRlZmF1bHRDbGFzcyA9IEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgICAgIG5hbWU6IGRlZmF1bHRDbGFzcy5jbGFzc19uYW1lWzBdLFxcXFxuICAgICAgICAgICAgdXJsOiBkZWZhdWx0Q2xhc3MuY2xhc3NfdXJsWzBdXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgZmluZCBpZDogJyArIGlkICsgJyBpbiBjbGFzc1RhYjogJyArIHRoaXMuc2lnbilcXFxcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZ2V0VmFyKHRoaXMuc2lnbiArIGlkLCBkZWZhdWx0Q2xhc3MpKVxcXFxuICAgIH0sXFxcXG4gICAgZ2V0TGFzdENsaWNrKCkge1xcXFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShnZXRWYXIodGhpcy5zaWduLCAne30nKSlcXFxcbiAgICB9LFxcXFxuICAgIHNldFVybCh1cmwpIHtcXFxcbiAgICAgICAgcmV0dXJuIHVybC5yZXBsYWNlKC9cXFxcXFxcXCRcXFxcXFxcXHsoW159XSopXFxcXFxcXFx9L2csIChfLCBpZCkgPT4gdGhpcy5nZXRDbGFzcyhpZCkudXJsKVxcXFxuICAgIH1cXFxcbn1cXFxcbiQuZXhwb3J0cyA9IENsYXNzVGFiXFxcXG5cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLpppbpobVcXFwiLFxcXCJwYXRoXFxcIjpcXFwiaW5kZXhMb2FkXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxubGV0IG15Q29sbGVjdGlvbl9lbCA9IFtdLFxcXFxuICAgIHBhZ2VOdW0gPSBwYXJzZUludChNWV9VUkwuc3BsaXQoJyMnKVsxXSksXFxcXG4gICAgUlVMRSA9IE1ZX1BBUkFNUy5SVUxFLFxcXFxuICAgIGZ5QWxsID0gUlVMRS51cmwuaW5jbHVkZXMoJ2Z5QWxsJyksXFxcXG4gICAgLy8g5Yqg6L29Q2xhc3NUYWLnu4Tku7ZcXFxcbiAgICBDbGFzc1RhYiA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL0NsYXNzVGFiP3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpKSxcXFxcbiAgICB0YWJIZWFkZXIgPSBbXVxcXFxuXFxcXG5pZiAoUlVMRS5jbGFzc19uYW1lKSB0YWJIZWFkZXIucHVzaCh7XFxcXG4gICAgaWQ6IGZ5QWxsID8gJ2Z5QWxsJyA6ICdmeWNsYXNzJyxcXFxcbiAgICBjbGFzc19uYW1lOiBSVUxFLmNsYXNzX25hbWUsXFxcXG4gICAgY2xhc3NfdXJsOiBSVUxFLmNsYXNzX3VybFxcXFxufSlcXFxcbmlmIChSVUxFLmFyZWFfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcXFxuICAgIGlkOiBmeUFsbCA/ICdmeUFsbCcgOiAnZnlhcmVhJyxcXFxcbiAgICBjbGFzc19uYW1lOiBSVUxFLmFyZWFfbmFtZSxcXFxcbiAgICBjbGFzc191cmw6IFJVTEUuYXJlYV91cmxcXFxcbn0pXFxcXG5pZiAoUlVMRS55ZWFyX25hbWUpIHRhYkhlYWRlci5wdXNoKHtcXFxcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5eWVhcicsXFxcXG4gICAgY2xhc3NfbmFtZTogUlVMRS55ZWFyX25hbWUsXFxcXG4gICAgY2xhc3NfdXJsOiBSVUxFLnllYXJfdXJsXFxcXG59KVxcXFxuaWYgKFJVTEUuc29ydF9uYW1lKSB0YWJIZWFkZXIucHVzaCh7XFxcXG4gICAgaWQ6IGZ5QWxsID8gJ2Z5QWxsJyA6ICdmeXNvcnQnLFxcXFxuICAgIGNsYXNzX25hbWU6IFJVTEUuc29ydF9uYW1lLFxcXFxuICAgIGNsYXNzX3VybDogUlVMRS5zb3J0X3VybFxcXFxufSlcXFxcbnRhYkhlYWRlciA9IG5ldyBDbGFzc1RhYih0YWJIZWFkZXIsIHsgbmFtZTogUlVMRS50aXRsZSB9KVxcXFxuaWYgKHBhZ2VOdW0gPT0gMSkge1xcXFxuICAgIGFkZExpc3RlbmVyKCdvbkNsb3NlJywgJ2NsZWFyVmFyKFxcXFxcXFwibXlDb2xsZWN0aW9uLXNlYXJjaE1vZGVcXFxcXFxcIiknKVxcXFxuICAgIHB1dFZhcignbXlDb2xsZWN0aW9uLXNlYXJjaE1vZGUnLCBSVUxFLnRpdGxlKVxcXFxuICAgIHRhYkhlYWRlci5sb2FkKG15Q29sbGVjdGlvbl9lbClcXFxcbiAgICBpZiAoUlVMRS5zZWFyY2hfdXJsKSBteUNvbGxlY3Rpb25fZWwucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBcXFxcXFxcIuaQnOe0olxcXFxcXFwiLFxcXFxuICAgICAgICBkZXNjOiBcXFxcXFxcIuaQnOS9oOaDs+imgeeahC4uLlxcXFxcXFwiLFxcXFxuICAgICAgICB1cmw6ICdcXFxcXFxcImhpa2VyOi8vcGFnZS9zaW5nbGVTZWFyY2g/a2V5d29yZD1cXFxcXFxcIitpbnB1dCtcXFxcXFxcIiZwYWdlPWZ5cGFnZVxcXFxcXFwiJyxcXFxcbiAgICAgICAgZXh0cmE6IHsgcnVsZTogZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJyksIFJVTEU6IFJVTEUgfSxcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaW5wdXRcXFxcXFxcIixcXFxcbiAgICB9KVxcXFxufVxcXFxuLy8g5aSE55CGTVlfVVJM5ZKMTVlfUlVMRVxcXFxuTVlfUlVMRS51YSA9IFJVTEUudWFcXFxcbk1ZX1JVTEUudGl0bGUgPSBSVUxFLnRpdGxlXFxcXG5NWV9SVUxFLmNvbF90eXBlID0gUlVMRS5jb2xfdHlwZVxcXFxuTVlfUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBSVUxFLmRldGFpbF9jb2xfdHlwZVxcXFxuTVlfUlVMRS5maW5kX3J1bGUgPSBSVUxFLmZpbmRfcnVsZVxcXFxuTVlfUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gUlVMRS5kZXRhaWxfZmluZF9ydWxlXFxcXG5NWV9SVUxFLnByZVJ1bGUgPSBSVUxFLnByZVJ1bGVcXFxcbk1ZX1JVTEUucGFnZUxpc3QgPSBKU09OLnBhcnNlKFJVTEUucGFnZXMgfHwgJ1tdJylcXFxcbk1ZX1JVTEUucGFnZXMgPSBKU09OLnN0cmluZ2lmeShNWV9SVUxFLnBhZ2VMaXN0KVxcXFxuTVlfUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZSA9IFJVTEUubGFzdF9jaGFwdGVyX3J1bGVcXFxcbk1ZX1JVTEUucGFyYW1zID0ge31cXFxcblxcXFxuY29uc3QgeyBydW5Db2RlLCB1cmxQYXJzZSB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvdXRpbGl0eT9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSlcXFxcbnZhciB7IE1ZX1VSTCwgTVlfVVJMX09wdGlvbnMgfSA9IHVybFBhcnNlKFJVTEUudXJsLCB7fSwgcGFnZU51bSwgKHVybCkgPT4ge1xcXFxuICAgIHVybFswXSA9IGZ5QWxsID8gdXJsWzBdLnJlcGxhY2UoL2Z5QWxsL2csICckJHtmeUFsbH0nKSA6IHVybFswXS5yZXBsYWNlKC9meShjbGFzc3xhcmVhfHllYXJ8c29ydCkvZywgJyQke2Z5JDF9JylcXFxcbiAgICB1cmxbMF0gPSB0YWJIZWFkZXIuc2V0VXJsKHVybFswXSlcXFxcbn0pLFxcXFxuICAgIGluZGV4SHRtbCA9IGZldGNoKE1ZX1VSTCwgTVlfVVJMX09wdGlvbnMpXFxcXG5NWV9SVUxFLnVybCA9IE1ZX1VSTFxcXFxuTVlfUlVMRS51cmxIZWFkZXJzID0gTVlfVVJMX09wdGlvbnMuaGVhZGVyc1xcXFxuLy8g5q2j5paH6Kej5p6QXFxcXG5pZiAocGFnZU51bSA9PSAxKSBldmFsKE1ZX1JVTEUucHJlUnVsZSlcXFxcbmlmIChNWV9SVUxFLmZpbmRfcnVsZS5zdGFydHNXaXRoKCdqczonKSkge1xcXFxuICAgIGZ1bmN0aW9uIGdldFVybCgpIHtcXFxcbiAgICAgICAgcmV0dXJuIE1ZX1VSTFxcXFxuICAgIH1cXFxcblxcXFxuICAgIGZ1bmN0aW9uIGdldFJlc0NvZGUoKSB7XFxcXG4gICAgICAgIHJldHVybiBpbmRleEh0bWxcXFxcbiAgICB9XFxcXG5cXFxcbiAgICBmdW5jdGlvbiBzZXRSZXN1bHQoZWwsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpIHtcXFxcbiAgICAgICAgcGFyYW0xID0gQ0FMTEJBQ0tfS0VZXFxcXG4gICAgICAgIHBhcmFtMiA9IE1ZX1JVTEVcXFxcbiAgICAgICAgcGFyYW0zID0gTVlfVFlQRVxcXFxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbC5kYXRhKSkgZWwgPSBlbC5kYXRhXFxcXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG15Q29sbGVjdGlvbl9lbCwgZWwubWFwKCh2KSA9PiB7XFxcXG4gICAgICAgICAgICBsZXQgTVlfX1JVTEUgPSBPYmplY3QuYXNzaWduKHt9LCBNWV9SVUxFKVxcXFxuICAgICAgICAgICAgdi5jb2xfdHlwZSA9IHYuY29sX3R5cGUgfHwgTVlfUlVMRS5jb2xfdHlwZVxcXFxuXFxcXG4gICAgICAgICAgICBpZiAoIXYudXJsIHx8IFsncnVsZScsICdwaWNzJywgJ3RvYXN0JywgJ2lucHV0JywgJ2NvcHknLCAnZWRpdEZpbGUnLCAneDUnLCAneDVXZWJWaWV3JywgJ3g1UGxheScsICd3ZWInLCAnc2VsZWN0JywgJ3g1UnVsZScsICd3ZWJSdWxlJ10uZmluZCgodnYpID0+IHYudXJsLnN0YXJ0c1dpdGgodnYgKyAnOi8vJykpKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuaW5jbHVkZXMoJ0BydWxlPScpKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IFtfLCB1cmwsIHJ1bGVdID0gdi51cmwubWF0Y2goL14oW1xcXFxcXFxcc1xcXFxcXFxcU10qPylAcnVsZT0oW1xcXFxcXFxcc1xcXFxcXFxcU10qKSQvKVxcXFxuICAgICAgICAgICAgICAgIHYudXJsID0gdXJsXFxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHJ1bGVcXFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBNWV9SVUxFLmNvbF90eXBlXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSkge1xcXFxuICAgICAgICAgICAgICAgIGlmICh2LnVybC5pbmNsdWRlcygncnVsZT0nKSB8fCAodi5leHRyYSB8fCB7fSkucnVsZSlcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgICAgICBsZXQgW18sIHBhdGgsIHBhcmFtc10gPSB2LnVybC5zcGxpdCgnIycpWzBdLm1hdGNoKC9eaGlrZXI6XFxcXFxcXFwvXFxcXFxcXFwvcGFnZVxcXFxcXFxcLyguKz8pKD86XFxcXFxcXFw/KC4qKSk/JC8pLFxcXFxuICAgICAgICAgICAgICAgICAgICBzdWJQYWdlID0gTVlfUlVMRS5wYWdlTGlzdC5maW5kKCh2KSA9PiB2LnBhdGggPT0gcGF0aCksXFxcXG4gICAgICAgICAgICAgICAgICAgIHN1YlVybCA9IChwYXJhbXMgfHwgJycpLnNwbGl0KCcmJykuZmluZCgodikgPT4gdi5zdGFydHNXaXRoKCd1cmw9JykpXFxcXG4gICAgICAgICAgICAgICAgdi51cmwgPSBzdWJVcmwgPyBzdWJVcmwuc2xpY2UoNCkucmVwbGFjZSgv77yf77yfL2csICc/JykucmVwbGFjZSgv77yG77yGL2csICcmJykgOiAodi5leHRyYSB8fCB7fSkudXJsIHx8ICdoaWtlcjovL2VtcHR5PycgKyAocGFyYW1zIHx8ICcnKVxcXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBzdWJQYWdlLnJ1bGVcXFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBzdWJQYWdlLmNvbF90eXBlXFxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUucGFyYW1zID0gdi5leHRyYSB8fCB7fVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxcXG4gICAgICAgICAgICAgICAgdi51cmwgPSB2LnVybC5yZXBsYWNlKCcuanM6JywgJy5qczpcXFxcXFxcXG5pZihNWV9SVUxFKU9iamVjdC5hc3NpZ24oTVlfUlVMRSwnICsgJC5zdHJpbmdpZnkoeyBwYWdlczogTVlfUlVMRS5wYWdlcywgcGFnZUxpc3Q6IE1ZX1JVTEUucGFnZUxpc3QsIGZpbmRfcnVsZTogJycsIHBhcmFtczogJycgfSkgKyAnKTtNWV9VUkw9XFxcXFxcXCInICsgTVlfVVJMICsgJ1xcXFxcXFwiOycpXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIU1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSB8fCB2LnVybC5zdGFydHNXaXRoKCdoaWtlcjovLycpKSB7IHJldHVybiB2IH1cXFxcbiAgICAgICAgICAgIHYuZXh0cmEgPSB7IHVybDogdi51cmwsIFJVTEU6IE1ZX19SVUxFLCBwYWdlVGl0bGU6IHYudGl0bGUgfVxcXFxuICAgICAgICAgICAgdi51cmwgPSAnaGlrZXI6Ly9wYWdlL2RldGFpbExvYWQ/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJylcXFxcbiAgICAgICAgICAgIGlmICh2LmV4dHJhLlJVTEUudXJsLmluY2x1ZGVzKCcjaW1tZXJzaXZlVGhlbWUjJykpIHYudXJsICs9ICcmI2ltbWVyc2l2ZVRoZW1lIydcXFxcbiAgICAgICAgICAgIHJldHVybiB2XFxcXG4gICAgICAgIH0pKVxcXFxuICAgICAgICBtZXRob2Rfc2V0UmVzdWx0Lmludm9rZShqYXZhQ29udGV4dCwgbXlDb2xsZWN0aW9uX2VsLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKVxcXFxuICAgIH1cXFxcbiAgICBzZXRIb21lUmVzdWx0ID0gc2V0UmVzdWx0XFxcXG4gICAgc2V0U2VhcmNoUmVzdWx0ID0gc2V0UmVzdWx0XFxcXG5cXFxcbiAgICBldmFsKE1ZX1JVTEUuZmluZF9ydWxlLnNsaWNlKDMpKVxcXFxufSBlbHNlIHtcXFxcbiAgICBsZXQgZmluZFJ1bGUgPSBNWV9SVUxFLmZpbmRfcnVsZS5zcGxpdCgnOycpXFxcXG4gICAgcGFyc2VEb21Gb3JBcnJheShpbmRleEh0bWwsIGZpbmRSdWxlLnNoaWZ0KCkpLmZvckVhY2goKGRhdGEpID0+IHtcXFxcbiAgICAgICAgbGV0IFt0aXRsZSwgaW1nLCBkZXNjLCB1cmxdID0gZmluZFJ1bGUubWFwKCh2LCBpKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gJyonKSByZXR1cm4gJydcXFxcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB2ID0gKGkgPT0gMSB8fCBpID09IDMpID9cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tKGRhdGEsIHYpIDpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tRm9ySHRtbChkYXRhLCB2KVxcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSAzKSB2ID0gcnVuQ29kZSh2KVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlxcXFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuICcnIH1cXFxcbiAgICAgICAgICAgIH0pLFxcXFxuICAgICAgICAgICAgcmVzID0ge1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXFxcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLFxcXFxuICAgICAgICAgICAgICAgIGltZzogaW1nLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBNWV9SVUxFLmNvbF90eXBlXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIGlmIChyZXMudXJsKSB7XFxcXG4gICAgICAgICAgICBpZiAocmVzLnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxcXG4gICAgICAgICAgICAgICAgcmVzLnVybCA9IHJlcy51cmwucmVwbGFjZSgnLmpzOicsICcuanM6XFxcXFxcXFxuaWYoTVlfUlVMRSlPYmplY3QuYXNzaWduKE1ZX1JVTEUsJyArICQuc3RyaW5naWZ5KHsgcGFnZXM6IE1ZX1JVTEUucGFnZXMsIHBhZ2VMaXN0OiBNWV9SVUxFLnBhZ2VMaXN0LCBmaW5kX3J1bGU6ICcnLCBwYXJhbXM6ICcnIH0pICsgJyk7TVlfVVJMPVxcXFxcXFwiJyArIE1ZX1VSTCArICdcXFxcXFxcIjsnKVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUpIHtcXFxcbiAgICAgICAgICAgICAgICByZXMuZXh0cmEgPSB7IHVybDogdXJsLCBSVUxFOiBNWV9SVUxFLCBwYWdlVGl0bGU6IHRpdGxlIH1cXFxcbiAgICAgICAgICAgICAgICByZXMudXJsID0gJ2hpa2VyOi8vcGFnZS9kZXRhaWxMb2FkP3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpXFxcXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5leHRyYS5SVUxFLnVybC5pbmNsdWRlcygnI2ltbWVyc2l2ZVRoZW1lIycpKSByZXMudXJsICs9ICcmI2ltbWVyc2l2ZVRoZW1lIydcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBteUNvbGxlY3Rpb25fZWwucHVzaChyZXMpXFxcXG4gICAgfSlcXFxcbiAgICBzZXRSZXN1bHQobXlDb2xsZWN0aW9uX2VsKVxcXFxufVxcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6K+m5oOFXFxcIixcXFwicGF0aFxcXCI6XFxcImRldGFpbExvYWRcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG5sZXQgbXlDb2xsZWN0aW9uX2VsID0gW10sXFxcXG4gICAgcGFnZU51bSA9IDFcXFxcblxcXFxuLy8g5aSE55CGTVlfVVJM5ZKMTVlfUlVMRVxcXFxubGV0IFJVTEUgPSBNWV9QQVJBTVMuUlVMRVxcXFxuTVlfUlVMRS51YSA9IFJVTEUudWFcXFxcbk1ZX1JVTEUudGl0bGUgPSBSVUxFLnRpdGxlXFxcXG5NWV9SVUxFLmNvbF90eXBlID0gUlVMRS5kZXRhaWxfY29sX3R5cGVcXFxcbk1ZX1JVTEUuZmluZF9ydWxlID0gUlVMRS5kZXRhaWxfZmluZF9ydWxlXFxcXG5NWV9SVUxFLnByZVJ1bGUgPSBSVUxFLnByZVJ1bGVcXFxcbk1ZX1JVTEUucGFnZUxpc3QgPSBSVUxFLnBhZ2VMaXN0XFxcXG5NWV9SVUxFLnBhZ2VzID0gUlVMRS5wYWdlc1xcXFxuTVlfUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZSA9IFJVTEUubGFzdF9jaGFwdGVyX3J1bGVcXFxcbk1ZX1JVTEUucGFyYW1zID0gUlVMRS5wYXJhbXNcXFxcblxcXFxuY29uc3QgeyBydW5Db2RlLCB1cmxQYXJzZSB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvdXRpbGl0eT9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSlcXFxcbmxldCBmeXBhZ2VGbGFnID0gTVlfUEFSQU1TLnVybC5pbmRleE9mKCdmeXBhZ2UnKVxcXFxuaWYgKGZ5cGFnZUZsYWcgPj0gMCkgcGFnZU51bSA9IHBhcnNlSW50KC9eXFxcXFxcXFxkKy8uZXhlYyhNWV9VUkwuc2xpY2UoZnlwYWdlRmxhZykpKVxcXFxudmFyIHsgTVlfVVJMLCBNWV9VUkxfT3B0aW9ucyB9ID0gdXJsUGFyc2UoTVlfUEFSQU1TLnVybCwgUlVMRS51cmxIZWFkZXJzLCBwYWdlTnVtKSxcXFxcbiAgICBpbmRleEh0bWwgPSBmZXRjaChNWV9VUkwsIE1ZX1VSTF9PcHRpb25zKVxcXFxuTVlfUlVMRS51cmwgPSBNWV9VUkxcXFxcbk1ZX1JVTEUudXJsSGVhZGVycyA9IE1ZX1VSTF9PcHRpb25zLmhlYWRlcnNcXFxcbi8vIOino+aekOato+aWh1xcXFxuaWYgKE1ZX1BBUkFNUy5wYWdlVGl0bGUpIHNldFBhZ2VUaXRsZShNWV9QQVJBTVMucGFnZVRpdGxlKVxcXFxuZXZhbChNWV9SVUxFLnByZVJ1bGUpXFxcXG5zZXRMYXN0Q2hhcHRlclJ1bGUoTVlfUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZSlcXFxcbk1ZX1BBUkFNUyA9IE1ZX1JVTEUucGFyYW1zXFxcXG5pZiAoTVlfUlVMRS5maW5kX3J1bGUuc3RhcnRzV2l0aCgnanM6JykpIHtcXFxcbiAgICBmdW5jdGlvbiBnZXRVcmwoKSB7XFxcXG4gICAgICAgIHJldHVybiBNWV9VUkxcXFxcbiAgICB9XFxcXG5cXFxcbiAgICBmdW5jdGlvbiBnZXRSZXNDb2RlKCkge1xcXFxuICAgICAgICByZXR1cm4gaW5kZXhIdG1sXFxcXG4gICAgfVxcXFxuXFxcXG4gICAgZnVuY3Rpb24gc2V0UmVzdWx0KGVsLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKSB7XFxcXG4gICAgICAgIHBhcmFtMSA9IENBTExCQUNLX0tFWVxcXFxuICAgICAgICBwYXJhbTIgPSBNWV9SVUxFXFxcXG4gICAgICAgIHBhcmFtMyA9IE1ZX1RZUEVcXFxcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWwuZGF0YSkpIGVsID0gZWwuZGF0YVxcXFxuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShteUNvbGxlY3Rpb25fZWwsIGVsLm1hcCgodikgPT4ge1xcXFxuICAgICAgICAgICAgbGV0IE1ZX19SVUxFID0gT2JqZWN0LmFzc2lnbih7fSwgTVlfUlVMRSlcXFxcbiAgICAgICAgICAgIHYuY29sX3R5cGUgPSB2LmNvbF90eXBlIHx8IE1ZX1JVTEUuY29sX3R5cGVcXFxcblxcXFxuICAgICAgICAgICAgaWYgKCF2LnVybCB8fCBbJ3J1bGUnLCAncGljcycsICd0b2FzdCcsICdpbnB1dCcsICdjb3B5JywgJ2VkaXRGaWxlJywgJ3g1JywgJ3g1V2ViVmlldycsICd4NVBsYXknLCAnd2ViJywgJ3NlbGVjdCcsICd4NVJ1bGUnLCAnd2ViUnVsZSddLmZpbmQoKHZ2KSA9PiB2LnVybC5zdGFydHNXaXRoKHZ2ICsgJzovLycpKSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiB2XFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLmluY2x1ZGVzKCdAcnVsZT0nKSkge1xcXFxuICAgICAgICAgICAgICAgIGxldCBbXywgdXJsLCBydWxlXSA9IHYudXJsLm1hdGNoKC9eKFtcXFxcXFxcXHNcXFxcXFxcXFNdKj8pQHJ1bGU9KFtcXFxcXFxcXHNcXFxcXFxcXFNdKikkLylcXFxcbiAgICAgICAgICAgICAgICB2LnVybCA9IHVybFxcXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBydWxlXFxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gTVlfUlVMRS5jb2xfdHlwZVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5zdGFydHNXaXRoKCdoaWtlcjovL3BhZ2UvJykpIHtcXFxcbiAgICAgICAgICAgICAgICBpZiAodi51cmwuaW5jbHVkZXMoJ3J1bGU9JykgfHwgKHYuZXh0cmEgfHwge30pLnJ1bGUpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2XFxcXG4gICAgICAgICAgICAgICAgbGV0IFtfLCBwYXRoLCBwYXJhbXNdID0gdi51cmwuc3BsaXQoJyMnKVswXS5tYXRjaCgvXmhpa2VyOlxcXFxcXFxcL1xcXFxcXFxcL3BhZ2VcXFxcXFxcXC8oLis/KSg/OlxcXFxcXFxcPyguKikpPyQvKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgc3ViUGFnZSA9IE1ZX1JVTEUucGFnZUxpc3QuZmluZCgodikgPT4gdi5wYXRoID09IHBhdGgpLFxcXFxuICAgICAgICAgICAgICAgICAgICBzdWJVcmwgPSAocGFyYW1zIHx8ICcnKS5zcGxpdCgnJicpLmZpbmQoKHYpID0+IHYuc3RhcnRzV2l0aCgndXJsPScpKVxcXFxuICAgICAgICAgICAgICAgIHYudXJsID0gc3ViVXJsID8gc3ViVXJsLnNsaWNlKDQpLnJlcGxhY2UoL++8n++8ny9nLCAnPycpLnJlcGxhY2UoL++8hu+8hi9nLCAnJicpIDogKHYuZXh0cmEgfHwge30pLnVybCB8fCAnaGlrZXI6Ly9lbXB0eT8nICsgKHBhcmFtcyB8fCAnJylcXFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gc3ViUGFnZS5ydWxlXFxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gc3ViUGFnZS5jb2xfdHlwZVxcXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLnBhcmFtcyA9IHYuZXh0cmEgfHwge31cXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuaW5jbHVkZXMoJ0BsYXp5UnVsZT0nKSkge1xcXFxuICAgICAgICAgICAgICAgIHYudXJsID0gdi51cmwucmVwbGFjZSgnLmpzOicsICcuanM6XFxcXFxcXFxuaWYoTVlfUlVMRSlPYmplY3QuYXNzaWduKE1ZX1JVTEUsJyArICQuc3RyaW5naWZ5KHsgcGFnZXM6IE1ZX1JVTEUucGFnZXMsIHBhZ2VMaXN0OiBNWV9SVUxFLnBhZ2VMaXN0LCBmaW5kX3J1bGU6ICcnLCBwYXJhbXM6ICcnIH0pICsgJyk7TVlfVVJMPVxcXFxcXFwiJyArIE1ZX1VSTCArICdcXFxcXFxcIjsnKVxcXFxuICAgICAgICAgICAgICAgIHJldHVybiB2XFxcXG4gICAgICAgICAgICB9IGVsc2UgeyByZXR1cm4gdiB9XFxcXG4gICAgICAgICAgICB2LmV4dHJhID0geyB1cmw6IHYudXJsLCBSVUxFOiBNWV9fUlVMRSB9XFxcXG4gICAgICAgICAgICB2LnVybCA9ICdoaWtlcjovL3BhZ2UvZGV0YWlsTG9hZD9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKVxcXFxuICAgICAgICAgICAgaWYgKHYuZXh0cmEuUlVMRS51cmwuaW5jbHVkZXMoJyNpbW1lcnNpdmVUaGVtZSMnKSkgdi51cmwgKz0gJyYjaW1tZXJzaXZlVGhlbWUjJ1xcXFxuICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgfSkpXFxcXG4gICAgICAgIG1ldGhvZF9zZXRSZXN1bHQuaW52b2tlKGphdmFDb250ZXh0LCBteUNvbGxlY3Rpb25fZWwsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpXFxcXG4gICAgfVxcXFxuICAgIHNldEhvbWVSZXN1bHQgPSBzZXRSZXN1bHRcXFxcbiAgICBzZXRTZWFyY2hSZXN1bHQgPSBzZXRSZXN1bHRcXFxcblxcXFxuICAgIGV2YWwoTVlfUlVMRS5maW5kX3J1bGUuc2xpY2UoMykpXFxcXG59IGVsc2Uge1xcXFxuICAgIGxldCBbXywgZmluZFJ1bGUsIGRldGFpbEZpbmRSdWxlXSA9IE1ZX1JVTEUuZmluZF9ydWxlLm1hdGNoKC9eKC4qPykoPzo9PT4oLiopKT8kLylcXFxcbiAgICBmaW5kUnVsZSA9IGZpbmRSdWxlLnNwbGl0KCc7JylcXFxcbiAgICBwYXJzZURvbUZvckFycmF5KGluZGV4SHRtbCwgZmluZFJ1bGUuc2hpZnQoKSkuZm9yRWFjaCgoZGF0YSkgPT4ge1xcXFxuICAgICAgICBsZXQgW3RpdGxlLCBpbWcsIGRlc2MsIHVybF0gPSBmaW5kUnVsZS5tYXAoKHYsIGkpID0+IHtcXFxcbiAgICAgICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAodiA9PSAnKicpIHJldHVybiAnJ1xcXFxuICAgICAgICAgICAgICAgICAgICBlbHNlIHYgPSAoaSA9PSAxIHx8IGkgPT0gMykgP1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VEb20oZGF0YSwgdikgOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VEb21Gb3JIdG1sKGRhdGEsIHYpXFxcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpICE9IDMpIHYgPSBydW5Db2RlKHYpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2XFxcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gJycgfVxcXFxuICAgICAgICAgICAgfSksXFxcXG4gICAgICAgICAgICByZXMgPSB7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcXFxuICAgICAgICAgICAgICAgIHVybDogdXJsLFxcXFxuICAgICAgICAgICAgICAgIGRlc2M6IGRlc2MsXFxcXG4gICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IE1ZX1JVTEUuY29sX3R5cGVcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgaWYgKHJlcy51cmwpIHtcXFxcbiAgICAgICAgICAgIGlmIChyZXMudXJsLmluY2x1ZGVzKCdAbGF6eVJ1bGU9JykpIHtcXFxcbiAgICAgICAgICAgICAgICByZXMudXJsID0gcmVzLnVybC5yZXBsYWNlKCcuanM6JywgJy5qczpcXFxcXFxcXG5pZihNWV9SVUxFKU9iamVjdC5hc3NpZ24oTVlfUlVMRSwnICsgJC5zdHJpbmdpZnkoeyBwYWdlczogTVlfUlVMRS5wYWdlcywgcGFnZUxpc3Q6IE1ZX1JVTEUucGFnZUxpc3QsIGZpbmRfcnVsZTogJycsIHBhcmFtczogJycgfSkgKyAnKTtNWV9VUkw9XFxcXFxcXCInICsgTVlfVVJMICsgJ1xcXFxcXFwiOycpXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRldGFpbEZpbmRSdWxlKSB7XFxcXG4gICAgICAgICAgICAgICAgcmVzLmV4dHJhID0geyB1cmw6IHVybCwgUlVMRTogT2JqZWN0LmFzc2lnbih7fSwgTVlfUlVMRSwgeyBkZXRhaWxfZmluZF9ydWxlOiBkZXRhaWxGaW5kUnVsZSB9KSB9XFxcXG4gICAgICAgICAgICAgICAgcmVzLnVybCA9ICdoaWtlcjovL3BhZ2UvZGV0YWlsTG9hZD9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKVxcXFxuICAgICAgICAgICAgICAgIGlmIChyZXMuZXh0cmEuUlVMRS51cmwuaW5jbHVkZXMoJyNpbW1lcnNpdmVUaGVtZSMnKSkgcmVzLnVybCArPSAnJiNpbW1lcnNpdmVUaGVtZSMnXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbXlDb2xsZWN0aW9uX2VsLnB1c2gocmVzKVxcXFxuICAgIH0pXFxcXG4gICAgc2V0UmVzdWx0KG15Q29sbGVjdGlvbl9lbClcXFxcbn1cXFxcblxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuW3peWFt+mbhlxcXCIsXFxcInBhdGhcXFwiOlxcXCJ1dGlsaXR5XFxcIixcXFwicnVsZVxcXCI6XFxcIiQuZXhwb3J0cyA9IHtcXFxcbiAgICBkYXRhTG9hZDogZnVuY3Rpb24oc2hvd0FsbCkge1xcXFxuICAgICAgICAvL+ajgOafpemXtOmalO+8jOm7mOiupOS4gOWkqVxcXFxuICAgICAgICBsZXQgaW50ZXJ2YWwgPSBwYXJzZUludChyZWFkRmlsZSgndXBkYXRlSW50ZXJ2YWwnKSB8fCAnMScpLFxcXFxuICAgICAgICAgICAgdGltZSA9IHBhcnNlSW50KHJlYWRGaWxlKCd1cGRhdGVUaW1lJykpIHx8IDAsXFxcXG4gICAgICAgICAgICBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSxcXFxcbiAgICAgICAgICAgIGRhdGEgPSBbXVxcXFxuICAgICAgICBpZiAodGltZSA9PSAwIHx8IGludGVydmFsID4gMCAmJiBub3cgLSB0aW1lID4gMTAwMCAqIDYwICogNjAgKiAyNCAqIGludGVydmFsKSB7XFxcXG4gICAgICAgICAgICAvLyDojrflj5bov5znqIvmlbDmja5cXFxcbiAgICAgICAgICAgIGxldCB1cmwgPSBnZXRJdGVtKCdyZW1vdGVVcmwnKVxcXFxuICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgcmVtb3RlRGF0YSA9IGZldGNoKHVybClcXFxcbiAgICAgICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSlcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVtb3RlRGF0YSA9IEpTT04ucGFyc2UocmVtb3RlRGF0YSkucnVsZVxcXFxuICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKHJlbW90ZURhdGEpXFxcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcXFxuICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGggPT0gMCkge1xcXFxuICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdkYXRhQ2FjaGUnKSB8fCAnW10nKVxcXFxuICAgICAgICAgICAgICAgIGxvZygn5rKh5pyJ6I635Y+W5Yiw5pu05paw5pWw5o2uJylcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKCh2KSA9PiB7IHJldHVybiB2LnRpdGxlICE9IGdldEl0ZW0oJ215Q29sbGVjdGlvbicpICYmICF2LmF1dGhvci5pbmNsdWRlcygn6L275ZCI6ZuG55Sf5oiQ5ZmoJykgfSlcXFxcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSgnZGF0YUNhY2hlJywgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXFxcXG4gICAgICAgICAgICAgICAgc2F2ZUZpbGUoJ3VwZGF0ZVRpbWUnLCBub3cudG9TdHJpbmcoKSlcXFxcbiAgICAgICAgICAgICAgICBsb2coJ+abtOaWsOaVsOaNruW3suWGmeWFpeacrOWcsCcpXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShyZWFkRmlsZSgnZGF0YUNhY2hlJykgfHwgJ1tdJylcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvLyDlhpnlhaXoh6rlrprkuYnmlbDmja5cXFxcbiAgICAgICAgbGV0IGN1c3RvbURhdGEgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJyksXFxcXG4gICAgICAgICAgICByZXdyaXRlRGF0YSA9IFtdXFxcXG4gICAgICAgIGN1c3RvbURhdGEgPSBjdXN0b21EYXRhLnJlZHVjZSgoc2VsZiwgdikgPT4ge1xcXFxuICAgICAgICAgICAgbGV0IGluZGV4ID0gZGF0YS5maW5kSW5kZXgoKHZ2KSA9PiB2LnRpdGxlID09IHZ2LnRpdGxlKVxcXFxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcXFxcbiAgICAgICAgICAgICAgICBzZWxmLnB1c2godilcXFxcbiAgICAgICAgICAgICAgICBsZXQgcnVsZSA9IGRhdGEuc3BsaWNlKGluZGV4LCAxKVswXVxcXFxuICAgICAgICAgICAgICAgIGlmKHNob3dBbGwgfHwgdi52aXNpYmxlKVxcXFxuICAgICAgICAgICAgICAgICAgICByZXdyaXRlRGF0YS5wdXNoKE9iamVjdC5hc3NpZ24ocnVsZSwgdikpXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICByZXR1cm4gc2VsZlxcXFxuICAgICAgICB9LCBbXSlcXFxcbiAgICAgICAgZGF0YS5mb3JFYWNoKCh2KSA9PiBjdXN0b21EYXRhLnB1c2goeyB0aXRsZTogdi50aXRsZSwgdmlzaWJsZTogdHJ1ZSB9KSlcXFxcbiAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBKU09OLnN0cmluZ2lmeShjdXN0b21EYXRhKSlcXFxcbiAgICAgICAgcmV0dXJuIHJld3JpdGVEYXRhLmNvbmNhdChkYXRhKVxcXFxuICAgIH0sXFxcXG4gICAgcnVuQ29kZTogZnVuY3Rpb24ocnVsZSkge1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgbGV0IFtpbnB1dCwgY29kZV0gPSBydWxlLnNwbGl0KCcuanM6JylcXFxcbiAgICAgICAgICAgIHJldHVybiBjb2RlID8gZXZhbChjb2RlKSA6IHJ1bGVcXFxcbiAgICAgICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gcnVsZSB9XFxcXG4gICAgfSxcXFxcbiAgICB1cmxQYXJzZTogZnVuY3Rpb24odXJsLCBoZWFkZXJzLCBwYWdlTnVtLCBmdW5jKSB7XFxcXG4gICAgICAgIHVybCA9IHVybC5zcGxpdCgnOycpLm1hcCgodikgPT4gdi5yZXBsYWNlKC/vvJvvvJsvZywgJzsnKSlcXFxcbiAgICAgICAgaWYgKGZ1bmMpIGZ1bmModXJsKVxcXFxuICAgICAgICB1cmxbMF0gPSB1cmxbMF0ucmVwbGFjZSgvZnlwYWdlKD86QCgtP1xcXFxcXFxcZCspQCk/KD86XFxcXFxcXFwqKFxcXFxcXFxcZCspQCk/LywgKF8sIHN0YXJ0LCBzcGFjZSkgPT4gcGFyc2VJbnQoc3RhcnQgfHwgMCkgKyAxICsgKHBhZ2VOdW0gLSAxKSAqIHBhcnNlSW50KHNwYWNlIHx8IDEpKVxcXFxuICAgICAgICB1cmxbMF0gPSAvXihbXFxcXFxcXFxzXFxcXFxcXFxTXSo/KSg/OlxcXFxcXFxcW2ZpcnN0UGFnZT0oW1xcXFxcXFxcc1xcXFxcXFxcU10qPylcXFxcXFxcXF0pPyQvLmV4ZWModXJsWzBdKVxcXFxuICAgICAgICB1cmxbMF0gPSBydW5Db2RlKHVybFswXVsyXSAmJiBwYWdlTnVtID09IDEgPyB1cmxbMF1bMl0gOiB1cmxbMF1bMV0pXFxcXG4gICAgICAgIGxldCBvcHRpb25zID0geyBoZWFkZXJzOiBoZWFkZXJzLCBtZXRob2Q6IHVybFsxXSB9XFxcXG4gICAgICAgIC8vIHBvc3Tmlrnms5Xml7bovazmjaLlj4LmlbBcXFxcbiAgICAgICAgaWYgKC9ecG9zdCQvaS50ZXN0KG9wdGlvbnNbJ21ldGhvZCddKSkge1xcXFxuICAgICAgICAgICAgbGV0IFtvcmlVcmwsIGJvZHldID0gdXJsWzBdLnNwbGl0KCc/JylcXFxcbiAgICAgICAgICAgIHVybFswXSA9IG9yaVVybC5yZXBsYWNlKC/vvJ/vvJ8vZywgJz8nKVxcXFxuICAgICAgICAgICAgaWYgKGJvZHkuc3RhcnRzV2l0aCgnSnNvbkJvZHk9JykpIGJvZHkgPSBib2R5LnNsaWNlKDkpXFxcXG4gICAgICAgICAgICBvcHRpb25zWydib2R5J10gPSBib2R5XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaWYgKHVybFsyXSkgb3B0aW9ucy5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluO2NoYXJzdD0nICsgdXJsWzJdXFxcXG4gICAgICAgIGlmICh1cmxbM10pIHVybFszXS5tYXRjaCgveyguKil9LylbMV0uc3BsaXQoJyYmJykuZm9yRWFjaCgodikgPT4ge1xcXFxuICAgICAgICAgICAgbGV0IFtrZXksIHZhbHVlXSA9IHYuc3BsaXQoJ0AnKVxcXFxuICAgICAgICAgICAgb3B0aW9ucy5oZWFkZXJzW2tleV0gPSBydW5Db2RlKHZhbHVlKVxcXFxuICAgICAgICB9KVxcXFxuICAgICAgICAvLyDmt7vliqDlhajlsYBVQVxcXFxuICAgICAgICBpZiAoIW9wdGlvbnMuaGVhZGVyc1snVXNlci1BZ2VudCddKSB7XFxcXG4gICAgICAgICAgICBpZiAoTVlfUlVMRS51YSA9PSAncGMnKVxcXFxuICAgICAgICAgICAgICAgIG9wdGlvbnMuaGVhZGVyc1snVXNlci1BZ2VudCddID0gUENfVUFcXFxcbiAgICAgICAgICAgIGVsc2UgaWYgKE1ZX1JVTEUudWEgPT0gJ21vYmlsZScpXFxcXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydVc2VyLUFnZW50J10gPSBNT0JJTEVfVUFcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICByZXR1cm4geyBNWV9VUkw6IHVybFswXSwgTVlfVVJMX09wdGlvbnM6IG9wdGlvbnMgfVxcXFxuICAgIH1cXFxcbn1cXFxcblxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8xX3ZlcnRpY2FsX3BpY1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLljZXmkJxcXFwiLFxcXCJwYXRoXFxcIjpcXFwic2luZ2xlU2VhcmNoXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxubGV0IG15Q29sbGVjdGlvbl9lbCA9IFtdLFxcXFxuICAgIFJVTEUgPSBNWV9QQVJBTVMuUlVMRSxcXFxcbiAgICBrZXl3b3JkID0gZ2V0UGFyYW0oJ2tleXdvcmQnKSxcXFxcbiAgICBwYWdlTnVtID0gcGFyc2VJbnQoZ2V0UGFyYW0oJ3BhZ2UnKSlcXFxcblxcXFxuLy8g5aSE55CGTVlfVVJM5ZKMTVlfUlVMRVxcXFxuTVlfVFlQRSA9ICdzZWFyY2gnXFxcXG5NWV9SVUxFLnVhID0gUlVMRS51YVxcXFxuTVlfUlVMRS50aXRsZSA9IFJVTEUudGl0bGVcXFxcbk1ZX1JVTEUuY29sX3R5cGUgPSBSVUxFLmNvbF90eXBlXFxcXG5NWV9SVUxFLmRldGFpbF9jb2xfdHlwZSA9IFsnJywgJyonXS5pbmNsdWRlcyhSVUxFLnNkZXRhaWxfZmluZF9ydWxlKSA/IFJVTEUuZGV0YWlsX2NvbF90eXBlIDogUlVMRS5zZGV0YWlsX2NvbF90eXBlXFxcXG5NWV9SVUxFLmZpbmRfcnVsZSA9IFJVTEUuc2VhcmNoRmluZFxcXFxuTVlfUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gWycnLCAnKiddLmluY2x1ZGVzKFJVTEUuc2RldGFpbF9maW5kX3J1bGUpID8gUlVMRS5kZXRhaWxfZmluZF9ydWxlIDogUlVMRS5zZGV0YWlsX2ZpbmRfcnVsZVxcXFxuTVlfUlVMRS5wcmVSdWxlID0gUlVMRS5wcmVSdWxlXFxcXG5NWV9SVUxFLnBhZ2VMaXN0ID0gSlNPTi5wYXJzZShSVUxFLnBhZ2VzIHx8ICdbXScpXFxcXG5NWV9SVUxFLnBhZ2VzID0gSlNPTi5zdHJpbmdpZnkoTVlfUlVMRS5wYWdlTGlzdClcXFxcbk1ZX1JVTEUubGFzdF9jaGFwdGVyX3J1bGUgPSBSVUxFLmxhc3RfY2hhcHRlcl9ydWxlXFxcXG5NWV9SVUxFLnBhcmFtcyA9IHt9XFxcXG5cXFxcbmNvbnN0IHsgcnVuQ29kZSwgdXJsUGFyc2UgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL3V0aWxpdHk/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJykpXFxcXG52YXIgeyBNWV9VUkwsIE1ZX1VSTF9PcHRpb25zIH0gPSB1cmxQYXJzZShSVUxFLnNlYXJjaF91cmwsIHt9LCBwYWdlTnVtLCAodXJsKSA9PiB7XFxcXG4gICAgdXJsWzBdID0gdXJsWzBdLnJlcGxhY2UodXJsWzBdLmluY2x1ZGVzKCclJScpID8gLyUlL2cgOiAvXFxcXFxcXFwqXFxcXFxcXFwqL2csIGVuY29kZVN0cihrZXl3b3JkLCB1cmxbMl0pKVxcXFxufSksXFxcXG4gICAgaW5kZXhIdG1sID0gZmV0Y2goTVlfVVJMLCBNWV9VUkxfT3B0aW9ucylcXFxcbk1ZX1JVTEUudXJsID0gTVlfVVJMXFxcXG5NWV9SVUxFLnVybEhlYWRlcnMgPSBNWV9VUkxfT3B0aW9ucy5oZWFkZXJzXFxcXG4vLyDmraPmlofop6PmnpBcXFxcbmlmIChwYWdlTnVtID09IDEpIHNldFBhZ2VUaXRsZSgn4oCcJyArIGtleXdvcmQgKyAn4oCd55qE5pCc57Si57uT5p6cJylcXFxcbmlmIChNWV9SVUxFLmZpbmRfcnVsZS5zdGFydHNXaXRoKCdqczonKSkge1xcXFxuICAgIGZ1bmN0aW9uIGdldFVybCgpIHtcXFxcbiAgICAgICAgcmV0dXJuIE1ZX1VSTFxcXFxuICAgIH1cXFxcblxcXFxuICAgIGZ1bmN0aW9uIGdldFJlc0NvZGUoKSB7XFxcXG4gICAgICAgIHJldHVybiBpbmRleEh0bWxcXFxcbiAgICB9XFxcXG5cXFxcbiAgICBmdW5jdGlvbiBzZXRSZXN1bHQoZWwsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpIHtcXFxcbiAgICAgICAgcGFyYW0xID0gQ0FMTEJBQ0tfS0VZXFxcXG4gICAgICAgIHBhcmFtMiA9IE1ZX1JVTEVcXFxcbiAgICAgICAgcGFyYW0zID0gTVlfVFlQRVxcXFxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbC5kYXRhKSkgZWwgPSBlbC5kYXRhXFxcXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG15Q29sbGVjdGlvbl9lbCwgZWwubWFwKCh2KSA9PiB7XFxcXG4gICAgICAgICAgICBsZXQgTVlfX1JVTEUgPSBPYmplY3QuYXNzaWduKHt9LCBNWV9SVUxFKSxcXFxcbiAgICAgICAgICAgICAgICBzdWJUaXRsZSA9IHYudGl0bGVcXFxcbiAgICAgICAgICAgIHYudGl0bGUgKz0gJ+KAnOKAnOKAneKAnTxicj4nICsgKFJVTEUudGl0bGUuZm9udGNvbG9yKCcjMTJiNjY4JykgKyAnIOKWqiAnICsgKHYuZGVzYyB8fCAnJykuZm9udGNvbG9yKCcjNjY2NjY2JykpLnNtYWxsKClcXFxcbiAgICAgICAgICAgIHYuZGVzYyA9IHYuY29udGVudCB8fCAnJ1xcXFxuICAgICAgICAgICAgaWYoIXYuaW1nICYmICF2LnBpY191cmwpIHYuY29sX3R5cGUgPSAndGV4dF8xJ1xcXFxuICAgICAgICAgICAgZGVsZXRlIHYuY29udGVudFxcXFxuXFxcXG4gICAgICAgICAgICBpZiAoIXYudXJsIHx8IFsncnVsZScsICdwaWNzJywgJ3RvYXN0JywgJ2lucHV0JywgJ2NvcHknLCAnZWRpdEZpbGUnLCAneDUnLCAneDVXZWJWaWV3JywgJ3g1UGxheScsICd3ZWInLCAnc2VsZWN0JywgJ3g1UnVsZScsICd3ZWJSdWxlJ10uZmluZCgodnYpID0+IHYudXJsLnN0YXJ0c1dpdGgodnYgKyAnOi8vJykpKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuaW5jbHVkZXMoJ0BydWxlPScpKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IFtfLCB1cmwsIHJ1bGVdID0gdi51cmwubWF0Y2goL14oW1xcXFxcXFxcc1xcXFxcXFxcU10qPylAcnVsZT0oW1xcXFxcXFxcc1xcXFxcXFxcU10qKSQvKVxcXFxuICAgICAgICAgICAgICAgIHYudXJsID0gdXJsXFxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHJ1bGVcXFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBNWV9SVUxFLmNvbF90eXBlXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSkge1xcXFxuICAgICAgICAgICAgICAgIGlmICh2LnVybC5pbmNsdWRlcygncnVsZT0nKSB8fCAodi5leHRyYSB8fCB7fSkucnVsZSlcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgICAgICBsZXQgW18sIHBhdGgsIHBhcmFtc10gPSB2LnVybC5zcGxpdCgnIycpWzBdLm1hdGNoKC9eaGlrZXI6XFxcXFxcXFwvXFxcXFxcXFwvcGFnZVxcXFxcXFxcLyguKz8pKD86XFxcXFxcXFw/KC4qKSk/JC8pLFxcXFxuICAgICAgICAgICAgICAgICAgICBzdWJQYWdlID0gTVlfUlVMRS5wYWdlTGlzdC5maW5kKCh2KSA9PiB2LnBhdGggPT0gcGF0aCksXFxcXG4gICAgICAgICAgICAgICAgICAgIHN1YlVybCA9IChwYXJhbXMgfHwgJycpLnNwbGl0KCcmJykuZmluZCgodikgPT4gdi5zdGFydHNXaXRoKCd1cmw9JykpXFxcXG4gICAgICAgICAgICAgICAgdi51cmwgPSBzdWJVcmwgPyBzdWJVcmwuc2xpY2UoNCkucmVwbGFjZSgv77yf77yfL2csICc/JykucmVwbGFjZSgv77yG77yGL2csICcmJykgOiAodi5leHRyYSB8fCB7fSkudXJsIHx8ICdoaWtlcjovL2VtcHR5PycgKyAocGFyYW1zIHx8ICcnKVxcXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBzdWJQYWdlLnJ1bGVcXFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBzdWJQYWdlLmNvbF90eXBlXFxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUucGFyYW1zID0gdi5leHRyYSB8fCB7fVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxcXG4gICAgICAgICAgICAgICAgdi51cmwgPSB2LnVybC5yZXBsYWNlKCcuanM6JywgJy5qczpcXFxcXFxcXG5pZihNWV9SVUxFKU9iamVjdC5hc3NpZ24oTVlfUlVMRSwnICsgJC5zdHJpbmdpZnkoeyBwYWdlczogTVlfUlVMRS5wYWdlcywgcGFnZUxpc3Q6IE1ZX1JVTEUucGFnZUxpc3QsIGZpbmRfcnVsZTogJycsIHBhcmFtczogJycgfSkgKyAnKTtNWV9VUkw9XFxcXFxcXCInICsgTVlfVVJMICsgJ1xcXFxcXFwiOycpXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIU1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSB8fCB2LnVybC5zdGFydHNXaXRoKCdoaWtlcjovLycpKSB7IHJldHVybiB2IH1cXFxcbiAgICAgICAgICAgIHYuZXh0cmEgPSB7IHVybDogdi51cmwsIFJVTEU6IE1ZX19SVUxFLCBwYWdlVGl0bGU6IHN1YlRpdGxlIH1cXFxcbiAgICAgICAgICAgIHYudXJsID0gJ2hpa2VyOi8vcGFnZS9kZXRhaWxMb2FkP3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpXFxcXG4gICAgICAgICAgICBpZiAodi5leHRyYS5SVUxFLnVybC5pbmNsdWRlcygnI2ltbWVyc2l2ZVRoZW1lIycpKSB2LnVybCArPSAnJiNpbW1lcnNpdmVUaGVtZSMnXFxcXG4gICAgICAgICAgICByZXR1cm4gdlxcXFxuICAgICAgICB9KSlcXFxcbiAgICAgICAgbWV0aG9kX3NldFJlc3VsdC5pbnZva2UoamF2YUNvbnRleHQsIG15Q29sbGVjdGlvbl9lbCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMylcXFxcbiAgICB9XFxcXG4gICAgc2V0SG9tZVJlc3VsdCA9IHNldFJlc3VsdFxcXFxuICAgIHNldFNlYXJjaFJlc3VsdCA9IHNldFJlc3VsdFxcXFxuXFxcXG4gICAgZXZhbChNWV9SVUxFLmZpbmRfcnVsZS5zbGljZSgzKSlcXFxcbn0gZWxzZSB7XFxcXG4gICAgbGV0IGZpbmRSdWxlID0gTVlfUlVMRS5maW5kX3J1bGUuc3BsaXQoJzsnKVxcXFxuICAgIHBhcnNlRG9tRm9yQXJyYXkoaW5kZXhIdG1sLCBmaW5kUnVsZS5zaGlmdCgpKS5mb3JFYWNoKChkYXRhKSA9PiB7XFxcXG4gICAgICAgIGxldCBbdGl0bGUsIHVybCwgZGVzYywgY29udGVudCwgaW1nXSA9IGZpbmRSdWxlLm1hcCgodiwgaSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmICh2ID09ICcqJykgcmV0dXJuICcnXFxcXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgdiA9IChpID09IDEgfHwgaSA9PSA0KSA/XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvbShkYXRhLCB2KSA6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvbUZvckh0bWwoZGF0YSwgdilcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gMSkgdiA9IHJ1bkNvZGUodilcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IHJldHVybiAnJyB9XFxcXG4gICAgICAgICAgICB9KSxcXFxcbiAgICAgICAgICAgIHJlcyA9IHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUgKyAn4oCc4oCc4oCd4oCdPGJyPicgKyAoUlVMRS50aXRsZS5mb250Y29sb3IoJyMxMmI2NjgnKSArICcg4paqICcgKyBkZXNjLmZvbnRjb2xvcignIzY2NjY2NicpKS5zbWFsbCgpLFxcXFxuICAgICAgICAgICAgICAgIHVybDogdXJsLFxcXFxuICAgICAgICAgICAgICAgIGRlc2M6IGNvbnRlbnQsXFxcXG4gICAgICAgICAgICAgICAgaW1nOiBpbWdcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgaWYoIXJlcy5pbWcpIHJlcy5jb2xfdHlwZSA9ICd0ZXh0XzEnXFxcXG4gICAgICAgIGlmIChyZXMudXJsKSB7XFxcXG4gICAgICAgICAgICBpZiAocmVzLnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxcXG4gICAgICAgICAgICAgICAgcmVzLnVybCA9IHJlcy51cmwucmVwbGFjZSgnLmpzOicsICcuanM6XFxcXFxcXFxuaWYoTVlfUlVMRSlPYmplY3QuYXNzaWduKE1ZX1JVTEUsJyArICQuc3RyaW5naWZ5KHsgcGFnZXM6IE1ZX1JVTEUucGFnZXMsIHBhZ2VMaXN0OiBNWV9SVUxFLnBhZ2VMaXN0LCBmaW5kX3J1bGU6ICcnLCBwYXJhbXM6ICcnIH0pICsgJyk7TVlfVVJMPVxcXFxcXFwiJyArIE1ZX1VSTCArICdcXFxcXFxcIjsnKVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUpIHtcXFxcbiAgICAgICAgICAgICAgICByZXMuZXh0cmEgPSB7IHVybDogdXJsLCBSVUxFOiBNWV9SVUxFLCBwYWdlVGl0bGU6IHRpdGxlIH1cXFxcbiAgICAgICAgICAgICAgICByZXMudXJsID0gJ2hpa2VyOi8vcGFnZS9kZXRhaWxMb2FkP3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpXFxcXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5leHRyYS5SVUxFLnVybC5pbmNsdWRlcygnI2ltbWVyc2l2ZVRoZW1lIycpKSByZXMudXJsICs9ICcmI2ltbWVyc2l2ZVRoZW1lIydcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBteUNvbGxlY3Rpb25fZWwucHVzaChyZXMpXFxcXG4gICAgfSlcXFxcbiAgICBzZXRSZXN1bHQobXlDb2xsZWN0aW9uX2VsKVxcXFxufVxcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcImljb25fMl9yb3VuZFxcXCIsXFxcIm5hbWVcXFwiOlxcXCLorr7nva5cXFwiLFxcXCJwYXRoXFxcIjpcXFwiQ29uZmlnXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAnY2xlYXJWYXIoXFxcXFxcXCJteUNvbGxlY3Rpb24tc29ydEZsYWdcXFxcXFxcIik7cmVmcmVzaFBhZ2UoKScpXFxcXG5zZXRQYWdlVGl0bGUoJ+KamSDovbvlkIjpm4borr7nva4g4pqZJylcXFxcbmNvbnN0IHsgZGF0YUxvYWQgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL3V0aWxpdHk/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJykpXFxcXG5sZXQgZGF0YSA9IGRhdGFMb2FkKHRydWUpLFxcXFxuICAgIGVsID0gW3tcXFxcbiAgICAgICAgdGl0bGU6ICfmuIXpmaTnvJPlrZgs56uL5Y2z5pu05pawIDxzbWFsbD4g77yI5Z+65LqO6L+c56iL5LuT5bqTLOS4jeimgemikee5geeCueWHu++8iScsXFxcXG4gICAgICAgIHVybDogJCgpLmxhenlSdWxlKCgpID0+IHtcXFxcbiAgICAgICAgICAgIGRlbGV0ZUZpbGUoJ3VwZGF0ZVRpbWUnKVxcXFxuICAgICAgICAgICAgYmFjayhmYWxzZSlcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lmm7TmlrAnXFxcXG4gICAgICAgIH0pLFxcXFxuICAgICAgICBpbWc6ICdoaWtlcjovL2ltYWdlcy9pY29uMScsXFxcXG4gICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJ1xcXFxuICAgIH1dLFxcXFxuICAgIHNlYXJjaFRoZCA9IHJlYWRGaWxlKCdzZWFyY2hUaGQnKSB8fCAnNScsXFxcXG4gICAgdXBkYXRlSW50ZXJ2YWwgPSByZWFkRmlsZSgndXBkYXRlSW50ZXJ2YWwnKSB8fCAnMScsXFxcXG4gICAgbmV3V2luZG93ID0gcmVhZEZpbGUoJ25ld1dpbmRvdycpLFxcXFxuICAgIGVkaXRNb2RlID0gZ2V0VmFyKCdteUNvbGxlY3Rpb24tZWRpdE1vZGUnLCAn5ZCv55SoL+emgeeUqCcpXFxcXG5cXFxcbmVsLnB1c2goe1xcXFxuICAgIHRpdGxlOiAnICDwn5SNIOaQnOe0ouaooeW8jzogJyArIChzZWFyY2hUaGQgPT0gMCA/ICfliJcnIDogJ+iBmicgKyBzZWFyY2hUaGQpICsgJyAgJyxcXFxcbiAgICB1cmw6ICQoWyfliJfooajmkJzntKInLCAn6IGa5ZCI5pCc57SiJ10sIDEpLnNlbGVjdCgoc2VhcmNoVGhkKSA9PiB7XFxcXG4gICAgICAgIGlmIChpbnB1dCA9PSAn5YiX6KGo5pCc57SiJykge1xcXFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ3NlYXJjaFRoZCcsICcwJylcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGlmIChzZWFyY2hUaGQgPT0gMCkgc2VhcmNoVGhkID0gNVxcXFxuICAgICAgICAgICAgcmV0dXJuICQoc2VhcmNoVGhkLCAn6L6T5YWl5pCc57Si57q/56iL77yM5pyA5aW95LiN6KaB6LaF6L+HMTYnKS5pbnB1dCgoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgc2F2ZUZpbGUoJ3NlYXJjaFRoZCcsIGlucHV0KVxcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH1cXFxcbiAgICB9LCBzZWFyY2hUaGQpLFxcXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcbn0sIHtcXFxcbiAgICB0aXRsZTogJyAg8J+SoSDmm7TmlrDpopHnjoc6ICcgKyAodXBkYXRlSW50ZXJ2YWwgPCAxID8gJ+aJi+WKqCcgOiB1cGRhdGVJbnRlcnZhbCArICflpKknKSArICcgICcsXFxcXG4gICAgdXJsOiAkKHVwZGF0ZUludGVydmFsLCAn6L6T5YWl5pu05paw6Ze06ZqU77yI5aSp77yJ77yM5Li6MOWImeaJi+WKqOabtOaWsCcpLmlucHV0KCgpID0+IHtcXFxcbiAgICAgICAgc2F2ZUZpbGUoJ3VwZGF0ZUludGVydmFsJywgaW5wdXQpXFxcXG4gICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgIH0pLFxcXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcbn0sIHtcXFxcbiAgICB0aXRsZTogJyAg8J+WpSDni6znq4vpppbpobU6ICcgKyAobmV3V2luZG93ID8gJ+aYrycgOiAn5ZCmJykgKyAnICAnLFxcXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobmV3V2luZG93KSA9PiB7XFxcXG4gICAgICAgIHNhdmVGaWxlKCduZXdXaW5kb3cnLCBuZXdXaW5kb3cgPyAnJyA6ICcxJylcXFxcbiAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgfSwgbmV3V2luZG93KSxcXFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG59LCB7XFxcXG4gICAgdGl0bGU6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj1cXFxcXFxcIiM2NjY2NjZcXFxcXFxcIj48c21hbGw+54m55Yir6bij6LCi77yM5bCP56iL5bqP5o+Q5L6b6ICF77yaXFxcXFxcXFxuJyArXFxcXG4gICAgICAgIGRhdGEucmVkdWNlKChzZWxmLCB2KSA9PiB2LmF1dGhvciA/IHNlbGYuY29uY2F0KHYuYXV0aG9yLnNwbGl0KCcmJykpIDogc2VsZiwgW10pXFxcXG4gICAgICAgIC5maWx0ZXIoKHYsIGksIGFycikgPT4gdiAmJiBhcnIuaW5kZXhPZih2KSA9PSBpKS5qb2luKCfjgIEnKSxcXFxcbiAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXFxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXG59KVxcXFxuXFxcXG5lbC5wdXNoKHsgY29sX3R5cGU6ICdsaW5lJyB9LCB7IGNvbF90eXBlOiAnYmlnX2JsYW5rX2Jsb2NrJyB9KTtcXFxcblsn5ZCv55SoL+emgeeUqCcsICfph43mlrDmjpLluo8nLCAn5pu05pS55Zu+5qCHJywgJ+WvvOWFpea1t+mYlCddLmZvckVhY2goKHYpID0+IHtcXFxcbiAgICBlbC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IHYgPT0gZWRpdE1vZGUgPyAn4oCc4oCc4oCd4oCdJyArIHYuYm9sZCgpLmZvbnRjb2xvcignIzEyYjY2OCcpIDogdixcXFxcbiAgICAgICAgdXJsOiB2ID09IGVkaXRNb2RlID8gJ2hpa2VyOi8vZW1wdHknIDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodikgPT4ge1xcXFxuICAgICAgICAgICAgcHV0VmFyKCdteUNvbGxlY3Rpb24tZWRpdE1vZGUnLCB2KVxcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgIH0sIHYpLFxcXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG4gICAgfSlcXFxcbn0pXFxcXG5lbC5wdXNoKHtcXFxcbiAgICB0aXRsZTogJ+aBouWkjeWHuuWOguaVsOaNricsXFxcXG4gICAgdXJsOiAkKCfnoa7lrpropoHmgaLlpI3lh7rljoLvvIzmuIXmpZroh6rlrprkuYnmlbDmja7lkJfvvJ8nKS5jb25maXJtKCgpID0+IHtcXFxcbiAgICAgICAgZGVsZXRlRmlsZSgnY3VzdG9tRGF0YScpXFxcXG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcXFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5oGi5aSN5Ye65Y6C5pWw5o2uJ1xcXFxuICAgIH0pLFxcXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcbn0pXFxcXG5cXFxcbkpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKS5mb3JFYWNoKCh2LCBpKSA9PiB7XFxcXG4gICAgbGV0IGQgPSB7IHRpdGxlOiB2LnRpdGxlLCBpbWc6IGRhdGFbaV0uaWNvbiB9XFxcXG4gICAgc3dpdGNoIChlZGl0TW9kZSkge1xcXFxuICAgICAgICBjYXNlICflkK/nlKgv56aB55SoJzpcXFxcbiAgICAgICAgICAgIGQudGl0bGUgPSAodi52aXNpYmxlID8gJ/Cfn6IgICcgOiAn8J+UtCAgJykgKyBkLnRpdGxlXFxcXG4gICAgICAgICAgICBkLnVybCA9ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHJ1bGUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJyksXFxcXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcnVsZXMuZmluZEluZGV4KCh2KSA9PiB2LnRpdGxlID09IHJ1bGUudGl0bGUpXFxcXG4gICAgICAgICAgICAgICAgcnVsZXNbaW5kZXhdLnZpc2libGUgPSAhcnVsZXNbaW5kZXhdLnZpc2libGVcXFxcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSgnY3VzdG9tRGF0YScsIEpTT04uc3RyaW5naWZ5KHJ1bGVzKSlcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgICAgICB9LCB2KVxcXFxuICAgICAgICAgICAgYnJlYWtcXFxcbiAgICAgICAgY2FzZSAn6YeN5paw5o6S5bqPJzpcXFxcbiAgICAgICAgICAgIGxldCBzb3J0RmxhZyA9IHBhcnNlSW50KGdldFZhcignbXlDb2xsZWN0aW9uLXNvcnRGbGFnJywgJy0xJykpXFxcXG4gICAgICAgICAgICBkLnRpdGxlID0gKHNvcnRGbGFnID09IGkgPyAn8J+UgyAgJyA6ICcnKSArIGQudGl0bGVcXFxcbiAgICAgICAgICAgIGlmIChzb3J0RmxhZyA9PSAtMSlcXFxcbiAgICAgICAgICAgICAgICBkLnVybCA9ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGkpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdteUNvbGxlY3Rpb24tc29ydEZsYWcnLCBpLnRvU3RyaW5nKCkpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6YCJ5oup6KaB56e75Yqo5Yiw55qE5L2N572uJ1xcXFxuICAgICAgICAgICAgICAgIH0sIGkpXFxcXG4gICAgICAgICAgICBlbHNlXFxcXG4gICAgICAgICAgICAgICAgZC51cmwgPSAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChvbGRJbmRleCwgbmV3SW5kZXgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJ1bGVzID0gSlNPTi5wYXJzZShyZWFkRmlsZSgnY3VzdG9tRGF0YScpIHx8ICdbXScpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzLnNwbGljZShuZXdJbmRleCwgMCwgcnVsZXMuc3BsaWNlKG9sZEluZGV4LCAxKVswXSlcXFxcbiAgICAgICAgICAgICAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBKU09OLnN0cmluZ2lmeShydWxlcykpXFxcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcignbXlDb2xsZWN0aW9uLXNvcnRGbGFnJywgJy0xJylcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXFxcbiAgICAgICAgICAgICAgICB9LCBzb3J0RmxhZywgaSlcXFxcbiAgICAgICAgICAgIGJyZWFrXFxcXG4gICAgICAgIGNhc2UgJ+abtOaUueWbvuaghyc6XFxcXG4gICAgICAgICAgICBkLnVybCA9ICQodi5pY29uIHx8ICcnLCAn6L6T5YWl5paw5Zu+5qCH5Zyw5Z2A5oiW6aKc6Imy5Luj56CB77yaJykuaW5wdXQoKHJ1bGUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJyksXFxcXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcnVsZXMuZmluZEluZGV4KCh2KSA9PiB2LnRpdGxlID09IHJ1bGUudGl0bGUpXFxcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0KVxcXFxuICAgICAgICAgICAgICAgICAgICBydWxlc1tpbmRleF0uaWNvbiA9IGlucHV0XFxcXG4gICAgICAgICAgICAgICAgZWxzZVxcXFxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcnVsZXNbaW5kZXhdLmljb25cXFxcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSgnY3VzdG9tRGF0YScsIEpTT04uc3RyaW5naWZ5KHJ1bGVzKSlcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgICAgICB9LCB2KVxcXFxuICAgICAgICAgICAgYnJlYWtcXFxcbiAgICAgICAgY2FzZSAn5a+85YWl5rW36ZiUJzpcXFxcbiAgICAgICAgICAgIGQudXJsID0gJ3J1bGU6Ly8nICsgYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KGRhdGFbaV0pKVxcXFxuICAgICAgICAgICAgYnJlYWtcXFxcbiAgICB9XFxcXG4gICAgZWwucHVzaChkKVxcXFxufSlcXFxcbnNldFJlc3VsdChlbClcXFxcblxcXCJ9XVwifSIsInBpY1VybCI6Imh0dHA6Ly93d3cuenljYWlqaS5uZXQ6Nzc4OC91cGxvYWQvdm9kLzIwMjExMDI4LTEvYmI0YjE0NDkzMjYwNTg2MmExNjNmNWMxOWJiZGI5NjkuanBnQFJlZmVyZXI9IiwidGl0bGUiOiLlpLHmjqfnjqnlrrYifQ==
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement