Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥夏日重现@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcInRleHRfMVwiLFwibmFtZVwiOlwiQ2xhc3NUYWJcIixcInBhdGhcIjpcIkNsYXNzVGFiXCIsXCJydWxlXCI6XCJmdW5jdGlvbiBDbGFzc1RhYihjbGFzc0FycmF5LCBwYXJhbXMpIHtcXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBwYXJhbXMpXFxuICAgIHRoaXMuYXJyID0gY2xhc3NBcnJheS5tYXAodiA9PiB0aGlzLmluaXQodikpXFxuICAgIHRoaXMuc2lnbiA9ICckJyArIE1ZX1JVTEUudGl0bGUgKyAnXycgKyAodGhpcy5uYW1lIHx8ICcnKSArICdfJ1xcbiAgICB0aGlzLmNvbG9yID0gdGhpcy5jb2xvciB8fCAnIzEyYjY2OCdcXG4gICAgdGhpcy5ib3VuZGFyeSA9IHRoaXMuYm91bmRhcnkgfHwgJ2JsYW5rX2Jsb2NrJ1xcbn1cXG5DbGFzc1RhYi5wcm90b3R5cGUgPSB7XFxuICAgIGNvbnN0cnVjdG9yOiBDbGFzc1RhYixcXG4gICAgbG9hZChlbCkge1xcbiAgICAgICAgbGV0IGZvbGRlZCA9IGdldFZhcignZm9sZF8nICsgdGhpcy5zaWduLCAnJylcXG4gICAgICAgIGlmICh0aGlzLmZvbGQpIGVsLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHNwYW4gc3R5bGU9XFxcImNvbG9yOiMwNDllZmZcXFwiPicgKyAoZm9sZGVkID8gJ+KWticgOiAn4pa8JyksXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzaWduLCBmb2xkZWQpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0VmFyKCdmb2xkXycgKyBzaWduLCB7ICcnOiAnVCcsICdUJzogJycgfSBbZm9sZGVkXSlcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9LCB0aGlzLnNpZ24sIGZvbGRlZCksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgfSlcXG4gICAgICAgIGxldCBhcnIgPSBmb2xkZWQgPyBbdGhpcy5hcnJbMF1dIDogdGhpcy5hcnJcXG4gICAgICAgIGFyci5mb3JFYWNoKCh2KSA9PiB7XFxuICAgICAgICAgICAgbGV0IHsgaWQsIGNsYXNzX25hbWUsIGNsYXNzX3VybCB9ID0gdixcXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmdldENsYXNzKGlkKSlcXG4gICAgICAgICAgICBjbGFzc19uYW1lLmZvckVhY2goKG5hbWUsIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHVybCA9IGNsYXNzX3VybFtpXSxcXG4gICAgICAgICAgICAgICAgICAgIG5vdyA9IEpTT04uc3RyaW5naWZ5KHsgbmFtZTogbmFtZSwgdXJsOiB1cmwgfSlcXG4gICAgICAgICAgICAgICAgZWwucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogKHNlbGVjdGVkID09IG5vdyA/ICfigJzigJzigJ3igJ08c3BhbiBzdHlsZT1cXFwiY29sb3I6JyArIHRoaXMuY29sb3IgKyAnXFxcIj48Yj4nIDogJycpICsgbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc2lnbiwgaWQsIG5vdykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcihzaWduICsgaWQsIG5vdylcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoc2lnbiwgbm93KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgICAgIH0sIHRoaXMuc2lnbiwgaWQsIG5vdyksXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBlbC5wdXNoKHsgY29sX3R5cGU6IHRoaXMuYm91bmRhcnkgfSlcXG4gICAgICAgIH0pXFxuICAgIH0sXFxuICAgIGluaXQoY2xhc3NPYmplY3QpIHtcXG4gICAgICAgIGlmICh0eXBlb2YgY2xhc3NPYmplY3QuY2xhc3NfbmFtZSA9PSAnc3RyaW5nJylcXG4gICAgICAgICAgICBjbGFzc09iamVjdC5jbGFzc19uYW1lID0gY2xhc3NPYmplY3QuY2xhc3NfbmFtZS5zcGxpdCgnJicpXFxuICAgICAgICBpZiAodHlwZW9mIGNsYXNzT2JqZWN0LmNsYXNzX3VybCA9PSAnc3RyaW5nJylcXG4gICAgICAgICAgICBjbGFzc09iamVjdC5jbGFzc191cmwgPSBjbGFzc09iamVjdC5jbGFzc191cmwuc3BsaXQoJyYnKS5tYXAoKHYpID0+IHYudHJpbSgpKVxcbiAgICAgICAgcmV0dXJuIGNsYXNzT2JqZWN0XFxuICAgIH0sXFxuICAgIHB1c2goY2xhc3NPYmplY3QpIHtcXG4gICAgICAgIHRoaXMuYXJyLnB1c2godGhpcy5pbml0KGNsYXNzT2JqZWN0KSlcXG4gICAgfSxcXG4gICAgZ2V0Q2xhc3MoaWQpIHtcXG4gICAgICAgIGxldCBkZWZhdWx0Q2xhc3MgPSB0aGlzLmFyci5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PSBpZClcXG4gICAgICAgIGlmIChkZWZhdWx0Q2xhc3MpIGRlZmF1bHRDbGFzcyA9IEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICBuYW1lOiBkZWZhdWx0Q2xhc3MuY2xhc3NfbmFtZVswXSxcXG4gICAgICAgICAgICB1cmw6IGRlZmF1bHRDbGFzcy5jbGFzc191cmxbMF1cXG4gICAgICAgIH0pXFxuICAgICAgICBlbHNlIHRocm93IG5ldyBFcnJvcignY2Fubm90IGZpbmQgaWQ6ICcgKyBpZCArICcgaW4gY2xhc3NUYWI6ICcgKyB0aGlzLnNpZ24pXFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShnZXRWYXIodGhpcy5zaWduICsgaWQsIGRlZmF1bHRDbGFzcykpXFxuICAgIH0sXFxuICAgIGdldExhc3RDbGljaygpIHtcXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGdldFZhcih0aGlzLnNpZ24sICd7fScpKVxcbiAgICB9LFxcbiAgICBzZXRVcmwodXJsKSB7XFxuICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UoL1xcXFwkXFxcXHsoW159XSopXFxcXH0vZywgKF8sIGlkKSA9PiB0aGlzLmdldENsYXNzKGlkKS51cmwpXFxuICAgIH1cXG59XFxuJC5leHBvcnRzID0gQ2xhc3NUYWJcXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIummlumhtVwiLFwicGF0aFwiOlwiaW5kZXhMb2FkXCIsXCJydWxlXCI6XCJqczpcXG5sZXQgbXlDb2xsZWN0aW9uX2VsID0gW10sXFxuICAgIHBhZ2VOdW0gPSBwYXJzZUludChNWV9VUkwuc3BsaXQoJyMnKVsxXSksXFxuICAgIFJVTEUgPSBNWV9QQVJBTVMuUlVMRSxcXG4gICAgZnlBbGwgPSBSVUxFLnVybC5pbmNsdWRlcygnZnlBbGwnKSxcXG4gICAgLy8g5Yqg6L29Q2xhc3NUYWLnu4Tku7ZcXG4gICAgQ2xhc3NUYWIgPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9DbGFzc1RhYj9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSksXFxuICAgIHRhYkhlYWRlciA9IFtdXFxuXFxuaWYgKFJVTEUuY2xhc3NfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5Y2xhc3MnLFxcbiAgICBjbGFzc19uYW1lOiBSVUxFLmNsYXNzX25hbWUsXFxuICAgIGNsYXNzX3VybDogUlVMRS5jbGFzc191cmxcXG59KVxcbmlmIChSVUxFLmFyZWFfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5YXJlYScsXFxuICAgIGNsYXNzX25hbWU6IFJVTEUuYXJlYV9uYW1lLFxcbiAgICBjbGFzc191cmw6IFJVTEUuYXJlYV91cmxcXG59KVxcbmlmIChSVUxFLnllYXJfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5eWVhcicsXFxuICAgIGNsYXNzX25hbWU6IFJVTEUueWVhcl9uYW1lLFxcbiAgICBjbGFzc191cmw6IFJVTEUueWVhcl91cmxcXG59KVxcbmlmIChSVUxFLnNvcnRfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5c29ydCcsXFxuICAgIGNsYXNzX25hbWU6IFJVTEUuc29ydF9uYW1lLFxcbiAgICBjbGFzc191cmw6IFJVTEUuc29ydF91cmxcXG59KVxcbnRhYkhlYWRlciA9IG5ldyBDbGFzc1RhYih0YWJIZWFkZXIsIHsgbmFtZTogUlVMRS50aXRsZSB9KVxcbmlmIChwYWdlTnVtID09IDEpIHtcXG4gICAgYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAnY2xlYXJWYXIoXFxcIm15Q29sbGVjdGlvbi1zZWFyY2hNb2RlXFxcIiknKVxcbiAgICBwdXRWYXIoJ215Q29sbGVjdGlvbi1zZWFyY2hNb2RlJywgUlVMRS50aXRsZSlcXG4gICAgdGFiSGVhZGVyLmxvYWQobXlDb2xsZWN0aW9uX2VsKVxcbiAgICBpZiAoUlVMRS5zZWFyY2hfdXJsKSBteUNvbGxlY3Rpb25fZWwucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuaQnOe0olxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwi5pCc5L2g5oOz6KaB55qELi4uXFxcIixcXG4gICAgICAgIHVybDogJ1xcXCJoaWtlcjovL3BhZ2Uvc2luZ2xlU2VhcmNoP2tleXdvcmQ9XFxcIitpbnB1dCtcXFwiJnBhZ2U9ZnlwYWdlXFxcIicsXFxuICAgICAgICBleHRyYTogeyBydWxlOiBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSwgUlVMRTogUlVMRSB9LFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgIH0pXFxufVxcbi8vIOWkhOeQhk1ZX1VSTOWSjE1ZX1JVTEVcXG5NWV9SVUxFLnVhID0gUlVMRS51YVxcbk1ZX1JVTEUudGl0bGUgPSBSVUxFLnRpdGxlXFxuTVlfUlVMRS5jb2xfdHlwZSA9IFJVTEUuY29sX3R5cGVcXG5NWV9SVUxFLmRldGFpbF9jb2xfdHlwZSA9IFJVTEUuZGV0YWlsX2NvbF90eXBlXFxuTVlfUlVMRS5maW5kX3J1bGUgPSBSVUxFLmZpbmRfcnVsZVxcbk1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IFJVTEUuZGV0YWlsX2ZpbmRfcnVsZVxcbk1ZX1JVTEUucHJlUnVsZSA9IFJVTEUucHJlUnVsZVxcbk1ZX1JVTEUucGFnZUxpc3QgPSBKU09OLnBhcnNlKFJVTEUucGFnZXMgfHwgJ1tdJylcXG5NWV9SVUxFLnBhZ2VzID0gSlNPTi5zdHJpbmdpZnkoTVlfUlVMRS5wYWdlTGlzdClcXG5NWV9SVUxFLmxhc3RfY2hhcHRlcl9ydWxlID0gUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZVxcbk1ZX1JVTEUucGFyYW1zID0ge31cXG5cXG5jb25zdCB7IHJ1bkNvZGUsIHVybFBhcnNlIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS91dGlsaXR5P3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpKVxcbnZhciB7IE1ZX1VSTCwgTVlfVVJMX09wdGlvbnMgfSA9IHVybFBhcnNlKFJVTEUudXJsLCB7fSwgcGFnZU51bSwgKHVybCkgPT4ge1xcbiAgICB1cmxbMF0gPSBmeUFsbCA/IHVybFswXS5yZXBsYWNlKC9meUFsbC9nLCAnJCR7ZnlBbGx9JykgOiB1cmxbMF0ucmVwbGFjZSgvZnkoY2xhc3N8YXJlYXx5ZWFyfHNvcnQpL2csICckJHtmeSQxfScpXFxuICAgIHVybFswXSA9IHRhYkhlYWRlci5zZXRVcmwodXJsWzBdKVxcbn0pLFxcbiAgICBpbmRleEh0bWwgPSBmZXRjaChNWV9VUkwsIE1ZX1VSTF9PcHRpb25zKVxcbk1ZX1JVTEUudXJsID0gTVlfVVJMXFxuTVlfUlVMRS51cmxIZWFkZXJzID0gTVlfVVJMX09wdGlvbnMuaGVhZGVyc1xcbmxvZyhNWV9VUkwpXFxuLy8g5q2j5paH6Kej5p6QXFxuaWYgKHBhZ2VOdW0gPT0gMSkgZXZhbChNWV9SVUxFLnByZVJ1bGUpXFxuaWYgKE1ZX1JVTEUuZmluZF9ydWxlLnN0YXJ0c1dpdGgoJ2pzOicpKSB7XFxuICAgIGZ1bmN0aW9uIGdldFVybCgpIHtcXG4gICAgICAgIHJldHVybiBNWV9VUkxcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiBnZXRSZXNDb2RlKCkge1xcbiAgICAgICAgcmV0dXJuIGluZGV4SHRtbFxcbiAgICB9XFxuXFxuICAgIGZ1bmN0aW9uIHNldFJlc3VsdChlbCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMykge1xcbiAgICAgICAgcGFyYW0xID0gQ0FMTEJBQ0tfS0VZXFxuICAgICAgICBwYXJhbTIgPSBNWV9SVUxFXFxuICAgICAgICBwYXJhbTMgPSBNWV9UWVBFXFxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbC5kYXRhKSkgZWwgPSBlbC5kYXRhXFxuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShteUNvbGxlY3Rpb25fZWwsIGVsLm1hcCgodikgPT4ge1xcbiAgICAgICAgICAgIGxldCBNWV9fUlVMRSA9IE9iamVjdC5hc3NpZ24oe30sIE1ZX1JVTEUpXFxuICAgICAgICAgICAgdi5jb2xfdHlwZSA9IHYuY29sX3R5cGUgfHwgTVlfUlVMRS5jb2xfdHlwZVxcblxcbiAgICAgICAgICAgIGlmICghdi51cmwpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLmluY2x1ZGVzKCdAcnVsZT0nKSkge1xcbiAgICAgICAgICAgICAgICBsZXQgW18sIHVybCwgcnVsZV0gPSB2LnVybC5tYXRjaCgvXihbXFxcXHNcXFxcU10qPylAcnVsZT0oW1xcXFxzXFxcXFNdKikkLylcXG4gICAgICAgICAgICAgICAgdi51cmwgPSB1cmxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHJ1bGVcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gTVlfUlVMRS5jb2xfdHlwZVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly9wYWdlLycpKSB7XFxuICAgICAgICAgICAgICAgIGlmICh2LnVybC5pbmNsdWRlcygncnVsZT0nKSB8fCAodi5leHRyYSB8fCB7fSkucnVsZSlcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICAgICAgICAgIGxldCBbXywgcGF0aCwgcGFyYW1zXSA9IHYudXJsLnNwbGl0KCcjJylbMF0ubWF0Y2goL15oaWtlcjpcXFxcL1xcXFwvcGFnZVxcXFwvKC4rPykoPzpcXFxcPyguKikpPyQvKSxcXG4gICAgICAgICAgICAgICAgICAgIHN1YlBhZ2UgPSBNWV9SVUxFLnBhZ2VMaXN0LmZpbmQoKHYpID0+IHYucGF0aCA9PSBwYXRoKSxcXG4gICAgICAgICAgICAgICAgICAgIHN1YlVybCA9IChwYXJhbXMgfHwgJycpLnNwbGl0KCcmJykuZmluZCgodikgPT4gdi5zdGFydHNXaXRoKCd1cmw9JykpXFxuICAgICAgICAgICAgICAgIHYudXJsID0gc3ViVXJsID8gc3ViVXJsLnNsaWNlKDQpLnJlcGxhY2UoL++8n++8ny9nLCAnPycpLnJlcGxhY2UoL++8hu+8hi9nLCAnJicpIDogKHYuZXh0cmEgfHwge30pLnVybCB8fCAnaGlrZXI6Ly9lbXB0eT8nICsgKHBhcmFtcyB8fCAnJylcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHN1YlBhZ2UucnVsZVxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBzdWJQYWdlLmNvbF90eXBlXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLnBhcmFtcyA9IHYuZXh0cmEgfHwge31cXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLmluY2x1ZGVzKCdAbGF6eVJ1bGU9JykpIHtcXG4gICAgICAgICAgICAgICAgdi51cmwgPSB2LnVybC5yZXBsYWNlKCcuanM6JywgJy5qczpcXFxcbmlmKE1ZX1JVTEUpT2JqZWN0LmFzc2lnbihNWV9SVUxFLCcgKyAkLnN0cmluZ2lmeSh7IHBhZ2VzOiBNWV9SVUxFLnBhZ2VzLCBwYWdlTGlzdDogTVlfUlVMRS5wYWdlTGlzdCwgZmluZF9ydWxlOiAnJywgcGFyYW1zOiAnJyB9KSArICcpO01ZX1VSTD1cXFwiJyArIE1ZX1VSTCArICdcXFwiOycpXFxuICAgICAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICAgICAgfSBlbHNlIGlmICghTVlfUlVMRS5kZXRhaWxfZmluZF9ydWxlIHx8IHYudXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vJykpIHsgcmV0dXJuIHYgfVxcbiAgICAgICAgICAgIHYuZXh0cmEgPSB7IHVybDogdi51cmwsIFJVTEU6IE1ZX19SVUxFLCBwYWdlVGl0bGU6IHYudGl0bGUgfVxcbiAgICAgICAgICAgIHYudXJsID0gJ2hpa2VyOi8vcGFnZS9kZXRhaWxMb2FkP3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpXFxuICAgICAgICAgICAgaWYgKHYuZXh0cmEuUlVMRS51cmwuaW5jbHVkZXMoJyNpbW1lcnNpdmVUaGVtZSMnKSkgdi51cmwgKz0gJyYjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICB9KSlcXG4gICAgICAgIG1ldGhvZF9zZXRSZXN1bHQuaW52b2tlKGphdmFDb250ZXh0LCBteUNvbGxlY3Rpb25fZWwsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpXFxuICAgIH1cXG4gICAgc2V0SG9tZVJlc3VsdCA9IHNldFJlc3VsdFxcbiAgICBzZXRTZWFyY2hSZXN1bHQgPSBzZXRSZXN1bHRcXG5cXG4gICAgZXZhbChNWV9SVUxFLmZpbmRfcnVsZS5zbGljZSgzKSlcXG59IGVsc2Uge1xcbiAgICBsZXQgZmluZFJ1bGUgPSBNWV9SVUxFLmZpbmRfcnVsZS5zcGxpdCgnOycpXFxuICAgIHBhcnNlRG9tRm9yQXJyYXkoaW5kZXhIdG1sLCBmaW5kUnVsZS5zaGlmdCgpKS5mb3JFYWNoKChkYXRhKSA9PiB7XFxuICAgICAgICBsZXQgW3RpdGxlLCBpbWcsIGRlc2MsIHVybF0gPSBmaW5kUnVsZS5tYXAoKHYsIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh2ID09ICcqJykgcmV0dXJuICcnXFxuICAgICAgICAgICAgICAgICAgICBlbHNlIHYgPSAoaSA9PSAxIHx8IGkgPT0gMykgP1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tKGRhdGEsIHYpIDpcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvbUZvckh0bWwoZGF0YSwgdilcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpICE9IDMpIHYgPSBydW5Db2RlKHYpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IHJldHVybiAnJyB9XFxuICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgcmVzID0ge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgIHVybDogdXJsLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLFxcbiAgICAgICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IE1ZX1JVTEUuY29sX3R5cGVcXG4gICAgICAgICAgICB9XFxuICAgICAgICBpZiAocmVzLnVybCkge1xcbiAgICAgICAgICAgIGlmIChyZXMudXJsLmluY2x1ZGVzKCdAbGF6eVJ1bGU9JykpIHtcXG4gICAgICAgICAgICAgICAgcmVzLnVybCA9IHJlcy51cmwucmVwbGFjZSgnLmpzOicsICcuanM6XFxcXG5pZihNWV9SVUxFKU9iamVjdC5hc3NpZ24oTVlfUlVMRSwnICsgJC5zdHJpbmdpZnkoeyBwYWdlczogTVlfUlVMRS5wYWdlcywgcGFnZUxpc3Q6IE1ZX1JVTEUucGFnZUxpc3QsIGZpbmRfcnVsZTogJycsIHBhcmFtczogJycgfSkgKyAnKTtNWV9VUkw9XFxcIicgKyBNWV9VUkwgKyAnXFxcIjsnKVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoTVlfUlVMRS5kZXRhaWxfZmluZF9ydWxlKSB7XFxuICAgICAgICAgICAgICAgIHJlcy5leHRyYSA9IHsgdXJsOiB1cmwsIFJVTEU6IE1ZX1JVTEUsIHBhZ2VUaXRsZTogdGl0bGUgfVxcbiAgICAgICAgICAgICAgICByZXMudXJsID0gJ2hpa2VyOi8vcGFnZS9kZXRhaWxMb2FkP3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpXFxuICAgICAgICAgICAgICAgIGlmIChyZXMuZXh0cmEuUlVMRS51cmwuaW5jbHVkZXMoJyNpbW1lcnNpdmVUaGVtZSMnKSkgcmVzLnVybCArPSAnJiNpbW1lcnNpdmVUaGVtZSMnXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgbXlDb2xsZWN0aW9uX2VsLnB1c2gocmVzKVxcbiAgICB9KVxcbiAgICBzZXRSZXN1bHQobXlDb2xsZWN0aW9uX2VsKVxcbn1cXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuivpuaDhVwiLFwicGF0aFwiOlwiZGV0YWlsTG9hZFwiLFwicnVsZVwiOlwianM6XFxubGV0IG15Q29sbGVjdGlvbl9lbCA9IFtdXFxuXFxuLy8g5aSE55CGTVlfVVJM5ZKMTVlfUlVMRVxcbmxldCBSVUxFID0gTVlfUEFSQU1TLlJVTEVcXG5NWV9SVUxFLnVhID0gUlVMRS51YVxcbk1ZX1JVTEUudGl0bGUgPSBSVUxFLnRpdGxlXFxuTVlfUlVMRS5jb2xfdHlwZSA9IFJVTEUuZGV0YWlsX2NvbF90eXBlXFxuTVlfUlVMRS5maW5kX3J1bGUgPSBSVUxFLmRldGFpbF9maW5kX3J1bGVcXG5NWV9SVUxFLnByZVJ1bGUgPSBSVUxFLnByZVJ1bGVcXG5NWV9SVUxFLnBhZ2VMaXN0ID0gUlVMRS5wYWdlTGlzdFxcbk1ZX1JVTEUucGFnZXMgPSBSVUxFLnBhZ2VzXFxuTVlfUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZSA9IFJVTEUubGFzdF9jaGFwdGVyX3J1bGVcXG5NWV9SVUxFLnBhcmFtcyA9IFJVTEUucGFyYW1zXFxuXFxuY29uc3QgeyBydW5Db2RlLCB1cmxQYXJzZSB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvdXRpbGl0eT9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSlcXG52YXIgeyBNWV9VUkwsIE1ZX1VSTF9PcHRpb25zIH0gPSB1cmxQYXJzZShNWV9QQVJBTVMudXJsLCBSVUxFLnVybEhlYWRlcnMsIDEpLFxcbiAgICBpbmRleEh0bWwgPSBmZXRjaChNWV9VUkwsIE1ZX1VSTF9PcHRpb25zKVxcbk1ZX1JVTEUudXJsID0gTVlfVVJMXFxuTVlfUlVMRS51cmxIZWFkZXJzID0gTVlfVVJMX09wdGlvbnMuaGVhZGVyc1xcbi8vIOino+aekOato+aWh1xcbmlmIChNWV9QQVJBTVMucGFnZVRpdGxlKSBzZXRQYWdlVGl0bGUoTVlfUEFSQU1TLnBhZ2VUaXRsZSlcXG5ldmFsKE1ZX1JVTEUucHJlUnVsZSlcXG5zZXRMYXN0Q2hhcHRlclJ1bGUoTVlfUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZSlcXG5NWV9QQVJBTVMgPSBNWV9SVUxFLnBhcmFtc1xcbmlmIChNWV9SVUxFLmZpbmRfcnVsZS5zdGFydHNXaXRoKCdqczonKSkge1xcbiAgICBmdW5jdGlvbiBnZXRVcmwoKSB7XFxuICAgICAgICByZXR1cm4gTVlfVVJMXFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gZ2V0UmVzQ29kZSgpIHtcXG4gICAgICAgIHJldHVybiBpbmRleEh0bWxcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiBzZXRSZXN1bHQoZWwsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpIHtcXG4gICAgICAgIHBhcmFtMSA9IENBTExCQUNLX0tFWVxcbiAgICAgICAgcGFyYW0yID0gTVlfUlVMRVxcbiAgICAgICAgcGFyYW0zID0gTVlfVFlQRVxcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWwuZGF0YSkpIGVsID0gZWwuZGF0YVxcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobXlDb2xsZWN0aW9uX2VsLCBlbC5tYXAoKHYpID0+IHtcXG4gICAgICAgICAgICBsZXQgTVlfX1JVTEUgPSBPYmplY3QuYXNzaWduKHt9LCBNWV9SVUxFKVxcbiAgICAgICAgICAgIHYuY29sX3R5cGUgPSB2LmNvbF90eXBlIHx8IE1ZX1JVTEUuY29sX3R5cGVcXG5cXG4gICAgICAgICAgICBpZiAoIXYudXJsKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5pbmNsdWRlcygnQHJ1bGU9JykpIHtcXG4gICAgICAgICAgICAgICAgbGV0IFtfLCB1cmwsIHJ1bGVdID0gdi51cmwubWF0Y2goL14oW1xcXFxzXFxcXFNdKj8pQHJ1bGU9KFtcXFxcc1xcXFxTXSopJC8pXFxuICAgICAgICAgICAgICAgIHYudXJsID0gdXJsXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBydWxlXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9jb2xfdHlwZSA9IE1ZX1JVTEUuY29sX3R5cGVcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSkge1xcbiAgICAgICAgICAgICAgICBpZiAodi51cmwuaW5jbHVkZXMoJ3J1bGU9JykgfHwgKHYuZXh0cmEgfHwge30pLnJ1bGUpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgICAgICBsZXQgW18sIHBhdGgsIHBhcmFtc10gPSB2LnVybC5zcGxpdCgnIycpWzBdLm1hdGNoKC9eaGlrZXI6XFxcXC9cXFxcL3BhZ2VcXFxcLyguKz8pKD86XFxcXD8oLiopKT8kLyksXFxuICAgICAgICAgICAgICAgICAgICBzdWJQYWdlID0gTVlfUlVMRS5wYWdlTGlzdC5maW5kKCh2KSA9PiB2LnBhdGggPT0gcGF0aCksXFxuICAgICAgICAgICAgICAgICAgICBzdWJVcmwgPSAocGFyYW1zIHx8ICcnKS5zcGxpdCgnJicpLmZpbmQoKHYpID0+IHYuc3RhcnRzV2l0aCgndXJsPScpKVxcbiAgICAgICAgICAgICAgICB2LnVybCA9IHN1YlVybCA/IHN1YlVybC5zbGljZSg0KS5yZXBsYWNlKC/vvJ/vvJ8vZywgJz8nKS5yZXBsYWNlKC/vvIbvvIYvZywgJyYnKSA6ICh2LmV4dHJhIHx8IHt9KS51cmwgfHwgJ2hpa2VyOi8vZW1wdHk/JyArIChwYXJhbXMgfHwgJycpXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBzdWJQYWdlLnJ1bGVcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gc3ViUGFnZS5jb2xfdHlwZVxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5wYXJhbXMgPSB2LmV4dHJhIHx8IHt9XFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxuICAgICAgICAgICAgICAgIHYudXJsID0gdi51cmwucmVwbGFjZSgnLmpzOicsICcuanM6XFxcXG5pZihNWV9SVUxFKU9iamVjdC5hc3NpZ24oTVlfUlVMRSwnICsgJC5zdHJpbmdpZnkoeyBwYWdlczogTVlfUlVMRS5wYWdlcywgcGFnZUxpc3Q6IE1ZX1JVTEUucGFnZUxpc3QsIGZpbmRfcnVsZTogJycsIHBhcmFtczogJycgfSkgKyAnKTtNWV9VUkw9XFxcIicgKyBNWV9VUkwgKyAnXFxcIjsnKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgIH0gZWxzZSB7IHJldHVybiB2IH1cXG4gICAgICAgICAgICB2LmV4dHJhID0geyB1cmw6IHYudXJsLCBSVUxFOiBNWV9fUlVMRSB9XFxuICAgICAgICAgICAgdi51cmwgPSAnaGlrZXI6Ly9wYWdlL2RldGFpbExvYWQ/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJylcXG4gICAgICAgICAgICBpZiAodi5leHRyYS5SVUxFLnVybC5pbmNsdWRlcygnI2ltbWVyc2l2ZVRoZW1lIycpKSB2LnVybCArPSAnJiNpbW1lcnNpdmVUaGVtZSMnXFxuICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgIH0pKVxcbiAgICAgICAgbWV0aG9kX3NldFJlc3VsdC5pbnZva2UoamF2YUNvbnRleHQsIG15Q29sbGVjdGlvbl9lbCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMylcXG4gICAgfVxcbiAgICBzZXRIb21lUmVzdWx0ID0gc2V0UmVzdWx0XFxuICAgIHNldFNlYXJjaFJlc3VsdCA9IHNldFJlc3VsdFxcblxcbiAgICBldmFsKE1ZX1JVTEUuZmluZF9ydWxlLnNsaWNlKDMpKVxcbn0gZWxzZSB7XFxuICAgIGxldCBbXywgZmluZFJ1bGUsIGRldGFpbEZpbmRSdWxlXSA9IE1ZX1JVTEUuZmluZF9ydWxlLm1hdGNoKC9eKC4qPykoPzo9PT4oLiopKT8kLylcXG4gICAgZmluZFJ1bGUgPSBmaW5kUnVsZS5zcGxpdCgnOycpXFxuICAgIHBhcnNlRG9tRm9yQXJyYXkoaW5kZXhIdG1sLCBmaW5kUnVsZS5zaGlmdCgpKS5mb3JFYWNoKChkYXRhKSA9PiB7XFxuICAgICAgICBsZXQgW3RpdGxlLCBpbWcsIGRlc2MsIHVybF0gPSBmaW5kUnVsZS5tYXAoKHYsIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh2ID09ICcqJykgcmV0dXJuICcnXFxuICAgICAgICAgICAgICAgICAgICBlbHNlIHYgPSAoaSA9PSAxIHx8IGkgPT0gMykgP1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tKGRhdGEsIHYpIDpcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvbUZvckh0bWwoZGF0YSwgdilcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpICE9IDMpIHYgPSBydW5Db2RlKHYpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IHJldHVybiAnJyB9XFxuICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgcmVzID0ge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgIHVybDogdXJsLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLFxcbiAgICAgICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IE1ZX1JVTEUuY29sX3R5cGVcXG4gICAgICAgICAgICB9XFxuICAgICAgICBpZiAocmVzLnVybCkge1xcbiAgICAgICAgICAgIGlmIChyZXMudXJsLmluY2x1ZGVzKCdAbGF6eVJ1bGU9JykpIHtcXG4gICAgICAgICAgICAgICAgcmVzLnVybCA9IHJlcy51cmwucmVwbGFjZSgnLmpzOicsICcuanM6XFxcXG5pZihNWV9SVUxFKU9iamVjdC5hc3NpZ24oTVlfUlVMRSwnICsgJC5zdHJpbmdpZnkoeyBwYWdlczogTVlfUlVMRS5wYWdlcywgcGFnZUxpc3Q6IE1ZX1JVTEUucGFnZUxpc3QsIGZpbmRfcnVsZTogJycsIHBhcmFtczogJycgfSkgKyAnKTtNWV9VUkw9XFxcIicgKyBNWV9VUkwgKyAnXFxcIjsnKVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGV0YWlsRmluZFJ1bGUpIHtcXG4gICAgICAgICAgICAgICAgcmVzLmV4dHJhID0geyB1cmw6IHVybCwgUlVMRTogT2JqZWN0LmFzc2lnbih7fSwgTVlfUlVMRSwgeyBkZXRhaWxfZmluZF9ydWxlOiBkZXRhaWxGaW5kUnVsZSB9KSB9XFxuICAgICAgICAgICAgICAgIHJlcy51cmwgPSAnaGlrZXI6Ly9wYWdlL2RldGFpbExvYWQ/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJylcXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5leHRyYS5SVUxFLnVybC5pbmNsdWRlcygnI2ltbWVyc2l2ZVRoZW1lIycpKSByZXMudXJsICs9ICcmI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBteUNvbGxlY3Rpb25fZWwucHVzaChyZXMpXFxuICAgIH0pXFxuICAgIHNldFJlc3VsdChteUNvbGxlY3Rpb25fZWwpXFxufVxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5bel5YW36ZuGXCIsXCJwYXRoXCI6XCJ1dGlsaXR5XCIsXCJydWxlXCI6XCIkLmV4cG9ydHMgPSB7XFxuICAgIGRhdGFMb2FkOiBmdW5jdGlvbihzaG93QWxsKSB7XFxuICAgICAgICAvL+ajgOafpemXtOmalO+8jOm7mOiupOS4gOWkqVxcbiAgICAgICAgbGV0IG1pbiA9IDYwICogMjQgKiAxLFxcbiAgICAgICAgICAgIGRhdGEgPSBbXSxcXG4gICAgICAgICAgICB0aW1lID0gcGFyc2VJbnQocmVhZEZpbGUoJ3VwZGF0ZXRpbWUnKSkgfHwgMCxcXG4gICAgICAgICAgICBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKVxcbiAgICAgICAgaWYgKG5vdyAtIHRpbWUgPiAxMDAwICogNjAgKiBtaW4pIHtcXG4gICAgICAgICAgICBsb2coJ+abtOaWsOS6huaVsOaNricpXFxuICAgICAgICAgICAgLy8g6I635Y+W6L+c56iL5pWw5o2uXFxuICAgICAgICAgICAgbGV0IHVybCA9IGdldEl0ZW0oJ3JlbW90ZVVybCcpXFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgZGF0YSA9IGZldGNoKHVybClcXG4gICAgICAgICAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKCdoaWtlcjovL3BhZ2UvJykpXFxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKS5ydWxlXFxuICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpXFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICBkYXRhID0gW11cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKCh2KSA9PiB7IHJldHVybiB2LnRpdGxlICE9IGdldEl0ZW0oJ215Q29sbGVjdGlvbicpICYmICF2LmF1dGhvci5pbmNsdWRlcygn6L275ZCI6ZuG55Sf5oiQ5ZmoJykgfSlcXG4gICAgICAgICAgICBzYXZlRmlsZSgnZGF0YUNhY2hlJywgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ3VwZGF0ZXRpbWUnLCAnJyArIG5vdylcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgbG9nKCfmsqHmnInmm7TmlrDmlbDmja4nKVxcbiAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdkYXRhQ2FjaGUnKSlcXG4gICAgICAgIH1cXG4gICAgICAgIC8vIOWGmeWFpeiHquWumuS5ieaVsOaNrlxcbiAgICAgICAgbGV0IGN1c3RvbURhdGEgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJyksXFxuICAgICAgICAgICAgcmV3cml0ZURhdGEgPSBbXVxcbiAgICAgICAgY3VzdG9tRGF0YSA9IGN1c3RvbURhdGEucmVkdWNlKChzZWxmLCB2KSA9PiB7XFxuICAgICAgICAgICAgbGV0IGluZGV4ID0gZGF0YS5maW5kSW5kZXgoKHZ2KSA9PiB2LnRpdGxlID09IHZ2LnRpdGxlKVxcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XFxuICAgICAgICAgICAgICAgIHNlbGYucHVzaCh2KVxcbiAgICAgICAgICAgICAgICBsZXQgcnVsZSA9IGRhdGEuc3BsaWNlKGluZGV4LCAxKVswXVxcbiAgICAgICAgICAgICAgICBpZihzaG93QWxsIHx8IHYudmlzaWJsZSlcXG4gICAgICAgICAgICAgICAgICAgIHJld3JpdGVEYXRhLnB1c2goT2JqZWN0LmFzc2lnbihydWxlLCB2KSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIHNlbGZcXG4gICAgICAgIH0sIFtdKVxcbiAgICAgICAgZGF0YS5mb3JFYWNoKCh2KSA9PiBjdXN0b21EYXRhLnB1c2goeyB0aXRsZTogdi50aXRsZSwgdmlzaWJsZTogdHJ1ZSB9KSlcXG4gICAgICAgIHNhdmVGaWxlKCdjdXN0b21EYXRhJywgSlNPTi5zdHJpbmdpZnkoY3VzdG9tRGF0YSkpXFxuICAgICAgICByZXR1cm4gcmV3cml0ZURhdGEuY29uY2F0KGRhdGEpXFxuICAgIH0sXFxuICAgIHJ1bkNvZGU6IGZ1bmN0aW9uKHJ1bGUpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgbGV0IFtpbnB1dCwgY29kZV0gPSBydWxlLnNwbGl0KCcuanM6JylcXG4gICAgICAgICAgICByZXR1cm4gY29kZSA/IGV2YWwoY29kZSkgOiBydWxlXFxuICAgICAgICB9IGNhdGNoIChlKSB7IHJldHVybiBydWxlIH1cXG4gICAgfSxcXG4gICAgdXJsUGFyc2U6IGZ1bmN0aW9uKHVybCwgaGVhZGVycywgcGFnZU51bSwgZnVuYykge1xcbiAgICAgICAgdXJsID0gdXJsLnNwbGl0KCc7JykubWFwKCh2KSA9PiB2LnJlcGxhY2UoL++8m++8my9nLCAnOycpKVxcbiAgICAgICAgaWYgKGZ1bmMpIGZ1bmModXJsKVxcbiAgICAgICAgdXJsWzBdID0gdXJsWzBdLnJlcGxhY2UoL2Z5cGFnZSg/OkAoLT9cXFxcZCspQCk/KD86XFxcXCooXFxcXGQrKUApPy8sIChfLCBzdGFydCwgc3BhY2UpID0+IHBhcnNlSW50KHN0YXJ0IHx8IDApICsgMSArIChwYWdlTnVtIC0gMSkgKiBwYXJzZUludChzcGFjZSB8fCAxKSlcXG4gICAgICAgIHVybFswXSA9IC9eKC4qPykoPzpcXFxcW2ZpcnN0UGFnZT0oLio/KVxcXFxdKT8kLy5leGVjKHVybFswXSlcXG4gICAgICAgIHVybFswXSA9IHJ1bkNvZGUodXJsWzBdWzJdICYmIHBhZ2VOdW0gPT0gMSA/IHVybFswXVsyXSA6IHVybFswXVsxXSlcXG4gICAgICAgIGxldCBvcHRpb25zID0geyBoZWFkZXJzOiBoZWFkZXJzLCBtZXRob2Q6IHVybFsxXSB9XFxuICAgICAgICAvLyBwb3N05pa55rOV5pe26L2s5o2i5Y+C5pWwXFxuICAgICAgICBpZiAoL15wb3N0JC9pLnRlc3Qob3B0aW9uc1snbWV0aG9kJ10pKSB7XFxuICAgICAgICAgICAgbGV0IFtvcmlVcmwsIGJvZHldID0gdXJsWzBdLnNwbGl0KCc/JylcXG4gICAgICAgICAgICB1cmxbMF0gPSBvcmlVcmwucmVwbGFjZSgv77yf77yfL2csICc/JylcXG4gICAgICAgICAgICBpZiAoYm9keS5zdGFydHNXaXRoKCdKc29uQm9keT0nKSkgYm9keSA9IGJvZHkuc2xpY2UoOSlcXG4gICAgICAgICAgICBvcHRpb25zWydib2R5J10gPSBib2R5XFxuICAgICAgICB9XFxuICAgICAgICBpZiAodXJsWzJdKSBvcHRpb25zLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQvcGxhaW47Y2hhcnN0PScgKyB1cmxbMl1cXG4gICAgICAgIGlmICh1cmxbM10pIHVybFszXS5tYXRjaCgveyguKil9LylbMV0uc3BsaXQoJyYmJykuZm9yRWFjaCgodikgPT4ge1xcbiAgICAgICAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSB2LnNwbGl0KCdAJylcXG4gICAgICAgICAgICBvcHRpb25zLmhlYWRlcnNba2V5XSA9IHJ1bkNvZGUodmFsdWUpXFxuICAgICAgICB9KVxcbiAgICAgICAgLy8g5re75Yqg5YWo5bGAVUFcXG4gICAgICAgIGlmICghb3B0aW9ucy5oZWFkZXJzWydVc2VyLUFnZW50J10pIHtcXG4gICAgICAgICAgICBpZiAoTVlfUlVMRS51YSA9PSAncGMnKVxcbiAgICAgICAgICAgICAgICBvcHRpb25zLmhlYWRlcnNbJ1VzZXItQWdlbnQnXSA9IFBDX1VBXFxuICAgICAgICAgICAgZWxzZSBpZiAoTVlfUlVMRS51YSA9PSAnbW9iaWxlJylcXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydVc2VyLUFnZW50J10gPSBNT0JJTEVfVUFcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB7IE1ZX1VSTDogdXJsWzBdLCBNWV9VUkxfT3B0aW9uczogb3B0aW9ucyB9XFxuICAgIH1cXG59XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8xX3ZlcnRpY2FsX3BpY1wiLFwibmFtZVwiOlwi5Y2V5pCcXCIsXCJwYXRoXCI6XCJzaW5nbGVTZWFyY2hcIixcInJ1bGVcIjpcImpzOlxcbmxldCBteUNvbGxlY3Rpb25fZWwgPSBbXSxcXG4gICAgUlVMRSA9IE1ZX1BBUkFNUy5SVUxFLFxcbiAgICBrZXl3b3JkID0gZ2V0UGFyYW0oJ2tleXdvcmQnKSxcXG4gICAgcGFnZU51bSA9IHBhcnNlSW50KGdldFBhcmFtKCdwYWdlJykpXFxuXFxuLy8g5aSE55CGTVlfVVJM5ZKMTVlfUlVMRVxcbk1ZX1JVTEUudWEgPSBSVUxFLnVhXFxuTVlfUlVMRS50aXRsZSA9IFJVTEUudGl0bGVcXG5NWV9SVUxFLmNvbF90eXBlID0gUlVMRS5jb2xfdHlwZVxcbk1ZX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gWycnLCAnKiddLmluY2x1ZGVzKFJVTEUuc2RldGFpbF9maW5kX3J1bGUpID8gUlVMRS5kZXRhaWxfY29sX3R5cGUgOiBSVUxFLnNkZXRhaWxfY29sX3R5cGVcXG5NWV9SVUxFLmZpbmRfcnVsZSA9IFJVTEUuc2VhcmNoRmluZFxcbk1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IFsnJywgJyonXS5pbmNsdWRlcyhSVUxFLnNkZXRhaWxfZmluZF9ydWxlKSA/IFJVTEUuZGV0YWlsX2ZpbmRfcnVsZSA6IFJVTEUuc2RldGFpbF9maW5kX3J1bGVcXG5NWV9SVUxFLnByZVJ1bGUgPSBSVUxFLnByZVJ1bGVcXG5NWV9SVUxFLnBhZ2VMaXN0ID0gSlNPTi5wYXJzZShSVUxFLnBhZ2VzIHx8ICdbXScpXFxuTVlfUlVMRS5wYWdlcyA9IEpTT04uc3RyaW5naWZ5KE1ZX1JVTEUucGFnZUxpc3QpXFxuTVlfUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZSA9IFJVTEUubGFzdF9jaGFwdGVyX3J1bGVcXG5NWV9SVUxFLnBhcmFtcyA9IHt9XFxuXFxuY29uc3QgeyBydW5Db2RlLCB1cmxQYXJzZSB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvdXRpbGl0eT9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSlcXG52YXIgeyBNWV9VUkwsIE1ZX1VSTF9PcHRpb25zIH0gPSB1cmxQYXJzZShSVUxFLnNlYXJjaF91cmwsIHt9LCBwYWdlTnVtLCAodXJsKSA9PiB7XFxuICAgIHVybFswXSA9IHVybFswXS5yZXBsYWNlKHVybFswXS5pbmNsdWRlcygnJSUnKSA/IC8lJS9nIDogL1xcXFwqXFxcXCovZywgZW5jb2RlU3RyKGtleXdvcmQsIHVybFsyXSkpXFxufSksXFxuICAgIGluZGV4SHRtbCA9IGZldGNoKE1ZX1VSTCwgTVlfVVJMX09wdGlvbnMpXFxuTVlfUlVMRS51cmwgPSBNWV9VUkxcXG5NWV9SVUxFLnVybEhlYWRlcnMgPSBNWV9VUkxfT3B0aW9ucy5oZWFkZXJzXFxuLy8g5q2j5paH6Kej5p6QXFxuaWYgKHBhZ2VOdW0gPT0gMSkgc2V0UGFnZVRpdGxlKCfigJwnICsga2V5d29yZCArICfigJ3nmoTmkJzntKLnu5PmnpwnKVxcbmlmIChNWV9SVUxFLmZpbmRfcnVsZS5zdGFydHNXaXRoKCdqczonKSkge1xcbiAgICBmdW5jdGlvbiBnZXRVcmwoKSB7XFxuICAgICAgICByZXR1cm4gTVlfVVJMXFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gZ2V0UmVzQ29kZSgpIHtcXG4gICAgICAgIHJldHVybiBpbmRleEh0bWxcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiBzZXRSZXN1bHQoZWwsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpIHtcXG4gICAgICAgIHBhcmFtMSA9IENBTExCQUNLX0tFWVxcbiAgICAgICAgcGFyYW0yID0gTVlfUlVMRVxcbiAgICAgICAgcGFyYW0zID0gTVlfVFlQRVxcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWwuZGF0YSkpIGVsID0gZWwuZGF0YVxcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobXlDb2xsZWN0aW9uX2VsLCBlbC5tYXAoKHYpID0+IHtcXG4gICAgICAgICAgICBsZXQgTVlfX1JVTEUgPSBPYmplY3QuYXNzaWduKHt9LCBNWV9SVUxFKSxcXG4gICAgICAgICAgICAgICAgc3ViVGl0bGUgPSB2LnRpdGxlXFxuICAgICAgICAgICAgdi50aXRsZSArPSAn4oCc4oCc4oCd4oCdPGJyPicgKyAoUlVMRS50aXRsZS5mb250Y29sb3IoJyMxMmI2NjgnKSArICcg4paqICcgKyAodi5kZXNjIHx8ICcnKS5mb250Y29sb3IoJyM2NjY2NjYnKSkuc21hbGwoKVxcbiAgICAgICAgICAgIHYuZGVzYyA9IHYuY29udGVudCB8fCAnJ1xcbiAgICAgICAgICAgIGlmKCF2LmltZykgdi5jb2xfdHlwZSA9ICd0ZXh0XzEnXFxuICAgICAgICAgICAgZGVsZXRlIHYuY29udGVudFxcblxcbiAgICAgICAgICAgIGlmICghdi51cmwpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLmluY2x1ZGVzKCdAcnVsZT0nKSkge1xcbiAgICAgICAgICAgICAgICBsZXQgW18sIHVybCwgcnVsZV0gPSB2LnVybC5tYXRjaCgvXihbXFxcXHNcXFxcU10qPylAcnVsZT0oW1xcXFxzXFxcXFNdKikkLylcXG4gICAgICAgICAgICAgICAgdi51cmwgPSB1cmxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHJ1bGVcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gTVlfUlVMRS5jb2xfdHlwZVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly9wYWdlLycpKSB7XFxuICAgICAgICAgICAgICAgIGlmICh2LnVybC5pbmNsdWRlcygncnVsZT0nKSB8fCAodi5leHRyYSB8fCB7fSkucnVsZSlcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICAgICAgICAgIGxldCBbXywgcGF0aCwgcGFyYW1zXSA9IHYudXJsLnNwbGl0KCcjJylbMF0ubWF0Y2goL15oaWtlcjpcXFxcL1xcXFwvcGFnZVxcXFwvKC4rPykoPzpcXFxcPyguKikpPyQvKSxcXG4gICAgICAgICAgICAgICAgICAgIHN1YlBhZ2UgPSBNWV9SVUxFLnBhZ2VMaXN0LmZpbmQoKHYpID0+IHYucGF0aCA9PSBwYXRoKSxcXG4gICAgICAgICAgICAgICAgICAgIHN1YlVybCA9IChwYXJhbXMgfHwgJycpLnNwbGl0KCcmJykuZmluZCgodikgPT4gdi5zdGFydHNXaXRoKCd1cmw9JykpXFxuICAgICAgICAgICAgICAgIHYudXJsID0gc3ViVXJsID8gc3ViVXJsLnNsaWNlKDQpLnJlcGxhY2UoL++8n++8ny9nLCAnPycpLnJlcGxhY2UoL++8hu+8hi9nLCAnJicpIDogKHYuZXh0cmEgfHwge30pLnVybCB8fCAnaGlrZXI6Ly9lbXB0eT8nICsgKHBhcmFtcyB8fCAnJylcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHN1YlBhZ2UucnVsZVxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBzdWJQYWdlLmNvbF90eXBlXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLnBhcmFtcyA9IHYuZXh0cmEgfHwge31cXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLmluY2x1ZGVzKCdAbGF6eVJ1bGU9JykpIHtcXG4gICAgICAgICAgICAgICAgdi51cmwgPSB2LnVybC5yZXBsYWNlKCcuanM6JywgJy5qczpcXFxcbmlmKE1ZX1JVTEUpT2JqZWN0LmFzc2lnbihNWV9SVUxFLCcgKyAkLnN0cmluZ2lmeSh7IHBhZ2VzOiBNWV9SVUxFLnBhZ2VzLCBwYWdlTGlzdDogTVlfUlVMRS5wYWdlTGlzdCwgZmluZF9ydWxlOiAnJywgcGFyYW1zOiAnJyB9KSArICcpO01ZX1VSTD1cXFwiJyArIE1ZX1VSTCArICdcXFwiOycpXFxuICAgICAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICAgICAgfSBlbHNlIGlmICghTVlfUlVMRS5kZXRhaWxfZmluZF9ydWxlIHx8IHYudXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vJykpIHsgcmV0dXJuIHYgfVxcbiAgICAgICAgICAgIHYuZXh0cmEgPSB7IHVybDogdi51cmwsIFJVTEU6IE1ZX19SVUxFLCBwYWdlVGl0bGU6IHN1YlRpdGxlIH1cXG4gICAgICAgICAgICB2LnVybCA9ICdoaWtlcjovL3BhZ2UvZGV0YWlsTG9hZD9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKVxcbiAgICAgICAgICAgIGlmICh2LmV4dHJhLlJVTEUudXJsLmluY2x1ZGVzKCcjaW1tZXJzaXZlVGhlbWUjJykpIHYudXJsICs9ICcmI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgfSkpXFxuICAgICAgICBtZXRob2Rfc2V0UmVzdWx0Lmludm9rZShqYXZhQ29udGV4dCwgbXlDb2xsZWN0aW9uX2VsLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKVxcbiAgICB9XFxuICAgIHNldEhvbWVSZXN1bHQgPSBzZXRSZXN1bHRcXG4gICAgc2V0U2VhcmNoUmVzdWx0ID0gc2V0UmVzdWx0XFxuXFxuICAgIGV2YWwoTVlfUlVMRS5maW5kX3J1bGUuc2xpY2UoMykpXFxufSBlbHNlIHtcXG4gICAgbGV0IGZpbmRSdWxlID0gTVlfUlVMRS5maW5kX3J1bGUuc3BsaXQoJzsnKVxcbiAgICBwYXJzZURvbUZvckFycmF5KGluZGV4SHRtbCwgZmluZFJ1bGUuc2hpZnQoKSkuZm9yRWFjaCgoZGF0YSkgPT4ge1xcbiAgICAgICAgbGV0IFt0aXRsZSwgdXJsLCBkZXNjLCBjb250ZW50LCBpbWddID0gZmluZFJ1bGUubWFwKCh2LCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAodiA9PSAnKicpIHJldHVybiAnJ1xcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB2ID0gKGkgPT0gMSB8fCBpID09IDQpID9cXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvbShkYXRhLCB2KSA6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VEb21Gb3JIdG1sKGRhdGEsIHYpXFxuICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSAxKSB2ID0gcnVuQ29kZSh2KVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gJycgfVxcbiAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIHJlcyA9IHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlICsgJ+KAnOKAnOKAneKAnTxicj4nICsgKFJVTEUudGl0bGUuZm9udGNvbG9yKCcjMTJiNjY4JykgKyAnIOKWqiAnICsgZGVzYy5mb250Y29sb3IoJyM2NjY2NjYnKSkuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICAgICAgICAgIGRlc2M6IGNvbnRlbnQsXFxuICAgICAgICAgICAgICAgIGltZzogaW1nXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgaWYoIXJlcy5pbWcpIHJlcy5jb2xfdHlwZSA9ICd0ZXh0XzEnXFxuICAgICAgICBpZiAocmVzLnVybCkge1xcbiAgICAgICAgICAgIGlmIChyZXMudXJsLmluY2x1ZGVzKCdAbGF6eVJ1bGU9JykpIHtcXG4gICAgICAgICAgICAgICAgcmVzLnVybCA9IHJlcy51cmwucmVwbGFjZSgnLmpzOicsICcuanM6XFxcXG5pZihNWV9SVUxFKU9iamVjdC5hc3NpZ24oTVlfUlVMRSwnICsgJC5zdHJpbmdpZnkoeyBwYWdlczogTVlfUlVMRS5wYWdlcywgcGFnZUxpc3Q6IE1ZX1JVTEUucGFnZUxpc3QsIGZpbmRfcnVsZTogJycsIHBhcmFtczogJycgfSkgKyAnKTtNWV9VUkw9XFxcIicgKyBNWV9VUkwgKyAnXFxcIjsnKVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoTVlfUlVMRS5kZXRhaWxfZmluZF9ydWxlKSB7XFxuICAgICAgICAgICAgICAgIHJlcy5leHRyYSA9IHsgdXJsOiB1cmwsIFJVTEU6IE1ZX1JVTEUsIHBhZ2VUaXRsZTogdGl0bGUgfVxcbiAgICAgICAgICAgICAgICByZXMudXJsID0gJ2hpa2VyOi8vcGFnZS9kZXRhaWxMb2FkP3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpXFxuICAgICAgICAgICAgICAgIGlmIChyZXMuZXh0cmEuUlVMRS51cmwuaW5jbHVkZXMoJyNpbW1lcnNpdmVUaGVtZSMnKSkgcmVzLnVybCArPSAnJiNpbW1lcnNpdmVUaGVtZSMnXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgbXlDb2xsZWN0aW9uX2VsLnB1c2gocmVzKVxcbiAgICB9KVxcbiAgICBzZXRSZXN1bHQobXlDb2xsZWN0aW9uX2VsKVxcbn1cXG5cIn0se1wiY29sX3R5cGVcIjpcImljb25fMl9yb3VuZFwiLFwibmFtZVwiOlwi6K6+572uXCIsXCJwYXRoXCI6XCJDb25maWdcIixcInJ1bGVcIjpcImpzOlxcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgJ2NsZWFyVmFyKFxcXCJteUNvbGxlY3Rpb24tc29ydEZsYWdcXFwiKTtyZWZyZXNoUGFnZSgpJylcXG5zZXRQYWdlVGl0bGUoJ+KamSDovbvlkIjpm4borr7nva4g4pqZJylcXG5sZXQgZWwgPSBbe1xcbiAgICAgICAgdGl0bGU6ICfmuIXpmaTnvJPlrZgs56uL5Y2z5pu05pawIDxzbWFsbD4g77yI5Z+65LqO6L+c56iL5LuT5bqTLOS4jeimgemikee5geeCueWHu++8iScsXFxuICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgZGVsZXRlRmlsZSgndXBkYXRldGltZScpXFxuICAgICAgICAgICAgYmFjayh0cnVlKVxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lmm7TmlrAnXFxuICAgICAgICB9KSxcXG4gICAgICAgIGltZzogJ2hpa2VyOi8vaW1hZ2VzL2ljb24xJyxcXG4gICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJ1xcbiAgICB9XSxcXG4gICAgc2VhcmNoVGhkID0gcGFyc2VJbnQocmVhZEZpbGUoJ3NlYXJjaFRoZCcpIHx8ICc1JyksXFxuICAgIG5ld1dpbmRvdyA9IHJlYWRGaWxlKCduZXdXaW5kb3cnKSxcXG4gICAgZWRpdE1vZGUgPSBnZXRWYXIoJ215Q29sbGVjdGlvbi1lZGl0TW9kZScsICflkK/nlKgv56aB55SoJylcXG5cXG5lbC5wdXNoKHtcXG4gICAgdGl0bGU6ICfwn5SNIOaQnOe0ouaooeW8jzogJyArIChzZWFyY2hUaGQgPT0gMCA/ICfliJcnIDogJ+iBmicgKyBzZWFyY2hUaGQpLFxcbiAgICB1cmw6ICQoWyfliJfooajmkJzntKInLCAn6IGa5ZCI5pCc57SiJ10sIDEpLnNlbGVjdCgoc2VhcmNoVGhkKSA9PiB7XFxuICAgICAgICBpZiAoaW5wdXQgPT0gJ+WIl+ihqOaQnOe0oicpIHtcXG4gICAgICAgICAgICBzYXZlRmlsZSgnc2VhcmNoVGhkJywgJzAnKVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaWYgKHNlYXJjaFRoZCA9PSAwKSBzZWFyY2hUaGQgPSA1XFxuICAgICAgICAgICAgcmV0dXJuICQoc2VhcmNoVGhkLCAn6L6T5YWl5pCc57Si57q/56iL77yM5pyA5aW95LiN6KaB6LaF6L+HMTYnKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgIHNhdmVGaWxlKCdzZWFyY2hUaGQnLCBpbnB1dClcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgIH0sIHNlYXJjaFRoZCksXFxuICAgIGNvbF90eXBlOiAndGV4dF8yJ1xcbn0sIHtcXG4gICAgdGl0bGU6ICfwn5alIOeLrOeri+mmlumhtTogJyArIChuZXdXaW5kb3cgPyAn5pivJyA6ICflkKYnKSxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChuZXdXaW5kb3cpID0+IHtcXG4gICAgICAgIHNhdmVGaWxlKCduZXdXaW5kb3cnLCBuZXdXaW5kb3cgPyAnJyA6ICcxJylcXG4gICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgfSwgbmV3V2luZG93KSxcXG4gICAgY29sX3R5cGU6ICd0ZXh0XzInXFxufSlcXG5cXG5lbC5wdXNoKHsgY29sX3R5cGU6ICdsaW5lJyB9LCB7IGNvbF90eXBlOiAnYmlnX2JsYW5rX2Jsb2NrJyB9KTtcXG5bJ+WQr+eUqC/npoHnlKgnLCAn6YeN5paw5o6S5bqPJywgJ+abtOaUueWbvuaghycsICflr7zlhaXmtbfpmJQnXS5mb3JFYWNoKCh2KSA9PiB7XFxuICAgIGVsLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHYgPT0gZWRpdE1vZGUgPyAn4oCc4oCc4oCd4oCdJyArIHYuYm9sZCgpLmZvbnRjb2xvcignIzEyYjY2OCcpIDogdixcXG4gICAgICAgIHVybDogdiA9PSBlZGl0TW9kZSA/ICdoaWtlcjovL2VtcHR5JyA6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHYpID0+IHtcXG4gICAgICAgICAgICBwdXRWYXIoJ215Q29sbGVjdGlvbi1lZGl0TW9kZScsIHYpXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgfSwgdiksXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgIH0pXFxufSlcXG5lbC5wdXNoKHtcXG4gICAgdGl0bGU6ICfmgaLlpI3lh7rljoLmlbDmja4nLFxcbiAgICB1cmw6ICQoJ+ehruWumuimgeaBouWkjeWHuuWOgu+8jOa4healmuiHquWumuS5ieaVsOaNruWQl++8nycpLmNvbmZpcm0oKCkgPT4ge1xcbiAgICAgICAgZGVsZXRlRmlsZSgnY3VzdG9tRGF0YScpXFxuICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LmgaLlpI3lh7rljoLmlbDmja4nXFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxufSlcXG5cXG5jb25zdCB7IGRhdGFMb2FkIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS91dGlsaXR5P3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpKVxcbmxldCBkYXRhID0gZGF0YUxvYWQodHJ1ZSlcXG5KU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJykuZm9yRWFjaCgodiwgaSkgPT4ge1xcbiAgICBsZXQgZCA9IHsgdGl0bGU6IHYudGl0bGUsIGltZzogZGF0YVtpXS5pY29uIH1cXG4gICAgc3dpdGNoIChlZGl0TW9kZSkge1xcbiAgICAgICAgY2FzZSAn5ZCv55SoL+emgeeUqCc6XFxuICAgICAgICAgICAgZC50aXRsZSA9ICh2LnZpc2libGUgPyAn8J+foiAgJyA6ICfwn5S0ICAnKSArIGQudGl0bGVcXG4gICAgICAgICAgICBkLnVybCA9ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHJ1bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHJ1bGVzID0gSlNPTi5wYXJzZShyZWFkRmlsZSgnY3VzdG9tRGF0YScpIHx8ICdbXScpLFxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBydWxlcy5maW5kSW5kZXgoKHYpID0+IHYudGl0bGUgPT0gcnVsZS50aXRsZSlcXG4gICAgICAgICAgICAgICAgcnVsZXNbaW5kZXhdLnZpc2libGUgPSAhcnVsZXNbaW5kZXhdLnZpc2libGVcXG4gICAgICAgICAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBKU09OLnN0cmluZ2lmeShydWxlcykpXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfSwgdilcXG4gICAgICAgICAgICBicmVha1xcbiAgICAgICAgY2FzZSAn6YeN5paw5o6S5bqPJzpcXG4gICAgICAgICAgICBsZXQgc29ydEZsYWcgPSBwYXJzZUludChnZXRWYXIoJ215Q29sbGVjdGlvbi1zb3J0RmxhZycsICctMScpKVxcbiAgICAgICAgICAgIGQudGl0bGUgPSAoc29ydEZsYWcgPT0gaSA/ICfwn5SEICAnIDogJycpICsgZC50aXRsZVxcbiAgICAgICAgICAgIGlmIChzb3J0RmxhZyA9PSAtMSlcXG4gICAgICAgICAgICAgICAgZC51cmwgPSAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ215Q29sbGVjdGlvbi1zb3J0RmxhZycsIGkudG9TdHJpbmcoKSlcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+mAieaLqeimgeenu+WKqOWIsOeahOS9jee9ridcXG4gICAgICAgICAgICAgICAgfSwgaSlcXG4gICAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgICAgIGQudXJsID0gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgob2xkSW5kZXgsIG5ld0luZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJylcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzLnNwbGljZShuZXdJbmRleCwgMCwgcnVsZXMuc3BsaWNlKG9sZEluZGV4LCAxKVswXSlcXG4gICAgICAgICAgICAgICAgICAgIHNhdmVGaWxlKCdjdXN0b21EYXRhJywgSlNPTi5zdHJpbmdpZnkocnVsZXMpKVxcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdteUNvbGxlY3Rpb24tc29ydEZsYWcnLCAnLTEnKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgIH0sIHNvcnRGbGFnLCBpKVxcbiAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICBjYXNlICfmm7TmlLnlm77moIcnOlxcbiAgICAgICAgICAgIGQudXJsID0gJCh2Lmljb24gfHwgJycsICfovpPlhaXmlrDlm77moIflnLDlnYDmiJbpopzoibLku6PnoIHvvJonKS5pbnB1dCgocnVsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJyksXFxuICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHJ1bGVzLmZpbmRJbmRleCgodikgPT4gdi50aXRsZSA9PSBydWxlLnRpdGxlKVxcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQpXFxuICAgICAgICAgICAgICAgICAgICBydWxlc1tpbmRleF0uaWNvbiA9IGlucHV0XFxuICAgICAgICAgICAgICAgIGVsc2VcXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBydWxlc1tpbmRleF0uaWNvblxcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSgnY3VzdG9tRGF0YScsIEpTT04uc3RyaW5naWZ5KHJ1bGVzKSlcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9LCB2KVxcbiAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICBjYXNlICflr7zlhaXmtbfpmJQnOlxcbiAgICAgICAgICAgIGQudXJsID0gJ3J1bGU6Ly8nICsgYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KGRhdGFbaV0pKVxcbiAgICAgICAgICAgIGJyZWFrXFxuICAgIH1cXG4gICAgZWwucHVzaChkKVxcbn0pXFxuc2V0UmVzdWx0KGVsKVxcblwifV0sXCJwYXJhbXNcIjpcIntcXFwiUlVMRVxcXCI6e1xcXCJhcmVhX3VybFxcXCI6XFxcIlxcXCIsXFxcImNsYXNzX3VybFxcXCI6XFxcIlxcXCIsXFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcImRldGFpbF9jb2xfdHlwZVxcXCI6XFxcInRleHRfM1xcXCIsXFxcImRldGFpbF9maW5kX3J1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG52YXIgaHRtbCA9IGdldFJlc0NvZGUoKTtcXFxcbnZhciBhcnRzID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnYm9keSYmLmZlZC1kcm9wLWJ0bnMnKTtcXFxcbnZhciB0YWJzID0gW107XFxcXG5mb3IgKHZhciBpIGluIGFydHMpIHtcXFxcblxcXFx0dGFicy5wdXNoKHBhcnNlRG9tRm9ySHRtbChhcnRzW2ldLCAnYSYmVGV4dCcpKVxcXFxufVxcXFxudmFyIGNvbnRzID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnYm9keSYmLmZlZC1wbGF5LWl0ZW0nKTtcXFxcbnZhciBsaXN0cyA9IFtdO1xcXFxuZm9yICh2YXIgaSBpbiBjb250cykge1xcXFxuXFxcXHRsaXN0cy5wdXNoKHBhcnNlRG9tRm9yQXJyYXkoY29udHNbaV0sICdib2R5JiYuZmVkLWJ0bnMtaW5mbycpKVxcXFxufVxcXFxuZC5wdXNoKHtcXFxcblxcXFx0dGl0bGU6IHBhcnNlRG9tRm9ySHRtbChodG1sLCAnZGQmJmxpLDMmJlRleHQnKSArICdcXFxcXFxcXG4nICsgcGFyc2VEb21Gb3JIdG1sKGh0bWwsICdkZCYmbGksNCYmVGV4dCcpLnN1YnN0cmluZygwLCAxNSkgKyAnXFxcXFxcXFxuJyArIHBhcnNlRG9tRm9ySHRtbChodG1sLCAnZGQmJmxpLDUmJlRleHQnKS5zdWJzdHJpbmcoMCwgMTUpLFxcXFxuXFxcXHRkZXNjOiBwYXJzZURvbUZvckh0bWwoaHRtbCwgJ2RkJiZsaSw2JiZUZXh0Jykuc3Vic3RyaW5nKDAsIDI1KSxcXFxcblxcXFx0cGljX3VybDogcGFyc2VEb20oaHRtbCwgJy5mZWQtbGF6eSYmZGF0YS1vcmlnaW5hbCcpLFxcXFxuXFxcXHR1cmw6IE1ZX1VSTCxcXFxcblxcXFx0Y29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyJ1xcXFxufSk7XFxcXG5mdW5jdGlvbiBmZnRxKHVybCl7XFxcXG4gICAgIHJldHVybiAkKHVybCkubGF6eVJ1bGUoKCk9PntcXFxcblxcXFx0ICB2YXIgSCA9IHJlcXVlc3QoaW5wdXQpO1xcXFxuXFxcXHQgIHZhciBVID0gYmFzZTY0RGVjb2RlKHBhcnNlRG9tRm9ySHRtbChILCAnaWZyYW1lJiZkYXRhLXBsYXknKS5zbGljZSgzKSk7XFxcXG5cXFxcdCAgLy92YXIgSiA9IHBhcnNlRG9tKEgsICdpZnJhbWUmJmRhdGEtcGFycycpLnJlcGxhY2UoJ3BhbmR1YW4yJywna2pqeDAzLzEwOTgnKTtcXFxcbiAgIHZhciBKID0gJ2h0dHBzOi8vcWthbjguY29tL2tqangwMy8xMDk4LnBocD91cmw9JztcXFxcblxcXFx0ICBpZiAoVS5pbmRleE9mKCdodHRwJykgPT0gLTEpIHtcXFxcblxcXFx0XFxcXHR2YXIgcGxheSA9IHBhcnNlRG9tRm9ySHRtbChyZXF1ZXN0KEogKyBVLHtoZWFkZXJzOiB7J1JlZmVyZXInOiBpbnB1dH19KSwgJ2JvZHkmJnNjcmlwdCwtMSYmSHRtbCcpLnNwbGl0KCc7JylbMF0ucmVwbGFjZSgvdmFyLio/PS8sJ3ZhciB1cmwgPScpO1xcXFxuICAgIGV2YWwocGxheSk7XFxcXG5cXFxcdFxcXFx0aWYodXJsLmluZGV4T2YoJ2lkPScpIT0tMSl7XFxcXG5cXFxcdFxcXFx0ICB1cmwgPSBKU09OLnBhcnNlKHJlcXVlc3QodXJsLHtyZWRpcmVjdDpmYWxzZSx3aXRoSGVhZGVyczp0cnVlfSkpLmhlYWRlcnMubG9jYXRpb25bMF1cXFxcblxcXFx0XFxcXHR9XFxcXG5cXFxcdFxcXFx0cmV0dXJuIHVybFxcXFxuXFxcXHQgIH0gZWxzZSB7XFxcXG5cXFxcdFxcXFx0cmV0dXJuIFUgKyAnI2lzVmlkZW89dHJ1ZSMnXFxcXG59O1xcXFxuXFxcXHR9KVxcXFxufVxcXFxuXFxcXG5cXFxcbnZhciBDb2xvciA9IFxcXFxcXFwiI2YxM2I2NmFcXFxcXFxcIjtcXFxcbnZhciBDb2xvcjEgPSBcXFxcXFxcIiMwOThBQzFcXFxcXFxcIjtcXFxcbmZ1bmN0aW9uIGdldEhlYWQodGl0bGUpIHtcXFxcbiAgICByZXR1cm4gJ+KAmOKAmOKAmeKAmTxzdHJvbmc+PGZvbnQgY29sb3I9XFxcXFxcXCInICsgQ29sb3IgKyAnXFxcXFxcXCI+JyArIHRpdGxlICsgJzwvZnJvbnQ+PC9zdHJvbmc+JztcXFxcbn1cXFxcbmxldCBsaW5lX21vZGVsID0gODtcXFxcbmxldCBsaW5lX3R5cGVfbW9kZWwgPSAnYmxhbmtfYmxvY2snO1xcXFxuXFxcXG5cXFxcblxcXFxudmFyIGRlc2MgPSBwYXJzZURvbUZvckh0bWwoaHRtbCwgJy5mZWQtcGFydC1lc2FuJiZUZXh0JykucmVwbGFjZSgn5pS26LW3JywnJyk7XFxcXG5kLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxzbWFsbD48Zm9udCBjb2xvcj1cXFxcXFxcIiNmZjE0OGU4ZVxcXFxcXFwiPiDnroDku4vvvJonK2Rlc2Muc3Vic3RyKDAsIDQ1KS5yZXBsYWNlKCfor6bmg4XvvJonLCcnKSArICcuLi48L2ZvbnQ+PHNtYWxsPjxmb250IGNvbG9yPVxcXFxcXFwicmVkXFxcXFxcXCI+5p+l55yL6K+m5oOFPC9mb250Pjwvc21hbGw+PC9zbWFsbD4nLFxcXFxuICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHkjJyArIGRlc2MrIGBAcnVsZT1qczp2YXIgcmVzID0ge307IHZhciBkID0gW107ZC5wdXNoKHt0aXRsZTpNWV9VUkwuc3BsaXQoJ2hpa2VyOi8vZW1wdHkjJylbMV0sY29sX3R5cGU6J2xvbmdfdGV4dCd9KTtyZXMuZGF0YSA9IGQ7IHNldEhvbWVSZXN1bHQocmVzKTtgLFxcXFxuICAgICAgIGNvbF90eXBlOiAndGV4dF8xJ1xcXFxuICAgfSk7XFxcXG5mb3IgKGxldCBpID0gMDsgaSA8IGxpbmVfbW9kZWw7IGkrKykge1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIGNvbF90eXBlOiBsaW5lX3R5cGVfbW9kZWxcXFxcbiAgICB9KVxcXFxufVxcXFxuZnVuY3Rpb24gc2V0VGFicyh0YWJzLCB2YXJpKSB7XFxcXG4gICAgZm9yICh2YXIgaSBpbiB0YWJzKSB7XFxcXG4gICAgICAgIHZhciB1cmwgPSBcXFxcXFxcIiNub0xvYWRpbmcjQGxhenlSdWxlPS5qczpwdXRWYXIoJ1xcXFxcXFwiICsgdmFyaSArIFxcXFxcXFwiJywgJ1xcXFxcXFwiICsgaSArIFxcXFxcXFwiJyk7cmVmcmVzaFBhZ2UoZmFsc2UpOyd0b2FzdDovL+WIh+aNouaIkOWKn++8gSc7JyNub0hpc3RvcnkjaGlrZXI6Ly9lbXB0eSdcXFxcXFxcIjtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBnZXRWYXIodmFyaSwgJzAnKSA9PSBpID8gZ2V0SGVhZCh0YWJzW2ldKSA6IHRhYnNbaV0sXFxcXG4gICAgICAgICAgICB1cmw6IHVybCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcXFxuICAgIH0pXFxcXG59XFxcXG5mdW5jdGlvbiBzZXRMaXN0cyhsaXN0cywgaW5kZXgpIHtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxcXG4gICAgfSlcXFxcbn1cXFxcbmlmIChnZXRWYXIoJ3Noc29ydCcpID09ICcxJykge1xcXFxuICAgIHZhciBzeCA9ICfigJjigJjigJnigJk8Zm9udCBjb2xvcj1cXFxcXFxcIiMwYWEzNDRcXFxcXFxcIj7mjpLluo88L2ZvbnQ+PC9zbWFsbD4nICsgJzxzbWFsbD48Zm9udCBjb2xvcj1cXFxcXFxcIiNmZjRjMDBcXFxcXFxcIj7ihpE8L2ZvbnQ+PC9zbWFsbD4nICsgJzxzbWFsbD48Zm9udCBjb2xvcj1cXFxcXFxcIiMwYWEzNDRcXFxcXFxcIj7ihpM8L2ZvbnQ+PC9zbWFsbD4nO1xcXFxufSBlbHNlIHtcXFxcbiAgICB2YXIgc3ggPSAn4oCY4oCY4oCZ4oCZPGZvbnQgY29sb3I9XFxcXFxcXCIjMGFhMzQ0XFxcXFxcXCI+5o6S5bqPPC9mb250Pjwvc21hbGw+JyArICc8c21hbGw+PGZvbnQgY29sb3I9XFxcXFxcXCIjZmY0YzAwXFxcXFxcXCI+4oaTPC9mb250Pjwvc21hbGw+JyArICc8c21hbGw+PGZvbnQgY29sb3I9XFxcXFxcXCIjMGFhMzQ0XFxcXFxcXCI+4oaRPC9mb250Pjwvc21hbGw+JztcXFxcbn1cXFxcbmZ1bmN0aW9uIHNldExpc3RzKGxpc3RzLCBpbmRleCkge1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjonICsgQ29sb3IxICsgJ1xcXFxcXFwiPjxzbWFsbD7pgInpm4bliJfooag8L3NtYWxsPicgKyAnXFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0PHNwYW4gc3R5bGU9XFxcXFxcXCJmbG9hdDpyaWdodFxcXFxcXFwiPicgKyAnPHNtYWxsPicgKyBzeCArICc8L3NtYWxsPicsXFxcXG4gICAgICAgIHVybDogYCNub0xvYWRpbmcjQGxhenlSdWxlPS5qczpsZXQgY29uZiA9IGdldFZhcignc2hzb3J0Jyk7aWYoY29uZj09JzEnKXtwdXRWYXIoe2tleTonc2hzb3J0JywgdmFsdWU6JzAnfSk7fWVsc2V7cHV0VmFyKHtrZXk6J3Noc29ydCcsIHZhbHVlOicxJ30pfTtyZWZyZXNoUGFnZSgpOyd0b2FzdDovL+WIh+aNouaOkuW6j+aIkOWKnyc7JyNub0hpc3RvcnkjaGlrZXI6Ly9lbXB0eSdgLFxcXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXG4gICAgfSlcXFxcbiAgICB2YXIgbGlzdCA9IGxpc3RzW2luZGV4XTtcXFxcblxcXFxuICAgIGlmIChnZXRWYXIoJ3Noc29ydCcpID09ICcxJykge1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IGxpc3QubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHtcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGFyc2VEb21Gb3JIdG1sKGxpc3Rbal0sICdhJiZUZXh0JykucmVwbGFjZSgv56ysfOmbhnzor51854mIfOacny9nLCAnJyksXFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFx0dXJsOiBmZnRxKHBhcnNlRG9tKGxpc3Rbal0sICdhJiZocmVmJykpLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogbGlzdC5sZW5ndGggPiA0ID8gJ3RleHRfNScgOiAndGV4dF8yJ1xcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn5rKh5pyJ6YCJ6ZuG5ZOf77yM5LiN5L+h54K55Zu+54mH5Y6755yL55yL8J+RgCcsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsaXN0Lmxlbmd0aDsgaisrKSB7XFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBhcnNlRG9tRm9ySHRtbChsaXN0W2pdLCAnYSYmVGV4dCcpLnJlcGxhY2UoL+esrHzpm4Z86K+dfOeJiHzmnJ8vZywgJycpLFxcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcdHVybDogZmZ0cShwYXJzZURvbShsaXN0W2pdLCAnYSYmaHJlZicpKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IGxpc3QubGVuZ3RoID4gNCA/ICd0ZXh0XzUnIDogJ3RleHRfMidcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+ayoeaciemAiembhuWTn++8jOS4jeS/oeeCueWbvueJh+WOu+eci+eci/CfkYAnLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICB9XFxcXG5cXFxcbiAgICB9XFxcXG59XFxcXG5zZXRUYWJzKHRhYnMsIE1ZX1VSTCk7XFxcXG5zZXRMaXN0cyhsaXN0cywgZ2V0VmFyKE1ZX1VSTCwgJzAnKSk7XFxcXG5cXFxcbmQucHVzaCh7dGl0bGU6ICc8YnI+JywgY29sX3R5cGU6ICdyaWNoX3RleHQnfSk7XFxcXG5cXFxcbnNldFJlc3VsdChkKTtcXFwiLFxcXCJmaW5kX3J1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG52YXIgbGlzdCA9IHBhcnNlRG9tRm9yQXJyYXkoZ2V0UmVzQ29kZSgpLCAnYm9keSYmZGwnKTtcXFxcbmZvciAodmFyIGogaW4gbGlzdCkge1xcXFxuICBkLnB1c2goe1xcXFxuICAgICAgIHRpdGxlOiBwYXJzZURvbUZvckh0bWwobGlzdFtqXSwgJ2gxJiZUZXh0JyksXFxcXG4gICAgICAgZGVzYzogcGFyc2VEb21Gb3JIdG1sKGxpc3Rbal0sICcuZmVkLWxpc3QtcmVtYXJrcyYmVGV4dHQnKSxcXFxcblxcXFx0ICAgIGNvbnRlbnQ6IHBhcnNlRG9tRm9ySHRtbChsaXN0W2pdLCAnLmZlZC1wYXJ0LWVzYW4tLXNwYW4mJlRleHQnKSxcXFxcbiAgICAgICBpbWc6IHBhcnNlRG9tKGxpc3Rbal0sICdhJiZkYXRhLW9yaWdpbmFsJyksXFxcXG4gICAgICAgdXJsOiBwYXJzZURvbShsaXN0W2pdLCAnYSYmaHJlZicpKycjaW1tZXJzaXZlVGhlbWUjJ1xcXFxuICB9KTtcXFxcbn1cXFxcbnNldFJlc3VsdChkKVxcXCIsXFxcImZpcnN0SGVhZGVyXFxcIjpcXFwiY2xhc3NcXFwiLFxcXCJncm91cFxcXCI6XFxcIuKRoOi9u+WQiOmbhlxcXCIsXFxcImxhc3RfY2hhcHRlcl9ydWxlXFxcIjpcXFwiXFxcIixcXFwicGFnZUxpc3RcXFwiOltdLFxcXCJwYWdlc1xcXCI6XFxcIltdXFxcIixcXFwicGFyYW1zXFxcIjp7fSxcXFwicHJlUnVsZVxcXCI6XFxcIlxcXCIsXFxcInNvcnRfdXJsXFxcIjpcXFwiXFxcIixcXFwidGl0bGVcXFwiOlxcXCJR56uZwrdRXFxcIixcXFwidWFcXFwiOlxcXCJwY1xcXCIsXFxcInVybFxcXCI6XFxcImh0dHBzOi8vcWthbjguY29tL2luZGV4LnBocC92b2Qvc2VhcmNoL3BhZ2UvMS93ZC/lpI/ml6Xph43njrAuaHRtbFxcXCIsXFxcInVybEhlYWRlcnNcXFwiOntcXFwiVXNlci1BZ2VudFxcXCI6XFxcIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdPVzY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNDkuMC4yNjIzLjg3IFNhZmFyaS81MzcuMzZcXFwifSxcXFwidmVyc2lvblxcXCI6MCxcXFwieWVhcl91cmxcXFwiOlxcXCJcXFwifSxcXFwicGFnZVRpdGxlXFxcIjpcXFwi5aSP5pel6YeN546wXFxcIixcXFwidXJsXFxcIjpcXFwiaHR0cHM6Ly9xa2FuOC5jb20vaW5kZXgucGhwL3ZvZC9kZXRhaWwvaWQvNzQ3NTQuaHRtbCNpbW1lcnNpdmVUaGVtZSNcXFwifVwiLFwic2F2ZWRcIjpmYWxzZSxcInRpdGxlXCI6XCLliqjmvKvlkIjpm4ZcIixcInZlcnNpb25cIjowLFwidXJsXCI6XCJodHRwczovL3FrYW44LmNvbS9pbmRleC5waHAvdm9kL2RldGFpbC9pZC83NDc1NC5odG1sI2ltbWVyc2l2ZVRoZW1lI1wiLFwiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcImZpbmRfcnVsZVwiOlwianM6XFxubGV0IG15Q29sbGVjdGlvbl9lbCA9IFtdXFxuXFxuLy8g5aSE55CGTVlfVVJM5ZKMTVlfUlVMRVxcbmxldCBSVUxFID0gTVlfUEFSQU1TLlJVTEVcXG5NWV9SVUxFLnVhID0gUlVMRS51YVxcbk1ZX1JVTEUudGl0bGUgPSBSVUxFLnRpdGxlXFxuTVlfUlVMRS5jb2xfdHlwZSA9IFJVTEUuZGV0YWlsX2NvbF90eXBlXFxuTVlfUlVMRS5maW5kX3J1bGUgPSBSVUxFLmRldGFpbF9maW5kX3J1bGVcXG5NWV9SVUxFLnByZVJ1bGUgPSBSVUxFLnByZVJ1bGVcXG5NWV9SVUxFLnBhZ2VMaXN0ID0gUlVMRS5wYWdlTGlzdFxcbk1ZX1JVTEUucGFnZXMgPSBSVUxFLnBhZ2VzXFxuTVlfUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZSA9IFJVTEUubGFzdF9jaGFwdGVyX3J1bGVcXG5NWV9SVUxFLnBhcmFtcyA9IFJVTEUucGFyYW1zXFxuXFxuY29uc3QgeyBydW5Db2RlLCB1cmxQYXJzZSB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvdXRpbGl0eT9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSlcXG52YXIgeyBNWV9VUkwsIE1ZX1VSTF9PcHRpb25zIH0gPSB1cmxQYXJzZShNWV9QQVJBTVMudXJsLCBSVUxFLnVybEhlYWRlcnMsIDEpLFxcbiAgICBpbmRleEh0bWwgPSBmZXRjaChNWV9VUkwsIE1ZX1VSTF9PcHRpb25zKVxcbk1ZX1JVTEUudXJsID0gTVlfVVJMXFxuTVlfUlVMRS51cmxIZWFkZXJzID0gTVlfVVJMX09wdGlvbnMuaGVhZGVyc1xcbi8vIOino+aekOato+aWh1xcbmlmIChNWV9QQVJBTVMucGFnZVRpdGxlKSBzZXRQYWdlVGl0bGUoTVlfUEFSQU1TLnBhZ2VUaXRsZSlcXG5ldmFsKE1ZX1JVTEUucHJlUnVsZSlcXG5zZXRMYXN0Q2hhcHRlclJ1bGUoTVlfUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZSlcXG5NWV9QQVJBTVMgPSBNWV9SVUxFLnBhcmFtc1xcbmlmIChNWV9SVUxFLmZpbmRfcnVsZS5zdGFydHNXaXRoKCdqczonKSkge1xcbiAgICBmdW5jdGlvbiBnZXRVcmwoKSB7XFxuICAgICAgICByZXR1cm4gTVlfVVJMXFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gZ2V0UmVzQ29kZSgpIHtcXG4gICAgICAgIHJldHVybiBpbmRleEh0bWxcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiBzZXRSZXN1bHQoZWwsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpIHtcXG4gICAgICAgIHBhcmFtMSA9IENBTExCQUNLX0tFWVxcbiAgICAgICAgcGFyYW0yID0gTVlfUlVMRVxcbiAgICAgICAgcGFyYW0zID0gTVlfVFlQRVxcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWwuZGF0YSkpIGVsID0gZWwuZGF0YVxcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobXlDb2xsZWN0aW9uX2VsLCBlbC5tYXAoKHYpID0+IHtcXG4gICAgICAgICAgICBsZXQgTVlfX1JVTEUgPSBPYmplY3QuYXNzaWduKHt9LCBNWV9SVUxFKVxcbiAgICAgICAgICAgIHYuY29sX3R5cGUgPSB2LmNvbF90eXBlIHx8IE1ZX1JVTEUuY29sX3R5cGVcXG5cXG4gICAgICAgICAgICBpZiAoIXYudXJsKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5pbmNsdWRlcygnQHJ1bGU9JykpIHtcXG4gICAgICAgICAgICAgICAgbGV0IFtfLCB1cmwsIHJ1bGVdID0gdi51cmwubWF0Y2goL14oW1xcXFxzXFxcXFNdKj8pQHJ1bGU9KFtcXFxcc1xcXFxTXSopJC8pXFxuICAgICAgICAgICAgICAgIHYudXJsID0gdXJsXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBydWxlXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9jb2xfdHlwZSA9IE1ZX1JVTEUuY29sX3R5cGVcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSkge1xcbiAgICAgICAgICAgICAgICBpZiAodi51cmwuaW5jbHVkZXMoJ3J1bGU9JykgfHwgKHYuZXh0cmEgfHwge30pLnJ1bGUpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgICAgICBsZXQgW18sIHBhdGgsIHBhcmFtc10gPSB2LnVybC5zcGxpdCgnIycpWzBdLm1hdGNoKC9eaGlrZXI6XFxcXC9cXFxcL3BhZ2VcXFxcLyguKz8pKD86XFxcXD8oLiopKT8kLyksXFxuICAgICAgICAgICAgICAgICAgICBzdWJQYWdlID0gTVlfUlVMRS5wYWdlTGlzdC5maW5kKCh2KSA9PiB2LnBhdGggPT0gcGF0aCksXFxuICAgICAgICAgICAgICAgICAgICBzdWJVcmwgPSAocGFyYW1zIHx8ICcnKS5zcGxpdCgnJicpLmZpbmQoKHYpID0+IHYuc3RhcnRzV2l0aCgndXJsPScpKVxcbiAgICAgICAgICAgICAgICB2LnVybCA9IHN1YlVybCA/IHN1YlVybC5zbGljZSg0KS5yZXBsYWNlKC/vvJ/vvJ8vZywgJz8nKS5yZXBsYWNlKC/vvIbvvIYvZywgJyYnKSA6ICh2LmV4dHJhIHx8IHt9KS51cmwgfHwgJ2hpa2VyOi8vZW1wdHk/JyArIChwYXJhbXMgfHwgJycpXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBzdWJQYWdlLnJ1bGVcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gc3ViUGFnZS5jb2xfdHlwZVxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5wYXJhbXMgPSB2LmV4dHJhIHx8IHt9XFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxuICAgICAgICAgICAgICAgIHYudXJsID0gdi51cmwucmVwbGFjZSgnLmpzOicsICcuanM6XFxcXG5pZihNWV9SVUxFKU9iamVjdC5hc3NpZ24oTVlfUlVMRSwnICsgJC5zdHJpbmdpZnkoeyBwYWdlczogTVlfUlVMRS5wYWdlcywgcGFnZUxpc3Q6IE1ZX1JVTEUucGFnZUxpc3QsIGZpbmRfcnVsZTogJycsIHBhcmFtczogJycgfSkgKyAnKTtNWV9VUkw9XFxcIicgKyBNWV9VUkwgKyAnXFxcIjsnKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgIH0gZWxzZSB7IHJldHVybiB2IH1cXG4gICAgICAgICAgICB2LmV4dHJhID0geyB1cmw6IHYudXJsLCBSVUxFOiBNWV9fUlVMRSB9XFxuICAgICAgICAgICAgdi51cmwgPSAnaGlrZXI6Ly9wYWdlL2RldGFpbExvYWQ/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJylcXG4gICAgICAgICAgICBpZiAodi5leHRyYS5SVUxFLnVybC5pbmNsdWRlcygnI2ltbWVyc2l2ZVRoZW1lIycpKSB2LnVybCArPSAnJiNpbW1lcnNpdmVUaGVtZSMnXFxuICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgIH0pKVxcbiAgICAgICAgbWV0aG9kX3NldFJlc3VsdC5pbnZva2UoamF2YUNvbnRleHQsIG15Q29sbGVjdGlvbl9lbCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMylcXG4gICAgfVxcbiAgICBzZXRIb21lUmVzdWx0ID0gc2V0UmVzdWx0XFxuICAgIHNldFNlYXJjaFJlc3VsdCA9IHNldFJlc3VsdFxcblxcbiAgICBldmFsKE1ZX1JVTEUuZmluZF9ydWxlLnNsaWNlKDMpKVxcbn0gZWxzZSB7XFxuICAgIGxldCBbXywgZmluZFJ1bGUsIGRldGFpbEZpbmRSdWxlXSA9IE1ZX1JVTEUuZmluZF9ydWxlLm1hdGNoKC9eKC4qPykoPzo9PT4oLiopKT8kLylcXG4gICAgZmluZFJ1bGUgPSBmaW5kUnVsZS5zcGxpdCgnOycpXFxuICAgIHBhcnNlRG9tRm9yQXJyYXkoaW5kZXhIdG1sLCBmaW5kUnVsZS5zaGlmdCgpKS5mb3JFYWNoKChkYXRhKSA9PiB7XFxuICAgICAgICBsZXQgW3RpdGxlLCBpbWcsIGRlc2MsIHVybF0gPSBmaW5kUnVsZS5tYXAoKHYsIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh2ID09ICcqJykgcmV0dXJuICcnXFxuICAgICAgICAgICAgICAgICAgICBlbHNlIHYgPSAoaSA9PSAxIHx8IGkgPT0gMykgP1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tKGRhdGEsIHYpIDpcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvbUZvckh0bWwoZGF0YSwgdilcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpICE9IDMpIHYgPSBydW5Db2RlKHYpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IHJldHVybiAnJyB9XFxuICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgcmVzID0ge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgIHVybDogdXJsLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLFxcbiAgICAgICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IE1ZX1JVTEUuY29sX3R5cGVcXG4gICAgICAgICAgICB9XFxuICAgICAgICBpZiAocmVzLnVybCkge1xcbiAgICAgICAgICAgIGlmIChyZXMudXJsLmluY2x1ZGVzKCdAbGF6eVJ1bGU9JykpIHtcXG4gICAgICAgICAgICAgICAgcmVzLnVybCA9IHJlcy51cmwucmVwbGFjZSgnLmpzOicsICcuanM6XFxcXG5pZihNWV9SVUxFKU9iamVjdC5hc3NpZ24oTVlfUlVMRSwnICsgJC5zdHJpbmdpZnkoeyBwYWdlczogTVlfUlVMRS5wYWdlcywgcGFnZUxpc3Q6IE1ZX1JVTEUucGFnZUxpc3QsIGZpbmRfcnVsZTogJycsIHBhcmFtczogJycgfSkgKyAnKTtNWV9VUkw9XFxcIicgKyBNWV9VUkwgKyAnXFxcIjsnKVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGV0YWlsRmluZFJ1bGUpIHtcXG4gICAgICAgICAgICAgICAgcmVzLmV4dHJhID0geyB1cmw6IHVybCwgUlVMRTogT2JqZWN0LmFzc2lnbih7fSwgTVlfUlVMRSwgeyBkZXRhaWxfZmluZF9ydWxlOiBkZXRhaWxGaW5kUnVsZSB9KSB9XFxuICAgICAgICAgICAgICAgIHJlcy51cmwgPSAnaGlrZXI6Ly9wYWdlL2RldGFpbExvYWQ/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJylcXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5leHRyYS5SVUxFLnVybC5pbmNsdWRlcygnI2ltbWVyc2l2ZVRoZW1lIycpKSByZXMudXJsICs9ICcmI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBteUNvbGxlY3Rpb25fZWwucHVzaChyZXMpXFxuICAgIH0pXFxuICAgIHNldFJlc3VsdChteUNvbGxlY3Rpb25fZWwpXFxufVxcblwiLFwiZ3JvdXBcIjpcIuKRoOi9u+WQiOmbhlwiLFwidWFcIjpcIm1vYmlsZVwiLFwicHJlUnVsZVwiOlwic2V0SXRlbSgnbXlDb2xsZWN0aW9uJywgTVlfUlVMRS50aXRsZSlcXG5zZXRJdGVtKCdyZW1vdGVVcmwnLCAnaGlrZXI6Ly9maWxlcy9ydWxlcy9RaW5naGVqaS9EbS5qc29uJylcXG4vLyDljIXoo7nplJnor69cIixcInBhZ2VzXCI6XCJbe1xcXCJjb2xfdHlwZVxcXCI6XFxcInRleHRfMVxcXCIsXFxcIm5hbWVcXFwiOlxcXCJDbGFzc1RhYlxcXCIsXFxcInBhdGhcXFwiOlxcXCJDbGFzc1RhYlxcXCIsXFxcInJ1bGVcXFwiOlxcXCJmdW5jdGlvbiBDbGFzc1RhYihjbGFzc0FycmF5LCBwYXJhbXMpIHtcXFxcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIHBhcmFtcylcXFxcbiAgICB0aGlzLmFyciA9IGNsYXNzQXJyYXkubWFwKHYgPT4gdGhpcy5pbml0KHYpKVxcXFxuICAgIHRoaXMuc2lnbiA9ICckJyArIE1ZX1JVTEUudGl0bGUgKyAnXycgKyAodGhpcy5uYW1lIHx8ICcnKSArICdfJ1xcXFxuICAgIHRoaXMuY29sb3IgPSB0aGlzLmNvbG9yIHx8ICcjMTJiNjY4J1xcXFxuICAgIHRoaXMuYm91bmRhcnkgPSB0aGlzLmJvdW5kYXJ5IHx8ICdibGFua19ibG9jaydcXFxcbn1cXFxcbkNsYXNzVGFiLnByb3RvdHlwZSA9IHtcXFxcbiAgICBjb25zdHJ1Y3RvcjogQ2xhc3NUYWIsXFxcXG4gICAgbG9hZChlbCkge1xcXFxuICAgICAgICBsZXQgZm9sZGVkID0gZ2V0VmFyKCdmb2xkXycgKyB0aGlzLnNpZ24sICcnKVxcXFxuICAgICAgICBpZiAodGhpcy5mb2xkKSBlbC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojMDQ5ZWZmXFxcXFxcXCI+JyArIChmb2xkZWQgPyAn4pa2JyA6ICfilrwnKSxcXFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc2lnbiwgZm9sZGVkKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgcHV0VmFyKCdmb2xkXycgKyBzaWduLCB7ICcnOiAnVCcsICdUJzogJycgfSBbZm9sZGVkXSlcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgICAgICB9LCB0aGlzLnNpZ24sIGZvbGRlZCksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIGxldCBhcnIgPSBmb2xkZWQgPyBbdGhpcy5hcnJbMF1dIDogdGhpcy5hcnJcXFxcbiAgICAgICAgYXJyLmZvckVhY2goKHYpID0+IHtcXFxcbiAgICAgICAgICAgIGxldCB7IGlkLCBjbGFzc19uYW1lLCBjbGFzc191cmwgfSA9IHYsXFxcXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmdldENsYXNzKGlkKSlcXFxcbiAgICAgICAgICAgIGNsYXNzX25hbWUuZm9yRWFjaCgobmFtZSwgaSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGxldCB1cmwgPSBjbGFzc191cmxbaV0sXFxcXG4gICAgICAgICAgICAgICAgICAgIG5vdyA9IEpTT04uc3RyaW5naWZ5KHsgbmFtZTogbmFtZSwgdXJsOiB1cmwgfSlcXFxcbiAgICAgICAgICAgICAgICBlbC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IChzZWxlY3RlZCA9PSBub3cgPyAn4oCc4oCc4oCd4oCdPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjonICsgdGhpcy5jb2xvciArICdcXFxcXFxcIj48Yj4nIDogJycpICsgbmFtZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzaWduLCBpZCwgbm93KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoc2lnbiArIGlkLCBub3cpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoc2lnbiwgbm93KVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgICAgICAgICAgICAgIH0sIHRoaXMuc2lnbiwgaWQsIG5vdyksXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcbiAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIGVsLnB1c2goeyBjb2xfdHlwZTogdGhpcy5ib3VuZGFyeSB9KVxcXFxuICAgICAgICB9KVxcXFxuICAgIH0sXFxcXG4gICAgaW5pdChjbGFzc09iamVjdCkge1xcXFxuICAgICAgICBpZiAodHlwZW9mIGNsYXNzT2JqZWN0LmNsYXNzX25hbWUgPT0gJ3N0cmluZycpXFxcXG4gICAgICAgICAgICBjbGFzc09iamVjdC5jbGFzc19uYW1lID0gY2xhc3NPYmplY3QuY2xhc3NfbmFtZS5zcGxpdCgnJicpXFxcXG4gICAgICAgIGlmICh0eXBlb2YgY2xhc3NPYmplY3QuY2xhc3NfdXJsID09ICdzdHJpbmcnKVxcXFxuICAgICAgICAgICAgY2xhc3NPYmplY3QuY2xhc3NfdXJsID0gY2xhc3NPYmplY3QuY2xhc3NfdXJsLnNwbGl0KCcmJykubWFwKCh2KSA9PiB2LnRyaW0oKSlcXFxcbiAgICAgICAgcmV0dXJuIGNsYXNzT2JqZWN0XFxcXG4gICAgfSxcXFxcbiAgICBwdXNoKGNsYXNzT2JqZWN0KSB7XFxcXG4gICAgICAgIHRoaXMuYXJyLnB1c2godGhpcy5pbml0KGNsYXNzT2JqZWN0KSlcXFxcbiAgICB9LFxcXFxuICAgIGdldENsYXNzKGlkKSB7XFxcXG4gICAgICAgIGxldCBkZWZhdWx0Q2xhc3MgPSB0aGlzLmFyci5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PSBpZClcXFxcbiAgICAgICAgaWYgKGRlZmF1bHRDbGFzcykgZGVmYXVsdENsYXNzID0gSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgbmFtZTogZGVmYXVsdENsYXNzLmNsYXNzX25hbWVbMF0sXFxcXG4gICAgICAgICAgICB1cmw6IGRlZmF1bHRDbGFzcy5jbGFzc191cmxbMF1cXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBmaW5kIGlkOiAnICsgaWQgKyAnIGluIGNsYXNzVGFiOiAnICsgdGhpcy5zaWduKVxcXFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShnZXRWYXIodGhpcy5zaWduICsgaWQsIGRlZmF1bHRDbGFzcykpXFxcXG4gICAgfSxcXFxcbiAgICBnZXRMYXN0Q2xpY2soKSB7XFxcXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGdldFZhcih0aGlzLnNpZ24sICd7fScpKVxcXFxuICAgIH0sXFxcXG4gICAgc2V0VXJsKHVybCkge1xcXFxuICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UoL1xcXFxcXFxcJFxcXFxcXFxceyhbXn1dKilcXFxcXFxcXH0vZywgKF8sIGlkKSA9PiB0aGlzLmdldENsYXNzKGlkKS51cmwpXFxcXG4gICAgfVxcXFxufVxcXFxuJC5leHBvcnRzID0gQ2xhc3NUYWJcXFxcblxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIummlumhtVxcXCIsXFxcInBhdGhcXFwiOlxcXCJpbmRleExvYWRcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG5sZXQgbXlDb2xsZWN0aW9uX2VsID0gW10sXFxcXG4gICAgcGFnZU51bSA9IHBhcnNlSW50KE1ZX1VSTC5zcGxpdCgnIycpWzFdKSxcXFxcbiAgICBSVUxFID0gTVlfUEFSQU1TLlJVTEUsXFxcXG4gICAgZnlBbGwgPSBSVUxFLnVybC5pbmNsdWRlcygnZnlBbGwnKSxcXFxcbiAgICAvLyDliqDovb1DbGFzc1RhYue7hOS7tlxcXFxuICAgIENsYXNzVGFiID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvQ2xhc3NUYWI/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJykpLFxcXFxuICAgIHRhYkhlYWRlciA9IFtdXFxcXG5cXFxcbmlmIChSVUxFLmNsYXNzX25hbWUpIHRhYkhlYWRlci5wdXNoKHtcXFxcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5Y2xhc3MnLFxcXFxuICAgIGNsYXNzX25hbWU6IFJVTEUuY2xhc3NfbmFtZSxcXFxcbiAgICBjbGFzc191cmw6IFJVTEUuY2xhc3NfdXJsXFxcXG59KVxcXFxuaWYgKFJVTEUuYXJlYV9uYW1lKSB0YWJIZWFkZXIucHVzaCh7XFxcXG4gICAgaWQ6IGZ5QWxsID8gJ2Z5QWxsJyA6ICdmeWFyZWEnLFxcXFxuICAgIGNsYXNzX25hbWU6IFJVTEUuYXJlYV9uYW1lLFxcXFxuICAgIGNsYXNzX3VybDogUlVMRS5hcmVhX3VybFxcXFxufSlcXFxcbmlmIChSVUxFLnllYXJfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcXFxuICAgIGlkOiBmeUFsbCA/ICdmeUFsbCcgOiAnZnl5ZWFyJyxcXFxcbiAgICBjbGFzc19uYW1lOiBSVUxFLnllYXJfbmFtZSxcXFxcbiAgICBjbGFzc191cmw6IFJVTEUueWVhcl91cmxcXFxcbn0pXFxcXG5pZiAoUlVMRS5zb3J0X25hbWUpIHRhYkhlYWRlci5wdXNoKHtcXFxcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5c29ydCcsXFxcXG4gICAgY2xhc3NfbmFtZTogUlVMRS5zb3J0X25hbWUsXFxcXG4gICAgY2xhc3NfdXJsOiBSVUxFLnNvcnRfdXJsXFxcXG59KVxcXFxudGFiSGVhZGVyID0gbmV3IENsYXNzVGFiKHRhYkhlYWRlciwgeyBuYW1lOiBSVUxFLnRpdGxlIH0pXFxcXG5pZiAocGFnZU51bSA9PSAxKSB7XFxcXG4gICAgYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAnY2xlYXJWYXIoXFxcXFxcXCJteUNvbGxlY3Rpb24tc2VhcmNoTW9kZVxcXFxcXFwiKScpXFxcXG4gICAgcHV0VmFyKCdteUNvbGxlY3Rpb24tc2VhcmNoTW9kZScsIFJVTEUudGl0bGUpXFxcXG4gICAgdGFiSGVhZGVyLmxvYWQobXlDb2xsZWN0aW9uX2VsKVxcXFxuICAgIGlmIChSVUxFLnNlYXJjaF91cmwpIG15Q29sbGVjdGlvbl9lbC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwi5pCc57SiXFxcXFxcXCIsXFxcXG4gICAgICAgIGRlc2M6IFxcXFxcXFwi5pCc5L2g5oOz6KaB55qELi4uXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogJ1xcXFxcXFwiaGlrZXI6Ly9wYWdlL3NpbmdsZVNlYXJjaD9rZXl3b3JkPVxcXFxcXFwiK2lucHV0K1xcXFxcXFwiJnBhZ2U9ZnlwYWdlXFxcXFxcXCInLFxcXFxuICAgICAgICBleHRyYTogeyBydWxlOiBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSwgUlVMRTogUlVMRSB9LFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJpbnB1dFxcXFxcXFwiLFxcXFxuICAgIH0pXFxcXG59XFxcXG4vLyDlpITnkIZNWV9VUkzlkoxNWV9SVUxFXFxcXG5NWV9SVUxFLnVhID0gUlVMRS51YVxcXFxuTVlfUlVMRS50aXRsZSA9IFJVTEUudGl0bGVcXFxcbk1ZX1JVTEUuY29sX3R5cGUgPSBSVUxFLmNvbF90eXBlXFxcXG5NWV9SVUxFLmRldGFpbF9jb2xfdHlwZSA9IFJVTEUuZGV0YWlsX2NvbF90eXBlXFxcXG5NWV9SVUxFLmZpbmRfcnVsZSA9IFJVTEUuZmluZF9ydWxlXFxcXG5NWV9SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBSVUxFLmRldGFpbF9maW5kX3J1bGVcXFxcbk1ZX1JVTEUucHJlUnVsZSA9IFJVTEUucHJlUnVsZVxcXFxuTVlfUlVMRS5wYWdlTGlzdCA9IEpTT04ucGFyc2UoUlVMRS5wYWdlcyB8fCAnW10nKVxcXFxuTVlfUlVMRS5wYWdlcyA9IEpTT04uc3RyaW5naWZ5KE1ZX1JVTEUucGFnZUxpc3QpXFxcXG5NWV9SVUxFLmxhc3RfY2hhcHRlcl9ydWxlID0gUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZVxcXFxuTVlfUlVMRS5wYXJhbXMgPSB7fVxcXFxuXFxcXG5jb25zdCB7IHJ1bkNvZGUsIHVybFBhcnNlIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS91dGlsaXR5P3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpKVxcXFxudmFyIHsgTVlfVVJMLCBNWV9VUkxfT3B0aW9ucyB9ID0gdXJsUGFyc2UoUlVMRS51cmwsIHt9LCBwYWdlTnVtLCAodXJsKSA9PiB7XFxcXG4gICAgdXJsWzBdID0gZnlBbGwgPyB1cmxbMF0ucmVwbGFjZSgvZnlBbGwvZywgJyQke2Z5QWxsfScpIDogdXJsWzBdLnJlcGxhY2UoL2Z5KGNsYXNzfGFyZWF8eWVhcnxzb3J0KS9nLCAnJCR7ZnkkMX0nKVxcXFxuICAgIHVybFswXSA9IHRhYkhlYWRlci5zZXRVcmwodXJsWzBdKVxcXFxufSksXFxcXG4gICAgaW5kZXhIdG1sID0gZmV0Y2goTVlfVVJMLCBNWV9VUkxfT3B0aW9ucylcXFxcbk1ZX1JVTEUudXJsID0gTVlfVVJMXFxcXG5NWV9SVUxFLnVybEhlYWRlcnMgPSBNWV9VUkxfT3B0aW9ucy5oZWFkZXJzXFxcXG5sb2coTVlfVVJMKVxcXFxuLy8g5q2j5paH6Kej5p6QXFxcXG5pZiAocGFnZU51bSA9PSAxKSBldmFsKE1ZX1JVTEUucHJlUnVsZSlcXFxcbmlmIChNWV9SVUxFLmZpbmRfcnVsZS5zdGFydHNXaXRoKCdqczonKSkge1xcXFxuICAgIGZ1bmN0aW9uIGdldFVybCgpIHtcXFxcbiAgICAgICAgcmV0dXJuIE1ZX1VSTFxcXFxuICAgIH1cXFxcblxcXFxuICAgIGZ1bmN0aW9uIGdldFJlc0NvZGUoKSB7XFxcXG4gICAgICAgIHJldHVybiBpbmRleEh0bWxcXFxcbiAgICB9XFxcXG5cXFxcbiAgICBmdW5jdGlvbiBzZXRSZXN1bHQoZWwsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpIHtcXFxcbiAgICAgICAgcGFyYW0xID0gQ0FMTEJBQ0tfS0VZXFxcXG4gICAgICAgIHBhcmFtMiA9IE1ZX1JVTEVcXFxcbiAgICAgICAgcGFyYW0zID0gTVlfVFlQRVxcXFxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbC5kYXRhKSkgZWwgPSBlbC5kYXRhXFxcXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG15Q29sbGVjdGlvbl9lbCwgZWwubWFwKCh2KSA9PiB7XFxcXG4gICAgICAgICAgICBsZXQgTVlfX1JVTEUgPSBPYmplY3QuYXNzaWduKHt9LCBNWV9SVUxFKVxcXFxuICAgICAgICAgICAgdi5jb2xfdHlwZSA9IHYuY29sX3R5cGUgfHwgTVlfUlVMRS5jb2xfdHlwZVxcXFxuXFxcXG4gICAgICAgICAgICBpZiAoIXYudXJsKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuaW5jbHVkZXMoJ0BydWxlPScpKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IFtfLCB1cmwsIHJ1bGVdID0gdi51cmwubWF0Y2goL14oW1xcXFxcXFxcc1xcXFxcXFxcU10qPylAcnVsZT0oW1xcXFxcXFxcc1xcXFxcXFxcU10qKSQvKVxcXFxuICAgICAgICAgICAgICAgIHYudXJsID0gdXJsXFxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHJ1bGVcXFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBNWV9SVUxFLmNvbF90eXBlXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSkge1xcXFxuICAgICAgICAgICAgICAgIGlmICh2LnVybC5pbmNsdWRlcygncnVsZT0nKSB8fCAodi5leHRyYSB8fCB7fSkucnVsZSlcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgICAgICBsZXQgW18sIHBhdGgsIHBhcmFtc10gPSB2LnVybC5zcGxpdCgnIycpWzBdLm1hdGNoKC9eaGlrZXI6XFxcXFxcXFwvXFxcXFxcXFwvcGFnZVxcXFxcXFxcLyguKz8pKD86XFxcXFxcXFw/KC4qKSk/JC8pLFxcXFxuICAgICAgICAgICAgICAgICAgICBzdWJQYWdlID0gTVlfUlVMRS5wYWdlTGlzdC5maW5kKCh2KSA9PiB2LnBhdGggPT0gcGF0aCksXFxcXG4gICAgICAgICAgICAgICAgICAgIHN1YlVybCA9IChwYXJhbXMgfHwgJycpLnNwbGl0KCcmJykuZmluZCgodikgPT4gdi5zdGFydHNXaXRoKCd1cmw9JykpXFxcXG4gICAgICAgICAgICAgICAgdi51cmwgPSBzdWJVcmwgPyBzdWJVcmwuc2xpY2UoNCkucmVwbGFjZSgv77yf77yfL2csICc/JykucmVwbGFjZSgv77yG77yGL2csICcmJykgOiAodi5leHRyYSB8fCB7fSkudXJsIHx8ICdoaWtlcjovL2VtcHR5PycgKyAocGFyYW1zIHx8ICcnKVxcXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBzdWJQYWdlLnJ1bGVcXFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBzdWJQYWdlLmNvbF90eXBlXFxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUucGFyYW1zID0gdi5leHRyYSB8fCB7fVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxcXG4gICAgICAgICAgICAgICAgdi51cmwgPSB2LnVybC5yZXBsYWNlKCcuanM6JywgJy5qczpcXFxcXFxcXG5pZihNWV9SVUxFKU9iamVjdC5hc3NpZ24oTVlfUlVMRSwnICsgJC5zdHJpbmdpZnkoeyBwYWdlczogTVlfUlVMRS5wYWdlcywgcGFnZUxpc3Q6IE1ZX1JVTEUucGFnZUxpc3QsIGZpbmRfcnVsZTogJycsIHBhcmFtczogJycgfSkgKyAnKTtNWV9VUkw9XFxcXFxcXCInICsgTVlfVVJMICsgJ1xcXFxcXFwiOycpXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIU1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSB8fCB2LnVybC5zdGFydHNXaXRoKCdoaWtlcjovLycpKSB7IHJldHVybiB2IH1cXFxcbiAgICAgICAgICAgIHYuZXh0cmEgPSB7IHVybDogdi51cmwsIFJVTEU6IE1ZX19SVUxFLCBwYWdlVGl0bGU6IHYudGl0bGUgfVxcXFxuICAgICAgICAgICAgdi51cmwgPSAnaGlrZXI6Ly9wYWdlL2RldGFpbExvYWQ/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJylcXFxcbiAgICAgICAgICAgIGlmICh2LmV4dHJhLlJVTEUudXJsLmluY2x1ZGVzKCcjaW1tZXJzaXZlVGhlbWUjJykpIHYudXJsICs9ICcmI2ltbWVyc2l2ZVRoZW1lIydcXFxcbiAgICAgICAgICAgIHJldHVybiB2XFxcXG4gICAgICAgIH0pKVxcXFxuICAgICAgICBtZXRob2Rfc2V0UmVzdWx0Lmludm9rZShqYXZhQ29udGV4dCwgbXlDb2xsZWN0aW9uX2VsLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKVxcXFxuICAgIH1cXFxcbiAgICBzZXRIb21lUmVzdWx0ID0gc2V0UmVzdWx0XFxcXG4gICAgc2V0U2VhcmNoUmVzdWx0ID0gc2V0UmVzdWx0XFxcXG5cXFxcbiAgICBldmFsKE1ZX1JVTEUuZmluZF9ydWxlLnNsaWNlKDMpKVxcXFxufSBlbHNlIHtcXFxcbiAgICBsZXQgZmluZFJ1bGUgPSBNWV9SVUxFLmZpbmRfcnVsZS5zcGxpdCgnOycpXFxcXG4gICAgcGFyc2VEb21Gb3JBcnJheShpbmRleEh0bWwsIGZpbmRSdWxlLnNoaWZ0KCkpLmZvckVhY2goKGRhdGEpID0+IHtcXFxcbiAgICAgICAgbGV0IFt0aXRsZSwgaW1nLCBkZXNjLCB1cmxdID0gZmluZFJ1bGUubWFwKCh2LCBpKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gJyonKSByZXR1cm4gJydcXFxcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB2ID0gKGkgPT0gMSB8fCBpID09IDMpID9cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tKGRhdGEsIHYpIDpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tRm9ySHRtbChkYXRhLCB2KVxcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSAzKSB2ID0gcnVuQ29kZSh2KVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlxcXFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuICcnIH1cXFxcbiAgICAgICAgICAgIH0pLFxcXFxuICAgICAgICAgICAgcmVzID0ge1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXFxcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLFxcXFxuICAgICAgICAgICAgICAgIGltZzogaW1nLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBNWV9SVUxFLmNvbF90eXBlXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIGlmIChyZXMudXJsKSB7XFxcXG4gICAgICAgICAgICBpZiAocmVzLnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxcXG4gICAgICAgICAgICAgICAgcmVzLnVybCA9IHJlcy51cmwucmVwbGFjZSgnLmpzOicsICcuanM6XFxcXFxcXFxuaWYoTVlfUlVMRSlPYmplY3QuYXNzaWduKE1ZX1JVTEUsJyArICQuc3RyaW5naWZ5KHsgcGFnZXM6IE1ZX1JVTEUucGFnZXMsIHBhZ2VMaXN0OiBNWV9SVUxFLnBhZ2VMaXN0LCBmaW5kX3J1bGU6ICcnLCBwYXJhbXM6ICcnIH0pICsgJyk7TVlfVVJMPVxcXFxcXFwiJyArIE1ZX1VSTCArICdcXFxcXFxcIjsnKVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUpIHtcXFxcbiAgICAgICAgICAgICAgICByZXMuZXh0cmEgPSB7IHVybDogdXJsLCBSVUxFOiBNWV9SVUxFLCBwYWdlVGl0bGU6IHRpdGxlIH1cXFxcbiAgICAgICAgICAgICAgICByZXMudXJsID0gJ2hpa2VyOi8vcGFnZS9kZXRhaWxMb2FkP3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpXFxcXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5leHRyYS5SVUxFLnVybC5pbmNsdWRlcygnI2ltbWVyc2l2ZVRoZW1lIycpKSByZXMudXJsICs9ICcmI2ltbWVyc2l2ZVRoZW1lIydcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBteUNvbGxlY3Rpb25fZWwucHVzaChyZXMpXFxcXG4gICAgfSlcXFxcbiAgICBzZXRSZXN1bHQobXlDb2xsZWN0aW9uX2VsKVxcXFxufVxcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6K+m5oOFXFxcIixcXFwicGF0aFxcXCI6XFxcImRldGFpbExvYWRcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG5sZXQgbXlDb2xsZWN0aW9uX2VsID0gW11cXFxcblxcXFxuLy8g5aSE55CGTVlfVVJM5ZKMTVlfUlVMRVxcXFxubGV0IFJVTEUgPSBNWV9QQVJBTVMuUlVMRVxcXFxuTVlfUlVMRS51YSA9IFJVTEUudWFcXFxcbk1ZX1JVTEUudGl0bGUgPSBSVUxFLnRpdGxlXFxcXG5NWV9SVUxFLmNvbF90eXBlID0gUlVMRS5kZXRhaWxfY29sX3R5cGVcXFxcbk1ZX1JVTEUuZmluZF9ydWxlID0gUlVMRS5kZXRhaWxfZmluZF9ydWxlXFxcXG5NWV9SVUxFLnByZVJ1bGUgPSBSVUxFLnByZVJ1bGVcXFxcbk1ZX1JVTEUucGFnZUxpc3QgPSBSVUxFLnBhZ2VMaXN0XFxcXG5NWV9SVUxFLnBhZ2VzID0gUlVMRS5wYWdlc1xcXFxuTVlfUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZSA9IFJVTEUubGFzdF9jaGFwdGVyX3J1bGVcXFxcbk1ZX1JVTEUucGFyYW1zID0gUlVMRS5wYXJhbXNcXFxcblxcXFxuY29uc3QgeyBydW5Db2RlLCB1cmxQYXJzZSB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvdXRpbGl0eT9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSlcXFxcbnZhciB7IE1ZX1VSTCwgTVlfVVJMX09wdGlvbnMgfSA9IHVybFBhcnNlKE1ZX1BBUkFNUy51cmwsIFJVTEUudXJsSGVhZGVycywgMSksXFxcXG4gICAgaW5kZXhIdG1sID0gZmV0Y2goTVlfVVJMLCBNWV9VUkxfT3B0aW9ucylcXFxcbk1ZX1JVTEUudXJsID0gTVlfVVJMXFxcXG5NWV9SVUxFLnVybEhlYWRlcnMgPSBNWV9VUkxfT3B0aW9ucy5oZWFkZXJzXFxcXG4vLyDop6PmnpDmraPmlodcXFxcbmlmIChNWV9QQVJBTVMucGFnZVRpdGxlKSBzZXRQYWdlVGl0bGUoTVlfUEFSQU1TLnBhZ2VUaXRsZSlcXFxcbmV2YWwoTVlfUlVMRS5wcmVSdWxlKVxcXFxuc2V0TGFzdENoYXB0ZXJSdWxlKE1ZX1JVTEUubGFzdF9jaGFwdGVyX3J1bGUpXFxcXG5NWV9QQVJBTVMgPSBNWV9SVUxFLnBhcmFtc1xcXFxuaWYgKE1ZX1JVTEUuZmluZF9ydWxlLnN0YXJ0c1dpdGgoJ2pzOicpKSB7XFxcXG4gICAgZnVuY3Rpb24gZ2V0VXJsKCkge1xcXFxuICAgICAgICByZXR1cm4gTVlfVVJMXFxcXG4gICAgfVxcXFxuXFxcXG4gICAgZnVuY3Rpb24gZ2V0UmVzQ29kZSgpIHtcXFxcbiAgICAgICAgcmV0dXJuIGluZGV4SHRtbFxcXFxuICAgIH1cXFxcblxcXFxuICAgIGZ1bmN0aW9uIHNldFJlc3VsdChlbCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMykge1xcXFxuICAgICAgICBwYXJhbTEgPSBDQUxMQkFDS19LRVlcXFxcbiAgICAgICAgcGFyYW0yID0gTVlfUlVMRVxcXFxuICAgICAgICBwYXJhbTMgPSBNWV9UWVBFXFxcXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVsLmRhdGEpKSBlbCA9IGVsLmRhdGFcXFxcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobXlDb2xsZWN0aW9uX2VsLCBlbC5tYXAoKHYpID0+IHtcXFxcbiAgICAgICAgICAgIGxldCBNWV9fUlVMRSA9IE9iamVjdC5hc3NpZ24oe30sIE1ZX1JVTEUpXFxcXG4gICAgICAgICAgICB2LmNvbF90eXBlID0gdi5jb2xfdHlwZSB8fCBNWV9SVUxFLmNvbF90eXBlXFxcXG5cXFxcbiAgICAgICAgICAgIGlmICghdi51cmwpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gdlxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5pbmNsdWRlcygnQHJ1bGU9JykpIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgW18sIHVybCwgcnVsZV0gPSB2LnVybC5tYXRjaCgvXihbXFxcXFxcXFxzXFxcXFxcXFxTXSo/KUBydWxlPShbXFxcXFxcXFxzXFxcXFxcXFxTXSopJC8pXFxcXG4gICAgICAgICAgICAgICAgdi51cmwgPSB1cmxcXFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gcnVsZVxcXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9jb2xfdHlwZSA9IE1ZX1JVTEUuY29sX3R5cGVcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly9wYWdlLycpKSB7XFxcXG4gICAgICAgICAgICAgICAgaWYgKHYudXJsLmluY2x1ZGVzKCdydWxlPScpIHx8ICh2LmV4dHJhIHx8IHt9KS5ydWxlKVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlxcXFxuICAgICAgICAgICAgICAgIGxldCBbXywgcGF0aCwgcGFyYW1zXSA9IHYudXJsLnNwbGl0KCcjJylbMF0ubWF0Y2goL15oaWtlcjpcXFxcXFxcXC9cXFxcXFxcXC9wYWdlXFxcXFxcXFwvKC4rPykoPzpcXFxcXFxcXD8oLiopKT8kLyksXFxcXG4gICAgICAgICAgICAgICAgICAgIHN1YlBhZ2UgPSBNWV9SVUxFLnBhZ2VMaXN0LmZpbmQoKHYpID0+IHYucGF0aCA9PSBwYXRoKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgc3ViVXJsID0gKHBhcmFtcyB8fCAnJykuc3BsaXQoJyYnKS5maW5kKCh2KSA9PiB2LnN0YXJ0c1dpdGgoJ3VybD0nKSlcXFxcbiAgICAgICAgICAgICAgICB2LnVybCA9IHN1YlVybCA/IHN1YlVybC5zbGljZSg0KS5yZXBsYWNlKC/vvJ/vvJ8vZywgJz8nKS5yZXBsYWNlKC/vvIbvvIYvZywgJyYnKSA6ICh2LmV4dHJhIHx8IHt9KS51cmwgfHwgJ2hpa2VyOi8vZW1wdHk/JyArIChwYXJhbXMgfHwgJycpXFxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHN1YlBhZ2UucnVsZVxcXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9jb2xfdHlwZSA9IHN1YlBhZ2UuY29sX3R5cGVcXFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5wYXJhbXMgPSB2LmV4dHJhIHx8IHt9XFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLmluY2x1ZGVzKCdAbGF6eVJ1bGU9JykpIHtcXFxcbiAgICAgICAgICAgICAgICB2LnVybCA9IHYudXJsLnJlcGxhY2UoJy5qczonLCAnLmpzOlxcXFxcXFxcbmlmKE1ZX1JVTEUpT2JqZWN0LmFzc2lnbihNWV9SVUxFLCcgKyAkLnN0cmluZ2lmeSh7IHBhZ2VzOiBNWV9SVUxFLnBhZ2VzLCBwYWdlTGlzdDogTVlfUlVMRS5wYWdlTGlzdCwgZmluZF9ydWxlOiAnJywgcGFyYW1zOiAnJyB9KSArICcpO01ZX1VSTD1cXFxcXFxcIicgKyBNWV9VUkwgKyAnXFxcXFxcXCI7JylcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gdlxcXFxuICAgICAgICAgICAgfSBlbHNlIHsgcmV0dXJuIHYgfVxcXFxuICAgICAgICAgICAgdi5leHRyYSA9IHsgdXJsOiB2LnVybCwgUlVMRTogTVlfX1JVTEUgfVxcXFxuICAgICAgICAgICAgdi51cmwgPSAnaGlrZXI6Ly9wYWdlL2RldGFpbExvYWQ/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJylcXFxcbiAgICAgICAgICAgIGlmICh2LmV4dHJhLlJVTEUudXJsLmluY2x1ZGVzKCcjaW1tZXJzaXZlVGhlbWUjJykpIHYudXJsICs9ICcmI2ltbWVyc2l2ZVRoZW1lIydcXFxcbiAgICAgICAgICAgIHJldHVybiB2XFxcXG4gICAgICAgIH0pKVxcXFxuICAgICAgICBtZXRob2Rfc2V0UmVzdWx0Lmludm9rZShqYXZhQ29udGV4dCwgbXlDb2xsZWN0aW9uX2VsLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKVxcXFxuICAgIH1cXFxcbiAgICBzZXRIb21lUmVzdWx0ID0gc2V0UmVzdWx0XFxcXG4gICAgc2V0U2VhcmNoUmVzdWx0ID0gc2V0UmVzdWx0XFxcXG5cXFxcbiAgICBldmFsKE1ZX1JVTEUuZmluZF9ydWxlLnNsaWNlKDMpKVxcXFxufSBlbHNlIHtcXFxcbiAgICBsZXQgW18sIGZpbmRSdWxlLCBkZXRhaWxGaW5kUnVsZV0gPSBNWV9SVUxFLmZpbmRfcnVsZS5tYXRjaCgvXiguKj8pKD86PT0+KC4qKSk/JC8pXFxcXG4gICAgZmluZFJ1bGUgPSBmaW5kUnVsZS5zcGxpdCgnOycpXFxcXG4gICAgcGFyc2VEb21Gb3JBcnJheShpbmRleEh0bWwsIGZpbmRSdWxlLnNoaWZ0KCkpLmZvckVhY2goKGRhdGEpID0+IHtcXFxcbiAgICAgICAgbGV0IFt0aXRsZSwgaW1nLCBkZXNjLCB1cmxdID0gZmluZFJ1bGUubWFwKCh2LCBpKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gJyonKSByZXR1cm4gJydcXFxcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB2ID0gKGkgPT0gMSB8fCBpID09IDMpID9cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tKGRhdGEsIHYpIDpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tRm9ySHRtbChkYXRhLCB2KVxcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSAzKSB2ID0gcnVuQ29kZSh2KVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlxcXFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuICcnIH1cXFxcbiAgICAgICAgICAgIH0pLFxcXFxuICAgICAgICAgICAgcmVzID0ge1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXFxcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLFxcXFxuICAgICAgICAgICAgICAgIGltZzogaW1nLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBNWV9SVUxFLmNvbF90eXBlXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIGlmIChyZXMudXJsKSB7XFxcXG4gICAgICAgICAgICBpZiAocmVzLnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxcXG4gICAgICAgICAgICAgICAgcmVzLnVybCA9IHJlcy51cmwucmVwbGFjZSgnLmpzOicsICcuanM6XFxcXFxcXFxuaWYoTVlfUlVMRSlPYmplY3QuYXNzaWduKE1ZX1JVTEUsJyArICQuc3RyaW5naWZ5KHsgcGFnZXM6IE1ZX1JVTEUucGFnZXMsIHBhZ2VMaXN0OiBNWV9SVUxFLnBhZ2VMaXN0LCBmaW5kX3J1bGU6ICcnLCBwYXJhbXM6ICcnIH0pICsgJyk7TVlfVVJMPVxcXFxcXFwiJyArIE1ZX1VSTCArICdcXFxcXFxcIjsnKVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChkZXRhaWxGaW5kUnVsZSkge1xcXFxuICAgICAgICAgICAgICAgIHJlcy5leHRyYSA9IHsgdXJsOiB1cmwsIFJVTEU6IE9iamVjdC5hc3NpZ24oe30sIE1ZX1JVTEUsIHsgZGV0YWlsX2ZpbmRfcnVsZTogZGV0YWlsRmluZFJ1bGUgfSkgfVxcXFxuICAgICAgICAgICAgICAgIHJlcy51cmwgPSAnaGlrZXI6Ly9wYWdlL2RldGFpbExvYWQ/cnVsZT0nICsgZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJylcXFxcbiAgICAgICAgICAgICAgICBpZiAocmVzLmV4dHJhLlJVTEUudXJsLmluY2x1ZGVzKCcjaW1tZXJzaXZlVGhlbWUjJykpIHJlcy51cmwgKz0gJyYjaW1tZXJzaXZlVGhlbWUjJ1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIG15Q29sbGVjdGlvbl9lbC5wdXNoKHJlcylcXFxcbiAgICB9KVxcXFxuICAgIHNldFJlc3VsdChteUNvbGxlY3Rpb25fZWwpXFxcXG59XFxcXG5cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLlt6Xlhbfpm4ZcXFwiLFxcXCJwYXRoXFxcIjpcXFwidXRpbGl0eVxcXCIsXFxcInJ1bGVcXFwiOlxcXCIkLmV4cG9ydHMgPSB7XFxcXG4gICAgZGF0YUxvYWQ6IGZ1bmN0aW9uKHNob3dBbGwpIHtcXFxcbiAgICAgICAgLy/mo4Dmn6Xpl7TpmpTvvIzpu5jorqTkuIDlpKlcXFxcbiAgICAgICAgbGV0IG1pbiA9IDYwICogMjQgKiAxLFxcXFxuICAgICAgICAgICAgZGF0YSA9IFtdLFxcXFxuICAgICAgICAgICAgdGltZSA9IHBhcnNlSW50KHJlYWRGaWxlKCd1cGRhdGV0aW1lJykpIHx8IDAsXFxcXG4gICAgICAgICAgICBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKVxcXFxuICAgICAgICBpZiAobm93IC0gdGltZSA+IDEwMDAgKiA2MCAqIG1pbikge1xcXFxuICAgICAgICAgICAgbG9nKCfmm7TmlrDkuobmlbDmja4nKVxcXFxuICAgICAgICAgICAgLy8g6I635Y+W6L+c56iL5pWw5o2uXFxcXG4gICAgICAgICAgICBsZXQgdXJsID0gZ2V0SXRlbSgncmVtb3RlVXJsJylcXFxcbiAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgZGF0YSA9IGZldGNoKHVybClcXFxcbiAgICAgICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSlcXFxcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSkucnVsZVxcXFxuICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpXFxcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgZGF0YSA9IFtdXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBkYXRhID0gZGF0YS5maWx0ZXIoKHYpID0+IHsgcmV0dXJuIHYudGl0bGUgIT0gZ2V0SXRlbSgnbXlDb2xsZWN0aW9uJykgJiYgIXYuYXV0aG9yLmluY2x1ZGVzKCfovbvlkIjpm4bnlJ/miJDlmagnKSB9KVxcXFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ2RhdGFDYWNoZScsIEpTT04uc3RyaW5naWZ5KGRhdGEpKVxcXFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ3VwZGF0ZXRpbWUnLCAnJyArIG5vdylcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGxvZygn5rKh5pyJ5pu05paw5pWw5o2uJylcXFxcbiAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdkYXRhQ2FjaGUnKSlcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvLyDlhpnlhaXoh6rlrprkuYnmlbDmja5cXFxcbiAgICAgICAgbGV0IGN1c3RvbURhdGEgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJyksXFxcXG4gICAgICAgICAgICByZXdyaXRlRGF0YSA9IFtdXFxcXG4gICAgICAgIGN1c3RvbURhdGEgPSBjdXN0b21EYXRhLnJlZHVjZSgoc2VsZiwgdikgPT4ge1xcXFxuICAgICAgICAgICAgbGV0IGluZGV4ID0gZGF0YS5maW5kSW5kZXgoKHZ2KSA9PiB2LnRpdGxlID09IHZ2LnRpdGxlKVxcXFxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcXFxcbiAgICAgICAgICAgICAgICBzZWxmLnB1c2godilcXFxcbiAgICAgICAgICAgICAgICBsZXQgcnVsZSA9IGRhdGEuc3BsaWNlKGluZGV4LCAxKVswXVxcXFxuICAgICAgICAgICAgICAgIGlmKHNob3dBbGwgfHwgdi52aXNpYmxlKVxcXFxuICAgICAgICAgICAgICAgICAgICByZXdyaXRlRGF0YS5wdXNoKE9iamVjdC5hc3NpZ24ocnVsZSwgdikpXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICByZXR1cm4gc2VsZlxcXFxuICAgICAgICB9LCBbXSlcXFxcbiAgICAgICAgZGF0YS5mb3JFYWNoKCh2KSA9PiBjdXN0b21EYXRhLnB1c2goeyB0aXRsZTogdi50aXRsZSwgdmlzaWJsZTogdHJ1ZSB9KSlcXFxcbiAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBKU09OLnN0cmluZ2lmeShjdXN0b21EYXRhKSlcXFxcbiAgICAgICAgcmV0dXJuIHJld3JpdGVEYXRhLmNvbmNhdChkYXRhKVxcXFxuICAgIH0sXFxcXG4gICAgcnVuQ29kZTogZnVuY3Rpb24ocnVsZSkge1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgbGV0IFtpbnB1dCwgY29kZV0gPSBydWxlLnNwbGl0KCcuanM6JylcXFxcbiAgICAgICAgICAgIHJldHVybiBjb2RlID8gZXZhbChjb2RlKSA6IHJ1bGVcXFxcbiAgICAgICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gcnVsZSB9XFxcXG4gICAgfSxcXFxcbiAgICB1cmxQYXJzZTogZnVuY3Rpb24odXJsLCBoZWFkZXJzLCBwYWdlTnVtLCBmdW5jKSB7XFxcXG4gICAgICAgIHVybCA9IHVybC5zcGxpdCgnOycpLm1hcCgodikgPT4gdi5yZXBsYWNlKC/vvJvvvJsvZywgJzsnKSlcXFxcbiAgICAgICAgaWYgKGZ1bmMpIGZ1bmModXJsKVxcXFxuICAgICAgICB1cmxbMF0gPSB1cmxbMF0ucmVwbGFjZSgvZnlwYWdlKD86QCgtP1xcXFxcXFxcZCspQCk/KD86XFxcXFxcXFwqKFxcXFxcXFxcZCspQCk/LywgKF8sIHN0YXJ0LCBzcGFjZSkgPT4gcGFyc2VJbnQoc3RhcnQgfHwgMCkgKyAxICsgKHBhZ2VOdW0gLSAxKSAqIHBhcnNlSW50KHNwYWNlIHx8IDEpKVxcXFxuICAgICAgICB1cmxbMF0gPSAvXiguKj8pKD86XFxcXFxcXFxbZmlyc3RQYWdlPSguKj8pXFxcXFxcXFxdKT8kLy5leGVjKHVybFswXSlcXFxcbiAgICAgICAgdXJsWzBdID0gcnVuQ29kZSh1cmxbMF1bMl0gJiYgcGFnZU51bSA9PSAxID8gdXJsWzBdWzJdIDogdXJsWzBdWzFdKVxcXFxuICAgICAgICBsZXQgb3B0aW9ucyA9IHsgaGVhZGVyczogaGVhZGVycywgbWV0aG9kOiB1cmxbMV0gfVxcXFxuICAgICAgICAvLyBwb3N05pa55rOV5pe26L2s5o2i5Y+C5pWwXFxcXG4gICAgICAgIGlmICgvXnBvc3QkL2kudGVzdChvcHRpb25zWydtZXRob2QnXSkpIHtcXFxcbiAgICAgICAgICAgIGxldCBbb3JpVXJsLCBib2R5XSA9IHVybFswXS5zcGxpdCgnPycpXFxcXG4gICAgICAgICAgICB1cmxbMF0gPSBvcmlVcmwucmVwbGFjZSgv77yf77yfL2csICc/JylcXFxcbiAgICAgICAgICAgIGlmIChib2R5LnN0YXJ0c1dpdGgoJ0pzb25Cb2R5PScpKSBib2R5ID0gYm9keS5zbGljZSg5KVxcXFxuICAgICAgICAgICAgb3B0aW9uc1snYm9keSddID0gYm9keVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmICh1cmxbMl0pIG9wdGlvbnMuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbjtjaGFyc3Q9JyArIHVybFsyXVxcXFxuICAgICAgICBpZiAodXJsWzNdKSB1cmxbM10ubWF0Y2goL3soLiopfS8pWzFdLnNwbGl0KCcmJicpLmZvckVhY2goKHYpID0+IHtcXFxcbiAgICAgICAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSB2LnNwbGl0KCdAJylcXFxcbiAgICAgICAgICAgIG9wdGlvbnMuaGVhZGVyc1trZXldID0gcnVuQ29kZSh2YWx1ZSlcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgLy8g5re75Yqg5YWo5bGAVUFcXFxcbiAgICAgICAgaWYgKCFvcHRpb25zLmhlYWRlcnNbJ1VzZXItQWdlbnQnXSkge1xcXFxuICAgICAgICAgICAgaWYgKE1ZX1JVTEUudWEgPT0gJ3BjJylcXFxcbiAgICAgICAgICAgICAgICBvcHRpb25zLmhlYWRlcnNbJ1VzZXItQWdlbnQnXSA9IFBDX1VBXFxcXG4gICAgICAgICAgICBlbHNlIGlmIChNWV9SVUxFLnVhID09ICdtb2JpbGUnKVxcXFxuICAgICAgICAgICAgICAgIG9wdGlvbnMuaGVhZGVyc1snVXNlci1BZ2VudCddID0gTU9CSUxFX1VBXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIHsgTVlfVVJMOiB1cmxbMF0sIE1ZX1VSTF9PcHRpb25zOiBvcHRpb25zIH1cXFxcbiAgICB9XFxcXG59XFxcXG5cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfMV92ZXJ0aWNhbF9waWNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5Y2V5pCcXFxcIixcXFwicGF0aFxcXCI6XFxcInNpbmdsZVNlYXJjaFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbmxldCBteUNvbGxlY3Rpb25fZWwgPSBbXSxcXFxcbiAgICBSVUxFID0gTVlfUEFSQU1TLlJVTEUsXFxcXG4gICAga2V5d29yZCA9IGdldFBhcmFtKCdrZXl3b3JkJyksXFxcXG4gICAgcGFnZU51bSA9IHBhcnNlSW50KGdldFBhcmFtKCdwYWdlJykpXFxcXG5cXFxcbi8vIOWkhOeQhk1ZX1VSTOWSjE1ZX1JVTEVcXFxcbk1ZX1JVTEUudWEgPSBSVUxFLnVhXFxcXG5NWV9SVUxFLnRpdGxlID0gUlVMRS50aXRsZVxcXFxuTVlfUlVMRS5jb2xfdHlwZSA9IFJVTEUuY29sX3R5cGVcXFxcbk1ZX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gWycnLCAnKiddLmluY2x1ZGVzKFJVTEUuc2RldGFpbF9maW5kX3J1bGUpID8gUlVMRS5kZXRhaWxfY29sX3R5cGUgOiBSVUxFLnNkZXRhaWxfY29sX3R5cGVcXFxcbk1ZX1JVTEUuZmluZF9ydWxlID0gUlVMRS5zZWFyY2hGaW5kXFxcXG5NWV9SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBbJycsICcqJ10uaW5jbHVkZXMoUlVMRS5zZGV0YWlsX2ZpbmRfcnVsZSkgPyBSVUxFLmRldGFpbF9maW5kX3J1bGUgOiBSVUxFLnNkZXRhaWxfZmluZF9ydWxlXFxcXG5NWV9SVUxFLnByZVJ1bGUgPSBSVUxFLnByZVJ1bGVcXFxcbk1ZX1JVTEUucGFnZUxpc3QgPSBKU09OLnBhcnNlKFJVTEUucGFnZXMgfHwgJ1tdJylcXFxcbk1ZX1JVTEUucGFnZXMgPSBKU09OLnN0cmluZ2lmeShNWV9SVUxFLnBhZ2VMaXN0KVxcXFxuTVlfUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZSA9IFJVTEUubGFzdF9jaGFwdGVyX3J1bGVcXFxcbk1ZX1JVTEUucGFyYW1zID0ge31cXFxcblxcXFxuY29uc3QgeyBydW5Db2RlLCB1cmxQYXJzZSB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvdXRpbGl0eT9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSlcXFxcbnZhciB7IE1ZX1VSTCwgTVlfVVJMX09wdGlvbnMgfSA9IHVybFBhcnNlKFJVTEUuc2VhcmNoX3VybCwge30sIHBhZ2VOdW0sICh1cmwpID0+IHtcXFxcbiAgICB1cmxbMF0gPSB1cmxbMF0ucmVwbGFjZSh1cmxbMF0uaW5jbHVkZXMoJyUlJykgPyAvJSUvZyA6IC9cXFxcXFxcXCpcXFxcXFxcXCovZywgZW5jb2RlU3RyKGtleXdvcmQsIHVybFsyXSkpXFxcXG59KSxcXFxcbiAgICBpbmRleEh0bWwgPSBmZXRjaChNWV9VUkwsIE1ZX1VSTF9PcHRpb25zKVxcXFxuTVlfUlVMRS51cmwgPSBNWV9VUkxcXFxcbk1ZX1JVTEUudXJsSGVhZGVycyA9IE1ZX1VSTF9PcHRpb25zLmhlYWRlcnNcXFxcbi8vIOato+aWh+ino+aekFxcXFxuaWYgKHBhZ2VOdW0gPT0gMSkgc2V0UGFnZVRpdGxlKCfigJwnICsga2V5d29yZCArICfigJ3nmoTmkJzntKLnu5PmnpwnKVxcXFxuaWYgKE1ZX1JVTEUuZmluZF9ydWxlLnN0YXJ0c1dpdGgoJ2pzOicpKSB7XFxcXG4gICAgZnVuY3Rpb24gZ2V0VXJsKCkge1xcXFxuICAgICAgICByZXR1cm4gTVlfVVJMXFxcXG4gICAgfVxcXFxuXFxcXG4gICAgZnVuY3Rpb24gZ2V0UmVzQ29kZSgpIHtcXFxcbiAgICAgICAgcmV0dXJuIGluZGV4SHRtbFxcXFxuICAgIH1cXFxcblxcXFxuICAgIGZ1bmN0aW9uIHNldFJlc3VsdChlbCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMykge1xcXFxuICAgICAgICBwYXJhbTEgPSBDQUxMQkFDS19LRVlcXFxcbiAgICAgICAgcGFyYW0yID0gTVlfUlVMRVxcXFxuICAgICAgICBwYXJhbTMgPSBNWV9UWVBFXFxcXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVsLmRhdGEpKSBlbCA9IGVsLmRhdGFcXFxcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobXlDb2xsZWN0aW9uX2VsLCBlbC5tYXAoKHYpID0+IHtcXFxcbiAgICAgICAgICAgIGxldCBNWV9fUlVMRSA9IE9iamVjdC5hc3NpZ24oe30sIE1ZX1JVTEUpLFxcXFxuICAgICAgICAgICAgICAgIHN1YlRpdGxlID0gdi50aXRsZVxcXFxuICAgICAgICAgICAgdi50aXRsZSArPSAn4oCc4oCc4oCd4oCdPGJyPicgKyAoUlVMRS50aXRsZS5mb250Y29sb3IoJyMxMmI2NjgnKSArICcg4paqICcgKyAodi5kZXNjIHx8ICcnKS5mb250Y29sb3IoJyM2NjY2NjYnKSkuc21hbGwoKVxcXFxuICAgICAgICAgICAgdi5kZXNjID0gdi5jb250ZW50IHx8ICcnXFxcXG4gICAgICAgICAgICBpZighdi5pbWcpIHYuY29sX3R5cGUgPSAndGV4dF8xJ1xcXFxuICAgICAgICAgICAgZGVsZXRlIHYuY29udGVudFxcXFxuXFxcXG4gICAgICAgICAgICBpZiAoIXYudXJsKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuaW5jbHVkZXMoJ0BydWxlPScpKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IFtfLCB1cmwsIHJ1bGVdID0gdi51cmwubWF0Y2goL14oW1xcXFxcXFxcc1xcXFxcXFxcU10qPylAcnVsZT0oW1xcXFxcXFxcc1xcXFxcXFxcU10qKSQvKVxcXFxuICAgICAgICAgICAgICAgIHYudXJsID0gdXJsXFxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHJ1bGVcXFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBNWV9SVUxFLmNvbF90eXBlXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSkge1xcXFxuICAgICAgICAgICAgICAgIGlmICh2LnVybC5pbmNsdWRlcygncnVsZT0nKSB8fCAodi5leHRyYSB8fCB7fSkucnVsZSlcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgICAgICBsZXQgW18sIHBhdGgsIHBhcmFtc10gPSB2LnVybC5zcGxpdCgnIycpWzBdLm1hdGNoKC9eaGlrZXI6XFxcXFxcXFwvXFxcXFxcXFwvcGFnZVxcXFxcXFxcLyguKz8pKD86XFxcXFxcXFw/KC4qKSk/JC8pLFxcXFxuICAgICAgICAgICAgICAgICAgICBzdWJQYWdlID0gTVlfUlVMRS5wYWdlTGlzdC5maW5kKCh2KSA9PiB2LnBhdGggPT0gcGF0aCksXFxcXG4gICAgICAgICAgICAgICAgICAgIHN1YlVybCA9IChwYXJhbXMgfHwgJycpLnNwbGl0KCcmJykuZmluZCgodikgPT4gdi5zdGFydHNXaXRoKCd1cmw9JykpXFxcXG4gICAgICAgICAgICAgICAgdi51cmwgPSBzdWJVcmwgPyBzdWJVcmwuc2xpY2UoNCkucmVwbGFjZSgv77yf77yfL2csICc/JykucmVwbGFjZSgv77yG77yGL2csICcmJykgOiAodi5leHRyYSB8fCB7fSkudXJsIHx8ICdoaWtlcjovL2VtcHR5PycgKyAocGFyYW1zIHx8ICcnKVxcXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBzdWJQYWdlLnJ1bGVcXFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBzdWJQYWdlLmNvbF90eXBlXFxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUucGFyYW1zID0gdi5leHRyYSB8fCB7fVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxcXG4gICAgICAgICAgICAgICAgdi51cmwgPSB2LnVybC5yZXBsYWNlKCcuanM6JywgJy5qczpcXFxcXFxcXG5pZihNWV9SVUxFKU9iamVjdC5hc3NpZ24oTVlfUlVMRSwnICsgJC5zdHJpbmdpZnkoeyBwYWdlczogTVlfUlVMRS5wYWdlcywgcGFnZUxpc3Q6IE1ZX1JVTEUucGFnZUxpc3QsIGZpbmRfcnVsZTogJycsIHBhcmFtczogJycgfSkgKyAnKTtNWV9VUkw9XFxcXFxcXCInICsgTVlfVVJMICsgJ1xcXFxcXFwiOycpXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIU1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSB8fCB2LnVybC5zdGFydHNXaXRoKCdoaWtlcjovLycpKSB7IHJldHVybiB2IH1cXFxcbiAgICAgICAgICAgIHYuZXh0cmEgPSB7IHVybDogdi51cmwsIFJVTEU6IE1ZX19SVUxFLCBwYWdlVGl0bGU6IHN1YlRpdGxlIH1cXFxcbiAgICAgICAgICAgIHYudXJsID0gJ2hpa2VyOi8vcGFnZS9kZXRhaWxMb2FkP3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpXFxcXG4gICAgICAgICAgICBpZiAodi5leHRyYS5SVUxFLnVybC5pbmNsdWRlcygnI2ltbWVyc2l2ZVRoZW1lIycpKSB2LnVybCArPSAnJiNpbW1lcnNpdmVUaGVtZSMnXFxcXG4gICAgICAgICAgICByZXR1cm4gdlxcXFxuICAgICAgICB9KSlcXFxcbiAgICAgICAgbWV0aG9kX3NldFJlc3VsdC5pbnZva2UoamF2YUNvbnRleHQsIG15Q29sbGVjdGlvbl9lbCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMylcXFxcbiAgICB9XFxcXG4gICAgc2V0SG9tZVJlc3VsdCA9IHNldFJlc3VsdFxcXFxuICAgIHNldFNlYXJjaFJlc3VsdCA9IHNldFJlc3VsdFxcXFxuXFxcXG4gICAgZXZhbChNWV9SVUxFLmZpbmRfcnVsZS5zbGljZSgzKSlcXFxcbn0gZWxzZSB7XFxcXG4gICAgbGV0IGZpbmRSdWxlID0gTVlfUlVMRS5maW5kX3J1bGUuc3BsaXQoJzsnKVxcXFxuICAgIHBhcnNlRG9tRm9yQXJyYXkoaW5kZXhIdG1sLCBmaW5kUnVsZS5zaGlmdCgpKS5mb3JFYWNoKChkYXRhKSA9PiB7XFxcXG4gICAgICAgIGxldCBbdGl0bGUsIHVybCwgZGVzYywgY29udGVudCwgaW1nXSA9IGZpbmRSdWxlLm1hcCgodiwgaSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmICh2ID09ICcqJykgcmV0dXJuICcnXFxcXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgdiA9IChpID09IDEgfHwgaSA9PSA0KSA/XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvbShkYXRhLCB2KSA6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvbUZvckh0bWwoZGF0YSwgdilcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gMSkgdiA9IHJ1bkNvZGUodilcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXFxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IHJldHVybiAnJyB9XFxcXG4gICAgICAgICAgICB9KSxcXFxcbiAgICAgICAgICAgIHJlcyA9IHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUgKyAn4oCc4oCc4oCd4oCdPGJyPicgKyAoUlVMRS50aXRsZS5mb250Y29sb3IoJyMxMmI2NjgnKSArICcg4paqICcgKyBkZXNjLmZvbnRjb2xvcignIzY2NjY2NicpKS5zbWFsbCgpLFxcXFxuICAgICAgICAgICAgICAgIHVybDogdXJsLFxcXFxuICAgICAgICAgICAgICAgIGRlc2M6IGNvbnRlbnQsXFxcXG4gICAgICAgICAgICAgICAgaW1nOiBpbWdcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgaWYoIXJlcy5pbWcpIHJlcy5jb2xfdHlwZSA9ICd0ZXh0XzEnXFxcXG4gICAgICAgIGlmIChyZXMudXJsKSB7XFxcXG4gICAgICAgICAgICBpZiAocmVzLnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxcXG4gICAgICAgICAgICAgICAgcmVzLnVybCA9IHJlcy51cmwucmVwbGFjZSgnLmpzOicsICcuanM6XFxcXFxcXFxuaWYoTVlfUlVMRSlPYmplY3QuYXNzaWduKE1ZX1JVTEUsJyArICQuc3RyaW5naWZ5KHsgcGFnZXM6IE1ZX1JVTEUucGFnZXMsIHBhZ2VMaXN0OiBNWV9SVUxFLnBhZ2VMaXN0LCBmaW5kX3J1bGU6ICcnLCBwYXJhbXM6ICcnIH0pICsgJyk7TVlfVVJMPVxcXFxcXFwiJyArIE1ZX1VSTCArICdcXFxcXFxcIjsnKVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUpIHtcXFxcbiAgICAgICAgICAgICAgICByZXMuZXh0cmEgPSB7IHVybDogdXJsLCBSVUxFOiBNWV9SVUxFLCBwYWdlVGl0bGU6IHRpdGxlIH1cXFxcbiAgICAgICAgICAgICAgICByZXMudXJsID0gJ2hpa2VyOi8vcGFnZS9kZXRhaWxMb2FkP3J1bGU9JyArIGdldEl0ZW0oJ215Q29sbGVjdGlvbicpXFxcXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5leHRyYS5SVUxFLnVybC5pbmNsdWRlcygnI2ltbWVyc2l2ZVRoZW1lIycpKSByZXMudXJsICs9ICcmI2ltbWVyc2l2ZVRoZW1lIydcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBteUNvbGxlY3Rpb25fZWwucHVzaChyZXMpXFxcXG4gICAgfSlcXFxcbiAgICBzZXRSZXN1bHQobXlDb2xsZWN0aW9uX2VsKVxcXFxufVxcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcImljb25fMl9yb3VuZFxcXCIsXFxcIm5hbWVcXFwiOlxcXCLorr7nva5cXFwiLFxcXCJwYXRoXFxcIjpcXFwiQ29uZmlnXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAnY2xlYXJWYXIoXFxcXFxcXCJteUNvbGxlY3Rpb24tc29ydEZsYWdcXFxcXFxcIik7cmVmcmVzaFBhZ2UoKScpXFxcXG5zZXRQYWdlVGl0bGUoJ+KamSDovbvlkIjpm4borr7nva4g4pqZJylcXFxcbmxldCBlbCA9IFt7XFxcXG4gICAgICAgIHRpdGxlOiAn5riF6Zmk57yT5a2YLOeri+WNs+abtOaWsCA8c21hbGw+IO+8iOWfuuS6jui/nOeoi+S7k+W6kyzkuI3opoHpopHnuYHngrnlh7vvvIknLFxcXFxuICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG4gICAgICAgICAgICBkZWxldGVGaWxlKCd1cGRhdGV0aW1lJylcXFxcbiAgICAgICAgICAgIGJhY2sodHJ1ZSlcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lmm7TmlrAnXFxcXG4gICAgICAgIH0pLFxcXFxuICAgICAgICBpbWc6ICdoaWtlcjovL2ltYWdlcy9pY29uMScsXFxcXG4gICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJ1xcXFxuICAgIH1dLFxcXFxuICAgIHNlYXJjaFRoZCA9IHBhcnNlSW50KHJlYWRGaWxlKCdzZWFyY2hUaGQnKSB8fCAnNScpLFxcXFxuICAgIG5ld1dpbmRvdyA9IHJlYWRGaWxlKCduZXdXaW5kb3cnKSxcXFxcbiAgICBlZGl0TW9kZSA9IGdldFZhcignbXlDb2xsZWN0aW9uLWVkaXRNb2RlJywgJ+WQr+eUqC/npoHnlKgnKVxcXFxuXFxcXG5lbC5wdXNoKHtcXFxcbiAgICB0aXRsZTogJ/CflI0g5pCc57Si5qih5byPOiAnICsgKHNlYXJjaFRoZCA9PSAwID8gJ+WIlycgOiAn6IGaJyArIHNlYXJjaFRoZCksXFxcXG4gICAgdXJsOiAkKFsn5YiX6KGo5pCc57SiJywgJ+iBmuWQiOaQnOe0oiddLCAxKS5zZWxlY3QoKHNlYXJjaFRoZCkgPT4ge1xcXFxuICAgICAgICBpZiAoaW5wdXQgPT0gJ+WIl+ihqOaQnOe0oicpIHtcXFxcbiAgICAgICAgICAgIHNhdmVGaWxlKCdzZWFyY2hUaGQnLCAnMCcpXFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICBpZiAoc2VhcmNoVGhkID09IDApIHNlYXJjaFRoZCA9IDVcXFxcbiAgICAgICAgICAgIHJldHVybiAkKHNlYXJjaFRoZCwgJ+i+k+WFpeaQnOe0oue6v+eoi++8jOacgOWlveS4jeimgei2hei/hzE2JykuaW5wdXQoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHNhdmVGaWxlKCdzZWFyY2hUaGQnLCBpbnB1dClcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9XFxcXG4gICAgfSwgc2VhcmNoVGhkKSxcXFxcbiAgICBjb2xfdHlwZTogJ3RleHRfMidcXFxcbn0sIHtcXFxcbiAgICB0aXRsZTogJ/CflqUg54us56uL6aaW6aG1OiAnICsgKG5ld1dpbmRvdyA/ICfmmK8nIDogJ+WQpicpLFxcXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobmV3V2luZG93KSA9PiB7XFxcXG4gICAgICAgIHNhdmVGaWxlKCduZXdXaW5kb3cnLCBuZXdXaW5kb3cgPyAnJyA6ICcxJylcXFxcbiAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgfSwgbmV3V2luZG93KSxcXFxcbiAgICBjb2xfdHlwZTogJ3RleHRfMidcXFxcbn0pXFxcXG5cXFxcbmVsLnB1c2goeyBjb2xfdHlwZTogJ2xpbmUnIH0sIHsgY29sX3R5cGU6ICdiaWdfYmxhbmtfYmxvY2snIH0pO1xcXFxuWyflkK/nlKgv56aB55SoJywgJ+mHjeaWsOaOkuW6jycsICfmm7TmlLnlm77moIcnLCAn5a+85YWl5rW36ZiUJ10uZm9yRWFjaCgodikgPT4ge1xcXFxuICAgIGVsLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogdiA9PSBlZGl0TW9kZSA/ICfigJzigJzigJ3igJ0nICsgdi5ib2xkKCkuZm9udGNvbG9yKCcjMTJiNjY4JykgOiB2LFxcXFxuICAgICAgICB1cmw6IHYgPT0gZWRpdE1vZGUgPyAnaGlrZXI6Ly9lbXB0eScgOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh2KSA9PiB7XFxcXG4gICAgICAgICAgICBwdXRWYXIoJ215Q29sbGVjdGlvbi1lZGl0TW9kZScsIHYpXFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXFxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXFxcbiAgICAgICAgfSwgdiksXFxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcbiAgICB9KVxcXFxufSlcXFxcbmVsLnB1c2goe1xcXFxuICAgIHRpdGxlOiAn5oGi5aSN5Ye65Y6C5pWw5o2uJyxcXFxcbiAgICB1cmw6ICQoJ+ehruWumuimgeaBouWkjeWHuuWOgu+8jOa4healmuiHquWumuS5ieaVsOaNruWQl++8nycpLmNvbmZpcm0oKCkgPT4ge1xcXFxuICAgICAgICBkZWxldGVGaWxlKCdjdXN0b21EYXRhJylcXFxcbiAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LmgaLlpI3lh7rljoLmlbDmja4nXFxcXG4gICAgfSksXFxcXG4gICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcXFxufSlcXFxcblxcXFxuY29uc3QgeyBkYXRhTG9hZCB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvdXRpbGl0eT9ydWxlPScgKyBnZXRJdGVtKCdteUNvbGxlY3Rpb24nKSlcXFxcbmxldCBkYXRhID0gZGF0YUxvYWQodHJ1ZSlcXFxcbkpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKS5mb3JFYWNoKCh2LCBpKSA9PiB7XFxcXG4gICAgbGV0IGQgPSB7IHRpdGxlOiB2LnRpdGxlLCBpbWc6IGRhdGFbaV0uaWNvbiB9XFxcXG4gICAgc3dpdGNoIChlZGl0TW9kZSkge1xcXFxuICAgICAgICBjYXNlICflkK/nlKgv56aB55SoJzpcXFxcbiAgICAgICAgICAgIGQudGl0bGUgPSAodi52aXNpYmxlID8gJ/Cfn6IgICcgOiAn8J+UtCAgJykgKyBkLnRpdGxlXFxcXG4gICAgICAgICAgICBkLnVybCA9ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHJ1bGUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJyksXFxcXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcnVsZXMuZmluZEluZGV4KCh2KSA9PiB2LnRpdGxlID09IHJ1bGUudGl0bGUpXFxcXG4gICAgICAgICAgICAgICAgcnVsZXNbaW5kZXhdLnZpc2libGUgPSAhcnVsZXNbaW5kZXhdLnZpc2libGVcXFxcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSgnY3VzdG9tRGF0YScsIEpTT04uc3RyaW5naWZ5KHJ1bGVzKSlcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgICAgICB9LCB2KVxcXFxuICAgICAgICAgICAgYnJlYWtcXFxcbiAgICAgICAgY2FzZSAn6YeN5paw5o6S5bqPJzpcXFxcbiAgICAgICAgICAgIGxldCBzb3J0RmxhZyA9IHBhcnNlSW50KGdldFZhcignbXlDb2xsZWN0aW9uLXNvcnRGbGFnJywgJy0xJykpXFxcXG4gICAgICAgICAgICBkLnRpdGxlID0gKHNvcnRGbGFnID09IGkgPyAn8J+UhCAgJyA6ICcnKSArIGQudGl0bGVcXFxcbiAgICAgICAgICAgIGlmIChzb3J0RmxhZyA9PSAtMSlcXFxcbiAgICAgICAgICAgICAgICBkLnVybCA9ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGkpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdteUNvbGxlY3Rpb24tc29ydEZsYWcnLCBpLnRvU3RyaW5nKCkpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6YCJ5oup6KaB56e75Yqo5Yiw55qE5L2N572uJ1xcXFxuICAgICAgICAgICAgICAgIH0sIGkpXFxcXG4gICAgICAgICAgICBlbHNlXFxcXG4gICAgICAgICAgICAgICAgZC51cmwgPSAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChvbGRJbmRleCwgbmV3SW5kZXgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJ1bGVzID0gSlNPTi5wYXJzZShyZWFkRmlsZSgnY3VzdG9tRGF0YScpIHx8ICdbXScpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzLnNwbGljZShuZXdJbmRleCwgMCwgcnVsZXMuc3BsaWNlKG9sZEluZGV4LCAxKVswXSlcXFxcbiAgICAgICAgICAgICAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBKU09OLnN0cmluZ2lmeShydWxlcykpXFxcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcignbXlDb2xsZWN0aW9uLXNvcnRGbGFnJywgJy0xJylcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXFxcbiAgICAgICAgICAgICAgICB9LCBzb3J0RmxhZywgaSlcXFxcbiAgICAgICAgICAgIGJyZWFrXFxcXG4gICAgICAgIGNhc2UgJ+abtOaUueWbvuaghyc6XFxcXG4gICAgICAgICAgICBkLnVybCA9ICQodi5pY29uIHx8ICcnLCAn6L6T5YWl5paw5Zu+5qCH5Zyw5Z2A5oiW6aKc6Imy5Luj56CB77yaJykuaW5wdXQoKHJ1bGUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJyksXFxcXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcnVsZXMuZmluZEluZGV4KCh2KSA9PiB2LnRpdGxlID09IHJ1bGUudGl0bGUpXFxcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0KVxcXFxuICAgICAgICAgICAgICAgICAgICBydWxlc1tpbmRleF0uaWNvbiA9IGlucHV0XFxcXG4gICAgICAgICAgICAgICAgZWxzZVxcXFxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcnVsZXNbaW5kZXhdLmljb25cXFxcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSgnY3VzdG9tRGF0YScsIEpTT04uc3RyaW5naWZ5KHJ1bGVzKSlcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgICAgICB9LCB2KVxcXFxuICAgICAgICAgICAgYnJlYWtcXFxcbiAgICAgICAgY2FzZSAn5a+85YWl5rW36ZiUJzpcXFxcbiAgICAgICAgICAgIGQudXJsID0gJ3J1bGU6Ly8nICsgYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KGRhdGFbaV0pKVxcXFxuICAgICAgICAgICAgYnJlYWtcXFxcbiAgICB9XFxcXG4gICAgZWwucHVzaChkKVxcXFxufSlcXFxcbnNldFJlc3VsdChlbClcXFxcblxcXCJ9XVwifSIsInBpY1VybCI6Imh0dHBzOi8vd29sb25nenl3Y2RuLmNvbTo2NS91cGxvYWQvdm9kLzIwMjIwNDE2LTEvOTZhNzUxMmQwY2E5MmE5YzA2MjRkYzRlYTFmNjkyNjkud2VicCIsInRpdGxlIjoi5aSP5pel6YeN546wIn0=
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement