Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥人人电影网,百度云盘,阿里网盘下载@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImdtdE1vZGlmaWVkXCI6MCxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuinhOWImeWIl+ihqFwiLFwicGF0aFwiOlwiZGF0YVwiLFwicnVsZVwiOlwidmFyIHdyYXB1ID0gKHUpID0+IHtcXG4gICAgaWYoY29uZmlnLm1vZGUgPT0gXFxcIuacrOWcsOi9rOeggVxcXCIpe1xcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudCh1KSArICc/Pz9meXBhZ2UnXFxuICAgIH1cXG4gICAgaWYgKGNvbmZpZy5tb2RlID09IFxcXCLkupHnm5jmsYflvbFcXFwiKSB7XFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJztcXG4gICAgfVxcbiAgICBpZiAoL2FsaXl1bmRyaXZlLy50ZXN0KHUpKSB7XFxuICAgICAgICBjb25zdCBbbGluaywgX3NoYXJlX3B3ZF0gPSB1LnNwbGl0KCc/c2hhcmVfcHdkPScpO1xcbiAgICAgICAgY29uc3QgW19saW5rLCBfZm9sZGVySURdID0gbGluay5zcGxpdCgnL2ZvbGRlci8nKTtcXG4gICAgICAgIGxldCBzaGFyZV9wd2QgPSAoX3NoYXJlX3B3ZCB8fCAnJykuc3BsaXQoJyNuYW1lPScpWzBdIHx8ICcnO1xcbiAgICAgICAgbGV0IHNoYXJlSWQgPSBfbGluay5zcGxpdCgnY29tL3MvJylbMV07XFxuICAgICAgICByZXR1cm4gJ3NtYXJ0ZHJpdmU6Ly9zaGFyZS9icm93c2U/c2hhcmVJZD0nICsgc2hhcmVJZCArICcmc2hhcmVQd2Q9JyArIHNoYXJlX3B3ZDtcXG4gICAgfVxcbiAgICByZXR1cm4gXFxcIndlYjovL1xcXCIgKyB1O1xcbn07XFxubGV0IHJ1bGVzID0gW3tcXG4gICAgbmFtZTogXFxcIuS6keebmOi1hOa6kFxcXCIsXFxuICAgIHBhZ2U6IHRydWUsXFxuICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgIGxldCB1cmwgPSBcXFwiaHR0cHM6Ly9yZXMueXVucGFuLndpbi8/UGFnZUluZGV4PVxcXCIgKyBwYWdlICsgXFxcIiZQYWdlU2l6ZT0xMiZLZXl3b3JkPVxcXCIgKyBzICsgXFxcIiZUeXBlPSZUYWc9XFxcIjtcXG4gICAgICAgIGxldCBodG1sID0gcmVxdWVzdCh1cmwsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vcmVzLnl1bnBhbi53aW4vXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcblxcbiAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcIm1haW4mJi5jYXJkXFxcIik7XFxuICAgICAgICAvL2xvZyhhcnIpO1xcbiAgICAgICAgbGV0IGQgPSBbXTtcXG5cXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcbiAgICAgICAgICAgIGxldCB1ID0gcGRmaChpdCwgXFxcIi5jYXJkLWxpbmssMSYmb25jbGlja1xcXCIpLm1hdGNoKC9odHRwczpcXFxcL1xcXFwvKHd3d1xcXFwuYWxpeXVuZHJpdmVcXFxcLmNvbVxcXFwvc3xhbHl3cFxcXFwubmV0KVxcXFwvXFxcXHcqL2cpIHx8IFtdO1xcbiAgICAgICAgICAgIHUgPSB1Lmxlbmd0aCA+IDAgPyB1WzBdIDogdXJsO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0LCBcXFwiLmNhcmQtdGl0bGUmJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgcGljX3VybDogcGQoaXQsIFxcXCJpbWcmJnNyY1xcXCIsIHVybCksXFxuICAgICAgICAgICAgICAgIHVybDogd3JhcHUodSksXFxuICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7kupHnm5jotYTmupA8L2ZvbnQ+Jm5ic3A7XFxcIiArIChwZGZoKGl0LCBcXFwiLmNhcmQtdGV4dCwtMSYmVGV4dFxcXCIpKSxcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkO1xcbiAgICB9XFxufSwge1xcbiAgICBuYW1lOiBcXFwi54yr54u455uY5pCcXFxcIixcXG4gICAgcGFnZTogZmFsc2UsXFxuICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgIGxldCBodG1sID0gcmVxdWVzdChcXFwiaHR0cHM6Ly93d3cuYWxpcGFuc291LmNvbS9zZWFyY2g/az1cXFwiICsgcywge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYWxpcGFuc291LmNvbS9zZWFyY2g/az1cXFwiICsgc1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcIiNhcHAmJmFcXFwiKTtcXG4gICAgICAgIC8vbG9nKGFycik7XFxuICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBsZXQgaXQgPSBcXFwiPGRpdj5cXFwiICsgYXJyW2ldICsgXFxcIjwvZGl2PlxcXCI7XFxuICAgICAgICAgICAgbGV0IHUgPSBwZGZoKGl0LCBcXFwiYSYmaHJlZlxcXCIpO1xcbiAgICAgICAgICAgIC8vbG9nKHUpO1xcbiAgICAgICAgICAgIGlmICghdS5pbmNsdWRlcyhcXFwiL3MvXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHUgPSBcXFwiaHR0cHM6Ly93d3cuYWxpcGFuc291LmNvbVxcXCIgKyB1LnJlcGxhY2UoXFxcIi9zL1xcXCIsIFxcXCIvY3YvXFxcIik7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXQsIFxcXCJ0ZW1wbGF0ZSYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQodSkubGF6eVJ1bGUoKHdyYXB1KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoaW5wdXQsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBcXFwibm9fc2hvd19kb25hdGU9MVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogaW5wdXQucmVwbGFjZShcXFwiL2N2L1xcXCIsIFxcXCIvcy9cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Q6IGZhbHNlXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBfbGlua3MgPSBodG1sLm1hdGNoKC9odHRwczpcXFxcL1xcXFwvKHd3d1xcXFwuYWxpeXVuZHJpdmVcXFxcLmNvbVxcXFwvc3xhbHl3cFxcXFwubmV0KVxcXFwvXFxcXHcqL2cpIHx8IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgLy9sb2coX2xpbmtzKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChfbGlua3MubGVuZ3RoID4gMSAmJiBfbGlua3NbMV0ucmVwbGFjZShfbGlua3NbMF0sIFxcXCJcXFwiKS5yZXBsYWNlKC9bYS16QS1aMC05XSsvZywgXFxcIlxcXCIpID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXB1KF9saW5rc1sxXSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF9saW5rcy5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXB1KF9saW5rc1swXSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dDtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSwgd3JhcHUpLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+54yr54u455uY5pCcPC9mb250PiZuYnNwO1xcXCIgKyBwZGZoKGl0LCBcXFwidGVtcGxhdGUsMSYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGQ7XFxuICAgIH1cXG59LCB7XFxuICAgIG5hbWU6IFxcXCLmmJPmkJxcXFwiLFxcbiAgICBwYWdlOiB0cnVlLFxcbiAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoXFxcImh0dHBzOi8veWlzby5mdW4vYXBpL3NlYXJjaD9uYW1lPVxcXCIgKyBzICsgXFxcIiZwYWdlTm89XFxcIiArIHBhZ2UsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8veWlzby5mdW4vaW5mbz9zZWFyY2hLZXk9XFxcIiArIHNcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIGxldCBhcnIgPSBKU09OLnBhcnNlKGh0bWwpLmRhdGEubGlzdDtcXG4gICAgICAgIGxvZyhhcnIpO1xcbiAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcbiAgICAgICAgICAgIGxldCB1ID0gaXQudXJsO1xcbiAgICAgICAgICAgIGlmICh1ID09IG51bGwgfHwgIXUuaW5jbHVkZXMoXFxcImFsaXl1blxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBpdC5uYW1lLFxcbiAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KHUpLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+5piT5pCcPC9mb250PiZuYnNwO1xcXCIgKyAoaXQuZ210U2hhcmUgfHwgaXQuZ210Q3JlYXRlKSxcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkO1xcbiAgICB9XFxufSwge1xcbiAgICBuYW1lOiBcXFwi5bCP57q45p2hXFxcIixcXG4gICAgcGFnZTogZmFsc2UsXFxuICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgIGZ1bmN0aW9uIGNhdF9jb2RlKGEpIHtcXG4gICAgICAgICAgICB2YXIgZCwgZSwgYiA9IFtcXFwi5Y2O6K+t55S16KeGXFxcIiwgXFxcIuaXpemfqeeUteinhlxcXCIsIFxcXCLmrKfnvo7nlLXop4ZcXFwiLCBcXFwi5YW25LuW55S16KeGXFxcIiwgXFxcIuWNjuivreeUteW9sVxcXCIsIFxcXCLml6Xpn6nnlLXlvbFcXFwiLCBcXFwi5qyn576O55S15b2xXFxcIiwgXFxcIuWFtuS7lueUteW9sVxcXCIsIFxcXCLljY7or63liqjmvKtcXFwiLCBcXFwi5pel6Z+p5Yqo5ryrXFxcIiwgXFxcIuasp+e+juWKqOa8q1xcXCIsIFxcXCLnuqrlvZXniYdcXFwiLCBcXFwi57u86Im654mHXFxcIiwgXFxcIuaVmeiCsuWfueiurVxcXCIsIFxcXCLlhbbku5bop4bpopFcXFwiLCBcXFwi5Y2O6K+t6Z+z5LmQXFxcIiwgXFxcIuaXpemfqemfs+S5kFxcXCIsIFxcXCLmrKfnvo7pn7PkuZBcXFwiLCBcXFwi5YW25LuW6Z+z5LmQXFxcIiwgXFxcIuWoseS5kOi9r+S7tlxcXCIsIFxcXCLns7vnu5/ova/ku7ZcXFwiLCBcXFwi572R57uc6L2v5Lu2XFxcIiwgXFxcIuWKnuWFrOi9r+S7tlxcXCIsIFxcXCLlhbbku5bova/ku7ZcXFwiLCBcXFwi5ryr55S7XFxcIiwgXFxcIuWwj+ivtFxcXCIsIFxcXCLlh7rniYjkuaZcXFwiLCBcXFwi55+l6K+G5Z+56K6tXFxcIiwgXFxcIuWFtuS7luaWh+aho1xcXCIsIFxcXCLlo4HnurhcXFwiLCBcXFwi5Lq654mpXFxcIiwgXFxcIumjjuaZr1xcXCIsIFxcXCLlhbbku5blm77niYdcXFwiLCBcXFwi5YW25LuWXFxcIl0sXFxuICAgICAgICAgICAgICAgIGMgPSBbXFxcImh5ZHNcXFwiLCBcXFwicmhkc1xcXCIsIFxcXCJvbWRzXFxcIiwgXFxcInF0ZHNcXFwiLCBcXFwiaHlkeVxcXCIsIFxcXCJyaGR5XFxcIiwgXFxcIm9tZHlcXFwiLCBcXFwicXRkeVxcXCIsIFxcXCJoeWRtXFxcIiwgXFxcInJoZG1cXFwiLCBcXFwib21kbVxcXCIsIFxcXCJqbHBcXFwiLCBcXFwienlwXFxcIiwgXFxcImp5cHhcXFwiLCBcXFwicXRzcFxcXCIsIFxcXCJoeXl5XFxcIiwgXFxcInJoeXlcXFwiLCBcXFwib215eVxcXCIsIFxcXCJxdHl5XFxcIiwgXFxcImtmcmpcXFwiLCBcXFwieHRyalxcXCIsIFxcXCJ3bHJqXFxcIiwgXFxcImJncmpcXFwiLCBcXFwicXRyalxcXCIsIFxcXCJtaFxcXCIsIFxcXCJ4c1xcXCIsIFxcXCJjYnNcXFwiLCBcXFwienNweFxcXCIsIFxcXCJxdHdkXFxcIiwgXFxcImJ6XFxcIiwgXFxcInJ3XFxcIiwgXFxcImZqXFxcIiwgXFxcInF0dHBcXFwiLCBcXFwicXRcXFwiXTtcXG4gICAgICAgICAgICBmb3IgKGQgPSAwLCBlID0gYy5sZW5ndGg7IGUgPiBkOyBkKyspXFxuICAgICAgICAgICAgICAgIGlmIChjW2RdID09IGEpIHJldHVybiBiW2RdO1xcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgIGxldCBodG1sID0gcG9zdChcXFwiaHR0cHM6Ly9naXRjYWZlLm5ldC90b29sL2FsaXBhcGVyL1xcXCIsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vdS5naXRjYWZlLm5ldC8nXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgIGFjdGlvbjogXFxcInNlYXJjaFxcXCIsXFxuICAgICAgICAgICAgICAgIGtleXdvcmQ6IHNcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICAgICAgbGV0IGxpc3QgPSBKU09OLnBhcnNlKGh0bWwpO1xcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgbGV0IGl0ID0gbGlzdFtpXVxcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IGl0LnRpdGxlO1xcbiAgICAgICAgICAgIGxldCBtdXJsID0gaXQua2V5XFxuICAgICAgICAgICAgaWYgKHRpdGxlLmluY2x1ZGVzKHMpKSB7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+5bCP57q45p2hPC9mb250PiZuYnNwO1xcXCIgKyBjYXRfY29kZShpdC5jYXQpLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXM6IGl0LmRlc1xcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogd3JhcHUoJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS9zLycgKyBtdXJsKSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGQ7XFxuICAgIH1cXG59LCB7XFxuICAgIG5hbWU6IFxcXCLlv4XlupRcXFwiLFxcbiAgICBwYWdlOiB0cnVlLFxcbiAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICBsZXQgdXJsID0gXFxcImh0dHBzOi8vY24uYmluZy5jb20vc2VhcmNoP3E9XFxcIiArIHMgKyBcXFwiK2FsaXl1bmRyaXZlJnFzPWRzJmZvcm09UUJSRVxcXCI7XFxuICAgICAgICBpZiAocGFnZSAhPSAxKSB7XFxuICAgICAgICAgICAgdXJsID0gZ2V0TXlWYXIoXFxcImJpbmdcXFwiLCB1cmwpO1xcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KHVybCwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly9jbi5iaW5nLmNvbS9cXFwiLFxcbiAgICAgICAgICAgICAgICAvL1xcXCJYLVJlcXVlc3RlZC1XaXRoXFxcIjogXFxcImNvbS5leGFtcGxlLmhpa2Vydmlld1xcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJBY2NlcHRcXFwiOiBcXFwidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsKi8qO3E9MC44LGFwcGxpY2F0aW9uL3NpZ25lZC1leGNoYW5nZTt2PWIzO3E9MC45XFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJmFcXFwiKTtcXG4gICAgICAgIC8vbG9nKGFycik7XFxuICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxuICAgICAgICAgICAgbGV0IHUgPSBwZChpdCwgXFxcImEmJmhyZWZcXFwiLCB1cmwpO1xcbiAgICAgICAgICAgIGxldCB0ID0gcGRmaChpdCwgXFxcImEmJlRleHRcXFwiKTtcXG4gICAgICAgICAgICBpZiAoaXQuaW5jbHVkZXMoXFxcIk5leHQgcGFnZVxcXCIpIHx8IGl0LmluY2x1ZGVzKFxcXCLkuIvkuIDpobVcXFwiKSkge1xcbiAgICAgICAgICAgICAgICBsZXQgdTIgPSBwZChpdCwgXFxcImEmJmhyZWZcXFwiLCB1cmwpO1xcbiAgICAgICAgICAgICAgICBsb2coXFxcIm5leHQgcGFnZVxcXCIpO1xcbiAgICAgICAgICAgICAgICBsb2codTIpO1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiYmluZ1xcXCIsIHUyKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHUgPT0gbnVsbCB8fCB0ID09IG51bGwgfHwgIWl0LmluY2x1ZGVzKHMpKSB7XFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoIWl0LmluY2x1ZGVzKFxcXCLnvZHnm5hcXFwiKSAmJiAhaXQuaW5jbHVkZXMoXFxcIuS6keebmFxcXCIpICYmXFxuICAgICAgICAgICAgICAgICFpdC5pbmNsdWRlcyhcXFwiYWxpeXVuZHJpdmVcXFwiKSAmJiAhaXQuaW5jbHVkZXMoXFxcInl1bnBhblxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAodS5zdGFydHNXaXRoKFxcXCJodHRwczovL2NuLmJpbmcuY29tL1xcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQgZG9tID0gZ2V0SG9tZSh1KS5yZXBsYWNlKFxcXCJodHRwOi8vXFxcIiwgXFxcIlxcXCIpLnJlcGxhY2UoXFxcImh0dHBzOi8vXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgIGxldCBfbGlua3MgPSB0Lm1hdGNoKC9odHRwczpcXFxcL1xcXFwvKHd3d1xcXFwuYWxpeXVuZHJpdmVcXFxcLmNvbVxcXFwvc3xhbHl3cFxcXFwubmV0KVxcXFwvXFxcXHcqL2cpIHx8IFtdO1xcbiAgICAgICAgICAgIGxvZyhfbGlua3MpO1xcbiAgICAgICAgICAgIGxldCBjID0gbnVsbDtcXG4gICAgICAgICAgICBpZiAoX2xpbmtzLmxlbmd0aCA+IDEgJiYgX2xpbmtzWzFdLnJlcGxhY2UoX2xpbmtzWzBdLCBcXFwiXFxcIikucmVwbGFjZSgvW2EtekEtWjAtOV0rL2csIFxcXCJcXFwiKSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICBjID0gd3JhcHUoX2xpbmtzWzFdKTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKF9saW5rcy5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgICAgIGMgPSB3cmFwdShfbGlua3NbMF0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdCxcXG4gICAgICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPuW/heW6lDwvZm9udD4mbmJzcDtcXFwiICsgZG9tLFxcbiAgICAgICAgICAgICAgICB1cmw6IGMgIT0gbnVsbCA/IGMgOiAkKHUpLmxhenlSdWxlKCh3cmFwdSwgbW9kZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBfbGlua3MgPSBodG1sLm1hdGNoKC9odHRwczpcXFxcL1xcXFwvKHd3d1xcXFwuYWxpeXVuZHJpdmVcXFxcLmNvbVxcXFwvc3xhbHl3cFxcXFwubmV0KVxcXFwvXFxcXHcqL2cpIHx8IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKF9saW5rcyk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoX2xpbmtzLmxlbmd0aCA+IDEgJiYgX2xpbmtzWzFdLnJlcGxhY2UoX2xpbmtzWzBdLCBcXFwiXFxcIikucmVwbGFjZSgvW2EtekEtWjAtOV0rL2csIFxcXCJcXFwiKSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwdShfbGlua3NbMV0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfbGlua3MubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwdShfbGlua3NbMF0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcnVsZSA9IE1ZX1JVTEUudGl0bGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UveXNmeD9ydWxlPVxcXCIgKyBydWxlICsgXFxcIiZyPVxcXCIgKyBydWxlICsgXFxcIiZtb2RlPVxcXCIgKyBtb2RlICsgXFxcIiMjXFxcIiArIGlucHV0O1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LCB3cmFwdSwgY29uZmlnLm1vZGUpXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gZDtcXG4gICAgfVxcbn1dO1xcblxcbmxldCBjY29mID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvY2NvZicpXFxucnVsZXMucHVzaChjY29mKVxcbi8v5bm25Y+R6KeE5YiZ5pWwXFxubGV0IHNpemUgPSAxMDtcXG5cXG4kLmV4cG9ydHMgPSBmdW5jdGlvbihwYWdlLCBydWxlKSB7XFxuICAgIGlmICghcGFnZSAmJiAhcnVsZSkge1xcbiAgICAgICAgcmV0dXJuIHJ1bGVzLm1hcChpdCA9PiBpdC5uYW1lKTtcXG4gICAgfVxcbiAgICBpZiAocnVsZSAhPSBudWxsKSB7XFxuICAgICAgICBpZiAocGFnZSAhPSBudWxsICYmIHBhZ2UgPiAxKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVzLmZpbHRlcihpID0+IGkubmFtZSA9PSBydWxlICYmIGkucGFnZSk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gcnVsZXMuZmlsdGVyKGkgPT4gaS5uYW1lID09IHJ1bGUpO1xcbiAgICB9XFxuICAgIGxldCBzdGFydCA9IChwYWdlIC0gMSkgKiBzaXplO1xcbiAgICBpZiAocnVsZXMubGVuZ3RoIDwgc3RhcnQgKyAxKSB7XFxuICAgICAgICByZXR1cm4gW107XFxuICAgIH1cXG4gICAgbGV0IGxlbiA9IHNpemU7XFxuICAgIGlmIChydWxlcy5sZW5ndGggPCBwYWdlICogc2l6ZSkge1xcbiAgICAgICAgbGVuID0gcnVsZXMubGVuZ3RoIC0gc3RhcnRcXG4gICAgfVxcbiAgICByZXR1cm4gcnVsZXMuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgbGVuKTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmkJzntKJcIixcInBhdGhcIjpcInNvdVwiLFwicnVsZVwiOlwibGV0IHIgPSBnZXRJdGVtKFxcXCJyXFxcIiwgXFxcIlxcXCIpO1xcbmlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgbGV0IHIxID0gZmV0Y2goXFxcImhpa2VyOi8vaG9tZUDkupHnm5jmsYflvbFcXFwiKTtcXG4gICAgaWYgKCFyMSB8fCByMS5sZW5ndGggPD0gNSkge1xcbiAgICAgICAgbGV0IHJ1ID0gJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCLmtbfpmJTop4bnlYzop4TliJnliIbkuqvvvIzlvZPliY3liIbkuqvnmoTmmK/vvJrlsI/nqIvluo/vv6Vob21lX3J1bGVfdjLvv6ViYXNlNjQ6Ly9A5LqR55uY5rGH5b2xQGV5SnNZWE4wWDJOb1lYQjBaWEpmY25Wc1pTSTZJaUlzSW5ScGRHeGxJam9pNUxxUjU1dVk1ckdINWIyeElpd2lZWFYwYUc5eUlqb2lUWEpHYkhraUxDSjFjbXdpT2lKb2FXdGxjam92TDJWdGNIUjVKQ1FrWm5sd1lXZGxJaXdpZG1WeWMybHZiaUk2Tml3aVkyOXNYM1I1Y0dVaU9pSjBaWGgwWHpFaUxDSmpiR0Z6YzE5dVlXMWxJam9pSWl3aWRIbHdaU0k2SW1Gc2JDSXNJbU5zWVhOelgzVnliQ0k2SWlJc0ltRnlaV0ZmYm1GdFpTSTZJaUlzSW1GeVpXRmZkWEpzSWpvaUlpd2ljMjl5ZEY5dVlXMWxJam9pSWl3aWVXVmhjbDl1WVcxbElqb2lJaXdpYzI5eWRGOTFjbXdpT2lJaUxDSjVaV0Z5WDNWeWJDSTZJaUlzSW1acGJtUmZjblZzWlNJNkltcHpPbHh1WlhaaGJDaG1aWFJqYUNnbmFHbHJaWEk2THk5bWFXeGxjeTl5ZFd4bGN5OXBZM2t2WVd4cExtcHpKeWtwTzF4dVlXeHBMbWh2YldWUVlXZGxLQ2s3SWl3aWMyVmhjbU5vWDNWeWJDSTZJbWhwYTJWeU9pOHZaVzF3ZEhra0pDUXFLaVFrSkdaNWNHRm5aU1FrSkNJc0ltZHliM1Z3SWpvaTRwR2c1NzJSNTV1WUlpd2ljMlZoY21Ob1JtbHVaQ0k2SW1wek9seHVaWFpoYkNobVpYUmphQ2duYUdsclpYSTZMeTltYVd4bGN5OXlkV3hsY3k5cFkza3ZZV3hwTG1wekp5a3BPMXh1WVd4cExuTmxZWEpqYUZCaFoyVW9kSEoxWlNrN1hHNGlMQ0prWlhSaGFXeGZZMjlzWDNSNWNHVWlPaUp0YjNacFpWOHhJaXdpWkdWMFlXbHNYMlpwYm1SZmNuVnNaU0k2SW1wek9seHVaWFpoYkNobVpYUmphQ2duYUdsclpYSTZMeTltYVd4bGN5OXlkV3hsY3k5cFkza3ZZV3hwTG1wekp5a3BPMXh1WVd4cExtUmxkR0ZwYkZCaFoyVW9LVHNpTENKelpHVjBZV2xzWDJOdmJGOTBlWEJsSWpvaWJXOTJhV1ZmTVNJc0luTmtaWFJoYVd4ZlptbHVaRjl5ZFd4bElqb2lJaXdpZFdFaU9pSnRiMkpwYkdVaUxDSndjbVZTZFd4bElqb2lkbUZ5SUdGc2FXcHpJRDBnWm1WMFkyZ29KMmgwZEhCek9pOHZaMmwwWldVdVkyOXRMMlpzZVRFek9UY3ZhR2xyWlhJdGFXTjVMM0poZHk5dFlYTjBaWEl2WVd4cExtcHpKeWs3WEc1cFppZ2hZV3hwYW5NZ2ZId2dJV0ZzYVdwekxtbHVZMngxWkdWektDZGhiR2tuS1NsN1hHNWNkR0ZzYVdweklEMGdabVYwWTJnb0oyaDBkSEJ6T2k4dlkyUnVMbXB6WkdWc2FYWnlMbTVsZEM5bmFDOW1iSGt4TXprM0wyaHBhMlZ5TFdsamVTOWhiR2t1YW5NbktWeHVmVnh1YVdZb0lXRnNhV3B6SUh4OElDRmhiR2xxY3k1cGJtTnNkV1JsY3lnbllXeHBKeWtwZTF4dVhIUmhiR2xxY3lBOUlHWmxkR05vS0Nkb2RIUndPaTh2YkdacFkza3VZMjl0T2pNd01EQXdMMjF5Wm14NUwyaHBhMlZ5TFdsamVTOXlZWGN2YldGemRHVnlMMkZzYVM1cWN5Y3BYRzU5WEc1cFppaGhiR2xxY3lrZ2UxeHVYSFIzY21sMFpVWnBiR1VvWENKb2FXdGxjam92TDJacGJHVnpMM0oxYkdWekwybGplUzloYkdrdWFuTmNJaXhoYkdscWN5azdYRzVjZEdWMllXd29ZV3hwYW5NcE8xeHVYSFJoYkdrdWNISmxVblZzWlNncE8xeHVmVnh1SWl3aWNHRm5aWE1pT2lKYmUxd2lZMjlzWDNSNWNHVmNJanBjSW0xdmRtbGxYek5jSWl4Y0ltNWhiV1ZjSWpwY0l1ZTlrZWVibU9pdnB1YURoVndpTEZ3aWNHRjBhRndpT2x3aVpHVjBZV2xzWENJc1hDSnlkV3hsWENJNlhDSnFjenBjWEc1bGRtRnNLR1psZEdOb0tDZG9hV3RsY2pvdkwyWnBiR1Z6TDNKMWJHVnpMMmxqZVM5aGJHa3Vhbk1uS1NrN1hGeHVZV3hwTG1sdWFYUkRiMjVtYVdjb0tUdGNYRzVoYkdrdVlXeHBVblZzWlNncE8xd2lmU3g3WENKamIyeGZkSGx3WlZ3aU9sd2liVzkyYVdWZk1WOXNaV1owWDNCcFkxd2lMRndpYm1GdFpWd2lPbHdpNkxXRTVycVE1NzJSNmFHMTZLK201b09GWENJc1hDSndZWFJvWENJNlhDSnphWFJsTFdSbGRHRnBiRndpTEZ3aWNuVnNaVndpT2x3aWFuTTZYRnh1WlhaaGJDaG1aWFJqYUNnbmFHbHJaWEk2THk5bWFXeGxjeTl5ZFd4bGN5OXBZM2t2WVd4cExtcHpKeWtwTzF4Y2JtRnNhUzVrWlhSaGFXeFFZV2RsS0NrN1hDSjlMSHRjSW1OdmJGOTBlWEJsWENJNlhDSnRiM1pwWlY4elhDSXNYQ0p1WVcxbFhDSTZYQ0xrdUtya3Vycm52WkhubTVqb3I2Ym1nNFZjSWl4Y0luQmhkR2hjSWpwY0ltUnlhWFpsWENJc1hDSnlkV3hsWENJNlhDSnFjenBjWEc1bGRtRnNLR1psZEdOb0tDZG9hV3RsY2pvdkwyWnBiR1Z6TDNKMWJHVnpMMmxqZVM5aGJHa3Vhbk1uS1NrN1hGeHVZV3hwTG1sdWFYUkRiMjVtYVdjb0tUdGNYRzVoYkdrdWJYbEJiR2xTZFd4bEtDazdYQ0o5WFNJc0ltbGpiMjRpT2lKb2RIUndjem92TDJkcGRHVmxMbU52YlM5bWJIa3hNemszTDJocGEyVnlMV2xqZVM5eVlYY3ZiV0Z6ZEdWeUwyRnNhWGwxYmk1d2JtY2lmUT09XFxcIlxcbiAgICAgICAgfSk7XFxuICAgICAgICBjb25maXJtKHtcXG4gICAgICAgICAgICB0aXRsZTogTVlfUlVMRS50aXRsZSArICfmj5DnpLonLFxcbiAgICAgICAgICAgIGNvbnRlbnQ6ICfmnKzop4TliJnkvp3otZbkupHnm5jmsYflvbHop4TliJnvvIzngrnlh7vkuIvpnaLnmoTnoa7lrprmjInpkq7lr7zlhaXvvIzms6jmhI/lr7zlhaXlkI7kuIDlrpropoHlnKjkupHnm5jmsYflvbHnmbvlvZXpmL/ph4zkupHnm5jotKblj7fvvIzlkKbliJnkuI3og73nlKgnLFxcbiAgICAgICAgICAgIGNvbmZpcm06IHJ1LFxcbiAgICAgICAgICAgIGNhbmNlbDogcnVcXG4gICAgICAgIH0pXFxuICAgIH1cXG4gICAgYWRkTGlzdGVuZXIoXFxcIm9uQ2xvc2VcXFwiLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcInNcXFwiKTtcXG4gICAgfSkpO1xcbiAgICBsZXQgdGlwID0gXFxcIuS6keebmOaQnOe0ouWQmyDmo4DntKLlip/og73nlLHlr7nlupTnvZHnq5nmj5DkvpvvvIzmnKzop4TliJnkuI3mj5Dkvpvku7vkvZXlhoXlrrlcXFwiO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHRpcCxcXG4gICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgodGlwKSA9PiB7XFxuICAgICAgICAgICAgY29uZmlybSh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5L2/55So6K+05piOXFxcIixcXG4gICAgICAgICAgICAgICAgY29udGVudDogdGlwICsgXFxcIu+8jOacrOinhOWImeS7o+eggeWujOWFqOW8gOa6kO+8jOS7heS+m+WtpuS5oOWSjOeglOeptu+8m+eCueWHu+S4i+aWueehruWumuaMiemSrui3s+i9rOS6keebmOaxh+W9seWwj+eoi+W6j1xcXCIsXFxuICAgICAgICAgICAgICAgIGNvbmZpcm06IFxcXCInaGlrZXI6Ly9ob21lQOS6keebmOaxh+W9sSdcXFwiXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgfSwgdGlwKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl8yX3JvdW5kXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgcGljX3VybDogXFxcImhpa2VyOi8vaW1hZ2VzL2ljb24yXFxcIlxcbiAgICB9KTtcXG4gICAgbGV0IGRtb2RlID0gZ2V0SXRlbShcXFwiZG1vZGVcXFwiLCBcXFwi5LqR55uY5rGH5b2xXFxcIik7XFxuICAgIGluaXRDb25maWcoe1xcbiAgICAgICAgbW9kZTogZG1vZGVcXG4gICAgfSk7XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuaooeW8j++8mlxcXCIgKyBkbW9kZSxcXG4gICAgICAgIHVybDogXFxcInNlbGVjdDovL1xcXCIgKyBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLpgInmi6nmqKHlvI9cXFwiLFxcbiAgICAgICAgICAgIG9wdGlvbnM6IFtcXFwi5LqR55uY5rGH5b2xXFxcIiwgXFxcIuacrOWcsOi9rOeggVxcXCIsIFxcXCLlrpjmlrlBUFBcXFwiXSxcXG4gICAgICAgICAgICBjb2w6IDEsXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJkbW9kZVxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ID09IFxcXCLlrpjmlrlBUFBcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5L+u5pS55oiQ5Yqf77yM6K+356Gu5L+d5omL5py65pyJ5a6J6KOF6Zi/6YeM5LqR55uY5a6Y5pa5QVBQXFxcIjtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip/vvIzms6jmhI/opoHlnKjkupHnm5jmsYflvbHorr7nva7ph4zpnaLnmbvlvZXotKblj7dcXFwiXFxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uXzJfcm91bmRcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgICBwaWNfdXJsOiBcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbjFcXFwiXFxuICAgIH0pO1xcblxcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfmkJzntKInLFxcbiAgICAgICAgZGVzYzogJ+ivt+i+k+WFpeWFs+mUruivjScsXFxuICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgIHVybDogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoJ3MnLCBpbnB1dCk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICB9KSxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcigncycsICcnKVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgbGV0IHJ1bGVzID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXCIpKCk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIlxcXCIgPT0gciA/IFxcXCLigJzigJzlhajpg6jigJ3igJ1cXFwiIDogXFxcIuWFqOmDqFxcXCIsXFxuICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIGNsZWFySXRlbShcXFwiclxcXCIpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIlxcbiAgICB9KTtcXG4gICAgZm9yIChsZXQgaXQgb2YgcnVsZXMpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGl0ID09IHIgPyBcXFwi4oCc4oCcXFxcIiArIGl0ICsgXFxcIuKAneKAnVxcXCIgOiBpdCxcXG4gICAgICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKHIpID0+IHtcXG4gICAgICAgICAgICAgICAgc2V0SXRlbShcXFwiclxcXCIsIHIpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgfSwgaXQpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgICAgICAgcGljX3VybDogXFxcIlxcXCJcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogJ2xpbmUnLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBpZDogJ3lwai1sJ1xcbiAgICAgICAgfVxcbiAgICB9KTtcXG59XFxubGV0IHMgPSBnZXRNeVZhcigncycsICcnKTtcXG5pZiAocyAhPSBcXFwiXFxcIikge1xcbiAgICBsZXQgcCA9IE1ZX1BBR0U7XFxuICAgIGxldCBkYXRhID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXCIpKHAsIHIgIT0gXFxcIlxcXCIgPyByIDogbnVsbCk7XFxuXFxuICAgIGxldCBwYWdlaWQgPSBcXFwieXBqLXBhZ2VcXFwiICsgcDtcXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuWKoOi9veesrFxcXCIgKyBwICsgXFxcIumhteS4re+8jOi/m+W6pu+8mjEvXFxcIiArIGRhdGEubGVuZ3RoLFxcbiAgICAgICAgICAgIHVybDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogcGFnZWlkXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgc2V0UmVzdWx0KGQpO1xcbiAgICBsb2coZGF0YS5sZW5ndGgpO1xcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XFxuICAgICAgICAvL+Wkmue6v+eoi+WKoOi9vSAgICAgICAgXFxuICAgICAgICBsZXQgcmVhbFBhZ2UgPSBcXFwiXFxcIiA9PSByID8gMSA6IHA7XFxuICAgICAgICBsZXQgdGFza3MgPSBkYXRhLm1hcChpdCA9PiB7XFxuICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24ocnVsZSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGUuZmluZChzLCByZWFsUGFnZSk7XFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIHBhcmFtOiBpdCxcXG4gICAgICAgICAgICAgICAgaWQ6IFxcXCJydWxlQFxcXCIgKyBpdC5uYW1lXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuXFxuICAgICAgICBiYXRjaEV4ZWN1dGUodGFza3MsIHtcXG4gICAgICAgICAgICBmdW5jOiBmdW5jdGlvbihwYXJhbSwgaWQsIGVycm9yLCByZXN1bHQpIHtcXG4gICAgICAgICAgICAgICAgLy9sb2coXFxcImxpc3RlbmVyOiBcXFwiICsgKHJlc3VsdCB8fCBbXSkubGVuZ3RoKVxcbiAgICAgICAgICAgICAgICBwYXJhbS5pID0gcGFyYW0uaSArIDE7XFxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaXQgb2YgcmVzdWx0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLmogPSBwYXJhbS5qICsgMTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUJlZm9yZShwYWdlaWQsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdC50aXRsZS5pbmNsdWRlcyhcXFwi4oCc4oCc4oCd4oCdXFxcIikgPyBpdC50aXRsZSA6IFxcXCLigJzigJzigJ3igJ1cXFwiICsgaXQudGl0bGUucmVwbGFjZShuZXcgUmVnRXhwKFxcXCI8ZW0+fDwvZW0+XFxcIiwgXFxcImdcXFwiKSwgXFxcIlxcXCIpLnJlcGxhY2UobmV3IFJlZ0V4cChzLCBcXFwiZ1xcXCIpLCBcXFwiPHN0cm9uZz48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiAjMUU5MEZGXFxcXFxcXCI+XFxcIiArIHMgKyBcXFwiPC9zcGFuPjwvc3Ryb25nPlxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogaXQuZGVzYyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogaXQudXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljX3VybDogaXQucGljX3VybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBpdC5waWNfdXJsID8gJ21vdmllXzFfdmVydGljYWxfcGljJyA6IFxcXCJ0ZXh0XzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXFxcIl9fYXBwXFxcIiArIE1ZX1BBR0UgKyBcXFwiQFxcXCIgKyBwYXJhbS5qLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRUaXRsZTogZmFsc2VcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcblxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmIChwYXJhbS5pID49IHBhcmFtLmFsbCkge1xcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbShwYWdlaWQpXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuWKoOi9veesrFxcXCIgKyBNWV9QQUdFICsgXFxcIumhteS4re+8jOi/m+W6pu+8mlxcXCIgKyAocGFyYW0uaSArIDEpICsgXFxcIi9cXFwiICsgcGFyYW0uYWxsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogcGFnZWlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgcGFyYW06IHtcXG4gICAgICAgICAgICAgICAgYWxsOiBkYXRhLmxlbmd0aCxcXG4gICAgICAgICAgICAgICAgaTogMCxcXG4gICAgICAgICAgICAgICAgajogLTFcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pCc57Si6aG16Z2iXCIsXCJwYXRoXCI6XCJzb3VwXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmlmIChNWV9QQVJBTVMua2V5KSB7XFxuICAgIHB1dE15VmFyKFxcXCJzXFxcIiwgTVlfUEFSQU1TLmtleSk7XFxufVxcbmV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL3NvdVxcXCIpKS5ydWxlKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIkNDT0ZcIixcInBhdGhcIjpcImNjb2ZcIixcInJ1bGVcIjpcInZhciB3cmFwdSA9ICh1KSA9PiB7XFxuICAgIGlmKGNvbmZpZy5tb2RlID09IFxcXCLmnKzlnLDovaznoIFcXFwiKXtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJ1xcbiAgICB9XFxuICAgIGlmIChjb25maWcubW9kZSA9PSBcXFwi5LqR55uY5rGH5b2xXFxcIikge1xcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdSArICc/P2Z5cGFnZSc7XFxuICAgIH1cXG4gICAgaWYgKC9hbGl5dW5kcml2ZS8udGVzdCh1KSkge1xcbiAgICAgICAgY29uc3QgW2xpbmssIF9zaGFyZV9wd2RdID0gdS5zcGxpdCgnP3NoYXJlX3B3ZD0nKTtcXG4gICAgICAgIGNvbnN0IFtfbGluaywgX2ZvbGRlcklEXSA9IGxpbmsuc3BsaXQoJy9mb2xkZXIvJyk7XFxuICAgICAgICBsZXQgc2hhcmVfcHdkID0gKF9zaGFyZV9wd2QgfHwgJycpLnNwbGl0KCcjbmFtZT0nKVswXSB8fCAnJztcXG4gICAgICAgIGxldCBzaGFyZUlkID0gX2xpbmsuc3BsaXQoJ2NvbS9zLycpWzFdO1xcbiAgICAgICAgcmV0dXJuICdzbWFydGRyaXZlOi8vc2hhcmUvYnJvd3NlP3NoYXJlSWQ9JyArIHNoYXJlSWQgKyAnJnNoYXJlUHdkPScgKyBzaGFyZV9wd2Q7XFxuICAgIH1cXG4gICAgcmV0dXJuIFxcXCJ3ZWI6Ly9cXFwiICsgdTtcXG59O1xcbiQuZXhwb3J0cyA9IHtcXG4gICAgbmFtZTogJ0NDT0YnLFxcbiAgICBwYWdlOiB0cnVlLFxcbiAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICBsZXQgZCA9IFtdXFxuICAgICAgICBjb25zdCB7XFxuICAgICAgICAgICAgYnl0ZXNUb1NpemUsXFxuICAgICAgICAgICAgY29sb3JcXG4gICAgICAgIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS90b29scycpO1xcbiAgICAgICAgbGV0IGh0bWwgPSBmZXRjaCgnaHR0cHM6Ly9wYW4uY2NvZi5jYy9hcGkvc2VhcmNoJywge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgXFxcImNvbnRlbnQtdHlwZVxcXCI6ICdhcHBsaWNhdGlvbi9qc29uJyxcXG4gICAgICAgICAgICAgICAgJ1JlZmVyZXInOiAnaHR0cHM6Ly9wYW4uY2NvZi5jYy9zZWFyY2g/a2V5d29yZD0nICsgc1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgICAgICBcXFwicGFnZVNpemVcXFwiOiAyMCxcXG4gICAgICAgICAgICAgICAgXFxcInBhZ2VOdW1cXFwiOiBwYWdlLFxcbiAgICAgICAgICAgICAgICBcXFwia2V5d29yZFxcXCI6IHMsXFxuICAgICAgICAgICAgICAgIFxcXCJmcm9tTW9iaWxlXFxcIjogdHJ1ZVxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgIH0pXFxuICAgICAgICBsZXQgbGlzdCA9IEpTT04ucGFyc2UoaHRtbClcXG4gICAgICAgICAgICAuZGF0YS5yb3dzXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBsZXQgaXQgPSBsaXN0W2ldXFxuICAgICAgICAgICAgbGV0IHRpdGxlID0gaXQuZmlsZU5hbWVcXG4gICAgICAgICAgICBsZXQgbXVybCA9IGl0LnVybFxcbiAgICAgICAgICAgIGxldCB0eXBlID0gaXQudHlwZS5yZXBsYWNlKC9mb2xkZXIvLCAn5paH5Lu25aS5JykucmVwbGFjZSgvZmlsZS8sICfmlofku7YnKVxcbiAgICAgICAgICAgIGlmICh0aXRsZS5pbmNsdWRlcyhzKSkge1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogJ+KAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPkNDT0Y8L2ZvbnQ+Jm5ic3A7JyArICfmlofku7bnsbvlnovvvJonICsgdHlwZSArICfvvIzmlofku7blpKflsI/vvJonICsgYnl0ZXNUb1NpemUoaXQuc2l6ZSksXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KG11cmwpXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGRcXG4gICAgfVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuW3peWFt1wiLFwicGF0aFwiOlwidG9vbHNcIixcInJ1bGVcIjpcImZ1bmN0aW9uIGJ5dGVzVG9TaXplKHNpemUpIHtcXG4gICAgaWYgKHNpemUgPCAwLjEgKiAxMDI0KSB7XFxuICAgICAgICAvL+Wwj+S6jjAuMUtC77yM5YiZ6L2s5YyW5oiQQlxcbiAgICAgICAgc2l6ZSA9IHNpemUudG9GaXhlZCgyKSArIFxcXCJCXFxcIjtcXG4gICAgfSBlbHNlIGlmIChzaXplIDwgMC4xICogMTAyNCAqIDEwMjQpIHtcXG4gICAgICAgIC8vIOWwj+S6jjAuMU1C77yM5YiZ6L2s5YyW5oiQS0JcXG4gICAgICAgIHNpemUgPSAoc2l6ZSAvIDEwMjQpLnRvRml4ZWQoMikgKyBcXFwiS0JcXFwiO1xcbiAgICB9IGVsc2UgaWYgKHNpemUgPCAwLjEgKiAxMDI0ICogMTAyNCAqIDEwMjQpIHtcXG4gICAgICAgIC8vIOWwj+S6jjAuMUdC77yM5YiZ6L2s5YyW5oiQTUJcXG4gICAgICAgIHNpemUgPSAoc2l6ZSAvICgxMDI0ICogMTAyNCkpLnRvRml4ZWQoMikgKyBcXFwiTUJcXFwiO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgLy8g5YW25LuW6L2s5YyW5oiQR0JcXG4gICAgICAgIHNpemUgPSAoc2l6ZSAvICgxMDI0ICogMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDIpICsgXFxcIkdCXFxcIjtcXG4gICAgfVxcbiAgICAvLyDovazmiJDlrZfnrKbkuLJcXG4gICAgbGV0IHNpemVTdHIgPSBzaXplICsgXFxcIlxcXCIsXFxuICAgICAgICAvLyDojrflj5blsI/mlbDngrnlpITnmoTntKLlvJVcXG4gICAgICAgIGluZGV4ID0gc2l6ZVN0ci5pbmRleE9mKFxcXCIuXFxcIiksXFxuICAgICAgICAvLyDojrflj5blsI/mlbDngrnlkI7kuKTkvY3nmoTlgLxcXG4gICAgICAgIGRvdSA9IHNpemVTdHIuc3Vic3RyKGluZGV4ICsgMSwgMik7XFxuICAgIC8vIOWIpOaWreWQjuS4pOS9jeaYr+WQpuS4ujAw77yM5aaC5p6c5piv5YiZ5Yig6ZmkMDBcXG4gICAgaWYgKGRvdSA9PT0gXFxcIjAwXFxcIikgcmV0dXJuIHNpemVTdHIuc3Vic3RyaW5nKDAsIGluZGV4KSArIHNpemVTdHIuc3Vic3RyKGluZGV4ICsgMywgMik7XFxuICAgIHJldHVybiBzaXplO1xcbn1cXG4kLmV4cG9ydHMuYnl0ZXNUb1NpemUgPSBieXRlc1RvU2l6ZTtcXG4kLmV4cG9ydHMuY29sb3IgPSBmdW5jdGlvbih0ZXh0LCBjb2xvcikge1xcbiAgICB0ZXh0ICs9IFxcXCJcXFwiO1xcbiAgICBpZiAodGV4dC5pbmRleE9mKFxcXCLigJzigJzigJ3igJ1cXFwiKSA9PT0gMCkge1xcbiAgICAgICAgdGV4dC5yZXBsYWNlKFxcXCLigJzigJzigJ3igJ1cXFwiLCBcXFwiXFxcIik7XFxuICAgIH1cXG4gICAgcmV0dXJuIFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0nXFxcIiArIGNvbG9yICsgXFxcIic+XFxcIiArIHRleHQgKyBcXFwiPC9mb250PlxcXCI7XFxufVxcblxcbiQuZXhwb3J0cy5zbGVlcCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHtcXG4gICAgamF2YS5sYW5nLlRocmVhZC5zbGVlcCh0aW1lb3V0KTtcXG59XFxuXFxuZnVuY3Rpb24gaHRtbFRhZyh0YWcsIHRleHQpIHtcXG4gICAgdGV4dCArPSBcXFwiXFxcIjtcXG4gICAgaWYgKHRleHQuaW5kZXhPZihcXFwi4oCc4oCc4oCd4oCdXFxcIikgPT09IDApIHtcXG4gICAgICAgIHRleHQucmVwbGFjZShcXFwi4oCc4oCc4oCd4oCdXFxcIiwgXFxcIlxcXCIpO1xcbiAgICB9XFxuICAgIHJldHVybiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIFxcXCI8XFxcIiArIHRhZyArIFxcXCI+XFxcIiArIHRleHQgKyBcXFwiPC9cXFwiICsgdGFnICsgXFxcIj5cXFwiO1xcblxcbn1cXG4kLmV4cG9ydHMuaHRtbFRhZyA9IGh0bWxUYWc7XFxuJC5leHBvcnRzLnNtYWxsID0gZnVuY3Rpb24odGV4dCkge1xcbiAgICByZXR1cm4gaHRtbFRhZyhcXFwic21hbGxcXFwiLCB0ZXh0KTtcXG59XFxuXFxuZnVuY3Rpb24gZ2V0VGltZShmaWxlLGlzU3RhbmRhcmQpIHtcXG4gICAgaXNTdGFuZGFyZCA9IGlzU3RhbmRhcmR8fGZhbHNlO1xcbiAgICBsZXQgdFRpbWUgPSBmaWxlLnVwZGF0ZWRfYXQgfHwgZmlsZS50aW1lX3N0ciB8fCBcXFwiXFxcIjtcXG4gICAgdFRpbWUgPSB0VGltZS5zcGxpdChcXFwiVFxcXCIpO1xcbiAgICBsZXQgZGF0ZSA9IHRUaW1lWzBdO1xcbiAgICBpZihpc1N0YW5kYXJkKXtcXG4gICAgICAgIGRhdGUgPSBkYXRlLnJlcGxhY2UoLy0vZyxcXFwiL1xcXCIpO1xcbiAgICB9XFxuICAgIHRUaW1lID0gdFRpbWVbMV0uc3BsaXQoL1p8XFxcXC4vKTtcXG4gICAgZGF0ZSArPSBcXFwiIFxcXCIgKyB0VGltZVswXTtcXG4gICAgcmV0dXJuIGRhdGU7XFxufVxcbmZ1bmN0aW9uIGdldFRpbWVJbnQodGltZVN0cil7XFxuICAgIHJldHVybiAobmV3IERhdGUodGltZVN0cikpLmdldFRpbWUoKVxcbn1cXG4kLmV4cG9ydHMuZ2V0VGltZSA9IGdldFRpbWU7XFxuXFxubGV0IGNobk51bUNoYXIgPSB7XFxuICAgIOmbtjogMCxcXG4gICAg5LiAOiAxLFxcbiAgICDkuow6IDIsXFxuICAgIOS4iTogMyxcXG4gICAg5ZubOiA0LFxcbiAgICDkupQ6IDUsXFxuICAgIOWFrTogNixcXG4gICAg5LiDOiA3LFxcbiAgICDlhas6IDgsXFxuICAgIOS5nTogOVxcbn07XFxuXFxubGV0IGNobk5hbWVWYWx1ZSA9IHtcXG4gICAg5Y2BOiB7XFxuICAgICAgICB2YWx1ZTogMTAsXFxuICAgICAgICBzZWNVbml0OiBmYWxzZVxcbiAgICB9LFxcbiAgICDnmb46IHtcXG4gICAgICAgIHZhbHVlOiAxMDAsXFxuICAgICAgICBzZWNVbml0OiBmYWxzZVxcbiAgICB9LFxcbiAgICDljYM6IHtcXG4gICAgICAgIHZhbHVlOiAxMDAwLFxcbiAgICAgICAgc2VjVW5pdDogZmFsc2VcXG4gICAgfSxcXG4gICAg5LiHOiB7XFxuICAgICAgICB2YWx1ZTogMTAwMDAsXFxuICAgICAgICBzZWNVbml0OiB0cnVlXFxuICAgIH0sXFxuICAgIOS6vzoge1xcbiAgICAgICAgdmFsdWU6IDEwMDAwMDAwMCxcXG4gICAgICAgIHNlY1VuaXQ6IHRydWVcXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBDaGluZXNlVG9OdW1iZXIoY2huU3RyKSB7XFxuICAgIGxldCBydG4gPSAwO1xcbiAgICBsZXQgc2VjdGlvbiA9IDA7XFxuICAgIGxldCBudW1iZXIgPSAwO1xcbiAgICBsZXQgc2VjVW5pdCA9IGZhbHNlO1xcbiAgICBsZXQgc3RyID0gY2huU3RyLnNwbGl0KCcnKTtcXG5cXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGxldCBudW0gPSBjaG5OdW1DaGFyW3N0cltpXV07XFxuICAgICAgICBpZiAodHlwZW9mIG51bSAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICAgICAgICBudW1iZXIgPSBudW07XFxuICAgICAgICAgICAgaWYgKGkgPT09IHN0ci5sZW5ndGggLSAxKSB7XFxuICAgICAgICAgICAgICAgIHNlY3Rpb24gKz0gbnVtYmVyO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgbGV0IHVuaXQgPSBjaG5OYW1lVmFsdWVbc3RyW2ldXS52YWx1ZTtcXG4gICAgICAgICAgICBzZWNVbml0ID0gY2huTmFtZVZhbHVlW3N0cltpXV0uc2VjVW5pdDtcXG4gICAgICAgICAgICBpZiAoc2VjVW5pdCkge1xcbiAgICAgICAgICAgICAgICBzZWN0aW9uID0gKHNlY3Rpb24gKyBudW1iZXIpICogdW5pdDtcXG4gICAgICAgICAgICAgICAgcnRuICs9IHNlY3Rpb247XFxuICAgICAgICAgICAgICAgIHNlY3Rpb24gPSAwO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHNlY3Rpb24gKz0gKG51bWJlciAqIHVuaXQpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBudW1iZXIgPSAwO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiBydG4gKyBzZWN0aW9uO1xcbn1cXG5cXG5mdW5jdGlvbiBuYW1lQ29tcGFyZShhLCBiKSB7XFxuICAgIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKVxcbiAgICAgICAgcmV0dXJuIGEgPT0gbnVsbCA/IGIgPT0gbnVsbCA/IDAgOiAtMSA6IDE7XFxuXFxuICAgIGEgPSBhLnJlcGxhY2UoLyhb6Zu25LiA5LqM5LiJ5Zub5LqU5YWt5LiD5YWr5Lmd5Y2B55m+5Y2D5LiH5Lq/XSkvZywgZnVuY3Rpb24obWF0Y2gsIHAxLCBwMiwgcDMsIG9mZnNldCwgc3RyaW5nKSB7XFxuICAgICAgICAvLyBwMSBpcyBub25kaWdpdHMsIHAyIGRpZ2l0cywgYW5kIHAzIG5vbi1hbHBoYW51bWVyaWNzXFxuICAgICAgICByZXR1cm4gQ2hpbmVzZVRvTnVtYmVyKHAxKTtcXG4gICAgfSlcXG4gICAgYiA9IGIucmVwbGFjZSgvKFvpm7bkuIDkuozkuInlm5vkupTlha3kuIPlhavkuZ3ljYHnmb7ljYPkuIfkur9dKS9nLCBmdW5jdGlvbihtYXRjaCwgcDEsIHAyLCBwMywgb2Zmc2V0LCBzdHJpbmcpIHtcXG4gICAgICAgIC8vIHAxIGlzIG5vbmRpZ2l0cywgcDIgZGlnaXRzLCBhbmQgcDMgbm9uLWFscGhhbnVtZXJpY3NcXG4gICAgICAgIHJldHVybiBDaGluZXNlVG9OdW1iZXIocDEpO1xcbiAgICB9KVxcblxcbiAgICBsZXQgTlVNQkVSUyA9IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuLmNvbXBpbGUoXFxcIig/PD1cXFxcXFxcXEQpKD89XFxcXFxcXFxkKXwoPzw9XFxcXFxcXFxkKSg/PVxcXFxcXFxcRClcXFwiKVxcbiAgICBsZXQgc3BsaXQxID0gTlVNQkVSUy5zcGxpdChuZXcgamF2YS5sYW5nLlN0cmluZyhhKSk7XFxuICAgIGxldCBzcGxpdDIgPSBOVU1CRVJTLnNwbGl0KG5ldyBqYXZhLmxhbmcuU3RyaW5nKGIpKTtcXG5cXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1pbihzcGxpdDEubGVuZ3RoLCBzcGxpdDIubGVuZ3RoKTsgaSsrKSB7XFxuICAgICAgICBsZXQgYzEgPSBzcGxpdDFbaV0uY2hhckNvZGVBdCgwKTtcXG4gICAgICAgIGxldCBjMiA9IHNwbGl0MltpXS5jaGFyQ29kZUF0KDApO1xcbiAgICAgICAgbGV0IGNtcCA9IDA7XFxuICAgICAgICBsZXQgemVyb0NoYXJDb2RlID0gJzAnLmNoYXJDb2RlQXQoMCk7XFxuICAgICAgICBsZXQgbmluZUNoYXJDb2RlID0gJzknLmNoYXJDb2RlQXQoMCk7XFxuXFxuICAgICAgICBpZiAoYzEgPj0gemVyb0NoYXJDb2RlICYmIGMxIDw9IG5pbmVDaGFyQ29kZSAmJiBjMiA+PSB6ZXJvQ2hhckNvZGUgJiYgYzIgPD0gbmluZUNoYXJDb2RlKSB7XFxuICAgICAgICAgICAgY21wID0gbmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKHNwbGl0MVtpXSkuY29tcGFyZVRvKG5ldyBqYXZhLm1hdGguQmlnSW50ZWdlcihzcGxpdDJbaV0pKTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGlmIChjbXAgPT09IDApIHtcXG4gICAgICAgICAgICBsZXQgcmVnZXggPSAvW2EtekEtWjAtOV0vXFxuICAgICAgICAgICAgbGV0IHMxID0gU3RyaW5nKHNwbGl0MVtpXSlcXG4gICAgICAgICAgICBsZXQgczIgPSBTdHJpbmcoc3BsaXQyW2ldKVxcbiAgICAgICAgICAgIGlmIChyZWdleC50ZXN0KHMxKSB8fCByZWdleC50ZXN0KHMyKSkge1xcbiAgICAgICAgICAgICAgICBjbXAgPSBuZXcgamF2YS5sYW5nLlN0cmluZyhzcGxpdDFbaV0pLmNvbXBhcmVUbyhuZXcgamF2YS5sYW5nLlN0cmluZyhzcGxpdDJbaV0pKTtcXG4gICAgICAgICAgICAgICAgLy8gY21wID0gczEubG9jYWxlQ29tcGFyZShzMiwgJ2VuJylcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBjbXAgPSBzMS5sb2NhbGVDb21wYXJlKHMyLCAnemgnKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGlmIChjbXAgIT09IDApIHtcXG4gICAgICAgICAgICByZXR1cm4gY21wO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGxldCBsZW5ndGhDbXAgPSBzcGxpdDEubGVuZ3RoIC0gc3BsaXQyLmxlbmd0aDtcXG4gICAgLy8gaWYgKGxlbmd0aENtcCAhPT0gMCkgbGVuZ3RoQ21wID0gbGVuZ3RoQ21wID4gMCA/IC0xIDogMTtcXG4gICAgcmV0dXJuIGxlbmd0aENtcDtcXG59XFxuXFxuJC5leHBvcnRzLnNvcnRzID0gZnVuY3Rpb24obGlzdCwgc29ydCkge1xcbiAgICBpZiAoc29ydCA9PT0gXFxcIuexu+Wei1xcXCIpIHtcXG4gICAgICAgIC8vIGxvZyhcXFwi57G75Z6L5o6S5bqPXFxcIik7XFxuICAgICAgICBsaXN0LnNvcnQoZnVuY3Rpb24oYSwgYikge1xcbiAgICAgICAgICAgIHJldHVybiBhLnR5cGUgLSBiLnR5cGVcXG4gICAgICAgIH0pO1xcbiAgICB9IGVsc2UgaWYgKHNvcnQgPT09IFxcXCLlkI3np7BcXFwiKSB7XFxuICAgICAgICAvLyBsb2coXFxcIuWQjeensOaOkuW6j1xcXCIpO1xcbiAgICAgICAgLy8gbGlzdC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcXG4gICAgICAgIC8vICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lLCBcXFwiemhcXFwiKVxcbiAgICAgICAgLy8gfSk7XFxuICAgICAgICBsaXN0LnNvcnQoZnVuY3Rpb24oYSwgYikge1xcbiAgICAgICAgICAgIHJldHVybiBuYW1lQ29tcGFyZShhLm5hbWV8fGEudGl0bGUsIGIubmFtZXx8Yi50aXRsZSk7XFxuICAgICAgICB9KTtcXG4gICAgfSBlbHNlIGlmIChzb3J0ID09PSBcXFwi5aSn5bCPXFxcIikge1xcbiAgICAgICAgLy8gbG9nKFxcXCLlpKflsI/mjpLluo9cXFwiKTtcXG4gICAgICAgIGxpc3Quc29ydChmdW5jdGlvbihhLCBiKSB7XFxuICAgICAgICAgICAgcmV0dXJuIChhLnNpemUgfHwgTnVtYmVyKGEuc2l6ZV9zdHIpIHx8IDApIC0gKGIuc2l6ZSB8fCBOdW1iZXIoYi5zaXplX3N0cikgfHwgMCk7XFxuICAgICAgICB9KTtcXG4gICAgfWVsc2UgaWYgKHNvcnQgPT09IFxcXCLml7bpl7RcXFwiKSB7XFxuICAgICAgICAvLyBsb2coXFxcIuaXtumXtOaOkuW6j1xcXCIpO1xcbiAgICAgICAgbGlzdC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcXG4gICAgICAgICAgICByZXR1cm4gZ2V0VGltZUludChnZXRUaW1lKGEsdHJ1ZSkpIC0gZ2V0VGltZUludChnZXRUaW1lKGIsdHJ1ZSkpXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICByZXR1cm4gbGlzdFxcbn1cXG5cXG5mdW5jdGlvbiBzaW1pbGFyKHMsIHQsIGYpIHsvL+WIpOaWreS4pOS4quWtl+espuS4suS5i+mXtOeahOebuOS8vOW6plxcbiAgICBpZiAoIXMgfHwgIXQpIHtcXG4gICAgICAgIHJldHVybiAwXFxuICAgIH1cXG4gICAgaWYocyA9PT0gdCl7XFxuICAgICAgICByZXR1cm4gMTAwO1xcbiAgICB9XFxuICAgIHZhciBsID0gcy5sZW5ndGggPiB0Lmxlbmd0aCA/IHMubGVuZ3RoIDogdC5sZW5ndGhcXG4gICAgdmFyIG4gPSBzLmxlbmd0aFxcbiAgICB2YXIgbSA9IHQubGVuZ3RoXFxuICAgIHZhciBkID0gW11cXG4gICAgZiA9IGYgfHwgMlxcbiAgICB2YXIgbWluID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcXG4gICAgICAgIHJldHVybiBhIDwgYiA/IChhIDwgYyA/IGEgOiBjKSA6IChiIDwgYyA/IGIgOiBjKVxcbiAgICB9XFxuICAgIHZhciBpLCBqLCBzaSwgdGosIGNvc3RcXG4gICAgaWYgKG4gPT09IDApIHJldHVybiBtXFxuICAgIGlmIChtID09PSAwKSByZXR1cm4gblxcbiAgICBmb3IgKGkgPSAwOyBpIDw9IG47IGkrKykge1xcbiAgICAgICAgZFtpXSA9IFtdXFxuICAgICAgICBkW2ldWzBdID0gaVxcbiAgICB9XFxuICAgIGZvciAoaiA9IDA7IGogPD0gbTsgaisrKSB7XFxuICAgICAgICBkWzBdW2pdID0galxcbiAgICB9XFxuICAgIGZvciAoaSA9IDE7IGkgPD0gbjsgaSsrKSB7XFxuICAgICAgICBzaSA9IHMuY2hhckF0KGkgLSAxKVxcbiAgICAgICAgZm9yIChqID0gMTsgaiA8PSBtOyBqKyspIHtcXG4gICAgICAgICAgICB0aiA9IHQuY2hhckF0KGogLSAxKVxcbiAgICAgICAgICAgIGlmIChzaSA9PT0gdGopIHtcXG4gICAgICAgICAgICAgICAgY29zdCA9IDBcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBjb3N0ID0gMVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBkW2ldW2pdID0gbWluKGRbaSAtIDFdW2pdICsgMSwgZFtpXVtqIC0gMV0gKyAxLCBkW2kgLSAxXVtqIC0gMV0gKyBjb3N0KVxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGxldCByZXMgPSAoMSAtIGRbbl1bbV0gLyBsKSAqMTAwXFxuICAgIHJldHVybiByZXMudG9GaXhlZChmKVxcbn1cXG5cXG4kLmV4cG9ydHMuc2ltaWxhciA9IHNpbWlsYXI7XFxuJC5leHBvcnRzLnJlbW92ZUV4dCA9IGZ1bmN0aW9uIChmaWxlKXtcXG4gICAgcmV0dXJuIGZpbGUuc3BsaXQoJy4nKS5zbGljZSgwLC0xKS5qb2luKCcuJylcXG59O1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwidVwiLFwicGF0aFwiOlwidVwiLFwicnVsZVwiOlwiJC5leHBvcnRzID0gZnVuY3Rpb24ocnVsZSwgb3JpZ2luLCBtb2RlKSB7XFxuICAgIHJldHVybiAkLnRvU3RyaW5nKChydWxlLCBvcmlnaW4sIG1vZGUpID0+IHtcXG4gICAgICAgIGxldCBob3N0ID0gb3JpZ2luLnJlcGxhY2UobmV3IFJlZ0V4cChcXFwiaHR0cDovL3xodHRwczovL1xcXCIpLCBcXFwiXFxcIikuc3BsaXQoXFxcIi9cXFwiKVswXTtcXG4gICAgICAgIGxldCBob3N0cyA9IGhvc3Quc3BsaXQoXFxcIi5cXFwiKTtcXG4gICAgICAgIGlmIChob3N0cy5sZW5ndGggPiAyKSB7XFxuICAgICAgICAgICAgaG9zdCA9IGhvc3RzW2hvc3RzLmxlbmd0aCAtIDJdICsgXFxcIi5cXFwiICsgaG9zdHNbaG9zdHMubGVuZ3RoIC0gMV07XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aChcXFwibWFnbmV0XFxcIikpIHtcXG4gICAgICAgICAgICBjb25maXJtKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLmuKnppqjmj5DnpLpcXFwiLFxcbiAgICAgICAgICAgICAgICBjb250ZW50OiBcXFwi5qOA5rWL5Yiw5paw55qE56OB6ZO+5Zyw5Z2A77yM54K55Ye756Gu5a6a5oyJ6ZKu5Y2z5Y+v5pKt5pS+77yM54K55Ye75Y+W5raI5oyJ6ZKu5Y+v5Lul5aSN5Yi26ZO+5o6lXFxcIixcXG4gICAgICAgICAgICAgICAgY29uZmlybTogJC50b1N0cmluZygobWFnKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFnO1xcbiAgICAgICAgICAgICAgICB9LCBpbnB1dCksXFxuICAgICAgICAgICAgICAgIGNhbmNlbDogJC50b1N0cmluZygobWFnKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly9cXFwiICsgbWFnXFxuICAgICAgICAgICAgICAgIH0sIGlucHV0KVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XFxuICAgICAgICB9IGVsc2UgaWYgKGlucHV0LmluY2x1ZGVzKFxcXCJhbGl5dW5kcml2ZS5jb21cXFwiKSAmJiBtb2RlICE9IFxcXCLlrpjmlrlBUFBcXFwiKSB7XFxuICAgICAgICAgICAgbG9nKGlucHV0KTtcXG4gICAgICAgICAgICByZXR1cm4gJC50b1N0cmluZygodXJsLCBydWxlKSA9PiB7XFxuICAgICAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAub3BlbihKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIumYv+mHjOS6keebmFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD1cXFwiICsgdXJsICsgJz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgfSkpXFxuICAgICAgICAgICAgfSwgaW5wdXQsIHJ1bGUpXFxuICAgICAgICB9IGVsc2UgaWYgKC9cXFxcLihtcDN8ZmxhY3xtNGEpJC8udGVzdChpbnB1dCkpIHtcXG4gICAgICAgICAgICBsb2coaW5wdXQpO1xcbiAgICAgICAgICAgIHJldHVybiAkLnRvU3RyaW5nKCh1cmwsIHJ1bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5wbGF5VmlkZW8odXJsKTtcXG4gICAgICAgICAgICB9LCBpbnB1dCwgcnVsZSlcXG4gICAgICAgIH0gZWxzZSBpZiAoIWlucHV0LmluY2x1ZGVzKGhvc3QpICYmIGlucHV0LnN0YXJ0c1dpdGgoXFxcImh0dHBcXFwiKSkge1xcbiAgICAgICAgICAgIGxvZyhpbnB1dCk7XFxuICAgICAgICAgICAgcmV0dXJuICQudG9TdHJpbmcoKHVybCwgcnVsZSwgbW9kZSkgPT4ge1xcbiAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLor6bmg4VcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3lzZng/cnVsZT1cXFwiICsgcnVsZSArIFxcXCImcj1cXFwiICsgcnVsZSArIFxcXCImbW9kZT1cXFwiICsgbW9kZSArIFxcXCIjI1xcXCIgKyB1cmwsXFxuICAgICAgICAgICAgICAgIH0pKVxcbiAgICAgICAgICAgIH0sIGlucHV0LCBydWxlLCBtb2RlKTtcXG4gICAgICAgIH0gZWxzZSBpZiAoIWlucHV0LnN0YXJ0c1dpdGgoXFxcImh0dHBcXFwiKSkge1xcbiAgICAgICAgICAgIGxvZyhpbnB1dCk7XFxuICAgICAgICAgICAgLy/og73llKTotbdBUFDnmoTnmb3lkI3ljZVcXG4gICAgICAgICAgICBsZXQgd2hpdGUgPSBbXFxuICAgICAgICAgICAgICAgIFxcXCJxa2xpbmtcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiYmRuZXRkaXNrXFxcIixcXG4gICAgICAgICAgICAgICAgXFxcInh1bmxlaWFwcFxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJzbWFydGRyaXZlXFxcIlxcbiAgICAgICAgICAgIF07XFxuICAgICAgICAgICAgbGV0IGluV2hpdGUgPSB3aGl0ZS5maWx0ZXIoaXQgPT4gaW5wdXQuc3RhcnRzV2l0aChpdCkpLmxlbmd0aCA+IDA7XFxuICAgICAgICAgICAgaWYgKCFpbldoaXRlKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuICQudG9TdHJpbmcoKHVybCwgcnVsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLm9wZW5UaGlyZEFwcCAmJiBmeV9icmlkZ2VfYXBwLm9wZW5UaGlyZEFwcCh1cmwpO1xcbiAgICAgICAgICAgIH0sIGlucHV0LCBydWxlKVxcbiAgICAgICAgfSBlbHNlIHtcXG5cXG4gICAgICAgIH1cXG4gICAgfSwgcnVsZSwgb3JpZ2luLCBtb2RlKTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJ5c2Z4XCIsXCJwYXRoXCI6XCJ5c2Z4XCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmxldCBydWxlID0gZ2V0UGFyYW0oXFxcInJcXFwiKS5zcGxpdChcXFwiIyNcXFwiKVswXTtcXG5sZXQgbW9kZSA9IChnZXRQYXJhbShcXFwibW9kZVxcXCIpIHx8IFxcXCJcXFwiKS5zcGxpdChcXFwiIyNcXFwiKVswXTtcXG5sZXQgdXJsID0gTVlfVVJMLnNwbGl0KFxcXCIjI1xcXCIpWzFdO1xcbmxldCBpdGUgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS91XFxcIikocnVsZSwgZ2V0SG9tZSh1cmwpLCBtb2RlKTtcXG5sZXQganMgPSAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGlmIChkb2N1bWVudC50aXRsZSAmJiBkb2N1bWVudC50aXRsZS5sZW5ndGgpIHtcXG4gICAgICAgICAgICBsZXQgciA9ICQkJCgpLmxhenlSdWxlKCh0KSA9PiB7XFxuICAgICAgICAgICAgICAgIHNldFBhZ2VUaXRsZSh0KTtcXG4gICAgICAgICAgICB9LCBkb2N1bWVudC50aXRsZSk7XFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5wYXJzZUxhenlSdWxlKHIpO1xcbiAgICAgICAgfVxcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICBmeV9icmlkZ2VfYXBwLmxvZyhlLnRvU3RyaW5nKCkpO1xcbiAgICB9XFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCJcXFwiLFxcbiAgICB1cmw6IHVybCxcXG4gICAgY29sX3R5cGU6IFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXCIsXFxuICAgIGRlc2M6IFxcXCIxMDAlJiZmbG9hdFxcXCIsXFxuICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgdXJsSW50ZXJjZXB0b3I6IGl0ZSxcXG4gICAgICAgIGpzOiBqcyxcXG4gICAgICAgIGNhbkJhY2s6IHRydWUsXFxuICAgICAgICBqc0xvYWRpbmdJbmplY3Q6IHRydWUsXFxuICAgICAgICBmbG9hdFZpZGVvOiB0cnVlXFxuICAgIH1cXG59KTtcXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogXFxcImxpbmVcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgaWQ6IHVybFxcbiAgICB9XFxufSk7XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6Zi/6YeMbGF6eVwiLFwicGF0aFwiOlwiYWxpbGF6eVwiLFwicnVsZVwiOlwiZXZhbFByaXZhdGVKUyhcXFwick8rMzd1RytiMkpibDkxSlhlMUFMYWNBY1JLMXhpa0tOU2Z4M09KTnY5TUFLcGN3RktFTHF2MkZRRXE1MTgvWmxaQ2R6TTl2R256Yy9wSTNMemZPeWFCVndNeitkQWNaL3NqZ3dkcjkrYWhOMnpwekhvOGRET2Q2Szl4YVJXTWZEQ3p5NzNnUlB0YWtBSEpBM21OUlcycHVQU3JTVEJNQjJrVUdxRUd1VU5Xa00xcEhBMWpvdVNXcnJBTWJrT0VJVUtiMllRSjNlSXJVUzJzc1Q3NFd3ZWp2MGlyeFZaOFJUaFVncHpBU1k1NXVQdDdWZ2lWVmlpRVhGY0ovdnA5eGV3WVc1S0V0Z2MzdkV4Y1RWOHp2UDhjeUgwMXBkRjJLUEdzZzBITHdCRTRJOVE5dTFUZ0NPRmphTmZaTmtheFpRWjJWblBsWjFyTnl0TGNwYURjZjJNL2pyVGQvK25tc21XcmtqaXR1cTh4STZmQ1RsMEo2ZTBId0h6ZnRROFhGZFVGZWpLeFdERnBpMTB6alE0bi9yQ1ErNFM3T05aWlRyWWRpWHlQZTRRM21neko3UVo0NzVQM05wS082Z0xsaUp2cDdOSHNQVy9BSCtwZlhCWEJ3ZFJpdkM2aE5HNXVQNkJnOGdtaU4xR1RzUk1YdzdMaG9yRkp3V0RaUkE5WUxsWHZLUmJ2NVlZdHBGTVQ1T1pDZzlwckVqYWdZWi8vdWRLenkreEJTaEExMzNENVJhbStQM3lxS3FqTGt3dFFVWkp5eFpFODZiNjYwdlgyQ2JoYnhTWThKRkUzZzFYczR2Z1cwV0M1OGFEUk9MQXloWnAwZWk3bm1La1BGbGFRWTh1ak13dGQ4K1VaVFYxM1lPaWlkb0tzaFhxdkhKVklmRTVxLzI3ZnZ5R3UyaEtmSjJuSmFhdHdwbmlYcVJJdTQ5YzBmbFJST3ZVTW0xTEhXK1RvSlFzMEswcFpNd3gzSkpGeSthSm1sNFROVWI4TUxUOFdLZytaWkxxNm0wUEFXdzhnZGdJdExEYTJhRFQvUXMrQXd3U3ZrMVErQ0dyUURzem94bnFHcGRKaXpiRFZUUWtKY1c1M0lkSitpU1VRUUhDTXVNMVVZZnBkQUp3YzREMytqMzBTY0h1bkgzL2JOQmZZd24wNC9LSHY3eVpTeUZjMDZSMnc4bmdETVJuY2ZJUHJqTjZic3pCRUFjSzBwVjRBdGdockpBZHBDclBSQ3c0TWZVTEpnNjZxeFY0S1YxRmtiT0hZNmcwNkNxemRpOXRCZ2ZkMzRMemZkS2RIMVZvZHQ0SzY3Z1BudFhtYlU4Q1VUczJIUkZsd2ZDZnFCbVF0RkRpVDNGcU5QRkhYazNvSkUrc09JdFNydlVkdStidDRwRnlsbmVlR2xJU3NYNm1IT0hmazVCWnA5RVdPTWtqQTZEbWJwWmZxQm9qNC9ySmsxY0hidmZNTEovblc3SHhrdmRid2pmZUhyOXJMbkVyRDgrT2hNUHIyRkNsdUNYSzhzOGZSTHZuVlZSdUw4M2NkNU1KRGVQR1huaEhmSmljTThlOHNyeTBqV1ZuUDdDSi83MWtnQjFQWU9vT2E2WWNCbmQvRW9zdDlTT2VzbmUrWWt0blBhSFB4ZnYyL0d3YlpzN1FLZ3R6Wi9WbmN0cDgwalJMQndDTnREWk5BenczdngxeXZMNnk0UFBMZTNzUXcwdGJSeFBwLy9OcTB0VkhObFNhc0VtUEQzR3crK2prNTRWdVJlYnlTSGtZbFNHTzZDcUQ0YzZnencxYkdSWUREbkUraENkdUkvZ3hsTGZzc1NaMjJWbTJIa1Z4Z3ZRRzgvY053bkFJVlhEY0Q5cHBhZk0rSXN1dkNEWjRVZFNzN0sydXpKNGJVaTlQT3EwQVJyNnJFTU5MVzBjVDZmL3phdExWUnpaVWxkR1VBK3RBd0JYZUF4SlJ6dXdRK1E1Um9vN3NOd1dqOVN0NzZJYU93T1lKS2thUXA1VnlMZGEwc3h3U281dytkd0dkK2NtZTlSVERNYi9lQ0JXUWZ5V21UY1NrLzZVTG5Qd05WRm5VWE5GazJQUFBLU1JVZk15Szd4eVY4bU8rdWFjSkwyUGlKamw1bnpDS2JKejF3YUNubytmMkw0UTVXLzFYSy84alU1N1dUazNyaVdpMnVPV1FXWVBwVjV2bUYvWXpUdVdYeE5iNnpXcWJiOWo3aTlwVjQveXg4TnQvYU9VRnVkSkZpVHY4bThxWmxzS3JXRHdIN0grejBFaFI4VXhYNVpDTDVNTXpSdWJSOGxEUkVSTVJvNFE5d2dJdm54WXZkY1UwQXd2NkhiT25sY05scUFFS2t4RVJMb3FUeW12YStqSEIzZkt5Y1Ryb0lYVW5Ra0g0aHAzSWlFVGF0dTExenphLzh6V3psWENsbEpJVFJJNXBCKy9jOHpzK1MyUStnU2plQlFwakpwemtvMkJKUjd4cE5McjNHdUNVYlc1OUNNRHB0VG1YR3RsTWo1TzJzUXZqMEE2V2U0R3pyMng0Zjl0TlpvU2dFeDZ6S1AvSCtIYWlTWDNyc0dDdVBycHRDQU9ORmJieHBCWlpydU1uY0VtS25XbVcrT05CMzFWN2hZaVVhVzVKblVxWTloejhDUUFWQWRkUGpYUE1JQVBWK0JOQ2Zuc05GWFd2OGV3YW5QSXplMzdBUzkzNGlCZ2w0R09XYnQ0c24vRkZHSE83SWRYVzRmT1drbjF1NVFCdVlzL1UzQjQ0SDI3TklnVHVPYy9LY2FEMTQ4N2ZwVnZ0N09mc09uVXo5dDBNbHNVZGxNSkYzamgrdzNwRUxleFg5Y1NRem8yY3NyeTBqV1ZuUDdDSi83MWtnQjFQWUZ4ZmROdEo5M25BdFFCMlZWT0VYN2NQSTdXK0tINzgzWG9XcjRtd2pBMlN2TkRBZkFNNXdqMjRVSUxYSU5SMk1Ud2JPSlp0N096dy9JdFowc3VWQnpZNTBMWFIwczhMZXU0MU5PTGkyM09YSm5hNTZNaEh0akhoVDNYcnU0MHdza1Z4bXVxL21tL3BxbFhaTm5XdU16TytSVDRQOU5tU1A1Vm1Nd0pqL3FGSFRvUXFtdHNyVC9oeWU5Qm9wZytlZjlvSk1QVXY5K29HNHFMSXJoQ3FPdW8xUGZUTGsyYVNLeWtuTXdjeHNmUDkwdVpnQXFTMjEvL1ErZ0phVHhHUHp2blNKSE14dHcrYmFZdmxMSkV0Q3N4aTdVdFZvNDdBVHd0NHRLU2xjUnhtUk83L0E1SGJ2MTNhci9VS2paSkk5MldDSy9wRC9BaHMyZWlDQzlYenlZMEZoSVBNaGI4OVY1RXN5SEVNTXpkTHpSTHg3WWRyV0g1M2ZlVndLRFhjWjhzb1VrbHJDQ2orN1lndXBzWGE4T0NJZzhJK2lJZDRzZkQ0Y0FWWUVtbkY3NXR3VkpNbllTSmpsTWswRjNScnhsOGdsVTRuWVN0ZGVRb3g4Y21NRnBLL2hpUC81QkNOanFncjlmRkd0UUVQMTllYitWTEE2cVA0Q09qM2NacVY0K3IvOVExeEpiZ1lBQnJSLzV0WGlocEtMY2R4M3cwc21NU2JkckRxV1pyWG10blVwajdhM1FDNFlGQzRPSVVRQnlmcFhJVmh6eXdKTDYwWlpMUmF2aGx0cC9HK3IwdjVEOTZ2UmoyRCszcGR1Z2ErNEF2YVhROWU4ZDhuQTkxbkhCSkJITHVXUDFrcCtRYnZyZjVEQ2JQOE5vUlhnUzVZalFic3F6bjFDQ2ZTam1adnN2ZVBpNkJBRWJRRHRIOWJYZkVHTVFjV0dyZGNUQzNYTG9zaUtuUkNJZGRIZHZwWC9tTHFteXRaTHlHemdHc1hzRVNMUXN0NHI1c1JWZU9naUVtWjhCZjViWGFlUmoyeHluZERJdTNXZW4xUytqUC9SYmtCM1VoUVh2TU1oYTlPYkYwL2FCb040a3pkK0FvN2dTcU84enNheDJHMmp1cEo2R2NlM1NSSlo4SklLcXoyVWF5cmZkOXV2czlON2RGNXNMY0dNSlRiOGNYVnF0OG1JdEtkV3VKMFNPTzhscy90TlYxQ3hmZlZWRUZZSldNTDlObDEybGpLWWFNUmxDQzFRTmdVTHEyN0pFWjJRN0swdURCeVI0SVMyWFc4aWFkR1B2cEJLcUlaY2ZUOWU3QVF5NTRDUStUTDQwYTloUFJRbGdrNkRaRXFIQ3B3S0lOZE5kRlZEWUVVNnFBMFpvUFBVWHdZazR3STk3TjgvZlBSUlFRMHNDZkhrVm95MVhSYVBYN09IelVZNkpMejUyVXVISmo4aGpZbjladWVTK0xXZlVLWEFBakZvY2d2UjRWTVhZMFNrNlNXZVh3Um9oOHVPWmVjOGZSSWwrUHo2K0VjVW1GcjVINHE5M01MYStSVm9MTnpLL0FzTmF6YzJScmZlOHV6MlpuWElXYVRsWENsbEpJVFJJNXBCKy9jOHpzK1MyNTlOR0xBajN0MVFNZUc3WnNVU1FHekxucFBORFhtRjdjZGJqUHBFeHRzc3J5MGpXVm5QN0NKLzcxa2dCMVBZM1diSGs4emxMa3lvSk9ya2ovY2M1Nk5ma3ZHSUdJQy9hcjFTdW9ISDJjTXNyeTBqV1ZuUDdDSi83MWtnQjFQWnhyWlRJK1R0ckVMNDlBT2xudUJzNi9YcUVCbGw3YmRuTHd0OVlPQ0RxOXVleWJqMC9QRlhZQjFjMFpjbjkrU09VVnNwak1EN05ZYytEV2pVTDJiMnNxOFE1MlVvendOc09BSXQ3aU1jZllaK2EwV0dhdnlPRFRNM1QzblVnSjhOMjhhRXFzc2lQSnJYWElHbllzeTNNOGtvK1VBTXpMbG9HTll1MDhpME91SjFUeERsZmRVMU9GQzlaVy9RRDBicUhncXgrdTdidi82MUszMDJvUVIrTW1xRW5yaXNPT05NNjltd1ZQOGlHcFZLblFIcCtqWHYrazVHVUJYWlVDa0RwKysrQ01NRVJFYkxsdXNzdWFJV0dYc0N5cVJWbi9BekR5VG95MjhhTWVNSUJCdWJBYVVNUUI4NkxLcTJvdEQya1lXWEttZzdyUTRXSWZmZmVqMnB4azhWQ0xJenFZMWEzcFNwN2RUSmx1NmNMRVVaYjFUVzVaT2VLbmo1NDBXQlkwL3hQakk4c2N3eG9CUmJ3QStsV1V6MEc1a1BaaG0veXAxWnVheUc4YStsVUJzczlObzVPVzZPRnpIL3dLTmliNHN2RXVCYUpSV1FTZmF6UVB6WC9tQ2F6Qk5qSGpaME1hek9ZM2E4RXRZaFFobnBtTHM5bHFzVEhpRTRNeVhBR2xyMkpPdW9DOWNVMGpFeCtIekx5NEZwc1htQTdJMjJZcW56RjZ0a2ZveG43N1NjYitPK0V5c1oyOFd6Q2FUTWFodloyZVZXdFBub3N2Z0ZXUERodk5CKy91VkhFdlJCamRPS2NaYTlvaHUyeUtQbW1PMWhoQll4WFpPenNDaGdQM0FwQUVPTkREOG12R2RBMUQ0czF6eGtjdlZhK3RrTml5WUtQQk1ZZG5BdXNJSVFUd213VnZYK1B3U3hsUFY4ZzVkeXJ1eHZwVGZlaytEVGozcjMrTmk1bjhrUytiZFJhV2l2L0lUV1VuVk05QnVaRDJZWnY4cWRXYm1zaHZHdGtXRTl0cmZVdUJrbGJrazdtYjMvNElMeTRSNmpZR3RFdkloNldCN0ZzWHZPRWN6VG5hRkN2VTQrT2JIYVRRcmhUUFFibVE5bUdiL0tuVm01cklieHJsNHY2YmhoMmttZk80OXRETFVzYndrakxHNFpZSXNVaWJXQmF4TkR0SThUTUd2SkdVUVFPeEZrTkVDNSsxbDluLzBOZld2UVFqSU5pYUFDYXF2ZXAzVHp2Y3VYSUVyZ3IxRC9QdWdGbWhPVmlVTFlWZyt5MStKUjlOU240ZzZ4ZkJWQTRJK2JPTHpsWHNMNEh5YzFHRDhDUGV6ZlAzejBVVUVOTEFueDVGYU5ua3JmUjJmYjRhMjJJb1N4VGphbTQxN3dxT1cxTXZJUDFWQ0VpenQ4d2lGOGpXSTBTckYrb2cyVEgrZ21QSGxmOGdNUVVUNHMrQ1ZlbHI5YUkwS1MvWDdSOWgvU2hNNVkzWGRROGhPam42OHNyeTBqV1ZuUDdDSi83MWtnQjFQYU4weVg0bTRaVDRNbzgwUzR0QjA3b2MzMjI0dVRoS0JEM2x4andzWTZobmlkY3I4MDJ3WHlucDljMVJkTmdzK2t3UVgwVE51QnE5RC9OVEhJeWhlVHVTRXhDZlp6dkRodi93TndEOC9vNlY4NlVNdnNPL1BPdzVDY3I3OXNKemllV0xNVmFPVkc0L2UxVlBUU0F6WTlIODdPQ0pYZXgraUFPb1crS0FucmlCM0puYTU2TWhIdGpIaFQzWHJ1NDB3dkFXSzBkS0g0UW9rWUl5aFM0VWpiVXN3OE9kamFqVFNkUzVLaHFMb0JsUmdKVVdaTlJSMmpGVjlhd2U4S1ZCSWllQkZKL2pOMGJpY3EyN2lEdm1NVVZ5eXZMU05aV2Mvc0luL3ZXU0FIVTloTDdmRFRSWlI5ZGFNMWswNjAwVnhxQXJ4UC9PVTllR2dUdFhTWmUxTkY1eXl2TFNOWldjL3NJbi92V1NBSFU5amgwZlN2R01hTGsxblNTYVFId3JMOEw1Vy9hRkEwNXYrSDM2VXEyVHRmdXpwUXkrdzc4ODdEa0p5dnYyd25PSi8ydFN1dllCVHZqTVcvWmZsRUtSWGlqTDNXbzVTbWlqb1ZBUktBTTl0OU15eXZMU05aV2Mvc0luL3ZXU0FIVTl2Yk81SHhJZVJoL3BsZUJOKys5YWVxOVpQMmNQQ1hBcGp4ZitLbXBKZkowTC9uRnI5YVd4eVRJRGg3V1F1WmEzbk1GSWg3eDlZT3VGSG8weEZSUk0xSFFSbG5MODdJa0NLYXJ4Qzh6VGgxcVY5OTJ6RVlrUkhMeTAzdDl0L2NvMVBIbnVQSEs3bElSd1g5VjJXY1kvVUFHVTV5MFh4OVh2TE1ZdHZJSDJDYWZkT0x3QjA3RzZ2RU5XRTNBNmF6Mk9zeVhnYXBRSG9wdE5kaWhpZDVBblhqOWVvUUdXWHR0MmN2QzMxZzRJT3IySm03a1NXRjEreW5hVlhLc2hrY2RSVkdNUlZVTXdML3RGUXc0dmd2VXBCQ3NoT0lGQWtLWUZDWW9hdXZsZWErci85dWI5Y1QzNUFHVXhYaFR4Z2pwa1FMSDQ1OFc1THBIMnRXc2tIM1ZFOURjYmZnLzJUdWplSmFMQzNISUtLM1NVaVpnYUh6TnpxQzkvMEhmeVMwM2lkTzNSdWlNN0F3R0hoOHdsRnlmcGVYK2JPaXNzTWtETFc0M3hVQ0UwbTVXWWFVYmpsUmEzbHhVcWl0NE8yYkRYQkF6TzMvZFRqalhkVUtkMTZGMnNaNmdnQ1lhMFVrUGZPS2wvVkt6eW0vTXJPOXJkSG13bERJYnBsSzh2OWlLTTlvMlkzQm93eVdjMHdFWXhMLy9Qa0s0OExodGhhY2Rta0prMFl1MUxzN3FyZXZUWU5pUVUwejlIZHRVSzZjdjRORHlhY0hWWFFQL0M4WnNBYzE3bW1Id0N6MTFzdjJmRlZPK2JCTlBXMmZnODZickZDSUZvekp0dkZSRENvcFJFa0s0cldhU3dGNFBtS1g5bzFyS1pOWkp0S05tWE9sNERlSWd4a2ZLUGNmYU1IUDA4dGQ5Y1JjbTNQckxyMjRYRDBFdHdzRE5Wemw1WFptWENYSXFOSVc0Szd6RDQxUzk2U245NUJia2tpM0ROUzhyNVByQXc2WkorOUd0TzlxK2FkTEwzUVdMeFZqTXdjRXBxcU01aUFmNnBMcG5Rbk41NjVkanZMREFRTTY2QTlScFd4THA3MnVhbjFDZnFISDFNMlM0VEtaakJ1N2w4dXV3eUVrWjhFbkxzU2ZQQ1NVbWhnV0FFZnFYR3dFQ05waGtWWWk0RWpWdEErSUNUbUdnK1Z2VFlvR1hqYzdZajZoSEd1ZDRkdUpiVkJMbFRLRGNZbEZSWGZlWEpvd0ZqVGM3a1Q5R1NmT1Jpa3RabnB6azVFM3JBdm1RYmQxR3NyTE10YXhrVU9nUWhvL1BEOWN6TjVGVWVxUHJCanF6SC9KMUE0b1JnVEFLYVpWSDZreFFvdVpWZ2FjbXZBQzE3WGFkaVg4OWNJdHdZNjMxYlZ0QlRTT0hybXJGelBKOEhSd3EzSGQwTVErSzR5T3hRV2c2dDNnTU1uNVBBNGltWHVxVlZXQVVBWEYxQ0t1SXpvSHNSSWJpZmJkZHF1bm1KUlo2aElwZjlrRC9rVmZHN2hLeHJJeGFISUwwZUZURjJORXBPa2xubDhFZEhtMWxUd1c1ZmVBWjNjelhaRkhwZTZ1elpvMUZVSnVHYW5wUGRaaWZydFNYdlBCdHpsTzZmQkwzS2pmVTJ4bFRwdERadTNzalZkT0V4Q0c5Uys3ck9peStPNXo2OWZpTDJrUXRGV2pWYnRYemJycHpHcCtCZjZSbG5xSExETVVra3FEOGJIUnBoOUUwRnhQcnMzSmc0WVFmcGZCckRNays4Mmp3djFEcENkRlhXdjhld2FuUEl6ZTM3QVM5MzRnOFZQYTFUd1FwRHBiYmlpVnoxS3pCd2VYVmg4MzQ3ZkNtdmlrUXVET2hvOUY5MVNKTkxkSkllREVQdTFTVzlyT3JjVC9BVU8ydmtvc29scEV1SzczQXNCNTB4NGR1MklINFhQUGd3L0EzcXFZdnh4Z0JCWE5DcG5HYWlKdlhtMU1pS1FVdDB1eDhPSUdVOE16WTlQaEV3MU9VUnZjaHQwdkxBdWhRS2ROYVdCeXN0cHllN3pmazlZcVZvWEg5T3lTdmFFQ1dUVHg1ZjMrR3pPQStDZ2J4bjNrcVVkaTU0QzZtV00rUVc0MUFuaHQ4dTh5dktpSUtxNmx2NlpjVXFWVEtVK0h5SFFZYnJVL0RqbUJNNW0rYzFscUtXS0hyZTVRVzVTK2gxaEtaYS9yMFgvUTh6Y1BJTlFJUFdSSWxtZWluT1BDdmxCeW5sR3ZXNTBoMktIVEljK2c3bWtRRzREc1hneUxNc1JVOEZObFlvZUtJeHJvZnQ1ekZPUk5WMnJpRmc3SUVhak9uTVBnL1pBU0lUZ2M0SEl6Y01LSVkrV3ZRdWtGeEwyV3p2c1FwUlZDNUcxaFdBU1hHUzNwM3R3eVY3WDRpbFgwdjJEUDBZRTFxcTRQYnl5dkxTTlpXYy9zSW4vdldTQUhVOWcvdVk0eDNCV1hBLzhEYk9obGdyTEFiYVlkanBJdDZtdlUvbFg0UFF3VzRCK0srSHRJOVNSRXNOdjc2N1p0NzM3d1VPb0NNZmo3Ym1LNWZZdk9rMU1vYVFXV2E3akozQkppcDFwbHZqalFkOVZlNFdJbEdsdVNaMUttUFljL0FrS005OFU2RlZ4c2RzZ3Q5S21uaFZ5cERrWVd2N1Nyc05FcWl5SVNGOFFsTXUwWnp0b1lCaHRKbmI4TFo3YkRYWDhzcnkwaldWblA3Q0ovNzFrZ0IxUFo2alFDeTFNWEdZbkdYVTdWZkhMY2RQaVJyb0hadlZyQXVrUFNLNlBEV0RzK1NXL1RZNktJSit3bUZqb2JvRjhHSlZLZlpmbzRyM1JGOFNxT1FMK3NobjFXVFV0QzQzaHVDeEkrdC9VaWkrZTUyTkpjUnVsbUpnbUpKWTAyYWpxNFA3L0NuaU0wR05DRzdMR2JSa3YvZVBJdGVBRHh1OU9Zb2FwMnozRjFDellLempjdEpGclI2WW1nR2E5VzU2MEpvRnhNYitGWk9vNzNFN0lZY0RUVGluRUIra2QrU2ZVdFd3SGlvR1BuVGNjc3J5MGpXVm5QN0NKLzcxa2dCMVBZZGQzY0hadkpZcTFFZUNvOHlIVTljQllvUmRZUUZOdC9XQTRrcytmdWpSOHNyeTBqV1ZuUDdDSi83MWtnQjFQWUxOeVFoUWJNbkkzeldvNW00WFgrUDRPQWFjUlFycWxjWWRDQWl0T1VDTmNzcnkwaldWblA3Q0ovNzFrZ0IxUFozd1dTendzeXl2NDkrOWNJNVM2WmZRTlFXNTNtcHFXcjBzb0hCM3U3c2Vzc3J5MGpXVm5QN0NKLzcxa2dCMVBhWmRnSDZ1WVZHWmRnSTFmRElOMFRxdWRxYTlPSFFkbmk5ZEJGTkpCenlzckRiRWlBekpRM08waGJVWktTT05Ed3pCKzQ4Uk1MVWNVM0wzSmlNcG5iRzZya0xmUlZvL3FGUzdPbzVXeWFiVWxTdG5Vbm02UGt2NDkxaTVvZjQ0eXl3TzVzbEZmb2dOay9PUHkzQkRwSnlKeTJzd2pRWlZpbzRybmJYWXlINmdrN0VRTUdqenBMMjVpbFNGZG1Bdm1NTmVYRG9zNEJBK0V6RlBybUxTdUdWNHRTTCs0U2RLR05tNGFsbmRicVJ1VnVkSlVhZ3ZRaFB6cHNwWjhQaVI2ZlVSSXhuL0RVNHFaL1ZGUzRBdW5LODR6Wm1XY2o3OGpXQVRYaUlRWXhza2NzcnkwaldWblA3Q0ovNzFrZ0IxUGFYVExBNTBTdDQzZHZxc1lhNHFRazM0clB4WGs2QnFiUWFnN3Ayd25XNDRTWVd2a2ZpcjNjd3RyNUZXZ3MzTXI4dElmcUNTTEdSTWplME1PMGxhVlhreXl2TFNOWldjL3NJbi92V1NBSFU5bStXckVsNU5Wa25rRzhFL0R3cEZDbkFXSzBkS0g0UW9rWUl5aFM0VWpiVXhXdDBWRGlWQUV6KzJsTEJZY3ZyeC9kd3cvallOWDEyNUJSYnhPeDEzL2lmbXRGaG1yOGpnMHpOMDk1MUlDZkRkdkdoS3JMSWp5YTExeUJwMkxNdHpFc1lsOTA3SWZuWTRuMDdCczFwcDVkekpTNE96b3M4eGJEai9qOWpWdGZsVzh3MmVHRmpIQ0pid2NtdkZ0MWQ1dUNoZlpkMElYMjdxY1hxVFFMSUY3Wk1HbW8zTzcwK0dlZHRwV3ZEMUhzMkJSQ2lnbTlpc0pzNEJzTDAybzBtMTk2V0RNV29PYnUrOFphZVlCbUR3eDdsM1pxaTJoRmtpWko4Z3hQQzBQWTdCRUxCcEpZNUswZ3dnT1RXVTZHblBac0hqM3VOUjB5T2pJU1pRRlhmaGRXM1NqUW9iTEFCbVdFOXVQSlNIcGx2SlhVWmtmQzh6MjJndWthUTBUckFRNlhCTnNkZXZFRFF6VFMzdnFsNHpHaGt3dzhScDkyRHBzdi9DNHh1bk5odDdydlBNV0h6NEhhUVFnenU4Q1p3ditzemUwMkwyclVnOGtjaXV6S3p2YU9pS2c4WGxSTjJvdGhqVkVxTy8xQndvM1JoNVVQdUJ1eVgrU3haa1FEa2syYlZPNGRrTHZOZEN6c2NHMnFDb29LRm5BaVYrWTRlQURvUkNzc2FXT2o1MGtLNi9ld3l4UEk5TW85V3hkK3V3YytsVWljamF2a0tMMlR2Qm5sWWtQL21LckR3aXYwTG9TUFVXdlluNkFLSWRLdDJSMFN0MzVVQnJKZTh2blB1ZTFNOUJ1WkQyWVp2OHFkV2Jtc2h2R3VuYWl3UkZ0MkJIdWo5Z2xaeGFFK0xYdElNQTRacVNzbU9vN3BHamNNK0lSZHo2K0RQNFVhUW5CZ05ERDlYOXBGTSt5RVZRZ3lQVG02eG5LZGJKMXVsUThvRDZ1anJVWWI5a3hOUnFDQWFtZzhpdWtXRFFZUktpUUNmenIxNEhpSmZ4UlNNSnBTZFJCR2M5azFHMWNqeVp5Qi9Na1BneW1UZkFiZkJld2dld0paK3o0NHR1bnVncFk2d2x0Vk5mYlkvYkVIbjc4TXdIS3hVTUI2VWppbGg4cFpPejZxa3FKMThvREFUZkdiT0tFeTU4bWVrUGVUZUdiWWJUelhxWVNSR1czRUpLUktMRHpaY1dhQTBZUHRzeVZSczB3TXpYdldmSG9sekhpdDYwbnhkR3V6RW9WbldJYTZUQWJyb3NyUkY4eC9VQXFURnEyM3VOYTZqUWYyakJycHlpdDEwYlpkdllIa1pNU3Qwb1FVS21PeXc5S3NPMnQxYkM4Y2kzS2tUL3h4NzFlV1p4RmFPdW41WVplZXV5eXZMU05aV2Mvc0luL3ZXU0FIVTlxRERlU0V4czIzdFlwV2M1NGJ2akx2MTQ4SUpEeHBtYkRKT2tkSk5JNzVINnRqOUR5N1dLL1FmMnRFZDR2Q01qV2prZFNqY05kV3JMMVdEa1RmbDRsYzc2R3k1YXhyNm8rbVBHbGdJbzVnSHd6a1RyaW80akFSSDZad1RYcFJsSDNnbS9ST00yN01QcVR2QzhBYmZnemJhNWd6VndyNFY2MU5PemFRSzFNN3B2T3QzUElUWW9Gdm1DZmRoYjdTUWlqZmRsOU94TmNvTnZNWllXZysxekxuTEs4dEkxbFp6K3dpZis5WklBZFQyd0VyVUpra0FMTkg1UFl0aUhQR0E4bWMxNmFHOHFtNG5XVlJSRWY0K2FKZXhEQXZIM1B5VXhXRDFFRnNCNzk1dnl5dkxTTlpXYy9zSW4vdldTQUhVOXBsOTNZYy9xMUpGc3A1MFFGYi9CRE1pNDJMd0ZIa3lkQnM5RHhvWTRwSHZUTTViNmllNE9FUndDVTZKZ2pVZEw4c3J5MGpXVm5QN0NKLzcxa2dCMVBhTVdoeUM5SGhVeGRqUktUcEpaNWZCM1Z3VWZHQ1VsSWpzK1hLZUhZUVJyOHNyeTBqV1ZuUDdDSi83MWtnQjFQWVhld3hIMTNnT3Z0VDVSaENZZUhjVy9hVUZpVFZaVFk0b0N5OXZvOTE1cHNDUGV6ZlAzejBVVUVOTEFueDVGYU1vS2lIbFBBMlJFSkpudHhWM2hVeSt5eXZMU05aV2Mvc0luL3ZXU0FIVTlxTlY0RzZFSkxwSjZyS2crSGxHYlJQTEs4dEkxbFp6K3dpZis5WklBZFQyaVBlVlFvZmJ0RkVYeTBJTUpaZ2dhYVBaRjBrN2c5UkdTU0xna2xqY0tFM0xLOHRJMWxaeit3aWYrOVpJQWRUMkhsU1hQUm1DQ1p5YlhxcFRIdGgrWDdFMkRrZkJnR01rY2NvaTBtVjBoR25MSzh0STFsWnord2lmKzlaSUFkVDJFSUIvb3pVNjJMbDYzUnZWbG1YNzVWc2hjTHVVYVh2bVhSUmhMWXhuWVpuTEs4dEkxbFp6K3dpZis5WklBZFQyUXhiMUtsQXdzakx1VmtRdS95cG5ScERSZFFUNVlQRDk4OGZ2QTZrUDE2dkxLOHRJMWxaeit3aWYrOVpJQWRUMkJFTEJwSlk1SzBnd2dPVFdVNkduUGF2a0c4NFlCV2xMdjVyYTdpWkg5UmZMSzh0STFsWnord2lmKzlaSUFkVDJJU2xGZmphU1pETDYxeWh2SjVsUEJwN0VkdldFOU1jVWhhNllRZi9wRk80cWNsaTFTelA2NTRCVUZvMTNrN0twMTVGb2tsTHl6ZENmaUNUYnRYa1Foa2tibzBDK0RVOWt6ZjJGck40ZmdQOUxBOUJFWWwxbGR4djE1MTI2TEtEUXl5dkxTTlpXYy9zSW4vdldTQUhVOXR5SWxQYkdyQ3pzZWJ1bTI2WDNUYnV0eVY5UzhlSDdMZ2gzQmdJRGtSazBScm41UUNJNHZnV2ZSMGI4V2lxdzNaampBZlYvNy9wZTFNT0sxSkJ1cVpFK0tnUDNvRTBUdE13TWUrU1RBS3huWXJ0YlMwMU95cng5L3MwelZKQS9tbkhPcURrVW95d0hmdnQvNHN6MmlZRndCRzFZVEJaeHhlcDRWY1orSGNPQ3l5dkxTTlpXYy9zSW4vdldTQUhVOXFPKzV6T3RCQlRRalpRQnJ4UWwwKzR6Z2sxL2lOSkg0UUUzMGNwOUNKWTBIZUZVQjg1WlBoclNmbjJxdE45c01Nc3J5MGpXVm5QN0NKLzcxa2dCMVBaNHZIM3Q2OGNyRm1DS2sxRkViRXJyeXl2TFNOWldjL3NJbi92V1NBSFU5amJ3c0poTkJMakpGZS9UTlVZbFRWWExLOHRJMWxaeit3aWYrOVpJQWRUMm5OMWszZVd5dW51cW43aDJDWERLYkNnZUlSeitPSG1uS0xtLytXQ1BhMDVDdTdZWER5RlRmVmJoc2hPdk9mL1ZRcDlRVzdkaDY5Ynl5SWY3MDFiR1BNc3J5MGpXVm5QN0NKLzcxa2dCMVBaeWtkb0JrZlM3UjZFWE5MbXU1K3VybjJsRUVvUkw3bzcxL3lVVXBzcXBNaHhhTm1yenpWbThIenVOQnoyY0htakxLOHRJMWxaeit3aWYrOVpJQWRUMjRlMDlYdFc3WVE2TGJpRk5iTExvaStBcEVCYXFVNWpqMEsrbVNSSTA0dHpJa1c3anNWWHdkdnk2clBndkQ1MWNkdkdoS3JMSWp5YTExeUJwMkxNdHpNQjNwUTlaYUJIckFzZytkTlIrMFdQTEs4dEkxbFp6K3dpZis5WklBZFQyOUVXODQ3UDR0Vnk0ZTI4Sjk4VVM1c3NyeTBqV1ZuUDdDSi83MWtnQjFQWnhhYVFTMnNXbDdmOU9iNHdEY3Q5SmR2R2hLckxJanlhMTF5QnAyTE10eksvL2RGZENncGt3UVV4VUNvZlZPTnZyOGxqL1ZYUVJ0aytNZmc5OHV3TER5eXZMU05aV2Mvc0luL3ZXU0FIVTloazNLZGN1WFcxK2dOamNkbUE5cVI4cVdnRmpkWEZYaFhBNmhZbkNOYVByVmp6YkZRYlBrRkI3R1BxU09DTWo2a2o3TFN5ZjEveVl2c3I3ZkxtaUlhZlcrSWptK1Y0T3RuMzVKTkZQb0haSGxYczFyNkQ0c0pIWWg2Kzd4M2tQUWs1alBNTHcrVmhzb013blYrS2gxTE02cFp0VDJlRkNOMHhXdnRyK0x3Ny9XUXBJbkY5NzdaR2lXUDJJcWU5RGplS2hqRXh1cUZhY0dpbSs0Rzh1anJGRGdaSHJkV0h0Q3JtSWtaS3N4bXNJRFNyNHVpNFFzaklRRXVLZVdXd004eDcxamtiZ2tBQi9uSGh6c2htbnFZREZ1dGdtRFJWZ2FUZWdMcytXOWtDYW1PTUI5WC92K2w3VXc0clVrRzZwa1lKRmk2MGFOeDN1RGo4VHU1L0lxdU40elpTcmlvclNGRHFnQ0NEVGtNalJUMURUSWNaelliMWpsTkZsanhmMWk2M3IwMkRZa0ZOTS9SM2JWQ3VuTCtDZEhqR28veFI1Z0tGMXpSZmNDTVlPOWVPUGQ0TFBuQnh1QmhaMmV1MUlYUE5kS2VTVnp0Uy95NFpQd09OaFIra2N4YlRZR2ZqdXM0aWwrakR3V2xCeXFKMVFXREJoSFhQTWc2Wm9vZWVkQ1pNV2FMRmZGdFRwMzNRMVFoSEJsR3JFZlp2WWh3c2lNaC9LcFdXL01vQWtVVmZVdnF0QitwWDQ1d1U1MlZiVVBab3Z3M3lEdGZrNXpacTV5YkQreEN1a3NKKytDL282QkhrWTVkak9yKzdjeXl2TFNOWldjL3NJbi92V1NBSFU5b2xlOHlEZEhqYzQ4UGJkYUt4MllsQUtmMC96c054VndIUlNRQ3RDeTUySXYxSVBETENLWFRJMS9jUFZxcE9xbGNzcnkwaldWblA3Q0ovNzFrZ0IxUFkzUmYzNGFnZ3pOMmIxdkpCQlo5TXE5TEdvN3lmVktpNnZVVlFLanEwRkU0NldnNmtia21vUURtMG5qWFNxSVRvVk9ISzAySzNWeFFrR2szWWpQd1V1ZHZHaEtyTElqeWExMXlCcDJMTXR6RWdQcG9tNUU2WHNxWUVoL1FGWUtWdGM4TmgzOEN5MFp2MWF1Rk1GcGlwTWl5QkttNzArbENJUlg0Vk9tdFgwOGZWNk9oZzRFaFZvNnZVVGQyVE4rV0VPU0JrS3ZZWjQyeHVWd0FoSVI5WFVDTnIwOVo5bC9pWGV3SXE4WmJTKzlWUG9sRGdWSVVvMjYxdjBHLzVESWxwdTNvZmJ1Z3JFU0hKaVRRcnR0aFdEWlB0VThERHdPVVFBMWE4dlltL0taTXNyeTBqV1ZuUDdDSi83MWtnQjFQYkpTakRaczFmamppTUlYaVRHM3p2ZGtPREtKdHFNdWFKUGd2aFNzZEZNbjhzcnkwaldWblA3Q0ovNzFrZ0IxUFliMm51QkF6NUI3SHFGelRPK2NUWnl3Z0VHNXNCcFF4QUh6b3NxcmFpMFBjc3J5MGpXVm5QN0NKLzcxa2dCMVBZcE5KaW9HWkhhSWxxMEVUaXJValJacnNZWTVqU2FOc0pPbTlQYng5L0dmcmgwcGZDSjgzU0o2YXZyTXJ3RElIMFFzUVRIZGxhaWFHL0FrSjhhQi9lYStSb2c1QUNhRU56MkdOKzNTdGtpUTFIYk5lYmk2RzhueWRYNnJQNUJMeGJDUEpSRkZOaXM1SVo1bW1pRGk0bjRQbWJlZUxzWCtkQnB2cGg0c1NqRU44aXJmbkdBWnZ4aVBielMwZU1OUW5YK2JiUmRnKzZGMDIxZE5iU0thcFRheXl2TFNOWldjL3NJbi92V1NBSFU5cHVMSy9pbzNWTUZIQjd3UHd2UFZoZHZ0L1pwN2l2ZDI1NHR1VGMxVUxlSHl5dkxTTlpXYy9zSW4vdldTQUhVOW1xQnBnR3RYR1VpWm9Fd3dPSE5TUXVRclU4VDJwNCtLQU00c0JMV0NMZTlzRHViSlJYNklEWlB6ajh0d1E2U2NsbTNWUXZDb24vaUtkM2o0L1NpQU9BbVN6SXF6alZhbTBIaHgwbVRqeEFiTEVpVVNEcktGbk0yUTJPQ3E1eUFiVGUyL2d4V3pYQUFZRElZWFp2RnVERTlEVzN4VkdtT2tEcHZVQ1F1UFF6ZVQ0RkxFdDQ4L2hFVUFnNlFYODUxcHZabms2YURGMktpc2ZvTU82ZTlEY0QrSjN5OGd4VXlwd0Z1aDZhNjB4b1hwZ1ljcWtBcmJSVnd5ZDhUZ3A2a3JNc3J5MGpXVm5QN0NKLzcxa2dCMVBaYkZXaTlsREtXemVERUUxbEJEZ2VXSDd3bFR5bkJZOHNudUREbG1ISnJKdUJGYzhPcnd1ankvd1FXZVRtWWNoYkxLOHRJMWxaeit3aWYrOVpJQWRUMk0vUFhyK1pPN2YzV0pUTkdISFpZU0tlZVVPcnBTQ3NuWWE1T1V3RTh6TnJMSzh0STFsWnord2lmKzlaSUFkVDJZMEdhb1ZzaURERlcvVmxZNGViRDRmcjJkNk5xcCtPTmNvTEo3QnRnaDBycnRnM3ZGRHdBUHBpcFp3MFNxbmlYeXl2TFNOWldjL3NJbi92V1NBSFU5by9PWkVNWmN1T1diOU5SdXpZcHEvVUhxc3psbUp5NnpFcGRZcXRVUDA3OUFiZ280N0Q2NllScTBkT0dwKy8zRTh2VDN6dWtGWVR4dUlucXpBRWlqMjcxNDQ5M2dzK2NIRzRHRm5aNjdVaGN5eXZMU05aV2Mvc0luL3ZXU0FIVTlwUnc3TjByLzFYUmVBT3lxa2d4OGVicFFiYjhRRlRoOUgvV1UxLzVPbEhGZXRCL2pubTNPT3FhN25Rc2pKcE5hTUhmWE9HbW9QbjdyaFVrdnZBd3dBMDhIbitPeFJ4RmxLaElmMmZzMTNvd0RRbXM1YzlIRE5wV29LdVlTNkpDbUszKy92TndrZCtBNllyY29qZGFzR3lsczBiV2ZvSWkvNGE0TTJiOGhWbTJ5eXZMU05aV2Mvc0luL3ZXU0FIVTlzc3J5MGpXVm5QN0NKLzcxa2dCMVBZNUllY3VDNzRFVVVjekZOSHgvS1pHeXl2TFNOWldjL3NJbi92V1NBSFU5cUlUSTVOUHlQa1NuWXRQUFE0S0RHL0xLOHRJMWxaeit3aWYrOVpJQWRUMjF5UlcxZTlnVUpZOEZDdmVobGQya01zcnkwaldWblA3Q0ovNzFrZ0IxUGJMQ0ZnNk0xbFo1cDVNR0xORkhoT1BpakIyQU5PMnplZmpNNXRhT2dSUG5McGI1TWMydmsxdURHcmRJY2JXQTZ5dDY5TmcySkJUVFAwZDIxUXJweS9nSlVnb0VVYWZqVmplZ3Z0RGVYQmF2aEdTYXdiT1FmR1F3WkkybjBPTEVhVUlhc210bWphM0F0R1o2bkY3NjAxaUovT2t1ZFlsRU1xQTEvTzR2VzJwakFOVVpZMjU2R2FDU3RvanJoVDk3c2pBZDZVUFdXZ1I2d0xJUG5UVWZ0Rmp5eXZMU05aV2Mvc0luL3ZXU0FIVTloallZMm5ZRTNack0wOE9OSE9sLzZFYVJSRHF5L2VtdFREZnhyTW1IL2pFeXl2TFNOWldjL3NJbi92V1NBSFU5bjluZkhsWlRxTHIwZFZ0enNRdmJQdk9sREw3RHZ6enNPUW5LKy9iQ2M0bmpGb2NndlI0Vk1YWTBTazZTV2VYd2QxY0ZIeGdsSlNJN1BseW5oMkVFYS9MSzh0STFsWnord2lmKzlaSUFkVDJHaGhtbU00MElyWTh0bTZ4RXZ0V0hNNlVNdnNPL1BPdzVDY3I3OXNKemlmeTUydVZyQzhXVFhJb0s2ZEcxQVRvTXZrekZOdUo1WUFjOHFCYkNXQVdYK2V2Y1dCaXM3WG9kUFNlWEUvQUFMaFZYRkdyZ091cjlpNE5GaytodzE0RW1wdWFuZmlub0pKQkVqaHZKRUVIcWM2VU12c08vUE93NUNjcjc5c0p6aWQ1TkZ0R3pRMUJNOFQ5M3RGWFpWajlHTnQ5cjJhVytRODVxSEZKdGk5QWZUenZjdVhJRXJncjFEL1B1Z0ZtaE9YYVhFVCtydEI5T0ppa3I3TVhGblErS3hNZnRFNkRIS0RSVkJvWjZyR1I0c3NyeTBqV1ZuUDdDSi83MWtnQjFQWkdidjNRcFVSUzlOYUNkc2NFTmxBejF4bTEvQWtIU1VQU3A2VEZCVXpaR2NzcnkwaldWblA3Q0ovNzFrZ0IxUGJELzJvOExvMVByaEVuemZ5QzFGbXdwV29tZmY5Skw3Qkd5eUs1VVk3VXNIYnhvU3F5eUk4bXRkY2dhZGl6TGN5NFgwM3FzM0IvdzJwamptSW42YnZ5enBReSt3Nzg4N0RrSnl2djJ3bk9KMm1Md1ROTExmZE51Q2JJRTR2YVNJVjZiVXNNcWg4aUtYenE0TmpUY1BJRVdITExTZXpsQzgrc0pLelJoS1RNTjFCZlh6QmdyZlJ6NzZYTFJTajNqakxSVjFyL0hzR3B6eU0zdCt3RXZkK0lHaWM1ekhWZXE5YktTMEdKdUtwM1MyME83cHJ2NU5uK3RMd3BoaW9zS2pBcmZ5aEFxTXg1bWhUN05LNEorTWcydWcyMllTTlBodEJ0d2xXYzVYVUxzQkJFdjhya1FRYTUzSEVFVXNSaTg1MVZ4RmVRZWFONUdydjJqRXhwWkZCbXRwaG5YTGNGckhHc1Z5ZkluVHdyRGFDb0tQY1RseTBKYWhXYUlyNFdtaXhVdGJWL3B2MmxiRkhINkVBck5mRW5IVHhsSnA0dTdjOExqOCtvN2tiWTZNc3J5MGpXVm5QN0NKLzcxa2dCMVBhT29CZUtoYU9sR3FNTVNxZEhTRFJ5RjJTM09pNEE0TDZCaGxyakxqVTJ1NVRVZUY5ZE1Pdk5GSHVaU1EzV1RDbnNyS0x4dC96UXpnOWdvb3A2Ti9DdEc3c054aTg2a2s5U3ZBKzRtSWNSTWU5SEVkakRqKzRRNE42eHY2cjBWL0ZLakh6dVlqRUF0bmRJT2k2Y01QMWNiTnhxblJlTG52YWtHNFFkYlc0c1lkOVNBTEd0MldRVUV2TmNrVDU0eHdJUFBwdHZGQmxpVFhycnNBdFh1SC9xMzFJQXNhM1paQlFTODF5UlBuakhBaFhwTU9ZOElYOWxPOUtZUzFDcTJSbEthWFN1QnZVWHRwbldhaUNBWXMyd3l5dkxTTlpXYy9zSW4vdldTQUhVOW94Nk1aNGxKTncveEoweEJZN083c3pMSzh0STFsWnord2lmKzlaSUFkVDJMVXpsVnVLbGUwRForNVYwOWRZc2JNSE14UHk1Nm5BeGJJNm1KSlc0d2xsb1ArekduT2FPRmlyT0s1U2xwWG9FeXl2TFNOWldjL3NJbi92V1NBSFU5cnQycVduRVlCakRjOXdjcEtjUzdQTlVlR0lDbFFrVGdWY1pUZklOMTFpcGxYczFyNkQ0c0pIWWg2Kzd4M2tQUWxqQU1NYWFuRjEzM1A2aS9sZU5pcTFSVmpnSXpLOEhiQ3NHTTNiMnU1UlVtNnBJUXNFNHh0Q3hNZkZqZ0I3MjF4WXFLRjM5bWtiUmZTaXJCWkh1ZVlnQkFuSnNmL0UzeGJUcWFmLzIwZnkxQ09JM0dLSHNwQlNNMjRrOEV2U21FbzBnRTBSMkU0RmhDZWZYRVJSMk45ZHUrRG1ZYkhEK01oMGZTcGc4Rms3NEoxUWs2RDdkYTh0ZEdSWnlsbHFXRHM2VU12c08vUE93NUNjcjc5c0p6aWVNVnhIOEoxRWw3V2hZRXpNRnR1OG1MK3Q0clRhZ3lsU1VMSTV3ak1uSXpDR2V0ZFkrN1EvY3ZPZmFRMWtqV2ViVWM5S1crdXgyalVxREJMWjIrOGVlZUJCeVVUN1p6MU1YS3VGQW42ZVFITlMreUtYQ1V5bVJvZktRQ2ZxVlhJelhKRmJWNzJCUWxqd1VLOTZHVjNhUXhEM1laTXRUS0o4MFJpblc0d3lDWmlyTldSY1A5VkwzVGQ4SGFVTzZmU2xteXZoVmpOWk9DUU5mbFZOb00zbXZGdEVhaHdzbnNhUmhNQWYwN3BVaXorMWZJNnMvcDJFdzR0NXRKMHB1Zzlra0duOEJOdVlVWmJyY05HRzVOUnBMd3EwQXg2VDU0bkhlSlJqZkxFUFd1QWFpbnh6L091aFlHZzM5cFVxYWZ5eE9saUhGbldGbVBQUjA2Y2lEb3RQdGEzTUxCdnY4aGxvRFBldXNtVU1sekt5QVlENUN5U01qNlRRWVNyYWNZT2lUb0o1amc0TnFrbnE3Y3FPME1sRE9HZ1ZMYjIzS3NxNU9EWGtTOWEyNTlUZVY0NFdsWGhBRFZyUmZmR0lRelh4em8yakV0WHJKY2pnQmFHVGdWNEZ5d2ZlRUoxR0Y0YmliRkQwZktxdnI0OElLeER4TVZuTlRoWTdCTWFrcFM4YXQ2d2p0MHFJaG1MS1NKQVJuMXd2My9ic2JQaDI1aUFkSTVTdnZ4V2lUcEtHSEI3am5oUU5EbXRJZlg2UlhIR1BJT3FFcS9BNUdqQXRGenNhMThXT29BMExrZmo5THJESkkzR2dFSlh4anhhYzhWS1JKQytkK0MrM2lnUlpqNDgwMWRINWVVQ0pQTkl4MUZ5SUtMODk0aTJibUx5Q1Jkc01jK21STkxFVlpQWms2UnZlTk5hZFRpcEJqTGtyTkd5RT1cXFwiKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6Zi/6YeM5LiA57qnXCIsXCJwYXRoXCI6XCJzaGFyaWRcIixcInJ1bGVcIjpcImpzOlxcbi8vdmFyIGl0ZW1zID0gW107XFxuZnVuY3Rpb24gZm9ybWF0RGF0ZShfZGF0ZSwgX2ZtdCkge1xcbiAgICBsZXQgZm10ID0gX2ZtdCB8fCBcXFwieXl5eS1NTS1kZCBISDptbTpzc1xcXCI7XFxuICAgIGNvbnN0IGRhdGUgPSAhaXNOYU4oX2RhdGUpID8gbmV3IERhdGUoX2RhdGUgKiAxMDAwKSA6IG5ldyBEYXRlKF9kYXRlKTtcXG4gICAgY29uc3QgbyA9IHtcXG4gICAgICAgIFxcXCJNK1xcXCI6IGRhdGUuZ2V0TW9udGgoKSArIDEsIC8v5pyI5Lu9IFxcbiAgICAgICAgXFxcImQrXFxcIjogZGF0ZS5nZXREYXRlKCksIC8v5pelIFxcbiAgICAgICAgXFxcImgrXFxcIjogZGF0ZS5nZXRIb3VycygpICUgMTIgPT0gMCA/IDEyIDogZGF0ZS5nZXRIb3VycygpICUgMTIsXFxuICAgICAgICBcXFwiSCtcXFwiOiBkYXRlLmdldEhvdXJzKCksIC8v5bCP5pe2IFxcbiAgICAgICAgXFxcIm0rXFxcIjogZGF0ZS5nZXRNaW51dGVzKCksIC8v5YiGIFxcbiAgICAgICAgXFxcInMrXFxcIjogZGF0ZS5nZXRTZWNvbmRzKCksIC8v56eSIFxcbiAgICAgICAgXFxcInErXFxcIjogTWF0aC5mbG9vcigoZGF0ZS5nZXRNb250aCgpICsgMykgLyAzKSwgLy/lraPluqYgXFxuICAgICAgICBcXFwiU1xcXCI6IGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLy/mr6vnp5IgXFxuICAgIH07XFxuICAgIGlmICgvKHkrKS8udGVzdChmbXQpKSB7XFxuICAgICAgICBmbXQgPSBmbXQucmVwbGFjZShSZWdFeHAuJDEsIChkYXRlLmdldEZ1bGxZZWFyKCkgKyBcXFwiXFxcIikuc3Vic3RyKDQgLSBSZWdFeHAuJDEubGVuZ3RoKSk7XFxuICAgIH1cXG4gICAgZm9yIChsZXQgayBpbiBvKSB7XFxuICAgICAgICBpZiAobmV3IFJlZ0V4cChcXFwiKFxcXCIgKyBrICsgXFxcIilcXFwiKS50ZXN0KGZtdCkpIHtcXG4gICAgICAgICAgICBmbXQgPSBmbXQucmVwbGFjZShSZWdFeHAuJDEsIChSZWdFeHAuJDEubGVuZ3RoID09IDEpID8gKG9ba10pIDogKChcXFwiMDBcXFwiICsgb1trXSkuc3Vic3RyKChcXFwiXFxcIiArIG9ba10pLmxlbmd0aCkpKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gZm10O1xcbn07XFxuXFxuZnVuY3Rpb24gZm9ybWF0U2l6ZShzaXplKSB7XFxuICAgIGlmICghc2l6ZSkge1xcbiAgICAgICAgcmV0dXJuICcnO1xcbiAgICB9XFxuICAgIGNvbnN0IHVuaXRzID0gWydCJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJywgJ0VCJywgJ1pCJywgJ1lCJ107XFxuICAgIGxldCBpID0gMDtcXG4gICAgd2hpbGUgKHNpemUgPj0gMTAyNCkge1xcbiAgICAgICAgc2l6ZSAvPSAxMDI0O1xcbiAgICAgICAgaSsrO1xcbiAgICB9XFxuICAgIHNpemUgPSBpID8gTnVtYmVyKHNpemUudG9GaXhlZCgyKSkgOiBzaXplO1xcbiAgICByZXR1cm4gYCR7c2l6ZX0gJHt1bml0c1tpXX1gO1xcbn1cXG4vL2xvZyhyZWFsdXJsKTtcXG5cXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgIGNsZWFyTXlWYXIoJ25leHRwYWdlJyk7XFxufVxcbmlmIChNWV9QQUdFID4gMSAmJiBnZXRNeVZhcignbmV4dHBhZ2UnLCAnJykgPT0gJycpIHtcXG4gICAgbG9nKCfmsqHmnInkuIvkuIDpobUnKTtcXG59IGVsc2Uge1xcbiAgICB0cnkge1xcbiAgICAgICAgLy92YXIgcmVmdG9rZW4gPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hbGl0b2tlbi5qc29uJywge30pKS5yZWZyZXNoX3Rva2VuO1xcbiAgICAgICAgdmFyIHJlZnRva2VuID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9pY3kvaWN5LWFsaS10b2tlbi5qc29uJywge30pKVswXS5yZWZyZXNoX3Rva2VuO1xcbiAgICAgICAgdmFyIHNoYXJlSWQgPSBkZWNvZGVVUklDb21wb25lbnQocmVhbHVybCkuc3BsaXQoJ2NvbS9zLycpWzFdLnN1YnN0cmluZygwLCAxMSk7XFxuICAgICAgICBsZXQgZ2V0c2hhciA9IGZldGNoKCdodHRwczovL2FwaS5hbGl5dW5kcml2ZS5jb20vYWRyaXZlL3YzL3NoYXJlX2xpbmsvZ2V0X3NoYXJlX2J5X2Fub255bW91cycsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIGJvZHk6ICd7XFxcInNoYXJlX2lkXFxcIjpcXFwiJyArIHNoYXJlSWQgKyAnXFxcIn0nLFxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGxldCBwdXNobmFtZSA9IEpTT04ucGFyc2UoZ2V0c2hhcikuZmlsZV9pbmZvc1swXS5maWxlX25hbWU7XFxuICAgICAgICAvL3ZhciBsaXN0eXAgPSBKU09OLnBhcnNlKGdldHNoYXIpLmZpbGVfaW5mb3NbMF0udHlwZTtcXG4gICAgICAgIC8vdmFyIHBmaWxlaWQgPSBKU09OLnBhcnNlKGdldHNoYXIpLmZpbGVfaW5mb3NbMF0uZmlsZV9pZDtcXG5cXG4gICAgICAgIHZhciBzaGFyZXRva2VuID0gSlNPTi5wYXJzZShmZXRjaCgnaHR0cHM6Ly9hcGkuYWxpeXVuZHJpdmUuY29tL3YyL3NoYXJlX2xpbmsvZ2V0X3NoYXJlX3Rva2VuJywge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgYm9keTogJ3tcXFwic2hhcmVfcHdkXFxcIjpcXFwiXFxcIixcXFwic2hhcmVfaWRcXFwiOlxcXCInICsgc2hhcmVJZCArICdcXFwifScsXFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgIH0pKS5zaGFyZV90b2tlbjtcXG4gICAgICAgIC8vbG9nKHNoYXJldG9rZW4pO1xcblxcbiAgICAgICAgbGV0IG5leHQgPSBnZXRNeVZhcignbmV4dHBhZ2UnLCAnJykgIT0gJycgPyAnLFxcXCJtYXJrZXJcXFwiOlxcXCInICsgZ2V0TXlWYXIoJ25leHRwYWdlJykgKyAnXFxcIicgOiAnJztcXG4gICAgICAgIGlmICghZGVjb2RlVVJJQ29tcG9uZW50KHJlYWx1cmwpLmluY2x1ZGVzKCcvZm9sZGVyLycpKSB7XFxuICAgICAgICAgICAgLy9pZighbGlzdHlwID09ICdmb2xkZXInKXtcXG4gICAgICAgICAgICB2YXIgcmVzY29kID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS9hZHJpdmUvdjMvZmlsZS9saXN0Jywge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxcbiAgICAgICAgICAgICAgICAgICAgJ1gtU2hhcmUtVG9rZW4nOiBzaGFyZXRva2VuXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGJvZHk6ICd7XFxcInNoYXJlX2lkXFxcIjpcXFwiJyArIHNoYXJlSWQgKyAnXFxcIixcXFwicGFyZW50X2ZpbGVfaWRcXFwiOlxcXCJyb290XFxcIixcXFwibGltaXRcXFwiOjEwMCxcXFwiaW1hZ2VfdGh1bWJuYWlsX3Byb2Nlc3NcXFwiOlxcXCJpbWFnZS9yZXNpemUsd18xNjAvZm9ybWF0LGpwZWdcXFwiLFxcXCJpbWFnZV91cmxfcHJvY2Vzc1xcXCI6XFxcImltYWdlL3Jlc2l6ZSx3XzE5MjAvZm9ybWF0LGpwZWdcXFwiLFxcXCJ2aWRlb190aHVtYm5haWxfcHJvY2Vzc1xcXCI6XFxcInZpZGVvL3NuYXBzaG90LHRfMTAwMCxmX2pwZyxhcl9hdXRvLHdfMzAwXFxcIixcXFwib3JkZXJfYnlcXFwiOlxcXCJuYW1lXFxcIixcXFwib3JkZXJfZGlyZWN0aW9uXFxcIjpcXFwiQVNDXFxcIicgKyBuZXh0ICsgJ30nLFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIC8vbG9nKHJlc2NvZCk7XFxuICAgICAgICAgICAgdmFyIGxpc3R5cCA9IEpTT04ucGFyc2UocmVzY29kKS5pdGVtc1swXS50eXBlO1xcbiAgICAgICAgICAgIHZhciBwZmlsZWlkID0gSlNPTi5wYXJzZShyZXNjb2QpLml0ZW1zWzBdLmZpbGVfaWQ7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHZhciBsaXN0eXAgPSAnZm9sZGVyJztcXG4gICAgICAgICAgICB2YXIgcGZpbGVpZCA9IGRlY29kZVVSSUNvbXBvbmVudChyZWFsdXJsKS5zcGxpdCgnZm9sZGVyLycpWzFdXFxuXFxuICAgICAgICB9XFxuICAgICAgICAvL2xvZyhodG1sKTtcXG4gICAgICAgIGlmIChsaXN0eXAgPT0gJ2ZvbGRlcicpIHtcXG4gICAgICAgICAgICB2YXIgcmVzY29kID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS9hZHJpdmUvdjMvZmlsZS9saXN0Jywge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxcbiAgICAgICAgICAgICAgICAgICAgJ1gtU2hhcmUtVG9rZW4nOiBzaGFyZXRva2VuXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGJvZHk6ICd7XFxcInNoYXJlX2lkXFxcIjpcXFwiJyArIHNoYXJlSWQgKyAnXFxcIixcXFwicGFyZW50X2ZpbGVfaWRcXFwiOlxcXCInICsgcGZpbGVpZCArICdcXFwiLFxcXCJsaW1pdFxcXCI6MTAwLFxcXCJpbWFnZV90aHVtYm5haWxfcHJvY2Vzc1xcXCI6XFxcImltYWdlL3Jlc2l6ZSx3XzE2MC9mb3JtYXQsanBlZ1xcXCIsXFxcImltYWdlX3VybF9wcm9jZXNzXFxcIjpcXFwiaW1hZ2VcXFxcL3Jlc2l6ZSx3XzE5MjAvZm9ybWF0LGpwZWdcXFwiLFxcXCJ2aWRlb190aHVtYm5haWxfcHJvY2Vzc1xcXCI6XFxcInZpZGVvL3NuYXBzaG90LHRfMTAwMCxmX2pwZyxhcl9hdXRvLHdfMzAwXFxcIixcXFwib3JkZXJfYnlcXFwiOlxcXCJuYW1lXFxcIixcXFwib3JkZXJfZGlyZWN0aW9uXFxcIjpcXFwiQVNDXFxcIicgKyBuZXh0ICsgJ30nLFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgfSAvL+WPluaWh+S7tuWkuVxcbiAgICAgICAgLy9sb2cocmVzY29kKTtcXG5cXG4gICAgICAgIGlmIChKU09OLnBhcnNlKHJlc2NvZCkubmV4dF9tYXJrZXIpIHtcXG4gICAgICAgICAgICBsZXQgbWFya2VyID0gSlNPTi5wYXJzZShyZXNjb2QpLm5leHRfbWFya2VyO1xcbiAgICAgICAgICAgIGlmIChtYXJrZXIubGVuZ3RoID4gMTApIHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ25leHRwYWdlJywgbWFya2VyKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKCduZXh0cGFnZScpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBjb250cyA9IEpTT04ucGFyc2UocmVzY29kKS5pdGVtczsgICAgICAgIFxcbiAgICAgICAgdmFyIHR1aXNvbmcgPSBbXTtcXG4gICAgICAgIGZvciAodmFyIGkgaW4gY29udHMpIHtcXG4gICAgICAgICAgICB2YXIgbGlzdHlwID0gY29udHNbaV0udHlwZTtcXG4gICAgICAgICAgICBpZiAobGlzdHlwICE9ICdmb2xkZXInKSB7XFxuICAgICAgICAgICAgICAgIHZhciBjYXRlID0gY29udHNbaV0uY2F0ZWdvcnk7XFxuICAgICAgICAgICAgICAgIHZhciBmbmFtZSA9IGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgICAgIGlmIChjYXRlID09ICd2aWRlbycpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5O6JyArIGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F0ZSA9PSAnZG9jJykge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gJ/Cfk5YnICsgY29udHNbaV0ubmFtZTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjYXRlID09ICdpbWFnZScpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5a8JyArIGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F0ZSA9PSAnemlwJykge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gJ/Cfk6YnICsgY29udHNbaV0ubmFtZTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IGNvbnRzW2ldLm5hbWVcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJChjb250c1tpXS5maWxlX2lkKS5sYXp5UnVsZSgoc2hhcmVJZCwgc2hhcmV0b2tlbiwgY2F0ZSwgZm5hbWUsIHJlZnRva2VuKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FsaWxhenlcXFwiKShzaGFyZUlkLCBpbnB1dCwgY2F0ZSk7XFxuICAgICAgICAgICAgICAgICAgICB9LCBzaGFyZUlkLCBzaGFyZXRva2VuLCBjYXRlLCBmbmFtZSwgcmVmdG9rZW4pLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogZm9ybWF0RGF0ZShjb250c1tpXS51cGRhdGVkX2F0KSArICcgICcgKyBmb3JtYXRTaXplKGNvbnRzW2ldLnNpemUpLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogY29udHNbaV0uZmlsZV9pZFxcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8xJ1xcblxcbiAgICAgICAgICAgICAgICB9KTsgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ/Cfk4InICsgY29udHNbaV0ubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eScgKyBjb250c1tpXS5maWxlX2lkICsgJz8/P2Z5cGFnZScpLnJ1bGUoKHNoYXJlSWQsIHNoYXJldG9rZW4sIHB1c2huYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvcnVsZWxvb3AnLCB7fSkpLnJ1bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgc2hhcmVJZCwgc2hhcmV0b2tlbiwgY29udHNbaV0ubmFtZSksXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJ1xcbiAgICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICB9IC8vZW5kIGlmXFxuICAgICAgICB9IC8vZW5kIGZvciBpXFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn5qyn5qyn77yM5oql6ZSZ5LqG44CCJyxcXG4gICAgICAgICAgICB1cmw6IGRlY29kZVVSSUNvbXBvbmVudChnZXRSZXNDb2RlKCkuc3BsaXQoJyMjJylbMV0pLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgICAgIH0pO1xcbiAgICB9XFxufVxcbi8qXFxuc2V0SG9tZVJlc3VsdCh7XFxuICAgIGRhdGE6IGl0ZW1zXFxufSk7XFxuKi9cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIumYv+mHjOW1jOWll1wiLFwicGF0aFwiOlwicnVsZWxvb3BcIixcInJ1bGVcIjpcInZhciBpdGVtcyA9IFtdO1xcblxcbmZ1bmN0aW9uIGZvcm1hdERhdGUoX2RhdGUsIF9mbXQpIHtcXG4gICAgbGV0IGZtdCA9IF9mbXQgfHwgXFxcInl5eXktTU0tZGQgSEg6bW06c3NcXFwiO1xcbiAgICBjb25zdCBkYXRlID0gIWlzTmFOKF9kYXRlKSA/IG5ldyBEYXRlKF9kYXRlICogMTAwMCkgOiBuZXcgRGF0ZShfZGF0ZSk7XFxuICAgIGNvbnN0IG8gPSB7XFxuICAgICAgICBcXFwiTStcXFwiOiBkYXRlLmdldE1vbnRoKCkgKyAxLCAvL+aciOS7vSBcXG4gICAgICAgIFxcXCJkK1xcXCI6IGRhdGUuZ2V0RGF0ZSgpLCAvL+aXpSBcXG4gICAgICAgIFxcXCJoK1xcXCI6IGRhdGUuZ2V0SG91cnMoKSAlIDEyID09IDAgPyAxMiA6IGRhdGUuZ2V0SG91cnMoKSAlIDEyLFxcbiAgICAgICAgXFxcIkgrXFxcIjogZGF0ZS5nZXRIb3VycygpLCAvL+Wwj+aXtiBcXG4gICAgICAgIFxcXCJtK1xcXCI6IGRhdGUuZ2V0TWludXRlcygpLCAvL+WIhiBcXG4gICAgICAgIFxcXCJzK1xcXCI6IGRhdGUuZ2V0U2Vjb25kcygpLCAvL+enkiBcXG4gICAgICAgIFxcXCJxK1xcXCI6IE1hdGguZmxvb3IoKGRhdGUuZ2V0TW9udGgoKSArIDMpIC8gMyksIC8v5a2j5bqmIFxcbiAgICAgICAgXFxcIlNcXFwiOiBkYXRlLmdldE1pbGxpc2Vjb25kcygpIC8v5q+r56eSIFxcbiAgICB9O1xcbiAgICBpZiAoLyh5KykvLnRlc3QoZm10KSkge1xcbiAgICAgICAgZm10ID0gZm10LnJlcGxhY2UoUmVnRXhwLiQxLCAoZGF0ZS5nZXRGdWxsWWVhcigpICsgXFxcIlxcXCIpLnN1YnN0cig0IC0gUmVnRXhwLiQxLmxlbmd0aCkpO1xcbiAgICB9XFxuICAgIGZvciAobGV0IGsgaW4gbykge1xcbiAgICAgICAgaWYgKG5ldyBSZWdFeHAoXFxcIihcXFwiICsgayArIFxcXCIpXFxcIikudGVzdChmbXQpKSB7XFxuICAgICAgICAgICAgZm10ID0gZm10LnJlcGxhY2UoUmVnRXhwLiQxLCAoUmVnRXhwLiQxLmxlbmd0aCA9PSAxKSA/IChvW2tdKSA6ICgoXFxcIjAwXFxcIiArIG9ba10pLnN1YnN0cigoXFxcIlxcXCIgKyBvW2tdKS5sZW5ndGgpKSk7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIGZtdDtcXG59O1xcblxcbmZ1bmN0aW9uIGZvcm1hdFNpemUoc2l6ZSkge1xcbiAgICBpZiAoIXNpemUpIHtcXG4gICAgICAgIHJldHVybiAnJztcXG4gICAgfVxcbiAgICBjb25zdCB1bml0cyA9IFsnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQiddO1xcbiAgICBsZXQgaSA9IDA7XFxuICAgIHdoaWxlIChzaXplID49IDEwMjQpIHtcXG4gICAgICAgIHNpemUgLz0gMTAyNDtcXG4gICAgICAgIGkrKztcXG4gICAgfVxcbiAgICBzaXplID0gaSA/IE51bWJlcihzaXplLnRvRml4ZWQoMikpIDogc2l6ZTtcXG4gICAgcmV0dXJuIGAke3NpemV9ICR7dW5pdHNbaV19YDtcXG59XFxuLy9sZXQgdHZpcCA9IGdldEl0ZW0oJ2hpa2VydHZib3hzZXQnLCAnJyk7XFxuXFxuLy9sb2coZ2V0UmVzQ29kZSgpKTtcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgIGNsZWFyTXlWYXIoJ25leHRwYWdlJyk7XFxufVxcbmlmIChNWV9QQUdFID4gMSAmJiBnZXRNeVZhcignbmV4dHBhZ2UnLCAnJykgPT0gJycpIHtcXG4gICAgbG9nKCfmsqHmnInkuIvkuIDpobUnKTtcXG59IGVsc2Uge1xcbiAgICBsZXQgcmVmdG9rZW4gPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2ljeS9pY3ktYWxpLXRva2VuLmpzb24nLCB7fSkpWzBdLnJlZnJlc2hfdG9rZW47XFxuXFxuICAgIGxldCBuZXh0ID0gZ2V0TXlWYXIoJ25leHRwYWdlJywgJycpICE9ICcnID8gJyxcXFwibWFya2VyXFxcIjpcXFwiJyArIGdldE15VmFyKCduZXh0cGFnZScpICsgJ1xcXCInIDogJyc7XFxuXFxuICAgIHZhciByZXNjb2QgPSBmZXRjaCgnaHR0cHM6Ly9hcGkuYWxpeXVuZHJpdmUuY29tL2Fkcml2ZS92My9maWxlL2xpc3QnLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcXG4gICAgICAgICAgICAnWC1TaGFyZS1Ub2tlbic6IHNoYXJldG9rZW5cXG4gICAgICAgIH0sXFxuICAgICAgICBib2R5OiAne1xcXCJzaGFyZV9pZFxcXCI6XFxcIicgKyBzaGFyZUlkICsgJ1xcXCIsXFxcInBhcmVudF9maWxlX2lkXFxcIjpcXFwiJyArIGdldFJlc0NvZGUoKS5zcGxpdCgnPz8/JylbMF0gKyAnXFxcIixcXFwibGltaXRcXFwiOjEwMCxcXFwiaW1hZ2VfdGh1bWJuYWlsX3Byb2Nlc3NcXFwiOlxcXCJpbWFnZS9yZXNpemUsd18xNjAvZm9ybWF0LGpwZWdcXFwiLFxcXCJpbWFnZV91cmxfcHJvY2Vzc1xcXCI6XFxcImltYWdlXFxcXC9yZXNpemUsd18xOTIwL2Zvcm1hdCxqcGVnXFxcIixcXFwidmlkZW9fdGh1bWJuYWlsX3Byb2Nlc3NcXFwiOlxcXCJ2aWRlby9zbmFwc2hvdCx0XzEwMDAsZl9qcGcsYXJfYXV0byx3XzMwMFxcXCIsXFxcIm9yZGVyX2J5XFxcIjpcXFwibmFtZVxcXCIsXFxcIm9yZGVyX2RpcmVjdGlvblxcXCI6XFxcIkFTQ1xcXCInICsgbmV4dCArICd9JyxcXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgIH0pO1xcbiAgICAvL2xvZyhyZXNjb2QpO1xcbiAgICBpZiAoSlNPTi5wYXJzZShyZXNjb2QpLm5leHRfbWFya2VyKSB7XFxuICAgICAgICBsZXQgbWFya2VyID0gSlNPTi5wYXJzZShyZXNjb2QpLm5leHRfbWFya2VyO1xcbiAgICAgICAgaWYgKG1hcmtlci5sZW5ndGggPiAxMCkge1xcbiAgICAgICAgICAgIHB1dE15VmFyKCduZXh0cGFnZScsIG1hcmtlcik7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGNsZWFyTXlWYXIoJ25leHRwYWdlJyk7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgdmFyIGNvbnRzID0gSlNPTi5wYXJzZShyZXNjb2QpLml0ZW1zO1xcbiAgICB2YXIgdHVpc29uZyA9IFtdO1xcbiAgICBmb3IgKHZhciBpIGluIGNvbnRzKSB7XFxuXFxuICAgICAgICB2YXIgbGlzdHlwID0gY29udHNbaV0udHlwZTtcXG4gICAgICAgIGlmIChsaXN0eXAgIT0gJ2ZvbGRlcicpIHtcXG4gICAgICAgICAgICB2YXIgY2F0ZSA9IGNvbnRzW2ldLmNhdGVnb3J5O1xcbiAgICAgICAgICAgIHZhciBmbmFtZSA9IGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgaWYgKGNhdGUgPT0gJ3ZpZGVvJykge1xcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+TuicgKyBjb250c1tpXS5uYW1lO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F0ZSA9PSAnZG9jJykge1xcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+TlicgKyBjb250c1tpXS5uYW1lO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F0ZSA9PSAnaW1hZ2UnKSB7XFxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5a8JyArIGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChjYXRlID09ICd6aXAnKSB7XFxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5OmJyArIGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gY29udHNbaV0ubmFtZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoY29udHNbaV0uZmlsZV9pZCkubGF6eVJ1bGUoKHNoYXJlSWQsIHNoYXJldG9rZW4sIGNhdGUsIGZuYW1lLCByZWZ0b2tlbikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FsaWxhenlcXFwiKShzaGFyZUlkLCBpbnB1dCwgY2F0ZSk7XFxuICAgICAgICAgICAgICAgIH0sIHNoYXJlSWQsIHNoYXJldG9rZW4sIGNhdGUsIGZuYW1lLCByZWZ0b2tlbiksXFxuICAgICAgICAgICAgICAgIGRlc2M6IGZvcm1hdERhdGUoY29udHNbaV0udXBkYXRlZF9hdCkgKyAnICAnICsgZm9ybWF0U2l6ZShjb250c1tpXS5zaXplKSxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBjb250c1tpXS5maWxlX2lkXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8xJ1xcblxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfwn5OCJyArIGNvbnRzW2ldLm5hbWUsXFxuICAgICAgICAgICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eScgKyBjb250c1tpXS5maWxlX2lkICsgJz8/P2Z5cGFnZScpLnJ1bGUoKHNoYXJlSWQsIHNoYXJldG9rZW4sIHB1c2huYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9ydWxlbG9vcCcsIHt9KSkucnVsZSk7XFxuICAgICAgICAgICAgICAgIH0sIHNoYXJlSWQsIHNoYXJldG9rZW4sIGNvbnRzW2ldLm5hbWUpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJ1xcbiAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgfSAvL2VuZCBpZlxcblxcbiAgICB9XFxufVxcbnNldFJlc3VsdChpdGVtcyk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpmL/ph4zmjqjpgIFcIixcInBhdGhcIjpcInB1c2hcIixcInJ1bGVcIjpcImpzOlxcbi8vbG9nKE1ZX1VSTCk7XFxudmFyIGl0ZW1zID0gW107XFxudmFyIHJlYWx1cmwgPSBNWV9VUkwuc3BsaXQoJyMjJylbMV0uc3BsaXQoJz8/PycpWzBdO1xcbmlmIChkZWNvZGVVUklDb21wb25lbnQocmVhbHVybCkuaW5jbHVkZXMoJ3d3dy5hbGl5dW5kcml2ZScpICYmICFyZWFsdXJsLmluY2x1ZGVzKCclM0IlN0InKSkge1xcbiAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9zaGFyaWQnLCB7fSkpLnJ1bGUpXFxufVxcbnNldFJlc3VsdChpdGVtcyk7XCJ9XSxcInBhcmFtc1wiOlwie1xcXCJpZFxcXCI6XFxcIl9fYXBwMUAxMFxcXCIsXFxcImluaGVyaXRUaXRsZVxcXCI6ZmFsc2V9XCIsXCJzYXZlZFwiOmZhbHNlLFwidGl0bGVcIjpcIuS6keebmOWQm1wiLFwidmVyc2lvblwiOjAsXCJ1cmxcIjpcImhpa2VyOi8vcGFnZS95c2Z4P3J1bGU95LqR55uY5ZCbJnI95LqR55uY5ZCbJm1vZGU95LqR55uY5rGH5b2xIyNodHRwczovL3d3dy5ycmR5bmIuY29tL21vdmllLzIwMjAvMDYwMi8xMDY4Ni5odG1sXCIsXCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwiZmluZF9ydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmxldCBydWxlID0gZ2V0UGFyYW0oXFxcInJcXFwiKS5zcGxpdChcXFwiIyNcXFwiKVswXTtcXG5sZXQgbW9kZSA9IChnZXRQYXJhbShcXFwibW9kZVxcXCIpIHx8IFxcXCJcXFwiKS5zcGxpdChcXFwiIyNcXFwiKVswXTtcXG5sZXQgdXJsID0gTVlfVVJMLnNwbGl0KFxcXCIjI1xcXCIpWzFdO1xcbmxldCBpdGUgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS91XFxcIikocnVsZSwgZ2V0SG9tZSh1cmwpLCBtb2RlKTtcXG5sZXQganMgPSAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGlmIChkb2N1bWVudC50aXRsZSAmJiBkb2N1bWVudC50aXRsZS5sZW5ndGgpIHtcXG4gICAgICAgICAgICBsZXQgciA9ICQkJCgpLmxhenlSdWxlKCh0KSA9PiB7XFxuICAgICAgICAgICAgICAgIHNldFBhZ2VUaXRsZSh0KTtcXG4gICAgICAgICAgICB9LCBkb2N1bWVudC50aXRsZSk7XFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5wYXJzZUxhenlSdWxlKHIpO1xcbiAgICAgICAgfVxcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICBmeV9icmlkZ2VfYXBwLmxvZyhlLnRvU3RyaW5nKCkpO1xcbiAgICB9XFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCJcXFwiLFxcbiAgICB1cmw6IHVybCxcXG4gICAgY29sX3R5cGU6IFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXCIsXFxuICAgIGRlc2M6IFxcXCIxMDAlJiZmbG9hdFxcXCIsXFxuICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgdXJsSW50ZXJjZXB0b3I6IGl0ZSxcXG4gICAgICAgIGpzOiBqcyxcXG4gICAgICAgIGNhbkJhY2s6IHRydWUsXFxuICAgICAgICBqc0xvYWRpbmdJbmplY3Q6IHRydWUsXFxuICAgICAgICBmbG9hdFZpZGVvOiB0cnVlXFxuICAgIH1cXG59KTtcXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogXFxcImxpbmVcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgaWQ6IHVybFxcbiAgICB9XFxufSk7XFxuc2V0UmVzdWx0KGQpO1wiLFwiZ3JvdXBcIjpcIuKRoOe9keebmFwiLFwidWFcIjpcIm1vYmlsZVwiLFwicHJlUnVsZVwiOlwiXCIsXCJwYWdlc1wiOlwiW3tcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuinhOWImeWIl+ihqFxcXCIsXFxcInBhdGhcXFwiOlxcXCJkYXRhXFxcIixcXFwicnVsZVxcXCI6XFxcInZhciB3cmFwdSA9ICh1KSA9PiB7XFxcXG4gICAgaWYoY29uZmlnLm1vZGUgPT0gXFxcXFxcXCLmnKzlnLDovaznoIFcXFxcXFxcIil7XFxcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJ1xcXFxuICAgIH1cXFxcbiAgICBpZiAoY29uZmlnLm1vZGUgPT0gXFxcXFxcXCLkupHnm5jmsYflvbFcXFxcXFxcIikge1xcXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJztcXFxcbiAgICB9XFxcXG4gICAgaWYgKC9hbGl5dW5kcml2ZS8udGVzdCh1KSkge1xcXFxuICAgICAgICBjb25zdCBbbGluaywgX3NoYXJlX3B3ZF0gPSB1LnNwbGl0KCc/c2hhcmVfcHdkPScpO1xcXFxuICAgICAgICBjb25zdCBbX2xpbmssIF9mb2xkZXJJRF0gPSBsaW5rLnNwbGl0KCcvZm9sZGVyLycpO1xcXFxuICAgICAgICBsZXQgc2hhcmVfcHdkID0gKF9zaGFyZV9wd2QgfHwgJycpLnNwbGl0KCcjbmFtZT0nKVswXSB8fCAnJztcXFxcbiAgICAgICAgbGV0IHNoYXJlSWQgPSBfbGluay5zcGxpdCgnY29tL3MvJylbMV07XFxcXG4gICAgICAgIHJldHVybiAnc21hcnRkcml2ZTovL3NoYXJlL2Jyb3dzZT9zaGFyZUlkPScgKyBzaGFyZUlkICsgJyZzaGFyZVB3ZD0nICsgc2hhcmVfcHdkO1xcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gXFxcXFxcXCJ3ZWI6Ly9cXFxcXFxcIiArIHU7XFxcXG59O1xcXFxubGV0IHJ1bGVzID0gW3tcXFxcbiAgICBuYW1lOiBcXFxcXFxcIuS6keebmOi1hOa6kFxcXFxcXFwiLFxcXFxuICAgIHBhZ2U6IHRydWUsXFxcXG4gICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcXFxuICAgICAgICBsZXQgdXJsID0gXFxcXFxcXCJodHRwczovL3Jlcy55dW5wYW4ud2luLz9QYWdlSW5kZXg9XFxcXFxcXCIgKyBwYWdlICsgXFxcXFxcXCImUGFnZVNpemU9MTImS2V5d29yZD1cXFxcXFxcIiArIHMgKyBcXFxcXFxcIiZUeXBlPSZUYWc9XFxcXFxcXCI7XFxcXG4gICAgICAgIGxldCBodG1sID0gcmVxdWVzdCh1cmwsIHtcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3Jlcy55dW5wYW4ud2luL1xcXFxcXFwiXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXFxcXFwibWFpbiYmLmNhcmRcXFxcXFxcIik7XFxcXG4gICAgICAgIC8vbG9nKGFycik7XFxcXG4gICAgICAgIGxldCBkID0gW107XFxcXG5cXFxcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXFxcbiAgICAgICAgICAgIGxldCB1ID0gcGRmaChpdCwgXFxcXFxcXCIuY2FyZC1saW5rLDEmJm9uY2xpY2tcXFxcXFxcIikubWF0Y2goL2h0dHBzOlxcXFxcXFxcL1xcXFxcXFxcLyh3d3dcXFxcXFxcXC5hbGl5dW5kcml2ZVxcXFxcXFxcLmNvbVxcXFxcXFxcL3N8YWx5d3BcXFxcXFxcXC5uZXQpXFxcXFxcXFwvXFxcXFxcXFx3Ki9nKSB8fCBbXTtcXFxcbiAgICAgICAgICAgIHUgPSB1Lmxlbmd0aCA+IDAgPyB1WzBdIDogdXJsO1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChpdCwgXFxcXFxcXCIuY2FyZC10aXRsZSYmVGV4dFxcXFxcXFwiKSxcXFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBwZChpdCwgXFxcXFxcXCJpbWcmJnNyY1xcXFxcXFwiLCB1cmwpLFxcXFxuICAgICAgICAgICAgICAgIHVybDogd3JhcHUodSksXFxcXG4gICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7kupHnm5jotYTmupA8L2ZvbnQ+Jm5ic3A7XFxcXFxcXCIgKyAocGRmaChpdCwgXFxcXFxcXCIuY2FyZC10ZXh0LC0xJiZUZXh0XFxcXFxcXCIpKSxcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiBkO1xcXFxuICAgIH1cXFxcbn0sIHtcXFxcbiAgICBuYW1lOiBcXFxcXFxcIueMq+eLuOebmOaQnFxcXFxcXFwiLFxcXFxuICAgIHBhZ2U6IGZhbHNlLFxcXFxuICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXFxcbiAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KFxcXFxcXFwiaHR0cHM6Ly93d3cuYWxpcGFuc291LmNvbS9zZWFyY2g/az1cXFxcXFxcIiArIHMsIHtcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3d3dy5hbGlwYW5zb3UuY29tL3NlYXJjaD9rPVxcXFxcXFwiICsgc1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcXFxcXCIjYXBwJiZhXFxcXFxcXCIpO1xcXFxuICAgICAgICAvL2xvZyhhcnIpO1xcXFxuICAgICAgICBsZXQgZCA9IFtdO1xcXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgbGV0IGl0ID0gXFxcXFxcXCI8ZGl2PlxcXFxcXFwiICsgYXJyW2ldICsgXFxcXFxcXCI8L2Rpdj5cXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIGxldCB1ID0gcGRmaChpdCwgXFxcXFxcXCJhJiZocmVmXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgLy9sb2codSk7XFxcXG4gICAgICAgICAgICBpZiAoIXUuaW5jbHVkZXMoXFxcXFxcXCIvcy9cXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHUgPSBcXFxcXFxcImh0dHBzOi8vd3d3LmFsaXBhbnNvdS5jb21cXFxcXFxcIiArIHUucmVwbGFjZShcXFxcXFxcIi9zL1xcXFxcXFwiLCBcXFxcXFxcIi9jdi9cXFxcXFxcIik7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0LCBcXFxcXFxcInRlbXBsYXRlJiZUZXh0XFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgICAgIHVybDogJCh1KS5sYXp5UnVsZSgod3JhcHUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGlucHV0LCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogXFxcXFxcXCJub19zaG93X2RvbmF0ZT0xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IGlucHV0LnJlcGxhY2UoXFxcXFxcXCIvY3YvXFxcXFxcXCIsIFxcXFxcXFwiL3MvXFxcXFxcXCIpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Q6IGZhbHNlXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgX2xpbmtzID0gaHRtbC5tYXRjaCgvaHR0cHM6XFxcXFxcXFwvXFxcXFxcXFwvKHd3d1xcXFxcXFxcLmFsaXl1bmRyaXZlXFxcXFxcXFwuY29tXFxcXFxcXFwvc3xhbHl3cFxcXFxcXFxcLm5ldClcXFxcXFxcXC9cXFxcXFxcXHcqL2cpIHx8IFtdO1xcXFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyhfbGlua3MpO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoX2xpbmtzLmxlbmd0aCA+IDEgJiYgX2xpbmtzWzFdLnJlcGxhY2UoX2xpbmtzWzBdLCBcXFxcXFxcIlxcXFxcXFwiKS5yZXBsYWNlKC9bYS16QS1aMC05XSsvZywgXFxcXFxcXCJcXFxcXFxcIikgPT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXB1KF9saW5rc1sxXSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoX2xpbmtzLmxlbmd0aCA+IDApIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwdShfbGlua3NbMF0pO1xcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSwgd3JhcHUpLFxcXFxuICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+54yr54u455uY5pCcPC9mb250PiZuYnNwO1xcXFxcXFwiICsgcGRmaChpdCwgXFxcXFxcXCJ0ZW1wbGF0ZSwxJiZUZXh0XFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIGQ7XFxcXG4gICAgfVxcXFxufSwge1xcXFxuICAgIG5hbWU6IFxcXFxcXFwi5piT5pCcXFxcXFxcXCIsXFxcXG4gICAgcGFnZTogdHJ1ZSxcXFxcbiAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxcXG4gICAgICAgIGxldCBodG1sID0gcmVxdWVzdChcXFxcXFxcImh0dHBzOi8veWlzby5mdW4vYXBpL3NlYXJjaD9uYW1lPVxcXFxcXFwiICsgcyArIFxcXFxcXFwiJnBhZ2VObz1cXFxcXFxcIiArIHBhZ2UsIHtcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3lpc28uZnVuL2luZm8/c2VhcmNoS2V5PVxcXFxcXFwiICsgc1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgbGV0IGFyciA9IEpTT04ucGFyc2UoaHRtbCkuZGF0YS5saXN0O1xcXFxuICAgICAgICBsb2coYXJyKTtcXFxcbiAgICAgICAgbGV0IGQgPSBbXTtcXFxcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXFxcbiAgICAgICAgICAgIGxldCB1ID0gaXQudXJsO1xcXFxuICAgICAgICAgICAgaWYgKHUgPT0gbnVsbCB8fCAhdS5pbmNsdWRlcyhcXFxcXFxcImFsaXl1blxcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIiArIGl0Lm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiB3cmFwdSh1KSxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPuaYk+aQnDwvZm9udD4mbmJzcDtcXFxcXFxcIiArIChpdC5nbXRTaGFyZSB8fCBpdC5nbXRDcmVhdGUpLFxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIGQ7XFxcXG4gICAgfVxcXFxufSwge1xcXFxuICAgIG5hbWU6IFxcXFxcXFwi5bCP57q45p2hXFxcXFxcXCIsXFxcXG4gICAgcGFnZTogZmFsc2UsXFxcXG4gICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcXFxuICAgICAgICBmdW5jdGlvbiBjYXRfY29kZShhKSB7XFxcXG4gICAgICAgICAgICB2YXIgZCwgZSwgYiA9IFtcXFxcXFxcIuWNjuivreeUteinhlxcXFxcXFwiLCBcXFxcXFxcIuaXpemfqeeUteinhlxcXFxcXFwiLCBcXFxcXFxcIuasp+e+jueUteinhlxcXFxcXFwiLCBcXFxcXFxcIuWFtuS7lueUteinhlxcXFxcXFwiLCBcXFxcXFxcIuWNjuivreeUteW9sVxcXFxcXFwiLCBcXFxcXFxcIuaXpemfqeeUteW9sVxcXFxcXFwiLCBcXFxcXFxcIuasp+e+jueUteW9sVxcXFxcXFwiLCBcXFxcXFxcIuWFtuS7lueUteW9sVxcXFxcXFwiLCBcXFxcXFxcIuWNjuivreWKqOa8q1xcXFxcXFwiLCBcXFxcXFxcIuaXpemfqeWKqOa8q1xcXFxcXFwiLCBcXFxcXFxcIuasp+e+juWKqOa8q1xcXFxcXFwiLCBcXFxcXFxcIue6quW9leeJh1xcXFxcXFwiLCBcXFxcXFxcIue7vOiJuueJh1xcXFxcXFwiLCBcXFxcXFxcIuaVmeiCsuWfueiurVxcXFxcXFwiLCBcXFxcXFxcIuWFtuS7luinhumikVxcXFxcXFwiLCBcXFxcXFxcIuWNjuivremfs+S5kFxcXFxcXFwiLCBcXFxcXFxcIuaXpemfqemfs+S5kFxcXFxcXFwiLCBcXFxcXFxcIuasp+e+jumfs+S5kFxcXFxcXFwiLCBcXFxcXFxcIuWFtuS7lumfs+S5kFxcXFxcXFwiLCBcXFxcXFxcIuWoseS5kOi9r+S7tlxcXFxcXFwiLCBcXFxcXFxcIuezu+e7n+i9r+S7tlxcXFxcXFwiLCBcXFxcXFxcIue9kee7nOi9r+S7tlxcXFxcXFwiLCBcXFxcXFxcIuWKnuWFrOi9r+S7tlxcXFxcXFwiLCBcXFxcXFxcIuWFtuS7lui9r+S7tlxcXFxcXFwiLCBcXFxcXFxcIua8q+eUu1xcXFxcXFwiLCBcXFxcXFxcIuWwj+ivtFxcXFxcXFwiLCBcXFxcXFxcIuWHuueJiOS5plxcXFxcXFwiLCBcXFxcXFxcIuefpeivhuWfueiurVxcXFxcXFwiLCBcXFxcXFxcIuWFtuS7luaWh+aho1xcXFxcXFwiLCBcXFxcXFxcIuWjgee6uFxcXFxcXFwiLCBcXFxcXFxcIuS6uueJqVxcXFxcXFwiLCBcXFxcXFxcIumjjuaZr1xcXFxcXFwiLCBcXFxcXFxcIuWFtuS7luWbvueJh1xcXFxcXFwiLCBcXFxcXFxcIuWFtuS7llxcXFxcXFwiXSxcXFxcbiAgICAgICAgICAgICAgICBjID0gW1xcXFxcXFwiaHlkc1xcXFxcXFwiLCBcXFxcXFxcInJoZHNcXFxcXFxcIiwgXFxcXFxcXCJvbWRzXFxcXFxcXCIsIFxcXFxcXFwicXRkc1xcXFxcXFwiLCBcXFxcXFxcImh5ZHlcXFxcXFxcIiwgXFxcXFxcXCJyaGR5XFxcXFxcXCIsIFxcXFxcXFwib21keVxcXFxcXFwiLCBcXFxcXFxcInF0ZHlcXFxcXFxcIiwgXFxcXFxcXCJoeWRtXFxcXFxcXCIsIFxcXFxcXFwicmhkbVxcXFxcXFwiLCBcXFxcXFxcIm9tZG1cXFxcXFxcIiwgXFxcXFxcXCJqbHBcXFxcXFxcIiwgXFxcXFxcXCJ6eXBcXFxcXFxcIiwgXFxcXFxcXCJqeXB4XFxcXFxcXCIsIFxcXFxcXFwicXRzcFxcXFxcXFwiLCBcXFxcXFxcImh5eXlcXFxcXFxcIiwgXFxcXFxcXCJyaHl5XFxcXFxcXCIsIFxcXFxcXFwib215eVxcXFxcXFwiLCBcXFxcXFxcInF0eXlcXFxcXFxcIiwgXFxcXFxcXCJrZnJqXFxcXFxcXCIsIFxcXFxcXFwieHRyalxcXFxcXFwiLCBcXFxcXFxcIndscmpcXFxcXFxcIiwgXFxcXFxcXCJiZ3JqXFxcXFxcXCIsIFxcXFxcXFwicXRyalxcXFxcXFwiLCBcXFxcXFxcIm1oXFxcXFxcXCIsIFxcXFxcXFwieHNcXFxcXFxcIiwgXFxcXFxcXCJjYnNcXFxcXFxcIiwgXFxcXFxcXCJ6c3B4XFxcXFxcXCIsIFxcXFxcXFwicXR3ZFxcXFxcXFwiLCBcXFxcXFxcImJ6XFxcXFxcXCIsIFxcXFxcXFwicndcXFxcXFxcIiwgXFxcXFxcXCJmalxcXFxcXFwiLCBcXFxcXFxcInF0dHBcXFxcXFxcIiwgXFxcXFxcXCJxdFxcXFxcXFwiXTtcXFxcbiAgICAgICAgICAgIGZvciAoZCA9IDAsIGUgPSBjLmxlbmd0aDsgZSA+IGQ7IGQrKylcXFxcbiAgICAgICAgICAgICAgICBpZiAoY1tkXSA9PSBhKSByZXR1cm4gYltkXTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBsZXQgZCA9IFtdO1xcXFxuICAgICAgICBsZXQgaHRtbCA9IHBvc3QoXFxcXFxcXCJodHRwczovL2dpdGNhZmUubmV0L3Rvb2wvYWxpcGFwZXIvXFxcXFxcXCIsIHtcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL3UuZ2l0Y2FmZS5uZXQvJ1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgIGJvZHk6IHtcXFxcbiAgICAgICAgICAgICAgICBhY3Rpb246IFxcXFxcXFwic2VhcmNoXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAga2V5d29yZDogc1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KVxcXFxuICAgICAgICBsZXQgbGlzdCA9IEpTT04ucGFyc2UoaHRtbCk7XFxcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgbGV0IGl0ID0gbGlzdFtpXVxcXFxuICAgICAgICAgICAgbGV0IHRpdGxlID0gaXQudGl0bGU7XFxcXG4gICAgICAgICAgICBsZXQgbXVybCA9IGl0LmtleVxcXFxuICAgICAgICAgICAgaWYgKHRpdGxlLmluY2x1ZGVzKHMpKSB7XFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPuWwj+e6uOadoTwvZm9udD4mbmJzcDtcXFxcXFxcIiArIGNhdF9jb2RlKGl0LmNhdCksXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXM6IGl0LmRlc1xcXFxuICAgICAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KCdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vcy8nICsgbXVybCksXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIGQ7XFxcXG4gICAgfVxcXFxufSwge1xcXFxuICAgIG5hbWU6IFxcXFxcXFwi5b+F5bqUXFxcXFxcXCIsXFxcXG4gICAgcGFnZTogdHJ1ZSxcXFxcbiAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxcXG4gICAgICAgIGxldCB1cmwgPSBcXFxcXFxcImh0dHBzOi8vY24uYmluZy5jb20vc2VhcmNoP3E9XFxcXFxcXCIgKyBzICsgXFxcXFxcXCIrYWxpeXVuZHJpdmUmcXM9ZHMmZm9ybT1RQlJFXFxcXFxcXCI7XFxcXG4gICAgICAgIGlmIChwYWdlICE9IDEpIHtcXFxcbiAgICAgICAgICAgIHVybCA9IGdldE15VmFyKFxcXFxcXFwiYmluZ1xcXFxcXFwiLCB1cmwpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGxldCBodG1sID0gcmVxdWVzdCh1cmwsIHtcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL2NuLmJpbmcuY29tL1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIC8vXFxcXFxcXCJYLVJlcXVlc3RlZC1XaXRoXFxcXFxcXCI6IFxcXFxcXFwiY29tLmV4YW1wbGUuaGlrZXJ2aWV3XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJBY2NlcHRcXFxcXFxcIjogXFxcXFxcXCJ0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxpY2F0aW9uL3htbDtxPTAuOSxpbWFnZS9hdmlmLGltYWdlL3dlYnAsaW1hZ2UvYXBuZywqLyo7cT0wLjgsYXBwbGljYXRpb24vc2lnbmVkLWV4Y2hhbmdlO3Y9YjM7cT0wLjlcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcXFxcXCJib2R5JiZhXFxcXFxcXCIpO1xcXFxuICAgICAgICAvL2xvZyhhcnIpO1xcXFxuICAgICAgICBsZXQgZCA9IFtdO1xcXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcXFxuICAgICAgICAgICAgbGV0IHUgPSBwZChpdCwgXFxcXFxcXCJhJiZocmVmXFxcXFxcXCIsIHVybCk7XFxcXG4gICAgICAgICAgICBsZXQgdCA9IHBkZmgoaXQsIFxcXFxcXFwiYSYmVGV4dFxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIGlmIChpdC5pbmNsdWRlcyhcXFxcXFxcIk5leHQgcGFnZVxcXFxcXFwiKSB8fCBpdC5pbmNsdWRlcyhcXFxcXFxcIuS4i+S4gOmhtVxcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgICAgIGxldCB1MiA9IHBkKGl0LCBcXFxcXFxcImEmJmhyZWZcXFxcXFxcIiwgdXJsKTtcXFxcbiAgICAgICAgICAgICAgICBsb2coXFxcXFxcXCJuZXh0IHBhZ2VcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgbG9nKHUyKTtcXFxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFxcXFxcImJpbmdcXFxcXFxcIiwgdTIpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaWYgKHUgPT0gbnVsbCB8fCB0ID09IG51bGwgfHwgIWl0LmluY2x1ZGVzKHMpKSB7XFxcXG4gICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpZiAoIWl0LmluY2x1ZGVzKFxcXFxcXFwi572R55uYXFxcXFxcXCIpICYmICFpdC5pbmNsdWRlcyhcXFxcXFxcIuS6keebmFxcXFxcXFwiKSAmJlxcXFxuICAgICAgICAgICAgICAgICFpdC5pbmNsdWRlcyhcXFxcXFxcImFsaXl1bmRyaXZlXFxcXFxcXCIpICYmICFpdC5pbmNsdWRlcyhcXFxcXFxcInl1bnBhblxcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaWYgKHUuc3RhcnRzV2l0aChcXFxcXFxcImh0dHBzOi8vY24uYmluZy5jb20vXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBsZXQgZG9tID0gZ2V0SG9tZSh1KS5yZXBsYWNlKFxcXFxcXFwiaHR0cDovL1xcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKS5yZXBsYWNlKFxcXFxcXFwiaHR0cHM6Ly9cXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICBsZXQgX2xpbmtzID0gdC5tYXRjaCgvaHR0cHM6XFxcXFxcXFwvXFxcXFxcXFwvKHd3d1xcXFxcXFxcLmFsaXl1bmRyaXZlXFxcXFxcXFwuY29tXFxcXFxcXFwvc3xhbHl3cFxcXFxcXFxcLm5ldClcXFxcXFxcXC9cXFxcXFxcXHcqL2cpIHx8IFtdO1xcXFxuICAgICAgICAgICAgbG9nKF9saW5rcyk7XFxcXG4gICAgICAgICAgICBsZXQgYyA9IG51bGw7XFxcXG4gICAgICAgICAgICBpZiAoX2xpbmtzLmxlbmd0aCA+IDEgJiYgX2xpbmtzWzFdLnJlcGxhY2UoX2xpbmtzWzBdLCBcXFxcXFxcIlxcXFxcXFwiKS5yZXBsYWNlKC9bYS16QS1aMC05XSsvZywgXFxcXFxcXCJcXFxcXFxcIikgPT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgIGMgPSB3cmFwdShfbGlua3NbMV0pO1xcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChfbGlua3MubGVuZ3RoID4gMCkge1xcXFxuICAgICAgICAgICAgICAgIGMgPSB3cmFwdShfbGlua3NbMF0pO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogdCxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPuW/heW6lDwvZm9udD4mbmJzcDtcXFxcXFxcIiArIGRvbSxcXFxcbiAgICAgICAgICAgICAgICB1cmw6IGMgIT0gbnVsbCA/IGMgOiAkKHUpLmxhenlSdWxlKCh3cmFwdSwgbW9kZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoaW5wdXQpO1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgX2xpbmtzID0gaHRtbC5tYXRjaCgvaHR0cHM6XFxcXFxcXFwvXFxcXFxcXFwvKHd3d1xcXFxcXFxcLmFsaXl1bmRyaXZlXFxcXFxcXFwuY29tXFxcXFxcXFwvc3xhbHl3cFxcXFxcXFxcLm5ldClcXFxcXFxcXC9cXFxcXFxcXHcqL2cpIHx8IFtdO1xcXFxuICAgICAgICAgICAgICAgICAgICBsb2coX2xpbmtzKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9saW5rcy5sZW5ndGggPiAxICYmIF9saW5rc1sxXS5yZXBsYWNlKF9saW5rc1swXSwgXFxcXFxcXCJcXFxcXFxcIikucmVwbGFjZSgvW2EtekEtWjAtOV0rL2csIFxcXFxcXFwiXFxcXFxcXCIpID09IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwdShfbGlua3NbMV0pO1xcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF9saW5rcy5sZW5ndGggPiAwKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHUoX2xpbmtzWzBdKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBydWxlID0gTVlfUlVMRS50aXRsZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vcGFnZS95c2Z4P3J1bGU9XFxcXFxcXCIgKyBydWxlICsgXFxcXFxcXCImcj1cXFxcXFxcIiArIHJ1bGUgKyBcXFxcXFxcIiZtb2RlPVxcXFxcXFwiICsgbW9kZSArIFxcXFxcXFwiIyNcXFxcXFxcIiArIGlucHV0O1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSwgd3JhcHUsIGNvbmZpZy5tb2RlKVxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIGQ7XFxcXG4gICAgfVxcXFxufV07XFxcXG5cXFxcbmxldCBjY29mID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvY2NvZicpXFxcXG5ydWxlcy5wdXNoKGNjb2YpXFxcXG4vL+W5tuWPkeinhOWImeaVsFxcXFxubGV0IHNpemUgPSAxMDtcXFxcblxcXFxuJC5leHBvcnRzID0gZnVuY3Rpb24ocGFnZSwgcnVsZSkge1xcXFxuICAgIGlmICghcGFnZSAmJiAhcnVsZSkge1xcXFxuICAgICAgICByZXR1cm4gcnVsZXMubWFwKGl0ID0+IGl0Lm5hbWUpO1xcXFxuICAgIH1cXFxcbiAgICBpZiAocnVsZSAhPSBudWxsKSB7XFxcXG4gICAgICAgIGlmIChwYWdlICE9IG51bGwgJiYgcGFnZSA+IDEpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBydWxlcy5maWx0ZXIoaSA9PiBpLm5hbWUgPT0gcnVsZSAmJiBpLnBhZ2UpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiBydWxlcy5maWx0ZXIoaSA9PiBpLm5hbWUgPT0gcnVsZSk7XFxcXG4gICAgfVxcXFxuICAgIGxldCBzdGFydCA9IChwYWdlIC0gMSkgKiBzaXplO1xcXFxuICAgIGlmIChydWxlcy5sZW5ndGggPCBzdGFydCArIDEpIHtcXFxcbiAgICAgICAgcmV0dXJuIFtdO1xcXFxuICAgIH1cXFxcbiAgICBsZXQgbGVuID0gc2l6ZTtcXFxcbiAgICBpZiAocnVsZXMubGVuZ3RoIDwgcGFnZSAqIHNpemUpIHtcXFxcbiAgICAgICAgbGVuID0gcnVsZXMubGVuZ3RoIC0gc3RhcnRcXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIHJ1bGVzLnNsaWNlKHN0YXJ0LCBzdGFydCArIGxlbik7XFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5pCc57SiXFxcIixcXFwicGF0aFxcXCI6XFxcInNvdVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJsZXQgciA9IGdldEl0ZW0oXFxcXFxcXCJyXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcXFxuICAgIGxldCByMSA9IGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9ob21lQOS6keebmOaxh+W9sVxcXFxcXFwiKTtcXFxcbiAgICBpZiAoIXIxIHx8IHIxLmxlbmd0aCA8PSA1KSB7XFxcXG4gICAgICAgIGxldCBydSA9ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwi5rW36ZiU6KeG55WM6KeE5YiZ5YiG5Lqr77yM5b2T5YmN5YiG5Lqr55qE5piv77ya5bCP56iL5bqP77+laG9tZV9ydWxlX3Yy77+lYmFzZTY0Oi8vQOS6keebmOaxh+W9sUBleUpzWVhOMFgyTm9ZWEIwWlhKZmNuVnNaU0k2SWlJc0luUnBkR3hsSWpvaTVMcVI1NXVZNXJHSDViMnhJaXdpWVhWMGFHOXlJam9pVFhKR2JIa2lMQ0oxY213aU9pSm9hV3RsY2pvdkwyVnRjSFI1SkNRa1pubHdZV2RsSWl3aWRtVnljMmx2YmlJNk5pd2lZMjlzWDNSNWNHVWlPaUowWlhoMFh6RWlMQ0pqYkdGemMxOXVZVzFsSWpvaUlpd2lkSGx3WlNJNkltRnNiQ0lzSW1Oc1lYTnpYM1Z5YkNJNklpSXNJbUZ5WldGZmJtRnRaU0k2SWlJc0ltRnlaV0ZmZFhKc0lqb2lJaXdpYzI5eWRGOXVZVzFsSWpvaUlpd2llV1ZoY2w5dVlXMWxJam9pSWl3aWMyOXlkRjkxY213aU9pSWlMQ0o1WldGeVgzVnliQ0k2SWlJc0ltWnBibVJmY25Wc1pTSTZJbXB6T2x4dVpYWmhiQ2htWlhSamFDZ25hR2xyWlhJNkx5OW1hV3hsY3k5eWRXeGxjeTlwWTNrdllXeHBMbXB6SnlrcE8xeHVZV3hwTG1odmJXVlFZV2RsS0NrN0lpd2ljMlZoY21Ob1gzVnliQ0k2SW1ocGEyVnlPaTh2Wlcxd2RIa2tKQ1FxS2lRa0pHWjVjR0ZuWlNRa0pDSXNJbWR5YjNWd0lqb2k0cEdnNTcyUjU1dVlJaXdpYzJWaGNtTm9SbWx1WkNJNkltcHpPbHh1WlhaaGJDaG1aWFJqYUNnbmFHbHJaWEk2THk5bWFXeGxjeTl5ZFd4bGN5OXBZM2t2WVd4cExtcHpKeWtwTzF4dVlXeHBMbk5sWVhKamFGQmhaMlVvZEhKMVpTazdYRzRpTENKa1pYUmhhV3hmWTI5c1gzUjVjR1VpT2lKdGIzWnBaVjh4SWl3aVpHVjBZV2xzWDJacGJtUmZjblZzWlNJNkltcHpPbHh1WlhaaGJDaG1aWFJqYUNnbmFHbHJaWEk2THk5bWFXeGxjeTl5ZFd4bGN5OXBZM2t2WVd4cExtcHpKeWtwTzF4dVlXeHBMbVJsZEdGcGJGQmhaMlVvS1RzaUxDSnpaR1YwWVdsc1gyTnZiRjkwZVhCbElqb2liVzkyYVdWZk1TSXNJbk5rWlhSaGFXeGZabWx1WkY5eWRXeGxJam9pSWl3aWRXRWlPaUp0YjJKcGJHVWlMQ0p3Y21WU2RXeGxJam9pZG1GeUlHRnNhV3B6SUQwZ1ptVjBZMmdvSjJoMGRIQnpPaTh2WjJsMFpXVXVZMjl0TDJac2VURXpPVGN2YUdsclpYSXRhV041TDNKaGR5OXRZWE4wWlhJdllXeHBMbXB6SnlrN1hHNXBaaWdoWVd4cGFuTWdmSHdnSVdGc2FXcHpMbWx1WTJ4MVpHVnpLQ2RoYkdrbktTbDdYRzVjZEdGc2FXcHpJRDBnWm1WMFkyZ29KMmgwZEhCek9pOHZZMlJ1TG1welpHVnNhWFp5TG01bGRDOW5hQzltYkhreE16azNMMmhwYTJWeUxXbGplUzloYkdrdWFuTW5LVnh1ZlZ4dWFXWW9JV0ZzYVdweklIeDhJQ0ZoYkdscWN5NXBibU5zZFdSbGN5Z25ZV3hwSnlrcGUxeHVYSFJoYkdscWN5QTlJR1psZEdOb0tDZG9kSFJ3T2k4dmJHWnBZM2t1WTI5dE9qTXdNREF3TDIxeVpteDVMMmhwYTJWeUxXbGplUzl5WVhjdmJXRnpkR1Z5TDJGc2FTNXFjeWNwWEc1OVhHNXBaaWhoYkdscWN5a2dlMXh1WEhSM2NtbDBaVVpwYkdVb1hDSm9hV3RsY2pvdkwyWnBiR1Z6TDNKMWJHVnpMMmxqZVM5aGJHa3Vhbk5jSWl4aGJHbHFjeWs3WEc1Y2RHVjJZV3dvWVd4cGFuTXBPMXh1WEhSaGJHa3VjSEpsVW5Wc1pTZ3BPMXh1ZlZ4dUlpd2ljR0ZuWlhNaU9pSmJlMXdpWTI5c1gzUjVjR1ZjSWpwY0ltMXZkbWxsWHpOY0lpeGNJbTVoYldWY0lqcGNJdWU5a2VlYm1PaXZwdWFEaFZ3aUxGd2ljR0YwYUZ3aU9sd2laR1YwWVdsc1hDSXNYQ0p5ZFd4bFhDSTZYQ0pxY3pwY1hHNWxkbUZzS0dabGRHTm9LQ2RvYVd0bGNqb3ZMMlpwYkdWekwzSjFiR1Z6TDJsamVTOWhiR2t1YW5NbktTazdYRnh1WVd4cExtbHVhWFJEYjI1bWFXY29LVHRjWEc1aGJHa3VZV3hwVW5Wc1pTZ3BPMXdpZlN4N1hDSmpiMnhmZEhsd1pWd2lPbHdpYlc5MmFXVmZNVjlzWldaMFgzQnBZMXdpTEZ3aWJtRnRaVndpT2x3aTZMV0U1cnFRNTcyUjZhRzE2SyttNW9PRlhDSXNYQ0p3WVhSb1hDSTZYQ0p6YVhSbExXUmxkR0ZwYkZ3aUxGd2ljblZzWlZ3aU9sd2lhbk02WEZ4dVpYWmhiQ2htWlhSamFDZ25hR2xyWlhJNkx5OW1hV3hsY3k5eWRXeGxjeTlwWTNrdllXeHBMbXB6SnlrcE8xeGNibUZzYVM1a1pYUmhhV3hRWVdkbEtDazdYQ0o5TEh0Y0ltTnZiRjkwZVhCbFhDSTZYQ0p0YjNacFpWOHpYQ0lzWENKdVlXMWxYQ0k2WENMa3VLcmt1cnJudlpIbm01am9yNmJtZzRWY0lpeGNJbkJoZEdoY0lqcGNJbVJ5YVhabFhDSXNYQ0p5ZFd4bFhDSTZYQ0pxY3pwY1hHNWxkbUZzS0dabGRHTm9LQ2RvYVd0bGNqb3ZMMlpwYkdWekwzSjFiR1Z6TDJsamVTOWhiR2t1YW5NbktTazdYRnh1WVd4cExtbHVhWFJEYjI1bWFXY29LVHRjWEc1aGJHa3ViWGxCYkdsU2RXeGxLQ2s3WENKOVhTSXNJbWxqYjI0aU9pSm9kSFJ3Y3pvdkwyZHBkR1ZsTG1OdmJTOW1iSGt4TXprM0wyaHBhMlZ5TFdsamVTOXlZWGN2YldGemRHVnlMMkZzYVhsMWJpNXdibWNpZlE9PVxcXFxcXFwiXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBjb25maXJtKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBNWV9SVUxFLnRpdGxlICsgJ+aPkOekuicsXFxcXG4gICAgICAgICAgICBjb250ZW50OiAn5pys6KeE5YiZ5L6d6LWW5LqR55uY5rGH5b2x6KeE5YiZ77yM54K55Ye75LiL6Z2i55qE56Gu5a6a5oyJ6ZKu5a+85YWl77yM5rOo5oSP5a+85YWl5ZCO5LiA5a6a6KaB5Zyo5LqR55uY5rGH5b2x55m75b2V6Zi/6YeM5LqR55uY6LSm5Y+377yM5ZCm5YiZ5LiN6IO955SoJyxcXFxcbiAgICAgICAgICAgIGNvbmZpcm06IHJ1LFxcXFxuICAgICAgICAgICAgY2FuY2VsOiBydVxcXFxuICAgICAgICB9KVxcXFxuICAgIH1cXFxcbiAgICBhZGRMaXN0ZW5lcihcXFxcXFxcIm9uQ2xvc2VcXFxcXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcXFxcXCJzXFxcXFxcXCIpO1xcXFxuICAgIH0pKTtcXFxcbiAgICBsZXQgdGlwID0gXFxcXFxcXCLkupHnm5jmkJzntKLlkJsg5qOA57Si5Yqf6IO955Sx5a+55bqU572R56uZ5o+Q5L6b77yM5pys6KeE5YiZ5LiN5o+Q5L6b5Lu75L2V5YaF5a65XFxcXFxcXCI7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IHRpcCxcXFxcbiAgICAgICAgdXJsOiAkKFxcXFxcXFwiI25vTG9hZGluZyNcXFxcXFxcIikubGF6eVJ1bGUoKHRpcCkgPT4ge1xcXFxuICAgICAgICAgICAgY29uZmlybSh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5L2/55So6K+05piOXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgY29udGVudDogdGlwICsgXFxcXFxcXCLvvIzmnKzop4TliJnku6PnoIHlrozlhajlvIDmupDvvIzku4XkvpvlrabkuaDlkoznoJTnqbbvvJvngrnlh7vkuIvmlrnnoa7lrprmjInpkq7ot7PovazkupHnm5jmsYflvbHlsI/nqIvluo9cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBjb25maXJtOiBcXFxcXFxcIidoaWtlcjovL2hvbWVA5LqR55uY5rGH5b2xJ1xcXFxcXFwiXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuICAgICAgICB9LCB0aXApLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJpY29uXzJfcm91bmRcXFxcXFxcIixcXFxcbiAgICAgICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgcGljX3VybDogXFxcXFxcXCJoaWtlcjovL2ltYWdlcy9pY29uMlxcXFxcXFwiXFxcXG4gICAgfSk7XFxcXG4gICAgbGV0IGRtb2RlID0gZ2V0SXRlbShcXFxcXFxcImRtb2RlXFxcXFxcXCIsIFxcXFxcXFwi5LqR55uY5rGH5b2xXFxcXFxcXCIpO1xcXFxuICAgIGluaXRDb25maWcoe1xcXFxuICAgICAgICBtb2RlOiBkbW9kZVxcXFxuICAgIH0pO1xcXFxuXFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwi5qih5byP77yaXFxcXFxcXCIgKyBkbW9kZSxcXFxcbiAgICAgICAgdXJsOiBcXFxcXFxcInNlbGVjdDovL1xcXFxcXFwiICsgSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi6YCJ5oup5qih5byPXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBvcHRpb25zOiBbXFxcXFxcXCLkupHnm5jmsYflvbFcXFxcXFxcIiwgXFxcXFxcXCLmnKzlnLDovaznoIFcXFxcXFxcIiwgXFxcXFxcXCLlrpjmlrlBUFBcXFxcXFxcIl0sXFxcXG4gICAgICAgICAgICBjb2w6IDEsXFxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgc2V0SXRlbShcXFxcXFxcImRtb2RlXFxcXFxcXCIsIGlucHV0KTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBcXFxcXFxcIuWumOaWuUFQUFxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5L+u5pS55oiQ5Yqf77yM6K+356Gu5L+d5omL5py65pyJ5a6J6KOF6Zi/6YeM5LqR55uY5a6Y5pa5QVBQXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip/vvIzms6jmhI/opoHlnKjkupHnm5jmsYflvbHorr7nva7ph4zpnaLnmbvlvZXotKblj7dcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9KSxcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaWNvbl8yX3JvdW5kXFxcXFxcXCIsXFxcXG4gICAgICAgIGRlc2M6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgIHBpY191cmw6IFxcXFxcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbjFcXFxcXFxcIlxcXFxuICAgIH0pO1xcXFxuXFxcXG5cXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogJ+aQnOe0oicsXFxcXG4gICAgICAgIGRlc2M6ICfor7fovpPlhaXlhbPplK7or40nLFxcXFxuICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgICAgIHB1dE15VmFyKCdzJywgaW5wdXQpO1xcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXFxcbiAgICAgICAgfSksXFxcXG4gICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKCdzJywgJycpXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcbiAgICBsZXQgcnVsZXMgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXFxcXFwiKSgpO1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBcXFxcXFxcIlxcXFxcXFwiID09IHIgPyBcXFxcXFxcIuKAnOKAnOWFqOmDqOKAneKAnVxcXFxcXFwiIDogXFxcXFxcXCLlhajpg6hcXFxcXFxcIixcXFxcbiAgICAgICAgdXJsOiAkKFxcXFxcXFwiI25vTG9hZGluZyNcXFxcXFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAgICAgY2xlYXJJdGVtKFxcXFxcXFwiclxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgfSksXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInNjcm9sbF9idXR0b25cXFxcXFxcIixcXFxcbiAgICAgICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIlxcXFxuICAgIH0pO1xcXFxuICAgIGZvciAobGV0IGl0IG9mIHJ1bGVzKSB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogaXQgPT0gciA/IFxcXFxcXFwi4oCc4oCcXFxcXFxcXCIgKyBpdCArIFxcXFxcXFwi4oCd4oCdXFxcXFxcXCIgOiBpdCxcXFxcbiAgICAgICAgICAgIHVybDogJChcXFxcXFxcIiNub0xvYWRpbmcjXFxcXFxcXCIpLmxhenlSdWxlKChyKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgc2V0SXRlbShcXFxcXFxcInJcXFxcXFxcIiwgcik7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0sIGl0KSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInNjcm9sbF9idXR0b25cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBwaWNfdXJsOiBcXFxcXFxcIlxcXFxcXFwiXFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH1cXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICBjb2xfdHlwZTogJ2xpbmUnLFxcXFxuICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgaWQ6ICd5cGotbCdcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pO1xcXFxufVxcXFxubGV0IHMgPSBnZXRNeVZhcigncycsICcnKTtcXFxcbmlmIChzICE9IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICBsZXQgcCA9IE1ZX1BBR0U7XFxcXG4gICAgbGV0IGRhdGEgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXFxcXFwiKShwLCByICE9IFxcXFxcXFwiXFxcXFxcXCIgPyByIDogbnVsbCk7XFxcXG5cXFxcbiAgICBsZXQgcGFnZWlkID0gXFxcXFxcXCJ5cGotcGFnZVxcXFxcXFwiICsgcDtcXFxcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLliqDovb3nrKxcXFxcXFxcIiArIHAgKyBcXFxcXFxcIumhteS4re+8jOi/m+W6pu+8mjEvXFxcXFxcXCIgKyBkYXRhLmxlbmd0aCxcXFxcbiAgICAgICAgICAgIHVybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBwaWNfdXJsOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICBpZDogcGFnZWlkXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH1cXFxcbiAgICBzZXRSZXN1bHQoZCk7XFxcXG4gICAgbG9nKGRhdGEubGVuZ3RoKTtcXFxcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XFxcXG4gICAgICAgIC8v5aSa57q/56iL5Yqg6L29ICAgICAgICBcXFxcbiAgICAgICAgbGV0IHJlYWxQYWdlID0gXFxcXFxcXCJcXFxcXFxcIiA9PSByID8gMSA6IHA7XFxcXG4gICAgICAgIGxldCB0YXNrcyA9IGRhdGEubWFwKGl0ID0+IHtcXFxcbiAgICAgICAgICAgIHJldHVybiB7XFxcXG4gICAgICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24ocnVsZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVsZS5maW5kKHMsIHJlYWxQYWdlKTtcXFxcbiAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgIHBhcmFtOiBpdCxcXFxcbiAgICAgICAgICAgICAgICBpZDogXFxcXFxcXCJydWxlQFxcXFxcXFwiICsgaXQubmFtZVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcblxcXFxuICAgICAgICBiYXRjaEV4ZWN1dGUodGFza3MsIHtcXFxcbiAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKHBhcmFtLCBpZCwgZXJyb3IsIHJlc3VsdCkge1xcXFxuICAgICAgICAgICAgICAgIC8vbG9nKFxcXFxcXFwibGlzdGVuZXI6IFxcXFxcXFwiICsgKHJlc3VsdCB8fCBbXSkubGVuZ3RoKVxcXFxuICAgICAgICAgICAgICAgIHBhcmFtLmkgPSBwYXJhbS5pICsgMTtcXFxcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpdCBvZiByZXN1bHQpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5qID0gcGFyYW0uaiArIDE7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUJlZm9yZShwYWdlaWQsIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0LnRpdGxlLmluY2x1ZGVzKFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIpID8gaXQudGl0bGUgOiBcXFxcXFxcIuKAnOKAnOKAneKAnVxcXFxcXFwiICsgaXQudGl0bGUucmVwbGFjZShuZXcgUmVnRXhwKFxcXFxcXFwiPGVtPnw8L2VtPlxcXFxcXFwiLCBcXFxcXFxcImdcXFxcXFxcIiksIFxcXFxcXFwiXFxcXFxcXCIpLnJlcGxhY2UobmV3IFJlZ0V4cChzLCBcXFxcXFxcImdcXFxcXFxcIiksIFxcXFxcXFwiPHN0cm9uZz48c3BhbiBzdHlsZT1cXFxcXFxcXFxcXFxcXFwiY29sb3I6ICMxRTkwRkZcXFxcXFxcXFxcXFxcXFwiPlxcXFxcXFwiICsgcyArIFxcXFxcXFwiPC9zcGFuPjwvc3Ryb25nPlxcXFxcXFwiKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogaXQuZGVzYyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdC51cmwsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGl0LnBpY191cmwsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBpdC5waWNfdXJsID8gJ21vdmllXzFfdmVydGljYWxfcGljJyA6IFxcXFxcXFwidGV4dF8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXFxcXFxcXCJfX2FwcFxcXFxcXFwiICsgTVlfUEFHRSArIFxcXFxcXFwiQFxcXFxcXFwiICsgcGFyYW0uaixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRUaXRsZTogZmFsc2VcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxcXG5cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtLmkgPj0gcGFyYW0uYWxsKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0ocGFnZWlkKVxcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5Yqg6L2956ysXFxcXFxcXCIgKyBNWV9QQUdFICsgXFxcXFxcXCLpobXkuK3vvIzov5vluqbvvJpcXFxcXFxcIiArIChwYXJhbS5pICsgMSkgKyBcXFxcXFxcIi9cXFxcXFxcIiArIHBhcmFtLmFsbCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogcGFnZWlkXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgIHBhcmFtOiB7XFxcXG4gICAgICAgICAgICAgICAgYWxsOiBkYXRhLmxlbmd0aCxcXFxcbiAgICAgICAgICAgICAgICBpOiAwLFxcXFxuICAgICAgICAgICAgICAgIGo6IC0xXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pXFxcXG4gICAgfVxcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuaQnOe0oumhtemdolxcXCIsXFxcInBhdGhcXFwiOlxcXCJzb3VwXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQgPSBbXTtcXFxcbmlmIChNWV9QQVJBTVMua2V5KSB7XFxcXG4gICAgcHV0TXlWYXIoXFxcXFxcXCJzXFxcXFxcXCIsIE1ZX1BBUkFNUy5rZXkpO1xcXFxufVxcXFxuZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3NvdVxcXFxcXFwiKSkucnVsZSk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiQ0NPRlxcXCIsXFxcInBhdGhcXFwiOlxcXCJjY29mXFxcIixcXFwicnVsZVxcXCI6XFxcInZhciB3cmFwdSA9ICh1KSA9PiB7XFxcXG4gICAgaWYoY29uZmlnLm1vZGUgPT0gXFxcXFxcXCLmnKzlnLDovaznoIFcXFxcXFxcIil7XFxcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJ1xcXFxuICAgIH1cXFxcbiAgICBpZiAoY29uZmlnLm1vZGUgPT0gXFxcXFxcXCLkupHnm5jmsYflvbFcXFxcXFxcIikge1xcXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJztcXFxcbiAgICB9XFxcXG4gICAgaWYgKC9hbGl5dW5kcml2ZS8udGVzdCh1KSkge1xcXFxuICAgICAgICBjb25zdCBbbGluaywgX3NoYXJlX3B3ZF0gPSB1LnNwbGl0KCc/c2hhcmVfcHdkPScpO1xcXFxuICAgICAgICBjb25zdCBbX2xpbmssIF9mb2xkZXJJRF0gPSBsaW5rLnNwbGl0KCcvZm9sZGVyLycpO1xcXFxuICAgICAgICBsZXQgc2hhcmVfcHdkID0gKF9zaGFyZV9wd2QgfHwgJycpLnNwbGl0KCcjbmFtZT0nKVswXSB8fCAnJztcXFxcbiAgICAgICAgbGV0IHNoYXJlSWQgPSBfbGluay5zcGxpdCgnY29tL3MvJylbMV07XFxcXG4gICAgICAgIHJldHVybiAnc21hcnRkcml2ZTovL3NoYXJlL2Jyb3dzZT9zaGFyZUlkPScgKyBzaGFyZUlkICsgJyZzaGFyZVB3ZD0nICsgc2hhcmVfcHdkO1xcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gXFxcXFxcXCJ3ZWI6Ly9cXFxcXFxcIiArIHU7XFxcXG59O1xcXFxuJC5leHBvcnRzID0ge1xcXFxuICAgIG5hbWU6ICdDQ09GJyxcXFxcbiAgICBwYWdlOiB0cnVlLFxcXFxuICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXFxcbiAgICAgICAgbGV0IGQgPSBbXVxcXFxuICAgICAgICBjb25zdCB7XFxcXG4gICAgICAgICAgICBieXRlc1RvU2l6ZSxcXFxcbiAgICAgICAgICAgIGNvbG9yXFxcXG4gICAgICAgIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS90b29scycpO1xcXFxuICAgICAgICBsZXQgaHRtbCA9IGZldGNoKCdodHRwczovL3Bhbi5jY29mLmNjL2FwaS9zZWFyY2gnLCB7XFxcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJjb250ZW50LXR5cGVcXFxcXFxcIjogJ2FwcGxpY2F0aW9uL2pzb24nLFxcXFxuICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vcGFuLmNjb2YuY2Mvc2VhcmNoP2tleXdvcmQ9JyArIHNcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICBib2R5OiB7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJwYWdlU2l6ZVxcXFxcXFwiOiAyMCxcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcInBhZ2VOdW1cXFxcXFxcIjogcGFnZSxcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcImtleXdvcmRcXFxcXFxcIjogcyxcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcImZyb21Nb2JpbGVcXFxcXFxcIjogdHJ1ZVxcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIGxldCBsaXN0ID0gSlNPTi5wYXJzZShodG1sKVxcXFxuICAgICAgICAgICAgLmRhdGEucm93c1xcXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgIGxldCBpdCA9IGxpc3RbaV1cXFxcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IGl0LmZpbGVOYW1lXFxcXG4gICAgICAgICAgICBsZXQgbXVybCA9IGl0LnVybFxcXFxuICAgICAgICAgICAgbGV0IHR5cGUgPSBpdC50eXBlLnJlcGxhY2UoL2ZvbGRlci8sICfmlofku7blpLknKS5yZXBsYWNlKC9maWxlLywgJ+aWh+S7ticpXFxcXG4gICAgICAgICAgICBpZiAodGl0bGUuaW5jbHVkZXMocykpIHtcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT5DQ09GPC9mb250PiZuYnNwOycgKyAn5paH5Lu257G75Z6L77yaJyArIHR5cGUgKyAn77yM5paH5Lu25aSn5bCP77yaJyArIGJ5dGVzVG9TaXplKGl0LnNpemUpLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KG11cmwpXFxcXG4gICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICByZXR1cm4gZFxcXFxuICAgIH1cXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLlt6XlhbdcXFwiLFxcXCJwYXRoXFxcIjpcXFwidG9vbHNcXFwiLFxcXCJydWxlXFxcIjpcXFwiZnVuY3Rpb24gYnl0ZXNUb1NpemUoc2l6ZSkge1xcXFxuICAgIGlmIChzaXplIDwgMC4xICogMTAyNCkge1xcXFxuICAgICAgICAvL+Wwj+S6jjAuMUtC77yM5YiZ6L2s5YyW5oiQQlxcXFxuICAgICAgICBzaXplID0gc2l6ZS50b0ZpeGVkKDIpICsgXFxcXFxcXCJCXFxcXFxcXCI7XFxcXG4gICAgfSBlbHNlIGlmIChzaXplIDwgMC4xICogMTAyNCAqIDEwMjQpIHtcXFxcbiAgICAgICAgLy8g5bCP5LqOMC4xTULvvIzliJnovazljJbmiJBLQlxcXFxuICAgICAgICBzaXplID0gKHNpemUgLyAxMDI0KS50b0ZpeGVkKDIpICsgXFxcXFxcXCJLQlxcXFxcXFwiO1xcXFxuICAgIH0gZWxzZSBpZiAoc2l6ZSA8IDAuMSAqIDEwMjQgKiAxMDI0ICogMTAyNCkge1xcXFxuICAgICAgICAvLyDlsI/kuo4wLjFHQu+8jOWImei9rOWMluaIkE1CXFxcXG4gICAgICAgIHNpemUgPSAoc2l6ZSAvICgxMDI0ICogMTAyNCkpLnRvRml4ZWQoMikgKyBcXFxcXFxcIk1CXFxcXFxcXCI7XFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgLy8g5YW25LuW6L2s5YyW5oiQR0JcXFxcbiAgICAgICAgc2l6ZSA9IChzaXplIC8gKDEwMjQgKiAxMDI0ICogMTAyNCkpLnRvRml4ZWQoMikgKyBcXFxcXFxcIkdCXFxcXFxcXCI7XFxcXG4gICAgfVxcXFxuICAgIC8vIOi9rOaIkOWtl+espuS4slxcXFxuICAgIGxldCBzaXplU3RyID0gc2l6ZSArIFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgIC8vIOiOt+WPluWwj+aVsOeCueWkhOeahOe0ouW8lVxcXFxuICAgICAgICBpbmRleCA9IHNpemVTdHIuaW5kZXhPZihcXFxcXFxcIi5cXFxcXFxcIiksXFxcXG4gICAgICAgIC8vIOiOt+WPluWwj+aVsOeCueWQjuS4pOS9jeeahOWAvFxcXFxuICAgICAgICBkb3UgPSBzaXplU3RyLnN1YnN0cihpbmRleCArIDEsIDIpO1xcXFxuICAgIC8vIOWIpOaWreWQjuS4pOS9jeaYr+WQpuS4ujAw77yM5aaC5p6c5piv5YiZ5Yig6ZmkMDBcXFxcbiAgICBpZiAoZG91ID09PSBcXFxcXFxcIjAwXFxcXFxcXCIpIHJldHVybiBzaXplU3RyLnN1YnN0cmluZygwLCBpbmRleCkgKyBzaXplU3RyLnN1YnN0cihpbmRleCArIDMsIDIpO1xcXFxuICAgIHJldHVybiBzaXplO1xcXFxufVxcXFxuJC5leHBvcnRzLmJ5dGVzVG9TaXplID0gYnl0ZXNUb1NpemU7XFxcXG4kLmV4cG9ydHMuY29sb3IgPSBmdW5jdGlvbih0ZXh0LCBjb2xvcikge1xcXFxuICAgIHRleHQgKz0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICBpZiAodGV4dC5pbmRleE9mKFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIpID09PSAwKSB7XFxcXG4gICAgICAgIHRleHQucmVwbGFjZShcXFxcXFxcIuKAnOKAnOKAneKAnVxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIFxcXFxcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9J1xcXFxcXFwiICsgY29sb3IgKyBcXFxcXFxcIic+XFxcXFxcXCIgKyB0ZXh0ICsgXFxcXFxcXCI8L2ZvbnQ+XFxcXFxcXCI7XFxcXG59XFxcXG5cXFxcbiQuZXhwb3J0cy5zbGVlcCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHtcXFxcbiAgICBqYXZhLmxhbmcuVGhyZWFkLnNsZWVwKHRpbWVvdXQpO1xcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiBodG1sVGFnKHRhZywgdGV4dCkge1xcXFxuICAgIHRleHQgKz0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICBpZiAodGV4dC5pbmRleE9mKFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIpID09PSAwKSB7XFxcXG4gICAgICAgIHRleHQucmVwbGFjZShcXFxcXFxcIuKAnOKAnOKAneKAnVxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIgKyBcXFxcXFxcIjxcXFxcXFxcIiArIHRhZyArIFxcXFxcXFwiPlxcXFxcXFwiICsgdGV4dCArIFxcXFxcXFwiPC9cXFxcXFxcIiArIHRhZyArIFxcXFxcXFwiPlxcXFxcXFwiO1xcXFxuXFxcXG59XFxcXG4kLmV4cG9ydHMuaHRtbFRhZyA9IGh0bWxUYWc7XFxcXG4kLmV4cG9ydHMuc21hbGwgPSBmdW5jdGlvbih0ZXh0KSB7XFxcXG4gICAgcmV0dXJuIGh0bWxUYWcoXFxcXFxcXCJzbWFsbFxcXFxcXFwiLCB0ZXh0KTtcXFxcbn1cXFxcblxcXFxuZnVuY3Rpb24gZ2V0VGltZShmaWxlLGlzU3RhbmRhcmQpIHtcXFxcbiAgICBpc1N0YW5kYXJkID0gaXNTdGFuZGFyZHx8ZmFsc2U7XFxcXG4gICAgbGV0IHRUaW1lID0gZmlsZS51cGRhdGVkX2F0IHx8IGZpbGUudGltZV9zdHIgfHwgXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICB0VGltZSA9IHRUaW1lLnNwbGl0KFxcXFxcXFwiVFxcXFxcXFwiKTtcXFxcbiAgICBsZXQgZGF0ZSA9IHRUaW1lWzBdO1xcXFxuICAgIGlmKGlzU3RhbmRhcmQpe1xcXFxuICAgICAgICBkYXRlID0gZGF0ZS5yZXBsYWNlKC8tL2csXFxcXFxcXCIvXFxcXFxcXCIpO1xcXFxuICAgIH1cXFxcbiAgICB0VGltZSA9IHRUaW1lWzFdLnNwbGl0KC9afFxcXFxcXFxcLi8pO1xcXFxuICAgIGRhdGUgKz0gXFxcXFxcXCIgXFxcXFxcXCIgKyB0VGltZVswXTtcXFxcbiAgICByZXR1cm4gZGF0ZTtcXFxcbn1cXFxcbmZ1bmN0aW9uIGdldFRpbWVJbnQodGltZVN0cil7XFxcXG4gICAgcmV0dXJuIChuZXcgRGF0ZSh0aW1lU3RyKSkuZ2V0VGltZSgpXFxcXG59XFxcXG4kLmV4cG9ydHMuZ2V0VGltZSA9IGdldFRpbWU7XFxcXG5cXFxcbmxldCBjaG5OdW1DaGFyID0ge1xcXFxuICAgIOmbtjogMCxcXFxcbiAgICDkuIA6IDEsXFxcXG4gICAg5LqMOiAyLFxcXFxuICAgIOS4iTogMyxcXFxcbiAgICDlm5s6IDQsXFxcXG4gICAg5LqUOiA1LFxcXFxuICAgIOWFrTogNixcXFxcbiAgICDkuIM6IDcsXFxcXG4gICAg5YWrOiA4LFxcXFxuICAgIOS5nTogOVxcXFxufTtcXFxcblxcXFxubGV0IGNobk5hbWVWYWx1ZSA9IHtcXFxcbiAgICDljYE6IHtcXFxcbiAgICAgICAgdmFsdWU6IDEwLFxcXFxuICAgICAgICBzZWNVbml0OiBmYWxzZVxcXFxuICAgIH0sXFxcXG4gICAg55m+OiB7XFxcXG4gICAgICAgIHZhbHVlOiAxMDAsXFxcXG4gICAgICAgIHNlY1VuaXQ6IGZhbHNlXFxcXG4gICAgfSxcXFxcbiAgICDljYM6IHtcXFxcbiAgICAgICAgdmFsdWU6IDEwMDAsXFxcXG4gICAgICAgIHNlY1VuaXQ6IGZhbHNlXFxcXG4gICAgfSxcXFxcbiAgICDkuIc6IHtcXFxcbiAgICAgICAgdmFsdWU6IDEwMDAwLFxcXFxuICAgICAgICBzZWNVbml0OiB0cnVlXFxcXG4gICAgfSxcXFxcbiAgICDkur86IHtcXFxcbiAgICAgICAgdmFsdWU6IDEwMDAwMDAwMCxcXFxcbiAgICAgICAgc2VjVW5pdDogdHJ1ZVxcXFxuICAgIH1cXFxcbn1cXFxcblxcXFxuZnVuY3Rpb24gQ2hpbmVzZVRvTnVtYmVyKGNoblN0cikge1xcXFxuICAgIGxldCBydG4gPSAwO1xcXFxuICAgIGxldCBzZWN0aW9uID0gMDtcXFxcbiAgICBsZXQgbnVtYmVyID0gMDtcXFxcbiAgICBsZXQgc2VjVW5pdCA9IGZhbHNlO1xcXFxuICAgIGxldCBzdHIgPSBjaG5TdHIuc3BsaXQoJycpO1xcXFxuXFxcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgbGV0IG51bSA9IGNobk51bUNoYXJbc3RyW2ldXTtcXFxcbiAgICAgICAgaWYgKHR5cGVvZiBudW0gIT09ICd1bmRlZmluZWQnKSB7XFxcXG4gICAgICAgICAgICBudW1iZXIgPSBudW07XFxcXG4gICAgICAgICAgICBpZiAoaSA9PT0gc3RyLmxlbmd0aCAtIDEpIHtcXFxcbiAgICAgICAgICAgICAgICBzZWN0aW9uICs9IG51bWJlcjtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGxldCB1bml0ID0gY2huTmFtZVZhbHVlW3N0cltpXV0udmFsdWU7XFxcXG4gICAgICAgICAgICBzZWNVbml0ID0gY2huTmFtZVZhbHVlW3N0cltpXV0uc2VjVW5pdDtcXFxcbiAgICAgICAgICAgIGlmIChzZWNVbml0KSB7XFxcXG4gICAgICAgICAgICAgICAgc2VjdGlvbiA9IChzZWN0aW9uICsgbnVtYmVyKSAqIHVuaXQ7XFxcXG4gICAgICAgICAgICAgICAgcnRuICs9IHNlY3Rpb247XFxcXG4gICAgICAgICAgICAgICAgc2VjdGlvbiA9IDA7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHNlY3Rpb24gKz0gKG51bWJlciAqIHVuaXQpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgbnVtYmVyID0gMDtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gcnRuICsgc2VjdGlvbjtcXFxcbn1cXFxcblxcXFxuZnVuY3Rpb24gbmFtZUNvbXBhcmUoYSwgYikge1xcXFxuICAgIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKVxcXFxuICAgICAgICByZXR1cm4gYSA9PSBudWxsID8gYiA9PSBudWxsID8gMCA6IC0xIDogMTtcXFxcblxcXFxuICAgIGEgPSBhLnJlcGxhY2UoLyhb6Zu25LiA5LqM5LiJ5Zub5LqU5YWt5LiD5YWr5Lmd5Y2B55m+5Y2D5LiH5Lq/XSkvZywgZnVuY3Rpb24obWF0Y2gsIHAxLCBwMiwgcDMsIG9mZnNldCwgc3RyaW5nKSB7XFxcXG4gICAgICAgIC8vIHAxIGlzIG5vbmRpZ2l0cywgcDIgZGlnaXRzLCBhbmQgcDMgbm9uLWFscGhhbnVtZXJpY3NcXFxcbiAgICAgICAgcmV0dXJuIENoaW5lc2VUb051bWJlcihwMSk7XFxcXG4gICAgfSlcXFxcbiAgICBiID0gYi5yZXBsYWNlKC8oW+mbtuS4gOS6jOS4ieWbm+S6lOWFreS4g+WFq+S5neWNgeeZvuWNg+S4h+S6v10pL2csIGZ1bmN0aW9uKG1hdGNoLCBwMSwgcDIsIHAzLCBvZmZzZXQsIHN0cmluZykge1xcXFxuICAgICAgICAvLyBwMSBpcyBub25kaWdpdHMsIHAyIGRpZ2l0cywgYW5kIHAzIG5vbi1hbHBoYW51bWVyaWNzXFxcXG4gICAgICAgIHJldHVybiBDaGluZXNlVG9OdW1iZXIocDEpO1xcXFxuICAgIH0pXFxcXG5cXFxcbiAgICBsZXQgTlVNQkVSUyA9IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuLmNvbXBpbGUoXFxcXFxcXCIoPzw9XFxcXFxcXFxcXFxcXFxcXEQpKD89XFxcXFxcXFxcXFxcXFxcXGQpfCg/PD1cXFxcXFxcXFxcXFxcXFxcZCkoPz1cXFxcXFxcXFxcXFxcXFxcRClcXFxcXFxcIilcXFxcbiAgICBsZXQgc3BsaXQxID0gTlVNQkVSUy5zcGxpdChuZXcgamF2YS5sYW5nLlN0cmluZyhhKSk7XFxcXG4gICAgbGV0IHNwbGl0MiA9IE5VTUJFUlMuc3BsaXQobmV3IGphdmEubGFuZy5TdHJpbmcoYikpO1xcXFxuXFxcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1pbihzcGxpdDEubGVuZ3RoLCBzcGxpdDIubGVuZ3RoKTsgaSsrKSB7XFxcXG4gICAgICAgIGxldCBjMSA9IHNwbGl0MVtpXS5jaGFyQ29kZUF0KDApO1xcXFxuICAgICAgICBsZXQgYzIgPSBzcGxpdDJbaV0uY2hhckNvZGVBdCgwKTtcXFxcbiAgICAgICAgbGV0IGNtcCA9IDA7XFxcXG4gICAgICAgIGxldCB6ZXJvQ2hhckNvZGUgPSAnMCcuY2hhckNvZGVBdCgwKTtcXFxcbiAgICAgICAgbGV0IG5pbmVDaGFyQ29kZSA9ICc5Jy5jaGFyQ29kZUF0KDApO1xcXFxuXFxcXG4gICAgICAgIGlmIChjMSA+PSB6ZXJvQ2hhckNvZGUgJiYgYzEgPD0gbmluZUNoYXJDb2RlICYmIGMyID49IHplcm9DaGFyQ29kZSAmJiBjMiA8PSBuaW5lQ2hhckNvZGUpIHtcXFxcbiAgICAgICAgICAgIGNtcCA9IG5ldyBqYXZhLm1hdGguQmlnSW50ZWdlcihzcGxpdDFbaV0pLmNvbXBhcmVUbyhuZXcgamF2YS5tYXRoLkJpZ0ludGVnZXIoc3BsaXQyW2ldKSk7XFxcXG4gICAgICAgIH1cXFxcblxcXFxuICAgICAgICBpZiAoY21wID09PSAwKSB7XFxcXG4gICAgICAgICAgICBsZXQgcmVnZXggPSAvW2EtekEtWjAtOV0vXFxcXG4gICAgICAgICAgICBsZXQgczEgPSBTdHJpbmcoc3BsaXQxW2ldKVxcXFxuICAgICAgICAgICAgbGV0IHMyID0gU3RyaW5nKHNwbGl0MltpXSlcXFxcbiAgICAgICAgICAgIGlmIChyZWdleC50ZXN0KHMxKSB8fCByZWdleC50ZXN0KHMyKSkge1xcXFxuICAgICAgICAgICAgICAgIGNtcCA9IG5ldyBqYXZhLmxhbmcuU3RyaW5nKHNwbGl0MVtpXSkuY29tcGFyZVRvKG5ldyBqYXZhLmxhbmcuU3RyaW5nKHNwbGl0MltpXSkpO1xcXFxuICAgICAgICAgICAgICAgIC8vIGNtcCA9IHMxLmxvY2FsZUNvbXBhcmUoczIsICdlbicpXFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIGNtcCA9IHMxLmxvY2FsZUNvbXBhcmUoczIsICd6aCcpXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcblxcXFxuICAgICAgICBpZiAoY21wICE9PSAwKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gY21wO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIGxldCBsZW5ndGhDbXAgPSBzcGxpdDEubGVuZ3RoIC0gc3BsaXQyLmxlbmd0aDtcXFxcbiAgICAvLyBpZiAobGVuZ3RoQ21wICE9PSAwKSBsZW5ndGhDbXAgPSBsZW5ndGhDbXAgPiAwID8gLTEgOiAxO1xcXFxuICAgIHJldHVybiBsZW5ndGhDbXA7XFxcXG59XFxcXG5cXFxcbiQuZXhwb3J0cy5zb3J0cyA9IGZ1bmN0aW9uKGxpc3QsIHNvcnQpIHtcXFxcbiAgICBpZiAoc29ydCA9PT0gXFxcXFxcXCLnsbvlnotcXFxcXFxcIikge1xcXFxuICAgICAgICAvLyBsb2coXFxcXFxcXCLnsbvlnovmjpLluo9cXFxcXFxcIik7XFxcXG4gICAgICAgIGxpc3Quc29ydChmdW5jdGlvbihhLCBiKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gYS50eXBlIC0gYi50eXBlXFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH0gZWxzZSBpZiAoc29ydCA9PT0gXFxcXFxcXCLlkI3np7BcXFxcXFxcIikge1xcXFxuICAgICAgICAvLyBsb2coXFxcXFxcXCLlkI3np7DmjpLluo9cXFxcXFxcIik7XFxcXG4gICAgICAgIC8vIGxpc3Quc29ydChmdW5jdGlvbihhLCBiKSB7XFxcXG4gICAgICAgIC8vICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lLCBcXFxcXFxcInpoXFxcXFxcXCIpXFxcXG4gICAgICAgIC8vIH0pO1xcXFxuICAgICAgICBsaXN0LnNvcnQoZnVuY3Rpb24oYSwgYikge1xcXFxuICAgICAgICAgICAgcmV0dXJuIG5hbWVDb21wYXJlKGEubmFtZXx8YS50aXRsZSwgYi5uYW1lfHxiLnRpdGxlKTtcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfSBlbHNlIGlmIChzb3J0ID09PSBcXFxcXFxcIuWkp+Wwj1xcXFxcXFwiKSB7XFxcXG4gICAgICAgIC8vIGxvZyhcXFxcXFxcIuWkp+Wwj+aOkuW6j1xcXFxcXFwiKTtcXFxcbiAgICAgICAgbGlzdC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiAoYS5zaXplIHx8IE51bWJlcihhLnNpemVfc3RyKSB8fCAwKSAtIChiLnNpemUgfHwgTnVtYmVyKGIuc2l6ZV9zdHIpIHx8IDApO1xcXFxuICAgICAgICB9KTtcXFxcbiAgICB9ZWxzZSBpZiAoc29ydCA9PT0gXFxcXFxcXCLml7bpl7RcXFxcXFxcIikge1xcXFxuICAgICAgICAvLyBsb2coXFxcXFxcXCLml7bpl7TmjpLluo9cXFxcXFxcIik7XFxcXG4gICAgICAgIGxpc3Quc29ydChmdW5jdGlvbihhLCBiKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gZ2V0VGltZUludChnZXRUaW1lKGEsdHJ1ZSkpIC0gZ2V0VGltZUludChnZXRUaW1lKGIsdHJ1ZSkpXFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gbGlzdFxcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiBzaW1pbGFyKHMsIHQsIGYpIHsvL+WIpOaWreS4pOS4quWtl+espuS4suS5i+mXtOeahOebuOS8vOW6plxcXFxuICAgIGlmICghcyB8fCAhdCkge1xcXFxuICAgICAgICByZXR1cm4gMFxcXFxuICAgIH1cXFxcbiAgICBpZihzID09PSB0KXtcXFxcbiAgICAgICAgcmV0dXJuIDEwMDtcXFxcbiAgICB9XFxcXG4gICAgdmFyIGwgPSBzLmxlbmd0aCA+IHQubGVuZ3RoID8gcy5sZW5ndGggOiB0Lmxlbmd0aFxcXFxuICAgIHZhciBuID0gcy5sZW5ndGhcXFxcbiAgICB2YXIgbSA9IHQubGVuZ3RoXFxcXG4gICAgdmFyIGQgPSBbXVxcXFxuICAgIGYgPSBmIHx8IDJcXFxcbiAgICB2YXIgbWluID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcXFxcbiAgICAgICAgcmV0dXJuIGEgPCBiID8gKGEgPCBjID8gYSA6IGMpIDogKGIgPCBjID8gYiA6IGMpXFxcXG4gICAgfVxcXFxuICAgIHZhciBpLCBqLCBzaSwgdGosIGNvc3RcXFxcbiAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG1cXFxcbiAgICBpZiAobSA9PT0gMCkgcmV0dXJuIG5cXFxcbiAgICBmb3IgKGkgPSAwOyBpIDw9IG47IGkrKykge1xcXFxuICAgICAgICBkW2ldID0gW11cXFxcbiAgICAgICAgZFtpXVswXSA9IGlcXFxcbiAgICB9XFxcXG4gICAgZm9yIChqID0gMDsgaiA8PSBtOyBqKyspIHtcXFxcbiAgICAgICAgZFswXVtqXSA9IGpcXFxcbiAgICB9XFxcXG4gICAgZm9yIChpID0gMTsgaSA8PSBuOyBpKyspIHtcXFxcbiAgICAgICAgc2kgPSBzLmNoYXJBdChpIC0gMSlcXFxcbiAgICAgICAgZm9yIChqID0gMTsgaiA8PSBtOyBqKyspIHtcXFxcbiAgICAgICAgICAgIHRqID0gdC5jaGFyQXQoaiAtIDEpXFxcXG4gICAgICAgICAgICBpZiAoc2kgPT09IHRqKSB7XFxcXG4gICAgICAgICAgICAgICAgY29zdCA9IDBcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgY29zdCA9IDFcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGRbaV1bal0gPSBtaW4oZFtpIC0gMV1bal0gKyAxLCBkW2ldW2ogLSAxXSArIDEsIGRbaSAtIDFdW2ogLSAxXSArIGNvc3QpXFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgbGV0IHJlcyA9ICgxIC0gZFtuXVttXSAvIGwpICoxMDBcXFxcbiAgICByZXR1cm4gcmVzLnRvRml4ZWQoZilcXFxcbn1cXFxcblxcXFxuJC5leHBvcnRzLnNpbWlsYXIgPSBzaW1pbGFyO1xcXFxuJC5leHBvcnRzLnJlbW92ZUV4dCA9IGZ1bmN0aW9uIChmaWxlKXtcXFxcbiAgICByZXR1cm4gZmlsZS5zcGxpdCgnLicpLnNsaWNlKDAsLTEpLmpvaW4oJy4nKVxcXFxufTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJ1XFxcIixcXFwicGF0aFxcXCI6XFxcInVcXFwiLFxcXCJydWxlXFxcIjpcXFwiJC5leHBvcnRzID0gZnVuY3Rpb24ocnVsZSwgb3JpZ2luLCBtb2RlKSB7XFxcXG4gICAgcmV0dXJuICQudG9TdHJpbmcoKHJ1bGUsIG9yaWdpbiwgbW9kZSkgPT4ge1xcXFxuICAgICAgICBsZXQgaG9zdCA9IG9yaWdpbi5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcXFxcXCJodHRwOi8vfGh0dHBzOi8vXFxcXFxcXCIpLCBcXFxcXFxcIlxcXFxcXFwiKS5zcGxpdChcXFxcXFxcIi9cXFxcXFxcIilbMF07XFxcXG4gICAgICAgIGxldCBob3N0cyA9IGhvc3Quc3BsaXQoXFxcXFxcXCIuXFxcXFxcXCIpO1xcXFxuICAgICAgICBpZiAoaG9zdHMubGVuZ3RoID4gMikge1xcXFxuICAgICAgICAgICAgaG9zdCA9IGhvc3RzW2hvc3RzLmxlbmd0aCAtIDJdICsgXFxcXFxcXCIuXFxcXFxcXCIgKyBob3N0c1tob3N0cy5sZW5ndGggLSAxXTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aChcXFxcXFxcIm1hZ25ldFxcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgY29uZmlybSh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5rip6aao5o+Q56S6XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgY29udGVudDogXFxcXFxcXCLmo4DmtYvliLDmlrDnmoTno4Hpk77lnLDlnYDvvIzngrnlh7vnoa7lrprmjInpkq7ljbPlj6/mkq3mlL7vvIzngrnlh7vlj5bmtojmjInpkq7lj6/ku6XlpI3liLbpk77mjqVcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBjb25maXJtOiAkLnRvU3RyaW5nKChtYWcpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hZztcXFxcbiAgICAgICAgICAgICAgICB9LCBpbnB1dCksXFxcXG4gICAgICAgICAgICAgICAgY2FuY2VsOiAkLnRvU3RyaW5nKChtYWcpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiY29weTovL1xcXFxcXFwiICsgbWFnXFxcXG4gICAgICAgICAgICAgICAgfSwgaW5wdXQpXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XFxcXG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQuaW5jbHVkZXMoXFxcXFxcXCJhbGl5dW5kcml2ZS5jb21cXFxcXFxcIikgJiYgbW9kZSAhPSBcXFxcXFxcIuWumOaWuUFQUFxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICBsb2coaW5wdXQpO1xcXFxuICAgICAgICAgICAgcmV0dXJuICQudG9TdHJpbmcoKHVybCwgcnVsZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAub3BlbihKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIumYv+mHjOS6keebmFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9XFxcXFxcXCIgKyB1cmwgKyAnPz9meXBhZ2UnLFxcXFxuICAgICAgICAgICAgICAgIH0pKVxcXFxuICAgICAgICAgICAgfSwgaW5wdXQsIHJ1bGUpXFxcXG4gICAgICAgIH0gZWxzZSBpZiAoL1xcXFxcXFxcLihtcDN8ZmxhY3xtNGEpJC8udGVzdChpbnB1dCkpIHtcXFxcbiAgICAgICAgICAgIGxvZyhpbnB1dCk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJC50b1N0cmluZygodXJsLCBydWxlKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5wbGF5VmlkZW8odXJsKTtcXFxcbiAgICAgICAgICAgIH0sIGlucHV0LCBydWxlKVxcXFxuICAgICAgICB9IGVsc2UgaWYgKCFpbnB1dC5pbmNsdWRlcyhob3N0KSAmJiBpbnB1dC5zdGFydHNXaXRoKFxcXFxcXFwiaHR0cFxcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgbG9nKGlucHV0KTtcXFxcbiAgICAgICAgICAgIHJldHVybiAkLnRvU3RyaW5nKCh1cmwsIHJ1bGUsIG1vZGUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLor6bmg4VcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS95c2Z4P3J1bGU9XFxcXFxcXCIgKyBydWxlICsgXFxcXFxcXCImcj1cXFxcXFxcIiArIHJ1bGUgKyBcXFxcXFxcIiZtb2RlPVxcXFxcXFwiICsgbW9kZSArIFxcXFxcXFwiIyNcXFxcXFxcIiArIHVybCxcXFxcbiAgICAgICAgICAgICAgICB9KSlcXFxcbiAgICAgICAgICAgIH0sIGlucHV0LCBydWxlLCBtb2RlKTtcXFxcbiAgICAgICAgfSBlbHNlIGlmICghaW5wdXQuc3RhcnRzV2l0aChcXFxcXFxcImh0dHBcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgIGxvZyhpbnB1dCk7XFxcXG4gICAgICAgICAgICAvL+iDveWUpOi1t0FQUOeahOeZveWQjeWNlVxcXFxuICAgICAgICAgICAgbGV0IHdoaXRlID0gW1xcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwicWtsaW5rXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJiZG5ldGRpc2tcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcInh1bmxlaWFwcFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwic21hcnRkcml2ZVxcXFxcXFwiXFxcXG4gICAgICAgICAgICBdO1xcXFxuICAgICAgICAgICAgbGV0IGluV2hpdGUgPSB3aGl0ZS5maWx0ZXIoaXQgPT4gaW5wdXQuc3RhcnRzV2l0aChpdCkpLmxlbmd0aCA+IDA7XFxcXG4gICAgICAgICAgICBpZiAoIWluV2hpdGUpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICByZXR1cm4gJC50b1N0cmluZygodXJsLCBydWxlKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5vcGVuVGhpcmRBcHAgJiYgZnlfYnJpZGdlX2FwcC5vcGVuVGhpcmRBcHAodXJsKTtcXFxcbiAgICAgICAgICAgIH0sIGlucHV0LCBydWxlKVxcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuXFxcXG4gICAgICAgIH1cXFxcbiAgICB9LCBydWxlLCBvcmlnaW4sIG1vZGUpO1xcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcInlzZnhcXFwiLFxcXCJwYXRoXFxcIjpcXFwieXNmeFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG5sZXQgcnVsZSA9IGdldFBhcmFtKFxcXFxcXFwiclxcXFxcXFwiKS5zcGxpdChcXFxcXFxcIiMjXFxcXFxcXCIpWzBdO1xcXFxubGV0IG1vZGUgPSAoZ2V0UGFyYW0oXFxcXFxcXCJtb2RlXFxcXFxcXCIpIHx8IFxcXFxcXFwiXFxcXFxcXCIpLnNwbGl0KFxcXFxcXFwiIyNcXFxcXFxcIilbMF07XFxcXG5sZXQgdXJsID0gTVlfVVJMLnNwbGl0KFxcXFxcXFwiIyNcXFxcXFxcIilbMV07XFxcXG5sZXQgaXRlID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3VcXFxcXFxcIikocnVsZSwgZ2V0SG9tZSh1cmwpLCBtb2RlKTtcXFxcbmxldCBqcyA9ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgIHRyeSB7XFxcXG4gICAgICAgIGlmIChkb2N1bWVudC50aXRsZSAmJiBkb2N1bWVudC50aXRsZS5sZW5ndGgpIHtcXFxcbiAgICAgICAgICAgIGxldCByID0gJCQkKCkubGF6eVJ1bGUoKHQpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBzZXRQYWdlVGl0bGUodCk7XFxcXG4gICAgICAgICAgICB9LCBkb2N1bWVudC50aXRsZSk7XFxcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLnBhcnNlTGF6eVJ1bGUocik7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgIGZ5X2JyaWRnZV9hcHAubG9nKGUudG9TdHJpbmcoKSk7XFxcXG4gICAgfVxcXFxufSk7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIHVybDogdXJsLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcIng1X3dlYnZpZXdfc2luZ2xlXFxcXFxcXCIsXFxcXG4gICAgZGVzYzogXFxcXFxcXCIxMDAlJiZmbG9hdFxcXFxcXFwiLFxcXFxuICAgIHBpY191cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgZXh0cmE6IHtcXFxcbiAgICAgICAgdXJsSW50ZXJjZXB0b3I6IGl0ZSxcXFxcbiAgICAgICAganM6IGpzLFxcXFxuICAgICAgICBjYW5CYWNrOiB0cnVlLFxcXFxuICAgICAgICBqc0xvYWRpbmdJbmplY3Q6IHRydWUsXFxcXG4gICAgICAgIGZsb2F0VmlkZW86IHRydWVcXFxcbiAgICB9XFxcXG59KTtcXFxcbmQucHVzaCh7XFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFwibGluZVxcXFxcXFwiLFxcXFxuICAgIGV4dHJhOiB7XFxcXG4gICAgICAgIGlkOiB1cmxcXFxcbiAgICB9XFxcXG59KTtcXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLpmL/ph4xsYXp5XFxcIixcXFwicGF0aFxcXCI6XFxcImFsaWxhenlcXFwiLFxcXCJydWxlXFxcIjpcXFwiZXZhbFByaXZhdGVKUyhcXFxcXFxcInJPKzM3dUcrYjJKYmw5MUpYZTFBTGFjQWNSSzF4aWtLTlNmeDNPSk52OU1BS3Bjd0ZLRUxxdjJGUUVxNTE4L1psWkNkek05dkduemMvcEkzTHpmT3lhQlZ3TXorZEFjWi9zamd3ZHI5K2FoTjJ6cHpIbzhkRE9kNks5eGFSV01mREN6eTczZ1JQdGFrQUhKQTNtTlJXMnB1UFNyU1RCTUIya1VHcUVHdVVOV2tNMXBIQTFqb3VTV3JyQU1ia09FSVVLYjJZUUozZUlyVVMyc3NUNzRXd2VqdjBpcnhWWjhSVGhVZ3B6QVNZNTV1UHQ3VmdpVlZpaUVYRmNKL3ZwOXhld1lXNUtFdGdjM3ZFeGNUVjh6dlA4Y3lIMDFwZEYyS1BHc2cwSEx3QkU0STlROXUxVGdDT0ZqYU5mWk5rYXhaUVoyVm5QbFoxck55dExjcGFEY2YyTS9qclRkLytubXNtV3Jraml0dXE4eEk2ZkNUbDBKNmUwSHdIemZ0UThYRmRVRmVqS3hXREZwaTEwempRNG4vckNRKzRTN09OWlpUcllkaVh5UGU0UTNtZ3pKN1FaNDc1UDNOcEtPNmdMbGlKdnA3TkhzUFcvQUgrcGZYQlhCd2RSaXZDNmhORzV1UDZCZzhnbWlOMUdUc1JNWHc3TGhvckZKd1dEWlJBOVlMbFh2S1JidjVZWXRwRk1UNU9aQ2c5cHJFamFnWVovL3VkS3p5K3hCU2hBMTMzRDVSYW0rUDN5cUtxakxrd3RRVVpKeXhaRTg2YjY2MHZYMkNiaGJ4U1k4SkZFM2cxWHM0dmdXMFdDNThhRFJPTEF5aFpwMGVpN25tS2tQRmxhUVk4dWpNd3RkOCtVWlRWMTNZT2lpZG9Lc2hYcXZISlZJZkU1cS8yN2Z2eUd1MmhLZkoybkphYXR3cG5pWHFSSXU0OWMwZmxSUk92VU1tMUxIVytUb0pRczBLMHBaTXd4M0pKRnkrYUptbDRUTlViOE1MVDhXS2crWlpMcTZtMFBBV3c4Z2RnSXRMRGEyYURUL1FzK0F3d1N2azFRK0NHclFEc3pveG5xR3BkSml6YkRWVFFrSmNXNTNJZEoraVNVUVFIQ011TTFVWWZwZEFKd2M0RDMrajMwU2NIdW5IMy9iTkJmWXduMDQvS0h2N3laU3lGYzA2UjJ3OG5nRE1SbmNmSVByak42YnN6QkVBY0swcFY0QXRnaHJKQWRwQ3JQUkN3NE1mVUxKZzY2cXhWNEtWMUZrYk9IWTZnMDZDcXpkaTl0QmdmZDM0THpmZEtkSDFWb2R0NEs2N2dQbnRYbWJVOENVVHMySFJGbHdmQ2ZxQm1RdEZEaVQzRnFOUEZIWGszb0pFK3NPSXRTcnZVZHUrYnQ0cEZ5bG5lZUdsSVNzWDZtSE9IZms1QlpwOUVXT01rakE2RG1icFpmcUJvajQvckprMWNIYnZmTUxKL25XN0h4a3ZkYndqZmVIcjlyTG5FckQ4K09oTVByMkZDbHVDWEs4czhmUkx2blZWUnVMODNjZDVNSkRlUEdYbmhIZkppY004ZThzcnkwaldWblA3Q0ovNzFrZ0IxUFlPb09hNlljQm5kL0Vvc3Q5U09lc25lK1lrdG5QYUhQeGZ2Mi9Hd2JaczdRS2d0elovVm5jdHA4MGpSTEJ3Q050RFpOQXp3M3Z4MXl2TDZ5NFBQTGUzc1F3MHRiUnhQcC8vTnEwdFZITmxTYXNFbVBEM0d3KytqazU0VnVSZWJ5U0hrWWxTR082Q3FENGM2Z3p3MWJHUllERG5FK2hDZHVJL2d4bExmc3NTWjIyVm0ySGtWeGd2UUc4L2NOd25BSVZYRGNEOXBwYWZNK0lzdXZDRFo0VWRTczdLMnV6SjRiVWk5UE9xMEFScjZyRU1OTFcwY1Q2Zi96YXRMVlJ6WlVsZEdVQSt0QXdCWGVBeEpSenV3UStRNVJvbzdzTndXajlTdDc2SWFPd09ZSktrYVFwNVZ5TGRhMHN4d1NvNXcrZHdHZCtjbWU5UlRETWIvZUNCV1FmeVdtVGNTay82VUxuUHdOVkZuVVhORmsyUFBQS1NSVWZNeUs3eHlWOG1PK3VhY0pMMlBpSmpsNW56Q0tiSnoxd2FDbm8rZjJMNFE1Vy8xWEsvOGpVNTdXVGszcmlXaTJ1T1dRV1lQcFY1dm1GL1l6VHVXWHhOYjZ6V3FiYjlqN2k5cFY0L3l4OE50L2FPVUZ1ZEpGaVR2OG04cVpsc0tyV0R3SDdIK3owRWhSOFV4WDVaQ0w1TU16UnViUjhsRFJFUk1SbzRROXdnSXZueFl2ZGNVMEF3djZIYk9ubGNObHFBRUtreEVSTG9xVHltdmErakhCM2ZLeWNUcm9JWFVuUWtINGhwM0lpRVRhdHUxMXp6YS84eld6bFhDbGxKSVRSSTVwQisvYzh6cytTMlErZ1NqZUJRcGpKcHprbzJCSlI3eHBOTHIzR3VDVWJXNTlDTURwdFRtWEd0bE1qNU8yc1F2ajBBNldlNEd6cjJ4NGY5dE5ab1NnRXg2ektQL0grSGFpU1gzcnNHQ3VQcnB0Q0FPTkZiYnhwQlpacnVNbmNFbUtuV21XK09OQjMxVjdoWWlVYVc1Sm5VcVk5aHo4Q1FBVkFkZFBqWFBNSUFQVitCTkNmbnNORlhXdjhld2FuUEl6ZTM3QVM5MzRpQmdsNEdPV2J0NHNuL0ZGR0hPN0lkWFc0Zk9Xa24xdTVRQnVZcy9VM0I0NEgyN05JZ1R1T2MvS2NhRDE0ODdmcFZ2dDdPZnNPblV6OXQwTWxzVWRsTUpGM2poK3czcEVMZXhYOWNTUXpvMmNzcnkwaldWblA3Q0ovNzFrZ0IxUFlGeGZkTnRKOTNuQXRRQjJWVk9FWDdjUEk3VytLSDc4M1hvV3I0bXdqQTJTdk5EQWZBTTV3ajI0VUlMWElOUjJNVHdiT0padDdPencvSXRaMHN1VkJ6WTUwTFhSMHM4TGV1NDFOT0xpMjNPWEpuYTU2TWhIdGpIaFQzWHJ1NDB3c2tWeG11cS9tbS9wcWxYWk5uV3VNek8rUlQ0UDlObVNQNVZtTXdKai9xRkhUb1FxbXRzclQvaHllOUJvcGcrZWY5b0pNUFV2OStvRzRxTElyaENxT3VvMVBmVExrMmFTS3lrbk13Y3hzZlA5MHVaZ0FxUzIxLy9RK2dKYVR4R1B6dm5TSkhNeHR3K2JhWXZsTEpFdENzeGk3VXRWbzQ3QVR3dDR0S1NsY1J4bVJPNy9BNUhidjEzYXIvVUtqWkpJOTJXQ0svcEQvQWhzMmVpQ0M5WHp5WTBGaElQTWhiODlWNUVzeUhFTU16ZEx6Ukx4N1lkcldINTNmZVZ3S0RYY1o4c29Va2xyQ0NqKzdZZ3Vwc1hhOE9DSWc4SStpSWQ0c2ZENGNBVllFbW5GNzV0d1ZKTW5ZU0pqbE1rMEYzUnJ4bDhnbFU0bllTdGRlUW94OGNtTUZwSy9oaVAvNUJDTmpxZ3I5ZkZHdFFFUDE5ZWIrVkxBNnFQNENPajNjWnFWNCtyLzlRMXhKYmdZQUJyUi81dFhpaHBLTGNkeDN3MHNtTVNiZHJEcVdaclhtdG5VcGo3YTNRQzRZRkM0T0lVUUJ5ZnBYSVZoenl3Skw2MFpaTFJhdmhsdHAvRytyMHY1RDk2dlJqMkQrM3BkdWdhKzRBdmFYUTllOGQ4bkE5MW5IQkpCSEx1V1Axa3ArUWJ2cmY1RENiUDhOb1JYZ1M1WWpRYnNxem4xQ0NmU2ptWnZzdmVQaTZCQUViUUR0SDliWGZFR01RY1dHcmRjVEMzWExvc2lLblJDSWRkSGR2cFgvbUxxbXl0Wkx5R3pnR3NYc0VTTFFzdDRyNXNSVmVPZ2lFbVo4QmY1YlhhZVJqMnh5bmRESXUzV2VuMVMralAvUmJrQjNVaFFYdk1NaGE5T2JGMC9hQm9ONGt6ZCtBbzdnU3FPOHpzYXgyRzJqdXBKNkdjZTNTUkpaOEpJS3F6MlVheXJmZDl1dnM5TjdkRjVzTGNHTUpUYjhjWFZxdDhtSXRLZFd1SjBTT084bHMvdE5WMUN4ZmZWVkVGWUpXTUw5TmwxMmxqS1lhTVJsQ0MxUU5nVUxxMjdKRVoyUTdLMHVEQnlSNElTMlhXOGlhZEdQdnBCS3FJWmNmVDllN0FReTU0Q1ErVEw0MGE5aFBSUWxnazZEWkVxSENwd0tJTmROZEZWRFlFVTZxQTBab1BQVVh3WWs0d0k5N044L2ZQUlJRUTBzQ2ZIa1ZveTFYUmFQWDdPSHpVWTZKTHo1MlV1SEpqOGhqWW45WnVlUytMV2ZVS1hBQWpGb2NndlI0Vk1YWTBTazZTV2VYd1JvaDh1T1plYzhmUklsK1B6NitFY1VtRnI1SDRxOTNNTGErUlZvTE56Sy9Bc05hemMyUnJmZTh1ejJablhJV2FUbFhDbGxKSVRSSTVwQisvYzh6cytTMjU5TkdMQWozdDFRTWVHN1pzVVNRR3pMbnBQTkRYbUY3Y2RialBwRXh0c3NyeTBqV1ZuUDdDSi83MWtnQjFQWTNXYkhrOHpsTGt5b0pPcmtqL2NjNTZOZmt2R0lHSUMvYXIxU3VvSEgyY01zcnkwaldWblA3Q0ovNzFrZ0IxUFp4clpUSStUdHJFTDQ5QU9sbnVCczYvWHFFQmxsN2Jkbkx3dDlZT0NEcTl1ZXliajAvUEZYWUIxYzBaY245K1NPVVZzcGpNRDdOWWMrRFdqVUwyYjJzcThRNTJVb3p3TnNPQUl0N2lNY2ZZWithMFdHYXZ5T0RUTTNUM25VZ0o4TjI4YUVxc3NpUEpyWFhJR25Zc3kzTThrbytVQU16TGxvR05ZdTA4aTBPdUoxVHhEbGZkVTFPRkM5WlcvUUQwYnFIZ3F4K3U3YnYvNjFLMzAyb1FSK01tcUVucmlzT09OTTY5bXdWUDhpR3BWS25RSHAralh2K2s1R1VCWFpVQ2tEcCsrK0NNTUVSRWJMbHVzc3VhSVdHWHNDeXFSVm4vQXpEeVRveTI4YU1lTUlCQnViQWFVTVFCODZMS3Eyb3REMmtZV1hLbWc3clE0V0lmZmZlajJweGs4VkNMSXpxWTFhM3BTcDdkVEpsdTZjTEVVWmIxVFc1Wk9lS25qNTQwV0JZMC94UGpJOHNjd3hvQlJid0ErbFdVejBHNWtQWmhtL3lwMVp1YXlHOGErbFVCc3M5Tm81T1c2T0Z6SC93S05pYjRzdkV1QmFKUldRU2ZhelFQelgvbUNhekJOakhqWjBNYXpPWTNhOEV0WWhRaG5wbUxzOWxxc1RIaUU0TXlYQUdscjJKT3VvQzljVTBqRXgrSHpMeTRGcHNYbUE3STIyWXFuekY2dGtmb3huNzdTY2IrTytFeXNaMjhXekNhVE1haHZaMmVWV3RQbm9zdmdGV1BEaHZOQisvdVZIRXZSQmpkT0tjWmE5b2h1MnlLUG1tTzFoaEJZeFhaT3pzQ2hnUDNBcEFFT05ERDhtdkdkQTFENHMxenhrY3ZWYSt0a05peVlLUEJNWWRuQXVzSUlRVHdtd1Z2WCtQd1N4bFBWOGc1ZHlydXh2cFRmZWsrRFRqM3IzK05pNW44a1MrYmRSYVdpdi9JVFdVblZNOUJ1WkQyWVp2OHFkV2Jtc2h2R3RrV0U5dHJmVXVCa2xia2s3bWIzLzRJTHk0UjZqWUd0RXZJaDZXQjdGc1h2T0VjelRuYUZDdlU0K09iSGFUUXJoVFBRYm1ROW1HYi9LblZtNXJJYnhybDR2NmJoaDJrbWZPNDl0RExVc2J3a2pMRzRaWUlzVWliV0JheE5EdEk4VE1HdkpHVVFRT3hGa05FQzUrMWw5bi8wTmZXdlFRaklOaWFBQ2FxdmVwM1R6dmN1WElFcmdyMUQvUHVnRm1oT1ZpVUxZVmcreTErSlI5TlNuNGc2eGZCVkE0SStiT0x6bFhzTDRIeWMxR0Q4Q1BlemZQM3owVVVFTkxBbng1RmFObmtyZlIyZmI0YTIySW9TeFRqYW00MTd3cU9XMU12SVAxVkNFaXp0OHdpRjhqV0kwU3JGK29nMlRIK2dtUEhsZjhnTVFVVDRzK0NWZWxyOWFJMEtTL1g3UjloL1NoTTVZM1hkUThoT2puNjhzcnkwaldWblA3Q0ovNzFrZ0IxUGFOMHlYNG00WlQ0TW84MFM0dEIwN29jMzIyNHVUaEtCRDNseGp3c1k2aG5pZGNyODAyd1h5bnA5YzFSZE5ncytrd1FYMFROdUJxOUQvTlRISXloZVR1U0V4Q2ZaenZEaHYvd053RDgvbzZWODZVTXZzTy9QT3c1Q2NyNzlzSnppZVdMTVZhT1ZHNC9lMVZQVFNBelk5SDg3T0NKWGV4K2lBT29XK0tBbnJpQjNKbmE1Nk1oSHRqSGhUM1hydTQwd3ZBV0swZEtINFFva1lJeWhTNFVqYlVzdzhPZGphalRTZFM1S2hxTG9CbFJnSlVXWk5SUjJqRlY5YXdlOEtWQklpZUJGSi9qTjBiaWNxMjdpRHZtTVVWeXl2TFNOWldjL3NJbi92V1NBSFU5aEw3ZkRUUlpSOWRhTTFrMDYwMFZ4cUFyeFAvT1U5ZUdnVHRYU1plMU5GNXl5dkxTTlpXYy9zSW4vdldTQUhVOWpoMGZTdkdNYUxrMW5TU2FRSHdyTDhMNVcvYUZBMDV2K0gzNlVxMlR0ZnV6cFF5K3c3ODg3RGtKeXZ2MnduT0ovMnRTdXZZQlR2ak1XL1pmbEVLUlhpakwzV281U21pam9WQVJLQU05dDlNeXl2TFNOWldjL3NJbi92V1NBSFU5dmJPNUh4SWVSaC9wbGVCTisrOWFlcTlaUDJjUENYQXBqeGYrS21wSmZKMEwvbkZyOWFXeHlUSURoN1dRdVphM25NRkloN3g5WU91RkhvMHhGUlJNMUhRUmxuTDg3SWtDS2FyeEM4elRoMXFWOTkyekVZa1JITHkwM3Q5dC9jbzFQSG51UEhLN2xJUndYOVYyV2NZL1VBR1U1eTBYeDlYdkxNWXR2SUgyQ2FmZE9Md0IwN0c2dkVOV0UzQTZhejJPc3lYZ2FwUUhvcHROZGloaWQ1QW5Yajllb1FHV1h0dDJjdkMzMWc0SU9yMkptN2tTV0YxK3luYVZYS3Noa2NkUlZHTVJWVU13TC90RlF3NHZndlVwQkNzaE9JRkFrS1lGQ1lvYXV2bGVhK3IvOXViOWNUMzVBR1V4WGhUeGdqcGtRTEg0NThXNUxwSDJ0V3NrSDNWRTlEY2JmZy8yVHVqZUphTEMzSElLSzNTVWlaZ2FIek56cUM5LzBIZnlTMDNpZE8zUnVpTTdBd0dIaDh3bEZ5ZnBlWCtiT2lzc01rRExXNDN4VUNFMG01V1lhVWJqbFJhM2x4VXFpdDRPMmJEWEJBek8zL2RUampYZFVLZDE2RjJzWjZnZ0NZYTBVa1BmT0tsL1ZLenltL01yTzlyZEhtd2xESWJwbEs4djlpS005bzJZM0Jvd3lXYzB3RVl4TC8vUGtLNDhMaHRoYWNkbWtKazBZdTFMczdxcmV2VFlOaVFVMHo5SGR0VUs2Y3Y0TkR5YWNIVlhRUC9DOFpzQWMxN21tSHdDejExc3YyZkZWTytiQk5QVzJmZzg2YnJGQ0lGb3pKdHZGUkRDb3BSRWtLNHJXYVN3RjRQbUtYOW8xcktaTlpKdEtObVhPbDREZUlneGtmS1BjZmFNSFAwOHRkOWNSY20zUHJMcjI0WEQwRXR3c0ROVnpsNVhabVhDWElxTklXNEs3ekQ0MVM5NlNuOTVCYmtraTNETlM4cjVQckF3NlpKKzlHdE85cSthZExMM1FXTHhWak13Y0VwcXFNNWlBZjZwTHBuUW5ONTY1ZGp2TERBUU02NkE5UnBXeExwNzJ1YW4xQ2ZxSEgxTTJTNFRLWmpCdTdsOHV1d3lFa1o4RW5Mc1NmUENTVW1oZ1dBRWZxWEd3RUNOcGhrVllpNEVqVnRBK0lDVG1HZytWdlRZb0dYamM3WWo2aEhHdWQ0ZHVKYlZCTGxUS0RjWWxGUlhmZVhKb3dGalRjN2tUOUdTZk9SaWt0Wm5wems1RTNyQXZtUWJkMUdzckxNdGF4a1VPZ1Foby9QRDljek41RlVlcVByQmpxekgvSjFBNG9SZ1RBS2FaVkg2a3hRb3VaVmdhY212QUMxN1hhZGlYODljSXR3WTYzMWJWdEJUU09Icm1yRnpQSjhIUndxM0hkME1RK0s0eU94UVdnNnQzZ01NbjVQQTRpbVh1cVZWV0FVQVhGMUNLdUl6b0hzUkliaWZiZGRxdW5tSlJaNmhJcGY5a0Qva1ZmRzdoS3hySXhhSElMMGVGVEYyTkVwT2tsbmw4RWRIbTFsVHdXNWZlQVozY3pYWkZIcGU2dXpabzFGVUp1R2FucFBkWmlmcnRTWHZQQnR6bE82ZkJMM0tqZlUyeGxUcHREWnUzc2pWZE9FeENHOVMrN3JPaXkrTzV6NjlmaUwya1F0RldqVmJ0WHpicnB6R3ArQmY2UmxucUhMRE1Va2txRDhiSFJwaDlFMEZ4UHJzM0pnNFlRZnBmQnJETWsrODJqd3YxRHBDZEZYV3Y4ZXdhblBJemUzN0FTOTM0ZzhWUGExVHdRcERwYmJpaVZ6MUt6QndlWFZoODM0N2ZDbXZpa1F1RE9obzlGOTFTSk5MZEpJZURFUHUxU1c5ck9yY1QvQVVPMnZrb3NvbHBFdUs3M0FzQjUweDRkdTJJSDRYUFBndy9BM3FxWXZ4eGdCQlhOQ3BuR2FpSnZYbTFNaUtRVXQwdXg4T0lHVThNelk5UGhFdzFPVVJ2Y2h0MHZMQXVoUUtkTmFXQnlzdHB5ZTd6Zms5WXFWb1hIOU95U3ZhRUNXVFR4NWYzK0d6T0ErQ2dieG4za3FVZGk1NEM2bVdNK1FXNDFBbmh0OHU4eXZLaUlLcTZsdjZaY1VxVlRLVStIeUhRWWJyVS9Eam1CTTVtK2MxbHFLV0tIcmU1UVc1UytoMWhLWmEvcjBYL1E4emNQSU5RSVBXUklsbWVpbk9QQ3ZsQnlubEd2VzUwaDJLSFRJYytnN21rUUc0RHNYZ3lMTXNSVThGTmxZb2VLSXhyb2Z0NXpGT1JOVjJyaUZnN0lFYWpPbk1QZy9aQVNJVGdjNEhJemNNS0lZK1d2UXVrRnhMMld6dnNRcFJWQzVHMWhXQVNYR1MzcDN0d3lWN1g0aWxYMHYyRFAwWUUxcXE0UGJ5eXZMU05aV2Mvc0luL3ZXU0FIVTlnL3VZNHgzQldYQS84RGJPaGxnckxBYmFZZGpwSXQ2bXZVL2xYNFBRd1c0QitLK0h0STlTUkVzTnY3NjdadDczN3dVT29DTWZqN2JtSzVmWXZPazFNb2FRV1dhN2pKM0JKaXAxcGx2ampRZDlWZTRXSWxHbHVTWjFLbVBZYy9Ba0tNOThVNkZWeHNkc2d0OUttbmhWeXBEa1lXdjdTcnNORXFpeUlTRjhRbE11MFp6dG9ZQmh0Sm5iOExaN2JEWFg4c3J5MGpXVm5QN0NKLzcxa2dCMVBaNmpRQ3kxTVhHWW5HWFU3VmZITGNkUGlScm9IWnZWckF1a1BTSzZQRFdEcytTVy9UWTZLSUord21Gam9ib0Y4R0pWS2ZaZm80cjNSRjhTcU9RTCtzaG4xV1RVdEM0M2h1Q3hJK3QvVWlpK2U1Mk5KY1J1bG1KZ21KSlkwMmFqcTRQNy9DbmlNMEdOQ0c3TEdiUmt2L2VQSXRlQUR4dTlPWW9hcDJ6M0YxQ3pZS3pqY3RKRnJSNlltZ0dhOVc1NjBKb0Z4TWIrRlpPbzczRTdJWWNEVFRpbkVCK2tkK1NmVXRXd0hpb0dQblRjY3NyeTBqV1ZuUDdDSi83MWtnQjFQWWRkM2NIWnZKWXExRWVDbzh5SFU5Y0JZb1JkWVFGTnQvV0E0a3MrZnVqUjhzcnkwaldWblA3Q0ovNzFrZ0IxUFlMTnlRaFFiTW5JM3pXbzVtNFhYK1A0T0FhY1JRcnFsY1lkQ0FpdE9VQ05jc3J5MGpXVm5QN0NKLzcxa2dCMVBaM3dXU3p3c3l5djQ5KzljSTVTNlpmUU5RVzUzbXBxV3Iwc29IQjN1N3Nlc3NyeTBqV1ZuUDdDSi83MWtnQjFQYVpkZ0g2dVlWR1pkZ0kxZkRJTjBUcXVkcWE5T0hRZG5pOWRCRk5KQnp5c3JEYkVpQXpKUTNPMGhiVVpLU09ORHd6Qis0OFJNTFVjVTNMM0ppTXBuYkc2cmtMZlJWby9xRlM3T281V3lhYlVsU3RuVW5tNlBrdjQ5MWk1b2Y0NHl5d081c2xGZm9nTmsvT1B5M0JEcEp5Snkyc3dqUVpWaW80cm5iWFl5SDZnazdFUU1HanpwTDI1aWxTRmRtQXZtTU5lWERvczRCQStFekZQcm1MU3VHVjR0U0wrNFNkS0dObTRhbG5kYnFSdVZ1ZEpVYWd2UWhQenBzcFo4UGlSNmZVUkl4bi9EVTRxWi9WRlM0QXVuSzg0elptV2NqNzhqV0FUWGlJUVl4c2tjc3J5MGpXVm5QN0NKLzcxa2dCMVBhWFRMQTUwU3Q0M2R2cXNZYTRxUWszNHJQeFhrNkJxYlFhZzdwMnduVzQ0U1lXdmtmaXIzY3d0cjVGV2dzM01yOHRJZnFDU0xHUk1qZTBNTzBsYVZYa3l5dkxTTlpXYy9zSW4vdldTQUhVOW0rV3JFbDVOVmtua0c4RS9Ed3BGQ25BV0swZEtINFFva1lJeWhTNFVqYlV4V3QwVkRpVkFFeisybExCWWN2cngvZHd3L2pZTlgxMjVCUmJ4T3gxMy9pZm10RmhtcjhqZzB6TjA5NTFJQ2ZEZHZHaEtyTElqeWExMXlCcDJMTXR6RXNZbDkwN0lmblk0bjA3QnMxcHA1ZHpKUzRPem9zOHhiRGovajlqVnRmbFc4dzJlR0ZqSENKYndjbXZGdDFkNXVDaGZaZDBJWDI3cWNYcVRRTElGN1pNR21vM083MCtHZWR0cFd2RDFIczJCUkNpZ205aXNKczRCc0wwMm8wbTE5NldETVdvT2J1KzhaYWVZQm1Ed3g3bDNacWkyaEZraVpKOGd4UEMwUFk3QkVMQnBKWTVLMGd3Z09UV1U2R25QWnNIajN1TlIweU9qSVNaUUZYZmhkVzNTalFvYkxBQm1XRTl1UEpTSHBsdkpYVVprZkM4ejIyZ3VrYVEwVHJBUTZYQk5zZGV2RURRelRTM3ZxbDR6R2hrd3c4UnA5MkRwc3YvQzR4dW5OaHQ3cnZQTVdIejRIYVFRZ3p1OENad3Yrc3plMDJMMnJVZzhrY2l1ekt6dmFPaUtnOFhsUk4yb3RoalZFcU8vMUJ3bzNSaDVVUHVCdXlYK1N4WmtRRGtrMmJWTzRka0x2TmRDenNjRzJxQ29vS0ZuQWlWK1k0ZUFEb1JDc3NhV09qNTBrSzYvZXd5eFBJOU1vOVd4ZCt1d2MrbFVpY2phdmtLTDJUdkJubFlrUC9tS3JEd2l2MExvU1BVV3ZZbjZBS0lkS3QyUjBTdDM1VUJySmU4dm5QdWUxTTlCdVpEMlladjhxZFdibXNodkd1bmFpd1JGdDJCSHVqOWdsWnhhRStMWHRJTUE0WnFTc21PbzdwR2pjTStJUmR6NitEUDRVYVFuQmdOREQ5WDlwRk0reUVWUWd5UFRtNnhuS2RiSjF1bFE4b0Q2dWpyVVliOWt4TlJxQ0FhbWc4aXVrV0RRWVJLaVFDZnpyMTRIaUpmeFJTTUpwU2RSQkdjOWsxRzFjanlaeUIvTWtQZ3ltVGZBYmZCZXdnZXdKWit6NDR0dW51Z3BZNndsdFZOZmJZL2JFSG43OE13SEt4VU1CNlVqaWxoOHBaT3o2cWtxSjE4b0RBVGZHYk9LRXk1OG1la1BlVGVHYlliVHpYcVlTUkdXM0VKS1JLTER6WmNXYUEwWVB0c3lWUnMwd016WHZXZkhvbHpIaXQ2MG54ZEd1ekVvVm5XSWE2VEFicm9zclJGOHgvVUFxVEZxMjN1TmE2alFmMmpCcnB5aXQxMGJaZHZZSGtaTVN0MG9RVUttT3l3OUtzTzJ0MWJDOGNpM0trVC94eDcxZVdaeEZhT3VuNVlaZWV1eXl2TFNOWldjL3NJbi92V1NBSFU5cUREZVNFeHMyM3RZcFdjNTRidmpMdjE0OElKRHhwbWJESk9rZEpOSTc1SDZ0ajlEeTdXSy9RZjJ0RWQ0dkNNaldqa2RTamNOZFdyTDFXRGtUZmw0bGM3Nkd5NWF4cjZvK21QR2xnSW81Z0h3emtUcmlvNGpBUkg2WndUWHBSbEgzZ20vUk9NMjdNUHFUdkM4QWJmZ3piYTVnelZ3cjRWNjFOT3phUUsxTTdwdk90M1BJVFlvRnZtQ2ZkaGI3U1FpamZkbDlPeE5jb052TVpZV2crMXpMbkxLOHRJMWxaeit3aWYrOVpJQWRUMndFclVKa2tBTE5INVBZdGlIUEdBOG1jMTZhRzhxbTRuV1ZSUkVmNCthSmV4REF2SDNQeVV4V0QxRUZzQjc5NXZ5eXZMU05aV2Mvc0luL3ZXU0FIVTlwbDkzWWMvcTFKRnNwNTBRRmIvQkRNaTQyTHdGSGt5ZEJzOUR4b1k0cEh2VE01YjZpZTRPRVJ3Q1U2SmdqVWRMOHNyeTBqV1ZuUDdDSi83MWtnQjFQYU1XaHlDOUhoVXhkalJLVHBKWjVmQjNWd1VmR0NVbElqcytYS2VIWVFScjhzcnkwaldWblA3Q0ovNzFrZ0IxUFlYZXd4SDEzZ092dFQ1UmhDWWVIY1cvYVVGaVRWWlRZNG9DeTl2bzkxNXBzQ1BlemZQM3owVVVFTkxBbng1RmFNb0tpSGxQQTJSRUpKbnR4VjNoVXkreXl2TFNOWldjL3NJbi92V1NBSFU5cU5WNEc2RUpMcEo2cktnK0hsR2JSUExLOHRJMWxaeit3aWYrOVpJQWRUMmlQZVZRb2ZidEZFWHkwSU1KWmdnYWFQWkYwazdnOVJHU1NMZ2tsamNLRTNMSzh0STFsWnord2lmKzlaSUFkVDJIbFNYUFJtQ0NaeWJYcXBUSHRoK1g3RTJEa2ZCZ0dNa2Njb2kwbVYwaEduTEs4dEkxbFp6K3dpZis5WklBZFQyRUlCL296VTYyTGw2M1J2VmxtWDc1VnNoY0x1VWFYdm1YUlJoTFl4bllabkxLOHRJMWxaeit3aWYrOVpJQWRUMlF4YjFLbEF3c2pMdVZrUXUveXBuUnBEUmRRVDVZUEQ5ODhmdkE2a1AxNnZMSzh0STFsWnord2lmKzlaSUFkVDJCRUxCcEpZNUswZ3dnT1RXVTZHblBhdmtHODRZQldsTHY1cmE3aVpIOVJmTEs4dEkxbFp6K3dpZis5WklBZFQySVNsRmZqYVNaREw2MXlodko1bFBCcDdFZHZXRTlNY1VoYTZZUWYvcEZPNHFjbGkxU3pQNjU0QlVGbzEzazdLcDE1Rm9rbEx5emRDZmlDVGJ0WGtRaGtrYm8wQytEVTlremYyRnJONGZnUDlMQTlCRVlsMWxkeHYxNTEyNkxLRFF5eXZMU05aV2Mvc0luL3ZXU0FIVTl0eUlsUGJHckN6c2VidW0yNlgzVGJ1dHlWOVM4ZUg3TGdoM0JnSURrUmswUnJuNVFDSTR2Z1dmUjBiOFdpcXczWmpqQWZWLzcvcGUxTU9LMUpCdXFaRStLZ1Azb0UwVHRNd01lK1NUQUt4bllydGJTMDFPeXJ4OS9zMHpWSkEvbW5IT3FEa1VveXdIZnZ0LzRzejJpWUZ3QkcxWVRCWnh4ZXA0VmNaK0hjT0N5eXZMU05aV2Mvc0luL3ZXU0FIVTlxTys1ek90QkJUUWpaUUJyeFFsMCs0emdrMS9pTkpINFFFMzBjcDlDSlkwSGVGVUI4NVpQaHJTZm4ycXROOXNNTXNyeTBqV1ZuUDdDSi83MWtnQjFQWjR2SDN0NjhjckZtQ0trMUZFYkVycnl5dkxTTlpXYy9zSW4vdldTQUhVOWpid3NKaE5CTGpKRmUvVE5VWWxUVlhMSzh0STFsWnord2lmKzlaSUFkVDJuTjFrM2VXeXVudXFuN2gyQ1hES2JDZ2VJUnorT0htbktMbS8rV0NQYTA1Q3U3WVhEeUZUZlZiaHNoT3ZPZi9WUXA5UVc3ZGg2OWJ5eUlmNzAxYkdQTXNyeTBqV1ZuUDdDSi83MWtnQjFQWnlrZG9Ca2ZTN1I2RVhOTG11NSt1cm4ybEVFb1JMN283MS95VVVwc3FwTWh4YU5tcnp6Vm04SHp1TkJ6MmNIbWpMSzh0STFsWnord2lmKzlaSUFkVDI0ZTA5WHRXN1lRNkxiaUZOYkxMb2krQXBFQmFxVTVqajBLK21TUkkwNHR6SWtXN2pzVlh3ZHZ5NnJQZ3ZENTFjZHZHaEtyTElqeWExMXlCcDJMTXR6TUIzcFE5WmFCSHJBc2crZE5SKzBXUExLOHRJMWxaeit3aWYrOVpJQWRUMjlFVzg0N1A0dFZ5NGUyOEo5OFVTNXNzcnkwaldWblA3Q0ovNzFrZ0IxUFp4YWFRUzJzV2w3ZjlPYjR3RGN0OUpkdkdoS3JMSWp5YTExeUJwMkxNdHpLLy9kRmRDZ3Brd1FVeFVDb2ZWT052cjhsai9WWFFSdGsrTWZnOTh1d0xEeXl2TFNOWldjL3NJbi92V1NBSFU5aGszS2RjdVhXMStnTmpjZG1BOXFSOHFXZ0ZqZFhGWGhYQTZoWW5DTmFQclZqemJGUWJQa0ZCN0dQcVNPQ01qNmtqN0xTeWYxL3lZdnNyN2ZMbWlJYWZXK0lqbStWNE90bjM1Sk5GUG9IWkhsWHMxcjZENHNKSFloNis3eDNrUFFrNWpQTUx3K1Zoc29Nd25WK0toMUxNNnBadFQyZUZDTjB4V3Z0citMdzcvV1FwSW5GOTc3WkdpV1AySXFlOURqZUtoakV4dXFGYWNHaW0rNEc4dWpyRkRnWkhyZFdIdENybUlrWktzeG1zSURTcjR1aTRRc2pJUUV1S2VXV3dNOHg3MWprYmdrQUIvbkhoenNobW5xWURGdXRnbURSVmdhVGVnTHMrVzlrQ2FtT01COVgvditsN1V3NHJVa0c2cGtZSkZpNjBhTngzdURqOFR1NS9JcXVONHpaU3Jpb3JTRkRxZ0NDRFRrTWpSVDFEVEljWnpZYjFqbE5GbGp4ZjFpNjNyMDJEWWtGTk0vUjNiVkN1bkwrQ2RIakdvL3hSNWdLRjF6UmZjQ01ZTzllT1BkNExQbkJ4dUJoWjJldTFJWFBOZEtlU1Z6dFMveTRaUHdPTmhSK2tjeGJUWUdmanVzNGlsK2pEd1dsQnlxSjFRV0RCaEhYUE1nNlpvb2VlZENaTVdhTEZmRnRUcDMzUTFRaEhCbEdyRWZadllod3NpTWgvS3BXVy9Nb0FrVVZmVXZxdEIrcFg0NXdVNTJWYlVQWm92dzN5RHRmazV6WnE1eWJEK3hDdWtzSisrQy9vNkJIa1k1ZGpPcis3Y3l5dkxTTlpXYy9zSW4vdldTQUhVOW9sZTh5RGRIamM0OFBiZGFLeDJZbEFLZjAvenNOeFZ3SFJTUUN0Q3k1Mkl2MUlQRExDS1hUSTEvY1BWcXBPcWxjc3J5MGpXVm5QN0NKLzcxa2dCMVBZM1JmMzRhZ2d6TjJiMXZKQkJaOU1xOUxHbzd5ZlZLaTZ2VVZRS2pxMEZFNDZXZzZrYmttb1FEbTBualhTcUlUb1ZPSEswMkszVnhRa0drM1lqUHdVdWR2R2hLckxJanlhMTF5QnAyTE10ekVnUHBvbTVFNlhzcVlFaC9RRllLVnRjOE5oMzhDeTBadjFhdUZNRnBpcE1peUJLbTcwK2xDSVJYNFZPbXRYMDhmVjZPaGc0RWhWbzZ2VVRkMlROK1dFT1NCa0t2WVo0Mnh1VndBaElSOVhVQ05yMDlaOWwvaVhld0lxOFpiUys5VlBvbERnVklVbzI2MXYwRy81RElscHUzb2ZidWdyRVNISmlUUXJ0dGhXRFpQdFU4RER3T1VRQTFhOHZZbS9LWk1zcnkwaldWblA3Q0ovNzFrZ0IxUGJKU2pEWnMxZmpqaU1JWGlURzN6dmRrT0RLSnRxTXVhSlBndmhTc2RGTW44c3J5MGpXVm5QN0NKLzcxa2dCMVBZYjJudUJBejVCN0hxRnpUTytjVFp5d2dFRzVzQnBReEFIem9zcXJhaTBQY3NyeTBqV1ZuUDdDSi83MWtnQjFQWXBOSmlvR1pIYUlscTBFVGlyVWpSWnJzWVk1alNhTnNKT205UGJ4OS9HZnJoMHBmQ0o4M1NKNmF2ck1yd0RJSDBRc1FUSGRsYWlhRy9Ba0o4YUIvZWErUm9nNUFDYUVOejJHTiszU3RraVExSGJOZWJpNkc4bnlkWDZyUDVCTHhiQ1BKUkZGTmlzNUlaNW1taURpNG40UG1iZWVMc1grZEJwdnBoNHNTakVOOGlyZm5HQVp2eGlQYnpTMGVNTlFuWCtiYlJkZys2RjAyMWROYlNLYXBUYXl5dkxTTlpXYy9zSW4vdldTQUhVOXB1TEsvaW8zVk1GSEI3d1B3dlBWaGR2dC9acDdpdmQyNTR0dVRjMVVMZUh5eXZMU05aV2Mvc0luL3ZXU0FIVTltcUJwZ0d0WEdVaVpvRXd3T0hOU1F1UXJVOFQycDQrS0FNNHNCTFdDTGU5c0R1YkpSWDZJRFpQemo4dHdRNlNjbG0zVlF2Q29uL2lLZDNqNC9TaUFPQW1TeklxempWYW0wSGh4MG1UanhBYkxFaVVTRHJLRm5NMlEyT0NxNXlBYlRlMi9neFd6WEFBWURJWVhadkZ1REU5RFczeFZHbU9rRHB2VUNRdVBRemVUNEZMRXQ0OC9oRVVBZzZRWDg1MXB2Wm5rNmFERjJLaXNmb01PNmU5RGNEK0ozeThneFV5cHdGdWg2YTYweG9YcGdZY3FrQXJiUlZ3eWQ4VGdwNmtyTXNyeTBqV1ZuUDdDSi83MWtnQjFQWmJGV2k5bERLV3plREVFMWxCRGdlV0g3d2xUeW5CWThzbnVERGxtSEpySnVCRmM4T3J3dWp5L3dRV2VUbVljaGJMSzh0STFsWnord2lmKzlaSUFkVDJNL1BYcitaTzdmM1dKVE5HSEhaWVNLZWVVT3JwU0NzbllhNU9Vd0U4ek5yTEs4dEkxbFp6K3dpZis5WklBZFQyWTBHYW9Wc2lEREZXL1ZsWTRlYkQ0ZnIyZDZOcXArT05jb0xKN0J0Z2gwcnJ0ZzN2RkR3QVBwaXBadzBTcW5pWHl5dkxTTlpXYy9zSW4vdldTQUhVOW8vT1pFTVpjdU9XYjlOUnV6WXBxL1VIcXN6bG1KeTZ6RXBkWXF0VVAwNzlBYmdvNDdENjZZUnEwZE9HcCsvM0U4dlQzenVrRllUeHVJbnF6QUVpajI3MTQ0OTNncytjSEc0R0ZuWjY3VWhjeXl2TFNOWldjL3NJbi92V1NBSFU5cFJ3N04wci8xWFJlQU95cWtneDhlYnBRYmI4UUZUaDlIL1dVMS81T2xIRmV0Qi9qbm0zT09xYTduUXNqSnBOYU1IZlhPR21vUG43cmhVa3Z2QXd3QTA4SG4rT3hSeEZsS2hJZjJmczEzb3dEUW1zNWM5SEROcFdvS3VZUzZKQ21LMysvdk53a2QrQTZZcmNvamRhc0d5bHMwYldmb0lpLzRhNE0yYjhoVm0yeXl2TFNOWldjL3NJbi92V1NBSFU5c3NyeTBqV1ZuUDdDSi83MWtnQjFQWTVJZWN1Qzc0RVVVY3pGTkh4L0taR3l5dkxTTlpXYy9zSW4vdldTQUhVOXFJVEk1TlB5UGtTbll0UFBRNEtERy9MSzh0STFsWnord2lmKzlaSUFkVDIxeVJXMWU5Z1VKWThGQ3ZlaGxkMmtNc3J5MGpXVm5QN0NKLzcxa2dCMVBiTENGZzZNMWxaNXA1TUdMTkZIaE9QaWpCMkFOTzJ6ZWZqTTV0YU9nUlBuTHBiNU1jMnZrMXVER3JkSWNiV0E2eXQ2OU5nMkpCVFRQMGQyMVFycHkvZ0pVZ29FVWFmalZqZWd2dERlWEJhdmhHU2F3Yk9RZkdRd1pJMm4wT0xFYVVJYXNtdG1qYTNBdEdaNm5GNzYwMWlKL09rdWRZbEVNcUExL080dlcycGpBTlVaWTI1NkdhQ1N0b2pyaFQ5N3NqQWQ2VVBXV2dSNndMSVBuVFVmdEZqeXl2TFNOWldjL3NJbi92V1NBSFU5aGpZWTJuWUUzWnJNMDhPTkhPbC82RWFSUkRxeS9lbXRURGZ4ck1tSC9qRXl5dkxTTlpXYy9zSW4vdldTQUhVOW45bmZIbFpUcUxyMGRWdHpzUXZiUHZPbERMN0R2enpzT1FuSysvYkNjNG5qRm9jZ3ZSNFZNWFkwU2s2U1dlWHdkMWNGSHhnbEpTSTdQbHluaDJFRWEvTEs4dEkxbFp6K3dpZis5WklBZFQyR2hobW1NNDBJclk4dG02eEV2dFdITTZVTXZzTy9QT3c1Q2NyNzlzSnppZnk1MnVWckM4V1RYSW9LNmRHMUFUb012a3pGTnVKNVlBYzhxQmJDV0FXWCtldmNXQmlzN1hvZFBTZVhFL0FBTGhWWEZHcmdPdXI5aTRORmsraHcxNEVtcHVhbmZpbm9KSkJFamh2SkVFSHFjNlVNdnNPL1BPdzVDY3I3OXNKemlkNU5GdEd6UTFCTThUOTN0RlhaVmo5R050OXIyYVcrUTg1cUhGSnRpOUFmVHp2Y3VYSUVyZ3IxRC9QdWdGbWhPWGFYRVQrcnRCOU9KaWtyN01YRm5RK0t4TWZ0RTZESEtEUlZCb1o2ckdSNHNzcnkwaldWblA3Q0ovNzFrZ0IxUFpHYnYzUXBVUlM5TmFDZHNjRU5sQXoxeG0xL0FrSFNVUFNwNlRGQlV6Wkdjc3J5MGpXVm5QN0NKLzcxa2dCMVBiRC8ybzhMbzFQcmhFbnpmeUMxRm13cFdvbWZmOUpMN0JHeXlLNVVZN1VzSGJ4b1NxeXlJOG10ZGNnYWRpekxjeTRYMDNxczNCL3cycGpqbUluNmJ2eXpwUXkrdzc4ODdEa0p5dnYyd25PSjJtTHdUTkxMZmROdUNiSUU0dmFTSVY2YlVzTXFoOGlLWHpxNE5qVGNQSUVXSExMU2V6bEM4K3NKS3pSaEtUTU4xQmZYekJncmZSejc2WExSU2ozampMUlYxci9Ic0dwenlNM3Qrd0V2ZCtJR2ljNXpIVmVxOWJLUzBHSnVLcDNTMjBPN3BydjVObit0THdwaGlvc0tqQXJmeWhBcU14NW1oVDdOSzRKK01nMnVnMjJZU05QaHRCdHdsV2M1WFVMc0JCRXY4cmtRUWE1M0hFRVVzUmk4NTFWeEZlUWVhTjVHcnYyakV4cFpGQm10cGhuWExjRnJIR3NWeWZJblR3ckRhQ29LUGNUbHkwSmFoV2FJcjRXbWl4VXRiVi9wdjJsYkZISDZFQXJOZkVuSFR4bEpwNHU3YzhMajgrbzdrYlk2TXNyeTBqV1ZuUDdDSi83MWtnQjFQYU9vQmVLaGFPbEdxTU1TcWRIU0RSeUYyUzNPaTRBNEw2QmhscmpMalUydTVUVWVGOWRNT3ZORkh1WlNRM1dUQ25zcktMeHQvelF6Zzlnb29wNk4vQ3RHN3NOeGk4NmtrOVN2QSs0bUljUk1lOUhFZGpEais0UTRONnh2NnIwVi9GS2pIenVZakVBdG5kSU9pNmNNUDFjYk54cW5SZUxudmFrRzRRZGJXNHNZZDlTQUxHdDJXUVVFdk5ja1Q1NHh3SVBQcHR2RkJsaVRYcnJzQXRYdUgvcTMxSUFzYTNaWkJRUzgxeVJQbmpIQWhYcE1PWThJWDlsTzlLWVMxQ3EyUmxLYVhTdUJ2VVh0cG5XYWlDQVlzMnd5eXZMU05aV2Mvc0luL3ZXU0FIVTlveDZNWjRsSk53L3hKMHhCWTdPN3N6TEs4dEkxbFp6K3dpZis5WklBZFQyTFV6bFZ1S2xlMERaKzVWMDlkWXNiTUhNeFB5NTZuQXhiSTZtSkpXNHdsbG9QK3pHbk9hT0Zpck9LNVNscFhvRXl5dkxTTlpXYy9zSW4vdldTQUhVOXJ0MnFXbkVZQmpEYzl3Y3BLY1M3UE5VZUdJQ2xRa1RnVmNaVGZJTjExaXBsWHMxcjZENHNKSFloNis3eDNrUFFsakFNTWFhbkYxMzNQNmkvbGVOaXExUlZqZ0l6SzhIYkNzR00zYjJ1NVJVbTZwSVFzRTR4dEN4TWZGamdCNzIxeFlxS0YzOW1rYlJmU2lyQlpIdWVZZ0JBbkpzZi9FM3hiVHFhZi8yMGZ5MUNPSTNHS0hzcEJTTTI0azhFdlNtRW8wZ0UwUjJFNEZoQ2VmWEVSUjJOOWR1K0RtWWJIRCtNaDBmU3BnOEZrNzRKMVFrNkQ3ZGE4dGRHUlp5bGxxV0RzNlVNdnNPL1BPdzVDY3I3OXNKemllTVZ4SDhKMUVsN1doWUV6TUZ0dThtTCt0NHJUYWd5bFNVTEk1d2pNbkl6Q0dldGRZKzdRL2N2T2ZhUTFraldlYlVjOUtXK3V4MmpVcURCTFoyKzhlZWVCQnlVVDdaejFNWEt1RkFuNmVRSE5TK3lLWENVeW1Sb2ZLUUNmcVZYSXpYSkZiVjcyQlFsandVSzk2R1YzYVF4RDNZWk10VEtKODBSaW5XNHd5Q1ppck5XUmNQOVZMM1RkOEhhVU82ZlNsbXl2aFZqTlpPQ1FOZmxWTm9NM212RnRFYWh3c25zYVJoTUFmMDdwVWl6KzFmSTZzL3AyRXc0dDV0SjBwdWc5a2tHbjhCTnVZVVpicmNOR0c1TlJwTHdxMEF4NlQ1NG5IZUpSamZMRVBXdUFhaW54ei9PdWhZR2czOXBVcWFmeXhPbGlIRm5XRm1QUFIwNmNpRG90UHRhM01MQnZ2OGhsb0RQZXVzbVVNbHpLeUFZRDVDeVNNajZUUVlTcmFjWU9pVG9KNWpnNE5xa25xN2NxTzBNbERPR2dWTGIyM0tzcTVPRFhrUzlhMjU5VGVWNDRXbFhoQURWclJmZkdJUXpYeHpvMmpFdFhySmNqZ0JhR1RnVjRGeXdmZUVKMUdGNGJpYkZEMGZLcXZyNDhJS3hEeE1Wbk5UaFk3Qk1ha3BTOGF0NndqdDBxSWhtTEtTSkFSbjF3djMvYnNiUGgyNWlBZEk1U3Z2eFdpVHBLR0hCN2puaFFORG10SWZYNlJYSEdQSU9xRXEvQTVHakF0RnpzYTE4V09vQTBMa2ZqOUxyREpJM0dnRUpYeGp4YWM4VktSSkMrZCtDKzNpZ1JaajQ4MDFkSDVlVUNKUE5JeDFGeUlLTDg5NGkyYm1MeUNSZHNNYyttUk5MRVZaUFprNlJ2ZU5OYWRUaXBCakxrck5HeUU9XFxcXFxcXCIpXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6Zi/6YeM5LiA57qnXFxcIixcXFwicGF0aFxcXCI6XFxcInNoYXJpZFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbi8vdmFyIGl0ZW1zID0gW107XFxcXG5mdW5jdGlvbiBmb3JtYXREYXRlKF9kYXRlLCBfZm10KSB7XFxcXG4gICAgbGV0IGZtdCA9IF9mbXQgfHwgXFxcXFxcXCJ5eXl5LU1NLWRkIEhIOm1tOnNzXFxcXFxcXCI7XFxcXG4gICAgY29uc3QgZGF0ZSA9ICFpc05hTihfZGF0ZSkgPyBuZXcgRGF0ZShfZGF0ZSAqIDEwMDApIDogbmV3IERhdGUoX2RhdGUpO1xcXFxuICAgIGNvbnN0IG8gPSB7XFxcXG4gICAgICAgIFxcXFxcXFwiTStcXFxcXFxcIjogZGF0ZS5nZXRNb250aCgpICsgMSwgLy/mnIjku70gXFxcXG4gICAgICAgIFxcXFxcXFwiZCtcXFxcXFxcIjogZGF0ZS5nZXREYXRlKCksIC8v5pelIFxcXFxuICAgICAgICBcXFxcXFxcImgrXFxcXFxcXCI6IGRhdGUuZ2V0SG91cnMoKSAlIDEyID09IDAgPyAxMiA6IGRhdGUuZ2V0SG91cnMoKSAlIDEyLFxcXFxuICAgICAgICBcXFxcXFxcIkgrXFxcXFxcXCI6IGRhdGUuZ2V0SG91cnMoKSwgLy/lsI/ml7YgXFxcXG4gICAgICAgIFxcXFxcXFwibStcXFxcXFxcIjogZGF0ZS5nZXRNaW51dGVzKCksIC8v5YiGIFxcXFxuICAgICAgICBcXFxcXFxcInMrXFxcXFxcXCI6IGRhdGUuZ2V0U2Vjb25kcygpLCAvL+enkiBcXFxcbiAgICAgICAgXFxcXFxcXCJxK1xcXFxcXFwiOiBNYXRoLmZsb29yKChkYXRlLmdldE1vbnRoKCkgKyAzKSAvIDMpLCAvL+Wto+W6piBcXFxcbiAgICAgICAgXFxcXFxcXCJTXFxcXFxcXCI6IGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLy/mr6vnp5IgXFxcXG4gICAgfTtcXFxcbiAgICBpZiAoLyh5KykvLnRlc3QoZm10KSkge1xcXFxuICAgICAgICBmbXQgPSBmbXQucmVwbGFjZShSZWdFeHAuJDEsIChkYXRlLmdldEZ1bGxZZWFyKCkgKyBcXFxcXFxcIlxcXFxcXFwiKS5zdWJzdHIoNCAtIFJlZ0V4cC4kMS5sZW5ndGgpKTtcXFxcbiAgICB9XFxcXG4gICAgZm9yIChsZXQgayBpbiBvKSB7XFxcXG4gICAgICAgIGlmIChuZXcgUmVnRXhwKFxcXFxcXFwiKFxcXFxcXFwiICsgayArIFxcXFxcXFwiKVxcXFxcXFwiKS50ZXN0KGZtdCkpIHtcXFxcbiAgICAgICAgICAgIGZtdCA9IGZtdC5yZXBsYWNlKFJlZ0V4cC4kMSwgKFJlZ0V4cC4kMS5sZW5ndGggPT0gMSkgPyAob1trXSkgOiAoKFxcXFxcXFwiMDBcXFxcXFxcIiArIG9ba10pLnN1YnN0cigoXFxcXFxcXCJcXFxcXFxcIiArIG9ba10pLmxlbmd0aCkpKTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gZm10O1xcXFxufTtcXFxcblxcXFxuZnVuY3Rpb24gZm9ybWF0U2l6ZShzaXplKSB7XFxcXG4gICAgaWYgKCFzaXplKSB7XFxcXG4gICAgICAgIHJldHVybiAnJztcXFxcbiAgICB9XFxcXG4gICAgY29uc3QgdW5pdHMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXTtcXFxcbiAgICBsZXQgaSA9IDA7XFxcXG4gICAgd2hpbGUgKHNpemUgPj0gMTAyNCkge1xcXFxuICAgICAgICBzaXplIC89IDEwMjQ7XFxcXG4gICAgICAgIGkrKztcXFxcbiAgICB9XFxcXG4gICAgc2l6ZSA9IGkgPyBOdW1iZXIoc2l6ZS50b0ZpeGVkKDIpKSA6IHNpemU7XFxcXG4gICAgcmV0dXJuIGAke3NpemV9ICR7dW5pdHNbaV19YDtcXFxcbn1cXFxcbi8vbG9nKHJlYWx1cmwpO1xcXFxuXFxcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxcXG4gICAgY2xlYXJNeVZhcignbmV4dHBhZ2UnKTtcXFxcbn1cXFxcbmlmIChNWV9QQUdFID4gMSAmJiBnZXRNeVZhcignbmV4dHBhZ2UnLCAnJykgPT0gJycpIHtcXFxcbiAgICBsb2coJ+ayoeacieS4i+S4gOmhtScpO1xcXFxufSBlbHNlIHtcXFxcbiAgICB0cnkge1xcXFxuICAgICAgICAvL3ZhciByZWZ0b2tlbiA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FsaXRva2VuLmpzb24nLCB7fSkpLnJlZnJlc2hfdG9rZW47XFxcXG4gICAgICAgIHZhciByZWZ0b2tlbiA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMvaWN5L2ljeS1hbGktdG9rZW4uanNvbicsIHt9KSlbMF0ucmVmcmVzaF90b2tlbjtcXFxcbiAgICAgICAgdmFyIHNoYXJlSWQgPSBkZWNvZGVVUklDb21wb25lbnQocmVhbHVybCkuc3BsaXQoJ2NvbS9zLycpWzFdLnN1YnN0cmluZygwLCAxMSk7XFxcXG4gICAgICAgIGxldCBnZXRzaGFyID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS9hZHJpdmUvdjMvc2hhcmVfbGluay9nZXRfc2hhcmVfYnlfYW5vbnltb3VzJywge1xcXFxuICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICBib2R5OiAne1xcXFxcXFwic2hhcmVfaWRcXFxcXFxcIjpcXFxcXFxcIicgKyBzaGFyZUlkICsgJ1xcXFxcXFwifScsXFxcXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgbGV0IHB1c2huYW1lID0gSlNPTi5wYXJzZShnZXRzaGFyKS5maWxlX2luZm9zWzBdLmZpbGVfbmFtZTtcXFxcbiAgICAgICAgLy92YXIgbGlzdHlwID0gSlNPTi5wYXJzZShnZXRzaGFyKS5maWxlX2luZm9zWzBdLnR5cGU7XFxcXG4gICAgICAgIC8vdmFyIHBmaWxlaWQgPSBKU09OLnBhcnNlKGdldHNoYXIpLmZpbGVfaW5mb3NbMF0uZmlsZV9pZDtcXFxcblxcXFxuICAgICAgICB2YXIgc2hhcmV0b2tlbiA9IEpTT04ucGFyc2UoZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS92Mi9zaGFyZV9saW5rL2dldF9zaGFyZV90b2tlbicsIHtcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgYm9keTogJ3tcXFxcXFxcInNoYXJlX3B3ZFxcXFxcXFwiOlxcXFxcXFwiXFxcXFxcXCIsXFxcXFxcXCJzaGFyZV9pZFxcXFxcXFwiOlxcXFxcXFwiJyArIHNoYXJlSWQgKyAnXFxcXFxcXCJ9JyxcXFxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxcXG4gICAgICAgIH0pKS5zaGFyZV90b2tlbjtcXFxcbiAgICAgICAgLy9sb2coc2hhcmV0b2tlbik7XFxcXG5cXFxcbiAgICAgICAgbGV0IG5leHQgPSBnZXRNeVZhcignbmV4dHBhZ2UnLCAnJykgIT0gJycgPyAnLFxcXFxcXFwibWFya2VyXFxcXFxcXCI6XFxcXFxcXCInICsgZ2V0TXlWYXIoJ25leHRwYWdlJykgKyAnXFxcXFxcXCInIDogJyc7XFxcXG4gICAgICAgIGlmICghZGVjb2RlVVJJQ29tcG9uZW50KHJlYWx1cmwpLmluY2x1ZGVzKCcvZm9sZGVyLycpKSB7XFxcXG4gICAgICAgICAgICAvL2lmKCFsaXN0eXAgPT0gJ2ZvbGRlcicpe1xcXFxuICAgICAgICAgICAgdmFyIHJlc2NvZCA9IGZldGNoKCdodHRwczovL2FwaS5hbGl5dW5kcml2ZS5jb20vYWRyaXZlL3YzL2ZpbGUvbGlzdCcsIHtcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxcXG4gICAgICAgICAgICAgICAgICAgICdYLVNoYXJlLVRva2VuJzogc2hhcmV0b2tlblxcXFxuICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgYm9keTogJ3tcXFxcXFxcInNoYXJlX2lkXFxcXFxcXCI6XFxcXFxcXCInICsgc2hhcmVJZCArICdcXFxcXFxcIixcXFxcXFxcInBhcmVudF9maWxlX2lkXFxcXFxcXCI6XFxcXFxcXCJyb290XFxcXFxcXCIsXFxcXFxcXCJsaW1pdFxcXFxcXFwiOjEwMCxcXFxcXFxcImltYWdlX3RodW1ibmFpbF9wcm9jZXNzXFxcXFxcXCI6XFxcXFxcXCJpbWFnZS9yZXNpemUsd18xNjAvZm9ybWF0LGpwZWdcXFxcXFxcIixcXFxcXFxcImltYWdlX3VybF9wcm9jZXNzXFxcXFxcXCI6XFxcXFxcXCJpbWFnZS9yZXNpemUsd18xOTIwL2Zvcm1hdCxqcGVnXFxcXFxcXCIsXFxcXFxcXCJ2aWRlb190aHVtYm5haWxfcHJvY2Vzc1xcXFxcXFwiOlxcXFxcXFwidmlkZW8vc25hcHNob3QsdF8xMDAwLGZfanBnLGFyX2F1dG8sd18zMDBcXFxcXFxcIixcXFxcXFxcIm9yZGVyX2J5XFxcXFxcXCI6XFxcXFxcXCJuYW1lXFxcXFxcXCIsXFxcXFxcXCJvcmRlcl9kaXJlY3Rpb25cXFxcXFxcIjpcXFxcXFxcIkFTQ1xcXFxcXFwiJyArIG5leHQgKyAnfScsXFxcXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgLy9sb2cocmVzY29kKTtcXFxcbiAgICAgICAgICAgIHZhciBsaXN0eXAgPSBKU09OLnBhcnNlKHJlc2NvZCkuaXRlbXNbMF0udHlwZTtcXFxcbiAgICAgICAgICAgIHZhciBwZmlsZWlkID0gSlNPTi5wYXJzZShyZXNjb2QpLml0ZW1zWzBdLmZpbGVfaWQ7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICB2YXIgbGlzdHlwID0gJ2ZvbGRlcic7XFxcXG4gICAgICAgICAgICB2YXIgcGZpbGVpZCA9IGRlY29kZVVSSUNvbXBvbmVudChyZWFsdXJsKS5zcGxpdCgnZm9sZGVyLycpWzFdXFxcXG5cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvL2xvZyhodG1sKTtcXFxcbiAgICAgICAgaWYgKGxpc3R5cCA9PSAnZm9sZGVyJykge1xcXFxuICAgICAgICAgICAgdmFyIHJlc2NvZCA9IGZldGNoKCdodHRwczovL2FwaS5hbGl5dW5kcml2ZS5jb20vYWRyaXZlL3YzL2ZpbGUvbGlzdCcsIHtcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxcXG4gICAgICAgICAgICAgICAgICAgICdYLVNoYXJlLVRva2VuJzogc2hhcmV0b2tlblxcXFxuICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgYm9keTogJ3tcXFxcXFxcInNoYXJlX2lkXFxcXFxcXCI6XFxcXFxcXCInICsgc2hhcmVJZCArICdcXFxcXFxcIixcXFxcXFxcInBhcmVudF9maWxlX2lkXFxcXFxcXCI6XFxcXFxcXCInICsgcGZpbGVpZCArICdcXFxcXFxcIixcXFxcXFxcImxpbWl0XFxcXFxcXCI6MTAwLFxcXFxcXFwiaW1hZ2VfdGh1bWJuYWlsX3Byb2Nlc3NcXFxcXFxcIjpcXFxcXFxcImltYWdlL3Jlc2l6ZSx3XzE2MC9mb3JtYXQsanBlZ1xcXFxcXFwiLFxcXFxcXFwiaW1hZ2VfdXJsX3Byb2Nlc3NcXFxcXFxcIjpcXFxcXFxcImltYWdlXFxcXFxcXFwvcmVzaXplLHdfMTkyMC9mb3JtYXQsanBlZ1xcXFxcXFwiLFxcXFxcXFwidmlkZW9fdGh1bWJuYWlsX3Byb2Nlc3NcXFxcXFxcIjpcXFxcXFxcInZpZGVvL3NuYXBzaG90LHRfMTAwMCxmX2pwZyxhcl9hdXRvLHdfMzAwXFxcXFxcXCIsXFxcXFxcXCJvcmRlcl9ieVxcXFxcXFwiOlxcXFxcXFwibmFtZVxcXFxcXFwiLFxcXFxcXFwib3JkZXJfZGlyZWN0aW9uXFxcXFxcXCI6XFxcXFxcXCJBU0NcXFxcXFxcIicgKyBuZXh0ICsgJ30nLFxcXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxcXG4gICAgICAgICAgICB9KTtcXFxcblxcXFxuICAgICAgICB9IC8v5Y+W5paH5Lu25aS5XFxcXG4gICAgICAgIC8vbG9nKHJlc2NvZCk7XFxcXG5cXFxcbiAgICAgICAgaWYgKEpTT04ucGFyc2UocmVzY29kKS5uZXh0X21hcmtlcikge1xcXFxuICAgICAgICAgICAgbGV0IG1hcmtlciA9IEpTT04ucGFyc2UocmVzY29kKS5uZXh0X21hcmtlcjtcXFxcbiAgICAgICAgICAgIGlmIChtYXJrZXIubGVuZ3RoID4gMTApIHtcXFxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcignbmV4dHBhZ2UnLCBtYXJrZXIpO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKCduZXh0cGFnZScpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHZhciBjb250cyA9IEpTT04ucGFyc2UocmVzY29kKS5pdGVtczsgICAgICAgIFxcXFxuICAgICAgICB2YXIgdHVpc29uZyA9IFtdO1xcXFxuICAgICAgICBmb3IgKHZhciBpIGluIGNvbnRzKSB7XFxcXG4gICAgICAgICAgICB2YXIgbGlzdHlwID0gY29udHNbaV0udHlwZTtcXFxcbiAgICAgICAgICAgIGlmIChsaXN0eXAgIT0gJ2ZvbGRlcicpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgY2F0ZSA9IGNvbnRzW2ldLmNhdGVnb3J5O1xcXFxuICAgICAgICAgICAgICAgIHZhciBmbmFtZSA9IGNvbnRzW2ldLm5hbWU7XFxcXG4gICAgICAgICAgICAgICAgaWYgKGNhdGUgPT0gJ3ZpZGVvJykge1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+TuicgKyBjb250c1tpXS5uYW1lO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F0ZSA9PSAnZG9jJykge1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+TlicgKyBjb250c1tpXS5uYW1lO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F0ZSA9PSAnaW1hZ2UnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5a8JyArIGNvbnRzW2ldLm5hbWU7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjYXRlID09ICd6aXAnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5OmJyArIGNvbnRzW2ldLm5hbWU7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gY29udHNbaV0ubmFtZVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoY29udHNbaV0uZmlsZV9pZCkubGF6eVJ1bGUoKHNoYXJlSWQsIHNoYXJldG9rZW4sIGNhdGUsIGZuYW1lLCByZWZ0b2tlbikgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hbGlsYXp5XFxcXFxcXCIpKHNoYXJlSWQsIGlucHV0LCBjYXRlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSwgc2hhcmVJZCwgc2hhcmV0b2tlbiwgY2F0ZSwgZm5hbWUsIHJlZnRva2VuKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogZm9ybWF0RGF0ZShjb250c1tpXS51cGRhdGVkX2F0KSArICcgICcgKyBmb3JtYXRTaXplKGNvbnRzW2ldLnNpemUpLFxcXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGNvbnRzW2ldLmZpbGVfaWRcXFxcbiAgICAgICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnXFxcXG5cXFxcbiAgICAgICAgICAgICAgICB9KTsgICAgICAgICAgICAgICAgXFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ/Cfk4InICsgY29udHNbaV0ubmFtZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5JyArIGNvbnRzW2ldLmZpbGVfaWQgKyAnPz8/ZnlwYWdlJykucnVsZSgoc2hhcmVJZCwgc2hhcmV0b2tlbiwgcHVzaG5hbWUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3J1bGVsb29wJywge30pKS5ydWxlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSwgc2hhcmVJZCwgc2hhcmV0b2tlbiwgY29udHNbaV0ubmFtZSksXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG5cXFxcbiAgICAgICAgICAgIH0gLy9lbmQgaWZcXFxcbiAgICAgICAgfSAvL2VuZCBmb3IgaVxcXFxuICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogJ+asp+asp++8jOaKpemUmeS6huOAgicsXFxcXG4gICAgICAgICAgICB1cmw6IGRlY29kZVVSSUNvbXBvbmVudChnZXRSZXNDb2RlKCkuc3BsaXQoJyMjJylbMV0pLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG59XFxcXG4vKlxcXFxuc2V0SG9tZVJlc3VsdCh7XFxcXG4gICAgZGF0YTogaXRlbXNcXFxcbn0pO1xcXFxuKi9cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLpmL/ph4zltYzlpZdcXFwiLFxcXCJwYXRoXFxcIjpcXFwicnVsZWxvb3BcXFwiLFxcXCJydWxlXFxcIjpcXFwidmFyIGl0ZW1zID0gW107XFxcXG5cXFxcbmZ1bmN0aW9uIGZvcm1hdERhdGUoX2RhdGUsIF9mbXQpIHtcXFxcbiAgICBsZXQgZm10ID0gX2ZtdCB8fCBcXFxcXFxcInl5eXktTU0tZGQgSEg6bW06c3NcXFxcXFxcIjtcXFxcbiAgICBjb25zdCBkYXRlID0gIWlzTmFOKF9kYXRlKSA/IG5ldyBEYXRlKF9kYXRlICogMTAwMCkgOiBuZXcgRGF0ZShfZGF0ZSk7XFxcXG4gICAgY29uc3QgbyA9IHtcXFxcbiAgICAgICAgXFxcXFxcXCJNK1xcXFxcXFwiOiBkYXRlLmdldE1vbnRoKCkgKyAxLCAvL+aciOS7vSBcXFxcbiAgICAgICAgXFxcXFxcXCJkK1xcXFxcXFwiOiBkYXRlLmdldERhdGUoKSwgLy/ml6UgXFxcXG4gICAgICAgIFxcXFxcXFwiaCtcXFxcXFxcIjogZGF0ZS5nZXRIb3VycygpICUgMTIgPT0gMCA/IDEyIDogZGF0ZS5nZXRIb3VycygpICUgMTIsXFxcXG4gICAgICAgIFxcXFxcXFwiSCtcXFxcXFxcIjogZGF0ZS5nZXRIb3VycygpLCAvL+Wwj+aXtiBcXFxcbiAgICAgICAgXFxcXFxcXCJtK1xcXFxcXFwiOiBkYXRlLmdldE1pbnV0ZXMoKSwgLy/liIYgXFxcXG4gICAgICAgIFxcXFxcXFwicytcXFxcXFxcIjogZGF0ZS5nZXRTZWNvbmRzKCksIC8v56eSIFxcXFxuICAgICAgICBcXFxcXFxcInErXFxcXFxcXCI6IE1hdGguZmxvb3IoKGRhdGUuZ2V0TW9udGgoKSArIDMpIC8gMyksIC8v5a2j5bqmIFxcXFxuICAgICAgICBcXFxcXFxcIlNcXFxcXFxcIjogZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAvL+avq+enkiBcXFxcbiAgICB9O1xcXFxuICAgIGlmICgvKHkrKS8udGVzdChmbXQpKSB7XFxcXG4gICAgICAgIGZtdCA9IGZtdC5yZXBsYWNlKFJlZ0V4cC4kMSwgKGRhdGUuZ2V0RnVsbFllYXIoKSArIFxcXFxcXFwiXFxcXFxcXCIpLnN1YnN0cig0IC0gUmVnRXhwLiQxLmxlbmd0aCkpO1xcXFxuICAgIH1cXFxcbiAgICBmb3IgKGxldCBrIGluIG8pIHtcXFxcbiAgICAgICAgaWYgKG5ldyBSZWdFeHAoXFxcXFxcXCIoXFxcXFxcXCIgKyBrICsgXFxcXFxcXCIpXFxcXFxcXCIpLnRlc3QoZm10KSkge1xcXFxuICAgICAgICAgICAgZm10ID0gZm10LnJlcGxhY2UoUmVnRXhwLiQxLCAoUmVnRXhwLiQxLmxlbmd0aCA9PSAxKSA/IChvW2tdKSA6ICgoXFxcXFxcXCIwMFxcXFxcXFwiICsgb1trXSkuc3Vic3RyKChcXFxcXFxcIlxcXFxcXFwiICsgb1trXSkubGVuZ3RoKSkpO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiBmbXQ7XFxcXG59O1xcXFxuXFxcXG5mdW5jdGlvbiBmb3JtYXRTaXplKHNpemUpIHtcXFxcbiAgICBpZiAoIXNpemUpIHtcXFxcbiAgICAgICAgcmV0dXJuICcnO1xcXFxuICAgIH1cXFxcbiAgICBjb25zdCB1bml0cyA9IFsnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQiddO1xcXFxuICAgIGxldCBpID0gMDtcXFxcbiAgICB3aGlsZSAoc2l6ZSA+PSAxMDI0KSB7XFxcXG4gICAgICAgIHNpemUgLz0gMTAyNDtcXFxcbiAgICAgICAgaSsrO1xcXFxuICAgIH1cXFxcbiAgICBzaXplID0gaSA/IE51bWJlcihzaXplLnRvRml4ZWQoMikpIDogc2l6ZTtcXFxcbiAgICByZXR1cm4gYCR7c2l6ZX0gJHt1bml0c1tpXX1gO1xcXFxufVxcXFxuLy9sZXQgdHZpcCA9IGdldEl0ZW0oJ2hpa2VydHZib3hzZXQnLCAnJyk7XFxcXG5cXFxcbi8vbG9nKGdldFJlc0NvZGUoKSk7XFxcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxcXG4gICAgY2xlYXJNeVZhcignbmV4dHBhZ2UnKTtcXFxcbn1cXFxcbmlmIChNWV9QQUdFID4gMSAmJiBnZXRNeVZhcignbmV4dHBhZ2UnLCAnJykgPT0gJycpIHtcXFxcbiAgICBsb2coJ+ayoeacieS4i+S4gOmhtScpO1xcXFxufSBlbHNlIHtcXFxcbiAgICBsZXQgcmVmdG9rZW4gPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2ljeS9pY3ktYWxpLXRva2VuLmpzb24nLCB7fSkpWzBdLnJlZnJlc2hfdG9rZW47XFxcXG5cXFxcbiAgICBsZXQgbmV4dCA9IGdldE15VmFyKCduZXh0cGFnZScsICcnKSAhPSAnJyA/ICcsXFxcXFxcXCJtYXJrZXJcXFxcXFxcIjpcXFxcXFxcIicgKyBnZXRNeVZhcignbmV4dHBhZ2UnKSArICdcXFxcXFxcIicgOiAnJztcXFxcblxcXFxuICAgIHZhciByZXNjb2QgPSBmZXRjaCgnaHR0cHM6Ly9hcGkuYWxpeXVuZHJpdmUuY29tL2Fkcml2ZS92My9maWxlL2xpc3QnLCB7XFxcXG4gICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxcXG4gICAgICAgICAgICAnWC1TaGFyZS1Ub2tlbic6IHNoYXJldG9rZW5cXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAgYm9keTogJ3tcXFxcXFxcInNoYXJlX2lkXFxcXFxcXCI6XFxcXFxcXCInICsgc2hhcmVJZCArICdcXFxcXFxcIixcXFxcXFxcInBhcmVudF9maWxlX2lkXFxcXFxcXCI6XFxcXFxcXCInICsgZ2V0UmVzQ29kZSgpLnNwbGl0KCc/Pz8nKVswXSArICdcXFxcXFxcIixcXFxcXFxcImxpbWl0XFxcXFxcXCI6MTAwLFxcXFxcXFwiaW1hZ2VfdGh1bWJuYWlsX3Byb2Nlc3NcXFxcXFxcIjpcXFxcXFxcImltYWdlL3Jlc2l6ZSx3XzE2MC9mb3JtYXQsanBlZ1xcXFxcXFwiLFxcXFxcXFwiaW1hZ2VfdXJsX3Byb2Nlc3NcXFxcXFxcIjpcXFxcXFxcImltYWdlXFxcXFxcXFwvcmVzaXplLHdfMTkyMC9mb3JtYXQsanBlZ1xcXFxcXFwiLFxcXFxcXFwidmlkZW9fdGh1bWJuYWlsX3Byb2Nlc3NcXFxcXFxcIjpcXFxcXFxcInZpZGVvL3NuYXBzaG90LHRfMTAwMCxmX2pwZyxhcl9hdXRvLHdfMzAwXFxcXFxcXCIsXFxcXFxcXCJvcmRlcl9ieVxcXFxcXFwiOlxcXFxcXFwibmFtZVxcXFxcXFwiLFxcXFxcXFwib3JkZXJfZGlyZWN0aW9uXFxcXFxcXCI6XFxcXFxcXCJBU0NcXFxcXFxcIicgKyBuZXh0ICsgJ30nLFxcXFxuICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcXFxuICAgIH0pO1xcXFxuICAgIC8vbG9nKHJlc2NvZCk7XFxcXG4gICAgaWYgKEpTT04ucGFyc2UocmVzY29kKS5uZXh0X21hcmtlcikge1xcXFxuICAgICAgICBsZXQgbWFya2VyID0gSlNPTi5wYXJzZShyZXNjb2QpLm5leHRfbWFya2VyO1xcXFxuICAgICAgICBpZiAobWFya2VyLmxlbmd0aCA+IDEwKSB7XFxcXG4gICAgICAgICAgICBwdXRNeVZhcignbmV4dHBhZ2UnLCBtYXJrZXIpO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgY2xlYXJNeVZhcignbmV4dHBhZ2UnKTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICB2YXIgY29udHMgPSBKU09OLnBhcnNlKHJlc2NvZCkuaXRlbXM7XFxcXG4gICAgdmFyIHR1aXNvbmcgPSBbXTtcXFxcbiAgICBmb3IgKHZhciBpIGluIGNvbnRzKSB7XFxcXG5cXFxcbiAgICAgICAgdmFyIGxpc3R5cCA9IGNvbnRzW2ldLnR5cGU7XFxcXG4gICAgICAgIGlmIChsaXN0eXAgIT0gJ2ZvbGRlcicpIHtcXFxcbiAgICAgICAgICAgIHZhciBjYXRlID0gY29udHNbaV0uY2F0ZWdvcnk7XFxcXG4gICAgICAgICAgICB2YXIgZm5hbWUgPSBjb250c1tpXS5uYW1lO1xcXFxuICAgICAgICAgICAgaWYgKGNhdGUgPT0gJ3ZpZGVvJykge1xcXFxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5O6JyArIGNvbnRzW2ldLm5hbWU7XFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNhdGUgPT0gJ2RvYycpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+TlicgKyBjb250c1tpXS5uYW1lO1xcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChjYXRlID09ICdpbWFnZScpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+WvCcgKyBjb250c1tpXS5uYW1lO1xcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChjYXRlID09ICd6aXAnKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gJ/Cfk6YnICsgY29udHNbaV0ubmFtZTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gY29udHNbaV0ubmFtZVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcXFxuICAgICAgICAgICAgICAgIHVybDogJChjb250c1tpXS5maWxlX2lkKS5sYXp5UnVsZSgoc2hhcmVJZCwgc2hhcmV0b2tlbiwgY2F0ZSwgZm5hbWUsIHJlZnRva2VuKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYWxpbGF6eVxcXFxcXFwiKShzaGFyZUlkLCBpbnB1dCwgY2F0ZSk7XFxcXG4gICAgICAgICAgICAgICAgfSwgc2hhcmVJZCwgc2hhcmV0b2tlbiwgY2F0ZSwgZm5hbWUsIHJlZnRva2VuKSxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiBmb3JtYXREYXRlKGNvbnRzW2ldLnVwZGF0ZWRfYXQpICsgJyAgJyArIGZvcm1hdFNpemUoY29udHNbaV0uc2l6ZSksXFxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGNvbnRzW2ldLmZpbGVfaWRcXFxcbiAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8xJ1xcXFxuXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn8J+TgicgKyBjb250c1tpXS5uYW1lLFxcXFxuICAgICAgICAgICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eScgKyBjb250c1tpXS5maWxlX2lkICsgJz8/P2Z5cGFnZScpLnJ1bGUoKHNoYXJlSWQsIHNoYXJldG9rZW4sIHB1c2huYW1lKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3J1bGVsb29wJywge30pKS5ydWxlKTtcXFxcbiAgICAgICAgICAgICAgICB9LCBzaGFyZUlkLCBzaGFyZXRva2VuLCBjb250c1tpXS5uYW1lKSxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJ1xcXFxuICAgICAgICAgICAgfSk7XFxcXG5cXFxcbiAgICAgICAgfSAvL2VuZCBpZlxcXFxuXFxcXG4gICAgfVxcXFxufVxcXFxuc2V0UmVzdWx0KGl0ZW1zKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLpmL/ph4zmjqjpgIFcXFwiLFxcXCJwYXRoXFxcIjpcXFwicHVzaFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbi8vbG9nKE1ZX1VSTCk7XFxcXG52YXIgaXRlbXMgPSBbXTtcXFxcbnZhciByZWFsdXJsID0gTVlfVVJMLnNwbGl0KCcjIycpWzFdLnNwbGl0KCc/Pz8nKVswXTtcXFxcbmlmIChkZWNvZGVVUklDb21wb25lbnQocmVhbHVybCkuaW5jbHVkZXMoJ3d3dy5hbGl5dW5kcml2ZScpICYmICFyZWFsdXJsLmluY2x1ZGVzKCclM0IlN0InKSkge1xcXFxuICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3NoYXJpZCcsIHt9KSkucnVsZSlcXFxcbn1cXFxcbnNldFJlc3VsdChpdGVtcyk7XFxcIn1dXCIsXCJwcm94eVwiOlwiXCJ9IiwidGl0bGUiOiLkurrkurrnlLXlvbHnvZEs55m+5bqm5LqR55uYLOmYv+mHjOe9keebmOS4i+i9vSJ9
Add Comment
Please, Sign In to add comment