xiaomianao666

小程序:茄子

Apr 1st, 2025
397
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@茄子@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi6IyE5a2QIiwiYXV0aG9yIjoi5rWB6IuPIiwidXJsIjoiaGlrZXI6Ly9lbXB0eSIsInZlcnNpb24iOjEsImNvbF90eXBlIjoibW92aWVfMiIsImNsYXNzX25hbWUiOiIiLCJ0eXBlIjoidmlkZW8iLCJjbGFzc191cmwiOiIiLCJhcmVhX25hbWUiOiIiLCJhcmVhX3VybCI6IiIsInNvcnRfbmFtZSI6IiIsInllYXJfbmFtZSI6IiIsInNvcnRfdXJsIjoiIiwieWVhcl91cmwiOiIiLCJmaW5kX3J1bGUiOiJqczogXG52YXIgZCA9IFtdO1xuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9ob21lJykpLnJ1bGUpO1xuc2V0UmVzdWx0KGQpIiwic2VhcmNoX3VybCI6Imhpa2VyOi8vZW1wdHk/cGFnZT1meXBhZ2Uma3c9KioiLCJncm91cCI6IjE4KyIsInNlYXJjaEZpbmQiOiJqczpcbnZhciBreT1NWV9VUkwuc3BsaXQoJz0nKVsyXTtcbnB1dE15VmFyKCdrZXl3b3JkJyxreSlcbiQucmVxdWlyZShcInNlYXJjaFwiKSIsImRldGFpbF9jb2xfdHlwZSI6Im1vdmllXzMiLCJkZXRhaWxfZmluZF9ydWxlIjoiIiwic2RldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJzZGV0YWlsX2ZpbmRfcnVsZSI6IioiLCJ1YSI6Im1vYmlsZSIsInByZVJ1bGUiOiIiLCJwYWdlcyI6Ilt7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiYWVzXCIsXCJwYXRoXCI6XCJhZXNcIixcInJ1bGVcIjpcIi8v5Yqg6L29Q3J5cHRvSlPlupNcXG5ldmFsKGdldENyeXB0b0pTKCkpXFxuLy8xM+S9jeaXtumXtOaIs1xcbnZhciB0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpICk7XFxuLy/nroDljZXljLnphY1cXG5sZXQgc3AgPSAoaXQsIHMsIGUpID0+IFN0cmluZyhpdC5zcGxpdChzKVsxXSkuc3BsaXQoZSlbMF07XFxuLy/popzoibJcXG5mdW5jdGlvbiBzdHJvbmcoZCwgYykge1xcbiAgICByZXR1cm4gJ+KAmOKAmOKAmeKAmTxzdHJvbmc+PGZvbnQgY29sb3I9IycgKyAoYyB8fCAnMDAwMDAwJykgKyAnPicgKyBkICsgJzwvZm9udD48L3N0cm9uZz4nO1xcbn1cXG4vL+eUn+aIkOaXtumXtOaIs1xcbmZ1bmN0aW9uIGdldEN1cnJlbnRUaW1lc3RhbXAoKSB7XFxuICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcXG59XFxuLy9tZDXliqDlr4ZcXG5mdW5jdGlvbiBtZDUoc3RyKSB7XFxuICAgIHJldHVybiBDcnlwdG9KUy5NRDUoc3RyKS50b1N0cmluZygpO1xcbn1cXG4vL3NoYTI1NuWKoOWvhlxcbmZ1bmN0aW9uIHNoYTI1NihzdHIpIHtcXG4gICAgcmV0dXJuIENyeXB0b0pTLlNIQTI1NihzdHIpLnRvU3RyaW5nKCk7XFxufVxcbi8v6aKc6ImyXFxuZnVuY3Rpb24gY29sb3IodHh0KSB7XFxuICAgIHJldHVybiAgJzxiPjxmb250IGNvbG9yPScgKyAnI0ZGNjY5OScgKyAnPicgKyB0eHQgKyAnPC9mb250PjwvYj4nXFxufVxcbi8v6IyE5a2Q6Kej5a+G5Ye95pWwXFxuZnVuY3Rpb24gcXpEZWNyeXB0KHdvcmQpIHtcXG4gICAgY29uc3Qga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcInlpbnN1MTIzNDVhYmNkZWZcXFwiKTtcXG4gICAgY29uc3QgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFwia2VqaTEyMzQ1Njk5OTk5OVxcXCIpO1xcbiAgICBsZXQgZW5jcnlwdGVkSGV4U3RyID0gQ3J5cHRvSlMuZW5jLkJhc2U2NC5wYXJzZSh3b3JkKTtcXG4gICAgbGV0IGRlY3J5cHQgPSBDcnlwdG9KUy5BRVMuZGVjcnlwdCh7XFxuICAgICAgICBjaXBoZXJ0ZXh0OiBlbmNyeXB0ZWRIZXhTdHJcXG4gICAgfSwga2V5LCB7XFxuICAgICAgICBpdjogaXYsXFxuICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQyxcXG4gICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcbiAgICB9KTtcXG4gICAgaWYgKGRlY3J5cHQpIHtcXG4gICAgICAgIGxldCBkZWNyeXB0ZWRTdHIgPSBkZWNyeXB0LnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXG4gICAgICAgIHJldHVybiBkZWNyeXB0ZWRTdHI7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICAvLyDop6Plr4blpLHotKXvvIzov5Tlm55udWxs5oiW6ZSZ6K+v5L+h5oGvXFxuICAgICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbn1cXG5cXG5cXG4vLyDnjKvlkqrop6Plr4blh73mlbBcXG5mdW5jdGlvbiBEZWNyeXB0KHdvcmQpIHtcXG4gICAgY29uc3Qga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcIjYyNTIyMmY5MTQ5ZTk2MWRcXFwiKTtcXG4gICAgY29uc3QgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFwiNWVmZHRmNjA2MGUybzMzMFxcXCIpO1xcbiAgICBsZXQgZW5jcnlwdGVkSGV4U3RyID0gQ3J5cHRvSlMuZW5jLkhleC5wYXJzZSh3b3JkKTtcXG4gICAgbGV0IGRlY3J5cHQgPSBDcnlwdG9KUy5BRVMuZGVjcnlwdCh7XFxuICAgICAgICBjaXBoZXJ0ZXh0OiBlbmNyeXB0ZWRIZXhTdHJcXG4gICAgfSwga2V5LCB7XFxuICAgICAgICBpdjogaXYsXFxuICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQyxcXG4gICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcbiAgICB9KTtcXG4gICAgaWYgKGRlY3J5cHQpIHtcXG4gICAgICAgIGxldCBkZWNyeXB0ZWRTdHIgPSBkZWNyeXB0LnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXG4gICAgICAgIHJldHVybiBkZWNyeXB0ZWRTdHI7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICAvLyDop6Plr4blpLHotKXvvIzov5Tlm55udWxs5oiW6ZSZ6K+v5L+h5oGvXFxuICAgICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbn1cXG5cXG4vLyDnjKvlkqrliqDlr4blh73mlbBcXG5mdW5jdGlvbiBFbmNyeXB0KHBsYWludGV4dCkge1xcbiAgICBjb25zdCBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFwiNjI1MjIyZjkxNDllOTYxZFxcXCIpO1xcbiAgICBjb25zdCBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKFxcXCI1ZWZkdGY2MDYwZTJvMzMwXFxcIik7XFxuICAgIHZhciBlbmNyeXB0ZWQgPSBDcnlwdG9KUy5BRVMuZW5jcnlwdChwbGFpbnRleHQsIGtleSwge1xcbiAgICAgICAgaXY6IGl2LFxcbiAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsXFxuICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcXG4gICAgfSk7XFxuICAgIHZhciBjaXBoZXJ0ZXh0ID0gZW5jcnlwdGVkLmNpcGhlcnRleHQudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkhleCk7XFxuICAgIHJldHVybiBjaXBoZXJ0ZXh0LnRvVXBwZXJDYXNlKCk7XFxufVxcblxcbnZhciBsYXp5ID0gJCgnJykuaW1hZ2UoKCkgPT4ge1xcbmNvbnN0IENyeXB0b1V0aWwgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vYXNzZXRzL2NyeXB0by1qYXZhLmpzXFxcIik7XFxuXFx0bGV0IGlkID0gQ3J5cHRvVXRpbC5EYXRhLnBhcnNlVVRGOChcXFwiZjVkOTY1ZGY3NTMzNjI3MFxcXCIpO1xcblxcdGxldCBpdiA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZVVURjgoXFxcIjk3YjYwMzk0YWJjMmZiZTFcXFwiKTtcXG5cXHRsZXQgdGV4dERhdGEgPSBDcnlwdG9VdGlsLkRhdGEucGFyc2VJbnB1dFN0cmVhbShpbnB1dCk7XFxuXFx0bGV0IGVuY3J5cHRlZCA9IENyeXB0b1V0aWwuQUVTLmRlY3J5cHQodGV4dERhdGEsIGlkLCB7XFxuICBcXHRtb2RlOiBcXFwiQUVTL0NCQy9QS0NTN1BhZGRpbmdcXFwiLFxcblxcdFxcdGl2OiBpdlxcblxcdH0pO1xcblxcdHJldHVybiBlbmNyeXB0ZWQudG9JbnB1dFN0cmVhbSgpO1xcbn0pXFxuXFxuLy/op4bpopHor7fmsYJcXG52YXIgdm9kID0gJCgnJykubGF6eVJ1bGUoKCkgPT4ge1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcbnRyeXtcXG52YXIgdXJsID1KU09OLnBhcnNlKGZldGNoKGlucHV0KSkudmlkZW87XFxucmV0dXJuIHVybCtgI2lzVmlkZW89dHJ1ZSNgXFxufWNhdGNoKGUpe1xcbiAgICBsb2coZS5tZXNzYWdlKVxcbiAgICByZXR1cm4gJ3RvYXN0Oi8v6K+35rGC5aSx6LSlJ1xcbn1cXG59KVxcbi8v5Zu+54mH6K+35rGCXFxudmFyIHBpY3MgPSAkKCcnKS5sYXp5UnVsZSgoKSA9PiB7XFxubGV0IGltZz0gSlNPTi5wYXJzZShmZXRjaChpbnB1dCkpLmNvbnRlbnQucmVwbGFjZSgvXFxcXCQvZywnJykucmVwbGFjZSgv5YiG5YmyL2csJycpLnNwbGl0KCdAJyk7XFxucmV0dXJuICdwaWNzOi8vJytpbWcuam9pbignJiYnKTtcXG59KVxcbi8v54yr5ZKq5ryr55S76Kej5p6QXFxudmFyIG1hb21pbWFuaHVhang9JCgnJykubGF6eVJ1bGUoKCkgPT4geyBcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKVxcbnZhciBzaWduPUVuY3J5cHQoJ3tcXFwidXNlcl9pZFxcXCI6MTc5MDM2OCxcXFwibGlzdF9pZFxcXCI6JytpbnB1dCsnfScpO1xcbnZhciBob3N0PSdodHRwOi8vMTE5LjI4LjUyLjE5Mzo4MDg5L2FwaS9jb21pYy93YXRjaD9wYXJhbXM9JytzaWduO1xcbnZhciBib2R5PSdwYXJhbXM9JytzaWduO1xcbnZhciBodG1sID0gZmV0Y2goaG9zdCwge1xcbiAgICBoZWFkZXJzOiB7XFxuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcXG4gICAgfSxcXG4gICAgbWV0aG9kOiAnUE9TVCdcXG59KTsgXFxudmFyIGh0bWwyPURlY3J5cHQoaHRtbClcXG52YXIgbGlzdD1KU09OLnBhcnNlKGh0bWwyKS5kYXRhO1xcbmxldCBwaWNBcnI9W107XFxubGV0IGxlbj0gbGlzdC5sZW5ndGgtMTtcXG5mb3IgKGkgPSAwOyBpIDw9IGxlbjsgaSsrKSB7XFxuICAgICAgIHBpY0FycltpXSA9IGxpc3RbaV0uaW1hZ2U7XFxuICAgICB9XFxucmV0dXJuICdwaWNzOi8vJytwaWNBcnIuam9pbignJiYnKTtcXG59KVxcblxcbi8v54yr5ZKqRk3op6PmnpBcXG52YXIgbWFvbWlmbWp4PSQoJycpLmxhenlSdWxlKCgpID0+IHsgXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSlcXG52YXIgc2lnbj1FbmNyeXB0KCd7XFxcImlkXFxcIjonK2lucHV0Kyd9Jyk7XFxudmFyIGhvc3Q9J2h0dHA6Ly8xMTkuMjguNTIuMTkzOjgwODkvYXBpL2Jvb2svZGV0YWlsP3BhcmFtcz0nK3NpZ247XFxudmFyIGJvZHk9J3BhcmFtcz0nK3NpZ247XFxudmFyIGh0bWwgPSBmZXRjaChob3N0LCB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxcbiAgICB9LFxcbiAgICBtZXRob2Q6ICdQT1NUJ1xcbn0pOyBcXG52YXIgaHRtbDI9RGVjcnlwdChodG1sKVxcbnZhciB1cmw9SlNPTi5wYXJzZShodG1sMikuZGF0YS5kYXRhWzBdLmNvbnRlbnQ7XFxucmV0dXJuIHVybFxcbn0pXFxuXFxuLy/njKvlkqrop6PmnpBcXG52YXIgbWFvbWlqeD0kKCcnKS5sYXp5UnVsZSgoKSA9PiB7IFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpXFxudmFyIHNpZ249RW5jcnlwdCgne1xcXCJpZFxcXCI6JytpbnB1dCsnfScpO1xcbnZhciBob3N0PSdodHRwOi8vMTE5LjI4LjUyLjE5Mzo4MDg5L2FwaS92aWRlby9kZXRhaWw/cGFyYW1zPScrc2lnbjtcXG52YXIgYm9keT0ncGFyYW1zPScrc2lnbjtcXG52YXIgaHRtbCA9IGZldGNoKGhvc3QsIHtcXG4gICAgaGVhZGVyczoge1xcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXFxuICAgIH0sXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxufSk7IFxcbnZhciBodG1sMj1EZWNyeXB0KGh0bWwpXFxuLy/kuIvovb1cXG4vL3ZhciBkb3duPUpTT04ucGFyc2UoaHRtbDIpLmRhdGEudmlkZW9zWzBdLmRvd247XFxuLy/mlofku7ZcXG52YXIgdXJsPUpTT04ucGFyc2UoaHRtbDIpLmRhdGEudmlkZW9zWzBdLmZpbGU7XFxucmV0dXJuIHVybFxcbn0pXFxuXFxuLy/purvosYbliqDlr4blh73mlbBcXG5mdW5jdGlvbiBtZEVuY3J5cHQocGxhaW50ZXh0KSB7XFxuICAgIGNvbnN0IGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKFxcXCJWcTIzNHpCZVNkR2dZWHpWVEVmbm5qamRtYVRrazdBNFxcXCIpO1xcbiAgICBjb25zdCBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKFxcXCItcDlCW35QblBzMTczMTUwXFxcIik7XFxuICAgIHZhciBlbmNyeXB0ZWQgPSBDcnlwdG9KUy5BRVMuZW5jcnlwdChwbGFpbnRleHQsIGtleSwge1xcbiAgICAgICAgaXY6IGl2LFxcbiAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsXFxuICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczcgLy8g5rOo5oSP6L+Z6YeM5bqU6K+l5pivQ3J5cHRvSlMucGFkLk5vUGFkZGluZ1xcbiAgICB9KTtcXG4gICAgdmFyIGNpcGhlcnRleHQgPSBlbmNyeXB0ZWQuY2lwaGVydGV4dC50b1N0cmluZyhDcnlwdG9KUy5lbmMuQmFzZTY0KTtcXG4gICAgcmV0dXJuIGNpcGhlcnRleHQ7XFxufVxcblxcbi8vIOm6u+ixhuino+WvhuWHveaVsFxcbmZ1bmN0aW9uIG1kRGVjcnlwdCh3b3JkKSB7XFxuICAgIGNvbnN0IGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKFxcXCJWcTIzNHpCZVNkR2dZWHpWVEVmbm5qamRtYVRrazdBNFxcXCIpO1xcbiAgICBjb25zdCBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKFxcXCItcDlCW35QblBzXFxcIitpdjApO1xcbiAgICBsZXQgZW5jcnlwdGVkSGV4U3RyID0gQ3J5cHRvSlMuZW5jLkJhc2U2NC5wYXJzZSh3b3JkKTtcXG4gICAgbGV0IGRlY3J5cHQgPSBDcnlwdG9KUy5BRVMuZGVjcnlwdCh7XFxuICAgICAgICBjaXBoZXJ0ZXh0OiBlbmNyeXB0ZWRIZXhTdHJcXG4gICAgfSwga2V5LCB7XFxuICAgICAgICBpdjogaXYsXFxuICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQyxcXG4gICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzNyAvLyDms6jmhI/ov5nph4zlupTor6XmmK9DcnlwdG9KUy5wYWQuTm9QYWRkaW5nXFxuICAgIH0pO1xcbiAgICBpZiAoZGVjcnlwdCkge1xcbiAgICAgICAgbGV0IGRlY3J5cHRlZFN0ciA9IGRlY3J5cHQudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpO1xcbiAgICAgICAgcmV0dXJuIGRlY3J5cHRlZFN0cjtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIC8vIOino+WvhuWksei0pe+8jOi/lOWbnm51bGzmiJbplJnor6/kv6Hmga9cXG4gICAgICAgIHJldHVybiBudWxsO1xcbiAgICB9XFxufVxcblxcbi8v6bq76LGG5Zu+54mH6Kej5a+GXFxudmFyIG1kbGF6eSA9ICQoJycpLmltYWdlKCgpID0+IHtcXG5jb25zdCBDcnlwdG9VdGlsID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL2Fzc2V0cy9jcnlwdG8tamF2YS5qc1xcXCIpO1xcblxcdGxldCBrZXkgPSBDcnlwdG9VdGlsLkRhdGEucGFyc2VVVEY4KFxcXCJwbmhYZ04wVVxcXCIpO1xcblxcdGxldCBpdiA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZVVURjgoXFxcIkdZNGdFdkJEXFxcIik7XFxuXFx0bGV0IHRleHREYXRhID0gQ3J5cHRvVXRpbC5EYXRhLnBhcnNlSW5wdXRTdHJlYW0oaW5wdXQpLmJhc2U2NERlY29kZSgpO1xcblxcdGxldCBlbmNyeXB0ZWQgPSBDcnlwdG9VdGlsLkRFUy5kZWNyeXB0KHRleHREYXRhLCBrZXksIHtcXG4gIFxcdG1vZGU6IFxcXCJERVMvQ0JDL1BLQ1M3UGFkZGluZ1xcXCIsXFxuXFx0XFx0aXY6IGl2XFxuXFx0fSk7XFxuXFx0bGV0IGJhc2U2NFRleHQgPSBlbmNyeXB0ZWQudG9TdHJpbmcoKS5zcGxpdChcXFwiYmFzZTY0LFxcXCIpWzFdO1xcbiAgICBsZXQgZW5jcnlwdGVkMCA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZUJhc2U2NChiYXNlNjRUZXh0LCBfYmFzZTY0Lk5PX1dSQVApO1xcbiAgICByZXR1cm4gZW5jcnlwdGVkMC50b0lucHV0U3RyZWFtKCk7XFxufSlcXG5cXG4vLzkxdHbop4bpopHop6PmnpBcXG52YXIgdHZ2b2QgPSAkKCcnKS5sYXp5UnVsZSgoKSA9PiB7XFxuZXZhbChnZXRDcnlwdG9KUygpKVxcbmZ1bmN0aW9uIG1kNShzdHIpIHtcXG4gICAgcmV0dXJuIENyeXB0b0pTLk1ENShzdHIpLnRvU3RyaW5nKCk7XFxufVxcbnZhciB0MCA9TWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCkrMTtcXG52YXIgd3NTZWNyZXQ9bWQ1KCdFOU1wQzdENUFxV3ZqbVhMM2hHa1EyWGpaTm9oQVEnK2lucHV0LnJlcGxhY2UoL2h0dHAocyk/OlxcXFwvXFxcXC8uKj9cXFxcLy9nLCcvJykrdDApO1xcbnZhciB1cmw9aW5wdXQrJz93c1NlY3JldD0nK3dzU2VjcmV0Kycmd3NUaW1lPScrdDA7XFxud3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL3ZpZGVvMC5tM3U4JywgcmVxdWVzdCh1cmwpKTtcXG5yZXR1cm4gZ2V0UGF0aCgnaGlrZXI6Ly9maWxlcy9jYWNoZS92aWRlbzAubTN1OCcpKycjJyt1cmw7XFxufSlcXG4vL2x1dHViZeWbvueJh+ino+WvhlxcbnZhciBsdWxhenkgPSAkKCcnKS5pbWFnZSgoKSA9PiB7XFxuY29uc3QgQ3J5cHRvVXRpbCA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9hc3NldHMvY3J5cHRvLWphdmEuanNcXFwiKTtcXG5cXHRsZXQga2V5ID0gQ3J5cHRvVXRpbC5EYXRhLnBhcnNlSGV4KFxcXCJiMmYzODQyODY2Zjk1ODNkMWVjZTYxYzRlMDU1YzI1NVxcXCIpO1xcblxcdGxldCBpdiA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZUhleChcXFwiZTAxZWRlNjMzMWQzN2FmY2M3YmUwNTU5N2Q2NTRkMjJcXFwiKTtcXG5cXHRsZXQgdGV4dERhdGEgPSBDcnlwdG9VdGlsLkRhdGEucGFyc2VJbnB1dFN0cmVhbShpbnB1dCk7XFxuXFx0bGV0IGVuY3J5cHRlZCA9IENyeXB0b1V0aWwuQUVTLmRlY3J5cHQodGV4dERhdGEsIGtleSwge1xcbiAgXFx0bW9kZTogXFxcIkFFUy9DQkMvUEtDUzdQYWRkaW5nXFxcIixcXG5cXHRcXHRpdjogaXZcXG5cXHR9KTtcXG5cXHRyZXR1cm4gZW5jcnlwdGVkLnRvSW5wdXRTdHJlYW0oKTtcXG59KVxcbi8vaW5z5Zu+54mH6Kej5a+G77yMYmFzZTY0XFxudmFyIGluc2xhenkgPSAkKCcnKS5pbWFnZSgoKSA9PiB7XFxuICAgIGNvbnN0IENyeXB0b1V0aWwgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vYXNzZXRzL2NyeXB0by1qYXZhLmpzXFxcIik7XFxuICAgIGxldCB0ZXh0RGF0YSA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZUlucHV0U3RyZWFtKGlucHV0KTtcXG4gICAgbGV0IGJhc2U2NFRleHQgPSB0ZXh0RGF0YS50b1N0cmluZygpLnNwbGl0KFxcXCJiYXNlNjQsXFxcIilbMV07XFxuICAgIGxldCBlbmNyeXB0ZWQwID0gQ3J5cHRvVXRpbC5EYXRhLnBhcnNlQmFzZTY0KGJhc2U2NFRleHQsIF9iYXNlNjQuTk9fV1JBUCk7XFxuICAgIHJldHVybiBlbmNyeXB0ZWQwLnRvSW5wdXRTdHJlYW0oKTtcXG59KVxcblxcblxcbi8v5rW36KeS5Zu+54mH6Kej5a+GXFxudmFyIG4gPSBmdW5jdGlvbihlKSB7XFxuICAgIGZvciAobyA9IFxcXCJcXFwiLCBpID0gMCwgYSA9IDAsIHZvaWQgMDsgaSA8IGUubGVuZ3RoOykge1xcbiAgICAgICAgdmFyIHQsIG4sIG8sIGksIGE7XFxuICAgICAgICAodCA9IGUuY2hhckNvZGVBdChpKSkgPCAxMjggPyAobyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHQpLCBpKyspIDogMTkxIDwgdCAmJiB0IDwgMjI0ID8gKGEgPSBlLmNoYXJDb2RlQXQoaSArIDEpLCBvICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKDMxICYgdCkgPDwgNiB8IDYzICYgYSksIGkgKz0gMikgOiAoYSA9IGUuY2hhckNvZGVBdChpICsgMSksIG4gPSBlLmNoYXJDb2RlQXQoaSArIDIpLCBvICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKDE1ICYgdCkgPDwgMTIgfCAoNjMgJiBhKSA8PCA2IHwgNjMgJiBuKSwgaSArPSAzKTtcXG4gICAgfVxcbiAgICByZXR1cm4gbztcXG59O1xcbnZhciBkZWNyeXB0RGF0YSA9IGZ1bmN0aW9uKHQpIHtcXG4gICAgdmFyIG8sIGksIGEsIHIsIHMsIGMsIHUgPSBcXFwiXFxcIixcXG4gICAgICAgIGQgPSAwLFxcbiAgICAgICAgdHQgPSBcXFwiQUJDRCpFRkdISUpLTE1OT1BRUlNUVVZXWCNZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MTIzNDU2Nzg5MFxcXCJcXG4gICAgZm9yICh0ID0gdC5yZXBsYWNlKC9bXkEtWmEtejAtOVxcXFwqXFxcXCNdL2csIFxcXCJcXFwiKTsgZCA8IHQubGVuZ3RoOykgYSA9IHR0LmluZGV4T2YodC5jaGFyQXQoZCsrKSksIG8gPSAoMTUgJiAociA9IHR0LmluZGV4T2YodC5jaGFyQXQoZCsrKSkpKSA8PCA0IHwgKHMgPSB0dC5pbmRleE9mKHQuY2hhckF0KGQrKykpKSA+PiAyLCBpID0gKDMgJiBzKSA8PCA2IHwgKGMgPSB0dC5pbmRleE9mKHQuY2hhckF0KGQrKykpKSwgdSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGEgPDwgMiB8IHIgPj4gNCksIDY0ICE9IHMgJiYgKHUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShvKSksIDY0ICE9IGMgJiYgKHUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShpKSk7XFxuICAgIHJldHVybiBuKHUpO1xcbn07XFxuXFxuJC5leHBvcnRzLmltYWdlRGVjcnlwdCA9IGZ1bmN0aW9uKCkge1xcbiAgICBsZXQgamF2YUltcG9ydCA9IG5ldyBKYXZhSW1wb3J0ZXIoKTtcXG4gICAgamF2YUltcG9ydC5pbXBvcnRQYWNrYWdlKFxcbiAgICAgICAgUGFja2FnZXMuY29tLmV4YW1wbGUuaGlrZXJ2aWV3LnV0aWxzXFxuICAgICk7XFxuICAgIHdpdGgoamF2YUltcG9ydCkge1xcbiAgICAgICAgbGV0IGJ5dGVzID0gRmlsZVV0aWwudG9CeXRlcyhpbnB1dCk7XFxuICAgICAgICBieXRlcyA9IG5ldyBqYXZhLmxhbmcuU3RyaW5nKGJ5dGVzLCAnVVRGLTgnKVxcbiAgICAgICAgbGV0IHJlcyA9IGRlY3J5cHREYXRhKGJ5dGVzICsgXFxcIlxcXCIpO1xcbiAgICAgICAgcmVzID0gbmV3IGphdmEubGFuZy5TdHJpbmcocmVzKVxcbiAgICAgICAgcmVzID0gcmVzLnNwbGl0KFxcXCJiYXNlNjQsXFxcIilbMV07XFxuICAgICAgICByZXR1cm4gRmlsZVV0aWwudG9JbnB1dFN0cmVhbShfYmFzZTY0LmRlY29kZShyZXMsIF9iYXNlNjQuTk9fV1JBUCkpO1xcbiAgICB9XFxufVxcblxcblxcbmZ1bmN0aW9uIHBhZ2VBZGQocGFnZSkge1xcbiAgICBpZiAoZ2V0TXlWYXIoXFxcInBhZ2VcXFwiKSkge1xcbiAgICAgICAgcHV0TXlWYXIoXFxcInBhZ2VcXFwiLCAocGFyc2VJbnQocGFnZSkgKyAxKSArICcnKTtcXG4gICAgfVxcbiAgICByZXR1cm47XFxufSAvL+e/u+mhtVxcblxcbmZ1bmN0aW9uIHBhZ2VNb3ZldG8ocGFnZSwgcGFnZXMpIHtcXG4gICAgdmFyIGxvbmdDbGljayA9IFt7XFxuICAgICAgICB0aXRsZTogXFxcIummlumhtVxcXCIsXFxuICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoXFxcInBhZ2VcXFwiLCBcXFwiMVxcXCIpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgIH0pLFxcbiAgICB9LCB7XFxuICAgICAgICB0aXRsZTogXFxcIuS4iumhtVxcXCIsXFxuICAgICAgICBqczogJC50b1N0cmluZygocGFnZSkgPT4ge1xcbiAgICAgICAgICAgIGlmIChwYWdlID4gMSkge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwicGFnZVxcXCIsIChwYXJzZUludChwYWdlKSAtIDEpKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCBwYWdlKSxcXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6IFxcXCLlvZPliY3nrKxcXFwiICsgcGFnZSArIFxcXCLpobVcXFwiLFxcbiAgICAgICAganM6IFxcXCJcXFwiLFxcbiAgICB9LCB7XFxuICAgICAgICB0aXRsZTogXFxcIui3s+i9rFxcXCIsXFxuICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIpLmlucHV0KCgpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInBhZ2VcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9KSxcXG4gICAgfV07XFxuICAgIGlmICh0eXBlb2YocGFnZXMpICE9ICd1bmRlZmluZWQnKSB7XFxuICAgICAgICB2YXIgZXh0cmExID0ge1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5bC+6aG1XFxcIiArIHBhZ2VzLFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChwYWdlcykgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwicGFnZVxcXCIsIHBhZ2VzKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICB9LCBwYWdlcyksXFxuICAgICAgICB9O1xcbiAgICAgICAgbG9uZ0NsaWNrLnB1c2goZXh0cmExKVxcbiAgICB9XFxuICAgIHJldHVybiBsb25nQ2xpY2tcXG59IC8v6ZW/5oyJ6Lez6aG1XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLliIbnsbtcIixcInBhdGhcIjpcIkNhdGVcIixcInJ1bGVcIjpcImZ1bmN0aW9uIHN0cm9uZyhkLCBjKSB7XFxuICAgIHJldHVybiAn4oCY4oCY4oCZ4oCZPHN0cm9uZz48Zm9udCBjb2xvcj0jJyArIChjIHx8ICcwMDAwMDAnKSArICc+JyArIGQgKyAnPC9mb250Pjwvc3Ryb25nPic7XFxufVxcbi8v5YiX6KGoLGNvbOm7mOiupOS4uidzY3JvbGxfYnV0dG9uJ1xcbmZ1bmN0aW9uIENhdGUobGlzdCxuLGQsY29sKSB7XFxuICAgIGlmKCFjb2wpe1xcbiAgICAgICAgY29sPSdzY3JvbGxfYnV0dG9uJztcXG4gICAgfVxcbiAgICB2YXIgaW5kZXhfbj1saXN0WzBdLmlkLnNwbGl0KCcmJylbMF07XFxuICAgIGxpc3QuZm9yRWFjaChkYXRhPT57XFxuICAgICAgICB2YXIgdGl0bGUgPSBkYXRhLnRpdGxlLnNwbGl0KCcmJyk7XFxuICAgICAgICB2YXIgaWQ9ZGF0YS5pZC5zcGxpdCgnJicpO1xcbiAgICAgICAgaWYoZGF0YS5pbWchPW51bGwpe1xcbiAgICAgICAgICAgIHZhciBpbWc9ZGF0YS5pbWcuc3BsaXQoJyYnKTtcXG4gICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgIHZhciBpbWc9W107XFxuICAgICAgICB9XFxuICAgICAgICB0aXRsZS5mb3JFYWNoKCh0aXRsZSxpbmRleCk9PntcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTooZ2V0TXlWYXIobixpbmRleF9uKT09aWRbaW5kZXhdP3N0cm9uZyh0aXRsZSwgJ0ZGNjY5OScpIDogdGl0bGUpLFxcbiAgICAgICAgICAgICAgICBpbWc6aW1nW2luZGV4XSxcXG4gICAgICAgICAgICAgICAgdXJsOiQoaWRbaW5kZXhdKS5sYXp5UnVsZSgobix0aXRsZSxpZCkgPT4ge1xcbiAgICAgICAgICAgICAgIHB1dE15VmFyKG4sIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LCBuLHRpdGxlLGlkW2luZGV4XSksXFxuICAgICAgICAgICAgY29sX3R5cGU6Y29sLFxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snLFxcbiAgICB9KTtcXG4gICAgfSlcXG4gICAgcmV0dXJuIGQ7XFxufVxcbiQuZXhwb3J0cy5DYXRlID0gQ2F0ZTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIjAw6aaW6aG1XCIsXCJwYXRoXCI6XCJob21lXCIsXCJydWxlXCI6XCJqczpcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgIGQucHVzaCh7wqDCoMKgXFxuICAgICAgICB0aXRsZTogXFxcIuaQnOe0oiBcXFwiLFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgIHB1dE15VmFyKCdrZXl3b3JkJyxpbnB1dClcXG4gICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3NlYXJjaD9wYWdlPWZ5cGFnZSZrdz1cXFwiICsgaW5wdXRcXG4gICAgfSksXFxuICAgICAgICDCoMKgwqBkZXNjOiBcXFwi6K+36L6T5YWl5pCc57Si5YWz6ZSu6K+NXFxcIixcXG4gICAgICAgIMKgwqDCoGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICB9KVxcbn07XFxudmFyIHBnPSBNWV9VUkwucmVwbGFjZSgnaGlrZXI6Ly9lbXB0eSMjJywgJycpO1xcbnZhciB0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpKTsgXFxudmFyIGMxPSBbe3RpdGxlOiAn6aaW6aG1Jue7vOWQiCcsaWQ6ICcxJjImMyY0JjUnLGltZzonaHR0cHM6Ly9naHByb3h5Lm5ldC9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbHMxMjU3ODEwMDMvdHViaWFvL21haW4vbW92aWUvMTI3LnN2ZyZodHRwczovL2docHJveHkubmV0L2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sczEyNTc4MTAwMy90dWJpYW8vbWFpbi9tb3ZpZS8xMzcuc3ZnJmh0dHBzOi8vZ2hwcm94eS5uZXQvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL3R1Ymlhby9tYWluL21vdmllLzExMy5zdmcmaHR0cHM6Ly9naHByb3h5Lm5ldC9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbHMxMjU3ODEwMDMvdHViaWFvL21haW4vbW92aWUvMTE0LnN2ZyZodHRwczovL2docHJveHkubmV0L2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sczEyNTc4MTAwMy90dWJpYW8vbWFpbi9tb3ZpZS8xMjIuc3ZnJ31dO1xcbmlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgJC5yZXF1aXJlKFxcXCJDYXRlXFxcIikuQ2F0ZShjMSwnYzEnLGQsJ2ljb25fMl9yb3VuZCcpO1xcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiAnbGluZScsXFxufSx7XFxuICAgIGNvbF90eXBlOiAnYmlnX2JsYW5rX2Jsb2NrJyxcXG59XFxuLHtcXG4gICAgY29sX3R5cGU6ICdiaWdfYmxhbmtfYmxvY2snLFxcbn0pO1xcbn1cXG52YXIg5YiG57G7PWdldE15VmFyKCdjMScsICcxJyk7XFxuaWYo5YiG57G7PT0xKXtcXG4kLnJlcXVpcmUoXFxcInZpZGVvXFxcIilcXG59ZWxzZSBpZijliIbnsbs9PTIpe1xcbiQucmVxdWlyZShcXFwiem9uZ2hlXFxcIilcXG59XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8yXCIsXCJuYW1lXCI6XCLmkJzntKJcIixcInBhdGhcIjpcInNlYXJjaFwiLFwicnVsZVwiOlwianM6IFxcbnZhciBkID0gW107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxudmFyIHBnPU1ZX1VSTC5zcGxpdCgnPScpWzFdLnJlcGxhY2UoJyZrdycsJycpO1xcbmlmKE1ZX1BBR0U9PTEpe1xcbnZhciBkYXRhPUpTT04ucGFyc2UoZ2V0SXRlbSgnc2VhcmNoJykpLmNvbmZpZztcXG52YXIgdXJsX249ZGF0YVswXS5hcGkrZGF0YVswXS5wbGF0Zm9ybTtcXG5kYXRhLmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICB2YXIgdXJsPWRhdGEuYXBpK2RhdGEucGxhdGZvcm07XFxuICAgICAgICBpZigoZGF0YS50aXRsZSE9J+emj+WIqScpJighZGF0YS5wbGF0Zm9ybS5pbmNsdWRlcygneXVlcGFvJykpKXtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKCfmkJzntKLliIbnsbsnLHVybF9uKT09dXJsP3N0cm9uZyhkYXRhLnRpdGxlLCdGRjY2OTknKTpkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIHVybDokKCcnKS5sYXp5UnVsZSgodGl0bGUsdXJsLGNhdGUpID0+IHtcXG4gICAgICAgICAgICAgICBwdXRNeVZhcign5pCc57Si5YiG57G7JywgdXJsKTtcXG4gICAgICAgICAgICAgICBwdXRNeVZhcign5pCc57Si5YiG57G75ZCNJyx0aXRsZSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSxkYXRhLnRpdGxlLHVybCwn5pCc57Si5YiG57G7JyksXFxuICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBrZXk6J+aQnOe0ouWIhuexuzogJytnZXRNeVZhcign5pCc57Si5YiG57G7Jyx1cmxfbiksXFxuICAgICAgICAgICAgICB3b3JkOifmkJzntKLliIbnsbvlkI06ICcrZ2V0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsJ+inhumikScpLFxcbiAgICAgICAgICAgICAga2V5d29yZDpnZXRNeVZhcigna2V5d29yZCcpLFxcbiAgICAgICAgICB9XFxuICAgIH0pXFxuICAgIH1cXG59KVxcbmQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJyxcXG4gICAgfSk7XFxudmFyIGxpc3Q9SlNPTi5wYXJzZShmZXRjaChnZXRNeVZhcign5pCc57Si5YiG57G7JywnaHR0cDovLzAwMy4yMnMubG9sL3NlYXJjaGNvbmZpZy92aWRlby50eHQnKSkpLnNlYXJjaGFwaTtcXG52YXIgdXJsX249J2h0dHBzOi8vYXBpMS55aWx1c2h1bmZlbmcudG9wLycrbGlzdFswXS5wbGF0Zm9ybSsnLnBocCc7XFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgdmFyIHVybD0naHR0cHM6Ly9hcGkxLnlpbHVzaHVuZmVuZy50b3AvJytkYXRhLnBsYXRmb3JtKycucGhwJztcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKGdldE15VmFyKCfmkJzntKLliIbnsbvlkI0nLCfop4bpopEnKSsn5pCc57Si5YiX6KGoJyx1cmxfbik9PXVybD9zdHJvbmcoZGF0YS50aXRsZSwnRkY2Njk5Jyk6ZGF0YS50aXRsZSxcXG4gICAgICAgICAgICB1cmw6JCgnJykubGF6eVJ1bGUoKHRpdGxlLHVybCxjYXRlKSA9PiB7XFxuICAgICAgICAgICAgICAgcHV0TXlWYXIoZ2V0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsJ+inhumikScpKyfmkJzntKLliJfooagnLCB1cmwpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sZGF0YS50aXRsZSx1cmwsZ2V0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsJ+inhumikScpKyfmkJzntKLliJfooagnKSxcXG4gICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGtleTpnZXRNeVZhcign5pCc57Si5YiG57G75ZCNJywn6KeG6aKRJykrJ+aQnOe0ouWIl+ihqCcsXFxuICAgICAgICAgICAgICB1cmw6dXJsLFxcbiAgICAgICAgICAgICAgd3o6ZGF0YS5wbGF0Zm9ybSxcXG4gICAgICAgICAgICAgIGtleXdvcmQ6Z2V0TXlWYXIoJ2tleXdvcmQnKSxcXG4gICAgICAgICAgfVxcbiAgICB9KVxcbn0pXFxufVxcbnZhciBzZWFyY2hfdXJsPWdldE15VmFyKGdldE15VmFyKCfmkJzntKLliIbnsbvlkI0nLCfop4bpopEnKSsn5pCc57Si5YiX6KGoJyx1cmxfbikrJz9rZXl3b3JkPScrZ2V0TXlWYXIoJ2tleXdvcmQnKSsnJnBhZ2U9JytwZztcXG4vL2xvZyhzZWFyY2hfdXJsKVxcbnZhciBob3N0PXNlYXJjaF91cmwuc3BsaXQoJz8nKVswXTtcXG50cnl7XFxuaWYoZ2V0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsJ+inhumikScpPT0n6KeG6aKRJyl7XFxudmFyIEFycj1bJ2x1c2lyJywnNTFsaWVxaScsJ3Rhbmd0b3V0aWFvJywnNTBkdScsJ3Rpa3RvaycsJ3hpbmdiYScsJ2Fud2FuZ2ppZW1pJywncWl5b3UnLCdjYW9saXVzaGVxdScsJzkxcGFvZnUnLCdtZWlyaWRhc2FpJywncG9ybmh1YicsJ2RvdXlpbm1heCcsJzUxbHVvbGknLCc5MXBvcm5fc2ZrdHYnLCdzaHVpZ3VvcGFpJywnc2lmYW5na3R2Jywnd2VpbWlxdWFuJywnaGVpbGlhb2JkeScsJzUxY2hpZ3VhJ107XFxudmFyIEJycj1bJ2x1dHViZSddO1xcbnZhciBDcnI9WydpbnMnXTtcXG52YXIgcGxhdGZvcm09aG9zdC5tYXRjaCgvdG9wXFxcXC8uKlxcXFwucGhwLylbMF0uc3BsaXQoJy5waHAnKVswXS5zcGxpdCgnLycpWzJdO1xcbi8vbG9nKHBsYXRmb3JtKVxcbnZhciBpdGVtPUpTT04ucGFyc2UoZmV0Y2goc2VhcmNoX3VybCkpLnZpZGVvcztcXG5pdGVtLmZvckVhY2goZGF0YSA9PiB7XFxuICAgIGlmKEFyci5pbmNsdWRlcyhwbGF0Zm9ybSkpe1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZWRfZGF0ZT09bnVsbD8nJzpkYXRhLmNyZWF0ZWRfZGF0ZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSksXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlK2xhenksXFxuICAgICAgICAgICAgdXJsOiBob3N0Kyc/aWQ9JytkYXRhLmlkK3ZvZCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMicsXFxuICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaWQ6ZGF0YS5pZCxcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgfWVsc2UgaWYoQnJyLmluY2x1ZGVzKHBsYXRmb3JtKSl7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6KGRhdGEuY3JlYXRlZF9kYXRlPT1udWxsPycnOmRhdGEuY3JlYXRlZF9kYXRlKSsnICAnKyhkYXRhLmRhdGU9PW51bGw/Jyc6ZGF0YS5kYXRlKSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UrbHVsYXp5LFxcbiAgICAgICAgICAgIHVybDogaG9zdCsnP2lkPScrZGF0YS5pZCt2b2QsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxuICAgICAgICB9KVxcbiAgICB9ZWxzZSBpZihDcnIuaW5jbHVkZXMocGxhdGZvcm0pKXtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzooZGF0YS5jcmVhdGVkX2RhdGU9PW51bGw/Jyc6ZGF0YS5jcmVhdGVkX2RhdGUpKycgICcrKGRhdGEuZGF0ZT09bnVsbD8nJzpkYXRhLmRhdGUpLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZStpbnNsYXp5LFxcbiAgICAgICAgICAgIHVybDogaG9zdCsnP2lkPScrZGF0YS5pZCt2b2QsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxuICAgICAgICB9KVxcbiAgICB9ZWxzZXtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzooZGF0YS5jcmVhdGVkX2RhdGU9PW51bGw/Jyc6ZGF0YS5jcmVhdGVkX2RhdGUpKycgICcrKGRhdGEuZGF0ZT09bnVsbD8nJzpkYXRhLmRhdGUpLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZSxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcbiAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gICAgfSlcXG59ZWxzZSBpZihnZXRNeVZhcign5pCc57Si5YiG57G75ZCNJywn6KeG6aKRJyk9PSflhajnvZHnoLTop6MnKXtcXG4gICAgdmFyIEFycj1bJ3R0dCcsJ2xvYW53b3JkJywnbG9hbndvcmRfMicsJzkxc2hvcnQnLCdzZXBvbmUnLCdsdXNpcicsJ2NhcGUnLCdkZWdyZWUnLCdidXJtYSddO1xcbiAgdmFyIHBsYXRmb3JtPWhvc3QubWF0Y2goL3RvcFxcXFwvLipcXFxcLnBocC8pWzBdLnNwbGl0KCcucGhwJylbMF0uc3BsaXQoJy8nKVs0XTtcXG4gIHZhciBpdGVtPUpTT04ucGFyc2UoZmV0Y2goc2VhcmNoX3VybCkpLnZpZGVvcztcXG4gLy8gbG9nKGl0ZW0pXFxuaXRlbS5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICBpZihBcnIuaW5jbHVkZXMocGxhdGZvcm0pKXtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlK2xhenksXFxuICAgICAgICAgICAgdXJsOiBob3N0Kyc/aWQ9JytkYXRhLmlkK3ZvZCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXG4gICAgICAgIH0pXFxuICAgIH1lbHNle1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxuICAgICAgICAgICAgdXJsOiBob3N0Kyc/aWQ9JytkYXRhLmlkK3ZvZCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXG4gICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgIH0pXFxufWVsc2UgaWYoZ2V0TXlWYXIoJ+aQnOe0ouWIhuexu+WQjScsJ+inhumikScpPT0n55+t6KeG6aKRJyl7XFxuICAgIHZhciBBcnI9Wyd0aWt0b2sxOG5ldycsJzkxZHNwd2ViJywnZG91eWlubWF4JywnOTFwb3JuX3NpZmFuZ2t0dicsJ2ZhbnRhc2knXTtcXG4gIHZhciBwbGF0Zm9ybT1ob3N0Lm1hdGNoKC90b3BcXFxcLy4qXFxcXC5waHAvKVswXS5zcGxpdCgnLnBocCcpWzBdLnNwbGl0KCcvJylbMl07XFxuICB2YXIgaXRlbT1KU09OLnBhcnNlKGZldGNoKHNlYXJjaF91cmwpKS52aWRlb3M7XFxuIC8vIGxvZyhpdGVtKVxcbml0ZW0uZm9yRWFjaChkYXRhID0+IHtcXG4gICAgaWYoQXJyLmluY2x1ZGVzKHBsYXRmb3JtKSl7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZStsYXp5LFxcbiAgICAgICAgICAgIGRlc2M6KGRhdGEuY3JlYXRlZF9kYXRlPT1udWxsPycnOmRhdGEuY3JlYXRlZF9kYXRlKSsnICAnKyhkYXRhLmRhdGU9PW51bGw/Jyc6ZGF0YS5kYXRlKSxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcbiAgICAgICAgfSlcXG4gICAgfWVsc2V7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6KGRhdGEuY3JlYXRlZF9kYXRlPT1udWxsPycnOmRhdGEuY3JlYXRlZF9kYXRlKSsnICAnKyhkYXRhLmRhdGU9PW51bGw/Jyc6ZGF0YS5kYXRlKSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxuICAgICAgICAgICAgdXJsOiBob3N0Kyc/aWQ9JytkYXRhLmlkK3ZvZCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXG4gICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgIH0pXFxufWVsc2UgaWYoZ2V0TXlWYXIoJ+aQnOe0ouWIhuexuycpLmluY2x1ZGVzKCdhY3RyZXNzJyl8KGdldE15VmFyKCfmkJzntKLliIbnsbvlkI0nLCfop4bpopEnKT09J+eVquWPtycpfChnZXRNeVZhcign5pCc57Si5YiG57G75ZCNJywn6KeG6aKRJyk9PSfkuInnuqcnKSl7XFxuICAgIHZhciBBcnI9WydzaHVpZ3VvcGFpJ107XFxuICB2YXIgcGxhdGZvcm09aG9zdC5tYXRjaCgvdG9wXFxcXC8uKlxcXFwucGhwLylbMF0uc3BsaXQoJy5waHAnKVswXS5zcGxpdCgnLycpWzJdO1xcbiAgdmFyIGl0ZW09SlNPTi5wYXJzZShmZXRjaChzZWFyY2hfdXJsKSkudmlkZW9zO1xcbiAvLyBsb2coaXRlbSlcXG5pdGVtLmZvckVhY2goZGF0YSA9PiB7XFxuICAgIGlmKEFyci5pbmNsdWRlcyhwbGF0Zm9ybSkpe1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UrbGF6eSxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZWRfZGF0ZT09bnVsbD8nJzpkYXRhLmNyZWF0ZWRfZGF0ZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSksXFxuICAgICAgICAgICAgdXJsOiBob3N0Kyc/aWQ9JytkYXRhLmlkK3ZvZCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXG4gICAgICAgIH0pXFxuICAgIH1lbHNle1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZWRfZGF0ZT09bnVsbD8nJzpkYXRhLmNyZWF0ZWRfZGF0ZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSksXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlLFxcbiAgICAgICAgICAgIHVybDogaG9zdCsnP2lkPScrZGF0YS5pZCt2b2QsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxuICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICB9KVxcbn1lbHNlIGlmKGdldE15VmFyKCfmkJzntKLliIbnsbvlkI0nLCfop4bpopEnKT09J+WQg+eTnCcpe1xcbiAgdmFyIHd6PWhvc3QubWF0Y2goL3RvcFxcXFwvLipcXFxcLnBocC8pWzBdLnNwbGl0KCcucGhwJylbMF0uc3BsaXQoJy8nKVszXTtcXG4gIHZhciBsaXN0PUpTT04ucGFyc2UoZmV0Y2goc2VhcmNoX3VybCkpLnZpZGVvcztcXG4gLy8gbG9nKGl0ZW0pXFxuaWYod3o9PSdoYWlqaWFvJyl7XFxuICAgIGxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzogZGF0YS5kYXRlLFxcbiAgICAgICAgICAgIGltZzogIGRhdGEuaW1hZ2UgKyBcXFwiQGpzPVxcXCIgKyAkLnRvU3RyaW5nKChydWxlKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYWVzP3J1bGU9XFxcIiArIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1hZ2UuaW1hZ2VEZWNyeXB0KCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgTVlfUlVMRS50aXRsZSksXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2JsYWNrZXJqaTFcXFwiKScsXFxuICAgICAgICAgICAgY29sX3R5cGU6J3BpY18xJyxcXG4gICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke2hvc3R9P2lkPSR7ZGF0YS5pZH1gLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuIH0pXFxufWVsc2V7XFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOiBkYXRhLmRhdGUsXFxuICAgICAgICAgICAgaW1nOiAoKHd6PT0nNTFjZycpfCh3ej09J2hsYmR5Jyl8KHd6PT0ndGlrdG9rMTgnKSk/KGRhdGEuaW1hZ2UrbGF6eSk6ZGF0YS5pbWFnZSxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYmxhY2tlcmppMVxcXCIpJyxcXG4gICAgICAgICAgICBjb2xfdHlwZToncGljXzEnLFxcbiAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7aG9zdH0/aWQ9JHtkYXRhLmlkfWAsXFxuICAgICAgICAgICAgICB3ejp3eixcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gfSlcXG4gfVxcbn1lbHNlIGlmKGdldE15VmFyKCfmkJzntKLliIbnsbvlkI0nLCfop4bpopEnKT09J+Wwj+ivtCcpe1xcbiAgdmFyIHd6PWhvc3QubWF0Y2goL3RvcFxcXFwvLipcXFxcLnBocC8pWzBdLnNwbGl0KCcucGhwJylbMF0uc3BsaXQoJy8nKVszXTtcXG4gIHZhciBsaXN0PUpTT04ucGFyc2UoZmV0Y2goc2VhcmNoX3VybCkpLnZpZGVvcztcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS94aWFvc2h1b2VyamkxXFxcIiknLFxcbiAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcbiAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7aG9zdH0/aWQ9JHtkYXRhLmlkfWAsXFxuICAgICAgICAgICAgICB3ejp3eixcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gfSlcXG59ZWxzZSBpZihnZXRNeVZhcign5pCc57Si5YiG57G75ZCNJywn6KeG6aKRJyk9PSfmvKvnlLsnKXtcXG4gIHZhciB3ej1ob3N0Lm1hdGNoKC90b3BcXFxcLy4qXFxcXC5waHAvKVswXS5zcGxpdCgnLnBocCcpWzBdLnNwbGl0KCcvJylbMl07XFxuICB2YXIgbGlzdD1KU09OLnBhcnNlKGZldGNoKHNlYXJjaF91cmwpKS52aWRlb3M7XFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOiBkYXRhLmRhdGUsXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9tYW5odWFlcmppMVxcXCIpJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMycsXFxuICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaG9zdDpgJHtob3N0fT9pZD0ke2RhdGEuaWR9YCxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcbiAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiB9KVxcbn1lbHNlIGlmKGdldE15VmFyKCfmkJzntKLliIbnsbvlkI0nLCfop4bpopEnKT09J+WbvueJhycpe1xcbiAgdmFyIHd6PWhvc3QubWF0Y2goL3RvcFxcXFwvLipcXFxcLnBocC8pWzBdLnNwbGl0KCcucGhwJylbMF0uc3BsaXQoJy8nKVsyXTtcXG4gIHZhciBsaXN0PUpTT04ucGFyc2UoZmV0Y2goc2VhcmNoX3VybCkpLnZpZGVvcztcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6IGRhdGEuZGF0ZSxcXG4gICAgICAgICAgICBpbWc6IHd6PT0ndGlrdG9rMTgnPyhkYXRhLmltYWdlK2xhenkpOmRhdGEuaW1hZ2UsXFxuICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL2VtcHR5JysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdHVwaWFuZXJqaVxcXCIpJyxcXG4gICAgICAgICAgICB1cmw6IHd6PT0ndHV6YWMnP2RhdGEuaW1hZ2U6KGhvc3QrJz9pZD0nK2RhdGEuaWQrcGljcyksXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzMnLFxcbiAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7aG9zdH0/aWQ9JHtkYXRhLmlkfWAsXFxuICAgICAgICAgICAgICB3ejp3eixcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gfSlcXG59XFxufWNhdGNoKGUpe1xcbiAgICBsb2coZS5tZXNzYWdlKVxcbn1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIjAy57u85ZCIXCIsXCJwYXRoXCI6XCJ6b25naGVcIixcInJ1bGVcIjpcImpzOlxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcbnRyeXtcXG4vL2xvZyhnZXRJdGVtKCdkYXRhJykpXFxuXFxuIC8vIHZhciBsaXN0PWdldEl0ZW0oJ2RhdGEnKS5zcGxpdCgn57u85ZCI5pWw5o2u5byA5aeLJylbMV0uc3BsaXQoJ+e7vOWQiOaVsOaNrue7k+adnycpWzBdLnNwbGl0KCfmjaLooYwnKTtcXG4gdmFyIGxpc3Q9Z2V0SXRlbSgnZGF0YScpLnNwbGl0KCfnu7zlkIjmlbDmja7lvIDlp4snKVsxXS5zcGxpdCgnQVbnmb7np5EnKVswXS5yZXBsYWNlKC/liIblibLnur8vZywn5o2i6KGMJykuc3BsaXQoJ+aNouihjCcpO1xcbiAgbGlzdC5mb3JFYWNoKGRhdGE9PntcXG4gICAgICB2YXIgcWQ9c3AoZGF0YSwgXFxcInFkKFxcXCIsIFxcXCIpXFxcIik7XFxuICAgICAgdmFyIHRwPXNwKGRhdGEsIFxcXCJ0cChcXFwiLCBcXFwiKVxcXCIpO1xcbiAgICAgIHZhciBtYz1zcChkYXRhLCBcXFwibWMoXFxcIiwgXFxcIilcXFwiKTtcXG4gICAgICB2YXIgd3o9c3AoZGF0YSwgXFxcImdqYyhcXFwiLCBcXFwiKVxcXCIpO1xcbiAgICAgIHZhciB5bT1zcChkYXRhLCBcXFwieW0oXFxcIiwgXFxcIilcXFwiKTtcXG4gICAgICB2YXIgbHg9c3AoZGF0YSwgXFxcImx4KFxcXCIsIFxcXCIpXFxcIik7XFxuICAgICAgdmFyIHFiPXFkKycgICcrbWMrJyAgJyt3eisnICAnK3ltKycgICcrbHg7XFxuICAgICAgaWYobHg9PSfkuoznuqfoj5zljZUnKXtcXG4gICAgICBkLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTptYyxcXG4gICAgICAgICAgZGVzYzpxYixcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyMnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS92aWRlb2VyamlcXFwiKScsXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCcsXFxuICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7eW19LyR7d3p9LnBocGAsXFxuICAgICAgICAgICAgICB3ejp3eixcXG4gICAgICAgICAgfVxcbiAgICAgIH0pXFxuICAgICAgfWVsc2UgaWYobHg9PSfpu5HmlpknKXtcXG4gICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6bWMsXFxuICAgICAgICAgIGRlc2M6cWIsXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYmxhY2tlcmppXFxcIiknLFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnLFxcbiAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke3ltfS8ke3d6fS5waHBgLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgICB9KVxcbiAgICAgIH1lbHNlIGlmKGx4PT0n5Zu95YaF55u05pKtJyl7XFxuICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgIHRpdGxlOm1jLFxcbiAgICAgICAgICBkZXNjOnFiLFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjIycrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3poaWJvZXJqaVxcXCIpJyxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJyxcXG4gICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaG9zdDpgJHt5bX0vJHt3en0ucGhwYCxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcbiAgICAgICAgICB9XFxuICAgICAgfSlcXG4gICAgICB9ZWxzZSBpZigobHg9PSflm73lpJbnm7Tmkq0nKXwobHg9PSfop4bpopEnKSl7XFxuICAgICAgICAgIGlmKCFtYy5pbmNsdWRlcygn5YWo572R5pCcJykpe1xcbiAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTptYyxcXG4gICAgICAgICAgZGVzYzpxYixcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9zeXZpZGVvXFxcIiknLFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnLFxcbiAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke3ltfS8ke3d6fS5waHBgLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgICB9KVxcbiAgICAgIH1cXG4gICAgICB9ZWxzZSBpZihseC5pbmNsdWRlcygn5aWzJykmbHguaW5jbHVkZXMoJ+S8mCcpJih3eiE9J21pc3NhdicpKXtcXG4gICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6bWMsXFxuICAgICAgICAgIGRlc2M6cWIsXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvbnZ5b3VlcmppXFxcIiknLFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnLFxcbiAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke3ltfS8ke3d6fS5waHBgLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgICAgICAgfSlcXG4gICAgICB9ZWxzZSBpZihseD09J+W4luWtkCcpe1xcbiAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTptYyxcXG4gICAgICAgICAgZGVzYzpxYixcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90aWVlcmppXFxcIiknLFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnLFxcbiAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke3ltfS8ke3d6fS5waHBgLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgICAgICAgfSlcXG4gICAgICB9ZWxzZSBpZihseD09J+ebtOaSrScpe1xcbiAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTptYyxcXG4gICAgICAgICAgZGVzYzpxYixcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5JysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvemhpYm9qdWhlZXJqaVxcXCIpJyxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJyxcXG4gICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgd3o6bWMsXFxuICAgICAgICAgIH1cXG4gICAgICB9KVxcbiAgICAgIH1lbHNlIGlmKGx4PT0n5ryr55S7Jyl7XFxuICAgICAgICAgIGlmKG1jPT0n54yr5ZKq5ryr55S7Jyl7XFxuICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6bWMsXFxuICAgICAgICAgIGRlc2M6cWIsXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvbWFvbWltYW5odWFcXFwiKScsXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCdcXG4gICAgICB9KVxcbiAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6bWMsXFxuICAgICAgICAgIGRlc2M6cWIsXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvbWFuaHVhZXJqaVxcXCIpJyxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJyxcXG4gICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaG9zdDpgJHt5bX0vJHt3en0ucGhwYCxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcbiAgICAgICAgICB9XFxuICAgICAgfSlcXG4gICAgIH1cXG4gICAgICB9ZWxzZSBpZihseD09J+Wwj+ivtCcpe1xcbiAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTptYyxcXG4gICAgICAgICAgZGVzYzpxYixcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS94aWFvc2h1b2VyamlcXFwiKScsXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCcsXFxuICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7eW19LyR7d3p9LnBocGAsXFxuICAgICAgICAgICAgICB3ejp3eixcXG4gICAgICAgICAgfVxcbiAgICAgIH0pXFxuICAgICAgfWVsc2UgaWYobHg9PSflm77niYcnKXtcXG4gICAgICAgICAgaWYobWM9PSfnjKvlkqrnvo7lm74nKXtcXG4gICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6bWMsXFxuICAgICAgICAgIGRlc2M6cWIsXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvbWFvbWltZWl0dVxcXCIpJyxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJ1xcbiAgICAgICAgICB9KVxcbiAgICAgICAgICB9ZWxzZSBpZihtYyE9J+e+juWbvuiJsuWbvicpe1xcbiAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTptYyxcXG4gICAgICAgICAgZGVzYzpxYixcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9waWNlcmppXFxcIiknLFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnLFxcbiAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke3ltfS8ke3d6fS5waHBgLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgICAgICAgfSlcXG4gICAgICAgICAgfVxcbiAgICAgIH1lbHNlIGlmKGx4PT0n5pyJ5aOw5bCP6K+0Jyl7XFxuICAgICAgICAgIGlmKG1jPT0n54yr5ZKqRk0nKXtcXG4gICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6bWMsXFxuICAgICAgICAgIGRlc2M6cWIsXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvbWFvbWlGTVxcXCIpJyxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJ1xcbiAgICAgICAgICB9KVxcbiAgICAgICAgICB9XFxuICAgICAgfVxcbiAgfSlcXG4vKlxcbnZhciB6aXlvbmc9Z2V0SXRlbSgnZGF0YScpLnJlcGxhY2UoJy0nLCcnKS5zcGxpdCgn5YiG5Ymy57q/JylbMV0uc3BsaXQoJ+aNouihjCcpO1xcbiAgeml5b25nLmZvckVhY2goZGF0YT0+e1xcbiAgICAgIHZhciBxZD1zcChkYXRhLCBcXFwicWQoXFxcIiwgXFxcIilcXFwiKTtcXG4gICAgICB2YXIgdHA9c3AoZGF0YSwgXFxcInRwKFxcXCIsIFxcXCIpXFxcIik7XFxuICAgICAgdmFyIG1jPXNwKGRhdGEsIFxcXCJtYyhcXFwiLCBcXFwiKVxcXCIpO1xcbiAgICAgIHZhciB3ej1zcChkYXRhLCBcXFwiZ2pjKFxcXCIsIFxcXCIpXFxcIik7XFxuICAgICAgdmFyIHltPXNwKGRhdGEsIFxcXCJ5bShcXFwiLCBcXFwiKVxcXCIpO1xcbiAgICAgIHZhciBseD1zcChkYXRhLCBcXFwibHgoXFxcIiwgXFxcIilcXFwiKTtcXG4gICAgICB2YXIgcWI9cWQrJyAgJyttYysnICAnK3d6KycgICcreW0rJyAgJytseDtcXG4gICAgICBpZihtYy5pbmNsdWRlcygn6Ym06LWPJykpe1xcbiAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTptYyxcXG4gICAgICAgICAgZGVzYzpxYixcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS92aWRlb2VyamlcXFwiKScsXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCcsXFxuICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7eW19LyR7d3p9LnBocGAsXFxuICAgICAgICAgICAgICB3ejp3eixcXG4gICAgICAgICAgfVxcbiAgICAgIH0pXFxuICAgICAgfVxcbiAgICAgIH0pXFxuICAgICAgKi9cXG59Y2F0Y2goZSl7XFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfMlwiLFwibmFtZVwiOlwi6KeG6aKR5YiG57G7XCIsXCJwYXRoXCI6XCJ2aWRlb2VyamlcIixcInJ1bGVcIjpcImpzOiBcXG52YXIgZCA9IFtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcbnRyeXtcXG5sZXQgaG9zdD1NWV9QQVJBTVMuaG9zdC5yZXBsYWNlKCdodHRwOi8vYXBpLnBocGppZWtvdS50b3AnLCdodHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcCcpO1xcbnZhciB3ej1NWV9QQVJBTVMud3o7XFxudmFyIOinhumikeWIhuexuz1mZXRjaChob3N0Kyc/Z2V0c29ydCcpXFxubGV0IGRhdGE9IEpTT04ucGFyc2Uo6KeG6aKR5YiG57G7KTtcXG4vL2xvZyhkYXRhKVxcbnZhciBrZXlzPU9iamVjdC5rZXlzKGRhdGEpLnNsaWNlKDIpO1xcbi8vbG9nKGtleXMpXFxudmFyIGtleV9uPWtleXNbMF07XFxua2V5cy5mb3JFYWNoKGtleSA9PiB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKCfop4bpopHliIbnsbsnK3d6LGtleV9uKT09a2V5P3N0cm9uZyhrZXksJ0ZGNjY5OScpOmtleSxcXG4gICAgICAgICAgICB1cmw6JChrZXkpLmxhenlSdWxlKChrZXksd3opID0+IHtcXG4gICAgICAgICAgICAgICBwdXRNeVZhcign6KeG6aKR5YiG57G7Jyt3eiwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sIGtleSx3eiksXFxuICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICB9KVxcbiAgICB9KVxcbmRhdGFbZ2V0TXlWYXIoJ+inhumikeWIhuexuycrd3osa2V5X24pXS5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS92b2RlcmppMVxcXCIpJyxcXG4gICAgICAgICAgIGNvbF90eXBlOid0ZXh0XzMnLFxcbiAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaG9zdDpgJHtob3N0fT9zb3J0PSR7ZGF0YS5pZH0mcGFnZT1gLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgfSlcXG59KVxcbn1jYXRjaChlKXtcXG4gICAgbG9nKGUubWVzc2FnZSlcXG4gICAgdG9hc3QoJ+eci+S4jeS6hicpXFxufVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwidGV4dF80XCIsXCJuYW1lXCI6XCLop4bpopHkuoznuqdcIixcInBhdGhcIjpcInZvZGVyamkxXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZD1bXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKVxcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbMV1cXG52YXIgaG9zdD1NWV9QQVJBTVMuaG9zdCtwZztcXG52YXIgdXJsPWhvc3Quc3BsaXQoJz8nKVswXTtcXG52YXIgd3o9TVlfUEFSQU1TLnd6O1xcbnRyeXtcXG4gICAgdmFyIGxpc3Q9IEpTT04ucGFyc2UoZmV0Y2goaG9zdCkpLnZpZGVvcztcXG4gIC8vICBsb2cobGlzdClcXG5pZigod3o9PSd4YmsnKXwod3o9PSdtZCcpKXtcXG4gICAgbGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZWRfZGF0ZT09bnVsbD8nJzpkYXRhLmNyZWF0ZWRfZGF0ZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSksXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlLFxcbiAgICAgICAgICAgIHVybDogdXJsKyc/aWQ9JytkYXRhLmlkK3ZvZCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXG4gICAgICAgIH0pXFxuIH0pXFxufWVsc2UgaWYod3o9PSdtYW9taScpe1xcbiAgICBsaXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6KGRhdGEuY3JlYXRlZF9kYXRlPT1udWxsPycnOmRhdGEuY3JlYXRlZF9kYXRlKSsnICAnKyhkYXRhLmRhdGU9PW51bGw/Jyc6ZGF0YS5kYXRlKSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxuICAgICAgICAgICAgdXJsOiB1cmwrJz9pZD0nK2RhdGEuaWQrdm9kLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcbiAgICB9KVxcbiB9KVxcbn1lbHNlIGlmKHd6PT0neGNsJyl7XFxuICAgIGxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzooZGF0YS5jcmVhdGVkX2RhdGU9PW51bGw/Jyc6ZGF0YS5jcmVhdGVkX2RhdGUpKycgICcrKGRhdGEuZGF0ZT09bnVsbD8nJzpkYXRhLmRhdGUpLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZSxcXG4gICAgICAgICAgICB1cmw6IHVybCsnP2lkPScrZGF0YS5pZCt2b2QsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxuICAgIH0pXFxuIH0pXFxufWVsc2UgaWYod3o9PSdxaXNlbWFvJyl7XFxuICAgIGxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzpkYXRhLmR1cmF0aW9uLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZSxcXG4gICAgICAgICAgICB1cmw6IHVybCsnP2lkPScrZGF0YS5pZCt2b2QsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxuICAgIH0pXFxuIH0pXFxufWVsc2UgaWYod3o9PSc5MXBmJyl7XFxuICAgIGxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzpwYXJzZUludChkYXRhLmR1cmF0aW9uLzYwKSsnOicrcGFyc2VJbnQoZGF0YS5kdXJhdGlvbiU2MCksXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlK2xhenksXFxuICAgICAgICAgICAgdXJsOiB1cmwrJz9pZD0nK2RhdGEuaWQrdm9kLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcbiAgICB9KVxcbiB9KVxcbn1lbHNle1xcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzogKGRhdGEuZGF0ZS5pbmNsdWRlcygnLScpP2RhdGEuZGF0ZTpkYXRhLmNyZWF0ZWRfZGF0ZSkrJ1xcXFx0XFxcXHRcXFxcdFxcXFx0JysoZGF0YS5kdXJhdGlvbj09bnVsbD8nJzpkYXRhLmR1cmF0aW9uKSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UrbGF6eSxcXG4gICAgICAgICAgICB1cmw6IHVybCsnP2lkPScrZGF0YS5pZCt2b2QsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxuICAgICAgICB9KVxcbiB9KVxcbiB9XFxuIFxcbn1jYXRjaChlKXtcXG4gICAgbG9nKGUubWVzc2FnZSlcXG4gICAgIHRvYXN0KCfnnIvkuI3kuoYnKVxcbn1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzJcIixcIm5hbWVcIjpcIum7keaWmeWIhuexu1wiLFwicGF0aFwiOlwiYmxhY2tlcmppXCIsXCJydWxlXCI6XCJqczogXFxudmFyIGQgPSBbXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXG50cnl7XFxubGV0IGhvc3Q9TVlfUEFSQU1TLmhvc3QucmVwbGFjZSgnaHR0cDovL2FwaS5waHBqaWVrb3UudG9wJywnaHR0cHM6Ly9hcGkxLnlpbHVzaHVuZmVuZy50b3AnKTtcXG52YXIgd3o9TVlfUEFSQU1TLnd6O1xcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxuaWYoTVlfUEFHRT09MSl7XFxudmFyIOm7keaWmeWIhuexuz1mZXRjaChob3N0Kyc/Z2V0c29ydCcpXFxudmFyIGRhdGE9IEpTT04ucGFyc2Uo6buR5paZ5YiG57G7KS5jYXRlZ29yaWVzO1xcbnZhciBpbmRleF9uPWRhdGFbMF0uaWQudG9TdHJpbmcoKTtcXG5kYXRhLmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcign6buR5paZ5YiG57G7Jyt3eixpbmRleF9uKT09ZGF0YS5pZC50b1N0cmluZygpP3N0cm9uZyhkYXRhLnRpdGxlLCdGRjY2OTknKTpkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIHVybDokKCcnKS5sYXp5UnVsZSgodGl0bGUsaWQsd3opID0+IHtcXG4gICAgICAgICAgICAgICBwdXRNeVZhcign6buR5paZ5YiG57G7Jyt3eiwgaWQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sZGF0YS50aXRsZSxkYXRhLmlkLnRvU3RyaW5nKCksd3opLFxcbiAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nXFxuICAgIH0pXFxufSlcXG59XFxudmFyIGxpc3Q9SlNPTi5wYXJzZShmZXRjaChob3N0Kyc/c29ydD0nK2dldE15VmFyKCfpu5HmlpnliIbnsbsnK3d6LGluZGV4X24pKycmcGFnZT0nK3BnKSkudmlkZW9zO1xcbi8vbG9nKGxpc3QpXFxuaWYod3o9PSdoYWlqaWFvJyl7XFxuICAgIGxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzogZGF0YS5kYXRlLFxcbiAgICAgICAgICAgIGltZzogIGRhdGEuaW1hZ2UgKyBcXFwiQGpzPVxcXCIgKyAkLnRvU3RyaW5nKChydWxlKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYWVzP3J1bGU9XFxcIiArIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1hZ2UuaW1hZ2VEZWNyeXB0KCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgTVlfUlVMRS50aXRsZSksXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2JsYWNrZXJqaTFcXFwiKScsXFxuICAgICAgICAgICAgY29sX3R5cGU6J3BpY18xJyxcXG4gICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke2hvc3R9P2lkPSR7ZGF0YS5pZH1gLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuIH0pXFxufWVsc2V7XFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOiBkYXRhLmRhdGUsXFxuICAgICAgICAgICAgaW1nOiAoKHd6PT0nNTFjZycpfCh3ej09J2hsYmR5JykpPyhkYXRhLmltYWdlK2xhenkpOmRhdGEuaW1hZ2UsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2JsYWNrZXJqaTFcXFwiKScsXFxuICAgICAgICAgICAgY29sX3R5cGU6J3BpY18xJyxcXG4gICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke2hvc3R9P2lkPSR7ZGF0YS5pZH1gLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuIH0pXFxuIH1cXG4gfWNhdGNoKGUpe1xcbiAgICAgbG9nKGUubWVzc2FnZSlcXG4gfVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwidGV4dF80XCIsXCJuYW1lXCI6XCLpu5HmlpnkuoznuqdcIixcInBhdGhcIjpcImJsYWNrZXJqaTFcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkPVtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpXFxudmFyIHVybD1NWV9QQVJBTVMuaG9zdDtcXG52YXIgd3o9TVlfUEFSQU1TLnd6O1xcbnRyeXtcXG52YXIgZGF0YT0gSlNPTi5wYXJzZShmZXRjaCh1cmwpKTtcXG4vL2xvZyhkYXRhKVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTpwZGZoKGRhdGEudGl0bGVDb2RlLCdoMSYmVGV4dCcpPT0nJz9wZGZoKGRhdGEudGl0bGVDb2RlLCdoMiYmVGV4dCcpOnBkZmgoZGF0YS50aXRsZUNvZGUsJ2gxJiZUZXh0JyksXFxuICAgICAgICAgICAgY29sX3R5cGU6J3JpY2hfdGV4dCdcXG4gICAgICAgIH0pXFxuICAgICAgICBpZih3ej09J2Nndycpe1xcbiAgICAgICAgICAgIHZhciB2aWRlb3M9ZGF0YS52aWRlby5yZXBsYWNlKC9cXFxcJC9nLCcnKS5zcGxpdCgnQCcpO1xcbiAgICAgICAgdmFyIGltZz1kYXRhLmltZ2NvZGUubWF0Y2goL3NyY1xcXFw9XFxcXFxcXCIuKj9cXFxcXFxcIi4qP2FsdC8pWzBdLnNwbGl0KCdcXFwiJylbMV07XFxuICAgIHZpZGVvcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xcbiAgICAgICAgdmFyIG49aW5kZXgrMTtcXG4gICAgICAgIGlmKGl0ZW0pe1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTon6KeG6aKRJytuLFxcbiAgICAgICAgICAgIGRlc2M6JzAnLFxcbiAgICAgICAgICAgIGltZzppbWcsXFxuICAgICAgICAgICAgdXJsOml0ZW0ucmVwbGFjZSgn5YiG5YmyJywnJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdjYXJkX3BpY18xJyxcXG4gICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9KVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS5pbWdjb2RlLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidyaWNoX3RleHQnLFxcbiAgICAgICAgfSlcXG4gICAgICAgIH1lbHNlIGlmKHd6PT0nZ3RsJyl7XFxuICAgICAgICB2YXIgdmlkZW9zPWRhdGEudmlkZW8ucmVwbGFjZSgvXFxcXCQvZywnJykuc3BsaXQoJ0AnKTtcXG4gICAgICAgIHZhciBpbWc9ZGF0YS5waWNDb2RlLm1hdGNoKC9zcmNcXFxcPVxcXFxcXFwiLio/XFxcXFxcXCIuKj9hbHQvKVswXS5zcGxpdCgnXFxcIicpWzFdO1xcbiAgICB2aWRlb3MuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXG4gICAgICAgIHZhciBuPWluZGV4KzE7XFxuICAgICAgICBpZihpdGVtKXtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6J+inhumikScrbixcXG4gICAgICAgICAgICBkZXNjOicwJyxcXG4gICAgICAgICAgICBpbWc6aW1nLFxcbiAgICAgICAgICAgIHVybDppdGVtLnJlcGxhY2UoJ+WIhuWJsicsJycpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMScsXFxuICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgfSlcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnBpY0NvZGUsXFxuICAgICAgICAgICAgY29sX3R5cGU6J3JpY2hfdGV4dCcsXFxuICAgICAgICB9KVxcbiAgICAgICAgfWVsc2UgaWYod3o9PSd0aWt0b2sxOCcpe1xcbiAgICAgICAgdmFyIHZpZGVvcz1kYXRhLnZpZGVvLnJlcGxhY2UoL1xcXFwkL2csJycpLnNwbGl0KCdAJyk7XFxuICAgICAgICB2YXIgaW1ncz1kYXRhLnBpY0NvZGUucmVwbGFjZSgvXFxcXCQvZywnJykuc3BsaXQoJ0DliIblibInKTtcXG4gICAgdmlkZW9zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XFxuICAgICAgICB2YXIgbj1pbmRleCsxO1xcbiAgICAgICAgaWYoaXRlbSl7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOifop4bpopEnK24sXFxuICAgICAgICAgICAgZGVzYzonMCcsXFxuICAgICAgICAgICAgaW1nOmltZ3NbMF0rbGF6eSxcXG4gICAgICAgICAgICB1cmw6aXRlbS5yZXBsYWNlKCfliIblibInLCcnKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2NhcmRfcGljXzEnLFxcbiAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgIH0pXFxuICAgICAgICB2YXIgdGV4dHM9ZGF0YS5pbWdjb2RlLnJlcGxhY2UoL1xcXFw8cFxcXFw+LywnJiYmPHA+JykucmVwbGFjZSgvXFxcXDxcXFxcL3BcXFxcPi8sJyYmJjwvcD4nKS5zcGxpdCgnJiYmJyk7XFxuICAgICAgLy8gIGxvZyh0ZXh0cylcXG4gICAgICAgIHRleHRzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XFxuICAgIGlmIChwZGZoKGl0ZW0sICdwJiZUZXh0JykpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgJ3AmJlRleHQnKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBpZiAocGRmaChpdGVtLCAnaDEmJlRleHQnKSkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCAncCYmVGV4dCcpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0JyxcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIGlmIChwZGZoKGl0ZW0sICdoMiYmVGV4dCcpKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0ZW0sICdwJiZUZXh0JyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgfSlcXG4gICAgdmFyIGltZ3M9ZGF0YS5waWNDb2RlLnJlcGxhY2UoL1xcXFwkL2csJycpLnNwbGl0KCdA5YiG5YmyJyk7XFxuICAgIGltZ3MuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXG4gICAgICAgIGlmKGl0ZW0pe1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBpbWc6aXRlbStsYXp5LFxcbiAgICAgICAgICAgIHVybDppdGVtK2xhenksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdwaWNfMV9mdWxsJyxcXG4gICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9KVxcbiAgICAgICAgfWVsc2UgaWYod3o9PSc1MWNnJyl7XFxuICAgICAgICB2YXIgbj0wXFxuICAgICAgICB2YXIgdGV4dHM9ZGF0YS5pbWdjb2RlLnJlcGxhY2UoL3BzdHlsZS9nLCdwIHN0eWxlJykucmVwbGFjZSgvXFxcXDxcXFxcL3AuKj9cXFxcPlxcXFw8cC4qP1xcXFw+L2csJzwvcD4mJjxwPicpLnNwbGl0KCcmJicpO1xcbiAgICAgICAvLyBsb2codGV4dHMpXFxuICAgICAgIHRleHRzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XFxuICAgICAgICAgICBpZihwZGZoKGl0ZW0sJy5kcGxheWVyJiZkYXRhLWNvbmZpZycpIT0nJyl7XFxuICAgICAgICBsZXQgdXJsPUpTT04ucGFyc2UocGRmaChpdGVtLCcuZHBsYXllciYmZGF0YS1jb25maWcnKSkudmlkZW87XFxuICAgICAgICBuKys7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc6KeG6aKR4oCd4oCdICAnICsgbixcXG4gICAgICAgICAgICBkZXNjOicwJyxcXG4gICAgICAgICAgICBpbWc6IHVybC5waWMgKyBsYXp5LFxcbiAgICAgICAgICAgIHVybDogdXJsLnVybC5yZXBsYWNlKC9cXFxcL1xcXFwvLipwbGF5XFxcXC4vLCcvL2xvbmcuJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdjYXJkX3BpY18xJ1xcbiAgICAgICAgfSk7XFxuICAgICAgIH1cXG4gICAgICAgfSlcXG4gICAgICAgdGV4dHMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXG4gICAgaWYgKHBkZmgoaXRlbSwgJ3AmJlRleHQnKSkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCAncCYmVGV4dCcpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0JyxcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIHZhciBpbWdzID0gcGRmYShpdGVtLCAncCYmaW1nJykubWFwKGggPT4gcGRmaChoLCAnaW1nJiZkYXRhLXhrcmtsbGdsJykpO1xcbiAgICBpbWdzLmZvckVhY2goaXRlbTIgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJycsXFxuICAgICAgICAgICAgaW1nOiBpdGVtMiArIGxhenksXFxuICAgICAgICAgICAgdXJsOiBpdGVtMiArIGxhenksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdwaWNfMV9mdWxsJ1xcbiAgICAgICAgfSk7XFxuICAgIH0pO1xcbiAgICBpZihwZGZoKGl0ZW0sJy5kcGxheWVyJiZkYXRhLWNvbmZpZycpIT0nJyl7XFxuICAgICAgICBsZXQgdXJsPUpTT04ucGFyc2UocGRmaChpdGVtLCcuZHBsYXllciYmZGF0YS1jb25maWcnKSkudmlkZW87XFxuICAgICAgICBuKys7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc6KeG6aKR4oCd4oCdICAnICsgbixcXG4gICAgICAgICAgICBkZXNjOicwJyxcXG4gICAgICAgICAgICBpbWc6IHVybC5waWMgKyBsYXp5LFxcbiAgICAgICAgICAgIHVybDogdXJsLnVybC5yZXBsYWNlKC9cXFxcL1xcXFwvLipwbGF5XFxcXC4vLCcvL2xvbmcuJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdjYXJkX3BpY18xJ1xcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgfSlcXG4gICAgICAgIH1lbHNlIGlmKHd6PT0naGxiZHknKXtcXG4gICAgICAgICAgICB2YXIgbj0wXFxuICAgICAgICB2YXIgdGV4dHM9ZGF0YS5waWNDb2RlLnJlcGxhY2UoL1xcXFw8XFxcXC9wXFxcXD5cXFxcblxcXFw8cFxcXFw+L2csJzwvcD4mJjxwPicpLnNwbGl0KCcmJicpO1xcbiAgICAgICAvLyBsb2codGV4dHMpXFxuICAgICAgICAgdGV4dHMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgIGlmKHBkZmgoaXRlbSwnLmRwbGF5ZXImJmNvbmZpZycpIT0nJyl7XFxuICAgICAgICBsZXQgdXJsPUpTT04ucGFyc2UocGRmaChpdGVtLCcuZHBsYXllciYmY29uZmlnJykpLnZpZGVvO1xcbiAgICAgICAgbisrO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOinhumikeKAneKAnSAgJyArIG4sXFxuICAgICAgICAgICAgZGVzYzonMCcsXFxuICAgICAgICAgICAgaW1nOiB1cmwucGljICsgbGF6eSxcXG4gICAgICAgICAgICB1cmw6IHVybC51cmwucmVwbGFjZSgvXFxcXC9cXFxcLy4qcGxheVxcXFwuLywnLy9sb25nLicpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMSdcXG4gICAgICAgIH0pO1xcbiAgICAgICB9XFxuICAgICAgIH0pXFxuICAgICAgIHZhciBuPTA7XFxuICAgICAgIHRleHRzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XFxuICAgIGlmIChwZGZoKGl0ZW0sICdwJiZUZXh0JykpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgJ3AmJlRleHQnKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICB2YXIgaW1ncyA9IHBkZmEoaXRlbSwgJ3AmJmltZycpLm1hcChoID0+IHBkZmgoaCwgJ2ltZyYmb25sb2FkJykpO1xcbiAgICBpbWdzLmZvckVhY2goaXRlbTIgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJycsXFxuICAgICAgICAgICAgaW1nOiBpdGVtMi5zcGxpdChcXFwiKHRoaXMsJ1xcXCIpWzFdLnNwbGl0KFxcXCInKVxcXCIpWzBdICsgbGF6eSxcXG4gICAgICAgICAgICB1cmw6IGl0ZW0yLnNwbGl0KFxcXCIodGhpcywnXFxcIilbMV0uc3BsaXQoXFxcIicpXFxcIilbMF0gKyBsYXp5LFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncGljXzFfZnVsbCdcXG4gICAgICAgIH0pO1xcbiAgICB9KTtcXG4gICAgaWYocGRmaChpdGVtLCcuZHBsYXllciYmY29uZmlnJykhPScnKXtcXG4gICAgICAgIGxldCB1cmw9SlNPTi5wYXJzZShwZGZoKGl0ZW0sJy5kcGxheWVyJiZjb25maWcnKSkudmlkZW87XFxuICAgICAgICBuKys7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc6KeG6aKR4oCd4oCdICAnICsgbixcXG4gICAgICAgICAgICBkZXNjOicwJyxcXG4gICAgICAgICAgICBpbWc6IHVybC5waWMgKyBsYXp5LFxcbiAgICAgICAgICAgIHVybDogdXJsLnVybC5yZXBsYWNlKC9cXFxcL1xcXFwvLipwbGF5XFxcXC4vLCcvL2xvbmcuJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdjYXJkX3BpY18xJ1xcbiAgICAgICAgfSk7XFxuICAgICAgIH1cXG4gICAgfSlcXG4gICAgICAgIH1lbHNlIGlmKHd6PT0naGFpamlhbycpe1xcbiAgICAgICAgICAgIHRyeXtcXG4gICAgICAgICAgICB2YXIgdmlkZW9zPWRhdGEudmlkZW8ucmVwbGFjZSgvXFxcXCQvZywnJykuc3BsaXQoJ0AnKTtcXG4gICAgICAgIHZhciBpbWc9ZGF0YS5waWNDb2RlLm1hdGNoKC94a3JrbGxnbFxcXFw9XFxcXFxcXCIuKj9cXFxcXFxcIi4qP2FsdC8pWzBdLnNwbGl0KCdcXFwiJylbMV07XFxuICAgIHZpZGVvcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xcbiAgICAgICAgdmFyIG49aW5kZXgrMTtcXG4gICAgICAgIGlmKGl0ZW0pe1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTon6KeG6aKRJytuLFxcbiAgICAgICAgICAgIGRlc2M6JzAnLFxcbiAgICAgICAgICAgIGltZzppbWcrIFxcXCJAanM9XFxcIiArICQudG9TdHJpbmcoKHJ1bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hZXM/cnVsZT1cXFwiICsgcnVsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbWFnZS5pbWFnZURlY3J5cHQoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBNWV9SVUxFLnRpdGxlKSxcXG4gICAgICAgICAgICB1cmw6aXRlbS5yZXBsYWNlKCfliIblibInLCcnKSsnI2lzVmlkZW89dHJ1ZSMnLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMScsXFxuICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgfSlcXG4gICAgICAgIHZhciB0ZXh0cz1kYXRhLnBpY0NvZGUucmVwbGFjZSgvcHN0eWxlL2csJ3Agc3R5bGUnKS5yZXBsYWNlKC9cXFxcPFxcXFwvcFxcXFw+L2csJzwvcD4mJicpLnNwbGl0KCcmJicpO1xcbiAgICAgICAgdGV4dHMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXG4gICAgaWYgKHBkZmgoaXRlbSwgJ3AmJlRleHQnKSkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCAncCYmVGV4dCcpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0JyxcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgICAgdmFyIGltZz1pdGVtLm1hdGNoKC94a3JrbGxnbFxcXFw9XFxcXFxcXCIuKj9cXFxcXFxcIi4qP2FsdC8pO1xcbiAgICAgIGlmKGltZyl7XFxuICAgICAvLyBsb2coaW1nKVxcbiAgICAgIGQucHVzaCh7XFxuICAgICAgICAgIGltZzppbWdbMF0uc3BsaXQoJ1xcXCInKVsxXSsgXFxcIkBqcz1cXFwiICsgJC50b1N0cmluZygocnVsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2Flcz9ydWxlPVxcXCIgKyBydWxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltYWdlLmltYWdlRGVjcnlwdCgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIE1ZX1JVTEUudGl0bGUpLFxcbiAgICAgICAgICB1cmw6aW1nWzBdLnNwbGl0KCdcXFwiJylbMV0rIFxcXCJAanM9XFxcIiArICQudG9TdHJpbmcoKHJ1bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hZXM/cnVsZT1cXFwiICsgcnVsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbWFnZS5pbWFnZURlY3J5cHQoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBNWV9SVUxFLnRpdGxlKSxcXG4gICAgICAgICAgY29sX3R5cGU6J3BpY18xX2Z1bGwnXFxuICAgICAgfSlcXG4gICAgICAgfVxcbiAgICB9KVxcbiAgICB9Y2F0Y2h7fVxcbiAgICAgICAgfWVsc2UgaWYod3o9PSdrYW5saWFvJyl7XFxuICAgICAgICAgICAgdmFyIHRleHRzPWRhdGEucGljQ29kZS5yZXBsYWNlKC9cXFxcPGJyXFxcXD4vZywnJiYnKS5zcGxpdCgnJiYnKTtcXG4gICAgICAgICAgICB2YXIgbj0wO1xcbiAgICAgICAgICAgdGV4dHMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgaWYocGRmaChpdGVtLCcuZHBsYXllciYmZGF0YS1jb25maWcnKSE9Jycpe1xcbiAgICAgICAgbGV0IHVybD1KU09OLnBhcnNlKHBkZmgoaXRlbSwnLmRwbGF5ZXImJmRhdGEtY29uZmlnJykpLnZpZGVvO1xcbiAgICAgICAgbisrO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+inhumikSAnICsgbixcXG4gICAgICAgICAgIC8vIGRlc2M6JzAnLFxcbiAgICAgICAgICAgIGltZzogdXJsLnBpYyxcXG4gICAgICAgICAgICB1cmw6IHVybC51cmwucmVwbGFjZSgvXFxcXC9cXFxcLy4qcGxheVxcXFwuLywnLy9sb25nLicpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8xJ1xcbiAgICAgICAgfSk7XFxuICAgICAgIH1cXG4gICAgICAgfSlcXG4gICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS5waWNDb2RlLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidyaWNoX3RleHQnLFxcbiAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gICAgICAgIFxcbiAgICAgICAgfWNhdGNoe31cXG4gICAgICAgIFxcbiAgICAgICAgXFxuICAgICAgICAvKlxcbiAgICAgICAgdHJ5e1xcbiAgICAgICAgdmFyIHZpZGVvPWRhdGEudmlkZW9jb2RlLnJlcGxhY2UoL1xcXFw8XFxcXC92aWRlb1xcXFw+L2csJzwvdmlkZW8+JiYnKS5zcGxpdCgnJiYnKTtcXG4gICAgICAgIHZpZGVvLmZvckVhY2goKGl0ZW0saW5kZXgpID0+IHtcXG4gICAgICAgICAgIGlmKHBkZmgoaXRlbSwgJ3ZpZGVvJiZzcmMnKSl7XFxuICAgICAgICAgICAgdmFyIG49aW5kZXgrMTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfop4bpopEnK24sXFxuICAgICAgICAgICAgZGVzYzonMCcsXFxuICAgICAgICAgICAgaW1nOiBwZGZoKGl0ZW0sICd2aWRlbyYmcG9zdGVyJyksXFxuICAgICAgICAgICAgdXJsOiBwZGZoKGl0ZW0sICd2aWRlbyYmc3JjJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdjYXJkX3BpY18xJ1xcbiAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgICAgICB9Y2F0Y2h7fVxcbiAgICAgICAgXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOifop4bpopEnLFxcbiAgICAgICAgICAgIGRlc2M6JzAnLFxcbiAgICAgICAgICAgIGltZzpwZGZoKGRhdGEudmlkZW9jb2RlLCd2aWRlbyYmcG9zdGVyJyksXFxuICAgICAgICAgICAgdXJsOnBkZmgoZGF0YS52aWRlb2NvZGUsJ3ZpZGVvJiZzcmMnKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTonY2FyZF9waWNfMSdcXG4gICAgICAgICAgICBcXG4gICAgICAgIH0pXFxuICAgICAgICAqL1xcbiAgICAgIFxcbiAgICAgICBcXG4gICAgICAgIFxcbiAgICAgICAgLypcXG4gICAgICAgIGlmKHd6PT0nY2d3Jyl7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLmltZ2NvZGUsXFxuICAgICAgICAgICAgY29sX3R5cGU6J3JpY2hfdGV4dCcsXFxuICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICAgICAgKi9cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzJcIixcIm5hbWVcIjpcIuWbveWGheebtOaSreWIhuexu1wiLFwicGF0aFwiOlwiemhpYm9lcmppXCIsXCJydWxlXCI6XCJqczogXFxudmFyIGQgPSBbXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXG50cnl7XFxubGV0IGhvc3Q9TVlfUEFSQU1TLmhvc3QucmVwbGFjZSgnaHR0cDovL2FwaS5waHBqaWVrb3UudG9wJywnaHR0cHM6Ly9hcGkxLnlpbHVzaHVuZmVuZy50b3AnKTtcXG52YXIgd3o9TVlfUEFSQU1TLnd6O1xcbmlmKE1ZX1BBR0U9PTEpe1xcbnZhciDnm7Tmkq3liIbnsbs9ZmV0Y2goaG9zdCsnP2dldHBpbmd0YWknKVxcbnZhciBkYXRhPSBKU09OLnBhcnNlKOebtOaSreWIhuexuykucGluZ3RhaTtcXG5kYXRhLmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGltZzpkYXRhLmltYWdlLFxcbiAgICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3poaWJvZXJqaTFcXFwiKScsXFxuICAgICAgICAgICBjb2xfdHlwZTonY2FyZF9waWNfMycsXFxuICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke2hvc3R9P3Bpbmd0YWk9JHtkYXRhLmlkfWAsXFxuICAgICAgICAgICAgICB3ejp3eixcXG4gICAgICAgICAgfVxcbiAgICB9KVxcbn0pXFxufVxcbn1jYXRjaChlKXtcXG4gICAgbG9nKGUubWVzc2FnZSlcXG4gICAgdG9hc3QoJ+eci+S4jeS6hicpXFxufVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwidGV4dF80XCIsXCJuYW1lXCI6XCLlm73lhoXnm7Tmkq3kuoznuqdcIixcInBhdGhcIjpcInpoaWJvZXJqaTFcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkPVtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpXFxubGV0IGhvc3Q9TVlfUEFSQU1TLmhvc3Q7XFxubGV0IHVybD1ob3N0LnNwbGl0KCc/JylbMF07XFxudmFyIHd6PU1ZX1BBUkFNUy53ejtcXG50cnl7XFxubGV0IGxpc3Q9IEpTT04ucGFyc2UoZmV0Y2goaG9zdCkpLnpodWJvO1xcbi8vbG9nKGxpc3QpXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxuICAgICAgICAgICAgdXJsOiB1cmwrJz9pZD0nK2RhdGEuaWQrdm9kLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8zJ1xcbiAgICAgICAgfSlcXG4gfSlcXG59Y2F0Y2goZSl7XFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgICB0b2FzdCgn55yL5LiN5LqGJylcXG59XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8yXCIsXCJuYW1lXCI6XCLlm73lpJbnm7Tmkq3liIbnsbtcIixcInBhdGhcIjpcImd1b3dhaWVyamlcIixcInJ1bGVcIjpcImpzOiBcXG52YXIgZCA9IFtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcbnRyeXtcXG5sZXQgaG9zdD1NWV9VUkwuc3BsaXQoJyMjJylbMV0ucmVwbGFjZSgnaHR0cDovL2FwaS5waHBqaWVrb3UudG9wJywnaHR0cHM6Ly9hcGkxLnlpbHVzaHVuZmVuZy50b3AnKTtcXG52YXIgd3o9TVlfVVJMLnNwbGl0KCcjIycpWzJdO1xcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbM107XFxudmFyIOWbveWkluebtOaSreWIhuexuz1mZXRjaChob3N0Kyc/Z2V0c29ydCcpXFxudmFyIGRhdGE9IEpTT04ucGFyc2Uo5Zu95aSW55u05pKt5YiG57G7KS5jYXRlZ29yaWVzO1xcbnZhciBpbmRleF9uPWRhdGFbMF0uaWQudG9TdHJpbmcoKVxcbmlmKE1ZX1BBR0U9PTEpe1xcbmRhdGEuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKCflm73lpJbnm7Tmkq3liIbnsbsnK3d6LGluZGV4X24pPT1kYXRhLmlkLnRvU3RyaW5nKCk/c3Ryb25nKGRhdGEudGl0bGUsJ0ZGNjY5OScpOmRhdGEudGl0bGUsXFxuICAgICAgICAgICAgdXJsOiQoJycpLmxhenlSdWxlKCh0aXRsZSxpZCx3eikgPT4ge1xcbiAgICAgICAgICAgICAgIHB1dE15VmFyKCflm73lpJbnm7Tmkq3liIbnsbsnK3d6LCBpZCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSxkYXRhLnRpdGxlLGRhdGEuaWQudG9TdHJpbmcoKSx3eiksXFxuICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbidcXG4gICAgfSlcXG59KVxcbn1cXG5cXG52YXIgbGlzdD1KU09OLnBhcnNlKGZldGNoKGhvc3QrJz9zb3J0PScrZ2V0TXlWYXIoJ+WbveWkluebtOaSreWIhuexuycrd3osaW5kZXhfbikrJyZwYWdlPScrcGcpKS52aWRlb3M7XFxuLy9sb2cobGlzdClcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6IGRhdGEuZGF0ZSxcXG4gICAgICAgICAgICBpbWc6ICgoZGF0YS5pbWFnZS5pbmNsdWRlcygndXBsb2FkJyl8ZGF0YS5pbWFnZS5pbmNsdWRlcygnbmV3LicpKSYhZGF0YS5pbWFnZS5pbmNsdWRlcygndG9vbG1tJykpPyhkYXRhLmltYWdlK2xhenkpOmRhdGEuaW1hZ2UsXFxuICAgICAgICAgICAgdXJsOiBob3N0Kyc/aWQ9JytkYXRhLmlkK3ZvZCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXG4gICAgICAgIH0pXFxuIH0pXFxuIH1jYXRjaChlKXtcXG4gICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgICB0b2FzdCgn55yL5LiN5LqGJylcXG4gfVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfMlwiLFwibmFtZVwiOlwi5aWzIOS8mOWIhuexu1wiLFwicGF0aFwiOlwibnZ5b3VlcmppXCIsXCJydWxlXCI6XCJqczogXFxudmFyIGQgPSBbXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXG50cnl7XFxubGV0IGhvc3Q9TVlfUEFSQU1TLmhvc3QucmVwbGFjZSgnaHR0cDovL2FwaS5waHBqaWVrb3UudG9wJywnaHR0cHM6Ly9hcGkxLnlpbHVzaHVuZmVuZy50b3AnKTtcXG52YXIgd3o9TVlfUEFSQU1TLnd6O1xcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxudmFyIGl0ZW09cmVxdWVzdChob3N0Kyc/YWN0cmVzcz0mcGFnZT0nK3BnKVxcbnZhciBkYXRhPSBKU09OLnBhcnNlKGl0ZW0pLmFjdHJlc3NlcztcXG5kYXRhLmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6ZGF0YS5udW1iZXIsXFxuICAgICAgICAgICAgaW1nOmRhdGEuaW1hZ2UsXFxuICAgICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9udnlvdWVyamkxXFxcIiknLFxcbiAgICAgICAgICAgY29sX3R5cGU6J2NhcmRfcGljXzMnLFxcbiAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaG9zdDpgJHtob3N0fT9zb3J0PSR7ZGF0YS5pZH0mcGFnZT1gLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgfSlcXG59KVxcblxcbn1jYXRjaChlKXtcXG4gICAgbG9nKGUubWVzc2FnZSlcXG59XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzRcIixcIm5hbWVcIjpcIuWlsyDkvJjkuoznuqdcIixcInBhdGhcIjpcIm52eW91ZXJqaTFcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkPVtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpXFxudmFyIHBnPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXG52YXIgaG9zdD1NWV9QQVJBTVMuaG9zdCtwZztcXG52YXIgdXJsPWhvc3Quc3BsaXQoJz8nKVswXTtcXG52YXIgd3o9TVlfUEFSQU1TLnd6O1xcbnRyeXtcXG5sZXQgbGlzdD0gSlNPTi5wYXJzZShmZXRjaChob3N0KSkudmlkZW9zO1xcbi8vbG9nKGxpc3QpXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxuICAgICAgICAgICAgZGVzYzooZGF0YS5jcmVhdGV0aW1lPT1udWxsPycnOmRhdGEuY3JlYXRldGltZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSksXFxuICAgICAgICAgICAgdXJsOiB1cmwrJz9pZD0nK2RhdGEuaWQrdm9kLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcbiAgICAgICAgfSlcXG4gfSlcXG59Y2F0Y2goZSl7XFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgICB0b2FzdCgn55yL5LiN5LqGJylcXG59XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8yXCIsXCJuYW1lXCI6XCLluJblrZDliIbnsbtcIixcInBhdGhcIjpcInRpZWVyamlcIixcInJ1bGVcIjpcImpzOiBcXG52YXIgZCA9IFtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcbnRyeXtcXG5sZXQgaG9zdD1NWV9QQVJBTVMuaG9zdC5yZXBsYWNlKCdodHRwOi8vYXBpLnBocGppZWtvdS50b3AnLCdodHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcCcpO1xcbnZhciB3ej1NWV9QQVJBTVMud3o7XFxudmFyIHBnPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXG5pZihNWV9QQUdFPT0xKXtcXG52YXIg5biW5a2Q5YiG57G7PWZldGNoKGhvc3QrJz9nZXRzb3J0JylcXG52YXIgZGF0YT0gSlNPTi5wYXJzZSjluJblrZDliIbnsbspLmNhdGVnb3JpZXM7XFxudmFyIGluZGV4X249ZGF0YVswXS5pZC50b1N0cmluZygpO1xcbmRhdGEuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKCfluJblrZDliIbnsbsnK3d6LGluZGV4X24pPT1kYXRhLmlkLnRvU3RyaW5nKCk/c3Ryb25nKGRhdGEudGl0bGUsJ0ZGNjY5OScpOmRhdGEudGl0bGUsXFxuICAgICAgICAgICAgdXJsOiQoJycpLmxhenlSdWxlKCh0aXRsZSxpZCx3eikgPT4ge1xcbiAgICAgICAgICAgICAgIHB1dE15VmFyKCfluJblrZDliIbnsbsnK3d6LCBpZCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSxkYXRhLnRpdGxlLGRhdGEuaWQudG9TdHJpbmcoKSx3eiksXFxuICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbidcXG4gICAgfSlcXG59KVxcbn1cXG52YXIgbGlzdD1KU09OLnBhcnNlKGZldGNoKGhvc3QrJz9zb3J0PScrZ2V0TXlWYXIoJ+W4luWtkOWIhuexuycrd3osaW5kZXhfbikrJyZwYWdlPScrcGcpKS52aWRlb3M7XFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOiBkYXRhLmRhdGUsXFxuICAgICAgICAgICAgLy9pbWc6ICdodHRwczovL2ltYWdlcy54b293YnMuY29tL3VwbG9hZF8wMScrZGF0YS5pbWFnZS5zcGxpdCgndXBsb2FkXzAxJylbMV0sXFxuICAgICAgICAgICAgaW1nOmRhdGEuaW1hZ2UrbGF6eSxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5IyMnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9ibGFja2VyamkxXFxcIiknLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidwaWNfMScsXFxuICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaG9zdDpgJHtob3N0fT9pZD0ke2RhdGEuaWR9YCxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcbiAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiB9KVxcbiB9Y2F0Y2goZSl7XFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgICB0b2FzdCgn55yL5LiN5LqGJylcXG4gfVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfMlwiLFwibmFtZVwiOlwi55u05pKt6IGa5ZCI5YiG57G7XCIsXCJwYXRoXCI6XCJ6aGlib2p1aGVlcmppXCIsXCJydWxlXCI6XCJqczogXFxudmFyIGQgPSBbXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXG50cnl7XFxubGV0IHd6PU1ZX1BBUkFNUy53ejtcXG5pZih3ej09J+ebtOaSreiBmuWQiCcpe1xcbiAgICBob3N0PSdodHRwOi8vYXBpLnZpcG1pc3NzLmNvbTo4MS94Y2Rzdy8nXFxufWVsc2V7XFxuICAgIGhvc3Q9J2h0dHA6Ly9hcGkubWFpeW91eC5jb206ODEvbWYvJ1xcbn1cXG5pZihNWV9QQUdFPT0xKXtcXG52YXIg55u05pKt6IGa5ZCIPXJlcXVlc3QoaG9zdCsnanNvbi50eHQnKVxcbnZhciBkYXRhPSBKU09OLnBhcnNlKOebtOaSreiBmuWQiCkucGluZ3RhaTtcXG5kYXRhLmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6ZGF0YS5OdW1iZXIsXFxuICAgICAgICAgICAgaW1nOmRhdGEueGluaW1nLFxcbiAgICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3poaWJvanVoZWVyamkxXFxcIiknLFxcbiAgICAgICAgICAgY29sX3R5cGU6J2NhcmRfcGljXzMnLFxcbiAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaG9zdDpgJHtob3N0fSR7ZGF0YS5hZGRyZXNzfWAsXFxuICAgICAgICAgICAgICB3ejp3eixcXG4gICAgICAgICAgfVxcbiAgICB9KVxcbn0pXFxufVxcbn1jYXRjaChlKXtcXG4gICAgbG9nKGUubWVzc2FnZSlcXG4gICAgdG9hc3QoJ+eci+S4jeS6hicpXFxufVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwidGV4dF80XCIsXCJuYW1lXCI6XCLnm7Tmkq3ogZrlkIjkuoznuqdcIixcInBhdGhcIjpcInpoaWJvanVoZWVyamkxXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZD1bXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKVxcbmxldCBob3N0PU1ZX1BBUkFNUy5ob3N0O1xcbnRyeXtcXG5sZXQgbGlzdD0gSlNPTi5wYXJzZShmZXRjaChob3N0KSkuemh1Ym87XFxuLy9sb2cobGlzdClcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgIGlmKCFkYXRhLnRpdGxlLmluY2x1ZGVzKCc5OTk5Jykpe1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1nLFxcbiAgICAgICAgICAgIHVybDogZGF0YS5hZGRyZXNzLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcbiAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gfSlcXG59Y2F0Y2h7fVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfMlwiLFwibmFtZVwiOlwi5ryr55S75YiG57G7XCIsXCJwYXRoXCI6XCJtYW5odWFlcmppXCIsXCJydWxlXCI6XCJqczogXFxudmFyIGQgPSBbXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXG50cnl7XFxubGV0IGhvc3Q9TVlfUEFSQU1TLmhvc3QucmVwbGFjZSgnaHR0cDovL2FwaS5waHBqaWVrb3UudG9wJywnaHR0cHM6Ly9hcGkxLnlpbHVzaHVuZmVuZy50b3AnKTtcXG52YXIgd3o9TVlfUEFSQU1TLnd6O1xcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxuaWYoTVlfUEFHRT09MSl7XFxudmFyIOa8q+eUu+WIhuexuz1mZXRjaChob3N0Kyc/Z2V0c29ydCcpXFxudmFyIGRhdGE9IEpTT04ucGFyc2Uo5ryr55S75YiG57G7KS5jYXRlZ29yaWVzO1xcbnZhciBpbmRleF9uPWRhdGFbMF0uaWQudG9TdHJpbmcoKVxcbmRhdGEuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKCfmvKvnlLvliIbnsbsnK3d6LGluZGV4X24pPT1kYXRhLmlkLnRvU3RyaW5nKCk/c3Ryb25nKGRhdGEudGl0bGUsJ0ZGNjY5OScpOmRhdGEudGl0bGUsXFxuICAgICAgICAgICAgdXJsOiQoJycpLmxhenlSdWxlKCh0aXRsZSxpZCx3eikgPT4ge1xcbiAgICAgICAgICAgICAgIHB1dE15VmFyKCfmvKvnlLvliIbnsbsnK3d6LCBpZCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSxkYXRhLnRpdGxlLGRhdGEuaWQudG9TdHJpbmcoKSx3eiksXFxuICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbidcXG4gICAgfSlcXG59KVxcbn1cXG52YXIgbGlzdD1KU09OLnBhcnNlKGZldGNoKGhvc3QrJz9zb3J0PScrZ2V0TXlWYXIoJ+a8q+eUu+WIhuexuycrd3osaW5kZXhfbikrJyZwYWdlPScrcGcpKS52aWRlb3M7XFxuLy9sb2cobGlzdClcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6IGRhdGEuZGF0ZSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2UsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL21hbmh1YWVyamkxXFxcIiknLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8zJyxcXG4gICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke2hvc3R9P2lkPSR7ZGF0YS5pZH1gLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuIH0pXFxuIH1jYXRjaChlKXtcXG4gICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgICB0b2FzdCgn55yL5LiN5LqGJylcXG4gfVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwidGV4dF80XCIsXCJuYW1lXCI6XCLmvKvnlLvnm67lvZVcIixcInBhdGhcIjpcIm1hbmh1YWVyamkxXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZD1bXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKVxcbmxldCBob3N0PU1ZX1BBUkFNUy5ob3N0O1xcbmxldCB1cmw9aG9zdC5zcGxpdCgnPycpWzBdO1xcbnZhciB3ej1NWV9QQVJBTVMud3o7XFxudHJ5e1xcbmxldCBsaXN0PSBKU09OLnBhcnNlKGZldGNoKGhvc3QpKS5jaGFwdGVycztcXG4vL2xvZyhsaXN0KVxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgdXJsOiB1cmwrJz9pZD0nK2RhdGEuaWQrcGljcyxcXG4gICAgICAgICAgICBjb2xfdHlwZTondGV4dF8yJ1xcbiAgICAgICAgfSlcXG4gfSlcXG4gICAgICBkLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTon56ysMeeroOmihOiniCcsXFxuICAgICAgICAgIGNvbF90eXBlOidyaWNoX3RleHQnLFxcbiAgICAgIH0pXFxuIGxldCBpbWc9IEpTT04ucGFyc2UoZmV0Y2goaG9zdCkpLmNvbnRlbnQucmVwbGFjZSgvXFxcXCQvZywnJykucmVwbGFjZSgv5YiG5YmyL2csJycpLnNwbGl0KCdAJyk7XFxuIGltZy5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBpbWc6ZGF0YSxcXG4gICAgICAgICAgICB1cmw6ICdwaWNzOi8vJytpbWcuam9pbignJiYnKSxcXG4gICAgICAgICAgICBjb2xfdHlwZToncGljXzFfZnVsbCdcXG4gICAgICAgIH0pXFxuIH0pXFxuIFxcbn1jYXRjaChlKXtcXG4gICAgbG9nKGUubWVzc2FnZSlcXG4gICAgIHRvYXN0KCfnnIvkuI3kuoYnKVxcbn1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzJcIixcIm5hbWVcIjpcIueMq+WSqua8q+eUu1wiLFwicGF0aFwiOlwibWFvbWltYW5odWFcIixcInJ1bGVcIjpcIiBqczogXFxudmFyIGQgPSBbXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcbnRyeXtcXG52YXIg54yr5ZKq5ryr55S7PSBbe3RpdGxlOiAn5o6o6I2QJuacgOaWsCbnsr7ljY4nLGlkOiAncmVjb21tZW5kJnVwZGF0ZSZwb3B1bGFyJ31dO1xcbmlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgJC5yZXF1aXJlKFxcXCJDYXRlXFxcIikuQ2F0ZSjnjKvlkqrmvKvnlLssJ+eMq+WSqua8q+eUuycsZCk7XFxufVxcbnZhciBzaWduPUVuY3J5cHQoJ3tcXFwicGFnZVxcXCI6JytwZysnfScpO1xcbnZhciBob3N0PSdodHRwOi8vMTE5LjI4LjUyLjE5Mzo4MDg5L2FwaS9jb21pYy8nK2dldE15VmFyKCfnjKvlkqrmvKvnlLsnLCdyZWNvbW1lbmQnKSsnP3BhcmFtcz0nK3NpZ247XFxudmFyIGJvZHk9J3BhcmFtcz0nK3NpZ247XFxudmFyIGh0bWwgPSBmZXRjaChob3N0LCB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxcbiAgICB9LFxcbiAgICBib2R5OiBib2R5LFxcbiAgICBtZXRob2Q6ICdQT1NUJ1xcbn0pOyBcXG52YXIgaHRtbDI9RGVjcnlwdChodG1sKVxcbi8vbG9nKGh0bWwyKVxcbnZhciBsaXN0PUpTT04ucGFyc2UoaHRtbDIpLmRhdGEuZGF0YTtcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGltZzogZGF0YS50aHVtYixcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9tYW9taW1hbmh1YWVyamlcXFwiKScsXFxuICAgICAgICAgIC8vdXJsOmRhdGEuaWQrbWFvbWltYW5odWFqeCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMycsXFxuICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaWQ6ZGF0YS5pZCxcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gfSlcXG59Y2F0Y2goZSl7XFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgICB0b2FzdCgn55yL5LiN5LqGJylcXG59XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8yXCIsXCJuYW1lXCI6XCLlsI/or7TliIbnsbtcIixcInBhdGhcIjpcInhpYW9zaHVvZXJqaVwiLFwicnVsZVwiOlwianM6IFxcbnZhciBkID0gW107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxudHJ5e1xcbmxldCBob3N0PU1ZX1BBUkFNUy5ob3N0LnJlcGxhY2UoJ2h0dHA6Ly9hcGkucGhwamlla291LnRvcCcsJ2h0dHBzOi8vYXBpMS55aWx1c2h1bmZlbmcudG9wJyk7XFxudmFyIHd6PU1ZX1BBUkFNUy53ejtcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcbmlmKE1ZX1BBR0U9PTEpe1xcbnZhciDlsI/or7TliIbnsbs9ZmV0Y2goaG9zdCsnP2dldHNvcnQnKVxcbnZhciBkYXRhPSBKU09OLnBhcnNlKOWwj+ivtOWIhuexuykuY2F0ZWdvcmllcztcXG52YXIgaW5kZXhfbj1kYXRhWzBdLmlkLnRvU3RyaW5nKCk7XFxuZGF0YS5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ+Wwj+ivtOWIhuexuycrd3osaW5kZXhfbik9PWRhdGEuaWQudG9TdHJpbmcoKT9zdHJvbmcoZGF0YS50aXRsZSwnRkY2Njk5Jyk6ZGF0YS50aXRsZSxcXG4gICAgICAgICAgICB1cmw6JCgnJykubGF6eVJ1bGUoKHRpdGxlLGlkLHd6KSA9PiB7XFxuICAgICAgICAgICAgICAgcHV0TXlWYXIoJ+Wwj+ivtOWIhuexuycrd3osIGlkKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LGRhdGEudGl0bGUsZGF0YS5pZC50b1N0cmluZygpLHd6KSxcXG4gICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJ1xcbiAgICB9KVxcbn0pXFxufVxcbnZhciBsaXN0PUpTT04ucGFyc2UoZmV0Y2goaG9zdCsnP3NvcnQ9JytnZXRNeVZhcign5bCP6K+05YiG57G7Jyt3eixpbmRleF9uKSsnJnBhZ2U9JytwZykpLmxpc3Q7XFxuLy9sb2cobGlzdClcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS94aWFvc2h1b2VyamkxXFxcIiknLFxcbiAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcbiAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7aG9zdH0/aWQ9JHtkYXRhLmlkfWAsXFxuICAgICAgICAgICAgICB3ejp3eixcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gfSlcXG4gfWNhdGNoe31cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcInRleHRfNFwiLFwibmFtZVwiOlwi5bCP6K+05LqM57qnXCIsXCJwYXRoXCI6XCJ4aWFvc2h1b2VyamkxXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZD1bXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKVxcbmxldCBob3N0PU1ZX1BBUkFNUy5ob3N0O1xcbmxldCB1cmw9aG9zdC5zcGxpdCgnPycpWzBdO1xcbnZhciB3ej1NWV9QQVJBTVMud3o7XFxudHJ5e1xcbiAgICBpZigod3o9PSdqaW5qaXNodXd1Jyl8KHd6PT0nbGVibycpfCh3ej09J2h1YW54aWFuZycpfCh3ej09J2prdW4nKSl7XFxuICAgICAgICBsZXQgbm92ZWw9IEpTT04ucGFyc2UoZmV0Y2goaG9zdCkpLm5vdmVsO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTpub3ZlbCxcXG4gICAgICAgICAgICBjb2xfdHlwZToncmljaF90ZXh0J1xcbiAgICAgICAgfSlcXG4gICAgfWVsc2V7XFxubGV0IGlkPSBKU09OLnBhcnNlKGZldGNoKGhvc3QpKS5pZDtcXG4gbG9hZFJlYWRDb250ZW50UGFnZShpZClcXG4gfVxcbn1jYXRjaHtcXG4gICAgdG9hc3QoJ+iwgeeJueS5iOeci+Wwj+ivtOWViu+8gScpXFxufVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwidGV4dF80XCIsXCJuYW1lXCI6XCLnjKvlkqrmvKvnlLvkuoznuqdcIixcInBhdGhcIjpcIm1hb21pbWFuaHVhZXJqaVwiLFwicnVsZVwiOlwianM6XFxudmFyIGQ9W107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSlcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcbnZhciBpZD1NWV9QQVJBTVMuaWQ7XFxudmFyIHNpZ249RW5jcnlwdCgne1xcXCJpZFxcXCI6JytpZCsnLFxcXCJwYWdlXFxcIjonK3BnKycsXFxcInNvcnRcXFwiOjB9Jyk7XFxudmFyIGhvc3Q9J2h0dHA6Ly8xMTkuMjguNTIuMTkzOjgwODkvYXBpL2NvbWljL2xpc3RzP3BhcmFtcz0nK3NpZ247XFxudmFyIGJvZHk9J3BhcmFtcz0nK3NpZ247XFxudmFyIGh0bWwgPSBmZXRjaChob3N0LCB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxcbiAgICB9LFxcbiAgICBtZXRob2Q6ICdQT1NUJ1xcbn0pOyBcXG52YXIgaHRtbDI9RGVjcnlwdChodG1sKVxcbnZhciBsaXN0PUpTT04ucGFyc2UoaHRtbDIpLmRhdGEuZGF0YTtcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLm5hbWUsXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlLFxcbiAgICAgICAgICAgIHVybDogZGF0YS5pZCttYW9taW1hbmh1YWp4LFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibW92aWVfMV9sZWZ0X3BpY1xcXCIsXFxuICAgIH0pXFxuICAgIH0pXFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8yXCIsXCJuYW1lXCI6XCLnjKvlkqrnvo7lm75cIixcInBhdGhcIjpcIm1hb21pbWVpdHVcIixcInJ1bGVcIjpcIiBqczogXFxudmFyIGQgPSBbXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcbnRyeXtcXG52YXIg54yr5ZKq576O5Zu+PSBbe3RpdGxlOiAn54Ot6ZeoJumXsuiBiuiuqOiuuibolb7kuJ3lpbPlkIwm576O6IW/546J6LazJuW3qOS5s+e+juiDuCbnlLflkIwm5Y6f5Yib6Ieq5ouNJuWKqOa8qyborqTor4Emc20m6K++5aCCJuaIkeWmuybpq5jmva7ohLgm572R57qi5aSn5ZKWJuWItuacjeivseaDkSbonJzmsYHnvo7oh4AnLGlkOiAnMCYzJjcmOSYxMCYyMiYxJjgmMjYmNiYzMSYyMyYyJjE4JjQmMjEnfV07XFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAkLnJlcXVpcmUoXFxcIkNhdGVcXFwiKS5DYXRlKOeMq+WSque+juWbviwn54yr5ZKq576O5Zu+JyxkKTtcXG59XFxudmFyIHNpZ249RW5jcnlwdCgne1xcXCJwYWdlXFxcIjonK3BnKycsXFxcImNhdGVcXFwiOicrZ2V0TXlWYXIoJ+eMq+WSque+juWbvicsJzAnKSsnLFxcXCJ0eXBlXFxcIjoxfScpO1xcbnZhciBob3N0PSdodHRwOi8vMTE5LjI4LjUyLjE5Mzo4MDg5L2FwaS92Mi9wb3N0L2hvbWU/cGFyYW1zPScrc2lnbjtcXG52YXIgYm9keT0ncGFyYW1zPScrc2lnbjtcXG52YXIgaHRtbCA9IGZldGNoKGhvc3QsIHtcXG4gICAgaGVhZGVyczoge1xcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXFxuICAgIH0sXFxuICAgIGJvZHk6IGJvZHksXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxufSk7IFxcbnZhciBodG1sMj1EZWNyeXB0KGh0bWwpXFxudmFyIGxpc3Q9SlNPTi5wYXJzZShodG1sMikuZGF0YTtcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgIGlmKGRhdGEuaW1hZ2VzKXtcXG4gICAgICAgIFxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOmRhdGEudGltZSxcXG4gICAgICAgICAgICBpbWc6IGRhdGEuaW1hZ2VzWzBdLmltYWdlLFxcbiAgICAgICAgICAgIHVybDogJCgnJykubGF6eVJ1bGUoZGF0YSA9PiB7XFxuICAgICAgICAgIGxldCBwaWNBcnI9W107XFxuICAgICAgICAgIGxldCBpbWc9ZGF0YS5pbWFnZXM7XFxuICAgICAgICAgIGxldCBsZW49IGltZy5sZW5ndGgtMTtcXG4gICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gbGVuOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgcGljQXJyW2ldID0gaW1nW2ldLmltYWdlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gXFxcInBpY3M6Ly9cXFwiICsgcGljQXJyLmpvaW4oXFxcIiYmXFxcIilcXG4gICAgICAgIH0sZGF0YSksXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzMnXFxuICAgICAgICB9KVxcbiAgICAgICAgfVxcbiB9KVxcbiB9Y2F0Y2h7fVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfMlwiLFwibmFtZVwiOlwi54yr5ZKqRk1cIixcInBhdGhcIjpcIm1hb21pRk1cIixcInJ1bGVcIjpcIiBqczogXFxudmFyIGQgPSBbXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcbnZhciDnjKvlkqpGTT0gW3t0aXRsZTogJ+mDveW4gua/gOaDhSblrrbluq3kubEg5LymJuWPpuexu+Wwj+ivtCbpnZLmmKXmoKHlm60m5oOFIOiJsueskeivnSbkurog5aa75LmxIOS8pibmgKcg54ix5oqA5benJueOhOW5u+Wlh+W5uycsaWQ6ICc4JjkmMTAmMTEmMTImMTMmMTQmMTUnfV07XFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAkLnJlcXVpcmUoXFxcIkNhdGVcXFwiKS5DYXRlKOeMq+WSqkZNLCfnjKvlkqpGTScsZCk7XFxufVxcbnZhciBzaWduPUVuY3J5cHQoJ3tcXFwicGFnZVxcXCI6JytwZysnLFxcXCJjYXRlX2lkXFxcIjonK2dldE15VmFyKCfnjKvlkqpGTScsJzgnKSsnLFxcXCJzdGF0dXNcXFwiOjAsXFxcInR5cGVcXFwiOjAsXFxcIm5ld1xcXCI6MH0nKTtcXG52YXIgaG9zdD0naHR0cDovLzExOS4yOC41Mi4xOTM6ODA4OS9hcGkvYm9vay9pbmRleD9wYXJhbXM9JytzaWduO1xcbnZhciBib2R5PSdwYXJhbXM9JytzaWduO1xcbnZhciBodG1sID0gZmV0Y2goaG9zdCwge1xcbiAgICBoZWFkZXJzOiB7XFxuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcXG4gICAgfSxcXG4gICAgYm9keTogYm9keSxcXG4gICAgbWV0aG9kOiAnUE9TVCdcXG59KTsgXFxudmFyIGh0bWwyPURlY3J5cHQoaHRtbClcXG52YXIgbGlzdD1KU09OLnBhcnNlKGh0bWwyKS5kYXRhLmRhdGE7XFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS5uYW1lLFxcbiAgICAgICAgICAgIGltZzogZGF0YS50aHVtYixcXG4gICAgICAgICAgICB1cmw6IGRhdGEuaWQrbWFvbWlmbWp4LFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8zJ1xcbiAgICAgICAgfSlcXG4gfSlcXG5cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIjAx6aaW6aG16KeG6aKRXCIsXCJwYXRoXCI6XCJ2aWRlb1wiLFwicnVsZVwiOlwianM6XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxudHJ5e1xcbiAgdmFyIGxpc3Q9Z2V0SXRlbSgnc2hvdXllJykuc3BsaXQoJ+mmlumhteaVsOaNruW8gOWniycpWzFdLnNwbGl0KCfpppbpobXmlbDmja7nu5PmnZ8nKVswXS5zcGxpdCgn5o2i6KGMJyk7XFxuICBsaXN0LmZvckVhY2goZGF0YT0+e1xcbiAgICAgIHZhciBxZD1zcChkYXRhLCBcXFwicWQoXFxcIiwgXFxcIilcXFwiKTtcXG4gICAgICB2YXIgdHA9c3AoZGF0YSwgXFxcInRwKFxcXCIsIFxcXCIpXFxcIik7XFxuICAgICAgdmFyIG1jPXNwKGRhdGEsIFxcXCJtYyhcXFwiLCBcXFwiKVxcXCIpO1xcbiAgICAgIHZhciB3ej1zcChkYXRhLCBcXFwiZ2pjKFxcXCIsIFxcXCIpXFxcIik7XFxuICAgICAgdmFyIHltPXNwKGRhdGEsIFxcXCJ5bShcXFwiLCBcXFwiKVxcXCIpO1xcbiAgICAgIHZhciBseD1zcChkYXRhLCBcXFwibHgoXFxcIiwgXFxcIilcXFwiKTtcXG4gICAgICB2YXIgcWI9cWQrJyAgJyttYysnICAnK3d6KycgICcreW0rJyAgJytseDtcXG4gICAgICBpZihxZD09J+m6u+ixhlRWJyl7XFxuICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgIHRpdGxlOm1jLFxcbiAgICAgICAgICBkZXNjOnFiLFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL21hZG91XFxcIiknLFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnXFxuICAgICAgfSlcXG4gICAgICB9ZWxzZSBpZihxZD09JzkxVFYnKXtcXG4gICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6bWMsXFxuICAgICAgICAgIGRlc2M6cWIsXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvOTF0dlxcXCIpJyxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJ1xcbiAgICAgIH0pXFxuICAgICAgfWVsc2UgaWYocWQ9PSfnjKvlkqonKXtcXG4gICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6bWMsXFxuICAgICAgICAgIGRlc2M6cWIsXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvbWFvbWlcXFwiKScsXFxuICAgICAgICAgIGNvbF90eXBlOidpY29uXzRfY2FyZCdcXG4gICAgICB9KVxcbiAgICAgIH1lbHNlIGlmKHFkPT0n54yr5ZKq5Y6f5YibJyl7XFxuICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgIHRpdGxlOm1jLFxcbiAgICAgICAgICBkZXNjOnFiLFxcbiAgICAgICAgICBpbWc6J2h0dHA6Ly9hcGkueGthMS50b3AnK3RwLFxcbiAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL21hb21peXVhbmNodWFuZ1xcXCIpJyxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJ1xcbiAgICAgIH0pXFxuICAgICAgfWVsc2V7XFxuICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6bWMsXFxuICAgICAgICAgIGRlc2M6cWIsXFxuICAgICAgICAgIGltZzonaHR0cDovL2FwaS54a2ExLnRvcCcrdHAsXFxuICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2Uvc3l2aWRlb1xcXCIpJyxcXG4gICAgICAgICAgY29sX3R5cGU6J2ljb25fNF9jYXJkJyxcXG4gICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaG9zdDpgJHt5bX0vJHt3en0ucGhwYCxcXG4gICAgICAgICAgICAgIHd6Ond6LFxcbiAgICAgICAgICB9XFxuICAgICAgfSlcXG4gICAgICB9XFxuICB9KVxcbiAgICAgIFxcbiAgICAgIHZhciBsaXN0MT1nZXRJdGVtKCdzaG91eWUnKS5zcGxpdCgn5YiG5Ymy57q/JylbMV0uc3BsaXQoJ+aNouihjCcpO1xcbiAgbGlzdDEuZm9yRWFjaChkYXRhPT57XFxuICAgICAgdmFyIHFkPXNwKGRhdGEsIFxcXCJxZChcXFwiLCBcXFwiKVxcXCIpO1xcbiAgICAgIHZhciB0cD1zcChkYXRhLCBcXFwidHAoXFxcIiwgXFxcIilcXFwiKTtcXG4gICAgICB2YXIgbWM9c3AoZGF0YSwgXFxcIm1jKFxcXCIsIFxcXCIpXFxcIik7XFxuICAgICAgdmFyIHd6PXNwKGRhdGEsIFxcXCJnamMoXFxcIiwgXFxcIilcXFwiKTtcXG4gICAgICB2YXIgeW09c3AoZGF0YSwgXFxcInltKFxcXCIsIFxcXCIpXFxcIik7XFxuICAgICAgdmFyIGx4PXNwKGRhdGEsIFxcXCJseChcXFwiLCBcXFwiKVxcXCIpO1xcbiAgICAgIHZhciBxYj1xZCsnICAnK21jKycgICcrd3orJyAgJyt5bSsnICAnK2x4O1xcbiAgICAgIGlmKHRwIT1udWxsKXtcXG4gICAgICAgICAgaWYoKHd6PT0neGlhbmdqaWFvJyl8KHd6PT0nOTFkc3AnKXwod3o9PSd0aWt0b2sxOCcpfCh3ej09J29nZmFwJyl8KHd6PT0ndGlrdG9rMThsb25nJyl8KHd6PT0neGlhb2h1bGknKSl7XFxuICAgICB9ZWxzZXtcXG4gICAgICBkLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTptYyxcXG4gICAgICAgICAgZGVzYzpxYixcXG4gICAgICAgICAgaW1nOidodHRwOi8vYXBpLnhrYTEudG9wJyt0cCxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5IyNmeXBhZ2UnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9zeXZpZGVvXFxcIiknLFxcbiAgICAgICAgICBjb2xfdHlwZTonaWNvbl80X2NhcmQnLFxcbiAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBob3N0OmAke3ltfS8ke3d6fS5waHBgLFxcbiAgICAgICAgICAgICAgd3o6d3osXFxuICAgICAgICAgIH1cXG4gICAgICB9KVxcbiAgICAgIH1cXG4gICAgICB9XFxuICAgICAgfSlcXG59Y2F0Y2goZSl7XFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgIGlmKGdldE15VmFyKCdhJykgPT0gJycpe1xcbiAgICB2YXIgc2hvdXllPXF6RGVjcnlwdChyZXF1ZXN0KCdodHRwOi8vMDAzLjIycy5sb2wvZW5jcnlwdC9hcGkucGhwP3BhdGg9cWllemkvc2hvdXllJykpXFxuICAgIHZhciBkYXRhPXF6RGVjcnlwdChyZXF1ZXN0KCdodHRwOi8vMDAzLjIycy5sb2wvZW5jcnlwdC9hcGkucGhwP3BhdGg9cWllemkvem9uZ2hlJykpXFxuICAgIHZhciBzZWFyY2g9ZmV0Y2goJ2h0dHA6Ly8wMDMuMjJzLmxvbC9zZWFyY2hjb25maWcvdmlwYXBpL3ZpcGNvbmZpZy50eHQnKVxcbiAgIC8vIHZhciBrdW96aGFuPXF6RGVjcnlwdChyZXF1ZXN0KCdodHRwOi8vMDA0LjIycy5sb2wvZW5jcnlwdC9hcGkucGhwP3BhdGg9cWllemkvaGVpa2VqaScpKVxcbiAgIC8vIHZhciB5dW1pbmc9cXpEZWNyeXB0KHJlcXVlc3QoJ2h0dHA6Ly8wMS54a2EzYS50b3AvZW5jcnlwdC9hcGkucGhwP3BhdGg9eXVtaW5nL3l1bWluZycpKVxcbiAgLy8gIHZhciBnb25nZ2FvPXF6RGVjcnlwdChyZXF1ZXN0KCdodHRwOi8vMDAzLjIycy5sb2wvZW5jcnlwdC9hcGkucGhwP3BhdGg9cWllemkvcXonKSlcXG4gICAgcHV0TXlWYXIoJ2EnLCcxJylcXG4gICAgc2V0SXRlbSgnc2hvdXllJyxzaG91eWUpXFxuICAgIHNldEl0ZW0oJ2RhdGEnLGRhdGEpXFxuICAgIHNldEl0ZW0oJ3NlYXJjaCcsc2VhcmNoKVxcbiAgICByZWZyZXNoUGFnZSgpXFxuICAgIHRvYXN0KCfmlbDmja7lt7Lmm7TmlrAnKVxcbiAgICAvKlxcbiAgICBcXG4gICAg5Z+f5ZCN5pu/5o2i5Yy56YWN6KGo6L6+5byPaHR0cHM/Oi8vKGFwaTE/XFxcXC4pPyhjaGFuZ2ZhcGlhb3BpYW98eWlsdXNodW5mZW5nfHBocGppZWtvdXxhcGlqaWVrb3UpXFxcXC50b3AoL2FwaSk/44CKXFxu57q/6Lev6ZuG5ZCIaHR0cHM6Ly9hcGkxLnlpbHVzaHVuZmVuZy50b3B8aHR0cHM6Ly9hcGkuY2hhbmdmYXBpYW9waWFvLnRvcHxodHRwOi8vYXBpMS55aWx1c2h1bmZlbmcudG9wfGh0dHA6Ly9hcGkuY2hhbmdmYXBpYW9waWFvLnRvcHxodHRwOi8vYXBpMS5hcGlqaWVrb3UudG9wL2FwaXxodHRwOi8vYXBpLnBocGppZWtvdS50b3B8aHR0cDovLzAwNC4yMnMubG9sL2FwaeOAilxcbuWkseaViOWfn+WQjembhuWQiGh0dHBzOi8vYXBpLnlpbHVzaHVuZmVuZy50b3B8aHR0cDovL2FwaS55aWx1c2h1bmZlbmcudG9wfGh0dHA6Ly9hcGkxMS5waHBqaWVrb3UudG9w44CKXFxu5pyA5paw5o6l5Y+j5Z+f5ZCNaHR0cHM6Ly9hcGkxLnlpbHVzaHVuZmVuZy50b3DjgIpcXG4qL1xcbiAgfVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzJcIixcIm5hbWVcIjpcIueMq+WSqkFWXCIsXCJwYXRoXCI6XCJtYW9taWF2XCIsXCJydWxlXCI6XCJqczogXFxudmFyIGQgPSBbXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXG50cnl7XFxubGV0IGhvc3Q9TVlfVVJMLnNwbGl0KCcjIycpWzFdLnJlcGxhY2UoJ2h0dHA6Ly9hcGkucGhwamlla291LnRvcCcsJ2h0dHBzOi8vYXBpMS55aWx1c2h1bmZlbmcudG9wJyk7XFxudmFyIHd6PU1ZX1VSTC5zcGxpdCgnIyMnKVsyXTtcXG52YXIgcGc9TVlfVVJMLnNwbGl0KCcjIycpWzNdO1xcbmlmKE1ZX1BBR0U9PTEpe1xcbnZhciDlm73lpJbnm7Tmkq3liIbnsbs9ZmV0Y2goaG9zdCsnP2dldHNvcnQnKVxcbnZhciBkYXRhPSBKU09OLnBhcnNlKOWbveWkluebtOaSreWIhuexuykuY2F0ZWdvcmllcztcXG52YXIgaW5kZXhfbj1kYXRhWzBdLmlkXFxuZGF0YS5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ+WbveWkluebtOaSreWIhuexuycrd3osaW5kZXhfbik9PWRhdGEuaWQ/c3Ryb25nKGRhdGEudGl0bGUsJ0ZGNjY5OScpOmRhdGEudGl0bGUsXFxuICAgICAgICAgICAgdXJsOiQoJycpLmxhenlSdWxlKCh0aXRsZSxpZCx3eikgPT4ge1xcbiAgICAgICAgICAgICAgIHB1dE15VmFyKCflm73lpJbnm7Tmkq3liIbnsbsnK3d6LCBpZCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSxkYXRhLnRpdGxlLGRhdGEuaWQsd3opLFxcbiAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nXFxuICAgIH0pXFxufSlcXG59XFxudmFyIGxpc3Q9SlNPTi5wYXJzZShmZXRjaChob3N0Kyc/c29ydD0nK2dldE15VmFyKCflm73lpJbnm7Tmkq3liIbnsbsnK3d6LGluZGV4X24pKycmcGFnZT0nK3BnKSkudmlkZW9zO1xcbi8vbG9nKGxpc3QpXFxubGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOiBkYXRhLmRhdGUsXFxuICAgICAgICAgICAgaW1nOiBkYXRhLmltYWdlLFxcbiAgICAgICAgICAgIHVybDogaG9zdCsnP2lkPScrZGF0YS5pZCt2b2QsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxuICAgICAgICB9KVxcbiB9KVxcbiB9Y2F0Y2goZSl7XFxuICAgICBsb2coZS5tZXNzYWdlKVxcbiAgICAgdG9hc3QoJ+eci+S4jeS6hicpXFxuIH1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIum6u+ixhlRWXCIsXCJwYXRoXCI6XCJtYWRvdVwiLFwicnVsZVwiOlwianM6IFxcbnZhciBkID0gW107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxuLy9tZDXliqDlr4ZcXG5mdW5jdGlvbiBtZDUoc3RyKSB7XFxuICAgIHJldHVybiBDcnlwdG9KUy5NRDUoc3RyKS50b1N0cmluZygpO1xcbn1cXG52YXIgdCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSk7IFxcbmxldCBwZz0gTVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcbnZhciBtZD0gW3t0aXRsZTogJ+mmlumhtSbpopHpgZMm5qCH562+JyxpZDogJzEmMiYzJyxpbWc6J2h0dHBzOi8vZ2hwcm94eS5uZXQvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL3R1Ymlhby9tYWluL21vdmllLzExMS5zdmcmaHR0cHM6Ly9naHByb3h5Lm5ldC9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbHMxMjU3ODEwMDMvdHViaWFvL21haW4vbW92aWUvMTEyLnN2ZyZodHRwczovL2docHJveHkubmV0L2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sczEyNTc4MTAwMy90dWJpYW8vbWFpbi9tb3ZpZS8xMTMuc3ZnJmh0dHBzOi8vZ2hwcm94eS5uZXQvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL3R1Ymlhby9tYWluL21vdmllLzExNC5zdmcmaHR0cHM6Ly9naHByb3h5Lm5ldC9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbHMxMjU3ODEwMDMvdHViaWFvL21haW4vbW92aWUvMTIyLnN2Zyd9XTtcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgICQucmVxdWlyZShcXFwiQ2F0ZVxcXCIpLkNhdGUobWQsJ21kJyxkKTtcXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogJ2xpbmUnLFxcbn0se1xcbiAgICBjb2xfdHlwZTogJ2JpZ19ibGFua19ibG9jaycsXFxufVxcbix7XFxuICAgIGNvbF90eXBlOiAnYmlnX2JsYW5rX2Jsb2NrJyxcXG59KTtcXG59XFxubGV0IOWIhuexuz1nZXRNeVZhcignbWQnLCAnMScpO1xcblxcbmlmKOWIhuexuz09MSl7XFxudmFyIHNpZ24gPSBtZDUoJ2xpc3Rfcm93PTIwJnBhZ2U9JytwZysnJnRpbWVzdGFtcD0nK3QrJyZ0eXBlPTInKycmbX1xJWVhNjpMRGNtUz9hSylDZUYyODdiUHZkOTlARSw5VXBeJyk7XFxudmFyIGRhdGEwPXtcXG4gICAgICAgXFxcImVuY29kZV9zaWduXFxcIjpzaWduLFxcbiAgICAgICBcXFwibGlzdF9yb3dcXFwiOlxcXCIyMFxcXCIsXFxuICAgICAgIFxcXCJwYWdlXFxcIjpwZyxcXG4gICAgICAgXFxcInRpbWVzdGFtcFxcXCI6dCxcXG4gICAgICAgXFxcInR5cGVcXFwiOlxcXCIyXFxcIn07XFxudmFyIGRhdGEgPSBtZEVuY3J5cHQoSlNPTi5zdHJpbmdpZnkoZGF0YTApKTsgXFxudmFyIGJvZHkgPSAncG9zdC1kYXRhPScrZGF0YTsgXFxudmFyIHVybD0naHR0cHM6Ly9hcGkubnpwMXZlLmNvbS92aWRlby9saXN0Y2FjaGUnO1xcblxcbn1lbHNle1xcbnZhciBzaWduID0gbWQ1KCd0aW1lc3RhbXA9Jyt0KycmbX1xJWVhNjpMRGNtUz9hSylDZUYyODdiUHZkOTlARSw5VXBeJyk7XFxudmFyIGRhdGEwPXtcXG4gICAgICAgIFxcXCJlbmNvZGVfc2lnblxcXCI6IHNpZ24sXFxuICAgICAgICBcXFwidGltZXN0YW1wXFxcIjogdFxcbiAgICB9O1xcbnZhciBkYXRhID0gbWRFbmNyeXB0KEpTT04uc3RyaW5naWZ5KGRhdGEwKSk7IFxcbnZhciBib2R5ID0gJ3Bvc3QtZGF0YT0nK2RhdGE7IFxcbmlmKOWIhuexuz09Mil7XFxudmFyIHVybCA9ICdodHRwczovL2FwaS5uenAxdmUuY29tL3ZpZGVvL2NoYW5uZWwnO1xcbn1lbHNlIGlmKOWIhuexuz09Myl7XFxudmFyIHVybCA9ICdodHRwczovL2FwaS5uenAxdmUuY29tL3ZpZGVvL3RhZ3MnO1xcbn1cXG59O1xcbnZhciBodG1sID0gZmV0Y2godXJsLCB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgJ3N1ZmZpeCc6JzE3MzE1MCcsXFxuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xcbiAgICB9LFxcbiAgICBib2R5OiBib2R5LFxcbiAgICBtZXRob2Q6ICdQT1NUJ1xcbn0pOyBcXG5cXG5sZXQgaHRtbDEgPSBKU09OLnBhcnNlKGh0bWwpLmRhdGE7IFxcbnZhciBpdjA9IEpTT04ucGFyc2UoaHRtbCkuc3VmZml4O1xcbmxldCBodG1sMiA9IG1kRGVjcnlwdChodG1sMSk7IFxcbmlmKOWIhuexuz09MSl7XFxudmFyIGxpc3QgPSBKU09OLnBhcnNlKGh0bWwyKS5kYXRhLmRhdGE7XFxubGlzdC5mb3JFYWNoKChkYXRhKSA9PiB7XFxuICAgICAgICB2YXIgdGFnPWRhdGEudGFncztcXG4gICAgICB2YXIgc3RyMT0nJztcXG4gICAgIGZvcihpIGluIHRhZyl7XFxuICAgIHZhciBzdHIxID0gc3RyMSt0YWdbaV0ubmFtZSsnICAgJztcXG59XFxyXFxuICAgICAgICAgICAgZC5wdXNoKHtcXHJcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgICAgZGVzYzpzdHIxLCBwaWNfdXJsOmRhdGEucGFub3JhbWEucmVwbGFjZSgnX3N5bmMud2VicCcsJy5qcGcnKSxcXHJcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJwaWNfMVxcXCIsXFxuICAgICAgICAgICAgICAgIHVybCA6ICBkYXRhLnZpZGVvX3VybCxcXG59KVxcbn0pXFxufWVsc2UgaWYo5YiG57G7PT0yKXtcXG52YXIgbGlzdCA9IEpTT04ucGFyc2UoaHRtbDIpLmRhdGE7XFxubGlzdC5mb3JFYWNoKChkYXRhKSA9PiB7XFxyXFxuICAgICAgICAgICAgZC5wdXNoKHtcXHJcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEubmFtZSxcXG4gICAgICAgICAgICAgICAgZGVzYzpkYXRhLnRvdGFsKyfkuKrniYflhL8nLFxcbiAgICAgICAgICAgICAgIHBpY191cmw6ZGF0YS5pbWFnZSxcXHJcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uXzNcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmwgOiAgJ2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL21hZG91cGluZGFvXFxcIiknLFxcbiAgICAgICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBpZDpkYXRhLmlkLFxcbiAgICAgICAgICB9XFxufSlcXG59KVxcbn1lbHNlIGlmKOWIhuexuz09Myl7XFxudmFyIGxpc3QgPSBKU09OLnBhcnNlKGh0bWwyKS5kYXRhO1xcbmxpc3QuZm9yRWFjaCgoZGF0YSkgPT4ge1xcclxcbiAgICAgICAgICAgIGQucHVzaCh7XFxyXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhLm5hbWUsXFxuICAgICAgICAgICAgICAgIC8vcGljX3VybDpkYXRhLnRodW1iLFxcclxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfM1xcXCIsXFxuICAgICAgICAgICAgICAgIHVybCA6ICAnaGlrZXI6Ly9lbXB0eSMjZnlwYWdlJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvbWFkb3ViaWFvcWlhblxcXCIpJyxcXG4gICAgICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaWQ6ZGF0YS5pZCxcXG4gICAgICAgICAgfVxcbn0pXFxufSlcXG59XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpurvosYbpopHpgZNcIixcInBhdGhcIjpcIm1hZG91cGluZGFvXCIsXCJydWxlXCI6XCJqczogXFxudmFyIGQgPSBbXTtcXG5cXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXG50cnl7XFxuLy9tZDXliqDlr4ZcXG5mdW5jdGlvbiBtZDUoc3RyKSB7XFxuICAgIHJldHVybiBDcnlwdG9KUy5NRDUoc3RyKS50b1N0cmluZygpO1xcbn1cXG52YXIgdCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSk7XFxudmFyIHQwID0gTWF0aC5mbG9vcihEYXRlLm5vdygpLzEwMDApO1xcbmxldCBpZD1NWV9QQVJBTVMuaWQ7XFxubGV0IHA9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcbnZhciBzaWduID0gbWQ1KCdjaGFubmVsPScraWQrJyZsaXN0X3Jvdz02MCZwYWdlPScrcCsnJnRpbWVzdGFtcD0nK3QrJyZ0eXBlPTImbX1xJWVhNjpMRGNtUz9hSylDZUYyODdiUHZkOTlARSw5VXBeJyk7IC8vbG9nKHNpZ24pXFxuXFxubGV0IGRhdGEwPXtcXG4gICAgICAgIFxcXCJjaGFubmVsXFxcIjogaWQsXFxuICAgICAgICBcXFwiZW5jb2RlX3NpZ25cXFwiOiBzaWduLFxcbiAgICAgICAgXFxcImxpc3Rfcm93XFxcIjogXFxcIjYwXFxcIixcXG4gICAgICAgIFxcXCJwYWdlXFxcIjogcCxcXG4gICAgICAgIFxcXCJ0aW1lc3RhbXBcXFwiOiB0LFxcbiAgICAgICAgXFxcInR5cGVcXFwiOiBcXFwiMlxcXCJcXG4gICAgfVxcbi8vbG9nKGRhdGEwKVxcbnZhciBkYXRhID0gbWRFbmNyeXB0KEpTT04uc3RyaW5naWZ5KGRhdGEwKSk7IFxcbi8vbG9nKGRhdGEpXFxudmFyIGJvZHkgPSAncG9zdC1kYXRhPScrZGF0YTsgXFxudmFyIHVybCA9ICdodHRwczovL2FwaS5uenAxdmUuY29tL3ZpZGVvL2xpc3RjYWNoZSc7XFxudmFyIGh0bWwgPSBmZXRjaCh1cmwsIHtcXG4gICAgaGVhZGVyczoge1xcbiAgICAnc3VmZml4JzonMTczMTUwJyxcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXFxuICAgIH0sXFxuICAgIGJvZHk6IGJvZHksXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxufSk7IFxcbi8vbG9nKGh0bWwpXFxuXFxubGV0IGh0bWwxID0gSlNPTi5wYXJzZShodG1sKS5kYXRhOyBcXG4vL2xvZyhodG1sMSlcXG52YXIgaXYwPSBKU09OLnBhcnNlKGh0bWwpLnN1ZmZpeDtcXG4vL2xvZyhpdjApO1xcbmxldCBodG1sMiA9IG1kRGVjcnlwdChodG1sMSk7IFxcbi8vbG9nKGh0bWwyKVxcblxcbnZhciBsaXN0ID0gSlNPTi5wYXJzZShodG1sMikuZGF0YS5kYXRhO1xcbi8vbG9nKGxpc3QpO1xcbmxpc3QuZm9yRWFjaCgoZGF0YSkgPT4ge1xcbnZhciB0YWc9ZGF0YS50YWdzO1xcbiAgICAgIHZhciBzdHIxPScnO1xcbiAgICAgZm9yKGkgaW4gdGFnKXtcXG4gICAgdmFyIHN0cjEgPSBzdHIxK3RhZ1tpXS5uYW1lKycgICAnO1xcbn1cXHJcXG4gICAgICAgICAgICBkLnB1c2goe1xcclxcbiAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICAgICBkZXNjOnN0cjEsIHBpY191cmw6ZGF0YS5wYW5vcmFtYS5yZXBsYWNlKCdfc3luYy53ZWJwJywnLmpwZycpLnJlcGxhY2UoJ19sb25nUHJldmlldycsJycpLFxcclxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInBpY18xXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsIDogIGRhdGEudmlkZW9fdXJsLFxcbn0pXFxufSlcXG59Y2F0Y2h7fVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6bq76LGG5qCH562+XCIsXCJwYXRoXCI6XCJtYWRvdWJpYW9xaWFuXCIsXCJydWxlXCI6XCJqczogXFxudmFyIGQgPSBbXTtcXG5cXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXG50cnl7XFxuLy9tZDXliqDlr4ZcXG5mdW5jdGlvbiBtZDUoc3RyKSB7XFxuICAgIHJldHVybiBDcnlwdG9KUy5NRDUoc3RyKS50b1N0cmluZygpO1xcbn1cXG52YXIgdCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSk7XFxudmFyIHQwID0gTWF0aC5mbG9vcihEYXRlLm5vdygpLzEwMDApO1xcbmxldCBpZD1NWV9QQVJBTVMuaWQ7XFxubGV0IHA9TVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcbnZhciBzaWduID0gbWQ1KCdsaXN0X3Jvdz02MCZwYWdlPScrcCsnJnRhZ3M9JytpZCsnJnRpbWVzdGFtcD0nK3QrJyZ0eXBlPTImbX1xJWVhNjpMRGNtUz9hSylDZUYyODdiUHZkOTlARSw5VXBeJyk7IC8vbG9nKHNpZ24pXFxuXFxubGV0IGRhdGEwPXtcXG4gICAgICAgIFxcXCJlbmNvZGVfc2lnblxcXCI6IHNpZ24sXFxuICAgICAgICBcXFwibGlzdF9yb3dcXFwiOiBcXFwiNjBcXFwiLFxcbiAgICAgICAgXFxcInBhZ2VcXFwiOiBwLFxcbiAgICAgICAgXFxcInRhZ3NcXFwiOiBpZCxcXG4gICAgICAgIFxcXCJ0aW1lc3RhbXBcXFwiOiB0LFxcbiAgICAgICAgXFxcInR5cGVcXFwiOiBcXFwiMlxcXCJcXG4gICAgfVxcbi8vbG9nKGRhdGEwKVxcbnZhciBkYXRhID0gbWRFbmNyeXB0KEpTT04uc3RyaW5naWZ5KGRhdGEwKSk7IFxcbi8vbG9nKGRhdGEpXFxudmFyIGJvZHkgPSAncG9zdC1kYXRhPScrZGF0YTsgXFxudmFyIHVybCA9ICdodHRwczovL2FwaS5uenAxdmUuY29tL3ZpZGVvL2xpc3RjYWNoZSc7XFxudmFyIGh0bWwgPSBmZXRjaCh1cmwsIHtcXG4gICAgaGVhZGVyczoge1xcbiAgICAnc3VmZml4JzonMTczMTUwJyxcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXFxuICAgIH0sXFxuICAgIGJvZHk6IGJvZHksXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxufSk7IFxcbi8vbG9nKGh0bWwpXFxuXFxubGV0IGh0bWwxID0gSlNPTi5wYXJzZShodG1sKS5kYXRhOyBcXG4vL2xvZyhodG1sMSlcXG52YXIgaXYwPSBKU09OLnBhcnNlKGh0bWwpLnN1ZmZpeDtcXG4vL2xvZyhpdjApO1xcbmxldCBodG1sMiA9IG1kRGVjcnlwdChodG1sMSk7IFxcbi8vbG9nKGh0bWwyKVxcblxcbnZhciBsaXN0ID0gSlNPTi5wYXJzZShodG1sMikuZGF0YS5kYXRhO1xcbi8vbG9nKGxpc3QpO1xcbmxpc3QuZm9yRWFjaCgoZGF0YSkgPT4ge1xcbnZhciB0YWc9ZGF0YS50YWdzO1xcbiAgICAgIHZhciBzdHIxPScnO1xcbiAgICAgZm9yKGkgaW4gdGFnKXtcXG4gICAgdmFyIHN0cjEgPSBzdHIxK3RhZ1tpXS5uYW1lKycgICAnO1xcbn1cXHJcXG4gICAgICAgICAgICBkLnB1c2goe1xcclxcbiAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICAgICBkZXNjOnN0cjEsIHBpY191cmw6ZGF0YS5wYW5vcmFtYS5yZXBsYWNlKCdfc3luYy53ZWJwJywnLmpwZycpLnJlcGxhY2UoJ19sb25nUHJldmlldycsJycpLFxcclxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInBpY18xXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsIDogIGRhdGEudmlkZW9fdXJsLFxcbn0pXFxufSlcXG59Y2F0Y2h7fVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiOTFUVlwiLFwicGF0aFwiOlwiOTF0dlwiLFwicnVsZVwiOlwianM6IFxcbnZhciBkID0gW107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxuLy9tZDXliqDlr4ZcXG5mdW5jdGlvbiBtZDUoc3RyKSB7XFxuICAgIHJldHVybiBDcnlwdG9KUy5NRDUoc3RyKS50b1N0cmluZygpO1xcbn1cXG52YXIgdCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSk7IFxcbmxldCBwZz0gTVlfVVJMLnNwbGl0KCcjIycpWzFdO1xcbnZhciB0dj0gW3t0aXRsZTogJ+mmlumhtSbpopHpgZMm5qCH562+JyxpZDogJzEmMiYzJyxpbWc6J2h0dHBzOi8vZ2hwcm94eS5uZXQvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL3R1Ymlhby9tYWluL21vdmllLzExMS5zdmcmaHR0cHM6Ly9naHByb3h5Lm5ldC9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbHMxMjU3ODEwMDMvdHViaWFvL21haW4vbW92aWUvMTEyLnN2ZyZodHRwczovL2docHJveHkubmV0L2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sczEyNTc4MTAwMy90dWJpYW8vbWFpbi9tb3ZpZS8xMTMuc3ZnJmh0dHBzOi8vZ2hwcm94eS5uZXQvaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xzMTI1NzgxMDAzL3R1Ymlhby9tYWluL21vdmllLzExNC5zdmcmaHR0cHM6Ly9naHByb3h5Lm5ldC9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbHMxMjU3ODEwMDMvdHViaWFvL21haW4vbW92aWUvMTIyLnN2Zyd9XTtcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgICQucmVxdWlyZShcXFwiQ2F0ZVxcXCIpLkNhdGUodHYsJ3R2JyxkKTtcXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogJ2xpbmUnLFxcbn0se1xcbiAgICBjb2xfdHlwZTogJ2JpZ19ibGFua19ibG9jaycsXFxufVxcbix7XFxuICAgIGNvbF90eXBlOiAnYmlnX2JsYW5rX2Jsb2NrJyxcXG59KTtcXG59XFxubGV0IOWIhuexuz1nZXRNeVZhcigndHYnLCAnMScpO1xcblxcbmlmKOWIhuexuz09MSl7XFxudmFyIHNpZ24gPSBtZDUoJ2xpc3Rfcm93PTIwJnBhZ2U9JytwZysnJnRpbWVzdGFtcD0nK3QrJyZ0eXBlPTInKycmbX1xJWVhNjpMRGNtUz9hSylDZUYyODdiUHZkOTlARSw5VXBeJyk7IFxcbnZhciBkYXRhMD17XFxuICAgICAgIFxcXCJlbmNvZGVfc2lnblxcXCI6c2lnbixcXG4gICAgICAgXFxcImxpc3Rfcm93XFxcIjpcXFwiMjBcXFwiLFxcbiAgICAgICBcXFwicGFnZVxcXCI6cGcsXFxuICAgICAgIFxcXCJ0aW1lc3RhbXBcXFwiOnQsXFxuICAgICAgIFxcXCJ0eXBlXFxcIjpcXFwiMlxcXCJ9O1xcbnZhciBkYXRhID0gbWRFbmNyeXB0KEpTT04uc3RyaW5naWZ5KGRhdGEwKSk7IFxcbnZhciBib2R5ID0gJ3Bvc3QtZGF0YT0nK2RhdGE7IFxcbnZhciB1cmw9J2h0dHBzOi8vdHZ2LnpqcWZhcnQuY24vdmlkZW8vbGlzdGNhY2hlJztcXG5cXG59ZWxzZXtcXG52YXIgc2lnbiA9IG1kNSgndGltZXN0YW1wPScrdCsnJm19cSVlYTY6TERjbVM/YUspQ2VGMjg3YlB2ZDk5QEUsOVVwXicpOyBcXG52YXIgZGF0YTA9e1xcbiAgICAgICAgXFxcImVuY29kZV9zaWduXFxcIjogc2lnbixcXG4gICAgICAgIFxcXCJ0aW1lc3RhbXBcXFwiOiB0XFxuICAgIH07XFxudmFyIGRhdGEgPSBtZEVuY3J5cHQoSlNPTi5zdHJpbmdpZnkoZGF0YTApKTsgXFxudmFyIGJvZHkgPSAncG9zdC1kYXRhPScrZGF0YTsgXFxuaWYo5YiG57G7PT0yKXtcXG52YXIgdXJsID0gJ2h0dHBzOi8vdHZ2LnpqcWZhcnQuY24vdmlkZW8vY2hhbm5lbCc7XFxufWVsc2UgaWYo5YiG57G7PT0zKXtcXG52YXIgdXJsID0gJ2h0dHBzOi8vdHZ2LnpqcWZhcnQuY24vdmlkZW8vdGFncyc7XFxufVxcbn07XFxudmFyIGh0bWwgPSBmZXRjaCh1cmwsIHtcXG4gICAgaGVhZGVyczoge1xcbiAgICAnc3VmZml4JzonMTczMTUwJyxcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXFxuICAgIH0sXFxuICAgIGJvZHk6IGJvZHksXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxufSk7IFxcbmxldCBodG1sMSA9IEpTT04ucGFyc2UoaHRtbCkuZGF0YTsgXFxudmFyIGl2MD0gSlNPTi5wYXJzZShodG1sKS5zdWZmaXg7XFxubGV0IGh0bWwyID0gbWREZWNyeXB0KGh0bWwxKTsgXFxuaWYo5YiG57G7PT0xKXtcXG52YXIgaHRtbDM9ZmV0Y2goSlNPTi5wYXJzZShodG1sMikuZGF0YS5maWxlX25hbWUpO1xcbnZhciBsaXN0ID0gSlNPTi5wYXJzZShodG1sMykuZGF0YTtcXG5saXN0LmZvckVhY2goKGRhdGEpID0+IHtcXG4gICAgICAgIHZhciB0YWc9ZGF0YS50YWdzO1xcbiAgICAgIHZhciBzdHIxPScnO1xcbiAgICAgZm9yKGkgaW4gdGFnKXtcXG4gICAgdmFyIHN0cjEgPSBzdHIxK3RhZ1tpXS5uYW1lKycgICAnO1xcbn1cXHJcXG4gICAgICAgICAgICBkLnB1c2goe1xcclxcbiAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICAgICBkZXNjOnN0cjEsIFxcbiAgICAgICAgICAgICAgIGltZzpkYXRhLnRodW1iK21kbGF6eSxcXHJcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJwaWNfMVxcXCIsXFxuICAgICAgICAgICAgICAgIHVybCA6ICBkYXRhLnZpZGVvX3VybCt0dnZvZCxcXG59KVxcbn0pXFxufWVsc2UgaWYo5YiG57G7PT0yKXtcXG52YXIgbGlzdCA9IEpTT04ucGFyc2UoaHRtbDIpLmRhdGE7XFxubGlzdC5mb3JFYWNoKChkYXRhKSA9PiB7XFxyXFxuICAgICAgICAgICAgZC5wdXNoKHtcXHJcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEubmFtZSxcXG4gICAgICAgICAgICAgICAgZGVzYzpkYXRhLnRvdGFsKyfkuKrniYflhL8nLFxcbiAgICAgICAgICAgICAgIHBpY191cmw6ZGF0YS5pbWFnZSxcXHJcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uXzNcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmwgOiAgJ2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlLzkxdHZwaW5kYW9cXFwiKScsXFxuICAgICAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGlkOmRhdGEuaWQsXFxuICAgICAgICAgIH1cXG59KVxcbn0pXFxufWVsc2UgaWYo5YiG57G7PT0zKXtcXG52YXIgbGlzdCA9IEpTT04ucGFyc2UoaHRtbDIpLmRhdGE7XFxuLy9sb2cobGlzdClcXG5saXN0LmZvckVhY2goKGRhdGEpID0+IHtcXHJcXG4gICAgICAgICAgICBkLnB1c2goe1xcclxcbiAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS5uYW1lLFxcbiAgICAgICAgICAgICAgICAvL2ltZzpkYXRhLnRodW1iK21kbGF6eSxcXHJcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzNcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmwgOiAgJ2hpa2VyOi8vZW1wdHkjI2Z5cGFnZScrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlLzkxdHZiaWFvcWlhblxcXCIpJyxcXG4gICAgICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgaWQ6ZGF0YS5pZCxcXG4gICAgICAgICAgfVxcbn0pXFxufSlcXG59XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCI5MXR25qCH562+XCIsXCJwYXRoXCI6XCI5MXR2Ymlhb3FpYW5cIixcInJ1bGVcIjpcImpzOiBcXG52YXIgZCA9IFtdO1xcblxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcbnRyeXtcXG4vL21kNeWKoOWvhlxcbmZ1bmN0aW9uIG1kNShzdHIpIHtcXG4gICAgcmV0dXJuIENyeXB0b0pTLk1ENShzdHIpLnRvU3RyaW5nKCk7XFxufVxcbnZhciB0ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpKTtcXG52YXIgdDAgPSBNYXRoLmZsb29yKERhdGUubm93KCkvMTAwMCk7XFxubGV0IGlkPU1ZX1BBUkFNUy5pZDtcXG5sZXQgcD1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxudmFyIHNpZ24gPSBtZDUoJ2xpc3Rfcm93PTYwJnBhZ2U9JytwKycmdGFncz0nK2lkKycmdGltZXN0YW1wPScrdCsnJnR5cGU9MiZtfXElZWE2OkxEY21TP2FLKUNlRjI4N2JQdmQ5OUBFLDlVcF4nKTsgLy9sb2coc2lnbilcXG5cXG5sZXQgZGF0YTA9e1xcbiAgICAgICAgXFxcImVuY29kZV9zaWduXFxcIjogc2lnbixcXG4gICAgICAgIFxcXCJsaXN0X3Jvd1xcXCI6IFxcXCI2MFxcXCIsXFxuICAgICAgICBcXFwicGFnZVxcXCI6IHAsXFxuICAgICAgICBcXFwidGFnc1xcXCI6IGlkLFxcbiAgICAgICAgXFxcInRpbWVzdGFtcFxcXCI6IHQsXFxuICAgICAgICBcXFwidHlwZVxcXCI6IFxcXCIyXFxcIlxcbiAgICB9XFxudmFyIGRhdGEgPSBtZEVuY3J5cHQoSlNPTi5zdHJpbmdpZnkoZGF0YTApKTsgXFxudmFyIGJvZHkgPSAncG9zdC1kYXRhPScrZGF0YTsgXFxudmFyIHVybCA9ICdodHRwczovL3R2di56anFmYXJ0LmNuL3ZpZGVvL2xpc3RjYWNoZSc7XFxudmFyIGh0bWwgPSBmZXRjaCh1cmwsIHtcXG4gICAgaGVhZGVyczoge1xcbiAgICAnc3VmZml4JzonMTczMTUwJyxcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXFxuICAgIH0sXFxuICAgIGJvZHk6IGJvZHksXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxufSk7IFxcbmxldCBodG1sMSA9IEpTT04ucGFyc2UoaHRtbCkuZGF0YTsgXFxudmFyIGl2MD0gSlNPTi5wYXJzZShodG1sKS5zdWZmaXg7XFxubGV0IGh0bWwyID0gbWREZWNyeXB0KGh0bWwxKTsgXFxudmFyIGh0bWwzPWZldGNoKEpTT04ucGFyc2UoaHRtbDIpLmRhdGEuZmlsZV9uYW1lKTtcXG52YXIgbGlzdCA9IEpTT04ucGFyc2UoaHRtbDMpLmRhdGE7XFxubGlzdC5mb3JFYWNoKChkYXRhKSA9PiB7XFxudmFyIHRhZz1kYXRhLnRhZ3M7XFxuICAgICAgdmFyIHN0cjE9Jyc7XFxuICAgICBmb3IoaSBpbiB0YWcpe1xcbiAgICB2YXIgc3RyMSA9IHN0cjErdGFnW2ldLm5hbWUrJyAgICc7XFxufVxcclxcbiAgICAgICAgICAgIGQucHVzaCh7XFxyXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgICAgIGRlc2M6c3RyMSwgXFxuICAgICAgICAgICAgICAgaW1nOmRhdGEudGh1bWIrbWRsYXp5LFxcclxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInBpY18xXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsIDogIGRhdGEudmlkZW9fdXJsK3R2dm9kLFxcbn0pXFxufSlcXG59Y2F0Y2h7fVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiOTF0dumikemBk1wiLFwicGF0aFwiOlwiOTF0dnBpbmRhb1wiLFwicnVsZVwiOlwianM6IFxcbnZhciBkID0gW107XFxuXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxudHJ5e1xcbi8vbWQ15Yqg5a+GXFxuZnVuY3Rpb24gbWQ1KHN0cikge1xcbiAgICByZXR1cm4gQ3J5cHRvSlMuTUQ1KHN0cikudG9TdHJpbmcoKTtcXG59XFxudmFyIHQgPSBNYXRoLmZsb29yKERhdGUubm93KCkpO1xcbnZhciB0MCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKS8xMDAwKTtcXG5sZXQgaWQ9TVlfUEFSQU1TLmlkO1xcbmxldCBwPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXG52YXIgc2lnbiA9IG1kNSgnY2hhbm5lbD0nK2lkKycmbGlzdF9yb3c9NjAmcGFnZT0nK3ArJyZ0aW1lc3RhbXA9Jyt0KycmdHlwZT0yJm19cSVlYTY6TERjbVM/YUspQ2VGMjg3YlB2ZDk5QEUsOVVwXicpOyBcXG5sZXQgZGF0YTA9e1xcbiAgICAgICAgXFxcImNoYW5uZWxcXFwiOiBpZCxcXG4gICAgICAgIFxcXCJlbmNvZGVfc2lnblxcXCI6IHNpZ24sXFxuICAgICAgICBcXFwibGlzdF9yb3dcXFwiOiBcXFwiNjBcXFwiLFxcbiAgICAgICAgXFxcInBhZ2VcXFwiOiBwLFxcbiAgICAgICAgXFxcInRpbWVzdGFtcFxcXCI6IHQsXFxuICAgICAgICBcXFwidHlwZVxcXCI6IFxcXCIyXFxcIlxcbiAgICB9XFxudmFyIGRhdGEgPSBtZEVuY3J5cHQoSlNPTi5zdHJpbmdpZnkoZGF0YTApKTsgXFxudmFyIGJvZHkgPSAncG9zdC1kYXRhPScrZGF0YTsgXFxudmFyIHVybCA9ICdodHRwczovL3R2di56anFmYXJ0LmNuL3ZpZGVvL2xpc3RjYWNoZSc7XFxudmFyIGh0bWwgPSBmZXRjaCh1cmwsIHtcXG4gICAgaGVhZGVyczoge1xcbiAgICAnc3VmZml4JzonMTczMTUwJyxcXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXFxuICAgIH0sXFxuICAgIGJvZHk6IGJvZHksXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxufSk7IFxcbmxldCBodG1sMSA9IEpTT04ucGFyc2UoaHRtbCkuZGF0YTsgXFxudmFyIGl2MD0gSlNPTi5wYXJzZShodG1sKS5zdWZmaXg7XFxubGV0IGh0bWwyID0gbWREZWNyeXB0KGh0bWwxKTsgXFxudmFyIGh0bWwzPWZldGNoKEpTT04ucGFyc2UoaHRtbDIpLmRhdGEuZmlsZV9uYW1lKTtcXG52YXIgbGlzdCA9IEpTT04ucGFyc2UoaHRtbDMpLmRhdGE7XFxubGlzdC5mb3JFYWNoKChkYXRhKSA9PiB7XFxudmFyIHRhZz1kYXRhLnRhZ3M7XFxuICAgICAgdmFyIHN0cjE9Jyc7XFxuICAgICBmb3IoaSBpbiB0YWcpe1xcbiAgICB2YXIgc3RyMSA9IHN0cjErdGFnW2ldLm5hbWUrJyAgICc7XFxufVxcclxcbiAgICAgICAgICAgIGQucHVzaCh7XFxyXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgICAgIGRlc2M6c3RyMSxcXG4gICAgICAgICAgICAgICBpbWc6ZGF0YS50aHVtYittZGxhenksXFxyXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicGljXzFcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmwgOiAgZGF0YS52aWRlb191cmwrdHZ2b2QsXFxufSlcXG59KVxcbn1jYXRjaHt9XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8yXCIsXCJuYW1lXCI6XCLnjKvlkqpcIixcInBhdGhcIjpcIm1hb21pXCIsXCJydWxlXCI6XCIganM6IFxcbnZhciBkID0gW107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxudmFyIHBnPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXG52YXIg54yr5ZKqPSBbe3RpdGxlOiAn54yr5ZKq5Y6f5YibJkFJ5Yi25L2cJuS4jembheinhumikSbkuprmtLLml6Ag56CBJuaKlumfs+WmuembhuWQiCbng63liafmiJDkurrniYgm6Z+p5Zu95LiJ57qnJuS6uuawlOWlsyDkvJgnLGlkOiAnMTAmMTYmNSY5JjExJjEyJjEzJjYnfV07XFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAkLnJlcXVpcmUoXFxcIkNhdGVcXFwiKS5DYXRlKOeMq+WSqiwn54yr5ZKqJyxkKTtcXG59XFxudmFyIHNpZ249RW5jcnlwdCgne1xcXCJzcGVjaWFsX2lkXFxcIjonK2dldE15VmFyKCfnjKvlkqonLCcxMCcpKycsXFxcInBhZ2VcXFwiOicrcGcrJ30nKTtcXG50cnl7XFxudmFyIGhvc3Q9J2h0dHA6Ly8xMTkuMjguNTIuMTkzOjgwODkvYXBpL3NwZWNpYWwvdmlkZW8/cGFyYW1zPScrc2lnbjtcXG52YXIgYm9keT0ncGFyYW1zPScrc2lnbjtcXG52YXIgaHRtbCA9IGZldGNoKGhvc3QsIHtcXG4gICAgaGVhZGVyczoge1xcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXFxuICAgIH0sXFxuICAgIGJvZHk6IGJvZHksXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxufSk7IFxcbnZhciBodG1sMj1EZWNyeXB0KGh0bWwpXFxudmFyIGxpc3Q9SlNPTi5wYXJzZShodG1sMikuZGF0YS5kYXRhO1xcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudmlkZW9fbmFtZSxcXG4gICAgICAgICAgICBkZXNjOmRhdGEuY3JlYXRlX2F0LFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZSxcXG4gICAgICAgICAgICB1cmw6ZGF0YS52aWRlb19pZCttYW9taWp4LFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcbiAgICAgICAgfSlcXG4gfSlcXG4gfWNhdGNoe31cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzJcIixcIm5hbWVcIjpcIueMq+WSquWOn+WIm1wiLFwicGF0aFwiOlwibWFvbWl5dWFuY2h1YW5nXCIsXCJydWxlXCI6XCIganM6IFxcbnZhciBkID0gW107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSk7XFxudmFyIHBnPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXG52YXIg54yr5ZKq5Y6f5YibPSBbe3RpdGxlOiAn5pyA5pawJueDremXqCcsaWQ6ICczJjEnfV07XFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAkLnJlcXVpcmUoXFxcIkNhdGVcXFwiKS5DYXRlKOeMq+WSquWOn+WImywn54yr5ZKq5Y6f5YibJyxkKTtcXG59XFxudmFyIHNpZ249RW5jcnlwdCgne1xcXCJ1c2VyX2lkXFxcIjoxNzkwMzY4LFxcXCJ0eXBlXFxcIjonK2dldE15VmFyKCfnjKvlkqrljp/liJsnLCczJykrJyxcXFwicGFnZVxcXCI6JytwZysnfScpO1xcbnRyeXtcXG52YXIgaG9zdD0naHR0cDovLzExOS4yOC41Mi4xOTM6ODA4OS9hcGkvb3JpZ2luYWwvaW5kZXg/cGFyYW1zPScrc2lnbjtcXG52YXIgYm9keT0ncGFyYW1zPScrc2lnbjtcXG52YXIgaHRtbCA9IGZldGNoKGhvc3QsIHtcXG4gICAgaGVhZGVyczoge1xcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXFxuICAgIH0sXFxuICAgIGJvZHk6IGJvZHksXFxuICAgIG1ldGhvZDogJ1BPU1QnXFxufSk7IFxcbnZhciBodG1sMj1EZWNyeXB0KGh0bWwpXFxudmFyIGxpc3Q9SlNPTi5wYXJzZShodG1sMikuZGF0YS5kYXRhO1xcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzpkYXRhLmNyZWF0ZV9hdCxcXG4gICAgICAgICAgICBpbWc6IGRhdGEudmlkZW9faW1nLFxcbiAgICAgICAgICAgIHVybDpkYXRhLm0zdTgsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzMnLFxcbiAgICAgICAgICAgIGV4dHJhOiB7IFxcbiAgICAgICAgICAgIGxvbmdDbGljazogW1xcbiAgICAgICAgICAgIHt0aXRsZTogJ+S4i+i9vScsIGpzOiAkLnRvU3RyaW5nKCh1cmwpPT57IHJldHVybiAgJ2Rvd25sb2FkOi8vJyt1cmx9LGRhdGEuZG93bil9XFxuICAgICAgICAgICAgXVxcbiAgICAgICAgICAgfVxcbiAgICAgIH0pXFxuIH0pXFxuIH1jYXRjaHt9XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8yXCIsXCJuYW1lXCI6XCLpppbpobXop4bpopHliIbnsbtcIixcInBhdGhcIjpcInN5dmlkZW9cIixcInJ1bGVcIjpcImpzOiBcXG52YXIgZCA9IFtdO1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvYWVzJykpLnJ1bGUpO1xcbnRyeXtcXG5sZXQgaG9zdD1NWV9QQVJBTVMuaG9zdC5yZXBsYWNlKCdodHRwOi8vYXBpLnBocGppZWtvdS50b3AnLCdodHRwczovL2FwaTEueWlsdXNodW5mZW5nLnRvcCcpO1xcbnZhciB3ej1NWV9QQVJBTVMud3o7XFxudmFyIHBnPU1ZX1VSTC5zcGxpdCgnIyMnKVsxXTtcXG5pZih3ej09J2Jhb21hZHMnKXtcXG4gICAgdmFyIGhvc3Q9TVlfUEFSQU1TLmhvc3QucmVwbGFjZSgnaHR0cDovL2FwaS5waHBqaWVrb3UudG9wJywnaHR0cHM6Ly9hcGkxLnlpbHVzaHVuZmVuZy50b3AnKS5yZXBsYWNlKCdiYW9tYWRzJywnYmFvbWEvYmFvbWFkcycpO1xcbn1cXG52YXIg6aaW6aG16KeG6aKR5YiG57G7PWZldGNoKGhvc3QrJz9nZXRzb3J0JylcXG52YXIgZGF0YT0gSlNPTi5wYXJzZSjpppbpobXop4bpopHliIbnsbspLmNhdGVnb3JpZXM7XFxudmFyIGluZGV4X249ZGF0YVswXS5pZC50b1N0cmluZygpXFxuaWYoTVlfUEFHRT09MSl7XFxuZGF0YS5mb3JFYWNoKGRhdGEgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ+mmlumhteinhumikeWIhuexuycrd3osaW5kZXhfbik9PWRhdGEuaWQudG9TdHJpbmcoKT9zdHJvbmcoZGF0YS50aXRsZSwnRkY2Njk5Jyk6ZGF0YS50aXRsZSxcXG4gICAgICAgICAgICB1cmw6JCgnJykubGF6eVJ1bGUoKHRpdGxlLGlkLHd6KSA9PiB7XFxuICAgICAgICAgICAgICAgcHV0TXlWYXIoJ+mmlumhteinhumikeWIhuexuycrd3osIGlkKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LGRhdGEudGl0bGUsZGF0YS5pZC50b1N0cmluZygpLHd6KSxcXG4gICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJ1xcbiAgICB9KVxcbn0pXFxufVxcblxcbnZhciBsaXN0PUpTT04ucGFyc2UoZmV0Y2goaG9zdCsnP3NvcnQ9JytnZXRNeVZhcign6aaW6aG16KeG6aKR5YiG57G7Jyt3eixpbmRleF9uKSsnJnBhZ2U9JytwZykpLnZpZGVvcztcXG4vL2xvZyhsaXN0KVxcbmxpc3QuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgaWYoKHd6PT0nbHV0dWJlJyl8KHd6PT0ncGFsaScpKXtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzooZGF0YS5jcmVhdGVkX2RhdGU9PW51bGw/Jyc6ZGF0YS5jcmVhdGVkX2RhdGUpKycgICcrKGRhdGEuZGF0ZT09bnVsbD8nJzpkYXRhLmRhdGUpLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZStsdWxhenksXFxuICAgICAgICAgICAgdXJsOiBob3N0Kyc/aWQ9JytkYXRhLmlkK3ZvZCxcXG4gICAgICAgICAgICBjb2xfdHlwZTonbW92aWVfMidcXG4gICAgICAgIH0pXFxuICAgIH1lbHNlIGlmKHd6LmluY2x1ZGVzKCdrdWFpbWFvJyl8KHd6PT0nZmVkJyl8KHd6PT0nc2F2c3AnKXwod3o9PSdtbXNwJyl8KHd6PT0nY21hdicpfCh3ej09J2hzY2syJyl8d3ouaW5jbHVkZXMoJ3hpYW5namlhbycpKXtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzooZGF0YS5jcmVhdGVkX2RhdGU9PW51bGw/Jyc6ZGF0YS5jcmVhdGVkX2RhdGUpKycgICcrKGRhdGEuY3JlYXRldGltZT09bnVsbD8nJzpkYXRhLmNyZWF0ZXRpbWUpKycgICcrKGRhdGEuZGF0ZT09bnVsbD8nJzpkYXRhLmRhdGUpLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZSxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcbiAgICAgICAgfSlcXG4gICAgfWVsc2UgaWYod3o9PSdpbnMnKXtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXFxuICAgICAgICAgICAgZGVzYzooZGF0YS5jcmVhdGVkX2RhdGU9PW51bGw/Jyc6ZGF0YS5jcmVhdGVkX2RhdGUpKycgICcrKGRhdGEuZGF0ZT09bnVsbD8nJzpkYXRhLmRhdGUpLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5pbWFnZStpbnNsYXp5LFxcbiAgICAgICAgICAgIHVybDogaG9zdCsnP2lkPScrZGF0YS5pZCt2b2QsXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzInXFxuICAgICAgICB9KVxcbiAgICB9ZWxzZXtcXG4gICAgICAgIGlmKGRhdGEuaW1hZ2Upe1xcbiAgICAgICAgdmFyIGltZz1kYXRhLmltYWdlO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICBkZXNjOihkYXRhLmNyZWF0ZWRfZGF0ZT09bnVsbD8nJzpkYXRhLmNyZWF0ZWRfZGF0ZSkrJyAgJysoZGF0YS5kYXRlPT1udWxsPycnOmRhdGEuZGF0ZSkrJyAgJysoZGF0YS5kdXJhdGlvbj09bnVsbD8nJzpkYXRhLmR1cmF0aW9uKSxcXG4gICAgICAgICAgICBpbWc6IChpbWcuaW5jbHVkZXMoJ3VwbG9hZCcpfHxpbWcuaW5jbHVkZXMoJ25ldy4nKSk/KGRhdGEuaW1hZ2UrbGF6eSk6ZGF0YS5pbWFnZSxcXG4gICAgICAgICAgICB1cmw6IGhvc3QrJz9pZD0nK2RhdGEuaWQrdm9kLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidtb3ZpZV8yJ1xcbiAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gICAgICAgIH1cXG4gfSlcXG4gfWNhdGNoKGUpe1xcbiAgICAgbG9nKGUubWVzc2FnZSlcXG4gICAgIHRvYXN0KCfnnIvkuI3kuoYnKVxcbiB9XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzRcIixcIm5hbWVcIjpcIuWbvueJh+S6jOe6p1wiLFwicGF0aFwiOlwidHVwaWFuZXJqaVwiLFwicnVsZVwiOlwianM6XFxudmFyIGQ9W107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9hZXMnKSkucnVsZSlcXG5sZXQgaG9zdD1NWV9QQVJBTVMuaG9zdDtcXG5sZXQgdXJsPWhvc3Quc3BsaXQoJz8nKVswXTtcXG52YXIgd3o9TVlfUEFSQU1TLnd6O1xcbnRyeXtcXG4gbGV0IGltZz0gSlNPTi5wYXJzZShmZXRjaChob3N0KSkuY29udGVudC5yZXBsYWNlKC9cXFxcJC9nLCcnKS5yZXBsYWNlKC/liIblibIvZywnJykuc3BsaXQoJ0AnKTtcXG4gaW1nLmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGltZzpkYXRhLFxcbiAgICAgICAgICAgIHVybDogJ3BpY3M6Ly8nK2ltZy5qb2luKCcmJicpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidwaWNfMV9mdWxsJ1xcbiAgICAgICAgfSlcXG4gfSlcXG4gXFxufWNhdGNoKGUpe1xcbiAgICBsb2coZS5tZXNzYWdlKVxcbiAgICAgdG9hc3QoJ+eci+S4jeS6hicpXFxufVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfMlwiLFwibmFtZVwiOlwi5Zu+54mH5YiG57G7XCIsXCJwYXRoXCI6XCJwaWNlcmppXCIsXCJydWxlXCI6XCJqczogXFxudmFyIGQgPSBbXTtcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2FlcycpKS5ydWxlKTtcXG50cnl7XFxubGV0IGhvc3Q9TVlfUEFSQU1TLmhvc3QucmVwbGFjZSgnaHR0cDovL2FwaS5waHBqaWVrb3UudG9wJywnaHR0cHM6Ly9hcGkxLnlpbHVzaHVuZmVuZy50b3AnKS5yZXBsYWNlKCdjb21pYycsJ3BpY3R1cmUnKTtcXG52YXIgd3o9TVlfUEFSQU1TLnd6O1xcbnZhciBwZz1NWV9VUkwuc3BsaXQoJyMjJylbMV07XFxuaWYoTVlfUEFHRT09MSl7XFxudmFyIOWbvueJh+WIhuexuz1mZXRjaChob3N0Kyc/Z2V0c29ydCcpXFxudmFyIGRhdGE9IEpTT04ucGFyc2Uo5Zu+54mH5YiG57G7KS5jYXRlZ29yaWVzO1xcbnZhciBpbmRleF9uPWRhdGFbMF0uaWQudG9TdHJpbmcoKVxcbmRhdGEuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKCflm77niYfliIbnsbsnK3d6LGluZGV4X24pPT1kYXRhLmlkLnRvU3RyaW5nKCk/c3Ryb25nKGRhdGEudGl0bGUsJ0ZGNjY5OScpOmRhdGEudGl0bGUsXFxuICAgICAgICAgICAgdXJsOiQoJycpLmxhenlSdWxlKCh0aXRsZSxpZCx3eikgPT4ge1xcbiAgICAgICAgICAgICAgIHB1dE15VmFyKCflm77niYfliIbnsbsnK3d6LCBpZCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSxkYXRhLnRpdGxlLGRhdGEuaWQudG9TdHJpbmcoKSx3eiksXFxuICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbidcXG4gICAgfSlcXG59KVxcbn1cXG52YXIgbGlzdD1KU09OLnBhcnNlKGZldGNoKGhvc3QrJz9zb3J0PScrZ2V0TXlWYXIoJ+WbvueJh+WIhuexuycrd3osaW5kZXhfbikrJyZwYWdlPScrcGcpKS52aWRlb3M7XFxuLy9sb2cobGlzdClcXG5saXN0LmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6IGRhdGEuZGF0ZSxcXG4gICAgICAgICAgICBpbWc6IHd6PT0ndGlrdG9rMTgnPyhkYXRhLmltYWdlK2xhenkpOmRhdGEuaW1hZ2UsXFxuICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL2VtcHR5JysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdHVwaWFuZXJqaVxcXCIpJyxcXG4gICAgICAgICAgICB1cmw6IHd6PT0ndHV6YWMnP2RhdGEuaW1hZ2U6KGhvc3QrJz9pZD0nK2RhdGEuaWQrcGljcyksXFxuICAgICAgICAgICAgY29sX3R5cGU6J21vdmllXzMnLFxcbiAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgIGhvc3Q6YCR7aG9zdH0/aWQ9JHtkYXRhLmlkfWAsXFxuICAgICAgICAgICAgICB3ejp3eixcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gfSlcXG4gfWNhdGNoKGUpe1xcbiAgICAgbG9nKGUubWVzc2FnZSlcXG4gICAgIHRvYXN0KCfnnIvkuI3kuoYnKVxcbiB9XFxuc2V0UmVzdWx0KGQpXCJ9XSIsImljb24iOiJodHRwczovL2ltZzEwLjM2MGJ1eWltZy5jb20vaW1nem9uZS9qZnMvdDEvMTY2NTM1LzQvNDM2NTUvNjc0Ni82NzkxMDkwMEY4YTQzNjVhNC9mODkyZTllZGUzN2FjZTM4LnBuZyIsInByb3h5IjoiIn0=
Add Comment
Please, Sign In to add comment