Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥断插@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImdtdE1vZGlmaWVkXCI6MCxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbXSxcInBhcmFtc1wiOlwie1xcXCJuZXdXaW5kb3dcXFwiOnRydWV9XCIsXCJzYXZlZFwiOmZhbHNlLFwidGl0bGVcIjpcIuaIkeeahOS4u+mhtVwiLFwidmVyc2lvblwiOjAsXCJ1cmxcIjpcImhpa2VyOi8vZW1wdHk7Z2V0O1VURi04O3tVc2VyLUFnZW50QE1vemlsbGEvNS4wIChMaW51eO+8m++8myBBbmRyb2lkIDEx77yb77ybIE1pIDEwIFBybykgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzg4LjAuNDMyNC4xNTIgTW9iaWxlIFNhZmFyaS81MzcuMzZ9XCIsXCJjb2xfdHlwZVwiOlwiaWNvbl9zbWFsbF80XCIsXCJmaW5kX3J1bGVcIjpcImpzOihcXG4ocnVsZUpzb24pID0+IHtcXG4gICAgZXZhbChydWxlSnNvbi5maW5kX3J1bGUpO1xcbn1cXG4pKHtcXFwibGFzdF9jaGFwdGVyX3J1bGVcXFwiOlxcXCJcXFwiLFxcXCJ0aXRsZVxcXCI6XFxcIk15RmllbGThtLDigb9cXFwiLFxcXCJhdXRob3JcXFwiOlxcXCLmlq3lv7Um6YGT6ZW/6a2U5pS5XFxcIixcXFwidmVyc2lvblxcXCI6NDI5LFxcXCJ0eXBlXFxcIjpcXFwidG9vbFxcXCIsXFxcInVybFxcXCI6XFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcXCJjb2xfdHlwZVxcXCI6XFxcInRleHRfY2VudGVyXzFcXFwiLFxcXCJjbGFzc19uYW1lXFxcIjpcXFwiXFxcIixcXFwiY2xhc3NfdXJsXFxcIjpcXFwiXFxcIixcXFwiYXJlYV9uYW1lXFxcIjpcXFwiXFxcIixcXFwiYXJlYV91cmxcXFwiOlxcXCJcXFwiLFxcXCJzb3J0X25hbWVcXFwiOlxcXCJcXFwiLFxcXCJ5ZWFyX25hbWVcXFwiOlxcXCJcXFwiLFxcXCJzb3J0X3VybFxcXCI6XFxcIuW3peWFt1xcXCIsXFxcInllYXJfdXJsXFxcIjpcXFwiXFxcIixcXFwiZmluZF9ydWxlXFxcIjpcXFwianM6XFxcXG4vL2xvZyhNT0JJTEVfVUEpO1xcXFxuICAgIGNvbnN0IHtkZW1vRGF0YSxkZWZhdWx0U2V0cyxmbG9vcnN9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2RlbW9EYXRhP3J1bGU9TXlGaWVsZOG0sOKBv1xcXFxcXFwiKTtcXFxcbmNvbnN0IHtnZXRPbmUsdW5pcXVlMixkdXBsaWNhdGVzfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS91dGlscz9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcIik7XFxcXG5sZXQgc2pUZXN0ID1bXTtmb3IobGV0IGkgaW4gZGVtb0RhdGEpe3NqVGVzdD1zalRlc3QuY29uY2F0KGRlbW9EYXRhW2ldKX1cXFxcbnRoaXMuZCA9IFtdO1xcXFxuY29uc3QganhJdGVtID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2p4SXRlbT9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcIik7XFxcXG52YXIgUm91dGUgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/XFxcXFxcXCIpO1xcXFxuZXZhbChnZXRJdGVtKCdteUZ1bmN0aW9uJykpO1xcXFxuLy8gbXpQb3B1cCgpO1xcXFxudmFyIGp4T2xkViA9IGdldFZhcignanhPbGRWJyk7XFxcXG52YXIganhOZXdWID0gZ2V0VmFyKCdqeE5ld1YnKTtcXFxcbnZhciB2ZXJzaW9uVGlwcyA9IHBhcnNlRmxvYXQoanhOZXdWKSA+IHBhcnNlRmxvYXQoanhPbGRWKSA/ICfigJjigJjmnInmlrDniYjmnKw6IHYnICsganhOZXdWICsgJ1xcXFxcXFxcbuWFiOabtOaWsOWwj+eoi+W6j+eEtuWQjueCueWHu+S4i+aWueaMiemSruaLieWPluiHs+acrOWcsOKAmeKAmScgOiAndicranhPbGRWO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiaWc+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojMEMwMDAwXFxcXFxcXCI+6a2U5patIDIwMjInLFxcXFxuICAgIGRlc2M6IHZlcnNpb25UaXBzLFxcXFxuICAgIHVybDogUm91dGUuc3pQYXJzZSxcXFxcbiAgICAvL3VybDogJ3RvYXN0Oi8v6L+Z5piv5qCH6aKYJyxcXFxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXG59KTtcXFxcblxcXFxuZnVuY3Rpb24gY3pHdWlkZSgpIHtcXFxcbiAgICByZXR1cm4gJCgpLnJ1bGUoKGspID0+IHtcXFxcbiAgICAgICAgc2V0UmVzdWx0KFt7XFxcXG4gICAgICAgICAgICB0aXRsZTogZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL3BhZ2UvR3VpZGU/cnVsZT1NeUZpZWxk4bSw4oG/XFxcXFxcXCIpKSkucnVsZSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0J1xcXFxuICAgICAgICB9XSk7XFxcXG4gICAgfSlcXFxcbn1cXFxcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgLy9jbGVhclZhcihcXFxcXFxcInBhcnNlVXJsLnVybFxcXFxcXFwiKTtcXFxcbiAgICBjbGVhckl0ZW0oXFxcXFxcXCJjbGFzc1xcXFxcXFwiKTtcXFxcbn0pKTtcXFxcbmxldCBqeHNSb3V0ZSA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeUppZXhpLmpzb25cXFxcXFxcIjtcXFxcbmxldCBNeUppZXhpID0ge2ppZXhpczpbXX07XFxcXG5sZXQgamlleGlzID0ge307XFxcXG50cnkge1xcXFxuICAgIE15SmlleGkgPSBKU09OLnBhcnNlKHJlcXVlc3QoanhzUm91dGUpKTtcXFxcbiAgICBqaWV4aXMgPSBNeUppZXhpLmppZXhpcy5maWx0ZXIoaXQ9Pml0Lm5hbWU9PT1NeUppZXhpLm5vdylbMF07XFxcXG59Y2F0Y2ggKGUpIHt9XFxcXG5sZXQganhfZXh0cmEgPSB7XFxcXG4gICAganNMb2FkaW5nSW5qZWN0OiB0cnVlLFxcXFxuICAgIHRpdGxlVmlzaWJsZTogdHJ1ZSxcXFxcbiAgICBkZWZhdWx0VmFsdWU6IGdldFZhcigncGFyc2VVcmwudXJsJywgJycpIHx8IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgb25DaGFuZ2U6ICdwdXRWYXIoXFxcXFxcXCJwYXJzZVVybC51cmxcXFxcXFxcIixpbnB1dCknXFxcXG59O1xcXFxuaWYoIS/ll4XmjqLkvJjlhYh86aG65bqP5LyY5YWILy50ZXN0KE15SmlleGkuYXV0b01vZGUpKXtcXFxcbiAgICBqeF9leHRyYS5ibG9ja1J1bGVzID0gWydiYWlkdS4qLnBuZycsICcuanBnJywnLm1wMycsJy5tcDQnLCcubTN1OCcsJy5mbHYnLCcuYXZpJywnLjNncCcsJy5tcGVnJywnLndtdicsJy5tb3YnLCcucm12YicsJy5naWYnLCcuanBnJywnLmpwZWcnLCcucG5nJywnLmljbycsJy5zdmcnXTtcXFxcbn1cXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6J+W8gOWni+ino+aekCcsXFxcXG4gICAgY29sX3R5cGU6ICdpbnB1dCcsXFxcXG4gICAgZGVzYzogXFxcXFxcXCLor7fovpPop6PmnpDlnLDlnYBcXFxcXFxcIixcXFxcbiAgICB1cmw6JC50b1N0cmluZygoKT0+e1xcXFxuICAgICAgICBsZXQgdXJsID0gZ2V0VmFyKFxcXFxcXFwicGFyc2VVcmwudXJsXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpLnRyaW0oKTtcXFxcbiAgICAgICAgbGV0IHNlbCA9IGdldEl0ZW0oXFxcXFxcXCJzZWxlY3RlZFxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbiAgICAgICAgbGV0IGp4ID0gZ2V0SXRlbShcXFxcXFxcInNlbGVjdGVkXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuICAgICAgICBpZihqeCYmangubGVuZ3RoPjImJiFqeC5zdGFydHNXaXRoKCdodHRwJykpe1xcXFxuICAgICAgICAgICAganggPSAnJzsvL+aWreaPkumrmOe6p+aWueazleebtOaOpea4heepuuino+aekOmTvuaOpeWQjumdouiwg+eUqOagh+mimOWQjeWtl1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGxldCBleD1uZXcgUmVnRXhwKCdeaHR0cHxMVHxydWlmZW5nbGJ8c3VveW98eGZ5fHJlbnJlbm1pfFJvbmdYaW5nVlJ8eHVlcmVufHd1ZHV5dW58bGFvZGl8TmFpZmVpbWl8ZGFvZG18WE1NVHx2MDIwYycpO1xcXFxuICAgICAgICBpZiAoIWV4LnRlc3QodXJsKSYmIS9odHRwfGZ1bmN0aW9uLy50ZXN0KHNlbCkpIHtcXFxcbiAgICAgICAgICAgIGxvZyhnZXRJdGVtKFxcXFxcXFwic2VsZWN0ZWRcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIikpO1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/ov5jmsqHmnInovpPlhaXpk77mjqXlk6ZcXFxcXFxcIjtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBsZXQgcGxheVVybCA9IGp4ICsgdXJsO1xcXFxuICAgICAgICBsb2cocGxheVVybCk7XFxcXG4gICAgICAgIGlmKCFleC50ZXN0KHBsYXlVcmwpJiYhL2h0dHB8ZnVuY3Rpb24vLnRlc3Qoc2VsKSl7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v55yL6LW35p2l5pKt5pS+5Zyw5Z2A5Ly85LmO5LiN5a+55YqyP1xcXFxcXFxcbicrcGxheVVybFxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiAkKCkubGF6eVJ1bGUoKHBsYXlVcmwsdXJsKT0+e1xcXFxuICAgICAgICAgICAgbGV0IHRpdGxlID0gZ2V0SXRlbShcXFxcXFxcInNlbGVjdGVkMFxcXFxcXFwiLCBcXFxcXFxcIiYmXFxcXFxcXCIpLnNwbGl0KFxcXFxcXFwiJiZcXFxcXFxcIilbMF0ucmVwbGFjZSgv8J+RiS9nLCcnKTtcXFxcbiAgICAgICAgICAgIGxvZygndGl0bGU6Jyt0aXRsZSk7XFxcXG4gICAgICAgICAgICBpZihnZXRJdGVtKCdkbi50ZXN0X21vZGUnKT09PSfmlq3mj5InJiYhL17kuI3pgIkkfF7prZTmlq0kLy50ZXN0KHRpdGxlKSl7XFxcXG4gICAgICAgICAgICAgICAgZXZhbChcXFxcXFxcInZhciBjb25maWcgPVxcXFxcXFwiICsgcmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uXFxcXFxcXCIpKTtcXFxcbiAgICAgICAgICAgICAgICBldmFsKHJlcXVlc3QoY29uZmlnLmNqKSk7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gZ2V0SXRlbShcXFxcXFxcInNlbGVjdGVkMFxcXFxcXFwiLCBcXFxcXFxcIiYmXFxcXFxcXCIpLnNwbGl0KFxcXFxcXFwiJiZcXFxcXFxcIilbMF0ucmVwbGFjZSgv8J+RiS9nLCcnKS5yZXBsYWNlKC/kuI3pgIkvZywnJyk7XFxcXG4gICAgICAgICAgICAgICAgbG9nKCflvIDlp4vosIPnlKjmlq3mj5LmtYvor5UsbXlGaWxlZOi2heaXtuS4ujonK2dldEl0ZW0oJ2RuLnRpbWVvdXQnLCc1MDAwJykpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2UodXJsLHRpdGxlLHBhcnNlSW50KGdldEl0ZW0oJ2RuLnRpbWVvdXQnLCc1MDAwJykpKTtcXFxcbiAgICAgICAgICAgIH1lbHNlIGlmKGdldEl0ZW0oJ2RuLnRlc3RfbW9kZScpPT09J+aWreaPkicmJi9e6a2U5patJC8udGVzdCh0aXRsZSkpe1xcXFxuICAgICAgICAgICAgICAgIGV2YWwoXFxcXFxcXCJ2YXIgY29uZmlnID1cXFxcXFxcIiArIHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXFxcXFwiKSk7XFxcXG4gICAgICAgICAgICAgICAgZXZhbChyZXF1ZXN0KGNvbmZpZy5jaikpO1xcXFxuICAgICAgICAgICAgICAgIGxvZygn5byA5aeL6LCD55So6a2U5pat5ouf55yf5rWL6K+VLG15RmlsZWTotoXml7bkuLo6JytnZXRJdGVtKCdkbi50aW1lb3V0JywnNTAwMCcpKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gYXl0bVBhcnNlKHVybCwnJyxwYXJzZUludChnZXRJdGVtKCdkbi50aW1lb3V0JywnNTAwMCcpKSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBlbHNle1xcXFxuICAgICAgICAgICAgICAgIGNvbnN0IHtsYXp5UGFyc2V9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZ2xvYmFsUGFyc2U/cnVsZT3pgZPplb/ku5PlupNQcm8nKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gbGF6eVBhcnNlKHBsYXlVcmwscGFyc2VJbnQoZ2V0SXRlbSgnZG4udGltZW91dCcsJzUwMDAnKSkpfHwndG9hc3Q6Ly/op6PmnpDlpLHotKUs5YW35L2T55yL5pel5b+XJ1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9LHBsYXlVcmwsdXJsKVxcXFxuICAgIH0pLFxcXFxuICAgIGV4dHJhOiBqeF9leHRyYVxcXFxufSk7XFxcXG52YXIgdGVzdF9tb2RlID0gZ2V0SXRlbSgnZG4udGVzdF9tb2RlJywnUeelnicpO1xcXFxubGV0IHNlbF90aXRsZSA9IFsnUeelnicsJ+aWreaPkiddLm1hcCgoaXQpID0+IHtcXFxcbiAgICByZXR1cm4gaXQ9PT10ZXN0X21vZGU/J/CfkYknK2l0Oml0O1xcXFxufSk7XFxcXG5cXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6J/CfkqsnK3Rlc3RfbW9kZSxcXFxcbiAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxcXG4gICAgdXJsOiQoc2VsX3RpdGxlLDIpLnNlbGVjdCgoKT0+e1xcXFxuICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoL/CfkYkvZywnJyk7XFxcXG4gICAgICAgIHNldEl0ZW0oJ2RuLnRlc3RfbW9kZScsaW5wdXQpO1xcXFxuICAgICAgICAvLyBzZXRJdGVtKFxcXFxcXFwic2VsZWN0ZWRcXFxcXFxcIiwgdXJsKTtcXFxcbiAgICAgICAgc2V0SXRlbShcXFxcXFxcInNlbGVjdGVkXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpOyAvLyDph43nva7op6PmnpDlpLRcXFxcbiAgICAgICAgc2V0SXRlbShcXFxcXFxcInNlbGVjdGVkMFxcXFxcXFwiLCBcXFxcXFxcIuS4jemAiSYmXFxcXFxcXCIpOyAvL+WIh+aNouaooeW8j+a4heepuumAieS4reeahOino+aekFxcXFxuICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWIh+aNouaooeW8j+S4ujonK2lucHV0XFxcXG4gICAgfSlcXFxcbn0pO1xcXFxuXFxcXG5sZXQgdGl0bGVBcnIgPSBbXSwgdXJsQXJyID0gW107XFxcXG52YXIganNvbj17dGl0bGU6W10sY29kZXM6e319O1xcXFxuaWYodGVzdF9tb2RlPT09J1HnpZ4nKXtcXFxcbiAgICBsZXQgcGFyc2VVcmxUZXh0ID0gcmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcXFxcXCIpO1xcXFxuICAgIGxldCBwYXJzZVVybEFycmF5ID0gcGFyc2VVcmxUZXh0LnNwbGl0KC9cXFxcXFxcXG4vKTtcXFxcbiAgICBwYXJzZVVybEFycmF5LmZvckVhY2goKGl0KSA9PiB7XFxcXG4gICAgICAgIGl0ID0gaXQuc3BsaXQoXFxcXFxcXCImJlxcXFxcXFwiKTtcXFxcbiAgICAgICAgdGl0bGVBcnIucHVzaChpdFswXSk7XFxcXG4gICAgICAgIHVybEFyci5wdXNoKGl0WzFdKTtcXFxcbiAgICB9KTtcXFxcbn1cXFxcbmVsc2UgaWYodGVzdF9tb2RlPT09J+aWreaPkicpe1xcXFxuICAgIGxldCBzZXRGaWxlID0gcmVxdWVzdCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nKTtcXFxcbiAgICB0cnkge1xcXFxuICAgICAgICBldmFsKCdqc29uPScrc2V0RmlsZSk7XFxcXG4gICAgfWNhdGNoIChlKSB7XFxcXG4gICAgICAgIGxvZygnSnNvbuino+aekOWPkeeUn+S6humUmeivrzonK2UubWVzc2FnZSk7XFxcXG4gICAgfVxcXFxuICAgIHRpdGxlQXJyID0ganNvbi50aXRsZTtcXFxcbiAgICB0aXRsZUFyci5mb3JFYWNoKChpdCkgPT4ge1xcXFxuICAgICAgICB1cmxBcnIucHVzaChqc29uLmNvZGVzW2l0XSk7XFxcXG4gICAgfSk7XFxcXG4gICAgLy8kLnN0cmluZ2lmeShqc29uKVxcXFxufVxcXFxuXFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOnRpdGxlQXJyLmxlbmd0aCsnJyxcXFxcbiAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxcXG4gICAgdXJsOiQodGVzdF9tb2RlKyflhbHorqHop6PmnpDmlbDph486Jyt0aXRsZUFyci5sZW5ndGgrJ+S4qlxcXFxcXFxcbuaYr+WQpumaj+acuuadpeS4quWcsOWdgOi/m+ihjOa1i+ivlT8nKS5jb25maXJtKChzalRlc3QsZ2V0T25lKT0+e1xcXFxuICAgICAgICBwdXRWYXIoJ3BhcnNlVXJsLnVybCcsIGdldE9uZShzalRlc3QpKTtcXFxcbiAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/lnLDlnYDlt7Lnu5nkvaDkuoYnXFxcXG4gICAgfSxzalRlc3QsZ2V0T25lKVxcXFxufSk7XFxcXG5cXFxcbmxldCByZWFsVGl0bGVzID0gdGl0bGVBcnI7XFxcXG5sZXQgYmFycnkgPSB0ZXN0X21vZGU9PT0nUeelnic/WyfkuI3pgIknXTpbJ+S4jemAiScsJ+mtlOaWrSddO1xcXFxudGl0bGVBcnIgPSBiYXJyeS5jb25jYXQodGl0bGVBcnIpO1xcXFxubGV0IHNlbFRpdGxlID0gZ2V0SXRlbShcXFxcXFxcInNlbGVjdGVkMFxcXFxcXFwiLCBcXFxcXFxcIiYmXFxcXFxcXCIpLnNwbGl0KFxcXFxcXFwiJiZcXFxcXFxcIilbMF07XFxcXG50aXRsZUFyciA9IHRpdGxlQXJyLm1hcCgoaXQpID0+IHtcXFxcbiAgICByZXR1cm4gaXQ9PT1zZWxUaXRsZT8n8J+RiScraXQ6aXQ7XFxcXG59KTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6ICfimKLvuI8nK3NlbFRpdGxlLFxcXFxuICAgIHVybDogJCh0aXRsZUFyciwgMykuc2VsZWN0KChyZWFsVGl0bGVzLHVybEFycikgPT4ge1xcXFxuICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoL/CfkYkvZywnJyk7XFxcXG4gICAgICAgIGlmKGlucHV0PT09J+S4jemAiScpe1xcXFxuICAgICAgICAgICAgc2V0SXRlbShcXFxcXFxcInNlbGVjdGVkXFxcXFxcXCIsICcnKTtcXFxcbiAgICAgICAgICAgIHNldEl0ZW0oXFxcXFxcXCJzZWxlY3RlZDBcXFxcXFxcIiwgaW5wdXQgKyBcXFxcXFxcIiYmXFxcXFxcXCIgKyAnJyk7XFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+W3suWPlua2iOino+aekOWPoyznm7TmjqXov5vooYznm7Tpk77op6PmnpBcXFxcXFxcIjtcXFxcbiAgICAgICAgfWVsc2UgaWYoaW5wdXQ9PT0n6a2U5patJyl7XFxcXG4gICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFwic2VsZWN0ZWRcXFxcXFxcIiwgJycpO1xcXFxuICAgICAgICAgICAgc2V0SXRlbShcXFxcXFxcInNlbGVjdGVkMFxcXFxcXFwiLCBpbnB1dCArIFxcXFxcXFwiJiZcXFxcXFxcIiArICcnKTtcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5bey6K6+572u5Li66a2U5pat6Kej5p6Q77yM5Y+v55u05o6l6Kem5Y+R5aSH6IOO5qih5byPXFxcXFxcXCI7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbGV0IGkgPSByZWFsVGl0bGVzLmluZGV4T2YoaW5wdXQpO1xcXFxuICAgICAgICBsZXQgdXJsID0gdXJsQXJyW2ldO1xcXFxuICAgICAgICBsb2coXFxcXFxcXCJcXFxcXFxcXG7mm7TmlLnmjqXlj6M+IFxcXFxcXFwiICsgdXJsKTtcXFxcbiAgICAgICAgaWYodHlwZW9mKHVybCkhPT0nc3RyaW5nJyl7XFxcXG4gICAgICAgICAgICBsb2coJC50b1N0cmluZyh1cmwpKTtcXFxcbiAgICAgICAgICAgIHNldEl0ZW0oXFxcXFxcXCJzZWxlY3RlZFxcXFxcXFwiLCAkLnRvU3RyaW5nKHVybCkpO1xcXFxuICAgICAgICAgICAgLy8gcmV0dXJuICd0b2FzdDovL+aaguS4jeaUr+aMgeaWreaPkmZ1bmN0aW9u57O75YiX55qE6auY57qn6Kej5p6Q5rWL6K+VJ1xcXFxuICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgIHNldEl0ZW0oXFxcXFxcXCJzZWxlY3RlZFxcXFxcXFwiLCB1cmwpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHNldEl0ZW0oXFxcXFxcXCJzZWxlY3RlZDBcXFxcXFxcIiwgaW5wdXQgKyBcXFxcXFxcIiYmXFxcXFxcXCIgKyB1cmwpO1xcXFxuICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5YiH5o2i6Kej5p6Q5Y+j5Li6OlxcXFxcXFwiK2lucHV0O1xcXFxuICAgIH0sIHJlYWxUaXRsZXMsdXJsQXJyKSxcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJzY3JvbGxfYnV0dG9uXFxcXFxcXCJcXFxcbn0pO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTon8J+NgOS4u+mimCcsXFxcXG4gICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3kuLvpopgjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcXFxcXCIsXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFwic2Nyb2xsX2J1dHRvblxcXFxcXFwiXFxcXG59KTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6J/CfjYDop6PmnpAnLFxcXFxuICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96Kej5p6QI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXFxcXFwiLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcInNjcm9sbF9idXR0b25cXFxcXFxcIlxcXFxufSk7XFxcXG52YXIgdGltZW91dCA9IGdldEl0ZW0oJ2RuLnRpbWVvdXQnLCc1MDAwJyk7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOifwn5WSJyt0aW1lb3V0LFxcXFxuICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXFxcbiAgICB1cmw6JCh0aW1lb3V0LCfor7fovpPlhaXop6PmnpDotoXml7bmr6vnp5InKS5pbnB1dCgoKT0+e1xcXFxuICAgICAgICBpZighcGFyc2VJbnQoaW5wdXQpKXtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/otoXml7borr7nva7plJnor6/vvIzmi5Lnu53kv53lrZgnXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgc2V0SXRlbSgnZG4udGltZW91dCcsaW5wdXR8fCc1MDAwJyk7XFxcXG4gICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6K6+572u6Kej5p6Q6LaF5pe25q+r56eSOicrZ2V0SXRlbSgnZG4udGltZW91dCcsJzUwMDAnKTtcXFxcbiAgICB9KSxcXFxcbn0pO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTon8J+TsuWvvOWHulRYVCcsXFxcXG4gICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcXFxuICAgIHVybDokKCfnoa7orqTlr7zlh7rmnKzlnLDmmI7mlofkuJTlpI3liLbkupHliarliIfmnb8/XFxcXFxcXFxu5Y+v5a6M576O5a+85Ye65ZCN56ew5Zyw5Z2A55qE6YCa55So6KeE5YiZLOWvuWZ1bmN0aW9u57G75YW85a655pqC5pe25LiN5piv5b6I5aW9JykuY29uZmlybSgodGl0bGVBcnIsdXJsQXJyKT0+e1xcXFxuICAgICAgICAvL3VybEFycj11cmxBcnIuc2xpY2UoMik7XFxcXG4gICAgICAgIHRpdGxlQXJyPXRpdGxlQXJyLmZpbHRlcihpdD0+IS/kuI3pgIl86a2U5patLy50ZXN0KGl0KSk7XFxcXG4gICAgICAgIGxldCBtb2RlID0gZ2V0SXRlbSgnZG4udGVzdF9tb2RlJywnUeelnicpO1xcXFxuICAgICAgICBpZihtb2RlPT09J+aWreaPkid8fG1vZGU9PT0nUeelnicpe1xcXFxuICAgICAgICAgICAgbGV0IGp4Q29kZSA9IFtdO1xcXFxuICAgICAgICAgICAgdGl0bGVBcnIuZm9yRWFjaCgoaXQpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgaSA9IHRpdGxlQXJyLmluZGV4T2YoaXQpO1xcXFxuICAgICAgICAgICAgICAgIGxldCBjb2RlID0gdXJsQXJyW2ldfHwnJztcXFxcbiAgICAgICAgICAgICAgICBsZXQgb3V0Q29kZSA9ICh0eXBlb2YoY29kZSk9PT0nc3RyaW5nJyk/Y29kZS50cmltKCk6YmFzZTY0RW5jb2RlKGNvZGUudG9TdHJpbmcoKS50cmltKCkpO1xcXFxuICAgICAgICAgICAgICAgIGxldCBvdXRUaXRsZSA9IGl0LnJlcGxhY2UoL/CfkYkvZywnJyk7XFxcXG4gICAgICAgICAgICAgICAgaWYob3V0VGl0bGUuc3RhcnRzV2l0aCgnaHR0cCcpJiYodHlwZW9mKG91dENvZGUpPT09J3VuZGVmaW5lZCd8fCFvdXRDb2RlKSl7XFxcXG4gICAgICAgICAgICAgICAgICAgIGp4Q29kZS5wdXNoKG91dFRpdGxlKycsJytvdXRUaXRsZSk7XFxcXG4gICAgICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgICAgIGp4Q29kZS5wdXNoKG91dFRpdGxlKycsJytvdXRDb2RlfHwnJylcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIGxldCBvdXRUZXh0ID0ganhDb2RlLmpvaW4oJ1xcXFxcXFxcbicpO1xcXFxuICAgICAgICAgICAgbGV0IG91dFBhdGggPSAnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlT3V0XycrbW9kZSsnLnR4dCc7XFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUob3V0UGF0aCxvdXRUZXh0KTtcXFxcbiAgICAgICAgICAgIGxldCBwYXN0ZXMgPSBnZXRQYXN0ZXMoKTtcXFxcbiAgICAgICAgICAgIGxldCBpbXBvcnRVcmwgPSBzaGFyZVBhc3RlKGJhc2U2NEVuY29kZShvdXRUZXh0KSxwYXN0ZXNbMV0pO1xcXFxuICAgICAgICAgICAgbGV0IGltcG9ydENvZGUgPSAn6a2U5pat6Kej5p6Q5a+85YWl5Y+j5LukwqXCpScraW1wb3J0VXJsO1xcXFxuICAgICAgICAgICAgY29weShpbXBvcnRDb2RlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlofku7blt7Llr7zlh7rliLA6JytvdXRQYXRoKydcXFxcXFxcXG7or7foh6rooYzpgJrov4dNVOeuoeeQhuWZqOafpeeciydcXFxcbiAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5oiR5LiN5riF5qWa5L2g6KaB5YGa5LuA5LmIP1xcXFxcXFxcbicrbW9kZTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sdGl0bGVBcnIsdXJsQXJyKSxcXFxcbn0pO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTon8J+TpeWvvOWFpVRYVCcsXFxcXG4gICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcXFxuICAgIHVybDokKCkucnVsZSgoKT0+e1xcXFxuICAgICAgICBsZXQgZCA9IFtdO1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6J+WvvOWFpeivtOaYjicsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTondGV4dF8xJyxcXFxcbiAgICAgICAgICAgIGRlc2M6J+aUr+aMgeatpOaPkuS7tuWvvOWHuuagvOW8j+eahOaWh+acrOi/m+ihjOWvvOWFpeOAglxcXFxcXFxcbuagvOW8jzE6IOWQjeensCzlnLDlnYAg5LiA6KGM5LiA5Liq6Kej5p6QXFxcXFxcXFxu5qC85byPMjrkupHliarliIfmnb8g6a2U5pat6Kej5p6Q5a+85YWl5Y+j5LukwqXCpeWJquWIh+adv+WcsOWdgCcsXFxcXG4gICAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgZGVzYzogXFxcXFxcXCJ0eHTmlofmnKzop6PmnpDop4TliJks5LiA6KGM5LiA5LiqXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXFxcbiAgICAgICAgICAgIHRpdGxlOifop6PmnpDmlofmnKwnLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcXFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0VmFyKCdkbi5pbXBvcnRfdGV4dCcsICcnKSxcXFxcbiAgICAgICAgICAgICAgICB0eXBlOiBcXFxcXFxcInRleHRhcmVhXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgaGVpZ2h0Oi0xLFxcXFxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAncHV0VmFyKFxcXFxcXFwiZG4uaW1wb3J0X3RleHRcXFxcXFxcIixpbnB1dCknXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6J/Cfk6Xlr7zlhaUnLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfY2VudGVyXzEnLFxcXFxuICAgICAgICAgICAgdXJsOiQoJ+ehruWumue8lui+keWlveS6huWQlz/mraTmk43kvZzlsIbopobnm5bmnKzlnLDlt7LmnInnmoTorrDlvZXvvIzlu7rorq7lpIfku73lkI7nlKjnqbrmlofku7blr7zlhaUnKS5jb25maXJtKCgpPT57XFxcXG4gICAgICAgICAgICAgICAgY29uc3Qge2RlZmF1bHRTZXRzfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9kZW1vRGF0YT9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlUm91dGUgPSAnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nO1xcXFxuICAgICAgICAgICAgICAgIGxldCBqc0NvZGUgPSByZXF1ZXN0KHBhcnNlUm91dGUpfHxKU09OLnN0cmluZ2lmeSh7dGl0bGU6W10sY29kZXM6e30sc2V0dGluZ3M6ZGVmYXVsdFNldHN9KTtcXFxcbiAgICAgICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGpzQ29kZSk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lj5HnlJ/plJnor686XFxcXFxcXFxuJytlLm1lc3NhZ2VcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgbGV0IHRvSW1wb3J0ID0gZ2V0VmFyKFxcXFxcXFwiZG4uaW1wb3J0X3RleHRcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgaWYoL+mtlOaWreino+aekOWvvOWFpeWPo+S7pMKlwqUvLnRlc3QodG9JbXBvcnQpJiZ0b0ltcG9ydC5zcGxpdCgnwqXCpScpLmxlbmd0aD4xKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IHRvSW1wb3J0LnNwbGl0KCfCpcKlJylbMV07XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmKCEvXmh0dHAvLnRlc3QodXJsKSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5Ymq5YiH5p2/5Zyw5Z2A5pyJ6K+vLOWvvOWFpeWksei0pSdcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB0b0ltcG9ydCA9IHBhcnNlUGFzdGUodXJsKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgdG9JbXBvcnQgPSBiYXNlNjREZWNvZGUodG9JbXBvcnQpO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAvL2xvZyh0b0ltcG9ydCk7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGppZXhpID0gdG9JbXBvcnQuc3BsaXQoJ1xcXFxcXFxcbicpLmZpbHRlcihpdD0+aXQudHJpbSgpKTtcXFxcbiAgICAgICAgICAgICAgIC8vIGxvZyhqaWV4aSk7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlVGl0bGUgPSBbXTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VDb2RlID0ge307XFxcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSBpbiBqaWV4aSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGU9amlleGlbaV0uc3BsaXQoJywnKVswXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGU9amlleGlbaV0uc3BsaXQoJywnKVsxXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYoIXRpdGxlfHwhY29kZSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2coJ+mUmeivr+ino+aekDonK2ppZXhpW2ldKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUucHVzaCh0aXRsZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKHRpdGxlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYoIShjb2RlLnJlcGxhY2UoL1tcXFxcXFxcXHNdL2csJycpLnN0YXJ0c1dpdGgoJ2h0dHAnKSkpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKHRpdGxlKyfkuLrlh73mlbDop6PmnpAnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvZGUucmVwbGFjZSgvW1xcXFxcXFxcc10vZywnJykubGVuZ3RoPjIwKXsvL+inhuS4umZ1bmN0aW9uXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGV2YWwoYmFzZTY0RGVjb2RlKGNvZGUpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKGNvZGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1jYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gZS5tZXNzYWdlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVbdGl0bGVdPWNvZGU7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGxldCBzY09iamVjdCA9IFtcXFxcXFxcIkNpdHlJUFxcXFxcXFwiLCBcXFxcXFxcInBjVUFcXFxcXFxcIiwgXFxcXFxcXCJjYWNoZU0zdThcXFxcXFxcIiwgXFxcXFxcXCJkZWZhdWx0UGFyc2VXZWJcXFxcXFxcIixcXFxcXFxcIm1hb3NzXFxcXFxcXCIsIFxcXFxcXFwiTExRXFxcXFxcXCJdO1xcXFxuICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUgPSBwYXJzZVRpdGxlP3BhcnNlVGl0bGUuZmlsdGVyKGl0PT4hc2NPYmplY3QuaW5jbHVkZXMoaXQpKTpbXTtcXFxcbiAgICAgICAgICAgICAgICBcXFxcbiAgICAgICAgICAgICAgICB2YXIgbmV3UGFyc2VUaXRsZSA9IGpzb24udGl0bGUuY29uY2F0KHBhcnNlVGl0bGUpO1xcXFxuICAgICAgICAgICAgICAgIGpzb24udGl0bGUgPSBBcnJheS5mcm9tKG5ldyBTZXQobmV3UGFyc2VUaXRsZSkpO1xcXFxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oanNvbi5jb2RlcywgcGFyc2VDb2RlKTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgbmV3RmlsZSA9ICQuc3RyaW5naWZ5KGpzb24pOyAvL0pTT04ucGFyc2XkvJrmiqXplJlcXFxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgbmV3RmlsZSk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LmiJDlip/lr7zlhaUnK2ppZXhpLmxlbmd0aCsn5p2h6Kej5p6QJztcXFxcbiAgICAgICAgICAgIH0pLFxcXFxuICAgICAgICAgICAgZXh0cmE6e1xcXFxuICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOnRydWVcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIHNldFJlc3VsdChkKTtcXFxcbiAgICB9KSxcXFxcbn0pO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTon4piv77iP5p+l6YeN5aSE55CGJyxcXFxcbiAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxcXG4gICAgdXJsOiQoKS5sYXp5UnVsZSgodW5pcXVlMixkdXBsaWNhdGVzLGZsb29ycyk9PntcXFxcbiAgICAgICAgbGV0IHBhcnNlUm91dGUgPSAnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nO1xcXFxuICAgICAgICBsZXQganNDb2RlID0gcmVxdWVzdChwYXJzZVJvdXRlKTtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsganNDb2RlKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+acrOWcsOmCo+S4qk15UGFyc2UuanNvbuaWh+S7tuaciemXrumimCzov5nkuKrlip/og73kuI3nu5nkvaDnlKjkuoYhJ1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGxldCB0aXRsZXMgPSBqc29uLnRpdGxlO1xcXFxuICAgICAgICBsZXQgY29kZXMgPSBqc29uLmNvZGVzO1xcXFxuICAgICAgICBsZXQga2V5cz0gT2JqZWN0LmtleXMoY29kZXMpO1xcXFxuICAgICAgICBsZXQga2V5c19yZV9jdCA9IGtleXMubGVuZ3RoIC0gdW5pcXVlMihrZXlzKS5sZW5ndGg7IC8vIOWQjeensOmHjeWkjVxcXFxuICAgICAgICBsZXQgbm9ybWFsX2xpc3QgPSBbXTtcXFxcbiAgICAgICAgZm9yKGxldCBvIGluIGNvZGVzKXtcXFxcbiAgICAgICAgICAgIGlmKHR5cGVvZihjb2Rlc1tvXSkhPT0ndW5kZWZpbmVkJyYmdHlwZW9mKGNvZGVzW29dKSE9PSdmdW5jdGlvbicpe1xcXFxuICAgICAgICAgICAgICAgIG5vcm1hbF9saXN0LnB1c2goY29kZXNbb10pO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGxldCByZU5vckxpc3QgPSB1bmlxdWUyKG5vcm1hbF9saXN0KTtcXFxcbiAgICAgICAgbGV0IHZhbHVlX3JlX2N0ID0gbm9ybWFsX2xpc3QubGVuZ3RoIC0gcmVOb3JMaXN0Lmxlbmd0aDsgLy/ku6PnoIHph43lpI1cXFxcbiAgICAgICAgbGV0IHZhbHVlc19yZSA9IGR1cGxpY2F0ZXMobm9ybWFsX2xpc3QpOy8v6YeN5aSN55qE5YC8XFxcXG4gICAgICAgIGxldCBmdGxpc3QgPSBbXTtcXFxcbiAgICAgICAgbGV0IGZsYWdzID0ge307XFxcXG4gICAgICAgIGxldCBteUZsb29ycyA9IGZsb29ycztcXFxcbiAgICAgICAgZm9yKGxldCBqIGluIGNvZGVzKXsvL+mBjeWOhuaJgOaciVxcXFxuICAgICAgICAgICAgbGV0IG9uZSA9IGNvZGVzW2pdO1xcXFxuICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mKG9uZSkgIT09ICdmdW5jdGlvbicmJnZhbHVlc19yZS5pbmNsdWRlcyhvbmUpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGZsYWdzW29uZV0pID09PSAndW5kZWZpbmVkJyB8fCAhZmxhZ3Nbb25lXSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy/lj5blh7rnrKzkuIDkuKrmoIflv5dcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzW29uZV0gPSBteUZsb29yc1swXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG15Rmxvb3JzLnNwbGljZSgwLCAxKTsvL+WIoOmZpOagh+W/l+WIl+ihqOmHjOeahOesrOS4gOS4quWFg+e0oFxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIGZ0bGlzdC5wdXNoKHtrZXk6IGZsYWdzW29uZV0gKyBqLCB2YWx1ZTogb25lfSk7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZnRsaXN0LnB1c2goe2tleTogaiwgdmFsdWU6IG9uZX0pO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH1jYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgIGxvZyhlLm1lc3NhZ2UpXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLy8gbG9nKEpTT04uc3RyaW5naWZ5KGZsYWdzKSk7XFxcXG4gICAgICAgIGxldCBuZXdDb2RlcyA9IHt9O1xcXFxuICAgICAgICBmb3IobGV0IGsgaW4gZnRsaXN0KXtcXFxcbiAgICAgICAgICAgIG5ld0NvZGVzW2Z0bGlzdFtrXS5rZXldID0gZnRsaXN0W2tdLnZhbHVlO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGxldCB0aXBzID0gJ+ajgOa1i+WIsOWQjeensOWkjeeUqOmhueebruaVsDonK2tleXNfcmVfY3QrJyzku6PnoIHph43lpI3pobnnm67mlbDph486Jyt2YWx1ZV9yZV9jdCsnXFxcXFxcXFxu6ZyA6KaB5LiA6ZSu5omT5Liq5qCH6K+G5ZCXP+S4jeaUr+aMgeiHquWKqOWIoOmZpCzmiZPmoIflv5foh6rooYzop6PlhrMnO1xcXFxuICAgICAgICByZXR1cm4gJCh0aXBzKS5jb25maXJtKCh2YWx1ZV9yZV9jdCxqc29uLG5ld0NvZGVzLHBhcnNlUm91dGUpPT57XFxcXG4gICAgICAgICAgICBpZih2YWx1ZV9yZV9jdDwxKXtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pei54S26YO95pivMOS4qumHjeWkjemhueebruS6hu+8jOWwseS4jemcgOimgeaIkeWBmuS7gOS5iOS6hiEnXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBmdW5jdGlvbiBjb21wYXJlKCl7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhLCBiKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qge2Zsb29yc30gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvZGVtb0RhdGE/cnVsZT1NeUZpZWxk4bSw4oG/XFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgeCA9IGEuc3Vic3RyaW5nKDAsMSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCB5ID0gYi5zdWJzdHJpbmcoMCwxKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZsb29ycy5pbmRleE9mKHkpLWZsb29ycy5pbmRleE9mKHgpO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGpzb24uY29kZXMgPSBuZXdDb2RlcztcXFxcbiAgICAgICAgICAgIGxldCB0aXRsZXMgPSBPYmplY3Qua2V5cyhuZXdDb2Rlcyk7XFxcXG4gICAgICAgICAgICB0aXRsZXMgPSB0aXRsZXMuc29ydChjb21wYXJlKCkpO1xcXFxuICAgICAgICAgICAganNvbi50aXRsZSA9IHRpdGxlcztcXFxcbiAgICAgICAgICAgIHZhciBuZXdGaWxlID0gJC5zdHJpbmdpZnkoanNvbik7IC8vSlNPTi5wYXJzZeS8muaKpemUmVxcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsIG5ld0ZpbGUpO1xcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suS4gOmUruaJk+S4iuagh+W/lyc7XFxcXG4gICAgICAgIH0sdmFsdWVfcmVfY3QsanNvbixuZXdDb2RlcyxwYXJzZVJvdXRlKVxcXFxuICAgIH0sdW5pcXVlMixkdXBsaWNhdGVzLGZsb29ycyksXFxcXG59KTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6XFxcXFxcXCLwn5SE6YeN572uQuermVVBXFxcXFxcXCIsXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFwic2Nyb2xsX2J1dHRvblxcXFxcXFwiLFxcXFxuICAgIHVybDogXFxcXFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb20vXFxcXFxcXCIsXFxcXG4gICAgZXh0cmE6IHtcXFxcbiAgICAgICAgdWE6IFBDX1VBXFxcXG4gICAgfVxcXFxufSk7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOlxcXFxcXFwi8J+Xke+4j+aJuemHj+aTjeS9nFxcXFxcXFwiLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcInNjcm9sbF9idXR0b25cXFxcXFxcIixcXFxcbiAgICB1cmw6ICQoJ2hpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5IycpLnJ1bGUoKCk9PntcXFxcbiAgICAgICAgbGV0IGxvY2FsSHRtbCA9IGdldFBhdGgoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvcGxzY1BhcnNlLmh0bWwnKTtcXFxcbiAgICAgICAgbGV0IHRlc3Rjb2RlID0gcmVxdWVzdChsb2NhbEh0bWwpO1xcXFxuICAgICAgICBpZighdGVzdGNvZGV8fC/mibnph4/liKDpmaRcXFxcXFxcXC/lr7zlh7rop6PmnpAvLnRlc3QodGVzdGNvZGUpKXtcXFxcbiAgICAgICAgICAgIC8vIHdyaXRlRmlsZShsb2NhbEh0bWwscmVxdWVzdCgnaHR0cDovL2hpa2VyLm5va2lhLnByZXNzL2hpa2VydWxlL3p5d19kYXRhLzEwJykpO1xcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKGxvY2FsSHRtbCxyZXF1ZXN0KCdodHRwczovL2dpdGNvZGUubmV0L3FxXzMyMzk0MzUxL2RyLy0vcmF3L21hc3Rlci9kcC9iYXRjaF9kZWxldGUuaHRtbCcpKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBsZXQgZCA9IFtdO1xcXFxuICAgICAgICBkLnB1c2goe3RpdGxlOiBcXFxcXFxcIuaJuemHj+aTjeS9nOino+aekFxcXFxcXFwiLCBkZXNjOiBcXFxcXFxcImF1dG8mJmZsb2F0XFxcXFxcXCIsIHVybDogbG9jYWxIdG1sLCBjb2xfdHlwZTogXFxcXFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXFxcXFwifSk7XFxcXG4gICAgICAgIHNldFJlc3VsdChkKTtcXFxcbiAgICB9KSxcXFxcbn0pO1xcXFxubGV0IHdlYl9zZWwgPSAn54ix5aWH6Im6L+S8mOmFty/ohb7orq8v6IqS5p6cL+WTlOWTqeWTlOWTqS/mkJzni5Av6KW/55OcL1BQVFYv5ZKq5ZKVL+S5kOinhi8xOTA1L+mjjuihjC/pvpnohb4v5Lq65Lq66L+3L+S6lOavki/lpJrlpJov6J6N5YW0L+mbquS6ui/ml4vpo47kupEv55Ge5Liw6LWE5rqQJy5zcGxpdCgnLycpO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTon4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojMDBkOWZmXFxcXFxcXCI+5p2l5Liq5rWL6K+V5Zyw5Z2AJyxcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzNcXFxcXFxcIixcXFxcbiAgICB1cmw6JCh3ZWJfc2VsLDQsJ+mAiTHmnaHmraPniYh85YiH54mH5Zyw5Z2A5p2l6Kej5p6QJykuc2VsZWN0KChkZW1vRGF0YSxnZXRPbmUpPT57XFxcXG4gICAgICAgIGxldCB1cmxzID0gZGVtb0RhdGFbaW5wdXRdO1xcXFxuICAgICAgICBsZXQgdXJsID0gZ2V0T25lKHVybHMpfHwnJztcXFxcbiAgICAgICAgaWYoIXVybCl7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8vJytpbnB1dCsn6L+Z5Liq572R56uZ5pqC5pe25rKh5pyJ5pKt5pS+5L6L5a2QJ1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHB1dFZhcigncGFyc2VVcmwudXJsJywgdXJsKTtcXFxcbiAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v57uZ5L2g5om+5LqG5LiqJytpbnB1dCsn55qE5pKt5pS+5Zyw5Z2AOlxcXFxcXFxcbicrdXJsO1xcXFxuICAgIH0sZGVtb0RhdGEsZ2V0T25lKVxcXFxufSk7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOifwn46v6Kej5p6Q5rWL6K+VJyxcXFxcbiAgICBjb2xfdHlwZTondGV4dF8zJyxcXFxcbiAgICB1cmw6J2hpa2VyOi8vcGFnZS9qeFRlc3Q/cnVsZT1NeUZpZWxk4bSw4oG/JyxcXFxcbn0pO1xcXFxuaWYodGVzdF9tb2RlPT09J1HnpZ4nKXtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICAvLycjZmY3MDAwJ1xcXFxuICAgICAgICB0aXRsZTon4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojZmY3MDAwXFxcXFxcXCI+UeelnuaPkuS7tuaOpeWPo+iuvue9ricsXFxcXG4gICAgICAgIC8vIHRpdGxlOiAn4oCc4oCcUeelnuaPkuS7tuaOpeWPo+iuvue9ruKAneKAnScsXFxcXG4gICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvRWRpdFVybD9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcIixcXFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzMnXFxcXG4gICAgfSk7XFxcXG59ZWxzZSBpZih0ZXN0X21vZGU9PT0n5pat5o+SJyl7XFxcXG4gICAgbGV0IHVybCA9IHJlYWxUaXRsZXMubGVuZ3RoPjA/XFxcXFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU957yW6L6RI25vSGlzdG9yeSNcXFxcXFxcIjokKCfliKvorr7nva7kuobvvIzlhYjmi4nku6PnoIEnKS5jb25maXJtKClcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTon4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojZmY3MDAwXFxcXFxcXCI+5pat5o+S5o6l5Y+j6K6+572uJyxcXFxcbiAgICAgICAgdXJsOiB1cmwsXFxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8zJ1xcXFxuICAgIH0pO1xcXFxufVxcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTon4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojZmY3MDAwXFxcXFxcXCI+5bCP55m95YWz5oCA5qih5byPOiA8L3NwYW4+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjpncmV5XFxcXFxcXCI+PHNtYWxsPuS4jeaHguS4jeWtpuWVpeS5n+S4jeS8mu+8n+aLr+aVkeWCu+eZveeUnOeahOS9oDwvc21hbGw+PC9zcGFuPicsXFxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub1JlY29yZEhpc3RvcnkjJykubGF6eVJ1bGUoKCk9PntcXFxcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2Uvc21hbGxXaGl0ZT9ydWxlPU15RmllbGThtLDigb8nXFxcXG4gICAgfSksXFxcXG4gICAgY29sX3R5cGU6ICd0ZXh0XzEnLFxcXFxufSk7XFxcXG5cXFxcbmp4SXRlbS5scUZpbGUoKTtcXFxcbmxldCBleHRyYSA9IGQuc2xpY2UoLTcsZC5sZW5ndGgpOyAvL+aWreaPkua3u+WKoOeahOWFg+e0oFxcXFxuZCA9IGQuc2xpY2UoMCwtNyk7IC8vIOiHquW3seeahOWHveaVsFxcXFxuZXh0cmFbMF0udGl0bGU9J+aLieWPluWIl+ihqCjkuI3mjqjojZApJ1xcXFxuZXh0cmFbMF0uY29sX3R5cGU9J3RleHRfMidcXFxcbmV4dHJhWzFdLnRpdGxlPSfmi4nlj5bku6PnoIEo5by654OI5o6o6I2QKSdcXFxcbmV4dHJhWzFdLmNvbF90eXBlPSd0ZXh0XzInXFxcXG5leHRyYVs0XS5jb2xfdHlwZT0ndGV4dF9jZW50ZXJfMSdcXFxcbmV4dHJhWzRdLnVybD1jekd1aWRlKCk7XFxcXG5leHRyYS5zcGxpY2UoMiwxKTtcXFxcbmQgPSBkLmNvbmNhdChleHRyYSk7XFxcXG4vLyBkLnNwbGljZShkLmxlbmd0aC01LDEpO1xcXFxuc2V0UmVzdWx0KGQpO1xcXCIsXFxcInNlYXJjaEZpbmRcXFwiOlxcXCJcXFwiLFxcXCJzZWFyY2hfdXJsXFxcIjpcXFwiXFxcIixcXFwidGl0bGVDb2xvclxcXCI6XFxcIiNBRUI0MDRcXFwiLFxcXCJncm91cFxcXCI6XFxcIumBk+mVv+i9puW6k/CfmpdcXFwiLFxcXCJkZXRhaWxfY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8xXFxcIixcXFwiZGV0YWlsX2ZpbmRfcnVsZVxcXCI6XFxcIlxcXCIsXFxcInNkZXRhaWxfY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8xXFxcIixcXFwic2RldGFpbF9maW5kX3J1bGVcXFwiOlxcXCJcXFwiLFxcXCJ1YVxcXCI6XFxcIm1vYmlsZVxcXCIsXFxcInByZVJ1bGVcXFwiOlxcXCJcXFwiLFxcXCJwYWdlc1xcXCI6XFxcIlt7XFxcXFxcXCJjb2xfdHlwZVxcXFxcXFwiOlxcXFxcXFwibW92aWVfM1xcXFxcXFwiLFxcXFxcXFwibmFtZVxcXFxcXFwiOlxcXFxcXFwiUGFyc2VfRG4tdnVlLmh0bWxcXFxcXFxcIixcXFxcXFxcInBhdGhcXFxcXFxcIjpcXFxcXFxcIlBhcnNlX0RuLmh0bWxcXFxcXFxcIixcXFxcXFxcInJ1bGVcXFxcXFxcIjpcXFxcXFxcIjwhRE9DVFlQRSBodG1sPlxcXFxcXFxcbjxodG1sPlxcXFxcXFxcbjxoZWFkPlxcXFxcXFxcbiAgICA8bWV0YSBjaGFyc2V0PVxcXFxcXFxcXFxcXFxcXCJ1dGYtOFxcXFxcXFxcXFxcXFxcXCI+XFxcXFxcXFxuICAgIDxtZXRhIG5hbWU9XFxcXFxcXFxcXFxcXFxcInZpZXdwb3J0XFxcXFxcXFxcXFxcXFxcIiBjb250ZW50PVxcXFxcXFxcXFxcXFxcXCJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xLG1pbmltdW0tc2NhbGU9MSxtYXhpbXVtLXNjYWxlPTEsdXNlci1zY2FsYWJsZT1ub1xcXFxcXFxcXFxcXFxcXCIgLz5cXFxcXFxcXG4gICAgPHRpdGxlPlBhcnNlX0RuX3Z1ZTwvdGl0bGU+XFxcXFxcXFxuICAgIDxzY3JpcHQ+XFxcXFxcXFxuICAgICAgICBjb25zdCB2dWVQYXRoID0gJ2hpa2VyOi8vZmlsZXMvcnVsZXMvZHpIb3VzZS9qcy92dWUuanMnO1xcXFxcXFxcbiAgICAgICAgaWYodHlwZW9mKGZiYSk9PSd1bmRlZmluZWQnfHwhZmJhKXtcXFxcXFxcXG4gICAgICAgICAgICB2YXIgZmJhID0gZnlfYnJpZGdlX2FwcDtcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgIHRyeSB7XFxcXFxcXFxuICAgICAgICAgICAgaWYodHlwZW9mKHJlcXVlc3QpPT0ndW5kZWZpbmVkJ3x8IXJlcXVlc3Qpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICBldmFsKGZiYS5nZXRJbnRlcm5hbEpzKCkpO1xcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICB3aW5kb3cucmVxdWVzdCA9IHdpbmRvdy5yZXF1ZXN0MDAgfHwgd2luZG93LnJlcXVlc3Q7XFxcXFxcXFxuICAgICAgICAgICAgLy8gZmJhLmxvZyh2dWVQYXRoKTtcXFxcXFxcXG4gICAgICAgICAgICBpZighcmVxdWVzdCh2dWVQYXRoKSl7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGZiYS53cml0ZUZpbGUodnVlUGF0aCxyZXF1ZXN0KCdodHRwOi8vaGlrZXIubm9raWEucHJlc3MvaGlrZXJ1bGUvcnVsZWxpc3QuanNvbj9pZD0xODIzJykpO1xcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICB0cnkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICBldmFsKGZiYS5mZXRjaCh2dWVQYXRoKSk7XFxcXFxcXFxuICAgICAgICAgICAgfWNhdGNoIChlKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGUubWVzc2FnZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGZiYS5sb2coZS5tZXNzYWdlKTtcXFxcXFxcXG4gICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgLy8gZmJhLmxvZygn5Yqg6L29dnVl57uE5Lu25a6M5q+VJyk7XFxcXFxcXFxuICAgICAgICB9Y2F0Y2ggKGUpIHtcXFxcXFxcXG4gICAgICAgICAgICBhbGVydChlLm1lc3NhZ2UpO1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICA8L3NjcmlwdD5cXFxcXFxcXG4gICAgPCEtLSAgICA8c2NyaXB0IHNyYz1cXFxcXFxcXFxcXFxcXFwiaHR0cHM6Ly91bnBrZy5jb20vdnVlQG5leHRcXFxcXFxcXFxcXFxcXFwiPjwvc2NyaXB0Pi0tPlxcXFxcXFxcbiAgICA8IS0tICAgIDxzY3JpcHQgc3JjPVxcXFxcXFxcXFxcXFxcXCJmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9ydWxlcy9kekhvdXNlL2pzL3Z1ZS5qc1xcXFxcXFxcXFxcXFxcXCI+PC9zY3JpcHQ+LS0+XFxcXFxcXFxuICAgIDxzdHlsZT5cXFxcXFxcXG4gICAgICAgIGJvZHkge1xcXFxcXFxcbiAgICAgICAgICAgIG1hcmdpbjogMCA1cHggMCA1cHg7XFxcXFxcXFxuICAgICAgICAgICAgcGFkZGluZzogMCAwcHggMCAwcHg7XFxcXFxcXFxuICAgICAgICAgICAgLyogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjlGMERBOyovXFxcXFxcXFxuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDA7XFxcXFxcXFxuICAgICAgICAgICAgZm9udC1mYW1pbHk6IFxcXFxcXFxcXFxcXFxcXCJNaWNyb3NvZnQgWWFIZWlcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcXFxcXFxcXCLlrovkvZNcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcXFxcXFxcXCJTZWdvZSBVSVxcXFxcXFxcXFxcXFxcXCIsIFxcXFxcXFxcXFxcXFxcXCJMdWNpZGEgR3JhbmRlXFxcXFxcXFxcXFxcXFxcIiwgSGVsdmV0aWNhLCBBcmlhbCxzYW5zLXNlcmlmLCBGcmVlU2FucywgQXJpbW87XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICAjYXBwe1xcXFxcXFxcbiAgICAgICAgICAgIG1hcmdpbi10b3A6LTEwcHg7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICAjdGlwc3tcXFxcXFxcXG4gICAgICAgICAgICBtYXJnaW4tdG9wOi0xMHB4O1xcXFxcXFxcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206NXB4O1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgLmZ1bmd7XFxcXFxcXFxuICAgICAgICAgICAgdGV4dC1hbGlnbjpjZW50ZXJcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgIGRpdi5ib3gge1xcXFxcXFxcbiAgICAgICAgICAgIG1hcmdpbi10b3A6LTFweDtcXFxcXFxcXG4gICAgICAgICAgICBoZWlnaHQ6IDQzcHg7XFxcXFxcXFxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICAvKui+k+WFpeahhuWwuuWvuCovXFxcXFxcXFxuICAgICAgICBmb3JtIHtcXFxcXFxcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXFxcXFxcXG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxcXFxcXFxuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuXFxcXFxcXFxuICAgICAgICBpbnB1dCwgbGFiZWwsIHNlbGVjdCB7XFxcXFxcXFxuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xcXFxcXFxcbiAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICAvKuWtl+S9k+S9jee9riovXFxcXFxcXFxuICAgICAgICBpbnB1dCB7XFxcXFxcXFxuICAgICAgICAgICAgd2lkdGg6IDc3JTtcXFxcXFxcXG4gICAgICAgICAgICBoZWlnaHQ6IDMycHg7XFxcXFxcXFxuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiA2NnB4O1xcXFxcXFxcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDBweDtcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG5cXFxcXFxcXG4gICAgICAgIGxhYmVsIHtcXFxcXFxcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjtcXFxcXFxcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogNDNweDtcXFxcXFxcXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XFxcXFxcXFxuICAgICAgICAgICAgd2lkdGg6IDYwcHg7XFxcXFxcXFxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcXFxcXFxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG5cXFxcXFxcXG4gICAgICAgIC8q5bCP5qGGKi9cXFxcXFxcXG4gICAgICAgIC5iYXIgbGFiZWwge1xcXFxcXFxcbiAgICAgICAgICAgIC8qYmFja2dyb3VuZDogI0QwNkI2QzsqL1xcXFxcXFxcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDVweCA1NTVweCA1NTVweCA1cHg7XFxcXFxcXFxuICAgICAgICAgICAgd2lkdGg6IDYwcHg7XFxcXFxcXFxuICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xcXFxcXFxcbiAgICAgICAgICAgIHRvcDogMDtcXFxcXFxcXG4gICAgICAgICAgICBsZWZ0OiAzcHg7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuXFxcXFxcXFxuICAgICAgICAvKui+k+WFpeahhuagt+W8jyovXFxcXFxcXFxuICAgICAgICAuYmFyIGlucHV0IHtcXFxcXFxcXG4gICAgICAgICAgICAvKmJvcmRlci1yYWRpdXM6IDVweCA1NTVweCA1NTVweCA1cHg7XFxcXFxcXFxuICAgICAgICAgICAgICovXFxcXFxcXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcblxcXFxcXFxcbiAgICAgICAgLyrliJfooagqL1xcXFxcXFxcbiAgICAgICAgc2VsZWN0IHtcXFxcXFxcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjtcXFxcXFxcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDo0MHB4O1xcXFxcXFxcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcXFxcXFxcXG4gICAgICAgICAgICB3aWR0aDogMjBweDtcXFxcXFxcXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxcXFxcXFxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcblxcXFxcXFxcbiAgICAgICAgLyrliJfooagqL1xcXFxcXFxcbiAgICAgICAgLmxpZWIgc2VsZWN0e1xcXFxcXFxcbiAgICAgICAgICAgIC8qYm9yZGVyLXJhZGl1czogNHB4OyovXFxcXFxcXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTU1cHggNXB4IDVweCA1NTVweDtcXFxcXFxcXG4gICAgICAgICAgICB3aWR0aDogODBweDtcXFxcXFxcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjtcXFxcXFxcXG4gICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XFxcXFxcXFxuICAgICAgICAgICAgdG9wOiAwO1xcXFxcXFxcbiAgICAgICAgICAgIHJpZ2h0OiAycHg7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuXFxcXFxcXFxuICAgICAgICAvKuWktOWDjyovXFxcXFxcXFxuICAgICAgICAucm91bmRfaWNvbntcXFxcXFxcXG4gICAgICAgICAgICB3aWR0aDogNDBweDtcXFxcXFxcXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XFxcXFxcXFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcXFxcXFxcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxcXFxcXFxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXFxcXFxcXG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXFxcXFxcXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICA8L3N0eWxlPlxcXFxcXFxcbjwvaGVhZD5cXFxcXFxcXG48Ym9keT5cXFxcXFxcXG48ZGl2IGNsYXNzPVxcXFxcXFxcXFxcXFxcXCJmdW5nXFxcXFxcXFxcXFxcXFxcIj5cXFxcXFxcXG4gICAgPGEgc3R5bGU9XFxcXFxcXFxcXFxcXFxcImZsb2F0OmxlZnQ7XFxcXFxcXFxcXFxcXFxcIj5cXFxcXFxcXG4gICAgICAgIDxidXR0b24gIDpzdHlsZT1cXFxcXFxcXFxcXFxcXFwiJ2JvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogJyt0aGVtZXMuY2xvc2VCdG4uYmFja2dyb3VuZCsnO3dpZHRoOiA4MHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICcrdGhlbWVzLmNsb3NlQnRuLmNvbG9yXFxcXFxcXFxcXFxcXFxcIiBvbmNsaWNrPVxcXFxcXFxcXFxcXFxcXCJjYW5jZWwoKTtcXFxcXFxcXFxcXFxcXFwiPuWFsyDpl608L2J1dHRvbj5cXFxcXFxcXG4gICAgPC9hPlxcXFxcXFxcbiAgICA8YSBjbGFzcz1cXFxcXFxcXFxcXFxcXFwiYnRuIGJ0bi1wcmltYXJ5XFxcXFxcXFxcXFxcXFxcIj5cXFxcXFxcXG4gICAgICAgIDwhLS0gICAgICAgIDxidXR0b24gIDpzdHlsZT1cXFxcXFxcXFxcXFxcXFwiJ2JvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogJyt0aGVtZXMudGlwc0J0bi5iYWNrZ3JvdW5kKyc7d2lkdGg6IDEyMHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICcrdGhlbWVzLnRpcHNCdG4uY29sb3JcXFxcXFxcXFxcXFxcXFwiIEBjbGljaz1cXFxcXFxcXFxcXFxcXFwic2hvd1RpcHM9IXNob3dUaXBzXFxcXFxcXFxcXFxcXFxcIj57e3Nob3dUaXBzP1xcXFxcXFxcXFxcXFxcXCLpmpDol4/mj5DnpLpcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcXFxcXFxcXCLmmL7npLrmj5DnpLpcXFxcXFxcXFxcXFxcXFwifX08L2J1dHRvbj4tLT5cXFxcXFxcXG4gICAgICAgIDxidXR0b24gIDpzdHlsZT1cXFxcXFxcXFxcXFxcXFwiJ2JvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogJyt0aGVtZXMudGlwc0J0bi5iYWNrZ3JvdW5kKyc7d2lkdGg6IDEyMHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICcrdGhlbWVzLnRpcHNCdG4uY29sb3JcXFxcXFxcXFxcXFxcXFwiIEBjbGljaz1cXFxcXFxcXFxcXFxcXFwic2hvd1RpcHM9IXNob3dUaXBzXFxcXFxcXFxcXFxcXFxcIiB2LXRleHQ9XFxcXFxcXFxcXFxcXFxcInNob3dUaXBzPyfpmpDol4/mj5DnpLonOifmmL7npLrmj5DnpLonXFxcXFxcXFxcXFxcXFxcIj48L2J1dHRvbj5cXFxcXFxcXG4gICAgPC9hPlxcXFxcXFxcbiAgICA8YSBzdHlsZT1cXFxcXFxcXFxcXFxcXFwiZmxvYXQ6cmlnaHRcXFxcXFxcXFxcXFxcXFwiPlxcXFxcXFxcbiAgICAgICAgPGJ1dHRvbiA6c3R5bGU9XFxcXFxcXFxcXFxcXFxcIidib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6ICcrdGhlbWVzLnNhdmVCdG4uYmFja2dyb3VuZCsnO3dpZHRoOiA4MHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICcrdGhlbWVzLnNhdmVCdG4uY29sb3JcXFxcXFxcXFxcXFxcXFwiIG9uY2xpY2s9XFxcXFxcXFxcXFxcXFxcImNsaWNrbWUoJ+mFjSDnva4g5beyIOS/nSDlrZgg77yBJywgMTAwMCwgJ+W8gCcpO1xcXFxcXFxcXFxcXFxcXCI+5L+dIOWtmDwvYnV0dG9uPlxcXFxcXFxcbiAgICA8L2E+XFxcXFxcXFxuXFxcXFxcXFxuPC9kaXY+XFxcXFxcXFxuPGJyPlxcXFxcXFxcbjxkaXYgaWQ9XFxcXFxcXFxcXFxcXFxcImFwcFxcXFxcXFxcXFxcXFxcXCI+XFxcXFxcXFxuICAgIDxoNiBpZD1cXFxcXFxcXFxcXFxcXFwidGlwc1xcXFxcXFxcXFxcXFxcXCIgdi1odG1sPVxcXFxcXFxcXFxcXFxcXCJ0aXBzXFxcXFxcXFxcXFxcXFxcIiB2LXNob3c9XFxcXFxcXFxcXFxcXFxcInNob3dUaXBzXFxcXFxcXFxcXFxcXFxcIj48L2g2PlxcXFxcXFxcbiAgICA8ZGl2IGNsYXNzPVxcXFxcXFxcXFxcXFxcXCJib3ggYmFyXFxcXFxcXFxcXFxcXFxcIiB2LWZvcj1cXFxcXFxcXFxcXFxcXFwib3B0aW9uIGluIG9wdGlvbnNcXFxcXFxcXFxcXFxcXFwiPlxcXFxcXFxcbiAgICAgICAgPGZvcm0+XFxcXFxcXFxuICAgICAgICAgICAgPCEtLSAgICAgICAgICAgIDxsYWJlbCB0eXBlPVxcXFxcXFxcXFxcXFxcXCJzdWJtaXRcXFxcXFxcXFxcXFxcXFwiIDpzdHlsZT1cXFxcXFxcXFxcXFxcXFwiJ2JhY2tncm91bmQ6Jyt0aGVtZXMuYmFybGFiZWwuYmFja2dyb3VuZCsnO2NvbG9yOicrdGhlbWVzLmJhcmxhYmVsLmNvbG9yXFxcXFxcXFxcXFxcXFxcIj57eyBvcHRpb24ubmFtZSB9fTwvbGFiZWw+LS0+XFxcXFxcXFxuICAgICAgICAgICAgPGxhYmVsIHR5cGU9XFxcXFxcXFxcXFxcXFxcInN1Ym1pdFxcXFxcXFxcXFxcXFxcXCIgOnN0eWxlPVxcXFxcXFxcXFxcXFxcXCInYmFja2dyb3VuZDonK3RoZW1lcy5iYXJsYWJlbC5iYWNrZ3JvdW5kKyc7Y29sb3I6Jyt0aGVtZXMuYmFybGFiZWwuY29sb3JcXFxcXFxcXFxcXFxcXFwiIHYtdGV4dD1cXFxcXFxcXFxcXFxcXFwib3B0aW9uLm5hbWVcXFxcXFxcXFxcXFxcXFwiPjwvbGFiZWw+XFxcXFxcXFxuICAgICAgICAgICAgPGlucHV0IDpzdHlsZT1cXFxcXFxcXFxcXFxcXFwiJ2JhY2tncm91bmQ6Jyt0aGVtZXMuYmFySW5wdXQuYmFja2dyb3VuZCsnO2JvcmRlcjogM3B4IHNvbGlkICcrdGhlbWVzLmJhcklucHV0LmNvbG9yXFxcXFxcXFxcXFxcXFxcIiB0eXBlPVxcXFxcXFxcXFxcXFxcXCJ0ZXh0XFxcXFxcXFxcXFxcXFxcIiBvbmNsaWNrPVxcXFxcXFxcXFxcXFxcXCJyZXNldFNlbGVjdCh0aGlzLmlkKVxcXFxcXFxcXFxcXFxcXCIgOnBsYWNlaG9sZGVyPVxcXFxcXFxcXFxcXFxcXCJvcHRpb24ucGxhY2Vob2xkZXJ8fHBsYWNlaG9sZGVyXFxcXFxcXFxcXFxcXFxcIiB2LW1vZGVsPVxcXFxcXFxcXFxcXFxcXCJvcHRpb24udmFsdWVcXFxcXFxcXFxcXFxcXFwiIHYtYmluZDppZD1cXFxcXFxcXFxcXFxcXFwib3B0aW9uLmlkXFxcXFxcXFxcXFxcXFxcIj5cXFxcXFxcXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXFxcXFxcXFxcXFxcXCJsaWViXFxcXFxcXFxcXFxcXFxcIj5cXFxcXFxcXG4gICAgICAgICAgICAgICAgPHNlbGVjdCA6c3R5bGU9XFxcXFxcXFxcXFxcXFxcIidiYWNrZ3JvdW5kOicrdGhlbWVzLnNlbGVjdC5iYWNrZ3JvdW5kKyc7Y29sb3I6Jyt0aGVtZXMuc2VsZWN0LmNvbG9yXFxcXFxcXFxcXFxcXFxcIiA6Y2xlYXJhYmxlPVxcXFxcXFxcXFxcXFxcXCJ0cnVlXFxcXFxcXFxcXFxcXFxcIiBzaXplPVxcXFxcXFxcXFxcXFxcXCIyXFxcXFxcXFxcXFxcXFxcIiA6aWQ9XFxcXFxcXFxcXFxcXFxcIm9wdGlvbi5pZCsnU2VsZWN0J1xcXFxcXFxcXFxcXFxcXCIgOm5hbWU9XFxcXFxcXFxcXFxcXFxcIm9wdGlvbi5pZFxcXFxcXFxcXFxcXFxcXCIgb25jaGFuZ2U9XFxcXFxcXFxcXFxcXFxcImdldE9wdGlvbih0aGlzLmlkLHRoaXMubmFtZSlcXFxcXFxcXFxcXFxcXFwiICB2LW1vZGVsPVxcXFxcXFxcXFxcXFxcXCJvcHRpb24udmFsdWVcXFxcXFxcXFxcXFxcXFwiPlxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2LWlmPVxcXFxcXFxcXFxcXFxcXCJvcHRpb24uaWQhPT0ncWp1JyYmb3B0aW9uLmlkIT09J2NqJ1xcXFxcXFxcXFxcXFxcXCIgOnZhbHVlPVxcXFxcXFxcXFxcXFxcXCJzZWxcXFxcXFxcXFxcXFxcXFwiIDprZXk9XFxcXFxcXFxcXFxcXFxcImluZGV4XFxcXFxcXFxcXFxcXFxcIiB2LWZvcj1cXFxcXFxcXFxcXFxcXFwiKHNlbCxpbmRleCkgaW4gbXlTZWxlY3RcXFxcXFxcXFxcXFxcXFwiPnt7IHNlbCB9fTwvb3B0aW9uPi0tPlxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2LWlmPVxcXFxcXFxcXFxcXFxcXCJvcHRpb24uaWQhPT0ncWp1JyYmb3B0aW9uLmlkIT09J2NqJ1xcXFxcXFxcXFxcXFxcXCIgOnZhbHVlPVxcXFxcXFxcXFxcXFxcXCJzZWxcXFxcXFxcXFxcXFxcXFwiIDprZXk9XFxcXFxcXFxcXFxcXFxcImluZGV4XFxcXFxcXFxcXFxcXFxcIiB2LWZvcj1cXFxcXFxcXFxcXFxcXFwiKHNlbCxpbmRleCkgaW4gbXlTZWxlY3RcXFxcXFxcXFxcXFxcXFwiIHYtdGV4dD1cXFxcXFxcXFxcXFxcXFwic2VsXFxcXFxcXFxcXFxcXFxcIj48L29wdGlvbj5cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdi1lbHNlLWlmPVxcXFxcXFxcXFxcXFxcXCJvcHRpb24uaWQ9PT0ncWp1J1xcXFxcXFxcXFxcXFxcXCIgOnZhbHVlPVxcXFxcXFxcXFxcXFxcXCJzZWxcXFxcXFxcXFxcXFxcXFwiIDprZXk9XFxcXFxcXFxcXFxcXFxcImluZGV4XFxcXFxcXFxcXFxcXFxcIiB2LWZvcj1cXFxcXFxcXFxcXFxcXFwiKHNlbCxpbmRleCkgaW4gWyfpu5jorqQnXS5jb25jYXQobXlTZWxlY3QpXFxcXFxcXFxcXFxcXFxcIj57eyBzZWwgfX08L29wdGlvbj4tLT5cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdi1lbHNlLWlmPVxcXFxcXFxcXFxcXFxcXCJvcHRpb24uaWQ9PT0ncWp1J1xcXFxcXFxcXFxcXFxcXCIgOnZhbHVlPVxcXFxcXFxcXFxcXFxcXCJzZWxcXFxcXFxcXFxcXFxcXFwiIDprZXk9XFxcXFxcXFxcXFxcXFxcImluZGV4XFxcXFxcXFxcXFxcXFxcIiB2LWZvcj1cXFxcXFxcXFxcXFxcXFwiKHNlbCxpbmRleCkgaW4gWyfpu5jorqQnXS5jb25jYXQobXlTZWxlY3QpXFxcXFxcXFxcXFxcXFxcIiB2LXRleHQ9XFxcXFxcXFxcXFxcXFxcInNlbFxcXFxcXFxcXFxcXFxcXCI+PC9vcHRpb24+XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICA8IS0tICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIDp2YWx1ZT1cXFxcXFxcXFxcXFxcXFwic2VsXFxcXFxcXFxcXFxcXFxcIiA6a2V5PVxcXFxcXFxcXFxcXFxcXCJpbmRleFxcXFxcXFxcXFxcXFxcXCIgdi1lbHNlIHYtZm9yPVxcXFxcXFxcXFxcXFxcXCIoc2VsLGluZGV4KSBpbiBjalNlbFxcXFxcXFxcXFxcXFxcXCI+e3sgc2VsIH19PC9vcHRpb24+LS0+XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIDp2YWx1ZT1cXFxcXFxcXFxcXFxcXFwic2VsXFxcXFxcXFxcXFxcXFxcIiA6a2V5PVxcXFxcXFxcXFxcXFxcXCJpbmRleFxcXFxcXFxcXFxcXFxcXCIgdi1lbHNlIHYtZm9yPVxcXFxcXFxcXFxcXFxcXCIoc2VsLGluZGV4KSBpbiBjalNlbFxcXFxcXFxcXFxcXFxcXCIgdi10ZXh0PVxcXFxcXFxcXFxcXFxcXCJzZWxcXFxcXFxcXFxcXFxcXFwiPjwvb3B0aW9uPlxcXFxcXFxcbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cXFxcXFxcXG4gICAgICAgICAgICA8L2Rpdj5cXFxcXFxcXG4gICAgICAgIDwvZm9ybT5cXFxcXFxcXG4gICAgPC9kaXY+XFxcXFxcXFxuPC9kaXY+XFxcXFxcXFxuPGRpdj5cXFxcXFxcXG4gICAgPGEgdi1mb3I9XFxcXFxcXFxcXFxcXFxcInZlciBpbiB2ZXJpbmZvXFxcXFxcXFxcXFxcXFxcIiBzdHlsZT1cXFxcXFxcXFxcXFxcXFwiZmxvYXQ6bGVmdDttYXJnaW4tdG9wOjFweDttYXJnaW4tcmlnaHQ6IDIwcHhcXFxcXFxcXFxcXFxcXFwiIHYtYmluZDppZD0ndmVyLmlkJyBvbmNsaWNrPVxcXFxcXFxcXFxcXFxcXCJkb09wdGlvbih0aGlzLmlkKVxcXFxcXFxcXFxcXFxcXCI+XFxcXFxcXFxuICAgICAgICA8aW1nIDpzcmM9XFxcXFxcXFxcXFxcXFxcInZlci5hdmF0YXJcXFxcXFxcXFxcXFxcXFwiIGNsYXNzPVxcXFxcXFxcXFxcXFxcXCJyb3VuZF9pY29uXFxcXFxcXFxcXFxcXFxcIiAgYWx0PVxcXFxcXFxcXFxcXFxcXCJcXFxcXFxcXFxcXFxcXFwiPlxcXFxcXFxcbiAgICAgICAgPCEtLSAgICAgICAgPHNwYW4gc3R5bGU9XFxcXFxcXFxcXFxcXFxcIm1hcmdpbi1sZWZ0OjEwcHg7bGluZS1oZWlnaHQ6MTBweDtmb250LXNpemU6MTJweDtjb2xvcjogZ3JleTtcXFxcXFxcXFxcXFxcXFwiPnt7IHZlci5hdXRob3IgfX08L3NwYW4+LS0+XFxcXFxcXFxuICAgICAgICA8c3BhbiBzdHlsZT1cXFxcXFxcXFxcXFxcXFwibWFyZ2luLWxlZnQ6MTBweDtsaW5lLWhlaWdodDoxMHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiBncmV5O1xcXFxcXFxcXFxcXFxcXCIgdi10ZXh0PVxcXFxcXFxcXFxcXFxcXCJ2ZXIuYXV0aG9yXFxcXFxcXFxcXFxcXFxcIj48L3NwYW4+XFxcXFxcXFxuICAgIDwvYT5cXFxcXFxcXG4gICAgPGEgc3R5bGU9XFxcXFxcXFxcXFxcXFxcImZsb2F0OnJpZ2h0O21hcmdpbi10b3A6MTBweDtcXFxcXFxcXFxcXFxcXFwiPlxcXFxcXFxcbiAgICAgICAgPGJ1dHRvbiA6c3R5bGU9XFxcXFxcXFxcXFxcXFxcIidib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6Jyt0aGVtZXMuc2F2ZUNsb3NlQnRuLmJhY2tncm91bmQrJzt3aWR0aDogMTYwcHg7aGVpZ2h0OjQwcHg7IGZvbnQtc2l6ZTogMThweDtjb2xvcjogJyt0aGVtZXMuc2F2ZUNsb3NlQnRuLmNvbG9yXFxcXFxcXFxcXFxcXFxcIiBvbmNsaWNrPVxcXFxcXFxcXFxcXFxcXCJjbGlja21lKCfphY0g572uIOW3siDkv50g5a2YIO+8gScsIDEwMDAsICflhbMnKTtcXFxcXFxcXFxcXFxcXFwiPuS/neWtmOW5tuWFs+mXreeVjOmdojwvYnV0dG9uPlxcXFxcXFxcbiAgICA8L2E+XFxcXFxcXFxuPC9kaXY+XFxcXFxcXFxuPHNjcmlwdD5cXFxcXFxcXG4gICAgbGV0IHRpcHMgPSBg5o+Q56S677yaPGJyPuKRoOazqOaEj+aPkuS7tumAiemhue+8jOayoeacieaJi+WKqOWvvOWFpeaPkuS7tueahOivneS4jeeUqOWKqOWug+OAguWmguiuvue9ruS4jeW9k+S8muWvvOiHtOinhOWImeaXoOazleS9v+eUqO+8jDxicj7op6PlhrPlip7ms5XvvJrop4bnlYzmiZPlvIDmm7TlpJrorr7nva7ihpLmlofku7bnrqHnkIbihpLngrljYWNoZeKGkumVv+aMiU15UGFyc2VTZXQuanNvbuWIoOmZpOaOie+8mzxicj7ikaHlhajlsYDorr7nva7lpoLmnpzpgInmi6nkuobpnZ7pu5jorqTpgqPkuYjlhajpg6jnmoTop6PmnpDkvJrkvb/nlKjov5nkuIDorr7nva7vvIzkuI3mg7Pov5nmoLfnmoTor53or7floavlhaXpu5jorqTvvJs8YnI+4pGi57u/6Imy5L+d5a2Y5oyJ6ZKu5LuF5LuF5L+d5a2Y6YWN572u5LiN5Lya5YWz6Zet6K6+572u6aG16Z2i77yM6YWN572u5ZCO5oOz5L+d5a2Y5bm25YWz6Zet6K6+572u6aG16Z2i55qE6K+d6K+354K56JOd6Imy5oyJ6ZKu77ybPGJyPuKRo+WmguaenOmBh+WIsOS/neWtmOaMiemSrueCueS4jeWKqOaIluiAheaKpemUmeeahOaDheWGte+8jOS7peS4i+i3r+W+hOaMqOedgOWIoOmZpOS4gOmBje+8jOeEtuWQjumHjeaWsOaLieWPluaPkuS7tu+8jOe9kemhteWGjeaJk+W8gOatpOe9kemhtVvkuI3opoHlhYjmi4nku6PnoIFd44CC6K6w5b6X5aSH5Lu9PGJyPlxcXFxcXFxcbuS4u+aPkuS7tuWtmOaUvui3r+W+hDogL2NhY2hlL1BhcnNlX0RuLmpzPGJyPlxcXFxcXFxcbue9kemhteiEmuacrOWtmOaUvui3r+W+hDogL2NhY2hlL1BhcnNlX0RuLmh0bWw8YnI+XFxcXFxcXFxu5pen5pat5o+S6YWN572u6Lev5b6EOi9jYWNoZS9NeVBhcnNlU2V0Lmpzb248YnI+XFxcXFxcXFxu5paw5pat5o+S6YWN572u6Lev5b6EL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbjxicj5cXFxcXFxcXG7kuLvpopjmlofku7Y6L2NhY2hlL015VGhlbWUuanNvbjxicj5cXFxcXFxcXG7kuLvpopjmlofku7Y6L2NhY2hlL015VGhlbWUuanNvbjxicj5cXFxcXFxcXG7oh6rliqjmoaPop6PmnpA6L2NhY2hlL015SmlleGkuanNvbjxicj5cXFxcXFxcXG4gICAg4pGk6ZiF6K+75a6M5o+Q56S654K55YWz6Zet5Yqg6L295a6M5pW06K6+572u6aG16Z2i77yM5aaC5Ye66Zeu6aKY5peg5rOV6Ieq6KGM6Kej5Yaz54K55Zu+54mH6L+b5YWl6K665Z2b5ZCR5oiR5Y+N6aaI44CCPGJyPmA7XFxcXFxcXFxuICAgIGxldCBwbGFjZWhvbGRlcj0n6L6T5YWl6Kej5p6Q5ZCN5oiW6ICFVVJMLi4uLi4uJztcXFxcXFxcXG4gICAgLy8jYWE5NmRhICNmYzUxODVcXFxcXFxcXG4gICAgbGV0IHRoZW1lcyA9IHtcXFxcXFxcXG4gICAgICAgIG5hbWU6J+m7mOiupOS4u+mimCcsXFxcXFxcXFxuICAgICAgICBjbG9zZUJ0bjp7Y29sb3I6JyNmNmY2ZjYnLGJhY2tncm91bmQ6JyNhYTk2ZGEnfSxcXFxcXFxcXG4gICAgICAgIHNhdmVCdG46e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjMDY4MDA2J30sXFxcXFxcXFxuICAgICAgICBzYXZlQ2xvc2VCdG46e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjMDVCRkM1J30sXFxcXFxcXFxuICAgICAgICB0aXBzQnRuOntjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonIzA1QkZDNSd9LFxcXFxcXFxcbiAgICAgICAgYmFybGFiZWw6e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjYWE5NmRhJ30sXFxcXFxcXFxuICAgICAgICBiYXJJbnB1dDp7Y29sb3I6JyNhYTk2ZGEnLGJhY2tncm91bmQ6JyNmZmZmZDInfSxcXFxcXFxcXG4gICAgICAgIHNlbGVjdDp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyNhYTk2ZGEnfSxcXFxcXFxcXG4gICAgfTtcXFxcXFxcXG4gICAgbGV0IHRoZW1lRGVmID0ge1xcXFxcXFxcXFxcXFxcXCJuYW1lXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXFxcXFxcXFwi5pat5b+15Y6f55quXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXFxcXFxcXFwiY2xvc2VCdG5cXFxcXFxcXFxcXFxcXFwiOntcXFxcXFxcXFxcXFxcXFwiY29sb3JcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcXFxcXFxcXCIjRjlGMERBXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXFxcXFxcXFwiYmFja2dyb3VuZFxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxcXFxcXFxcIiNjNTQ2NGFcXFxcXFxcXFxcXFxcXFwifSxcXFxcXFxcXFxcXFxcXFwic2F2ZUJ0blxcXFxcXFxcXFxcXFxcXCI6e1xcXFxcXFxcXFxcXFxcXCJjb2xvclxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxcXFxcXFxcIiNGOUYwREFcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcXFxcXFxcXCJiYWNrZ3JvdW5kXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXFxcXFxcXFwiIzA2ODAwNlxcXFxcXFxcXFxcXFxcXCJ9LFxcXFxcXFxcXFxcXFxcXCJzYXZlQ2xvc2VCdG5cXFxcXFxcXFxcXFxcXFwiOntcXFxcXFxcXFxcXFxcXFwiY29sb3JcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcXFxcXFxcXCIjRjlGMERBXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXFxcXFxcXFwiYmFja2dyb3VuZFxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxcXFxcXFxcIiMwNUJGQzVcXFxcXFxcXFxcXFxcXFwifSxcXFxcXFxcXFxcXFxcXFwidGlwc0J0blxcXFxcXFxcXFxcXFxcXCI6e1xcXFxcXFxcXFxcXFxcXCJjb2xvclxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxcXFxcXFxcIiNGOUYwREFcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcXFxcXFxcXCJiYWNrZ3JvdW5kXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXFxcXFxcXFwiIzA1QkZDNVxcXFxcXFxcXFxcXFxcXCJ9LFxcXFxcXFxcXFxcXFxcXCJiYXJsYWJlbFxcXFxcXFxcXFxcXFxcXCI6e1xcXFxcXFxcXFxcXFxcXCJjb2xvclxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxcXFxcXFxcIiNGOUYwREFcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcXFxcXFxcXCJiYWNrZ3JvdW5kXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXFxcXFxcXFwiI0QwNkI2Q1xcXFxcXFxcXFxcXFxcXCJ9LFxcXFxcXFxcXFxcXFxcXCJiYXJJbnB1dFxcXFxcXFxcXFxcXFxcXCI6e1xcXFxcXFxcXFxcXFxcXCJjb2xvclxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxcXFxcXFxcIiNEMDZCNkNcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcXFxcXFxcXCJiYWNrZ3JvdW5kXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXFxcXFxcXFwiI0Y5RjBEQVxcXFxcXFxcXFxcXFxcXCJ9LFxcXFxcXFxcXFxcXFxcXCJzZWxlY3RcXFxcXFxcXFxcXFxcXFwiOntcXFxcXFxcXFxcXFxcXFwiY29sb3JcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcXFxcXFxcXCIjRjlGMERBXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXFxcXFxcXFwiYmFja2dyb3VuZFxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxcXFxcXFxcIiNEMDZCNkNcXFxcXFxcXFxcXFxcXFwifX07XFxcXFxcXFxuICAgIHZhciB0aGVtZVJvdXRlID0gXFxcXFxcXFxcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlUaGVtZS5qc29uXFxcXFxcXFxcXFxcXFxcIjtcXFxcXFxcXG4gICAgaWYoIWZiYS5mZXRjaCh0aGVtZVJvdXRlKSl7XFxcXFxcXFxuICAgICAgICBmYmEud3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkoe25vd190aGVtZTon6buY6K6k5Li76aKYJyx0aGVtZXM6W3RoZW1lcyx0aGVtZURlZl19KSlcXFxcXFxcXG4gICAgfVxcXFxcXFxcbiAgICB0cnkge1xcXFxcXFxcbiAgICAgICAgbGV0IG15VGhlbWVzID0gSlNPTi5wYXJzZShmYmEuZmV0Y2godGhlbWVSb3V0ZSkpO1xcXFxcXFxcbiAgICAgICAgbGV0IG5vd1RoZW1lID0gbXlUaGVtZXMudGhlbWVzLmZpbHRlcihpdD0+aXQubmFtZSA9PT0gbXlUaGVtZXMubm93X3RoZW1lKTtcXFxcXFxcXG4gICAgICAgIHRoZW1lcyA9IG5vd1RoZW1lP25vd1RoZW1lWzBdOm15VGhlbWVzLnRoZW1lc1swXTtcXFxcXFxcXG4gICAgfWNhdGNoIChlKSB7fVxcXFxcXFxcblxcXFxcXFxcbiAgICAvLyDmlq3lv7XliJ3lp4vljJbpg6jliIZcXFxcXFxcXG4gICAgY29uc3QgYWxsQXBpPVsnaHR0cHM6Ly90ZXN0LnJvbmd4aW5ndnIuY29tL3Rlc3QvP3VybD0nLCdodHRwOi8vY2FjaGUubGFuZ3VhbmcuaWN1Ojg4L2RpZGkucGhwP3VybD0nXTtcXFxcXFxcXG4gICAgdmFyIHNldHRpbmdzID0ge1xcXFxcXFxcbiAgICAgICAgcXk6ICfkuIfog73op6PmnpDikr8nLFxcXFxcXFxcbiAgICAgICAgeWs6ICfkuIfog73op6PmnpDikr8nLFxcXFxcXFxcbiAgICAgICAgdHg6ICfkuIfog73op6PmnpDikr8nLFxcXFxcXFxcbiAgICAgICAgbWc6ICfkuIfog73op6PmnpDikr8nLFxcXFxcXFxcbiAgICAgICAgYmw6ICfkuIfog73op6PmnpDikr8nLFxcXFxcXFxcbiAgICAgICAgc2g6ICfkuIfog73op6PmnpDikr8nLFxcXFxcXFxcbiAgICAgICAgeGc6ICfkuIfog73op6PmnpDikr8nLFxcXFxcXFxcbiAgICAgICAgLy8gYWw6ICfkuIfog73op6PmnpDikr8nLFxcXFxcXFxcbiAgICAgICAgcHA6ICfkuIfog73op6PmnpDikr8nLFxcXFxcXFxcbiAgICAgICAgbWk6ICfkuIfog73op6PmnpDikr8nLFxcXFxcXFxcbiAgICAgICAgbGU6ICfkuIfog73op6PmnpDikr8nLFxcXFxcXFxcbiAgICAgICAgbHQ6ICfkuIfog73op6PmnpDikr8nLC8v6b6Z6IW+XFxcXFxcXFxuICAgICAgICBycjon5LiH6IO96Kej5p6Q4pK/JywvL+S6uuS6uui/t1xcXFxcXFxcbiAgICAgICAgd2Q6J+S4h+iDveino+aekOKSvycsLy/kupTmr5LkupFcXFxcXFxcXG4gICAgICAgIG90aDogJ+mBk+mVv+S7k+W6k+mAmuWFjScsXFxcXFxcXFxuICAgICAgICBvbmU6ICcxMDgwJyxcXFxcXFxcXG4gICAgICAgIGZ1bjogJ+iejeWFtCcsXFxcXFxcXFxuICAgICAgICBxanU6ICfpu5jorqQnLFxcXFxcXFxcbiAgICAgICAgY2o6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJ1xcXFxcXFxcbiAgICB9O1xcXFxcXFxcbiAgICB2YXIgb2xkUm91dGUgPSBcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcbiAgICB2YXIgbXlTZXQgPSBmYmEuZmV0Y2gob2xkUm91dGUpO1xcXFxcXFxcbiAgICB2YXIgbmV3Um91dGUgPSBcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb25cXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcbiAgICBpZighZmJhLmZldGNoKG5ld1JvdXRlKSl7XFxcXFxcXFxuICAgICAgICBmYmEud3JpdGVGaWxlKG5ld1JvdXRlLEpTT04uc3RyaW5naWZ5KHtzZXR0aW5nczpzZXR0aW5ncyx0aXRsZTpbXFxcXFxcXFxcXFxcXFxcInl1bjE3MTdcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcXFxcXFxcXCLkvaDniLnnp5HmioBcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcXFxcXFxcXCLono3lhbRcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcXFxcXFxcXCLkurrkurrov7ct5LyY6YW3XFxcXFxcXFxcXFxcXFxcIl0sY29kZXM6e1xcXFxcXFxcXFxcXFxcXCLkvaDniLnnp5HmioBcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcXFxcXFxcXCJodHRwOi8vY2FjaGUubGFuZ3VhbmcuaWN1Ojg4L2RpZGkucGhwP3VybD1cXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcXFxcXFxcXCLono3lhbRcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcXFxcXFxcXCJodHRwczovL3Rlc3Qucm9uZ3hpbmd2ci5jb20vdGVzdC8/dXJsPVxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxcXFxcXFxcIuS6uuS6uui/ty3kvJjphbdcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcXFxcXFxcXCJodHRwczovL3N2aXAucmVucmVubWkuY2M6MjIyMi9hcGkvP2tleT1ubjRqOHJ1a1BYU1Z6Ujc4RTkmdXJsPVxcXFxcXFxcXFxcXFxcXCJ9fSkpXFxcXFxcXFxuICAgIH1cXFxcXFxcXG4gICAgdmFyIG5ld0NvbmZpZyA9IGZiYS5mZXRjaChuZXdSb3V0ZSk7XFxcXFxcXFxuICAgIHZhciBteVNlbGVjdCA9IFtdO1xcXFxcXFxcbiAgICBmdW5jdGlvbiBjb21wYXJlKGxpc3QpIHtcXFxcXFxcXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcXFxcXFxcXG4gICAgICAgICAgICByZXR1cm4gIWxpc3QuaW5jbHVkZXMoaXQpXFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgIH1cXFxcXFxcXG4gICAgaWYobmV3Q29uZmlnJiZuZXdDb25maWcubGVuZ3RoPjIwKXtcXFxcXFxcXG4gICAgICAgIGV2YWwoXFxcXFxcXFxcXFxcXFxcIm5ld0NvbmZpZyA9XFxcXFxcXFxcXFxcXFxcIiArIG5ld0NvbmZpZyArIFxcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxcXFxcXFxcIik7XFxcXFxcXFxuICAgICAgICBsZXQgbmV3S2V5cyA9IE9iamVjdC5rZXlzKG5ld0NvbmZpZy5zZXR0aW5ncyk7XFxcXFxcXFxuICAgICAgICBsZXQgbm93S2V5cyA9IE9iamVjdC5rZXlzKHNldHRpbmdzKTtcXFxcXFxcXG4gICAgICAgIGZvcihsZXQgaSBpbiBuZXdLZXlzKXsvL+a4hemZpOWkmuS9meeahOiKgueCuVxcXFxcXFxcbiAgICAgICAgICAgIGlmKCFub3dLZXlzLmluY2x1ZGVzKG5ld0tleXNbaV0pKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgZGVsZXRlIG5ld0NvbmZpZy5zZXR0aW5nc1tuZXdLZXlzW2ldXVxcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgIHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbihzZXR0aW5ncyxuZXdDb25maWcuc2V0dGluZ3MpO1xcXFxcXFxcbiAgICAgICAgdmFyIHljVGl0bGUgPSBbJ2RlZmF1bHRQYXJzZScsICdkZWZhdWx0UGFyc2VXZWInLCdtYW9zcycsICdDaXR5SVAnLCAnY2FjaGVNM3U4JywgJ3BjVUEnLCAncGFyc2VMYycsICdncGFyc2UnLCAnbnBhcnNlJ107XFxcXFxcXFxuICAgICAgICBteVNlbGVjdCA9IG5ld0NvbmZpZy50aXRsZS5maWx0ZXIoY29tcGFyZSh5Y1RpdGxlKSk7XFxcXFxcXFxuICAgICAgICAvLyBteVNlbGVjdCA9IG15U2VsZWN0Lm1hcCgoaXQpPT57XFxcXFxcXFxuICAgICAgICAvLyAgICAgbGV0IGZsYWcgPSAn4pOKJztcXFxcXFxcXG4gICAgICAgIC8vICAgICBpZih0eXBlb2YobmV3Q29uZmlnLmNvZGVzW2l0XSk9PT0nZnVuY3Rpb24nKXtcXFxcXFxcXG4gICAgICAgIC8vICAgICAgICAgZmxhZyA9ICfikr8nO1xcXFxcXFxcbiAgICAgICAgLy8gICAgIH1lbHNlIGlmKHR5cGVvZihuZXdDb25maWcuY29kZXNbaXRdKT09PSd1bmRlZmluZWQnKXtcXFxcXFxcXG4gICAgICAgIC8vICAgICAgICAgZmxhZyA9ICcnO1xcXFxcXFxcbiAgICAgICAgLy8gICAgIH1cXFxcXFxcXG4gICAgICAgIC8vICAgICByZXR1cm4gZmxhZytpdFxcXFxcXFxcbiAgICAgICAgLy8gfSk7XFxcXFxcXFxuICAgIH1cXFxcXFxcXG4gICAgLy9mYmEubG9nKEpTT04uc3RyaW5naWZ5KG15U2VsZWN0KSk7XFxcXFxcXFxuXFxcXFxcXFxuICAgIGxldCBvcHRpb25zID0gW1xcXFxcXFxcbiAgICAgICAge1xcXFxcXFxcbiAgICAgICAgICAgIG5hbWU6J+eIseWlh+iJuicsXFxcXFxcXFxuICAgICAgICAgICAgaWQ6J3F5JyxcXFxcXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5xeSxcXFxcXFxcXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjon6K6+572u54ix5aWH6Im6J1xcXFxcXFxcbiAgICAgICAgfSxcXFxcXFxcXG4gICAgICAgIHtcXFxcXFxcXG4gICAgICAgICAgICBuYW1lOifkvJjphbcnLFxcXFxcXFxcbiAgICAgICAgICAgIGlkOid5aycsXFxcXFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MueWtcXFxcXFxcXG4gICAgICAgIH0sXFxcXFxcXFxuICAgICAgICB7XFxcXFxcXFxuICAgICAgICAgICAgbmFtZTon6IW+6K6vJyxcXFxcXFxcXG4gICAgICAgICAgICBpZDondHgnLFxcXFxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnR4XFxcXFxcXFxuICAgICAgICB9LFxcXFxcXFxcbiAgICAgICAge1xcXFxcXFxcbiAgICAgICAgICAgIG5hbWU6J+iKkuaenCcsXFxcXFxcXFxuICAgICAgICAgICAgaWQ6J21nJyxcXFxcXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5tZ1xcXFxcXFxcbiAgICAgICAgfSxcXFxcXFxcXG4gICAgICAgIHtcXFxcXFxcXG4gICAgICAgICAgICBuYW1lOiflk5Tlk6nlk5Tlk6knLFxcXFxcXFxcbiAgICAgICAgICAgIGlkOidibCcsXFxcXFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MuYmxcXFxcXFxcXG4gICAgICAgIH0sXFxcXFxcXFxuICAgICAgICB7XFxcXFxcXFxuICAgICAgICAgICAgbmFtZTon5pCc54uQJyxcXFxcXFxcXG4gICAgICAgICAgICBpZDonc2gnLFxcXFxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnNoXFxcXFxcXFxuICAgICAgICB9LFxcXFxcXFxcbiAgICAgICAge1xcXFxcXFxcbiAgICAgICAgICAgIG5hbWU6J+ilv+eTnCcsXFxcXFxcXFxuICAgICAgICAgICAgaWQ6J3hnJyxcXFxcXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy54Z1xcXFxcXFxcbiAgICAgICAgfSxcXFxcXFxcXG4gICAgICAgIHtcXFxcXFxcXG4gICAgICAgICAgICBuYW1lOidQUFRWJyxcXFxcXFxcXG4gICAgICAgICAgICBpZDoncHAnLFxcXFxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnBwXFxcXFxcXFxuICAgICAgICB9LFxcXFxcXFxcbiAgICAgICAge1xcXFxcXFxcbiAgICAgICAgICAgIG5hbWU6J+WSquWSlScsXFxcXFxcXFxuICAgICAgICAgICAgaWQ6J21pJyxcXFxcXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5taVxcXFxcXFxcbiAgICAgICAgfSxcXFxcXFxcXG4gICAgICAgIHtcXFxcXFxcXG4gICAgICAgICAgICBuYW1lOifkuZDop4YnLFxcXFxcXFxcbiAgICAgICAgICAgIGlkOidsZScsXFxcXFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MubGVcXFxcXFxcXG4gICAgICAgIH0sXFxcXFxcXFxuICAgICAgICB7XFxcXFxcXFxuICAgICAgICAgICAgbmFtZTonMTkwNScsXFxcXFxcXFxuICAgICAgICAgICAgaWQ6J29uZScsXFxcXFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Mub25lXFxcXFxcXFxuICAgICAgICB9LFxcXFxcXFxcbiAgICAgICAge1xcXFxcXFxcbiAgICAgICAgICAgIG5hbWU6J+mjjuihjCcsXFxcXFxcXFxuICAgICAgICAgICAgaWQ6J2Z1bicsXFxcXFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MuZnVuXFxcXFxcXFxuICAgICAgICB9LFxcXFxcXFxcbiAgICAgICAge1xcXFxcXFxcbiAgICAgICAgICAgIG5hbWU6J+m+meiFvicsXFxcXFxcXFxuICAgICAgICAgICAgaWQ6J2x0JyxcXFxcXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5sdFxcXFxcXFxcbiAgICAgICAgfSxcXFxcXFxcXG4gICAgICAgIHtcXFxcXFxcXG4gICAgICAgICAgICBuYW1lOifkurrkurrov7cnLFxcXFxcXFxcbiAgICAgICAgICAgIGlkOidycicsXFxcXFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MucnJcXFxcXFxcXG4gICAgICAgIH0sXFxcXFxcXFxuICAgICAgICB7XFxcXFxcXFxuICAgICAgICAgICAgbmFtZTon5LqU5q+SJyxcXFxcXFxcXG4gICAgICAgICAgICBpZDond2QnLFxcXFxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLndkXFxcXFxcXFxuICAgICAgICB9LFxcXFxcXFxcbiAgICAgICAge1xcXFxcXFxcbiAgICAgICAgICAgIG5hbWU6J+WFtuS7licsXFxcXFxcXFxuICAgICAgICAgICAgaWQ6J290aCcsXFxcXFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Mub3RoXFxcXFxcXFxuICAgICAgICB9LFxcXFxcXFxcbiAgICAgICAge1xcXFxcXFxcbiAgICAgICAgICAgIG5hbWU6J+WFqOWxgCcsXFxcXFxcXFxuICAgICAgICAgICAgaWQ6J3FqdScsXFxcXFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MucWp1XFxcXFxcXFxuICAgICAgICB9LFxcXFxcXFxcbiAgICAgICAge1xcXFxcXFxcbiAgICAgICAgICAgIG5hbWU6J+aPkuS7ticsXFxcXFxcXFxuICAgICAgICAgICAgaWQ6J2NqJyxcXFxcXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5jalxcXFxcXFxcbiAgICAgICAgfSxcXFxcXFxcXG4gICAgXTtcXFxcXFxcXG5cXFxcXFxcXG4gICAgZnVuY3Rpb24gRGlkKGlkKXtcXFxcXFxcXG4gICAgICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XFxcXFxcXFxuICAgIH1cXFxcXFxcXG4gICAgZnVuY3Rpb24gZ2V0T3B0aW9uKGlkLHRpdGxlKSB7XFxcXFxcXFxuICAgICAgICB2YXIgb2JqID0gRGlkKGlkKTtcXFxcXFxcXG4gICAgICAgIERpZCh0aXRsZSkudmFsdWUgPSBvYmoub3B0aW9uc1tvYmouc2VsZWN0ZWRJbmRleF0udGV4dDtcXFxcXFxcXG4gICAgICAgIC8vIERpZCh0aXRsZSkudmFsdWUgPSBvYmoub3B0aW9uc1tvYmouc2VsZWN0ZWRJbmRleF0udGV4dC5yZXBsYWNlKC/ik4p84pK/L2csJycpO1xcXFxcXFxcbiAgICB9XFxcXFxcXFxuICAgIGZ1bmN0aW9uIHJlc2V0U2VsZWN0KGlkKXtcXFxcXFxcXG4gICAgICAgIERpZChpZCtcXFxcXFxcXFxcXFxcXFwiU2VsZWN0XFxcXFxcXFxcXFxcXFxcIikub3B0aW9ucy5zZWxlY3RlZEluZGV4ID0gLTE7XFxcXFxcXFxuICAgIH1cXFxcXFxcXG5cXFxcXFxcXG4gICAgLy/lh73mlbDpg6jliIZcXFxcXFxcXG5cXFxcXFxcXG4gICAgZnVuY3Rpb24gVG9hc3QobXNnLGR1cmF0aW9uKXtcXFxcXFxcXG4gICAgICAgIGR1cmF0aW9uPWlzTmFOKGR1cmF0aW9uKT8yMDAwOmR1cmF0aW9uO1xcXFxcXFxcbiAgICAgICAgdmFyIG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcXFxcXFxcXG4gICAgICAgIG0uaW5uZXJIVE1MID0gbXNnO1xcXFxcXFxcbiAgICAgICAgbS5zdHlsZS5jc3NUZXh0PVxcXFxcXFxcXFxcXFxcXCJ3aWR0aDo0NSU7IG1pbi13aWR0aDoxNTBweDsgYmFja2dyb3VuZDojMzExOyBvcGFjaXR5OjAuNjsgaGVpZ2h0OmF1dG87bWluLWhlaWdodDogNDVweDsgY29sb3I6I2ZmZjsgbGluZS1oZWlnaHQ6NDVweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGJvcmRlci1yYWRpdXM6MTBweDsgcG9zaXRpb246Zml4ZWQ7IHRvcDo2MCU7IGxlZnQ6MjYlOyB6LWluZGV4Ojk5OTk5OTtcXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtKTtcXFxcXFxcXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XFxcXFxcXFxuICAgICAgICAgICAgdmFyIGQgPSAwLjU7XFxcXFxcXFxuICAgICAgICAgICAgbS5zdHlsZS53ZWJraXRUcmFuc2l0aW9uID0gJy13ZWJraXQtdHJhbnNmb3JtICcgKyBkICsgJ3MgZWFzZS1pbiwgb3BhY2l0eSAnICsgZCArICdzIGVhc2UtaW4nO1xcXFxcXFxcbiAgICAgICAgICAgIG0uc3R5bGUub3BhY2l0eSA9ICcwJztcXFxcXFxcXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG0pIH0sIGQgKiAxMDAwKTtcXFxcXFxcXG4gICAgICAgIH0sIGR1cmF0aW9uKTtcXFxcXFxcXG4gICAgfVxcXFxcXFxcblxcXFxcXFxcbiAgICBmdW5jdGlvbiBvcGVuRG5QYWdlKCl7XFxcXFxcXFxuICAgICAgICBmYmEub3BlbihKU09OLnN0cmluZ2lmeSh7XFxcXFxcXFxuICAgICAgICAgICAgcnVsZTogXFxcXFxcXFxcXFxcXFxcIj1eX149XFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXFxcXFxcXFxcIue8lui+keino+aekFxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPee8lui+kSNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICAgICAgICAgIGdyb3VwOiBcXFxcXFxcXFxcXFxcXFwiXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXFxcXFxcXFxcIlxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgICAgICAgICAgLy9maW5kUnVsZTogXFxcXFxcXFxcXFxcXFxcImpzOnRoaXMuZD1bXTskLnJlcXVpcmUoXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCJoaWtlcjovL3BhZ2UvUGFyc2VfRG4uanM/cnVsZT1NeUZpZWxk4bSw4oG/XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCIpLmVkaXQoKTtzZXRSZXN1bHQoZCk7XFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICBwcmVSdWxlOiBcXFxcXFxcXFxcXFxcXFwiXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICBleHRyYToge31cXFxcXFxcXG4gICAgICAgIH0pKTtcXFxcXFxcXG4gICAgfVxcXFxcXFxcbiAgICBmdW5jdGlvbiBvcGVuVGhlbWUoKXtcXFxcXFxcXG4gICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXFxcXFxcXG4gICAgICAgICAgICBydWxlOiBcXFxcXFxcXFxcXFxcXFwiPV5fXj1cXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcXFxcXFxcXFwi5Li76aKY566h55CGXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFxcXFxcXFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU95Li76aKYI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgICAgICAgICAgZ3JvdXA6IFxcXFxcXFxcXFxcXFxcXCJcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcXFxcXFxcXFwiXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICBwcmVSdWxlOiBcXFxcXFxcXFxcXFxcXFwiXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICBleHRyYToge31cXFxcXFxcXG4gICAgICAgIH0pKTtcXFxcXFxcXG4gICAgfVxcXFxcXFxcbiAgICBmdW5jdGlvbiBvcGVuSnhNYW5hZ2UoKXtcXFxcXFxcXG4gICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXFxcXFxcXG4gICAgICAgICAgICBydWxlOiBcXFxcXFxcXFxcXFxcXFwiPV5fXj1cXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcXFxcXFxcXFwi6Kej5p6Q6YWN572u566h55CGXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFxcXFxcXFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96Kej5p6QI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgICAgICAgICAgZ3JvdXA6IFxcXFxcXFxcXFxcXFxcXCJcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcXFxcXFxcXFwiXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICBwcmVSdWxlOiBcXFxcXFxcXFxcXFxcXFwiXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICBleHRyYToge31cXFxcXFxcXG4gICAgICAgIH0pKTtcXFxcXFxcXG4gICAgfVxcXFxcXFxcbiAgICBmdW5jdGlvbiBjYW5jZWwoKXtcXFxcXFxcXG4gICAgICAgIGlmKCFteVNldCl7XFxcXFxcXFxuICAgICAgICAgICAgZmJhLndyaXRlRmlsZShvbGRSb3V0ZSwgSlNPTi5zdHJpbmdpZnkoc2V0dGluZ3MsIG51bGwsIDQpKTtcXFxcXFxcXG4gICAgICAgICAgICBmYmEucmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXFxcXFxuICAgICAgICB9ZWxzZXtcXFxcXFxcXG4gICAgICAgICAgICBmYmEuYmFjayhmYWxzZSk7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgIH1cXFxcXFxcXG4gICAgZnVuY3Rpb24gY2xpY2ttZShtc2csZHVyYXRpb24sdGl0bGUpe1xcXFxcXFxcbiAgICAgICAgdHJ5e1xcXFxcXFxcbiAgICAgICAgICAgIGZvcihsZXQga2V5IGluIHNldHRpbmdzKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgLy8gZmJhLmxvZyhEaWQoa2V5KSsnJytrZXkpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB0cnl7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAvL3NldHRpbmdzW2tleV0gPSBEaWQoa2V5KS52YWx1ZS5yZXBsYWNlKC/ik4p84pK/L2csJycpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3Nba2V5XSA9IERpZChrZXkpLnZhbHVlO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBhbGVydChcXFxcXFxcXFxcXFxcXFwi5pyq6I635Y+W5Yiw6IqC54K5OlxcXFxcXFxcXFxcXFxcXCIra2V5K1xcXFxcXFxcXFxcXFxcXCJcXFxcXFxcXFxcXFxcXFxcblxcXFxcXFxcXFxcXFxcXCIrZS5tZXNzYWdlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxcXFxcblxcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICBpZihteVNlbGVjdCl7XFxcXFxcXFxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obmV3Q29uZmlnLnNldHRpbmdzLCBzZXR0aW5ncyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGZiYS53cml0ZUZpbGUobmV3Um91dGUsICQkJC5zdHJpbmdpZnkobmV3Q29uZmlnKSk7XFxcXFxcXFxuICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgIGZiYS53cml0ZUZpbGUob2xkUm91dGUsICQkJC5zdHJpbmdpZnkoc2V0dGluZ3MpKTtcXFxcXFxcXG4gICAgICAgICAgICBUb2FzdChtc2csZHVyYXRpb24pO1xcXFxcXFxcbiAgICAgICAgICAgIGlmKHRpdGxlPT09XFxcXFxcXFxcXFxcXFxcIuWFs1xcXFxcXFxcXFxcXFxcXCIpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICBmYmEuYmFjaygpO1xcXFxcXFxcbiAgICAgICAgICAgIH1lbHNle1xcXFxcXFxcbiAgICAgICAgICAgICAgICBmYmEucmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXFxcXFxuICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgfWNhdGNoKGUpe1xcXFxcXFxcbiAgICAgICAgICAgIGFsZXJ0KGUubWVzc2FnZSlcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgfVxcXFxcXFxcblxcXFxcXFxcbiAgICAvL2xldCB3aWR0aD13aW5kb3cuc2NyZWVuLmF2YWlsV2lkdGg7XFxcXFxcXFxuICAgIC8vbGV0IHdpZHRoUHg9d2lkdGgtMzkzKzUyO1xcXFxcXFxcbiAgICAvL2FsZXJ0KFxcXFxcXFxcXFxcXFxcXCLlvZPliY3liIbovqjnjoc6XFxcXFxcXFxcXFxcXFxcIit3aW5kb3cuc2NyZWVuLmF2YWlsV2lkdGgrXFxcXFxcXFxcXFxcXFxcIipcXFxcXFxcXFxcXFxcXFwiK3dpbmRvdy5zY3JlZW4uaGVpZ2h0KTtcXFxcXFxcXG4gICAgdmFyIHZlcmluZm8gPSBbe1xcXFxcXFxcbiAgICAgICAgaWQ6J2RuJyxcXFxcXFxcXG4gICAgICAgIGF1dGhvcjon5pat5b+1JyxcXFxcXFxcXG4gICAgICAgIGF2YXRhcjonaHR0cHM6Ly9zMy5heDF4LmNvbS8yMDIxLzAyLzIyL3k3d2I5Ty5qcGcnLFxcXFxcXFxcbiAgICAgICAgb3B0aW9uOm9wZW5EblBhZ2UsXFxcXFxcXFxuICAgIH0sXFxcXFxcXFxuICAgICAgICB7XFxcXFxcXFxuICAgICAgICAgICAgaWQ6J2R6JyxcXFxcXFxcXG4gICAgICAgICAgICBhdXRob3I6J+mBk+mVvycsXFxcXFxcXFxuICAgICAgICAgICAgYXZhdGFyOidodHRwOi8vcTEucWxvZ28uY24vZz9iPXFxJm5rPTQzNDg1NzAwNSZzPTY0MCcsXFxcXFxcXFxuICAgICAgICAgICAgb3B0aW9uOm9wZW5UaGVtZVxcXFxcXFxcbiAgICAgICAgfSxcXFxcXFxcXG4gICAgICAgIHtcXFxcXFxcXG4gICAgICAgICAgICBpZDonbG0nLFxcXFxcXFxcbiAgICAgICAgICAgIGF1dGhvcjogJ+iTneiOkycsXFxcXFxcXFxuICAgICAgICAgICAgYXZhdGFyOiAnaHR0cDovL3ExLnFsb2dvLmNuL2c/Yj1xcSZuaz0yNTc5OTQ5Mzc4JnM9NjQwJyxcXFxcXFxcXG4gICAgICAgICAgICBvcHRpb246b3Blbkp4TWFuYWdlXFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgIF07XFxcXFxcXFxuXFxcXFxcXFxuICAgIGZ1bmN0aW9uIGRvT3B0aW9uKG9wdGlvbl9pZCl7XFxcXFxcXFxuICAgICAgICBsZXQgdmVyID0gdmVyaW5mby5maWx0ZXIoaXQ9Pml0LmlkPT09b3B0aW9uX2lkKVswXTtcXFxcXFxcXG4gICAgICAgIHZlci5vcHRpb24oKTtcXFxcXFxcXG4gICAgfVxcXFxcXFxcblxcXFxcXFxcbiAgICBjb25zdCBSZW5kZXJIdG1sQXBwID0ge1xcXFxcXFxcbiAgICAgICAgZGF0YSgpIHtcXFxcXFxcXG4gICAgICAgICAgICByZXR1cm4ge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAvLyByYXdIdG1sOiAnPHNwYW4gc3R5bGU9XFxcXFxcXFxcXFxcXFxcImNvbG9yOiByZWRcXFxcXFxcXFxcXFxcXFwiPui/memHjOS8muaYvuekuue6ouiJsu+8gTwvc3Bhbj4nLFxcXFxcXFxcbiAgICAgICAgICAgICAgICBvcHRpb25zOm9wdGlvbnMsXFxcXFxcXFxuICAgICAgICAgICAgICAgIHZlcmluZm86dmVyaW5mbyxcXFxcXFxcXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6cGxhY2Vob2xkZXIsXFxcXFxcXFxuICAgICAgICAgICAgICAgIHRpcHM6dGlwcyxcXFxcXFxcXG4gICAgICAgICAgICAgICAgdGhlbWVzOnRoZW1lcyxcXFxcXFxcXG4gICAgICAgICAgICAgICAgbXlTZWxlY3Q6bXlTZWxlY3QsXFxcXFxcXFxuICAgICAgICAgICAgICAgIC8vIGNqU2VsOlsn6K+36YCJ5oup5o+S5Lu2ICjlj6rkvZznlKhsYXp5UnVsZSknLCdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJywnaGlrZXI6Ly9maWxlcy9ydWxlcy9kekhvdXNlL2pzL3NyY2F1dG8uanMnLCdoaWtlcjovL2ZpbGVzL3J1bGVzL2pzL1BhcnNlLVYyX0RuLmpzJ10sXFxcXFxcXFxuICAgICAgICAgICAgICAgIGNqU2VsOlsn6K+36YCJ5oup5o+S5Lu2ICjlj6rkvZznlKhsYXp5UnVsZSknLCdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJywnaGlrZXI6Ly9maWxlcy9ydWxlcy9kekhvdXNlL2pzL3NyY2F1dG8uanMnXSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgc2V0dGluZ3M6c2V0dGluZ3MsXFxcXFxcXFxuICAgICAgICAgICAgICAgIHNob3dUaXBzOmZhbHNlLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAvL3dpZHRoUHg6d2lkdGhQeFxcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgIH0sXFxcXFxcXFxuICAgICAgICBtZXRob2RzOntcXFxcXFxcXG4gICAgICAgICAgICAvLyBjaGFuZ2VWYWw6ZnVuY3Rpb24oZXZlbnQpe1xcXFxcXFxcbiAgICAgICAgICAgIC8vICAgICBnZXRPcHRpb24odGhpcy5pZCx0aGlzLm5hbWUpO1xcXFxcXFxcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnNlbE9wdGlvbiA9IGV2ZW50LnRhcmdldC52YWx1ZTtcXFxcXFxcXG4gICAgICAgICAgICAvLyAgICAgYWxlcnQoXFxcXFxcXFxcXFxcXFxcIuS9oOmAieS4reS6hlxcXFxcXFxcXFxcXFxcXCIrZXZlbnQudGFyZ2V0LnZhbHVlKTtcXFxcXFxcXG4gICAgICAgICAgICAvLyB9XFxcXFxcXFxuICAgICAgICAgICAgZG9PcHRpb246ZG9PcHRpb25cXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgfVxcXFxcXFxcbiAgICB0cnkge1xcXFxcXFxcbiAgICAgICAgY29uc3QgYXBwPVZ1ZS5jcmVhdGVBcHAoUmVuZGVySHRtbEFwcCk7XFxcXFxcXFxuICAgICAgICBhcHAubW91bnQoJ2JvZHknKTtcXFxcXFxcXG4gICAgfWNhdGNoIChlKSB7XFxcXFxcXFxuICAgICAgICBjb25zb2xlLmxvZyhlLm1lc3NhZ2UpXFxcXFxcXFxuICAgIH1cXFxcXFxcXG5cXFxcXFxcXG48L3NjcmlwdD5cXFxcXFxcXG5cXFxcXFxcXG48L2JvZHk+XFxcXFxcXFxuPC9odG1sPlxcXFxcXFwifSx7XFxcXFxcXCJjb2xfdHlwZVxcXFxcXFwiOlxcXFxcXFwibW92aWVfM1xcXFxcXFwiLFxcXFxcXFwibmFtZVxcXFxcXFwiOlxcXFxcXFwiUGFyc2VfRG4uanNcXFxcXFxcIixcXFxcXFxcInBhdGhcXFxcXFxcIjpcXFxcXFxcIlBhcnNlX0RuLmpzXFxcXFxcXCIsXFxcXFxcXCJydWxlXFxcXFxcXCI6XFxcXFxcXCIvLz09PT09PT09PT09PeWFjeWXheiwg+eUqD09PT09PT09PT09PVxcXFxcXFxcbi8v77yN77yN77yNPV5fXj1cXFxcXFxcXG5cXFxcXFxcXG52YXIgdmVyc2lvbiA9IFxcXFxcXFxcXFxcXFxcXCIzLjQ5MjIxMjA1XFxcXFxcXFxcXFxcXFxcIjsvLzEyMDVcXFxcXFxcXG5cXFxcXFxcXG52YXIgdXBkYXRlRGF0ZSA9ICcyMDIyLzEyLzA1LyAxMzoxOCc7XFxcXFxcXFxudmFyIF9teVNldCA9IHtcXFxcXFxcXG4gICAgcWp1OiAn6buY6K6kJyxcXFxcXFxcXG4gICAgb3RoOifpgZPplb/ku5PlupPpgJrlhY0nLFxcXFxcXFxcbiAgICBjamNhY2hlOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcycsXFxcXFxcXFxuICAgIHRoZW1lY2FjaGU6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL015VGhlbWUuanNvbicsXFxcXFxcXFxuICAgIGppZXhpY2FjaGU6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL015SmlleGkuanNvbicsXFxcXFxcXFxuICAgIHg1Y2FjaGU6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmh0bWwnLFxcXFxcXFxcbiAgICBkbUNhY2hlOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9kaWFvbWFvLnR4dCcsXFxcXFxcXFxuICAgIG9sZENvbmZpZzogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uJyxcXFxcXFxcXG4gICAgY2tMaW5rOiAnaHR0cHM6Ly9jb2RlLmFsaXl1bi5jb20vQUk5NTcvSGlrZXIvcmF3L21hc3Rlci92LycsXFxcXFxcXFxuICAgIC8vIGNqOiAnaHR0cHM6Ly9jb2RlLmFsaXl1bi5jb20vQUk5NTcvSGlrZXIvcmF3L21hc3Rlci92L0Nsb3VkUGFyc2UtVjJfRG4uanMnLFxcXFxcXFxcbiAgICBjajogJ2h0dHBzOi8vZ2l0Y29kZS5uZXQvcXFfMzIzOTQzNTEvZHIvLS9yYXcvbWFzdGVyL2RwL1BhcnNlX0RuLmpzJyxcXFxcXFxcXG4gICAgLy8geDVVcmw6ICdodHRwczovL2NvZGUuYWxpeXVuLmNvbS9BSTk1Ny9IaWtlci9yYXcvbWFzdGVyL3YvUGFyc2VfRG4uaHRtbCcsXFxcXFxcXFxuICAgIHg1VXJsOiAnaHR0cDovL2RyLm5va2lhLnByZXNzL2h0bWwvUGFyc2VfRG4tdnVlLmh0bWwnLFxcXFxcXFxcbiAgICBwYXJzZVJvdXRlOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nLFxcXFxcXFxcbiAgICAvLyB4NVJvdXRlOiAnZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvY2FjaGUvUGFyc2VfRG4uaHRtbCdcXFxcXFxcXG4gICAgeDVSb3V0ZTogZ2V0UGF0aCgnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5odG1sJyksXFxcXFxcXFxuICAgIGJhdGNoUm91dGU6Z2V0UGF0aCgnaGlrZXI6Ly9maWxlcy9jYWNoZS9wbHNjUGFyc2UuaHRtbCcpXFxcXFxcXFxufTtcXFxcXFxcXG52YXIgTXlQYXJzZVMgPSB7fTtcXFxcXFxcXG52YXIgbXlTZXQgPSBfbXlTZXQ7XFxcXFxcXFxuaWYgKGZpbGVFeGlzdChfbXlTZXQucGFyc2VSb3V0ZSkpIHtcXFxcXFxcXG4gICAgZXZhbCgndmFyIHBhcnNlRmlsZSA9JyArIGZldGNoKF9teVNldC5wYXJzZVJvdXRlKSk7XFxcXFxcXFxuICAgIE15UGFyc2VTID0gcGFyc2VGaWxlLmNvZGVzO1xcXFxcXFxcbiAgICBteVNldCA9IHBhcnNlRmlsZS5zZXR0aW5ncztcXFxcXFxcXG59XFxcXFxcXFxudmFyIHBhcnNlVGl0bGUgPSBbXFxcXFxcXFxuICAgIFxcXFxcXFxcXFxcXFxcXCJ5dW4xNzE3XFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgXFxcXFxcXFxcXFxcXFxcIlBhbkd1XFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgXFxcXFxcXFxcXFxcXFxcIkZ1WGluZ1xcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgIFxcXFxcXFxcXFxcXFxcXCJpc1ZpZGVvXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgXFxcXFxcXFxcXFxcXFxcImRlZmF1bHRQYXJzZVxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgIFxcXFxcXFxcXFxcXFxcXCLpgZPplb/ku5PlupPpgJrlhY1cXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICBcXFxcXFxcXFxcXFxcXFwidGltZU91dFxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgIFxcXFxcXFxcXFxcXFxcXCLmupDnoIHljLnphY1cXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICBcXFxcXFxcXFxcXFxcXFwiZGVmYXVsdFBhcnNlV2ViXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgXFxcXFxcXFxcXFxcXFxcIk9L6Kej5p6QXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgXFxcXFxcXFxcXFxcXFxcIk0zVThUVlxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuXTtcXFxcXFxcXG4vL++8je+8je+8jT1eX149XFxcXFxcXFxuXFxcXFxcXFxuLy/mjqXlj6Porr7nva4uXFxcXFxcXFxuXFxcXFxcXFxudmFyIHNldFVybCA9IFxcXFxcXFxcXFxcXFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uI25vUmVjb3JkSGlzdG9yeSNcXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcbnZhciBzZXRfc3dpdGNoID0gc2V0VXJsO1xcXFxcXFxcbnZhciBsYXp5ID0gYGV2YWwoJ3ZhciBjb25maWdfZHAgPScgKyBmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKSk7ZXZhbChmZXRjaChjb25maWdfZHAuY2opKTtheXRtUGFyc2UoaW5wdXQpYDtcXFxcXFxcXG5cXFxcXFxcXG4vL3ZhciBwYXJ3aXggPSBgdmFyIHl1cmw9J2h0dHBzOi8vZGFpbGkubWF5aXhpb25nZGkuY24vP3VybD0nO1JlZmVyZXInOiAnaHR0cHM6Ly93d3cubWF5aXhpb25nZGkuY24veXM/aWQ9JzsnaHR0cHM6Ly9kYWlsaS5tYXlpeGlvbmdkaS5jbi9hcGkucGhwJywgJ1JlZmVyZXInOidodHRwczovL2RhaWxpLm1heWl4aW9uZ2RpLmNuJztcXFxcXFxcXG4vLyDlhajmsJFodHRwczovL3BjdmlkZW9hbGl5dW4udGlhbnNoYW5ncmVuamlhbi5tZ3R2LmNvbS44OHd1bWEuY29tLz91cmw9XFxcXFxcXFxuXFxcXFxcXFxuLy/vvI3vvI3vvI3lpIcg55So77yN77yN77yNXFxcXFxcXFxuLypcXFxcXFxcXG4gKiDlvbHop4blt6XlnLrvvJogaHR0cHM6Ly95c2djLmNjL1xcXFxcXFxcbiAqIOaxn+a5ljogNTU155S15b2xIGh0dHBzOi8vd3d3LjU1NWR5Mi5jb20vcGhvbmUuaHRtbCDvvZwgMTfnnIsgaHR0cDovLzE3a2FueXkuY24vIGh0dHA6Ly9qaGppZXhpLjMwdnIuY24vP3VybD0g772cIGh0dHA6Ly9hcGkubWFpemltYWxsLmNvbS9pbmRleC5waHA/dXJsPVxcXFxcXFxcbiAqIOaxn+a5ljogaHR0cDovL3d3dy50aWFuc2h1eXVuLm5ldC9pbmRleC5waHAvdm9kL3BsYXkvaWQvNDQ4Mzc3L3NpZC8xL25pZC8xLmh0bWxcXFxcXFxcXG4gKiDmsZ/muZYyOiBodHRwOi8vOThoeWsuY24vaW5kZXgucGhwL3ZvZC9wbGF5L2lkLzcyODQxL3NpZC8xL25pZC8xLmh0bWxcXFxcXFxcXG4gKiDkurrkurrov7c6IGh0dHBzOi8vdmlwLnN1c291LnR2L3BsYXllci8/dXJsPSDvvZwgaHR0cHM6Ly93d3cubW9tZG0uY2MvXFxcXFxcXFxuICpcXFxcXFxcXG4gKiB3dWlnZW46IGh0dHBzOi8vd3d3LjVpZ2VuLmNvbS9kbXBsYXllci9wbGF5ZXIvP3VybD1cXFxcXFxcXG4gKiDlubLppa0o5Lq65Lq66L+3KTogaHR0cHM6Ly9qeC56dWkuY20vP3VybD1cXFxcXFxcXG4gKiBodHRwczovLzIuNjZtb3ZpZS50b3AvcGxheWVyLz91cmw9XFxcXFxcXFxuICpcXFxcXFxcXG4gKi9cXFxcXFxcXG5cXFxcXFxcXG5cXFxcXFxcXG52YXIgdG9vbHMgPSB7XFxcXFxcXFxuICAgIE1ENTogZnVuY3Rpb24oZGF0YSkge1xcXFxcXFxcbiAgICAgICAgZXZhbChnZXRDcnlwdG9KUygpKTtcXFxcXFxcXG4gICAgICAgIHJldHVybiBDcnlwdG9KUy5NRDUoZGF0YSkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkhleCk7XFxcXFxcXFxuICAgIH0sXFxcXFxcXFxuICAgIEFFUzogZnVuY3Rpb24odGV4dCwga2V5LCBpdiwgaXNFbmNyeXB0KSB7XFxcXFxcXFxuICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcXFxcXFxcbiAgICAgICAgdmFyIGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGtleSk7XFxcXFxcXFxuICAgICAgICB2YXIgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShpdik7XFxcXFxcXFxuICAgICAgICBpZiAoaXNFbmNyeXB0KSB7XFxcXFxcXFxuICAgICAgICAgICAgcmV0dXJuIENyeXB0b0pTLkFFUy5lbmNyeXB0KHRleHQsIGtleSwge1xcXFxcXFxcbiAgICAgICAgICAgICAgICBpdjogaXYsXFxcXFxcXFxuICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcXFxcXFxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcXFxcXFxcXG4gICAgICAgICAgICB9KS50b1N0cmluZygpO1xcXFxcXFxcbiAgICAgICAgfTtcXFxcXFxcXG4gICAgICAgIHJldHVybiBDcnlwdG9KUy5BRVMuZGVjcnlwdCh0ZXh0LCBrZXksIHtcXFxcXFxcXG4gICAgICAgICAgICBpdjogaXYsXFxcXFxcXFxuICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxcXFxcXFxuICAgICAgICB9KS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxcXFxcXFxuICAgIH0sXFxcXFxcXFxuICAgIC8vYXNjaWlcXFxcXFxcXG4gICAgbmV4dENoYXJhY3RlcjogZnVuY3Rpb24oYXNjaWlWYWx1ZSwgaykge1xcXFxcXFxcbiAgICAgICAgdmFyIHMgPSBhc2NpaVZhbHVlO1xcXFxcXFxcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocyArIGspO1xcXFxcXFxcbiAgICB9LFxcXFxcXFxcbiAgICAvL+WHr+aSklxcXFxcXFxcbiAgICBjYWVzYXJDaXBoZXI6IGZ1bmN0aW9uKHN0cmluZ1ZhbHVlLCBrKSB7XFxcXFxcXFxuICAgICAgICB2YXIgbmV3U3RyaW5nID0gXFxcXFxcXFxcXFxcXFxcIlxcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZ1ZhbHVlLmxlbmd0aDsgaSsrKSB7XFxcXFxcXFxuICAgICAgICAgICAgbmV3U3RyaW5nICs9IHRoaXMubmV4dENoYXJhY3RlcihzdHJpbmdWYWx1ZVtpXS5jaGFyQ29kZUF0KCksIGspO1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgcmV0dXJuIG5ld1N0cmluZztcXFxcXFxcXG4gICAgfSxcXFxcXFxcXG4gICAgbm93RGF0ZTogZnVuY3Rpb24oKSB7XFxcXFxcXFxuICAgICAgICB2YXIgZGF0ZTEgPSBuZXcgRGF0ZSgpO1xcXFxcXFxcbiAgICAgICAgdmFyIGRhdGVTdHIgPSBcXFxcXFxcXFxcXFxcXFwiXFxcXFxcXFxcXFxcXFxcIjtcXFxcXFxcXG4gICAgICAgIGlmIChkYXRlMSkge1xcXFxcXFxcbiAgICAgICAgICAgIGRhdGVTdHIgPSBkYXRlMS5nZXRGdWxsWWVhcigpO1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBtb250aCA9IGRhdGUxLmdldE1vbnRoKCkgKyAxO1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBkYXkgPSBkYXRlMS5nZXREYXRlKCk7XFxcXFxcXFxuICAgICAgICAgICAgaWYgKG1vbnRoIDwgMTApIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgZGF0ZVN0ciArPSBcXFxcXFxcXFxcXFxcXFwiLTBcXFxcXFxcXFxcXFxcXFwiICsgbW9udGg7XFxcXFxcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgZGF0ZVN0ciArPSBcXFxcXFxcXFxcXFxcXFwiLVxcXFxcXFxcXFxcXFxcXCIgKyBtb250aDtcXFxcXFxcXG4gICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgaWYgKGRheSA8IDEwKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGRhdGVTdHIgKz0gXFxcXFxcXFxcXFxcXFxcIi0wXFxcXFxcXFxcXFxcXFxcIiArIGRheTtcXFxcXFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxcXFxcbiAgICAgICAgICAgICAgICBkYXRlU3RyICs9IFxcXFxcXFxcXFxcXFxcXCItXFxcXFxcXFxcXFxcXFxcIiArIGRheTtcXFxcXFxcXG4gICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICByZXR1cm4gZGF0ZVN0cjtcXFxcXFxcXG4gICAgfSxcXFxcXFxcXG4gICAgbm93RGF0ZVN0cjpmdW5jdGlvbiAoKXsgLy8g5Yip55SoJOW3peWFt+iOt+WPluagvOW8j+WMluWQjueahOW9k+WJjeaXtumXtFxcXFxcXFxcbiAgICAgICAgcmV0dXJuICAkLmRhdGVGb3JtYXQobmV3IERhdGUoKSxcXFxcXFxcXFxcXFxcXFwieXl5eS1NTS1kZCBISDptbTpzc1xcXFxcXFxcXFxcXFxcXCIpO1xcXFxcXFxcbiAgICB9LFxcXFxcXFxcbiAgICB0b0pTT046IGZ1bmN0aW9uKGpzb24pIHtcXFxcXFxcXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShqc29uLCAoa2V5LCB2YWx1ZSkgPT4ge1xcXFxcXFxcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcXFxcXFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XFxcXFxcXFxuICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgfSwgNCk7XFxcXFxcXFxuICAgIH0sXFxcXFxcXFxuICAgIHRvVk51bTogZnVuY3Rpb24oYSkge1xcXFxcXFxcbiAgICAgICAgdmFyIGEgPSBhLnRvU3RyaW5nKCk7XFxcXFxcXFxuICAgICAgICB2YXIgYyA9IGEuc3BsaXQoJy4nKTtcXFxcXFxcXG4gICAgICAgIHZhciBudW1fcGxhY2UgPSBbXFxcXFxcXFxcXFxcXFxcIlxcXFxcXFxcXFxcXFxcXCIsIFxcXFxcXFxcXFxcXFxcXCIwXFxcXFxcXFxcXFxcXFxcIiwgXFxcXFxcXFxcXFxcXFxcIjAwXFxcXFxcXFxcXFxcXFxcIiwgXFxcXFxcXFxcXFxcXFxcIjAwMFxcXFxcXFxcXFxcXFxcXCIsIFxcXFxcXFxcXFxcXFxcXCIwMDAwXFxcXFxcXFxcXFxcXFxcIl0sXFxcXFxcXFxuICAgICAgICAgICAgciA9IG51bV9wbGFjZS5yZXZlcnNlKCk7XFxcXFxcXFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGMubGVuZ3RoOyBpKyspIHtcXFxcXFxcXG4gICAgICAgICAgICB2YXIgbGVuID0gY1tpXS5sZW5ndGg7XFxcXFxcXFxuICAgICAgICAgICAgY1tpXSA9IHJbbGVuXSArIGNbaV07XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICB2YXIgcmVzID0gYy5qb2luKCcnKTtcXFxcXFxcXG4gICAgICAgIHJldHVybiByZXM7XFxcXFxcXFxuICAgIH0sXFxcXFxcXFxuICAgIGNwclZlcnNpb246IGZ1bmN0aW9uKGEsIGIpIHtcXFxcXFxcXG4gICAgICAgIHZhciBfYSA9IHBhcnNlSW50KHRoaXMudG9WTnVtKGEpKSxcXFxcXFxcXG4gICAgICAgICAgICBfYiA9IHBhcnNlSW50KHRoaXMudG9WTnVtKGIpKTtcXFxcXFxcXG4gICAgICAgIGIgPSBpc05hTihfYikgPyB2ZXJzaW9uIDogYjtcXFxcXFxcXG4gICAgICAgIGlmIChfYSA+IF9iKSB7XFxcXFxcXFxuICAgICAgICAgICAgcHV0VmFyKCdqeE5ld1YnLCAn5pyJ5paw54mI5pysOiAnICsgYSk7XFxcXFxcXFxuICAgICAgICB9IGVsc2Uge1xcXFxcXFxcbiAgICAgICAgICAgIGNsZWFyVmFyKCdqeE5ld1YnKTtcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgIHB1dFZhcignanhPbGRWJywgYik7XFxcXFxcXFxuICAgIH0sXFxcXFxcXFxuICAgIGF0b2I6ZnVuY3Rpb24gKHN0cil7XFxcXFxcXFxuICAgICAgICByZXF1aXJlKCdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2pzLWJhc2U2NEAzLjcuMi9iYXNlNjQubWluLmpzJyk7XFxcXFxcXFxuICAgICAgICByZXR1cm4gQmFzZTY0LmF0b2Ioc3RyKTtcXFxcXFxcXG4gICAgfSxcXFxcXFxcXG4gICAgYnRvYTpmdW5jdGlvbiAoc3RyKXtcXFxcXFxcXG4gICAgICAgIHJlcXVpcmUoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vanMtYmFzZTY0QDMuNy4yL2Jhc2U2NC5taW4uanMnKTtcXFxcXFxcXG4gICAgICAgIHJldHVybiBCYXNlNjQuYnRvYShzdHIpO1xcXFxcXFxcbiAgICB9LFxcXFxcXFxcbiAgICDmsZ/muZY6ZnVuY3Rpb24gKGNvbmZpZ191cmwsIHRlbSwgdG9rZW4pIHtcXFxcXFxcXG4gICAgICAgIHJlcXVpcmUoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vanMtYmFzZTY0QDMuNy4yL2Jhc2U2NC5taW4uanMnKTtcXFxcXFxcXG4gICAgICAgIHZhciBhdG9iPUJhc2U2NC5hdG9iO1xcXFxcXFxcbiAgICAgICAgdmFyIGJ0b2E9QmFzZTY0LmJ0b2E7XFxcXFxcXFxuICAgICAgICB2YXIgY29uZmlnX2EgPSB0ZW0gfHwgXFxcXFxcXFxcXFxcXFxcImZmc2lybGxxXFxcXFxcXFxcXFxcXFxcIjtcXFxcXFxcXG4gICAgICAgIHZhciB2aWRlbyA9ICcnO1xcXFxcXFxcbiAgICAgICAgdmFyIHRlbSA9IFtdO1xcXFxcXFxcbiAgICAgICAgdmFyIGNvbmZpZ19hcnJ5ID0gW107XFxcXFxcXFxuICAgICAgICB2YXIgY29uZmlnX2IgPSBjb25maWdfYS5sZW5ndGg7XFxcXFxcXFxuICAgICAgICBpZiAodG9rZW4gPT0gMHgxKSB7XFxcXFxcXFxuICAgICAgICAgICAgdmFyIGNvbmZpZ191cmwgPSBhdG9iKGNvbmZpZ191cmwpO1xcXFxcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcXFxcXG4gICAgICAgICAgICB2YXIgY29uZmlnX3VybCA9IGVuY29kZVVSSUNvbXBvbmVudChjb25maWdfdXJsKTtcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgIHZhciBjb25maWdfYyA9IGNvbmZpZ191cmwubGVuZ3RoO1xcXFxcXFxcbiAgICAgICAgZm9yIChpID0gMHgwOyBpIDwgMHgxMDA7IGkrKykge1xcXFxcXFxcbiAgICAgICAgICAgIHRlbVtpXSA9IGNvbmZpZ19hW2kgJSBjb25maWdfYl0uY2hhckNvZGVBdCgpO1xcXFxcXFxcbiAgICAgICAgICAgIGNvbmZpZ19hcnJ5W2ldID0gaTtcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgIGZvciAoaiA9IGkgPSAweDA7IGkgPCAweDEwMDsgaSsrKSB7XFxcXFxcXFxuICAgICAgICAgICAgaiA9IChqICsgY29uZmlnX2FycnlbaV0gKyB0ZW1baV0pICUgMHgxMDA7XFxcXFxcXFxuICAgICAgICAgICAgdG1wID0gY29uZmlnX2FycnlbaV07XFxcXFxcXFxuICAgICAgICAgICAgY29uZmlnX2FycnlbaV0gPSBjb25maWdfYXJyeVtqXTtcXFxcXFxcXG4gICAgICAgICAgICBjb25maWdfYXJyeVtqXSA9IHRtcDtcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgIGZvciAoYSA9IGogPSBpID0gMHgwOyBpIDwgY29uZmlnX2M7IGkrKykge1xcXFxcXFxcbiAgICAgICAgICAgIGEgPSAoYSArIDB4MSkgJSAweDEwMDtcXFxcXFxcXG4gICAgICAgICAgICBqID0gKGogKyBjb25maWdfYXJyeVthXSkgJSAweDEwMDtcXFxcXFxcXG4gICAgICAgICAgICB0bXAgPSBjb25maWdfYXJyeVthXTtcXFxcXFxcXG4gICAgICAgICAgICBjb25maWdfYXJyeVthXSA9IGNvbmZpZ19hcnJ5W2pdO1xcXFxcXFxcbiAgICAgICAgICAgIGNvbmZpZ19hcnJ5W2pdID0gdG1wO1xcXFxcXFxcbiAgICAgICAgICAgIGsgPSBjb25maWdfYXJyeVsoY29uZmlnX2FycnlbYV0gKyBjb25maWdfYXJyeVtqXSkgJSAweDEwMF07XFxcXFxcXFxuICAgICAgICAgICAgdmlkZW8gKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb25maWdfdXJsW2ldLmNoYXJDb2RlQXQoKSBeIGspO1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgbG9nKGRlY29kZVVSSUNvbXBvbmVudCh2aWRlbykpO1xcXFxcXFxcbiAgICAgICAgaWYgKHRva2VuID09IDB4MSkge1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQodmlkZW8pO1xcXFxcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcXFxcXG4gICAgICAgICAgICByZXR1cm4gYnRvYSh2aWRlbyk7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgIH1cXFxcXFxcXG59O1xcXFxcXFxcbmlmIChnZXRWYXIoXFxcXFxcXFxcXFxcXFxcImp4T2xkVlxcXFxcXFxcXFxcXFxcXCIsIFxcXFxcXFxcXFxcXFxcXCIwXFxcXFxcXFxcXFxcXFxcIikgIT0gdmVyc2lvbikge1xcXFxcXFxcbiAgICBwdXRWYXIoJ2NqQ2FjaGUnLCBfbXlTZXQuY2pjYWNoZSk7XFxcXFxcXFxuICAgIHB1dFZhcigneDVDYWNoZScsIF9teVNldC54NUNhY2hlKTtcXFxcXFxcXG4gICAgcHV0VmFyKCdvbGRDb25maWcnLCBfbXlTZXQub2xkQ29uZmlnKTtcXFxcXFxcXG4gICAgcHV0VmFyKCdwYXJzZVJvdXRlJywgX215U2V0LnBhcnNlUm91dGUpO1xcXFxcXFxcbiAgICAvLyBsZXQganhOZXdWID0gZmV0Y2goJ2h0dHBzOi8vZ2l0ZWUuY29tL0R1YW4tTmlhbi9Ebi9yYXcvbWFzdGVyL2hpa2Vydmlldy9QYXJzZVZlcnNpb24udHh0Jyk7XFxcXFxcXFxuICAgIGxldCBqeE5ld1YgPSBmZXRjaCgnaHR0cHM6Ly9naXRjb2RlLm5ldC9xcV8zMjM5NDM1MS9kci8tL3Jhdy9tYXN0ZXIvZHAvUGFyc2VWZXJzaW9uLnR4dCcpO1xcXFxcXFxcbiAgICBsZXQganhPbGRWID0gKGZldGNoKF9teVNldC5jamNhY2hlKS5zcGxpdCgndmVyc2lvbiA9IFxcXFxcXFxcXFxcXFxcXCInKVsxXSArICcnKS5zcGxpdCgnXFxcXFxcXFxcXFxcXFxcIicpWzBdO1xcXFxcXFxcbiAgICB0b29scy5jcHJWZXJzaW9uKGp4TmV3ViwganhPbGRWKTtcXFxcXFxcXG59XFxcXFxcXFxuXFxcXFxcXFxudmFyIFBhcnNlUyA9IHt9O1xcXFxcXFxcbnZhciBvcmlnaW5hbFBhcnNlUyA9IHtcXFxcXFxcXG4gICAgLy8gdXBkYXRlRGF0ZTogdXBkYXRlRGF0ZSxcXFxcXFxcXG4gICAgcGFyc2VMYzonaHR0cHM6Ly9jb2RlLmFsaXl1bi5jb20vQUk5NTcvSGlrZXIvcmF3L21hc3Rlci9wL3BhcnNlTGMuanMnLFxcXFxcXFxcbiAgICBDaXR5SVA6ICdodHRwOi8vcHYuc29odS5jb20vY2l0eWpzb24nLFxcXFxcXFxcbiAgICBwY1VBOiAnVXNlci1BZ2VudEBNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wXFxcXFxcXFxcXFxcXFxcXO+8m1xcXFxcXFxcXFxcXFxcXFzvvJsgV09XNjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS80OS4wLjI2MjMuODcgU2FmYXJpLzUzNy4zNicsXFxcXFxcXFxuICAgIGNhY2hlTTN1ODogZnVuY3Rpb24odlVybCwgcmVmKSB7XFxcXFxcXFxuICAgICAgICBsZXQgcGFyYW1hcyA9IHJlZj97aGVhZGVyczp7UmVmZXJlcjpyZWZ9fTp7fTtcXFxcXFxcXG4gICAgICAgIHJldHVybiBjYWNoZU0zdTgodXJsLCBwYXJhbWFzKVxcXFxcXFxcbiAgICB9LFxcXFxcXFxcbiAgICBpc1ZpZGVvOmZ1bmN0aW9uKHBsYXlVcmwpe1xcXFxcXFxcbiAgICAgICAgY29uc3Qge2lzVmlkZW99ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZ2xvYmFsUGFyc2U/cnVsZT3pgZPplb/ku5PlupNQcm8nKTtcXFxcXFxcXG4gICAgICAgIHJldHVybiBpc1ZpZGVvKHBsYXlVcmwpXFxcXFxcXFxuICAgIH0sXFxcXFxcXFxuICAgIHRpbWVPdXQ6ZnVuY3Rpb24gKCkge1xcXFxcXFxcbiAgICAgICAgY29uc3QgbHNnPSQucmVxdWlyZShcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2xvY2FsU3RvcmFnZT9ydWxlPemBk+mVv+S7k+W6k1Byb1xcXFxcXFxcXFxcXFxcXCIpO1xcXFxcXFxcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGxzZy5nZXRJdGVtKCd0aW1lb3V0JywgJzUwMDAnKSk7ICAvL+i2heaXtlxcXFxcXFxcbiAgICB9LFxcXFxcXFxcbiAgICDmupDnoIHljLnphY06ZnVuY3Rpb24gKHZpcFVybCxyZWdleCxwb3MsaGVhZGVycyl7XFxcXFxcXFxuICAgICAgICBpZighcmVnZXh8fCF2aXBVcmwpe1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/op6PmnpDmkq3mlL7pk77mjqXlkozmraPliJnljLnphY3lrZfnrKbkuLLlv4XloashJ1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgaWYoKCFwb3MmJnBvcyE9PTApfHwocG9zJiZ0eXBlb2YocG9zKSE9XFxcXFxcXFxcXFxcXFxcIm51bWJlclxcXFxcXFxcXFxcXFxcXCIpKXsvL21hdGNo5Yy56YWN5L2N572uXFxcXFxcXFxuICAgICAgICAgICAgcG9zID0gMVxcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgaGVhZGVycyA9IGhlYWRlcnN8fHt9O1xcXFxcXFxcbiAgICAgICAgaGVhZGVyc1snVXNlci1BZ2VudCddID0gaGVhZGVyc1snVXNlci1BZ2VudCddfHxNT0JJTEVfVUE7XFxcXFxcXFxuICAgICAgICBsZXQgaHRtbCA9IGZldGNoKHZpcFVybCwge2hlYWRlcnM6aGVhZGVycyx0aW1lb3V0OnRoaXMudGltZU91dCgpfSk7XFxcXFxcXFxuICAgICAgICB0cnkge1xcXFxcXFxcbiAgICAgICAgICAgIGxldCByZWFsVXJsID0gaHRtbC5tYXRjaChuZXcgUmVnRXhwKHJlZ2V4KSlbcG9zXTtcXFxcXFxcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1ZpZGVvKHJlYWxVcmwpO1xcXFxcXFxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxcXFxcbiAgICAgICAgICAgIGxvZyhlLm1lc3NhZ2UpO1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiB2aXBVcmw7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgIH0sXFxcXFxcXFxuICAgIGRlZmF1bHRQYXJzZTogZnVuY3Rpb24odXJsLHRpbWVvdXQpIHtcXFxcXFxcXG4gICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlV2ViKHVybCx0aW1lb3V0KTtcXFxcXFxcXG4gICAgfSxcXFxcXFxcXG4gICAgZGVmYXVsdFBhcnNlV2ViOiBmdW5jdGlvbihwbGF5VXJsLHRpbWVvdXQsZXh0cmEpIHtcXFxcXFxcXG4gICAgICAgIC8vIGxvZygn5Lyg5YWlZGVmYXVsdFBhcnNlV2Vi55qE6LaF5pe2OicrdGltZW91dCk7XFxcXFxcXFxuICAgICAgICB0aW1lb3V0ID0gcGFyc2VJbnQodGltZW91dCl8fHBhcnNlSW50KGdldFZhcignZHAuanhUaW1lb3V0JywnNTAwMCcpKXx8NTAwMDtcXFxcXFxcXG4gICAgICAgIGV4dHJhID0gZXh0cmF8fHt9O1xcXFxcXFxcbiAgICAgICAgbGV0IHBsYXlVcmxMaXN0ID0gZXh0cmEucGxheVVybExpc3R8fFtdO1xcXFxcXFxcbiAgICAgICAgaWYodHlwZW9mKHBsYXlVcmxMaXN0KT09PSdvYmplY3QnJiZwbGF5VXJsTGlzdC5sZW5ndGg+MCl7XFxcXFxcXFxuICAgICAgICAgICAgcGxheVVybExpc3QudW5zaGlmdChwbGF5VXJsKTtcXFxcXFxcXG4gICAgICAgICAgICBsZXQgcGxheVVybHM9cGxheVVybExpc3Quc2xpY2UoMCw0KTtcXFxcXFxcXG4gICAgICAgICAgICBsZXQgbmFtZXM9ZXh0cmEubmFtZUxpc3Quc2xpY2UoMCw0KTtcXFxcXFxcXG4gICAgICAgICAgICAvLyBsb2coJ+W8gOWni+aJuemHj+ino+aekCjlt7Lljrvph40s5Y+q5Y+W5YmNM+S4quWkh+iDju+8jOWKoOmBk+mVv+e+pDo0ODY3MjIzMjjojrflj5bmnIDmlrDprZTmlq3liqjmgIEpOicrbmFtZXMpO1xcXFxcXFxcbiAgICAgICAgICAgIHBsYXlVcmxzPXBsYXlVcmxzLm1hcCgoaXQsaWQpPT5pdCtcXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcXFxcXFxcXCIrbmFtZXNbaWRdKTtcXFxcXFxcXG4gICAgICAgICAgICAvL2xvZyhwbGF5VXJscyk7XFxcXFxcXFxuICAgICAgICAgICAgY29uc3Qge0xhenlQYXJzZUZhc3R9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZ2xvYmFsUGFyc2U/cnVsZT3pgZPplb/ku5PlupNQcm8nKTtcXFxcXFxcXG4gICAgICAgICAgICBsZXQgcmV0ID0gTGF6eVBhcnNlRmFzdChwbGF5VXJscyx0aW1lb3V0LHRpbWVvdXQpO1xcXFxcXFxcbiAgICAgICAgICAgIGlmKHR5cGVvZihyZXQpPT09J29iamVjdCcmJnJldC5sZW5ndGg+MCl7XFxcXFxcXFxuICAgICAgICAgICAgICAgIC8vcmV0dXJuIHJldFswXVxcXFxcXFxcbiAgICAgICAgICAgICAgICAvL2xvZyhyZXQpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBsZXQgdiA9IGdldEFwcFZlcnNpb24oKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgaWYocGFyc2VJbnQodik+PTIxOTQmJnJldC5sZW5ndGg+MSl7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgdXJscyA9IEFycmF5LmZyb20obmV3IFNldChyZXQpKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVzPXVybHMubWFwKChpdCxpZCk9Pml0LnNwbGl0KFxcXFxcXFxcXFxcXFxcXCLimIVcXFxcXFxcXFxcXFxcXFwiKS5sZW5ndGg+MT9pdC5zcGxpdChcXFxcXFxcXFxcXFxcXFwi4piFXFxcXFxcXFxcXFxcXFxcIilbMV06XFxcXFxcXFxcXFxcXFxcIue6v+i3rzpcXFxcXFxcXFxcXFxcXFwiK3BhcnNlSW50KGlkKzEpKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybHM9dXJscy5tYXAoaXQ9Pml0LnNwbGl0KFxcXFxcXFxcXFxcXFxcXCLimIVcXFxcXFxcXFxcXFxcXFwiKVswXSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgaGVhZGVycyA9IHVybHMubWFwKChpdCk9PntcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZighLzsvLnRlc3QoaXQpfHxpdC5zcGxpdCgnOycpLmxlbmd0aDwyKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBoZWFkID0gaXQuc3BsaXQoJzsnKVsxXTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIS9ALy50ZXN0KGhlYWQpfHwhL3t8fS8udGVzdChoZWFkKSl7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge31cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkPWhlYWQuc3BsaXQoXFxcXFxcXFxcXFxcXFxcIntcXFxcXFxcXFxcXFxcXFwiKVsxXS5zcGxpdChcXFxcXFxcXFxcXFxcXFwifVxcXFxcXFxcXFxcXFxcXCIpWzBdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2hlYWQgPSBoZWFkLnJlcGxhY2UoL3t8fS9nLCcnKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZCA9IGhlYWQuc3BsaXQoJyYmJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmogPSB7fTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIGhlYWQpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGtleSA9IGhlYWRbaV0uc3BsaXQoJ0AnKVswXTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGhlYWRbaV0uc3BsaXQoJ0AnKVsxXS5yZXBsYWNlKC87Lywn77yb77ybJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybHMgPSB1cmxzLm1hcCgoaXQpPT57XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHR1cmw9aXQuc3BsaXQoJzsnKVswXTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihpdC5pbmNsdWRlcyhcXFxcXFxcXFxcXFxcXFwiI2lzVmlkZW89dHJ1ZSNcXFxcXFxcXFxcXFxcXFwiKSYmIXR1cmwuaW5jbHVkZXMoXFxcXFxcXFxcXFxcXFxcIiNpc1ZpZGVvPXRydWUjXFxcXFxcXFxcXFxcXFxcIikpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dXJsKz1cXFxcXFxcXFxcXFxcXFwiI2lzVmlkZW89dHJ1ZSNcXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHVybFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe3VybHM6dXJscyxoZWFkZXJzOmhlYWRlcnMsbmFtZXM6bmFtZXN9KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgfWVsc2V7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0WzBdLnNwbGl0KFxcXFxcXFxcXFxcXFxcXCLimIVcXFxcXFxcXFxcXFxcXFwiKVswXVxcXFxcXFxcbiAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgfWVsc2V7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHJldHVybiByZXRcXFxcXFxcXG4gICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICB9ZWxzZXtcXFxcXFxcXG4gICAgICAgICAgICBjb25zdCB7bGF6eVBhcnNlfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2dsb2JhbFBhcnNlP3J1bGU96YGT6ZW/5LuT5bqTUHJvJyk7XFxcXFxcXFxuICAgICAgICAgICAgbGV0IHg1UGxheT1sYXp5UGFyc2UocGxheVVybCx0aW1lb3V0KTtcXFxcXFxcXG4gICAgICAgICAgICBpZih0eXBlb2YoeDVQbGF5KT09XFxcXFxcXFxcXFxcXFxcInVuZGVmaW5lZFxcXFxcXFxcXFxcXFxcXCJ8fCF4NVBsYXkpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXFxcXFxcXFxcInRvYXN0Oi8v6YGT6ZW/5LuT5bqT6Kej5p6Q5aSx6LSlXFxcXFxcXFxcXFxcXFxcIlxcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICBsZXQgdGlwcz0veDVSdWxlfHdlYlJ1bGUvLnRlc3QoeDVQbGF5KT9cXFxcXFxcXFxcXFxcXFwieDUvd2Vi5YWN5ZeF5byA5aeLXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXFxcXFxcXFwi5p6B6YCf5YWN5ZeF5o6i5a6M5q+V77yM5Zyw5Z2AOlxcXFxcXFxcXFxcXFxcXCIrKC9eaHR0cC8udGVzdCh4NVBsYXkpP3g1UGxheTon6Z2e5q2j5bi46ZO+5o6lJyk7XFxcXFxcXFxuICAgICAgICAgICAgbG9nKHRpcHMpO1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiB4NVBsYXk7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgIH0sXFxcXFxcXFxuICAgIFxcXFxcXFxcXFxcXFxcXCJtYW9zc1xcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxuICAgICAgICBmdW5jdGlvbiAoanh1cmwsIHJlZiwga2V5KSB7XFxcXFxcXFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMu54yrKGp4dXJsLCByZWYsIGtleSlcXFxcXFxcXG4gICAgICAgIH0sXFxcXFxcXFxuICAgIOWFjeWXhTpmdW5jdGlvbih2aXBVcmwsayl7XFxcXFxcXFxuICAgICAgICBrPWt8fFtcXFxcXFxcXFxcXFxcXFwidXJsXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXFxcXFxcXFwiZGF0YS51cmxcXFxcXFxcXFxcXFxcXFwiXTtcXFxcXFxcXG4gICAgICAgIHRyeXtcXFxcXFxcXG4gICAgICAgICAgICBsZXQgcmpzb249SlNPTi5wYXJzZShmZXRjaCh2aXBVcmwpKTtcXFxcXFxcXG4gICAgICAgICAgICAvL2xvZyhyanNvbik7XFxcXFxcXFxuICAgICAgICAgICAgbGV0IHJlYWxVcmw9Jyc7XFxcXFxcXFxuICAgICAgICAgICAgaWYodHlwZW9mKGspPT0nc3RyaW5nJyl7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHJlYWxVcmw9ZXZhbChgcmpzb24uJHtrfWApO1xcXFxcXFxcbiAgICAgICAgICAgIH1lbHNlIGlmKEFycmF5LmlzQXJyYXkoaykpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgb2Ygayl7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyhpKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHJlYWxVcmw9ZXZhbChgcmpzb24uJHtpfWApO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYocmVhbFVybCl7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgaWYocmVhbFVybC5zdGFydHNXaXRoKCcvJykpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZWFsVXJsID0gJ2h0dHBzOi8vJytyZWFsVXJsO1xcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1ZpZGVvKHJlYWxVcmwpfHxcXFxcXFxcXFxcXFxcXFwiXFxcXFxcXFxcXFxcXFxcIjtcXFxcXFxcXG4gICAgICAgIH1jYXRjaChlKXtcXFxcXFxcXG4gICAgICAgICAgICBsb2coZS5tZXNzYWdlKTtcXFxcXFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXFxcXFxcXFxcIlxcXFxcXFxcXFxcXFxcXCJcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgfSxcXFxcXFxcXG4gICAgWDU6ZnVuY3Rpb24odmlwVXJsLHJlZil7Ly8gaHR0cHM6Ly9hcGkuNTJ3eWIuY29tL3dlYmNsb3VkLz92PWh0dHA6Ly92aXAuMTkwNS5jb20vcGxheS82OTE5NDAuc2h0bWwgaHR0cDovL3d3dy5jZGNlci5uZXQvXFxcXFxcXFxuICAgICAgICBsZXQgX3g1ID0gJC50b1N0cmluZygodmlwVXJsKSA9PiB7XFxcXFxcXFxuICAgICAgICAgICAgaWYoIWxvY2F0aW9uLmhyZWYuaW5jbHVkZXModmlwVXJsKSl7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSB2aXBVcmw7XFxcXFxcXFxuICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgIGlmKHdpbmRvdy5jb3VudCA9PSBudWxsKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgd2luZG93LmNvdW50PTE7XFxcXFxcXFxuICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgIHdpbmRvdy5jb3VudCsrO1xcXFxcXFxcbiAgICAgICAgICAgIGlmKCB3aW5kb3cuY291bnQgPj0gMjApe1xcXFxcXFxcbiAgICAgICAgICAgICAgICBmYmEubG9nKFxcXFxcXFxcXFxcXFxcXCLmnKrojrflj5bliLDotYTmupDlnLDlnYDvvIzot7PliLDop6PmnpDpobVcXFxcXFxcXFxcXFxcXFwiKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZpcFVybFxcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICB2YXIgdXJscyA9IF9nZXRVcmxzKCk7XFxcXFxcXFxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiB1cmxzKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGlmICghL3BsYXltM3U4fG0zdThcXFxcXFxcXFxcXFxcXFxcLnR2Ly50ZXN0KHVybHNbaV0pICYmIHVybHNbaV0ubWF0Y2goL1xcXFxcXFxcXFxcXFxcXFwubXAzfFxcXFxcXFxcXFxcXFxcXFwubXA0fFxcXFxcXFxcXFxcXFxcXFwubTN1OHxcXFxcXFxcXFxcXFxcXFxcLmZsdi8pKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBmYmEubG9nKHVybHNbaV0pO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybHNbaV1cXFxcXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgIH0sdmlwVXJsKTtcXFxcXFxcXG4gICAgICAgIGxldCBwbGF5VXJsID0gcmVmP3JlZjp2aXBVcmw7XFxcXFxcXFxuICAgICAgICBsZXQgeDVVcmwgPSAnd2ViUnVsZTovLycrcGxheVVybCsgJ0AnICtfeDU7XFxcXFxcXFxuICAgICAgICBzaG93TG9hZGluZygn6a2U5patLmpz5ZeF5o6i5LitLi4uJyk7XFxcXFxcXFxuICAgICAgICByZXR1cm4geDVVcmxcXFxcXFxcXG4gICAgfSxcXFxcXFxcXG4gICAgJ+mBk+mVvyc6ZnVuY3Rpb24gKHZpcFVybCl7XFxcXFxcXFxuICAgICAgICBldmFsUHJpdmF0ZUpTKCd6U1d2ZStlZUE2aUwrZjJmR1RJKzFwUjhqbkxkMFNpeVY2eXZnY1BNV3dCTVA1YVlwcWhURmJJU3hudmhiMGJkNVZnaXp5VU1IZTRkbXNuR2hXTEJrcWZiNUhmTmJJVzRNQk14ekxwUC85VGpOVDhTSVFBZmpkVGo0UDhvWDM1ZWtLTnZHVnhEb2x5ZmNZcnBvS3dOb1E9PScpO1xcXFxcXFxcbiAgICAgICAgcmV0dXJuIHRoaXMu5YWN5ZeFKHZpcFVybCsnJnNlY3JldD0nK3NlY3JldClcXFxcXFxcXG4gICAgfSxcXFxcXFxcXG4gICAgJ+eMqyc6ZnVuY3Rpb24gKGp4dXJsLCByZWYsIGtleSkge1xcXFxcXFxcbiAgICAgICAgdHJ5IHtcXFxcXFxcXG4gICAgICAgICAgICB2YXIgZ2V0VmlkZW9JbmZvID0gZnVuY3Rpb24gKHRleHQpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvb2xzLkFFUyh0ZXh0LCBrZXksIGl2KTtcXFxcXFxcXG4gICAgICAgICAgICB9O1xcXFxcXFxcbiAgICAgICAgICAgIGxldCBoZWFkZXJzID0ge2hlYWRlcnM6IHtcXFxcXFxcXFxcXFxcXFwiUmVmZXJlclxcXFxcXFxcXFxcXFxcXCI6IHJlZnx8Jyd9fTtcXFxcXFxcXG4gICAgICAgICAgICBrZXkgPSBrZXkgPT0gdW5kZWZpbmVkID8gXFxcXFxcXFxcXFxcXFxcImR2eVlSUWxuUFJDTWRRU2VcXFxcXFxcXFxcXFxcXFwiIDoga2V5O1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBodG1sID0gcmVmP3JlcXVlc3Qoanh1cmwsIGhlYWRlcnMpOnJlcXVlc3Qoanh1cmwpO1xcXFxcXFxcbiAgICAgICAgICAgIGlmICgvJmJ0d2FmPS8udGVzdChodG1sKSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICBodG1sID0gcmVxdWVzdChqeHVybCArIFxcXFxcXFxcXFxcXFxcXCImYnR3YWZcXFxcXFxcXFxcXFxcXFwiICsgaHRtbC5tYXRjaCgvJmJ0d2FmKC4qPylcXFxcXFxcXFxcXFxcXFwiLylbMV0sIGhlYWRlcnMpO1xcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICB2YXIgaXYgPSBodG1sLnNwbGl0KFxcXFxcXFxcXFxcXFxcXCJfdG9rZW4gPSBcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcIlxcXFxcXFxcXFxcXFxcXCIpWzFdLnNwbGl0KFxcXFxcXFxcXFxcXFxcXCJcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcIlxcXFxcXFxcXFxcXFxcXCIpWzBdO1xcXFxcXFxcbiAgICAgICAgICAgIGV2YWwoaHRtbC5tYXRjaCgvdmFyIGNvbmZpZyA9IHtbXFxcXFxcXFxcXFxcXFxcXHNcXFxcXFxcXFxcXFxcXFxcU10qP30vKVswXSArIFxcXFxcXFxcXFxcXFxcXCJcXFxcXFxcXFxcXFxcXFwiKTtcXFxcXFxcXG4gICAgICAgICAgICBpZiAoIS9eaHR0cC8udGVzdChjb25maWcudXJsKSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICBjb25maWcudXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KHRvb2xzLkFFUyhjb25maWcudXJsLCBrZXksIGl2KSk7XFxcXFxcXFxuICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiBjb25maWcudXJsO1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgY2F0Y2ggKGUpIHtcXFxcXFxcXG4gICAgICAgICAgICAvLyByZXR1cm4gXFxcXFxcXFxcXFxcXFxcIlxcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxuICAgICAgICAgICAgcmV0dXJuIGp4dXJsO1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICB9LFxcXFxcXFxcbiAgICBMTFE6IGZ1bmN0aW9uKGp4dXJsKSB7XFxcXFxcXFxuICAgICAgICB0cnkge1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBhcGkgPSBqeHVybC5zcGxpdCgnP3VybD0nKVswXSArIFxcXFxcXFxcXFxcXFxcXCJhcGkucGhwXFxcXFxcXFxcXFxcXFxcIjtcXFxcXFxcXG4gICAgICAgICAgICB2YXIgYjY0aWQgPSBiYXNlNjRFbmNvZGUoanh1cmwuc3BsaXQoJ3VybD0nKVsxXSk7XFxcXFxcXFxuICAgICAgICAgICAgdmFyIHBhcnNlaWQgPSB0b29scy5jYWVzYXJDaXBoZXIoYjY0aWQsIC0xKTtcXFxcXFxcXG4gICAgICAgICAgICB2YXIganNvbiA9IEpTT04ucGFyc2UocmVxdWVzdChhcGksIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiBqeHVybFxcXFxcXFxcbiAgICAgICAgICAgICAgICB9LFxcXFxcXFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcXFxcXFxcXG4gICAgICAgICAgICAgICAgYm9keTogJ3VybD0nICsgcGFyc2VpZFxcXFxcXFxcbiAgICAgICAgICAgIH0pKTtcXFxcXFxcXG4gICAgICAgICAgICB1cmwgPSAoanNvbi5jb2RlID09IDIwMCA/IGJhc2U2NERlY29kZSh0b29scy5jYWVzYXJDaXBoZXIoanNvbi51cmwsIC0xKSkgOiAnJyk7XFxcXFxcXFxuICAgICAgICAgICAgcmV0dXJuIHVybDtcXFxcXFxcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcXFxcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgIH0sXFxcXFxcXFxuICAgIFBhbkd1OiBmdW5jdGlvbih2aXBVcmwsIGRhdGEpIHtcXFxcXFxcXG4gICAgICAgIHRyeSB7XFxcXFxcXFxuICAgICAgICAgICAgLyp2YXIgcmVmID0gJ2h0dHBzOi8vd3d3LnBhbmd1amlleGkuY29tLyc7XFxcXFxcXFxuICAgICAgICAgICAgdmFyIHBhcnNlID0gJ2h0dHBzOi8vcGFuZ3VhcGkubnRyeWpkLm5ldC9qaWV4aS8/dXJsPScgKyB2aXBVcmw7XFxcXFxcXFxuICAgICAgICAgICAgdmFyIGFwaSA9ICdodHRwczovL3Bhbmd1YXBpLm50cnlqZC5uZXQvamlleGkvYXBpLnBocCc7XFxcXFxcXFxuICAgICAgICAgICAgKi9cXFxcXFxcXG4gICAgICAgICAgICAvL3ZhciByZWYgPSAnaHR0cHM6Ly94bXlzdHYuY29tLyc7XFxcXFxcXFxuICAgICAgICAgICAgLy92YXIgcGFyc2UgPSAnaHR0cHM6Ly93d3cuOTlrcHcuY29tL3Bhbmd1L2luZGV4LnBocD91cmw9JyArIHRhaWxVcmw7XFxcXFxcXFxuICAgICAgICAgICAgLy92YXIgYXBpID0gJ2h0dHBzOi8vd3d3Ljk5a3B3LmNvbS9wYW5ndS9hcGkucGhwJztcXFxcXFxcXG4gICAgICAgICAgICB2YXIgcGFyc2UgPSAnaHR0cHM6Ly93d3cucGFuZ3VqaWV4aS5jb20vcGFuZ3UvP3VybD0nICsgdmlwVXJsO1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBhcGkgPSAnaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L3Bhbmd1MjAyMS9hcGkucGhwJztcXFxcXFxcXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZWYgPSBkYXRhWzBdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBwYXJzZSA9IGRhdGFbMV07XFxcXFxcXFxuICAgICAgICAgICAgICAgIGFwaSA9IGRhdGFbMl07XFxcXFxcXFxuICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgIHZhciBUaW1lID0gKE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSAqIDEpLnRvU3RyaW5nKCk7XFxcXFxcXFxuICAgICAgICAgICAgdmFyIHVybCA9IEpTT04ucGFyc2UocmVxdWVzdChhcGksIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiBwYXJzZVxcXFxcXFxcbiAgICAgICAgICAgICAgICB9LFxcXFxcXFxcbiAgICAgICAgICAgICAgICBib2R5OiAndXJsPScgKyB2aXBVcmwgKyAnJnJlZmVyZXI9JyArIGJhc2U2NEVuY29kZShwYXJzZSkgKyAnJnJlZj0xJnRpbWU9JyArIFRpbWUgKyAnJnR5cGU9Jm90aGVyPScgKyBiYXNlNjRFbmNvZGUodmlwVXJsKSArICcmaW9zPTAnLFxcXFxcXFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcXFxcXFxcbiAgICAgICAgICAgIH0pKS51cmw7XFxcXFxcXFxuICAgICAgICAgICAgcmV0dXJuIHVybDtcXFxcXFxcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcXFxcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgIH0sXFxcXFxcXFxuICAgIHl1bjE3MTc6IGZ1bmN0aW9uICh2aXBVcmwpIHtcXFxcXFxcXG4gICAgICAgIHZhciBpc3lrID0gdmlwVXJsLmluZGV4T2YoJ3lvdWt1Jyk7XFxcXFxcXFxuICAgICAgICB2YXIgcmVmID0gXFxcXFxcXFxcXFxcXFxcImh0dHBzOi8vd3d3LjE3MTd5dW4uY29tL2p4L3R5LnBocD91cmw9XFxcXFxcXFxcXFxcXFxcIiArIHZpcFVybDtcXFxcXFxcXG4gICAgICAgIHZhciBwYXJzZSA9IFxcXFxcXFxcXFxcXFxcXCJodHRwczovLzE3MTd5dW4uY29tLnpoMTg4Lm5ldC8wODI4Lz91cmw9XFxcXFxcXFxcXFxcXFxcIiArIHZpcFVybDtcXFxcXFxcXG4gICAgICAgIHZhciBhcGkgPSBcXFxcXFxcXFxcXFxcXFwiaHR0cHM6Ly8xNzE3eXVuLmNvbS56aDE4OC5uZXQvMTAwNC8uLmluZGV4Li5waHBcXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcbiAgICAgICAgcmV0dXJuIGlzeWsgPT0gLTEgPyB0aGlzLlBhbkd1KHZpcFVybCwgW3JlZiwgcGFyc2UsIGFwaV0pIDogdGhpcy5QYW5HdSh2aXBVcmwsIFtyZWYgKyAnLHZpcDonLCBwYXJzZSArICcsdmlwOicsIGFwaV0pO1xcXFxcXFxcbiAgICB9LFxcXFxcXFxcbiAgICBPS+ino+aekDonaHR0cHM6Ly9va2p4LmNjLz91cmw9JyxcXFxcXFxcXG4gICAgTTNVOFRWOidodHRwczovL2p4Lm0zdTgudHYvamlleGkvP3VybD0nLFxcXFxcXFxcbiAgICDpgZPplb/ku5PlupPpgJrlhY06ZnVuY3Rpb24gKHVybCx0aW1lb3V0KXtcXFxcXFxcXG4gICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlV2ViKHVybCx0aW1lb3V0KTtcXFxcXFxcXG4gICAgfSxcXFxcXFxcXG4gICAgRnVYaW5nOiBmdW5jdGlvbih2aXBVcmwpIHtcXFxcXFxcXG4gICAgICAgIHRyeSB7XFxcXFxcXFxuICAgICAgICAgICAgLy9pZih2aXBVcmwuaW5kZXhPZigndi55b3VrdScpIT0tMSl7XFxcXFxcXFxuICAgICAgICAgICAgLy8gICAgdmlwVXJsID0gKEpTT04ucGFyc2UocmVxdWVzdCh2aXBVcmwsIHtyZWRpcmVjdDpmYWxzZSwgd2l0aEhlYWRlcnM6dHJ1ZX0pKS5oZWFkZXJzLmxvY2F0aW9uICsgJycpLnJlcGxhY2UoL1xcXFxcXFxcXFxcXFxcXFw/LiovLCcnKTtcXFxcXFxcXG4gICAgICAgICAgICAvL31cXFxcXFxcXG4gICAgICAgICAgICB2YXIgcmVmID0gJ2h0dHBzOi8vangueHVldHVpZ3VhbmcuY24vamlleGkvP3VybD0nICsgdmlwVXJsO1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBwYXJzZSA9IHJlZjtcXFxcXFxcXG4gICAgICAgICAgICB2YXIgYXBpID0gJ2h0dHBzOi8vangueHVldHVpZ3VhbmcuY24vamlleGkvYXBpdV9meC5waHAnO1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiB0aGlzLlBhbkd1KHZpcFVybCwgW3JlZiwgcGFyc2UsIGFwaV0pO1xcXFxcXFxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiAnJztcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgfSxcXFxcXFxcXG59O1xcXFxcXFxcblxcXFxcXFxcbk9iamVjdC5hc3NpZ24oUGFyc2VTLCBvcmlnaW5hbFBhcnNlUywgTXlQYXJzZVMpO1xcXFxcXFxcbi8v6KaG55uW6aG65bqP77yM56ys5LiJ5Liq6KaG55uW56ys5LqM5Liq54S25ZCO6KaG55uW56ys5LiA5LiqXFxcXFxcXFxuXFxcXFxcXFxuXFxcXFxcXFxuZnVuY3Rpb24gYXl0bVBhcnNlKHZpcFVybCxzdHJUaXRsZSx0aW1lb3V0LHBsYXlVcmwpIHtcXFxcXFxcXG4gICAgLy8g5Y+C5pWwMTrmraPniYjnvZHlnYDlnLDlnYAg5Y+C5pWwMiDlrprlkJHop6PmnpDmjqXlj6PlkI3np7Ag5Y+C5pWwMyB4Neino+aekOi2heaXtiDlj4LmlbA0IOWujOaVtOeahOaSreaUvumTvuaOpVxcXFxcXFxcbiAgICBzdHJUaXRsZSA9IHN0clRpdGxlfHwnJztcXFxcXFxcXG4gICAgdmlwVXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KHZpcFVybCk7XFxcXFxcXFxuICAgIGlmKCEvbWlndXZpZGVvLy50ZXN0KHZpcFVybCkpe1xcXFxcXFxcbiAgICAgICAgdmlwVXJsPXZpcFVybC5zcGxpdCgnIycpWzBdLnNwbGl0KCc/JylbMF07XFxcXFxcXFxuICAgIH1cXFxcXFxcXG4gICAgcGxheVVybD1kZWNvZGVVUklDb21wb25lbnQocGxheVVybCl8fHZpcFVybHx8Jyc7XFxcXFxcXFxuICAgIC8vIGxvZygn5Lyg5YWlYXl0bVBhcnNl55qE6LaF5pe2OicrdGltZW91dCk7XFxcXFxcXFxuICAgIHRpbWVvdXQgPSBwYXJzZUludCh0aW1lb3V0KXx8cGFyc2VJbnQoZ2V0VmFyKCdkcC5qeFRpbWVvdXQnLCc1MDAwJykpfHw1MDAwO1xcXFxcXFxcblxcXFxcXFxcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXFxcXFxcXG4gICAgbGV0IGp4c1JvdXRlID0gXFxcXFxcXFxcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlKaWV4aS5qc29uXFxcXFxcXFxcXFxcXFxcIjtcXFxcXFxcXG4gICAgbGV0IE15SmlleGkgPSB7fTtcXFxcXFxcXG4gICAgbGV0IGppZXhpcyA9IHt9O1xcXFxcXFxcbiAgICB0cnkge1xcXFxcXFxcbiAgICAgICAgTXlKaWV4aSA9IEpTT04ucGFyc2UoZmV0Y2goanhzUm91dGUpKTtcXFxcXFxcXG4gICAgICAgIGppZXhpcyA9IE15SmlleGkuamlleGlzLmZpbHRlcihpdD0+aXQubmFtZT09PU15SmlleGkubm93KVswXTtcXFxcXFxcXG4gICAgfWNhdGNoIChlKSB7fVxcXFxcXFxcbiAgICBmdW5jdGlvbiBnZXRQbGF5Sngoa2V5KXtcXFxcXFxcXG4gICAgICAgIGxldCBwbGF5VXJsTGlzdCA9IFtdOy8v5om56YeP5pKt5pS+5Zyw5Z2A5YiX6KGoXFxcXFxcXFxuICAgICAgICBsZXQgbmFtZUxpc3QgPSBbXTtcXFxcXFxcXG4gICAgICAgIGxldCBqeHMgPSBqaWV4aXNba2V5XTsgLy8g6YCC55So5LqO6L+Z5Liq572R56uZ55qE6Kej5p6Q5YiX6KGoXFxcXFxcXFxuICAgICAgICBpZihqeHMpe1xcXFxcXFxcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiBqeHMpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICBpZih0eXBlb2YgUGFyc2VTW2p4c1tpXV0gPT0gJ3N0cmluZycmJlBhcnNlU1tqeHNbaV1dLm1hdGNoKC9odHRwLio/PS8pKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHBsYXlVcmxMaXN0LnB1c2goUGFyc2VTW2p4c1tpXV0rdmlwVXJsKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVMaXN0LnB1c2goanhzW2ldKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgIC8vIHJldHVybiBwbGF5VXJsTGlzdFxcXFxcXFxcbiAgICAgICAgcmV0dXJuIHtwbGF5VXJsTGlzdDpwbGF5VXJsTGlzdCxuYW1lTGlzdDpuYW1lTGlzdH1cXFxcXFxcXG4gICAgfVxcXFxcXFxcbiAgICBmdW5jdGlvbiBnZXRMYXp5TGlzdChrZXkpey8v5Y+q6I635Y+W5aSH6IOO5YiX6KGo55qE5YWN5ZeF5o6i6Kej5p6Q5YiX6KGoXFxcXFxcXFxuICAgICAgICBsZXQgcGFyc2VzID0gW107XFxcXFxcXFxuICAgICAgICBsZXQganhzID0gamlleGlzW2tleV18fFtdOyAvLyDpgILnlKjkuo7ov5nkuKrnvZHnq5nnmoTop6PmnpDliJfooahcXFxcXFxcXG4gICAgICAgIC8vIGxvZyhqeHMpO1xcXFxcXFxcbiAgICAgICAgaWYoanhzKXtcXFxcXFxcXG4gICAgICAgICAgICBmb3IobGV0IGkgaW4ganhzKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIFBhcnNlU1tqeHNbaV1dID09ICdmdW5jdGlvbicmJiEv6YCa5YWNLy50ZXN0KFBhcnNlU1tqeHNbaV1dLnRvU3RyaW5nKCkpKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlcy5wdXNoKHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOmp4c1tpXSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBydWxlOlBhcnNlU1tqeHNbaV1dXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB9KVxcXFxcXFxcbiAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgcmV0dXJuIHBhcnNlc1xcXFxcXFxcbiAgICB9XFxcXFxcXFxuICAgIHZhciBleHRyYSA9IHt9O1xcXFxcXFxcbiAgICB2YXIgcGFyc2VzID0gW107IC8v5YWN5ZeF5o6i5YiX6KGoXFxcXFxcXFxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcXFxcXFxcbiAgICBpZighc3RyVGl0bGUpe1xcXFxcXFxcbiAgICAgICAgaWYoL0xULy50ZXN0KHZpcFVybCkpe1xcXFxcXFxcbiAgICAgICAgICAgIHN0ciA9IG15U2V0Lmx0O1xcXFxcXFxcbiAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdsdCcpO1xcXFxcXFxcbiAgICAgICAgICAgIHBhcnNlcyA9IGdldExhenlMaXN0KCdsdCcsc3RyKTtcXFxcXFxcXG4gICAgICAgIH0gZWxzZSBpZigvcmVucmVubWkvLnRlc3QodmlwVXJsKSl7XFxcXFxcXFxuICAgICAgICAgICAgc3RyID0gbXlTZXQucnI7XFxcXFxcXFxuICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3JyJyk7XFxcXFxcXFxuICAgICAgICAgICAgcGFyc2VzID0gZ2V0TGF6eUxpc3QoJ3JyJyxzdHIpO1xcXFxcXFxcbiAgICAgICAgfWVsc2UgaWYoL3d1ZHV5dW4vLnRlc3QodmlwVXJsKSl7XFxcXFxcXFxuICAgICAgICAgICAgc3RyID0gbXlTZXQud2Q7XFxcXFxcXFxuICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3dkJyk7XFxcXFxcXFxuICAgICAgICAgICAgcGFyc2VzID0gZ2V0TGF6eUxpc3QoJ3dkJyxzdHIpO1xcXFxcXFxcbiAgICAgICAgfWVsc2UgaWYoL3lhbmFpZmVpfHhpbmx1YW58TFR8cnVpZmVuZ2xifHN1b3lvfHhmeXxyZW5yZW5taXxSb25nWGluZ1ZSfHh1ZXJlbnx3dWR1eXVufGxhb2RpfE5haWZlaW1pfGRhb2RtfFhNTVR8djAyMGMvLnRlc3QodmlwVXJsKSl7XFxcXFxcXFxuICAgICAgICAgICAgc3RyID0gbXlTZXQub3RoO1xcXFxcXFxcbiAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdvdGgnKTtcXFxcXFxcXG4gICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgnb3RoJyxzdHIpO1xcXFxcXFxcbiAgICAgICAgfWVsc2V7XFxcXFxcXFxuICAgICAgICAgICAgdmFyIGhvc3Q7XFxcXFxcXFxuICAgICAgICAgICAgdHJ5e1xcXFxcXFxcbiAgICAgICAgICAgICAgICBob3N0ID0gdmlwVXJsLm1hdGNoKC9cXFxcXFxcXFxcXFxcXFxcLiguKj8pXFxcXFxcXFxcXFxcXFxcXC8vKVsxXTtcXFxcXFxcXG4gICAgICAgICAgICB9Y2F0Y2goZSl7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGlmKCEvXmh0dHAvLnRlc3QocGxheVVybCkpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFxcXFxcXFxcXCLmlq3mj5LosIPnlKjlpLHotKXvvIFcXFxcXFxcXFxcXFxcXFxcbumdnuato+W4uOeahHZpcOato+eJiOWcsOWdgOS4lOacquivhuWIq+WOn+ermeino+aekOaSreaUvuWcsOWdgFxcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxuICAgICAgICAgICAgICAgIH1lbHNle1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlUy7pgZPplb/ku5PlupPpgJrlhY0ocGxheVVybCx0aW1lb3V0KVxcXFxcXFxcbiAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgIC8vaG9zdCA9IGRlY29kZVVSSUNvbXBvbmVudChob3N0KTtcXFxcXFxcXG4gICAgICAgICAgICBzd2l0Y2ggKG15U2V0LnFqdSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFxcXFxcXFxcXCLpu5jorqRcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChob3N0KSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcXFxcXFxcXFwicXEuY29tXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQudHg7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCd0eCcpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgndHgnKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcXFxcXFxcXFwiaXFpeWkuY29tXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQucXk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdxeScpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgncXknKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcXFxcXFxcXFwieW91a3UuY29tXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQueWs7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCd5aycpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgneWsnKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcXFxcXFxcXFwiYWxpenlcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5hbDtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ2FsJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcyA9IGdldExhenlMaXN0KCdhbGl6eScpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFxcXFxcXFxcXCJtZ3R2LmNvbVxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0Lm1nO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnbWcnKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VzID0gZ2V0TGF6eUxpc3QoJ21nJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXFxcXFxcXFxcImJpbGliaWxpLmNvbVxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LmJsO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnYmwnKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VzID0gZ2V0TGF6eUxpc3QoJ2JsJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXFxcXFxcXFxcInNvaHUuY29tXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQuc2g7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdzaCcpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgnc2gnKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcXFxcXFxcXFwidHYuc29odS5jb21cXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5zaDtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3NoJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcyA9IGdldExhenlMaXN0KCdzaCcpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFxcXFxcXFxcXCJpeGlndWEuY29tXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQueGc7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCd4ZycpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgneGcnKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcXFxcXFxcXFwicHB0di5jb21cXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5wcDtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3BwJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcyA9IGdldExhenlMaXN0KCdwcCcpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFxcXFxcXFxcXCJtaWd1dmlkZW8uY29tXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQubWk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdtaScpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgnbWknKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcXFxcXFxcXFwibGUuY29tXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQubGU7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdsZScpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgnbGUnKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcXFxcXFxcXFwiMTkwNS5jb21cXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5vbmU7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdvbmUnKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VzID0gZ2V0TGF6eUxpc3QoJ29uZScpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFxcXFxcXFxcXCJmdW4udHZcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5mdW47XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdmdW4nKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VzID0gZ2V0TGF6eUxpc3QoJ2Z1bicpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5vdGg7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdvdGgnKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VzID0gZ2V0TGF6eUxpc3QoJ290aCcpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQucWp1O1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXFxcXFxuICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICB9ZWxzZXtcXFxcXFxcXG4gICAgICAgIGxvZygn6a2U5pat5omn6KGM5a6a5ZCR6Kej5p6Q57q/6Lev5aS0Oicrc3RyVGl0bGUpO1xcXFxcXFxcbiAgICAgICAgc3RyID0gc3RyVGl0bGU7XFxcXFxcXFxuICAgIH1cXFxcXFxcXG4gICAgbGV0IHdpdGhCYXRjaCA9ICEhKE15SmlleGkuaXNBdXRvICYmIE15SmlleGkuYXV0b01vZGUgPT09ICfpgJ/luqbkvJjlhYgnKTtcXFxcXFxcXG4gICAgbGV0IHdpdGhCYXRjaE9yZGVyID0gISEoTXlKaWV4aS5pc0F1dG8gJiYgL+mhuuW6j+S8mOWFiHzll4XmjqLkvJjlhYgvLnRlc3QoTXlKaWV4aS5hdXRvTW9kZSkpO1xcXFxcXFxcbiAgICBsZXQgc2luZ2xlQmFjayA9IE15SmlleGkuc2luZ2xlQmFja3x8ZmFsc2U7IC8v5ZCK5q+b5qih5byP44CC5Y2V5Liq57uT5p6c55u05o6l6L+U5Zue77yM5YGc5q2i5ZCO6Z2i55qEXFxcXFxcXFxuICAgIGxldCBpZ25vcmVfbXggPSBNeUppZXhpLmlnbm9yZV9teHx8ZmFsc2U7IC8v5b+955Wl5YWN5ZeFLOWXheaOouS8mOWFiOaooeW8j+S9v+eUqFxcXFxcXFxcbiAgICBsZXQgdXNlX214ID0gIShNeUppZXhpLmF1dG9Nb2RlID09PSAn5ZeF5o6i5LyY5YWIJyAmJiBNeUppZXhpLmlnbm9yZV9teCk7IC8vIOWPquimgeS4jeaYr+WFjeWXheS8mOWFiOaooeW8j+S4i+eahOW/veeVpeWFjeWXhSzpg73kvb/nlKjlhY3ll4VcXFxcXFxcXG4gICAgbGV0IGRtUGF0aCA9ICdoaWtlcjovL2ZpbGVzL2NhY2hlL2RpYW9tYW8udHh0JzsvL+WQiuavm+aooeW8j+i/h+a7pOaWh+S7tui3r+W+hFxcXFxcXFxcbiAgICBsZXQgZG1VcmxzO1xcXFxcXFxcbiAgICB0cnkge1xcXFxcXFxcbiAgICAgICAgZG1VcmxzID0gZmV0Y2goZG1QYXRoKS50cmltKCkuc3BsaXQoJ1xcXFxcXFxcXFxcXFxcXFxuJykuZmlsdGVyKGl0PT5pdCYmIWl0LnN0YXJ0c1dpdGgoJy8vJykpO1xcXFxcXFxcbiAgICB9Y2F0Y2ggKGUpIHtcXFxcXFxcXG4gICAgICAgIGRtVXJscyA9IFtdO1xcXFxcXFxcbiAgICB9XFxcXFxcXFxuICAgIGZ1bmN0aW9uIGhhc0RtKHZpZGVvVXJsLGRtVXJscyl7Ly/mkq3mlL7lnLDlnYDmmK/lkKbkuLrlkIrmr5vop4bpopFcXFxcXFxcXG4gICAgICAgIGlmKGRtVXJscy5sZW5ndGg8MSl7XFxcXFxcXFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICBmb3IobGV0IGRtVXJsIG9mIGRtVXJscyl7XFxcXFxcXFxuICAgICAgICAgICAgaWYoKG5ldyBSZWdFeHAoZG1VcmwpKS50ZXN0KHZpZGVvVXJsKSl7Ly/mkq3mlL7lnLDlnYDljIXlkKvlkIrmr5vmoIflv5fnmoTlnLDlnYBcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcXFxcXFxcXG4gICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICByZXR1cm4gZmFsc2VcXFxcXFxcXG4gICAgfVxcXFxcXFxcblxcXFxcXFxcbiAgICBmdW5jdGlvbiB1bmlxdWUyKGFycmF5KXsvL+WOu+mHjeWHveaVsFxcXFxcXFxcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChhcnJheSkpO1xcXFxcXFxcbiAgICB9XFxcXFxcXFxuICAgIGZ1bmN0aW9uIEFyclNldChBcnIsIGlkKSB7Ly/lr7nosaHmlbDnu4Tljrvph41cXFxcXFxcXG4gICAgICAgIHZhciBvYmogPSB7fTtcXFxcXFxcXG4gICAgICAgIGNvbnN0IGFycmF5cyA9IEFyci5yZWR1Y2UoKHNldEFyciwgaXRlbSkgPT4ge1xcXFxcXFxcbiAgICAgICAgICAgIG9ialtpdGVtW2lkXV0gPyAnJyA6IG9ialtpdGVtW2lkXV0gPSB0cnVlICYmIHNldEFyci5wdXNoKGl0ZW0pO1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiBzZXRBcnI7XFxcXFxcXFxuICAgICAgICB9LCBbXSk7XFxcXFxcXFxuICAgICAgICByZXR1cm4gYXJyYXlzO1xcXFxcXFxcbiAgICB9XFxcXFxcXFxuICAgIGZ1bmN0aW9uIHNvcnRCeUtleShhcnJheSwga2V5LCBvcmRlcikgey8v5a+56LGh5pWw57uE5oyJ5p+Q5Liq6ZSu5YC85o6S5bqPXFxcXFxcXFxuICAgICAgICByZXR1cm4gYXJyYXkuc29ydChmdW5jdGlvbihhLCBiKSB7XFxcXFxcXFxuICAgICAgICAgICAgdmFyIHggPSBwYXJzZUludChhW2tleV0ubWF0Y2goLyhcXFxcXFxcXFxcXFxcXFxcZCspLylbMV0pOy8v5L+u5aSN5aSn5LqOMTDlh7rpl67pophcXFxcXFxcXG4gICAgICAgICAgICB2YXIgeSA9IHBhcnNlSW50KGJba2V5XS5tYXRjaCgvKFxcXFxcXFxcXFxcXFxcXFxkKykvKVsxXSk7XFxcXFxcXFxuICAgICAgICAgICAgLy8gbG9nKCd4OicreCtcXFxcXFxcXFxcXFxcXFwiLHk6XFxcXFxcXFxcXFxcXFxcIit5KTtcXFxcXFxcXG4gICAgICAgICAgICBpZiAob3JkZXIpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICgoeCA8IHkpID8gLTEgOiAoKHggPiB5KSA/IDEgOiAwKSlcXFxcXFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gKCh4IDwgeSkgPyAoKHggPiB5KSA/IDEgOiAwKSA6IC0xKVxcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgIH0pXFxcXFxcXFxuICAgIH1cXFxcXFxcXG4gICAgaWYgKHR5cGVvZiBQYXJzZVNbc3RyXSA9PSAnZnVuY3Rpb24nKSB7IC8vIOS4u+mFjee9ruaUvuWFjeWXheaJjeS8muinpuWPkSjkuI3lpKrlj4vlpb0s6Lq65bmz5LiN5oOz5LyY5YyWKVxcXFxcXFxcbiAgICAgICAgaWYoL+mAmuWFjS8udGVzdChzdHIpKXtcXFxcXFxcXG4gICAgICAgICAgICByZXR1cm4gUGFyc2VTW3N0cl0odmlwVXJsLHRpbWVvdXQpO1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgdmFyIHVybDtcXFxcXFxcXG4gICAgICAgIHZhciB0YXNrID0gZnVuY3Rpb24ob2JqKSB7XFxcXFxcXFxuICAgICAgICAgICAgZXZhbCgndmFyIGNvbmZpZ19kcCA9JyArIGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpKTtcXFxcXFxcXG4gICAgICAgICAgICBldmFsKGZldGNoKGNvbmZpZ19kcC5jaikpO1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2Uob2JqLnZpcFVybCxvYmoubmFtZSxvYmoudGltZW91dCk7XFxcXFxcXFxuICAgICAgICB9O1xcXFxcXFxcbiAgICAgICAgbGV0IHQgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xcXFxcXFxcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXh0cmEucGxheVVybExpc3QpICYmIGV4dHJhLnBsYXlVcmxMaXN0Lmxlbmd0aCA+IDApIHtcXFxcXFxcXG4gICAgICAgICAgICBleHRyYS5uYW1lTGlzdCA9IHVuaXF1ZTIoZXh0cmEubmFtZUxpc3QpO1xcXFxcXFxcbiAgICAgICAgICAgIGV4dHJhLnBsYXlVcmxMaXN0ID0gdW5pcXVlMihleHRyYS5wbGF5VXJsTGlzdCk7XFxcXFxcXFxuICAgICAgICB9ZWxzZXtcXFxcXFxcXG4gICAgICAgICAgICBleHRyYS5uYW1lTGlzdCA9IFtdO1xcXFxcXFxcbiAgICAgICAgICAgIGV4dHJhLnBsYXlVcmxMaXN0ID0gW107XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICBmdW5jdGlvbiBnZXRNeVVybHModXJscyl7XFxcXFxcXFxuICAgICAgICAgICAgcmV0dXJuIHVybHMubWFwKChpdCkgPT4ge1xcXFxcXFxcbiAgICAgICAgICAgICAgICBsZXQgdHVybCA9IGl0LnNwbGl0KCc7JylbMF07XFxcXFxcXFxuICAgICAgICAgICAgICAgIGlmIChpdC5pbmNsdWRlcyhcXFxcXFxcXFxcXFxcXFwiI2lzVmlkZW89dHJ1ZSNcXFxcXFxcXFxcXFxcXFwiKSAmJiAhdHVybC5pbmNsdWRlcyhcXFxcXFxcXFxcXFxcXFwiI2lzVmlkZW89dHJ1ZSNcXFxcXFxcXFxcXFxcXFwiKSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgdHVybCArPSBcXFxcXFxcXFxcXFxcXFwiI2lzVmlkZW89dHJ1ZSNcXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgIHJldHVybiB0dXJsXFxcXFxcXFxuICAgICAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuXFxcXFxcXFxuICAgICAgICBmdW5jdGlvbiBnZXRNeUhlYWRlcnModXJscyl7XFxcXFxcXFxuICAgICAgICAgICAgcmV0dXJuIHVybHMubWFwKChpdCkgPT4ge1xcXFxcXFxcbiAgICAgICAgICAgICAgICBpZiAoIS87Ly50ZXN0KGl0KSB8fCBpdC5zcGxpdCgnOycpLmxlbmd0aCA8IDIpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7fVxcXFxcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhlYWQgPSBpdC5zcGxpdCgnOycpWzFdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEvQC8udGVzdChoZWFkKSB8fCAhL3t8fS8udGVzdChoZWFkKSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7fVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgaGVhZCA9IGhlYWQuc3BsaXQoXFxcXFxcXFxcXFxcXFxcIntcXFxcXFxcXFxcXFxcXFwiKVsxXS5zcGxpdChcXFxcXFxcXFxcXFxcXFwifVxcXFxcXFxcXFxcXFxcXCIpWzBdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgLy9oZWFkID0gaGVhZC5yZXBsYWNlKC97fH0vZywnJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBoZWFkID0gaGVhZC5zcGxpdCgnJiYnKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBvYmogPSB7fTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgaW4gaGVhZCkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSBoZWFkW2ldLnNwbGl0KCdAJylbMF07XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gaGVhZFtpXS5zcGxpdCgnQCcpWzFdLnJlcGxhY2UoLzsvLCAn77yb77ybJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmpcXFxcXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgIH0pO1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcblxcXFxcXFxcbiAgICAgICAgZnVuY3Rpb24gZ2V0TXlQbGF5VXJsTGlzdCgpe1xcXFxcXFxcbiAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkoZXh0cmEucGxheVVybExpc3QpKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIGV4dHJhLnBsYXlVcmxMaXN0Lm1hcChpdD0+J3ZpZGVvOi8vJytpdC5yZXBsYWNlKCc/dXJsPScsJz9pZD0nK3QrJyZ1cmw9JykucmVwbGFjZSgnP3Y9JywnP2lkPScrdCsnJnY9JykpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gZXh0cmEucGxheVVybExpc3QubWFwKGl0PT4ndmlkZW86Ly8nK2l0KTtcXFxcXFxcXG4gICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgcmV0dXJuIFtdXFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuXFxcXFxcXFxuXFxcXFxcXFxuICAgICAgICBpZighd2l0aEJhdGNoT3JkZXJ8fHN0clRpdGxlKSB7Ly/kuI3lvIDlpJrnur/ot6/pobrluo/kvJjlhYjmiJbogIXmjIflrprkuobop6PmnpBcXFxcXFxcXG4gICAgICAgICAgICB1cmwgPSBQYXJzZVNbc3RyXSh2aXBVcmwsdGltZW91dCk7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICBlbHNley8v5byA5LqG5aSa57q/6Lev6aG65bqP5LyY5YWI5omn6KGM5YWN5ZeF5aSa5Lu75YqhXFxcXFxcXFxuICAgICAgICAgICAgaWYodHlwZW9mIFBhcnNlU1tzdHJdID09ICdmdW5jdGlvbicmJiEv6YCa5YWNLy50ZXN0KFBhcnNlU1tzdHJdLnRvU3RyaW5nKCkpKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcGFyc2VzLnVuc2hpZnQoe25hbWU6c3RyfSk7IC8v5oqK5Li76YWN572u55qE5YWN5ZeF5o6i5Yqg5YWl5Yiw5aSa5Lu75Yqh5YiX6KGoXFxcXFxcXFxuICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgIHBhcnNlcyA9IEFyclNldChwYXJzZXMsJ25hbWUnKTsgLy/ljrvph41cXFxcXFxcXG4gICAgICAgICAgICBpZih1c2VfbXgpIHsgLy8g5aaC5p6c5L2/55So5YWN5ZeFLOWFiOWkmuS7u+WKoei3keWFjeWXhVxcXFxcXFxcbiAgICAgICAgICAgICAgICB2YXIgY291bnQgPSBwYXJzZXMubGVuZ3RoOyAvL+iuvue9ruS7u+WKoeaVsOmHj1xcXFxcXFxcbiAgICAgICAgICAgICAgICBsb2coJ+mtlOaWreW8gOWQr+WkmuS7u+WKoeino+aekCzku7vliqHmlbDph486JyArIGNvdW50KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgbG9nKCfop6PmnpDliJfooag6JyArIEpTT04uc3RyaW5naWZ5KHBhcnNlcykpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB2YXIgcGFyc2VSZXQgPSBbXTsgLy/op6PmnpDnu5PmnpzliJfooahcXFxcXFxcXG4gICAgICAgICAgICAgICAgbGV0IHRhc2tzID0gcGFyc2VzLm1hcCgoaXQsIGlkZXgpID0+IHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuYzogdGFzayxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbToge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdC5uYW1lLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBydWxlOml0LnJ1bGUsXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpcFVybDogdmlwVXJsLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OiB0aW1lb3V0XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXFxcXFxcXFxcXFxcXFxcInRhc2tcXFxcXFxcXFxcXFxcXFwiICsgaWRleFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgc2hvd0xvYWRpbmcoXFxcXFxcXFxcXFxcXFxcIumtlOaWreW5tuWPkeino+aekOS4re+8jOWJqeS9meino+aekDpcXFxcXFxcXFxcXFxcXFwiICsgY291bnQpO1xcXFxcXFxcblxcXFxcXFxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc0RtKHJldCkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXQpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc0RtKHJldC5zcGxpdCgnIycpWzBdLnNwbGl0KCc7JylbMF0sIGRtVXJscylcXFxcXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxcXFxcblxcXFxcXFxcbiAgICAgICAgICAgICAgICBiZSh0YXNrcywge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24gKG9iaiwgaWQsIGVycm9yLCByZXQpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2coXFxcXFxcXFxcXFxcXFxcIuebkeWQrOWIsOS7u+WKoVxcXFxcXFxcXFxcXFxcXCIgKyBpZCArICflt7Lnu5PmnZ8sZXJyb3I6JyArIGVycm9yICsgJyxyZXQ6JyArIHJldCk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gcmV0IHx8ICcnO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlUmV0LnB1c2goe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrOiBpZCxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0OiByZXQsXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRhc2tzLmZpbHRlcihpdCA9PiBpdC5pZCA9PT0gaWQpWzBdLnBhcmFtLm5hbWVcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcXFxcXG5cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2luZ2xlQmFjaykgey8v5ZCK5q+b5qih5byP5byA5aeL55qE6K+dLOWIpOaWrXJldOacieaViOaAp1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coJ+S7u+WKoScgKyBpZCArICfnu5PmnpzmmK/lkIrmr5s/JyArIGlzRG0ocmV0KSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNEbShyZXQpICYmIFBhcnNlUy5pc1ZpZGVvKHJldC5zcGxpdCgnIycpWzBdLnNwbGl0KCc7JylbMF0pKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlTG9hZGluZygpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCflkIrmr5vmqKHlvI/kuK3mlq3op6PmnpDlubbov5Tlm57op4bpopEnICsgcmV0KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnYnJlYWsnXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgLT0gMTsgLy/lrozmiJDkuobku7vliqHvvIzku7vliqHmlbDph48tMVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKG9iaik7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID4gMCkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93TG9hZGluZyhcXFxcXFxcXFxcXFxcXFwi6a2U5pat5bm25Y+R6Kej5p6Q5Lit77yM5Ymp5L2Z6Kej5p6QOlxcXFxcXFxcXFxcXFxcXCIgKyBjb3VudClcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlTG9hZGluZygpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBwYXJhbTogey8v5Lyg5Yiw55uR5ZCs5Ye95pWw55qEb2Jq5Y+C5pWw6YeMXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaGk6IFxcXFxcXFxcXFxcXFxcXCJjY2NcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICB9KTsvL+aJp+ihjOWkmuS7u+WKoVxcXFxcXFxcbiAgICAgICAgICAgICAgICAvLyBsZXQgdmFsdWFibGUgPSBwYXJzZVJldC5maWx0ZXIoaXQ9Pi9tM3U4fG1wNC8udGVzdChpdC5yZXQpKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgbG9nKFxcXFxcXFxcXFxcXFxcXCLlpJrku7vliqHmiafooYznu5PmnpzmlbA6XFxcXFxcXFxcXFxcXFxcIiArIHBhcnNlUmV0Lmxlbmd0aCk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGxldCB2YWx1YWJsZSA9IFtdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBwYXJzZVJldC5mb3JFYWNoKChpdCk9PntcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGlmKGl0LnJldCl7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoL25hbWVzLy50ZXN0KGl0LnJldCkmJi91cmxzLy50ZXN0KGl0LnJldCkpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coJ+WwneivleiBmuWQiOino+aekOino+WMhTonK2l0LnJldCk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmV0cyA9IEpTT04ucGFyc2UoaXQucmV0LnJlcGxhY2UoLyNpc1ZpZGVvPXRydWUjL2csJycpKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHMubmFtZXMuZm9yRWFjaCgobmFtZSxpZGV4KT0+e1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVhYmxlLnB1c2goe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOm5hbWUsXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldDpyZXRzLnVybHNbaWRleF0sXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2s6aXQudGFzayxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Y2F0Y2ggKGUpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygn6Kej5YyF5Y+R55Sf6ZSZ6K+vOicrZS5tZXNzYWdlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKFBhcnNlUy5pc1ZpZGVvKGl0LnJldC5zcGxpdCgnIycpWzBdLnNwbGl0KCc7JylbMF0pKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWFibGUucHVzaChpdCk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoaXQucmV0LnN0YXJ0c1dpdGgoJ3ZpZGVvOi8vJykpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1YWJsZS5wdXNoKGl0KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAvLyBsZXQgdmFsdWFibGUgPSBwYXJzZVJldC5maWx0ZXIoaXQgPT4gaXQucmV0ICYmIFBhcnNlUy5pc1ZpZGVvKGl0LnJldC5zcGxpdCgnIycpWzBdLnNwbGl0KCc7JylbMF0pKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgdmFsdWFibGUgPSB2YWx1YWJsZS5maWx0ZXIoaXQgPT4gIWlzRG0oaXQucmV0KSk7Ly/ov4fmu6TlkIrmr5vop4bpopFcXFxcXFxcXG4gICAgICAgICAgICAgICAgbG9nKCflpJrku7vliqHpobrluo/miafooYzmnInmlYjnu5Pmnpw6JyArIEpTT04uc3RyaW5naWZ5KHZhbHVhYmxlKSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGlmICh2YWx1YWJsZS5sZW5ndGggPiAxKSB7Ly/lpJrnur/ot69cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHZhbHVhYmxlID0gc29ydEJ5S2V5KHZhbHVhYmxlLCAndGFzaycsIHRydWUpOy8v5Y2H5bqP5o6S5YiXXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgdXJscyA9IHZhbHVhYmxlLm1hcChpdCA9PiBpdC5yZXQpOy8v5Y+W5Ye66ZO+5o6lLOe8k+WtmOWJjeeahFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdldFZhcignZHAuY2FjaGVWaWRlbycsICd0cnVlJykgPT09ICd0cnVlJyAmJiBwYXJzZUludChnZXRBcHBWZXJzaW9uKCkpID49IDIyNTUpIHsvL+W8gOWni+e8k+WtmFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhcXFxcXFxcXFxcXFxcXFwi5bCK5pWs55qE6a2U5pat55So5oi377yM6KeG6aKR57yT5a2Y5bey5ZCv55So77yM6K+35bC95oOF5Lqr5Y+X55yL5Ymn5pe25YWJXFxcXFxcXFxcXFxcXFxcIik7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZpZGVvc0NhY2hlID0gdXJscy5tYXAoKGl0KSA9PiB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBoZWFkZXJzID0ge307XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdC5zcGxpdChcXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcXFxcXFxcXCIpLmxlbmd0aCA+IDEpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBoZWFkID0gaXQuc3BsaXQoJzsnKVsxXTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvQC8udGVzdChoZWFkKSAmJiAve3x9Ly50ZXN0KGhlYWQpKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9oZWFkID0gaGVhZC5yZXBsYWNlKC97fH0vZywnJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZCA9IGhlYWQuc3BsaXQoXFxcXFxcXFxcXFxcXFxcIntcXFxcXFxcXFxcXFxcXFwiKVsxXS5zcGxpdChcXFxcXFxcXFxcXFxcXFwifVxcXFxcXFxcXFxcXFxcXCIpWzBdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgPSBoZWFkLnNwbGl0KCcmJicpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgaW4gaGVhZCkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5ID0gaGVhZFtpXS5zcGxpdCgnQCcpWzBdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBoZWFkW2ldLnNwbGl0KCdAJylbMV0ucmVwbGFjZSgvOy8sICfvvJvvvJsnKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1trZXldID0gdmFsdWU7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGl0LnNwbGl0KFxcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxcXFxcXFxcIilbMF0uc3BsaXQoXFxcXFxcXFxcXFxcXFxcIiNcXFxcXFxcXFxcXFxcXFwiKVswXSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGJhdGNoQ2FjaGVNM3U4KHZpZGVvc0NhY2hlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5tYXAoKGl0LCBpZCkgPT4ge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXh0cmEgPSBcXFxcXFxcXFxcXFxcXFwiXFxcXFxcXFxcXFxcXFxcIjtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVybHNbaWRdLnNwbGl0KFxcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxcXFxcXFxcIikubGVuZ3RoID4gMSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBcXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcXFxcXFxcXCIgKyB1cmxzW2lkXS5zcGxpdChcXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcXFxcXFxcXCIpWzFdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVybHNbaWRdLnNwbGl0KFxcXFxcXFxcXFxcXFxcXCLimIVcXFxcXFxcXFxcXFxcXFwiKS5sZW5ndGggPiAxKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IFxcXFxcXFxcXFxcXFxcXCLimIVcXFxcXFxcXFxcXFxcXFwiICsgdXJsc1tpZF0uc3BsaXQoXFxcXFxcXFxcXFxcXFxcIuKYhVxcXFxcXFxcXFxcXFxcXCIpWzFdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdCArIFxcXFxcXFxcXFxcXFxcXCJcXFxcXFxcXFxcXFxcXFwiICE9PSBcXFxcXFxcXFxcXFxcXFwibnVsbFxcXFxcXFxcXFxcXFxcXCIpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdCArIGV4dHJhXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsc1tpZF1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybHMgPSBkYXRhXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAvLyBsb2coJ+aOkuW6j+WujOavleWQjue7k+aenDonK0pTT04uc3RyaW5naWZ5KHZhbHVhYmxlKSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgbmFtZXMgPSB2YWx1YWJsZS5tYXAoaXQgPT4gaXQubmFtZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgaGVhZGVycyA9IGdldE15SGVhZGVycyh1cmxzKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybHMgPSBnZXRNeVVybHModXJscyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBpZihNeUppZXhpLmF1dG9Nb2RlID09PSAn5ZeF5o6i5LyY5YWIJyl7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJscyA9IHVybHMuY29uY2F0KGdldE15UGxheVVybExpc3QoKSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMgPSBuYW1lcy5jb25jYXQoZXh0cmEubmFtZUxpc3QpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhlYWRlcnMgPSBoZWFkZXJzLmNvbmNhdChleHRyYS5uYW1lTGlzdC5tYXAoKGl0KT0+e3JldHVybiB7fX0pKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7dXJsczogdXJscywgaGVhZGVyczogaGVhZGVycywgbmFtZXM6IG5hbWVzfSk7XFxcXFxcXFxuXFxcXFxcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWFibGUubGVuZ3RoID09PSAwKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoZXh0cmEubmFtZUxpc3QubGVuZ3RoIDwgMSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVMb2FkaW5nKCk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+iKreavlFHkuoYs5aSa5Lu75Yqh5YWN5ZeF6Kej5p6Q5YWo5Yab6KaG5rKh5bm25LiU5rKh5pyJ5Y+v55So55qEanNvbnx4Neino+aekOS6hidcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHNob3dMb2FkaW5nKFxcXFxcXFxcXFxcXFxcXCLprZTmlq3lpJrku7vliqHlhY3ll4XlpLHotKUs5bCd6K+VanNvbnx4NVxcXFxcXFxcXFxcXFxcXCIpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgLy/mjpLpmaTnrKzkuIDkuKpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBleHRyYTIgPSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZUxpc3Q6IGV4dHJhLm5hbWVMaXN0LFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYXlVcmxMaXN0OiBleHRyYS5wbGF5VXJsTGlzdC5zbGljZSgxKSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGlmKE15SmlleGkuYXV0b01vZGUgPT09ICfll4XmjqLkvJjlhYgnKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxzOiBnZXRNeVBsYXlVcmxMaXN0KCksXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzOiBleHRyYS5uYW1lTGlzdFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlUy5kZWZhdWx0UGFyc2VXZWIgPyBQYXJzZVMuZGVmYXVsdFBhcnNlV2ViKGV4dHJhLnBsYXlVcmxMaXN0WzBdLCB0aW1lb3V0LCBleHRyYTIpIDogZXh0cmEucGxheVVybExpc3RbMF07XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAvLyBsb2coZXh0cmEucGxheVVybExpc3RbMF0pO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgLy8gbG9nKGV4dHJhMik7XFxcXFxcXFxuXFxcXFxcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAvLyDlhY3ll4XlkI7lj6rmnInkuIDkuKrnu5Pmnpws5ZeF5o6i5LyY5YWI6Ieq5Yqo5ou8eDXlkoxqc29uLCDpobrluo/kvJjlhYjoh6rliqjov5Tlm57kuIDkuKrmkq3mlL7pk77mjqVcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGlmKE15SmlleGkuYXV0b01vZGUgPT09ICfll4XmjqLkvJjlhYgnKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybHMgPSB2YWx1YWJsZS5tYXAoaXQgPT4gaXQucmV0KTsvL+WPluWHuumTvuaOpSznvJPlrZjliY3nmoRcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmFtZXMgPSB2YWx1YWJsZS5tYXAoaXQgPT4gaXQubmFtZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhlYWRlcnMgPSBnZXRNeUhlYWRlcnModXJscyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJscyA9IGdldE15VXJscyh1cmxzKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lcyA9IG5hbWVzLmNvbmNhdChleHRyYS5uYW1lTGlzdCk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJscyA9IHVybHMuY29uY2F0KGdldE15UGxheVVybExpc3QoKSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGVhZGVycyA9IGhlYWRlcnMuY29uY2F0KGV4dHJhLm5hbWVMaXN0Lm1hcCgoaXQpPT57cmV0dXJuIHt9fSkpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybHM6IHVybHMsXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzOiBuYW1lcyxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczpoZWFkZXJzXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWFibGVbMF0ucmV0XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICB9ZWxzZXsgLy8g57qvdmlkZW86Ly/liIbmlK9cXFxcXFxcXG4gICAgICAgICAgICAgICAgaWYgKGV4dHJhLm5hbWVMaXN0Lmxlbmd0aCA8IDEpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGhpZGVMb2FkaW5nKCk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6Iqt5q+UUeS6hizlpJrku7vliqHlhY3ll4Xop6PmnpDlhajlhpvopobmsqHlubbkuJTmsqHmnInlj6/nlKjnmoRqc29ufHg16Kej5p6Q5LqGJ1xcXFxcXFxcbiAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgIGxvZyhcXFxcXFxcXFxcXFxcXFwi6a2U5pat5aSa5Lu75Yqh5YWN5ZeF5aSx6LSlLOWwneivlWpzb258eDVcXFxcXFxcXFxcXFxcXFwiKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IGdldE15UGxheVVybExpc3QoKSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVzOiBleHRyYS5uYW1lTGlzdFxcXFxcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcXFxcXG4gICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICBpZigvXmhpa2VyOnxedG9hc3Q6fF5ydWxlOnxeeDVSdWxlOnxed2ViUnVsZTp8XnNlbGVjdC8udGVzdCh1cmwpKXtcXFxcXFxcXG4gICAgICAgICAgICByZXR1cm4gdXJsO1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgaWYoIXVybCYmIS9eaHR0cC8udGVzdCh2aXBVcmwpKXtcXFxcXFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6a2U5pat6Kej5p6Q5aSx6LSlPicrdmlwVXJsXFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICAvLyBsb2codmlwVXJsKyflhY3ll4XmjqLnu5Pmnpw6Jyt1cmwpO1xcXFxcXFxcbiAgICAgICAgaWYgKC9eXFxcXFxcXFxcXFxcXFxcXC8vLnRlc3QodXJsKSkge1xcXFxcXFxcbiAgICAgICAgICAgIHVybCA9ICdodHRwczonICsgdXJsXFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICAvLyDprZTmlq3lhY3ll4XmiKrlj5ZcXFxcXFxcXG4gICAgICAgIC8vIGlmICgvPWh0dHAvLnRlc3QodXJsKSkge1xcXFxcXFxcbiAgICAgICAgLy8gICAgIHVybCA9IC8mdXJsPS8udGVzdCh1cmwpID8gdXJsIDogJ2h0dHAnICsgZGVjb2RlVVJJQ29tcG9uZW50KHVybC5zcGxpdCgnPWh0dHAnKVsxXSk7XFxcXFxcXFxuICAgICAgICAvLyB9XFxcXFxcXFxuICAgICAgICAvKmlmKHVybC5tYXRjaCgvbWd0di5jb20vZyk9PSdtZ3R2LmNvbScpe1xcXFxcXFxcbiAgICAgICAgICAgIHVybCA9IHVybCArICc7e1JlZmVyZXJAaHR0cHM6Ly93d3cubWd0di5jb219JztcXFxcXFxcXG4gICAgICAgIH0gZWxzZSAqL1xcXFxcXFxcbiAgICAgICAgaWYgKC9cXFxcXFxcXFxcXFxcXFxcLmZsdi8udGVzdCh1cmwpJiYhL1VzZXItQWdlbnQvLnRlc3QodXJsKSkge1xcXFxcXFxcbiAgICAgICAgICAgIHVybCA9IHVybCArICc7e1VzZXItQWdlbnRAYXBwJiZSZWZlcmVyQCcgKyB2aXBVcmwgKyAnfSc7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICBpZiAodXJsID09PSAnJyB8fCB1cmwgPT09IHZpcFVybCkge1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiB2aXBVcmw7XFxcXFxcXFxuICAgICAgICB9IGVsc2UgaWYoIS8jaXNWaWRlbz10cnVlIy8udGVzdCh1cmwpKXtcXFxcXFxcXG4gICAgICAgICAgICByZXR1cm4gdXJsICsgJyNpc1ZpZGVvPXRydWUjJztcXFxcXFxcXG4gICAgICAgIH1lbHNle1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiB1cmxcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgUGFyc2VTW3N0cl0gPT0gJ3N0cmluZycmJlBhcnNlU1tzdHJdLm1hdGNoKC9odHRwLio/PS8pKSB7XFxcXFxcXFxuICAgICAgICAvLyBsb2coXFxcXFxcXFxcXFxcXFxcIuaWreaPkuW8gOWni+mAmueUqOaJp+ihjOWFjeWXhSBkZWZhdWx0UGFyc2VXZWI6XFxcXFxcXFxcXFxcXFxcIit0aW1lb3V0KTtcXFxcXFxcXG4gICAgICAgIC8vbG9nKFxcXFxcXFxcXFxcXFxcXCLpu5jorqR4NVxcXFxcXFxcXFxcXFxcXCIrUGFyc2VTLmRlZmF1bHRQYXJzZVdlYik7XFxcXFxcXFxuICAgICAgICBpZih3aXRoQmF0Y2gpeyAvLyDpgJ/luqbkvJjlhYhcXFxcXFxcXG4gICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KGV4dHJhLnBsYXlVcmxMaXN0KSYmZXh0cmEucGxheVVybExpc3QubGVuZ3RoPjApe1xcXFxcXFxcbiAgICAgICAgICAgICAgICBleHRyYS5wbGF5VXJsTGlzdCA9IGV4dHJhLnBsYXlVcmxMaXN0LmZpbHRlcihpdD0+aXQhPT0oUGFyc2VTW3N0cl18fHN0cikgKyB2aXBVcmwpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBsZXQgbmFtZUxpc3QgPSBleHRyYS5uYW1lTGlzdDtcXFxcXFxcXG4gICAgICAgICAgICAgICAgbmFtZUxpc3QudW5zaGlmdChzdHIpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBleHRyYS5uYW1lTGlzdD11bmlxdWUyKG5hbWVMaXN0KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgZXh0cmEucGxheVVybExpc3QgPSB1bmlxdWUyKGV4dHJhLnBsYXlVcmxMaXN0KTtcXFxcXFxcXG4gICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICB9ZWxzZXtcXFxcXFxcXG4gICAgICAgICAgICBleHRyYSA9IHt9XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYj9QYXJzZVMuZGVmYXVsdFBhcnNlV2ViKChQYXJzZVNbc3RyXXx8c3RyKSArIHZpcFVybCx0aW1lb3V0LGV4dHJhKTooUGFyc2VTW3N0cl18fHN0cikgKyB2aXBVcmw7XFxcXFxcXFxuICAgIH0gZWxzZSBpZih0eXBlb2Yoc3RyKT09PSdzdHJpbmcnJiZzdHIubGVuZ3RoPjEmJih0eXBlb2YgUGFyc2VTW3N0cl09PSd1bmRlZmluZWQnfHwhUGFyc2VTW3N0cl0pJiYhL15odHRwLy50ZXN0KHN0cikpe1xcXFxcXFxcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+ivt+WFiOi/m+ihjOaWreaPkumFjee9ruehruS/neivpeino+aekOWtmOWcqCFcXFxcXFxcXFxcXFxcXFxcbuajgOa1i+WIsOaXoOaViOeahOino+aekOmFjee9rjonK3N0cjtcXFxcXFxcXG4gICAgfWVsc2Uge1xcXFxcXFxcbiAgICAgICAgcmV0dXJuIFBhcnNlUy5kZWZhdWx0UGFyc2Uoc3RyICsgdmlwVXJsLHRpbWVvdXQpO1xcXFxcXFxcbiAgICB9XFxcXFxcXFxufVxcXFxcXFxcblxcXFxcXFxcbnZhciBwbGF5UGFyc2UgPSB7XFxcXFxcXFxuICAgIHBsYXllcl94eDogZnVuY3Rpb24oanVybCwgTGFiZWwpIHtcXFxcXFxcXG4gICAgICAgIHJldHVybiAkKGp1cmwpLmxhenlSdWxlKChrKSA9PiB7XFxcXFxcXFxuICAgICAgICAgICAgdmFyIGpzVXJsID0gSlNPTi5wYXJzZShmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKSkuY2o7XFxcXFxcXFxuICAgICAgICAgICAgdmFyIExhYmVsID0gaztcXFxcXFxcXG4gICAgICAgICAgICB2YXIgZmEgPSBbJ2xldHYnLCAncHB0dicsICdxcScsICd5b3VrdScsICdxaXlpJywgJ2lxaXlpJywgJ21ndHYnLCAnYmlsaWJpbGknLCAnc29odScsICdtaWd1JywgJ20xOTA1JywgJ3ZpcCddO1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBodG1sID0gcGFyc2VEb20ocmVxdWVzdChpbnB1dCksIExhYmVsKTtcXFxcXFxcXG4gICAgICAgICAgICBldmFsKGh0bWwucmVwbGFjZSgvcGxheWVyXy4qPz17LywgJ3BkYXRhPXsnKSk7XFxcXFxcXFxuICAgICAgICAgICAgZXZhbChmZXRjaChqc1VybCkpO1xcXFxcXFxcbiAgICAgICAgICAgIGlmIChwZGF0YS51cmwuc3Vic3RyKDAsIDgpLm1hdGNoKC9KVC4uSlQuLi8pKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHBkYXRhLnVybCA9IGJhc2U2NERlY29kZShwZGF0YS51cmwpO1xcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICBpZiAocGRhdGEudXJsLnN1YnN0cigwLCA4KS5tYXRjaCgvJS4uJS4uLykpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcGRhdGEudXJsID0gdW5lc2NhcGUocGRhdGEudXJsKTtcXFxcXFxcXG4gICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgaWYgKGZhLmluY2x1ZGVzKHBkYXRhLmZyb20pKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2UocGRhdGEudXJsKTtcXFxcXFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gcGRhdGEudXJsICsgJyNpc1ZpZGVvPXRydWUjJztcXFxcXFxcXG4gICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICB9LCBMYWJlbClcXFxcXFxcXG4gICAgfVxcXFxcXFxcbn07XFxcXFxcXFxuZnVuY3Rpb24gbXpQb3B1cCgpIHtcXFxcXFxcXG4gICAgLypcXFxcXFxcXG4gICAgaWYgKGdldFZhcihcXFxcXFxcXFxcXFxcXFwiaWprLXR4XFxcXFxcXFxcXFxcXFxcIiwgXFxcXFxcXFxcXFxcXFxcIlxcXFxcXFxcXFxcXFxcXCIpID09IFxcXFxcXFxcXFxcXFxcXCIxXFxcXFxcXFxcXFxcXFxcIikge1xcXFxcXFxcbiAgICAgICAgc2V0SXRlbShcXFxcXFxcXFxcXFxcXFwidGl4aW5nXFxcXFxcXFxcXFxcXFxcIiwgXFxcXFxcXFxcXFxcXFxcIjFcXFxcXFxcXFxcXFxcXFwiKVxcXFxcXFxcbiAgICAgICAgY2xlYXJWYXIoXFxcXFxcXFxcXFxcXFxcImlqay10eFxcXFxcXFxcXFxcXFxcXCIpXFxcXFxcXFxuICAgIH1cXFxcXFxcXG4gICAgaWYgKGdldEl0ZW0oXFxcXFxcXFxcXFxcXFxcInRpeGluZ1xcXFxcXFxcXFxcXFxcXCIsIFxcXFxcXFxcXFxcXFxcXCJcXFxcXFxcXFxcXFxcXFwiKSA9PSBcXFxcXFxcXFxcXFxcXFwiXFxcXFxcXFxcXFxcXFxcIikge1xcXFxcXFxcbiAgICAgICAgY29uZmlybSh7XFxcXFxcXFxuICAgICAgICAgICAgdGl0bGU6ICflhY3otKPlo7DmmI4nLFxcXFxcXFxcbiAgICAgICAgICAgIGNvbnRlbnQ6ICfmnKznqIvluo/kuI3mj5Dkvpvop4bpopHop6PmnpDmnI3liqFcXFxcXFxcXFxcXFxcXFxcbuaJgOacieWGheWuueWdh+S7jueUqOaIt+WIhuS6q+S4reaUtumbhlxcXFxcXFxcXFxcXFxcXFxu5LuF5L6b5rWL6K+V5ZKM5a2m5Lmg5Lqk5rWBXFxcXFxcXFxcXFxcXFxcXG5cXFxcXFxcXFxcXFxcXFxcbuehruWumuWNs+iupOWPr++8jOS4jeWGjeaPkOmGkicsXFxcXFxcXFxuICAgICAgICAgICAgY29uZmlybTogJC50b1N0cmluZygoKSA9PiB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHB1dFZhcihcXFxcXFxcXFxcXFxcXFwiaWprLXR4XFxcXFxcXFxcXFxcXFxcIiwgXFxcXFxcXFxcXFxcXFxcIjFcXFxcXFxcXFxcXFxcXFwiKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXFxcXFxcXFxcInRvYXN0Oi8v54K55Ye75LqG56Gu6K6kXFxcXFxcXFxcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFxcbiAgICAgICAgICAgIH0pXFxcXFxcXFxuICAgICAgICB9KVxcXFxcXFxcbiAgICB9XFxcXFxcXFxuICAgICAqL1xcXFxcXFxcbn1cXFxcXFxcXG4vKlxcXFxcXFxcbmlmICghZ2V0VmFyKFxcXFxcXFxcXFxcXFxcXCJ0aXhpbmdcXFxcXFxcXFxcXFxcXFwiKSkge1xcXFxcXFxcbiAgICBtelBvcHVwKCk7XFxcXFxcXFxuICAgIHB1dFZhcigndGl4aW5nJywnb2snKTtcXFxcXFxcXG59XFxcXFxcXFxuKi9cXFxcXFxcXG5mdW5jdGlvbiBzYXZlQnV0dG9uKGNvbnRlbnQsbmFtZSkge1xcXFxcXFxcbiAgICBuYW1lID0gbmFtZXx8Jyc7XFxcXFxcXFxuICAgIHZhciBkYXRhID0gY29udGVudC5zcGxpdCgn4piF4piF4piFJyk7XFxcXFxcXFxuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMikge1xcXFxcXFxcbiAgICAgICAgdmFyIF9kdCA9IHBhcnNlUGFzdGUoZGF0YVswXSk7XFxcXFxcXFxuICAgICAgICBjb250ZW50ID0gX2R0LnN1YnN0cigwLCA2KSAhPT0gJ2Vycm9yOicgPyBfZHQgOiAnJztcXFxcXFxcXG4gICAgfVxcXFxcXFxcbiAgICBkYXRhID0gY29udGVudC5zcGxpdCgn4piFJyk7XFxcXFxcXFxuICAgIHZhciB0eXBlID0gZGF0YVswXTtcXFxcXFxcXG4gICAgdmFyIGFyckxpc3QgPSBbXTtcXFxcXFxcXG4gICAgdmFyIG9iakNvZGUgPSB7fTtcXFxcXFxcXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMiAmJiBkYXRhWzBdICE9PSAn55u06ZO+Jykge1xcXFxcXFxcbiAgICAgICAgdmFyIG9iaktleSA9IGRhdGFbMV07XFxcXFxcXFxuICAgICAgICB2YXIgb2JqVmFsdWUgPSBkYXRhWzJdO1xcXFxcXFxcbiAgICAgICAgaWYgKHR5cGUgPT09ICdNeVBhcnNlUycpIHtcXFxcXFxcXG4gICAgICAgICAgICBvYmpWYWx1ZSA9IGJhc2U2NERlY29kZShvYmpWYWx1ZSk7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICBpZiAob2JqVmFsdWUuc3BsaXQoJ2Z1bmN0aW9uJykubGVuZ3RoID4gMSkge1xcXFxcXFxcbiAgICAgICAgICAgIGV2YWwoJ29ialZhbHVlPScgKyBvYmpWYWx1ZSk7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICBhcnJMaXN0LnNwbGljZSgwLCAwLCBvYmpLZXkpOyAvL+a3u+WKoOmhueebrumdnuWIoOmZpFxcXFxcXFxcbiAgICAgICAgb2JqQ29kZVtvYmpLZXldID0gb2JqVmFsdWU7XFxcXFxcXFxuXFxcXFxcXFxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ+ebtOmTvicpIHtcXFxcXFxcXG4gICAgICAgIGFyckxpc3QgPSBkYXRhO1xcXFxcXFxcbiAgICAgICAgYXJyTGlzdC5zcGxpY2UoMCwgMSk7XFxcXFxcXFxuICAgIH0gZWxzZSB7XFxcXFxcXFxuICAgICAgICBhcnJMaXN0ID0gbnVsbDtcXFxcXFxcXG4gICAgfVxcXFxcXFxcbiAgICBpZiAoYXJyTGlzdCAhPSBudWxsKSB7XFxcXFxcXFxuICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcXFxcXFxcbiAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxcXFxcXFxuICAgICAgICBBcnJheS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24odmFsKSB7XFxcXFxcXFxuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5pbmRleE9mKHZhbCk7XFxcXFxcXFxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgdGhpcy5zcGxpY2UoaW5kZXgsIDEpO1xcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgIH07XFxcXFxcXFxuICAgICAgICBpZihuYW1lKXsvL+WIoOmZpOWQjeensOWIl+ihqOWSjOS7o+eggVxcXFxcXFxcbiAgICAgICAgICAgIGpzb24udGl0bGUucmVtb3ZlKG5hbWUpO1xcXFxcXFxcbiAgICAgICAgICAgIGRlbGV0ZSBqc29uLmNvZGVzW25hbWVdO1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgYXJyTGlzdCA9IGFyckxpc3QuY29uY2F0KGpzb24udGl0bGUpO1xcXFxcXFxcbiAgICAgICAganNvbi50aXRsZSA9IEFycmF5LmZyb20obmV3IFNldChhcnJMaXN0KSk7XFxcXFxcXFxuICAgICAgICBPYmplY3QuYXNzaWduKGpzb24uY29kZXMsIG9iakNvZGUpO1xcXFxcXFxcbiAgICAgICAgaWYgKHR5cGUgPT09ICfmtYvor5UnKSB7XFxcXFxcXFxuICAgICAgICAgICAgZXZhbCgndmFyIGNvbmZpZyA9JyArIGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpKTtcXFxcXFxcXG4gICAgICAgICAgICBldmFsKGZldGNoKGNvbmZpZy5jaikpO1xcXFxcXFxcbiAgICAgICAgICAgIGlmICh0eXBlb2YgUGFyc2VTW2RhdGFbMV1dID09IFxcXFxcXFxcXFxcXFxcXCJmdW5jdGlvblxcXFxcXFxcXFxcXFxcXCIpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlU1tkYXRhWzFdXShkYXRhWzJdKTtcXFxcXFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYihQYXJzZVNbZGF0YVsxXV0gKyBkYXRhWzJdKTtcXFxcXFxcXG4gICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICB9IGVsc2Uge1xcXFxcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxcXFxcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFxcXFxcXFxcXCJ0b2FzdDovL+W3suS/neWtmOWGheWuuVxcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgIH0gZWxzZSB7XFxcXFxcXFxuICAgICAgICByZXR1cm4gXFxcXFxcXFxcXFxcXFxcInRvYXN0Oi8v5peg5rOV6K+G5Yir6L+Z5Liq5YaF5a655ZGiXFxcXFxcXFxcXFxcXFxcIlxcXFxcXFxcbiAgICB9XFxcXFxcXFxufVxcXFxcXFxcbi8vIOS7peS4i+S7o+eggeWNg+S4h+S4jeimgeaUvuWHuuadpeWQpuWImeaKpemUmVxcXFxcXFxcbmlmIChnZXRJdGVtKCd1cGRhdGVEYXRlJykgIT0gdXBkYXRlRGF0ZSkge1xcXFxcXFxcbi8vIGlmICh0cnVlKSB7XFxcXFxcXFxuICAgIC8vIOaKimZ1bmN0aW9u5Y+Y5oiQc3RyaW5nXFxcXFxcXFxuICAgIGxldCBmdW5jdGlvbkNvZGUgPSBzYXZlQnV0dG9uICsgJzsnK216UG9wdXA7XFxcXFxcXFxuICAgIC8vIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS9wbHNjUGFyc2UuaHRtbCcsIGZldGNoKF9teVNldC5ja0xpbmsgKyAncGxzY1BhcnNlLmh0bWwnKSk7XFxcXFxcXFxuICAgIHNldEl0ZW0oJ215RnVuY3Rpb24nLCBmdW5jdGlvbkNvZGUpO1xcXFxcXFxcbiAgICBzZXRJdGVtKCd1cGRhdGVEYXRlJywgdXBkYXRlRGF0ZSk7XFxcXFxcXFxufVxcXFxcXFxcbnZhciBiakl0ZW0gPSB7XFxcXFxcXFxuICAgIGhmUGx1Z2luOiBmdW5jdGlvbihwYXJzZVJvdXRlKSB7XFxcXFxcXFxuICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcXFxcXFxcbiAgICAgICAgICAgIGlmIChmaWxlRXhpc3QoaykpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgdmFyIGNqY2FjaGUgPSBnZXRWYXIoJ2NqQ2FjaGUnKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChrKSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGpzb24uc2V0dGluZ3MuY2ogPSBjamNhY2hlO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoaywgJC5zdHJpbmdpZnkoanNvbikpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB2YXIgb2xkUm91dGUgPSBnZXRWYXIoJ29sZENvbmZpZycpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB2YXIgb2xkQ29uZmlnID0ganNvbi5zZXR0aW5ncztcXFxcXFxcXG4gICAgICAgICAgICAgICAgb2xkQ29uZmlnLmNqID0gY2pjYWNoZTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKG9sZFJvdXRlLCAkLnN0cmluZ2lmeShvbGRDb25maWcpKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5oGi5aSN5oiQ5YqfJztcXFxcXFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6ZyA6KaB5YWI5ouJ5Y+W5YiX6KGoJ1xcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgIH0sIHBhcnNlUm91dGUpXFxcXFxcXFxuICAgIH0sXFxcXFxcXFxuICAgIHB1bGxDb2RlOiBmdW5jdGlvbihrKSB7XFxcXFxcXFxuICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBwdWxsTW9kZSA9IGtbMF07XFxcXFxcXFxuICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBrWzFdO1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBwYXJzZUZpbGUgPSBmZXRjaChwYXJzZVJvdXRlKTtcXFxcXFxcXG4gICAgICAgICAgICBpZiAoIXBhcnNlRmlsZSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSBmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgc2V0dGluZ3MgPSAhc2V0dGluZ3MgPyB7fSA6IEpTT04ucGFyc2Uoc2V0dGluZ3MpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB2YXIganNvbiA9IHt9O1xcXFxcXFxcbiAgICAgICAgICAgICAgICBqc29uLnNldHRpbmdzID0gc2V0dGluZ3M7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGpzb24udGl0bGUgPSBbXTtcXFxcXFxcXG4gICAgICAgICAgICAgICAganNvbi5jb2RlcyA9IHt9O1xcXFxcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgcGFyc2VGaWxlKTtcXFxcXFxcXG4gICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgdmFyIHBhcnNlVGl0bGUgPSBbXTtcXFxcXFxcXG4gICAgICAgICAgICB2YXIgcGFyc2VDb2RlPXt9O1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBjakxpbmsgPSBnZXRWYXIoJ3BsdWdpbkxpbmsnKTtcXFxcXFxcXG4gICAgICAgICAgICB0cnkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICBpZigvQGJhc2U2NDpcXFxcXFxcXFxcXFxcXFxcL1xcXFxcXFxcXFxcXFxcXFwvLy50ZXN0KGNqTGluaykpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgZXZhbChiYXNlNjREZWNvZGUoY2pMaW5rLnNwbGl0KCdAYmFzZTY0Oi8vJylbMV0pKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoL+aPkuS7tuWQjS8udGVzdChjakxpbmspKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCByZWFsTGluayA9IGNqTGluay5zcGxpdCgn5o+S5Lu25ZCNJylbMF0ucmVwbGFjZSgvW1xcXFxcXFxcXFxcXFxcXFxzXS9nLCcnKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGxvZygn6Kej5p6Q5LqR5Ymq5YiH5p2/OicrcmVhbExpbmspO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHlQYXN0ZSA9IHBhcnNlUGFzdGUocmVhbExpbmspO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYoL0BiYXNlNjQ6XFxcXFxcXFxcXFxcXFxcXC9cXFxcXFxcXFxcXFxcXFxcLy8udGVzdCh5UGFzdGUpKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKGJhc2U2NERlY29kZSh5UGFzdGUuc3BsaXQoJ0BiYXNlNjQ6Ly8nKVsxXSkpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgUGFyc2VTPT09J3VuZGVmaW5lZCcpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aLieWPluS4qum4oeavm+aPkuS7tizph4zpnaLov55QYXJzZVPlr7nosaHpg73msqHmnIkhJ1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoIChlKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/puKHmr5vmj5Lku7bmiafooYzmiqXplJk6XFxcXFxcXFxcXFxcXFxcXG4nK2UubWVzc2FnZTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pyq6IO96K+G5Yir5LqR5Ymq5YiH5p2/5Lit55qE5YaF5a65OlxcXFxcXFxcXFxcXFxcXFxuJyt5UGFzdGUuc3Vic3RyaW5nKDAsMTAwKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjakxpbmsgPT09ICdR56WeJykge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGppZXhpID0gZmV0Y2goJ2hpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0Jykuc3BsaXQoJ1xcXFxcXFxcXFxcXFxcXFxuJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgaW4gamlleGkpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGU9amlleGlbaV0uc3BsaXQoJyYmJylbMF07XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGU9amlleGlbaV0uc3BsaXQoJyYmJylbMV07XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVbdGl0bGVdPWNvZGU7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgLy8gfWVsc2UgaWYoL14jW2EtekEtWjAtOV17MiwxMH0kLy50ZXN0KGNqTGluaykpey8v56aP5Yip5Y+j5LukMuWIsDEw5L2NXFxcXFxcXFxuICAgICAgICAgICAgICAgIGVsc2UgaWYoL14jW1xcXFxcXFxcXFxcXFxcXFxTXXsyLDEwfSQvLnRlc3QoY2pMaW5rKSl7Ly/npo/liKnlj6Pku6Qy5YiwMTDkvY3ku7vmhI/pnZ7nqbrlrZfnrKbkuLJcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHt0YXNrQ2FsbCwgdGFza1J1bix0YXNrUmVxfSA9ICQucmVxdWlyZShcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3Rhc2tDYWxsP3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcXFxcXFxcXFxcXFxcIik7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAvLyBsb2coJ+W8gOWni+aJp+ihjOS7u+WKoeS7k+W6k+iOt+WPluaWreW/teaPkuS7tuemj+WIqeWPo+S7pCcpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHRhc2tDYWxsKDE3LCdEbkZ1bGknLFtjakxpbmtdKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAwKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldCA9IEpTT04ucGFyc2UocmVzdWx0LnJlc3VsdCk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKHJldCk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmV0Lm9wdD09PSdlcnJvcicpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8vJytyZXQubXNnO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHJldC5vcHQ9PT0ndXJsJyl7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBodG1sID0gZmV0Y2gocmV0LnJldCk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnIgPSBodG1sLmluY2x1ZGVzKCdodHRwJyk/IGh0bWw6YmFzZTY0RGVjb2RlKGh0bWwpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgamlleGkgPSBhcnIubWF0Y2goL1tcXFxcXFxcXFxcXFxcXFxcU10qPywuKj9bXFxcXFxcXFxcXFxcXFxcXHNdL2cpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpIGluIGppZXhpKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGU9amlleGlbaV0uc3BsaXQoJywnKVswXTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlPWppZXhpW2ldLnNwbGl0KCcsJylbMV0uc3BsaXQoXFxcXFxcXFxcXFxcXFxcIlxcXFxcXFxcXFxcXFxcXFxuXFxcXFxcXFxcXFxcXFxcIilbMF07XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighL15odHRwfGZ1bmN0aW9uLy50ZXN0KGNvZGUpJiZjb2RlLmxlbmd0aD4yMCl7Ly9iYXNlNjTnvJbnoIHnmoTlh73mlbBcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gYmFzZTY0RGVjb2RlKGNvZGUpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09L2Z1bmN0aW9uLy50ZXN0KGNvZGUpP2V2YWwoY29kZSk6Y29kZTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHJldC5vcHQ9PT0nangnKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoL1tcXFxcXFxcXFxcXFxcXFxcU10qPyxodHRwW1xcXFxcXFxcXFxcXFxcXFxTXS8udGVzdChyZXQucmV0KSl7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSByZXQucmV0LnNwbGl0KCcsJylbMF07XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9IHJldC5yZXQuc3BsaXQoJywnKVsxXS5zcGxpdCgnXFxcXFxcXFxcXFxcXFxcXG4nKVswXTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUucHVzaCh0aXRsZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVbdGl0bGVdPWNvZGU7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKC9eaHR0cC8udGVzdChyZXQucmV0KSl7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBjakxpbmsuc3BsaXQoJyMnKVsxXTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gcmV0LnJldC5zcGxpdCgnXFxcXFxcXFxcXFxcXFxcXG4nKVswXTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUucHVzaCh0aXRsZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVbdGl0bGVdPWNvZGU7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+acquefpeeahOemj+WIqTpcXFxcXFxcXFxcXFxcXFxcbicrcmV0LnJldDtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHJldC5vcHQ9PT0ndmlwSngnKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gY2pMaW5rLnNwbGl0KCcjJylbMV07XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gcmV0LnJldDtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKGNvZGUpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlLnB1c2godGl0bGUpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVbdGl0bGVdPS9mdW5jdGlvbi8udGVzdChjb2RlKT9ldmFsKGNvZGUpOmNvZGU7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S7k+W6k+mdnuacgOaWsOeJiOaIluiAheemj+WIqeekvuWKn+iDveW8gOWPkeS4rSdcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoY2pMaW5rPT09J+aWreaPkicpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgZXZhbChmZXRjaChcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qc1xcXFxcXFxcXFxcXFxcXCIpKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGU9T2JqZWN0LmtleXMoUGFyc2VTKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoL15oaWtlcjpcXFxcXFxcXFxcXFxcXFxcL1xcXFxcXFxcXFxcXFxcXFwvfF5maWxlOlxcXFxcXFxcXFxcXFxcXFwvXFxcXFxcXFxcXFxcXFxcXC98Xmh0dHB8XlxcXFxcXFxcXFxcXFxcXFwvc3RvcmFnZVxcXFxcXFxcXFxcXFxcXFwvfF5cXFxcXFxcXFxcXFxcXFxcL3NkY2FyZFxcXFxcXFxcXFxcXFxcXFwvLy50ZXN0KGNqTGluaykpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYoL15cXFxcXFxcXFxcXFxcXFxcL3N0b3JhZ2VcXFxcXFxcXFxcXFxcXFxcL3xeXFxcXFxcXFxcXFxcXFxcXC9zZGNhcmRcXFxcXFxcXFxcXFxcXFxcLy8udGVzdChjakxpbmspKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjakxpbmsgPSAnZmlsZTovLycrY2pMaW5rO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgZXZhbChmZXRjaChjakxpbmspKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGU9T2JqZWN0LmtleXMoUGFyc2VTKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgfWVsc2V7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ouJ5Y+W5Y+j5Luk5pyJ6K+vJ1xcXFxcXFxcbiAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICBsb2coZS5tZXNzYWdlKTtcXFxcXFxcXG4gICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgdmFyIGp4SnVkZ2UgPSB0eXBlb2YgUGFyc2VTID09ICdvYmplY3QnO1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBsYkp1ZGdlID0gdHlwZW9mKHBhcnNlVGl0bGUpID09ICdvYmplY3QnO1xcXFxcXFxcbiAgICAgICAgICAgIGlmIChqeEp1ZGdlIHx8IGxiSnVkZ2UpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgLy8gaWYgKHB1bGxNb2RlID09PSAn5YiX6KGoJykge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAvLyAgICAgaWYgKCFsYkp1ZGdlKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgcGFyc2VUaXRsZSA9IE9iamVjdC5rZXlzKFBhcnNlUyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIC8vICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgIC8vICAgICB2YXIgbmV3UGFyc2VUaXRsZSA9IGpzb24udGl0bGUuY29uY2F0KHBhcnNlVGl0bGUpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAvLyAgICAganNvbi50aXRsZSA9IEFycmF5LmZyb20obmV3IFNldChuZXdQYXJzZVRpdGxlKSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIC8vIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgLy8g5LiN566h5ouJ5Y+W5Luj56CB6L+Y5piv5YiX6KGo6YO96KaB5oqK5YiX6KGo5ouJ5LqGXFxcXFxcXFxuICAgICAgICAgICAgICAgIGlmICghbGJKdWRnZSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZSA9IE9iamVjdC5rZXlzKFBhcnNlUyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBsb2cocGFyc2VUaXRsZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgdmFyIHNjT2JqZWN0ID0gW1xcXFxcXFxcXFxcXFxcXCJDaXR5SVBcXFxcXFxcXFxcXFxcXFwiLCBcXFxcXFxcXFxcXFxcXFwicGNVQVxcXFxcXFxcXFxcXFxcXCIsIFxcXFxcXFxcXFxcXFxcXCJjYWNoZU0zdThcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcXFxcXFxcXCJpc1ZpZGVvXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXFxcXFxcXFwidGltZU91dFxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxcXFxcXFxcIua6kOeggeWMuemFjVxcXFxcXFxcXFxcXFxcXCIsIFxcXFxcXFxcXFxcXFxcXCJkZWZhdWx0UGFyc2VcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcXFxcXFxcXCJkZWZhdWx0UGFyc2VXZWJcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcXFxcXFxcXCJtYW9zc1xcXFxcXFxcXFxcXFxcXCIsIFxcXFxcXFxcXFxcXFxcXCJMTFFcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcXFxcXFxcXCJwYXJzZUxjXFxcXFxcXFxcXFxcXFxcIl07XFxcXFxcXFxuICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUgPSBwYXJzZVRpdGxlP3BhcnNlVGl0bGUuZmlsdGVyKGl0PT4hc2NPYmplY3QuaW5jbHVkZXMoaXQpKTpbXTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgdmFyIG5ld1BhcnNlVGl0bGUgPSBqc29uLnRpdGxlLmNvbmNhdChwYXJzZVRpdGxlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAganNvbi50aXRsZSA9IEFycmF5LmZyb20obmV3IFNldChuZXdQYXJzZVRpdGxlKSk7XFxcXFxcXFxuXFxcXFxcXFxuICAgICAgICAgICAgICAgIGlmIChwdWxsTW9kZSA9PT0gJ+S7o+eggScpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3JpZ2luYWxQYXJzZVMgPT0gJ29iamVjdCcpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpIGluIHNjT2JqZWN0KSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBvcmlnaW5hbFBhcnNlU1tzY09iamVjdFtpXV07XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yaWdpbmFsUGFyc2VTID1vcmlnaW5hbFBhcnNlUy5maWx0ZXIoaXQ9PiFzY09iamVjdC5pbmNsdWRlcyhPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpdClbMF0pKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGpzb24uY29kZXMsIG9yaWdpbmFsUGFyc2VTKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mKFBhcnNlUyk9PVxcXFxcXFxcXFxcXFxcXCJ1bmRlZmluZWRcXFxcXFxcXFxcXFxcXFwiKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihqc29uLmNvZGVzLCBwYXJzZUNvZGUpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3JldHVybiBcXFxcXFxcXFxcXFxcXFwidG9hc3Q6Ly/msqHmnInku6PnoIHvvIzkuI3lj6/mi4nlj5ZcXFxcXFxcXFxcXFxcXFwiXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oanNvbi5jb2RlcywgUGFyc2VTKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgLy92YXIgbmV3RmlsZSA9IHRvb2xzLnRvSlNPTihqc29uKTsvL+iHquWumuS5iXN0cmluZ2lmeeWHveaVsO+8jOW4puaciei9rOS5ieWtl+esplxcXFxcXFxcbiAgICAgICAgICAgICAgICB2YXIgbmV3RmlsZSA9ICQuc3RyaW5naWZ5KGpzb24pOyAvL0pTT04ucGFyc2XkvJrmiqXplJlcXFxcXFxcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsIG5ld0ZpbGUpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mi4nlj5YnICsgcHVsbE1vZGUgKyAn5oiQ5YqfJztcXFxcXFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pyq6I635Y+W5Yiw5a+56LGhJztcXFxcXFxcXG4gICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICB9LCBbaywgX215U2V0LnBhcnNlUm91dGVdKVxcXFxcXFxcbiAgICB9LFxcXFxcXFxcbiAgICBwdWxsU2NyaXB0OiBmdW5jdGlvbihjaiwgeDUpIHtcXFxcXFxcXG4gICAgICAgIHJldHVybiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XFxcXFxcXFxuICAgICAgICAgICAgdmFyIGNqRnJvbSA9ICdoaWtlcjovL3BhZ2UvUGFyc2VfRG4uanM/cnVsZT1NeUZpZWxk4bSw4oG/JztcXFxcXFxcXG4gICAgICAgICAgICB2YXIgeDVGcm9tID0gJ2hpa2VyOi8vcGFnZS9QYXJzZV9Ebi5odG1sP3J1bGU9TXlGaWVsZOG0sOKBvyc7XFxcXFxcXFxuICAgICAgICAgICAgdHJ5IHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgdmFyIGNqRmlsZSA9IEpTT04ucGFyc2UoZmV0Y2goY2pGcm9tKSkucnVsZTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgdmFyIHg1RmlsZSA9IEpTT04ucGFyc2UoZmV0Y2goeDVGcm9tKSkucnVsZTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGtbMF0sIGNqRmlsZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShrWzFdLCB4NUZpbGUpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBjbGVhclZhcignanhPbGRWJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGNsZWFyVmFyKCdqeE5ld1YnKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ouJ5Y+W5oiQ5YqfJztcXFxcXFxcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnKrmiJDlip/ojrflj5blhoXlrrknO1xcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgIH0sIFtjaiwgeDVdKVxcXFxcXFxcbiAgICB9LFxcXFxcXFxcbiAgICB4bFNlbGVjdDogZnVuY3Rpb24oYmlhbmppLCBsYkxlbmd0aCkge1xcXFxcXFxcbiAgICAgICAgcmV0dXJuIFxcXFxcXFxcXFxcXFxcXCJzZWxlY3Q6Ly9cXFxcXFxcXFxcXFxcXFwiICsgSlNPTi5zdHJpbmdpZnkoe1xcXFxcXFxcbiAgICAgICAgICAgIG9wdGlvbnM6IFsn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXFxcXFxcXFxcImNvbG9yOnJlZFxcXFxcXFxcXFxcXFxcXCIgdGl0bGU9XFxcXFxcXFxcXFxcXFxcIuWIoOmZpHx8JyArIGJpYW5qaSArICdcXFxcXFxcXFxcXFxcXFwiPuWIoCDpmaQnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXFxcXFxcXFxcImNvbG9yOiNGNTc0NzRcXFxcXFxcXFxcXFxcXFwiIHRpdGxlPVxcXFxcXFxcXFxcXFxcXCLpmpDol498fCcgKyBiaWFuamkgKyAnXFxcXFxcXFxcXFxcXFxcIj7pmpAg6JePJywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXFxcXFxcXFxcXFxcXCJjb2xvcjojRkY4MDAwXFxcXFxcXFxcXFxcXFxcIiB0aXRsZT1cXFxcXFxcXFxcXFxcXFwi5L+u5pS5fHwnICsgYmlhbmppICsgJ1xcXFxcXFxcXFxcXFxcXCI+5L+uIOaUuScsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFxcXFxcXFxcXFxcXFwiY29sb3I6IzA5OEFDMVxcXFxcXFxcXFxcXFxcXCIgdGl0bGU9XFxcXFxcXFxcXFxcXFxcIue9rumhtnx8JyArIGJpYW5qaSArICcwJyArICdcXFxcXFxcXFxcXFxcXFwiPue9riDpobYnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXFxcXFxcXFxcImNvbG9yOiMwOThBQzFcXFxcXFxcXFxcXFxcXFwiIHRpdGxlPVxcXFxcXFxcXFxcXFxcXCLnp7vliqh8fCcgKyBiaWFuamkgKyAnXFxcXFxcXFxcXFxcXFxcIj7np7sg5YqoJywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXFxcXFxcXFxcXFxcXCJjb2xvcjojMDk4QUMxXFxcXFxcXFxcXFxcXFxcIiB0aXRsZT1cXFxcXFxcXFxcXFxcXFwi572u5bqVfHwnICsgYmlhbmppICsgbGJMZW5ndGggKyAnXFxcXFxcXFxcXFxcXFxcIj7nva4g5bqVJywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXFxcXFxcXFxcXFxcXCJjb2xvcjojMDRCNDMxXFxcXFxcXFxcXFxcXFxcIiB0aXRsZT1cXFxcXFxcXFxcXFxcXFwi5YiG5LqrfHwnICsgYmlhbmppICsgJ1xcXFxcXFxcXFxcXFxcXCI+5Zyw5p2/5YiG5LqrJywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXFxcXFxcXFxcXFxcXCJjb2xvcjojMDRCNDMxXFxcXFxcXFxcXFxcXFxcIiB0aXRsZT1cXFxcXFxcXFxcXFxcXFwi5LqR5YiG5LqrfHwnICsgYmlhbmppICsgJ1xcXFxcXFxcXFxcXFxcXCI+5LqR5p2/5YiG5LqrJ10sXFxcXFxcXFxuICAgICAgICAgICAgY29sOiAnMicsXFxcXFxcXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxcXFxcbiAgICAgICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgdmFyIG5ld0lucHV0ID0gcGFyc2VEb21Gb3JIdG1sKGlucHV0LCAnc3BhbiYmdGl0bGUnKS5zcGxpdCgnfHwnKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgLy8g5L+u5pS5LOi/qui/qiwwICAg5pON5L2c57G75Z6LLOWQjeensCzntKLlvJVcXFxcXFxcXG4gICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBuZXdJbnB1dFswXTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBuZXdJbnB1dFsxXTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgdmFyIG51bSA9IG5ld0lucHV0WzJdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB2YXIgbnVtMiA9IG5ld0lucHV0WzNdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXFxcXFxcXFxcIuWIoOmZpFxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGsgPSBbbmFtZSwgbnVtXTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDmgLvmhJ/op4nnrZvpgInmiJbogIXmkJzntKLlkI7vvIznlLHkuo5udW3nmoTkvY3nva7kuI3lr7nlj6/og73kvJrliKDpmaTplJks5LqL5a6e5aaC5q2kLOW3suS/rj9cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFxcXFxcXFxcXFxcXFwi5Y2z5bCG5Yig6ZmkOiBcXFxcXFxcXFxcXFxcXFwiICsgbmFtZSkuY29uZmlybSgoaykgPT4ge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGtbMF07XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW0gPSBrWzFdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uY29kZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBqc29uLmNvZGVzW25hbWVdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSA9IGpzb24udGl0bGUuaW5kZXhPZihuYW1lKTsgLy/ov5nmoLfmiY3kvJrlvpfliLDmraPnoa7nmoTntKLlvJVcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi50aXRsZS5zcGxpY2UobnVtLCAxKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXFxcXFxcXFxcInRvYXN0Oi8v5bey5bCG44CWXFxcXFxcXFxcXFxcXFxcIiArIG5hbWUgKyBcXFxcXFxcXFxcXFxcXFwi44CX5Yig6ZmkXFxcXFxcXFxcXFxcXFxcIjtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBrKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXFxcXFxcXFxcIumakOiXj1xcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcXFxcXFxcXFxcXFxcImhpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nI1xcXFxcXFxcXFxcXFxcXCIpLmxhenlSdWxlKChrKSA9PiB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0ga1swXTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bSA9IGtbMV07XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZVJvdXRlID0gZ2V0VmFyKCdwYXJzZVJvdXRlJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5jb2Rlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtID0ganNvbi50aXRsZS5pbmRleE9mKG5hbWUpOyAvL+i/meagt+aJjeS8muW+l+WIsOato+ehrueahOe0ouW8lVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi50aXRsZS5zcGxpY2UobnVtLCAxKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXFxcXFxcXFxcInRvYXN0Oi8v5bey5bCG44CWXFxcXFxcXFxcXFxcXFxcIiArIG5hbWUgKyBcXFxcXFxcXFxcXFxcXFwi44CX6ZqQ6JePXFxcXFxcXFxcXFxcXFxcIjtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcXFxcXFxcXFwidG9hc3Q6Ly/lj6/og73mmK/kuKrnvZHlnYAsIOaCqOWPr+mAieaLqeWIoOmZpFxcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBbbmFtZSwgbnVtXSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFxcXFxcXFxcXCLkv67mlLlcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYgKGpzb24uY29kZXNbbmFtZV0pIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbkNvZGUgPSBuYW1lO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZXMgPSBqc29uLnRpdGxlO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuTmFtZSA9IFxcXFxcXFxcXFxcXFxcXCLov5nmmK/lkI3np7BcXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzW25hbWVdKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5Db2RlID0ganNvbi5jb2Rlc1tuYW1lXS50b1N0cmluZygpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuTmFtZSA9IG5hbWU7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXFxcXFxcXFxcXFxcXCJoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSNcXFxcXFxcXFxcXFxcXFwiKS5ydWxlKChrLHRpdGxlcykgPT4ge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IFtdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKGdldEl0ZW0oJ215RnVuY3Rpb24nKSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0ga1swXTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUgPSBrWzFdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfkv50g5a2YJyxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogc2F2ZUJ1dHRvbiArIFxcXFxcXFxcXFxcXFxcXCJzYXZlQnV0dG9uKGdldFZhcignaW5wdXRfZWRpdCcpLG5hbWUpO2JhY2soKTtcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFxcXFxcXFxcXCJpbnB1dFxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcXFxcXFxcXFwi5bu66K6u5oyJ6buY6K6k55qE5Luj56CB5qC85byP5L+u5pS55ZOmXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IFxcXFxcXFxcXFxcXFxcXCJwdXRWYXIoJ2lucHV0X2VkaXQnLCBpbnB1dClcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFxcXFxcXFxcXFxcXFxcXCJ0ZXh0YXJlYVxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcXFxcXFxcXFxcXFxcXFwiLTFcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodDogdHJ1ZSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogJ+S/ruaUueKYhScgKyBuYW1lICsgJ+KYhScgKyBjb2RlLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPHNtYWxsPjxzcGFuIHN0eWxlPVxcXFxcXFxcXFxcXFxcXCJjb2xvcjojNkVCODk3XFxcXFxcXFxcXFxcXFxcIj7moLzlvI/kuLrvvJrmk43kvZznsbvlnovimIXmoIfpopjimIVmdW5jdGlvbigpe+iHquWumuS5ieWGheWuuX08YnI+6K+35Yu/5aGr5YWl5YW25LuW5qC85byPJyxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc2F2ZUJ1dHRvbixuYW1lLHRpdGxlcykgPT4ge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0bXBBciA9IGdldFZhcignaW5wdXRfZWRpdCcpLnNwbGl0KCfimIUnKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0bXBBci5sZW5ndGg8Mil7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kv67mlLnmoLzlvI/mnInor6/vvIzorr/pl67ooqvmi5Lnu50nXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdOYW1lID0gdG1wQXJbMV07XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobmV3TmFtZSE9PW5hbWUmJnRpdGxlcy5pbmNsdWRlcyhuZXdOYW1lKSl7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCfmo4DmtYvliLDlkIzlkI3mjqXlj6M6JytuZXdOYW1lKycs5piv5ZCm6KaG55uWPycpLmNvbmZpcm0oKHNhdmVCdXR0b24sbmFtZSk9PntcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gc2F2ZUJ1dHRvbihnZXRWYXIoJ2lucHV0X2VkaXQnKSxuYW1lKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2soKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lkv53lrZjkv67mlLlcXFxcXFxcXFxcXFxcXFxcbuivt+iHquihjOajgOa1i+imhuebluWQjueahOWGheWuuSc7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sc2F2ZUJ1dHRvbixuYW1lKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSBzYXZlQnV0dG9uKGdldFZhcignaW5wdXRfZWRpdCcpLG5hbWUpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrKCk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lkv53lrZjkv67mlLknO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZih0eXBlb2YoY29kZSk9PT0nc3RyaW5nJyYmY29kZS5sZW5ndGg+Mil7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiBjb2RlXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfWVsc2V7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lkv53lrZjkv67mlLknO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHNhdmVCdXR0b24sbmFtZSx0aXRsZXMpLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJ+KAmOKAmOKAmeKAmTxiaWc+PGJpZz48c3BhbiBzdHlsZT1cXFxcXFxcXFxcXFxcXFwiY29sb3I6IzI5OEEwOFxcXFxcXFxcXFxcXFxcXCI+5L+dIOWtmCcsXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgW25OYW1lLCBuQ29kZV0sdGl0bGVzKSAvL1tuYW1lLCBqc29uLmNvZGVzW25hbWVdLnRvU3RyaW5nKCldKVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgLyp9IGVsc2Uge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcXFxcXFxcXFwidG9hc3Q6Ly/lj6rmnInnvZHlnYDmiJbogIXmoIfpopgsIOS4jeaUr+aMgeS/ruaUuVxcXFxcXFxcXFxcXFxcXCJcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIH0qL1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcXFxcXFxcXFwi572u6aG2XFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXFxcXFxcXFxcIue9ruW6lVxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbnVtID0ganNvbi50aXRsZS5pbmRleE9mKG5hbWUpOyAvL+i/meagt+aJjeS8muW+l+WIsOato+ehrueahOe0ouW8lVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKG51bT4tMSl7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0ganNvbi50aXRsZS5zcGxpY2UobnVtLCAxKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi50aXRsZS5zcGxpY2UobnVtMiwgMCwgaXRlbVswXSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+ayoeaJvuWIsDonK25hbWU7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcXFxcXFxcXFwi56e75YqoXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgnaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdiaWFuamknLCAn56e75YqoIycgKyBrKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQ7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgbnVtKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXFxcXFxcXFxcIuWIhuS6q1xcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFxcXFxcXFxcXCLkupHliIbkuqtcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzW25hbWVdKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZVRleHQgPSB0eXBlb2YganNvbi5jb2Rlc1tuYW1lXSA9PSAnZnVuY3Rpb24nID8gJC5zdHJpbmdpZnkoanNvbi5jb2Rlc1tuYW1lXSkgOiBqc29uLmNvZGVzW25hbWVdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRleHQgPSAnTXlQYXJzZVPimIUnICsgbmFtZSArICfimIUnICsgYmFzZTY0RW5jb2RlKHBhcnNlVGV4dCk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlVGV4dCA9ICfnm7Tpk77imIUnICsganNvbi50aXRsZVtudW1dO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSAn5LqR5YiG5LqrJyAmJiBwYXJzZVRleHQuc3Vic3RyKDAsIDgpID09ICdNeVBhcnNlUycpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUZXh0ID0gc2hhcmVQYXN0ZShwYXJzZVRleHQpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VUZXh0LnN1YnN0cigwLCA2KSAhPSAnZXJyb3I6JyA/ICdjb3B5Oi8vJyArIHBhcnNlVGV4dCArICdcXFxcXFxcXFxcXFxcXFxcbuKYheKYheKYhVxcXFxcXFxcXFxcXFxcXFxuJyArICdNeVBhcnNlU++8micgKyBuYW1lIDogJ3RvYXN0Oi8v5YiG5Lqr5aSx6LSlISHkupHliarotLTmnb/lj6/og73mjILkuoYnO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnY29weTovLycgKyBwYXJzZVRleHQ7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pqC5LiN5pSv5oyBJztcXFxcXFxcXG4gICAgICAgICAgICAgICAgfSAvL3N3aXRjaOeahFxcXFxcXFxcbiAgICAgICAgICAgIH0pIC8vU3RyaW5n55qEXFxcXFxcXFxuICAgICAgICB9KSAvL3N0cmluZ2lmeeeahFxcXFxcXFxcbiAgICB9LFxcXFxcXFxcbiAgICB4alBhcnNlOiBmdW5jdGlvbigpIHtcXFxcXFxcXG4gICAgICAgIHJldHVybiAkKFxcXFxcXFxcXFxcXFxcXCJoaWtlcjovL2VtcHR5I25vSGlzdG9yeSNcXFxcXFxcXFxcXFxcXFwiKS5ydWxlKCgpID0+IHtcXFxcXFxcXG4gICAgICAgICAgICB2YXIgZCA9IFtdO1xcXFxcXFxcbiAgICAgICAgICAgIGV2YWwoZ2V0SXRlbSgnbXlGdW5jdGlvbicpKTtcXFxcXFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+S/nSDlrZgnLFxcXFxcXFxcbiAgICAgICAgICAgICAgICB1cmw6IHNhdmVCdXR0b24gKyBcXFxcXFxcXFxcXFxcXFwic2F2ZUJ1dHRvbihpbnB1dCk7YmFjaygpO2NsZWFyVmFyKCdpbnB1dF9hZGQnKVxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcXFxcXFxcXFwiaW5wdXRcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcXFxcXFxcXFwi6L6T5YWl5q2j56Gu5qC85byP5YaF5a65XFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAncHV0VmFyKFxcXFxcXFxcXFxcXFxcXCJpbnB1dF9hZGRcXFxcXFxcXFxcXFxcXFwiLCBpbnB1dCknLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXFxcXFxcXFxcXFxcXFxcInRleHRhcmVhXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogXFxcXFxcXFxcXFxcXFxcIi0xXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodDogdHJ1ZSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcignaW5wdXRfYWRkJyksXFxcXFxcXFxuICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICB9KTtcXFxcXFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxzbWFsbD48c3BhbiBzdHlsZT1cXFxcXFxcXFxcXFxcXFwiY29sb3I6IzZFQjg5N1xcXFxcXFxcXFxcXFxcXCI+5oyJ5o+P6L+w6K+J5qC85byP6L6T5YWlLCDor7fli7/loavlhaXlhbbku5bmoLzlvI88YnI+5pys5Zyw5Y+j5LukOiDmk43kvZznsbvlnovimIXlkI3np7DimIXku6PnoIE8YnI+5LqR5Y+j5LukOiDpk77mjqXimIXimIXimIXlkI3np7A7IOe6r+e9keWdgDog55u06ZO+4piFdXJsMeKYhXVybDInLFxcXFxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiAn4oCY4oCY4oCZ4oCZPGJpZz48YmlnPjxzcGFuIHN0eWxlPVxcXFxcXFxcXFxcXFxcXCJjb2xvcjojMjk4QTA4XFxcXFxcXFxcXFxcXFxcIj7kv50g5a2YJyxcXFxcXFxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCdub0xvYWRpbmcnKS5sYXp5UnVsZSgoc2F2ZUJ1dHRvbikgPT4ge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNhdmVCdXR0b24oZ2V0VmFyKCdpbnB1dF9hZGQnKSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIH0sIHNhdmVCdXR0b24pLFxcXFxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXFxcXFxuICAgICAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcXFxcXFxcbiAgICAgICAgfSlcXFxcXFxcXG4gICAgfSxcXFxcXFxcXG4gICAgeWRQYXJzZTogZnVuY3Rpb24oQkptb2RlLCBpKSB7XFxcXFxcXFxuICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBBID0ga1swXS5zcGxpdCgnIycpWzFdO1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBCID0ga1sxXTtcXFxcXFxcXG4gICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcXFxcXFxcbiAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcXFxcXFxcbiAgICAgICAgICAgIHZhciBpdGVtID0ganNvbi50aXRsZS5zcGxpY2UoQSwgMSk7IC8vIDE6IOagh+iusOW8gOWni+S9jee9ru+8jDI6IOWIoOmZpOWIsOWTquS4quS9jee9rlxcXFxcXFxcbiAgICAgICAgICAgIGpzb24udGl0bGUuc3BsaWNlKEIsIDAsIGl0ZW1bMF0pOyAvLyAxOiDlkIzkuIrvvIwyOiAw6KGo56S65LiN5Yig6Zmk77yMMzog5re75Yqg5a+56LGhXFxcXFxcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXFxcXFxcXG4gICAgICAgICAgICBjbGVhclZhcignYmlhbmppJyk7XFxcXFxcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxcXFxcXFxuICAgICAgICB9LCBbQkptb2RlLCBpXSlcXFxcXFxcXG4gICAgfSxcXFxcXFxcXG4gICAgcGxzY1BhcnNlOiBmdW5jdGlvbigpIHtcXFxcXFxcXG4gICAgICAgIHJldHVybiAkKCdoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSMnKS5ydWxlKCgpID0+IHtcXFxcXFxcXG4gICAgICAgICAgICB2YXIgZCA9IFtdO1xcXFxcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn5om56YeP5L+u5pS5L+WIoOmZpOino+aekCcsXFxcXFxcXFxuICAgICAgICAgICAgICAgIGRlc2M6ICdhdXRvJiZmbG9hdCcsXFxcXFxcXFxuICAgICAgICAgICAgICAgIC8vIHVybDogJ2ZpbGU6Ly8vc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL2NhY2hlL3Bsc2NQYXJzZS5odG1sJyxcXFxcXFxcXG4gICAgICAgICAgICAgICAgdXJsOiBfbXlTZXQuYmF0Y2hSb3V0ZSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZSdcXFxcXFxcXG4gICAgICAgICAgICB9KVxcXFxcXFxcbiAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXFxcXFxcXG4gICAgICAgIH0pXFxcXFxcXFxuICAgIH1cXFxcXFxcXG59O1xcXFxcXFxcblxcXFxcXFxcbmZ1bmN0aW9uIHNldFBhcnNlKCkge1xcXFxcXFxcbiAgICAkLnJlcXVpcmUoXFxcXFxcXFxcXFxcXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcXFxcXFxcXFwiKS5zZXRQYXJzZSgpO1xcXFxcXFxcbn1cXFxcXFxcIn0se1xcXFxcXFwiY29sX3R5cGVcXFxcXFxcIjpcXFxcXFxcIm1vdmllXzNcXFxcXFxcIixcXFxcXFxcIm5hbWVcXFxcXFxcIjpcXFxcXFxcIuiwg+eUqOi3r+eUsVxcXFxcXFwiLFxcXFxcXFwicGF0aFxcXFxcXFwiOlxcXFxcXFwiUm91dGVcXFxcXFxcIixcXFxcXFxcInJ1bGVcXFxcXFxcIjpcXFxcXFxcImpzOlxcXFxcXFxcbmNvbnN0IGQgPSBbXTtcXFxcXFxcXG5jb25zdCBkYXRhID0ge307XFxcXFxcXFxuXFxcXFxcXFxuZGF0YS5vbGRDb25maWcgPSBcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcbmRhdGEuY2pSb3V0ZSA9IFxcXFxcXFxcXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzXFxcXFxcXFxcXFxcXFxcIjtcXFxcXFxcXG5kYXRhLng1Um91dGUgPVxcXFxcXFxcbmdldFBhdGgoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uaHRtbCcpO1xcXFxcXFxcblxcXFxcXFxcbmRhdGEuanhMYXp5ID0gXFxcXFxcXFxcXFxcXFxcImV2YWwoJ3ZhciBjb25maWcgPScgKyBmZXRjaCgnXFxcXFxcXFxcXFxcXFxcIiArIGRhdGEub2xkQ29uZmlnICsgXFxcXFxcXFxcXFxcXFxcIicpKTtldmFsKGZldGNoKGNvbmZpZy5jaikpO2F5dG1QYXJzZShpbnB1dClcXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcblxcXFxcXFxcbmRhdGEuc3pQYXJzZSA9IFxcXFxcXFxcXFxcXFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxuXFxcXFxcXFxuZGF0YS5zZXRQYXJzZSA9IGZ1bmN0aW9uKCkge1xcXFxcXFxcbiAgICBkLnB1c2goe1xcXFxcXFxcbiAgICAgICAgZGVzYzogJzc5NScsXFxcXFxcXFxuICAgICAgICB1cmw6IHRoaXMueDVSb3V0ZSxcXFxcXFxcXG4gICAgICAgIGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnXFxcXFxcXFxuICAgIH0pO1xcXFxcXFxcbiAgICB2YXIgb2xkViA9IGdldFZhcignanhPbGRWJyk7XFxcXFxcXFxuICAgIHZhciBuZXdWID0gZ2V0VmFyKCdqeE5ld1YnKTtcXFxcXFxcXG4gICAgdmFyIHZlcnNpb25UaXBzID0gcGFyc2VGbG9hdChuZXdWKSA+IHBhcnNlRmxvYXQob2xkVikgPyAn4oCY4oCY5pyJ5paw54mI5pysOiB2JyArIG5ld1YgOiAn4oCY4oCYJztcXFxcXFxcXG4gICAgdmFyIHBpY3MgPSBbXFxcXFxcXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9zZW92eC0yMC0xMCUyMCg5MikuanBnJyxcXFxcXFxcXG4gICAgICAgICdodHRwczovL2Nkbi5zZW92eC5jb20vaW1nL21vbTIwMTglMjAoMjA3KS5qcGcnLFxcXFxcXFxcbiAgICAgICAgJ2h0dHBzOi8vdHZhNC5zaW5haW1nLmNuL2xhcmdlLzliZDliMTY3Z3kxZndyaDV4b2x0ZGoyMWhjMHUwdGF4LmpwZycsXFxcXFxcXFxuICAgICAgICAnaHR0cHM6Ly90dmExLnNpbmFpbWcuY24vbGFyZ2UvMDA1QllxcGdneTFmd3JleXU0bmw2ajMxaGMwdTBhaHIuanBnJyxcXFxcXFxcXG4gICAgICAgICdodHRwczovL3MzLmJtcC5vdmgvaW1ncy8yMDIxLzEwL2Q3ZTYwYjk5MDc0MjA5M2QuanBlZycsXFxcXFxcXFxuICAgICAgICAnaHR0cHM6Ly9zMy5ibXAub3ZoL2ltZ3MvMjAyMS8xMC85MWFkNmQ2NTM4YmY4Njg5LmpwZycsXFxcXFxcXFxuICAgICAgICAnaHR0cHM6Ly90dmExLnNpbmFpbWcuY24vbGFyZ2UvMDA1QllxcGdneTFmd3Jlc2w1cG1sajMxaGMweGN3a2EuanBnJyxcXFxcXFxcXG4gICAgICAgICdodHRwczovL3R2YTMuc2luYWltZy5jbi9sYXJnZS8wMDVCWXFwZ2d5MWZ3cmdqZGs3NG9qMzFoYzB1MGRxbi5qcGcnLFxcXFxcXFxcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnNlb3Z4LmNvbS9pbWcvbW9tMjAxOCUyMCgzMjApLmpwZycsXFxcXFxcXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9tb20yMDE4JTIwKDgwMykuanBnJ1xcXFxcXFxcbiAgICBdO1xcXFxcXFxcbiAgICBkLnB1c2goe1xcXFxcXFxcbiAgICAgICAgaW1nOiBwaWNzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwKV0sXFxcXFxcXFxuICAgICAgICB0aXRsZTogdmVyc2lvblRpcHMgKyAn4oCZ4oCZPHNtYWxsPjxzcGFuIHN0eWxlPVxcXFxcXFxcXFxcXFxcXCJjb2xvcjojNkVCODk3XFxcXFxcXFxcXFxcXFxcIj48YnI+44CA44CA54K55Ye75LiK5pa55aS05YOP6L+b5YWl57yW6L6RPGJyPueCueatpOi/m+WFpeiuuuWdm+W4luWtkOWIl+ihqCcsXFxcXFxcXFxuICAgICAgICBkZXNjOiAn5b2T5YmN54mI5pysOiB2JyArIG9sZFYsXFxcXFxcXFxuICAgICAgICB1cmw6ICdodHRwczovL2hhaWt1b3NoaWppZS5jbi91c2VyLzE5NTgnLFxcXFxcXFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xJ1xcXFxcXFxcbiAgICB9KTtcXFxcXFxcXG4gIHNldFJlc3VsdChkKTtcXFxcXFxcXG59XFxcXFxcXFxuXFxcXFxcXFxuc3dpdGNoIChnZXRQYXJhbShcXFxcXFxcXFxcXFxcXFwidHlwZVxcXFxcXFxcXFxcXFxcXCIpKSB7XFxcXFxcXFxuICAgIGNhc2UgXFxcXFxcXFxcXFxcXFxcIuiuvue9rlxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxuICAgICAgICBkYXRhLnNldFBhcnNlKCk7XFxcXFxcXFxuICAgICAgICAvL3NldFJlc3VsdChkKTtcXFxcXFxcXG4gICAgICAgIGJyZWFrO1xcXFxcXFxcbiAgICBjYXNlIFxcXFxcXFxcXFxcXFxcXCLnvJbovpFcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcbiAgICAgICAgJC5yZXF1aXJlKFxcXFxcXFxcXFxcXFxcXCJoaWtlcjovL3BhZ2UvanhJdGVtP3J1bGU9TXlGaWVsZOG0sOKBv1xcXFxcXFxcXFxcXFxcXCIpLmp4TGlzdCgpO1xcXFxcXFxcbiAgICAgICAgc2V0UmVzdWx0KGQpO1xcXFxcXFxcbiAgICAgICAgYnJlYWs7XFxcXFxcXFxuXFxcXFxcXFx0Y2FzZSBcXFxcXFxcXFxcXFxcXFwi5Li76aKYXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXG5cXFxcXFxcXHQgICAgICQucmVxdWlyZShcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3RoZW1lP3J1bGU9TXlGaWVsZOG0sOKBv1xcXFxcXFxcXFxcXFxcXCIpLnRoZW1lSW5pdCgpO1xcXFxcXFxcbiAgICAgICAgYnJlYWs7XFxcXFxcXFxuXFxcXFxcXFx0Y2FzZSBcXFxcXFxcXFxcXFxcXFwi6Kej5p6QXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXG5cXFxcXFxcXHQgICAgICQucmVxdWlyZShcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2p4TWFuYWdlP3J1bGU9TXlGaWVsZOG0sOKBv1xcXFxcXFxcXFxcXFxcXCIpLmp4TWFuYWdlKCk7XFxcXFxcXFxuICAgICAgICBicmVhaztcXFxcXFxcXG4gICAgZGVmYXVsdDpcXFxcXFxcXG4gICAgICAgICQuZXhwb3J0cyA9IGRhdGE7XFxcXFxcXFxuICAgICAgICBicmVhaztcXFxcXFxcXG59XFxcXFxcXCJ9LHtcXFxcXFxcImNvbF90eXBlXFxcXFxcXCI6XFxcXFxcXCJtb3ZpZV8zXFxcXFxcXCIsXFxcXFxcXCJuYW1lXFxcXFxcXCI6XFxcXFxcXCLop6PmnpDpobnkuLvnlYzpnaJcXFxcXFxcIixcXFxcXFxcInBhdGhcXFxcXFxcIjpcXFxcXFxcImp4SXRlbVxcXFxcXFwiLFxcXFxcXFwicnVsZVxcXFxcXFwiOlxcXFxcXFwiZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvUGFyc2VfRG4uanM/cnVsZT1NeUZpZWxk4bSw4oG/JykpLnJ1bGUpO1xcXFxcXFxcbnZhciBpc0xvZ2luID0gZnVuY3Rpb24gKCl7cmV0dXJuIHRydWV9XFxcXFxcXFxuZnVuY3Rpb24gYmJzWVooKSB7XFxcXFxcXFxuICAgIHZhciBfMHg0N2E5YjQgPSB7XFxcXFxcXFxuICAgICAgICAnSnhTTW4nOiBmdW5jdGlvbihfMHgyNDk5NTIsIF8weDRhYmMxNSkge1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiBfMHgyNDk5NTIgKyBfMHg0YWJjMTU7XFxcXFxcXFxuICAgICAgICB9LFxcXFxcXFxcbiAgICAgICAgJ0xHd21DJzogJ+enu+WKqCMnLFxcXFxcXFxcbiAgICAgICAgJ0d2RFZZJzogZnVuY3Rpb24oXzB4NDYxZjJkLCBfMHg1NDA1NzEpIHtcXFxcXFxcXG4gICAgICAgICAgICByZXR1cm4gXzB4NDYxZjJkICsgXzB4NTQwNTcxO1xcXFxcXFxcbiAgICAgICAgfSxcXFxcXFxcXG4gICAgICAgICdXZmVIRCc6ICfigJjigJjigJnigJk8c21hbGw+PHNwYW4gc3R5bGU9XFxcXFxcXFxcXFxcXFxcImNvbG9yOiNGRTlBMkVcXFxcXFxcXFxcXFxcXFwiPicsXFxcXFxcXFxuICAgICAgICAnRXFJbHMnOiAn56e75YqoOiAnLFxcXFxcXFxcbiAgICAgICAgJ0VmZmJuJzogJ3RleHRfMicsXFxcXFxcXFxuICAgICAgICAnUnhreEEnOiBmdW5jdGlvbihfMHgzMmE3ZDAsIF8weDFhOTMyYykge1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiBfMHgzMmE3ZDAoXzB4MWE5MzJjKTtcXFxcXFxcXG4gICAgICAgIH0sXFxcXFxcXFxuICAgICAgICAnVkJHSkgnOiAnamRSb3V0ZScsXFxcXFxcXFxuICAgICAgICAnQlpnUnQnOiBmdW5jdGlvbihfMHgyNjk4NGUsIF8weDVjYzkyNikge1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiBfMHgyNjk4NGUgPT09IF8weDVjYzkyNjtcXFxcXFxcXG4gICAgICAgIH0sXFxcXFxcXFxuICAgICAgICAncmdHQ0MnOiAnd0RWRWInLFxcXFxcXFxcbiAgICAgICAgJ01jek9XJzogZnVuY3Rpb24oXzB4Mjg4MGJmLCBfMHgyZDkzMDYsIF8weDk3Nzg3YSkge1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiBfMHgyODgwYmYoXzB4MmQ5MzA2LCBfMHg5Nzc4N2EpO1xcXFxcXFxcbiAgICAgICAgfSxcXFxcXFxcXG4gICAgICAgICdGVWpkbSc6ICdiYnNZWicsXFxcXFxcXFxuICAgICAgICAnbHFGaGInOiBmdW5jdGlvbihfMHg0M2JiZTYpIHtcXFxcXFxcXG4gICAgICAgICAgICByZXR1cm4gXzB4NDNiYmU2KCk7XFxcXFxcXFxuICAgICAgICB9LFxcXFxcXFxcbiAgICAgICAgJ0ZVUnB5JzogZnVuY3Rpb24oXzB4MjI2NWMyLCBfMHhhMWQ1NjgsIF8weDI5ZGUwMSkge1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiBfMHgyMjY1YzIoXzB4YTFkNTY4LCBfMHgyOWRlMDEpO1xcXFxcXFxcbiAgICAgICAgfSxcXFxcXFxcXG4gICAgICAgICdYSU9iQic6ICd2YXIgeGRSb3V0ZT1cXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcIlxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwiOydcXFxcXFxcXG4gICAgfTtcXFxcXFxcXG4gICAgaWYgKCFfMHg0N2E5YjRbJ1J4a3hBJ10oZ2V0VmFyLCBfMHg0N2E5YjRbJ1ZCR0pIJ10pKSB7XFxcXFxcXFxuICAgICAgICBpZiAoXzB4NDdhOWI0WydCWmdSdCddKF8weDQ3YTliNFsncmdHQ0MnXSwgJ0pWa0FaJykpIHtcXFxcXFxcXG4gICAgICAgICAgICBkWydwdXNoJ10oe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg0N2E5YjRbJ0p4U01uJ10oXzB4NDdhOWI0WydMR3dtQyddLCBpKSA9PSBCSm1vZGUgPyBfMHg0N2E5YjRbJ0p4U01uJ10oXzB4NDdhOWI0WydHdkRWWSddKF8weDQ3YTliNFsnV2ZlSEQnXSwgXzB4NDdhOWI0WydFcUlscyddKSwgeHNMaXN0KSA6ICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFxcXFxcXFxcXFxcXFwiY29sb3I6IzI5OEEwOFxcXFxcXFxcXFxcXFxcXCI+JyArIHhzTGlzdCxcXFxcXFxcXG4gICAgICAgICAgICAgICAgJ3VybCc6IGJqSXRlbVsneWRQYXJzZSddKEJKbW9kZSwgaSksXFxcXFxcXFxuICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDQ3YTliNFsnRWZmYm4nXVxcXFxcXFxcbiAgICAgICAgICAgIH0pO1xcXFxcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcXFxcXG4gICAgICAgICAgICBfMHg0N2E5YjRbJ01jek9XJ10ocHV0VmFyLCBfMHg0N2E5YjRbJ0ZVamRtJ10sIF8weDQ3YTliNFsnbHFGaGInXShpc0xvZ2lufHxmdW5jdGlvbiAoKXtyZXR1cm4gdHJ1ZX0pKTtcXFxcXFxcXG4gICAgICAgICAgICBfMHg0N2E5YjRbJ0ZVUnB5J10ocHV0VmFyLCAnamRSb3V0ZScsIF8weDQ3YTliNFsnWElPYkInXSk7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgIH1cXFxcXFxcXG4gICAgcmV0dXJuIGdldFZhcihfMHg0N2E5YjRbJ0ZVamRtJ10pO1xcXFxcXFxcbn1cXFxcXFxcXG52YXIganhJdGVtID0ge1xcXFxcXFxcbiAgICAnanhMaXN0JzogZnVuY3Rpb24oKSB7XFxcXFxcXFxuICAgICAgICB2YXIgXzB4NGMwNDI3ID0ge1xcXFxcXFxcbiAgICAgICAgICAgICdVVldvRic6IGZ1bmN0aW9uKF8weDI2YmIwNywgXzB4MjIxYjRkKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHgyNmJiMDcgKyBfMHgyMjFiNGQ7XFxcXFxcXFxuICAgICAgICAgICAgfSxcXFxcXFxcXG4gICAgICAgICAgICAnY29sb3InOmZ1bmN0aW9uKHRleHQsIGNvbG9yKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHRleHQgKz0gXFxcXFxcXFxcXFxcXFxcIlxcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGlmICh0ZXh0LmluZGV4T2YoXFxcXFxcXFxcXFxcXFxcIuKAnOKAnOKAneKAnVxcXFxcXFxcXFxcXFxcXCIpID09PSAwKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB0ZXh0LnJlcGxhY2UoXFxcXFxcXFxcXFxcXFxcIuKAnOKAnOKAneKAnVxcXFxcXFxcXFxcXFxcXCIsIFxcXFxcXFxcXFxcXFxcXCJcXFxcXFxcXFxcXFxcXFwiKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXFxcXFxcXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSdcXFxcXFxcXFxcXFxcXFwiICsgY29sb3IgKyBcXFxcXFxcXFxcXFxcXFwiJz5cXFxcXFxcXFxcXFxcXFwiICsgdGV4dCArIFxcXFxcXFxcXFxcXFxcXCI8L2ZvbnQ+XFxcXFxcXFxcXFxcXFxcIjtcXFxcXFxcXG4gICAgICAgICAgICB9LFxcXFxcXFxcbiAgICAgICAgICAgICdreldESyc6IGZ1bmN0aW9uKF8weDQ4NTRhOSwgXzB4M2U5OGM1KSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHg0ODU0YTkgKyBfMHgzZTk4YzU7XFxcXFxcXFxuICAgICAgICAgICAgfSxcXFxcXFxcXG4gICAgICAgICAgICAnWFh5UXInOiAn56e75YqoIycsXFxcXFxcXFxuICAgICAgICAgICAgJ2d0VW5qJzogZnVuY3Rpb24oXzB4NTlhYWY3LCBfMHgyMmM2NmIpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDU5YWFmNyArIF8weDIyYzY2YjtcXFxcXFxcXG4gICAgICAgICAgICB9LFxcXFxcXFxcbiAgICAgICAgICAgICdVdGZXZic6ICfigJjigJjigJnigJk8c21hbGw+PHNwYW4gc3R5bGU9XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCJjb2xvcjojRkU5QTJFXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCI+JyxcXFxcXFxcXG4gICAgICAgICAgICAnUU92SlYnOiAn56e75YqoOiAnLFxcXFxcXFxcbiAgICAgICAgICAgICdBQkV3Qic6ICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcImNvbG9yOiMyOThBMDhcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcIj4nLFxcXFxcXFxcbiAgICAgICAgICAgICdvenpXRyc6ICd0ZXh0XzInLFxcXFxcXFxcbiAgICAgICAgICAgICduV2ZWUic6IGZ1bmN0aW9uKF8weDQ4MGYzYSwgXzB4NGM4NGZjKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHg0ODBmM2EgKyBfMHg0Yzg0ZmM7XFxcXFxcXFxuICAgICAgICAgICAgfSxcXFxcXFxcXG4gICAgICAgICAgICAnSkNjTlknOiAncGFyc2VSb3V0ZScsXFxcXFxcXFxuICAgICAgICAgICAgJ3JnRElwJzogJ2JpYW5qaScsXFxcXFxcXFxuICAgICAgICAgICAgJ2hvSWRKJzogJ+KAmOKAmOKAmeKAmTxiaWc+PHNwYW4gc3R5bGU9XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCJjb2xvcjojNkVCODk3XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCI+5pawIOW7uiDop6Mg5p6QJyxcXFxcXFxcXG4gICAgICAgICAgICAnRnJHT0gnOiBmdW5jdGlvbihfMHgxMmQ2ZGIsIF8weDJhMDY4ZCkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4MTJkNmRiIDwgXzB4MmEwNjhkO1xcXFxcXFxcbiAgICAgICAgICAgIH0sXFxcXFxcXFxuICAgICAgICAgICAgJ29DQ1NqJzogZnVuY3Rpb24oXzB4MTliMTc4LCBfMHg0ZWY4ZjYpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDE5YjE3OCA9PT0gXzB4NGVmOGY2O1xcXFxcXFxcbiAgICAgICAgICAgIH0sXFxcXFxcXFxuICAgICAgICAgICAgJ0haaGxjJzogZnVuY3Rpb24oXzB4NWNhZTAzLCBfMHgyNmUyNDIpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDVjYWUwMyA9PSBfMHgyNmUyNDI7XFxcXFxcXFxuICAgICAgICAgICAgfSxcXFxcXFxcXG4gICAgICAgICAgICAnY2dJZUEnOiBmdW5jdGlvbihfMHgyNWUzNjgsIF8weDhiYzhlOSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4MjVlMzY4ICsgXzB4OGJjOGU5O1xcXFxcXFxcbiAgICAgICAgICAgIH0sXFxcXFxcXFxuICAgICAgICAgICAgJ3hkckZ2JzogZnVuY3Rpb24oXzB4NGFiNWQ4LCBfMHgyMTI0MmYpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDRhYjVkOCArIF8weDIxMjQyZjtcXFxcXFxcXG4gICAgICAgICAgICB9LFxcXFxcXFxcbiAgICAgICAgICAgICd5d2p1eCc6IGZ1bmN0aW9uKF8weDVlMzA1MSwgXzB4NGUwMjMwKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHg1ZTMwNTEoXzB4NGUwMjMwKTtcXFxcXFxcXG4gICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICB9O1xcXFxcXFxcbiAgICAgICAgdmFyIF8weDFkOGJiMSA9IGdldFZhcihfMHg0YzA0MjdbJ0pDY05ZJ10pO1xcXFxcXFxcbiAgICAgICAgdmFyIF8weDNiODlhYiA9IHBhcnNlRmlsZVsndGl0bGUnXTtcXFxcXFxcXG4gICAgICAgIHZhciBfMHg0OWRhOTYgPSBnZXRWYXIoXzB4NGMwNDI3WydyZ0RJcCddKTtcXFxcXFxcXG4gICAgICAgIGQucHVzaCh7XFxcXFxcXFxuICAgICAgICAgICAgdGl0bGU6IF8weDRjMDQyN1snaG9JZEonXSxcXFxcXFxcXG4gICAgICAgICAgICBkZXNjOifms6jmhI865L2N572u5pON5L2c5Yqf6IO95Y+q5Zyo5YiG57G7562b6YCJ5Li65YWo6YOo5pe255Sf5pWIXFxcXFxcXFxcXFxcXFxcXG7kuIvmlrnmkJzntKLmjInlkI3np7DmiJblnLDlnYAs6YeN572u6K+355WZ56m65oiW54K56Kej5p6Q5pWw6YeP5oyJ6ZKuJyxcXFxcXFxcXG4gICAgICAgICAgICB1cmw6IGJqSXRlbVsneGpQYXJzZSddKCksXFxcXFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXFxcXFxcXG4gICAgICAgICAgICBleHRyYToge1xcXFxcXFxcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTpmYWxzZVxcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgIH0pO1xcXFxcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcXFxcXG4gICAgICAgICAgICB0aXRsZTon5pCc57SiJyxcXFxcXFxcXG4gICAgICAgICAgICBkZXNjOidtZW5neCcsXFxcXFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J2lucHV0JyxcXFxcXFxcXG4gICAgICAgICAgICBleHRyYToge1xcXFxcXFxcbiAgICAgICAgICAgICAgICBvbkNoYW5nZTogXFxcXFxcXFxcXFxcXFxcInB1dFZhcignZHAuc2VhcmNoSngnLGlucHV0KVxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogdHJ1ZSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgdGV4dFNpemU6IDExLFxcXFxcXFxcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6Z2V0VmFyKCdkcC5zZWFyY2hKeCcsJycpLFxcXFxcXFxcbiAgICAgICAgICAgIH0sXFxcXFxcXFxuICAgICAgICAgICAgdXJsOiQudG9TdHJpbmcoKCk9PntcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXFxcXFxcXG4gICAgICAgICAgICB9KVxcXFxcXFxcbiAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICBsZXQgZmlsdGVycyA9IFsn5YWo6YOoJywn6ZO+5o6lJywnanNvbicsJ+WFjeWXhSddO1xcXFxcXFxcbiAgICAgICAgZm9yKGxldCBvIGluIGZpbHRlcnMpe1xcXFxcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHRpdGxlOmdldFZhcignZG4uanhfZmlsdGVyJywn5YWo6YOoJyk9PT1maWx0ZXJzW29dPyfigJzigJzigJ3igJ08c3BhbiBzdHlsZT1cXFxcXFxcXFxcXFxcXFwiY29sb3I6IzI5OEEwOFxcXFxcXFxcXFxcXFxcXCI+JytmaWx0ZXJzW29dOmZpbHRlcnNbb10sXFxcXFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXFxcXFxcXG4gICAgICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGl0KT0+e1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdkbi5qeF9maWx0ZXInLGl0KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxcXFxcbiAgICAgICAgICAgICAgICB9LGZpbHRlcnNbb10pLFxcXFxcXFxcbiAgICAgICAgICAgIH0pO1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgdmFyIF8weDJlY2JlNSA9IF8weDNiODlhYlsnbGVuZ3RoJ107XFxcXFxcXFxuICAgICAgICB2YXIganNvbj17dGl0bGU6W10sY29kZXM6e319O1xcXFxcXFxcbiAgICAgICAgbGV0IHNldEZpbGUgPSByZXF1ZXN0KCdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicpO1xcXFxcXFxcbiAgICAgICAgdHJ5IHtcXFxcXFxcXG4gICAgICAgICAgICBldmFsKCdqc29uPScrc2V0RmlsZSk7XFxcXFxcXFxuICAgICAgICB9Y2F0Y2ggKGUpIHtcXFxcXFxcXG4gICAgICAgICAgICBsb2coJ0pzb27op6PmnpDlj5HnlJ/kuobplJnor686JytlLm1lc3NhZ2UpO1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgaWYoZ2V0VmFyKCdkbi5qeF9maWx0ZXInLCflhajpg6gnKT09PSfpk77mjqUnKXtcXFxcXFxcXG4gICAgICAgICAgICBfMHgzYjg5YWIgPSBfMHgzYjg5YWIuZmlsdGVyKGl0PT4oIS/CqSQvLnRlc3QoaXQpKSYmdHlwZW9mKGpzb24uY29kZXNbXzB4NGMwNDI3WyduV2ZWUiddKGl0LCAnJylbJ3JlcGxhY2UnXSgvaHR0cC4qXFxcXFxcXFxcXFxcXFxcXC9cXFxcXFxcXFxcXFxcXFxcLy9nLCAnJyldKT09PSdzdHJpbmcnKTtcXFxcXFxcXG4gICAgICAgIH1lbHNlIGlmKGdldFZhcignZG4uanhfZmlsdGVyJywn5YWo6YOoJyk9PT0n5YWN5ZeFJyl7XFxcXFxcXFxuICAgICAgICAgICAgXzB4M2I4OWFiID0gXzB4M2I4OWFiLmZpbHRlcihpdD0+dHlwZW9mKGpzb24uY29kZXNbXzB4NGMwNDI3WyduV2ZWUiddKGl0LCAnJylbJ3JlcGxhY2UnXSgvaHR0cC4qXFxcXFxcXFxcXFxcXFxcXC9cXFxcXFxcXFxcXFxcXFxcLy9nLCAnJyldKT09PSdmdW5jdGlvbicpO1xcXFxcXFxcbiAgICAgICAgfWVsc2UgaWYoZ2V0VmFyKCdkbi5qeF9maWx0ZXInLCflhajpg6gnKT09PSdqc29uJyl7XFxcXFxcXFxuICAgICAgICAgICAgXzB4M2I4OWFiID0gXzB4M2I4OWFiLmZpbHRlcihpdD0+KC/CqSQvLnRlc3QoaXQpKSYmdHlwZW9mKGpzb24uY29kZXNbXzB4NGMwNDI3WyduV2ZWUiddKGl0LCAnJylbJ3JlcGxhY2UnXSgvaHR0cC4qXFxcXFxcXFxcXFxcXFxcXC9cXFxcXFxcXFxcXFxcXFxcLy9nLCAnJyldKT09PSdzdHJpbmcnKTtcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgIGlmKGdldFZhcignZHAuc2VhcmNoSngnLCcnKSl7XFxcXFxcXFxuICAgICAgICAgICAgXzB4M2I4OWFiID0gXzB4M2I4OWFiLmZpbHRlcihpdD0+KGpzb24uY29kZXNbXzB4NGMwNDI3WyduV2ZWUiddKGl0LCAnJyldKycnKS5pbmNsdWRlcyhnZXRWYXIoJ2RwLnNlYXJjaEp4JykpfHxpdC5pbmNsdWRlcyhnZXRWYXIoJ2RwLnNlYXJjaEp4JywnJykpKTtcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgIGQucHVzaCh7XFxcXFxcXFxuICAgICAgICAgICAgdGl0bGU6XFxcXFxcXFxcXFxcXFxcIuino+aekOaVsDpcXFxcXFxcXFxcXFxcXFwiK18weDRjMDQyNy5jb2xvcihfMHgzYjg5YWIubGVuZ3RoLCcjZmY3MDAwJyksXFxcXFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6XFxcXFxcXFxcXFxcXFxcInNjcm9sbF9idXR0b25cXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpPT57XFxcXFxcXFxuICAgICAgICAgICAgICAgIGNsZWFyVmFyKCdkcC5zZWFyY2hKeCcpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3sumHjee9ridcXFxcXFxcXG4gICAgICAgICAgICB9KVxcXFxcXFxcbiAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICAvLyDkuIvpnaLmmK/op6PmnpDliJfooajmjpLliJdcXFxcXFxcXG4gICAgICAgIC8vIGZvciAodmFyIF8weGUyYzNkOCA9IDB4MDsgXzB4NGMwNDI3WydGckdPSCddKF8weGUyYzNkOCwgXzB4MmVjYmU1KTsgXzB4ZTJjM2Q4KyspIHtcXFxcXFxcXG4gICAgICAgIGZvciAobGV0IF8weGUyYzNkOCBpbiBfMHgzYjg5YWIpIHtcXFxcXFxcXG4gICAgICAgICAgICB2YXIgXzB4MzM3ODhjID0gXzB4M2I4OWFiW18weGUyYzNkOF07XFxcXFxcXFxuICAgICAgICAgICAgdmFyIF8weDM3ODcxZSA9IF8weDRjMDQyN1snbldmVlInXShfMHgzMzc4OGMsICcnKVsncmVwbGFjZSddKC9odHRwLipcXFxcXFxcXFxcXFxcXFxcL1xcXFxcXFxcXFxcXFxcXFwvL2csICcnKTtcXFxcXFxcXG4gICAgICAgICAgICBpZiAoL+enu+WKqC8gWyd0ZXN0J10oXzB4NDlkYTk2KSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICBpZiAoXzB4NGMwNDI3WydvQ0NTaiddKCd1S0x4RicsICd1S0x4RicpKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDRjMDQyN1snSFpobGMnXShfMHg0YzA0MjdbJ1hYeVFyJ10gKyBfMHhlMmMzZDgsIF8weDQ5ZGE5NikgPyBfMHg0YzA0MjdbJ25XZlZSJ10oXzB4NGMwNDI3WydjZ0llQSddKF8weDRjMDQyN1snVXRmV2YnXSwgXzB4NGMwNDI3WydRT3ZKViddKSwgXzB4Mzc4NzFlKSA6IF8weDRjMDQyN1snY2dJZUEnXShfMHg0YzA0MjdbJ0FCRXdCJ10sIF8weDM3ODcxZSksXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCc6IGJqSXRlbVsneWRQYXJzZSddKF8weDQ5ZGE5NiwgXzB4ZTJjM2Q4KSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiAndGV4dF8yJ1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgXzB4MmJjNjE4ID0gXzB4M2I4OWFiW18weGUyYzNkOF07XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgXzB4NWNmNDE3ID0gXzB4NGMwNDI3WydVVldvRiddKF8weDJiYzYxOCwgJycpWydyZXBsYWNlJ10oL2h0dHAuKlxcXFxcXFxcXFxcXFxcXFwvXFxcXFxcXFxcXFxcXFxcXC8vZywgJycpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKC/np7vliqgvIFsndGVzdCddKF8weDQ5ZGE5NikpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg0YzA0MjdbJ2t6V0RLJ10oXzB4NGMwNDI3WydYWHlRciddLCBfMHhlMmMzZDgpID09IF8weDQ5ZGE5NiA/IF8weDRjMDQyN1snZ3RVbmonXShfMHg0YzA0MjdbJ2d0VW5qJ10oXzB4NGMwNDI3WydVdGZXZiddLCBfMHg0YzA0MjdbJ1FPdkpWJ10pLCBfMHg1Y2Y0MTcpIDogXzB4NGMwNDI3WydBQkV3QiddICsgXzB4NWNmNDE3LFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWyd5ZFBhcnNlJ10oXzB4NDlkYTk2LCBfMHhlMmMzZDgpLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg0YzA0MjdbJ296eldHJ11cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF8weDExOTM2NSA9IFtfMHgyYmM2MTgsIF8weDRjMDQyN1snZ3RVbmonXShfMHhlMmMzZDgsICd8fCcpXVsnam9pbiddKCd8fCcpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDRjMDQyN1snbldmVlInXShfMHg0YzA0MjdbJ0FCRXdCJ10sIF8weDVjZjQxNyksXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDRjMDQyN1snb3p6V0cnXSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCc6IGJqSXRlbVsneGxTZWxlY3QnXShfMHgxMTkzNjUsIF8weDJlY2JlNVsndG9TdHJpbmcnXSgpKVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgdmFyIF8weGI3MDE5MiA9IFtfMHgzMzc4OGMsIF8weGUyYzNkOCArICd8fCddWydqb2luJ10oJ3x8Jyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIC8vIOi/qui/quW9semZonx8MHx8ICDlkI3np7B8fOe0ouW8lSDnmoTmlbDnu4RcXFxcXFxcXG4gICAgICAgICAgICAgICAgLy8gQUJFd0Ig5piv57u/6ImyIF8weDM3ODcxZSDmmK/moIfpopjlkI3np7AgIHhkckZ25piv5a2X56ym5Liy6L+e5o6l5Ye95pWwXFxcXFxcXFxuICAgICAgICAgICAgICAgIC8vIGxldCBmbGFnID0gJ+KAmOKAmOKTiuKAmeKAmSc7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGxldCBmbGFnID0gXzB4NGMwNDI3LmNvbG9yKCfik4onLCcjMDA1MWZmJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGlmKHR5cGVvZihqc29uLmNvZGVzW18weDM3ODcxZV0pPT09J2Z1bmN0aW9uJyl7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAvLyBmbGFnID0gJ+KAnOKAnOKSv+KAneKAnSc7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBmbGFnID0gXzB4NGMwNDI3LmNvbG9yKCfikr8nLCcjZmY3MDAwJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZihqc29uLmNvZGVzW18weDM3ODcxZV0pPT09J3VuZGVmaW5lZCcpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgZmxhZyA9ICcnO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgIC8vIGxldCBjbHMgPSAnPHNwYW4gc3R5bGU9XFxcXFxcXFxcXFxcXFxcImNvbG9yOiMyOThBMDhcXFxcXFxcXFxcXFxcXFwiPic7XFxcXFxcXFxuICAgICAgICAgICAgICAgIC8vIGxldCB0aXRsZSA9IF8weDRjMDQyN1sneGRyRnYnXShfMHg0YzA0MjdbJ0FCRXdCJ10sIGZsYWcrXzB4Mzc4NzFlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgLy8gbGV0IHRpdGxlID0gZmxhZytjbHMrXzB4Mzc4NzFlO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBmbGFnK18weDRjMDQyNy5jb2xvcihfMHgzNzg3MWUsJyMyOThBMDgnKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IHRpdGxlLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgLy8gJ3RpdGxlJzogXzB4Mzc4NzFlLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NGMwNDI3WydvenpXRyddLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgJ3VybCc6IGJqSXRlbVsneGxTZWxlY3QnXShfMHhiNzAxOTIsIF8weDJlY2JlNVsndG9TdHJpbmcnXSgpKVxcXFxcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcXFxcXG4gICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICBfMHg0YzA0MjdbJ3l3anV4J10oY2xlYXJWYXIsIF8weDRjMDQyN1sncmdESXAnXSk7XFxcXFxcXFxuICAgIH0sXFxcXFxcXFxuICAgICdscUZpbGUnOiBmdW5jdGlvbigpIHtcXFxcXFxcXG4gICAgICAgIHZhciBfMHg1NDFkNzYgPSB7XFxcXFxcXFxuICAgICAgICAgICAgJ2FXaVJzJzogZnVuY3Rpb24oXzB4NDhkNzdiLCBfMHgxOTE2MWYsIF8weDIxY2I4NSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NDhkNzdiKF8weDE5MTYxZiwgXzB4MjFjYjg1KTtcXFxcXFxcXG4gICAgICAgICAgICB9LFxcXFxcXFxcbiAgICAgICAgICAgICd3U2Zueic6IGZ1bmN0aW9uKF8weDQ4NTBlYSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NDg1MGVhKCk7XFxcXFxcXFxuICAgICAgICAgICAgfSxcXFxcXFxcXG4gICAgICAgICAgICAncVJRZEEnOiAnamRSb3V0ZScsXFxcXFxcXFxuICAgICAgICAgICAgJ1dRaXFrJzogJ3ZhciB4ZFJvdXRlPVxcXFxcXFxcXFxcXFxcXCJcXFxcXFxcXFxcXFxcXFwiOycsXFxcXFxcXFxuICAgICAgICAgICAgJ3BzR2R0JzogZnVuY3Rpb24oXzB4MTcwNzgwLCBfMHgzYjUxMmEpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDE3MDc4MCA9PSBfMHgzYjUxMmE7XFxcXFxcXFxuICAgICAgICAgICAgfSxcXFxcXFxcXG4gICAgICAgICAgICAnaW14cmknOiAndHJ1ZScsXFxcXFxcXFxuICAgICAgICAgICAgJ25Ta2p4JzogZnVuY3Rpb24oXzB4OTViZjM4LCBfMHgzMTNmMjUpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDk1YmYzOCAhPT0gXzB4MzEzZjI1O1xcXFxcXFxcbiAgICAgICAgICAgIH0sXFxcXFxcXFxuICAgICAgICAgICAgJ2lWTmVNJzogJ2VlTEptJyxcXFxcXFxcXG4gICAgICAgICAgICAnSXdNVGwnOiAnMHwxfDV8OXwxMXwzfDZ8N3wxMHw0fDJ8OCcsXFxcXFxcXFxuICAgICAgICAgICAgJ3hmZEhrJzogJ+aLieWPluS4u+aPkuS7tuWSjOe9kemhteiEmuacrCcsXFxcXFxcXFxuICAgICAgICAgICAgJ3JHTHVBJzogJ+S4u+aPkuS7tuWtmOaUvui3r+W+hDogL2NhY2hlL1BhcnNlX0RuLmpzXFxcXFxcXFxcXFxcXFxcXHgwYee9kemhteiEmuacrOWtmOaUvui3r+W+hDogL2NhY2hlL1BhcnNlX0RuLmh0bWwnLFxcXFxcXFxcbiAgICAgICAgICAgICd6UVNMRSc6ICd0ZXh0X2NlbnRlcl8xJyxcXFxcXFxcXG4gICAgICAgICAgICAnaHZpRGwnOiBmdW5jdGlvbihfMHgyNmRiNjIsIF8weDMxMmYxYykge1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4MjZkYjYyKF8weDMxMmYxYyk7XFxcXFxcXFxuICAgICAgICAgICAgfSxcXFxcXFxcXG4gICAgICAgICAgICAnWnhVZ3QnOiAn5pON5L2c5oyH5byVJyxcXFxcXFxcXG4gICAgICAgICAgICAnc1dGb2MnOiBmdW5jdGlvbihfMHgyYTA0NGIsIF8weDE0OWEzZikge1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4MmEwNDRiICsgXzB4MTQ5YTNmO1xcXFxcXFxcbiAgICAgICAgICAgIH0sXFxcXFxcXFxuICAgICAgICAgICAgJ09FaGF0JzogJ+aLieWPluS7o+eggScsXFxcXFxcXFxuICAgICAgICAgICAgJ1p2dFN1JzogJ+e8lui+keino+aekCcsXFxcXFxcXFxuICAgICAgICAgICAgJ2dYS01iJzogJ3RvYXN0Oi8v6K+35YWI5ouJ5Y+W5YiX6KGoJyxcXFxcXFxcXG4gICAgICAgICAgICAnV0NPREMnOiBmdW5jdGlvbihfMHg0YWQzZDUsIF8weDMxZmExZSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NGFkM2Q1IDwgXzB4MzFmYTFlO1xcXFxcXFxcbiAgICAgICAgICAgIH0sXFxcXFxcXFxuICAgICAgICAgICAgJ3JBa0FoJzogJ3RleHRfMycsXFxcXFxcXFxuICAgICAgICAgICAgJ3lXYU9JJzogJ+aBouWkjeaPkuS7tui3r+W+hOS4uum7mOiupCcsXFxcXFxcXFxuICAgICAgICAgICAgJ3lqeWpLJzogJ+W9k+WJjeiuvue9ruS4ujogJyxcXFxcXFxcXG4gICAgICAgICAgICAndEhYZUUnOiAn5ouJ5Y+W6Kej5p6Q5YiX6KGo5oiW6ICF6Kej5p6Q5Luj56CBJyxcXFxcXFxcXG4gICAgICAgICAgICAnR01VWXUnOiAn5a2Y5pS+6Lev5b6EOiAvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJyxcXFxcXFxcXG4gICAgICAgICAgICAnbXBaQlonOiAnbGluZV9ibGFuaycsXFxcXFxcXFxuICAgICAgICAgICAgJ3h2cWdGJzogJ+i+k+WFpeacieaViOaPkuS7tuWcsOWdgCcsXFxcXFxcXFxuICAgICAgICAgICAgJ2hldUt4JzogJ3B1dFZhcihcXFxcXFxcXFxcXFxcXFwicGx1Z2luTGlua1xcXFxcXFxcXFxcXFxcXCIsaW5wdXQpJyxcXFxcXFxcXG4gICAgICAgICAgICAnSWlmaWEnOiAn4oCY4oCY4oCZ4oCZPHN0cm9uZz48YmlnPueZu+W9leaPkOekuicsXFxcXFxcXFxuICAgICAgICAgICAgJ1BGUkhBJzogJ+S9v+eUqOebuOWFs+WKn+iDvemcgOeZu+W9leinhueVjOiuuuWdm+i0puWPt1xcXFxcXFxcXFxcXFxcXFxu5aaC5pyJ6Zeu6aKY5YmN5b6A6K665Z2b5LqG6Kej6K+m5oOFJyxcXFxcXFxcXG4gICAgICAgICAgICAnVUx3a1QnOiAnaHR0cHM6Ly9oYWlrdW9zaGlqaWUuY24vdXNlci9zaWduaW4nXFxcXFxcXFxuICAgICAgICB9O1xcXFxcXFxcbiAgICAgICAgaWYgKF8weDU0MWQ3NlsncHNHZHQnXShfMHg1NDFkNzZbJ3dTZm56J10oYmJzWVopLCBfMHg1NDFkNzZbJ2lteHJpJ10pfHx0cnVlKSB7XFxcXFxcXFxuICAgICAgICAgICAgaWYgKF8weDU0MWQ3NlsnblNrangnXShfMHg1NDFkNzZbJ2lWTmVNJ10sIF8weDU0MWQ3NlsnaVZOZU0nXSkpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgXzB4NTQxZDc2WydhV2lScyddKHB1dFZhciwgJ2Jic1laJywgXzB4NTQxZDc2Wyd3U2ZueiddKGlzTG9naW58fGZ1bmN0aW9uICgpe3JldHVybiB0cnVlfSkpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBfMHg1NDFkNzZbJ2FXaVJzJ10ocHV0VmFyLCBfMHg1NDFkNzZbJ3FSUWRBJ10sIF8weDU0MWQ3NlsnV1FpcWsnXSk7XFxcXFxcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgdmFyIF8weDRkMjVmZiA9IF8weDU0MWQ3NlsnSXdNVGwnXVsnc3BsaXQnXSgnfCcpLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgXzB4NGE5N2M5ID0gMHgwO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB3aGlsZSAoISFbXSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfMHg0ZDI1ZmZbXzB4NGE5N2M5KytdKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMCc6XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg1NDFkNzZbJ3hmZEhrJ10sXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWydwdWxsU2NyaXB0J10oX215U2V0WydjamNhY2hlJ10sIF9teVNldFsneDVjYWNoZSddKSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXNjJzogXzB4NTQxZDc2WydyR0x1QSddLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NTQxZDc2Wyd6UVNMRSddXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcxJzpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXzB4NTQxZDc2WydodmlEbCddKGV2YWwsIF8weDU0MWQ3NlsnaHZpRGwnXShnZXRWYXIsIF8weDU0MWQ3NlsncVJRZEEnXSkpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcyJzpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6ICdsaW5lX2JsYW5rJ1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMyc6XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfMHgyYWIzOTkgPSAnaGlrZXI6Ly9lbXB0eSNub0hpc3RvcnkjQHJ1bGU9anM6dGhpcy5kPVtdOyQucmVxdWlyZShcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2p4SXRlbT9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcXFxcXFxcXFwiKS5qeExpc3QoKTtzZXRSZXN1bHQoZCk7JztcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnNCc6XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg1NDFkNzZbJ1p4VWd0J10sXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogdHlwZW9mIGN6R3VpZGUgPT0gJ2Z1bmN0aW9uJyA/IGN6R3VpZGUoKSA6ICcnLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NTQxZDc2Wyd6UVNMRSddXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc1JzpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGRSb3V0ZSA9IF8weDU0MWQ3Nlsnc1dGb2MnXSh4ZFJvdXRlLCBfbXlTZXRbJ3BhcnNlUm91dGUnXSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzYnOlxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgXzB4M2E5YWZlID0gW3tcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6ICfmi4nlj5bliJfooagnLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCc6IGJqSXRlbVsncHVsbENvZGUnXSgn5YiX6KGoJylcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogXzB4NTQxZDc2WydPRWhhdCddLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCc6IGJqSXRlbVsncHVsbENvZGUnXSgn5Luj56CBJylcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogXzB4NTQxZDc2WydadnRTdSddLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCc6IF8weDU0MWQ3NlsnaHZpRGwnXShmaWxlRXhpc3QsIF8weDU0MWQ3NlsnaHZpRGwnXShnZXRWYXIsICdwYXJzZVJvdXRlJykpID09ICEhW10gPyBfMHgyYWIzOTkgOiBfMHg1NDFkNzZbJ2dYS01iJ11cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfV07XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzcnOlxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfMHgxYTJjZGIgPSAweDA7IF8weDU0MWQ3NlsnV0NPREMnXShfMHgxYTJjZGIsIF8weDNhOWFmZVsnbGVuZ3RoJ10pOyBfMHgxYTJjZGIrKykge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHgzYTlhZmVbXzB4MWEyY2RiXVsndGl0bGUnXSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogXzB4M2E5YWZlW18weDFhMmNkYl1bJ3VybCddLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDU0MWQ3NlsnckFrQWgnXVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnOCc6XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg1NDFkNzZbJ3lXYU9JJ10sXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWydoZlBsdWdpbiddKF9teVNldFsncGFyc2VSb3V0ZSddKSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXNjJzogXzB4NTQxZDc2WydzV0ZvYyddKF8weDU0MWQ3NlsneWp5aksnXSArIG15U2V0WydjaiddLCAnXFxcXFxcXFxcXFxcXFxcXG7lrZjmlL7ot6/lvoQ6IC9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nKSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDU0MWQ3NlsnelFTTEUnXVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnOSc6XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg1NDFkNzZbJ3RIWGVFJ10sXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogJ3RvYXN0Oi8v6K+35Zyo5LiL5pa56YCJ6aG55pON5L2cJyxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXNjJzogXzB4NTQxZDc2WydHTVVZdSddLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NTQxZDc2Wyd6UVNMRSddXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcxMCc6XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg1NDFkNzZbJ21wWkJaJ11cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzExJzpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXNjJzogXzB4NTQxZDc2Wyd4dnFnRiddLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogJ2lucHV0JyxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHRyYSc6IHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGVWaXNpYmxlJzogIVtdLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWZhdWx0VmFsdWUnOiBfMHg1NDFkNzZbJ2h2aURsJ10oZ2V0VmFyLCAncGx1Z2luTGluaycpLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbkNoYW5nZSc6IF8weDU0MWQ3NlsnaGV1S3gnXVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXFxcXFxuICAgICAgICAgICAgZFsncHVzaCddKHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgJ3RpdGxlJzogXzB4NTQxZDc2WydJaWZpYSddLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAnZGVzYyc6IF8weDU0MWQ3NlsnUEZSSEEnXSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgJ3VybCc6IF8weDU0MWQ3NlsnVUx3a1QnXSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NTQxZDc2Wyd6UVNMRSddXFxcXFxcXFxuICAgICAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgIH1cXFxcXFxcXG59O1xcXFxcXFxcbiQuZXhwb3J0cyA9IGp4SXRlbTtcXFxcXFxcIn0se1xcXFxcXFwiY29sX3R5cGVcXFxcXFxcIjpcXFxcXFxcIm1vdmllXzNcXFxcXFxcIixcXFxcXFxcIm5hbWVcXFxcXFxcIjpcXFxcXFxcIuino+aekFVybOe8lui+kVxcXFxcXFwiLFxcXFxcXFwicGF0aFxcXFxcXFwiOlxcXFxcXFwiRWRpdFVybFxcXFxcXFwiLFxcXFxcXFwicnVsZVxcXFxcXFwiOlxcXFxcXFwianM6XFxcXFxcXFxuc2V0UGFnZVRpdGxlKFxcXFxcXFxcXFxcXFxcXCLmj5Lku7bmjqXlj6Porr7nva5cXFxcXFxcXFxcXFxcXFwiKTtcXFxcXFxcXG5sZXQgZCA9IFtdO1xcXFxcXFxcbmxldCBwYXJzZVVybFRleHQgPSByZXF1ZXN0KFxcXFxcXFxcXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXFxcXFxcXFxcXFxcXCIpO1xcXFxcXFxcbmxldCBwYXJzZVVybEFycmF5ID0gcGFyc2VVcmxUZXh0LnNwbGl0KC9cXFxcXFxcXFxcXFxcXFxcbi8pO1xcXFxcXFxcbmxldCBzZWxlY3RlZCA9IGdldEl0ZW0oXFxcXFxcXFxcXFxcXFxcInNlbGVjdGVkXFxcXFxcXFxcXFxcXFxcIiwgXFxcXFxcXFxcXFxcXFxcIlxcXFxcXFxcXFxcXFxcXCIpO1xcXFxcXFxcbmxldCBjbGFzc1RhYiA9IFtcXFxcXFxcXG4gICAgW1xcXFxcXFxcXFxcXFxcXCLpgInmi6lcXFxcXFxcXFxcXFxcXFwiLCBcXFxcXFxcXFxcXFxcXFwiMFxcXFxcXFxcXFxcXFxcXCJdLFxcXFxcXFxcbiAgICBbXFxcXFxcXFxcXFxcXFxcIuS/ruaUuVxcXFxcXFxcXFxcXFxcXCIsIFxcXFxcXFxcXFxcXFxcXCIxXFxcXFxcXFxcXFxcXFxcIl0sXFxcXFxcXFxuICAgIFtcXFxcXFxcXFxcXFxcXFwi5Yig6ZmkXFxcXFxcXFxcXFxcXFxcIiwgXFxcXFxcXFxcXFxcXFxcIjJcXFxcXFxcXFxcXFxcXFwiXVxcXFxcXFxcbl07XFxcXFxcXFxubGV0IGNsYXNzQSA9IGdldFZhcihcXFxcXFxcXFxcXFxcXFwiY2xhc3NcXFxcXFxcXFxcXFxcXFwiLCBcXFxcXFxcXFxcXFxcXFwiMFxcXFxcXFxcXFxcXFxcXCIpO1xcXFxcXFxcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoKSA9PiB7XFxcXFxcXFxuICAgIGNsZWFyVmFyKFxcXFxcXFxcXFxcXFxcXCJjbGFzc1xcXFxcXFxcXFxcXFxcXCIpO1xcXFxcXFxcbn0pKTtcXFxcXFxcXG5kLnB1c2goe1xcXFxcXFxcbiAgICB0aXRsZTogXFxcXFxcXFxcXFxcXFxcIua3u+WKoOaWsOeahOino+aekFxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgIHVybDogJChcXFxcXFxcXFxcXFxcXFwiXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXFxcXFxcXFwi6Kej5p6Q5ZCNJibop6PmnpBVUkxcXFxcXFxcXFxcXFxcXFwiKS5pbnB1dCgoKSA9PiB7XFxcXFxcXFxuICAgICAgICBsZXQgcGFyc2VVcmxUZXh0ID0gcmVxdWVzdChcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFxcXFxcXFxcXFxcXFwiKTtcXFxcXFxcXG4gICAgICAgIGxldCBwYXJzZVVybEFycmF5ID0gcGFyc2VVcmxUZXh0LnNwbGl0KC9cXFxcXFxcXFxcXFxcXFxcbi8pO1xcXFxcXFxcbiAgICAgICAgaWYoaW5wdXQuc3BsaXQoXFxcXFxcXFxcXFxcXFxcIiYmXFxcXFxcXFxcXFxcXFxcIikubGVuZ3RoIT09Mil7XFxcXFxcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFxcXFxcXFxcXCJ0b2FzdDovL+agvOW8j+S4jeato+ehrlxcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICBwYXJzZVVybEFycmF5LnB1c2goaW5wdXQpO1xcXFxcXFxcbiAgICAgICAgcGFyc2VVcmxUZXh0ID0gcGFyc2VVcmxBcnJheS5qb2luKFxcXFxcXFxcXFxcXFxcXCJcXFxcXFxcXFxcXFxcXFxcblxcXFxcXFxcXFxcXFxcXCIpO1xcXFxcXFxcbiAgICAgICAgd3JpdGVGaWxlKFxcXFxcXFxcXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXFxcXFxcXFxcXFxcXCIsIHBhcnNlVXJsVGV4dCk7XFxcXFxcXFxuICAgICAgICBcXFxcXFxcXG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcXFxcXG4gICAgICAgIHJldHVybiBcXFxcXFxcXFxcXFxcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip9cXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcbiAgICB9KSxcXFxcXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFxcXFxcXFxcXCJzY3JvbGxfYnV0dG9uXFxcXFxcXFxcXFxcXFxcIlxcXFxcXFxcbn0pO1xcXFxcXFxcbmZvciAobGV0IGl0ZW0gb2YgY2xhc3NUYWIpIHtcXFxcXFxcXG4gICAgZC5wdXNoKHtcXFxcXFxcXG4gICAgICAgIHRpdGxlOiBpdGVtWzFdID09PSBjbGFzc0EgPyBcXFxcXFxcXFxcXFxcXFwi4oCc4oCcXFxcXFxcXFxcXFxcXFxcIiArIGl0ZW1bMF0gKyBcXFxcXFxcXFxcXFxcXFwi4oCd4oCdXFxcXFxcXFxcXFxcXFxcIiA6IGl0ZW1bMF0sXFxcXFxcXFxuICAgICAgICB1cmw6ICQoXFxcXFxcXFxcXFxcXFxcIiNub0xvYWRpbmcjXFxcXFxcXFxcXFxcXFxcIikubGF6eVJ1bGUoKGtleSkgPT4ge1xcXFxcXFxcbiAgICAgICAgICAgIHB1dFZhcihcXFxcXFxcXFxcXFxcXFwiY2xhc3NcXFxcXFxcXFxcXFxcXFwiLCBrZXkpO1xcXFxcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcXFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXFxcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcbiAgICAgICAgfSwgaXRlbVsxXSksXFxcXFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXFxcXFxcXFxcInNjcm9sbF9idXR0b25cXFxcXFxcXFxcXFxcXFwiXFxcXFxcXFxuICAgIH0pO1xcXFxcXFxcbn1cXFxcXFxcXG5sZXQgZnVuYztcXFxcXFxcXG5zd2l0Y2ggKGNsYXNzQSkge1xcXFxcXFxcbiAgICBjYXNlIFxcXFxcXFxcXFxcXFxcXCIwXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXG4gICAgICAgIGZ1bmMgPSBmdW5jdGlvbih1cmwsIHRpdGxlKSB7XFxcXFxcXFxuICAgICAgICAgICAgcmV0dXJuICQodXJsICsgXFxcXFxcXFxcXFxcXFxcIiNub0xvYWRpbmcjXFxcXFxcXFxcXFxcXFxcIikubGF6eVJ1bGUoKHRpdGxlKSA9PiB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGxvZyhcXFxcXFxcXFxcXFxcXFwiXFxcXFxcXFxcXFxcXFxcXG7mm7TmlLnmjqXlj6M+IFxcXFxcXFxcXFxcXFxcXCIgKyBpbnB1dCk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcXFxcXFxcXFxcXFxcInNlbGVjdGVkXFxcXFxcXFxcXFxcXFxcIiwgaW5wdXQpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFxcXFxcXFxcXCJzZWxlY3RlZDBcXFxcXFxcXFxcXFxcXFwiLCB0aXRsZSArIFxcXFxcXFxcXFxcXFxcXCImJlxcXFxcXFxcXFxcXFxcXCIgKyBpbnB1dCk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFxcXFxcXFxcXCJ0b2FzdDovL+S/ruaUueaIkOWKn1xcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxuICAgICAgICAgICAgfSwgdGl0bGUpO1xcXFxcXFxcbiAgICAgICAgfTtcXFxcXFxcXG4gICAgICAgIGJyZWFrO1xcXFxcXFxcbiAgICBjYXNlIFxcXFxcXFxcXFxcXFxcXCIxXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXG4gICAgICAgIGZ1bmMgPSBmdW5jdGlvbih1cmwsIHRpdGxlLCBpbmRleCkge1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiAkKHVybCwgXFxcXFxcXFxcXFxcXFxcIuivt+i+k+WFpeOAjFxcXFxcXFxcXFxcXFxcXCIgKyB0aXRsZSArIFxcXFxcXFxcXFxcXFxcXCLjgI3nmoTmlrDmjqXlj6NcXFxcXFxcXFxcXFxcXFwiKS5pbnB1dCgodGl0bGUsIGluZGV4KSA9PiB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGxldCBwYXJzZVVybFRleHQgPSByZXF1ZXN0KFxcXFxcXFxcXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXFxcXFxcXFxcXFxcXCIpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VVcmxBcnJheSA9IHBhcnNlVXJsVGV4dC5zcGxpdCgvXFxcXFxcXFxcXFxcXFxcXG4vKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkMSA9IHBhcnNlVXJsQXJyYXlbaW5kZXhdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBwYXJzZVVybEFycmF5W2luZGV4XSA9IHRpdGxlICsgXFxcXFxcXFxcXFxcXFxcIiYmXFxcXFxcXFxcXFxcXFxcIiArIGlucHV0O1xcXFxcXFxcbiAgICAgICAgICAgICAgICBwYXJzZVVybFRleHQgPSBwYXJzZVVybEFycmF5LmpvaW4oXFxcXFxcXFxcXFxcXFxcIlxcXFxcXFxcXFxcXFxcXFxuXFxcXFxcXFxcXFxcXFxcIik7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFxcXFxcXFxcXFxcXFwiLCBwYXJzZVVybFRleHQpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQxID09IGdldEl0ZW0oXFxcXFxcXFxcXFxcXFxcInNlbGVjdGVkMFxcXFxcXFxcXFxcXFxcXCIpKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFxcXFxcXFxcXCJzZWxlY3RlZFxcXFxcXFxcXFxcXFxcXCIsIGlucHV0KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcXFxcXFxcXFxcXFxcInNlbGVjdGVkMFxcXFxcXFxcXFxcXFxcXCIsIHRpdGxlICsgXFxcXFxcXFxcXFxcXFxcIiYmXFxcXFxcXFxcXFxcXFxcIiArIGlucHV0KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcXFxcXFxcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip9cXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcbiAgICAgICAgICAgIH0sIHRpdGxlLCBpbmRleCk7XFxcXFxcXFxuICAgICAgICB9O1xcXFxcXFxcbiAgICAgICAgYnJlYWs7XFxcXFxcXFxuICAgIGNhc2UgXFxcXFxcXFxcXFxcXFxcIjJcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcbiAgICAgICAgZnVuYyA9IGZ1bmN0aW9uKHVybCwgdGl0bGUsIGluZGV4KSB7XFxcXFxcXFxuICAgICAgICAgICAgcmV0dXJuICQoXFxcXFxcXFxcXFxcXFxcIuehruiupOWIoOmZpOOAjFxcXFxcXFxcXFxcXFxcXCIgKyB0aXRsZSArIFxcXFxcXFxcXFxcXFxcXCLjgI3vvJ9cXFxcXFxcXFxcXFxcXFwiKS5jb25maXJtKCh0aXRsZSwgaW5kZXgpID0+IHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlVXJsVGV4dCA9IHJlcXVlc3QoXFxcXFxcXFxcXFxcXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcXFxcXFxcXFxcXFxcIik7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGxldCBwYXJzZVVybEFycmF5ID0gcGFyc2VVcmxUZXh0LnNwbGl0KC9cXFxcXFxcXFxcXFxcXFxcbi8pO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWQxID0gcGFyc2VVcmxBcnJheVtpbmRleF07XFxcXFxcXFxuICAgICAgICAgICAgICAgIHBhcnNlVXJsQXJyYXkuc3BsaWNlKGluZGV4LCAxKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcGFyc2VVcmxUZXh0ID0gcGFyc2VVcmxBcnJheS5qb2luKFxcXFxcXFxcXFxcXFxcXCJcXFxcXFxcXFxcXFxcXFxcblxcXFxcXFxcXFxcXFxcXCIpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoXFxcXFxcXFxcXFxcXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcXFxcXFxcXFxcXFxcIiwgcGFyc2VVcmxUZXh0KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkMSA9PSBnZXRJdGVtKFxcXFxcXFxcXFxcXFxcXCJzZWxlY3RlZDBcXFxcXFxcXFxcXFxcXFwiKSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlVXJsQXJyYXlbMF0pIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFxcXFxcXFxcXCJzZWxlY3RlZFxcXFxcXFxcXFxcXFxcXCIsIHBhcnNlVXJsQXJyYXlbMF0uc3BsaXQoXFxcXFxcXFxcXFxcXFxcIiYmXFxcXFxcXFxcXFxcXFxcIilbMV0gfHwgXFxcXFxcXFxcXFxcXFxcIlxcXFxcXFxcXFxcXFxcXCIpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcXFxcXFxcXFxcXFxcInNlbGVjdGVkMFxcXFxcXFxcXFxcXFxcXCIsIHBhcnNlVXJsQXJyYXlbMF0pO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFxcXFxcXFxcXCJzZWxlY3RlZFxcXFxcXFxcXFxcXFxcXCIsIFxcXFxcXFxcXFxcXFxcXCJcXFxcXFxcXFxcXFxcXFwiKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFxcXFxcXFxcXCJzZWxlY3RlZDBcXFxcXFxcXFxcXFxcXFwiLCBcXFxcXFxcXFxcXFxcXFwiXFxcXFxcXFxcXFxcXFxcIik7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXFxcXFxcXFxcInRvYXN0Oi8v5L+u5pS55oiQ5YqfXFxcXFxcXFxcXFxcXFxcIjtcXFxcXFxcXG4gICAgICAgICAgICB9LCB0aXRsZSwgaW5kZXgpO1xcXFxcXFxcbiAgICAgICAgfTtcXFxcXFxcXG4gICAgICAgIGJyZWFrO1xcXFxcXFxcblxcXFxcXFxcbn1cXFxcXFxcXG5mb3IgKGxldCBpIGluIHBhcnNlVXJsQXJyYXkpIHtcXFxcXFxcXG4gICAgbGV0IGl0ZW0gPSBwYXJzZVVybEFycmF5W2ldLnNwbGl0KFxcXFxcXFxcXFxcXFxcXCImJlxcXFxcXFxcXFxcXFxcXCIpO1xcXFxcXFxcbiAgICBkLnB1c2goe1xcXFxcXFxcbiAgICAgICAgdGl0bGU6IHNlbGVjdGVkID09IGl0ZW1bMV0gPyBcXFxcXFxcXFxcXFxcXFwi4oCY4oCYXFxcXFxcXFxcXFxcXFxcIiArIGl0ZW1bMF0gKyBcXFxcXFxcXFxcXFxcXFwi4oCZ4oCZXFxcXFxcXFxcXFxcXFxcIiA6IGl0ZW1bMF0sXFxcXFxcXFxuICAgICAgICB1cmw6IGZ1bmMoaXRlbVsxXSwgaXRlbVswXSwgaSksXFxcXFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXFxcXFxcXFxcInRleHRfM1xcXFxcXFxcXFxcXFxcXCJcXFxcXFxcXG4gICAgfSk7XFxcXFxcXFxufVxcXFxcXFxcbnNldFJlc3VsdChkKTtcXFxcXFxcIn0se1xcXFxcXFwiY29sX3R5cGVcXFxcXFxcIjpcXFxcXFxcIm1vdmllXzNcXFxcXFxcIixcXFxcXFxcIm5hbWVcXFxcXFxcIjpcXFxcXFxcIuS4u+mimOeuoeeQhlxcXFxcXFwiLFxcXFxcXFwicGF0aFxcXFxcXFwiOlxcXFxcXFwidGhlbWVcXFxcXFxcIixcXFxcXFxcInJ1bGVcXFxcXFxcIjpcXFxcXFxcImpzOlxcXFxcXFxcbiAgICBmdW5jdGlvbiB0aGVtZUluaXQoKXtcXFxcXFxcXG4gICAgICAgIGNvbnN0IHtjb2xvcixzbWFsbH0gPSAkLnJlcXVpcmUoXFxcXFxcXFxcXFxcXFxcImhpa2VyOi8vcGFnZS91dGlsaXk/cnVsZT3pgZPplb/ku5PlupNQcm9cXFxcXFxcXFxcXFxcXFwiKTtcXFxcXFxcXG4gICAgICAgIGxldCBkID0gW107XFxcXFxcXFxuICAgICAgICBsZXQgb3B0aW9ucyA9IFsn6YCJ5oupJywn5L+u5pS5Jywn5Yig6ZmkJywn5a+85Ye6J107XFxcXFxcXFxuXFxcXFxcXFxuICAgICAgICBmb3IodmFyIGkgaW4gb3B0aW9ucyl7XFxcXFxcXFxuICAgICAgICAgICAgbGV0IG9wdGlvbiA9IG9wdGlvbnNbaV07XFxcXFxcXFxuICAgICAgICAgICAgbGV0IGZsYWcgPSBnZXRWYXIoJ3RoZW1lLmRuX29wdGlvbicsJ+aWsOWinicpPT09b3B0aW9uPyfwn5GJJzonJztcXFxcXFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTpmbGFnK29wdGlvbixcXFxcXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcXFxcXFxcbiAgICAgICAgICAgICAgICB1cmw6JChvcHRpb24pLmxhenlSdWxlKCgpPT57XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ3RoZW1lLmRuX29wdGlvbicsIGlucHV0KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suiuvue9ruaTjeS9nOexu+Wei+S4ujonK2lucHV0O1xcXFxcXFxcbiAgICAgICAgICAgICAgICB9KSxcXFxcXFxcXG4gICAgICAgICAgICB9KTtcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG5cXFxcXFxcXG4gICAgICAgIGxldCB0aGVtZVJvdXRlID0gXFxcXFxcXFxcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlUaGVtZS5qc29uXFxcXFxcXFxcXFxcXFxcIjtcXFxcXFxcXG4gICAgICAgIGxldCBteVRoZW1lcyA9IHt9O1xcXFxcXFxcbiAgICAgICAgbGV0IHRoZW1lcyA9IHt9O1xcXFxcXFxcbiAgICAgICAgdHJ5IHtcXFxcXFxcXG4gICAgICAgICAgICBteVRoZW1lcyA9IEpTT04ucGFyc2UoZmV0Y2godGhlbWVSb3V0ZSkpO1xcXFxcXFxcbiAgICAgICAgICAgIHRoZW1lcyA9IG15VGhlbWVzLnRoZW1lc1tteVRoZW1lcy5ub3dfdGhlbWVdO1xcXFxcXFxcbiAgICAgICAgfWNhdGNoIChlKSB7fVxcXFxcXFxcblxcXFxcXFxcblxcXFxcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcXFxcXG4gICAgICAgICAgICB0aXRsZTon5a+85YWlJyxcXFxcXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxcXFxcXFxuICAgICAgICAgICAgdXJsOiQoJycsJ+ivt+i+k+WFpeWvvOWFpeWPo+S7pCcpLmlucHV0KChteVRoZW1lcyx0aGVtZVJvdXRlKT0+e1xcXFxcXFxcbiAgICAgICAgICAgICAgICBpZigvXuaWreaPkuS4u+mimEAuKj9AaHR0cC8udGVzdChpbnB1dCkpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5hbWUgPSBpbnB1dC5zcGxpdCgnQCcpWzFdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IGlucHV0LnNwbGl0KCdAJylbMl07XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgn56Gu5a6a6KaB5a+85YWl5pat5o+S5Li76aKYLScrbmFtZSsnIOWQlz8nKS5jb25maXJtKChuYW1lLHVybCxteVRoZW1lcyx0aGVtZVJvdXRlKT0+e1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gcGFyc2VQYXN0ZSh1cmwpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBoYXNUaGVtZSA9IG15VGhlbWVzLnRoZW1lcy5maWx0ZXIoaXQ9Pml0Lm5hbWU9PT1uYW1lKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihoYXNUaGVtZSYmaGFzVGhlbWUubGVuZ3RoPjApe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaWQgPSBudWxsO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGogaW4gbXlUaGVtZXMudGhlbWVzKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG15VGhlbWVzLnRoZW1lc1tqXS5uYW1lID09PSBuYW1lKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGo7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWlkKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ntKLlvJXplJnor6/ml6Dms5Xopobnm5blr7zlhaU6XFxcXFxcXFxcXFxcXFxcXG4nK2lkXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKCfopobnm5blr7zlhaXkuLvpophpZDonK2lkKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUaGVtZXMudGhlbWVzW2lkXSA9IE9iamVjdC5hc3NpZ24oSlNPTi5wYXJzZShiYXNlNjREZWNvZGUoY29udGVudCkpLHsnbmFtZSc6bmFtZX0pO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRoZW1lcy50aGVtZXMucHVzaChPYmplY3QuYXNzaWduKEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKGNvbnRlbnQpKSx7J25hbWUnOm5hbWV9KSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvZyhteVRoZW1lcyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkobXlUaGVtZXMpKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5oiQ5Yqf5a+85YWl5Li76aKYOlxcXFxcXFxcXFxcXFxcXFxuJytuYW1lXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB9LG5hbWUsdXJsLG15VGhlbWVzLHRoZW1lUm91dGUpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ml6Dms5Xor4bliKvnmoTlr7zlhaXlj6Pku6Q6XFxcXFxcXFxcXFxcXFxcXG4nK2lucHV0O1xcXFxcXFxcbiAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgfSxteVRoZW1lcyx0aGVtZVJvdXRlKSxcXFxcXFxcXG4gICAgICAgIH0pO1xcXFxcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcXFxcXG4gICAgICAgICAgICB0aXRsZTon5paw5aKeJyxcXFxcXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxcXFxcXFxuICAgICAgICAgICAgdXJsOiQoKS5ydWxlKChteVRoZW1lcyx0aGVtZVJvdXRlKT0+e1xcXFxcXFxcbiAgICAgICAgICAgICAgICBsZXQgZD1bXTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpPT57XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgfSkpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfkuLvpopjlkI3np7AnLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXFxcXFxcXFxcIuaWreaPki3ok53ojpPkuLvpophcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogXFxcXFxcXFxcXFxcXFxcInB1dFZhcigndGhlbWUubmV3X2FkZF9uYW1lJyxpbnB1dClcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogdHJ1ZSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcigndGhlbWUubmV3X2FkZF9uYW1lJywgJycpXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB9LFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiQudG9TdHJpbmcoKCkgPT4ge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdfYWRkX25hbWUgPSBnZXRWYXIoJ3RoZW1lLm5ld19hZGRfbmFtZScsICcnKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g6L6T5YWl55qE5pivOicrbmV3X2FkZF9uYW1lO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgfSksXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXFxcXFxcXFxcImlucHV0XFxcXFxcXFxcXFxcXFxcIlxcXFxcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFxcXFxcXFxcXCLku6PnoIFcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRWYXIoJ3RoZW1lLm5ld19hZGRfY29kZScsICcnKSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcXFxcXFxcXFxcXFxcXFwidGV4dGFyZWFcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDotMSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogJ3B1dFZhcihcXFxcXFxcXFxcXFxcXFwidGhlbWUubmV3X2FkZF9jb2RlXFxcXFxcXFxcXFxcXFxcIixpbnB1dCknXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6J+S/neWtmCcsXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTondGV4dF9jZW50ZXJfMScsXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6JCgpLmxhenlSdWxlKChteVRoZW1lcyx0aGVtZVJvdXRlKT0+e1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gZ2V0VmFyKCd0aGVtZS5uZXdfYWRkX2NvZGUnLCAnJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5hbWUgPSBnZXRWYXIoJ3RoZW1lLm5ld19hZGRfbmFtZScsICcnKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZighbmFtZSl7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kvaDov5jmsqHloavlhpnkuLvpopjlkI3np7DlkaInXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdUaGVtZSA9IHt9O1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1RoZW1lID0gSlNPTi5wYXJzZShjb2RlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9Y2F0Y2ggKGUpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+mUmeivr+eahOS4u+mimGpzb27moLzlvI86XFxcXFxcXFxcXFxcXFxcXG4nK2UubWVzc2FnZTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihuZXdUaGVtZSx7J25hbWUnOm5hbWV9KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBteVRoZW1lcy50aGVtZXMucHVzaChuZXdUaGVtZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkobXlUaGVtZXMpKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5paw5aKe5pat5o+S5Li76aKYOicrbmFtZVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgfSxteVRoZW1lcyx0aGVtZVJvdXRlKVxcXFxcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcXFxcXFxcbiAgICAgICAgICAgIH0sbXlUaGVtZXMsdGhlbWVSb3V0ZSksXFxcXFxcXFxuICAgICAgICB9KTtcXFxcXFxcXG4gICAgICAgIGQucHVzaCh7XFxcXFxcXFxuICAgICAgICAgICAgdGl0bGU6bXlUaGVtZXMudGhlbWVzPyfkuLvpopjliJfooag65YWx6K6hOicrY29sb3IobXlUaGVtZXMudGhlbWVzLmxlbmd0aCwnI2ZmNzAwMCcpKyfkuKrkuLvpopgnOlxcXFxcXFxcXFxcXFxcXCLnrKzkuIDmrKHliqDovb3vvIzngrnmraTov5vljrvliJ3lp4vljJbkuLvpopjliJfooahcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcXFxcXFxcbiAgICAgICAgICAgIHVybDonaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPeiuvue9riNub0hpc3RvcnkjJ1xcXFxcXFxcbiAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICBkLnB1c2goe1xcXFxcXFxcbiAgICAgICAgICAgIHRpdGxlOlxcXFxcXFxcXFxcXFxcXCLmgaLlpI3lh7rljoLorr7nva5cXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0X2NlbnRlcl8xJyxcXFxcXFxcXG4gICAgICAgICAgICB1cmw6JChcXFxcXFxcXFxcXFxcXFwi5aaC5p6c5L2g55qE5Li76aKY5rKh5rOV5q2j5bi455So5LqG77yM5q2k5pa55rOV5Y+v5Lul5pWR56CW77yM56Gu6K6k5oGi5aSNP1xcXFxcXFxcXFxcXFxcXCIpLmNvbmZpcm0oKCk9PntcXFxcXFxcXG4gICAgICAgICAgICAgICAgbGV0IHRoZW1lcyA9IHtuYW1lOifpu5jorqTkuLvpopgnLGNsb3NlQnRuOntjb2xvcjonI2Y2ZjZmNicsYmFja2dyb3VuZDonI2FhOTZkYSd9LHNhdmVCdG46e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjMDY4MDA2J30sc2F2ZUNsb3NlQnRuOntjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonIzA1QkZDNSd9LHRpcHNCdG46e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjMDVCRkM1J30sYmFybGFiZWw6e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjYWE5NmRhJ30sYmFySW5wdXQ6e2NvbG9yOicjYWE5NmRhJyxiYWNrZ3JvdW5kOicjZmZmZmQyJ30sc2VsZWN0Ontjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonI2FhOTZkYSd9LH07XFxcXFxcXFxuICAgICAgICAgICAgICAgIGxldCB0aGVtZURlZiA9IHtcXFxcXFxcXFxcXFxcXFwibmFtZVxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxcXFxcXFxcIuaWreW/teWOn+earlxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxcXFxcXFxcImNsb3NlQnRuXFxcXFxcXFxcXFxcXFxcIjp7XFxcXFxcXFxcXFxcXFxcImNvbG9yXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXFxcXFxcXFwiI0Y5RjBEQVxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxcXFxcXFxcImJhY2tncm91bmRcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcXFxcXFxcXCIjYzU0NjRhXFxcXFxcXFxcXFxcXFxcIn0sXFxcXFxcXFxcXFxcXFxcInNhdmVCdG5cXFxcXFxcXFxcXFxcXFwiOntcXFxcXFxcXFxcXFxcXFwiY29sb3JcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcXFxcXFxcXCIjRjlGMERBXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXFxcXFxcXFwiYmFja2dyb3VuZFxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxcXFxcXFxcIiMwNjgwMDZcXFxcXFxcXFxcXFxcXFwifSxcXFxcXFxcXFxcXFxcXFwic2F2ZUNsb3NlQnRuXFxcXFxcXFxcXFxcXFxcIjp7XFxcXFxcXFxcXFxcXFxcImNvbG9yXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXFxcXFxcXFwiI0Y5RjBEQVxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxcXFxcXFxcImJhY2tncm91bmRcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcXFxcXFxcXCIjMDVCRkM1XFxcXFxcXFxcXFxcXFxcIn0sXFxcXFxcXFxcXFxcXFxcInRpcHNCdG5cXFxcXFxcXFxcXFxcXFwiOntcXFxcXFxcXFxcXFxcXFwiY29sb3JcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcXFxcXFxcXCIjRjlGMERBXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXFxcXFxcXFwiYmFja2dyb3VuZFxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxcXFxcXFxcIiMwNUJGQzVcXFxcXFxcXFxcXFxcXFwifSxcXFxcXFxcXFxcXFxcXFwiYmFybGFiZWxcXFxcXFxcXFxcXFxcXFwiOntcXFxcXFxcXFxcXFxcXFwiY29sb3JcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcXFxcXFxcXCIjRjlGMERBXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXFxcXFxcXFwiYmFja2dyb3VuZFxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxcXFxcXFxcIiNEMDZCNkNcXFxcXFxcXFxcXFxcXFwifSxcXFxcXFxcXFxcXFxcXFwiYmFySW5wdXRcXFxcXFxcXFxcXFxcXFwiOntcXFxcXFxcXFxcXFxcXFwiY29sb3JcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcXFxcXFxcXCIjRDA2QjZDXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXFxcXFxcXFwiYmFja2dyb3VuZFxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxcXFxcXFxcIiNGOUYwREFcXFxcXFxcXFxcXFxcXFwifSxcXFxcXFxcXFxcXFxcXFwic2VsZWN0XFxcXFxcXFxcXFxcXFxcIjp7XFxcXFxcXFxcXFxcXFxcImNvbG9yXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXFxcXFxcXFwiI0Y5RjBEQVxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxcXFxcXFxcImJhY2tncm91bmRcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcXFxcXFxcXCIjRDA2QjZDXFxcXFxcXFxcXFxcXFxcIn19O1xcXFxcXFxcbiAgICAgICAgICAgICAgICBsZXQgdGhlbWVSb3V0ZSA9IFxcXFxcXFxcXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015VGhlbWUuanNvblxcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLEpTT04uc3RyaW5naWZ5KHtub3dfdGhlbWU6J+m7mOiupOS4u+mimCcsdGhlbWVzOlt0aGVtZXMsdGhlbWVEZWZdfSkpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aWreaPkuS4u+mimOW3sumHjee9ruS4uuWHuuWOguiuvue9ridcXFxcXFxcXG4gICAgICAgICAgICB9KVxcXFxcXFxcbiAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICBmb3IodmFyIGkgaW4gbXlUaGVtZXMudGhlbWVzKXtcXFxcXFxcXG4gICAgICAgICAgICBsZXQgbm93VGhlbSA9IG15VGhlbWVzLnRoZW1lc1tpXTtcXFxcXFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTpteVRoZW1lcy5ub3dfdGhlbWU9PT1ub3dUaGVtLm5hbWU/J/CfkYknK25vd1RoZW0ubmFtZTpub3dUaGVtLm5hbWUsXFxcXFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOidmbGV4X2J1dHRvbicsXFxcXFxcXFxuICAgICAgICAgICAgICAgIHVybDokKCkubGF6eVJ1bGUoKG15dGhlbWUsbXlUaGVtZXMsaSx0aGVtZVJvdXRlKT0+e1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9wdGlvbiA9IGdldFZhcigndGhlbWUuZG5fb3B0aW9uJywn5paw5aKeJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbil7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5a+85Ye6JzpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG15dGhlbWVDb2RlID0gYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KG15dGhlbWUpKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IHNoYXJlUGFzdGUobXl0aGVtZUNvZGUpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9ICfmlq3mj5LkuLvpophAJytteXRoZW1lLm5hbWUrJ0AnK3VybDtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weShjb2RlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWvvOWHuuS4uuS6keWPo+S7pOW5tuWkjeWItuWIsOWJquWIh+advydcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICfkv67mlLknOlxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChKU09OLnN0cmluZ2lmeShteXRoZW1lKSkuaW5wdXQoKG15dGhlbWUsbXlUaGVtZXMsaSx0aGVtZVJvdXRlKT0+e1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobXl0aGVtZS5uYW1lPT09bXlUaGVtZXMubm93X3RoZW1lKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5q2k5Li76aKY5b2T5YmN5q2j5Zyo5L2/55So5Lit77yM5LiN5YWB6K645L+u5pS5ISdcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VGhlbWVzLnRoZW1lc1tpXT1KU09OLnBhcnNlKGlucHV0KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLEpTT04uc3RyaW5naWZ5KG15VGhlbWVzKSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lkv67mlLknXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sbXl0aGVtZSxteVRoZW1lcyxpLHRoZW1lUm91dGUpXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5Yig6ZmkJzpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ+ehruiupOWIoOmZpOS4u+mimDonK215dGhlbWUubmFtZSsnPycpLmNvbmZpcm0oKG15dGhlbWUsbXlUaGVtZXMsaSx0aGVtZVJvdXRlKT0+e1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobXl0aGVtZS5uYW1lPT09bXlUaGVtZXMubm93X3RoZW1lKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5q2k5Li76aKY5b2T5YmN5q2j5Zyo5L2/55So5Lit77yM5LiN5YWB6K645Yig6ZmkISdcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VGhlbWVzLnRoZW1lcy5zcGxpY2UoaSwxKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLEpTT04uc3RyaW5naWZ5KG15VGhlbWVzKSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LliKDpmaQnXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sbXl0aGVtZSxteVRoZW1lcyxpLHRoZW1lUm91dGUpXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUaGVtZXMubm93X3RoZW1lPW15dGhlbWUubmFtZTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkobXlUaGVtZXMpKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kvaDpgInmi6nkuoYnK215dGhlbWUubmFtZSsn5L2c5Li66buY6K6k5Li76aKYJztcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgfSxub3dUaGVtLG15VGhlbWVzLGksdGhlbWVSb3V0ZSksXFxcXFxcXFxuICAgICAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxcXFxcXFxuICAgIH1cXFxcXFxcXG4kLmV4cG9ydHMudGhlbWVJbml0PXRoZW1lSW5pdDtcXFxcXFxcIn0se1xcXFxcXFwibmFtZVxcXFxcXFwiOlxcXFxcXFwi5pON5L2c5oyH5byVXFxcXFxcXCIsXFxcXFxcXCJwYXRoXFxcXFxcXCI6XFxcXFxcXCJHdWlkZVxcXFxcXFwiLFxcXFxcXFwicnVsZVxcXFxcXFwiOlxcXFxcXFwiPGh0bWw+XFxcXFxcXFxuPGhlYWQ+XFxcXFxcXFxuICAgIDxtZXRhIGNoYXJzZXQ9XFxcXFxcXFxcXFxcXFxcIlVURi04XFxcXFxcXFxcXFxcXFxcIj5cXFxcXFxcXG48L2hlYWQ+XFxcXFxcXFxuPGJvZHk+XFxcXFxcXFxuPHN0cm9uZz4gPGJpZz7mi4nlj5bnr4c8L2JpZz4gPC9zdHJvbmc+XFxcXFxcXFxuPGJyIC8+IOaTjeS9nOmhuuW6j++8mlxcXFxcXFxcbjxiciAvPiAxLuabtOaWsOmBk+mVv+S7k+W6k1Byb+WIsDc254mI5pysXFxcXFxcXFxuPGJyIC8+IDIu5ouJ5Y+W5Li75o+S5Lu25ZKM572R6aG16ISa5pysXFxcXFxcXFxuPGJyIC8+IDMu5o6o6I2Q55u05o6l5ouJ5Y+W5Luj56CBPHM+5ouJ5Y+W5YiX6KGo4oaS5ouJ5Y+W5Luj56CBPC9zPlxcXFxcXFxcbjxiciAvPlxcXFxcXFxcbjxiciAvPlxcXFxcXFxcbjxzdHJvbmc+PGJpZz7lj6Pku6Tnr4c8L2JpZz48L3N0cm9uZz5cXFxcXFxcXG48YnIgLz7pppbpobXovpPlhaXmoYbmlK/mjIHvvJpcXFxcXFxcXG48YnIgLz4xLuWIhuS6q+WHuuadpeeahOWQjOezu+WIl+aPkuS7tuS6keWJqui0tOadv+WPo+S7pFxcXFxcXFxcbjxiciAvPjIu5pyq5Yqg5a+G55qE5ZCM57O75YiX5o+S5Lu25Zyw5Z2ALOaUr+aMgeacrOWcsOaWh+S7tuWmguS7peS4i+agvOW8j+W8gOWktOeahDpmaWxlOi8vLGhpa2VyOi8vLC9zdG9yYWdlXFxcXFxcXFxuPGJyIC8+My5R56WeXFxcXFxcXFxuPGJyIC8+NC7mlq3mj5JcXFxcXFxcXG48YnIgLz41LiPpgZPplb/nsr7pgIlcXFxcXFxcXG48YnIgLz42LiNi56uZXFxcXFxcXFxuPGJyIC8+Ny4j5YCN6ZmGXFxcXFxcXFxuPGJyIC8+XFxcXFxcXFxuPGJyIC8+XFxcXFxcXFxuPHN0cm9uZz48YmlnPue8lui+keevhzwvYmlnPjwvc3Ryb25nPlxcXFxcXFxcbjxiciAvPumakOiXj+WKn+iDvemcgOefpe+8mlxcXFxcXFxcbjxiciAvPumakOiXj+WKn+iDveaYr+S7juWIl+ihqOS4iuWIoOmZpOagh+mimO+8jOaVheaXoOWkjeeOsOWKn+iDvVxcXFxcXFxcbjxiciAvPueci+WHhuS6hu+8jOS4jeeUqOeahOaJjeeCuemakOiXj1xcXFxcXFxcbjxiciAvPuimgeWkjeeOsOeahOivneWOu+S/ruaUueaWsOeahE15UGFyc2UuanNvbu+8jOWcqHRpdGxl55qE5pWw57uE6YKj5oyJ5qC85byP5re75Yqg5qCH6aKYXFxcXFxcXFxuPGJyIC8+XFxcXFxcXFxuPGJyIC8+XFxcXFxcXFxuPHN0cm9uZz48YmlnPuWujOe7kzwvYmlnPjxiciAvPjwvc3Ryb25nPlxcXFxcXFxcbjxwPnYzLjQ5LOWwj+eZveacgOWQjueahOWAlOW8uizlsI/nmb3lhbPmgIDmqKHlvI88L3A+XFxcXFxcXFxuPHA+5LiA6ZSu5a6e546w6YWN572u5a6M5q+V5Y2z5Y+v6YCa6L+H5pSv5oyB6a2U5pat55qE5bCP56iL5bqP55yL6KeG6aKR77yM5Zue5b2S55m95auW6KeG6aKR6L+Z5Liq6ZyA5rGC5pys6LqrPC9wPlxcXFxcXFxcbjxwPuaOqOiNkOS9v+eUqOmdkuixhixhcHDlvbHop4YuZHA8L3A+XFxcXFxcXFxuPHA+6a2U5patKOaWreaPkumBk+mVv+mtlOaUueeJiCnlt7LlvIPlnZHot5Hot6/vvIzmhJ/osKLljp/kvZzogIXmlq3lv7XnmoTmj5Lku7bop6PmnpDlj4rmnKzlsI/nqIvluo/moLjlv4Pku6PnoIE8L3A+XFxcXFxcXFxuPC9ib2R5PlxcXFxcXFxcbjwvaHRtbD5cXFxcXFxcIn0se1xcXFxcXFwibmFtZVxcXFxcXFwiOlxcXFxcXFwi5rWL6K+V5pWw5o2uXFxcXFxcXCIsXFxcXFxcXCJwYXRoXFxcXFxcXCI6XFxcXFxcXCJkZW1vRGF0YVxcXFxcXFwiLFxcXFxcXFwicnVsZVxcXFxcXFwiOlxcXFxcXFwianM6XFxcXFxcXFxuICAgIGxldCBkZW1vRGF0YSA9IHtcXFxcXFxcXG4gICAgICAgIOeIseWlh+iJujpbJ2h0dHBzOi8vd3d3LmlxaXlpLmNvbS92XzF6cDdxZ2gyM2tnLmh0bWwnLCdodHRwczovL3d3dy5pcWl5aS5jb20vdl8yYmM4dGs4cjZ1Zy5odG1sJ10sXFxcXFxcXFxuICAgICAgICDkvJjphbc6WydodHRwczovL3YueW91a3UuY29tL3Zfc2hvdy9pZF9YTlRFNE5UZ3hNVFkyTUE9PS5odG1sJywnaHR0cHM6Ly92LnlvdWt1LmNvbS92X3Nob3cvaWRfWE5URTVPRFl4TWpBek5nPT0uaHRtbCddLFxcXFxcXFxcbiAgICAgICAg6IW+6K6vOlsnaHR0cHM6Ly92LnFxLmNvbS94L2NvdmVyL200NDFlM3JqcTlrd3BzYy9wMDA0MGdpbTRmei5odG1sJywnaHR0cHM6Ly92LnFxLmNvbS94L2NvdmVyL216YzAwMjAweGg5MzEzdi96MDAzOXRiaG83cS5odG1sJ10sXFxcXFxcXFxuICAgICAgICDoipLmnpw6WydodHRwczovL3d3dy5tZ3R2LmNvbS9iLzM3MjA2MS8xMjE5MzU1OC5odG1sJywnaHR0cHM6Ly93d3cubWd0di5jb20vYi8zNjMyODYvMTQyOTU4MjMuaHRtbCddLFxcXFxcXFxcbiAgICAgICAg5ZOU5ZOp5ZOU5ZOpOlsnaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL2Jhbmd1bWkvcGxheS9lcDM4MTIxNycsJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9iYW5ndW1pL3BsYXkvZXA0MDgxMjMnLCdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vYmFuZ3VtaS9wbGF5L3NzMzM0MzQnLCdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vdmlkZW8vYXYzMzYzNDg2NjMnXSxcXFxcXFxcXG4gICAgICAgIOaQnOeLkDpbJ2h0dHBzOi8vZmlsbS5zb2h1LmNvbS9hbGJ1bS85NDU3NTg0Lmh0bWwnLCdodHRwczovL2ZpbG0uc29odS5jb20vYWxidW0vOTE4MjY0Ni5odG1sJ10sXFxcXFxcXFxuICAgICAgICDopb/nk5w6WydodHRwczovL3d3dy5peGlndWEuY29tLzY1NTEzMzIxMjU2NTQ2NDczMTAnLCdodHRwczovL3d3dy5peGlndWEuY29tLzY2OTkzNTY3OTI5MDU3OTQwNTUnXSxcXFxcXFxcXG4gICAgICAgIFBQVFY6WydodHRwOi8vdi5wcHR2LmNvbS9zaG93L1RJbmRXc0lvbU5ZNXR4OC5odG1sJywnaHR0cDovL3YucHB0di5jb20vc2hvdy9TQ1E1dGg2RTlES1ZFM3MuaHRtbCddLFxcXFxcXFxcbiAgICAgICAg5ZKq5ZKVOlsnaHR0cHM6Ly93d3cubWlndXZpZGVvLmNvbS9tZ3Mvd2Vic2l0ZS9wcmQvZGV0YWlsLmh0bWw/Y2lkPTYzMzUxMTc0MycsJ2h0dHBzOi8vd3d3Lm1pZ3V2aWRlby5jb20vbWdzL3dlYnNpdGUvcHJkL2RldGFpbC5odG1sP2NpZD03MTYyNzAzMTknXSxcXFxcXFxcXG4gICAgICAgIOS5kOinhjpbJ2h0dHA6Ly93d3cubGUuY29tL3B0di92cGxheS83NTg0MzA1OS5odG1sJywnaHR0cDovL3d3dy5sZS5jb20vcHR2L3ZwbGF5LzI0MjIwOTAxLmh0bWwjdmlkPTI0MjIwOTAxJ10sXFxcXFxcXFxuICAgICAgICAxOTA1OlsnaHR0cHM6Ly92aXAuMTkwNS5jb20vcGxheS84NzU3NDAuc2h0bWwnLCdodHRwczovL3d3dy4xOTA1LmNvbS92b2QvcGxheS84ODA2NDEuc2h0bWwnXSxcXFxcXFxcXG4gICAgICAgIOmjjuihjDpbJ2h0dHA6Ly93d3cuZnVuLnR2L3ZwbGF5L2ctMzA0MTQzJywnaHR0cDovL3d3dy5mdW4udHYvdnBsYXkvZy0xMDA4OTYzLyddLFxcXFxcXFxcbiAgICAgICAg6b6Z6IW+OlsnTFQtMWVjM2Y2NzU0ZjY4NTg2ZWQ3ZjkyYzNlOTk1Y2ZjYTYnLCdMVC1mZmY0N2FiZjdmZjIyZmZhM2RlZjkwNGM2YzkxZTE5MicsJ0xULTdjY2RhNjg2ODMzMjk3ODBiZDcyNjRjOGY5ZWRkOTBlJ10sXFxcXFxcXFxuICAgICAgICDkurrkurrov7c6WydyZW5yZW5taS1hYjkyNGUxMWQyZDY5Mzk3JywncmVucmVubWktOTI2NDBlOGRjNGNhZDgzYSddLFxcXFxcXFxcbiAgICAgICAg5LqU5q+SOlsnd3VkdXl1bi0xNjQ5NDMxMzA3MDIxJ10sXFxcXFxcXFxuICAgICAgICDlpJrlpJo6WydodHRwczovL20zdTguY2FjaGUuc3VveW8uY2MvbTN1OC8yMDIyMDMvOC9hYWFiZDkyZGEyNjc3NGM2ODg1MGEwMjMxNTNjODBmMWFlNmZhOWJlLm0zdTgnXSxcXFxcXFxcXG4gICAgICAgIOiejeWFtDpbJ1JvbmdYaW5nVlItNDIxNTY0NTU4MTkzMicsJ1JvbmdYaW5nVlItNDIxNTY0NTU4NzAwMCddLFxcXFxcXFxcbiAgICAgICAg6Zuq5Lq6OlsneHVlcmVuLTE2NDY4MjMwNzInLCd4dWVyZW4tMTY0OTQwMjc1MycsJ3h1ZXJlbi0xNjQ5MTc1MjUyJywneHVlcmVuLTE2NDkzMDc3ODAnLCd4dWVyZW4tMTY0ODc4MTQ3NSddLFxcXFxcXFxcbiAgICAgICAg5peL6aOO5LqROlsneGZ5LTUyOWU2NDU3OTUzZDU0NWYnLCd4ZnktYjY1NjE1ZGFjNDM3N2VlMyddLFxcXFxcXFxcbiAgICAgICAg55Ge5Liw6LWE5rqQOlsnaHR0cHM6Ly8xLnJ1aWZlbmdsYi5jb20vcGxheS8xNjQ0OTE0NTk1Lm0zdTgnLCdodHRwczovLzEucnVpZmVuZ2xiLmNvbS9wbGF5LzE2NDIzODk5MDcubTN1OCddLFxcXFxcXFxcbiAgICB9XFxcXFxcXFxuXFxcXFxcXFxubGV0IGRlZmF1bHRTZXRzID0gIHtcXFxcXFxcXG4gICAgcXk6ICfkuIfog73op6PmnpDikr8nLFxcXFxcXFxcbiAgICB5azogJ+S4h+iDveino+aekOKSvycsXFxcXFxcXFxuICAgIHR4OiAn5LiH6IO96Kej5p6Q4pK/JyxcXFxcXFxcXG4gICAgbWc6ICfkuIfog73op6PmnpDikr8nLFxcXFxcXFxcbiAgICBibDogJ+S4h+iDveino+aekOKSvycsXFxcXFxcXFxuICAgIHNoOiAn5LiH6IO96Kej5p6Q4pK/JyxcXFxcXFxcXG4gICAgeGc6ICfkuIfog73op6PmnpDikr8nLFxcXFxcXFxcbiAgICBhbDogJ+S4h+iDveino+aekOKSvycsXFxcXFxcXFxuICAgIHBwOiAn5LiH6IO96Kej5p6Q4pK/JyxcXFxcXFxcXG4gICAgbWk6ICfkuIfog73op6PmnpDikr8nLFxcXFxcXFxcbiAgICBsZTogJ+S4h+iDveino+aekOKSvycsXFxcXFxcXFxuICAgIG90aDogJ+mBk+mVv+S7k+W6k+mAmuWFjScsXFxcXFxcXFxuICAgIGZ1bjogJ+S4h+iDveino+aekOKSvycsXFxcXFxcXFxuICAgIG9uZTon5LiH6IO96Kej5p6Q4pK/JyxcXFxcXFxcXG4gICAgbHQ6J+S4h+iDveino+aekOKSvycsXFxcXFxcXFxuICAgIHJyOifkuIfog73op6PmnpDikr8nLFxcXFxcXFxcbiAgICB3ZDon5LiH6IO96Kej5p6Q4pK/JyxcXFxcXFxcXG4gICAgcWp1OiAn6buY6K6kJyxcXFxcXFxcXG4gICAgY2o6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJ1xcXFxcXFxcbn07XFxcXFxcXFxuXFxcXFxcXFxubGV0IGZsb29ycyA9ICfikaDikaHikaLikaPikaTikaXikabikafikajikanvvJHvvJLvvJPvvJTvvJXvvJbvvJfvvJjvvJnvvJDikojikonikorikovikoziko3iko7iko/ikpAnLnNwbGl0KCcnKTtcXFxcXFxcXG5sZXQgZW1vamlzID0gJyPvuI/ig6N8Ku+4j+KDo3ww77iP4oOjfDHvuI/ig6N8Mu+4j+KDo3wz77iP4oOjfDTvuI/ig6N8Ne+4j+KDo3w277iP4oOjfDfvuI/ig6N8OO+4j+KDo3w577iP4oOjfPCfhbDvuI988J+Fse+4j3zwn42HfPCfjYh88J+NiXzwn42KfPCfjYt88J+NjHzwn42NfPCfjY588J+Nj3zwn42QfPCfjZF88J+Nknzwn42TfPCfjYV88J+Nhnzwn4y9fPCfjYR88J+MsHzwn42efPCfjZZ88J+Nl3zwn42UfPCfjZ988J+NlXzwn42zfPCfjbJ88J+NsXzwn42YfPCfjZl88J+Nmnzwn42bfPCfjZx88J+NnXzwn42gfPCfjaJ88J+No3zwn42kfPCfjaV88J+NoXzwn42mfPCfjad88J+NqHzwn42pfPCfjap88J+Ognzwn42wfPCfjat88J+NrHzwn42tfPCfja588J+Nr3zwn428fOKYlXzwn421fPCfjbZ88J+Nt3zwn424fPCfjbl88J+Nunzwn427fPCfjbQnLnNwbGl0KCd8Jyk7XFxcXFxcXFxuZmxvb3JzID0gZmxvb3JzLmNvbmNhdChlbW9qaXMpO1xcXFxcXFxcbiQuZXhwb3J0cy5kZW1vRGF0YSA9IGRlbW9EYXRhO1xcXFxcXFxcbiQuZXhwb3J0cy5kZWZhdWx0U2V0cyA9IGRlZmF1bHRTZXRzO1xcXFxcXFxcbiQuZXhwb3J0cy5mbG9vcnMgPSBmbG9vcnM7XFxcXFxcXCJ9LHtcXFxcXFxcIm5hbWVcXFxcXFxcIjpcXFxcXFxcIuW3peWFt+exu1xcXFxcXFwiLFxcXFxcXFwicGF0aFxcXFxcXFwiOlxcXFxcXFwidXRpbHNcXFxcXFxcIixcXFxcXFxcInJ1bGVcXFxcXFxcIjpcXFxcXFxcImpzOlxcXFxcXFxcbi8v6ZqP5py65LuO5YiX6KGo5oq95Y+W5LiA5Liq5YWD57SgXFxcXFxcXFxuZnVuY3Rpb24gZ2V0T25lKGl0cykge3JldHVybiAgaXRzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSppdHMubGVuZ3RoKV07fVxcXFxcXFxcbi8v5Y676YeN77yIRVM2IFNldO+8iVxcXFxcXFxcbmZ1bmN0aW9uIHVuaXF1ZTIoYXJyYXkpe1xcXFxcXFxcbiAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGFycmF5KSk7XFxcXFxcXFxufVxcXFxcXFxcbi8v6I635Y+W5YiX6KGo5Lit6YeN5aSN6YO95YC8XFxcXFxcXFxuZnVuY3Rpb24gZHVwbGljYXRlcyhhcnIpIHtcXFxcXFxcXG4gICAgbGV0IHJlcz1hcnIuZmlsdGVyKCh4LGspPT57XFxcXFxcXFxuICAgICAgICBsZXQgYT1rKjErMTtcXFxcXFxcXG4gICAgICAgIGxldCBpbmRleD1hcnIuaW5kZXhPZih4LGEpO1xcXFxcXFxcbiAgICAgICAgaWYoaW5kZXg+LTEpe1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiB4O1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICB9KVxcXFxcXFxcbiAgICBsZXQgcmU9bmV3IFNldChyZXMpO1xcXFxcXFxcbiAgICByZXR1cm4gQXJyYXkuZnJvbShyZSk7XFxcXFxcXFxufVxcXFxcXFxcbiQuZXhwb3J0cy5nZXRPbmUgPSBnZXRPbmU7XFxcXFxcXFxuJC5leHBvcnRzLnVuaXF1ZTIgPSB1bmlxdWUyO1xcXFxcXFxcbiQuZXhwb3J0cy5kdXBsaWNhdGVzID0gZHVwbGljYXRlcztcXFxcXFxcIn0se1xcXFxcXFwibmFtZVxcXFxcXFwiOlxcXFxcXFwi6Kej5p6Q566h55CGXFxcXFxcXCIsXFxcXFxcXCJwYXRoXFxcXFxcXCI6XFxcXFxcXCJqeE1hbmFnZVxcXFxcXFwiLFxcXFxcXFwicnVsZVxcXFxcXFwiOlxcXFxcXFwianM6XFxcXFxcXFxuICAgIGZ1bmN0aW9uIGp4TWFuYWdlKCl7XFxcXFxcXFxuICAgICAgICBjb25zdCB7Y29sb3Isc21hbGx9ID0gJC5yZXF1aXJlKFxcXFxcXFxcXFxcXFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5P3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcXFxcXFxcXFxcXFxcIik7XFxcXFxcXFxuICAgICAgICBsZXQgZCA9IFtdO1xcXFxcXFxcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBbJ+mAieaLqScsJ+S/ruaUuScsJ+WIoOmZpCcsJ+WvvOWHuiddO1xcXFxcXFxcblxcXFxcXFxcbiAgICAgICAgZm9yKGxldCBpIGluIG9wdGlvbnMpe1xcXFxcXFxcbiAgICAgICAgICAgIGxldCBvcHRpb24gPSBvcHRpb25zW2ldO1xcXFxcXFxcbiAgICAgICAgICAgIGxldCBmbGFnID0gZ2V0VmFyKCdkbi5qeG1fb3B0aW9uJywn6YCJ5oupJyk9PT1vcHRpb24/J/CfkYknOicnO1xcXFxcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHRpdGxlOmZsYWcrb3B0aW9uLFxcXFxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxcXFxcXFxuICAgICAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChvcHRpb24pPT57XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2RuLmp4bV9vcHRpb24nLCBvcHRpb24pO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB9LG9wdGlvbiksXFxcXFxcXFxuICAgICAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICBsZXQganhzUm91dGUgPSBcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeUppZXhpLmpzb25cXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcbiAgICAgICAgbGV0IGRtUGF0aCA9IFxcXFxcXFxcXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL2RpYW9tYW8udHh0XFxcXFxcXFxcXFxcXFxcIjtcXFxcXFxcXG4gICAgICAgIGxldCBNeUppZXhpID0ge2ppZXhpczpbXX07XFxcXFxcXFxuICAgICAgICBsZXQgamlleGlzID0ge307XFxcXFxcXFxuICAgICAgICB0cnkge1xcXFxcXFxcbiAgICAgICAgICAgIE15SmlleGkgPSBKU09OLnBhcnNlKGZldGNoKGp4c1JvdXRlKSk7XFxcXFxcXFxuICAgICAgICAgICAgamlleGlzID0gTXlKaWV4aS5qaWV4aXMuZmlsdGVyKGl0PT5pdC5uYW1lPT09TXlKaWV4aS5ub3cpWzBdO1xcXFxcXFxcbiAgICAgICAgfWNhdGNoIChlKSB7fVxcXFxcXFxcblxcXFxcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcXFxcXG4gICAgICAgICAgICB0aXRsZTon5a+85YWlJyxcXFxcXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxcXFxcXFxuICAgICAgICAgICAgdXJsOiQoJycsJ+ivt+i+k+WFpeWvvOWFpeWPo+S7pCcpLmlucHV0KChNeUppZXhpLGp4c1JvdXRlKT0+e1xcXFxcXFxcbiAgICAgICAgICAgICAgICBpZigvXumtlOaWreino+aekOmFjee9rkAuKj9AaHR0cC8udGVzdChpbnB1dCkpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5hbWUgPSBpbnB1dC5zcGxpdCgnQCcpWzFdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IGlucHV0LnNwbGl0KCdAJylbMl07XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgn56Gu5a6a6KaB5a+85YWl5pat5o+S6Kej5p6Q6YWN572uLScrbmFtZSsnIOWQlz8nKS5jb25maXJtKChuYW1lLHVybCxNeUppZXhpLGp4c1JvdXRlKT0+e1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gcGFyc2VQYXN0ZSh1cmwpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBoYXNJdCA9IE15SmlleGkuamlleGlzLmZpbHRlcihpdD0+aXQubmFtZT09PW5hbWUpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGhhc0l0JiZoYXNJdC5sZW5ndGg+MCl7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZCA9IG51bGw7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaiBpbiBNeUppZXhpLmppZXhpcyl7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihNeUppZXhpLmppZXhpc1tqXS5uYW1lID09PSBuYW1lKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGo7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWlkKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ntKLlvJXplJnor6/ml6Dms5Xopobnm5blr7zlhaU6XFxcXFxcXFxcXFxcXFxcXG4nK2lkXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKCfopobnm5blr7zlhaXkuLvpophpZDonK2lkKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdID0gT2JqZWN0LmFzc2lnbihKU09OLnBhcnNlKGJhc2U2NERlY29kZShjb250ZW50KSkseyduYW1lJzpuYW1lfSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE15SmlleGkuamlleGlzLnB1c2goT2JqZWN0LmFzc2lnbihKU09OLnBhcnNlKGJhc2U2NERlY29kZShjb250ZW50KSkseyduYW1lJzpuYW1lfSkpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LmiJDlip/lr7zlhaXop6PmnpDphY3nva46XFxcXFxcXFxcXFxcXFxcXG4nK25hbWVcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIH0sbmFtZSx1cmwsTXlKaWV4aSxqeHNSb3V0ZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIH1lbHNle1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aXoOazleivhuWIq+eahOWvvOWFpeWPo+S7pDpcXFxcXFxcXFxcXFxcXFxcbicraW5wdXQ7XFxcXFxcXFxuICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICB9LE15SmlleGksanhzUm91dGUpLFxcXFxcXFxcbiAgICAgICAgfSk7XFxcXFxcXFxuXFxcXFxcXFxuICAgICAgICBsZXQgaXNBdXRvID0gTXlKaWV4aS5pc0F1dG87XFxcXFxcXFxuICAgICAgICBsZXQgYXV0b01vZGUgPSBNeUppZXhpLmF1dG9Nb2RlO1xcXFxcXFxcbiAgICAgICAgbGV0IHNpbmdsZUJhY2sgPSBNeUppZXhpLnNpbmdsZUJhY2t8fGZhbHNlOyAvL+WQiuavm+aooeW8j+OAguWNleS4que7k+aenOebtOaOpei/lOWbnu+8jOWBnOatouWQjumdoueahFxcXFxcXFxcbiAgICAgICAgbGV0IGlnbm9yZV9teCA9IE15SmlleGkuaWdub3JlX214fHxmYWxzZTsgLy/lv73nlaXlhY3ll4Us5ZeF5o6i5LyY5YWI5qih5byP5L2/55SoXFxcXFxcXFxuICAgICAgICBsZXQgdGlwcyA9ICfop6PmnpDphY3nva7liJfooag65YWx6K6hOicrY29sb3IoTXlKaWV4aS5qaWV4aXMubGVuZ3RoLCcjZmY3MDAwJykrJ+S4qumFjee9rizoh6rliqjmoaPlvIDlhbM6Jytjb2xvcihpc0F1dG8/J+W8gCc6J+WFsycsJyNmZjcwMDAnKTtcXFxcXFxcXG4gICAgICAgIGQucHVzaCh7XFxcXFxcXFxuICAgICAgICAgICAgdGl0bGU6TXlKaWV4aS5qaWV4aXMmJk15SmlleGkuamlleGlzLmxlbmd0aD4wP3RpcHM6XFxcXFxcXFxcXFxcXFxcIuesrOS4gOasoeWKoOi9ve+8jOeCueatpOi/m+WOu+WIneWni+WMluino+aekOWIl+ihqFxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMScsXFxcXFxcXFxuICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKE15SmlleGksanhzUm91dGUpPT57XFxcXFxcXFxuICAgICAgICAgICAgICAgIGlmKE15SmlleGkuamlleGlzJiZNeUppZXhpLmppZXhpcy5sZW5ndGg+MCl7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmlzQXV0byA9ICFNeUppZXhpLmlzQXV0bztcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGlmKCFNeUppZXhpLmF1dG9Nb2RlKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmF1dG9Nb2RlID0gJ+WXheaOouS8mOWFiCc7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgdGlwcyA9IE15SmlleGkuaXNBdXRvPyflvIAnOiflhbMnO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suiuvue9ruiHquWKqOaho+aooeW8j+S4ujonK3RpcHNcXFxcXFxcXG4gICAgICAgICAgICAgICAgfWVsc2V7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgaW5pdFNldCA9IHsnbm93JzpcXFxcXFxcXFxcXFxcXFwi6YGT6ZW/5o6o6I2QXFxcXFxcXFxcXFxcXFxcIiwnamlleGlzJzpbe25hbWU6J+mBk+mVv+aOqOiNkCcscXk6WyfkuIfog73op6PmnpDikr8nXSx5azpbJ+S4h+iDveino+aekOKSvyddLHR4Olsn5LiH6IO96Kej5p6Q4pK/J10sbWc6WyfkuIfog73op6PmnpDikr8nXSxibDpbJ+S4h+iDveino+aekOKSvyddLHNoOlsn5LiH6IO96Kej5p6Q4pK/J10seGc6WyfkuIfog73op6PmnpDikr8nXSxwcDpbJ+S4h+iDveino+aekOKSvyddLG1pOlsn5LiH6IO96Kej5p6Q4pK/J10sXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlOlsn5LiH6IO96Kej5p6Q4pK/J10sZnVuOlsn5LiH6IO96Kej5p6Q4pK/J10sb25lOlsn5LiH6IO96Kej5p6Q4pK/J10sbHQ6WyfkuIfog73op6PmnpDikr8nXSxycjpbJ+S4h+iDveino+aekOKSvyddLHdkOlsn5LiH6IO96Kej5p6Q4pK/J119XX07XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoaW5pdFNldCkpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S6Kej5p6Q6YWN572u5bey5Yid5aeL5YyWJ1xcXFxcXFxcbiAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgfSxNeUppZXhpLGp4c1JvdXRlKVxcXFxcXFxcbiAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICBsZXQgYzEgPSAnIzE1YWIyMSc7XFxcXFxcXFxuICAgICAgICBsZXQgYzIgPSAnIzkwMGEwYSc7XFxcXFxcXFxuICAgICAgICBsZXQgYXV0b01vZGVTZWwgPSBbJ+mAn+W6puS8mOWFiCcsJ+mhuuW6j+S8mOWFiCcsJ+WXheaOouS8mOWFiCddO1xcXFxcXFxcbiAgICAgICAgbGV0IGF1dG9Nb2RlU2VscyA9IGF1dG9Nb2RlU2VsLm1hcCgoaXQpPT57XFxcXFxcXFxuICAgICAgICAgICAgaWYoaXQ9PT1NeUppZXhpLmF1dG9Nb2RlKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgaXQgPSBjb2xvcihpdCxjMSk7XFxcXFxcXFxuICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiBpdFxcXFxcXFxcbiAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICBsZXQgYXV0b01vZGVUaXBzID0gYXV0b01vZGVTZWwuaW5jbHVkZXMoYXV0b01vZGUpP2F1dG9Nb2RlOifmnKrnn6UnO1xcXFxcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcXFxcXG4gICAgICAgICAgICB0aXRsZTpzbWFsbChcXFxcXFxcXFxcXFxcXFwi5aSH6IOO5a6g5bm45pa55qGIOlxcXFxcXFxcXFxcXFxcXCIpK2NvbG9yKGF1dG9Nb2RlVGlwcywnI2ZmNzAwMCcpLFxcXFxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0XzInLFxcXFxcXFxcbiAgICAgICAgICAgIHVybDokKGF1dG9Nb2RlU2VscywzLCfor7fpgInmi6noh6rliqjmoaPmqKHlvI8nKS5zZWxlY3QoKE15SmlleGksanhzUm91dGUpPT57XFxcXFxcXFxuICAgICAgICAgICAgICAgIGlucHV0ID0gL2ZvbnQvLnRlc3QoaW5wdXQpP2lucHV0LnNwbGl0KCc+JylbMV0uc3BsaXQoJzwnKVswXTppbnB1dDtcXFxcXFxcXG4gICAgICAgICAgICAgICAgaWYoaW5wdXQhPT1NeUppZXhpLmF1dG9Nb2RlKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIE15SmlleGkuYXV0b01vZGUgPSBpbnB1dDtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suiuvue9ruWkh+iDjuWuoOW5uOaWueahiOS4ujonK2lucHV0XFxcXFxcXFxuICAgICAgICAgICAgfSxNeUppZXhpLGp4c1JvdXRlKSxcXFxcXFxcXG4gICAgICAgIH0pO1xcXFxcXFxcblxcXFxcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcXFxcXG4gICAgICAgICAgICB0aXRsZTpjb2xvcihcXFxcXFxcXFxcXFxcXFwi5oGi5aSN5Ye65Y6C6K6+572uXFxcXFxcXFxcXFxcXFxcIiwnI2ZmNzAwMCcpLFxcXFxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0XzInLFxcXFxcXFxcbiAgICAgICAgICAgIHVybDokKFxcXFxcXFxcXFxcXFxcXCLlpoLmnpzkvaDnmoTop6PmnpDnrqHnkIbml6Dms5XmraPluLjnlKjkuobvvIzmraTmlrnms5Xlj6/ku6XmlZHnoJbvvIznoa7orqTmgaLlpI0/XFxcXFxcXFxcXFxcXFxcIikuY29uZmlybSgoanhzUm91dGUpPT57XFxcXFxcXFxuICAgICAgICAgICAgICAgIGxldCBpbml0U2V0ID0geydub3cnOlxcXFxcXFxcXFxcXFxcXCLpgZPplb/mjqjojZBcXFxcXFxcXFxcXFxcXFwiLCdqaWV4aXMnOlt7bmFtZTon6YGT6ZW/5o6o6I2QJyxxeTpbJ+S4h+iDveino+aekOKSvyddLHlrOlsn5LiH6IO96Kej5p6Q4pK/J10sdHg6WyfkuIfog73op6PmnpDikr8nXSxtZzpbJ+S4h+iDveino+aekOKSvyddLGJsOlsn5LiH6IO96Kej5p6Q4pK/J10sc2g6WyfkuIfog73op6PmnpDikr8nXSx4ZzpbJ+S4h+iDveino+aekOKSvyddLHBwOlsn5LiH6IO96Kej5p6Q4pK/J10sbWk6WyfkuIfog73op6PmnpDikr8nXSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZTpbJ+S4h+iDveino+aekOKSvyddLGZ1bjpbJ+S4h+iDveino+aekOKSvyddLG9uZTpbJ+S4h+iDveino+aekOKSvyddLGx0Olsn5LiH6IO96Kej5p6Q4pK/J10scnI6WyfkuIfog73op6PmnpDikr8nXSx3ZDpbJ+S4h+iDveino+aekOKSvyddfV19O1xcXFxcXFxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoaW5pdFNldCkpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aWreaPkuino+aekOmFjee9ruW3sumHjee9ruS4uuWHuuWOguiuvue9ridcXFxcXFxcXG4gICAgICAgICAgICB9LGp4c1JvdXRlKVxcXFxcXFxcbiAgICAgICAgfSk7XFxcXFxcXFxuXFxcXFxcXFxuICAgICAgICBsZXQgY2FjaGVWaWRlb1N3aXRjaCA9IGdldFZhcignZHAuY2FjaGVWaWRlbycsJ3RydWUnKT09PSd0cnVlJz8n5byAJzon5YWzJztcXFxcXFxcXG4gICAgICAgIGxldCBqeFRpbWVvdXQgPSBnZXRWYXIoJ2RwLmp4VGltZW91dCcsJzcwMDAnKTtcXFxcXFxcXG4gICAgICAgIGxldCBjb2xfdHlwZTIgPSBhdXRvTW9kZT09PSfpobrluo/kvJjlhYgnPyd0ZXh0XzMnOid0ZXh0XzInO1xcXFxcXFxcbiAgICAgICAgbGV0IHNpbmdsZUJhY2tUaXBzID0gc2luZ2xlQmFjaz8n5byAJzon5YWzJztcXFxcXFxcXG4gICAgICAgIGxldCBpZ25vcmVfbXhfdGlwcyA9IGlnbm9yZV9teD8n5byAJzon5YWzJztcXFxcXFxcXG4gICAgICAgIGlmKGF1dG9Nb2RlPT09J+mhuuW6j+S8mOWFiCcpe1xcXFxcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHRpdGxlOnNtYWxsKCflkIrmr5vmqKHlvI86JykrY29sb3Ioc2luZ2xlQmFja1RpcHMsJyNmZjcwMDAnKSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6Y29sX3R5cGUyLFxcXFxcXFxcbiAgICAgICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoTXlKaWV4aSxqeHNSb3V0ZSk9PntcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIE15SmlleGkuc2luZ2xlQmFjayA9ICEoTXlKaWV4aS5zaW5nbGVCYWNrfHxmYWxzZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6K6+572u5ZCK5q+b5qih5byP5byA5YWz5Li6OicrKE15SmlleGkuc2luZ2xlQmFjaz8n5byAJzon5YWzJylcXFxcXFxcXG4gICAgICAgICAgICAgICAgfSxNeUppZXhpLGp4c1JvdXRlKVxcXFxcXFxcbiAgICAgICAgICAgIH0pO1xcXFxcXFxcbiAgICAgICAgfWVsc2UgaWYoYXV0b01vZGU9PT0n5ZeF5o6i5LyY5YWIJyl7XFxcXFxcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBjb2xvcign5a+85YWl6L6F5YqpJywnI2ZmNzAwMCcpLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6Y29sX3R5cGUyLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5I25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KCdodHRwczovL25ldGN1dC5jbi9wL2E1ZDFjOGUxZWNlZTI4ZDMnKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IGh0bWwubWF0Y2goL3suKm5vdGVfY29udGVudC4qdXBkYXRlZF9hdC4qfS8pWzBdO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gSlNPTi5wYXJzZShkYXRhKS5ub3RlX2NvbnRlbnQ7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVwRGF0YSA9IEpTT04ucGFyc2UoZGF0YSkudXBkYXRlZF9hdDtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtKHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfmmK/lkKblr7zlhaUnLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAn6ISa5pys5pu05paw5pel5pyfXFxcXFxcXFxcXFxcXFxcXG4nICsgdXBEYXRhLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtOiQudG9TdHJpbmcoKGNvbnRlbnQpPT57XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGVudFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LGNvbnRlbnQpLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWw6ICgpID0+IHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Llj5bmtojlr7zlhaUnO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pLFxcXFxcXFxcbiAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgKTtcXFxcXFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTpzbWFsbCgn5b+955Wl5YWN5ZeFOicpK2NvbG9yKGlnbm9yZV9teF90aXBzLCcjZmY3MDAwJyksXFxcXFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOmNvbF90eXBlMixcXFxcXFxcXG4gICAgICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKE15SmlleGksanhzUm91dGUpPT57XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmlnbm9yZV9teCA9ICEoTXlKaWV4aS5pZ25vcmVfbXh8fGZhbHNlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6K6+572u5b+955Wl5YWN5ZeF5byA5YWz5Li6OicrKE15SmlleGkuaWdub3JlX214PyflvIAnOiflhbMnKVxcXFxcXFxcbiAgICAgICAgICAgICAgICB9LE15SmlleGksanhzUm91dGUpXFxcXFxcXFxuICAgICAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICBkLnB1c2goe1xcXFxcXFxcbiAgICAgICAgICAgIHRpdGxlOnNtYWxsKCflpJrnur/ot6/nvJPlrZg6JykrY29sb3IoY2FjaGVWaWRlb1N3aXRjaCwnI2ZmNzAwMCcpLFxcXFxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOmNvbF90eXBlMixcXFxcXFxcXG4gICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoY2FjaGVWaWRlb1N3aXRjaCk9PntcXFxcXFxcXG4gICAgICAgICAgICAgICAgaWYoY2FjaGVWaWRlb1N3aXRjaD09PSflvIAnKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcignZHAuY2FjaGVWaWRlbycsJ2ZhbHNlJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIH1lbHNle1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdkcC5jYWNoZVZpZGVvJywndHJ1ZScpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXFxcXFxuICAgICAgICAgICAgfSxjYWNoZVZpZGVvU3dpdGNoKVxcXFxcXFxcbiAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICBkLnB1c2goe1xcXFxcXFxcbiAgICAgICAgICAgIHRpdGxlOnNtYWxsKCfop6PmnpDotoXml7Y6JykrY29sb3IoanhUaW1lb3V0LCcjZmY3MDAwJyksXFxcXFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6Y29sX3R5cGUyLFxcXFxcXFxcbiAgICAgICAgICAgIHVybDokKGp4VGltZW91dCwn6K+36K6+572u6a2U5pat6Kej5p6Q6LaF5pe2LOW/hemhu+S4uuaVtOaVsCcpLmlucHV0KCgpPT57XFxcXFxcXFxuICAgICAgICAgICAgICAgIGlmKCFwYXJzZUludChpbnB1dCkpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQgPSA3MDAwO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgIHB1dFZhcignZHAuanhUaW1lb3V0JyxpbnB1dCk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6K6+572u5Li6OicrcGFyc2VJbnQoaW5wdXQpXFxcXFxcXFxuICAgICAgICAgICAgfSxqeFRpbWVvdXQpXFxcXFxcXFxuICAgICAgICB9KTtcXFxcXFxcXG4gICAgICAgIGlmKGF1dG9Nb2RlJiZzaW5nbGVCYWNrKXtcXFxcXFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogY29sb3IoJ+aJk+W8gOe8lui+keWQiuavm+i/h+a7pOaWh+S7ticsJyMxMzc5Q0InKSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChkbVBhdGgpID0+IHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBkZWZfZG1zID0gWydodHRwczovL3ZkMy5iZHN0YXRpYy5jb20vbWRhLWtpOXVncTU0MzBiaHh5czgvdjEtY2FlLzEwODBwL21kYS1raTl1Z3E1NDMwYmh4eXM4Lm1wNCddO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYoIWZpbGVFeGlzdChkbVBhdGgpKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoZG1QYXRoLCcvL+S4gOihjOS4gOS4qumTvuaOpSzlj6/ms6jph4rjgIJcXFxcXFxcXFxcXFxcXFxcbicrZGVmX2Rtcy5qb2luKCdcXFxcXFxcXFxcXFxcXFxcbicpKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnZWRpdEZpbGU6Ly8nK2RtUGF0aDtcXFxcXFxcXG4gICAgICAgICAgICAgICAgfSxkbVBhdGgpLFxcXFxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXFxcXFxuICAgICAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuXFxcXFxcXFxuICAgICAgICBkLnB1c2goe1xcXFxcXFxcbiAgICAgICAgICAgIHRpdGxlOiBjb2xvcign5omT5byA57yW6L6R6Kej5p6Q5paH5Lu2JywnIzEzNzlDQicpLFxcXFxcXFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoanhzUm91dGUpID0+IHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdlZGl0RmlsZTovLycranhzUm91dGU7XFxcXFxcXFxuICAgICAgICAgICAgfSxqeHNSb3V0ZSksXFxcXFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcXFxcXFxcbiAgICAgICAgfSk7XFxcXFxcXFxuXFxcXFxcXFxuICAgICAgICBmb3IobGV0IGkgaW4gTXlKaWV4aS5qaWV4aXMpe1xcXFxcXFxcbiAgICAgICAgICAgIGxldCBub3dKeCA9IE15SmlleGkuamlleGlzW2ldO1xcXFxcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHRpdGxlOk15SmlleGkubm93PT09bm93SngubmFtZT8n8J+RiScrbm93SngubmFtZTpub3dKeC5uYW1lLFxcXFxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTonZmxleF9idXR0b24nLFxcXFxcXFxcbiAgICAgICAgICAgICAgICBleHRyYTp7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBub3dKeDpub3dKeCxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIE15SmlleGk6TXlKaWV4aSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGp4c1JvdXRlOmp4c1JvdXRlXFxcXFxcXFxuICAgICAgICAgICAgICAgIH0sXFxcXFxcXFxuICAgICAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChub3dKeCxNeUppZXhpLGksanhzUm91dGUpPT57XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9uID0gZ2V0VmFyKCdkbi5qeG1fb3B0aW9uJywn6YCJ5oupJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbil7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5a+85Ye6JzpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5vd0p4Q29kZSA9IGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeShub3dKeCkpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gc2hhcmVQYXN0ZShub3dKeENvZGUpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9ICfprZTmlq3op6PmnpDphY3nva5AJytub3dKeC5uYW1lKydAJyt1cmw7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkoY29kZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Llr7zlh7rkuLrkupHlj6Pku6TlubblpI3liLbliLDliarliIfmnb8nXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5L+u5pS5JzpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYobm93SngubmFtZT09PU15SmlleGkubm93KXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiAndG9hc3Q6Ly/mraTop6PmnpDphY3nva7lvZPliY3mraPlnKjkvb/nlKjkuK3vvIzkuI3lhYHorrjkv67mlLkhJ1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVsc2V7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9qeEVkaXQ/cnVsZT1NeUZpZWxk4bSw4oG/J1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL2p4RWRpdD9ydWxlPU15RmllbGThtLDigb8nXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5Yig6ZmkJzpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ+ehruiupOWIoOmZpOino+aekOmFjee9rjonK25vd0p4Lm5hbWUrJz8nKS5jb25maXJtKChub3dKeCxNeUppZXhpLGksanhzUm91dGUpPT57XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihub3dKeC5uYW1lPT09TXlKaWV4aS5ub3cpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mraTop6PmnpDphY3nva7lvZPliY3mraPlnKjkvb/nlKjkuK3vvIzkuI3lhYHorrjliKDpmaQhJ1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXMuc3BsaWNlKGksMSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5Yig6ZmkJ1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LG5vd0p4LE15SmlleGksaSxqeHNSb3V0ZSlcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLm5vdz1ub3dKeC5uYW1lO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S9oOmAieaLqeS6hicrbm93SngubmFtZSsn5L2c5Li65b2T5YmN6Kej5p6Q6YWN572uJztcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgfSxub3dKeCxNeUppZXhpLGksanhzUm91dGUpLFxcXFxcXFxcbiAgICAgICAgICAgIH0pO1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgc2V0UmVzdWx0KGQpO1xcXFxcXFxcbiAgICB9XFxcXFxcXFxuJC5leHBvcnRzLmp4TWFuYWdlPWp4TWFuYWdlO1xcXFxcXFwifSx7XFxcXFxcXCJuYW1lXFxcXFxcXCI6XFxcXFxcXCLop6PmnpDnvJbovpFcXFxcXFxcIixcXFxcXFxcInBhdGhcXFxcXFxcIjpcXFxcXFxcImp4RWRpdFxcXFxcXFwiLFxcXFxcXFwicnVsZVxcXFxcXFwiOlxcXFxcXFwianM6XFxcXFxcXFxubGV0IHtub3dKeCxNeUppZXhpLGp4c1JvdXRlfSA9IE1ZX1BBUkFNUztcXFxcXFxcXG5sZXQgbm93SnhUID0gSlNPTi5wYXJzZShnZXRWYXIoJ2RuLm5vd0p4Jyl8fCd7fScpO1xcXFxcXFxcbm5vd0p4ID0gbm93SnhULm5hbWU/bm93SnhUOm5vd0p4O1xcXFxcXFxcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoKT0+e1xcXFxcXFxcbiAgICBjbGVhclZhcihcXFxcXFxcXFxcXFxcXFwiZG4uanhfdGl0bGVzXFxcXFxcXFxcXFxcXFxcIik7XFxcXFxcXFxuICAgIGNsZWFyVmFyKFxcXFxcXFxcXFxcXFxcXCJkbi5ub3dKeFxcXFxcXFxcXFxcXFxcXCIpO1xcXFxcXFxcbiAgICBjbGVhclZhcihcXFxcXFxcXFxcXFxcXFwiZG4uanhtX25hbWVcXFxcXFxcXFxcXFxcXFwiKTtcXFxcXFxcXG59KSk7XFxcXFxcXFxubGV0IGlkID0gbnVsbDtcXFxcXFxcXG5mb3IobGV0IGogaW4gTXlKaWV4aS5qaWV4aXMpe1xcXFxcXFxcbiAgICBpZihNeUppZXhpLmppZXhpc1tqXS5uYW1lID09PSBub3dKeC5uYW1lKXtcXFxcXFxcXG4gICAgICAgIGlkID0gajtcXFxcXFxcXG4gICAgICAgIGJyZWFrO1xcXFxcXFxcbiAgICB9XFxcXFxcXFxufVxcXFxcXFxcbmxldCBkID0gW107XFxcXFxcXFxuZC5wdXNoKHtcXFxcXFxcXG4gICAgdGl0bGU6ICfphY3nva7lkI3np7AnLFxcXFxcXFxcbiAgICBkZXNjOiBcXFxcXFxcXFxcXFxcXFwi6Kej5p6Q6YWN572u5ZCN56ewLOWmgumBk+mVv+aOqOiNkFxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgIGV4dHJhOiB7XFxcXFxcXFxuICAgICAgICBvbkNoYW5nZTogXFxcXFxcXFxcXFxcXFxcInB1dFZhcignZG4uanhtX25hbWUnLGlucHV0KVxcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgICAgICB0aXRsZVZpc2libGU6IHRydWUsXFxcXFxcXFxuICAgICAgICBkZWZhdWx0VmFsdWU6Z2V0VmFyKCdkbi5qeG1fbmFtZScsJycpfHxub3dKeC5uYW1lXFxcXFxcXFxuICAgIH0sXFxcXFxcXFxuICAgIGNvbF90eXBlOidpbnB1dCdcXFxcXFxcXG59KTtcXFxcXFxcXG4vLyBsZXQgb3B0aW9ucyA9IFsn6YCJ5oupJywn5paw5aKeJywn5Yig6ZmkJywn5om56YeP5Yig6ZmkJywn56e75YqoJ107XFxcXFxcXFxubGV0IG9wdGlvbnMgPSBbJ+aWsOWinicsJ+WIoOmZpCcsJ+enu+WKqCddO1xcXFxcXFxcbmxldCB3cml0ZU1vZGUgPSBnZXRWYXIoJ2RuLmp4bV93cml0ZU1vZGUnLCfmlrDlop4nKTtcXFxcXFxcXG5mb3IobGV0IGkgaW4gb3B0aW9ucyl7XFxcXFxcXFxuICAgIGxldCBvcHRpb24gPSBvcHRpb25zW2ldO1xcXFxcXFxcbiAgICBsZXQgZmxhZyA9IHdyaXRlTW9kZT09PW9wdGlvbj8n8J+RiSc6Jyc7XFxcXFxcXFxuICAgIGQucHVzaCh7XFxcXFxcXFxuICAgICAgICB0aXRsZTpmbGFnK29wdGlvbixcXFxcXFxcXG4gICAgICAgIC8vIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXFxcXFxcXG4gICAgICAgIGNvbF90eXBlOidmbGV4X2J1dHRvbicsXFxcXFxcXFxuICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgob3B0aW9uKT0+e1xcXFxcXFxcbiAgICAgICAgICAgIHB1dFZhcignZG4uanhtX3dyaXRlTW9kZScsIG9wdGlvbik7XFxcXFxcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXFxcXFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXFxcXFxcXG4gICAgICAgIH0sb3B0aW9uKSxcXFxcXFxcXG4gICAgfSk7XFxcXFxcXFxufVxcXFxcXFxcbmQucHVzaCh7XFxcXFxcXFxuICAgIC8vIGNvbF90eXBlOidsaW5lJyxcXFxcXFxcXG4gICAgY29sX3R5cGU6J2JsYW5rX2Jsb2NrJ1xcXFxcXFxcbn0pO1xcXFxcXFxcbi8v6I635Y+W5pat5o+S5YiX6KGoXFxcXFxcXFxuaWYoIWdldFZhcihcXFxcXFxcXFxcXFxcXFwiZG4uanhfdGl0bGVzXFxcXFxcXFxcXFxcXFxcIikpe1xcXFxcXFxcbiAgICBsZXQgdGl0bGVBcnIgPSBbXSwgdXJsQXJyID0gW107XFxcXFxcXFxuICAgIHZhciBqc29uPXt0aXRsZTpbXSxjb2Rlczp7fX07XFxcXFxcXFxuICAgIGxldCBzZXRGaWxlID0gcmVxdWVzdCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nKTtcXFxcXFxcXG4gICAgdHJ5IHtcXFxcXFxcXG4gICAgICAgIGV2YWwoJ2pzb249JytzZXRGaWxlKTtcXFxcXFxcXG4gICAgfWNhdGNoIChlKSB7XFxcXFxcXFxuICAgICAgICBsb2coJ0pzb27op6PmnpDlj5HnlJ/kuobplJnor686JytlLm1lc3NhZ2UpO1xcXFxcXFxcbiAgICB9XFxcXFxcXFxuICAgIHRpdGxlQXJyID0ganNvbi50aXRsZTtcXFxcXFxcXG4gICAgdGl0bGVBcnIuZm9yRWFjaCgoaXQpID0+IHtcXFxcXFxcXG4gICAgICAgIHVybEFyci5wdXNoKGpzb24uY29kZXNbaXRdKTtcXFxcXFxcXG4gICAgfSk7XFxcXFxcXFxuICAgIHB1dFZhcignZG4uanhfdGl0bGVzJyxKU09OLnN0cmluZ2lmeSh0aXRsZUFycikpO1xcXFxcXFxcbn1cXFxcXFxcXG5cXFxcXFxcXG5sZXQgdGl0bGVzID0gSlNPTi5wYXJzZShnZXRWYXIoJ2RuLmp4X3RpdGxlcycpfHwnW10nKTtcXFxcXFxcXG5sZXQgdGl0bGVEaWMgPSB7XFxcXFxcXFxuICAgIGJsOiflk5Tlk6nlk5Tlk6knLGZ1bjon6aOO6KGMJyxsZTon5LmQ6KeGJyxtZzon6IqS5p6cJyxtaTon5ZKq5ZKVJyxwcDonUFBUVicscXk6J+eIseWlh+iJuicsc2g6J+aQnOeLkCcsXFxcXFxcXFxuICAgIHR4Oifohb7orq8nLHhnOifopb/nk5wnLHlrOifkvJjphbcnLG9uZTonMTkwNScsbHQ6J+m+meiFvicscnI6J+S6uuS6uui/tycsd2Q6J+S6lOavkicsb3RoOiflhbbku5YnXFxcXFxcXFxufVxcXFxcXFxcbmxldCB0aXRsZU9yZGVyID0ge1xcXFxcXFxcbiAgICBxeToxLHlrOjIsdHg6MyxtZzo0LGJsOjUsc2g6Nix4Zzo3LHBwOjgsbWk6OSxsZToxMCxvbmU6MTEsZnVuOjEyLGx0OjEzLHJyOjE0LHdkOjE1LG90aDoxNixcXFxcXFxcXG59O1xcXFxcXFxcblxcXFxcXFxcbmZ1bmN0aW9uIGNvbXBhcmVPZCh0aXRsZU9yZGVyKXtcXFxcXFxcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhLCBiKXtcXFxcXFxcXG4gICAgICAgIGxldCB4ID0gdGl0bGVPcmRlclthXTtcXFxcXFxcXG4gICAgICAgIGxldCB5ID0gdGl0bGVPcmRlcltiXTtcXFxcXFxcXG4gICAgICAgIHJldHVybiB4LXk7XFxcXFxcXFxuICAgIH1cXFxcXFxcXG59XFxcXFxcXFxuLy8tLS0tLS0tLS0tLS0tLS0tLVxcXFxcXFxcbi8vIGxldCBqZHMgPSBPYmplY3Qua2V5cyhub3dKeCkuZmlsdGVyKGl0PT5pdCE9PSduYW1lJyYmaXQhPT0nb3RoJyk7XFxcXFxcXFxubGV0IGZsYWdzID0gT2JqZWN0LmtleXModGl0bGVPcmRlcik7XFxcXFxcXFxubGV0IGpkcyA9IE9iamVjdC5rZXlzKG5vd0p4KS5maWx0ZXIoaXQ9Pml0IT09J25hbWUnJiZmbGFncy5pbmNsdWRlcyhpdCkpO1xcXFxcXFxcbi8vbG9nKGpkcyk7XFxcXFxcXFxuZm9yKGxldCBrIG9mIGZsYWdzKXtcXFxcXFxcXG4gICAgaWYoIWpkcy5pbmNsdWRlcyhrKSl7XFxcXFxcXFxuICAgICAgICBqZHMucHVzaChrKVxcXFxcXFxcbiAgICB9XFxcXFxcXFxufVxcXFxcXFxcbmpkcyA9IGpkcy5zb3J0KGNvbXBhcmVPZCh0aXRsZU9yZGVyKSk7XFxcXFxcXFxuZm9yKGxldCBqIGluIGpkcyl7XFxcXFxcXFxuICAgIGxldCBqeHMgPSBub3dKeFtqZHNbal1dfHxbXTtcXFxcXFxcXG4gICAgbGV0IHRpdGxlID0gamRzW2pdO1xcXFxcXFxcbiAgICBkLnB1c2goe1xcXFxcXFxcbiAgICAgICAgdGl0bGU6dGl0bGVEaWNbdGl0bGVdfHx0aXRsZSxcXFxcXFxcXG4gICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXFxcXFxcXG4gICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0aXRsZXMsdGl0bGUsanhzLGp4c1JvdXRlLE15SmlleGksbm93SngpPT57XFxcXFxcXFxuICAgICAgICAgICAgdmFyIGpzb249e3RpdGxlOltdLGNvZGVzOnt9fTtcXFxcXFxcXG4gICAgICAgICAgICBsZXQgc2V0RmlsZSA9IHJlcXVlc3QoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJyk7XFxcXFxcXFxuICAgICAgICAgICAgdHJ5IHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgZXZhbCgnanNvbj0nK3NldEZpbGUpO1xcXFxcXFxcbiAgICAgICAgICAgIH1jYXRjaCAoZSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICBsb2coJ0pzb27op6PmnpDlj5HnlJ/kuobplJnor686JytlLm1lc3NhZ2UpO1xcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICBpZihnZXRWYXIoJ2RuLmp4bV93cml0ZU1vZGUnLCfmlrDlop4nKT09PSfmlrDlop4nKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgbGV0IHNlbF90aXRsZSA9IHRpdGxlcy5maWx0ZXIoaXQ9PiFqeHMuaW5jbHVkZXMoaXQpKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgc2VsX3RpdGxlID0gc2VsX3RpdGxlLm1hcCgoaXQpPT57XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgZmxhZyA9ICfigJjigJjik4rigJnigJknO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mKGpzb24uY29kZXNbaXRdKT09PSdmdW5jdGlvbicpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgPSAn4oCc4oCc4pK/4oCd4oCdJztcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZihqc29uLmNvZGVzW2l0XSk9PT0ndW5kZWZpbmVkJyl7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyA9ICcnO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZsYWcraXRcXFxcXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHJldHVybiAkKHNlbF90aXRsZSwyKS5zZWxlY3QoKE15SmlleGksanhzLG5vd0p4LHRpdGxlLGp4c1JvdXRlKT0+e1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKC/igJjigJjik4rigJnigJl84oCc4oCc4pK/4oCd4oCdL2csJycpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlkID0gbnVsbDtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaiBpbiBNeUppZXhpLmppZXhpcyl7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoTXlKaWV4aS5qaWV4aXNbal0ubmFtZSA9PT0gbm93SngubmFtZSl7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gajtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYoIWlkKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v57Si5byV6ZSZ6K+v5peg5rOV5L+d5a2YOlxcXFxcXFxcXFxcXFxcXFxuJytpZFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAganhzLnB1c2goaW5wdXQpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgbG9nKGp4cyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBub3dKeFt0aXRsZV0gPSBqeHM7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpc1tpZF0gPSBub3dKeDtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcignZG4ubm93SngnLEpTT04uc3RyaW5naWZ5KG5vd0p4KSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXFxcXFxuICAgICAgICAgICAgICAgIH0sTXlKaWV4aSxqeHMsbm93SngsdGl0bGUsanhzUm91dGUpO1xcXFxcXFxcbiAgICAgICAgICAgIH1lbHNlIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgIH0sdGl0bGVzLHRpdGxlLGp4cyxqeHNSb3V0ZSxNeUppZXhpLG5vd0p4KVxcXFxcXFxcbiAgICB9KTtcXFxcXFxcXG4gICAgZm9yKGxldCBrIGluIGp4cyl7XFxcXFxcXFxuICAgICAgICBkLnB1c2goe1xcXFxcXFxcbiAgICAgICAgICAgIHRpdGxlOmp4c1trXSxcXFxcXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxcXFxcXFxuICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHRpdGxlcyx0aXRsZSxqeHMsanhzUm91dGUsTXlKaWV4aSxub3dKeCxuangsaWQsayxtYXgpPT57XFxcXFxcXFxuICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VmFyKCdkbi5qeG1fd3JpdGVNb2RlJywn5paw5aKeJykpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn5Yig6ZmkJzpcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24odmFsKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuaW5kZXhPZih2YWwpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGxpY2UoaW5kZXgsIDEpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBqeHMucmVtb3ZlKG5qeCk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbm93SnhbdGl0bGVdID0ganhzO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIE15SmlleGkuamlleGlzW2lkXSA9IG5vd0p4O1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcignZG4ubm93SngnLEpTT04uc3RyaW5naWZ5KG5vd0p4KSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfnp7vliqgnOlxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKGssJ+enu+WKqOWIsOe0ouW8leWkmuWwkT8nKS5pbnB1dCgoayxtYXgsanhzLG5vd0p4LE15SmlleGksaWQsdGl0bGUsanhzUm91dGUpPT57XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE1vdmUoYXJyLCBmcm9tSW5kZXgsIHRvSW5kZXgpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gYXJyW2Zyb21JbmRleF07XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKGZyb21JbmRleCwgMSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKHRvSW5kZXgsIDAsIGVsZW1lbnQpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHBhcnNlSW50KGlucHV0KT09PWspe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WVpeS5n+ayoeWBmidcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocGFyc2VJbnQoaW5wdXQpPm1heC0xfHxwYXJzZUludChpbnB1dCk8LTEpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S9oOacgOWkp+enu+WKqOiMg+WbtDAtJytwYXJzZUludChtYXgtMSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGV0IG5ld0FyID0ganhzLnNwbGljZShrLCAxKTsgLy8g5Yig5o6JXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGp4cy51bnNoaWZ0KG5ld0FyWzBdKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTW92ZShqeHMsayxwYXJzZUludChpbnB1dCkpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3dKeFt0aXRsZV0gPSBqeHM7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE15SmlleGkuamlleGlzW2lkXSA9IG5vd0p4O1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2RuLm5vd0p4JyxKU09OLnN0cmluZ2lmeShub3dKeCkpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sayxtYXgsanhzLG5vd0p4LE15SmlleGksaWQsdGl0bGUsanhzUm91dGUpXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mraTlhYPntKDkuI3mlK/mjIHov5vooYw6JytnZXRWYXIoJ2RuLmp4bV93cml0ZU1vZGUnLCfmlrDlop4nKVxcXFxcXFxcbiAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgfSx0aXRsZXMsdGl0bGUsanhzLGp4c1JvdXRlLE15SmlleGksbm93SngsanhzW2tdLGlkLGssanhzLmxlbmd0aClcXFxcXFxcXG4gICAgICAgIH0pO1xcXFxcXFxcbiAgICB9XFxcXFxcXFxuICAgIGQucHVzaCh7XFxcXFxcXFxuICAgICAgICAvLyBjb2xfdHlwZTonbGluZScsXFxcXFxcXFxuICAgICAgICBjb2xfdHlwZTonYmxhbmtfYmxvY2snXFxcXFxcXFxuICAgIH0pXFxcXFxcXFxufVxcXFxcXFxcbmQucHVzaCh7XFxcXFxcXFxuICAgIGNvbF90eXBlOidsaW5lJyxcXFxcXFxcXG59KTtcXFxcXFxcXG5kLnB1c2goe1xcXFxcXFxcbiAgICB0aXRsZTon5L+d5a2YJyxcXFxcXFxcXG4gICAgY29sX3R5cGU6J3RleHRfY2VudGVyXzEnLFxcXFxcXFxcbiAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoTXlKaWV4aSxpZCxqeHNSb3V0ZSk9PntcXFxcXFxcXG4gICAgICAgIGlmKGdldFZhcignZG4uanhtX25hbWUnLCcnKSE9PU15SmlleGkuamlleGlzW2lkXS5uYW1lKXtcXFxcXFxcXG4gICAgICAgICAgICBpZkhhcyA9IE15SmlleGkuamlleGlzLmZpbHRlcihpdD0+aXQubmFtZT09PWdldFZhcignZG4uanhtX25hbWUnLCcnKSkubGVuZ3RoPjA7XFxcXFxcXFxuICAgICAgICAgICAgaWYoaWZIYXMpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5b6F5L+u5pS555qE5ZCN56ew6YeN5aSNLOS4jeWFgeiuuOS/neWtmCdcXFxcXFxcXG4gICAgICAgICAgICB9ZWxzZXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdLm5hbWUgPSAgZ2V0VmFyKCdkbi5qeG1fbmFtZScsJycpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgIGJhY2sodHJ1ZSk7XFxcXFxcXFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5L+d5a2YJ1xcXFxcXFxcbiAgICB9LE15SmlleGksaWQsanhzUm91dGUpXFxcXFxcXFxufSk7XFxcXFxcXFxuc2V0UmVzdWx0KGQpO1xcXFxcXFwifSx7XFxcXFxcXCJjb2xfdHlwZVxcXFxcXFwiOlxcXFxcXFwibW92aWVfM1xcXFxcXFwiLFxcXFxcXFwibmFtZVxcXFxcXFwiOlxcXFxcXFwi5bCP55m95qih5byPXFxcXFxcXCIsXFxcXFxcXCJwYXRoXFxcXFxcXCI6XFxcXFxcXCJzbWFsbFdoaXRlXFxcXFxcXCIsXFxcXFxcXCJydWxlXFxcXFxcXCI6XFxcXFxcXCJqczpcXFxcXFxcXG4gICAgc2V0UGFnZVRpdGxlKCfpgZPplb/nu5nlsI/nmb3nmoTlhbPniLEnKTtcXFxcXFxcXG5jb25zdCB7Y29sb3IsIHNtYWxsLGFwaX0gPSAkLnJlcXVpcmUoXFxcXFxcXFxcXFxcXFxcImhpa2VyOi8vcGFnZS91dGlsaXk/cnVsZT3pgZPplb/ku5PlupNQcm9cXFxcXFxcXFxcXFxcXFwiKTtcXFxcXFxcXG5sZXQgZmlsZVJvb3QgPSBhcGkuaG9zdCsnL2hpa2VydWxlL3p5d19kYXRhLyc7XFxcXFxcXFxuLy8gbG9nKGZpbGVSb290KTtcXFxcXFxcXG5sZXQgZCA9IFtdO1xcXFxcXFxcbnZhciB0aGVtZVJvdXRlID0gXFxcXFxcXFxcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlUaGVtZS5qc29uXFxcXFxcXFxcXFxcXFxcIjtcXFxcXFxcXG52YXIgdGhlbWVPbmxpbmUgPSBmaWxlUm9vdCsnMTEnO1xcXFxcXFxcbnZhciBvbGRSb3V0ZSA9IFxcXFxcXFxcXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxudmFyIG9sZE9ubGluZSA9IGZpbGVSb290KycxMic7XFxcXFxcXFxudmFyIG5ld1JvdXRlID0gXFxcXFxcXFxcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uXFxcXFxcXFxcXFxcXFxcIjtcXFxcXFxcXG52YXIgbmV3T25saW5lID0gZmlsZVJvb3QrJzEzJztcXFxcXFxcXG52YXIganhzUm91dGUgPSBcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeUppZXhpLmpzb25cXFxcXFxcXFxcXFxcXFwiO1xcXFxcXFxcbnZhciBqeE9ubGluZSA9IGZpbGVSb290KycxNCc7XFxcXFxcXFxudmFyIGRtT25saW5lID0gZmlsZVJvb3QrJzMwJztcXFxcXFxcXG52YXIgY2pjYWNoZSA9ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJztcXFxcXFxcXG52YXIgeDVjYWNoZSA9ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmh0bWwnO1xcXFxcXFxcbnZhciBkbVBhdGggPSBcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9kaWFvbWFvLnR4dFxcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxuZC5wdXNoKHtcXFxcXFxcXG4gICAgdGl0bGU6c21hbGwoJ+S9oOWlvSzlsI/nmb0s5Y2z5L2/5ZWl5Lmf5LiN5LyaLOS5n+WPr+S7peeci+aYjueZveS4i+mdoueahOWtl+WQpz8nKSxcXFxcXFxcXG4gICAgZGVzYzon5aaC5p6c6L+Y5piv5LiN5LyaLOivt+WIoOS7peawuOayuyzlkYrovp7kuI3osKInLFxcXFxcXFxcbiAgICBjb2xfdHlwZTondGV4dF8xJyxcXFxcXFxcXG4gICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCk9PntcXFxcXFxcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/mja7or7TkvaDkuI3mnI3msJQs5LiN5om/6K6k6Ieq5bex5piv5bCP55m9P1xcXFxcXFxcXFxcXFxcXFxu54K55oiR5Y+q5piv5Li65LqG5a6j5rOE5LiA5LiL5L2g55qE5oSk5oCSP+WVpeS5n+WIq+ivtOS6hizkuIvljrvmkJ4hJ1xcXFxcXFxcbiAgICB9KVxcXFxcXFxcbn0pO1xcXFxcXFxcbmQucHVzaCh7XFxcXFxcXFxuICAgIHRpdGxlOnNtYWxsKCfmibnph4/nrqHnkIbnlYzpnaLmlofku7bmmK/ku4DkuYg/JykrY29sb3IoJ+S4jeefpemBkyzmnaXkuIDku73pgZPplb/nmoQnLCcjNUZCODc4JyksXFxcXFxcXFxuICAgIGRlc2M6J+iHquWKqOaLieWPlumBk+mVv+eahOaJuemHj+euoeeQhueVjOmdouaWh+S7tu+8jOWPr+aJuemHj+WIoOmZpOWSjOWvvOWHuuino+aekCcsXFxcXFxcXFxuICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcXFxcXFxcbiAgICB1cmw6JCgn56Gu6K6k5ZCX77yfJykuY29uZmlybSgoKT0+e1xcXFxcXFxcbiAgICAgICAgbGV0IGxvY2FsSHRtbCA9ICdoaWtlcjovL2ZpbGVzL2NhY2hlL3Bsc2NQYXJzZS5odG1sJztcXFxcXFxcXG4gICAgICAgIHdyaXRlRmlsZShsb2NhbEh0bWwscmVxdWVzdCgnaHR0cHM6Ly9naXRjb2RlLm5ldC9xcV8zMjM5NDM1MS9kci8tL3Jhdy9tYXN0ZXIvZHAvYmF0Y2hfZGVsZXRlLmh0bWwnKSk7XFxcXFxcXFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ouJ5Y+W5a6M5q+VLOWPr+i/lOWbnuafpeeci+aJuemHj+euoeeQhuWKn+iDveaYr+WQpuato+W4uCdcXFxcXFxcXG4gICAgfSlcXFxcXFxcXG59KTtcXFxcXFxcXG5kLnB1c2goe1xcXFxcXFxcbiAgICB0aXRsZTpzbWFsbCgn5Y2V6aG56Kej5p6Q6YCJ5oup55WM6Z2i5Li76aKY5piv5LuA5LmIPycpK2NvbG9yKCfkuI3nn6XpgZMs5p2l5LiA5Lu96YGT6ZW/55qEJywnIzVGQjg3OCcpLFxcXFxcXFxcbiAgICBkZXNjOifoh6rliqjmi4nlj5bpgZPplb/nmoTkuLvpopjphY3nva7ku6Xlj4rnvZHpobXmj5Lku7blkozpnZnmgIHpobXpnaInLFxcXFxcXFxcbiAgICBjb2xfdHlwZTondGV4dF8xJyxcXFxcXFxcXG4gICAgdXJsOiQoJ+ehruiupOWQlz/lpoLmnpzkvaDkuI3mmK/lsI/nmb3vvIzmgLvor6XkvJrmj5DliY3lpIfku73oh6rlt7HkuLvpopjnmoTlkKchXFxcXFxcXFxcXFxcXFxcXG4nK3RoZW1lUm91dGUpLmNvbmZpcm0oKGNqY2FjaGUseDVjYWNoZSx0aGVtZVJvdXRlLHRoZW1lT25saW5lKT0+e1xcXFxcXFxcbiAgICAgICAgbGV0IHRoZW1lQ29kZSA9IGZldGNoKHRoZW1lT25saW5lKTtcXFxcXFxcXG4gICAgICAgIGlmKCEvbm93X3RoZW1lLy50ZXN0KHRoZW1lQ29kZSkpe1xcXFxcXFxcbiAgICAgICAgICAgIGxvZyh0aGVtZUNvZGUpO1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lpLHotKUh5LiO6YGT6ZW/5pyN5Yqh5Zmo6YCa6K6v6ZSZ6K+vLOS8sOiuoeaYr+e9kee7nOWNoeS6hidcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgIGxldCBjakZyb20gPSBcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmpzP3J1bGU9TXlGaWVsZOG0sOKBv1xcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxuICAgICAgICBsZXQgeDVGcm9tID0gXFxcXFxcXFxcXFxcXFxcImhpa2VyOi8vcGFnZS9QYXJzZV9Ebi5odG1sP3J1bGU9TXlGaWVsZOG0sOKBv1xcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxuICAgICAgICB0cnkge1xcXFxcXFxcbiAgICAgICAgICAgIGxldCBjakZpbGUgPSBKU09OLnBhcnNlKGZldGNoKGNqRnJvbSkpLnJ1bGU7XFxcXFxcXFxuICAgICAgICAgICAgbGV0IHg1RmlsZSA9IEpTT04ucGFyc2UoZmV0Y2goeDVGcm9tKSkucnVsZTtcXFxcXFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUoY2pjYWNoZSwgY2pGaWxlKTtcXFxcXFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUoeDVjYWNoZSwgeDVGaWxlKTtcXFxcXFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSwgdGhlbWVDb2RlKTtcXFxcXFxcXG4gICAgICAgICAgICBjbGVhclZhcihcXFxcXFxcXFxcXFxcXFwianhPbGRWXFxcXFxcXFxcXFxcXFxcIik7XFxcXFxcXFxuICAgICAgICAgICAgY2xlYXJWYXIoXFxcXFxcXFxcXFxcXFxcImp4TmV3VlxcXFxcXFxcXFxcXFxcXCIpO1xcXFxcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcXFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5Li76aKY5bey5oiQ5Yqf5bqU55SoJ1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgY2F0Y2goZSl7XFxcXFxcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S4u+mimOW6lOeUqOWksei0pVxcXFxcXFxcXFxcXFxcXFxu5pyq5pyf5pyb55qE6ZSZ6K+vOicrZS5tZXNzYWdlO1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICB9LGNqY2FjaGUseDVjYWNoZSx0aGVtZVJvdXRlLHRoZW1lT25saW5lKVxcXFxcXFxcbn0pO1xcXFxcXFxcbmQucHVzaCh7XFxcXFxcXFxuICAgIHRpdGxlOnNtYWxsKCfmlq3mj5Lop6PmnpDlj4rpu5jorqTliJfooajmmK/ku4DkuYg/JykrY29sb3IoJ+S4jeefpemBkyzmnaXkuIDku73pgZPplb/nmoQnLCcjNUZCODc4JyksXFxcXFxcXFxuICAgIGRlc2M6J+iHquWKqOaLieWPlumBk+mVv+WcqOeUqOeahOS4pOS4qk15UGFyc2UuanNvbuaWh+S7ticsXFxcXFxcXFxuICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcXFxcXFxcbiAgICB1cmw6JCgn56Gu6K6k5ZCXP+WmguaenOS9oOS4jeaYr+Wwj+eZve+8jOaAu+ivpeS8muaPkOWJjeWkh+S7veiHquW3seeahOmFjee9ruaWh+S7tuWQpyFcXFxcXFxcXFxcXFxcXFxcbicrb2xkUm91dGUrJ1xcXFxcXFxcXFxcXFxcXFxuJytuZXdSb3V0ZSkuY29uZmlybSgob2xkUm91dGUsb2xkT25saW5lLG5ld1JvdXRlLG5ld09ubGluZSk9PntcXFxcXFxcXG4gICAgICAgIGxldCBvbGRDb2RlID0gZmV0Y2gob2xkT25saW5lKTtcXFxcXFxcXG4gICAgICAgIGxldCBuZXdDb2RlID0gZmV0Y2gobmV3T25saW5lKTtcXFxcXFxcXG4gICAgICAgIGlmKCEvUGFyc2VfRG5cXFxcXFxcXFxcXFxcXFxcLmpzLy50ZXN0KG9sZENvZGUpfHwhL1BhcnNlX0RuXFxcXFxcXFxcXFxcXFxcXC5qcy8udGVzdChuZXdDb2RlKSl7XFxcXFxcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+Wksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgdHJ5IHtcXFxcXFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUob2xkUm91dGUsIG9sZENvZGUpO1xcXFxcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZShuZXdSb3V0ZSwgbmV3Q29kZSk7XFxcXFxcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aWreaPkuino+aekOmFjee9ruWPium7mOiupOWIl+ihqOW3sue7j+mFjee9ruaIkOWKnydcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgIGNhdGNoKGUpe1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/phY3nva7lupTnlKjlpLHotKVcXFxcXFxcXFxcXFxcXFxcbuacquacn+acm+eahOmUmeivrzonK2UubWVzc2FnZTtcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgfSxvbGRSb3V0ZSxvbGRPbmxpbmUsbmV3Um91dGUsbmV3T25saW5lKVxcXFxcXFxcbn0pO1xcXFxcXFxcbmQucHVzaCh7XFxcXFxcXFxuICAgIHRpdGxlOnNtYWxsKCfmlq3mj5Lop6PmnpDoh6rliqjmoaPmqKHlvI/mmK/ku4DkuYg/JykrY29sb3IoJ+S4jeefpemBkyzmnaXkuIDku73pgZPplb/nmoQnLCcjNUZCODc4JyksXFxcXFxcXFxuICAgIGRlc2M6J+iHquWKqOaLieWPlumBk+mVv+WcqOeUqOeahE15SmlleGkuanNvbuaWh+S7ticsXFxcXFxcXFxuICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcXFxcXFxcbiAgICB1cmw6JCgn56Gu6K6k5ZCXP+WmguaenOS9oOS4jeaYr+Wwj+eZve+8jOaAu+ivpeS8muaPkOWJjeWkh+S7veiHquW3seeahOiHquWKqOaho+aWueahiOWQpyFcXFxcXFxcXFxcXFxcXFxcbicranhzUm91dGUpLmNvbmZpcm0oKGp4c1JvdXRlLGp4T25saW5lKT0+e1xcXFxcXFxcbiAgICAgICAgbGV0IGp4Q29kZSA9IGZldGNoKGp4T25saW5lKTtcXFxcXFxcXG4gICAgICAgIGlmKCEvamlleGlzLy50ZXN0KGp4Q29kZSkpe1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lpLHotKUh5LiO6YGT6ZW/5pyN5Yqh5Zmo6YCa6K6v6ZSZ6K+vLOS8sOiuoeaYr+e9kee7nOWNoeS6hidcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgIHRyeSB7XFxcXFxcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLCBqeENvZGUpO1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlq3mj5Lop6PmnpDphY3nva7lj4rpu5jorqTliJfooajlt7Lnu4/phY3nva7miJDlip8nXFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICBjYXRjaChlKXtcXFxcXFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6Ieq5Yqo5qGj5bqU55So5aSx6LSlXFxcXFxcXFxcXFxcXFxcXG7mnKrmnJ/mnJvnmoTplJnor686JytlLm1lc3NhZ2U7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgIH0sanhzUm91dGUsanhPbmxpbmUpXFxcXFxcXFxufSk7XFxcXFxcXFxuZC5wdXNoKHtcXFxcXFxcXG4gICAgdGl0bGU6c21hbGwoJ+WQiuavm+i/h+a7pOaWh+S7tuaYr+S7gOS5iD8nKStjb2xvcign5LiN55+l6YGTLOadpeS4gOS7vemBk+mVv+eahCcsJyM1RkI4NzgnKSxcXFxcXFxcXG4gICAgZGVzYzon6Ieq5Yqo5ouJ5Y+W6YGT6ZW/5Zyo55So55qEZGlhb21hby50eHTmlofku7YnLFxcXFxcXFxcbiAgICBjb2xfdHlwZTondGV4dF8xJyxcXFxcXFxcXG4gICAgdXJsOiQoJ+ehruiupOWQlz/lpoLmnpzkvaDkuI3mmK/lsI/nmb3vvIzmgLvor6XkvJrmj5DliY3lpIfku73oh6rlt7HnmoTlkIrmr5vov4fmu6Tmlofku7blkKchXFxcXFxcXFxcXFxcXFxcXG4nK2RtUGF0aCkuY29uZmlybSgoZG1QYXRoLGRtT25saW5lKT0+e1xcXFxcXFxcbiAgICAgICAgbGV0IGRtQ29kZSA9IGZldGNoKGRtT25saW5lKTtcXFxcXFxcXG4gICAgICAgIGlmKCFkbUNvZGV8fCEvbXA0fG0zdTgvLnRlc3QoZG1Db2RlKSl7XFxcXFxcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+Wksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgdHJ5IHtcXFxcXFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUoZG1QYXRoLCBkbUNvZGUpO1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lkIrmr5vov4fmu6Tmlofku7blt7LphY3nva7miJDlip8nXFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICBjYXRjaChlKXtcXFxcXFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ZCK5q+b6L+H5ruk5paH5Lu25bqU55So5aSx6LSlXFxcXFxcXFxcXFxcXFxcXG7mnKrmnJ/mnJvnmoTplJnor686JytlLm1lc3NhZ2U7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgIH0sZG1QYXRoLGRtT25saW5lKVxcXFxcXFxcbn0pO1xcXFxcXFxcbmQucHVzaCh7XFxcXFxcXFxuICAgIHRpdGxlOnNtYWxsKCfnnJ/nmoTllaXkuZ/kuI3kvJrkuoYs6L+Y5oeS5b6X5LiA5Liq5Liq54K5PycpK2NvbG9yKCfkuI3nn6XpgZMs5p2l5LiA5Lu96YGT6ZW/55qEJywnIzVGQjg3OCcpLFxcXFxcXFxcbiAgICBkZXNjOifoh6rliqjmi4nlj5bpgZPplb/lnKjnlKjnmoTkuIrov7DmiYDmnInmlofku7ZcXFxcXFxcXFxcXFxcXFxcbuS4gOmUruaQnuWujOebtOaOpeWOu+aUr+aMgeaWreaPkueahOWwj+eoi+W6j+eci+inhumikeWwseihjOWVpicsXFxcXFxcXFxuICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcXFxcXFxcbiAgICB1cmw6JCgn5L+u5LuZ5rOV5Yqb5peg6L65Jywn56Gu6K6k5ZCXP+WmguaenOS9oOS4jeaYr+Wwj+eZve+8jOaAu+ivpeS8muaPkOWJjeWkh+S7veiHquW3seeahOS4iui/sOaJgOacieaWh+S7tuWQpyFcXFxcXFxcXFxcXFxcXFxcbuivt+i+k+WFpemBk+mVv+S/ruS7meazleWKm+aXoOi+ueadpeehruiupOaJp+ihjOatpOaTjeS9nCcpLmlucHV0KChjamNhY2hlLHg1Y2FjaGUsdGhlbWVSb3V0ZSxvbGRSb3V0ZSxuZXdSb3V0ZSxqeHNSb3V0ZSx0aGVtZU9ubGluZSxvbGRPbmxpbmUsbmV3T25saW5lLGp4T25saW5lLGRtUGF0aCxkbU9ubGluZSk9PntcXFxcXFxcXG4gICAgICAgIGlmKGlucHV0IT09J+mBk+mVv+S/ruS7meazleWKm+aXoOi+uScpe1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnKzmrKHlj5bmtojmiafooYwnXFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICBsZXQgdGhlbWVDb2RlID0gZmV0Y2godGhlbWVPbmxpbmUpO1xcXFxcXFxcbiAgICAgICAgaWYoIS9ub3dfdGhlbWUvLnRlc3QodGhlbWVDb2RlKSl7XFxcXFxcXFxuICAgICAgICAgICAgbG9nKCd0aGVtZUNvZGU6Jyt0aGVtZUNvZGUpO1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mi4nkuLvpopjlpLHotKUh5LiO6YGT6ZW/5pyN5Yqh5Zmo6YCa6K6v6ZSZ6K+vLOS8sOiuoeaYr+e9kee7nOWNoeS6hidcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgIGxldCBjakZyb20gPSBcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmpzP3J1bGU9TXlGaWVsZOG0sOKBv1xcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxuICAgICAgICBsZXQgeDVGcm9tID0gXFxcXFxcXFxcXFxcXFxcImhpa2VyOi8vcGFnZS9QYXJzZV9Ebi5odG1sP3J1bGU9TXlGaWVsZOG0sOKBv1xcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxuICAgICAgICBsZXQgY2pGaWxlID0gSlNPTi5wYXJzZShmZXRjaChjakZyb20pKS5ydWxlO1xcXFxcXFxcbiAgICAgICAgbGV0IHg1RmlsZSA9IEpTT04ucGFyc2UoZmV0Y2goeDVGcm9tKSkucnVsZTtcXFxcXFxcXG4gICAgICAgIGxldCBvbGRDb2RlID0gZmV0Y2gob2xkT25saW5lKTtcXFxcXFxcXG4gICAgICAgIGxldCBuZXdDb2RlID0gZmV0Y2gobmV3T25saW5lKTtcXFxcXFxcXG4gICAgICAgIGxldCBkbUNvZGUgPSBmZXRjaChkbU9ubGluZSk7XFxcXFxcXFxuICAgICAgICBpZighL1BhcnNlX0RuXFxcXFxcXFxcXFxcXFxcXC5qcy8udGVzdChvbGRDb2RlKXx8IS9QYXJzZV9EblxcXFxcXFxcXFxcXFxcXFwuanMvLnRlc3QobmV3Q29kZSkpe1xcXFxcXFxcbiAgICAgICAgICAgIC8vIGxvZygnb2xkQ29kZTonK29sZENvZGUpO1xcXFxcXFxcbiAgICAgICAgICAgIC8vIGxvZygnbmV3Q29kZTonK25ld0NvZGUpO1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lpLHotKUh5LiO6YGT6ZW/5pyN5Yqh5Zmo6YCa6K6v6ZSZ6K+vLOS8sOiuoeaYr+e9kee7nOWNoeS6hidcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgIGxldCBqeENvZGUgPSBmZXRjaChqeE9ubGluZSk7XFxcXFxcXFxuICAgICAgICBpZighL2ppZXhpcy8udGVzdChqeENvZGUpKXtcXFxcXFxcXG4gICAgICAgICAgICAvLyBsb2coJ2p4Q29kZTonK2p4Q29kZSk7XFxcXFxcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+Wksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgdHJ5IHtcXFxcXFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUoY2pjYWNoZSwgY2pGaWxlKTsgLy8g5ouJ5o+S5Lu2XFxcXFxcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKHg1Y2FjaGUsIHg1RmlsZSk7IC8v5ouJ572R6aG15paH5Lu2XFxcXFxcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsIHRoZW1lQ29kZSk7IC8v5ouJ5Li76aKY5paH5Lu2XFxcXFxcXFxuICAgICAgICAgICAgY2xlYXJWYXIoXFxcXFxcXFxcXFxcXFxcImp4T2xkVlxcXFxcXFxcXFxcXFxcXCIpO1xcXFxcXFxcbiAgICAgICAgICAgIGNsZWFyVmFyKFxcXFxcXFxcXFxcXFxcXCJqeE5ld1ZcXFxcXFxcXFxcXFxcXFwiKTtcXFxcXFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUob2xkUm91dGUsIG9sZENvZGUpOyAvL+aLieaWreaPkum7mOiupOmAieaLqeeVjOmdoueahOmFjee9rlxcXFxcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZShuZXdSb3V0ZSwgbmV3Q29kZSk7IC8v5ouJ5pat5o+S5YaF55qE6Kej5p6QXFxcXFxcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLCBqeENvZGUpOyAvLyDmi4noh6rliqjmoaPmlofku7ZcXFxcXFxcXG4gICAgICAgICAgICBpZihkbUNvZGUmJi9tcDR8bTN1OC8udGVzdChkbUNvZGUpKSB7Ly/pqozor4HlkIrmr5vmlofku7blkIjms5XmgKdcXFxcXFxcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGRtUGF0aCwgZG1Db2RlKTsgLy8g5ouJ5ZCK5q+b6L+H5ruk5paH5Lu2XFxcXFxcXFxuICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgIGJhY2sodHJ1ZSk7XFxcXFxcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aWreaPkuino+aekOmFjee9ruWPium7mOiupOWIl+ihqOW3sue7j+mFjee9ruaIkOWKnydcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgICAgIGNhdGNoKGUpe1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kuIDplK7mqKHlvI/lupTnlKjlpLHotKVcXFxcXFxcXFxcXFxcXFxcbuacquacn+acm+eahOmUmeivrzonK2UubWVzc2FnZTtcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgfSxjamNhY2hlLHg1Y2FjaGUsdGhlbWVSb3V0ZSxvbGRSb3V0ZSxuZXdSb3V0ZSxqeHNSb3V0ZSx0aGVtZU9ubGluZSxvbGRPbmxpbmUsbmV3T25saW5lLGp4T25saW5lLGRtUGF0aCxkbU9ubGluZSlcXFxcXFxcXG59KTtcXFxcXFxcXG5sZXQgZGVzY0luZm8gPSAn5Li76aKY5paH5Lu2OicrdGhlbWVSb3V0ZSsnXFxcXFxcXFxcXFxcXFxcXG7kuLvnlYzpnaLphY3nva46JytvbGRSb3V0ZSsnXFxcXFxcXFxcXFxcXFxcXG7lq5bliLDnmoTop6PmnpA6JytuZXdSb3V0ZSsnXFxcXFxcXFxcXFxcXFxcXG7oh6rliqjmoaPop6PmnpA6JytqeHNSb3V0ZTtcXFxcXFxcXG5kZXNjSW5mbys9J1xcXFxcXFxcXFxcXFxcXFxu5Li75o+S5Lu2OicrY2pjYWNoZSsnXFxcXFxcXFxcXFxcXFxcXG7kuLvphY3nva7pgInmi6nnlYzpnaLmlofku7Y6Jyt4NWNhY2hlKydcXFxcXFxcXFxcXFxcXFxcbuWQiuavm+i/h+a7pOaWh+S7tjonK2RtUGF0aDtcXFxcXFxcXG5kLnB1c2goe1xcXFxcXFxcbiAgICB0aXRsZTon5paH5Lu25o+P6L+wOlxcXFxcXFxcXFxcXFxcXFxuJytkZXNjSW5mbyxcXFxcXFxcXG4gICAgY29sX3R5cGU6J2xvbmdfdGV4dCcsXFxcXFxcXFxuICAgIGV4dHJhOnt0ZXh0U2l6ZTogMTMsbGluZVZpc2libGU6ZmFsc2V9XFxcXFxcXFxufSk7XFxcXFxcXFxuc2V0UmVzdWx0KGQpO1xcXFxcXFwifSx7XFxcXFxcXCJjb2xfdHlwZVxcXFxcXFwiOlxcXFxcXFwibW92aWVfM1xcXFxcXFwiLFxcXFxcXFwibmFtZVxcXFxcXFwiOlxcXFxcXFwi6Kej5p6Q5rWL6K+VXFxcXFxcXCIsXFxcXFxcXCJwYXRoXFxcXFxcXCI6XFxcXFxcXCJqeFRlc3RcXFxcXFxcIixcXFxcXFxcInJ1bGVcXFxcXFxcIjpcXFxcXFxcImpzOlxcXFxcXFxcbiAgICB2YXIgaXRlbXMgPSBbXTtcXFxcXFxcXG52YXIganNvbiA9IFt7XFxcXFxcXFxuICAgIHRpdGxlOiAn54ix5aWH6Im6JyxcXFxcXFxcXG4gICAgdXJsOiAnaHR0cDovL3d3dy5pcWl5aS5jb20vdl8yZ2E4enRzODZ5cy5odG1sJyxcXFxcXFxcXG4gICAgcGljX3VybDogJ2h0dHBzOi8vYW5kcm9pZC1hcnR3b3Jrcy4yNXBwLmNvbS9mczA4LzIwMjEvMDkvMDkvOC8xMTBfOTAxZjJlZjM3YWYyZmVhMjVlNWQ5NjQ4ZjU1MWNlMzFfY29uXzEzMHgxMzAucG5nJyxcXFxcXFxcXG59LCB7XFxcXFxcXFxuICAgIHRpdGxlOiAn5LyY6YW3JyxcXFxcXFxcXG4gICAgcGljX3VybDogJ2h0dHBzOi8vYW5kcm9pZC1hcnR3b3Jrcy4yNXBwLmNvbS9mczA4LzIwMjEvMDkvMTYvOS8xMTBfOGZmMDZlMGMyMzc3NjBjZDU3ZDI1MDhmZDk4Yzg0MTRfY29uXzEzMHgxMzAucG5nJyxcXFxcXFxcXG4gICAgdXJsOiAnaHR0cHM6Ly92LnlvdWt1LmNvbS92X3Nob3cvaWRfWE5EYzBNREUxTlRrMU1nPT0uaHRtbCdcXFxcXFxcXG59LCB7XFxcXFxcXFxuICAgIHRpdGxlOiAn6IW+6K6v6KeG6aKRJyxcXFxcXFxcXG4gICAgcGljX3VybDogJ2h0dHBzOi8vYW5kcm9pZC1hcnR3b3Jrcy4yNXBwLmNvbS9mczA4LzIwMjEvMDkvMTUvMy8xMDZfM2EwZDIxMmUxN2NiOTVlMjMyZmZlMTU1NDYwMzg1Y2JfY29uXzEzMHgxMzAucG5nJyxcXFxcXFxcXG4gICAgdXJsOiAnaHR0cHM6Ly92LnFxLmNvbS94L2NvdmVyL216YzAwMjAwcm1wYWY0MC9uMDAzNmw0dG50Yy5odG1sJ1xcXFxcXFxcbn0sIHtcXFxcXFxcXG4gICAgdGl0bGU6ICdQUFRW6KeG6aKRJyxcXFxcXFxcXG4gICAgcGljX3VybDogJ2h0dHBzOi8vYW5kcm9pZC1hcnR3b3Jrcy4yNXBwLmNvbS9mczA4LzIwMjEvMDkvMjgvNS8xMTBfYTQ1NWIyOTUxMjI3MDQwZWU2Mjk1NWVkY2ZiODlkNzJfY29uXzEzMHgxMzAucG5nJyxcXFxcXFxcXG4gICAgdXJsOiAnaHR0cHM6Ly92LnBwdHYuY29tL3Nob3cvelZuM2RKWHQxeFY0OWw0Lmh0bWwnXFxcXFxcXFxufSwge1xcXFxcXFxcbiAgICB0aXRsZTogJ+iKkuaenFRWJyxcXFxcXFxcXG4gICAgcGljX3VybDogJ2h0dHBzOi8vYW5kcm9pZC1hcnR3b3Jrcy4yNXBwLmNvbS9mczA4LzIwMjEvMDkvMTUvNi8xMTBfMTgzNGQyOTZhYTViNTY2NmE3ZDk0YjFlMzQ3OWFlNjRfY29uXzEzMHgxMzAucG5nJyxcXFxcXFxcXG4gICAgdXJsOiAnaHR0cDovL3d3dy5tZ3R2LmNvbS9iLzM0OTI1My8xMDQyNDMwMC5odG1sJ1xcXFxcXFxcbn0se1xcXFxcXFxcbiAgICB0aXRsZTogJ+WSquWSlScsXFxcXFxcXFxuICAgIHBpY191cmw6ICdodHRwczovL2FuZHJvaWQtYXJ0d29ya3MuMjVwcC5jb20vZnMwOC8yMDIxLzA5LzEzLzEvMTEwXzBlNmJkZWU0MmIwODMwNGQxNThkMjgwYjQ5NDUyYmMzX2Nvbl8xMzB4MTMwLnBuZycsXFxcXFxcXFxuICAgIHVybDogJ2h0dHBzOi8vbS5taWd1dmlkZW8uY29tL21ncy9tc2l0ZS9wcmQvZGV0YWlsLmh0bWw/Y2lkPTY1NTgzODA0NCZtZ2RiaWQ9JmNoYW5uZWxJZD1DQUFBQjAwMDkwMjAxNTUwMDAwMDAwMCdcXFxcXFxcXG59LHtcXFxcXFxcXG4gICAgdGl0bGU6ICflk5Tlk6nlk5Tlk6knLFxcXFxcXFxcbiAgICBwaWNfdXJsOiAnaHR0cHM6Ly9hbmRyb2lkLWFydHdvcmtzLjI1cHAuY29tL2ZzMDgvMjAyMS8wOS8yNy80LzExMF84ZTJlM2Q4OGM0NTAyNWIzODBlNjk4MTdkNmZiNTNiMV9jb25fMTMweDEzMC5wbmcnLFxcXFxcXFxcbiAgICB1cmw6ICdodHRwczovL20uYmlsaWJpbGkuY29tL2Jhbmd1bWkvcGxheS9lcDQyODk5MydcXFxcXFxcXG59LHtcXFxcXFxcXG4gICAgdGl0bGU6ICfmkJzni5Dop4bpopEnLFxcXFxcXFxcbiAgICBwaWNfdXJsOiAnaHR0cHM6Ly9hbmRyb2lkLWFydHdvcmtzLjI1cHAuY29tL2ZzMDgvMjAyMS8wOS8xNS85LzExMF81MzJhNTFmODQzMWVmYzM3NzgwOGMxZmZmZjJkYTM2Zl9jb25fMTMweDEzMC5wbmcnLFxcXFxcXFxcbiAgICB1cmw6ICdodHRwczovL20udHYuc29odS5jb20vdjczMjk0NDEuc2h0bWwnXFxcXFxcXFxufSx7XFxcXFxcXFxuICAgIHRpdGxlOiAn5LmQ6KeGJyxcXFxcXFxcXG4gICAgcGljX3VybDogJ2h0dHBzOi8vYW5kcm9pZC1hcnR3b3Jrcy4yNXBwLmNvbS9mczA4LzIwMjEvMDkvMTUvOC8yXzM1YjVkNDM3M2Y0YmNiYTI4ZjM5NDg2ZTRmMTE2NGQ5X2Nvbl8xMzB4MTMwLnBuZycsXFxcXFxcXFxuICAgIHVybDogJ2h0dHBzOi8vbS5sZS5jb20vdnBsYXlfNzY5NTQzMzMuaHRtbD9mcm9tPWFqYXgnXFxcXFxcXFxufSx7XFxcXFxcXFxuICAgIHRpdGxlOiAnMTkwNeeUteW9see9kScsXFxcXFxcXFxuICAgIHBpY191cmw6ICdodHRwczovL2FuZHJvaWQtYXJ0d29ya3MuMjVwcC5jb20vZnMwOC8yMDIxLzA5LzE4LzQvMTEwXzVmMjRiMTA1MmZlZDRmN2ZjNzM1OTNhOGVmMjcyNzZkX2Nvbl8xMzB4MTMwLnBuZycsXFxcXFxcXFxuICAgIHVybDogJ2h0dHBzOi8vdmlwLjE5MDUuY29tL20vcGxheS8xNDI5NzI1LnNodG1sJ1xcXFxcXFxcbn0se1xcXFxcXFxcbiAgICB0aXRsZTogJ+mjjuihjOinhumikScsXFxcXFxcXFxuICAgIHBpY191cmw6ICdodHRwczovL2FuZHJvaWQtYXJ0d29ya3MuMjVwcC5jb20vZnMwOC8yMDIxLzA5LzE2LzQvMTEwXzZmNmFmOWY5OWIyNjI5ZTUxZjBiMGEzM2NkZmYxZDllX2Nvbl8xMzB4MTMwLnBuZycsXFxcXFxcXFxuICAgIHVybDogJ2h0dHA6Ly9tLmZ1bi50di9tcGxheS8/bWlkPTk1NzE5J1xcXFxcXFxcbn0se1xcXFxcXFxcbiAgICB0aXRsZTogJ+ilv+eTnOinhumikScsXFxcXFxcXFxuICAgIHBpY191cmw6ICdodHRwczovL2FuZHJvaWQtYXJ0d29ya3MuMjVwcC5jb20vZnMwOC8yMDIxLzA5LzI3LzUvMTEwX2E4NjI2NTg4MmVkMThjNjE5MDU2NmU5ZWEyNWY5Njk4X2Nvbl8xMzB4MTMwLnBuZycsXFxcXFxcXFxuICAgIHVybDogJ2h0dHBzOi8vd3d3Lml4aWd1YS5jb20vNjY5OTM1Njc5MjkwNTc5NDA1NSdcXFxcXFxcXG59XTtcXFxcXFxcXG52YXIgcXBzID0gW1xcXFxcXFxcbiAgICB7dGl0bGU6J+m+meiFvicsIHVybDonTFQtMWVjM2Y2NzU0ZjY4NTg2ZWQ3ZjkyYzNlOTk1Y2ZjYTYnLHBpY191cmw6ICdodHRwczovL2xhbm1laWd1b2ppYW5nLmNvbS90dWJpYW8va2UvNC5wbmcnfSxcXFxcXFxcXG4gICAge3RpdGxlOiAn5Lq65Lq66L+3JywgdXJsOidyZW5yZW5taS1hYjkyNGUxMWQyZDY5Mzk3JyxwaWNfdXJsOidodHRwczovL2xhbm1laWd1b2ppYW5nLmNvbS90dWJpYW8va2UvNi5wbmcnfSxcXFxcXFxcXG4gICAge3RpdGxlOiAn5LqU5q+SJywgdXJsOid3dWR1eXVuLTE2NDk0MzEzMDcwMjEnLHBpY191cmw6ICdodHRwczovL2xhbm1laWd1b2ppYW5nLmNvbS90dWJpYW8va2UvMzAucG5nJ30sXFxcXFxcXFxuICAgIHt0aXRsZTogJ+WkmuWkmicsIHVybDonaHR0cHM6Ly9tM3U4LmNhY2hlLnN1b3lvLmNjL20zdTgvMjAyMjAzLzgvYWFhYmQ5MmRhMjY3NzRjNjg4NTBhMDIzMTUzYzgwZjFhZTZmYTliZS5tM3U4JyxwaWNfdXJsOiAnaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL2tlLzQ5LnBuZyd9LFxcXFxcXFxcbiAgICB7dGl0bGU6ICfono3lhbQnLCB1cmw6ICdSb25nWGluZ1ZSLTQyMTU2NDU1ODE5MzInLHBpY191cmw6J2h0dHBzOi8vbGFubWVpZ3VvamlhbmcuY29tL3R1Ymlhby9rZS84MC5wbmcnfSxcXFxcXFxcXG4gICAge3RpdGxlOiAn6Zuq5Lq6JywgdXJsOiAneHVlcmVuLTE2NDY4MjMwNzInLHBpY191cmw6J2h0dHBzOi8vbGFubWVpZ3VvamlhbmcuY29tL3R1Ymlhby9xLzEzMy5wbmcnfSxcXFxcXFxcXG4gICAge3RpdGxlOiAn5peL6aOO5LqRJywgdXJsOid4ZnktNTI5ZTY0NTc5NTNkNTQ1ZicscGljX3VybDogJ2h0dHBzOi8vbGFubWVpZ3VvamlhbmcuY29tL3R1Ymlhby9rZS81NC5wbmcnfSxcXFxcXFxcXG4gICAge3RpdGxlOiAn55Ge5Liw6LWE5rqQJyx1cmw6ICdodHRwczovLzEucnVpZmVuZ2xiLmNvbS9wbGF5LzE2NDQ5MTQ1OTUubTN1OCcscGljX3VybDogJ2h0dHBzOi8vbGFubWVpZ3VvamlhbmcuY29tL3R1Ymlhby9rZS83Mi5wbmcnfVxcXFxcXFxcbl07XFxcXFxcXFxuY29uc3Qge2NvbG9yLCBzbWFsbH0gPSAkLnJlcXVpcmUoXFxcXFxcXFxcXFxcXFxcImhpa2VyOi8vcGFnZS91dGlsaXk/cnVsZT3pgZPplb/ku5PlupNQcm9cXFxcXFxcXFxcXFxcXFwiKTtcXFxcXFxcXG5jb25zdCBsc2c9JC5yZXF1aXJlKFxcXFxcXFxcXFxcXFxcXCJoaWtlcjovL3BhZ2UvbG9jYWxTdG9yYWdlP3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcXFxcXFxcXFxcXFxcIik7XFxcXFxcXFxudmFyIHRpbWVvdXQgPSBwYXJzZUludChsc2cuZ2V0SXRlbSgndGltZW91dCcsJzUwMDAnKSk7Ly/otoXml7ZcXFxcXFxcXG52YXIgbm93UGFyc2UgPSBnZXRJdGVtKCdQYXJzZScsJycpOy8vZ2V0SXRlbeeahOaTjeS9nOWNg+S4h+S4jeimgeWKoOWFpeW+queOryzlvZPliY3pgInmi6nnmoTop6PmnpBcXFxcXFxcXG52YXIgZHhfbW9kZSA9IGdldEl0ZW0oJ+eCuemAiScsJ+WNlea1iycpOy8v54K56YCJ5qih5byPXFxcXFxcXFxudmFyIHFwX3Rlc3QgPSBnZXRJdGVtKCfliIfniYcnLCcwJyk7Ly/mmL7npLrliIfniYdcXFxcXFxcXG5pZihxcF90ZXN0PT09JzEnKXtcXFxcXFxcXG4gICAganNvbiA9IHFwcztcXFxcXFxcXG59ZWxzZSBpZihxcF90ZXN0PT09JzInKXtcXFxcXFxcXG4gICAganNvbiA9IGpzb24uY29uY2F0KHFwcyk7XFxcXFxcXFxufVxcXFxcXFxcbml0ZW1zLnB1c2goe1xcXFxcXFxcbiAgICB0aXRsZTogY29sb3IoJ+mtlOaWreino+aekOa1i+ivlScsJyMwQzAwMDAnKSxcXFxcXFxcXG4gICAgZGVzYzon5Y2V5o6l5Y+j5aSa57G75q2j54mIfOWNleato+eJiOWkmuaOpeWPoyDmtYvor5UgJysn8J+VkicrdGltZW91dCxcXFxcXFxcXG4gICAgdXJsOiAkKHRpbWVvdXQsJ+ivt+i+k+WFpeino+aekOi2heaXtuavq+enkicpLmlucHV0KCgpPT57XFxcXFxcXFxuICAgICAgICBpZighcGFyc2VJbnQoaW5wdXQpKXtcXFxcXFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6LaF5pe26K6+572u6ZSZ6K+v77yM5ouS57ud5L+d5a2YJ1xcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgY29uc3QgbHNnPSQucmVxdWlyZShcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2xvY2FsU3RvcmFnZT9ydWxlPemBk+mVv+S7k+W6k1Byb1xcXFxcXFxcXFxcXFxcXCIpO1xcXFxcXFxcbiAgICAgICAgbHNnLnNldEl0ZW0oJ3RpbWVvdXQnLGlucHV0fHwnNTAwMCcpO1xcXFxcXFxcbiAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxcXFxcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suiuvue9ruino+aekOi2heaXtuavq+enkjonK2lucHV0fHwnNTAwMCc7XFxcXFxcXFxuICAgIH0pLFxcXFxcXFxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcXFxcXFxcbiAgICBleHRyYTp7XFxcXFxcXFxuICAgICAgICBsaW5lVmlzaWJsZTpmYWxzZVxcXFxcXFxcbiAgICB9XFxcXFxcXFxufSk7XFxcXFxcXFxuaXRlbXMucHVzaCh7XFxcXFxcXFxuICAgIHRpdGxlOifkvb/nlKjor7TmmI4nLFxcXFxcXFxcbiAgICBjb2xfdHlwZTondGV4dF9jZW50ZXJfMScsXFxcXFxcXFxuICAgIHVybDokKCdoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSMjbm9IaXN0b3J5IycpLnJ1bGUoKGNvbG9yKT0+e1xcXFxcXFxcbiAgICAgICAgbGV0IGQ9W107XFxcXFxcXFxuICAgICAgICBkLnB1c2goe1xcXFxcXFxcbiAgICAgICAgICAgIHRpdGxlOmNvbG9yKCfnm7jkv6Hoh6rlt7HvvIzkvaDkuI3pnIDopoHor7TmmI4nLCdncmV5JyksXFxcXFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMScsXFxcXFxcXFxuICAgICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5JyxcXFxcXFxcXG4gICAgICAgICAgICBleHRyYTp7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOmZhbHNlXFxcXFxcXFxuICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICBsZXQgbm90ZT0n5oOz5oiR5YaZ5pWZ56iL77yf5rKh6Zeo77yBJztcXFxcXFxcXG4gICAgICAgIGQucHVzaCh7XFxcXFxcXFxuICAgICAgICAgICAgdGl0bGU6bm90ZSxcXFxcXFxcXG4gICAgICAgICAgICBjb2xfdHlwZToncmljaF90ZXh0J1xcXFxcXFxcbiAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxcXFxcXFxuICAgIH0sY29sb3IpLFxcXFxcXFxcbiAgICBleHRyYTp7XFxcXFxcXFxuICAgICAgICBsaW5lVmlzaWJsZTp0cnVlXFxcXFxcXFxuICAgIH1cXFxcXFxcXG59KTtcXFxcXFxcXG5pdGVtcy5wdXNoKHtcXFxcXFxcXG4gICAgY29sX3R5cGU6XFxcXFxcXFxcXFxcXFxcImJsYW5rX2Jsb2NrXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG59KTtcXFxcXFxcXG5pdGVtcy5wdXNoKHtcXFxcXFxcXG4gICAgdGl0bGU6Y29sb3IoJ/Cfj6DvuI/kuLvnqIvluo8nLCcjZmYwMDAwJyksXFxcXFxcXFxuICAgIHVybDogXFxcXFxcXFxcXFxcXFxcImhpa2VyOi8vaG9tZUBNeUZpZWxk4bSw4oG/XFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcXFxcXFxcbn0pO1xcXFxcXFxcbml0ZW1zLnB1c2goe1xcXFxcXFxcbiAgICB0aXRsZTpjb2xvcign8J+OqOe6v+i3r+mFjee9ricsJyNmYThjMzUnKSxcXFxcXFxcXG4gICAgdXJsOiBcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPeiuvue9riNub0hpc3RvcnkjXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcXFxcXFxcbn0pO1xcXFxcXFxcbml0ZW1zLnB1c2goe1xcXFxcXFxcbiAgICB0aXRsZTpjb2xvcign8J+Or+ino+aekOeuoeeQhicsJyMzZWVkZTcnKSxcXFxcXFxcXG4gICAgdXJsOiBcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPee8lui+kSNub0hpc3RvcnkjXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcXFxcXFxcbn0pO1xcXFxcXFxcbml0ZW1zLnB1c2goe1xcXFxcXFxcbiAgICB0aXRsZTpjb2xvcign4pii77iP5om56YeP5Yig6ZmkJywnIzgwMWRhZScpLFxcXFxcXFxcbiAgICB1cmw6IGdldFBhdGgoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvcGxzY1BhcnNlLmh0bWwnKSxcXFxcXFxcXG4gICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcXFxcXFxcbn0pO1xcXFxcXFxcbml0ZW1zLnB1c2goe1xcXFxcXFxcbiAgICB0aXRsZTpjb2xvcign8J+UoOWkh+iDjueuoeeQhicsJyMwZWI4M2EnKSxcXFxcXFxcXG4gICAgdXJsOiBcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPeino+aekCNub1JlY29yZEhpc3RvcnkjXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcXFxcXFxcbn0pO1xcXFxcXFxcbmxldCBxcF90aXRsZSA9ICfwn5K/5YiH54mH5rWL6K+VJztcXFxcXFxcXG5pZihxcF90ZXN0PT09JzEnKXtcXFxcXFxcXG4gICAgcXBfdGl0bGUgPSAgY29sb3IocXBfdGl0bGUsJyM2YmM4ZDAnKVxcXFxcXFxcbn1lbHNlIGlmKHFwX3Rlc3Q9PT0nMicpe1xcXFxcXFxcbiAgICBxcF90aXRsZSA9ICBjb2xvcihxcF90aXRsZSwnIzZiYTZkMCcpXFxcXFxcXFxufVxcXFxcXFxcbml0ZW1zLnB1c2goe1xcXFxcXFxcbiAgICB0aXRsZTpxcF90aXRsZSxcXFxcXFxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChjb2xvcik9PntcXFxcXFxcXG4gICAgICAgIGxldCBtb2RlcyA9IFsnMCcsJzEnLCcyJ107XFxcXFxcXFxuICAgICAgICBsZXQgcXBfdGVzdCA9IGdldEl0ZW0oJ+WIh+eJhycsJzAnKTtcXFxcXFxcXG4gICAgICAgIGxldCBpZGV4ID0gbW9kZXMuaW5kZXhPZihxcF90ZXN0KTtcXFxcXFxcXG4gICAgICAgIGxldCBuZXh0SWRleCA9IGlkZXggPCBtb2Rlcy5sZW5ndGggLTE/aWRleCsxOjA7XFxcXFxcXFxuICAgICAgICBxcF90ZXN0PW1vZGVzW25leHRJZGV4XTtcXFxcXFxcXG4gICAgICAgIHNldEl0ZW0oJ+WIh+eJhycscXBfdGVzdCk7XFxcXFxcXFxuICAgICAgICAvLyB1cGRhdGVJdGVtKCdxcF90ZXN0Jyx7XFxcXFxcXFxuICAgICAgICAvLyAgICAgdGl0bGU6cXBfdGVzdD09PScxJz9jb2xvcign8J+Sv+WIh+eJh+a1i+ivlScsJyM2YmM4ZDAnKTon8J+Sv+WIh+eJh+a1i+ivlSdcXFxcXFxcXG4gICAgICAgIC8vIH0pO1xcXFxcXFxcbiAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxcXFxcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxcXFxcbiAgICB9LGNvbG9yKSxcXFxcXFxcXG4gICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXFxcXFxcXG4gICAgZXh0cmE6e1xcXFxcXFxcbiAgICAgICAgaWQ6J3FwX3Rlc3QnXFxcXFxcXFxuICAgIH1cXFxcXFxcXG59KTtcXFxcXFxcXG5pdGVtcy5wdXNoKHtcXFxcXFxcXG4gICAgdGl0bGU6J+KameeCuemAieaooeW8jzonK2R4X21vZGUsXFxcXFxcXFxuICAgIGNvbF90eXBlOid0ZXh0XzInLFxcXFxcXFxcbiAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKT0+e1xcXFxcXFxcbiAgICAgICAgbGV0IGR4X21vZGUgPSBnZXRJdGVtKCfngrnpgIknLCfljZXmtYsnKTtcXFxcXFxcXG4gICAgICAgIGR4X21vZGU9KGR4X21vZGU9PT0n5Y2V5rWLJz8n5aSa5rWLJzon5Y2V5rWLJyk7XFxcXFxcXFxuICAgICAgICBzZXRJdGVtKCfngrnpgIknLGR4X21vZGUpO1xcXFxcXFxcbiAgICAgICAgdXBkYXRlSXRlbSgnZHhfbW9kZScse1xcXFxcXFxcbiAgICAgICAgICAgIHRpdGxlOifimpnngrnpgInmqKHlvI86JytkeF9tb2RlXFxcXFxcXFxuICAgICAgICB9KTtcXFxcXFxcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXFxcXFxcXG4gICAgfSksXFxcXFxcXFxuICAgIGV4dHJhOntcXFxcXFxcXG4gICAgICAgIGlkOidkeF9tb2RlJ1xcXFxcXFxcbiAgICB9XFxcXFxcXFxufSk7XFxcXFxcXFxubGV0IGR4X3Rlc3QgPSAn4p2k77iP6Kej5p6Q5aSa6YCJ5rWL6K+VJztcXFxcXFxcXG5pdGVtcy5wdXNoKHtcXFxcXFxcXG4gICAgdGl0bGU6ZHhfdGVzdCxcXFxcXFxcXG4gICAgY29sX3R5cGU6J3RleHRfMicsXFxcXFxcXFxuICAgIHVybDokKCdoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSMjbm9IaXN0b3J5IycpLnJ1bGUoKGR4X3Rlc3QsY29sb3IpPT57XFxcXFxcXFxuICAgICAgICBzZXRQYWdlVGl0bGUoZHhfdGVzdCk7XFxcXFxcXFxuICAgICAgICBhZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCkgPT4ge1xcXFxcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTsvL+WIt+aWsOmtlOaWreS4u+mhtemdolxcXFxcXFxcbiAgICAgICAgfSkpO1xcXFxcXFxcbiAgICAgICAgZD1bXTtcXFxcXFxcXG4gICAgICAgICQucmVxdWlyZShcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2p4SXRlbT9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcXFxcXFxcXFwiKS5qeExpc3QoKTtcXFxcXFxcXG4gICAgICAgIGp4cz1kLmZpbHRlcihpdD0+aXQuY29sX3R5cGU9PT0ndGV4dF8yJykubWFwKGl0PT5wZGZoKGl0LnRpdGxlLCdmb250LC0xJiZUZXh0JykpO1xcXFxcXFxcbiAgICAgICAgbGV0IGRhdGEgPSBzdG9yYWdlMC5nZXRNeVZhcignanhfc2VsZWN0ZWQnKXx8W107XFxcXFxcXFxuICAgICAgICBsZXQgZHhfZmlsdGVyID0gZ2V0SXRlbSgnZHhfZmlsdGVyJywn5YWo6YOoJyk7XFxcXFxcXFxuICAgICAgICBpZihkeF9maWx0ZXIgPT09ICflt7LpgIknKXtcXFxcXFxcXG4gICAgICAgICAgICBqeHMgPSBqeHMuZmlsdGVyKGl0PT5kYXRhLmluY2x1ZGVzKGl0KSk7XFxcXFxcXFxuICAgICAgICB9ZWxzZSBpZihkeF9maWx0ZXI9PT0gJ+acqumAiScpe1xcXFxcXFxcbiAgICAgICAgICAgIGp4cyA9IGp4cy5maWx0ZXIoaXQ9PiFkYXRhLmluY2x1ZGVzKGl0KSk7XFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICBkPWp4cy5tYXAoKGl0KT0+e1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHRpdGxlOihBcnJheS5pc0FycmF5KGRhdGEpJiZkYXRhLmluY2x1ZGVzKGl0KSk/Y29sb3IoaXQsJyMxMmI2NjgnKTppdCxcXFxcXFxcXG4gICAgICAgICAgICAgICAgLy8gdXJsOid0b2FzdDovL+WKn+iDveW8gOWPkeS4rScsXFxcXFxcXFxuICAgICAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpdCxjb2xvcik9PntcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ2p4X3NlbGVjdGVkJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KGRhdGEpKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihkYXRhLmluY2x1ZGVzKGl0KSl7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygn5YyF5ZCrOicraXQpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnNwbGljZShkYXRhLmluZGV4T2YoaXQpLDEpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnB1c2goaXQpXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCdqeF9zZWxlY3RlZCcsIGRhdGEpXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcignanhfc2VsZWN0ZWQnLCBbaXRdKVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYoc3RvcmFnZTAuZ2V0TXlWYXIoJ2p4X3NlbGVjdGVkJykuaW5jbHVkZXMoaXQpKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKGl0LHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6Y29sb3IoaXQsJyMxMmI2NjgnKVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKGl0LHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6aXRcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxcXFxcbiAgICAgICAgICAgICAgICB9LGl0LGNvbG9yKSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMycsXFxcXFxcXFxuICAgICAgICAgICAgICAgIGV4dHJhOntcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGlkOml0XFxcXFxcXFxuICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICB9KTtcXFxcXFxcXG4gICAgICAgIGxldCBvcD1bXTtcXFxcXFxcXG4gICAgICAgIG9wLnB1c2goe1xcXFxcXFxcbiAgICAgICAgICAgIHRpdGxlOiflhajpgIknLFxcXFxcXFxcbiAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChqeHMsY29sb3IpPT57XFxcXFxcXFxuICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCdqeF9zZWxlY3RlZCcsIGp4cyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGp4cy5mb3JFYWNoKGl0PT57XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHt0aXRsZTogY29sb3IoaXQsJyMxMmI2NjgnKSwgZXh0cmE6IHtpZDogaXR9fSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXFxcXFxuICAgICAgICAgICAgfSxqeHMsY29sb3IpLFxcXFxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJ1xcXFxcXFxcbiAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICBvcC5wdXNoKHtcXFxcXFxcXG4gICAgICAgICAgICB0aXRsZTon5YWo5LiN6YCJJyxcXFxcXFxcXG4gICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoanhzKT0+e1xcXFxcXFxcbiAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcignanhfc2VsZWN0ZWQnLCBbXSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGp4cy5mb3JFYWNoKGl0PT57XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHt0aXRsZTogaXQsIGV4dHJhOiB7aWQ6IGl0fX0pO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxcXFxcbiAgICAgICAgICAgIH0sanhzKSxcXFxcXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbidcXFxcXFxcXG4gICAgICAgIH0pO1xcXFxcXFxcbiAgICAgICAgb3AucHVzaCh7XFxcXFxcXFxuICAgICAgICAgICAgdGl0bGU6J+WPjemAiScsXFxcXFxcXFxuICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGp4cyxjb2xvcik9PntcXFxcXFxcXG4gICAgICAgICAgICAgICAgbGV0IG9sZFNlbCA9IHN0b3JhZ2UwLmdldE15VmFyKCdqeF9zZWxlY3RlZCcsIFtdKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0RGlmZmVyZW50RGF0YShhcnJBLCBhcnJCKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyQS5jb25jYXQoYXJyQikuZmlsdGVyKGZ1bmN0aW9uICh2LCBpLCBhcnIpIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyLmluZGV4T2YodikgPT09IGFyci5sYXN0SW5kZXhPZih2KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxcXFxcbiAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgIGxldCBuZXdTZWwgPSBnZXREaWZmZXJlbnREYXRhKGp4cyxvbGRTZWwpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcignanhfc2VsZWN0ZWQnLCBuZXdTZWwpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBvbGRTZWwuZm9yRWFjaChpdD0+e1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh7dGl0bGU6IGl0LCBleHRyYToge2lkOiBpdH19KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIG5ld1NlbC5mb3JFYWNoKGl0PT57XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHt0aXRsZTogY29sb3IoaXQsJyMxMmI2NjgnKSwgZXh0cmE6IHtpZDogaXR9fSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXFxcXFxuICAgICAgICAgICAgfSxqeHMsY29sb3IpLFxcXFxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJ1xcXFxcXFxcbiAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICBvcC5wdXNoKHtcXFxcXFxcXG4gICAgICAgICAgICB0aXRsZTon5Yig6ZmkJyxcXFxcXFxcXG4gICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKT0+e1xcXFxcXFxcbiAgICAgICAgICAgICAgICBsZXQgc2VsID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ2p4X3NlbGVjdGVkJywgW10pO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBpZihzZWwubGVuZ3RoIDwgMSl7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ZWl6YO95rKh6YCJ77yM5Yig6Zmk5Liq6bih5q+bfidcXFxcXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJCgn56Gu6K6k5Yig6Zmk5bey6YCJ5oup55qEOicrc2VsWzBdKyfnrYknK3NlbC5sZW5ndGgrJ+adoeino+aekD8nKS5jb25maXJtKChzZWwpPT57XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IG5hbWUgaW4gc2VsKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5jb2Rlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUganNvbi5jb2Rlc1tuYW1lXTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBqc29uLnRpdGxlID0ganNvbi50aXRsZS5maWx0ZXIoaXQ9PiFzZWwuaW5jbHVkZXMoaXQpKTsgLy8g562b6YCJ5rKh5pyJ6KKr5Yig6Zmk55qE5qCH6aKYXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgJC5zdHJpbmdpZnkoanNvbikpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoJ2p4X3NlbGVjdGVkJywgW10pOy8v5Yig6Zmk5a6M5LqG5riF56m66YCJ5Lit6aG555uuXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXFxcXFxcXFxcInRvYXN0Oi8v5bey5bCG44CWXFxcXFxcXFxcXFxcXFxcIiArIHNlbFswXSArIFxcXFxcXFxcXFxcXFxcXCLjgJfnrYlcXFxcXFxcXFxcXFxcXFwiK3NlbC5sZW5ndGgrXFxcXFxcXFxcXFxcXFxcIuadoeino+aekOWIoOmZpFxcXFxcXFxcXFxcXFxcXCI7XFxcXFxcXFxuICAgICAgICAgICAgICAgIH0sc2VsKVxcXFxcXFxcbiAgICAgICAgICAgIH0pLFxcXFxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJ1xcXFxcXFxcbiAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICBvcC5wdXNoKHtcXFxcXFxcXG4gICAgICAgICAgICB0aXRsZTon5pON5L2cfOetm+mAiSAnK2NvbG9yKGp4cy5sZW5ndGgsJyNmZjcwMDAnKSxcXFxcXFxcXG4gICAgICAgICAgICB1cmw6J3RvYXN0Oi8v5YmN6Z2i5oyJ6ZKu5piv5pON5L2c77yM5ZCO6Z2i5oyJ6ZKu5piv562b6YCJJyxcXFxcXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbidcXFxcXFxcXG4gICAgICAgIH0pO1xcXFxcXFxcbiAgICAgICAgb3AucHVzaCh7XFxcXFxcXFxuICAgICAgICAgICAgdGl0bGU6ZHhfZmlsdGVyPT09J+WFqOmDqCc/Y29sb3IoJ+WFqOmDqCcsJyMxMmI2NjgnKTon5YWo6YOoJyxcXFxcXFxcXG4gICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKT0+e1xcXFxcXFxcbiAgICAgICAgICAgICAgICBzZXRJdGVtKCdkeF9maWx0ZXInLCflhajpg6gnKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXFxcXFxuICAgICAgICAgICAgfSksXFxcXFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nXFxcXFxcXFxuICAgICAgICB9KTtcXFxcXFxcXG4gICAgICAgIG9wLnB1c2goe1xcXFxcXFxcbiAgICAgICAgICAgIHRpdGxlOmR4X2ZpbHRlcj09PSflt7LpgIknP2NvbG9yKCflt7LpgIknLCcjMTJiNjY4Jyk6J+W3sumAiScsXFxcXFxcXFxuICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCk9PntcXFxcXFxcXG4gICAgICAgICAgICAgICAgc2V0SXRlbSgnZHhfZmlsdGVyJywn5bey6YCJJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxcXFxcbiAgICAgICAgICAgIH0pLFxcXFxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJ1xcXFxcXFxcbiAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICBvcC5wdXNoKHtcXFxcXFxcXG4gICAgICAgICAgICB0aXRsZTpkeF9maWx0ZXI9PT0n5pyq6YCJJz9jb2xvcign5pyq6YCJJywnIzEyYjY2OCcpOifmnKrpgIknLFxcXFxcXFxcbiAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpPT57XFxcXFxcXFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oJ2R4X2ZpbHRlcicsJ+acqumAiScpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXFxcXFxcXG4gICAgICAgICAgICB9KSxcXFxcXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbidcXFxcXFxcXG4gICAgICAgIH0pO1xcXFxcXFxcbiAgICAgICAgZD1vcC5jb25jYXQoZCk7XFxcXFxcXFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxcXFxcXFxuICAgIH0sZHhfdGVzdCxjb2xvcilcXFxcXFxcXG59KTtcXFxcXFxcXG5mdW5jdGlvbiBzb3J0QnlLZXkoYXJyYXksIGtleSwgb3JkZXIpIHsvL+WvueixoeaVsOe7hOaMieafkOS4qumUruWAvOaOkuW6j1xcXFxcXFxcbiAgICByZXR1cm4gYXJyYXkuc29ydChmdW5jdGlvbihhLCBiKSB7XFxcXFxcXFxuICAgICAgICB2YXIgeCA9IHBhcnNlSW50KGFba2V5XS5tYXRjaCgvKFxcXFxcXFxcXFxcXFxcXFxkKykvKVsxXSk7Ly/kv67lpI3lpKfkuo4xMOWHuumXrumimFxcXFxcXFxcbiAgICAgICAgdmFyIHkgPSBwYXJzZUludChiW2tleV0ubWF0Y2goLyhcXFxcXFxcXFxcXFxcXFxcZCspLylbMV0pO1xcXFxcXFxcbiAgICAgICAgaWYgKG9yZGVyKSB7XFxcXFxcXFxuICAgICAgICAgICAgcmV0dXJuICgoeCA8IHkpID8gLTEgOiAoKHggPiB5KSA/IDEgOiAwKSlcXFxcXFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXFxcXFxuICAgICAgICAgICAgcmV0dXJuICgoeCA8IHkpID8gKCh4ID4geSkgPyAxIDogMCkgOiAtMSlcXFxcXFxcXG4gICAgICAgIH1cXFxcXFxcXG4gICAgfSlcXFxcXFxcXG59XFxcXFxcXFxuaXRlbXMucHVzaCh7XFxcXFxcXFxuICAgIHRpdGxlOiAn8J+boOS4gOmUrua1i+ivleW3sumAieaOpeWPo++8micrbm93UGFyc2UsXFxcXFxcXFxuICAgIC8vdXJsOiAndG9hc3Q6Ly/ov5nmmK/mjqXlj6MnLFxcXFxcXFxcbiAgICB1cmw6JCgpLmxhenlSdWxlKChqc29uLG5vd1BhcnNlLHRpbWVvdXQsc29ydEJ5S2V5KT0+e1xcXFxcXFxcbiAgICAgICAgaWYoIWdldEl0ZW0oJ1BhcnNlJywnJykpe1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/pgb/lhY3otYTmupDmtarotLnvvIzor7flhYjlnKjkuIvmlrnpgInkuIDkuKrmjqXlj6Plho3ov5vooYzmtYvor5UnXFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgICAgICB2YXIgY291bnQgPSBqc29uLmxlbmd0aDsgLy/orr7nva7ku7vliqHmlbDph49cXFxcXFxcXG4gICAgICAgIGxvZygn6a2U5pat5byA5ZCv5aSa5Lu75Yqh6Kej5p6QLOS7u+WKoeaVsOmHjzonK2NvdW50KTtcXFxcXFxcXG4gICAgICAgIHZhciB0YXNrID0gZnVuY3Rpb24ob2JqKSB7XFxcXFxcXFxuICAgICAgICAgICAgZXZhbCgndmFyIGNvbmZpZ19kcCA9JyArIGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpKTtcXFxcXFxcXG4gICAgICAgICAgICBldmFsKGZldGNoKGNvbmZpZ19kcC5jaikpO1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2Uob2JqLnZpcFVybCxvYmoubmFtZSxvYmoudGltZW91dCk7XFxcXFxcXFxuICAgICAgICB9O1xcXFxcXFxcbiAgICAgICAgdmFyIHBhcnNlUmV0ID0gW107IC8v6Kej5p6Q57uT5p6c5YiX6KGoXFxcXFxcXFxuICAgICAgICBsZXQgdGFza3MgPSBqc29uLm1hcCgoaXQsaWRleCk9PntcXFxcXFxcXG4gICAgICAgICAgICByZXR1cm4ge1xcXFxcXFxcbiAgICAgICAgICAgICAgICBmdW5jOiB0YXNrLFxcXFxcXFxcbiAgICAgICAgICAgICAgICBwYXJhbToge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgLy9uYW1lOml0LnRpdGxlLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTpub3dQYXJzZSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6aXQudGl0bGUsXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAvLyBydWxlOml0LnJ1bGUsXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB2aXBVcmw6IGl0LnVybCxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRpbWVvdXRcXFxcXFxcXG4gICAgICAgICAgICAgICAgfSxcXFxcXFxcXG4gICAgICAgICAgICAgICAgaWQ6IFxcXFxcXFxcXFxcXFxcXCJ0YXNrXFxcXFxcXFxcXFxcXFxcIitpZGV4XFxcXFxcXFxuICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICBzaG93TG9hZGluZyhcXFxcXFxcXFxcXFxcXFwi6a2U5pat5bm25Y+R6Kej5p6Q5Lit77yM5Ymp5L2Z5b6F5rWLOlxcXFxcXFxcXFxcXFxcXCIrY291bnQpO1xcXFxcXFxcbiAgICAgICAgYmUodGFza3Mse1xcXFxcXFxcbiAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKG9iaiwgaWQsIGVycm9yLHJldCkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICBsb2coXFxcXFxcXFxcXFxcXFxcIuebkeWQrOWIsOS7u+WKoVxcXFxcXFxcXFxcXFxcXCIgKyBpZCsn5bey57uT5p2fLGVycm9yOicrZXJyb3IrJyxyZXQ6JytyZXQpO1xcXFxcXFxcbiAgICAgICAgICAgICAgICByZXQgPSByZXR8fCcnO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBlcnJvcj1lcnJvcnx8Jyc7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHBhcnNlUmV0LnB1c2goe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgdGFzazppZCxcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldDpyZXQsXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjplcnJvcixcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6dGFza3MuZmlsdGVyKGl0PT5pdC5pZD09PWlkKVswXS5wYXJhbS50eXBlXFxcXFxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBjb3VudCAtPSAxOyAvL+WujOaIkOS6huS7u+WKoe+8jOS7u+WKoeaVsOmHjy0xXFxcXFxcXFxuICAgICAgICAgICAgICAgIC8vbG9nKG9iaik7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHNob3dMb2FkaW5nKFxcXFxcXFxcXFxcXFxcXCLprZTmlq3lubblj5Hop6PmnpDkuK3vvIzliankvZnlvoXmtYs6XFxcXFxcXFxcXFxcXFxcIiArIGNvdW50KVxcXFxcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgaGlkZUxvYWRpbmcoKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgIH0sXFxcXFxcXFxuICAgICAgICAgICAgcGFyYW06IHsvL+S8oOWIsOebkeWQrOWHveaVsOeahG9iauWPguaVsOmHjFxcXFxcXFxcbiAgICAgICAgICAgICAgICBoaTogXFxcXFxcXFxcXFxcXFxcImNjY1xcXFxcXFxcXFxcXFxcXCIsXFxcXFxcXFxuICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgfSk7Ly/miafooYzlpJrku7vliqFcXFxcXFxcXG4gICAgICAgIC8vbG9nKFxcXFxcXFxcXFxcXFxcXCLlpJrku7vliqHmiafooYznu5PmnpzmlbA6XFxcXFxcXFxcXFxcXFxcIitwYXJzZVJldC5sZW5ndGgpO1xcXFxcXFxcbiAgICAgICAgcGFyc2VSZXQ9c29ydEJ5S2V5KHBhcnNlUmV0LCd0YXNrJyx0cnVlKTsvL+WNh+W6j+aOkuWIl1xcXFxcXFxcbiAgICAgICAgLy8gbG9nKHBhcnNlUmV0Lm1hcChpdD0+aXQudGFzaykpO1xcXFxcXFxcbiAgICAgICAgcmV0dXJuICQoJ2hpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjJykucnVsZSgocGFyc2VSZXQpPT57XFxcXFxcXFxuICAgICAgICAgICAgc2V0UGFnZVRpdGxlKGdldEl0ZW0oJ1BhcnNlJykrJ+ino+aekOaKpeWRiicpO1xcXFxcXFxcbiAgICAgICAgICAgIGNvbnN0IHtpc1ZpZGVvfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2dsb2JhbFBhcnNlP3J1bGU96YGT6ZW/5LuT5bqTUHJvJyk7XFxcXFxcXFxuICAgICAgICAgICAgY29uc3Qge2NvbG9yLCBzbWFsbH0gPSAkLnJlcXVpcmUoXFxcXFxcXFxcXFxcXFxcImhpa2VyOi8vcGFnZS91dGlsaXk/cnVsZT3pgZPplb/ku5PlupNQcm9cXFxcXFxcXFxcXFxcXFwiKTtcXFxcXFxcXG4gICAgICAgICAgICBsZXQgZD1bXTtcXFxcXFxcXG4gICAgICAgICAgICBsZXQgc2hvd19tb2RlID0gZ2V0SXRlbSgnc2hvd19tb2RlJywn6K+m57uGJyk7XFxcXFxcXFxuICAgICAgICAgICAgbGV0IGNvbF90eXBlID0gc2hvd19tb2RlPT09J+ivpue7hic/J3RleHRfMSc6J3RleHRfMyc7XFxcXFxcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6J+aYvuekuuaooeW8jzonK2NvbG9yKHNob3dfbW9kZSwnI2ZhOGMzNScpLFxcXFxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxcXFxcXFxuICAgICAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChjb2xvcixjbnQpPT57XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgc2hvd19tb2RlID0gZ2V0SXRlbSgnc2hvd19tb2RlJywn6K+m57uGJyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBzaG93X21vZGUgPSBzaG93X21vZGU9PT0n6K+m57uGJz8n57K+566AJzon6K+m57uGJztcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oJ3Nob3dfbW9kZScsc2hvd19tb2RlKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oJ3Nob3dfbW9kZScse1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOifmmL7npLrmqKHlvI86Jytjb2xvcihzaG93X21vZGUsJyNmYThjMzUnKVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgY29sX3R5cGUgPSBzaG93X21vZGU9PT0n6K+m57uGJz8ndGV4dF8xJzondGV4dF8zJztcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaT0wO2k8Y250O2krKyl7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbSgnc2hvd19yZXRfJytpLHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6Y29sX3R5cGVcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXFxcXFxcXG4gICAgICAgICAgICAgICAgfSxjb2xvcixwYXJzZVJldC5sZW5ndGgpLFxcXFxcXFxcbiAgICAgICAgICAgICAgICBleHRyYTp7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBpZDonc2hvd19tb2RlJ1xcXFxcXFxcbiAgICAgICAgICAgICAgICB9XFxcXFxcXFxuICAgICAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICAgICAgcGFyc2VSZXQuZm9yRWFjaCgoaXQsaWR4KT0+e1xcXFxcXFxcbiAgICAgICAgICAgICAgICBsZXQgdGl0bGU9aXQubmFtZTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgaWYoaXQucmV0JiYhaXQucmV0LmluY2x1ZGVzKCd1bmRlZmluZWQnKSYmKC8jaXNWaWRlbz10cnVlIy8udGVzdChpdC5yZXQpfHxpc1ZpZGVvKGl0LnJldCkpKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPWNvbG9yKHRpdGxlLCcjMTJiNjY4JylcXFxcXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICBsZXQgZGVzYz0oaXQucmV0fHxpdC5lcnJvcikuc3Vic3RyKDAsNjApO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6dGl0bGUsXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOnNtYWxsKGRlc2MpLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6Y29sX3R5cGUsXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6aXQucmV0LFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6e1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldDppdC5yZXR8fGl0LmVycm9yLFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOidzaG93X3JldF8nK2lkeFxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcXFxcXG4gICAgICAgICAgICB9KTtcXFxcXFxcXG4gICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxcXFxcXFxuICAgICAgICB9LHBhcnNlUmV0KVxcXFxcXFxcbiAgICB9LGpzb24sbm93UGFyc2UsdGltZW91dCxzb3J0QnlLZXkpLFxcXFxcXFxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcXFxcXFxcbiAgICBleHRyYTp7XFxcXFxcXFxuICAgICAgICBsaW5lVmlzaWJsZTpmYWxzZVxcXFxcXFxcbiAgICB9XFxcXFxcXFxufSk7XFxcXFxcXFxuLypcXFxcXFxcXG52YXIgcGFyc2VSb3V0ZSA9ICdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbic7XFxcXFxcXFxudmFyIE15UGFyc2VTID0ge307XFxcXFxcXFxuZXZhbCgndmFyIHBhcnNlRmlsZSA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXFxcXFxcXG5NeVBhcnNlUyA9IE9iamVjdC5rZXlzKHBhcnNlRmlsZS5jb2Rlcyk7XFxcXFxcXFxuTXlQYXJzZVMucmV2ZXJzZSgpO1xcXFxcXFxcbiovXFxcXFxcXFxudmFyIGQ9W107XFxcXFxcXFxuJC5yZXF1aXJlKFxcXFxcXFxcXFxcXFxcXCJoaWtlcjovL3BhZ2UvanhJdGVtP3J1bGU9TXlGaWVsZOG0sOKBv1xcXFxcXFxcXFxcXFxcXCIpLmp4TGlzdCgpO1xcXFxcXFxcbmQ9ZC5maWx0ZXIoaXQ9Pml0LmNvbF90eXBlPT09J3RleHRfMicpLm1hcChpdD0+cGRmaChpdC50aXRsZSwnZm9udCwtMSYmVGV4dCcpKTtcXFxcXFxcXG5NeVBhcnNlUz1kO1xcXFxcXFxcblxcXFxcXFxcbmZvciAobGV0IGkgaW4gTXlQYXJzZVMpIHtcXFxcXFxcXG4gICAgaWYgKCEvZGVmYXVsdFBhcnNlLy50ZXN0KE15UGFyc2VTW2ldKSkge1xcXFxcXFxcbiAgICAgICAgbGV0IHRpdGxlID1NeVBhcnNlU1tpXTtcXFxcXFxcXG4gICAgICAgIGl0ZW1zLnB1c2goe1xcXFxcXFxcbiAgICAgICAgICAgIHRpdGxlOiBub3dQYXJzZSA9PT0gdGl0bGU/Y29sb3IodGl0bGUsJyMxMmI2NjgnKTp0aXRsZSxcXFxcXFxcXG4gICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaXB0KT0+e1xcXFxcXFxcbiAgICAgICAgICAgICAgICBzZXRJdGVtKCdQYXJzZScsaXB0KTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3sumAieaOpeWPoycraXB0O1xcXFxcXFxcbiAgICAgICAgICAgIH0sdGl0bGUpICxcXFxcXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXFxcXFxuICAgICAgICB9KTtcXFxcXFxcXG4gICAgfVxcXFxcXFxcbn1cXFxcXFxcXG5sZXQgdGFnPScnO1xcXFxcXFxcbmZvciAobGV0IGkgaW4ganNvbikge1xcXFxcXFxcbiAgICBsZXQgdGl0bGUgPSBqc29uW2ldLnRpdGxlO1xcXFxcXFxcbiAgICBsZXQgenVybD1qc29uW2ldLnVybDtcXFxcXFxcXG4gICAgbGV0IHpwaWMgPSBqc29uW2ldLnBpY191cmw7XFxcXFxcXFxuICAgIGlmKGdldE15VmFyKCd6ZHknKSA9PT0genVybCl7XFxcXFxcXFxuICAgICAgICB0YWc9dGl0bGU7XFxcXFxcXFxuICAgICAgICB0aXRsZT0n4puzJyt0aXRsZTtcXFxcXFxcXG4gICAgfVxcXFxcXFxcbiAgICBpdGVtcy5wdXNoKHtcXFxcXFxcXG4gICAgICAgIHRpdGxlOnRpdGxlLFxcXFxcXFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh6dXJsLG5vd1BhcnNlLHRpbWVvdXQsdmlwT2JqKSA9PiB7XFxcXFxcXFxuICAgICAgICAgICAgaWYoZ2V0TXlWYXIoJ3pkeScpIT09enVybCl7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCd6ZHknLCB6dXJsKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICB2YXIgZHhfbW9kZSA9IGdldEl0ZW0oJ+eCuemAiScsJ+WNlea1iycpOy8v54K56YCJ5qih5byPXFxcXFxcXFxuICAgICAgICAgICAgaWYoZHhfbW9kZT09PSfljZXmtYsnKXtcXFxcXFxcXG4gICAgICAgICAgICAgICAgc2hvd0xvYWRpbmcoJ+mtlOaWreWKqOaAgeino+aekOS4rSzor7fnqI3nrYkuLi4nKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgZXZhbCgndmFyIGNvbmZpZ19kcCA9JyArIGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgZXZhbChmZXRjaChjb25maWdfZHAuY2opKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF5dG1QYXJzZSh6dXJsLG5vd1BhcnNlLHRpbWVvdXQpO1xcXFxcXFxcbiAgICAgICAgICAgIH1lbHNle1xcXFxcXFxcbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHN0b3JhZ2UwLmdldE15VmFyKCdqeF9zZWxlY3RlZCcpfHxbXTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgaWYoZGF0YS5sZW5ndGg+MzIpe1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ+S9oOaJgOmAieaLqeW+hea1i+ivleeahOino+aekOaVsOWFseiuoTonK2RhdGEubGVuZ3RoKyfkuKrvvIzotoXlh7rkuobmjqjojZDmnIDlpKfmlbAzMizmgKfog73lj6/og73mnoHlt64s5piv5ZCm57un57utPycpLmNvbmZpcm0oKGRhdGEsdmlwT2JqLHRpbWVvdXQpPT57XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qge3Rlc3RfcmVwb3J0fSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL3Rlc3RfcmVwb3J0Jyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlc3RfcmVwb3J0KGRhdGEsdmlwT2JqLHRpbWVvdXQpXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB9LGRhdGEsdmlwT2JqLHRpbWVvdXQpXFxcXFxcXFxuICAgICAgICAgICAgICAgIH1lbHNle1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qge3Rlc3RfcmVwb3J0fSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL3Rlc3RfcmVwb3J0Jyk7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVzdF9yZXBvcnQoZGF0YSx2aXBPYmosdGltZW91dClcXFxcXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgIH0senVybCxub3dQYXJzZSx0aW1lb3V0LGpzb25baV0pLFxcXFxcXFxcbiAgICAgICAgcGljX3VybDp6cGljLFxcXFxcXFxcbiAgICAgICAgY29sX3R5cGU6ICdpY29uXzQnXFxcXFxcXFxuICAgIH0pO1xcXFxcXFxcbn1cXFxcXFxcXG5hZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCkgPT4ge1xcXFxcXFxcbiAgICBjbGVhclZhcihcXFxcXFxcXFxcXFxcXFwiemR5XFxcXFxcXFxcXFxcXFxcIik7XFxcXFxcXFxufSkpO1xcXFxcXFxcbml0ZW1zLnB1c2goe1xcXFxcXFxcbiAgICB0aXRsZTon5rWL6K+VJyt0YWcsXFxcXFxcXFxuICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcXFxcXFxcbiAgICB1cmw6JC50b1N0cmluZygobm93UGFyc2UsdGltZW91dCk9PntcXFxcXFxcXG4gICAgICAgIGV2YWwoXFxcXFxcXFxcXFxcXFxcInZhciBjb25maWcgPVxcXFxcXFxcXFxcXFxcXCIgKyBmZXRjaChcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFxcXFxcXFxcXFxcXFwiKSk7XFxcXFxcXFxuICAgICAgICBldmFsKGZldGNoKGNvbmZpZy5jaikpO1xcXFxcXFxcbiAgICAgICAgLy8gZXZhbChmZXRjaCgnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcycsIHt9KSk7XFxcXFxcXFxuICAgICAgICByZXR1cm4gYXl0bVBhcnNlKGdldE15VmFyKCd6ZHknKSwgbm93UGFyc2UsdGltZW91dCk7XFxcXFxcXFxuICAgIH0sbm93UGFyc2UsdGltZW91dCksXFxcXFxcXFxuICAgIGRlc2M6ICfor7fovpPop6PmnpDlnLDlnYAnLFxcXFxcXFxcbiAgICBleHRyYToge1xcXFxcXFxcbiAgICAgICAgdGl0bGVWaXNpYmxlOiB0cnVlLFxcXFxcXFxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcignemR5JywganNvblswXS51cmwpIHx8IFxcXFxcXFxcXFxcXFxcXCJcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICAgICAgb25DaGFuZ2U6ICdwdXRNeVZhcihcXFxcXFxcXFxcXFxcXFwiemR5XFxcXFxcXFxcXFxcXFxcIixpbnB1dCknLFxcXFxcXFxcbiAgICAgICAgdGV4dFNpemU6IDEzLFxcXFxcXFxcbiAgICAgICAgdHlwZTogXFxcXFxcXFxcXFxcXFxcInRleHRhcmVhXFxcXFxcXFxcXFxcXFxcIixcXFxcXFxcXG4gICAgICAgIGhlaWdodDogMlxcXFxcXFxcbiAgICB9XFxcXFxcXFxufSk7XFxcXFxcXFxuc2V0UmVzdWx0KGl0ZW1zKTtcXFxcXFxcIn0se1xcXFxcXFwibmFtZVxcXFxcXFwiOlxcXFxcXFwi6Kej5p6Q5oql5ZGKXFxcXFxcXCIsXFxcXFxcXCJwYXRoXFxcXFxcXCI6XFxcXFxcXCJ0ZXN0X3JlcG9ydFxcXFxcXFwiLFxcXFxcXFwicnVsZVxcXFxcXFwiOlxcXFxcXFwiZnVuY3Rpb24gc29ydEJ5S2V5KGFycmF5LCBrZXksIG9yZGVyKSB7Ly/lr7nosaHmlbDnu4TmjInmn5DkuKrplK7lgLzmjpLluo9cXFxcXFxcXG4gICAgcmV0dXJuIGFycmF5LnNvcnQoZnVuY3Rpb24oYSwgYikge1xcXFxcXFxcbiAgICAgICAgdmFyIHggPSBwYXJzZUludChhW2tleV0ubWF0Y2goLyhcXFxcXFxcXFxcXFxcXFxcZCspLylbMV0pOy8v5L+u5aSN5aSn5LqOMTDlh7rpl67pophcXFxcXFxcXG4gICAgICAgIHZhciB5ID0gcGFyc2VJbnQoYltrZXldLm1hdGNoKC8oXFxcXFxcXFxcXFxcXFxcXGQrKS8pWzFdKTtcXFxcXFxcXG4gICAgICAgIGlmIChvcmRlcikge1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiAoKHggPCB5KSA/IC0xIDogKCh4ID4geSkgPyAxIDogMCkpXFxcXFxcXFxuICAgICAgICB9IGVsc2Uge1xcXFxcXFxcbiAgICAgICAgICAgIHJldHVybiAoKHggPCB5KSA/ICgoeCA+IHkpID8gMSA6IDApIDogLTEpXFxcXFxcXFxuICAgICAgICB9XFxcXFxcXFxuICAgIH0pXFxcXFxcXFxufVxcXFxcXFxcbmZ1bmN0aW9uIHRlc3RfcmVwb3J0KGp4cyx2aXBPYmosdGltZW91dCl7Ly/ljZXmraPniYjlpJrop6PmnpDmtYvor5XmiqXlkYpcXFxcXFxcXG4gICAganhzID0ganhzfHxbXTsvL+ino+aekOagh+mimOWIl+ihqFxcXFxcXFxcbiAgICBsZXQgdmlwVXJsID0gdmlwT2JqLnVybDtcXFxcXFxcXG4gICAgbGV0IHZpcE5hbWUgPSB2aXBPYmoudGl0bGU7XFxcXFxcXFxuICAgIGlmKGp4cy5sZW5ndGg8MSl7XFxcXFxcXFxuICAgIHJldHVybiAndG9hc3Q6Ly/op6PmnpDliJfooajph4zml6Dop6PmnpDvvIzmtYvkuKrpuKHmr5snXFxcXFxcXFxuICAgIH1cXFxcXFxcXG4gICAgdmFyIGNvdW50ID0ganhzLmxlbmd0aDsgLy/orr7nva7ku7vliqHmlbDph49cXFxcXFxcXG4gICAgbG9nKCfprZTmlq3lvIDlkK/lpJrku7vliqHop6PmnpAs5Lu75Yqh5pWw6YePOicrY291bnQpO1xcXFxcXFxcbiAgICB2YXIgdGFzayA9IGZ1bmN0aW9uKG9iaikge1xcXFxcXFxcbiAgICAgICAgZXZhbCgndmFyIGNvbmZpZ19kcCA9JyArIGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpKTtcXFxcXFxcXG4gICAgICAgIGV2YWwoZmV0Y2goY29uZmlnX2RwLmNqKSk7XFxcXFxcXFxuICAgICAgICByZXR1cm4gYXl0bVBhcnNlKHZpcFVybCxvYmoubmFtZSx0aW1lb3V0KTtcXFxcXFxcXG4gICAgfTtcXFxcXFxcXG4gICAgdmFyIHBhcnNlUmV0ID0gW107IC8v6Kej5p6Q57uT5p6c5YiX6KGoXFxcXFxcXFxuICAgIGxldCB0YXNrcyA9IGp4cy5tYXAoKGl0LGlkZXgpPT57XFxcXFxcXFxuICAgICAgICByZXR1cm4ge1xcXFxcXFxcbiAgICAgICAgICAgIGZ1bmM6IHRhc2ssXFxcXFxcXFxuICAgICAgICAgICAgcGFyYW06IHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgbmFtZTppdCxcXFxcXFxcXG4gICAgICAgICAgICB9LFxcXFxcXFxcbiAgICAgICAgICAgIGlkOiBcXFxcXFxcXFxcXFxcXFwidGFza1xcXFxcXFxcXFxcXFxcXCIraWRleFxcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICB9KTtcXFxcXFxcXG4gICAgc2hvd0xvYWRpbmcoXFxcXFxcXFxcXFxcXFxcIumtlOaWreW5tuWPkeino+aekOS4re+8jOWJqeS9meW+hea1izpcXFxcXFxcXFxcXFxcXFwiK2NvdW50KTtcXFxcXFxcXG4gICAgYmUodGFza3Mse1xcXFxcXFxcbiAgICAgICAgZnVuYzogZnVuY3Rpb24ob2JqLCBpZCwgZXJyb3IscmV0KSB7XFxcXFxcXFxuICAgICAgICAgICAgbG9nKFxcXFxcXFxcXFxcXFxcXCLnm5HlkKzliLDku7vliqFcXFxcXFxcXFxcXFxcXFwiICsgaWQrJ+W3sue7k+adnyxlcnJvcjonK2Vycm9yKycscmV0OicrcmV0KTtcXFxcXFxcXG4gICAgICAgICAgICByZXQgPSByZXR8fCcnO1xcXFxcXFxcbiAgICAgICAgICAgIGVycm9yPWVycm9yfHwnJztcXFxcXFxcXG4gICAgICAgICAgICBwYXJzZVJldC5wdXNoKHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgdGFzazppZCxcXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0OnJldCxcXFxcXFxcXG4gICAgICAgICAgICAgICAgZXJyb3I6ZXJyb3IsXFxcXFxcXFxuICAgICAgICAgICAgICAgIG5hbWU6dGFza3MuZmlsdGVyKGl0PT5pdC5pZD09PWlkKVswXS5wYXJhbS5uYW1lXFxcXFxcXFxuICAgICAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICAgICAgY291bnQgLT0gMTsgLy/lrozmiJDkuobku7vliqHvvIzku7vliqHmlbDph48tMVxcXFxcXFxcbiAgICAgICAgICAgIC8vbG9nKG9iaik7XFxcXFxcXFxuICAgICAgICAgICAgaWYgKGNvdW50ID4gMCkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICBzaG93TG9hZGluZyhcXFxcXFxcXFxcXFxcXFwi6a2U5pat5bm25Y+R6Kej5p6Q5Lit77yM5Ymp5L2Z5b6F5rWLOlxcXFxcXFxcXFxcXFxcXCIgKyBjb3VudClcXFxcXFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxcXFxcbiAgICAgICAgICAgICAgICBoaWRlTG9hZGluZygpO1xcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgIH0sXFxcXFxcXFxuICAgICAgICBwYXJhbTogey8v5Lyg5Yiw55uR5ZCs5Ye95pWw55qEb2Jq5Y+C5pWw6YeMXFxcXFxcXFxuICAgICAgICAgICAgaGk6IFxcXFxcXFxcXFxcXFxcXCJjY2NcXFxcXFxcXFxcXFxcXFwiLFxcXFxcXFxcbiAgICAgICAgfVxcXFxcXFxcbiAgICB9KTsvL+aJp+ihjOWkmuS7u+WKoVxcXFxcXFxcbiAgICAvL2xvZyhcXFxcXFxcXFxcXFxcXFwi5aSa5Lu75Yqh5omn6KGM57uT5p6c5pWwOlxcXFxcXFxcXFxcXFxcXCIrcGFyc2VSZXQubGVuZ3RoKTtcXFxcXFxcXG4gICAgcGFyc2VSZXQ9c29ydEJ5S2V5KHBhcnNlUmV0LCd0YXNrJyx0cnVlKTsvL+WNh+W6j+aOkuWIl1xcXFxcXFxcbiAgICAvLyBsb2cocGFyc2VSZXQubWFwKGl0PT5pdC50YXNrKSk7XFxcXFxcXFxuICAgIHJldHVybiAkKCdoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSMjbm9IaXN0b3J5IycpLnJ1bGUoKHZpcE5hbWUscGFyc2VSZXQpPT4ge1xcXFxcXFxcbiAgICAgICAgc2V0UGFnZVRpdGxlKHZpcE5hbWUgKyAn6Kej5p6Q5oql5ZGKJyk7XFxcXFxcXFxuICAgICAgICBjb25zdCB7aXNWaWRlb30gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9nbG9iYWxQYXJzZT9ydWxlPemBk+mVv+S7k+W6k1BybycpO1xcXFxcXFxcbiAgICAgICAgY29uc3Qge2NvbG9yLCBzbWFsbH0gPSAkLnJlcXVpcmUoXFxcXFxcXFxcXFxcXFxcImhpa2VyOi8vcGFnZS91dGlsaXk/cnVsZT3pgZPplb/ku5PlupNQcm9cXFxcXFxcXFxcXFxcXFwiKTtcXFxcXFxcXG4gICAgICAgIGxldCBkID0gW107XFxcXFxcXFxuICAgICAgICBsZXQgc2hvd19tb2RlID0gZ2V0SXRlbSgnc2hvd19tb2RlJywgJ+ivpue7hicpO1xcXFxcXFxcbiAgICAgICAgbGV0IGNvbF90eXBlID0gc2hvd19tb2RlID09PSAn6K+m57uGJyA/ICd0ZXh0XzEnIDogJ3RleHRfMyc7XFxcXFxcXFxuICAgICAgICBkLnB1c2goe1xcXFxcXFxcbiAgICAgICAgICAgIHRpdGxlOiAn5pi+56S65qih5byPOicgKyBjb2xvcihzaG93X21vZGUsICcjZmE4YzM1JyksXFxcXFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXFxcXFxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGNvbG9yLCBjbnQpID0+IHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgbGV0IHNob3dfbW9kZSA9IGdldEl0ZW0oJ3Nob3dfbW9kZScsICfor6bnu4YnKTtcXFxcXFxcXG4gICAgICAgICAgICAgICAgc2hvd19tb2RlID0gc2hvd19tb2RlID09PSAn6K+m57uGJyA/ICfnsr7nroAnIDogJ+ivpue7hic7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oJ3Nob3dfbW9kZScsIHNob3dfbW9kZSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oJ3Nob3dfbW9kZScsIHtcXFxcXFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5pi+56S65qih5byPOicgKyBjb2xvcihzaG93X21vZGUsICcjZmE4YzM1JylcXFxcXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGxldCBjb2xfdHlwZSA9IHNob3dfbW9kZSA9PT0gJ+ivpue7hicgPyAndGV4dF8xJyA6ICd0ZXh0XzMnO1xcXFxcXFxcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNudDsgaSsrKSB7XFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKCdzaG93X3JldF8nICsgaSwge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBjb2xfdHlwZVxcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxcXFxcbiAgICAgICAgICAgIH0sIGNvbG9yLCBwYXJzZVJldC5sZW5ndGgpLFxcXFxcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxcXFxcXFxuICAgICAgICAgICAgICAgIGlkOiAnc2hvd19tb2RlJ1xcXFxcXFxcbiAgICAgICAgICAgIH1cXFxcXFxcXG4gICAgICAgIH0pO1xcXFxcXFxcbiAgICAgICAgcGFyc2VSZXQuZm9yRWFjaCgoaXQsIGlkeCkgPT4ge1xcXFxcXFxcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IGl0Lm5hbWU7XFxcXFxcXFxuICAgICAgICAgICAgaWYgKGl0LnJldCAmJiAhaXQucmV0LmluY2x1ZGVzKCd1bmRlZmluZWQnKSAmJiAoLyNpc1ZpZGVvPXRydWUjLy50ZXN0KGl0LnJldCkgfHwgaXNWaWRlbyhpdC5yZXQpKSkge1xcXFxcXFxcbiAgICAgICAgICAgICAgICB0aXRsZSA9IGNvbG9yKHRpdGxlLCAnIzEyYjY2OCcpXFxcXFxcXFxuICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgIGxldCBkZXNjID0gKGl0LnJldCB8fCBpdC5lcnJvcikuc3Vic3RyKDAsIDYwKTtcXFxcXFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxcXFxcXFxuICAgICAgICAgICAgICAgIGRlc2M6IHNtYWxsKGRlc2MpLFxcXFxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogY29sX3R5cGUsXFxcXFxcXFxuICAgICAgICAgICAgICAgIHVybDogaXQucmV0LFxcXFxcXFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcXFxcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0OiBpdC5yZXQgfHwgaXQuZXJyb3IsXFxcXFxcXFxuICAgICAgICAgICAgICAgICAgICBpZDogJ3Nob3dfcmV0XycgKyBpZHhcXFxcXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxcXFxcbiAgICAgICAgICAgIH0pO1xcXFxcXFxcbiAgICAgICAgfSk7XFxcXFxcXFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxcXFxcXFxuICAgIH0sdmlwTmFtZSxwYXJzZVJldClcXFxcXFxcXG59XFxcXFxcXFxuXFxcXFxcXFxuJC5leHBvcnRzLnNvcnRCeUtleT1zb3J0QnlLZXk7XFxcXFxcXFxuJC5leHBvcnRzLnRlc3RfcmVwb3J0PXRlc3RfcmVwb3J0O1xcXFxcXFwifV1cXFwiLFxcXCJwcm94eVxcXCI6XFxcIlxcXCIsXFxcImljb25cXFwiOlxcXCJodHRwczovL2xhbm1laWd1b2ppYW5nLmNvbS90dWJpYW8vbW92aWUvNC5zdmdcXFwifSlcIixcImdyb3VwXCI6XCLikaDmjqjojZBcIixcInVhXCI6XCJtb2JpbGVcIixcInByZVJ1bGVcIjpcIlwiLFwicGFnZXNcIjpcIltdXCJ9IiwicGljVXJsIjoiaHR0cHM6Ly9zMy5heDF4LmNvbS8yMDIxLzAyLzIyL3k3d2I5Ty5qcGciLCJ0aXRsZSI6IuaWreaPkiJ9
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement