xiaomianao666

小程序:AI聚集

Feb 27th, 2024
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@AI聚集@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoiQUnogZrpm4YiLCJhdXRob3IiOiIiLCJ1cmwiOiJoaWtlcjovL2VtcHR5IyNmeWNsYXNzIyNmeXBhZ2UiLCJ2ZXJzaW9uIjo1NCwiY29sX3R5cGUiOiJtb3ZpZV8zX21hcnF1ZWUiLCJjbGFzc19uYW1lIjoi6aaW6aG1JuixjOixhibojLbmna/ni5Am5pCc54mHJumdkum6pibnlLXlvbHni5cm6Iy25p2v6JmOJuWcn+aLqOm8oCbliqjmvKvlt7Tlo6siLCJ0eXBlIjoidG9vbCIsImNsYXNzX3VybCI6ImhvbWUmaHR0cHM6Ly93d3cud2FuZG91LmxhLyZodHRwczovL2N1cGZveC5hcHAvJmh0dHA6Ly9zb3VwaWFuLnh5ei8maHR0cHM6Ly93d3cucW10di5wcm8vJmh0dHBzOi8vd3d3LmRpYW55aW5nZ291LmNvbS95aW5na3UvJmh0dHBzOi8vd3d3LjcyNTk5OC5jb20veWluZ2t1Jmh0dHBzOi8vd3d3LnRic2R5LmNvbS9tL2luZGV4Lmh0bWwmaHR0cHM6Ly9kbTg0LnR2IiwiYXJlYV9uYW1lIjoiIiwiYXJlYV91cmwiOiIiLCJzb3J0X25hbWUiOiIiLCJ5ZWFyX25hbWUiOiIiLCJzb3J0X3VybCI6IiIsInllYXJfdXJsIjoiIiwiZmluZF9ydWxlIjoianM6XG52YXIgbXl1cmwgPSBNWV9VUkwuc3BsaXQoXCIjI1wiKVsxXTtcblxubGV0IGFuY2hvcklkID0gbXl1cmw7XG5sZXQganMgPSAkLnJlcXVpcmUoXCJoaWtlcjovL3BhZ2UveDVhaVwiKShNWV9SVUxFLnRpdGxlLCBhbmNob3JJZCk7XG5cbmZ1bmN0aW9uIGxvYWRVcmwobXl1cmwsIG15cnVsZSwgbSkge1xuICAgIHNldFJlc3VsdChbe1xuICAgICAgICBjb2xfdHlwZTogXCJ4NV93ZWJ2aWV3X3NpbmdsZVwiLFxuICAgICAgICB1cmw6IG15dXJsLFxuICAgICAgICBkZXNjOiBcImZsb2F0JiZ0b3BcIixcbiAgICAgICAgZXh0cmE6IHtcbiAgICAgICAgICAgIGZsb2F0VmlkZW86IHRydWUsXG4gICAgICAgICAgICBjYW5CYWNrOiB0cnVlLFxuICAgICAgICAgICAgdXJsSW50ZXJjZXB0b3I6ICQudG9TdHJpbmcoKE1ZX1JVTEUsIG1vYmFuKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9nKGlucHV0KVxuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdGFydHNXaXRoKCdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vcy8nKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC50b1N0cmluZygodXJsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmYmEub3BlbihKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZTogJ+S6keebmOaxh+W9sScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9JyArIHVybCArICc/P2Z5cGFnZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgaW5wdXQpXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5zdGFydHNXaXRoKCdodHRwczovL2RtODQudHYvdi8nKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC50b1N0cmluZygodXJsLCBNWV9SVUxFLCBtb2JhbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHUgPSAnaGlrZXI6Ly9lbXB0eT91PScgKyB1cmw7XG4gICAgICAgICAgICAgICAgICAgICAgICB1ID0gbW9iYW4gPT0gJzAnID8gdSA6IHUgKyAnI2ltbWVyc2l2ZVRoZW1lIyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBmYmEub3BlbihKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZTogTVlfUlVMRS50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+W9seeJh+ivpuaDhScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA6IE1ZX1JVTEUuZ3JvdXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlUnVsZTogTVlfUlVMRS5wcmVSdWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VzOiBNWV9SVUxFLnBhZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kUnVsZTogTVlfUlVMRS5kZXRhaWxfZmluZF9ydWxlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGlucHV0LCBNWV9SVUxFLCBtb2JhbilcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpbnB1dC5zdGFydHNXaXRoKCdodHRwczovL2RtODQudHYnKSAmJiAhaW5wdXQuc3RhcnRzV2l0aChcImh0dHBzOi8vY3VwZm94LmFwcC9cIikgJiYgIWlucHV0LnN0YXJ0c1dpdGgoXCJodHRwczovLzUxc291anUuY29tL1wiKSAmJlxuICAgICAgICAgICAgICAgICAgICAhaW5wdXQuc3RhcnRzV2l0aChcImh0dHBzOi8vd3d3LmRpYW55aW5nZ291LmNvbS9cIikgJiYgIWlucHV0LnN0YXJ0c1dpdGgoXCJodHRwczovL3d3dy53YW5kb3UubGEvXCIpICYmICFpbnB1dC5zdGFydHNXaXRoKFwiaHR0cDovL3NvdXBpYW4ueHl6L1wiKSAmJiAhaW5wdXQuc3RhcnRzV2l0aChcImh0dHA6Ly9tLnFtdHYucHJvL1wiKSAmJiAhXG4gICAgICAgICAgICAgICAgICAgIGlucHV0LnN0YXJ0c1dpdGgoXCJodHRwczovL3d3dy43MjU5OTguY29tL1wiKSAmJiAhaW5wdXQuaW5jbHVkZXMoXCJzZWFyY2hcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQudG9TdHJpbmcoKHVybCwgTVlfUlVMRSwgbW9iYW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1ID0gJ2hpa2VyOi8vZW1wdHk/dT0nICsgdXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdSA9IG1vYmFuID09ICcwJyA/IHUgOiB1ICsgJyNpbW1lcnNpdmVUaGVtZSMnO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmJhLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGU6IE1ZX1JVTEUudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICflvbHniYfor6bmg4UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwOiBNWV9SVUxFLmdyb3VwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZVJ1bGU6IE1ZX1JVTEUucHJlUnVsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlczogTVlfUlVMRS5wYWdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZFJ1bGU6IE1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9LCBpbnB1dCwgTVlfUlVMRSwgbW9iYW4pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgTVlfUlVMRSwgZ2V0SXRlbSgnYWknLCAnMCcpKSxcbiAgICAgICAgICAgIGpzOiBqcyxcbiAgICAgICAgfVxuICAgIH1dKTtcbn1cblxuaWYgKG15dXJsID09ICdob21lJykge1xuICAgIHJlZnJlc2hYNURlc2MoJzAnKVxuICAgICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL3BybycpXG59IGVsc2Uge1xuICAgIGxvYWRVcmwobXl1cmwsIE1ZX1JVTEUpO1xufSIsInNlYXJjaF91cmwiOiJoaWtlcjovL2VtcHR5IyMqKiIsImdyb3VwIjoi4pGg5o6o6I2QIiwic2VhcmNoRmluZCI6ImpzOlxudmFyIGQgPSBbXTtcbmxldCBrZXkgPSBNWV9VUkwuc3BsaXQoXCIjI1wiKVsxXTtcbmQucHVzaCh7XG4gICAgdGl0bGU6IFwi54K55oiR5byA5aeL6IGa5ZCI5pCc57SiXCIgKyBrZXksXG4gICAgdXJsOiBcImhpa2VyOi8vcGFnZS9zb3VwXCIsXG4gICAgZXh0cmE6IHtcbiAgICAgICAgcGFnZVRpdGxlOiBcIuaQnOe0olwiICsga2V5LFxuICAgICAgICBrZXk6IGtleVxuICAgIH1cbn0pO1xuXG5zZXRSZXN1bHQoZCk7IiwiZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsImRldGFpbF9maW5kX3J1bGUiOiJqczpcbmxvZyhNWV9VUkwpXG5cbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvcCcpKS5ydWxlKSIsInNkZXRhaWxfY29sX3R5cGUiOiJtb3ZpZV8xIiwic2RldGFpbF9maW5kX3J1bGUiOiIiLCJ1YSI6Im1vYmlsZSIsInByZVJ1bGUiOiJ2YXIgdWEgPSAnJztcbnJlcXVpcmUoJ2h0dHBzOi8vZ2l0Y29kZS5uZXQvcXFfMzIzOTQzNTEvZHIvLS9yYXcvbWFzdGVyL2pzL+mihOWkhOeQhi5qcycpO1xuXG5pbml0Q29uZmlnKHtcbiAgICB3YW5kb3U6IFwiYXBpLmpzb24ud2FuZG91OS54eXo6ODAzNlwiLFxuICAgIHNvdXBpYW46ICdzb3VwaWFuLnh5eicsXG4gICAgcWltYWk6ICd3d3cucW10di5wcm8nXG59KTsiLCJwYWdlcyI6Ilt7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LqM57qn6Kej5p6QXCIsXCJwYXRoXCI6XCJwXCIsXCJydWxlXCI6XCJqczpcXG5hZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICB1cGRhdGVJdGVtKCdwYXJzZXQnLCB7XFxuICAgICAgICB0aXRsZTogZ2V0SXRlbSgn5ZeF5o6iJywgJ+inhumikeWXheaOoicpLFxcbiAgICB9KTtcXG4gICAgY2xlYXJNeVZhcignd2VidXJsJyk7XFxuICAgIHB1dE15VmFyKCdibScsICcwJyk7XFxuICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJkdW9zZWxlY3RcXFwiLCBbXSk7XFxuICAgIC8vYmFjayhmYWxzZSlcXG59KSk7XFxuXFxudmFyIEJpdFRTID0gW107XFxuXFxuLy9wdXRNeVZhcihcXFwibXViYW5cXFwiLCB75ZCN56ewOifmnoHlrqLlvbHop4YnfSlcXG5cXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL3p0b29scycpKS5ydWxlKVxcblxcbnZhciB1cmwgPSAnJztcXG52YXIgaHRtbCA9ICcnO1xcblxcbnZhciBrZXlzID0gTVlfUEFSQU1TO1xcbnZhciBmcm9tID0ga2V5cy5mcm9tICE9IHVuZGVmaW5lZCA/IGtleXMuZnJvbSA6ICcnO1xcbnZhciBkdGl0bGUgPSBrZXlzLnBhZ2VUaXRsZSAhPSB1bmRlZmluZWQgPyBrZXlzLnBhZ2VUaXRsZSA6ICcnO1xcblxcblxcbmlmIChnZXRNeVZhcignd2VidXJsJywgJycpID09ICcnKSB7XFxuICAgIC8vTVlfVVJMID0gTVlfVVJMLnJlcGxhY2UoJyNpbW1lcnNpdmVUaGVtZSMnLCAnJyk7XFxuICAgIE1ZX1VSTCA9IE1ZX1VSTC5pbmNsdWRlcygnIycpID8gTVlfVVJMLnNwbGl0KCcjJylbMF0gOiBNWV9VUkw7XFxuICAgIHZhciB1ID0gZ2V0UGFyYW0oXFxcInVcXFwiKVxcbiAgICBpZiAodSA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgIHUgPSBNWV9VUkxcXG4gICAgfVxcbiAgICBsb2coJ3U6JyArIHUpO1xcbiAgICB1cmwgPSBnZXRUdXJsKHUpO1xcbiAgICAvL+mihOivu1xcbiAgICAvL2xvZygndXJsOicrdXJsKTtcXG4gICAgdmFyIHRlbXAgPSBmZXRjaCh1cmwpO1xcbiAgICB2YXIgYWwgPSBwZGZhKHRlbXAsIFxcXCJib2R5JiZhXFxcIik7XFxuICAgIGlmICh0ZW1wLnNlYXJjaCgvd2luZG93LmxvY2F0aW9uLmhyZWYvKSAhPSAtMSAmJiBhbC5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgTVlfVVJMID0gdXJsO1xcbiAgICAgICAgdmFyIHRlID0gdGVtcC5yZXBsYWNlKC8uK2hyZWY9XFxcIiguKj8pXFxcIi4rL2csICc8YSBocmVmPVxcXCIkMVxcXCI+PC9hPicpO1xcbiAgICAgICAgdXJsID0gcGQodGUsIFxcXCJhJiZocmVmXFxcIik7XFxuICAgICAgICBsb2coJ2pz6YeN5a6a5ZCROicgKyB1cmwpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgaHRtbCA9IHRlbXA7XFxuICAgIH1cXG5cXG4gICAgcHV0TXlWYXIoJ3dlYnVybCcsIHVybCk7XFxuXFxufSBlbHNlIHtcXG4gICAgdXJsID0gZ2V0TXlWYXIoJ3dlYnVybCcpO1xcbn1cXG52YXIgZHVybCA9IHVybDtcXG5sb2coJ+S6jOe6p+mhtemdojonICsgZHVybCk7XFxuXFxuaWYgKGdldEl0ZW0oJ2FpJywgJzAnKSA9PSAnMScpIHtcXG4gICAgdmFyIGxhenkgPSAkKCcnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHZhciBodG1sID0gSlNPTi5wYXJzZShyZXF1ZXN0KGlucHV0KS5tYXRjaCgvciBwbGF5ZXJfLio/PSguKj8pPC8pWzFdKVxcbiAgICAgICAgICAgIHZhciB1cmwgPSBodG1sLnVybFxcbiAgICAgICAgICAgIGlmIChodG1sLmVuY3J5cHQgPT0gJzEnKSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHVuZXNjYXBlKHVybCk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChodG1sLmVuY3J5cHQgPT0gJzInKSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHVuZXNjYXBlKGJhc2U2NERlY29kZSh1cmwpKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKC9tM3U4fG1wNC8udGVzdCh1cmwpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB1cmxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3ZpZGVvOi8vJyArIGlucHV0XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiAndmlkZW86Ly8nICsgaW5wdXRcXG4gICAgICAgIH1cXG4gICAgfSlcXG5cXG4gICAgdHJ5IHtcXG4gICAgICAgIGxvZyh1cmwpXFxuICAgICAgICBNWV9VUkwgPSAnaGlrZXI6Ly9lbXB0eSMjJyArIHVybFxcbiAgICAgICAgcmVxdWlyZShjb25maWcu6Ieq5Yqo5Yy56YWNKTtcXG4gICAgICAgIOiHquWKqOS6jOe6pyhsYXp5KTtcXG4gICAgICAgIHB1dE15VmFyKCdibScsICcxJylcXG4gICAgfSBjYXRjaCB7XFxuICAgICAgICBwdXRNeVZhcignYm0nLCAnMCcpXFxuICAgIH1cXG59XFxuXFxuXFxubG9nKCfmqKHmnb86JyArIGdldE15VmFyKCdibScsICcwJykpXFxuXFxuaWYgKGdldE15VmFyKCdibScsICcwJykgPT0gJzAnKSB7XFxuXFxuICAgIHZhciBkID0gW107XFxuICAgIE1ZX1VSTCA9IHVybFxcblxcbiAgICBmdW5jdGlvbiBnZXRUaXRsZShodG1sLCBzKSB7XFxuICAgICAgICB2YXIgdGl0bGUgPSAnJztcXG4gICAgICAgIHZhciB0aXRsZXMgPSBwZGZhKGh0bWwsIHMpO1xcbiAgICAgICAgLy9sb2codGl0bGVzKTtcXG4gICAgICAgIGlmICh0aXRsZXMubGVuZ3RoID09IDApIHtcXG4gICAgICAgICAgICByZXR1cm4gdGl0bGVcXG4gICAgICAgIH1cXG4gICAgICAgIGZvciAobGV0IHggb2YgdGl0bGVzKSB7XFxuICAgICAgICAgICAgaWYgKHguaW5jbHVkZXMoJzxmb250JykpIHtcXG4gICAgICAgICAgICAgICAgdGl0bGUgPSBwZGZoKHgsICdoMS0tZm9udCYmVGV4dCcpO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeC5pbmNsdWRlcygnPHNwYW4nKSkge1xcbiAgICAgICAgICAgICAgICB0aXRsZSA9IHBkZmgoeCwgJ2gxLS1zcGFuJiZUZXh0Jyk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdGl0bGUgPSBwZGZoKHgsICdUZXh0Jyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh0aXRsZSAhPSAnJykge1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gdGl0bGVcXG4gICAgfVxcblxcbiAgICBpZiAoaHRtbCA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgaHRtbCA9IGZldGNoUEModXJsKVxcbiAgICB9XFxuXFxuICAgIGxldCBhbGlzdCA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJmFcXFwiKTtcXG4gICAgLyppZihodG1sLnNlYXJjaCgvd2luZG93LmxvY2F0aW9uLmhyZWYvKSE9LTEmJmFsaXN0Lmxlbmd0aD09MCl7XFxuICAgICAgICBNWV9VUkw9dXJsO1xcbiAgICB2YXIgdGVtcD1odG1sLnJlcGxhY2UoLy4raHJlZj1cXFwiKC4qPylcXFwiLisvZywnPGEgaHJlZj1cXFwiJDFcXFwiPjwvYT4nKTtcXG4gICAgdXJsPXBkKHRlbXAsXFxcImEmJmhyZWZcXFwiKTtcXG4gICAgbG9nKCdqc+mHjeWumuWQkTonK3VybCk7XFxuICAgIHB1dE15VmFyKCd3ZWJ1cmwnLCB1cmwpO1xcbiAgICBodG1sID0gZmV0Y2hQQyh1cmwpO1xcbiAgICBhbGlzdCA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJmFcXFwiKTtcXG4gICAgfSovXFxuXFxuICAgIGxldCBhcnIgPSBhbGlzdC5tYXAoaXQgPT4ge1xcbiAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAvL2h0bWw6IGl0LFxcbiAgICAgICAgICAgIHRleHQ6IHBkZmgoaXQsIFxcXCJhJiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXQsIFxcXCJhJiZ0aXRsZVxcXCIpLFxcbiAgICAgICAgICAgIGhyZWY6IHBkKGl0LCBcXFwiYSYmaHJlZlxcXCIsIHVybClcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuXFxuXFxuICAgIHZhciB0aXRsZSA9IGdldFRpdGxlKGh0bWwsICdib2R5JiZoMScpO1xcbiAgICBpZiAodGl0bGUgPT0gJycpIHtcXG4gICAgICAgIHRpdGxlID0gZ2V0VGl0bGUoaHRtbCwgXFxcImJvZHkmJmgzW2NsYXNzKj0ndGl0bGUnXVxcXCIpO1xcbiAgICB9XFxuICAgIGlmICh0aXRsZSA9PSAnJykge1xcbiAgICAgICAgdGl0bGUgPSBnZXRUaXRsZShodG1sLCBcXFwiaGVhZCYmdGl0bGVcXFwiKTtcXG4gICAgfVxcbiAgICBpZiAoZHRpdGxlICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICBzZXRQYWdlVGl0bGUoZHRpdGxlKTtcXG4gICAgfSBlbHNlIGlmIChnZXRQYWdlVGl0bGUoKS5pbmNsdWRlcygn6K+m5oOFJykpIHtcXG4gICAgICAgIGlmICh0aXRsZSAhPSAnJykge1xcbiAgICAgICAgICAgIGlmICh0aXRsZS5pbmNsdWRlcygnLScpKSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUuc3BsaXQoJy0nKVswXS50cmltKClcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgc2V0UGFnZVRpdGxlKHRpdGxlKVxcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuXFxuICAgIC8vbG9nKGFycik7XFxuICAgIGxldCBkZWJ1ZyA9IGZhbHNlO1xcblxcbiAgICBmdW5jdGlvbiBjbGVhclRleHQoaXQpIHtcXG4gICAgICAgIHJldHVybiBpdC5yZXBsYWNlKC/nrKx86ZuGfOeroC9nLCBcXFwiXFxcIik7XFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gaXNNb3ZpZShpdCkge1xcbiAgICAgICAgaWYgKGl0ID09IG51bGwgfHwgaXQudGV4dCA9PSBudWxsKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKG5vZmlsZShpdCkpIHtcXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICB9XFxuICAgICAgICBsZXQgdGl0ID0gaXQudGl0bGUgfHwgXFxcIlxcXCI7XFxuICAgICAgICBpdCA9IGl0LnRleHQgfHwgXFxcIlxcXCI7XFxuICAgICAgICBpZiAoaXQgPT0gXFxcIlxcXCIgfHwgaXQubGVuZ3RoID4gOCkge1xcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8v5o6S6ZmkXFxuICAgICAgICBsZXQgcmVnID0gL1xcXFwufOmrmOa4heebtOaSrXzlhpnnnJ/mjqjojZB85b2x6ZmifOW9seinhnzok53lhYnnlLXlvbF86auY5riF55S15b2xfOesrOS4gOWto3znrKzkuozlraN856ys5LiJ5a2jfOesrOWbm+Wto3znrKzkupTlraMvO1xcbiAgICAgICAgaWYgKHRpdCAhPSBcXFwiXFxcIiAmJiAhdGl0LmluY2x1ZGVzKGl0KSB8fCByZWcudGVzdChpdCkpIHtcXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gaXQubWF0Y2goL+WOn+eUu3zlpIfnlKh86JOd5YWJfOi2hea4hXzpq5jmuIV85q2j54mHfOmfqeeJiHw0S3w0a3wxMDgwUHw3MjBQfFRDfEhEfEJEfOS4reWtly8pXFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gbm90Q2hhcHRlcihpdCkge1xcbiAgICAgICAgaWYgKGl0ID09IG51bGwgfHwgaXQudGV4dCA9PSBudWxsKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gaXQudGV4dC5tYXRjaCgvWzAtOV1cXFxcLlswLTld5YiGLyk7XFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gaXNDaGFwdGVyKGl0LCBwcmUsIG5leHQpIHtcXG4gICAgICAgIGlmIChub3RDaGFwdGVyKGl0KSkge1xcbiAgICAgICAgICAgIC8v5LyY5YWI5o6S6ZmkXFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgICAgfVxcbiAgICAgICAgLy/liKTmlq3mmK/kuI3mmK/nlLXlvbFcXG4gICAgICAgIGlmIChpc01vdmllKGl0KSkge1xcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGlzQ2hhcHRlcjAoaXQsIHByZSkgfHwgaXNDaGFwdGVyMChpdCwgbmV4dCk7XFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gZ2V0Q2hhcHRlck51bShpdCkge1xcbiAgICAgICAgaWYgKGl0ID09IG51bGwgfHwgaXQudGV4dCA9PSBudWxsKSB7XFxuICAgICAgICAgICAgcmV0dXJuIC0xO1xcbiAgICAgICAgfVxcbiAgICAgICAgaXQgPSBpdC50ZXh0IHx8IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKGl0ID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgcmV0dXJuIC0xO1xcbiAgICAgICAgfVxcbiAgICAgICAgaXQgPSBjbGVhclRleHQoaXQpO1xcbiAgICAgICAgbGV0IHJlZyA9IC9eWzAtOV0qJC87XFxuICAgICAgICBpZiAoIXJlZy50ZXN0KGl0KSkge1xcbiAgICAgICAgICAgIHJldHVybiAtMTtcXG4gICAgICAgIH1cXG4gICAgICAgIGl0ID0gcGFyc2VJbnQoaXQpO1xcbiAgICAgICAgaWYgKGlzTmFOKGl0KSkge1xcbiAgICAgICAgICAgIHJldHVybiAtMTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChpdCA+IDE5MDAgJiYgaXQgPCAyMTAwKSB7XFxuICAgICAgICAgICAgcmV0dXJuIC0xO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGl0O1xcbiAgICB9XFxuXFxuICAgIGZ1bmN0aW9uIGlzQ2hhcHRlcjAoaXQsIGJyb3RoZXIpIHtcXG4gICAgICAgIC8qaWYgKGRlYnVnKSB7XFxuICAgICAgICAgICAgbG9nKHtcXG4gICAgICAgICAgICAgICAgaXQ6IGl0LFxcbiAgICAgICAgICAgICAgICBicm90aGVyOiBicm90aGVyXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9Ki9cXG4gICAgICAgIGl0ID0gZ2V0Q2hhcHRlck51bShpdCk7XFxuICAgICAgICAvL2lmIChkZWJ1ZykgbG9nKGl0KTtcXG4gICAgICAgIGlmIChpdCA8IDApIHtcXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICB9XFxuICAgICAgICBicm90aGVyID0gZ2V0Q2hhcHRlck51bShicm90aGVyKTtcXG4gICAgICAgIC8vaWYgKGRlYnVnKSBsb2coYnJvdGhlcik7XFxuICAgICAgICBpZiAoYnJvdGhlciA8IDApIHtcXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gaXQgLSBicm90aGVyIDwgMiAmJiBpdCAtIGJyb3RoZXIgPiAtMjtcXG4gICAgfVxcblxcbiAgICBsZXQgdGZwdXNoID0gZ2V0SXRlbSgnd2VicHVzaCcsICcwJyk7XFxuXFxuICAgIGxldCBfd2ViID0gJC50b1N0cmluZygodGZwdXNoKSA9PiB7XFxuICAgICAgICBsZXQgdXJscyA9IF9nZXRVcmxzKCk7XFxuICAgICAgICBsZXQgcmVnID0gL1xcXFwuaHRtbHxcXFxcLmNzc3xcXFxcLmpzLztcXG4gICAgICAgIGZvciAobGV0IGsgaW4gdXJscykge1xcbiAgICAgICAgICAgIGlmICghcmVnLnRlc3QodXJsc1trXSkgJiYgdXJsc1trXS5tYXRjaCgvXFxcXC5tcDR8XFxcXC5tM3U4LykpIHtcXG4gICAgICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5sb2codXJsc1trXSk7XFxuICAgICAgICAgICAgICAgIC8vcmV0dXJuIGZ5X2JyaWRnZV9hcHAuZ2V0SGVhZGVyVXJsKHVybHNba10ucmVwbGFjZSgvLio/dXJsPS8sIFxcXCJcXFwiKSkgKyBcXFwiI2lnbm9yZUltZz10cnVlI1xcXCI7XFxuICAgICAgICAgICAgICAgIGlmICh0ZnB1c2ggPT0gJzAnKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnlfYnJpZGdlX2FwcC5nZXRIZWFkZXJVcmwodXJsc1trXS5yZXBsYWNlKC8uKj91cmw9LywgXFxcIlxcXCIpKSArIFxcXCIjaWdub3JlSW1nPXRydWUjXFxcIjtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBwbGF5ID0gZnlfYnJpZGdlX2FwcC5nZXRIZWFkZXJVcmwodXJsc1trXS5yZXBsYWNlKC8uKj91cmw9LywgXFxcIlxcXCIpKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3B1c2g/cHVzaHVybD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwibmFtZVxcXCI6IGRvY3VtZW50LnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ1cmxcXFwiOiBwbGF5XFxuICAgICAgICAgICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH0sIHRmcHVzaCk7XFxuXFxuICAgIGZ1bmN0aW9uIF9fd2ViKG1vZGUpIHtcXG4gICAgICAgIHJldHVybiAkLnRvU3RyaW5nKCh0ZnB1c2gpID0+IHtcXG4gICAgICAgICAgICBsZXQgdXJscyA9IF9nZXRVcmxzKCk7XFxuICAgICAgICAgICAgbGV0IHJlZyA9IC9cXFxcLmh0bWx8XFxcXC5jc3N8XFxcXC5qcy87XFxuICAgICAgICAgICAgZm9yIChsZXQgayBpbiB1cmxzKSB7XFxuICAgICAgICAgICAgICAgIGlmICghcmVnLnRlc3QodXJsc1trXSkgJiYgdXJsc1trXS5tYXRjaCgvXFxcXC5tcDR8XFxcXC5tM3U4LykpIHtcXG4gICAgICAgICAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAubG9nKHVybHNba10pO1xcbiAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gZnlfYnJpZGdlX2FwcC5nZXRIZWFkZXJVcmwodXJsc1trXS5yZXBsYWNlKC8uKj91cmw9LywgXFxcIlxcXCIpKSArIFxcXCIjaWdub3JlSW1nPXRydWUjXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZnB1c2ggPT0gJzAnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ5X2JyaWRnZV9hcHAuZ2V0SGVhZGVyVXJsKHVybHNba10ucmVwbGFjZSgvLio/dXJsPS8sIFxcXCJcXFwiKSkgKyBcXFwiI2lnbm9yZUltZz10cnVlI1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwbGF5ID0gZnlfYnJpZGdlX2FwcC5nZXRIZWFkZXJVcmwodXJsc1trXS5yZXBsYWNlKC8uKj91cmw9LywgXFxcIlxcXCIpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9wdXNoP3B1c2h1cmw9JyArIGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogZG9jdW1lbnQudGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ1cmxcXFwiOiBwbGF5XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgbW9kZSk7XFxuICAgIH1cXG5cXG4gICAgJC5leHRlbmQoe1xcbiAgICAgICAgbHdlYjogX193ZWJcXG4gICAgfSlcXG5cXG4gICAgbGV0IHdlYiA9IGdldEl0ZW0oJ3dlYicsICcwJyk7XFxuICAgIHZhciBwdXNodHlwZSA9IFsn5YiX6KGoJywgJ+WNlembhiddXFxuICAgIHZhciBwYXJzZXR5cGUgPSBbJ1dlYuWXheaOojowJywgJ+inhumikeWXheaOojoxJywgJ2Rt55uS5a2QOjInXVxcbiAgICBsb2coJ+aOqOmAgeexu+WeizonICsgcHVzaHR5cGVbcGFyc2VJbnQodGZwdXNoKV0pXFxuICAgIGxvZygn5ZeF5o6i57G75Z6LOicgKyBwYXJzZXR5cGVbcGFyc2VJbnQod2ViKV0uc3BsaXQoJzonKVswXSlcXG5cXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgICAgIGxldCB0ID0gaXQudGV4dDtcXG4gICAgICAgIGlmICghaXQuaHJlZiB8fCBpdC5ocmVmID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICB9XFxuICAgICAgICBsZXQgcHJlID0gaSA9PSAwID8gbnVsbCA6IGFycltpIC0gMV07XFxuICAgICAgICBsZXQgbmV4dCA9IGkgPT0gKGFyci5sZW5ndGggLSAxKSA/IG51bGwgOiBhcnJbaSArIDFdO1xcbiAgICAgICAgaWYgKGlzQ2hhcHRlcihpdCwgcHJlLCBuZXh0KSkge1xcbiAgICAgICAgICAgIGlmICh0ZnB1c2ggPT0gJzEnKSB7XFxuICAgICAgICAgICAgICAgIC8qdmFyIHVybHggPSBcXFwid2ViUnVsZTovL1xcXCIgKyBpdC5ocmVmICsgXFxcIkBcXFwiICsgX3dlYjtcXG4gICAgICAgICAgICAgICAgdmFyIGV4dHJheCA9IHtcXG4gICAgICAgICAgICAgICAgICAgIGpzTG9hZGluZ0luamVjdDogdHJ1ZSxcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBpdC5ocmVmLFxcbiAgICAgICAgICAgICAgICAgICAgY2xzOiAncGxheXMnLFxcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tSdWxlczogWycubTRhJywgJy5tcDMnLCAnLmZsdicsICcuYXZpJywgJy4zZ3AnLCAnLm1wZWcnLCAnLndtdicsICcubW92JywgJy5ybXZiJywgJy5naWYnLCAnLmpwZWcnLCAnLnBuZycsICcuaWNvJywgJy5zdmcnXVxcbiAgICAgICAgICAgICAgICB9OyovXFxuICAgICAgICAgICAgICAgIHZhciB1cmx4ID0gJ2hpa2VyOi8vcGFnZS9wdXNoPyZwdXNodXJsPScgKyBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgXFxcIm5hbWVcXFwiOiBnZXRQYWdlVGl0bGUoKSxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJ1cmxcXFwiOiBpdC50ZXh0ICsgJyQnICsgaXQuaHJlZixcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJjb250ZW50XFxcIjogTVlfVVJMLnRpdGxlLFxcbiAgICAgICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgICAgIHZhciBleHRyYXggPSB7XFxuICAgICAgICAgICAgICAgICAgICBpZDogaXQuaHJlZixcXG4gICAgICAgICAgICAgICAgICAgIGNsczogJ3BsYXlzJyxcXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBpZiAod2ViID09ICcwJykge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVybHggPSBcXFwid2ViUnVsZTovL1xcXCIgKyBpdC5ocmVmICsgXFxcIkBcXFwiICsgX3dlYjtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBleHRyYXggPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAganNMb2FkaW5nSW5qZWN0OiB0cnVlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdC5ocmVmLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogJ3BsYXlzJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBibG9ja1J1bGVzOiBbJy5tNGEnLCAnLm1wMycsICcuZmx2JywgJy5hdmknLCAnLjNncCcsICcubXBlZycsICcud212JywgJy5tb3YnLCAnLnJtdmInLCAnLmdpZicsICcuanBlZycsICcucG5nJywgJy5pY28nLCAnLnN2ZyddXFxuICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdlYiA9PSAnMScpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB1cmx4ID0gXFxcInZpZGVvOi8vXFxcIiArIGl0LmhyZWY7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgZXh0cmF4ID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdC5ocmVmLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogJ3BsYXlzJyxcXG4gICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2ViID09ICcyJykge1xcbiAgICAgICAgICAgICAgICAgICAgbGF6eSA9ICQoJycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvbGF6eVRvWDU/cnVsZT1kbeebkuWtkCcpLnZpZGVvWDUoKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB2YXIgdXJseCA9IGl0LmhyZWYgKyBsYXp5XFxuICAgICAgICAgICAgICAgICAgICB2YXIgZXh0cmF4ID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdC5ocmVmLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogJ3BsYXlzJyxcXG4gICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHQsXFxuICAgICAgICAgICAgICAgIHVybDogdXJseCxcXG4gICAgICAgICAgICAgICAgcGg6IHQgKyBcXFwiJFxcXCIgKyBpdC5ocmVmLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfM1xcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiBleHRyYXhcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBpZiAoZC5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgLy/ljLnphY3lpLHotKVcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICd4NScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiAnYWlqdW1wJ1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICB1cmw6IHVybCxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcIng1X3dlYnZpZXdfc2luZ2xlXFxcIixcXG4gICAgICAgICAgICBkZXNjOiBcXFwiZmxvYXQmJnNjcmVlbi0xMDBcXFwiLFxcbiAgICAgICAgICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGZsb2F0VmlkZW86IHRydWUsXFxuICAgICAgICAgICAgICAgIGNhbkJhY2s6IHRydWUsXFxuICAgICAgICAgICAgICAgIGJsb2NrUnVsZXM6IFtcXFwiLmdpZlxcXCIsIFxcXCIvYWQvXFxcIiwgXFxcImdvb2dsZVxcXCIsIFxcXCIvc2gvdG8vXFxcIiwgXFxcIi5HSUZcXFwiXVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcblxcbiAgICAgICAgdG9hc3QoXFxcIkFJ5Yy56YWN5aSx6LSl77yM5bey5L2/55SoWDXliqDovb1cXFwiKTtcXG4gICAgICAgIGxvZyhcXFwi5b2T5YmN6aG16Z2i5Zyw5Z2AOiBcXFwiICsgdXJsKVxcbiAgICAgICAgc2V0UmVzdWx0KGQpO1xcblxcbiAgICAgICAgaWYgKE1ZX1BBUkFNUy53ZWIgPT0gXFxcIuWTlOa7tOW9seinhlxcXCIpIHtcXG4gICAgICAgICAgICB2YXIgdHJ1bGUgPSByZXF1ZXN0KFxcXCJoaWtlcjovL2hvbWVA5ZOU5ZiA5b2x6KeGXFxcIilcXG4gICAgICAgICAgICAvL2xvZyh0cnVsZSlcXG5cXG4gICAgICAgICAgICBpZiAodHJ1bGUgIT0gbnVsbCkge1xcbiAgICAgICAgICAgICAgICB2YXIgdGpzb24gPSBKU09OLnBhcnNlKHRydWxlKTtcXG4gICAgICAgICAgICAgICAgdmFyIGpzciA9IHRqc29uLnByZVJ1bGU7XFxuICAgICAgICAgICAgICAgIHZhciB0aWNvbiA9IHRqc29uLmljb247XFxuICAgICAgICAgICAgICAgIC8vbG9nKGpzcilcXG4gICAgICAgICAgICAgICAgZXZhbChqc3IpXFxuICAgICAgICAgICAgICAgIC8vbG9nKGNvbmZpZy51aSlcXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbSgnYWlqdW1wJywge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICflk5Tmu7TlvbHop4YnLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiB0aWNvbixcXG4gICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9kZXRhaWxzP3J1bGU95ZOU5ZiA5b2x6KeGJnVybD1cXFwiICsgZHVybCArICcjaW1tZXJzaXZlVGhlbWUjJyxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBKU09OLnN0cmluZ2lmeShjb25maWcpLFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIC8v5Li657q/6Lev5Yqg5YiG5Ymy57q/XFxuICAgICAgICBsZXQgZDIgPSBbXTtcXG4gICAgICAgIGxldCBtdGFiID0gW107XFxuXFxuICAgICAgICBkID0gdW5pcXVlKGQpXFxuICAgICAgICAvL2xvZyhCaXRUUylcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZC5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIGQyLnB1c2goZFtpXSk7XFxuICAgICAgICAgICAgbXRhYi5wdXNoKGRbaV0ucGgpO1xcbiAgICAgICAgICAgIGlmIChpIDwgZC5sZW5ndGggLSAxKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGRbaV07XFxuICAgICAgICAgICAgICAgIGxldCB0MSA9IHBhcnNlSW50KGNsZWFyVGV4dChpdC50aXRsZSkpO1xcbiAgICAgICAgICAgICAgICBsZXQgbmV4dCA9IGRbaSArIDFdO1xcbiAgICAgICAgICAgICAgICBsZXQgdDIgPSBwYXJzZUludChjbGVhclRleHQobmV4dC50aXRsZSkpO1xcbiAgICAgICAgICAgICAgICBpZiAodDIgLSB0MSA+IDEgfHwgdDEgLSB0MiA+IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIG10YWIucHVzaCgnIycpO1xcbiAgICAgICAgICAgICAgICAgICAgZDIucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJiaWdfYmxhbmtfYmxvY2tcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGQyLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibGluZV9ibGFua1xcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgZDIucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJiaWdfYmxhbmtfYmxvY2tcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGxldCBwbGF5bCA9IG10YWIuam9pbignIycpLnJlcGxhY2UoLyMjIy9nLCAnJCQkJCQkJyk7XFxuXFxuXFxuICAgICAgICBsZXQgZnJvbSA9IFtdO1xcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwbGF5bC5zcGxpdCgnJCQkJykubGVuZ3RoOyBqKyspIHtcXG4gICAgICAgICAgICBmcm9tLnB1c2goXFxcIuaSreaUvuWIl+ihqFxcXCIgKyBbaiArIDFdKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBwdXNoID0gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogZ2V0UGFnZVRpdGxlKCksXFxuICAgICAgICAgICAgXFxcImZyb21cXFwiOiBmcm9tLmpvaW4oJyQkJCcpLFxcbiAgICAgICAgICAgIFxcXCJ1cmxcXFwiOiBwbGF5bC5yZXBsYWNlKC9cXFxcJi9nLCAn77yG77yGJyksXFxuICAgICAgICAgICAgXFxcImNvbnRlbnRcXFwiOiBNWV9SVUxFLnRpdGxlXFxuICAgICAgICB9KTtcXG4gICAgICAgIC8vbG9nKHB1c2gpO1xcblxcbiAgICAgICAgdmFyIHRjb25maWcgPSB7XFxuICAgICAgICAgICAgbmFtZTogZ2V0UGFnZVRpdGxlKCksXFxuICAgICAgICAgICAgY29udGVudDogTVlfUlVMRS50aXRsZVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgZDIudW5zaGlmdCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLmjqjpgIHmnKzpobU9PlRWQm94XFxcIixcXG4gICAgICAgICAgICB1cmw6ICQocHVzaCkubGF6eVJ1bGUoKHRjb25maWcpID0+IHtcXG4gICAgICAgICAgICAgICAgdmFyIGRsaXN0ID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcImR1b3NlbGVjdFxcXCIpO1xcbiAgICAgICAgICAgICAgICBpZiAoZGxpc3QubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXlzID0gZGxpc3QubWFwKHggPT4geC50aXRsZSArIFxcXCIkXFxcIiArIHgudXJsKS5qb2luKFxcXCIjXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgZHB1c2ggPSBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcIm5hbWVcXFwiOiB0Y29uZmlnLm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcImZyb21cXFwiOiBcXFwi5pKt5pS+5YiX6KGoXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwidXJsXFxcIjogcGxheXMsXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcImNvbnRlbnRcXFwiOiB0Y29uZmlnLmNvbnRlbnRcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgLy9sb2coZHB1c2gpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9wdXNoP3B1c2h1cmw9JyArIGVuY29kZVVSSUNvbXBvbmVudChkcHVzaCk7XFxuICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2UvcHVzaD9wdXNodXJsPScgKyBlbmNvZGVVUklDb21wb25lbnQoaW5wdXQpO1xcbiAgICAgICAgICAgIH0sIHRjb25maWcpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6ICdwdXNocycsXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuXFxuXFxuICAgICAgICBkMi51bnNoaWZ0KHtcXG4gICAgICAgICAgICB0aXRsZTogJ+mAieaOqCcsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKCd3ZWJwdXNoJywgJzAnKTtcXG5cXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbSgnc3B1c2gnLCB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+WNleaOqCcsXFxuICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICBpZiAoZmluZEl0ZW0oJ2RzZWxlY3QnKS5leHRyYS5tb2RlID09ICdvcGVuJykge1xcbiAgICAgICAgICAgICAgICAgICAgdG9hc3QoJ+mAieaOqOaooeW8j+WFs+mXrScpO1xcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcImR1b3NlbGVjdFxcXCIsIFtdKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgIGxldCBJZHMgPSAoZmluZEl0ZW1zQnlDbHMoJ3BsYXlzJykpLm1hcChpdCA9PiBpdC5leHRyYS5pZCk7XFxuICAgICAgICAgICAgICAgIElkcy5mb3JFYWNoKHggPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gZmluZEl0ZW0oeCkudGl0bGU7XFxuXFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHgsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQubXNtKHRpdGxlLCB4KSxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gZmluZEl0ZW0oJ2RzZWxlY3QnKS50aXRsZTtcXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbSgnZHNlbGVjdCcsIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBg4oCc4oCc4oCd4oCdPHNwYW4gc3R5bGU9XFxcImNvbG9yOiM0NjgyQjRcXFwiPmAgKyB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kZTogJ29wZW4nXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKCdwdXNocycsIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5o6o6YCB6YCJ5LitPT5UVkJveCcsXFxuICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICB0b2FzdCgn6YCJ5o6o5qih5byP5byA5ZCvJylcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogJ2RzZWxlY3QnLFxcbiAgICAgICAgICAgICAgICAnbW9kZSc6ICdjbG9zZSdcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcblxcblxcbiAgICAgICAgZDIudW5zaGlmdCh7XFxuICAgICAgICAgICAgdGl0bGU6IChnZXRJdGVtKCd3ZWJwdXNoJywgJzAnKSA9PSAnMScgPyAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcIiMwMEZGMDBcXFwiPuWNleaOqDwvZm9udD4nIDogJ+WNleaOqCcpLFxcbiAgICAgICAgICAgIHVybDogYGhpa2VyOi8vZW1wdHlAbGF6eVJ1bGU9LmpzOmdldEl0ZW0oJ3dlYnB1c2gnLCcwJyk9PScxJz9zZXRJdGVtKCd3ZWJwdXNoJywnMCcpOnNldEl0ZW0oJ3dlYnB1c2gnLCcxJyk7cmVmcmVzaFBhZ2UoKTsndG9hc3Q6Ly/liIfmjaLmiJDlip/vvIEnYCxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiAnc3B1c2gnLFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcblxcbiAgICAgICAgZDIuc3BsaWNlKDMsIDAsIHtcXG4gICAgICAgICAgICB0aXRsZTogcGFyc2V0eXBlW3BhcnNlSW50KHdlYildLnNwbGl0KCc6JylbMF0sXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGluZikgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoZ2V0SXRlbSgnd2VicHVzaCcsICcwJykgPT0gJzEnIHx8IGZpbmRJdGVtKCdkc2VsZWN0JykuZXh0cmEubW9kZSA9PSAnb3BlbicpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ljZXmjqh86YCJ5o6o5qih5byP5byA5ZCv5peg5rOV5L+u5pS5J1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGxldCBhbGxfY29scyA9IGluZlxcbiAgICAgICAgICAgICAgICBsZXQgY29sID0gc3RvcmFnZTAuZ2V0SXRlbSgn5ZeF5o6iJywgJ1dlYuWXheaOoicpO1xcbiAgICAgICAgICAgICAgICBsZXQg5ZeF5o6iID0gYWxsX2NvbHMubWFwKChpdCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0LnNwbGl0KCc6JylbMF0gPT09IGNvbCA/ICfinqHvuI8nICsgaXQgOiBpdDtcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGxldCB0aXBzID0gJ+ivt+mAieaLqeWXheaOouaooeW8jyc7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkKOWXheaOoiwgMSwgdGlwcykuc2VsZWN0KCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZSgv4p6h77iPL2csICcnKTtcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oJ+WXheaOoicsIGlucHV0LnNwbGl0KCc6JylbMF0pO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGUgPSBpbnB1dC5zcGxpdCgnOicpWzFdXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKCd3ZWInLCBtb2RlKVxcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9sZElkcyA9IChmaW5kSXRlbXNCeUNscygncGxheXMnKSkubWFwKGl0ID0+IGl0LmV4dHJhLmlkKTtcXG4gICAgICAgICAgICAgICAgICAgIG9sZElkcy5mb3JFYWNoKHggPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2RlID09ICcwJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHgsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcIndlYlJ1bGU6Ly9cXFwiICsgeCArIFxcXCJAXFxcIiArICQubHdlYignMCcpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc0xvYWRpbmdJbmplY3Q6IHRydWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHgsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiAncGxheXMnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrUnVsZXM6IFsnLm00YScsICcubXAzJywgJy5mbHYnLCAnLmF2aScsICcuM2dwJywgJy5tcGVnJywgJy53bXYnLCAnLm1vdicsICcucm12YicsICcuZ2lmJywgJy5qcGVnJywgJy5wbmcnLCAnLmljbycsICcuc3ZnJ11cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2RlID09ICcxJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHgsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcInZpZGVvOi8vXFxcIiArIHgsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB4LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsczogJ3BsYXlzJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2RlID09ICcyJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHgsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogeCArICQoJycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvbGF6eVRvWDU/cnVsZT1kbeebkuWtkCcpLnZpZGVvWDUoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogeCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM6ICdwbGF5cycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKCdwYXJzZScsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogc3RvcmFnZTAuZ2V0SXRlbSgn5ZeF5o6iJywgJ1dlYuWXheaOoicpLFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5YiH5ZeF5o6i5pa55byP5Li6OicgKyBpbnB1dDtcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9LCBwYXJzZXR5cGUpLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiAncGFyc2UnLFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcblxcbiAgICAgICAgZDIudW5zaGlmdCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08c21hbGw+4pqh77iPJyArIGR1cmwgKyAnPC9zbWFsbD4nLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgICAgICAgICAgdXJsOiBkdXJsLFxcbiAgICAgICAgfSk7XFxuXFxuXFxuICAgICAgICBpZiAoTVlfUEFSQU1TLndlYiA9PSBcXFwi5ZOU5ru05b2x6KeGXFxcIikge1xcbiAgICAgICAgICAgIHZhciB0cnVsZSA9IHJlcXVlc3QoXFxcImhpa2VyOi8vaG9tZUDlk5TlmIDlvbHop4ZcXFwiKVxcbiAgICAgICAgICAgIC8vbG9nKHRydWxlKVxcblxcbiAgICAgICAgICAgIGlmICh0cnVsZSAhPSBudWxsKSB7XFxuICAgICAgICAgICAgICAgIHZhciB0anNvbiA9IEpTT04ucGFyc2UodHJ1bGUpO1xcbiAgICAgICAgICAgICAgICB2YXIganNyID0gdGpzb24ucHJlUnVsZTtcXG4gICAgICAgICAgICAgICAgdmFyIHRpY29uID0gdGpzb24uaWNvbjtcXG4gICAgICAgICAgICAgICAgLy9sb2coanNyKVxcbiAgICAgICAgICAgICAgICBldmFsKGpzcilcXG4gICAgICAgICAgICAgICAgLy9sb2coY29uZmlnLnVpKVxcbiAgICAgICAgICAgICAgICBkMi51bnNoaWZ0KHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5ZOU5ru05b2x6KeGJyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogdGljb24sXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvZGV0YWlscz9ydWxlPeWTlOWYgOW9seinhiZ1cmw9XFxcIiArIGR1cmwgKyAnI2ltbWVyc2l2ZVRoZW1lIycsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZzogSlNPTi5zdHJpbmdpZnkoY29uZmlnKSxcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuXFxuXFxuXFxuICAgICAgICB2YXIgZDMgPSBbXTtcXG4gICAgICAgIGlmIChnZXRJdGVtKCdhaScsICcwJykgPT0gJzEnKSB7XFxuXFxuICAgICAgICAgICAgZDMucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBnZXRQYWdlVGl0bGUoKSxcXG4gICAgICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9waWMzLjU4Y2RuLmNvbS5jbi9ub3dhdGVyL3dlYmltL2JpZy9uX3YyODFkNjBiZDEyN2U4NGNkMjg4MDdkNTExNDNlYWE2MWYuZ2lmJyxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyJyxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGlkOiAnZDMnLFxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBzZXRSZXN1bHQoZDMpXFxuICAgICAgICB9XFxuXFxuICAgICAgICBpZiAoZmluZEl0ZW0oJ2QzJykgIT0gbnVsbCkge1xcbiAgICAgICAgICAgIGFkZEl0ZW1BZnRlcignZDMnLCBkMik7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHNldFJlc3VsdChkMilcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuiBmuWQiOaQnOe0olwiLFwicGF0aFwiOlwicHJvXCIsXCJydWxlXCI6XCJ2YXIgZCA9IFtdO1xcblxcbnZhciBnZXRSYW5nZUNvbG9ycyA9IGZ1bmN0aW9uKCkge8KgwqDCoMKgwqDCoMKgXFxuICAgIHJldHVybiAnIycgKyAoJzAwMDAwJyArIChNYXRoLnJhbmRvbSgpICogMHgxMDAwMDAwIDw8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTvCoMKgwqDCoMKgXFxufVxcblxcbnZhciBpbWdzID0gWydodHRwczovL3d3dy53YW5kb3UubGEvZmF2aWNvbi5pY28nLCAnaHR0cHM6Ly9iai5iY2Vib3MuY29tL2JhaWR1LXJtYi12aWRlby1jb3Zlci0xLzc0ZjEzZDA2MjBmNzJiMDBhNGU5YjY3ZjNkYWI5NmQxLnBuZycsICdodHRwczovL2JqLmJjZWJvcy5jb20vYmFpZHUtcm1iLXZpZGVvLWNvdmVyLTEvNzNiOGNmNmFlMDc4MzAzYTU3MmU3NmM3OWRkOTNlN2EucG5nJywgJ2h0dHBzOi8vd3d3LnFtdHYucHJvL3Byb2ZpbGUvdXBsb2FkL2Zhdmljb24ucG5nJywgJ2h0dHBzOi8vd3d3LnRic2R5LmNvbS9pbWcvbXJzdy9jb21tb24vZmF2aWNvbi5pY28nXVxcblxcbnZhciBuYW1lcz1bJ+ixjOixhicsICfojLbmna/ni5AnLCAn5pCc54mHJywgJ+mdkum6picsICflnJ/mi6jpvKAnXTtcXG5cXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgIG5hbWVzLm1hcCgoeCwgaSkgPT4ge1xcbiAgICAgICAgdmFyIGl4ID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ3BhZ2VfaW5kZXgnLCAwKTtcXG4gICAgICAgIHZhciB0aXRsZSA9IGl4ID09IGkgPyBg4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9JHtnZXRSYW5nZUNvbG9ycygpfT5gICsgeCArICc8L2ZvbnQ+JyA6IHg7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2ljb25fNScsXFxuICAgICAgICAgICAgaW1nOiBpbWdzW2ldLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaSkgPT4ge1xcbiAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcigncGFnZV9pbmRleCcsIGkpXFxuICAgICAgICAgICAgICAgIC8vY2xlYXJNeVZhcignc291JylcXG4gICAgICAgICAgICAgICAgY2xlYXJNeVZhcigncGFnZScpXFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ2NmcGFnZScpXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WIh+aNouaIkOWKnydcXG4gICAgICAgICAgICB9LCBpKSxcXG4gICAgICAgIH0pXFxuICAgIH0pXFxuXFxuICAgIHZhciB3ZWIgPSBnZXRJdGVtKCd3ZWInLCAnMCcpXFxuICAgIC8vbG9nKHdlYilcXG4gICAgdmFyIHRpdGxlID0gJydcXG4gICAgc3dpdGNoICh3ZWIpIHtcXG4gICAgICAgIGNhc2UgJzAnOlxcbiAgICAgICAgICAgIHRpdGxlID0gJ1dlYuWXheaOoidcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgJzEnOlxcbiAgICAgICAgICAgIHRpdGxlID0gJ+inhumikeWXheaOoidcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgJzInOlxcbiAgICAgICAgICAgIHRpdGxlID0gJ2Rt55uS5a2QJ1xcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICB9XFxuICAgIHNldEl0ZW0oJ+WXheaOoicsIHRpdGxlKVxcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICforr7nva4nLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3NldHRpbmdcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbidcXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6IFxcXCLpobXpnaLliqDovb06XFxcIiArIGdldEl0ZW0oJ2hvbWUnLCAn5YWzJyksXFxuICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIGlmIChnZXRJdGVtKCdob21lJywgJ+WFsycpID09ICflhbMnKSB7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oJ2hvbWUnLCAn5byAJylcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKCdob21lJywgJ+WFsycpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiZmxleF9idXR0b25cXFwiXFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgdmFyIHdlYiA9IGdldEl0ZW0oJ3dlYicsICcwJylcXG4gICAgICAgICAgICBzd2l0Y2ggKHdlYikge1xcbiAgICAgICAgICAgICAgICBjYXNlICcwJzpcXG4gICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oJ3dlYicsICcxJylcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICBjYXNlICcxJzpcXG4gICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oJ3dlYicsICcyJylcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICBjYXNlICcyJzpcXG4gICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oJ3dlYicsICcwJylcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJmbGV4X2J1dHRvblxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiAncGFyc2V0J1xcbiAgICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAgICB0aXRsZTogJ+aooeadvzonICsgKGdldEl0ZW0oJ2FpJywgJzAnKSA9PSAnMCcgPyAn5YWz6ZetJyA6ICflvIDlkK8nKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiZmxleF9idXR0b25cXFwiLFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICBpZiAoZ2V0SXRlbSgnYWknLCAnMCcpID09ICcwJykge1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKCdhaScsICcxJylcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKCdhaScsICcwJylcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6ICdhaW1iJ1xcbiAgICAgICAgfVxcbiAgICB9KTtcXG59XFxuXFxuXFxudmFyIHJ1bGVuYW1lPU1ZX1JVTEUudGl0bGU7XFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICBcXG4gICAgbGV0IHtzZWFyY2h3fT0kLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90b29sP3J1bGU9XFxcIiArIHJ1bGVuYW1lKTtcXG4gICAgXFxuICAgIHZhciBzY29uZmlnID0ge1xcbiAgICAgICAgaGlzdG9yeTogZmFsc2UsIC8v5Y6G5Y+yXFxuICAgICAgICBoaXN0c2hvdzogMTAsIC8v5L+d55WZMTDkuKpcXG4gICAgICAgIHN1Z2dlc3Q6IGZhbHNlLCAvL+W7uuiurlxcbiAgICB9XFxuICAgIFxcbiAgICBcXG4gICAgdmFyIHNmaWcgPSBzdG9yYWdlMC5nZXRJdGVtKCdzY29uZmlnJywgc2NvbmZpZyk7XFxuICAgICAgICAgXFxuICAgIHNlYXJjaHcoZCwge1xcbiAgICAgICAgc3VnOnNmaWcuc3VnZ2VzdD9zZmlnLnN1Z2dlc3Q6ZmFsc2UsXFxuICAgICAgICBoaXN0b3J5OiBzZmlnLmhpc3Rvcnk/c2ZpZy5oaXN0b3J5OmZhbHNlLFxcbiAgICAgICAgc2hvdzogc2ZpZy5oaXN0c2hvdz9zZmlnLmhpc3RzaG93OjEwXFxuICAgIH0pXFxuICAgIFxcbiAgICBcXG4gICAgXFxuICAgIGFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJzb3VcXFwiKTtcXG4gICAgfSkpO1xcblxcbiAgICBhZGRMaXN0ZW5lcihcXFwib25SZWZyZXNoXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJzb3VcXFwiKTtcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcImR1cmxcXFwiKTtcXG4gICAgICAgIGNsZWFyTXlWYXIoJ2NmcGFnZScpXFxuICAgIH0pKTtcXG59XFxuXFxubGV0IHMgPSBnZXRNeVZhcihcXFwic291XFxcIiwgXFxcIlxcXCIpO1xcbmlmKHMhPVxcXCJcXFwiKXtcXG4gICAgbGV0IG51bT0xMDtcXG4kLnNlYXJjaHdvcmRzLmFkZERhdGEocywgcnVsZW5hbWUsbnVtKTtcXG59XFxuXFxubGV0IHIgPSBcXFwiXFxcIjtcXG5cXG52YXIgaW5kZXggPSBOdW1iZXIoc3RvcmFnZTAuZ2V0TXlWYXIoJ3BhZ2VfaW5kZXgnLCAwKSlcXG5sZXQgbmV4dGluZGV4PWluZGV4KzE7XFxuXFxuXFxudHJ5IHtcXG4gICAgc3dpdGNoIChwYXJzZUludChpbmRleCkpIHtcXG4gICAgICAgIGNhc2UgMDpcXG4gICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL3dhbmRvdScpKS5ydWxlKVxcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgY2FzZSAxOlxcbiAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvY3VwZm94JykpLnJ1bGUpXFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICBjYXNlIDI6XFxuICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9zb3VwaWFuJykpLnJ1bGUpXFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICBjYXNlIDM6XFxuICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9xaW1haXR2JykpLnJ1bGUpXFxuXFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICBjYXNlIDQ6XFxuICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS90YnNkeScpKS5ydWxlKVxcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICB9XFxufSBjYXRjaChlKSB7XFxuICAgIC8vc2V0SXRlbSgnaG9tZScsICflhbMnKVxcbiAgICBpZihpbmRleD40KXtcXG4gICAgICAgIG5leHRpbmRleD0wO1xcbiAgICB9XFxuICAgIHRvYXN0KG5hbWVzW051bWJlcihzdG9yYWdlMC5nZXRNeVZhcigncGFnZV9pbmRleCcsIDApKV0rYOWPkeeUn+mUmeivr++8jOmUmeivr+S/oeaBrzoke2UubWVzc2FnZX1gKTtcXG4gICAgbG9nKG5hbWVzW051bWJlcihzdG9yYWdlMC5nZXRNeVZhcigncGFnZV9pbmRleCcsIDApKV0rYOWPkeeUn+mUmeivr++8jOmUmeivr+S/oeaBrzoke2UubWVzc2FnZX1gKTtcXG4gICAgLy9zdG9yYWdlMC5wdXRNeVZhcigncGFnZV9pbmRleCcsIG5leHRpbmRleCk7XFxuICAgIC8vcmVmcmVzaFBhZ2UoKTtcXG59XFxuXFxuXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5bel5YW3XCIsXCJwYXRoXCI6XCJ0b29sXCIsXCJydWxlXCI6XCJqczpcXG5mdW5jdGlvbiB3cmFwKHRleHQsIHMpIHtcXG4gICAgcmV0dXJuIHRleHQuaW5jbHVkZXMoXFxcIuKAnOKAnOKAneKAnVxcXCIpID8gdGV4dCA6IFxcXCLigJzigJzigJ3igJ1cXFwiICsgdGV4dC5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcIjxlbT58PC9lbT5cXFwiLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIikucmVwbGFjZShuZXcgUmVnRXhwKHMsIFxcXCJnXFxcIiksIFxcXCI8c3Ryb25nPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6ICMxRTkwRkZcXFxcXFxcIj5cXFwiICsgcyArIFxcXCI8L3NwYW4+PC9zdHJvbmc+XFxcIilcXG59XFxuXFxuZnVuY3Rpb24gd3JhcDEodGV4dCwgcykge1xcbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcIjxlbT58PC9lbT5cXFwiLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIikucmVwbGFjZShuZXcgUmVnRXhwKHMsIFxcXCJnXFxcIiksIFxcXCI8c3Ryb25nPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6ICMxRTkwRkZcXFxcXFxcIj5cXFwiICsgcyArIFxcXCI8L3NwYW4+PC9zdHJvbmc+XFxcIilcXG59XFxuXFxuZnVuY3Rpb24gcmVtb3ZlaHRtbCh0ZXh0KSB7XFxuICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoLzxbXjxdKz8+L2csICcnKVxcbn1cXG5cXG5mdW5jdGlvbiBtZXJnZSh0ZXh0LCBzLCBtKSB7XFxuICAgIGlmIChtID09IDApIHtcXG4gICAgICAgIHRleHQgPSAn4oCc4oCc4oCd4oCdJyArIHRleHQgKyAnLScgKyBcXFwiPHN0cm9uZz48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiAjRkY1NzMzXFxcXFxcXCI+XFxcIiArIHMgKyBcXFwiPC9zcGFuPjwvc3Ryb25nPlxcXCJcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHRleHQgPSB0ZXh0ICsgJy0nICsgXFxcIjxzdHJvbmc+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjogI0ZGNTczM1xcXFxcXFwiPlxcXCIgKyBzICsgXFxcIjwvc3Bhbj48L3N0cm9uZz5cXFwiXFxuICAgIH1cXG4gICAgcmV0dXJuIHRleHRcXG59XFxuXFxuZnVuY3Rpb24gc2V0UGFnZUQoZCwgcGFnZSwgcHRhZywgdGl0bGVzLCBjb2xvcikge1xcbiAgICB2YXIgcGFnZWQgPSBnZXRNeVZhcihwdGFnLCBcXFwiMFxcXCIpO1xcbiAgICB0aXRsZXMubWFwKCh4LCBpKSA9PiB7XFxuICAgICAgICB2YXIgdGl0bGUgPSBOdW1iZXIocGFnZWQpID09IGkgPyBcXFwi4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9XFxcIiArIGNvbG9yICsgXFxcIj5cXFwiICsgeCArIFxcXCI8L2ZvbnQ+PC9iPlxcXCIgOiBgJHt4fWA7XFxuICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMicsXFxuICAgICAgICAgICAgICAgIHVybDogaSArICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHB0YWcpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHB0YWcsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ2NmcGFnZScpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICB9LCBwdGFnKSxcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICB9KVxcbiAgICByZXR1cm4gZ2V0TXlWYXIocHRhZywgXFxcIjBcXFwiKVxcbn1cXG5cXG4vL3VybOino+aekFxcbmZ1bmN0aW9uIHVybFBhcnNlKHUpIHtcXG4gICAgdmFyIGRpY3QgPSB7fVxcbiAgICBkaWN0LlNvdXJjZSA9IHU7XFxuICAgIGxldCBwYXJhbXMgPSAodXJsKSA9PiB7XFxuICAgICAgICBsZXQgcXVlcnlQYXJhbXMgPSB7fTtcXG4gICAgICAgIGxldCByZWcgPSAvKFtePz0mXSspPShbXj89Jl0rKS9nO1xcbiAgICAgICAgdXJsLnJlcGxhY2UocmVnLCBmdW5jdGlvbigpIHtcXG4gICAgICAgICAgICBxdWVyeVBhcmFtc1thcmd1bWVudHNbMV1dID0gYXJndW1lbnRzWzJdO1xcbiAgICAgICAgfSlcXG4gICAgICAgIHJldHVybiBxdWVyeVBhcmFtc1xcbiAgICB9XFxuICAgIHZhciBqYXZhVXJsID0gSmF2YUltcG9ydGVyKGphdmEubmV0LlVSTCk7XFxuICAgIHdpdGgoamF2YVVybCkge1xcbiAgICAgICAgdmFyIHVybCA9IG5ldyBVUkwodSk7XFxuICAgICAgICBkaWN0LlByb3RvY29sID0gdXJsLmdldFByb3RvY29sKCk7XFxuICAgICAgICBkaWN0Lkhvc3QgPSB1cmwuZ2V0SG9zdCgpO1xcbiAgICAgICAgZGljdC5Qb3J0ID0gdXJsLmdldFBvcnQoKTtcXG4gICAgICAgIGRpY3QuRmlsZSA9IHVybC5nZXRGaWxlKCk7XFxuICAgICAgICBkaWN0LlBhdGggPSB1cmwuZ2V0UGF0aCgpO1xcbiAgICAgICAgZGljdC5SZWYgPSB1cmwuZ2V0UmVmKCk7XFxuICAgICAgICBkaWN0Lkhvc3RzID0gYCR7dXJsLmdldFByb3RvY29sKCl9Oi8vJHt1cmwuZ2V0SG9zdCgpfWBcXG4gICAgfVxcbiAgICBkaWN0LlBhcmFtcyA9IHBhcmFtcyh1KTtcXG4gICAgcmV0dXJuIGRpY3Q7XFxufVxcblxcblxcbi8vanNvbuWvueixoei9rOafpeivouWtl+espuS4slxcbk9iamVjdC5Ub1BhcmFtcyA9IGZ1bmN0aW9uKCkge1xcbiAgICB2YXIganNvbiA9IGFyZ3VtZW50c1swXTtcXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGpzb24pLm1hcChrZXkgPT4ga2V5ICsgJz0nICsganNvbltrZXldKS5qb2luKCcmJyk7XFxufVxcblxcblxcbi8v5pCc57Si6KGl5YWoXFxuZnVuY3Rpb24g5pCc57Si5bu66K6uKGFyciwgc2V0dGluZykge1xcbiAgICAkLmV4dGVuZCh7XFxuICAgICAgICBzZWFyY2h3b3Jkczoge1xcbiAgICAgICAgICAgIGFkZERhdGE6IGZ1bmN0aW9uKG5hbWUsIHJ1bGVfbmFtZSwgbnVtKSB7XFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ3BhZ2UnKVxcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKFxcXCJjZnBhZ2VcXFwiKVxcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKFxcXCJkdXJsXFxcIilcXG4gICAgICAgICAgICAgICAgLy9sb2cobmFtZSlcXG4gICAgICAgICAgICAgICAgbGV0IGxvY2FsRGF0YSA9IHJlcXVlc3QoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvJyArIHJ1bGVfbmFtZSArICct5pCc57Si6K6w5b2VLmpzb24nKTtcXG4gICAgICAgICAgICAgICAgaWYgKCFsb2NhbERhdGEpIGxvY2FsRGF0YSA9IFxcXCJbXVxcXCI7XFxuICAgICAgICAgICAgICAgIGxldCBsaXNoaSA9IEpTT04ucGFyc2UobG9jYWxEYXRhKTtcXG4gICAgICAgICAgICAgICAgbGV0IGNjYyA9IGxpc2hpLmluZGV4T2YobmFtZSk7XFxuICAgICAgICAgICAgICAgIGlmIChjY2MgPiAtMSkge1xcbiAgICAgICAgICAgICAgICAgICAgbGlzaGkuc3BsaWNlKGNjYywgMSlcXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgbGlzaGkucHVzaChuYW1lKTtcXG5cXG4gICAgICAgICAgICAgICAgbGlzaGkgPSBsaXNoaS5zbGljZSgtbnVtKTtcXG4gICAgICAgICAgICAgICAgLy9sb2cobGlzaGkpXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS8nICsgcnVsZV9uYW1lICsgJy3mkJzntKLorrDlvZUuanNvbicsIEpTT04uc3RyaW5naWZ5KGxpc2hpKSk7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBnZXREYXRhOiBmdW5jdGlvbihydWxlX25hbWUpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHJlcyA9IHJlcXVlc3QoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvJyArIHJ1bGVfbmFtZSArICct5pCc57Si6K6w5b2VLmpzb24nKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKVxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgZGVsRGF0YTogZnVuY3Rpb24oaW5kZXgsIHJ1bGVfbmFtZSkge1xcbiAgICAgICAgICAgICAgICBsZXQgbG9jYWxEYXRhID0gdGhpcy5nZXREYXRhKHJ1bGVfbmFtZSkucmV2ZXJzZSgpO1xcbiAgICAgICAgICAgICAgICAvL2xvZyhsb2NhbERhdGEpXFxuICAgICAgICAgICAgICAgIGlmIChsb2NhbERhdGEubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgLy9sb2coaW5kZXgpXFxuICAgICAgICAgICAgICAgICAgICBsb2NhbERhdGEuc3BsaWNlKGluZGV4LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsRGF0YS5yZXZlcnNlKCk7XFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvJyArIHJ1bGVfbmFtZSArICct5pCc57Si6K6w5b2VLmpzb24nLCBKU09OLnN0cmluZ2lmeShsb2NhbERhdGEpKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfSlcXG5cXG4gICAgdmFyIHJ1bGVfbmFtZSA9IE1ZX1JVTEUudGl0bGU7XFxuICAgIGxldCBudW0gPSBzZXR0aW5nLnNob3cgIT0gdW5kZWZpbmVkID8gc2V0dGluZy5zaG93IDogMztcXG4gICAgbGV0IHN1ZyA9IHNldHRpbmcuc3VnICE9IHVuZGVmaW5lZCA/IHNldHRpbmcuc3VnIDogZmFsc2U7XFxuICAgIHZhciBrZXkgPSBnZXRNeVZhcihcXFwic291XFxcIiwgXFxcIlxcXCIpXFxuICAgIGlmIChzZXR0aW5nLmhpc3RvcnkgPT0gdHJ1ZSkge1xcbiAgICAgICAgYXJyLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBgJHtrZXkhPVxcXCJcXFwiPyc8c21hbGw+JytrZXkrJzwvc21hbGw+JzonPGI+5Y6G5Y+y6K6w5b2VPC9iPid9YCxcXG4gICAgICAgICAgICBkZXNjOiAnPGI+8J+ThFxcXFx0XFxcXHQ8L2I+JyxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL2kyLjEwMDAyNC54eXovMjAyMy8wNi8xMC9tZDN2dWkud2VicCcsXFxuICAgICAgICAgICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5JykucnVsZSgocnVsZV9uYW1lLCBudW0pID0+IHtcXG4gICAgICAgICAgICAgICAgc2V0UGFnZVRpdGxlKCfljoblj7LorrDlvZU6JyArIG51bSlcXG4gICAgICAgICAgICAgICAgdmFyIGQgPSBbXTtcXG4gICAgICAgICAgICAgICAgbGV0IGxvY2FsRGF0YSA9IHJlcXVlc3QoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvJyArIHJ1bGVfbmFtZSArICct5pCc57Si6K6w5b2VLmpzb24nKTtcXG4gICAgICAgICAgICAgICAgaWYgKCFsb2NhbERhdGEpIGxvY2FsRGF0YSA9IFxcXCJbXVxcXCI7XFxuICAgICAgICAgICAgICAgIGxldCBsaXNoaSA9IEpTT04ucGFyc2UobG9jYWxEYXRhKS5zbGljZSgtbnVtKS5yZXZlcnNlKCk7XFxuICAgICAgICAgICAgICAgIC8vbG9nKGxpc2hpKVxcbiAgICAgICAgICAgICAgICAvL2xvZyhsb2NhbERhdGEpXFxuICAgICAgICAgICAgICAgIGNvbmZpZy5zdWcgPSBsaXNoaTtcXG4gICAgICAgICAgICAgICAgaW5pdENvbmZpZyh7XFxuICAgICAgICAgICAgICAgICAgICBzdWc6IGNvbmZpZy5zdWdcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIC8vbG9nKGNvbmZpZy5zdWcpXFxuICAgICAgICAgICAgICAgIGNvbmZpZy5zdWcubWFwKCh4LCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBg4oCc4oCc4oCd4oCdPHNtYWxsPiR7eH08L3NtYWxsPmAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh4LCBydWxlX25hbWUsIG51bSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwic291XFxcIiwgeCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuc2VhcmNod29yZHMuYWRkRGF0YSh4LCBydWxlX25hbWUsIG51bSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2soKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHgsIHJ1bGVfbmFtZSwgbnVtKSwgLy8naGlrZXI6Ly9zZWFyY2g/cz0nICsgeCArICcmcnVsZT0nICsgcnVsZV9uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiZmxleF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5Yig6ZmkJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh4LCBydWxlX25hbWUsIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLnNlYXJjaHdvcmRzLmRlbERhdGEoaSwgcnVsZV9uYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtKCdjbHNpZCcgKyBpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB4LCBydWxlX25hbWUsIGkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogJ2Nsc2lkJyArIGksXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBg4oCc4oCc4oCd4oCdPHNtYWxsPua4hemZpOWOhuWPsuiusOW9lTwvc21hbGw+YCxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgocnVsZV9uYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRlc3QgPSAkKFxcXCLmmK/lkKbnoa7orqTvvJ9cXFwiKS5jb25maXJtKChydWxlX25hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlLycgKyBydWxlX25hbWUgKyAnLeaQnOe0ouiusOW9lS5qc29uJywgJycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5a6M5oiQXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBydWxlX25hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0XFxuICAgICAgICAgICAgICAgICAgICB9LCBydWxlX25hbWUpLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBcXFwiI3NcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pXFxuXFxuICAgICAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgICAgICAgICB9LCBydWxlX25hbWUsIG51bSksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiAnMTNpbnB1dCcsXFxuICAgICAgICAgICAgICAgIC8vY2xzOiBcXFwiI3NcXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgfVxcbiAgICBpZiAoc3VnKSB7XFxuICAgICAgICBhcnIucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLmkJzntKJcXFwiLFxcbiAgICAgICAgICAgIHVybDogJC50b1N0cmluZygocnVsZV9uYW1lLCBudW0pID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInNvdVxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgJC5zZWFyY2h3b3Jkcy5hZGREYXRhKGlucHV0LCBydWxlX25hbWUsIG51bSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSwgcnVsZV9uYW1lLCBudW0pLFxcbiAgICAgICAgICAgIC8vJ1xcXCJoaWtlcjovL3NlYXJjaD9zPVxcXCIgKyBpbnB1dCArIFxcXCImcnVsZT1cXFwiK01ZX1JVTEUudGl0bGUgJyxcXG4gICAgICAgICAgICBkZXNjOiBcXFwi6K+36L6T5YWl5YWz6ZSu6K+N77yM5bC96YeP5bCR5a2X5LiN6KaB5aSa5a2XXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAvL2RlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcInNvdVxcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U6ICQudG9TdHJpbmcoKHJ1bGVfbmFtZSwgc2V0dGluZykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgLy9wdXRNeVZhcihcXFwic291XFxcIiwgaW5wdXQpXFxuICAgICAgICAgICAgICAgICAgICBsZXQgc3VnID0gY29uZmlnLnN1ZyB8fCBbXTtcXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgaW4gc3VnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbShzdWdbaV0pO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0ID09ICcnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbUJ5Q2xzKFxcXCIjc1xcXCIpXFxuICAgICAgICAgICAgICAgICAgICB9O1xcblxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0ID09ICfmuIXpmaTmkJzntKLorrDlvZUnKSB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvJyArIHJ1bGVfbmFtZSArICct5pCc57Si6K6w5b2VLmpzb24nLCAnJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdENvbmZpZyh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1ZzogW2lucHV0XVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHAuZmV0Y2goYGh0dHBzOi8vd3d3LmRvdWJhbi5jb20vai9zZWFyY2hfc3VnZ2VzdD9kZWJ1Zz0mcT0ke2lucHV0fWAsIHt9KS5zdWNjZXNzKGRhdGEgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2cgPSBKU09OLnBhcnNlKGRhdGEpLndvcmRzO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xvZyhnZylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ+W7uuiuruaVsOaNricsIGdnKVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmVycm9yKG1zZyA9PiBsb2cobXNnLnRvU3RyaW5nKCkpKS5zdGFydChsb2coMikpXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdnID0gSlNPTi5wYXJzZShnZXRNeVZhcign5bu66K6u5pWw5o2uJykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBudW0gPSBzZXR0aW5nLnNob3cgIT0gdW5kZWZpbmVkID8gc2V0dGluZy5zaG93IDogMztcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtQnlDbHMoXFxcIiNzXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSBpbiBnZykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm4gPSBnZ1tpXTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKFxcXCIxMmlucHV0XFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG5uLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChubiwgcnVsZV9uYW1lLCBudW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwic291XFxcIiwgbm4pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuc2VhcmNod29yZHMuYWRkRGF0YShubiwgcnVsZV9uYW1lLCBudW0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gJ2hpa2VyOi8vc2VhcmNoP3M9JyArIG5uICsgJyZydWxlPScgKyBydWxlX25hbWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIG5uLCBydWxlX25hbWUsIG51bSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpbnB1dCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM6IFxcXCIjc1xcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LCBydWxlX25hbWUsIHNldHRpbmcpLFxcbiAgICAgICAgICAgICAgICAvL3RpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgIGlkOiBcXFwiMTJpbnB1dFxcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGFyci5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuaQnOe0olxcXCIsXFxuICAgICAgICAgICAgdXJsOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgICAgICBkZXNjOiBcXFwi6K+36L6T5YWl5YWz6ZSu6K+N77yM5bC96YeP5bCR5a2X5LiN6KaB5aSa5a2XXFxcIixcXG4gICAgICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXCJzb3VcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJzb3VcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdwYWdlJylcXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoXFxcImR1cmxcXFwiKVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH1cXG59XFxuXFxuXFxuXFxuJC5leHBvcnRzID0ge1xcbiAgICB3cmFwOiB3cmFwLFxcbiAgICB3cmFwMTogd3JhcDEsXFxuICAgIHJlaHRtbDogcmVtb3ZlaHRtbCxcXG4gICAgbWVyZ2U6IG1lcmdlLFxcbiAgICBzZXRwYWdlZDogc2V0UGFnZUQsXFxuICAgIHVybFBhcnNlOiB1cmxQYXJzZSxcXG4gICAgc2VhcmNodzog5pCc57Si5bu66K6uLFxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaQnOe0oumhtemdolwiLFwicGF0aFwiOlwic291cFwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5pZiAoTVlfUEFSQU1TLmtleSAmJiBnZXRNeVZhcihcXFwidXNlXFxcIiwgXFxcIlxcXCIpID09IFxcXCJcXFwiKSB7XFxuICAgIHB1dE15VmFyKFxcXCJzb3VcXFwiLCBNWV9QQVJBTVMua2V5KTtcXG4gICAgcHV0TXlWYXIoXFxcInVzZVxcXCIsIFxcXCIxXFxcIik7XFxuICAgIGFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJ1c2VcXFwiKTtcXG4gICAgfSkpO1xcbn1cXG4kLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9wcm8nKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwieDVcIixcInBhdGhcIjpcIng1XCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmxldCB1cmwgPSBiYXNlNjREZWNvZGUoZ2V0UGFyYW0oXFxcInVcXFwiKSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCJcXFwiLFxcbiAgICB1cmw6IHVybCxcXG4gICAgY29sX3R5cGU6IFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXCIsXFxuICAgIGRlc2M6IFxcXCJmbG9hdCYmMTAwJVxcXCIsXFxuICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgZmxvYXRWaWRlbzogdHJ1ZSxcXG4gICAgICAgIGNhbkJhY2s6IHRydWUsXFxuICAgICAgICBibG9ja1J1bGVzOiBbXFxcIi5naWZcXFwiLCBcXFwiL2FkL1xcXCIsIFxcXCJnb29nbGVcXFwiLCBcXFwiL3NoL3RvL1xcXCIsIFxcXCIuR0lGXFxcIl1cXG4gICAgfVxcbn0pO1xcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIjMu5pCc54mHXCIsXCJwYXRoXCI6XCJzb3VwaWFuXCIsXCJydWxlXCI6XCJqczpcXG5pZiAocyAhPSBcXFwiXFxcIikge1xcbiAgICB2YXIgaHRtbCA9IGZldGNoKGBodHRwOi8vJHtjb25maWcuc291cGlhbn0vc2VhcmNoP2tleT0ke3N9YClcXG4gICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsICdib2R5JiYubGlzdC1yb3ctaW5mbycpXFxuICAgIGxldCB7XFxuICAgICAgICB3cmFwMVxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbFxcXCIpO1xcbiAgICBmb3IgKGxldCBpdCBvZiBsaXN0KSB7XFxuICAgICAgICAvL2xvZyhpdClcXG4gICAgICAgIC8vbGV0IG5hbWUgPSBpdC5tb3ZpZV9uYW1lO1xcbiAgICAgICAgbGV0IG5hbWUgPSBwZGZoKGl0LCAnaDQmJlRleHQnKTtcXG4gICAgICAgIGxldCB3ZWIgPSBwZGZoKGl0LCAnYSYmdGl0bGUnKS5yZXBsYWNlKG5hbWUsJycpLnRyaW0oKTtcXG4gICAgICAgIFxcbiAgICAgICAgbGV0IGltZyA9IHBkZmgoaXQsICdpbWcmJnNyYycpO1xcbiAgICAgICAgaWYoIWltZy5pbmNsdWRlcygnaHR0cCcpKXtcXG4gICAgICAgICAgICBpbWc9J2h0dHBzOi8vJytjb25maWcuc291cGlhbitpbWc7XFxuICAgICAgICB9XFxuICAgICAgICAgICAgXFxuICAgICAgICBsZXQgdXJsID0gcGRmaChpdCwgJ2EmJmhyZWYnKTtcXG4gICAgICAgIHZhciB1ID0gXFxcImhpa2VyOi8vcGFnZS9wP3J1bGU9XFxcIiArIE1ZX1JVTEUudGl0bGUgKyBcXFwiJnU9XFxcIiArIGJhc2U2NEVuY29kZSh1cmwpXFxuICAgICAgICB1ID0gZ2V0SXRlbSgnYWknLCAnMCcpID09ICcwJyA/IHUgOiB1ICsgJyNpbW1lcnNpdmVUaGVtZSMnXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB3cmFwMSh3ZWIrJy0nK25hbWUsIHMpLFxcbiAgICAgICAgICAgIHVybDogdSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICAgICAgLy9kZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+5pCc54mHPC9mb250PlxcXCIsXFxuICAgICAgICAgICAgcGljX3VybDogaW1nLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiB1cmwsXFxuICAgICAgICAgICAgICAgIGluaGVyaXRUaXRsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTpuYW1lLFxcbiAgICAgICAgICAgICAgICB3ZWI6d2ViLFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIHNldFJlc3VsdChkKVxcbn0gZWxzZSB7XFxuXFxufVxcblxcbmlmIChnZXRJdGVtKCdob21lJywgJ+WFsycpID09ICflvIAnKSB7XFxuICAgIHZhciBodG1sID0gcmVxdWVzdChgaHR0cDovLyR7Y29uZmlnLnNvdXBpYW59L2AsIHt9KVxcblxcblxcbiAgICBmdW5jdGlvbiBzZXRMaXN0cyhpdGVtKSB7XFxuICAgICAgICB2YXIgdGl0bGUgPSBpdGVtLnNwbGl0KCctJylbMF1cXG4gICAgICAgIHZhciB0ID0gaXRlbS5zcGxpdCgnLScpWzFdXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tb3JlLzEwLnBuZydcXG4gICAgICAgIH0pXFxuXFxuICAgICAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgYGJvZHkmJi5saXN0LWhlYWRlcjptYXRjaGVzKCR7dH0pKyomJmFgKVxcblxcbiAgICAgICAgbGlzdC5tYXAoeCA9PiB7XFxuICAgICAgICAgICAgdmFyIG5hbWUgPSBwZGZoKHgsICcucG9zdGVyLWl0ZW0tdGl0bGUmJlRleHQnKVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBuYW1lLFxcbiAgICAgICAgICAgICAgICBpbWc6IHBkZmgoeCwgJ2ltZyYmc3JjJyksXFxuICAgICAgICAgICAgICAgIHVybDogJCgnJykubGF6eVJ1bGUoKG4pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJzb3VcXFwiLCBuKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICB9LCBuYW1lKVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICB9XFxuXFxuICAgIFsn54Ot6Zeo55S15b2xLeeUteW9sScsICfng63pl6jnlLXop4bliact55S16KeG5YmnJywgJ+eDremXqOe7vOiJui3nu7zoibonLCAn54Ot6Zeo5Yqo5ryrLeWKqOa8qyddLm1hcCh4ID0+IHtcXG4gICAgICAgIHNldExpc3RzKHgpXFxuICAgIH0pXFxuXFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiMS7osYzosYZcIixcInBhdGhcIjpcIndhbmRvdVwiLFwicnVsZVwiOlwianM6XFxubGV0IGR1cmwgPSBnZXRNeVZhcihcXFwiZHVybFxcXCIsIFxcXCJcXFwiKTtcXG5pZiAoZHVybCAhPSAnJykge1xcblxcbiAgICBkdXJsID0gJ2h0dHBzOi8vd3d3LndhbmRvdS5sYScgKyBkdXJsLnJlcGxhY2UoJy5odG1sJywgJycpXFxuICAgIGxldCB1cmwgPSBkdXJsO1xcbiAgICBsZXQgaWQgPSB1cmw7XFxuICAgIGxldCBodG1sID0gZmV0Y2godXJsKTtcXG4gICAgdmFyIHJ1bGUgPSBNWV9SVUxFLnRpdGxlXFxuICAgIHZhciBuYW1lID0gcGRmaChodG1sLCAnLm1vdmllLWNvbnRlbnQmJnAmJlRleHQnKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBuYW1lLFxcbiAgICAgICAgaW1nOiBwZGZoKGh0bWwsICcubW92aWUtaW1nJiZpbWcmJnNyYycpLFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYycsXFxuICAgICAgICBkZXNjOiBwZGZoKGh0bWwsICcuYm90dG9tJiZwJiZUZXh0JyksXFxuICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UveDU/dT0nICsgYmFzZTY0RW5jb2RlKHVybCksXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiB1cmwsXFxuICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICB9KVxcbiAgICAvL3NldFJlc3VsdChkKTtcXG5cXG4gICAgbGV0IHRleHQgPSBwZGZoKGh0bWwsIFxcXCJib2R5JiYjX19ORVhUX0RBVEFfXyYmSHRtbFxcXCIpO1xcbiAgICAvL2xvZyh0ZXh0KTtcXG4gICAgbGV0IGVyamkgPSBKU09OLnBhcnNlKHRleHQpO1xcbiAgICAvLyBsb2coZXJqaSk7XFxuICAgIGxldCBsaXN0ID0gZXJqaS5wcm9wcy5wYWdlUHJvcHMuZGF0YS5wbGF5RGF0YTtcXG5cXG4gICAgaWYgKGxpc3QgJiYgbGlzdC5sZW5ndGggPiAwKSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIE1ZX1VSTCA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIGxldCB7XFxuICAgICAgICAgICAgICAgIHdyYXBcXG4gICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbD9ydWxlPVxcXCIgKyBydWxlKTtcXG4gICAgICAgICAgICBsaXN0ID0gbGlzdC5tYXAoaXQgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgdSA9IGl0LmRhdGFfdXJsO1xcbiAgICAgICAgICAgICAgICB1ID0gXFxcImhpa2VyOi8vcGFnZS9wP3J1bGU9XFxcIiArIHJ1bGUgKyBcXFwiJnU9XFxcIiArIGJhc2U2NEVuY29kZSh1KTtcXG4gICAgICAgICAgICAgICAgdSA9IGdldEl0ZW0oJ2FpJywgJzAnKSA9PSAnMCcgPyB1IDogdSArICcjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0LnNpdGVfbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogdSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGltZzogaXQuc2l0ZV9pY29uLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB1LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb206ICdob21lJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IG5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgd2ViOiBpdC5zaXRlX25hbWUsXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBpZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgIC8vYWRkSXRlbUFmdGVyKGlkLCBsaXN0KTtcXG4gICAgICAgICAgICAgICAgZCA9IGQuY29uY2F0KGxpc3QpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICBsb2coZS50b1N0cmluZygpKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBzZXRSZXN1bHQoZClcXG59XFxuXFxubGV0IHIgPSBcXFwiXFxcIjtcXG5pZiAocyAhPSBcXFwiXFxcIikge1xcblxcbiAgICBqc29uID0gXFxcImh0dHBzOi8vXFxcIitjb25maWcud2FuZG91K1xcXCIvbW92aWUvZ2V0c2VhcmNobGlzdC9rZXl3b3Jkcy9cXFwiICsgcyArIFxcXCIvcGFnZS8xL3Jvd3MvMTYuanNvblxcXCI7XFxuICAgIGRhdGEgPSBKU09OLnBhcnNlKGZldGNoKGpzb24pKS5kYXRhO1xcbiAgICBsZXQge1xcbiAgICAgICAgd3JhcFxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbFxcXCIpO1xcbiAgICBmb3IgKGxldCBpdCBvZiBkYXRhKSB7XFxuICAgICAgICBsZXQgbmFtZSA9IGl0Lm1vdmllX25hbWU7XFxuICAgICAgICAvL2xvZyhuYW1lKVxcbiAgICAgICAgbGV0IGltZyA9IGl0Lm1vdmllX2ltZ191cmw7XFxuICAgICAgICBsZXQgdXJsID0gXFxcImh0dHBzOi8vd3d3LndhbmRvdS5sYVxcXCIgKyBpdC5tb3ZpZV91cmwucmVwbGFjZShcXFwiLmh0bWxcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICAvL2xvZyh1cmwpXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB3cmFwKG5hbWUsIHMpLFxcbiAgICAgICAgICAgIHVybDogJCh1cmwpLmxhenlSdWxlKChydWxlLCBpZCwgcywgbmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICB2YXIgY2xzID0gZmluZEl0ZW1zQnlDbHMoaWQpO1xcbiAgICAgICAgICAgICAgICBpZiAoISFjbHMpIHtcXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW1CeUNscyhpZClcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBpbnB1dDtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZCA9IHVybDtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBodG1sID0gZmV0Y2godXJsKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKGh0bWwpXFxuICAgICAgICAgICAgICAgICAgICBsZXQgdGV4dCA9IHBkZmgoaHRtbCwgXFxcImJvZHkmJiNfX05FWFRfREFUQV9fJiZIdG1sXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyh0ZXh0KTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBlcmppID0gSlNPTi5wYXJzZSh0ZXh0KTtcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKGVyamkpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxpc3QgPSBlcmppLnByb3BzLnBhZ2VQcm9wcy5kYXRhLnBsYXlEYXRhO1xcblxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QgJiYgbGlzdC5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTVlfVVJMID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90b29sP3J1bGU9XFxcIiArIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gbGlzdC5tYXAoaXQgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBpdC5kYXRhX3VybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBcXFwiaGlrZXI6Ly9wYWdlL3A/cnVsZT1cXFwiICsgcnVsZSArIFxcXCImdT1cXFwiICsgYmFzZTY0RW5jb2RlKHUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGdldEl0ZW0oJ2FpJywgJzAnKSA9PSAnMCcgPyB1IDogdSArICcjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXQuc2l0ZV9uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBpdC5zaXRlX2ljb24sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBpZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbTogJ2hvbWUnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IG5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYjogaXQuc2l0ZV9uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEl0ZW1BZnRlcihpZCwgbGlzdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coZS50b1N0cmluZygpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgIH0sIE1ZX1JVTEUudGl0bGUsIHVybCwgcywgbmFtZSksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJtb3ZpZV8xX2xlZnRfcGljXFxcIixcXG4gICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+6LGM6LGGPC9mb250PlxcXCIsXFxuICAgICAgICAgICAgcGljX3VybDogaW1nLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiB1cmwsXFxuICAgICAgICAgICAgICAgIGluaGVyaXRUaXRsZTogZmFsc2VcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBzZXRSZXN1bHQoZClcXG59XFxuXFxuXFxuaWYgKGdldEl0ZW0oJ2hvbWUnLCAn5YWzJykgPT0gJ+W8gCcpIHtcXG4gICAgdmFyIHBhZ2UgPSBNWV9QQUdFO1xcbiAgICBsZXQge1xcbiAgICAgICAgc2V0cGFnZWRcXG4gICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3Rvb2xcXFwiKTtcXG5cXG4gICAgdmFyIHBpbmRleCA9IHNldHBhZ2VkKGQscGFnZSxcXFwid2FuZG91X3B0YWdcXFwiLCBbXFxcIummlumhtVxcXCIsIFxcXCLliIbnsbtcXFwiXSwgXFxcIiM0NjgyQjRcXFwiKTtcXG5cXG5cXG4gICAgLy/pppbpobVcXG4gICAgaWYgKHBpbmRleCA9PSBcXFwiMFxcXCIpIHtcXG5cXG4gICAgICAgIHZhciBodG1sID0gZmV0Y2goJ2h0dHBzOi8vd3d3LndhbmRvdS5sYS8nKVxcbiAgICAgICAgbGV0IGpzb24gPSBKU09OLnBhcnNlKHBkZmgoaHRtbCwgXFxcImJvZHkmJiNfX05FWFRfREFUQV9fJiZIdG1sXFxcIikpO1xcblxcbiAgICAgICAgZnVuY3Rpb24gc2V0TGlzdHMoaXRlbSkge1xcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IGl0ZW0uc3BsaXQoJyMnKVswXVxcbiAgICAgICAgICAgIHZhciBrZXkgPSBpdGVtLnNwbGl0KCcjJylbMV1cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG4gICAgICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tb3JlLzEwLnBuZydcXG4gICAgICAgICAgICB9KVxcblxcbiAgICAgICAgICAgIHZhciBsaXN0ID0ganNvbi5wcm9wcy5wYWdlUHJvcHMuZmFsbGJhY2tba2V5XS5kYXRhXFxuXFxuICAgICAgICAgICAgbGlzdC5tYXAoeCA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0geC5ob3RfbmFtZVxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG5hbWUsXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IHguaG90X2ltZ191cmwsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiB4LmhvdF9yYXRlLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgobiwgdSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJzb3VcXFwiLCBuKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdkdXJsJywgdSlcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICAgICAgfSwgbmFtZSwgeC5ob3RfdXJsKVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuXFxuICAgICAgICBbJ+eDremXqOeUteW9sSNpbmRleC1nZXRNb3ZpZUxpc3QtbW92aWUnLCAn54Ot6Zeo5Ymn6ZuGI2luZGV4LWdldFR2TGlzdC10di0yOCddLm1hcCh4ID0+IHtcXG4gICAgICAgICAgICBzZXRMaXN0cyh4KVxcbiAgICAgICAgfSlcXG4gICAgfVxcbiAgICBpZiAocGluZGV4ID09IFxcXCIxXFxcIikge1xcbiAgICAgICAgXFxuICAgICAgICB2YXIgdHlwZXMgPSB7XFxuICAgICAgICAgICAgXFxcIndhbmRvdV90YWdcXFwiOiBbXFxcIuexu+WeizowXFxcIiwgXFxcIuWWnOWJpzoxXFxcIiwgXFxcIueIseaDhToyXFxcIiwgXFxcIuWlh+W5uzo0XFxcIiwgXFxcIueKr+e9qjo1XFxcIiwgXFxcIuaCrOeWkTo2XFxcIiwgXFxcIuWOhuWPsjo3XFxcIiwgXFxcIuaImOS6iTo4XFxcIiwgXFxcIuWKqOS9nDo5XFxcIiwgXFxcIuenkeW5uzoxMFxcXCIsIFxcXCLliqjnlLs6MTFcXFwiLCBcXFwi5YaS6ZmpOjEyXFxcIiwgXFxcIueBvumavjoxNVxcXCIsIFxcXCLmg4rmgpo6MTdcXFwiLCBcXFwi5oGQ5oCWOjE4XFxcIiwgXFxcIuatjOiInjoyMlxcXCIsIFxcXCLmrabkvqA6MjRcXFwiLCBcXFwi6Z+z5LmQOjI3XFxcIl0sXFxuICAgICAgICAgICAgXFxcIndhbmRvdV9jb3VudHJ5XFxcIjogW1xcXCLlnLDljLo6MFxcXCIsIFxcXCLkuK3lm706MVxcXCIsIFxcXCLpn6nlm706M1xcXCIsIFxcXCLml6XmnKw6NFxcXCIsIFxcXCLnvo7lm706NlxcXCIsIFxcXCLoi7Hlm706OVxcXCIsIFxcXCLms5Xlm706MTBcXFwiLCBcXFwi5b635Zu9OjExXFxcIiwgXFxcIuWFtuS7ljoxMlxcXCJdLFxcbiAgICAgICAgICAgIFxcXCJ3YW5kb3VfeWVhclxcXCI6IFtcXFwi5pe26Ze0OjBcXFwiLCBcXFwiMjAyMjoxXFxcIiwgXFxcIjIwMjI6MlxcXCIsIFxcXCIyMDIwOjNcXFwiLCBcXFwiMjAxOTo0XFxcIiwgXFxcIjIwMTDlubTku6M6NVxcXCIsIFxcXCIyMDAw5bm05LujOjZcXFwiLCBcXFwiOTDlubTku6M6N1xcXCIsIFxcXCI4MOW5tOS7ozo4XFxcIiwgXFxcIjcw5bm05LujOjlcXFwiLCBcXFwiNjDlubTku6M6MTBcXFwiLCBcXFwi5pu05pepOjExXFxcIl0sXFxuICAgICAgICAgICAgXFxcIndhbmRvdV9zb3J0XFxcIjogW1xcXCLnu7zlkIjmjpLluo86MVxcXCIsIFxcXCLov5HmnJ/ng63luqY6MlxcXCIsIFxcXCLpq5jliIbkvJjlhYg6M1xcXCJdXFxuICAgICAgICB9XFxuXFxuICAgICAgICB2YXIgb2pzb24gPSBbe1xcbiAgICAgICAgICAgIG5hbWU6ICfnlLXlvbEnLFxcbiAgICAgICAgICAgIGlkOiAnbW92aWUnLFxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHR5cGVzXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgbmFtZTogJ+eUteinhuWJpycsXFxuICAgICAgICAgICAgaWQ6ICd0dicsXFxuICAgICAgICAgICAgY29udGVudDogdHlwZXNcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICBuYW1lOiAn5Yqo5ryrJyxcXG4gICAgICAgICAgICBpZDogJ2FuaW1lJyxcXG4gICAgICAgICAgICBjb250ZW50OiB0eXBlc1xcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIG5hbWU6ICfnu7zoibonLFxcbiAgICAgICAgICAgIGlkOiAndmFyaWV0eScsXFxuICAgICAgICAgICAgY29udGVudDogdHlwZXNcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICBuYW1lOiAn57qq5b2V54mHJyxcXG4gICAgICAgICAgICBpZDogJ2RvY3VtZW50YXJ5JyxcXG4gICAgICAgICAgICBjb250ZW50OiB0eXBlc1xcbiAgICAgICAgfV1cXG5cXG4gICAgICAgIHZhciDlpKfnsbsgPSBbXTtcXG4gICAgICAgIG9qc29uLm1hcCh4ID0+IHtcXG4gICAgICAgICAgICDlpKfnsbsucHVzaCh4Lm5hbWUgKyBcXFwiQFxcXCIgKyB4LmlkKTtcXG4gICAgICAgIH0pXFxuICAgICAgICB2YXIgaW5kZXggPSBzdG9yYWdlMC5nZXRNeVZhcihcXFwiaW5kZXhcXFwiLCAnMCcpO1xcbiAgICAgICAgdmFyIGogPSBvanNvbltpbmRleF07XFxuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGouY29udGVudCk7XFxuXFxuICAgICAgICB2YXIgdGVtcCA9IHt9O1xcbiAgICAgICAga2V5cy5mb3JFYWNoKHggPT4ge1xcbiAgICAgICAgICAgIHZhciB0eXBlID0geDtcXG4gICAgICAgICAgICB2YXIgbCA9IGouY29udGVudFt4XTtcXG4gICAgICAgICAgICBpZiAoWyd2ZXJzaW9uJ10uaW5jbHVkZXMoeCkpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChsLmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICAgICAgdmFyIG5zID0gbC5tYXAoKGspID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gay5zcGxpdCgnOicpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlkID0gay5zcGxpdCgnOicpWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAnbmFtZSc6IG5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCc6IGlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJzogeFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB0ZW1wW3hdID0gbnM7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG5cXG4gICAgICAgIHZhciB0ID0gT2JqZWN0LnZhbHVlcyh0ZW1wKS5tYXAoeCA9PiB4Lm1hcCh6ID0+IEpTT04uc3RyaW5naWZ5KHopKS5qb2luKCcjJykpXFxuXFxuICAgICAgICB2YXIgVHJ1ZUpzb24gPSB7XFxuICAgICAgICAgICAgdHlwZTogQXJyYXko5aSn57G7LmpvaW4oJyMnKSksXFxuICAgICAgICAgICAgaXRlbTogdCAhPSBcXFwiXFxcIiA/IHQgOiBbXSxcXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKFRydWVKc29uKVxcblxcbiAgICAgICAgLy/pnIDmoLnmja7lrp7pmYXkv67mlLlcXG4gICAgICAgIGNvbnN0IOmhtemdouagh+ivhiA9XFxcIndhbmRvdXBhZ2VcXFwiO1xcbiAgICAgICAgY29uc3Qg5Y2V6aG55riF6ZmkID1bXTtcXG4gICAgICAgIGNvbnN0IOWIhuexu+minOiJsiA9IGdldFJhbmdlQ29sb3JzKCk7XFxuICAgICAgICBjb25zdCBKc29u5aSn57G7ID0gJ3R5cGUnO1xcbiAgICAgICAgY29uc3QgSnNvbuaLvOaOpSA9ICdpdGVtJztcXG4gICAgICAgIGNvbnN0IEpzb27mi4bliIYgPSAnIyc7XFxuICAgICAgICBjb25zdCBKc29u5Y2V6aG5ID0gJ0AnO1xcbiAgICAgICAgY29uc3QgSnNvbuWIl+ihqCA9IFtcXFwid2FuZG91X3RhZ1xcXCIsIFxcXCJ3YW5kb3VfY291bnRyeVxcXCIsIFxcXCJ3YW5kb3VfeWVhclxcXCIsIFxcXCJ3YW5kb3Vfc29ydFxcXCJdOyAvL+WIh+aNoua4hemZpFxcbiAgICAgICAgY29uc3Qg5o6S6ZmkID0gJyc7XFxuICAgICAgICBjb25zdCDliIbnsbvlsZXlvIAgPSAn4oioJztcXG4gICAgICAgIGNvbnN0IOWIhuexu+aKmOWPoCA9ICfiiKcnO1xcblxcbiAgICAgICAgLy/liqjmgIHliIbnsbtcXG4gICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvamR0ZmwnKSkucnVsZSk7XFxuICAgICAgICB2YXIgdHlwZSA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJ3YW5kb3VwYWdlXFxcIiwgXFxcIm1vdmllXFxcIik7XFxuICAgICAgICB2YXIgdGFnID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcIndhbmRvdV90YWdcXFwiLCBcXFwiMFxcXCIpO1xcbiAgICAgICAgdmFyIGNvdW50cnkgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFwid2FuZG91X2NvdW50cnlcXFwiLCBcXFwiMFxcXCIpO1xcbiAgICAgICAgdmFyIHllYXIgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFwid2FuZG91X3llYXJcXFwiLCBcXFwiMFxcXCIpO1xcbiAgICAgICAgdmFyIHNvcnQgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFwid2FuZG91X3NvcnRcXFwiLCBcXFwiMVxcXCIpO1xcblxcbiAgICAgICAgLy9sb2coYCR7dHlwZX06JHt0YWd9KyR7Y291bnRyeX0rJHt5ZWFyfSske3NvcnR9YClcXG4gICAgICAgIHZhciBqdXJsID0gYGh0dHBzOi8vJHtjb25maWcud2FuZG91fS9tb3ZpZS9nZXQke3R5cGV9bGlzdC90YWcvJHt0YWd9L2NvdW50cnkvJHtjb3VudHJ5fS95ZWFyLyR7eWVhcn0vc29ydC8ke3NvcnR9L3BhZ2UvJHtwYWdlfS9yb3dzLzMwLmpzb25gO1xcbiAgICAgICAgXFxuICAgICAgICAvL2xvZyhqdXJsKVxcbiAgICAgICAgdmFyIHBsaXN0ID0gSlNPTi5wYXJzZShmZXRjaChqdXJsKSkuZGF0YVxcbiAgICAgICAgcGxpc3QubWFwKHggPT4ge1xcbiAgICAgICAgICAgIHZhciBuYW1lID0geC5tb3ZpZV9uYW1lO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBuYW1lLFxcbiAgICAgICAgICAgICAgICBpbWc6IHgubW92aWVfaW1nX3VybCArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgICAgICAgICBkZXNjOiB4Lm1vdmllX3JhdGUsXFxuICAgICAgICAgICAgICAgIHVybDogJCgnJykubGF6eVJ1bGUoKG4sIHUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJzb3VcXFwiLCBuKVxcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2R1cmwnLCB1KVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICB9LCBuYW1lLCB4Lm1vdmllX3VybCksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfM19tYXJxdWVlJ1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiMi7ojLbmna/ni5BcIixcInBhdGhcIjpcImN1cGZveFwiLFwicnVsZVwiOlwianM6XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS94dG9vbHMnKSkucnVsZSlcXG5cXG5pZiAocyAhPSBcXFwiXFxcIikge1xcbiAgICBsZXQge1xcbiAgICAgICAgd3JhcDEsXFxuICAgICAgICByZWh0bWxcXG4gICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3Rvb2xcXFwiKTtcXG4gICAgdmFyIGpzb24gPSBzZWFyY2gocywgc3RvcmFnZTAuZ2V0TXlWYXIoJ3BhZ2UnLCBNWV9QQUdFKSlcXG4gICAgaWYgKEpTT04uc3RyaW5naWZ5KGpzb24pICE9IFxcXCJ7fVxcXCIpIHtcXG4gICAgICAgIHZhciBsaXN0ID0ganNvbi5yZXNvdXJjZXM7XFxuICAgICAgICBsaXN0Lm1hcChpdCA9PiB7XFxuICAgICAgICAgICAgLy9sb2coaXQud2Vic2l0ZSsnLScrcmVodG1sKGl0LnRleHQpKVxcbiAgICAgICAgICAgIHZhciB1ID0gXFxcImhpa2VyOi8vcGFnZS9wP3U9XFxcIiArIGJhc2U2NEVuY29kZShpdC51cmwpXFxuICAgICAgICAgICAgdSA9IGdldEl0ZW0oJ2FpJywgJzAnKSA9PSAnMCcgPyB1IDogdSArICcjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB3cmFwMShpdC53ZWJzaXRlICsgJy0nICsgcmVodG1sKGl0LnRleHQpLCBzKSxcXG4gICAgICAgICAgICAgICAgdXJsOiB1LFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICAgICAgICAgIGltZzogaXQuaWNvbixcXG4gICAgICAgICAgICAgICAgZGVzYzogaXQud2Vic2l0ZSxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGluaGVyaXRUaXRsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IHJlaHRtbChpdC50ZXh0KSxcXG4gICAgICAgICAgICAgICAgICAgIHdlYjogaXQud2Vic2l0ZSxcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSlcXG4gICAgfVxcblxcbiAgICBzZXRSZXN1bHQoZClcXG59IGVsc2Uge1xcblxcbn1cXG5cXG5pZiAoZ2V0SXRlbSgnaG9tZScsICflhbMnKSA9PSAn5byAJykge1xcbiAgICB2YXIgcGFnZSA9IE1ZX1BBR0U7XFxuICAgIGxldCB7XFxuICAgICAgICBzZXRwYWdlZFxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbFxcXCIpO1xcblxcbiAgICB2YXIgcGluZGV4ID0gc2V0cGFnZWQoZCwgcGFnZSwgXFxcImN1cGZveF9wdGFnXFxcIiwgW1xcXCLpppbpobVcXFwiLCBcXFwi6YCJ54mHXFxcIl0sIFxcXCIjNDY4MkI0XFxcIik7XFxuXFxuICAgIGlmIChwaW5kZXggPT0gXFxcIjBcXFwiKSB7XFxuICAgICAgICB2YXIgaHRtbCA9IGZldGNoUEMoJ2h0dHBzOi8vY3VwZm94LmFwcC8nLCB7fSlcXG5cXG4gICAgICAgIGZ1bmN0aW9uIHNldExpc3RzKGl0ZW0pIHtcXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSBpdGVtLnNwbGl0KCctJylbMF1cXG4gICAgICAgICAgICB2YXIgdCA9IGl0ZW0uc3BsaXQoJy0nKVsxXVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICAgICAgICAgICAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21vcmUvMTAucG5nJ1xcbiAgICAgICAgICAgIH0pXFxuXFxuICAgICAgICAgICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsIGBib2R5JiYjJHt0fSYmLm1vdmllLWxpc3QtaXRlbWApXFxuXFxuICAgICAgICAgICAgbGlzdC5tYXAoeCA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gcGRmaCh4LCAnLm1vdmllLXRpdGxlJiZUZXh0JylcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBuYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBwZGZoKHgsICdpbWcmJnNyYycpLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogcGRmaCh4LCAnLm1vdmllLXJhdGluZyYmVGV4dCcpLCAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCgnJykubGF6eVJ1bGUoKG4pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwic291XFxcIiwgbilcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICAgICAgfSwgbmFtZSlcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgWyfng63mkq3mlrDliactdHYnLCAn54Ot6Zeo55S15b2xLW1vdmllJywgJ+eDreaSreWKqOa8qy1hbmltZScsICfng63mkq3nu7zoibotc2hvdycsICfng63mkq3nuqrlvZXniYctZG9jdW1lbnRhcnknXS5tYXAoeCA9PiB7XFxuICAgICAgICAgICAgc2V0TGlzdHMoeClcXG4gICAgICAgIH0pXFxuICAgIH1cXG5cXG4gICAgaWYgKHBpbmRleCA9PSBcXFwiMVxcXCIpIHtcXG5cXG5cXG4gICAgICAgIHZhciBvanNvbiA9IFt7XFxuICAgICAgICAgICAgbmFtZTogJ+eUteW9sScsXFxuICAgICAgICAgICAgaWQ6ICdtb3ZpZScsXFxuICAgICAgICAgICAgY29udGVudDoge1xcbiAgICAgICAgICAgICAgICBcXFwiY3VwZm94X2dlbnJlc1xcXCI6IFtcXFwi5YWo6YOo57G75Z6LOlxcXCIsIFxcXCLllpzliadcXFwiLCBcXFwi54ix5oOFXFxcIiwgXFxcIuWKqOS9nFxcXCIsIFxcXCLnp5HlubtcXFwiLCBcXFwi5aWH5bm7XFxcIiwgXFxcIuWKqOeUu1xcXCIsIFxcXCLmgqznlpFcXFwiLCBcXFwi54qv572qXFxcIiwgXFxcIuaBkOaAllxcXCIsIFxcXCLmiJjkuolcXFwiLCBcXFwi6Z+z5LmQXFxcIiwgXFxcIuatjOiInlxcXCIsIFxcXCLljoblj7JcXFwiLCBcXFwi5Lyg6K6wXFxcIiwgXFxcIueBvumavlxcXCIsIFxcXCLnuqrlvZXniYdcXFwiLCBcXFwi55+t54mHXFxcIl0sXFxuICAgICAgICAgICAgICAgIFxcXCJjdXBmb3hfY291bnRyaWVzXFxcIjogW1xcXCLlhajpg6jlnLDljLo6XFxcIiwgXFxcIuWNjuivrVxcXCIsIFxcXCLmrKfnvo5cXFwiLCBcXFwi6Z+p5Zu9XFxcIiwgXFxcIuaXpeacrFxcXCIsIFxcXCLkuK3lm73lpKfpmYZcXFwiLCBcXFwi576O5Zu9XFxcIiwgXFxcIuS4reWbvemmmea4r1xcXCIsIFxcXCLkuK3lm73lj7Dmub5cXFwiLCBcXFwi6Iux5Zu9XFxcIiwgXFxcIuazleWbvVxcXCIsIFxcXCLmhI/lpKfliKlcXFwiLCBcXFwi6KW/54+t54mZXFxcIiwgXFxcIuWNsOW6plxcXCIsIFxcXCLms7Dlm71cXFwiLCBcXFwi5L+E572X5pavXFxcIl0sXFxuICAgICAgICAgICAgICAgIFxcXCJjdXBmb3hfeWVhclxcXCI6IFtcXFwi5YWo6YOo5bm05LujOlxcXCIsIFxcXCIyMDIzXFxcIiwgXFxcIjIwMjJcXFwiLCBcXFwiMjAyMVxcXCIsIFxcXCIyMDIwXFxcIiwgXFxcIjIwMTDlubTku6NcXFwiLCBcXFwiMjAwMOW5tOS7o1xcXCIsIFxcXCI5MOW5tOS7o1xcXCIsIFxcXCI4MOW5tOS7o1xcXCIsIFxcXCI3MOW5tOS7o1xcXCIsIFxcXCI2MOW5tOS7o1xcXCIsIFxcXCLmm7Tml6lcXFwiXSxcXG4gICAgICAgICAgICAgICAgXFxcImN1cGZveF9zb3J0XFxcIjogW1xcXCLov5HmnJ/ng63luqY6VFxcXCIsIFxcXCLpq5jliIbkvJjlhYg6U1xcXCJdLFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICBuYW1lOiAn55S16KeG5YmnJyxcXG4gICAgICAgICAgICBpZDogJ3R2JyxcXG4gICAgICAgICAgICBjb250ZW50OiB7XFxuICAgICAgICAgICAgICAgIFxcXCJjdXBmb3hfZ2VucmVzXFxcIjogW1xcXCLlhajpg6jnsbvlnos6XFxcIiwgXFxcIuWWnOWJp1xcXCIsIFxcXCLniLHmg4VcXFwiLCBcXFwi56eR5bm7XFxcIiwgXFxcIuWlh+W5u1xcXCIsIFxcXCLlj6Too4VcXFwiLCBcXFwi5oiY5LqJXFxcIiwgXFxcIuaCrOeWkVxcXCIsIFxcXCLmgZDmgJZcXFwiLCBcXFwi57qq5b2V54mHXFxcIl0sXFxuICAgICAgICAgICAgICAgIFxcXCJjdXBmb3hfY291bnRyaWVzXFxcIjogW1xcXCLlhajpg6jlnLDljLo6XFxcIiwgXFxcIuWNjuivrVxcXCIsIFxcXCLmrKfnvo5cXFwiLCBcXFwi6Z+p5Zu9XFxcIiwgXFxcIuaXpeacrFxcXCIsIFxcXCLnvo7lm71cXFwiLCBcXFwi6Iux5Zu9XFxcIiwgXFxcIuazsOWbvVxcXCJdLFxcbiAgICAgICAgICAgICAgICBcXFwiY3VwZm94X3llYXJcXFwiOiBbXFxcIuWFqOmDqOW5tOS7ozpcXFwiLCBcXFwiMjAyM1xcXCIsIFxcXCIyMDIyXFxcIiwgXFxcIjIwMjFcXFwiLCBcXFwiMjAyMFxcXCIsIFxcXCIyMDEw5bm05LujXFxcIiwgXFxcIjIwMDDlubTku6NcXFwiLCBcXFwiOTDlubTku6NcXFwiLCBcXFwiODDlubTku6NcXFwiLCBcXFwiNzDlubTku6NcXFwiLCBcXFwiNjDlubTku6NcXFwiLCBcXFwi5pu05pepXFxcIl0sXFxuICAgICAgICAgICAgICAgIFxcXCJjdXBmb3hfc29ydFxcXCI6IFtcXFwi6L+R5pyf54Ot5bqmOlRcXFwiLCBcXFwi6auY5YiG5LyY5YWIOlNcXFwiXSxcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgbmFtZTogJ+WKqOa8qycsXFxuICAgICAgICAgICAgaWQ6ICdhbmltZScsXFxuICAgICAgICAgICAgY29udGVudDoge1xcbiAgICAgICAgICAgICAgICBcXFwiY3VwZm94X2dlbnJlc1xcXCI6IFtcXFwi5YWo6YOo57G75Z6LOlxcXCIsIFxcXCLllpzliadcXFwiLCBcXFwi54ix5oOFXFxcIiwgXFxcIuWKqOS9nFxcXCIsIFxcXCLnp5HlubtcXFwiLCBcXFwi5aWH5bm7XFxcIl0sXFxuICAgICAgICAgICAgICAgIFxcXCJjdXBmb3hfY291bnRyaWVzXFxcIjogW1xcXCLlhajpg6jlnLDljLo6XFxcIiwgXFxcIuWNjuivrVxcXCIsIFxcXCLmrKfnvo5cXFwiLCBcXFwi5pel5pysXFxcIl0sXFxuICAgICAgICAgICAgICAgIFxcXCJjdXBmb3hfeWVhclxcXCI6IFtcXFwi5YWo6YOo5bm05LujOlxcXCIsIFxcXCIyMDIzXFxcIiwgXFxcIjIwMjJcXFwiLCBcXFwiMjAyMVxcXCIsIFxcXCIyMDIwXFxcIiwgXFxcIjIwMTDlubTku6NcXFwiLCBcXFwiMjAwMOW5tOS7o1xcXCIsIFxcXCI5MOW5tOS7o1xcXCIsIFxcXCI4MOW5tOS7o1xcXCIsIFxcXCI3MOW5tOS7o1xcXCIsIFxcXCI2MOW5tOS7o1xcXCIsIFxcXCLmm7Tml6lcXFwiXSxcXG4gICAgICAgICAgICAgICAgXFxcImN1cGZveF9zb3J0XFxcIjogW1xcXCLov5HmnJ/ng63luqY6VFxcXCIsIFxcXCLpq5jliIbkvJjlhYg6U1xcXCJdLFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICBuYW1lOiAn57u86Im6JyxcXG4gICAgICAgICAgICBpZDogJ3ZhcmlldHknLFxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHtcXG4gICAgICAgICAgICAgICAgXFxcImN1cGZveF9nZW5yZXNcXFwiOiBbXFxcIuWFqOmDqOexu+WeizpcXFwiLCBcXFwi55yf5Lq656eAXFxcIiwgXFxcIuiEseWPo+engFxcXCIsIFxcXCLpn7PkuZBcXFwiLCBcXFwi5q2M6IieXFxcIl0sXFxuICAgICAgICAgICAgICAgIFxcXCJjdXBmb3hfY291bnRyaWVzXFxcIjogW1xcXCLlhajpg6jlnLDljLo6XFxcIiwgXFxcIuWNjuivrVxcXCIsIFxcXCLmrKfnvo5cXFwiLCBcXFwi6Z+p5Zu9XFxcIiwgXFxcIuaXpeacrFxcXCJdLFxcbiAgICAgICAgICAgICAgICBcXFwiY3VwZm94X3llYXJcXFwiOiBbXFxcIuWFqOmDqOW5tOS7ozpcXFwiLCBcXFwiMjAyM1xcXCIsIFxcXCIyMDIyXFxcIiwgXFxcIjIwMjFcXFwiLCBcXFwiMjAyMFxcXCIsIFxcXCIyMDEw5bm05LujXFxcIiwgXFxcIjIwMDDlubTku6NcXFwiLCBcXFwiOTDlubTku6NcXFwiLCBcXFwiODDlubTku6NcXFwiLCBcXFwiNzDlubTku6NcXFwiLCBcXFwiNjDlubTku6NcXFwiLCBcXFwi5pu05pepXFxcIl0sXFxuICAgICAgICAgICAgICAgIFxcXCJjdXBmb3hfc29ydFxcXCI6IFtcXFwi6L+R5pyf54Ot5bqmOlRcXFwiLCBcXFwi6auY5YiG5LyY5YWIOlNcXFwiXSxcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XVxcblxcblxcbiAgICAgICAgdmFyIOWkp+exuyA9IFtdXFxuICAgICAgICBvanNvbi5tYXAoeCA9PiB7XFxuICAgICAgICAgICAg5aSn57G7LnB1c2goeC5uYW1lICsgXFxcIkBcXFwiICsgeC5uYW1lKVxcbiAgICAgICAgfSlcXG5cXG4gICAgICAgIHZhciBpbmRleCA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJpbmRleFxcXCIsICcwJylcXG5cXG4gICAgICAgIHZhciBqID0gb2pzb25baW5kZXhdXFxuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGouY29udGVudClcXG5cXG4gICAgICAgIHZhciB0ZW1wID0ge31cXG4gICAgICAgIGtleXMuZm9yRWFjaCh4ID0+IHtcXG4gICAgICAgICAgICB2YXIgdHlwZSA9IHhcXG5cXG4gICAgICAgICAgICB2YXIgbCA9IGouY29udGVudFt4XVxcblxcbiAgICAgICAgICAgIGlmIChbJ2FyZWEnLCAnbGFuZycsICd2ZXJzaW9uJywgJ3N0YXRlJ10uaW5jbHVkZXMoeCkpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGlmIChsLmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICAgICAgdmFyIG5zID0gbC5tYXAoKGspID0+IHtcXG5cXG4gICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gay5pbmNsdWRlcyhcXFwiOlxcXCIpID8gay5zcGxpdCgnOicpWzBdIDoga1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlkID0gay5pbmNsdWRlcyhcXFwiOlxcXCIpID8gay5zcGxpdCgnOicpWzFdIDoga1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAnbmFtZSc6IG5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCc6IGlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJzogeFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB0ZW1wW3hdID0gbnNcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcblxcbiAgICAgICAgdmFyIHQgPSBPYmplY3QudmFsdWVzKHRlbXApLm1hcCh4ID0+IHgubWFwKHogPT4gSlNPTi5zdHJpbmdpZnkoeikpLmpvaW4oJyMnKSlcXG5cXG5cXG4gICAgICAgIHZhciBUcnVlSnNvbiA9IHtcXG4gICAgICAgICAgICB0eXBlOiBBcnJheSjlpKfnsbsuam9pbignIycpKSxcXG4gICAgICAgICAgICBpdGVtOiB0ICE9IFxcXCJcXFwiID8gdCA6IFtdLFxcbiAgICAgICAgfVxcbiAgICAgICAgLy9sb2coVHJ1ZUpzb24pXFxuXFxuICAgICAgICAvL+mcgOagueaNruWunumZheS/ruaUuVxcbiAgICAgICAgY29uc3Qg5YiG57G76aKc6ImyID0gZ2V0UmFuZ2VDb2xvcnMoKTtcXG4gICAgICAgIGNvbnN0IEpzb27lpKfnsbsgPSAndHlwZSc7XFxuICAgICAgICBjb25zdCBKc29u5ou85o6lID0gJ2l0ZW0nO1xcbiAgICAgICAgY29uc3QgSnNvbuaLhuWIhiA9ICcjJztcXG4gICAgICAgIGNvbnN0IEpzb27ljZXpobkgPSAnQCc7XFxuICAgICAgICBjb25zdCBKc29u5YiX6KGoID0gW1xcXCJjdXBmb3hfZ2VucmVzXFxcIiwgXFxcImN1cGZveF9jb3VudHJpZXNcXFwiLCBcXFwiY3VwZm94X3llYXJcXFwiLCBcXFwiY3VwZm94X3NvcnRcXFwiLCBcXFwiY2ZwYWdlXFxcIl07IC8v5YiH5o2i5riF6ZmkXFxuICAgICAgICBjb25zdCDljZXpobnmuIXpmaQgPSBbXFxcImNmcGFnZVxcXCJdO1xcbiAgICAgICAgY29uc3Qg5o6S6ZmkID0gJyc7XFxuICAgICAgICBjb25zdCDliIbnsbvlsZXlvIAgPSAn4oioJztcXG4gICAgICAgIGNvbnN0IOWIhuexu+aKmOWPoCA9ICfiiKcnO1xcbiAgICAgICAgY29uc3Qg6aG16Z2i5qCH6K+GID0gJ2FpY3VwZm94JztcXG5cXG5cXG4gICAgICAgIC8v5Yqo5oCB5YiG57G7XFxuICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2pkdGZsJykpLnJ1bGUpXFxuXFxuICAgICAgICB2YXIgdHlwZSA9IHN0b3JhZ2UwLmdldE15VmFyKOmhtemdouagh+ivhiwgXFxcIueUteW9sVxcXCIpXFxuICAgICAgICB2YXIgdGFnID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcImN1cGZveF9nZW5yZXNcXFwiLCBcXFwiXFxcIilcXG4gICAgICAgIHZhciBjb3VudHJ5ID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcImN1cGZveF9jb3VudHJpZXNcXFwiLCBcXFwiXFxcIilcXG4gICAgICAgIHZhciB5ZWFyID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcImN1cGZveF95ZWFyXFxcIiwgXFxcIlxcXCIpXFxuICAgICAgICB2YXIgc29ydCA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJjdXBmb3hfc29ydFxcXCIsIFxcXCJUXFxcIilcXG5cXG4gICAgICAgIC8vbG9nKHR5cGUgKyB0YWcgKyBjb3VudHJ5ICsgeWVhciArIHNvcnQpXFxuXFxuICAgICAgICB2YXIgZmpzb24gPSBjdXBmb3hmaWx0ZXIoe1xcbiAgICAgICAgICAgIHRhZ3M6IHR5cGUsXFxuICAgICAgICAgICAgZ2VucmVzOiB0YWcsXFxuICAgICAgICAgICAgY291bnRyaWVzOiBjb3VudHJ5LFxcbiAgICAgICAgICAgIHllYXJfcmFuZ2U6IHllYXIsXFxuICAgICAgICAgICAgc29ydDogc29ydCxcXG4gICAgICAgIH0sIHN0b3JhZ2UwLmdldE15VmFyKCdjZnBhZ2UnLCBNWV9QQUdFKSlcXG5cXG4gICAgICAgIGZqc29uLnN1YmplY3RzLm1hcCh4ID0+IHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogeC50aXRsZSxcXG4gICAgICAgICAgICAgICAgaW1nOiB4LmNvdmVyICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICAgICAgICAgIGRlc2M6IHguc3RhcixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8zX21hcnF1ZWUnLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoJycpLmxhenlSdWxlKChuKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwic291XFxcIiwgbilcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgfSwgeC50aXRsZSksXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuXFxuICAgIH1cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlh73mlbBcIixcInBhdGhcIjpcInh0b29sc1wiLFwicnVsZVwiOlwianM6XFxuZnVuY3Rpb24gZW5jb2RlVVRGOChzKSB7XFxudmFyIGksIHIgPSBbXSwgYywgeDtcXG5mb3IgKGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKylcXG5pZiAoKGMgPSBzLmNoYXJDb2RlQXQoaSkpIDwgMHg4MCkgci5wdXNoKGMpO1xcbmVsc2UgaWYgKGMgPCAweDgwMCkgci5wdXNoKDB4QzAgKyAoYyA+PiA2ICYgMHgxRiksIDB4ODAgKyAoYyAmIDB4M0YpKTtcXG5lbHNlIHtcXG5pZiAoKHggPSBjIF4gMHhEODAwKSA+PiAxMCA9PSAwKSAvL+WvueWbm+Wtl+iKglVURi0xNui9rOaNouS4ulVuaWNvZGVcXG5jID0gKHggPDwgMTApICsgKHMuY2hhckNvZGVBdCgrK2kpIF4gMHhEQzAwKSArIDB4MTAwMDAsXFxuci5wdXNoKDB4RjAgKyAoYyA+PiAxOCAmIDB4NyksIDB4ODAgKyAoYyA+PiAxMiAmIDB4M0YpKTtcXG5lbHNlIHIucHVzaCgweEUwICsgKGMgPj4gMTIgJiAweEYpKTtcXG5yLnB1c2goMHg4MCArIChjID4+IDYgJiAweDNGKSwgMHg4MCArIChjICYgMHgzRikpO1xcbn07XFxucmV0dXJuIHI7XFxufVxcblxcbmZ1bmN0aW9uIHNoYTEocykge1xcbnZhciBkYXRhID0gbmV3IFVpbnQ4QXJyYXkoZW5jb2RlVVRGOChzKSlcXG52YXIgaSwgaiwgdDtcXG52YXIgbCA9ICgoZGF0YS5sZW5ndGggKyA4KSA+Pj4gNiA8PCA0KSArIDE2LCBzID0gbmV3IFVpbnQ4QXJyYXkobCA8PCAyKTtcXG5zLnNldChuZXcgVWludDhBcnJheShkYXRhLmJ1ZmZlcikpLCBzID0gbmV3IFVpbnQzMkFycmF5KHMuYnVmZmVyKTtcXG5mb3IgKHQgPSBuZXcgRGF0YVZpZXcocy5idWZmZXIpLCBpID0gMDsgaSA8IGw7IGkrKylzW2ldID0gdC5nZXRVaW50MzIoaSA8PCAyKTtcXG5zW2RhdGEubGVuZ3RoID4+IDJdIHw9IDB4ODAgPDwgKDI0IC0gKGRhdGEubGVuZ3RoICYgMykgKiA4KTtcXG5zW2wgLSAxXSA9IGRhdGEubGVuZ3RoIDw8IDM7XFxudmFyIHcgPSBbXSwgZiA9IFtcXG5mdW5jdGlvbiAoKSB7IHJldHVybiBtWzFdICYgbVsyXSB8IH5tWzFdICYgbVszXTsgfSxcXG5mdW5jdGlvbiAoKSB7IHJldHVybiBtWzFdIF4gbVsyXSBeIG1bM107IH0sXFxuZnVuY3Rpb24gKCkgeyByZXR1cm4gbVsxXSAmIG1bMl0gfCBtWzFdICYgbVszXSB8IG1bMl0gJiBtWzNdOyB9LFxcbmZ1bmN0aW9uICgpIHsgcmV0dXJuIG1bMV0gXiBtWzJdIF4gbVszXTsgfVxcbl0sIHJvbCA9IGZ1bmN0aW9uIChuLCBjKSB7IHJldHVybiBuIDw8IGMgfCBuID4+PiAoMzIgLSBjKTsgfSxcXG5rID0gWzE1MTg1MDAyNDksIDE4NTk3NzUzOTMsIC0xODk0MDA3NTg4LCAtODk5NDk3NTE0XSxcXG5tID0gWzE3MzI1ODQxOTMsIC0yNzE3MzM4NzksIG51bGwsIG51bGwsIC0xMDA5NTg5Nzc2XTtcXG5tWzJdID0gfm1bMF0sIG1bM10gPSB+bVsxXTtcXG5mb3IgKGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkgKz0gMTYpIHtcXG52YXIgbyA9IG0uc2xpY2UoMCk7XFxuZm9yIChqID0gMDsgaiA8IDgwOyBqKyspXFxud1tqXSA9IGogPCAxNiA/IHNbaSArIGpdIDogcm9sKHdbaiAtIDNdIF4gd1tqIC0gOF0gXiB3W2ogLSAxNF0gXiB3W2ogLSAxNl0sIDEpLFxcbnQgPSByb2wobVswXSwgNSkgKyBmW2ogLyAyMCB8IDBdKCkgKyBtWzRdICsgd1tqXSArIGtbaiAvIDIwIHwgMF0gfCAwLFxcbm1bMV0gPSByb2wobVsxXSwgMzApLCBtLnBvcCgpLCBtLnVuc2hpZnQodCk7XFxuZm9yIChqID0gMDsgaiA8IDU7IGorKyltW2pdID0gbVtqXSArIG9bal0gfCAwO1xcbn07XFxudCA9IG5ldyBEYXRhVmlldyhuZXcgVWludDMyQXJyYXkobSkuYnVmZmVyKTtcXG5mb3IgKHZhciBpID0gMDsgaSA8IDU7IGkrKyltW2ldID0gdC5nZXRVaW50MzIoaSA8PCAyKTtcXG5cXG52YXIgaGV4ID0gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKG5ldyBVaW50OEFycmF5KG5ldyBVaW50MzJBcnJheShtKS5idWZmZXIpLCBmdW5jdGlvbiAoZSkge1xcbnJldHVybiAoZSA8IDE2ID8gXFxcIjBcXFwiIDogXFxcIlxcXCIpICsgZS50b1N0cmluZygxNik7XFxufSkuam9pbihcXFwiXFxcIik7XFxucmV0dXJuIGhleDtcXG59XFxuXFxuXFxuZnVuY3Rpb24gc2VhcmNoMShzLCBwYWdlKSB7XFxuICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSlcXG4gICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgcCA9IDBcXG4gICAgfSBlbHNlIGlmIChwYWdlID09IDIpIHtcXG4gICAgICAgIHAgPSAxOVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcCA9IHBhcnNlSW50KHBhZ2UpICsgMjBcXG4gICAgfVxcbiAgICBzdG9yYWdlMC5wdXRNeVZhcigncGFnZScsIHApXFxuICAgIHNzID0gcyArICdVUkJCUkdST1VOJ1xcbiAgICB0ayA9IENyeXB0b0pTLlNIQTEoc3MpLnRvU3RyaW5nKCk7XFxuICAgIHZhciBqID0gZmV0Y2goYGh0dHBzOi8vYXBpLmN1cGZveC5hcHAvYXBpL3YyL3NlYXJjaC8/dGV4dD0ke3N9JnR5cGU9MCZmcm9tPSR7cH0mc2l6ZT0yMCZkb3ViYW5faWQ9MCZ0b2tlbj0ke3RrfWApXFxuICAgIHRyeSB7XFxuICAgICAgICB2YXIganNvbiA9IEpTT04ucGFyc2UoailcXG4gICAgfSBjYXRjaCB7XFxuICAgICAgICB2YXIganNvbiA9IHt9XFxuICAgIH1cXG4gICAgcmV0dXJuIGpzb25cXG59XFxuXFxuZnVuY3Rpb24gc2VhcmNoKHMsIHBhZ2UpIHtcXG4gICAgZXZhbChnZXRDcnlwdG9KUygpKVxcbiAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICBwID0gMFxcbiAgICB9IGVsc2UgaWYgKHBhZ2UgPT0gMikge1xcbiAgICAgICAgcCA9IDE5XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBwID0gcGFyc2VJbnQocGFnZSkgKyAyMFxcbiAgICB9XFxuICAgIHN0b3JhZ2UwLnB1dE15VmFyKCdwYWdlJywgcClcXG4gICAgc3MgPSBzICsgJ1VSQkJSR1JPVU4nXFxuICAgIHRrID0gQ3J5cHRvSlMuU0hBMShzcykudG9TdHJpbmcoKTtcXG4gICAgdmFyIGogPSBmZXRjaChgaHR0cHM6Ly9hcGkuY3VwZm94LmFwcC9hcGkvdjIvc2VhcmNoLz90ZXh0PSR7c30mdHlwZT0wJmZyb209JHtwfSZzaXplPTIwJmRvdWJhbl9pZD0wJnRva2VuPSR7dGt9YClcXG4gICAgdHJ5IHtcXG4gICAgICAgIHZhciBqc29uID0gSlNPTi5wYXJzZShqKVxcbiAgICB9IGNhdGNoIHtcXG4gICAgICAgIHZhciBqc29uID0ge31cXG4gICAgfVxcbiAgICByZXR1cm4ganNvblxcbn1cXG5cXG5mdW5jdGlvbiBjdXBmb3hmaWx0ZXIoZGljdCxwYWdlKSB7XFxuICAgIHZhciBzPU9iamVjdC52YWx1ZXMoZGljdCkuam9pbihcXFwiXFxcIik7XFxuICAgIGxldCBzdGFydD0wO1xcbiAgICBsZXQgbGltaXQ9MjQ7XFxuICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgIHN0YXJ0ID0gMDtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHN0YXJ0PXBhcnNlSW50KHBhZ2UpK2xpbWl0O1xcbiAgICB9XFxuICAgIHN0b3JhZ2UwLnB1dE15VmFyKCdjZnBhZ2UnLCBzdGFydClcXG4gICAgLy9sb2coc3RhcnQrXFxcIiAgXFxcIitsaW1pdClcXG4gICAgc3MgPSBzICsgJ1VSQkJSR1JPVU4nXFxuICAgIHRrID0gc2hhMShzcylcXG4gICAgdmFyIHVybD1gaHR0cHM6Ly9hcGkuY3VwZm94LmFwcC9hcGkvdjIvZmlsdGVyLz90YWdzPSR7ZGljdC50YWdzfSZnZW5yZXM9JHtkaWN0LmdlbnJlc30mY291bnRyaWVzPSR7ZGljdC5jb3VudHJpZXN9JnllYXJfcmFuZ2U9JHtkaWN0LnllYXJfcmFuZ2V9JnNvcnQ9JHtkaWN0LnNvcnR9JnN0YXJ0PSR7c3RhcnR9JmxpbWl0PSR7bGltaXR9JnRva2VuPSR7dGt9YDtcXG4gICAgLy9sb2codXJsKVxcbiAgICB2YXIgaiA9IGZldGNoKGAke3VybH1gKVxcbiAgICB0cnkge1xcbiAgICAgICAgdmFyIGpzb24gPSBKU09OLnBhcnNlKGopXFxuICAgIH0gY2F0Y2gge1xcbiAgICAgICAgdmFyIGpzb24gPSB7fVxcbiAgICB9XFxuICAgIHJldHVybiBqc29uXFxufVxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Ye95pWwMlwiLFwicGF0aFwiOlwienRvb2xzXCIsXCJydWxlXCI6XCJqczpcXG4vL3VybOino+aekFxcbmxldCB7XFxuICAgIHVybFBhcnNlXFxufSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3Rvb2xcXFwiKTtcXG5cXG5cXG5mdW5jdGlvbiBzdHJpbmdJbkFycmF5KHN0ciwgYXJyKSB7XFxuICAgIHJldHVybiBhcnIuc29tZShpdGVtID0+IHN0ci5pbmNsdWRlcyhpdGVtKSk7XFxufVxcblxcblxcbi8v5o6S6Zmk5rKh6Lev5b6EXFxuZnVuY3Rpb24gbm9maWxlKHUpIHtcXG4gICAgdXJsID0gdS5ocmVmXFxuICAgIGlmIChzdHJpbmdJbkFycmF5KHVybCwgWydtYWduZXQnLCAnZWQyayddKSkge1xcbiAgICAgICAgQml0VFMucHVzaCh1KTtcXG4gICAgICAgIHJldHVybiB0cnVlXFxuICAgIH1cXG4gICAgdmFyIHUgPSB1cmxQYXJzZSh1cmwpXFxuICAgIGlmICh1LkZpbGUgPT0gJycgfHwgdS5GaWxlID09ICcvJyB8fCB1LlJlZiAhPSBudWxsKSB7XFxuICAgICAgICByZXR1cm4gdHJ1ZVxcbiAgICB9XFxufVxcbi8v5Y676YeNXFxuZnVuY3Rpb24gdW5pcXVlKGFycikge1xcbiAgICBjb25zdCByZXMgPSBuZXcgTWFwKClcXG4gICAgcmV0dXJuIGFyci5maWx0ZXIoKGEpID0+ICFyZXMuaGFzKGEudXJsKSAmJiByZXMuc2V0KGEudXJsLCAxKSlcXG59XFxuXFxuLy/ph43lrprlkJHlj6/nlKjpk77mjqVcXG5mdW5jdGlvbiBnZXRUdXJsKHUpIHtcXG4gICAgLy9sb2codSlcXG4gICAgdHJ5IHtcXG4gICAgICAgIHZhciB1cmwgPSBiYXNlNjREZWNvZGUodSk7XFxuICAgIH0gY2F0Y2gge1xcbiAgICAgICAgdmFyIHVybCA9IHVcXG4gICAgfVxcbiAgICBpZiAoIXVybC5pbmNsdWRlcygnaHR0cCcpIHx8IHVybCA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgIHVybCA9IHVcXG4gICAgfVxcbiAgICB1cmwgPSB1cmwuaW5jbHVkZXMoJz8nKSA/IHVybC5zcGxpdCgnPycpWzBdIDogdXJsXFxuICAgIGxvZygndXJsOicgKyB1cmwpXFxuICAgIHZhciBmaWxlID0gdXJsUGFyc2UodXJsKS5GaWxlXFxuICAgIHZhciB0dXJsID0gJydcXG4gICAgbGV0IGhlYWQgPSBKU09OLnBhcnNlKHJlcXVlc3QodXJsLCB7XFxuICAgICAgICBvbmx5SGVhZGVyczogdHJ1ZVxcbiAgICB9KSk7XFxuICAgIC8vbG9nKGhlYWQpXFxuICAgIGlmIChoZWFkLnVybCAhPSB1bmRlZmluZWQgfHwgaGVhZC51cmwgIT0gJycpIHtcXG4gICAgICAgIHZhciBqdXJscCA9IHVybFBhcnNlKGhlYWQudXJsKVxcbiAgICAgICAgaWYgKGp1cmxwLkZpbGUgPT0gJy8nIHx8IGp1cmxwLkZpbGUgPT0gJycpIHtcXG4gICAgICAgICAgICB0dXJsID0ganVybHAuSG9zdHMgKyBmaWxlXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHR1cmwgPSBoZWFkLnVybFxcbiAgICAgICAgfVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgdHVybCA9IHVybFxcbiAgICB9XFxuICAgIC8vbG9nKCd0dXJsOicrdHVybClcXG4gICAgdHVybCA9IHR1cmwucmVwbGFjZSgvXFxcXD9mcm9tLiskL2dtLCAnJyk7XFxuXFxuICAgIHR1cmwgPSB2aWRlb1JlZkRldGFpbCh0dXJsKVxcbiAgICAvL2xvZyh0dXJsKVxcbiAgICByZXR1cm4gdHVybFxcbn1cXG5cXG5cXG5mdW5jdGlvbiB2aWRlb1JlZkRldGFpbCh1cmwpIHtcXG4gICAgaWYgKHN0cmluZ0luQXJyYXkodXJsLCBbXFxcIjYwODBcXFwiXSkpIHtcXG4gICAgICAgIHVybCA9IHVybC5yZXBsYWNlKFxcXCJ2cGxheVxcXCIsIFxcXCJ2aWRlb1xcXCIpO1xcbiAgICB9IGVsc2UgaWYgKHN0cmluZ0luQXJyYXkodXJsLCBbXFxcInpodWlqdVxcXCJdKSkge1xcbiAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoXFxcInZvZHBsYXlcXFwiLCBcXFwidm9kZGV0YWlsXFxcIik7XFxuICAgIH0gZWxzZSBpZiAoc3RyaW5nSW5BcnJheSh1cmwsIFtcXFwicnJldHNcXFwiXSkpIHtcXG4gICAgICAgIHVybCA9IHVybC5yZXBsYWNlKFxcXCJwbGF5XFxcIiwgXFxcInByb2plY3RcXFwiKVxcbiAgICB9XFxuICAgIHJldHVybiB1cmw7XFxufVxcblxcblxcbi8v5aSa6YCJ5qih5Z2XXFxuZnVuY3Rpb24gTXVsdGlTZWxlY3RNb2RlKG5hbWUsIGlkKSB7XFxuICAgIHJldHVybiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChkYXRhdGl0bGUsIGRhdGF1cmwpID0+IHtcXG4gICAgICAgIGZ1bmN0aW9uIHVuaXF1ZShhcnIpIHtcXG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBNYXAoKVxcbiAgICAgICAgcmV0dXJuIGFyci5maWx0ZXIoKGEpID0+ICFyZXMuaGFzKGEudXJsKSAmJiByZXMuc2V0KGEudXJsLCAxKSlcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBkdW9zZWxlY3QgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFwiZHVvc2VsZWN0XFxcIikgPyBzdG9yYWdlMC5nZXRNeVZhcihcXFwiZHVvc2VsZWN0XFxcIikgOiBbXTtcXG4gICAgICAgIGlmIChkdW9zZWxlY3QuZmluZEluZGV4KHggPT4geC51cmwgPT09IGRhdGF1cmwpID09IC0xKSB7XFxuICAgICAgICAgICAgZHVvc2VsZWN0LnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogZGF0YXRpdGxlLFxcbiAgICAgICAgICAgICAgICB1cmw6IGRhdGF1cmxcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIGR1b3NlbGVjdCA9IHVuaXF1ZShkdW9zZWxlY3QpXFxuICAgICAgICAgICAgdXBkYXRlSXRlbShkYXRhdXJsLCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBg4oCc4oCc4oCd4oCdPHNwYW4gc3R5bGU9XFxcImNvbG9yOiNGRjU3MzNcXFwiPmAgKyBkYXRhdGl0bGVcXG4gICAgICAgICAgICAgICAgLy90aXRsZTpg4oCY4oCYYCtkYXRhdGl0bGUrYOKAmeKAmWBcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgZnVuY3Rpb24gcmVtb3ZlQnlWYWx1ZShhcnIsIHZhbCkge1xcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFycltpXVsndXJsJ10gPT0gdmFsKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnNwbGljZShpLCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZW1vdmVCeVZhbHVlKGR1b3NlbGVjdCwgZGF0YXVybClcXG4gICAgICAgICAgICB1cGRhdGVJdGVtKGRhdGF1cmwsIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGRhdGF0aXRsZVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcImR1b3NlbGVjdFxcXCIsIGR1b3NlbGVjdCk7XFxuICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgIH0sIG5hbWUsIGlkKVxcbn1cXG5cXG4kLmV4dGVuZCh7XFxuICAgIG1zbTogTXVsdGlTZWxlY3RNb2RlLFxcbn0pXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmjqjpgIFcIixcInBhdGhcIjpcInB1c2hcIixcInJ1bGVcIjpcImpzOlxcbmxldCBpdGVtcyA9IFtdO1xcbmxldCBwdXNoaW4gPSBkZWNvZGVVUklDb21wb25lbnQoZ2V0UGFyYW0oXFxcInB1c2h1cmxcXFwiKSk7XFxubGV0IHR2aXAgPSBnZXRJdGVtKCdoaWtlcnR2Ym94c2V0JywgJycpO1xcblxcbml0ZW1zLnB1c2goe1xcbiAgICB0aXRsZTogJ+W9k+WJjUlQ77yaJyArIHR2aXAsXFxuICAgIHVybDogXFxcImlucHV0Oi8vXFxcIiArIGdldEl0ZW0oJ2hpa2VydHZib3hzZXQnLCAnaHR0cDovLycgKyBnZXRJUCgpICsgJzo5OTc4JykgKyBcXFwiLy8vL+ivt+i+k+WFpVRWQm9456uv55qESVDlnLDlnYDvvIzlpoJodHRwOi8vXFxcIiArIGdldElQKCkgKyBcXFwiOjk5NzguanM6c2V0SXRlbSgnaGlrZXJ0dmJveHNldCcsaW5wdXQpO3JlZnJlc2hQYWdlKClcXFwiLFxcbiAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJ1xcbn0pO1xcbnZhciBwdXJsID0gcHVzaGluO1xcblxcbmlmIChwdXNoaW4uaW5jbHVkZXMoJ1xcXFxuJykgJiYgIXB1c2hpbi5zdGFydHNXaXRoKCd7JykpIHtcXG4gICAgcHVybCA9IHB1c2hpbi5yZXBsYWNlKFxcXCJcXFxcblxcXCIsICckJyk7XFxufVxcbmlmIChwdXNoaW4uc3RhcnRzV2l0aCgnaHR0cCcpICYmIHB1c2hpbi5pbmNsdWRlcygnO3snKSkge1xcbiAgICBwdXJsID0gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwi5rW36ZiU55u06ZO+5o6o6YCBXFxcIixcXG4gICAgICAgIFxcXCJ1cmxcXFwiOiBwdXNoaW5cXG4gICAgfSlcXG59XFxuaWYgKHB1c2hpbi5zdGFydHNXaXRoKCdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vcy8nKSkge1xcbiAgICBsZXQgcmVmdG9rZW4gPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2ljeS9pY3ktYWxpLXRva2VuLmpzb24nLCB7fSkpWzBdLnJlZnJlc2hfdG9rZW47XFxuICAgIHB1cmwgPSBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICBcXFwidXJsXFxcIjogcHVzaGluLFxcbiAgICAgICAgXFxcInJlZnJlc2hfdG9rZW5cXFwiOiByZWZ0b2tlblxcbiAgICB9KVxcbn1cXG5pZiAocHVzaGluLmluY2x1ZGVzKCc6NTIwMjAnKSkge1xcbiAgICBpZiAocHVzaGluLmluY2x1ZGVzKCdyZWRpcmVjdFBsYXlVcmwnKSkge1xcbiAgICAgICAgcHVybCA9IEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCLmtbfpmJTmipXlsY/nm7Tpk75cXFwiLFxcbiAgICAgICAgICAgIFxcXCJ1cmxcXFwiOiBwdXNoaW5cXG4gICAgICAgIH0pXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBwdXJsID0gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcIua1t+mYlOe9kemhteaKleWxj1xcXCIsXFxuICAgICAgICAgICAgXFxcInVybFxcXCI6IHB1c2hpblxcbiAgICAgICAgfSlcXG4gICAgfVxcbn1cXG5cXG4vL2xvZygn5o6o6YCBJytwdXJsKTtcXG52YXIgc3RhdGUgPSByZXF1ZXN0KHR2aXAgKyAnL2FjdGlvbicsIHtcXG4gICAgaGVhZGVyczoge1xcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxcbiAgICAgICAgLy8nWC1SZXF1ZXN0ZWQtV2l0aCc6ICdYTUxIdHRwUmVxdWVzdCcsXFxuICAgICAgICAnUmVmZXJlcic6IHR2aXBcXG4gICAgfSxcXG4gICAgdGltZW91dDogMjAwMCxcXG4gICAgYm9keTogJ2RvPXB1c2gmdXJsPScgKyBwdXJsLnJlcGxhY2UoL1xcXFwmL2csICfvvIbvvIYnKSxcXG4gICAgbWV0aG9kOiAnUE9TVCdcXG59KTtcXG4vL2xvZyhzdGF0ZSk7XFxuaWYgKHN0YXRlID09ICdvaycpIHtcXG4gICAgLy9sb2coc3RhdGUpO1xcbiAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi4pyFXFxcIiArIHN0YXRlLFxcbiAgICAgICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgYmFjayhmYWxzZSk7XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiXFxuICAgIH0pO1xcbn0gZWxzZSB7XFxuICAgIC8vbG9nKHN0YXRlKTtcXG4gICAgaXRlbXMucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuKdjlxcXCIgKyBzdGF0ZSxcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIlxcbiAgICB9KTtcXG5cXG59XFxuc2V0UmVzdWx0KGl0ZW1zKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuiuvue9rlwiLFwicGF0aFwiOlwic2V0dGluZ1wiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXVxcblxcbmFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgIHJlZnJlc2hQYWdlKClcXG59KSk7XFxuXFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICforr7nva5JUOWcsOWdgCcsXFxuICAgICAgICB1cmw6IFxcXCJpbnB1dDovL1xcXCIgKyBnZXRJdGVtKCdoaWtlcnR2Ym94c2V0JywgJ2h0dHA6Ly8nICsgZ2V0SVAoKSArICc6OTk3OCcpICsgXFxcIi8vLy/or7fovpPlhaV0dmJveOaOqOmAgUlQ5Zyw5Z2A77yM5aaCaHR0cDovL1xcXCIgKyBnZXRJUCgpICsgXFxcIjo5OTc4LmpzOnNldEl0ZW0oJ2hpa2VydHZib3hzZXQnLGlucHV0KTtyZWZyZXNoUGFnZSgpXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nXFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGdldEl0ZW0oJ2hpa2VydHZib3hzZXQnLCAnJyksXFxuICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nXFxuICAgIH0pO1xcblxcbiAgICB2YXIgc2NvbmZpZyA9IHtcXG4gICAgICAgIGhpc3Rvcnk6IGZhbHNlLCAvL+WOhuWPslxcbiAgICAgICAgaGlzdHNob3c6IDEwLCAvL+S/neeVmTEw5LiqXFxuICAgICAgICBzdWdnZXN0OiBmYWxzZSwgLy/lu7rorq5cXG4gICAgfVxcblxcbiAgICB2YXIgc2ZpZyA9IHN0b3JhZ2UwLmdldEl0ZW0oJ3Njb25maWcnLCBzY29uZmlnKTtcXG5cXG4gICAgdmFyIGxhenkgPSAkKCcnKS5sYXp5UnVsZSgobywgaykgPT4ge1xcbiAgICAgICAgdmFyIG9iaiA9IHN0b3JhZ2UwLmdldEl0ZW0oJ3Njb25maWcnLCBvKVxcbiAgICAgICAgaWYgKG9ialtrXSA9PSBmYWxzZSkge1xcbiAgICAgICAgICAgIG9ba10gPSB0cnVlO1xcbiAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oJ3Njb25maWcnLCBvKVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBvW2tdID0gZmFsc2U7XFxuICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbSgnc2NvbmZpZycsIG8pXFxuICAgICAgICB9XFxuICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgfSwgc3RvcmFnZTAuZ2V0SXRlbSgnc2NvbmZpZycsIHNmaWcpLCAnYWN0aW9uJylcXG5cXG4gICAgZnVuY3Rpb24gVG9mKGtleSkge1xcbiAgICAgICAgdmFyIGIgPSBzdG9yYWdlMC5nZXRJdGVtKCdzY29uZmlnJywgc2ZpZylba2V5XVxcbiAgICAgICAgaWYgKGIgPT0gdHJ1ZSB8fCBiID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgIHJldHVybiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tZXNzeS81NS5zdmcnXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tZXNzeS82My5zdmcnXFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgJC5leHRlbmQoe1xcbiAgICAgICAgR29TOiB7XFxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbihrZXkpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0b3JhZ2UwLmdldEl0ZW0oJ3Njb25maWcnLCBzZmlnKVtrZXldO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgc2F2ZTogZnVuY3Rpb24oY29mLCBrZXksIGlucHV0KSB7XFxuICAgICAgICAgICAgICAgIHZhciBvID0gc3RvcmFnZTAuZ2V0SXRlbSgnc2NvbmZpZycsIGNvZik7XFxuICAgICAgICAgICAgICAgIG9ba2V5XSA9IGlucHV0O1xcbiAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKCdzY29uZmlnJywgbyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9KVxcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICflkK/nlKjljoblj7LorrDlvZUnLFxcbiAgICAgICAgdXJsOiBsYXp5LnJlcGxhY2UoJ2FjdGlvbicsICdoaXN0b3J5JyksXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfaWNvblxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgIHBpY191cmw6IFRvZignaGlzdG9yeScpLFxcbiAgICB9KTtcXG5cXG4gICAgaWYgKHNmaWcuaGlzdG9yeSA9PSB0cnVlKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn5Y6G5Y+y5L+d55WZJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgICAgICBkZXNjOiAn6buY6K6kMTAnLFxcbiAgICAgICAgICAgIHVybDogJC50b1N0cmluZygoY29mKSA9PiB7XFxuICAgICAgICAgICAgICAgICQuR29TLnNhdmUoY29mLCAnaGlzdHNob3cnLCBOdW1iZXIoaW5wdXQpKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5Y6G5Y+y5pWw5o2u5L+d55WZ6K6+572uOicgKyBpbnB1dDtcXG4gICAgICAgICAgICB9LCBzdG9yYWdlMC5nZXRJdGVtKCdzY29uZmlnJywgc2ZpZykpLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogJC5Hb1MuZ2V0KCdoaXN0c2hvdycpID09IDAgPyAxMCA6ICQuR29TLmdldCgnaGlzdHNob3cnKSxcXG4gICAgICAgICAgICAgICAgdHlwZTogJ251bWJlcidcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICB9XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+WQr+eUqOW7uuiuricsXFxuICAgICAgICB1cmw6IGxhenkucmVwbGFjZSgnYWN0aW9uJywgJ3N1Z2dlc3QnKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9pY29uXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgcGljX3VybDogVG9mKCdzdWdnZXN0JyksXFxuICAgIH0pO1xcblxcbiAgICAvL2xvZyhzZmlnKVxcblxcbn1cXG5cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIng1YWlcIixcInBhdGhcIjpcIng1YWlcIixcInJ1bGVcIjpcIiQuZXhwb3J0cyA9IGZ1bmN0aW9uKHJ1bGUsIGFuY2hvcklkKSB7XFxuICAgIHJldHVybiAkLnRvU3RyaW5nKChydWxlLCBhbmNob3JJZCwgbW9iYW4pID0+IHtcXG4gICAgICAgIGlmICh3aW5kb3cuY2hlY2swID09IG51bGwpIHtcXG4gICAgICAgICAgICBmdW5jdGlvbiBjaGVjazAoKSB7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXFxcImh0bWxcXFwiKS5pbm5lckhUTUw7XFxuICAgICAgICAgICAgICAgICAgICBmYmEucHV0VmFyKFxcXCJodG1sMFxcXCIsIGh0bWwpO1xcbiAgICAgICAgICAgICAgICAgICAgZmJhLnBhcnNlTGF6eVJ1bGVBc3luYygkJCQoKS5sYXp5UnVsZSgocnVsZSwgdXJsLCBhbmNob3JJZCwgbW9iYW4pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IGdldFZhcihcXFwiaHRtbDBcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpdXJsID0gJyc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVmFyKFxcXCJodG1sMFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xvZygndXJsOicgKyB1cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnaHR0cHM6Ly9jdXBmb3guYXBwL3BhZ2U/dXJsPScpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZXVybCA9IHVybC5yZXBsYWNlKC8uK3VybD0oLio/KSYuKy9nbSwgJyQxJylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl1cmwgPSBiYXNlNjREZWNvZGUoYmFzZXVybClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcignaWZyYW1lJywgaXVybClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygnaXVybDonICsgaXVybClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1cmwuc3RhcnRzV2l0aCgnaHR0cHM6Ly9tLnFtdHYucHJvLyMvdGhpcmQtcGFnZT9wbGF5dXJsPScpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZXVybD11cmwucmVwbGFjZSgvLio/cGxheXVybD0oLio/KSQvZ20sJyQxJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdXJsPWRlY29kZVVSSUNvbXBvbmVudChiYXNldXJsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcignaWZyYW1lJywgaXVybCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coJ2l1cmw6JyArIGl1cmwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdXJsLmxlbmd0aCA+IDAgPyBcXFwiMVxcXCIgOiBcXFwiMFxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coZS50b1N0cmluZygpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9LCBydWxlLCBsb2NhdGlvbi5ocmVmLCBhbmNob3JJZCwgbW9iYW4pLCAkJCQudG9TdHJpbmcoKHJ1bGUsIG1vYmFuKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9mYmEubG9nKGlucHV0KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vZmJhLmxvZyhydWxlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcXFwiMFxcXCIgPT0gaW5wdXQpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmNoZWNrYyA9IHdpbmRvdy5jaGVja2MgKyAxO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmlmICh3aW5kb3cuY2hlY2tjID4gMTIwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYmEubG9nKFxcXCLmiafooYzotoXov4czMOenku+8jOaXoOazleino+aekFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyovXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQod2luZG93LmNoZWNrMCwgMjUwKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy99XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IGZiYS5nZXRWYXIoJ2lmcmFtZScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYmEubG9nKCdtb2JhbicgKyBtb2JhbilcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vYmFuID09ICcxJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsICsgJyNpbW1lcnNpdmVUaGVtZSMnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJhLmxvZyh1cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGU6IHJ1bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+W9seeJh+ivpuaDhScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVSdWxlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VzOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9wP3J1bGU9JyArIHJ1bGUgKyAnJnU9JyArIHVybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRSdWxlOiBcXFwiXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5jaGVja3VybCA9IGxvY2F0aW9uLmhyZWY7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrdTAoKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LmNoZWNrdXJsICE9IGxvY2F0aW9uLmhyZWYpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2hhc2jlj5HnlJ/kuoblj5jljJZcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY2hlY2tjID0gMDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2swKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMjAwMCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2t1MCwgMjUwKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja3UwKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSwgcnVsZSwgbW9iYW4pKTtcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgZmJhLmxvZyhlLnRvU3RyaW5nKCkpO1xcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCh3aW5kb3cuY2hlY2swLCAyNTApO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHdpbmRvdy5jaGVja2MgPSAwO1xcbiAgICAgICAgICAgIHdpbmRvdy5jaGVjazAgPSBjaGVjazA7XFxuICAgICAgICAgICAgY2hlY2swKCk7XFxuICAgICAgICB9XFxuICAgIH0sIHJ1bGUsIGFuY2hvcklkLCBnZXRJdGVtKCdhaScsICcwJykpO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIjUu6Iy25p2v6JmOXCIsXCJwYXRoXCI6XCJhaW9iYlwiLFwicnVsZVwiOlwianM6XFxubGV0IGR1cmwgPSBnZXRNeVZhcihcXFwiZHVybFxcXCIsIFxcXCJcXFwiKTtcXG5pZiAoZHVybCAhPSAnJykge1xcbiAgICBNWV9VUkwgPSBkdXJsXFxuICAgIGxvZyhkdXJsKVxcblxcbiAgICBsZXQgdXJsID0gZHVybDtcXG4gICAgbGV0IGlkID0gdXJsO1xcbiAgICB0cnkge1xcbiAgICAgICAgdmFyIGh0bWwgPSBmZXRjaCh1cmwpO1xcbiAgICB9IGNhdGNoIHtcXG4gICAgICAgIHZhciBodG1sID0gJydcXG4gICAgfVxcbiAgICB2YXIgcnVsZSA9IE1ZX1JVTEUudGl0bGVcXG4gICAgaWYgKGh0bWwgPT0gdW5kZWZpbmVkIHx8IGh0bWwgPT0gJycpIHtcXG4gICAgICAgIHRvYXN0KCfml6DmlbDmja4nKVxcbiAgICAgICAgY2xlYXJNeVZhcihcXFwic291XFxcIik7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJkdXJsXFxcIik7XFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgIH0gZWxzZSB7XFxuXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBwZGZoKGh0bWwsICdoNCYmVGV4dCcpLFxcbiAgICAgICAgICAgIGltZzogcGQoaHRtbCwgJ2ltZyYmc3JjJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYycsXFxuICAgICAgICAgICAgZGVzYzogcGRmaChodG1sLCAnYm9keSYmLnB1YlRpbWUmJlRleHQnKSxcXG4gICAgICAgICAgICB1cmw6IHVybCxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogdXJsLFxcbiAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG5cXG5cXG4gICAgICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCAnLm1vdmllWnkmJmEnKVxcbiAgICAgICAgaWYgKGxpc3QgJiYgbGlzdC5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgTVlfVVJMID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgIGxldCB7XFxuICAgICAgICAgICAgICAgICAgICBtZXJnZVxcbiAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbD9ydWxlPVxcXCIgKyBydWxlKTtcXG4gICAgICAgICAgICAgICAgbGlzdCA9IGxpc3QubWFwKGl0ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gcGRmaChpdCwgJ2EmJmhyZWYnKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ID0gcGRmaChpdCwgJ3VsJiZUZXh0Jyk7XFxuICAgICAgICAgICAgICAgICAgICB1ID0gXFxcImhpa2VyOi8vcGFnZS9wP3J1bGU9XFxcIiArIHJ1bGUgKyBcXFwiJnU9XFxcIiArIGJhc2U2NEVuY29kZSh1KTtcXG4gICAgICAgICAgICAgICAgICAgIHUgPSBnZXRJdGVtKCdhaScsICcwJykgPT0gJzAnID8gdSA6IHUgKyAnI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG1lcmdlKHQsICfor6bmg4UnLCAxKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6ICdodHRwczovL3d3dy43MjU5OTguY29tL3N0YXRpYy9zZWFyY2gvaW1hZ2VzL29uTGluZS5wbmcnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiB1cmwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb206ICdob21lJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBkID0gZC5jb25jYXQobGlzdClcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIGxvZyhlLnRvU3RyaW5nKCkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfml6DotYTmupAnLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgICAgICBzZXRSZXN1bHQoZClcXG4gICAgfVxcblxcbn1cXG5zID0gZ2V0TXlWYXIoXFxcInNvdVxcXCIsIFxcXCJcXFwiKTtcXG5cXG5sZXQgciA9IFxcXCJcXFwiO1xcbmlmIChzICE9IFxcXCJcXFwiKSB7XFxuXFxuICAgIHZhciB1cmwgPSBwb3N0KGBodHRwczovL3d3dy43MjU5OTguY29tL2tleXdvcmRzLmh0bWxgLCB7XFxuICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAga2V5d29yZHM6IHMsXFxuICAgICAgICAgICAgdHlwZTogJ21vdmllJ1xcbiAgICAgICAgfSxcXG4gICAgICAgIG9ubHlIZWFkZXJzOiB0cnVlXFxuICAgIH0pXFxuICAgIHZhciBqc29uID0gSlNPTi5wYXJzZSh1cmwpXFxuICAgIHZhciB0dXJsID0ganNvbi51cmwucmVwbGFjZSgvLVxcXFxkKy5odG1sJC8sICctJyArIE1ZX1BBR0UgKyAnLmh0bWwnKVxcbiAgICBNWV9VUkwgPSB0dXJsXFxuICAgIHZhciBodG1sID0gZmV0Y2godHVybClcXG5cXG4gICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsICdib2R5JiYuZWFjaCcpXFxuICAgIC8vbG9nKGxpc3QpXFxuXFxuICAgIGxldCB7XFxuICAgICAgICB3cmFwXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90b29sXFxcIik7XFxuXFxuICAgIGZvciAobGV0IGl0IG9mIGxpc3QpIHtcXG4gICAgICAgIGxldCBuYW1lID0gcGRmaChpdCwgJ2EmJnRpdGxlJyk7XFxuICAgICAgICBsZXQgaW1nID0gcGQoaXQsICdpbWcmJnNyYycpO1xcbiAgICAgICAgaWYgKGltZyA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgIGltZyA9IFxcXCJodHRwczovL3d3dy43MjU5OTguY29tL3N0YXRpYy9zZWFyY2gvaW1hZ2VzL3ByZWxvYWRJbWcucG5nXFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCB1cmwgPSBwZChpdCwgJ2EmJmhyZWYnKTtcXG4gICAgICAgIGxldCBkZXNjID0gcGRmYShpdCwgJ2JvZHkmJi5pbmZvJiZhJykubWFwKHggPT4gcGRmaCh4LCAnYSYmVGV4dCcpKS5qb2luKCcgJyk7XFxuICAgICAgICBsZXQgc2NvcmUgPSBwZGZoKGl0LCAnLm5vU2NvcmUmJlRleHQnKTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHdyYXAobmFtZSwgcyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYycsXFxuICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgZGVzYzogJ+ivhOWIhjonICsgc2NvcmUgKyAnXFxcXG4nICsgZGVzYyxcXG4gICAgICAgICAgICB1cmw6ICQodXJsKS5sYXp5UnVsZSgocnVsZSwgdXJsLCBzKSA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciBjbHMgPSBmaW5kSXRlbXNCeUNscyh1cmwpO1xcbiAgICAgICAgICAgICAgICBpZiAoISFjbHMpIHtcXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW1CeUNscyh1cmwpXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gaW5wdXQ7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaWQgPSB1cmw7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IGZldGNoKHVybCk7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgJy5tb3ZpZVp5JiZhJylcXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaXN0ICYmIGxpc3QubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ZX1VSTCA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3Rvb2w/cnVsZT1cXFwiICsgcnVsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBsaXN0Lm1hcChpdCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IHBkZmgoaXQsICdhJiZocmVmJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdCA9IHBkZmgoaXQsICd1bCYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IFxcXCJoaWtlcjovL3BhZ2UvcD9ydWxlPVxcXCIgKyBydWxlICsgXFxcIiZ1PVxcXCIgKyBiYXNlNjRFbmNvZGUodSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gZ2V0SXRlbSgnYWknLCAnMCcpID09ICcwJyA/IHUgOiB1ICsgJyNpbW1lcnNpdmVUaGVtZSMnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBtZXJnZSh0LCAn6K+m5oOFJywgMSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly93d3cuNzI1OTk4LmNvbS9zdGF0aWMvc2VhcmNoL2ltYWdlcy9vbkxpbmUucG5nJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB1LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRUaXRsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsczogdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tOiAnaG9tZScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKGlkLCBsaXN0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhlLnRvU3RyaW5nKCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKGlkLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5peg6LWE5rqQJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsczogdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgfSwgTVlfUlVMRS50aXRsZSwgdXJsLCBzKSxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogdXJsLFxcbiAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgfVxcblxcbiAgICBzZXRSZXN1bHQoZClcXG59IGVsc2Uge1xcblxcbn1cXG5cXG5pZiAoZ2V0SXRlbSgnaG9tZScsICflhbMnKSA9PSAn5byAJykge1xcbiAgICBmdW5jdGlvbiBzZXRMaXN0cyhpdGVtKSB7XFxuICAgICAgICBNWV9VUkwgPSAnaHR0cHM6Ly93d3cuNzI1OTk4LmNvbS8nO1xcbiAgICAgICAgdmFyIHRpdGxlID0gaXRlbS5zcGxpdCgnIycpWzBdXFxuICAgICAgICB2YXIga2V5ID0gaXRlbS5zcGxpdCgnIycpWzFdXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tb3JlLzEwLnBuZydcXG4gICAgICAgIH0pXFxuXFxuICAgICAgICB2YXIgaHRtbCA9IGZldGNoKGBodHRwczovL3d3dy43MjU5OTguY29tL3lpbmdrdS1saXN0LyR7a2V5fS0wLTAtMC0wLTAtMC5odG1sYClcXG4gICAgICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCAnYm9keSYmLmVhY2gnKVxcblxcbiAgICAgICAgbGlzdC5tYXAoeCA9PiB7XFxuICAgICAgICAgICAgdmFyIG5hbWUgPSBwZGZoKHgsICdhJiZ0aXRsZScpXFxuICAgICAgICAgICAgbGV0IGltZyA9IHBkKHgsICdpbWcmJnNyYycpO1xcbiAgICAgICAgICAgIGlmIChpbWcgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgaW1nID0gXFxcImh0dHBzOi8vd3d3LjcyNTk5OC5jb20vc3RhdGljL3NlYXJjaC9pbWFnZXMvcHJlbG9hZEltZy5wbmdcXFwiO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQgdXJsID0gcGQoeCwgJ2EmJmhyZWYnKTtcXG4gICAgICAgICAgICBsZXQgc2NvcmUgPSBwZGZoKHgsICcubm9TY29yZSYmVGV4dCcpO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBuYW1lLFxcbiAgICAgICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICAgICAgZGVzYzogc2NvcmUsXFxuICAgICAgICAgICAgICAgIHVybDogJCgnJykubGF6eVJ1bGUoKG4sIHUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJzb3VcXFwiLCBuKVxcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2R1cmwnLCB1KVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICB9LCBuYW1lLCB1cmwpXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgIH1cXG5cXG4gICAgWyfnlLXlvbEjMScsICfnlLXop4bliacjMicsICfliqjmvKsjMycsICfnuqrlvZXniYcjNCddLm1hcCh4ID0+IHtcXG5cXG4gICAgICAgIHNldExpc3RzKHgpXFxuICAgIH0pXFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiNi7nlLXlvbHni5dcIixcInBhdGhcIjpcImR5ZG9nXCIsXCJydWxlXCI6XCJqczpcXG5NWV9VUkw9J2h0dHBzOi8vd3d3LmRpYW55aW5nZ291LmNvbS9zb01vcmUvYWxsLWFsbC1hbGwtYWxsLSc7XFxubGV0IGR1cmwgPSBnZXRNeVZhcihcXFwiZHVybFxcXCIsIFxcXCJcXFwiKTtcXG5pZiAoZHVybCAhPSAnJykge1xcbiAgICAvL2xvZyhkdXJsKVxcblxcbiAgICBsZXQgdXJsID0gZHVybDtcXG4gICAgbGV0IGlkID0gdXJsO1xcbiAgICBsZXQgbmFtZSA9IHM7XFxuICAgIHRyeSB7XFxuICAgICAgICB2YXIgaHRtbCA9IGZldGNoKHVybCk7XFxuICAgIH0gY2F0Y2gge1xcbiAgICAgICAgdmFyIGh0bWwgPSAnJ1xcbiAgICB9XFxuICAgIHZhciBydWxlID0gTVlfUlVMRS50aXRsZVxcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHBkZmgoaHRtbCwgJ2g0JiZUZXh0JyksXFxuICAgICAgICBpbWc6IHBkZmgoaHRtbCwgJ2ltZyYmZGF0YS11cmwnKSxcXG4gICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWMnLFxcbiAgICAgICAgZGVzYzogcGRmaChodG1sLCAnYm9keSYmLnB1YlRpbWUmJlRleHQnKSxcXG4gICAgICAgIHVybDogdXJsLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBpZDogdXJsLFxcbiAgICAgICAgICAgIGluaGVyaXRUaXRsZTogZmFsc2VcXG4gICAgICAgIH1cXG4gICAgfSlcXG5cXG4gICAgbGV0IGh0bWwgPSBmZXRjaChgaHR0cHM6Ly93d3cuZGlhbnlpbmdnb3UuY29tL1NwaWRlck1vdmllL3p5LyR7bmFtZX1gLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgJ3gtcmVxdWVzdGVkLXdpdGgnOiAnWE1MSHR0cFJlcXVlc3QnXFxuICAgICAgICB9XFxuICAgIH0pO1xcblxcbiAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgJy5tb3ZpZVp5JiZhJylcXG4gICAgaWYgKGxpc3QgJiYgbGlzdC5sZW5ndGggPiAwKSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIE1ZX1VSTCA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIGxldCB7XFxuICAgICAgICAgICAgICAgIHdyYXAxXFxuICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3Rvb2w/cnVsZT1cXFwiICsgcnVsZSk7XFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgbGlzdCA9IGxpc3QubWFwKGl0ID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBwZGZoKGl0LCAnYSYmaHJlZicpO1xcbiAgICAgICAgICAgICAgICBsZXQgdCA9IHBkZmgoaXQsICdsaSwwJiZUZXh0Jyk7XFxuICAgICAgICAgICAgICAgIGxldCB3ZWI9cGRmaChpdCwgJ2xpLDEmJlRleHQnKTtcXG4gICAgICAgICAgICAgICAgdSA9IFxcXCJoaWtlcjovL3BhZ2UvcD9ydWxlPVxcXCIgKyBydWxlICsgXFxcIiZ1PVxcXCIgKyBiYXNlNjRFbmNvZGUodSk7XFxuICAgICAgICAgICAgICAgIHUgPSBnZXRJdGVtKCdhaScsICcwJykgPT0gJzAnID8gdSA6IHUgKyAnI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB3cmFwMSh3ZWIrJy0nK3QsIHMpLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly93d3cuNzI1OTk4LmNvbS9zdGF0aWMvc2VhcmNoL2ltYWdlcy9vbkxpbmUucG5nJyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHVybDogdSxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbHM6IHVybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlVGl0bGU6dCxcXG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWI6d2ViLFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgZCA9IGQuY29uY2F0KGxpc3QpXFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgbG9nKGUudG9TdHJpbmcoKSk7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgc2V0UmVzdWx0KGQpXFxufVxcbnMgPSBnZXRNeVZhcihcXFwic291XFxcIiwgXFxcIlxcXCIpO1xcbmxldCByID0gXFxcIlxcXCI7XFxuaWYgKHMgIT0gXFxcIlxcXCIpIHtcXG4gICAgdmFyIHBhZ2UgPSBNWV9QQUdFO1xcbiAgICB2YXIgdXJsID0gYGh0dHBzOi8vd3d3LmRpYW55aW5nZ291LmNvbS9zby8ke3N9L3BhZ2VfJHtwYWdlfS5odG1sYDtcXG4gICAgLy9sb2codXJsKVxcbiAgICB2YXIgaHRtbCA9IGZldGNoKHVybClcXG5cXG4gICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsICdib2R5JiYuZWFjaCcpXFxuICAgIC8vbG9nKGxpc3QpXFxuXFxuICAgIGxldCB7XFxuICAgICAgICB3cmFwXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90b29sXFxcIik7XFxuXFxuICAgIGZvciAobGV0IGl0IG9mIGxpc3QpIHtcXG4gICAgICAgIGxldCBuYW1lID0gcGRmaChpdCwgJ2EmJnRpdGxlJyk7XFxuICAgICAgICBsZXQgaW1nID0gcGQoaXQsICdpbWcmJmRhdGEtdXJsJyk7XFxuICAgICAgICBpZiAoaW1nID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgaW1nID0gXFxcImh0dHBzOi8vd3d3LmRpYW55aW5nZ291LmNvbS9WaWV3L2ltYWdlcy9ibGFua19iZy5wbmdcXFwiO1xcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IHVybCA9IHBkKGl0LCAnYSYmaHJlZicpO1xcbiAgICAgICAgbGV0IGRlc2MgPSBwZGZhKGl0LCAnYm9keSYmLmluZm8mJmEnKS5tYXAoeCA9PiBwZGZoKHgsICdhJiZUZXh0JykpLmpvaW4oJyAnKTtcXG4gICAgICAgIGxldCBzY29yZSA9IHBkZmgoaXQsICcubm9TY29yZSYmVGV4dCcpO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogd3JhcChuYW1lLCBzKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljJyxcXG4gICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICBkZXNjOiAn6K+E5YiGOicgKyBzY29yZSArICdcXFxcbicgKyBkZXNjLFxcbiAgICAgICAgICAgIHVybDogJCh1cmwpLmxhenlSdWxlKChydWxlLCB1cmwsIHMsIG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgdmFyIGNscyA9IGZpbmRJdGVtc0J5Q2xzKHVybCk7XFxuICAgICAgICAgICAgICAgIGlmICghIWNscykge1xcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbUJ5Q2xzKHVybClcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBpbnB1dDtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZCA9IHVybDtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBodG1sID0gZmV0Y2goYGh0dHBzOi8vd3d3LmRpYW55aW5nZ291LmNvbS9TcGlkZXJNb3ZpZS96eS8ke25hbWV9YCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3gtcmVxdWVzdGVkLXdpdGgnOiAnWE1MSHR0cFJlcXVlc3QnXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgJy5tb3ZpZVp5JiZhJylcXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaXN0ICYmIGxpc3QubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ZX1VSTCA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcDFcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3Rvb2w/cnVsZT1cXFwiICsgcnVsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBsaXN0Lm1hcChpdCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IHBkZmgoaXQsICdhJiZocmVmJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdCA9IHBkZmgoaXQsICdsaSwwJiZUZXh0Jyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgd2ViPXBkZmgoaXQsICdsaSwxJiZUZXh0Jyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gXFxcImhpa2VyOi8vcGFnZS9wP3J1bGU9XFxcIiArIHJ1bGUgKyBcXFwiJnU9XFxcIiArIGJhc2U2NEVuY29kZSh1KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBnZXRJdGVtKCdhaScsICcwJykgPT0gJzAnID8gdSA6IHUgKyAnI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHdyYXAxKHdlYisnLScrdCwgcyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly93d3cuNzI1OTk4LmNvbS9zdGF0aWMvc2VhcmNoL2ltYWdlcy9vbkxpbmUucG5nJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB1LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRUaXRsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsczogdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlVGl0bGU6dCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViOndlYixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRJdGVtQWZ0ZXIoaWQsIGxpc3QpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKGUudG9TdHJpbmcoKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICB9LCBNWV9SVUxFLnRpdGxlLCB1cmwsIHMsIG5hbWUpLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiB1cmwsXFxuICAgICAgICAgICAgICAgIGluaGVyaXRUaXRsZTogZmFsc2VcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICB9XFxuXFxuICAgIHNldFJlc3VsdChkKVxcbn0gZWxzZSB7XFxuXFxufVxcblxcbmlmIChnZXRJdGVtKCdob21lJywgJ+WFsycpID09ICflvIAnKSB7XFxuICAgIGZ1bmN0aW9uIHNldExpc3RzKGl0ZW0pIHtcXG4gICAgICAgIE1ZX1VSTCA9ICdodHRwczovL3d3dy5kaWFueWluZ2dvdS5jb20vJztcXG4gICAgICAgIHZhciB0aXRsZSA9IGl0ZW0uc3BsaXQoJyMnKVswXVxcbiAgICAgICAgdmFyIGtleSA9IGl0ZW0uc3BsaXQoJyMnKVsxXVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICAgICAgICAgIGltZzogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbW9yZS8xMC5wbmcnXFxuICAgICAgICB9KVxcblxcbiAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xcbiAgICAgICAgdmFyIHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XFxuICAgICAgICAvL3ZhciBodG1sID0gZmV0Y2goYGh0dHBzOi8vd3d3LmRpYW55aW5nZ291LmNvbS9tUmVjb21tZC8ke2tleX1gKTtcXG4gICAgICAgIHZhciBodG1sID0gZmV0Y2goYGh0dHBzOi8vd3d3LmRpYW55aW5nZ291LmNvbS9zb01vcmUvJHtrZXl9LWFsbC1hbGwtJHt5ZWFyfS1gKTtcXG5cXG4gICAgICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCAnYm9keSYmLmVhY2gnKVxcblxcbiAgICAgICAgbGlzdC5tYXAoeCA9PiB7XFxuICAgICAgICAgICAgdmFyIG5hbWUgPSBwZGZoKHgsICdhJiZ0aXRsZScpXFxuICAgICAgICAgICAgbGV0IGltZyA9IHBkKHgsICdpbWcmJmRhdGEtdXJsJyk7XFxuICAgICAgICAgICAgaWYgKGltZyA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICBpbWcgPSBcXFwiaHR0cHM6Ly93d3cuZGlhbnlpbmdnb3UuY29tL1ZpZXcvaW1hZ2VzL2JsYW5rX2JnLnBuZ1xcXCI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCB1cmwgPSBwZCh4LCAnYSYmaHJlZicpO1xcbiAgICAgICAgICAgIGxldCBzY29yZSA9IHBkZmgoeCwgJy5ub1Njb3JlJiZUZXh0Jyk7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IG5hbWUsXFxuICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBzY29yZSxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgobiwgdSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInNvdVxcXCIsIG4pXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignZHVybCcsIHUpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgIH0sIG5hbWUsIHVybClcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiBob21lKCkge1xcbiAgICAgICAgWyfnlLXlvbEjbW92aWUnLCAn55S16KeG5YmnI3R2JywgJ+e6quW9leeJhyNkb2MnLCAn5Yqo5ryrI2NvbWljJ10ubWFwKHggPT4ge1xcblxcbiAgICAgICAgICAgIHNldExpc3RzKHgpXFxuICAgICAgICB9KVxcbiAgICB9XFxuICAgIFxcbiAgICB2YXIgcGFnZT1NWV9QQUdFO1xcbiAgICBsZXQgdHJ1ZV91cmwgPSBnZXRNeVZhcihNWV9SVUxFLnVybCwgTVlfVVJMKTtcXG4gICAgaWYocGFnZT4xKXtcXG4gICAgICAgIC8vbG9nKHRydWVfdXJsKVxcbiAgICAgICAgdHJ1ZV91cmw9dHJ1ZV91cmwrYC9wYWdlXyR7cGFnZX0uaHRtbGBcXG4gICAgICAgIC8vbG9nKHRydWVfdXJsKVxcbiAgICB9XFxuICAgIHZhciBodG1sID1mZXRjaCh0cnVlX3VybCkucmVwbGFjZSgnJScsJycpO1xcbiAgICAvL2xvZyhodG1sKVxcbiAgICBcXG4gICAgXFxuICAgIGNvbnN0IOWIhuexu+minOiJsiA9IGdldFJhbmdlQ29sb3JzKCk7XFxuICAgIGNvbnN0IOWkp+exu+WumuS9jSA9ICcud18xMDAnO1xcbiAgICBjb25zdCDmi7zmjqXliIbnsbsgPSAnYm9keSYmLnlfZmlsdGVyTWVudTpudGgtY2hpbGQobisyKT5kaXY+ZGl2JztcXG4gICAgY29uc3Qg5bCP57G75a6a5L2NID0gJ2JvZHkmJmE6bm90KDptYXRjaGVzKOWIhuexuykpJztcXG4gICAgY29uc3Qg5YiG57G75qCH6aKYID0gJ2EmJlRleHQnO1xcbiAgICBjb25zdCDliIbnsbvpk77mjqUgPSAnYSYmaHJlZic7XFxuXFxuICAgIC8v5Yqo5oCB5YiG57G7XFxuICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZHRmbCcpKS5ydWxlKTtcXG4gICAgXFxuICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCAnYm9keSYmLmVhY2gnKVxcblxcbiAgICBsaXN0Lm1hcCh4ID0+IHtcXG4gICAgICAgIHZhciBuYW1lID0gcGRmaCh4LCAnYSYmdGl0bGUnKVxcbiAgICAgICAgbGV0IGltZyA9IHBkKHgsICdpbWcmJnNyY3x8aW1nJiZkYXRhLXVybCcpO1xcbiAgICAgICAgaWYgKGltZyA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgIGltZyA9IFxcXCJodHRwczovL3d3dy5kaWFueWluZ2dvdS5jb20vVmlldy9pbWFnZXMvYmxhbmtfYmcucG5nXFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCB1cmwgPSBwZCh4LCAnYSYmaHJlZicpO1xcbiAgICAgICAgbGV0IHNjb3JlID0gcGRmaCh4LCAnLm5vU2NvcmUmJlRleHQnKTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IG5hbWUsXFxuICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgZGVzYzogc2NvcmUsXFxuICAgICAgICAgICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgobiwgdSkgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwic291XFxcIiwgbilcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2R1cmwnLCB1KVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9LCBuYW1lLCB1cmwpXFxuICAgICAgICB9KVxcbiAgICB9KVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWKqOaAgeWIhuexu1wiLFwicGF0aFwiOlwiZHRmbFwiLFwicnVsZVwiOlwiY29uc3TCoGVtcHR5wqA9wqBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG5cXG5pZsKgKHR5cGVvZijmi7zmjqXliIbnsbspwqAhPcKgJ3VuZGVmaW5lZCfCoCYmwqDmi7zmjqXliIbnsbvCoCE9wqAnJynCoHtcXG7CoMKgwqDCoHZhcsKgY2F0ZWdvcmllc8KgPcKgcGRmYShodG1sLMKg5aSn57G75a6a5L2NKS5jb25jYXQocGRmYShodG1sLMKg5ou85o6l5YiG57G7KSlcXG59wqBlbHNlwqB7XFxuwqDCoMKgwqB2YXLCoGNhdGVnb3JpZXPCoD3CoHBkZmEoaHRtbCzCoOWkp+exu+WumuS9jSlcXG59XFxuXFxubGV0wqBpbml0X2NhdGXCoD3CoFtdXFxuXFxuZm9yIChsZXQgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XFxuICAgIGluaXRfY2F0ZS5wdXNoKFxcXCIwXFxcIilcXG59XFxuXFxuY29uc3TCoGZvbGTCoD3CoGdldE15VmFyKE1ZX1JVTEUuZ3JvdXAswqBcXFwiMFxcXCIpXFxuY29uc3TCoGNhdGVfdGVtcF9qc29uwqA9wqBnZXRNeVZhcijpobXpnaLmoIfor4YrTVlfUlVMRS50aXRsZSzCoEpTT04uc3RyaW5naWZ5KGluaXRfY2F0ZSkpXFxuY29uc3TCoGNhdGVfdGVtcMKgPcKgSlNPTi5wYXJzZShjYXRlX3RlbXBfanNvbilcXG5cXG5cXG5cXG5pZsKgKHBhcnNlSW50KHBhZ2UpwqA9PT3CoDEpwqB7XFxuICAgIGQucHVzaCh7XFxuICAgIGNvbF90eXBlOidiaWdfYmxhbmtfYmxvY2snXFxuICAgIH0pXFxuICAgIGQucHVzaCh7XFxuICAgIGNvbF90eXBlOidiaWdfYmxhbmtfYmxvY2snXFxuICAgIH0pXFxuICAgIFxcbsKgwqDCoMKgZC5wdXNoKHtcXG7CoMKgwqDCoMKgwqDCoMKgdGl0bGU6wqBmb2xkwqA9PT3CoCcxJ8KgP8KgJ+KAnOKAnOKAneKAnTxiPifCoCvCoOWIhuexu+aKmOWPoC5mb250Y29sb3IoXFxcIiNGRjAwMDBcXFwiKcKgK8KgJzwvYj4nwqA6wqAn4oCc4oCc4oCd4oCdPGI+J8KgK8Kg5YiG57G75bGV5byALmZvbnRjb2xvcihcXFwiIzFhYWQxOVxcXCIpwqArwqAnPC9iPicsXFxuwqDCoMKgwqDCoMKgwqDCoHVybDrCoCQoKS5sYXp5UnVsZSgoZm9sZCnCoD0+wqB7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHV0TXlWYXIoTVlfUlVMRS5ncm91cCzCoGZvbGTCoD09PcKgJzEnwqA/wqAnMCfCoDrCoCcxJyk7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybsKgXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuwqDCoMKgwqDCoMKgwqDCoH0swqBmb2xkKSxcXG7CoMKgwqDCoMKgwqDCoMKgY29sX3R5cGU6wqAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfmuIXpmaQnLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygobWFyaykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihtYXJrICsgTVlfUlVMRS51cmwpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/muIXpmaTmiJDlip8nO1xcbiAgICAgICAgICAgICAgICB9LCDpobXpnaLmoIfor4YpXFxuICAgICAgICAgICAgfV1cXG4gICAgICAgIH1cXG7CoMKgwqDCoH0pXFxuwqDCoMKgwqBjYXRlZ29yaWVzLmZvckVhY2goKGNhdGVnb3J5LMKgaW5kZXgpwqA9PsKge1xcbsKgwqDCoMKgwqDCoMKgwqBsZXTCoHN1Yl9jYXRlZ29yaWVzwqA9wqBwZGZhKGNhdGVnb3J5LMKg5bCP57G75a6a5L2NKTtcXG7CoMKgwqDCoMKgwqDCoMKgaWbCoChpbmRleMKgPT09wqAwKcKge1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN1Yl9jYXRlZ29yaWVzLmZvckVhY2goKGl0ZW0swqBrZXkpwqA9PsKge1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGV0wqB0aXRsZcKgPcKgcGRmaChpdGVtLMKg5YiG57G75qCH6aKYKVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWbCoCh0eXBlb2Yo5o6S6ZmkKcKgIT3CoCd1bmRlZmluZWQnwqAmJsKg5o6S6ZmkwqAhPcKgJycpwqB7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRpdGxlwqA9wqB0aXRsZS5yZXBsYWNlKG5ld8KgUmVnRXhwKOaOkumZpCzCoFxcXCJnXFxcIikswqBcXFwiXFxcIilcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH1cXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGQucHVzaCh7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRpdGxlOsKga2V5LnRvU3RyaW5nKCnCoD09PcKgY2F0ZV90ZW1wW2luZGV4XcKgP8KgXFxcIuKAnOKAnOKAneKAnVxcXCLCoCvCoHRpdGxlLmZvbnRjb2xvcijliIbnsbvpopzoibIpwqA6wqB0aXRsZSxcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdXJsOsKgJChwZChpdGVtLMKg5YiG57G76ZO+5o6lKcKgK8KgJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHBhcmFtcynCoD0+wqB7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGV0wqBuZXdfY2F0ZcKgPcKgW11cXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYXJhbXMuY2F0ZV90ZW1wLmZvckVhY2goKGNhdGUswqBpbmRleCnCoD0+wqB7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBuZXdfY2F0ZS5wdXNoKGluZGV4wqA9PT3CoDDCoD/CoHBhcmFtcy5rZXkudG9TdHJpbmcoKcKgOsKgXFxcIjBcXFwiKVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0pXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHV0TXlWYXIocGFyYW1zLm1hcmsrTVlfUlVMRS50aXRsZSzCoEpTT04uc3RyaW5naWZ5KG5ld19jYXRlKSlcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwdXRNeVZhcihwYXJhbXMubWFyaytNWV9SVUxFLnVybCzCoGlucHV0KVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlZnJlc2hQYWdlKHRydWUpXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuwqBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSzCoHtcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjYXRlX3RlbXA6wqBjYXRlX3RlbXAsXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKga2V5OsKga2V5LFxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBhZ2U6wqBwYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcms66aG16Z2i5qCH6K+GLFxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9KSxcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29sX3R5cGU6wqAnc2Nyb2xsX2J1dHRvbicsXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9KVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0pXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZC5wdXNoKHtcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbF90eXBlOsKgXFxcImJsYW5rX2Jsb2NrXFxcIlxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0pO1xcbsKgwqDCoMKgwqDCoMKgwqB9wqBlbHNlwqBpZsKgKGZvbGTCoD09PcKgJzEnKcKge1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN1Yl9jYXRlZ29yaWVzLmZvckVhY2goKGl0ZW0swqBrZXkpwqA9PsKge1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGV0wqB0aXRsZcKgPcKgcGRmaChpdGVtLMKg5YiG57G75qCH6aKYKVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWbCoCh0eXBlb2Yo5o6S6ZmkKcKgIT3CoCd1bmRlZmluZWQnwqAmJsKg5o6S6ZmkwqAhPcKgJycpwqB7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRpdGxlwqA9wqB0aXRsZS5yZXBsYWNlKG5ld8KgUmVnRXhwKOaOkumZpCzCoFxcXCJnXFxcIikswqBcXFwiXFxcIilcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH1cXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGQucHVzaCh7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRpdGxlOsKga2V5LnRvU3RyaW5nKCnCoD09PcKgY2F0ZV90ZW1wW2luZGV4XcKgP8KgXFxcIuKAnOKAnOKAneKAnVxcXCLCoCvCoHRpdGxlLmZvbnRjb2xvcijliIbnsbvpopzoibIpwqA6wqB0aXRsZSxcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdXJsOsKgJChwZChpdGVtLMKg5YiG57G76ZO+5o6lKcKgK8KgJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHBhcmFtcynCoD0+wqB7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGFyYW1zLmNhdGVfdGVtcFtwYXJhbXMuaW5kZXhdwqA9wqBwYXJhbXMua2V5LnRvU3RyaW5nKClcXG5cXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwdXRNeVZhcihwYXJhbXMubWFyaytNWV9SVUxFLnRpdGxlLMKgSlNPTi5zdHJpbmdpZnkocGFyYW1zLmNhdGVfdGVtcCkpXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHV0TXlWYXIocGFyYW1zLm1hcmsrTVlfUlVMRS51cmwswqBpbnB1dClcXG5cXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWZyZXNoUGFnZSh0cnVlKVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybsKgXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0swqB7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2F0ZV90ZW1wOsKgY2F0ZV90ZW1wLFxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGluZGV4OsKgaW5kZXgsXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKga2V5OsKga2V5LFxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBhZ2U6wqBwYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcms66aG16Z2i5qCH6K+GLFxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9KSxcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29sX3R5cGU6wqAnc2Nyb2xsX2J1dHRvbicsXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9KVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0pXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZC5wdXNoKHtcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbF90eXBlOsKgXFxcImJsYW5rX2Jsb2NrXFxcIlxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0pO1xcbsKgwqDCoMKgwqDCoMKgwqB9XFxuwqDCoMKgwqB9KVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIjcu5Zyf5ouo6bygXCIsXCJwYXRoXCI6XCJ0YnNkeVwiLFwicnVsZVwiOlwianM6XFxubGV0IGR1cmwgPSBnZXRNeVZhcihcXFwiZHVybFxcXCIsIFxcXCJcXFwiKTtcXG5pZiAoZHVybCAhPSAnJykge1xcbiAgICBNWV9VUkwgPSBkdXJsO1xcbiAgICAvL2xvZyhkdXJsKVxcblxcbiAgICBsZXQgdXJsID0gZHVybDtcXG4gICAgbGV0IGlkID0gdXJsO1xcbiAgICBsZXQgbmFtZSA9IHM7XFxuICAgIHRyeSB7XFxuICAgICAgICB2YXIgaHRtbCA9IGZldGNoKHVybCwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBQQ19VQVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9IGNhdGNoIHtcXG4gICAgICAgIHZhciBodG1sID0gJydcXG4gICAgfVxcblxcbiAgICB2YXIgcnVsZSA9IE1ZX1JVTEUudGl0bGVcXG4gICAgbGV0IGRlc2MgPSBwZGZoKGh0bWwsICcudmlkZW9fcGxvdF9pbmZvX2NvbnRlbnQmJlRleHQnKTtcXG4gICAgbGV0IHNjb3JlID0gcGRmaChodG1sLCAnLnZpZGVvX3BvaW50JiZUZXh0Jyk7XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogcGRmaChodG1sLCAnLnZpZGVvX2luZm9fdGl0bGVfdGV4dCYmVGV4dCcpLFxcbiAgICAgICAgaW1nOiBwZGZoKGh0bWwsICcudmlkZW9fY292ZXJfaW1nX2JveCYmaW1nJiZkYXRhLXVybCcpLFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYycsXFxuICAgICAgICBkZXNjOiAn6K+E5YiGOicgKyBzY29yZSArICdcXFxcbuS4u+a8lDonICsgZGVzYyxcXG4gICAgICAgIHVybDogdXJsLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBpZDogdXJsLFxcbiAgICAgICAgICAgIGluaGVyaXRUaXRsZTogZmFsc2UsXFxuICAgICAgICB9XFxuICAgIH0pXFxuXFxuXFxuICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCAnYm9keSYmLnZpZGVvX2Rvd25sb2FkX2xpbmtfaXRlbScpXFxuICAgIGlmIChsaXN0ICYmIGxpc3QubGVuZ3RoID4gMCkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBsZXQge1xcbiAgICAgICAgICAgICAgICB3cmFwMVxcbiAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90b29sP3J1bGU9XFxcIiArIHJ1bGUpO1xcblxcbiAgICAgICAgICAgIGxpc3QgPSBsaXN0Lm1hcChpdCA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCB1ID0gcGRmaChpdCwgJ2EmJmhyZWYnKTtcXG4gICAgICAgICAgICAgICAgbGV0IHQgPSBwZGZoKGl0LCAnLnZpZGVvX2Rvd25sb2FkX2xpbmtfbmFtZV90ZXh0JiZUZXh0Jyk7XFxuICAgICAgICAgICAgICAgIGxldCB3ZWIgPSBwZGZoKGl0LCAnLnJlc291cmNlX3dlYnNpdGVfbmFtZSYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgICBsZXQgaW1nID0gcGQoaXQsICcudmlkZW9fbGFiZWxzJiZpbWcmJnNyYycpO1xcblxcbiAgICAgICAgICAgICAgICB1ID0gXFxcImhpa2VyOi8vcGFnZS9wP3J1bGU9XFxcIiArIHJ1bGUgKyBcXFwiJnU9XFxcIiArIGJhc2U2NEVuY29kZSh1KTtcXG4gICAgICAgICAgICAgICAgdSA9IGdldEl0ZW0oJ2FpJywgJzAnKSA9PSAnMCcgPyB1IDogdSArICcjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHdyYXAxKHdlYiArICctJyArIHQsIHMpLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHUsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRUaXRsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiB1cmwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVRpdGxlOiB0LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlYjogd2ViLFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgZCA9IGQuY29uY2F0KGxpc3QpXFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgbG9nKGUudG9TdHJpbmcoKSk7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgc2V0UmVzdWx0KGQpXFxufVxcbnMgPSBnZXRNeVZhcihcXFwic291XFxcIiwgXFxcIlxcXCIpO1xcbmxldCByID0gXFxcIlxcXCI7XFxuaWYgKHMgIT0gXFxcIlxcXCIpIHtcXG4gICAgdmFyIHBhZ2UgPSBNWV9QQUdFO1xcbiAgICBNWV9VUkwgPSBgaHR0cHM6Ly93d3cudGJzZHkuY29tL3NlYXJjaC5odG1sP2tleXdvcmQ9JHtzfSZwYWdlZD0ke3BhZ2V9JmNhdGVnb3J5PWA7XFxuICAgIC8vbG9nKE1ZX1VSTClcXG4gICAgbGV0IGh0bWwgPSBmZXRjaChNWV9VUkwsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBXFxuICAgICAgICB9XFxuICAgIH0pO1xcblxcbiAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5zZWFyY2hfcmVzdWx0X2l0ZW0nKVxcblxcbiAgICBsZXQge1xcbiAgICAgICAgd3JhcFxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbFxcXCIpO1xcblxcbiAgICBmb3IgKGxldCBpdCBvZiBsaXN0KSB7XFxuICAgICAgICBsZXQgbmFtZSA9IHBkZmgoaXQsICcuc2VhcmNoX3Jlc3VsdF90aXRsZSYmVGV4dCcpO1xcbiAgICAgICAgbGV0IGltZyA9IHBkKGl0LCAnaW1nJiZzcmMnKTtcXG4gICAgICAgIGlmIChpbWcgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICBpbWcgPSBcXFwiXFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCB1cmwgPSBwZChpdCwgJ2EmJmhyZWYnKTtcXG4gICAgICAgIGxldCBkZXNjID0gcGRmYShpdCwgJ2JvZHkmJi5zZWFyY2hfcmVzdWx0X2l0ZW0mJi5zZWFyY2hfcmVzdWx0X3N1Yl9pbmZvX2xpbmUmJi52aWRlb19hY3RvcicpLm1hcCh4ID0+IHBkZmgoeCwgJ3NwYW4mJlRleHQnKSkuam9pbignICcpO1xcbiAgICAgICAgbGV0IHNjb3JlID0gcGRmaChpdCwgJy5zZWFyY2hfdmlkZW9faW1nX3BvaW50JiZUZXh0Jyk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB3cmFwKG5hbWUsIHMpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWMnLFxcbiAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgIGRlc2M6ICfor4TliIY6JyArIHNjb3JlICsgJ1xcXFxu5Li75ryUOicgKyBkZXNjLFxcbiAgICAgICAgICAgIHVybDogJCh1cmwpLmxhenlSdWxlKChydWxlLCB1cmwsIHMsIG5hbWUpID0+IHtcXG5cXG4gICAgICAgICAgICAgICAgdmFyIGNscyA9IGZpbmRJdGVtc0J5Q2xzKHVybCk7XFxuICAgICAgICAgICAgICAgIGlmICghIWNscykge1xcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbUJ5Q2xzKHVybClcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBpbnB1dDtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZCA9IHVybDtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBodG1sID0gZmV0Y2godXJsLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgJ2JvZHkmJi52aWRlb19kb3dubG9hZF9saW5rX2l0ZW0nKVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QgJiYgbGlzdC5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTVlfVVJMID0gdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcDFcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3Rvb2w/cnVsZT1cXFwiICsgcnVsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBsaXN0Lm1hcChpdCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IHBkZmgoaXQsICdhJiZocmVmJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdCA9IHBkZmgoaXQsICcudmlkZW9fZG93bmxvYWRfbGlua19uYW1lX3RleHQmJlRleHQnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB3ZWIgPSBwZGZoKGl0LCAnLnJlc291cmNlX3dlYnNpdGVfbmFtZSYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltZyA9IHBkKGl0LCAnLnZpZGVvX2xhYmVscyYmaW1nJiZzcmMnKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBcXFwiaGlrZXI6Ly9wYWdlL3A/cnVsZT1cXFwiICsgcnVsZSArIFxcXCImdT1cXFwiICsgYmFzZTY0RW5jb2RlKHUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGdldEl0ZW0oJ2FpJywgJzAnKSA9PSAnMCcgPyB1IDogdSArICcjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogd3JhcDEod2ViICsgJy0nICsgdCwgcyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM6IHVybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVRpdGxlOiB0LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWI6IHdlYixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRJdGVtQWZ0ZXIoaWQsIGxpc3QpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKGUudG9TdHJpbmcoKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICB9LCBNWV9SVUxFLnRpdGxlLCB1cmwsIHMsIG5hbWUpLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiB1cmwsXFxuICAgICAgICAgICAgICAgIGluaGVyaXRUaXRsZTogZmFsc2VcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICB9XFxuXFxuICAgIHNldFJlc3VsdChkKVxcbn0gZWxzZSB7XFxuXFxufVxcblxcbmlmIChnZXRJdGVtKCdob21lJywgJ+WFsycpID09ICflvIAnKSB7XFxuICAgIHZhciBwYWdlID0gTVlfUEFHRTtcXG4gICAgbGV0IHtcXG4gICAgICAgIHNldHBhZ2VkXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90b29sXFxcIik7XFxuXFxuICAgIHZhciBwaW5kZXggPSBzZXRwYWdlZChkLCBwYWdlLCBcXFwidGJzZHlfcHRhZ1xcXCIsIFtcXFwi6aaW6aG1XFxcIiwgXFxcIuWIhuexu1xcXCJdLCBcXFwiIzQ2ODJCNFxcXCIpO1xcbiAgICBpZiAocGluZGV4ID09IDApIHtcXG5cXG4gICAgICAgIGxldCBodG1sID0gZmV0Y2goJ2h0dHBzOi8vd3d3LnRic2R5LmNvbS8nLCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuXFxuICAgICAgICBmdW5jdGlvbiBzZXRMaXN0cyhpdGVtKSB7XFxuICAgICAgICAgICAgTVlfVVJMID0gJ2h0dHBzOi8vd3d3LnRic2R5LmNvbS8nO1xcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IGl0ZW0ubmFtZTtcXG4gICAgICAgICAgICB2YXIga2V5ID0gaXRlbS5zZWxlY3Q7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgICAgIGltZzogaXRlbS5pbWcsXFxuICAgICAgICAgICAgfSlcXG5cXG4gICAgICAgICAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgYGJvZHkmJi5jb250YWluZXJfbWFpbl9ob3RfJHtrZXl9JiYuaG90X3Jlc291cmNlX29uZWApXFxuXFxuICAgICAgICAgICAgbGlzdC5tYXAoeCA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gcGRmaCh4LCAnLnJlc291cmNlX25hbWUmJlRleHQnKVxcbiAgICAgICAgICAgICAgICBsZXQgaW1nID0gcGQoeCwgJy5yZXNvdXJjZV9wb3N0ZXJzJiZkYXRhLXVybCcpO1xcbiAgICAgICAgICAgICAgICBpZiAoaW1nID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICBpbWcgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBsZXQgdXJsID0gcGQoeCwgJ2EmJmhyZWYnKTtcXG5cXG4gICAgICAgICAgICAgICAgbGV0IHNjb3JlID0gcGRmaCh4LCAnLnVwZGF0ZV90aXB8fC5yZXNvdXJjZV9zY29yZXx8aW1nJiZUZXh0Jyk7XFxuXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogc2NvcmUsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJycpLmxhenlSdWxlKChuLCB1KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInNvdVxcXCIsIG4pXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2R1cmwnLCB1KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgICAgICB9LCBuYW1lLCB1cmwpXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIFt7XFxuICAgICAgICAgICAgbmFtZTogJ+eDremXqOeUteinhuWJpycsXFxuICAgICAgICAgICAgc2VsZWN0OiAndHZzJyxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL3d3dy50YnNkeS5jb20vaW1nL21yc3cvd2ViL2luZGV4L2luZGV4X3R2LnN2ZycsXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgbmFtZTogJ+eDremXqOeUteW9sScsXFxuICAgICAgICAgICAgc2VsZWN0OiAnbW92aWVzJyxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL3d3dy50YnNkeS5jb20vaW1nL21yc3cvd2ViL2luZGV4L2luZGV4X212LnN2ZydcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICBuYW1lOiAn54Ot6Zeo5Yqo5ryrJyxcXG4gICAgICAgICAgICBzZWxlY3Q6ICdhbmltZXMnLFxcbiAgICAgICAgICAgIGltZzogJ2h0dHBzOi8vd3d3LnRic2R5LmNvbS9pbWcvbXJzdy93ZWIvaW5kZXgvaW5kZXhfc2hvdy5zdmcnXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgbmFtZTogJ+eDremXqOe7vOiJuicsXFxuICAgICAgICAgICAgc2VsZWN0OiAndmFyaWV0eXMnLFxcbiAgICAgICAgICAgIGltZzogJ2h0dHBzOi8vd3d3LnRic2R5LmNvbS9pbWcvbXJzdy93ZWIvaW5kZXgvaW5kZXhfcmVjb3Jkcy5zdmcnXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgbmFtZTogJ+eDremXqOe6quW9leeJhycsXFxuICAgICAgICAgICAgc2VsZWN0OiAnZG9jdW1lbnRhcnlzJyxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL3d3dy50YnNkeS5jb20vaW1nL21yc3cvd2ViL2luZGV4L2luZGV4X3JlY29yZHMuc3ZnJyxcXG4gICAgICAgIH1dLm1hcCh4ID0+IHtcXG5cXG4gICAgICAgICAgICBzZXRMaXN0cyh4KVxcbiAgICAgICAgfSlcXG4gICAgfVxcblxcbiAgICBpZiAocGluZGV4ID09IDEpIHtcXG4gICAgICAgIE1ZX1VSTCA9IFxcXCJodHRwczovL3d3dy50YnNkeS5jb20vY2xhc3NpZnkuaHRtbFxcXCI7XFxuXFxuICAgICAgICBjb25zdCDpobXpnaLmoIfor4YgPSAnYWl0YnNkeSdcXG4gICAgICAgIGNvbnN0IOWIhuexu+minOiJsiA9IGdldFJhbmdlQ29sb3JzKCk7XFxuICAgICAgICBjb25zdCDlpKfnsbvlrprkvY0gPSAnYm9keSYmLnRvcF9uYXZzX2NhdGVnb3J5JztcXG4gICAgICAgIGNvbnN0IOaLvOaOpeWIhuexuyA9ICdib2R5JiYuY2xhc3NpZnlfY2F0ZWdvcnlfbGluZXMnO1xcbiAgICAgICAgY29uc3Qg5bCP57G75a6a5L2NID0gJ2JvZHkmJi50b3BfbmF2fHwuY2xhc3NpZnlfY2F0ZWdvcnlfb25lJztcXG4gICAgICAgIGNvbnN0IOWIhuexu+agh+mimCA9ICdUZXh0JztcXG4gICAgICAgIGNvbnN0IOWIhuexu+mTvuaOpSA9ICdhJiZocmVmJztcXG4gICAgICAgIGNvbnN0IOWIhuexu+WxleW8gCA9ICfiiKcnO1xcbiAgICAgICAgY29uc3Qg5YiG57G75oqY5Y+gID0gJ+KIqCc7XFxuICAgICAgICBcXG5cXG4gICAgICAgIGxldCB7XFxuICAgICAgICAgICAgdXJsUGFyc2VcXG4gICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90b29sXFxcIik7XFxuXFxuICAgICAgICBsZXQgdHJ1ZV91cmwgPSBnZXRNeVZhcijpobXpnaLmoIfor4YgKyBNWV9SVUxFLnVybCwgTVlfVVJMKTtcXG5cXG4gICAgICAgIHZhciB1UGFyc2UgPSB1cmxQYXJzZSh0cnVlX3VybCk7XFxuICAgICAgICB2YXIgdXJscGF0aCA9IHVQYXJzZS5QYXRoO1xcbiAgICAgICAgdmFyIHVybHBhID0gdVBhcnNlLlBhcmFtcztcXG4gICAgICAgIHZhciB1aG9zdCA9IHVQYXJzZS5Ib3N0c1xcblxcbiAgICAgICAgdHJ1ZV91cmwgPSB1aG9zdCArIHVybHBhdGggKyBcXFwiP1xcXCIgKyBPYmplY3QuVG9QYXJhbXMoT2JqZWN0LmFzc2lnbih7fSwgdXJscGEsIHtcXG4gICAgICAgICAgICBwYWdlZDogcGFnZVxcbiAgICAgICAgfSkpO1xcbiAgICAgICAgLy9sb2codHJ1ZV91cmwpXFxuXFxuICAgICAgICB2YXIgaHRtbCA9IGZldGNoUEModHJ1ZV91cmwpO1xcbiAgICAgICAgLy9sb2coaHRtbClcXG5cXG4gICAgICAgIC8v5Yqo5oCB5YiG57G7XFxuIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZHRmbCcpKS5ydWxlKTtcXG5cXG4gICAgICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCAnYm9keSYmLmNsYXNzaWZ5X21haW5fcmVzb3VyY2VzJiZhJylcXG5cXG4gICAgICAgIGxpc3QubWFwKHggPT4ge1xcbiAgICAgICAgICAgIHZhciBuYW1lID0gcGRmaCh4LCAnLnJlc291cmNlX25hbWUmJlRleHQnKVxcbiAgICAgICAgICAgIGxldCBpbWcgPSBwZCh4LCAnaW1nJiZkYXRhLXVybCcpO1xcbiAgICAgICAgICAgIGlmIChpbWcgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgaW1nID0gXFxcImh0dHBzOi8vd3d3LmRpYW55aW5nZ291LmNvbS9WaWV3L2ltYWdlcy9ibGFua19iZy5wbmdcXFwiO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQgdXJsID0gcGQoeCwgJ2EmJmhyZWYnKTtcXG4gICAgICAgICAgICBsZXQgc2NvcmUgPSBwZGZoKHgsICcucmVzb3VyY2Vfc2NvcmUmJlRleHQnKTtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogbmFtZSxcXG4gICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgIGRlc2M6IHNjb3JlLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoJycpLmxhenlSdWxlKChuLCB1KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwic291XFxcIiwgbilcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdkdXJsJywgdSlcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgfSwgbmFtZSwgdXJsKVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Yqo5oCB5YiG57G7SnNvblwiLFwicGF0aFwiOlwiamR0ZmxcIixcInJ1bGVcIjpcImpzOlxcbmNvbnN0wqBlbXB0ecKgPcKgXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcblxcbmlmwqAodHlwZW9mKEpzb27mi7zmjqUpwqAhPcKgJ3VuZGVmaW5lZCfCoCYmwqBKc29u5ou85o6lwqAhPcKgJycpwqB7XFxuICAgIFxcbiAgICB2YXIgY2F0ZWdvcmllc2pzb249VHJ1ZUpzb25bSnNvbuWkp+exu107XFxuICAgIFxcbiAgICBpZihUcnVlSnNvbltKc29u5ou85o6lXS5jb25zdHJ1Y3RvciAgPT0gT2JqZWN0KXtcXG4gICAgdmFyIGl0ZW1qc29uPU9iamVjdC5rZXlzKFRydWVKc29uW0pzb27mi7zmjqVdKS5tYXAoeD0+T2JqZWN0LnZhbHVlcyhUcnVlSnNvbltKc29u5ou85o6lXVt4XSkubWFwKHo9PkpTT04uc3RyaW5naWZ5KHopKS5qb2luKEpzb27mi4bliIYpKVxcbiAgICB9ZWxzZSBpZihUcnVlSnNvbltKc29u5ou85o6lXS5jb25zdHJ1Y3RvciAgPT0gQXJyYXkpe1xcbiAgICAgdmFyIGl0ZW1qc29uPVRydWVKc29uW0pzb27mi7zmjqVdXFxuICAgIH1cXG4gICBcXG4gICAgY2F0ZWdvcmllc2pzb249Y2F0ZWdvcmllc2pzb24uY29uY2F0KGl0ZW1qc29uKTtcXG4gICAgXFxufcKgZWxzZcKge1xcbsKgwqDCoMKgdmFywqBjYXRlZ29yaWVzanNvbj1UcnVlSnNvbltKc29u5aSn57G7XTtcXG59XFxuXFxuLy9sb2coY2F0ZWdvcmllc2pzb24pXFxuXFxubGV0wqBpbml0X2NhdGXCoD3CoFtdO1xcblxcbmZvciAobGV0IGkgPSAwOyBpIDwgMjA7IGkrKykge1xcbiAgICBpbml0X2NhdGUucHVzaChcXFwiMFxcXCIpO1xcbn1cXG5cXG5jb25zdMKgZm9sZMKgPcKgZ2V0VmFyKE1ZX1JVTEUuZ3JvdXAswqBcXFwiMFxcXCIpO1xcbmNvbnN0wqBjYXRlX3RlbXBfanNvbsKgPcKgZ2V0VmFyKE1ZX1JVTEUudGl0bGUr6aG16Z2i5qCH6K+GLMKgSlNPTi5zdHJpbmdpZnkoaW5pdF9jYXRlKSk7XFxuY29uc3TCoGNhdGVfdGVtcMKgPcKgSlNPTi5wYXJzZShjYXRlX3RlbXBfanNvbik7XFxuXFxuaWbCoChwYXJzZUludChwYWdlKcKgPT09wqAxKcKge1xcbsKgwqDCoMKgZC5wdXNoKHtcXG7CoMKgwqDCoMKgwqDCoMKgdGl0bGU6wqBmb2xkwqA9PT3CoCcxJ8KgP8KgJ+KAnOKAnOKAneKAnTxiPifCoCvCoOWIhuexu+WxleW8gC5mb250Y29sb3IoXFxcIiNGRjAwMDBcXFwiKcKgK8KgJzwvYj4nwqA6wqAn4oCc4oCc4oCd4oCdPGI+J8KgK8Kg5YiG57G75oqY5Y+gLmZvbnRjb2xvcihcXFwiIzFhYWQxOVxcXCIpwqArwqAnPC9iPicsXFxuwqDCoMKgwqDCoMKgwqDCoHVybDrCoCQoKS5sYXp5UnVsZSgoZm9sZCnCoD0+wqB7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHV0VmFyKE1ZX1JVTEUuZ3JvdXAswqBmb2xkwqA9PT3CoCcxJ8KgP8KgJzAnwqA6wqAnMScpO1xcbiAgICAgICAgICAgIGNsZWFyTXlWYXIoJ3BhZ2UnKVxcbiAgICAgICAgICAgIGNsZWFyTXlWYXIoXFxcImNmcGFnZVxcXCIpXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybsKgXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuwqDCoMKgwqDCoMKgwqDCoH0swqBmb2xkKSxcXG7CoMKgwqDCoMKgwqDCoMKgY29sX3R5cGU6wqAnc2Nyb2xsX2J1dHRvbicsXFxuwqDCoMKgwqB9KTtcXG7CoMKgwqDCoGNhdGVnb3JpZXNqc29uLmZvckVhY2goKGNhdGVnb3J5LMKgaW5kZXgpwqA9PsKge1xcbsKgwqDCoMKgwqDCoMKgwqBsZXTCoHN1Yl9jYXRlZ29yaWVzwqA9wqBjYXRlZ29yeS5zcGxpdChKc29u5ouG5YiGKTtcXG7CoMKgwqDCoMKgwqDCoMKgaWbCoChpbmRleMKgPT09wqAwKcKge1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN1Yl9jYXRlZ29yaWVzLmZvckVhY2goKGl0ZW0swqBrZXkpwqA9PsKge1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGV0wqB0aXRsZcKgPcKgaXRlbS5zcGxpdChKc29u5Y2V6aG5KVswXTtcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmwqAodHlwZW9mKOaOkumZpCnCoCE9wqAndW5kZWZpbmVkJ8KgJibCoOaOkumZpMKgIT3CoCcnKcKge1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0aXRsZcKgPcKgdGl0bGUucmVwbGFjZShuZXfCoFJlZ0V4cCjmjpLpmaQswqBcXFwiZ1xcXCIpLMKgXFxcIlxcXCIpO1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfVxcbiAgICAgICAgICAgICAgICBpZih0aXRsZT09Jycpe1xcbiAgICAgICAgICAgICAgICAgIHJldHVyblxcbiAgICAgICAgICAgICAgICB9XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkLnB1c2goe1xcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0aXRsZTrCoGtleS50b1N0cmluZygpwqA9PT3CoGNhdGVfdGVtcFtpbmRleF3CoD/CoFxcXCLigJzigJzigJ3igJ1cXFwiwqArwqB0aXRsZS5mb250Y29sb3Io5YiG57G76aKc6ImyKcKgOsKgdGl0bGUsXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVybDrCoGl0ZW0uc3BsaXQoSnNvbuWNlemhuSlbMV3CoCvCoCQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHBhcmFtcyxsaXN0LHBhZ2V0YWIpwqA9PsKge1xcbiAgICBcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCdpbmRleCcscGFyYW1zLmtleSlcXG5cXG4gICAgICAgICAgICAgICAgICAgIGxpc3QubWFwKGtleT0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoa2V5KTtcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGV0wqBuZXdfY2F0ZcKgPcKgW11cXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYXJhbXMuY2F0ZV90ZW1wLmZvckVhY2goKGNhdGUswqBpbmRleCnCoD0+wqB7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBuZXdfY2F0ZS5wdXNoKGluZGV4wqA9PT3CoDDCoD/CoHBhcmFtcy5rZXkudG9TdHJpbmcoKcKgOsKgXFxcIjBcXFwiKVxcbiAgICAgXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSlcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwdXRWYXIoTVlfUlVMRS50aXRsZStwYWdldGFiLMKgSlNPTi5zdHJpbmdpZnkobmV3X2NhdGUpKVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHB1dFZhcihwYWdldGFiLMKgaW5wdXQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIocGFnZXRhYixpbnB1dClcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWZyZXNoUGFnZSh0cnVlKVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybsKgXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0swqB7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2F0ZV90ZW1wOsKgY2F0ZV90ZW1wLFxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGtleTrCoGtleSxcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYWdlOsKgcGFnZSxcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSxKc29u5YiX6KGoLOmhtemdouagh+ivhiksXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbF90eXBlOsKgJ3Njcm9sbF9idXR0b24nLFxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSlcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9KVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGQucHVzaCh7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb2xfdHlwZTrCoFxcXCJibGFua19ibG9ja1xcXCJcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9KTtcXG7CoMKgwqDCoMKgwqDCoMKgfcKgZWxzZcKgaWbCoChmb2xkwqA9PT3CoCcxJynCoHtcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdWJfY2F0ZWdvcmllcy5mb3JFYWNoKChpdGVtLMKga2V5KcKgPT7CoHtcXG4gICAgICAgICAgICAgICAgdmFyIG9iaj1KU09OLnBhcnNlKGl0ZW0pXFxuICAgIFxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGV0wqB0aXRsZcKgPSBvYmpbJ25hbWUnXVxcbiAgICAgICAgICAgICAgICBcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmwqAodHlwZW9mKOaOkumZpCnCoCE9wqAndW5kZWZpbmVkJ8KgJibCoOaOkumZpMKgIT3CoCcnKcKge1xcbiAgICBcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdGl0bGXCoD3CoHRpdGxlLnJlcGxhY2UobmV3wqBSZWdFeHAo5o6S6ZmkLMKgXFxcImdcXFwiKSzCoFxcXCJcXFwiKVxcbiAgICAgICAgICAgXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9XFxuICAgICAgICAgICAgICAgICAgIGlmKHRpdGxlPT0nJyl7XFxuICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxcbiAgICAgICAgICAgICAgICAgICAgfVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZC5wdXNoKHtcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdGl0bGU6wqBrZXkudG9TdHJpbmcoKcKgPT09wqBjYXRlX3RlbXBbaW5kZXhdwqA/wqBcXFwi4oCc4oCc4oCd4oCdXFxcIsKgK8KgdGl0bGUuZm9udGNvbG9yKOWIhuexu+minOiJsinCoDrCoHRpdGxlLFxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1cmw6wqAkKGl0ZW0rJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHBhcmFtcyxwYWdldGFiLGxpc3QpwqA9PsKge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmo9SlNPTi5wYXJzZShpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXJsPW9ialsndXJsJ11cXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZT1vYmpbJ3R5cGUnXVxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QubWFwKGtleT0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoa2V5KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBhcmFtcy5jYXRlX3RlbXBbcGFyYW1zLmluZGV4XcKgPcKgcGFyYW1zLmtleS50b1N0cmluZygpXFxuXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHV0VmFyKE1ZX1JVTEUudGl0bGUrcGFnZXRhYizCoEpTT04uc3RyaW5naWZ5KHBhcmFtcy5jYXRlX3RlbXApKVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHB1dFZhcihwYWdldGFiLMKgdXJsKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGUhPScnP3RydWU6ZmFsc2Upe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5PXR5cGVcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlPXVybFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihrZXksdmFsdWUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlZnJlc2hQYWdlKHRydWUpXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuwqBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSzCoHtcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjYXRlX3RlbXA6wqBjYXRlX3RlbXAsXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW5kZXg6wqBpbmRleCxcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBrZXk6wqBrZXksXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGFnZTrCoHBhZ2UsXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0s6aG16Z2i5qCH6K+GLOWNlemhuea4hemZpCksXFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbF90eXBlOsKgJ3Njcm9sbF9idXR0b24nLFxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSlcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9KVxcbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGQucHVzaCh7XFxuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb2xfdHlwZTrCoFxcXCJibGFua19ibG9ja1xcXCJcXG7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9KTtcXG7CoMKgwqDCoMKgwqDCoMKgfVxcbsKgwqDCoMKgfSlcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCI0Lumdkum6plwiLFwicGF0aFwiOlwicWltYWl0dlwiLFwicnVsZVwiOlwianM6XFxuaWYgKHMgIT0gXFxcIlxcXCIpIHtcXG4gICAgdmFyIHVybCA9IFxcXCJodHRwczovL1xcXCIgKyBjb25maWcucWltYWkgKyBcXFwiL2FwaS9hcHAvbW92aWUvaW5kZXgvc2VhcmNoTW92aWVCeU5hbWVcXFwiO1xcblxcbiAgICBsZXQgaHRtbCA9IGZldGNoKHVybCwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJYLVJlcXVlc3RlZC1XaXRoXFxcIjogXFxcIlhNTEh0dHBSZXF1ZXN0XFxcIlxcbiAgICAgICAgfSxcXG4gICAgICAgIGJvZHk6IHtcXG4gICAgICAgICAgICBcXFwiY29uZGl0aW9uXFxcIjogcyxcXG4gICAgICAgICAgICBcXFwicGFnZVNpemVcXFwiOiAyNSxcXG4gICAgICAgICAgICBcXFwicGFnZU51bVxcXCI6IE1ZX1BBR0VcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuXFxuICAgIHZhciBpbmZvID0gJydcXG4gICAgdHJ5IHtcXG4gICAgICAgIGluZm8gPSBKU09OLnBhcnNlKGh0bWwpLmRhdGEucmVjb3JkcztcXG4gICAgfSBjYXRjaCB7XFxuXFxuICAgIH1cXG4gICAgaWYgKGluZm8gIT0gbnVsbCkge1xcbiAgICAgICAgdmFyIGRhdGEgPSBpbmZvO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgZGF0YSA9IFtdXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHNtYWxsPuaXoOe7k+aenDwvc2FtbGw+JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxuICAgICAgICB9KVxcbiAgICAgICAgc2V0UmVzdWx0KGQpXFxuICAgIH1cXG4gICAgXFxuICAgIGxldCB7XFxuICAgICAgICB3cmFwMVxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbFxcXCIpO1xcbiAgICBcXG4gICAgZm9yIChsZXQgaXRlbSBvZiBkYXRhKXtcXG4gICAgICAgIHZhciBqID0gSlNPTi5wYXJzZShmZXRjaCgnaHR0cHM6Ly8nICsgY29uZmlnLnFpbWFpICsgJy9hcGkvYXBwL21vdmllL3dlYnNpdGUvcGFnZScsIHtcXG4gICAgICAgIGJvZHk6IHtcXG4gICAgICAgICAgICBcXFwiY29uZGl0aW9uXFxcIjoge1xcbiAgICAgICAgICAgICAgICBtb3ZpZU5hbWU6IGl0ZW0ubmFtZSxcXG4gICAgICAgICAgICAgICAgbW92aWVUeXBlOiBpdGVtLnR5cGUsXFxuICAgICAgICAgICAgICAgIG1vdmllWWVhcjogaXRlbS55ZWFyXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBcXFwicGFnZVNpemVcXFwiOiAxMCxcXG4gICAgICAgICAgICBcXFwicGFnZU51bVxcXCI6IE1ZX1BBR0VcXG4gICAgICAgIH0sXFxuICAgICAgICBtZXRob2Q6J1BPU1QnLFxcbiAgICB9KSkuZGF0YS5yZWNvcmRzXFxuICAgIFxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGltZzppdGVtLmNvdmVyKydAUmVmZXJlcj0nK2l0ZW0uY292ZXIsXFxuICAgICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMV9sZWZ0X3BpYydcXG4gICAgICAgIH0pXFxuICAgIFxcbiAgICAgIGZvciAobGV0IGl0IG9mIGopIHtcXG4gICAgICAgIGxldCB0ID0gaXRlbS5uYW1lO1xcbiAgICAgICAgbGV0IHdlYiA9IGl0Lm5hbWU7XFxuICAgICAgICBsZXQgaW1nID0gaXQuaWNvbjtcXG4gICAgICAgIGxldCB1cmwgPSBpdC5wbGF5VXJsO1xcblxcbiAgICAgICAgaWYgKCF0KSB7XFxuICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgdSA9IFxcXCJoaWtlcjovL3BhZ2UvcD91PVxcXCIgKyBiYXNlNjRFbmNvZGUodXJsKVxcbiAgICAgICAgdSA9IGdldEl0ZW0oJ2FpJywgJzAnKSA9PSAnMCcgPyB1IDogdSArICcjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgICAgICAgXFxuICAgICAgICBcXG5cXG5cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHdyYXAxKHdlYiArICctJyArIHQsIHMpLFxcbiAgICAgICAgICAgIHVybDogdSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgLy9kZXNjOiAnJyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogaXQudXJpLFxcbiAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IHQsXFxuICAgICAgICAgICAgICAgIHdlYjogd2ViLFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgICBzZXRSZXN1bHQoZClcXG59IGVsc2Uge1xcblxcbn1cXG5cXG5pZiAoZ2V0SXRlbSgnaG9tZScsICflhbMnKSA9PSAn5byAJykge1xcbiAgICB2YXIgcGFnZSA9IE1ZX1BBR0U7XFxuICAgIGxldCB7XFxuICAgICAgICBzZXRwYWdlZFxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbFxcXCIpO1xcblxcbiAgICB2YXIgcGluZGV4ID0gc2V0cGFnZWQoZCwgcGFnZSwgXFxcInFtdHZfcHRhZ1xcXCIsIFtcXFwi6aaW6aG1XFxcIiwgXFxcIumAieeJh1xcXCJdLCBcXFwiIzQ2ODJCNFxcXCIpO1xcblxcbiAgICBpZiAocGluZGV4ID09IDApIHtcXG5cXG4gICAgICAgIGZ1bmN0aW9uIHNldExpc3RzKGl0ZW0pIHtcXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSBpdGVtLnNwbGl0KCctJylbMF1cXG4gICAgICAgICAgICB2YXIgdCA9IGl0ZW0uc3BsaXQoJy0nKVsxXVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICAgICAgICAgICAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21vcmUvMTAucG5nJ1xcbiAgICAgICAgICAgIH0pXFxuXFxuXFxuICAgICAgICAgICAgdmFyIGpzb24gPSBKU09OLnBhcnNlKGZldGNoUEMoYGh0dHBzOi8vJHtjb25maWcucWltYWl9L2FwaS9hcHAvbW92aWUvaW5kZXgvc2VhcmNoQWxsTW92aWVgKSlcXG5cXG5cXG4gICAgICAgICAgICB2YXIgbGlzdCA9IGpzb24uZGF0YVt0XS5yZWNvcmRzO1xcblxcbiAgICAgICAgICAgIGxpc3QubWFwKHggPT4ge1xcbiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IHgudGl0bGU7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogeC5jb3ZlcixcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IHgucmF0ZSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCgnJykubGF6eVJ1bGUoKG4pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwic291XFxcIiwgbilcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICAgICAgfSwgbmFtZSlcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgWyfng63mkq3nlLXlvbEtbGlzdEhvdE1vdmllJywgJ+eDreaSreeUteinhuWJpy1saXN0SG90VHYnLCAn54Ot5pKt5Yqo5ryrLWxpc3RIb3RDb21pYycsICfng63mkq3nu7zoibotbGlzdEhvdFZhcmlldHknXS5tYXAoeCA9PiB7XFxuICAgICAgICAgICAgc2V0TGlzdHMoeClcXG4gICAgICAgIH0pXFxuXFxuICAgIH1cXG5cXG5cXG4gICAgaWYgKHBpbmRleCA9PSAxKSB7XFxuICAgICAgICB2YXIgb2pzb24gPSBbe1xcbiAgICAgICAgICAgIG5hbWU6ICfnlLXlvbEnLFxcbiAgICAgICAgICAgIGlkOiAnbW92aWUnLFxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHtcXG4gICAgICAgICAgICAgICAgXFxcInFtdHZfY2xhc3NpZnlcXFwiOiBbXFxcIuWFqOmDqOexu+WeizpcXFwiLCBcXFwi5Zac5YmnXFxcIiwgXFxcIueIseaDhVxcXCIsIFxcXCLliqjkvZxcXFwiLCBcXFwi56eR5bm7XFxcIiwgXFxcIuaCrOeWkVxcXCIsIFxcXCLniq/nvapcXFwiLCBcXFwi5oOK5oKaXFxcIiwgXFxcIuWGkumZqVxcXCIsIFxcXCLpn7PkuZBcXFwiLCBcXFwi5Y6G5Y+yXFxcIiwgXFxcIuWlh+W5u1xcXCIsIFxcXCLmgZDmgJZcXFwiLCBcXFwi5oiY5LqJXFxcIiwgXFxcIuS8oOiusFxcXCIsIFxcXCLmrYzoiJ5cXFwiLCBcXFwi5q2m5L6gXFxcIiwgXFxcIueBvumavlxcXCIsIFxcXCLopb/pg6hcXFwiLCBcXFwi57qq5b2V54mHXFxcIiwgXFxcIuefreeJh1xcXCJdLFxcbiAgICAgICAgICAgICAgICBcXFwicW10dl9yZWdpb25cXFwiOiBbXFxcIuWFqOmDqOWcsOWMujpcXFwiLCBcXFwi5Y2O6K+tXFxcIiwgXFxcIuasp+e+jlxcXCIsIFxcXCLpn6nlm71cXFwiLCBcXFwi5pel5pysXFxcIiwgXFxcIuS4reWbveWkp+mZhlxcXCIsIFxcXCLnvo7lm71cXFwiLCBcXFwi5Lit5Zu96aaZ5rivXFxcIiwgXFxcIuS4reWbveWPsOa5vlxcXCIsIFxcXCLoi7Hlm71cXFwiLCBcXFwi5rOV5Zu9XFxcIiwgXFxcIuaEj+Wkp+WIqVxcXCIsIFxcXCLopb/nj63niZlcXFwiLCBcXFwi5Y2w5bqmXFxcIiwgXFxcIuazsOWbvVxcXCIsIFxcXCLkv4TnvZfmlq9cXFwiXSxcXG4gICAgICAgICAgICAgICAgXFxcInFtdHZfeWVhclxcXCI6IFtcXFwi5YWo6YOo5bm05LujOlxcXCIsIFxcXCIyMDIzXFxcIiwgXFxcIjIwMjJcXFwiLCBcXFwiMjAyMVxcXCIsIFxcXCIyMDIwXFxcIiwgXFxcIjIwMTlcXFwiLCBcXFwiMjAxOFxcXCIsIFxcXCIyMDE3XFxcIiwgXFxcIjIwMTZcXFwiLCBcXFwiMjAxNVxcXCIsIFxcXCIyMDE0XFxcIiwgXFxcIjIwMTNcXFwiLCBcXFwiMjAxMlxcXCIsIFxcXCIyMDEwXFxcIl0sXFxuICAgICAgICAgICAgICAgIFxcXCJxbXR2X3NvcnRcXFwiOiBbXFxcIui/keacn+eDreW6pjp0aW1lXFxcIiwgXFxcIumrmOWIhuS8mOWFiDpyYXRlXFxcIl0sXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIG5hbWU6ICfnlLXop4bliacnLFxcbiAgICAgICAgICAgIGlkOiAndHYnLFxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHtcXG4gICAgICAgICAgICAgICAgXFxcInFtdHZfY2xhc3NpZnlcXFwiOiBbXFxcIuWFqOmDqOexu+WeizpcXFwiLCBcXFwi5Zac5YmnXFxcIiwgXFxcIueIseaDhVxcXCIsIFxcXCLnp5HlubtcXFwiLCBcXFwi5aWH5bm7XFxcIiwgXFxcIuWPpOijhVxcXCIsIFxcXCLmiJjkuolcXFwiLCBcXFwi5oKs55aRXFxcIiwgXFxcIuaBkOaAllxcXCIsIFxcXCLnuqrlvZXniYdcXFwiXSxcXG4gICAgICAgICAgICAgICAgXFxcInFtdHZfZ2VucmVzXFxcIjogW1xcXCLlhajpg6jlnLDljLo6XFxcIiwgXFxcIuWNjuivrVxcXCIsIFxcXCLmrKfnvo5cXFwiLCBcXFwi6Z+p5Zu9XFxcIiwgXFxcIuaXpeacrFxcXCIsIFxcXCLnvo7lm71cXFwiLCBcXFwi6Iux5Zu9XFxcIiwgXFxcIuazsOWbvVxcXCJdLFxcbiAgICAgICAgICAgICAgICBcXFwicW10dl95ZWFyXFxcIjogW1xcXCLlhajpg6jlubTku6M6XFxcIiwgXFxcIjIwMjNcXFwiLCBcXFwiMjAyMlxcXCIsIFxcXCIyMDIxXFxcIiwgXFxcIjIwMjBcXFwiLCBcXFwiMjAxOVxcXCIsIFxcXCIyMDE4XFxcIiwgXFxcIjIwMTdcXFwiLCBcXFwiMjAxNlxcXCIsIFxcXCIyMDE1XFxcIiwgXFxcIjIwMTRcXFwiLCBcXFwiMjAxM1xcXCIsIFxcXCIyMDEyXFxcIiwgXFxcIjIwMTBcXFwiXSxcXG4gICAgICAgICAgICAgICAgXFxcInFtdHZfc29ydFxcXCI6IFtcXFwi6L+R5pyf54Ot5bqmOnRpbWVcXFwiLCBcXFwi6auY5YiG5LyY5YWIOnJhdGVcXFwiXSxcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgbmFtZTogJ+WKqOa8qycsXFxuICAgICAgICAgICAgaWQ6ICdhbmltZScsXFxuICAgICAgICAgICAgY29udGVudDoge1xcbiAgICAgICAgICAgICAgICBcXFwicW10dl9jbGFzc2lmeVxcXCI6IFtcXFwi5YWo6YOo57G75Z6LOlxcXCIsIFxcXCLllpzliadcXFwiLCBcXFwi54ix5oOFXFxcIiwgXFxcIuWKqOS9nFxcXCIsIFxcXCLnp5HlubtcXFwiLCBcXFwi5aWH5bm7XFxcIl0sXFxuICAgICAgICAgICAgICAgIFxcXCJxbXR2X2dlbnJlc1xcXCI6IFtcXFwi5YWo6YOo5Zyw5Yy6OlxcXCIsIFxcXCLljY7or61cXFwiLCBcXFwi5qyn576OXFxcIiwgXFxcIuaXpeacrFxcXCJdLFxcbiAgICAgICAgICAgICAgICBcXFwicW10dl95ZWFyXFxcIjogW1xcXCLlhajpg6jlubTku6M6XFxcIiwgXFxcIjIwMjNcXFwiLCBcXFwiMjAyMlxcXCIsIFxcXCIyMDIxXFxcIiwgXFxcIjIwMjBcXFwiLCBcXFwiMjAxOVxcXCIsIFxcXCIyMDE4XFxcIiwgXFxcIjIwMTdcXFwiLCBcXFwiMjAxNlxcXCIsIFxcXCIyMDE1XFxcIiwgXFxcIjIwMTRcXFwiLCBcXFwiMjAxM1xcXCIsIFxcXCIyMDEyXFxcIiwgXFxcIjIwMTBcXFwiXSxcXG4gICAgICAgICAgICAgICAgXFxcInFtdHZfc29ydFxcXCI6IFtcXFwi6L+R5pyf54Ot5bqmOnRpbWVcXFwiLCBcXFwi6auY5YiG5LyY5YWIOnJhdGVcXFwiXSxcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgbmFtZTogJ+e7vOiJuicsXFxuICAgICAgICAgICAgaWQ6ICd2YXJpZXR5JyxcXG4gICAgICAgICAgICBjb250ZW50OiB7XFxuICAgICAgICAgICAgICAgIFxcXCJxbXR2X2NsYXNzaWZ5XFxcIjogW1xcXCLlhajpg6jnsbvlnos6XFxcIiwgXFxcIuecn+S6uuengFxcXCIsIFxcXCLohLHlj6Pnp4BcXFwiLCBcXFwi6Z+z5LmQXFxcIiwgXFxcIuatjOiInlxcXCJdLFxcbiAgICAgICAgICAgICAgICBcXFwicW10dl9nZW5yZXNcXFwiOiBbXFxcIuWFqOmDqOWcsOWMujpcXFwiLCBcXFwi5Y2O6K+tXFxcIiwgXFxcIuasp+e+jlxcXCIsIFxcXCLpn6nlm71cXFwiLCBcXFwi5pel5pysXFxcIl0sXFxuICAgICAgICAgICAgICAgIFxcXCJxbXR2X3llYXJcXFwiOiBbXFxcIuWFqOmDqOW5tOS7ozpcXFwiLCBcXFwiMjAyM1xcXCIsIFxcXCIyMDIyXFxcIiwgXFxcIjIwMjFcXFwiLCBcXFwiMjAyMFxcXCIsIFxcXCIyMDE5XFxcIiwgXFxcIjIwMThcXFwiLCBcXFwiMjAxN1xcXCIsIFxcXCIyMDE2XFxcIiwgXFxcIjIwMTVcXFwiLCBcXFwiMjAxNFxcXCIsIFxcXCIyMDEzXFxcIiwgXFxcIjIwMTJcXFwiLCBcXFwiMjAxMFxcXCJdLFxcbiAgICAgICAgICAgICAgICBcXFwicW10dl9zb3J0XFxcIjogW1xcXCLov5HmnJ/ng63luqY6dGltZVxcXCIsIFxcXCLpq5jliIbkvJjlhYg6cmF0ZVxcXCJdLFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1dXFxuXFxuXFxuICAgICAgICB2YXIg5aSn57G7ID0gW11cXG4gICAgICAgIG9qc29uLm1hcCh4ID0+IHtcXG4gICAgICAgICAgICDlpKfnsbsucHVzaCh4Lm5hbWUgKyBcXFwiQFxcXCIgKyB4Lm5hbWUpXFxuICAgICAgICB9KVxcblxcbiAgICAgICAgdmFyIGluZGV4ID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcImluZGV4XFxcIiwgJzAnKVxcblxcbiAgICAgICAgdmFyIGogPSBvanNvbltpbmRleF1cXG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoai5jb250ZW50KVxcblxcbiAgICAgICAgdmFyIHRlbXAgPSB7fVxcbiAgICAgICAga2V5cy5mb3JFYWNoKHggPT4ge1xcbiAgICAgICAgICAgIHZhciB0eXBlID0geFxcblxcbiAgICAgICAgICAgIHZhciBsID0gai5jb250ZW50W3hdXFxuXFxuICAgICAgICAgICAgaWYgKFsnYXJlYScsICdsYW5nJywgJ3ZlcnNpb24nLCAnc3RhdGUnXS5pbmNsdWRlcyh4KSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm5cXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgaWYgKGwubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgICAgICB2YXIgbnMgPSBsLm1hcCgoaykgPT4ge1xcblxcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBrLmluY2x1ZGVzKFxcXCI6XFxcIikgPyBrLnNwbGl0KCc6JylbMF0gOiBrXFxuICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSBrLmluY2x1ZGVzKFxcXCI6XFxcIikgPyBrLnNwbGl0KCc6JylbMV0gOiBrXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICduYW1lJzogbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiB4XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIHRlbXBbeF0gPSBuc1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuXFxuICAgICAgICB2YXIgdCA9IE9iamVjdC52YWx1ZXModGVtcCkubWFwKHggPT4geC5tYXAoeiA9PiBKU09OLnN0cmluZ2lmeSh6KSkuam9pbignIycpKVxcblxcblxcbiAgICAgICAgdmFyIFRydWVKc29uID0ge1xcbiAgICAgICAgICAgIHR5cGU6IEFycmF5KOWkp+exuy5qb2luKCcjJykpLFxcbiAgICAgICAgICAgIGl0ZW06IHQgIT0gXFxcIlxcXCIgPyB0IDogW10sXFxuICAgICAgICB9XFxuICAgICAgICAvL2xvZyhUcnVlSnNvbilcXG5cXG4gICAgICAgIC8v6ZyA5qC55o2u5a6e6ZmF5L+u5pS5XFxuICAgICAgICBjb25zdCDliIbnsbvpopzoibIgPSBnZXRSYW5nZUNvbG9ycygpO1xcbiAgICAgICAgY29uc3QgSnNvbuWkp+exuyA9ICd0eXBlJztcXG4gICAgICAgIGNvbnN0IEpzb27mi7zmjqUgPSAnaXRlbSc7XFxuICAgICAgICBjb25zdCBKc29u5ouG5YiGID0gJyMnO1xcbiAgICAgICAgY29uc3QgSnNvbuWNlemhuSA9ICdAJztcXG4gICAgICAgIGNvbnN0IEpzb27liJfooaggPSBbXFxcInFtdHZfY2xhc3NpZnlcXFwiLCBcXFwicW10dl9nZW5yZXNcXFwiLCBcXFwicW10dl95ZWFyXFxcIiwgXFxcInFtdHZfc29ydFxcXCJdOyAvL+WIh+aNoua4hemZpFxcbiAgICAgICAgY29uc3Qg5Y2V6aG55riF6ZmkID0gW107XFxuICAgICAgICBjb25zdCDmjpLpmaQgPSAnJztcXG4gICAgICAgIGNvbnN0IOWIhuexu+WxleW8gCA9ICfiiKgnO1xcbiAgICAgICAgY29uc3Qg5YiG57G75oqY5Y+gID0gJ+KIpyc7XFxuICAgICAgICBjb25zdCDpobXpnaLmoIfor4YgPSAnYWlxbXR2JztcXG5cXG5cXG4gICAgICAgIC8v5Yqo5oCB5YiG57G7XFxuICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2pkdGZsJykpLnJ1bGUpXFxuXFxuICAgICAgICB2YXIgdHlwZSA9IHN0b3JhZ2UwLmdldE15VmFyKOmhtemdouagh+ivhiwgXFxcIueUteW9sVxcXCIpO1xcbiAgICAgICAgdmFyIHRhZyA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJxbXR2X2NsYXNzaWZ5XFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgdmFyIGNvdW50cnkgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFwicW10dl9nZW5yZXNcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICB2YXIgeWVhciA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJxbXR2X3llYXJcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICB2YXIgc29ydCA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJxbXR2X3NvcnRcXFwiLCBcXFwiXFxcIik7XFxuXFxuICAgICAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICBcXFwiY29uZGl0aW9uXFxcIjoge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcInR5cGVcXFwiOiB0eXBlLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcImNsYXNzaWZ5XFxcIjogdGFnLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcInJlZ2lvblxcXCI6IGNvdW50cnksXFxuICAgICAgICAgICAgICAgICAgICBcXFwic29ydFxcXCI6IHNvcnQsXFxuICAgICAgICAgICAgICAgICAgICBcXFwieWVhcnNcXFwiOiB5ZWFyLFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBcXFwicGFnZU51bVxcXCI6IHBhZ2UsXFxuICAgICAgICAgICAgICAgIFxcXCJwYWdlU2l6ZVxcXCI6IDI4LFxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgIClcXG5cXG4gICAgICAgIC8vbG9nKGJvZHkpXFxuXFxuICAgICAgICB2YXIganNvbiA9IGZldGNoKFxcXCJodHRwczovL1xcXCIgKyBjb25maWcucWltYWkgKyBcXFwiL2FwaS9hcHAvbW92aWUvaW5kZXgvc2NyZWVuTW92aWVcXFwiLCB7XFxuXFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxcbiAgICAgICAgICAgICAgICAnT3JpZ2luJzogJ2h0dHA6Ly8nICsgY29uZmlnLnFpbWFpLFxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgYm9keTogYm9keSxcXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgfSlcXG5cXG5cXG4gICAgICAgIHZhciBpbmZvID0gW107XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIGluZm8gPSBKU09OLnBhcnNlKGpzb24pLmRhdGEucmVjb3JkcztcXG4gICAgICAgIH0gY2F0Y2gge31cXG5cXG4gICAgICAgIGlmIChpbmZvLmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICB2YXIgZGF0YSA9IGluZm87XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGRhdGEgPSBbXVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHNtYWxsPuaXoOe7k+aenDwvc2FtbGw+JyxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgc2V0UmVzdWx0KGQpXFxuICAgICAgICB9XFxuXFxuICAgICAgICBkYXRhLm1hcCh4ID0+IHtcXG4gICAgICAgICAgICB2YXIgbmFtZSA9IHgubmFtZTtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogbmFtZSxcXG4gICAgICAgICAgICAgICAgaW1nOiB4LmNvdmVyLFxcbiAgICAgICAgICAgICAgICBkZXNjOiB4LnJhdGUsXFxuICAgICAgICAgICAgICAgIHVybDogJCgnJykubGF6eVJ1bGUoKG4pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJzb3VcXFwiLCBuKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICB9LCBuYW1lKVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcblxcbiAgICB9XFxufVwifV0iLCJpY29uIjoiIiwicHJveHkiOiIifQ==
Add Comment
Please, Sign In to add comment