Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:网页插件¥js_url¥global_六神VIP看看@base64://Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgIFZJUOeci+eci+ino+aekOW8leaTjgovLyBAdmVyc2lvbiAgICAgIDYuNi42Ci8vIEBhdXRob3IgICAgICAg5YWt56WeVjU4NwovLyBAZGVzY3JpcHRpb24gICAg5YWo572R5YWo5bmz5Y+w5YWo6Ieq5Yqo6Kej5p6Q77yM5aSa5Yqf6IO957q/6Lev5peg5q2757q/6Lev77yM5paw5aKe5LqR6Kej5p6Q77yM5LyY6LSo5b2x6KeG56uZ5ZCI6ZuGKOiBmuWQiOaQnCnjgILosYbnk6PlnKjnur/op4LnnItqc+WFqOiHquWKqOino+aekOi2hea4hee6v+i3ryjlha3npZ5WNTg3KQovLyBAbm90ZSAgICAgICAgIOWFreelnlY1ODfop6PmnpDlvJXmk47vvJrosYbnk6PlnKjnur/op4LnnItqc+WFqOiHquWKqOino+aekOi2hea4hee6v+i3r+OAggovLyBAbmFtZXNwYWNlICAgIOWFreelnlY1ODcKLy8gQGljb24gICAgICAgICBodHRwczovL3AucHN0YXRwLmNvbS9vcmlnaW4vZmU2OTAwMDBjOTE0MTk1NWJiYWMKLy8gQGxpY2Vuc2UgICAgICBHUEwgTGljZW5zZQovLyBAaW5jbHVkZSAgICAgICoKLy8gQGdyYW50ICAgICAgICBHTV9zZXRWYWx1ZQovLyBAZ3JhbnQgICAgICAgIEdNX2dldFZhbHVlCi8vIEBncmFudCAgICAgICAgR01fZGVsZXRlVmFsdWUKLy8gQGdyYW50ICAgICAgICB1bnNhZmVXaW5kb3cKLy8gPT0vVXNlclNjcmlwdD09CgohYXN5bmMgZnVuY3Rpb24oKSB7CiAgbGV0IF9NYXRoZmxvb3IgPSBNYXRoLmZsb29yLCBfTWF0aG1heCA9IE1hdGgubWF4OwogIGZ1bmN0aW9uIElzKG4pIHsKICAgIGxldCBlID0gMSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0gPyBhcmd1bWVudHNbMV0gOiBIcmVmOwogICAgcmV0dXJuIG4gaW5zdGFuY2VvZiBGdW5jdGlvbiA/IG4oZSkgOiAoZSA9IChuLnNvdXJjZSB8fCBuKS5pbmNsdWRlcygiPWh0dHAiKSA/IGUgOiBlLnJlcGxhY2UoLz1odHRwW14mXSsvLCAiIiksCiAgICAic3RyaW5nIiA9PSB0eXBlb2YgbiA/IGUuaW5jbHVkZXMobikgOiBuLnRlc3QoZSkpOwogIH0KICBmdW5jdGlvbiBJc05vdChuLCBlKSB7CiAgICByZXR1cm4gIUlzKG4sIGUpOwogIH0KICBmdW5jdGlvbiBBcmd1bWVudHMobikgewogICAgY29uc3QgZSA9IG4ubGVuZ3RoLCB0ID0gQXJyYXkoZSk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGU7IGkrKykgdFtpXSA9IG5baV07CiAgICByZXR1cm4gdDsKICB9CiAgZnVuY3Rpb24gZ2V0R2xvYmFsKG4pIHsKICAgIHJldHVybiAoaGFzVW5zYWZlV2luZG93ID8gdW5zYWZlV2luZG93IDogd2luZG93KVtuXTsKICB9CiAgZnVuY3Rpb24gc2V0R2xvYmFsKG4sIGUpIHsKICAgIHdpbmRvd1tuXSA9IGUsIGhhc1Vuc2FmZVdpbmRvdyAmJiAodW5zYWZlV2luZG93W25dID0gZSk7CiAgfQogIGZ1bmN0aW9uIHBhcnNlU3RvcmVEYXRhKG4pIHsKICAgIGxldCBlID0gMSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0gPyBhcmd1bWVudHNbMV0gOiBudWxsOwogICAgaWYgKCJzdHJpbmciID09IHR5cGVvZiBuKSB0cnkgewogICAgICBuID0gSlNPTi5wYXJzZShuKTsKICAgIH0gY2F0Y2ggKG4pIHt9CiAgICByZXR1cm4gbnVsbCA9PT0gbiA/IGUgOiBuOwogIH0KICBmdW5jdGlvbiBnZXRDZG5VcmwobikgewogICAgcmV0dXJuICJodHRwczovL2Nkbi5ib290Y2RuLm5ldC9hamF4L2xpYnMiICsgbjsKICB9CiAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hDZG5VcmwobiwgZSkgewogICAgbGV0IHQ7CiAgICBjb25zdCBpID0gL15cL1x3Ly50ZXN0KG4pOwogICAgaWYgKG4gPSBpID8gZ2V0Q2RuVXJsKG4pIDogbiwgIWUgJiYgaSkgewogICAgICBjb25zdCBlID0gbi5tYXRjaCgvLipcLyhbXlwvXSspXC8oW15cL10rKSQvKTsKICAgICAgdCA9IGVbMl07CiAgICB9IGVsc2UgdCA9IGUgJiYgZS5uYW1lIHx8IG47CiAgICBjb25zdCBvID0gR2xvYmFsU3RvcmUuZ2V0KHQpOwogICAgbGV0IGE7CiAgICByZXR1cm4gYSA9IG8gJiYgIjIwLjYuMTMiID09PSBvLnZlcnNpb24gPyBvLmRhdGEgOiBhd2FpdCB3aW5kb3cuZmV0Y2gobikudGhlbigoZnVuY3Rpb24obikgewogICAgICByZXR1cm4gbi50ZXh0KCk7CiAgICB9KSkudGhlbigoZnVuY3Rpb24obikgewogICAgICByZXR1cm4gR2xvYmFsU3RvcmUuc2V0KHQsIHsKICAgICAgICBkYXRhOiBuLAogICAgICAgIHZlcnNpb246IFZFUlNJT04KICAgICAgfSksIG47CiAgICB9KSksIGE7CiAgfQogIGFzeW5jIGZ1bmN0aW9uIGFkZEpzKHVybCwgb3B0cykgewogICAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoQ2RuVXJsKHVybCwgb3B0cyk7CiAgICByZXR1cm4gZXZhbChkYXRhKTsKICB9CiAgYXN5bmMgZnVuY3Rpb24gYWRkQ3NzVXJsKG4pIHsKICAgIGFkZENzcyhhd2FpdCBmZXRjaENkblVybChuKSk7CiAgfQogIGZ1bmN0aW9uIGFkZENzcyhuKSB7CiAgICBsZXQgZTsKICAgIHJldHVybiAvXihodHRwfFwvKS8udGVzdChuKSA/IGFkZENzc1VybChuKSA6IChuID0gbi5yZXBsYWNlKC9cbitccyovZywgIiAiKSwgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIiksCiAgICBlLnN0eWxlU2hlZXQgPyBlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IG4gOiBlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG4pKSwKICAgIGUudHlwZSA9ICJ0ZXh0L2NzcyIsIHZvaWQgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5hcHBlbmRDaGlsZChlKSk7CiAgfQogIGZ1bmN0aW9uIHByZWZpeENzcyhuLCBlKSB7CiAgICBsZXQgdCwgaSwgbywgYSwgciA9IGUubGVuZ3RoOwogICAgZSArPSAiICIsIG4gPSAobiA9IChuID0gbi5yZXBsYWNlKC9cL1wqKD86KD8hXCpcLylbXHNcU10pKlwqXC98W1xyXG5cdF0rL2csICIiKSkucmVwbGFjZSgvfShccyopQC9nLCAifUAiKSkucmVwbGFjZSgvfShccyopfS9nLCAifX0iKTsKICAgIGZvciAobGV0IHMgPSAwOyBzIDwgbi5sZW5ndGggLSAyOyBzKyspIHQgPSBuW3NdLCBpID0gbltzICsgMV0sICJAIiA9PT0gdCAmJiAobyA9ICEwKSwKICAgIG8gfHwgInsiICE9PSB0IHx8IChhID0gITApLCBhICYmICJ9IiA9PT0gdCAmJiAoYSA9ICExKSwgIWEgJiYgIkAiICE9PSBpICYmICJ9IiAhPT0gaSAmJiAoIn0iID09PSB0IHx8ICIsIiA9PT0gdCB8fCAoInsiID09PSB0IHx8ICI7IiA9PT0gdCkgJiYgbykgJiYgKG4gPSBuLnNsaWNlKDAsIHMgKyAxKSArIGUgKyBuLnNsaWNlKHMgKyAxKSwKICAgIHMgKz0gciwgbyA9ICExKTsKICAgIHJldHVybiAwICE9PSBuLmluZGV4T2YoZSkgJiYgMCAhPT0gbi5pbmRleE9mKCJAIikgJiYgKG4gPSBlICsgbiksIG47CiAgfQogIGZ1bmN0aW9uIGdldCQoKSB7CiAgICBmdW5jdGlvbiBuKG4sIGUpIHsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gbihlKTsKICAgICAgfSBjYXRjaCAobikgewogICAgICAgIHJldHVybiBlOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBlKG4sIGUpIHsKICAgICAgcmV0dXJuIG4gJiYgKGwoZSkgfHwgYyhlKSkgPyBybi50ZXN0KG4pID8gZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKG4uc2xpY2UoMSkpIDogc24udGVzdChuKSA/IGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUobikgOiBlLnF1ZXJ5U2VsZWN0b3JBbGwobikgOiBbXTsKICAgIH0KICAgIGZ1bmN0aW9uIHQobikgewogICAgICByZXR1cm4gbi5yZXBsYWNlKHBuLCAoZnVuY3Rpb24obiwgZSkgewogICAgICAgIHJldHVybiBlLnRvVXBwZXJDYXNlKCk7CiAgICAgIH0pKTsKICAgIH0KICAgIGZ1bmN0aW9uIGkobiwgZSwgdCkgewogICAgICBpZiAodCkgewogICAgICAgIGZvciAobGV0IHQgPSBuLmxlbmd0aDsgdC0tOyApIGlmICghMSA9PT0gZS5jYWxsKG5bdF0sIHQsIG5bdF0pKSByZXR1cm4gbjsKICAgICAgfSBlbHNlIGZvciAobGV0IHQgPSAwLCBpID0gbi5sZW5ndGg7IHQgPCBpOyB0KyspIGlmICghMSA9PT0gZS5jYWxsKG5bdF0sIHQsIG5bdF0pKSByZXR1cm4gbjsKICAgICAgcmV0dXJuIG47CiAgICB9CiAgICBmdW5jdGlvbiBvKG4pIHsKICAgICAgbGV0IGUgPSBbXTsKICAgICAgZm9yIChsZXQgbiA9IDE7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspIGVbbiAtIDFdID0gYXJndW1lbnRzW25dOwogICAgICBsZXQgdCA9IGFyZ3VtZW50cy5sZW5ndGg7CiAgICAgIGlmICghdCkgcmV0dXJuIHt9OwogICAgICBpZiAoMSA9PT0gdCkgcmV0dXJuIG8oZG4sIG4pOwogICAgICBmb3IgKGxldCBlID0gMTsgZSA8IHQ7IGUrKykgZm9yIChsZXQgdCBpbiBhcmd1bWVudHNbZV0pIG5bdF0gPSBhcmd1bWVudHNbZV1bdF07CiAgICAgIHJldHVybiBuOwogICAgfQogICAgZnVuY3Rpb24gYShuLCBlKSB7CiAgICAgIGxldCB0ID0gbiAmJiAobi5tYXRjaGVzIHx8IG4ud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8IG4ubXNNYXRjaGVzU2VsZWN0b3IpOwogICAgICByZXR1cm4gISF0ICYmICEhZSAmJiB0LmNhbGwobiwgZSk7CiAgICB9CiAgICBmdW5jdGlvbiByKG4pIHsKICAgICAgcmV0dXJuIG4gaW5zdGFuY2VvZiBsbjsKICAgIH0KICAgIGZ1bmN0aW9uIHMobikgewogICAgICByZXR1cm4gISFuICYmIG4gPT09IG4ud2luZG93OwogICAgfQogICAgZnVuY3Rpb24gbChuKSB7CiAgICAgIHJldHVybiAhIW4gJiYgOSA9PT0gbi5ub2RlVHlwZTsKICAgIH0KICAgIGZ1bmN0aW9uIGMobikgewogICAgICByZXR1cm4gISFuICYmIDEgPT09IG4ubm9kZVR5cGU7CiAgICB9CiAgICBmdW5jdGlvbiBkKG4pIHsKICAgICAgcmV0dXJuICJmdW5jdGlvbiIgPT0gdHlwZW9mIG47CiAgICB9CiAgICBmdW5jdGlvbiBwKG4pIHsKICAgICAgcmV0dXJuICJzdHJpbmciID09IHR5cGVvZiBuOwogICAgfQogICAgZnVuY3Rpb24gZihuKSB7CiAgICAgIHJldHVybiB2b2lkIDAgPT09IG47CiAgICB9CiAgICBmdW5jdGlvbiB1KG4pIHsKICAgICAgcmV0dXJuIG51bGwgPT09IG47CiAgICB9CiAgICBmdW5jdGlvbiBtKG4pIHsKICAgICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KG4pKSAmJiBpc0Zpbml0ZShuKTsKICAgIH0KICAgIGZ1bmN0aW9uIGgobikgewogICAgICByZXR1cm4gcChuKSA/IGZ1bmN0aW9uKGUsIHQpIHsKICAgICAgICByZXR1cm4gYSh0LCBuKTsKICAgICAgfSA6IGQobikgPyBuIDogcihuKSA/IGZ1bmN0aW9uKGUsIHQpIHsKICAgICAgICByZXR1cm4gbi5pcyh0KTsKICAgICAgfSA6IG4gPyBmdW5jdGlvbihlLCB0KSB7CiAgICAgICAgcmV0dXJuIHQgPT09IG47CiAgICAgIH0gOiBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gITE7CiAgICAgIH07CiAgICB9CiAgICBmdW5jdGlvbiBnKG4sIGUpIHsKICAgICAgcmV0dXJuIGUgPyBuLmZpbHRlcihlKSA6IG47CiAgICB9CiAgICBmdW5jdGlvbiBiKG4pIHsKICAgICAgcmV0dXJuIHAobikgJiYgbi5tYXRjaChmbikgfHwgW107CiAgICB9CiAgICBmdW5jdGlvbiB2KG4sIGUsIHQsIGkpIHsKICAgICAgbGV0IG8gPSBbXSwgYSA9IGQoZSksIHIgPSBpICYmIGgoaSk7CiAgICAgIGZvciAobGV0IHMgPSAwLCBsID0gbi5sZW5ndGg7IHMgPCBsOyBzKyspIGlmIChhKSB7CiAgICAgICAgbGV0IHQgPSBlKG5bc10pOwogICAgICAgIHQubGVuZ3RoICYmIGVuLmFwcGx5KG8sIHQpOwogICAgICB9IGVsc2UgZm9yIChsZXQgYSA9IG5bc11bZV07ICEobnVsbCA9PSBhIHx8IGkgJiYgcigtMSwgYSkpOyApIG8ucHVzaChhKSwgYSA9IHQgPyBhW2VdIDogbnVsbDsKICAgICAgcmV0dXJuIG87CiAgICB9CiAgICBmdW5jdGlvbiB5KG4pIHsKICAgICAgcmV0dXJuIDEgPCBuLmxlbmd0aCA/IFouY2FsbChuLCAoZnVuY3Rpb24obiwgZSwgdCkgewogICAgICAgIHJldHVybiBZLmNhbGwodCwgbikgPT09IGU7CiAgICAgIH0pKSA6IG47CiAgICB9CiAgICBmdW5jdGlvbiB4KG4sIGUsIHQpIHsKICAgICAgaWYgKGMobikpIHsKICAgICAgICBsZXQgaSA9IEwuZ2V0Q29tcHV0ZWRTdHlsZShuLCBudWxsKTsKICAgICAgICByZXR1cm4gdCA/IGkuZ2V0UHJvcGVydHlWYWx1ZShlKSB8fCB2b2lkIDAgOiBpW2VdOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiB3KG4sIGUpIHsKICAgICAgcmV0dXJuIHBhcnNlSW50KHgobiwgZSksIDEwKSB8fCAwOwogICAgfQogICAgZnVuY3Rpb24gXyhuKSB7CiAgICAgIHJldHVybiB1bi50ZXN0KG4pOwogICAgfQogICAgZnVuY3Rpb24gayhuLCBlKSB7CiAgICAgIGlmICh2b2lkIDAgPT09IGUgJiYgKGUgPSBfKG4pKSwgZSkgcmV0dXJuIG47CiAgICAgIGlmICghbW5bbl0pIHsKICAgICAgICBsZXQgZSA9IHQobiksIG8gPSAiIiArIGVbMF0udG9VcHBlckNhc2UoKSArIGUuc2xpY2UoMSk7CiAgICAgICAgaSgoZSArICIgIiArIGduLmpvaW4obyArICIgIikgKyBvKS5zcGxpdCgiICIpLCAoZnVuY3Rpb24oZSwgdCkgewogICAgICAgICAgaWYgKHQgaW4gaG4pIHJldHVybiBtbltuXSA9IHQsICExOwogICAgICAgIH0pKTsKICAgICAgfQogICAgICByZXR1cm4gbW5bbl07CiAgICB9CiAgICBmdW5jdGlvbiBTKG4sIGUsIHQpIHsKICAgICAgcmV0dXJuIHZvaWQgMCA9PT0gdCAmJiAodCA9IF8obikpLCB0IHx8IGJuW25dIHx8ICFtKGUpID8gZSA6IGUgKyAicHgiOwogICAgfQogICAgZnVuY3Rpb24gaihlLCBpKSB7CiAgICAgIGxldCBvID0gZS5kYXRhc2V0W2ldIHx8IGUuZGF0YXNldFt0KGkpXTsKICAgICAgcmV0dXJuIHZuLnRlc3QobykgPyBvIDogbihKU09OLnBhcnNlLCBvKTsKICAgIH0KICAgIGZ1bmN0aW9uIEkoZSwgaSwgbykgewogICAgICBvID0gbihKU09OLnN0cmluZ2lmeSwgbyksIGUuZGF0YXNldFt0KGkpXSA9IG87CiAgICB9CiAgICBmdW5jdGlvbiAkKG4sIGUpIHsKICAgICAgbGV0IHQgPSBuLmRvY3VtZW50RWxlbWVudDsKICAgICAgcmV0dXJuIF9NYXRobWF4KG4uYm9keVsic2Nyb2xsIiArIGVdLCB0WyJzY3JvbGwiICsgZV0sIG4uYm9keVsib2Zmc2V0IiArIGVdLCB0WyJvZmZzZXQiICsgZV0sIHRbImNsaWVudCIgKyBlXSk7CiAgICB9CiAgICBmdW5jdGlvbiBDKG4sIGUpIHsKICAgICAgcmV0dXJuIHcobiwgImJvcmRlciIgKyAoZSA/ICJMZWZ0IiA6ICJUb3AiKSArICJXaWR0aCIpICsgdyhuLCAicGFkZGluZyIgKyAoZSA/ICJMZWZ0IiA6ICJUb3AiKSkgKyB3KG4sICJwYWRkaW5nIiArIChlID8gIlJpZ2h0IiA6ICJCb3R0b20iKSkgKyB3KG4sICJib3JkZXIiICsgKGUgPyAiUmlnaHQiIDogIkJvdHRvbSIpICsgIldpZHRoIik7CiAgICB9CiAgICBmdW5jdGlvbiBBKG4pIHsKICAgICAgcmV0dXJuICJub25lIiA9PT0geChuLCAiZGlzcGxheSIpOwogICAgfQogICAgZnVuY3Rpb24gVShuLCBlKSB7CiAgICAgIHJldHVybiAhZSB8fCAhb24uY2FsbChlLCAoZnVuY3Rpb24oZSkgewogICAgICAgIHJldHVybiAwID4gbi5pbmRleE9mKGUpOwogICAgICB9KSk7CiAgICB9CiAgICBmdW5jdGlvbiBUKG4pIHsKICAgICAgcmV0dXJuIGtuW25dIHx8IF9uW25dIHx8IG47CiAgICB9CiAgICBmdW5jdGlvbiBxKG4pIHsKICAgICAgcmV0dXJuIG5beG5dID0gblt4bl0gfHwge307CiAgICB9CiAgICBmdW5jdGlvbiB6KG4sIGUsIHQsIGksIG8pIHsKICAgICAgbGV0IGEgPSBxKG4pOwogICAgICBhW2VdID0gYVtlXSB8fCBbXSwgYVtlXS5wdXNoKFsgdCwgaSwgbyBdKSwgbi5hZGRFdmVudExpc3RlbmVyKGUsIG8pOwogICAgfQogICAgZnVuY3Rpb24gTShuKSB7CiAgICAgIGxldCBlID0gbi5zcGxpdCh3bik7CiAgICAgIHJldHVybiBbIGVbMF0sIGUuc2xpY2UoMSkuc29ydCgpIF07CiAgICB9CiAgICBmdW5jdGlvbiBQKG4sIGUsIHQsIGksIG8pIHsKICAgICAgbGV0IGEgPSBxKG4pOwogICAgICBpZiAoZSkgYVtlXSAmJiAoYVtlXSA9IGFbZV0uZmlsdGVyKChmdW5jdGlvbihhKSB7CiAgICAgICAgbGV0IHIgPSBhWzBdLCBzID0gYVsxXSwgbCA9IGFbMl07CiAgICAgICAgcmV0dXJuICEhKG8gJiYgbC5ndWlkICE9PSBvLmd1aWQgfHwgIVUociwgdCkgfHwgaSAmJiBpICE9PSBzKSB8fCB2b2lkIG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLCBsKTsKICAgICAgfSkpKTsgZWxzZSBmb3IgKGUgaW4gYSkgUChuLCBlLCB0LCBpLCBvKTsKICAgIH0KICAgIGZ1bmN0aW9uIEUobikgewogICAgICByZXR1cm4gbi5tdWx0aXBsZSAmJiBuLm9wdGlvbnMgPyB2KFouY2FsbChuLm9wdGlvbnMsIChmdW5jdGlvbihuKSB7CiAgICAgICAgcmV0dXJuIG4uc2VsZWN0ZWQgJiYgIW4uZGlzYWJsZWQgJiYgIW4ucGFyZW50Tm9kZS5kaXNhYmxlZDsKICAgICAgfSkpLCAidmFsdWUiKSA6IG4udmFsdWUgfHwgIiI7CiAgICB9CiAgICBmdW5jdGlvbiBWKG4pIHsKICAgICAgaWYgKCFwKG4pKSByZXR1cm4gW107CiAgICAgIGlmIChDbi50ZXN0KG4pKSByZXR1cm4gWyBIKFJlZ0V4cC4kMSkgXTsKICAgICAgbGV0IGUgPSAkbi50ZXN0KG4pICYmIFJlZ0V4cC4kMSwgdCA9IEFuW2VdIHx8IEFuWyIqIl07CiAgICAgIHJldHVybiB0LmlubmVySFRNTCA9IG4sIGRuKHQuY2hpbGROb2RlcykuZGV0YWNoKCkuZ2V0KCk7CiAgICB9CiAgICBmdW5jdGlvbiBOKG4sIGUsIHQsIG8sIGEpIHsKICAgICAgbyA/IG4uaW5zZXJ0QmVmb3JlKGUsIHQgPyBuLmZpcnN0Q2hpbGQgOiBudWxsKSA6IG4ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSwgdCA/IG4gOiBuLm5leHRTaWJsaW5nKSwKICAgICAgYSAmJiBmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgbGV0IHQgPSBkbihuKTsKICAgICAgICB0LmZpbHRlcigic2NyaXB0IikuYWRkKHQuZmluZCgic2NyaXB0IikpLmVhY2goKGZ1bmN0aW9uKG4sIHQpIHsKICAgICAgICAgIGlmIChUbi50ZXN0KHQudHlwZSkgJiYgRy5jb250YWlucyh0KSkgewogICAgICAgICAgICBsZXQgbiA9IEgoInNjcmlwdCIpOwogICAgICAgICAgICBuLnRleHQgPSB0LnRleHRDb250ZW50LnJlcGxhY2UoVW4sICIiKSwgaShxbiwgKGZ1bmN0aW9uKGUsIGkpIHsKICAgICAgICAgICAgICB0W2ldICYmIChuW2ldID0gdFtpXSk7CiAgICAgICAgICAgIH0pKSwgZS5oZWFkLmluc2VydEJlZm9yZShuLCBudWxsKSwgZS5oZWFkLnJlbW92ZUNoaWxkKG4pOwogICAgICAgICAgfQogICAgICAgIH0pKTsKICAgICAgfShlLCBuLm93bmVyRG9jdW1lbnQpOwogICAgfQogICAgZnVuY3Rpb24gUihuLCBlLCB0LCBvLCBhLCByLCBzLCBsKSB7CiAgICAgIHJldHVybiBpKG4sIChmdW5jdGlvbihuLCByKSB7CiAgICAgICAgaShkbihyKSwgKGZ1bmN0aW9uKG4sIHIpIHsKICAgICAgICAgIGkoZG4oZSksIChmdW5jdGlvbihlLCBpKSB7CiAgICAgICAgICAgIGxldCBzID0gdCA/IGkgOiByLCBsID0gdCA/IG4gOiBlOwogICAgICAgICAgICBOKHQgPyByIDogaSwgbCA/IHMuY2xvbmVOb2RlKCEwKSA6IHMsIG8sIGEsICFsKTsKICAgICAgICAgIH0pLCBsKTsKICAgICAgICB9KSwgcyk7CiAgICAgIH0pLCByKSwgZTsKICAgIH0KICAgIGxldCBEID0gewogICAgICBjbGFzczogImNsYXNzTmFtZSIsCiAgICAgIGNvbnRlbnRlZGl0YWJsZTogImNvbnRlbnRFZGl0YWJsZSIsCiAgICAgIGZvcjogImh0bWxGb3IiLAogICAgICByZWFkb25seTogInJlYWRPbmx5IiwKICAgICAgbWF4bGVuZ3RoOiAibWF4TGVuZ3RoIiwKICAgICAgdGFiaW5kZXg6ICJ0YWJJbmRleCIsCiAgICAgIGNvbHNwYW46ICJjb2xTcGFuIiwKICAgICAgcm93c3BhbjogInJvd1NwYW4iLAogICAgICB1c2VtYXA6ICJ1c2VNYXAiCiAgICB9LCBGID0gZG9jdW1lbnQsIEwgPSB3aW5kb3csIEcgPSBGLmRvY3VtZW50RWxlbWVudCwgSCA9IEYuY3JlYXRlRWxlbWVudC5iaW5kKEYpLCBPID0gSCgiZGl2IiksIEIgPSBIKCJ0YWJsZSIpLCBXID0gSCgidGJvZHkiKSwgWCA9IEgoInRyIiksIEogPSBBcnJheS5pc0FycmF5LCBLID0gQXJyYXkucHJvdG90eXBlLCBRID0gSy5jb25jYXQsIFogPSBLLmZpbHRlciwgWSA9IEsuaW5kZXhPZiwgbm4gPSBLLm1hcCwgZW4gPSBLLnB1c2gsIHRuID0gSy5zbGljZSwgb24gPSBLLnNvbWUsIGFuID0gSy5zcGxpY2UsIHJuID0gL15cLltcdy1dKiQvLCBzbiA9IC9eXHcrJC8sIGxuID0gZnVuY3Rpb24oKSB7CiAgICAgIGZ1bmN0aW9uIG4obiwgdCkgewogICAgICAgIGlmICghbikgcmV0dXJuOwogICAgICAgIGlmIChyKG4pKSByZXR1cm4gbjsKICAgICAgICBsZXQgaSA9IG47CiAgICAgICAgaWYgKHAobikpIHsKICAgICAgICAgIGxldCBvID0gKHIodCkgPyB0WzBdIDogdCkgfHwgRjsKICAgICAgICAgIGlmIChpID0gL14jW1x3LV0qJC8udGVzdChuKSA/IG8uZ2V0RWxlbWVudEJ5SWQobi5zbGljZSgxKSkgOiAvPC4rPi8udGVzdChuKSA/IFYobikgOiBlKG4sIG8pLAogICAgICAgICAgIWkpIHJldHVybjsKICAgICAgICB9IGVsc2UgaWYgKGQobikpIHJldHVybiB0aGlzLnJlYWR5KG4pOwogICAgICAgIChpLm5vZGVUeXBlIHx8IGkgPT09IEwpICYmIChpID0gWyBpIF0pLCB0aGlzLmxlbmd0aCA9IGkubGVuZ3RoOwogICAgICAgIGZvciAobGV0IG4gPSAwLCBlID0gdGhpcy5sZW5ndGg7IG4gPCBlOyBuKyspIHRoaXNbbl0gPSBpW25dOwogICAgICB9CiAgICAgIHJldHVybiBuLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oZSwgdCkgewogICAgICAgIHJldHVybiBuZXcgbihlLCB0KTsKICAgICAgfSwgbjsKICAgIH0oKSwgY24gPSBsbi5wcm90b3R5cGUsIGRuID0gY24uaW5pdDsKICAgIGRuLmZuID0gZG4ucHJvdG90eXBlID0gY24sIGNuLmxlbmd0aCA9IDAsIGNuLnNwbGljZSA9IGFuLCAiZnVuY3Rpb24iID09IHR5cGVvZiBTeW1ib2wgJiYgKGNuW1N5bWJvbC5pdGVyYXRvcl0gPSBLW1N5bWJvbC5pdGVyYXRvcl0pLAogICAgY24ubWFwID0gZnVuY3Rpb24obikgewogICAgICByZXR1cm4gZG4oUS5hcHBseShbXSwgbm4uY2FsbCh0aGlzLCAoZnVuY3Rpb24oZSwgdCkgewogICAgICAgIHJldHVybiBuLmNhbGwoZSwgdCwgZSk7CiAgICAgIH0pKSkpOwogICAgfSwgY24uc2xpY2UgPSBmdW5jdGlvbihuLCBlKSB7CiAgICAgIHJldHVybiBkbih0bi5jYWxsKHRoaXMsIG4sIGUpKTsKICAgIH07CiAgICBsZXQgcG4gPSAvLShbYS16XSkvZzsKICAgIGRuLmVhY2ggPSBpLCBjbi5lYWNoID0gZnVuY3Rpb24obikgewogICAgICByZXR1cm4gaSh0aGlzLCBuKTsKICAgIH0sIGNuLnJlbW92ZVByb3AgPSBmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKGUsIHQpIHsKICAgICAgICBkZWxldGUgdFtEW25dIHx8IG5dOwogICAgICB9KSk7CiAgICB9LCBkbi5leHRlbmQgPSBvLCBjbi5leHRlbmQgPSBmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBvKGNuLCBuKTsKICAgIH0sIGRuLmd1aWQgPSAxLCBkbi5pc1dpbmRvdyA9IHMsIGRuLmlzRnVuY3Rpb24gPSBkLCBkbi5pc051bWVyaWMgPSBtLCBkbi5pc0FycmF5ID0gSiwKICAgIGNuLnByb3AgPSBmdW5jdGlvbihuLCBlKSB7CiAgICAgIGlmIChuKSB7CiAgICAgICAgaWYgKHAobikpIHJldHVybiBuID0gRFtuXSB8fCBuLCAyID4gYXJndW1lbnRzLmxlbmd0aCA/IHRoaXNbMF0gJiYgdGhpc1swXVtuXSA6IHRoaXMuZWFjaCgoZnVuY3Rpb24odCwgaSkgewogICAgICAgICAgaVtuXSA9IGU7CiAgICAgICAgfSkpOwogICAgICAgIGZvciAobGV0IGUgaW4gbikgdGhpcy5wcm9wKGUsIG5bZV0pOwogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CiAgICB9LCBjbi5nZXQgPSBmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBmKG4pID8gdG4uY2FsbCh0aGlzKSA6IHRoaXNbMCA+IChuID0gK24pID8gbiArIHRoaXMubGVuZ3RoIDogbl07CiAgICB9LCBjbi5lcSA9IGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIGRuKHRoaXMuZ2V0KG4pKTsKICAgIH0sIGNuLmZpcnN0ID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLmVxKDApOwogICAgfSwgY24ubGFzdCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy5lcSgtMSk7CiAgICB9LCBjbi5maWx0ZXIgPSBmdW5jdGlvbihuKSB7CiAgICAgIGxldCBlID0gaChuKTsKICAgICAgcmV0dXJuIGRuKFouY2FsbCh0aGlzLCAoZnVuY3Rpb24obiwgdCkgewogICAgICAgIHJldHVybiBlLmNhbGwobiwgdCwgbik7CiAgICAgIH0pKSk7CiAgICB9OwogICAgbGV0IGZuID0gL1xTKy9nOwogICAgY24uaGFzQ2xhc3MgPSBmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiAhIW4gJiYgb24uY2FsbCh0aGlzLCAoZnVuY3Rpb24oZSkgewogICAgICAgIHJldHVybiBjKGUpICYmIGUuY2xhc3NMaXN0LmNvbnRhaW5zKG4pOwogICAgICB9KSk7CiAgICB9LCBjbi5yZW1vdmVBdHRyID0gZnVuY3Rpb24obikgewogICAgICBsZXQgZSA9IGIobik7CiAgICAgIHJldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKG4sIHQpIHsKICAgICAgICBjKHQpICYmIGkoZSwgKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICAgIHQucmVtb3ZlQXR0cmlidXRlKGUpOwogICAgICAgIH0pKTsKICAgICAgfSkpOwogICAgfSwgY24uYXR0ciA9IGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgaWYgKG4pIHsKICAgICAgICBpZiAocChuKSkgewogICAgICAgICAgaWYgKDIgPiBhcmd1bWVudHMubGVuZ3RoKSB7CiAgICAgICAgICAgIGlmICghdGhpc1swXSB8fCAhYyh0aGlzWzBdKSkgcmV0dXJuOwogICAgICAgICAgICBsZXQgZSA9IHRoaXNbMF0uZ2V0QXR0cmlidXRlKG4pOwogICAgICAgICAgICByZXR1cm4gdShlKSA/IHZvaWQgMCA6IGU7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gZihlKSA/IHRoaXMgOiB1KGUpID8gdGhpcy5yZW1vdmVBdHRyKG4pIDogdGhpcy5lYWNoKChmdW5jdGlvbih0LCBpKSB7CiAgICAgICAgICAgIGMoaSkgJiYgaS5zZXRBdHRyaWJ1dGUobiwgZSk7CiAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICAgIGZvciAobGV0IGUgaW4gbikgdGhpcy5hdHRyKGUsIG5bZV0pOwogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CiAgICB9LCBjbi50b2dnbGVDbGFzcyA9IGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgbGV0IHQgPSBiKG4pLCBvID0gIWYoZSk7CiAgICAgIHJldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKG4sIGEpIHsKICAgICAgICBjKGEpICYmIGkodCwgKGZ1bmN0aW9uKG4sIHQpIHsKICAgICAgICAgIG8gPyBlID8gYS5jbGFzc0xpc3QuYWRkKHQpIDogYS5jbGFzc0xpc3QucmVtb3ZlKHQpIDogYS5jbGFzc0xpc3QudG9nZ2xlKHQpOwogICAgICAgIH0pKTsKICAgICAgfSkpOwogICAgfSwgY24uYWRkQ2xhc3MgPSBmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiB0aGlzLnRvZ2dsZUNsYXNzKG4sICEwKTsKICAgIH0sIGNuLnJlbW92ZUNsYXNzID0gZnVuY3Rpb24obikgewogICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IHRoaXMudG9nZ2xlQ2xhc3MobiwgITEpIDogdGhpcy5hdHRyKCJjbGFzcyIsICIiKTsKICAgIH0sIGRuLnVuaXF1ZSA9IHksIGNuLmFkZCA9IGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgcmV0dXJuIGRuKHkodGhpcy5nZXQoKS5jb25jYXQoZG4obiwgZSkuZ2V0KCkpKSk7CiAgICB9OwogICAgbGV0IHVuID0gL14tLS8sIG1uID0ge30sIGhuID0gTy5zdHlsZSwgZ24gPSBbICJ3ZWJraXQiLCAibW96IiwgIm1zIiBdLCBibiA9IHsKICAgICAgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ICEwLAogICAgICBjb2x1bW5Db3VudDogITAsCiAgICAgIGZsZXhHcm93OiAhMCwKICAgICAgZmxleFNocmluazogITAsCiAgICAgIGZvbnRXZWlnaHQ6ICEwLAogICAgICBncmlkQXJlYTogITAsCiAgICAgIGdyaWRDb2x1bW46ICEwLAogICAgICBncmlkQ29sdW1uRW5kOiAhMCwKICAgICAgZ3JpZENvbHVtblN0YXJ0OiAhMCwKICAgICAgZ3JpZFJvdzogITAsCiAgICAgIGdyaWRSb3dFbmQ6ICEwLAogICAgICBncmlkUm93U3RhcnQ6ICEwLAogICAgICBsaW5lSGVpZ2h0OiAhMCwKICAgICAgb3BhY2l0eTogITAsCiAgICAgIG9yZGVyOiAhMCwKICAgICAgb3JwaGFuczogITAsCiAgICAgIHdpZG93czogITAsCiAgICAgIHpJbmRleDogITAKICAgIH07CiAgICBjbi5jc3MgPSBmdW5jdGlvbihuLCBlKSB7CiAgICAgIGlmIChwKG4pKSB7CiAgICAgICAgbGV0IHQgPSBfKG4pOwogICAgICAgIHJldHVybiBuID0gayhuLCB0KSwgMiA+IGFyZ3VtZW50cy5sZW5ndGggPyB0aGlzWzBdICYmIHgodGhpc1swXSwgbiwgdCkgOiBuID8gKGUgPSBTKG4sIGUsIHQpLAogICAgICAgIHRoaXMuZWFjaCgoZnVuY3Rpb24oaSwgbykgewogICAgICAgICAgYyhvKSAmJiAodCA/IG8uc3R5bGUuc2V0UHJvcGVydHkobiwgZSkgOiBvLnN0eWxlW25dID0gZSk7CiAgICAgICAgfSkpKSA6IHRoaXM7CiAgICAgIH0KICAgICAgZm9yIChsZXQgZSBpbiBuKSB0aGlzLmNzcyhlLCBuW2VdKTsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9OwogICAgbGV0IHZuID0gL15ccyt8XHMrJC87CiAgICBjbi5kYXRhID0gZnVuY3Rpb24obiwgZSkgewogICAgICBpZiAoIW4pIHsKICAgICAgICBpZiAoIXRoaXNbMF0pIHJldHVybjsKICAgICAgICBsZXQgbiA9IHt9OwogICAgICAgIGZvciAobGV0IGUgaW4gdGhpc1swXS5kYXRhc2V0KSBuW2VdID0gaih0aGlzWzBdLCBlKTsKICAgICAgICByZXR1cm4gbjsKICAgICAgfQogICAgICBpZiAocChuKSkgcmV0dXJuIDIgPiBhcmd1bWVudHMubGVuZ3RoID8gdGhpc1swXSAmJiBqKHRoaXNbMF0sIG4pIDogZihlKSA/IHRoaXMgOiB0aGlzLmVhY2goKGZ1bmN0aW9uKHQsIGkpIHsKICAgICAgICBJKGksIG4sIGUpOwogICAgICB9KSk7CiAgICAgIGZvciAobGV0IGUgaW4gbikgdGhpcy5kYXRhKGUsIG5bZV0pOwogICAgICByZXR1cm4gdGhpczsKICAgIH0sIGkoWyAhMCwgITEgXSwgKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgaShbICJXaWR0aCIsICJIZWlnaHQiIF0sIChmdW5jdGlvbihuLCB0KSB7CiAgICAgICAgY25bKGUgPyAib3V0ZXIiIDogImlubmVyIikgKyB0XSA9IGZ1bmN0aW9uKGkpIHsKICAgICAgICAgIHJldHVybiB0aGlzWzBdID8gcyh0aGlzWzBdKSA/IGUgPyB0aGlzWzBdWyJpbm5lciIgKyB0XSA6IHRoaXNbMF0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiICsgdF0gOiBsKHRoaXNbMF0pID8gJCh0aGlzWzBdLCB0KSA6IHRoaXNbMF1bKGUgPyAib2Zmc2V0IiA6ICJjbGllbnQiKSArIHRdICsgKGkgJiYgZSA/IHcodGhpc1swXSwgIm1hcmdpbiIgKyAobiA/ICJUb3AiIDogIkxlZnQiKSkgKyB3KHRoaXNbMF0sICJtYXJnaW4iICsgKG4gPyAiQm90dG9tIiA6ICJSaWdodCIpKSA6IDApIDogdm9pZCAwOwogICAgICAgIH07CiAgICAgIH0pKTsKICAgIH0pKSwgaShbICJXaWR0aCIsICJIZWlnaHQiIF0sIChmdW5jdGlvbihuLCBlKSB7CiAgICAgIGxldCB0ID0gZS50b0xvd2VyQ2FzZSgpOwogICAgICBjblt0XSA9IGZ1bmN0aW9uKGkpIHsKICAgICAgICBpZiAoIXRoaXNbMF0pIHJldHVybiBmKGkpID8gdm9pZCAwIDogdGhpczsKICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzKHRoaXNbMF0pID8gdGhpc1swXS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIgKyBlXSA6IGwodGhpc1swXSkgPyAkKHRoaXNbMF0sIGUpIDogdGhpc1swXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVt0XSAtIEModGhpc1swXSwgIW4pOwogICAgICAgIGxldCBvID0gcGFyc2VJbnQoaSwgMTApOwogICAgICAgIHJldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKGUsIGkpIHsKICAgICAgICAgIGlmIChjKGkpKSB7CiAgICAgICAgICAgIGxldCBlID0geChpLCAiYm94U2l6aW5nIik7CiAgICAgICAgICAgIGkuc3R5bGVbdF0gPSBTKHQsIG8gKyAoImJvcmRlci1ib3giID09PSBlID8gQyhpLCAhbikgOiAwKSk7CiAgICAgICAgICB9CiAgICAgICAgfSkpOwogICAgICB9OwogICAgfSkpOwogICAgbGV0IHluID0ge307CiAgICBjbi50b2dnbGUgPSBmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKGUsIHQpIHsKICAgICAgICBpZiAoYyh0KSkgewogICAgICAgICAgKGYobikgPyBBKHQpIDogbikgPyAodC5zdHlsZS5kaXNwbGF5ID0gdC5fX19jZCB8fCAiIiwgQSh0KSAmJiAodC5zdHlsZS5kaXNwbGF5ID0gZnVuY3Rpb24obikgewogICAgICAgICAgICBpZiAoeW5bbl0pIHJldHVybiB5bltuXTsKICAgICAgICAgICAgbGV0IGUgPSBIKG4pOwogICAgICAgICAgICBGLmJvZHkuaW5zZXJ0QmVmb3JlKGUsIG51bGwpOwogICAgICAgICAgICBsZXQgdCA9IHgoZSwgImRpc3BsYXkiKTsKICAgICAgICAgICAgcmV0dXJuIEYuYm9keS5yZW1vdmVDaGlsZChlKSwgeW5bbl0gPSAibm9uZSIgPT09IHQgPyAiYmxvY2siIDogdDsKICAgICAgICAgIH0odC50YWdOYW1lKSkpIDogKHQuX19fY2QgPSB4KHQsICJkaXNwbGF5IiksIHQuc3R5bGUuZGlzcGxheSA9ICJub25lIik7CiAgICAgICAgfQogICAgICB9KSk7CiAgICB9LCBjbi5oaWRlID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLnRvZ2dsZSghMSk7CiAgICB9LCBjbi5zaG93ID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLnRvZ2dsZSghMCk7CiAgICB9OwogICAgbGV0IHhuID0gIl9fX2NlIiwgd24gPSAiLiIsIF9uID0gewogICAgICBmb2N1czogImZvY3VzaW4iLAogICAgICBibHVyOiAiZm9jdXNvdXQiCiAgICB9LCBrbiA9IHsKICAgICAgbW91c2VlbnRlcjogIm1vdXNlb3ZlciIsCiAgICAgIG1vdXNlbGVhdmU6ICJtb3VzZW91dCIKICAgIH07CiAgICBjbi5vZmYgPSBmdW5jdGlvbihuLCBlLCB0KSB7CiAgICAgIGxldCBvID0gdGhpczsKICAgICAgaWYgKGYobikpIHRoaXMuZWFjaCgoZnVuY3Rpb24obiwgZSkgewogICAgICAgIChjKGUpIHx8IGwoZSkgfHwgcyhlKSkgJiYgUChlKTsKICAgICAgfSkpOyBlbHNlIGlmIChwKG4pKSBkKGUpICYmICh0ID0gZSwgZSA9ICIiKSwgaShiKG4pLCAoZnVuY3Rpb24obiwgaSkgewogICAgICAgIGxldCBhID0gTShpKSwgciA9IGFbMF0sIGQgPSBhWzFdLCBwID0gVChyKTsKICAgICAgICBvLmVhY2goKGZ1bmN0aW9uKG4sIGkpIHsKICAgICAgICAgIChjKGkpIHx8IGwoaSkgfHwgcyhpKSkgJiYgKFAoaSwgcCwgZCwgZSwgdCksIHIgIT09IHAgJiYgUChpLCByLCBkLCBlLCB0KSk7CiAgICAgICAgfSkpOwogICAgICB9KSk7IGVsc2UgZm9yIChsZXQgZSBpbiBuKSB0aGlzLm9mZihlLCBuW2VdKTsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9LCBjbi5vbiA9IGZ1bmN0aW9uKG4sIGUsIHQsIG8sIHIpIHsKICAgICAgbGV0IG0gPSB0aGlzOwogICAgICBpZiAoIXAobikpIHsKICAgICAgICBmb3IgKGxldCBpIGluIG4pIHRoaXMub24oaSwgZSwgdCwgbltpXSwgcik7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KICAgICAgcmV0dXJuIHAoZSkgfHwgKGYoZSkgfHwgdShlKSA/IGUgPSAiIiA6IGYodCkgPyAodCA9IGUsIGUgPSAiIikgOiAobyA9IHQsIHQgPSBlLAogICAgICBlID0gIiIpKSwgZChvKSB8fCAobyA9IHQsIHQgPSB2b2lkIDApLCBvID8gKGkoYihuKSwgKGZ1bmN0aW9uKG4sIGkpIHsKICAgICAgICBsZXQgZCA9IE0oaSksIHAgPSBkWzBdLCBmID0gZFsxXSwgdSA9IFQocCksIGggPSBwICE9PSB1LCBnID0gcCBpbiBfbjsKICAgICAgICB1ICYmIG0uZWFjaCgoZnVuY3Rpb24obiwgaSkgewogICAgICAgICAgaWYgKGMoaSkgfHwgbChpKSB8fCBzKGkpKSB7CiAgICAgICAgICAgIGxldCBuID0gZnVuY3Rpb24gbihzKSB7CiAgICAgICAgICAgICAgaWYgKGggJiYgKHMuX19fb3QgPyBzLl9fX290ICE9PSBwIDogcy50eXBlICE9PSBwIHx8IHMudGFyZ2V0WyJfX19pIiArIHBdICYmIChkZWxldGUgcy50YXJnZXRbIl9fX2kiICsgcF0sCiAgICAgICAgICAgICAgcy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSwgMSkpKSByZXR1cm47CiAgICAgICAgICAgICAgaWYgKHMubmFtZXNwYWNlICYmICFVKGYsIHMubmFtZXNwYWNlLnNwbGl0KHduKSkpIHJldHVybjsKICAgICAgICAgICAgICBsZXQgbCA9IGk7CiAgICAgICAgICAgICAgaWYgKGUpIHsKICAgICAgICAgICAgICAgIGxldCBuID0gcy50YXJnZXQ7CiAgICAgICAgICAgICAgICBmb3IgKDshYShuLCBlKTsgKSB7CiAgICAgICAgICAgICAgICAgIGlmIChuID09PSBpKSByZXR1cm47CiAgICAgICAgICAgICAgICAgIGlmIChuID0gbi5wYXJlbnROb2RlLCAhbikgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbCA9IG4sIHMuX19fY2QgPSAhMDsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKGcgJiYgcy5fX19vdCA9PT0gcCAmJiBpICE9PSBzLnRhcmdldCAmJiBpLmNvbnRhaW5zKHMudGFyZ2V0KSkgcmV0dXJuOwogICAgICAgICAgICAgIHMuX19fY2QgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsICJjdXJyZW50VGFyZ2V0IiwgewogICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiAhMCwKICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgImRhdGEiLCB7CiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6ICEwLAogICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgbGV0IGMgPSBvLmNhbGwobCwgcywgcy5fX190ZCk7CiAgICAgICAgICAgICAgciAmJiBQKGksIHUsIGYsIGUsIG4pLCAhMSA9PT0gYyAmJiAocy5wcmV2ZW50RGVmYXVsdCgpLCBzLnN0b3BQcm9wYWdhdGlvbigpKTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgbi5ndWlkID0gby5ndWlkID0gby5ndWlkIHx8IGRuLmd1aWQrKywgeihpLCB1LCBmLCBlLCBuKSwgaCAmJiB6KGksIHAsIGYsIGUsIG4pOwogICAgICAgICAgfQogICAgICAgIH0pKTsKICAgICAgfSkpLCB0aGlzKSA6IHRoaXM7CiAgICB9LCBjbi5vbmUgPSBmdW5jdGlvbihuLCBlLCB0LCBpKSB7CiAgICAgIHJldHVybiB0aGlzLm9uKG4sIGUsIHQsIGksICEwKTsKICAgIH0sIGNuLnJlYWR5ID0gZnVuY3Rpb24obikgewogICAgICBsZXQgZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBzZXRUaW1lb3V0KG4sIDAsIGRuKTsKICAgICAgfTsKICAgICAgcmV0dXJuICJsb2FkaW5nIiA9PT0gRi5yZWFkeVN0YXRlID8gRi5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgZSkgOiBlKCksCiAgICAgIHRoaXM7CiAgICB9LCBjbi50cmlnZ2VyID0gZnVuY3Rpb24obiwgZSkgewogICAgICBpZiAocChuKSkgewogICAgICAgIGxldCBlID0gTShuKSwgdCA9IGVbMF0sIGkgPSBlWzFdLCBvID0gVCh0KTsKICAgICAgICBpZiAoIW8pIHJldHVybiB0aGlzOwogICAgICAgIGxldCBhID0gL14obW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3B8Y2xpY2t8ZGJsY2xpY2spL2kudGVzdChvKSA/ICJNb3VzZUV2ZW50cyIgOiAiSFRNTEV2ZW50cyI7CiAgICAgICAgKG4gPSBGLmNyZWF0ZUV2ZW50KGEpKS5pbml0RXZlbnQobywgITAsICEwKSwgbi5uYW1lc3BhY2UgPSBpLmpvaW4od24pLCBuLl9fX290ID0gdDsKICAgICAgfQogICAgICBuLl9fX3RkID0gZTsKICAgICAgbGV0IHQgPSBuLl9fX290IGluIF9uOwogICAgICByZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbihlLCBpKSB7CiAgICAgICAgdCAmJiBkKGlbbi5fX19vdF0pICYmIChpWyJfX19pIiArIG4uX19fb3RdID0gITAsIGlbbi5fX19vdF0oKSksIGkuZGlzcGF0Y2hFdmVudChuKTsKICAgICAgfSkpOwogICAgfTsKICAgIGxldCBTbiA9IC8lMjAvZywgam4gPSAvXHI/XG4vZywgSW4gPSAvcmFkaW98Y2hlY2tib3gvaTsKICAgIGNuLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uKCkgewogICAgICBsZXQgbiA9ICIiOwogICAgICByZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbihlLCB0KSB7CiAgICAgICAgaSh0LmVsZW1lbnRzIHx8IFsgdCBdLCAoZnVuY3Rpb24oZSwgdCkgewogICAgICAgICAgaWYgKCEodC5kaXNhYmxlZCB8fCAhdC5uYW1lIHx8ICJGSUVMRFNFVCIgPT09IHQudGFnTmFtZSB8fCAvZmlsZXxyZXNldHxzdWJtaXR8YnV0dG9ufGltYWdlL2kudGVzdCh0LnR5cGUpIHx8IEluLnRlc3QodC50eXBlKSAmJiAhdC5jaGVja2VkKSkgewogICAgICAgICAgICBsZXQgZSA9IEUodCk7CiAgICAgICAgICAgIGlmICghZihlKSkgewogICAgICAgICAgICAgIGkoSihlKSA/IGUgOiBbIGUgXSwgKGZ1bmN0aW9uKGUsIGkpIHsKICAgICAgICAgICAgICAgIG4gKz0gZnVuY3Rpb24obiwgZSkgewogICAgICAgICAgICAgICAgICByZXR1cm4gIiYiICsgZW5jb2RlVVJJQ29tcG9uZW50KG4pICsgIj0iICsgZW5jb2RlVVJJQ29tcG9uZW50KGUucmVwbGFjZShqbiwgIlxyXG4iKSkucmVwbGFjZShTbiwgIisiKTsKICAgICAgICAgICAgICAgIH0odC5uYW1lLCBpKTsKICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KSk7CiAgICAgIH0pKSwgbi5zbGljZSgxKTsKICAgIH0sIGNuLnZhbCA9IGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyB0aGlzLmVhY2goKGZ1bmN0aW9uKGUsIHQpIHsKICAgICAgICBsZXQgbyA9IHQubXVsdGlwbGUgJiYgdC5vcHRpb25zOwogICAgICAgIGlmIChvIHx8IEluLnRlc3QodC50eXBlKSkgewogICAgICAgICAgbGV0IGUgPSBKKG4pID8gbm4uY2FsbChuLCBTdHJpbmcpIDogdShuKSA/IFtdIDogWyBuICsgIiIgXTsKICAgICAgICAgIG8gPyBpKHQub3B0aW9ucywgKGZ1bmN0aW9uKG4sIHQpIHsKICAgICAgICAgICAgdC5zZWxlY3RlZCA9IDAgPD0gZS5pbmRleE9mKHQudmFsdWUpOwogICAgICAgICAgfSksICEwKSA6IHQuY2hlY2tlZCA9IDAgPD0gZS5pbmRleE9mKHQudmFsdWUpOwogICAgICAgIH0gZWxzZSB0LnZhbHVlID0gZihuKSB8fCB1KG4pID8gIiIgOiBuOwogICAgICB9KSkgOiB0aGlzWzBdICYmIEUodGhpc1swXSk7CiAgICB9LCBjbi5jbG9uZSA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy5tYXAoKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICByZXR1cm4gZS5jbG9uZU5vZGUoITApOwogICAgICB9KSk7CiAgICB9LCBjbi5kZXRhY2ggPSBmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBnKHRoaXMsIG4pLmVhY2goKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICBlLnBhcmVudE5vZGUgJiYgZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpOwogICAgICB9KSksIHRoaXM7CiAgICB9OwogICAgbGV0ICRuID0gL15ccyo8KFx3KylbXj5dKj4vLCBDbiA9IC9ePChcdyspXHMqXC8/Pig/OjxcL1wxPik/JC8sIEFuID0gewogICAgICAiKiI6IE8sCiAgICAgIHRyOiBXLAogICAgICB0ZDogWCwKICAgICAgdGg6IFgsCiAgICAgIHRoZWFkOiBCLAogICAgICB0Ym9keTogQiwKICAgICAgdGZvb3Q6IEIKICAgIH07CiAgICBkbi5wYXJzZUhUTUwgPSBWLCBjbi5lbXB0eSA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgZm9yICg7ZS5maXJzdENoaWxkOyApIGUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKTsKICAgICAgfSkpOwogICAgfSwgY24uaHRtbCA9IGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyBmKG4pID8gdGhpcyA6IHRoaXMuZWFjaCgoZnVuY3Rpb24oZSwgdCkgewogICAgICAgIGModCkgJiYgKHQuaW5uZXJIVE1MID0gbik7CiAgICAgIH0pKSA6IHRoaXNbMF0gJiYgdGhpc1swXS5pbm5lckhUTUw7CiAgICB9LCBjbi5yZW1vdmUgPSBmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBnKHRoaXMsIG4pLmRldGFjaCgpLm9mZigpLCB0aGlzOwogICAgfSwgY24udGV4dCA9IGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIGYobikgPyB0aGlzWzBdID8gdGhpc1swXS50ZXh0Q29udGVudCA6ICIiIDogdGhpcy5lYWNoKChmdW5jdGlvbihlLCB0KSB7CiAgICAgICAgYyh0KSAmJiAodC50ZXh0Q29udGVudCA9IG4pOwogICAgICB9KSk7CiAgICB9LCBjbi51bndyYXAgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaCgoZnVuY3Rpb24obiwgZSkgewogICAgICAgIGlmICgiQk9EWSIgIT09IGUudGFnTmFtZSkgewogICAgICAgICAgbGV0IG4gPSBkbihlKTsKICAgICAgICAgIG4ucmVwbGFjZVdpdGgobi5jaGlsZHJlbigpKTsKICAgICAgICB9CiAgICAgIH0pKSwgdGhpczsKICAgIH0sIGNuLm9mZnNldCA9IGZ1bmN0aW9uKCkgewogICAgICBsZXQgbiA9IHRoaXNbMF07CiAgICAgIGlmIChuKSB7CiAgICAgICAgbGV0IGUgPSBuLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICB0b3A6IGUudG9wICsgTC5wYWdlWU9mZnNldCwKICAgICAgICAgIGxlZnQ6IGUubGVmdCArIEwucGFnZVhPZmZzZXQKICAgICAgICB9OwogICAgICB9CiAgICB9LCBjbi5vZmZzZXRQYXJlbnQgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMubWFwKChmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgbGV0IHQgPSBlLm9mZnNldFBhcmVudDsKICAgICAgICBmb3IgKDt0ICYmICJzdGF0aWMiID09PSB4KHQsICJwb3NpdGlvbiIpOyApIHQgPSB0Lm9mZnNldFBhcmVudDsKICAgICAgICByZXR1cm4gdCB8fCBHOwogICAgICB9KSk7CiAgICB9LCBjbi5wb3NpdGlvbiA9IGZ1bmN0aW9uKCkgewogICAgICBsZXQgbiA9IHRoaXNbMF07CiAgICAgIGlmIChuKSB7CiAgICAgICAgbGV0IGUgPSAiZml4ZWQiID09PSB4KG4sICJwb3NpdGlvbiIpLCB0ID0gZSA/IG4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgOiB0aGlzLm9mZnNldCgpOwogICAgICAgIGlmICghZSkgewogICAgICAgICAgbGV0IGUgPSBuLm93bmVyRG9jdW1lbnQsIGkgPSBuLm9mZnNldFBhcmVudCB8fCBlLmRvY3VtZW50RWxlbWVudDsKICAgICAgICAgIGZvciAoOyhpID09PSBlLmJvZHkgfHwgaSA9PT0gZS5kb2N1bWVudEVsZW1lbnQpICYmICJzdGF0aWMiID09PSB4KGksICJwb3NpdGlvbiIpOyApIGkgPSBpLnBhcmVudE5vZGU7CiAgICAgICAgICBpZiAoaSAhPT0gbiAmJiBjKGkpKSB7CiAgICAgICAgICAgIGxldCBuID0gZG4oaSkub2Zmc2V0KCk7CiAgICAgICAgICAgIHQudG9wIC09IG4udG9wICsgdyhpLCAiYm9yZGVyVG9wV2lkdGgiKSwgdC5sZWZ0IC09IG4ubGVmdCArIHcoaSwgImJvcmRlckxlZnRXaWR0aCIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gewogICAgICAgICAgdG9wOiB0LnRvcCAtIHcobiwgIm1hcmdpblRvcCIpLAogICAgICAgICAgbGVmdDogdC5sZWZ0IC0gdyhuLCAibWFyZ2luTGVmdCIpCiAgICAgICAgfTsKICAgICAgfQogICAgfSwgY24uY2hpbGRyZW4gPSBmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBnKGRuKHkodih0aGlzLCAoZnVuY3Rpb24obikgewogICAgICAgIHJldHVybiBuLmNoaWxkcmVuOwogICAgICB9KSkpKSwgbik7CiAgICB9LCBjbi5jb250ZW50cyA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gZG4oeSh2KHRoaXMsIChmdW5jdGlvbihuKSB7CiAgICAgICAgcmV0dXJuICJJRlJBTUUiID09PSBuLnRhZ05hbWUgPyBbIG4uY29udGVudERvY3VtZW50IF0gOiAiVEVNUExBVEUiID09PSBuLnRhZ05hbWUgPyBuLmNvbnRlbnQuY2hpbGROb2RlcyA6IG4uY2hpbGROb2RlczsKICAgICAgfSkpKSk7CiAgICB9LCBjbi5maW5kID0gZnVuY3Rpb24obikgewogICAgICByZXR1cm4gZG4oeSh2KHRoaXMsIChmdW5jdGlvbih0KSB7CiAgICAgICAgcmV0dXJuIGUobiwgdCk7CiAgICAgIH0pKSkpOwogICAgfTsKICAgIGxldCBVbiA9IC9eXHMqPCEoPzpcW0NEQVRBXFt8LS0pfCg/OlxdXF18LS0pPlxzKiQvZywgVG4gPSAvXiR8Xm1vZHVsZSR8XC8oamF2YXxlY21hKXNjcmlwdC9pLCBxbiA9IFsgInR5cGUiLCAic3JjIiwgIm5vbmNlIiwgIm5vTW9kdWxlIiBdOwogICAgcmV0dXJuIGNuLmFmdGVyID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBSKGFyZ3VtZW50cywgdGhpcywgITEsICExLCAhMSwgITAsICEwKTsKICAgIH0sIGNuLmFwcGVuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gUihhcmd1bWVudHMsIHRoaXMsICExLCAhMSwgITApOwogICAgfSwgY24uYXBwZW5kVG8gPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIFIoYXJndW1lbnRzLCB0aGlzLCAhMCwgITEsICEwKTsKICAgIH0sIGNuLmJlZm9yZSA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gUihhcmd1bWVudHMsIHRoaXMsICExLCAhMCk7CiAgICB9LCBjbi5pbnNlcnRBZnRlciA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gUihhcmd1bWVudHMsIHRoaXMsICEwLCAhMSwgITEsICExLCAhMSwgITApOwogICAgfSwgY24uaW5zZXJ0QmVmb3JlID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBSKGFyZ3VtZW50cywgdGhpcywgITAsICEwKTsKICAgIH0sIGNuLnByZXBlbmQgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIFIoYXJndW1lbnRzLCB0aGlzLCAhMSwgITAsICEwLCAhMCwgITApOwogICAgfSwgY24ucHJlcGVuZFRvID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBSKGFyZ3VtZW50cywgdGhpcywgITAsICEwLCAhMCwgITEsICExLCAhMCk7CiAgICB9LCBjbi5yZXBsYWNlV2l0aCA9IGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIHRoaXMuYmVmb3JlKG4pLnJlbW92ZSgpOwogICAgfSwgY24ucmVwbGFjZUFsbCA9IGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIGRuKG4pLnJlcGxhY2VXaXRoKHRoaXMpLCB0aGlzOwogICAgfSwgY24ud3JhcEFsbCA9IGZ1bmN0aW9uKG4pIHsKICAgICAgbGV0IGUgPSBkbihuKSwgdCA9IGVbMF07CiAgICAgIGZvciAoO3QuY2hpbGRyZW4ubGVuZ3RoOyApIHQgPSB0LmZpcnN0RWxlbWVudENoaWxkOwogICAgICByZXR1cm4gdGhpcy5maXJzdCgpLmJlZm9yZShlKSwgdGhpcy5hcHBlbmRUbyh0KTsKICAgIH0sIGNuLndyYXAgPSBmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKGUsIHQpIHsKICAgICAgICBsZXQgaSA9IGRuKG4pWzBdOwogICAgICAgIGRuKHQpLndyYXBBbGwoZSA/IGkuY2xvbmVOb2RlKCEwKSA6IGkpOwogICAgICB9KSk7CiAgICB9LCBjbi53cmFwSW5uZXIgPSBmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKGUsIHQpIHsKICAgICAgICBsZXQgaSA9IGRuKHQpLCBvID0gaS5jb250ZW50cygpOwogICAgICAgIG8ubGVuZ3RoID8gby53cmFwQWxsKG4pIDogaS5hcHBlbmQobik7CiAgICAgIH0pKTsKICAgIH0sIGNuLmhhcyA9IGZ1bmN0aW9uKG4pIHsKICAgICAgbGV0IHQgPSBwKG4pID8gZnVuY3Rpb24odCwgaSkgewogICAgICAgIHJldHVybiBlKG4sIGkpLmxlbmd0aDsKICAgICAgfSA6IGZ1bmN0aW9uKGUsIHQpIHsKICAgICAgICByZXR1cm4gdC5jb250YWlucyhuKTsKICAgICAgfTsKICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKHQpOwogICAgfSwgY24uaXMgPSBmdW5jdGlvbihuKSB7CiAgICAgIGxldCBlID0gaChuKTsKICAgICAgcmV0dXJuIG9uLmNhbGwodGhpcywgKGZ1bmN0aW9uKG4sIHQpIHsKICAgICAgICByZXR1cm4gZS5jYWxsKG4sIHQsIG4pOwogICAgICB9KSk7CiAgICB9LCBjbi5uZXh0ID0gZnVuY3Rpb24obiwgZSwgdCkgewogICAgICByZXR1cm4gZyhkbih5KHYodGhpcywgIm5leHRFbGVtZW50U2libGluZyIsIGUsIHQpKSksIG4pOwogICAgfSwgY24ubmV4dEFsbCA9IGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIHRoaXMubmV4dChuLCAhMCk7CiAgICB9LCBjbi5uZXh0VW50aWwgPSBmdW5jdGlvbihuLCBlKSB7CiAgICAgIHJldHVybiB0aGlzLm5leHQoZSwgITAsIG4pOwogICAgfSwgY24ubm90ID0gZnVuY3Rpb24obikgewogICAgICBsZXQgZSA9IGgobik7CiAgICAgIHJldHVybiB0aGlzLmZpbHRlcigoZnVuY3Rpb24odCwgaSkgewogICAgICAgIHJldHVybiAoIXAobikgfHwgYyhpKSkgJiYgIWUuY2FsbChpLCB0LCBpKTsKICAgICAgfSkpOwogICAgfSwgY24ucGFyZW50ID0gZnVuY3Rpb24obikgewogICAgICByZXR1cm4gZyhkbih5KHYodGhpcywgInBhcmVudE5vZGUiKSkpLCBuKTsKICAgIH0sIGNuLmluZGV4ID0gZnVuY3Rpb24obikgewogICAgICBsZXQgZSA9IG4gPyBkbihuKVswXSA6IHRoaXNbMF0sIHQgPSBuID8gdGhpcyA6IGRuKGUpLnBhcmVudCgpLmNoaWxkcmVuKCk7CiAgICAgIHJldHVybiBZLmNhbGwodCwgZSk7CiAgICB9LCBjbi5jbG9zZXN0ID0gZnVuY3Rpb24obikgewogICAgICBsZXQgZSA9IHRoaXMuZmlsdGVyKG4pOwogICAgICBpZiAoZS5sZW5ndGgpIHJldHVybiBlOwogICAgICBsZXQgdCA9IHRoaXMucGFyZW50KCk7CiAgICAgIHJldHVybiB0Lmxlbmd0aCA/IHQuY2xvc2VzdChuKSA6IGU7CiAgICB9LCBjbi5wYXJlbnRzID0gZnVuY3Rpb24obiwgZSkgewogICAgICByZXR1cm4gZyhkbih5KHYodGhpcywgInBhcmVudEVsZW1lbnQiLCAhMCwgZSkpKSwgbik7CiAgICB9LCBjbi5wYXJlbnRzVW50aWwgPSBmdW5jdGlvbihuLCBlKSB7CiAgICAgIHJldHVybiB0aGlzLnBhcmVudHMoZSwgbik7CiAgICB9LCBjbi5wcmV2ID0gZnVuY3Rpb24obiwgZSwgdCkgewogICAgICByZXR1cm4gZyhkbih5KHYodGhpcywgInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCBlLCB0KSkpLCBuKTsKICAgIH0sIGNuLnByZXZBbGwgPSBmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiB0aGlzLnByZXYobiwgITApOwogICAgfSwgY24ucHJldlVudGlsID0gZnVuY3Rpb24obiwgZSkgewogICAgICByZXR1cm4gdGhpcy5wcmV2KGUsICEwLCBuKTsKICAgIH0sIGNuLnNpYmxpbmdzID0gZnVuY3Rpb24obikgewogICAgICByZXR1cm4gZyhkbih5KHYodGhpcywgKGZ1bmN0aW9uKG4pIHsKICAgICAgICByZXR1cm4gZG4obikucGFyZW50KCkuY2hpbGRyZW4oKS5ub3Qobik7CiAgICAgIH0pKSkpLCBuKTsKICAgIH0sIGRuOwogIH0KICBmdW5jdGlvbiB3YWl0VG9SdW4obiwgZSkgewogICAgbGV0IHQgPSAyIDwgYXJndW1lbnRzLmxlbmd0aCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1syXSA/IGFyZ3VtZW50c1syXSA6IDA7CiAgICBjb25zdCBpID0gbiBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gbigpIDogMCA8ICQobikubGVuZ3RoOwogICAgcmV0dXJuIGkgPyB2b2lkIChlIGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgZShpKSkgOiB2b2lkICgxMDAgPCB0IHx8IHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICB3YWl0VG9SdW4obiwgZSwgdCArIDEpOwogICAgfSksIDEwMCkpOwogIH0KICBmdW5jdGlvbiAkJChuLCBlKSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpIHsKICAgICAgd2FpdFRvUnVuKG4sIChmdW5jdGlvbihuKSB7CiAgICAgICAgZSBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIGUobiksIHQobik7CiAgICAgIH0pKTsKICAgIH0pKTsKICB9CiAgZnVuY3Rpb24gZW1pdHRlcihuKSB7CiAgICByZXR1cm4gbiA9IG4gfHwgT2JqZWN0LmNyZWF0ZShudWxsKSwgewogICAgICBvbihlLCB0KSB7CiAgICAgICAgKG5bZV0gfHwgKG5bZV0gPSBbXSkpLnB1c2godCk7CiAgICAgIH0sCiAgICAgIG9mZihlLCB0KSB7CiAgICAgICAgbltlXSAmJiBuW2VdLnNwbGljZShuW2VdLmluZGV4T2YodCkgPj4+IDAsIDEpOwogICAgICB9LAogICAgICBlbWl0KGUsIHQpIHsKICAgICAgICAobltlXSB8fCBbXSkuc2xpY2UoKS5tYXAoKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgIG4odCk7CiAgICAgICAgfSkpLCAoblsiKiJdIHx8IFtdKS5zbGljZSgpLm1hcCgoZnVuY3Rpb24obikgewogICAgICAgICAgbihlLCB0KTsKICAgICAgICB9KSk7CiAgICAgIH0KICAgIH07CiAgfQogIGZ1bmN0aW9uIGdldENkbkltYWdlVXJsKG4pIHsKICAgIHJldHVybiAiaHR0cHM6Ly9wLnBzdGF0cC5jb20vb3JpZ2luLyIgKyBuOwogIH0KICBmdW5jdGlvbiB1dWlkKCkgewogICAgbGV0IG4gPSAwIHwgNDY2NTYgKiBNYXRoLnJhbmRvbSgpLCBlID0gMCB8IDQ2NjU2ICogTWF0aC5yYW5kb20oKTsKICAgIHJldHVybiBuID0gKCIwMDAiICsgbi50b1N0cmluZygzNikpLnNsaWNlKC0yKSwgZSA9ICgiMDAwIiArIGUudG9TdHJpbmcoMzYpKS5zbGljZSgtMyksCiAgICAibyIgKyBuICsgZTsKICB9CiAgZnVuY3Rpb24gZGVsYXkobikgewogICAgcmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlKSB7CiAgICAgIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgIGUoKTsKICAgICAgfSksIG4pOwogICAgfSkpOwogIH0KICBmdW5jdGlvbiBnZXRLZXl3b3JkRnJvbVVybChuLCBlKSB7CiAgICBjb25zdCB0ID0gKGUgfHwgbG9jYXRpb24uaHJlZikubWF0Y2gobiB8fCBDb21tb25TZWFyY2hLZXl3b3JkUmVnZXgpOwogICAgcmV0dXJuIHQgPyBkZWNvZGVVUklDb21wb25lbnQoKG4gPyB0WzFdIHx8IHRbMl0gOiB0WzJdIHx8IHRbNF0pIHx8ICIiKSA6ICIiOwogIH0KICBmdW5jdGlvbiBwdXJpZnlLZXl3b3JkKG4pIHsKICAgIHJldHVybiAoUHVyaWZ5S2V5d29yZFJlZ2V4ID8gbi5yZXBsYWNlKFB1cmlmeUtleXdvcmRSZWdleCwgIiIpIHx8IChuLnN0YXJ0c1dpdGgoIuesrCIpID8gIiIgOiBuKSA6IG4pLnJlcGxhY2UoL1xzKjpccyokLywgIiIpLnJlcGxhY2UoL1xzKihb57Kk6Iux5pelXeivrXxcWy7or61cXSlccyokLywgIiIpLnJlcGxhY2UoLyguKlxTLiopXCguKlwpXHMqJC8sICIkMSIpLnJlcGxhY2UoLy4q44CKKC4rKeOAiy4qLywgIiQxIikucmVwbGFjZSgvXHMrKGJkfGhkfFxkK3ApXHMqJC9pLCAiIikucmVwbGFjZSgvWzrvvJpdXHMqJC8sICIiKS50cmltKCk7CiAgfQogIGZ1bmN0aW9uIGdldFZpZGVvSW5mbyhuKSB7CiAgICByZXR1cm4gewogICAgICBzcmM6IG4uc3JjLAogICAgICBkdXJhdGlvbjogbi5kdXJhdGlvbiwKICAgICAgcGF1c2VkOiBuLnBhdXNlZCwKICAgICAgY3VycmVudFRpbWU6IG4uY3VycmVudFRpbWUsCiAgICAgIHBsYXliYWNrUmF0ZTogbi5wbGF5YmFja1JhdGUKICAgIH07CiAgfQogIGZ1bmN0aW9uIHNraXBBZFZpZGVvKG4pIHsKICAgIGxldCBlID0gISEoMSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0pICYmIGFyZ3VtZW50c1sxXTsKICAgICJzdHJpbmciID09IHR5cGVvZiBuICYmIChuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihuKSksIG4gJiYgMCAhPT0gbi5kdXJhdGlvbiAmJiAobi5jdXJyZW50VGltZSwKICAgIDkxID4gbi5kdXJhdGlvbiA/IChuLnBsYXliYWNrUmF0ZSA9IDE2LCBuLnNraXBBZCA9ICEwLCAwIDwgbi5jdXJyZW50VGltZSAmJiBuLmN1cnJlbnRUaW1lIDwgbi5kdXJhdGlvbiAtIDEgJiYgKG4uY3VycmVudFRpbWUgPSBuLmR1cmF0aW9uKSkgOiBlICYmIG4uc2tpcEFkICYmIChuLm11dGVkID0gITEsCiAgICBuLnBsYXliYWNrUmF0ZSA9IDEsIC4wMSA+PSBuLnZvbHVtZSAmJiAobi52b2x1bWUgPSAuNCkpKTsKICB9CiAgZnVuY3Rpb24gc2tpcEFkVmlkZW9XcmFwcGVyKG4pIHsKICAgIGlmICghaXNTa2lwQWRWaWRlbykgcmV0dXJuOwogICAgbGV0IGUgPSAhMSwgdCA9IDA7CiAgICBjb25zdCBpID0gc2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCkgewogICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLm8tLXBsYXllciIpIHx8IDYwMCA8IHQpIHsKICAgICAgICAkKCIuby0tc2tpcC1hZCIpLmFkZENsYXNzKCJvLS1oaWRlIik7CiAgICAgICAgY29uc3QgbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInZpZGVvIik7CiAgICAgICAgcmV0dXJuIG4gJiYgKG4ubXV0ZWQgPSAhMSwgbi5wbGF5YmFja1JhdGUgPSAxLCAuMDEgPj0gbi52b2x1bWUgJiYgKG4udm9sdW1lID0gLjQpKSwKICAgICAgICBjbGVhckludGVydmFsKGkpOwogICAgICB9CiAgICAgIGUgPSAhMSwgJCgidmlkZW9bc3JjXSIpLmVhY2goKGZ1bmN0aW9uKG4sIHQpIHsKICAgICAgICAwIDwgdC5kdXJhdGlvbiAmJiA5MSA+IHQuZHVyYXRpb24gJiYgIXQucGF1c2VkICYmIChlID0gITApOwogICAgICB9KSksIGUgPyAodCA9IDAsIG4oKSkgOiAodCArPSAxLCAkKCIuby0tc2tpcC1hZCIpLmFkZENsYXNzKCJvLS1oaWRlIikpOwogICAgfSksIDIwMCk7CiAgfQogIGZ1bmN0aW9uIHRvZ2dsZVNraXBBZFRpcChuKSB7CiAgICBsZXQgZSA9IDEgPCBhcmd1bWVudHMubGVuZ3RoICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzFdID8gYXJndW1lbnRzWzFdIDogImFwcGVuZCI7CiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuby0tc2tpcC1hZCIpID8gJCgiLm8tLXNraXAtYWQiKS5yZW1vdmVDbGFzcygiby0taGlkZSIpIDogJChuKVtlXShTa2lwX0FkX0h0bWwpOwogIH0KICBmdW5jdGlvbiBzbWFydENvbGxhcHNlKG4pIHsKICAgIGxldCBlID0gMCwgdCA9ICExOwogICAgJChuKS5lYWNoKChmdW5jdGlvbihuLCBpKSB7CiAgICAgIG4gPCBjb2xsYXBzZU51bSA/IG4gPj0gY29sbGFwc2VOdW0gLSAxICYmIChlID0gJChpKS5wb3NpdGlvbigpLnRvcCkgOiB0IHx8IGUgIT09ICQoaSkucG9zaXRpb24oKS50b3AgPyAodCA9ICEwLAogICAgICAkKGkpLnByZXYoIiIpLmFkZENsYXNzKCJpcy1jb2xsYXBzZSIpKSA6ICF0ICYmICQoaSkuaGFzQ2xhc3MoIm8tLWNvbGxhcHNlIikgJiYgJChpKS5hZGRDbGFzcygiaXMtY29sbGFwc2UiKTsKICAgIH0pKSwgJChuKS5wYXJlbnQoKS5hZGRDbGFzcygiby0tY29sbGFwc2UtYm94IiksICQoIi5vLS1jb2xsYXBzZSIpLm9mZigiY2xpY2siKS5vbigiY2xpY2siLCAoZnVuY3Rpb24oKSB7CiAgICAgICQodGhpcykucGFyZW50KCkudG9nZ2xlQ2xhc3MoImlzLW9wZW4iKTsKICAgIH0pKTsKICB9CiAgZnVuY3Rpb24gZml4TTN1OFBsYXlpbmcoKSB7CiAgICBmdW5jdGlvbiBuKG4pIHsKICAgICAgbi5mcm9tID0gSHJlZiwgbi5vcmlnaW4gPSBIcmVmLCBuLnVybCA9IGksIGlzTm90VG9wICYmIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7fSwgbiwgewogICAgICAgIF9pZDogTUVTU0FHRV9JRCwKICAgICAgICBhY3Rpb246ICJsb2ciLAogICAgICAgIHBhcmVudDogITAKICAgICAgfSksICIqIik7CiAgICB9CiAgICBjb25zdCBlID0gRGF0ZS5ub3coKTsKICAgIGxldCB0LCBpOwogICAgY29uc3QgbyA9IHNldEludGVydmFsKChmdW5jdGlvbigpIHsKICAgICAgY29uc3QgYSA9IERhdGUubm93KCkgLSBlOwogICAgICBpID0gIiIsIHQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJ2aWRlb1tzcmNdIiksIHQgJiYgKGkgPSB0LnNyYyksIC8oXC5tM3U4fFwvbTN1OHBsYXkpW15cL10qJC8udGVzdChpKSA/IChjbGVhckludGVydmFsKG8pLAogICAgICBzZXRUaW1lb3V0KChhc3luYyBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoMCA9PT0gdC5yZWFkeVN0YXRlKSB7CiAgICAgICAgICBsZXQgZSA9IGdldEdsb2JhbCgiSGxzIik7CiAgICAgICAgICBpZiAoZSB8fCAoYXdhaXQgYWRkSnMoIi9obHMuanMvMC4xMy4yL2hscy5taW4uanMiKSwgZSA9IGdldEdsb2JhbCgiSGxzIikpLCBlLmlzU3VwcG9ydGVkKCkpIHsKICAgICAgICAgICAgdC5wYXVzZSgpOwogICAgICAgICAgICBjb25zdCBvID0gbmV3IGU7CiAgICAgICAgICAgIG8ubG9hZFNvdXJjZShpKSwgby5hdHRhY2hNZWRpYSh0KSwgby5vbihlLkV2ZW50cy5NQU5JRkVTVF9QQVJTRUQsIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICB0LnBsYXkoKTsKICAgICAgICAgICAgfSkpLCBuKHsKICAgICAgICAgICAgICB0ZXh0OiAi4pyUIEZpeCBtM3U4IHBsYXkiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSksIDFlMykpIDogYSA+PSAxNWUzICYmIChjbGVhckludGVydmFsKG8pLCBuKHsKICAgICAgICB0ZXh0OiAiw5cgRml4IG0zdTggcGxheSBmYWlsZWQiCiAgICAgIH0pKTsKICAgIH0pLCAxMDApOwogIH0KICBmdW5jdGlvbiBpc1ZhbGlkVmlkZW9VcmwobikgewogICAgcmV0dXJuIGlzVmFsaWRVcmxSZWdleC50ZXN0KG4pICYmIGlzVmlkZW9VcmxSZWdleC50ZXN0KG4pICYmICFpc0ludmFsaWRTbmlmZlVybFJlZ2V4LnRlc3Qobik7CiAgfQogIGZ1bmN0aW9uIHRvU2VhcmNoVXJsKG4sIGUpIHsKICAgIHJldHVybiBuLmluY2x1ZGVzKCIqKiIpID8gbi5yZXBsYWNlKCIqKiIsIGUpIDogL21vdmllXC5kb3ViYW5cLmNvbVwvdGFnLy50ZXN0KG4pID8gbiA6IG4gKyBlOwogIH0KICBmdW5jdGlvbiBwYXJzZVVybChuLCBlKSB7CiAgICBsZXQgdCwgaSwgbyA9IG4udHJpbSgpLnNwbGl0KC9bXHNAXSsvKTsKICAgIGNvbnN0IGEgPSBvLmZpbHRlcigoZnVuY3Rpb24obikgewogICAgICByZXR1cm4gL2h0dHBzPzpcL1wvLy50ZXN0KG4pOwogICAgfSkpOwogICAgbyA9IG8uZmlsdGVyKChmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiAhL2h0dHBzPzpcL1wvLy50ZXN0KG4pOwogICAgfSkpLCBhLmZvckVhY2goKGZ1bmN0aW9uKG4pIHsKICAgICAgL1wvXC9tXC58XC9tXC98XC9cL21zb3UvLnRlc3QobikgPyB0ID0gbiA6IGkgPSBuOwogICAgfSkpOwogICAgbGV0IHIgPSAoaXNNb2JpbGUgPyB0IDogaSkgfHwgYVswXTsKICAgIGUgJiYgKHIgPSB0b1NlYXJjaFVybChyLCBlKSk7CiAgICBjb25zdCBzID0gMCA8IG8ubGVuZ3RoID8gby5qb2luKCIgIikgOiByLm1hdGNoKC9cL1wvKC4rXC4pPyhbXlwvXSspXC5cdytcLy8pWzJdLnJlcGxhY2UoL14oXHcpLywgKGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIG4udG9VcHBlckNhc2UoKTsKICAgIH0pKTsKICAgIHJldHVybiB7CiAgICAgIHVybDogciwKICAgICAgbmFtZTogcwogICAgfTsKICB9CiAgZnVuY3Rpb24gZ2V0U2VhcmNoU291cmNlc0h0bWwobikgewogICAgbGV0IGUgPSAhKDEgPCBhcmd1bWVudHMubGVuZ3RoICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzFdKSB8fCBhcmd1bWVudHNbMV07CiAgICBjb25zdCB0ID0gSHJlZi5tYXRjaCgvXC9cLy4qPyhcdyspXC5cdytcLy8pWzFdOwogICAgcmV0dXJuIFNFQVJDSF9VUkxTLm1hcCgoZnVuY3Rpb24oZSkgewogICAgICBjb25zdCBpID0gaXNWaXBTaXRlUmVnZXgudGVzdChlLnVybCkgPyAiaXMtdmlwIiA6IGlzQW5pbWVTaXRlUmVnZXgudGVzdChlLnVybCkgPyAiaXMtYW5pbWUiIDogIiIsIG8gPSBlLnVybC5tYXRjaCgvXC9cLy4qPyhcdyspXC5cdytcLy8pWzFdOwogICAgICByZXR1cm4gZS51cmwuaW5jbHVkZXModCkgfHwgSHJlZi5pbmNsdWRlcyhvKSA/ICIiIDogJzxhIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0iJyArIGkgKyAnIiAnICsgKF9EID8gJ2RhdGEtd2VpZ2h0PSInICsgZS53ZWlnaHQgKyAnIiAnIDogIiIpICsgJ2hyZWY9IicgKyB0b1NlYXJjaFVybChlLnVybCwgbikgKyAnIj4nICsgZS5uYW1lICsgIjwvYT4iOwogICAgfSkpLmpvaW4oIlxuIikgKyAoZSAmJiBTRUFSQ0hfVVJMUy5sZW5ndGggPiBjb2xsYXBzZU51bSA/ICc8YSBjbGFzcz0iby0tY29sbGFwc2UiPuKeojwvYT4nIDogIiIpOwogIH0KICBmdW5jdGlvbiB0b2dnbGVWaWV3cG9ydCgpIHsKICAgIGxldCBuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigibWV0YVtuYW1lPXZpZXdwb3J0XSIpOwogICAgbiB8fCAobiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm1ldGEiKSwgbi5uYW1lID0gInZpZXdwb3J0IiwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5hcHBlbmRDaGlsZChuKSk7CiAgICBjb25zdCBlID0gYWxsb3dTY2FsZSA/ICJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgOiAid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT15ZXMiOwogICAgbi5zZXRBdHRyaWJ1dGUoImNvbnRlbnQiLCBlKSwgYWxsb3dTY2FsZSA9ICFhbGxvd1NjYWxlOwogIH0KICBmdW5jdGlvbiBlbnN1cmVBcnJheShuKSB7CiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShuKSA/IG4gOiBuLnRyaW0oKS5zcGxpdCgvW1xuXHNdKlxuK1tcblxzXSovKTsKICB9CiAgZnVuY3Rpb24gdG9VcmxSZWdleChuKSB7CiAgICByZXR1cm4gbmV3IFJlZ0V4cChuLm1hcCgoZnVuY3Rpb24obikgewogICAgICByZXR1cm4gbi5yZXBsYWNlKC8uK1wvXC98XC8uKy9nLCAiIikucmVwbGFjZSgvXC4vZywgIlxcLiIpOwogICAgfSkpLmpvaW4oInwiKSk7CiAgfQogIGZ1bmN0aW9uIGluc2VydFNlYXJjaEFkZG9uKG4sIGUpIHsKICAgIGxldCB0ID0gMiA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMl0gPyBhcmd1bWVudHNbMl0gOiAiYWZ0ZXIiLCBpID0gMyA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbM10gPyBhcmd1bWVudHNbM10gOiAwOwogICAgY29uc3QgbyA9IEhyZWYuaW5jbHVkZXMoIm0uZG91YmFuLmNvbS9zZWFyY2giKTsKICAgIGlmICghbiB8fCAhbyAmJiAwIDwgJCgiLm8tLWp1bXAiKS5sZW5ndGggfHwgMjAgPCBpKSByZXR1cm47CiAgICBsZXQgYSwgciA9ICExOwogICAgcmV0dXJuICJzdHJpbmciID09IHR5cGVvZiBlICYmIChyID0gZS5zdGFydHNXaXRoKCItIiksIHIgJiYgKGUgPSBlLnNsaWNlKDEpKSksIGEgPSAkKGUpLAogICAgMCA9PT0gYS5sZW5ndGggPyB2b2lkIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICBpbnNlcnRTZWFyY2hBZGRvbihuLCBlLCB0LCBpICsgMSk7CiAgICB9KSwgNTAwKSA6IChwbGF5ZXJUaXRsZSA9IHB1cmlmeUtleXdvcmQobiksIHZvaWQgKHBsYXllclRpdGxlICYmIChhW3IgPyAibGFzdCIgOiAiZmlyc3QiXSgpW3RdKCc8ZGl2IGNsYXNzPSJvLS1qdW1wIj4nICsgZ2V0U2VhcmNoU291cmNlc0h0bWwocGxheWVyVGl0bGUsICFvKSArICI8L2Rpdj4iKSwKICAgICFvICYmIHNtYXJ0Q29sbGFwc2UoIi5vLS1qdW1wIGEiKSkpKTsKICB9CiAgZnVuY3Rpb24gc25pZmZJbklmcmFtZSgpIHsKICAgIGxvY2F0aW9uLmhyZWYgPT09IFNuaWZmQ2hlY2tVcmwgJiYgd2luZG93LnRvcC5wb3N0TWVzc2FnZSh7CiAgICAgIHBhZ2VJbmZvOiBwYWdlSW5mbywKICAgICAgX2lkOiBNRVNTQUdFX0lELAogICAgICBhY3Rpb246ICJlbmFibGUuc25pZmYiLAogICAgICBmcm9tOiBsb2NhdGlvbi5ocmVmCiAgICB9LCAiKiIpOwogICAgY29uc3QgbiA9IERhdGUubm93KCksIGUgPSBzZXRJbnRlcnZhbCgoZnVuY3Rpb24oKSB7CiAgICAgIGNvbnN0IHQgPSBEYXRlLm5vdygpIC0gbjsKICAgICAgaWYgKDAgPCAkKCJ2aWRlbyBzb3VyY2Vbc3JjXSwgdmlkZW9bc3JjXSIpLmxlbmd0aCkgewogICAgICAgIGNsZWFySW50ZXJ2YWwoZSksICQoInZpZGVvLCBhdWRpbyIpLmVhY2goKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICAgIGUubXV0ZWQgPSAhMCwgZS52b2x1bWUgPSAwLCBlLnBhdXNlKCk7CiAgICAgICAgICBjb25zdCB0ID0gRGF0ZS5ub3coKSwgaSA9IHNldEludGVydmFsKChmdW5jdGlvbigpIHsKICAgICAgICAgICAgY29uc3QgbiA9IERhdGUubm93KCkgLSB0OwogICAgICAgICAgICBlLm11dGVkID0gITAsIGUudm9sdW1lID0gMCwgZS5wYXVzZSgpLCBuID4gNGUzICYmIGNsZWFySW50ZXJ2YWwoaSk7CiAgICAgICAgICB9KSwgNjApOwogICAgICAgIH0pKTsKICAgICAgICBjb25zdCBuID0gJCgidmlkZW8gc291cmNlW3NyY10iKS5lcSgwKS5hdHRyKCJzcmMiKSB8fCAkKCJ2aWRlb1tzcmNdIikuZXEoMCkuYXR0cigic3JjIikgfHwgIiI7CiAgICAgICAgcmV0dXJuIG4gJiYgJCgidmlkZW8sIGF1ZGlvIikucmVtb3ZlKCksIC9eXC9bXlwvXS8udGVzdChuKSAmJiAobiA9IGxvY2F0aW9uLm9yaWdpbiArIG4pLAogICAgICAgIHZvaWQgKGlzVmFsaWRWaWRlb1VybChuKSA/IHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoewogICAgICAgICAgcGFnZUluZm86IHBhZ2VJbmZvLAogICAgICAgICAgdXNlZFRpbWU6IHQsCiAgICAgICAgICBfaWQ6IE1FU1NBR0VfSUQsCiAgICAgICAgICBhY3Rpb246ICJwbGF5LnZpZGVvIiwKICAgICAgICAgIGZyb206IGxvY2F0aW9uLmhyZWYsCiAgICAgICAgICBvcmlnaW46IGxvY2F0aW9uLmhyZWYsCiAgICAgICAgICB1cmw6IG4udHJpbSgpLAogICAgICAgICAgcGFyZW50OiAhMAogICAgICAgIH0sICIqIikgOiAvXmJsb2I6Ly50ZXN0KG4pID8gd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7CiAgICAgICAgICBwYWdlSW5mbzogcGFnZUluZm8sCiAgICAgICAgICB1c2VkVGltZTogdCwKICAgICAgICAgIF9pZDogTUVTU0FHRV9JRCwKICAgICAgICAgIGFjdGlvbjogInNuaWZmLmJsb2IiLAogICAgICAgICAgZnJvbTogbG9jYXRpb24uaHJlZiwKICAgICAgICAgIG9yaWdpbjogbG9jYXRpb24uaHJlZiwKICAgICAgICAgIHVybDogbiwKICAgICAgICAgIHBhcmVudDogITAKICAgICAgICB9LCAiKiIpIDogd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7CiAgICAgICAgICBwYWdlSW5mbzogcGFnZUluZm8sCiAgICAgICAgICB1c2VkVGltZTogdCwKICAgICAgICAgIHRleHQ6ICJOT1QgTUFUQ0ggVklERU8gVVJMIiwKICAgICAgICAgIF9pZDogTUVTU0FHRV9JRCwKICAgICAgICAgIGFjdGlvbjogImxvZyIsCiAgICAgICAgICBmcm9tOiBsb2NhdGlvbi5ocmVmLAogICAgICAgICAgb3JpZ2luOiBsb2NhdGlvbi5ocmVmLAogICAgICAgICAgdXJsOiBuLAogICAgICAgICAgcGFyZW50OiAhMAogICAgICAgIH0sICIqIikpOwogICAgICB9CiAgICAgIGNvbnN0IGkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJpZnJhbWVbc3JjXSIpOwogICAgICBpZiAoaSkgewogICAgICAgIGNvbnN0IG4gPSBpLnNjciwgZSA9IGRlY29kZVVSSUNvbXBvbmVudChuKS5tYXRjaCgvPShodHRwW14mPV0rXC4obTN1OHxtcDQpKS8pOwogICAgICAgICgvZHBsYXllci8udGVzdChuKSB8fCBpc1ZpZGVvVXJsUmVnZXgudGVzdChuKSkgJiYgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7CiAgICAgICAgICBwYWdlSW5mbzogcGFnZUluZm8sCiAgICAgICAgICB1c2VkVGltZTogdCwKICAgICAgICAgIHRleHQ6ICJpZnJhbWUgcGxheWVyIHVybCIsCiAgICAgICAgICBfaWQ6IE1FU1NBR0VfSUQsCiAgICAgICAgICBhY3Rpb246ICJsb2ciLAogICAgICAgICAgZnJvbTogbG9jYXRpb24uaHJlZiwKICAgICAgICAgIG9yaWdpbjogbG9jYXRpb24uaHJlZiwKICAgICAgICAgIHVybDogZSA/IGVbMV0gOiBuLAogICAgICAgICAgaXNNYXRjaDogZSAmJiBpc1ZhbGlkVmlkZW9VcmwoZVsxXSksCiAgICAgICAgICBwYXJlbnQ6ICEwCiAgICAgICAgfSwgIioiKSwgZSAmJiBpc1ZhbGlkVmlkZW9VcmwoZVsxXSkgJiYgKCQoImlmcmFtZSIpLnJlbW92ZSgpLCB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKHsKICAgICAgICAgIHBhZ2VJbmZvOiBwYWdlSW5mbywKICAgICAgICAgIHVzZWRUaW1lOiB0LAogICAgICAgICAgX2lkOiBNRVNTQUdFX0lELAogICAgICAgICAgYWN0aW9uOiAicGxheS52aWRlbyIsCiAgICAgICAgICBmcm9tOiBsb2NhdGlvbi5ocmVmLAogICAgICAgICAgb3JpZ2luOiBsb2NhdGlvbi5ocmVmLAogICAgICAgICAgdXJsOiBlWzFdLnRyaW0oKSwKICAgICAgICAgIHBhcmVudDogITAKICAgICAgICB9LCAiKiIpKTsKICAgICAgfQogICAgICBpZiAoNGUzIDw9IHQgJiYgaSkgcmV0dXJuIHZvaWQgY2xlYXJJbnRlcnZhbChlKTsKICAgICAgY29uc3QgbyA9IDAgPCAkKCJ2aWRlbyIpLmxlbmd0aDsKICAgICAgKHQgPj0gM2U0IHx8IDJlMyA8PSB0ICYmIG8pICYmIChjbGVhckludGVydmFsKGUpLCB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKHsKICAgICAgICBwYWdlSW5mbzogcGFnZUluZm8sCiAgICAgICAgdXNlZFRpbWU6IHQsCiAgICAgICAgaGFzVmlkZW86IG8sCiAgICAgICAgaGFzSWZyYW1lOiAhIWksCiAgICAgICAgX2lkOiBNRVNTQUdFX0lELAogICAgICAgIGFjdGlvbjogInNuaWZmLmZhaWwiLAogICAgICAgIGZyb206IGxvY2F0aW9uLmhyZWYsCiAgICAgICAgb3JpZ2luOiBsb2NhdGlvbi5ocmVmLAogICAgICAgIHBhcmVudDogITAKICAgICAgfSwgIioiKSk7CiAgICB9KSwgMTAwKTsKICB9CiAgbGV0IEhyZWYgPSBsb2NhdGlvbi5ocmVmOwogIGlmIChJcygvY29va2llLmh0bWwvKSB8fCBJcygvbVwubGVcLmNvbS8pICYmIElzTm90KC9tLmxlLmNvbVwvc2VhcmNofHNvLmxlLmNvbVwvc3xcLmxlXC5jb21cLyhwdHZcL3ZwbGF5XC98dnBsYXlfKS8pKSByZXR1cm47CiAgY29uc3QgaXNUb3AgPSB3aW5kb3cudG9wID09PSB3aW5kb3cuc2VsZiwgaXNOb3RUb3AgPSAhaXNUb3A7CiAgaWYgKGlzVG9wICYmIElzKC92d2VjYW0udGMucXEuY29tfFwudGl0YW4ubWd0di5jb20vKSAmJiAhZG9jdW1lbnQucXVlcnlTZWxlY3RvcigidmlkZW8iKSkgcmV0dXJuIHZvaWQgKElzTm90KC9taXlpbmcvKSAmJiAobG9jYXRpb24uaHJlZiA9IEhyZWYgKyAoSHJlZi5pbmNsdWRlcygiPyIpID8gIiYiIDogIj8iKSArICJtaXlpbmc9IiArIChuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSkpOwogIGNvbnN0IFBMVUdJTl9BVFRSID0gIm1peWluZyIsIFBMVUdJTl9OQU1FID0gIuC8uuC8guWFreelnlY1ODfgvILgvLsiLCBPT19TSUdOID0gIihvy5jil6HLmG8pIiwgJGh0bWwgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaHRtbCIpWzBdOwogIGlmICgkaHRtbC5nZXRBdHRyaWJ1dGUoIm1peWluZyIpID09PSBQTFVHSU5fTkFNRSkgcmV0dXJuOwogICRodG1sLnNldEF0dHJpYnV0ZSgibWl5aW5nIiwgUExVR0lOX05BTUUpOwogIGNvbnN0IF9EID0gITEsIFZFUlNJT04gPSAi5YWt56WeVjU4N+ino+aekOW8leaTjiIsIGhhc1Vuc2FmZVdpbmRvdyA9ICJ1bmRlZmluZWQiICE9IHR5cGVvZiB1bnNhZmVXaW5kb3csIGlzR00gPSAidW5kZWZpbmVkIiAhPSB0eXBlb2YgR00gJiYgaGFzVW5zYWZlV2luZG93OwogIGxldCBsb2dzRG9tOwogIGNvbnN0IHNjcmVlbldpZHRoID0gd2luZG93LnNjcmVlbi53aWR0aCwgaXNNb2JpbGUgPSA2MDAgPj0gc2NyZWVuV2lkdGggfHwgL0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpIHx8ICExLCBzdG9yZVByZWZpeCA9ICLlha3lha3op6PmnpDlvJXmk44iLCBTdG9yZSA9IHsKICAgIGdldChuKSB7CiAgICAgIGxldCBlID0gMSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0gPyBhcmd1bWVudHNbMV0gOiBudWxsOwogICAgICByZXR1cm4gcGFyc2VTdG9yZURhdGEod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKHN0b3JlUHJlZml4ICsgbiksIGUpOwogICAgfSwKICAgIHNldChuKSB7CiAgICAgIGxldCBlID0gMSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0gPyBhcmd1bWVudHNbMV0gOiBudWxsOwogICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oc3RvcmVQcmVmaXggKyBuLCBKU09OLnN0cmluZ2lmeShlKSk7CiAgICB9LAogICAgcmVtb3ZlKG4pIHsKICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHN0b3JlUHJlZml4ICsgbik7CiAgICB9CiAgfSwgR2xvYmFsU3RvcmUgPSB7CiAgICBnZXQobikgewogICAgICBsZXQgZSA9IDEgPCBhcmd1bWVudHMubGVuZ3RoICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzFdID8gYXJndW1lbnRzWzFdIDogbnVsbDsKICAgICAgcmV0dXJuIGlzR00gPyBwYXJzZVN0b3JlRGF0YShHTV9nZXRWYWx1ZShzdG9yZVByZWZpeCArIG4sIGUpLCBlKSA6IFN0b3JlLmdldChuLCBlKTsKICAgIH0sCiAgICBzZXQobikgewogICAgICBsZXQgZSA9IDEgPCBhcmd1bWVudHMubGVuZ3RoICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzFdID8gYXJndW1lbnRzWzFdIDogbnVsbDsKICAgICAgaXNHTSA/IEdNX3NldFZhbHVlKHN0b3JlUHJlZml4ICsgbiwgSlNPTi5zdHJpbmdpZnkoZSkpIDogU3RvcmUuc2V0KG4sIGUpOwogICAgfSwKICAgIHJlbW92ZShuKSB7CiAgICAgIGlzR00gPyBHTV9kZWxldGVWYWx1ZShuKSA6IFN0b3JlLnJlbW92ZShuKTsKICAgIH0KICB9LCAkID0gZ2V0JCgpLCBNQVhfWl9JTkRFWCA9IDIxNDc0ODM2NDcsIE1FU1NBR0VfSUQgPSBQTFVHSU5fTkFNRSwgUHVyaWZ5U3R5bGUgPSAiXG5kaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7dmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7d2lkdGg6IDAgIWltcG9ydGFudDtoZWlnaHQ6IDAgIWltcG9ydGFudDttYXgtd2lkdGg6IDAgIWltcG9ydGFudDttYXgtaGVpZ2h0OiAwICFpbXBvcnRhbnQ7b3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O3Bvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O2xlZnQ6IC05OTk5OXB4ICFpbXBvcnRhbnQ7b3BhY2l0eTogMCAhaW1wb3J0YW50O3BvaW50ZXItZXZlbnRzOiBub25lICFpbXBvcnRhbnQ7IiwgZGF5ID0gbmV3IERhdGUsIFNuaWZmQ2hlY2tVcmwgPSBnZXRDZG5JbWFnZVVybCgiZmUyMzAwMDEzOWEwMjNjZWRjNGMiKSwgUGxheWVyUGxheWluZ0NvdmVycyA9ICJmZThkMDAwMWU3MWI0MjFhZjQ3MDtmZTlkMDAwMWEyM2ZhNGJhMTJlNjtmZWJjMDAwMWY3ZGNhNjAxYWNhYTtmZWQ4MDAwMTQzYzFjOTk3N2YwYTtmZWRkMDAwMWY4ZGJmMTEzYTllNDtmZjE1MDAwMTczZTdhOTFiMmJkZjtmZjE4MDAwMTU4MjdiZDVhNzBmYztmZjE5MDAwMTQ5MzM2YjBlZGFkYztmZjM0MDAwMjFhZDVkYzk5YmNiYTtmZjgxMDAwMTAxOWQ3Yjk4NmNkMztmZjk4MDAwMGEwYmRkMGZmYWM3MTtmZmEwMDAwMmM3YjA4NzAzYTc5YyIudHJpbSgpLnNwbGl0KC87LyksIFBsYXllclBsYXlpbmdDb3ZlciA9IGdldENkbkltYWdlVXJsKFBsYXllclBsYXlpbmdDb3ZlcnNbKGRheS5nZXREYXkoKSArIGRheS5nZXRIb3VycygpKSAlIFBsYXllclBsYXlpbmdDb3ZlcnMubGVuZ3RoXSksIFBsYXllckxvYWRpbmdDb3ZlcnMgPSAiMTAwMDAwMDAwOGMwMGM2ZjkwOTZmOzEwMDAzMDAwMDkzOTQxMTE2ZDgxYTtkYzBlMDAwNjJiMmM1ZWI0OTNiZDtkYzBmMDAwNTQwNjRmOGMzODBmNTtkYzEwMDAwNDVjMDc1ZGQzMDY1NjtkYzExMDAwNWU4YjcyYTFjZTU4MztmZTIzMDAwMTNiYWE0Y2RlMjg5MDtmZTJmMDAwMTI5ZDAwNmMyYTEzOTtmZTM0MDAwMTM1YTQyMTI1NDQ4NjtmZTM2MDAwMWVjMzM2YTk2ZDBiYztmZTNiMDAwMGViNTNmODQ0OTAzODtmZTNjMDAwMTUwNDNkMzdkN2JlNTtmZTQyMDAwMjE4YjlmN2Y1YTU1YjtmZTQyMDAwMjE4YzVmMTFjMmVkOTtmZTQzMDAwMTA0MzQ0ODk5NDg0NjtmZTQ2MDAwMGIzZmFlNmFhMWJiMTtmZTRkMDAwMTBjZjVjNDhjOWI2YjtmZTUxMDAwMGYxZmIxOTgwMWUzODtmZTVmMDAwMTU0YTc5NDI2MTEzODtmZTYzMDAwMWIyMjJkOGE2ZWI3ZTtmZTZkMDAwMjI2NDUyZmFhZjY0MDtmZTcyMDAwMWYyNGY5ZTkzMDQ2ZjtmZTdhMDAwMTU3MDY5MjllMWQzNztmZTdkMDAwMjU0OGNmZDExNTJiYjtmZThiMDAwMWMyNzA2YmZlM2U3NztmZThmMDAwMjdmZGQ3OWRkYTdmZDtmZTk2MDAwMWIxZWEwYWE3ZTQ2MztmZWE0MDAwMmJmYWE1N2QwZWRlNDtmZWE2MDAwMTI3NDI2YjRkM2JkYTtmZWE3MDAwMDg4MWM1MzY5NDcyNDtmZWE4MDAwMmIwZmQxNjJlNzlmYTtmZWE5MDAwMTJjYTZjNDlkNjU4ZTtmZWFhMDAwMmM1OWVkOGE5ZGVkZjtmZWFkMDAwMTE3Y2E5ZmQyNTA1NDtmZWIwMDAwMTRiOThmYWU3NzdhZjtmZWIwMDAwMTRlMmM4NDIyOGVmOTtmZWIxMDAwMTQxOThjYTgwNGM5NjtmZWIzMDAwMTU1MDI4NjE5ZGI5MjtmZWI5MDAwMGZhYjBjOTM0YzdjYztmZWJjMDAwMTY0MTc0YTU3OWIxMjtmZWM1MDAwMTNjYjNmMjQ5MjA4NztmZWM2MDAwMTQ2Nzk5ZGI4MmRkYztmZWM4MDAwMTA3ZjA0ZGQ5YmVhMTtmZWNlMDAwMTQ1YzdlOGFiMzhhYztmZWNmMDAwMWYxYzM3YmE2MmUwYTtmZWQyMDAwMWQ3NGI3ZTZlZjE3YztmZWRiMDAwMGIyZmIwNjMwZDZlYztmZWUxMDAwMGZjZjllMGY4YTBlYTtmZWUyMDAwMGNiZmUxZDk0MDM1YTtmZWUyMDAwMGNiZmYxOGIwZmE3ODtmZWU5MDAwMTY2NDExNzA3ODA4NDtmZWY1MDAwMjJmYThiNWU1NDg4NDtmZWY5MDAwMTFlZDY1ZGUxYmY3MjtmZWZhMDAwMGM4ZjI1ZmJmODg5YjtmZWZkMDAwMjU1YjY5MjhmNGEzMjtmZjAwMDAwMTA4MDM4MGMxMjdhYjtmZjAwMDAwMTU3NmQ2ZDE2NGRkNTtmZjA4MDAwMTcxODg0ZTJlNDZjMDtmZjA4MDAwMTcxOGNlYmJlODUwMTtmZjA4MDAwMTcxOGViOTQ4YjFiNDtmZjEzMDAwMTBmM2RhMTcyOTBkNTtmZjE2MDAwMWNiM2ZjYzk1MmU2ODtmZjE3MDAwMDlkYjExZTJkMzU1NTtmZjFjMDAwMTE2NzVhNDQ0YTlhZjtmZjI0MDAwMTcyNDlkMTViMWI4MztmZjI1MDAwMWE4ZGMwYzRiMWUzNztmZjI2MDAwMjA4NTQwNzkwMzhlYztmZjI3MDAwMWVjMjA0OGU5NTY2OTtmZjI4MDAwMWI0MWYzN2M0ZjVhYztmZjJkMDAwMGMyMTdmNzc2Y2QwZjtmZjJmMDAwM2ExNzYwNTc0MTIyMjtmZjMyMDAwMTIwZmZiZmEzNzlkNztmZjMzMDAwMDk4YmMzZTVjNzY0ZTtmZjM2MDAwMGIyMzJjNzc5NDdjNTtmZjQ0MDAwMjkyYmJmODE2NGFmMjtmZjU1MDAwMTA1YzJjNWYwMGI2YTtmZjVlMDAwMTdmNDlhMzZiMjczNjtmZjVlMDAwMTgzMTBlYjU4MjljYTtmZjY0MDAwMGUyYmQ1NWIyNmUyNztmZjY1MDAwMTM0MzA2NmI3YTQwNztmZjZhMDAwMWYzYmIxODRkNmIwMDtmZjczMDAwMDlkNWRiZWY3ZjVlYjtmZjczMDAwMDlkNWZiMWMwYTdlYTtmZjc3MDAwMTg4YzhjMTI0Mjk3ZDtmZjhkMDAwMThlODdmNThmY2JlYztmZjk0MDAwMWM3NDc2MzUyMWQ1ZTtmZjk2MDAwMGMxZTE4MWE0ZGUwZTtmZjk4MDAwMGMwYTIwM2ViMzRiYjtmZjlhMDAwMWM3OTQ4MDQ0Mzc5ODtmZmEwMDAwMWM1MGFkYTU2NTA1YjtmZmE0MDAwMGU3NTc0MmU3MmQ3YztmZmE0MDAwMGU5MzEwNjZhZmM0NztmZmE5MDAwMGU3ZDZmOWM4MzE5ZTtmZmFkMDAwMTI0NmVjYzhkYzFjNjtmZmJhMDAwMTdiZWQ5MTQ4YTc0NDtmZmNhMDAwMGJiOWZiNWU1OWYxZjtmZmNjMDAwMGRlMWMxODg4NjIyMztmZmNkMDAwMTdlZDBiZDQ3NmFhZjtmZmQxMDAwMDg2MDUwYzQ1MjAxNTtmZmQyMDAwMDkwYjM5NTY3ZmVkNTtmZmQ0MDAwMTMzYTk5MmQ2ZmVhYTtmZmQ1MDAwMGE2YTNjMDhmMmY2NTtmZmQ3MDAwMGVmMTk5YzMyZGM3YjtmZmRiMDAwMDg0OGE2YWMxMTNmNTtmZmUyMDAwMTIxOGIzY2U2Y2NmZjtmZmUzMDAwMGEzZmM0ZTg0MjEwYztmZmU5MDAwMGRhZjFiN2JmNzI2ZDtmZmVjMDAwMTcwMjFjMDI4YjNmZDtmZmY0MDAwMGU0ZjhmMjc3YTZiZDtmZmY5MDAwMWE3ZDczMzc0NDdjZiIudHJpbSgpLnNwbGl0KC87LyksIGlzVmFsaWRVcmxSZWdleCA9IC9eKGh0dHB8XC9cLykvLCBpc1ZpZGVvVXJsUmVnZXggPSAvXC4obXA0fG0zdTh8M2dwfHdtdnxmbHZ8YXZpfHJtdmJ8bTR2KXxtM3U4cGxheS5waHAvLCB2aWRlb0V4dFJlZ2V4ID0gLyhtcDR8bTN1OHwzZ3B8d212fGZsdnxhdml8cm12YnxtNHYpLywgc2hvcnRWaWRlb1VybFJlZ2V4ID0gL1wvXC8oW15cL10rKVwvKC4qXC8pPyhbXlwvXSspXC4obXA0fG0zdTh8M2dwfHdtdnxmbHZ8YXZpfHJtdmJ8bTR2KS8sIHNob3J0VmlkZW9VcmxMb3NlUmVnZXggPSAvXC9cLyhbXlwvXSspXC8oLipbXlwvXSlcLz8obXA0fG0zdTh8M2dwfHdtdnxmbHZ8YXZpfHJtdmJ8bTR2KS8sIGlzT25seURvd25sb2FkVmlkZW9VcmxSZWdleCA9IC8udGl0YW4ubWd0di5jb20vLCBpc0ludmFsaWRTbmlmZlVybFJlZ2V4ID0gL2J0cmFjZS52aWRlby5xcS5jb218bG1zankucXEuY29tfHZsaXZlLnFxdmlkZW8udGMucXEuY29tfHF6b25lc3R5bGUuZ3RpbWcuY258aW1nLmJhaWR1LmNvbXxkcGxheWVyXC9cdysubXA0fHZpcC5md3dteTEuY258Y29tLXQtaXFpeWkuY29tfGh6MTg5Y2xvdWQub29zLWh6LmN0eXVuYXBpLmNufHZpZGVvLmRhLm1ndHYuY29tfCh0aXRhbi5tZ3R2LmNvbXxjZG4ub3NzLWNuLmFsaXl1bmNzLmNvbS5nbXMtbGlnaHRpbmcuY29tKS4rbTN1OHxqaWVzaHVvLW9renkuY29tfG1hbmhvby5jbnxcL3szfXxcLihqc3xjc3MpLywgUHVyaWZ5S2V5d29yZFJlZ2V4ID0gLy4q44CKfOOAiy4qfFstXHNdKuesrC57MSwzfVvlraPpm4bor53pg6hdLip8XHMrXGR7MiwzfVxzKiQvZywgQ29tbW9uU2VhcmNoS2V5d29yZFJlZ2V4ID0gLyh3ZHxrZXl8a2V5d29yZHxzZWFyY2h3b3JkfHF1ZXJ5fGt3fHF8c2VhcmNoc3RyKT0oW14mXD9cL1wuLV0rKXwoc2VhcmNoXC98c2VhY2hlci18cV8pKFteJlw/XC9cLi1dKykvaSwgY29sbGFwc2VOdW0gPSBpc01vYmlsZSA/IDggOiAxMjsKICBsZXQgb29QbGF5VXJsID0gIiIsIGlzU2tpcEFkVmlkZW8gPSBTdG9yZS5nZXQoImlzU2tpcEFkVmlkZW8iLCAhMCksIFNFQVJDSF9VUkxTID0gIuixhueToyAgaHR0cHM6Ly9zZWFyY2guZG91YmFuLmNvbS9tb3ZpZS9zdWJqZWN0X3NlYXJjaD9zZWFyY2hfdGV4dD0qKiAgaHR0cHM6Ly9tLmRvdWJhbi5jb20vc2VhcmNoLz90eXBlPW1vdmllJnF1ZXJ5PSoqXG5cbuKYhUFRWeeIsSAgaHR0cHM6Ly9tLmlxaXlpLmNvbS9zZWFyY2guaHRtbD9zb3VyY2U9ZGVmYXVsdCZrZXk9KiogIGh0dHBzOi8vc28uaXFpeWkuY29tL3NvL3FfKipcblxu4piFWUvkvJggIGh0dHBzOi8vc2VhcmNoLnlvdWt1LmNvbS9zZWFyY2hfdmlkZW8/a2V5d29yZD0qKiAgaHR0cHM6Ly9zby55b3VrdS5jb20vc2VhcmNoX3ZpZGVvL3FfKipcblxu4piFVFjohb4gIGh0dHBzOi8vbS52LnFxLmNvbS9zZWFyY2guaHRtbD9hY3Q9MCZrZXlXb3JkPSoqICAgaHR0cHM6Ly92LnFxLmNvbS94L3NlYXJjaC8/cT0qKlxuXG7imIVN6IqS5p6cICBodHRwczovL20ubWd0di5jb20vc28/az0qKiAgaHR0cHM6Ly9zby5tZ3R2LmNvbS9zbz9rPSoqXG5cbuKYhTE5MDUgIGh0dHBzOi8vdmlwLjE5MDUuY29tL1NlYXJjaD9xPSoqXG5cbuKYhVNP54uQICBodHRwczovL20udHYuc29odS5jb20vdXBsb2FkL2g1L20vbXNvLmh0bWw/a2V5PSoqICBodHRwczovL3NvLnR2LnNvaHUuY29tL210cz93ZD0qKlxuXG5RUee+pCAgaHR0cHM6Ly9qcS5xcS5jb20vP193dj0xMDI3Jms9NG4wS2lGMjc/d2Q9Kipcblxu55m+5bqm5pCcICBodHRwczovL3d3dy5iYWlkdS5jb20vcz93ZD0qKlxuXG7imIVC56uZICBodHRwczovL3NlYXJjaC5iaWxpYmlsaS5jb20vYWxsP2tleXdvcmQ9Kipcblxu6Iy25p2v54uQICBodHRwczovL3d3dy5jdXBmb3guY29tL3NlYXJjaD9rZXk9Kipcblzlk5TlmIAgIGh0dHBzOi8vd3d3Lm1wNGVyLmNvbS9zZWFyY2gvKipcblxu55yf5LiN5Y2hIGh0dHBzOi8vd3d3LnpoZW5idWthMi5jb20vdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0vP3dkPSoqXG5cblZJUOW9semZoiAgaHR0cHM6Ly9idWthaXZpcC5jb20vaW5kZXgucGhwL3ZvZC9zZWFyY2guaHRtbD93ZD0qKlxuXG5BazEwODAgIGh0dHBzOi8vd3d3LmFrMTA4MC5jb20vdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKlxuXG4xMDkwICBodHRwOi8vMTA5MHlzMi5jb20vc2VhcmNoLmh0bWw/d2Q9Kiomc3VibWl0PVxuXG7ov73liafkurogICBodHRwOi8vdmlwbXYudHYvaW5kZXgucGhwL3ZvZC9zZWFyY2guaHRtbD93ZD0qKiZzdWJtaXQ9XG5cbui/veWJp+WQpyAgaHR0cDovL3d3dy56anU4LmNjL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLz93ZD0qKlxuXG7ov73liafnnIsgIGh0dHBzOi8vd3d3LnpodWlqdWthbi5jb20vdm9kLXNlYXJjaC13ZC0qKi5odG1sXG5cVklQ6L+95YmnICBodHRwOi8vemh1aWp1OC52aXAvaW5kZXgucGhwL3ZvZC9zZWFyY2guaHRtbD93ZD0qKiZzdWJtaXQ9XG5cbuaegeWTgSBodHRwczovL3d3dy5qcHlzdmlwLm5ldC92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqJnN1Ym1pdD1cblxu56We6amsICBodHRwczovL3d3dy5zaGVubWE0NDgwLmNvbS9zZWFyY2gvLS0tLS0tLS0tLS0tLS8/d2Q9Kipcblxu6aOe5p6B6YCfICBodHRwOi8vbS5mZWlqaXN1OC5jb20vc2VhcmNoLyoqICBodHRwOi8vZmVpamlzdTguY29tL3NlYXJjaC8qKlxuXG7ov6rov6ogIGh0dHA6Ly93d3cudHY1NTIuY29tL2luZGV4LnBocC92b2Qvc2VhcmNoLmh0bWw/d2Q9Kiomc3VibWl0PVxuXG7mgJ3lj6QgIGh0dHBzOi8vd3d3LnNpZ3V5eS5jb20vc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKiZzdWJtaXQ9blxuOTHnvo7liacgIGh0dHBzOi8vOTFtancuY29tLz9zPSoqXG5cbjkx5pel5YmnICBodHRwOi8vd3d3Lnd3bXVsdS5jb20vc2VhcmNoLyoqXG5cblRWQiAgaHR0cHM6Ly93d3cuaGt0dnliLmNvbS92b2Qvc2VhcmNoLmh0bWw/d2Q9KipcblxuWlh6aiAgaHR0cHM6Ly93d3cuenh6ai5tZS92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqXG5cbkRZc2YgIGh0dHBzOi8vd3d3LmJkZHlzZi5jb20vdm9kc2VhcmNoLmh0bWw/d2Q9Kiomc3VibWl0PVxuXG7ppa3lm6IgIGh0dHBzOi8vZmFudHVhbi50di92b2RzZWFyY2guaHRtbD93ZD0qKiZzdWJtaXQ9XG5cbuW5sumlrSAgaHR0cHM6Ly93d3cuZ2FuZmFudHYuY29tL3NlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9Kiomc3VibWl0PVxuXOiTneWFiSAgaHR0cHM6Ly93d3cuODg4a2t0di5jb20vdm9kL3NlYXJjaC5odG1sP3dkPSoqJnN1Ym1pdD1uXG7kuYzpvp8gIGh0dHBzOi8vd3d3Lnd1Z3VpeXkuY29tL3NlYXJjaC8tLS0tLS0tLS0tLS0tLz93ZD0qKiZzdWJtaXQ9XG5cbkNvS2VtdiAgaHR0cHM6Ly9jb2tlbXYubWUvdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKiZzdWJtaXQ9XG5cbkNob2s4ICBodHRwOi8vd3d3LmNob2s4LmNvbS92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqJnN1Ym1pdD1cblxu5aSn5biI5YWEICBodHRwczovL3R2LmNpL3NiL2tlN25oWmUzYy0uaHRtbD93ZD0qKiZzdWJtaXQ9XG5cbuKRpOKRpOKRpCAgaHR0cHM6Ly93d3cuNTU1ZHkxLmNvbS92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqJnN1Ym1pdD1cblxu5aSq5YidICBodHRwczovL3d3dy50Y21vdmUuY29tL3NlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9Kipcblxu5bCP5bCPICBodHRwczovL3dzZHkudG9wL3ZvZHNlYXJjaC9zby5odG1sP3dkPSoqXG5cbueLrOaSreW6kyAgaHR0cHM6Ly9kdWJva3Uuc3Uvdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKiZzdWJtaXQ9XG5cbuW3qOWlveeciyAgaHR0cHM6Ly9qdWhhb2thbi5jYy92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqJnN1Ym1pdD1cblxu5p6r5p6X572RICBodHRwczovL2ltYXBsZS5jby9zZWFyY2guaHRtbD93ZD0qKiZzdWJtaXQ9XG5c6Zi/5oi/ICBodHRwczovL2J3bDg3LmNvbS9zZWFyY2gvLS0tLS0tLS0tLS0tLS8/d2Q9Kiomc3VibWl0PVxuXOe0oOeZveeZvSAgaHR0cHM6Ly93d3cuc3ViYWliYWkuY29tLz9zPSoqblxuQkTkuIvovb0gIGh0dHBzOi8vd3d3LmJkLWZpbG0uY29tL3NlYXJjaC5qc3B4P3E9KipcblxuTVA05LiL6L29ICBodHRwczovL3d3dy51dW1wNC5uZXQvc2VhcmNoLSoqLmh0bVxuXG5BR0UgIGh0dHBzOi8vd3d3LmFnZWZhbnMuY2Mvc2VhcmNoP3F1ZXJ5PSNrZXl3b3JkIyZwYWdlPTFcblxu5qix6IqxICBodHRwczovL3d3dy55aGRtei5jb20vc2VhcmNoLnBocD9zZWFyY2h3b3JkPSoqXG5cbui/heaSrSAgaHR0cHM6Ly93d3cueGJkbS5vcmcvc2VhcmNoLnBocD9zZWFyY2h3b3JkPSoqXG5cblp6ekZ1biAgaHR0cDovL3d3dy56enpmdW4uY29tL3ZvZF9zZWFyY2guaHRtbD93ZD0qKlxuXG7lpq7lj68gIGh0dHA6Ly93d3cubmljb3R2Lm1lL3ZpZGVvL3NlYXJjaC8qKi5odG1sXG5cbuasoeWFgyAgaHR0cHM6Ly9jeWxvbGkuY29tL3ZvZHNlYXJjaC8qKi0tLS0tLS0tLS0xLS0tL1xuXG5NaWthbiAgaHR0cHM6Ly9taWthbmFuaS5tZS9Ib21lL1NlYXJjaD9zZWFyY2hzdHI9KioiOwogIGNvbnN0IEFERE9OUyA9IFsgewogICAgbmFtZTogIuWTlOWTqeWTlOWTqSIsCiAgICBtYXRjaDogIi5iaWxpYmlsaS5jb20iLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvXC9zZWFyY2h8c2VhcmNoXC4vLAogICAgICBqdW1wOiAiI2FsbC1saXN0IHwgYXBwZW5kLCAuaW5kZXhfX2JvYXJkX19zcmMtc2VhcmNoLWJvYXJkLSIKICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvXC9iYW5ndW1pXC9wbGF5XC8vLAogICAgICB0aXRsZTogIi5tZWRpYS10aXRsZSwgLmVwLWluZm8tdGl0bGUiLAogICAgICBqdW1wKCkgewogICAgICAgICQkKCIuZXAtaW5mby1pbWFnZSBpbWcsIC5tZWRpYS1jb3ZlciBpbWciLCAoZnVuY3Rpb24oKSB7CiAgICAgICAgICBjb25zdCBuID0gJCgiLm1lZGlhLXRpdGxlLCAuZXAtaW5mby10aXRsZSIpLmVxKDApLnRleHQoKTsKICAgICAgICAgIG4gJiYgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGluc2VydFNlYXJjaEFkZG9uKG4sICIubWVkaWEtd3JhcHBlciwgLmVwLWxpc3QtcHJlLXdyYXBwZXIiKTsKICAgICAgICAgIH0pLCA1MDApOwogICAgICAgIH0pKTsKICAgICAgfQogICAgfSwKICAgIGhpZGU6ICIuaW5kZXhfX29wZW5BcHBCdG5fX3NyYy1jb21tb25Db21wb25lbnQtdG9wQXJlYS0sIC5pbmRleF9fY29udGFpbmVyX19zcmMtY29tbW9uQ29tcG9uZW50LWJvdHRvbU9wZW5BcHAtLCAuYmlsaS1hcHAsIC5yZWNvbS13cmFwcGVyLCAuYi1mb290ZXIsIC5vcGVuLWFwcC1iYXIsIC5vcGVuLWFwcC1mbG9hdCwgLm1vcmUtcmV2aWV3LXdyYXBwZXIsICNiYW5uZXJBZCwgLmJhbm5lci1jYXJkLCAjc2xpZGVfYWQiCiAgfSwgewogICAgbmFtZTogIuiFvuiur+inhumikSIsCiAgICBtYXRjaDogInYucXEuY29tIiwKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL1wvc2VhcmNoLywKICAgICAganVtcDogIiNyZXN1bHQsIC53cmFwcGVyX21haW4gPiAubW9kX3BhZ2VzIgogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9cLyhjb3ZlcnxwbGF5fHhcL2NvdmVyfHhcL3BhZ2V8eFwvcGxheXx4XC9tXC9jb3Zlcnx4XC9tXC9wYWdlfHhcL21cL3BsYXkpLywKICAgICAgdmlwOiAiI3ZpcF90aXRsZSwgLlVfYm94X2JnX2EsIC5wbGF5ZXJfaGVhZGxpbmUsIC5tb2RfdmlkZW9faW5mbyIsCiAgICAgIHRpdGxlOiAiLm1vZF92aWRlb19pbmZvIC52aWRlb190aXRsZSwgLl9tYWluX3RpdGxlLCAucGxheWVyX3RpdGxlIiwKICAgICAgZml4VXJsKG4pIHsKICAgICAgICBpZiAobi5pbmNsdWRlcygiY2lkPSIpKSB7CiAgICAgICAgICBjb25zdCBlID0gbi5tYXRjaCgvY2lkPShcdyspLylbMV07CiAgICAgICAgICBsZXQgdCA9IG4ubWF0Y2goL3ZpZD0oXHcrKS8pOwogICAgICAgICAgcmV0dXJuIHQgPSB0ID8gIi8iICsgdFsxXSA6ICIiLCAiaHR0cHM6Ly92LnFxLmNvbS94L2NvdmVyLyIgKyBlICsgdCArICIuaHRtbCI7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuLmluY2x1ZGVzKCIveC9jb3ZlciIpID8gbi5yZXBsYWNlKC9cLmh0bWwuKi8sICIuaHRtbCIpIDogbjsKICAgICAgfSwKICAgICAgYXN5bmMganMoKSB7CiAgICAgICAgaWYgKHNraXBBZFZpZGVvV3JhcHBlcigoZnVuY3Rpb24oKSB7CiAgICAgICAgICBpc01vYmlsZSA/IHNraXBBZFZpZGVvKCIudHhwX3ZpZGVvX2NvbnRhaW5lciB2aWRlb1tzcmNdIiwgIS92bGl2ZS5xcXZpZGVvLnRjLnFxLmNvbS8udGVzdCh2aWRlby5zcmMpKSA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi50eHBfYWQgdmlkZW9bc3JjXSIpICYmICgkKCIudHhwX2FkIHZpZGVvW3NyY10iKS5lYWNoKChmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgICAgIHNraXBBZFZpZGVvKGUpOwogICAgICAgICAgfSkpLCB0b2dnbGVTa2lwQWRUaXAoIi50eHBfYWQiKSk7CiAgICAgICAgfSkpLCBpc01vYmlsZSkgewogICAgICAgICAgbGV0IG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjcGxheV9zeW5jIiksIGUgPSBuICYmIG4udmFsdWU7CiAgICAgICAgICBpZiAoIWUpIHsKICAgICAgICAgICAgY29uc3QgbiA9IChhd2FpdCBmZXRjaChsb2NhdGlvbi5ocmVmKS50aGVuKChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgcmV0dXJuIG4udGV4dCgpOwogICAgICAgICAgICB9KSkpLm1hdGNoKC9pZD1bJyJdcGxheV9zeW5jLis/dmFsdWU9WyciXShbXiciXSspLyk7CiAgICAgICAgICAgIG4gJiYgKGUgPSBuWzFdKTsKICAgICAgICAgIH0KICAgICAgICAgIGUgJiYgKGUgPSBKU09OLnBhcnNlKGRlY29kZVVSSUNvbXBvbmVudChlKSksIGNvbnNvbGUuY29uc29sZS5sb2coZSkpOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGhpZGU6ICcubW9kX3NvdXJjZSwgLnZpZGVvX2Z1bmN0aW9uLCAubW9kX3Byb21vdGlvbiwgI3ZpcF9wcml2aWxlZ2UsICN2aXBfYWN0aXZpdHksIC5VX2JnX2IsIC5idG5fb3Blbl92LCAuYnRuX29wZW5hcHAsICN2aXBfaGVhZGVyLCAuYnRuX3VzZXJfaGQsIC5tb2Rfc2lkZXNsaXBfcHJpdmlsZWdlcywgLm1vZF9nYW1lX3JlYywgLm1vZF9zb3VyY2UsIC5tb2RfcHJvbW90aW9uLCAubW9kX3NpZGVzbGlwX2gsIC5idG5fb3BlbiwgLmJ0bl9wYXksIC5tb2RfYm94X2xhc3R2aWV3LCAubW9kX3ZpcF9wb3B1cCwgLm1vZF92aXBfcG9wdXAgKyAubWFza19sYXllciwgdHhwZGl2W2RhdGEtcm9sZT0iaGQtYWQtYWRhcHRlci1pbnRlcmFjdGl2ZWxheWVyIl0sIC5tb2RfYWQsIC50dnBfYXBwX2JhciwgLnR4cC13YXRlcm1hcmssIC5tb2RfcmVjb21tZW5kJywKICAgIGNzczogIlxuYm9keSwgI3ZpcF90aXRsZSB7cGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDt9Lm1vZF9lcGlzb2Rlc19udW1iZXJzLmlzLXZpcCAuaXRlbSB7d2lkdGg6IGF1dG87cGFkZGluZzogMCAxZW07fS5VX2h0bWxfYmcgLmNvbnRhaW5lciB7cGFkZGluZy1ib3R0b206IDMwcHg7fS5tb2RfcGxheSAubW9kX3BsYXllcl92aXB0aXBzIC5idG5fdHJ5IHtsZWZ0OiAzMCU7fS5tb2RfYm94IC5tb2RfdmlkZW9faW5mbyB7bWFyZ2luLXRvcDogMWVtO30iCiAgfSwgewogICAgbmFtZTogIueIseWlh+iJuiIsCiAgICBtYXRjaDogIi5pcWl5aS5jb20iLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvXC9zZWFyY2h8c29cLmlxaXlpLywKICAgICAganVtcDogIi0ubS1ib3gsIC5sYXlvdXQtbWFpbiwgLnNlYXJjaC1jb24tcGFnZSIKICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvXC92Xy8sCiAgICAgIHZpcDogJ2RpdltuYW1lPSJtLXZpZGVvSW5mbyJdLCAjYmxvY2stQywgLm8tLXBjIC50dy1wbGF5LWluZm8td3JhcCAudHctcGxheS1pbmZvLCAuby0tbSAudHctbS1wbGF5LWluZm8gLm0tcGxheS1pbnRybycsCiAgICAgIHRpdGxlOiAiI3dpZGdldC12aWRlb3RpdGxlLCAudmlkZW8tdGl0bGUsIC5jLXRpdGxlLWxpbmssIC5wbGF5ZXItdGl0bGUgYSwgLnR3LXBsYXktdGl0bGUgLmRyYW1hLW5hbWUsIC50dy1wbGF5LXRpdGxlIiwKICAgICAgZml4VXJsOiBuID0+IG4ucmVwbGFjZSgvXC5odG1sLiovLCAiLmh0bWwiKS5yZXBsYWNlKCJ0dy4iLCAid3d3LiIpLAogICAgICBqcygpIHsKICAgICAgICBsZXQgbiA9IFtdLCBlID0gKCQoJ1tuYW1lPSJhcHBsZS1pdHVuZXMtYXBwIl0nKS5hdHRyKCJjb250ZW50IikgfHwgIiIpLm1hdGNoKC9haWQ9XGR7Mix9Lyk7CiAgICAgICAgaWYgKGUpIHsKICAgICAgICAgIGZldGNoKCJodHRwczovL3Bjdy1hcGkuaXFpeWkuY29tL2FsYnVtcy9hbGJ1bS9hdmxpc3RpbmZvP3BhZ2U9MSZzaXplPTk5OTkmIiArIGVbMF0pLnRoZW4oKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgcmV0dXJuIG4uanNvbigpOwogICAgICAgICAgfSkpLnRoZW4oKGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgbiA9IGUuZGF0YS5lcHNvZGVsaXN0OwogICAgICAgICAgfSkpOwogICAgICAgICAgbGV0IHQgPSAwOwogICAgICAgICAgc2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBsZXQgZSA9ICsoJCgiLnF5LWVwaXNvZGUtbnVtIC5zZWxlY3QtaXRlbS5zZWxlY3RlZCAuc2VsZWN0LWxpbmsiKS50ZXh0KCkgfHwgMCk7CiAgICAgICAgICAgIGlmIChlICYmIGUgIT09IHQpIHsKICAgICAgICAgICAgICB0ID0gZTsKICAgICAgICAgICAgICBsZXQgaSA9IG5bdCAtIDFdOwogICAgICAgICAgICAgIGlmIChpKSB7CiAgICAgICAgICAgICAgICBsZXQgbiA9IGkucGxheVVybC5yZXBsYWNlKC9odHRwcz86LywgbG9jYXRpb24ucHJvdG9jb2wpOwogICAgICAgICAgICAgICAgaWYgKG4gIT09IG9vUGxheVVybCkgewogICAgICAgICAgICAgICAgICBjb25zdCBlID0gb29QbGF5VXJsIHx8IGxvY2F0aW9uLmhyZWY7CiAgICAgICAgICAgICAgICAgIG9vUGxheVVybCA9IG47CiAgICAgICAgICAgICAgICAgIGNvbnN0IHQgPSAoJCgiLnF5LWVwaXNvZGUtbnVtIC5zZWxlY3QtaXRlbS5zZWxlY3RlZCAuaWNvbi10ciBpbWciKS5hdHRyKCJzcmMiKSB8fCAiIikuaW5jbHVkZXMoIi1wcmUtIik7CiAgICAgICAgICAgICAgICAgIEUuZW1pdCgidXJsLmNoYW5nZSIsIHsKICAgICAgICAgICAgICAgICAgICBvbGRVcmw6IGUsCiAgICAgICAgICAgICAgICAgICAgbmV3VXJsOiBuLAogICAgICAgICAgICAgICAgICAgIGF1dG9QbGF5OiAhdAogICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pLCAyMDApOwogICAgICAgIH0KICAgICAgICBpZiAoaXNNb2JpbGUpIHJldHVybjsKICAgICAgICBsZXQgdCA9IDA7CiAgICAgICAgc2tpcEFkVmlkZW9XcmFwcGVyKChmdW5jdGlvbigpIHsKICAgICAgICAgIGlmICgwID09PSB0ICYmIDAgPCAkKCIuY3VwaWQtcHVibGljLXRpbWUiKS5sZW5ndGggJiYgIm5vbmUiICE9PSAkKCIuY3VwaWQtcHVibGljLXRpbWUiKS5jc3MoImRpc3BsYXkiKSkgewogICAgICAgICAgICBnZXRHbG9iYWwoIkRhdGUiKS5ub3cgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICByZXR1cm4gKG5ldyB3aW5kb3cuRGF0ZSkuZ2V0VGltZSgpICsgKHQgKz0gMWU0KTsKICAgICAgICAgICAgfSwgc2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHQgPSAwOwogICAgICAgICAgICB9KSwgNmU1KTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuaXFwLXBsYXllciB2aWRlbyIpOwogICAgICAgICAgaWYgKG4gJiYgIW4uaXNTa2lwICYmIDEgPCBuLnJlYWR5U3RhdGUgJiYgMCA8ICQoIi5ib3R0b20tcHVibGljIikubGVuZ3RoICYmICJub25lIiAhPT0gJCgiLmJvdHRvbS1wdWJsaWMiKS5jc3MoImRpc3BsYXkiKSkgewogICAgICAgICAgICBjb25zdCBuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnNraXBwYWJsZS1hZnRlciIpOwogICAgICAgICAgICBuICYmICFuLmlzU2tpcENsaWNrICYmIChpc1NraXBDbGljayA9ICEwLCBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICBuLmNsaWNrKCksIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgbi5pc1NraXBDbGljayA9ICExOwogICAgICAgICAgICAgIH0pLCAxZTMpOwogICAgICAgICAgICB9KSwgMWUzKSk7CiAgICAgICAgICB9CiAgICAgICAgfSkpOwogICAgICB9CiAgICB9LAogICAgaGlkZTogJy5tLWlxeURvd24sIC5oZWFkZXItbG9naW4gKyBkaXYsIC5tLXZpZGVvLWFjdGlvbiwgZGl2W25hbWU9Im0tdmlwUmlnaHRzIl0sIGRpdltuYW1lPSJtLWV4dGVuZEJhciJdLCAubS1pcXlsaW5rLWRpdmVyc2lvbiwgLm0taXF5bGluay1ndWlkZSwgLmMtb3BlblZpcCwgLmMtc2NvcmUtYnRuLCAubS12aWRlb1VzZXItc3BhY2luZywgLm0tcHAtZW50cmFuY2UsIC5tLWhvdFdvcmRzLWJvdHRvbSwgZGl2W3RlbXBsYXRlLXR5cGU9IkFMQlVNIl0gLm0tcGxheWVyLXRpcCwgLmlxcC1ib3gtaW50ZWdyYWwsIC5idG4tdGlja2V0LCAuYnRuLXl1eXVlLCAuYnRuLWRvd25sb2FkLCAubS1pcXlEb3duLCAuaXFwLXBsYXllciBkaXZbYWRpZF0sIC5kZXRhaWwtc2QsIC5zY3JvbGwtYW5jaG9yID4gKjpub3QoOmxhc3QtY2hpbGQpLCAjaVByb2dyZXNzIH4gZGl2W3N0eWxlXScsCiAgICBjc3M6ICcucGFnZV9wbGF5IHtwYWRkaW5nLWJvdHRvbTogMDt9ZGl2W25hbWU9Im0tdmlkZW9JbmZvIl0ge3BhZGRpbmctdG9wOiAxZW07fS5tLWJveC1pdGVtcyAuby0tYWxidW0taXRlbSB7Ym9yZGVyLXJhZGl1czogMC4wNWVtO2JhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7Y29sb3I6ICM0OTUwNTc7cGFkZGluZzogMC41ZW0gMWVtO2Rpc3BsYXk6IGlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDogY2VudGVyO2FsaWduLWl0ZW1zOiBjZW50ZXI7bWFyZ2luOiAwLjI1ZW07Zm9udC13ZWlnaHQ6IGJvbGQ7fS5tLXZpZGVvLXBsYXllciAjby0tcGxheWVyLWlmcmFtZSB7cGFkZGluZy10b3A6IDU2LjI1JTt0b3A6IDUwJTt0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7fS5xeS1oZWFkZXIgLmhlYWRlci13cmFwIHt6LWluZGV4OiAnICsgTUFYX1pfSU5ERVggKyAiO30iCiAgfSwgewogICAgbmFtZTogIuS8mOmFtyIsCiAgICBtYXRjaDogL3lvdWt1LmNvbXxzb2t1LmNvbS8sCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC9zb2t1LmNvbVwvbS4rcT18eW91a3UuY29tXC9zZWFyY2hfdmlkZW8vLAogICAgICBqdW1wOiAnI2JwbW9kdWxlLW1haW4sIC55a19yZXN1bHQsIGRpdltjbGFzc149InBhZ2luYXRpb24tYm94Il0sIC55ay1mb290ZXIgfCBiZWZvcmUnCiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL3lvdWt1XC5jb21cL1thdl0vLAogICAgICB2aXA6ICIuaDUtZGV0YWlsLWluZm8sIC5wbGF5ZXItdGl0bGUiLAogICAgICB0aXRsZTogIi5wbGF5ZXItdGl0bGUgLnN1YnRpdGxlIGEsIC5tb2R1bGUtbmFtZSBoMSwgLmFudGhvbG9neS10aXRsZS13cmFwIC50aXRsZSwgLnRpdGxlLWxpbmsiLAogICAgICBmaXhVcmw6ICEwLAogICAgICBqcygpIHsKICAgICAgICBpc01vYmlsZSB8fCAoc2tpcEFkVmlkZW9XcmFwcGVyKChmdW5jdGlvbigpIHsKICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5oNS1leHQtbGF5ZXIgdmlkZW9bc3JjXSIpICYmICgkKCIuaDUtZXh0LWxheWVyIHZpZGVvW3NyY10iKS5lYWNoKChmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgICAgIGUubXV0ZWQgPSAhMCwgZS52b2x1bWUgPSAwLCBza2lwQWRWaWRlbyhlKTsKICAgICAgICAgIH0pKSwgdG9nZ2xlU2tpcEFkVGlwKCIuaDUtZXh0LWxheWVyIikpOwogICAgICAgIH0pKSwgJCQoIi5oNS1leHQtbGF5ZXIgdmlkZW9bc3JjXSIsIChmdW5jdGlvbigpIHsKICAgICAgICAgIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAkKCIuaDUtZXh0LWxheWVyLCAueWstdHJpZ2dlci1sYXllciIpLmFkZENsYXNzKCJvLS1oaWRlIik7CiAgICAgICAgICAgIGxldCBuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnlvdWt1LXBsYXllciB2aWRlbyIpOwogICAgICAgICAgICBpZiAoIW4pIHJldHVybjsKICAgICAgICAgICAgbi5tdXRlZCA9ICExLCAuMDEgPj0gbi52b2x1bWUgJiYgKG4udm9sdW1lID0gLjQpLCBuLnBhdXNlZCAmJiBuLnBsYXkoKTsKICAgICAgICAgICAgbGV0IGUgPSAhMTsKICAgICAgICAgICAgJCgiLmg1LWxheWVyLWNvbmF0aW5lciIpLmNzcygiY3Vyc29yIiwgInBvaW50ZXIiKS5vZmYoImNsaWNrIikub24oImNsaWNrIiwgKGZ1bmN0aW9uKHQpIHsKICAgICAgICAgICAgICAkKHQudGFyZ2V0KS5oYXNDbGFzcygiaDUtbGF5ZXItY29uYXRpbmVyIikgJiYgKHQucHJldmVudERlZmF1bHQoKSwgdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSwKICAgICAgICAgICAgICBlID0gIW4ucGF1c2VkLCBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIG4ucGF1c2VkID09PSBlIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5oNXBsYXllci1kYXNoYm9hcmQgLmNvbnRyb2wtcGxheS1pY29uIikuY2xpY2soKTsKICAgICAgICAgICAgICB9KSwgMTAwKSk7CiAgICAgICAgICAgIH0pKTsKICAgICAgICAgIH0pLCAxZTMpOwogICAgICAgIH0pKSwgJCQoIi5xdWFsaXR5LWRhc2hib2FyZCAueW91a3VfdmlwX3BheV9idG4sIC5xdWFsaXR5LWRhc2hib2FyZCAubG9naW4tY2FudXNlIiwgKGZ1bmN0aW9uKCkgewogICAgICAgICAgJCgiLnF1YWxpdHktZGFzaGJvYXJkIC55b3VrdV92aXBfcGF5X2J0biwgLnF1YWxpdHktZGFzaGJvYXJkIC5sb2dpbi1jYW51c2UiKS5yZW1vdmVDbGFzcygieW91a3VfdmlwX3BheV9idG4gZGlzYWJsZSBsb2dpbi1jYW51c2UiKSwKICAgICAgICAgICQoIi5xdWFsaXR5LWl0ZW0iKS5vbigiY2xpY2siLCAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICQoIi5oNXBsYXllci1kYXNoYm9hcmQgLmNvbnRyb2wtcGxheS1pY29uIikuaGFzQ2xhc3MoImNvbnRyb2wtcGF1c2UtaWNvbiIpIHx8ICQoIi5oNS1sYXllci1jb25hdGluZXIiKS5nZXQoMCkuY2xpY2soKSwKICAgICAgICAgICAgICBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICQoIi5oNXBsYXllci1kYXNoYm9hcmQgLmNvbnRyb2wtcGxheS1pY29uIikuaGFzQ2xhc3MoImNvbnRyb2wtcGF1c2UtaWNvbiIpIHx8ICQoIi5oNS1sYXllci1jb25hdGluZXIiKS5nZXQoMCkuY2xpY2soKTsKICAgICAgICAgICAgICB9KSwgMTUwMCk7CiAgICAgICAgICAgIH0pLCAxNTAwKTsKICAgICAgICAgIH0pKTsKICAgICAgICB9KSkpOwogICAgICB9CiAgICB9LAogICAgaGlkZTogJy5oNS1kZXRhaWwtZ3VpZGUsIC5oNS1kZXRhaWwtYWQsIC5icmllZi1idG0sIC5zbWFydEJhbm5lckJ0biwgLmNtdC11c2VyLWFjdGlvbiwgI3JpZ2h0LXRpdGxlLWFkLWJhbm5lciwgLkNvcm5lci1jb250YWluZXIsIC55b3VrdS1sYXllci13dWxpYW8sIC5xci13cmFwLCAucXVhbGl0eS1pdGVtW2NsYXNzKj0icCJdIC52aXAtbGFiZWwsIC5hd2FyZC1wYXNzLCAuaWNvbnNob3VjYW5nIH4gZGl2IC5tb2RhbC1wb3NpdGlvbi1jb250YWluZXIsIC5qcy10b3AtaWNvbicsCiAgICBjc3M6ICJcbiNicG1vZHVsZS1wbGF5cGFnZS1sZWZ0dGl0bGUge2hlaWdodDogYXV0byAhaW1wb3J0YW50O30ubGVmdC10aXRsZSAubGVmdC10aXRsZS1jb250ZW50LXdyYXAge3dpZHRoOiAxMDAlO30uc2VhcmNoLWJ1dHRvbi1ib3gge2Rpc3BsYXk6IGlubGluZS1ibG9jazt9IgogIH0sIHsKICAgIG5hbWU6ICLlnJ/osYYiLAogICAgbWF0Y2g6ICIudHVkb3UuY29tIiwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9cL3ZcLy8sCiAgICAgIHZpcDogIi5wbGF5LXZpZGVvLWRlc2MsIC50ZC1wbGF5X19iYXNlaW5mbyIsCiAgICAgIHRpdGxlOiAiLnRkLWxpc3Rib3hfX3RpdGxlLCAudmlkZW8tZGVzYy10aXRsZSIsCiAgICAgIGZpeFVybDogITAKICAgIH0sCiAgICBoaWRlOiAiLnZpZGVvLXBsYXllci10b3BiYXIsIC50ZC1oNV9fcGxheWVyX19hcHBndWlkZSwgI3R1ZG91LWZvb3RlciwgLmRyb3Bkb3duX19wYW5lbF9fY29uIgogIH0sIHsKICAgIG5hbWU6ICLoipLmnpwiLAogICAgbWF0Y2g6ICIubWd0di5jb20iLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvXC9zby8sCiAgICAgIGp1bXA6ICIjcGFnaW5hdG9yLCAuaGl0dl9wYWdlLCAtLnJlc3VsdC1ib3ggLm1lZGlhIiwKICAgICAga2V5d29yZDogL2tbLT1dKFteJlw/XC9cLl0rKS8KICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvXC9bYmxdXC8vLAogICAgICB2aXA6IFsgIi54dWFuamkgfCBiZWZvcmUiLCAiLnYtcGFuZWwtYm94LCAuY29udHJvbC1sZWZ0IiBdLAogICAgICB0aXRsZTogIi52LXBhbmVsLXRpdGxlLCAudnQtdHh0LCAubS1wbGF5ZXItb3BlbiAuY29udHJvbC1sZWZ0IC50aXRsZSIsCiAgICAgIGZpeFVybDogITAsCiAgICAgIGpzKCkgewogICAgICAgIGxldCBuOwogICAgICAgIHNraXBBZFZpZGVvV3JhcHBlcigoZnVuY3Rpb24oKSB7CiAgICAgICAgICBpc01vYmlsZSB8fCAobiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi52aWRlbyB2aWRlb1tzcmNdIikpICYmIC92aWRlby5kYS5tZ3R2LmNvbS8udGVzdChuLnNyYykgJiYgKHNraXBBZFZpZGVvKG4pLAogICAgICAgICAgdG9nZ2xlU2tpcEFkVGlwKCIudmlkZW8gY29udGFpbmVyIikpOwogICAgICAgIH0pKTsKICAgICAgfQogICAgfSwKICAgIGhpZGU6ICIuYWQtYmFubmVyLCAudmlkZW8tYXJlYS1iYXIsIC52aWRlby1lcnJvciAuYnRuLCAubS12aXAtbGlzdCwgLm0tdmlwLWxpc3QgKyBkaXY6bm90KFtjbGFzc10pLCAudG9hcHAsIC52aWRlby1jb21tZW50IC5mdCwgLm1nLWFwcC1zd2lwLCBtYW5nby1wbHVnaW4tYWQsIG1hbmdvLWNvbnRyb2wtdGlwIiwKICAgIGNzczogIi5tLXBsYXllci1vcGVuIC5jb250cm9sLWxlZnQge2Zsb2F0OiB1bnNldCAhaW1wb3J0YW50O30iCiAgfSwgewogICAgbmFtZTogIuaQnOeLkCIsCiAgICBtYXRjaDogLyhmaWxtfHR2KVwuc29odVwuY29tLywKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogLyhrZXl8d2QpPS8sCiAgICAgIGp1bXA6ICIuc3NNb3JlIHwgYmVmb3JlLCAuc2VsZWN0LWNvbnRhaW5lciB8IGJlZm9yZSIKICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvXC8odnxhbGJ1bVwvfHBob25lX3BsYXlfZmlsbXxcZCtcL25cZCsuc2h0bWwpLywKICAgICAgdmlwOiAiLnRpdGxlLXdyYXAsIC52aWRlb0luZm8sIC50dy1pbmZvLCAucGxheWVyLWRldGFpbCwgLm1vdmllLWluZm8tY29udGVudCIsCiAgICAgIHRpdGxlOiAiI3ZpbmZvYm94IGgyLCAudC1pbmZvLCAubW92aWUtdCBoMyIsCiAgICAgIGZpeFVybChuKSB7CiAgICAgICAgaWYgKC9waG9uZV9wbGF5X2ZpbG0uK2NoYW5uZWxlZD0vLnRlc3QobikpIHsKICAgICAgICAgIGNvbnN0IGUgPSBuLm1hdGNoKC9jaGFubmVsZWQ9KFx3KykvKVsxXTsKICAgICAgICAgIHJldHVybiAiaHR0cHM6Ly9maWxtLnNvaHUuY29tL2FsYnVtLyIgKyBuLm1hdGNoKC9haWQ9KFx3KykvKVsxXSArICIuaHRtbD9jaGFubmVsZWQ9IiArIGU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuOwogICAgICB9LAogICAgICBqcygpIHsKICAgICAgICBsZXQgbjsKICAgICAgICBza2lwQWRWaWRlb1dyYXBwZXIoKGZ1bmN0aW9uKCkgewogICAgICAgICAgaXNNb2JpbGUgfHwgKG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIueC12aWRlby1hZHYgdmlkZW9bc3JjXSIpKSAmJiAoc2tpcEFkVmlkZW8obiksCiAgICAgICAgICB0b2dnbGVTa2lwQWRUaXAoIi54LXZpZGVvLWFkdiIpKTsKICAgICAgICB9KSk7CiAgICAgIH0KICAgIH0sCiAgICBoaWRlOiAiLmFjdHYtYmFubmVyLCAuYnRuLXh6LWFwcCwgLnR3aW5mb19pY29ud3JhcCwgLmJ0bi1jb21tZW50LWFwcCwgI2FkX2Jhbm5lciwgLmFkdmVydGlzZSwgLm1haW4tYWQtdmlldy1ib3gsIC5mb290LnNvaHUtc3dpcGVyLCAuYXBwLXN0YXItdmJveCwgLmFwcC1ndWVzcy12Ym94LCAubWFpbi1yZWMtdmlldy1ib3gsIC5hcHAtcWlhbmZhbi1ib3gsIC5jb21tZW50LWVtcHR5LWJnLCAuY29weWluZm8sIC5waC12Ym94LCAuYnRuX21fYWN0aW9uLCAuYnRuLXh6LWFwcCwgI2ZpbG1fdG9wX2Jhbm5lciwgLmJ0bi1jb21tZW50LWFwcCwgLmFkdiwgLngtYWR2LXBhdXNlLW5vbmxpbmVhci1wYW5lbCIsCiAgICBjc3M6ICIuY29tbWVudC1lbXB0eS10eHQge21hcmdpbi1ib3R0b206IDA7fS5hcHAtdmlldy1ib3ggKyBmb290ZXIge3BhZGRpbmc6IDA7b3BhY2l0eTogMC41O30jc29odXBsYXllciAjbWVudSB7ei1pbmRleDogIiArIE1BWF9aX0lOREVYICsgIjt9IgogIH0sIHsKICAgIG5hbWU6ICLkuZDop4YiLAogICAgbWF0Y2g6ICIubGUuY29tIiwKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL1wvc2VhcmNofHNvLmxlLmNvbVwvcy8sCiAgICAgIGp1bXA6ICIuY29sdW1uX3RpdCB8IGJlZm9yZSwgLlJlbGF0ZSB8IGJlZm9yZSIKICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvXC8ocHR2XC92cGxheVwvfHZwbGF5XykvLAogICAgICB2aXA6ICIuaW50cm9kdWN0aW9uX2JveCwgLmJyaWVmSW50cm9fbGVmdCAuaW5mb19saXN0IiwKICAgICAgdGl0bGU6ICIuYnJpZWZJbnRyb19pbmZvIC5pbmZvX3RpdCwgI2otaW50cm9kdWN0aW9uIGgyIiwKICAgICAgZml4VXJsOiAhMAogICAgfSwKICAgIGhpZGU6ICIuZ2FtZVByb21vdGlvbiwgLmdhbWVQcm9tb3Rpb25UeHQsICNqLWxlYXBwTW9yZSwgLmxiekRhb2xpdSwgLmFya0JveCIKICB9LCB7CiAgICBuYW1lOiAi5ZKq5ZKVIiwKICAgIG1hdGNoOiAibWlndXZpZGVvLmNvbSIsCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC9zZWFyY2guaHRtbC8sCiAgICAgIGp1bXA6ICIuc2VhcmNoLXBhZ2luYXRpb24sIC5zZWFyY2gtbWFpbiIsCiAgICAgIGtleXdvcmQ6IC9rZXl3b3Jkcz0oW14mXD9cL1wuXSspfFw/LiojKFteJlw/XC9cLl0rKS8KICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvZGV0YWlsLmh0bWwvLAogICAgICB2aXA6ICIucGxheWVyRm9vdGVyLCAucHJvZ3JhbWdyb3VwIiwKICAgICAgdGl0bGU6ICIubGVmdC1ib3ggLnRpdGxlLCAuZXBpc29kZVRpdGxlLCAudmlkZW9fdGl0bGUiCiAgICB9LAogICAgaGlkZTogJy5ncm91cC1pdGVtW25hbWUqPSLlub/lkYoiXSwgLm9wZW5DbGllbnQnCiAgfSwgewogICAgbmFtZTogIlBQVFYiLAogICAgbWF0Y2g6ICIucHB0di5jb20iLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvc291Lisoa3d8a2V5d29yZCk9LywKICAgICAganVtcDogIi5wYWdpbmF0aW9uLCAuemhlbmdwaWFuLWJveCB8IGFwcGVuZCIKICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvXC9zaG93XC8vLAogICAgICB2aXA6ICIubSAuY2YsIC52b2QtdGl0LCAudm9kLWludG9yIiwKICAgICAgdGl0bGU6ICIjdmlkZW8taW5mbyBoMSwgLnZvZC10aXQtaW4gc3BhbiwgLnRpdCIsCiAgICAgIGZpeFVybDogITAKICAgIH0sCiAgICBoaWRlOiAnLnctdmlkZW8tdmFzdGFkLCAjdmlkZW8tZG93bmxvYWQtZ2FtZSwgZGl2W2NsYXNzKj0ib3BlbmFwcCJdLCBkaXZbY2xhc3MqPSJzaWRlLWFkdiJdLCBkaXZbaWQqPSJhZnBfIl0sIGRpdltpZCo9Ii1hZnAiXSwgaWZyYW1lW3NyYyo9Ii9nYW1lLyJdLCAuYWZwUG9zaXRpb24sIC5kb3dubG9hZC1pY29uYmFyJwogIH0sIHsKICAgIG5hbWU6ICLljY7mlbAiLAogICAgbWF0Y2g6ICJ3YXN1LmNuIiwKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL1NlYXJjaFwvLitrPS8sCiAgICAgIGp1bXA6ICIjdG9wVm9kIgogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9bcFBdbGF5XC9zaG93XC8vLAogICAgICB2aXA6ICIubW92aWVfdGl0bGUiLAogICAgICB0aXRsZTogIi5tb3ZpZV90aXRsZSBoMiIsCiAgICAgIGZpeFVybDogITAKICAgIH0sCiAgICBoaWRlOiAnZGl2W2lkKj0iQkFJRFUiXSwgLnBsYXllcl9tZW51X2NvbiwgYm9keSA+IGRpdltzdHlsZSo9ImZpeGVkIl0nCiAgfSwgewogICAgbmFtZTogIjE5MDUiLAogICAgbWF0Y2g6ICIxOTA1LmNvbSIsCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC9cL3NlYXJjaC9pLAogICAgICBqdW1wOiAiLnBhZ2luYXRpb24sICNuZXdfcGFnZSIKICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvXC9wbGF5LywKICAgICAgdmlwOiAiLnBsYXllckJveC1pbmZvLCAjbW92aWVfaW5mbywgLnBsYXllci1uYXYiLAogICAgICB0aXRsZTogIiNtb3ZpZV9pbmZvIC5pbmZvSW5uZXIgLnRpdGxlLCAubW92aWUtdGl0bGUsIC50dl90aXRsZSIsCiAgICAgIGZpeFVybDogITAKICAgIH0sCiAgICBoaWRlOiAiI2FwcF9zdG9yZSwgLm9wZW5NZW1iZXJzaGlwQnRuLCBib2R5ID4gZGl2W2lkXTpub3QoW2NsYXNzXSkgPiBpZnJhbWUsIC5wdjItYWR2ZXJ0aXNlbWVudCwgLm9wZW4tYXBwIiwKICAgIGNzczogIlxuI21vdmllX2luZm8ge21hcmdpbi10b3A6IDFlbTt9IgogIH0sIHsKICAgIG5hbWU6ICIxMDgw5b2x6KeGIiwKICAgIG1hdGNoOiAiazEwODAubmV0IiwKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL3dkPS8sCiAgICAgIGp1bXA6ICIubXl1aS1wYWdlLCAubXl1aS1wYW5lbC1ib3ggfCBhcHBlbmQiLAogICAgICByZXN1bHQ6ICIuc2VhcmNoa2V5IgogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9cL3ZvZHBsYXkvLAogICAgICB0aXRsZTogIi5teXVpLXBsYXllcl9fZGF0YSBoMyBhLCAuY29sLXBkID4gLm15dWktcGFuZWxfX2hlYWQgaDMiLAogICAgICBqdW1wOiAiLm15dWktcGxheWVyX19kYXRhIgogICAgfSwKICAgIGhpZGU6ICJib2R5ID4gKjpub3Qoc2NyaXB0KSArIHNjcmlwdCB+ICpbaWRdIiwKICAgIGNzczogIlxuI3BsYXllci1zaWRlYmFyIHtoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDt9IgogIH0sIHsKICAgIG5hbWU6ICIxMDkw5b2x6KeGIiwKICAgIG1hdGNoOiAvMTA5MHlzXGQ/LmNvbS8sCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC9jPXNlYXJjaC8sCiAgICAgIGp1bXA6ICIuc3R1aS1wYWdlLCAuc3R1aS1wYW5uZWwiLAogICAgICBqdW1wVG86IFsgIi5zdHVpLXZvZGxpc3RfX21lZGlhIGEiLCAvLipzaG93XC8oXGQrKS4qLywgIi9wbGF5LyQxfjB+MC5odG1sIiBdLAogICAgICBrZXl3b3JkKCkgewogICAgICAgIGNvbnN0IG4gPSBsb2NhdGlvbi5ocmVmLm1hdGNoKC93ZD0oW14tJl0rKS8pOwogICAgICAgIHJldHVybiBuID8gblsxXSA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5tb3JlICsgLnRpdGxlIikudGV4dENvbnRlbnQ7CiAgICAgIH0sCiAgICAgIHJlc3VsdDogImgzLnRpdGxlIGEiCiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL1wvcGxheS8sCiAgICAgIHRpdGxlOiAiaDQgZm9udCIsCiAgICAgIGp1bXA6ICIudGFiLWNvbnRlbnQuc3R1aS1wYW5uZWxfYmQiCiAgICB9LAogICAgaGlkZTogIi5jb250YWluZXIgfiAqW2lkXSwgYm9keSA+IC5jb250YWluZXIgPiBwW3N0eWxlXSIsCiAgICBjc3M6ICJcbmJvZHkge3BhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7fSIKICB9LCB7CiAgICBuYW1lOiAi5a6M576O55yL55yLIiwKICAgIG1hdGNoOiAid2FubWVpa2subWUiLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvXC9zb1wvLywKICAgICAganVtcDogIi5zdHVpLXBhZ2UsIC5zdHVpLXBhbm5lbCIsCiAgICAgIGp1bXBUbzogWyAiLnN0dWktdm9kbGlzdF9fbWVkaWEgYSIsIC8uKnByb2plY3RcLyhcZCspLiovLCAiL3BsYXkvJDEtMS0xLmh0bWwiIF0sCiAgICAgIHJlc3VsdDogImgzLnRpdGxlIGEiCiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL1wvcGxheS8sCiAgICAgIHRpdGxlOiAiaDEgYSIsCiAgICAgIGp1bXA6ICItLnBsYXlsaXN0IgogICAgfSwKICAgIGhpZGU6ICIuY29udGFpbmVyIH4gKltpZF0iCiAgfSwgewogICAgbmFtZTogIuWcqOe6v+S5i+WutiIsCiAgICBtYXRjaDogInp4emoubWUiLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvd2Q9LywKICAgICAganVtcDogIi5zdHVpLXBhbm5lbF9fZnQiLAogICAgICBqdW1wVG86IFsgIi5zdHVpLXZvZGxpc3QgYSIsIC8uKmRldGFpbFwvKFxkKykuKi8sICIvdmlkZW8vJDEtMS0xLmh0bWwiIF0sCiAgICAgIHJlc3VsdDogIi5zdHVpLXZvZGxpc3QgLnRpdGxlIGEiCiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL1wvdmlkZW8vLAogICAgICB0aXRsZTogImgxIiwKICAgICAganVtcDogIi5zdHVpLXBsYXllciIKICAgIH0sCiAgICBoaWRlOiAnYm9keSA+IGRpdltjbGFzc149IkFEIl0sIGJvZHkgPiAqOm5vdChzY3JpcHQpICsgc2NyaXB0IH4gKltpZF0nCiAgfSwgewogICAgbmFtZTogIjkx576O5YmnIiwKICAgIG1hdGNoOiAiOTFtancuY29tIiwKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL3M9LywKICAgICAga2V5d29yZDogL3M9KC4rKS8sCiAgICAgIGp1bXA6ICIubGlzdC1jb250ZW50IHwgYXBwZW5kIiwKICAgICAgcmVzdWx0OiB7CiAgICAgICAgdGl0bGU6ICIubS1tb3ZpZXMgLnUtbW92aWUgaDIiLAogICAgICAgIHVybDogIi5tLW1vdmllcyAudS1tb3ZpZSBhIgogICAgICB9CiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL1wvdnBsYXkvLAogICAgICB0aXRsZTogIi52dGl0bGUgYSIsCiAgICAgIGp1bXA6ICIubWdwbGF5bGlzdCIKICAgIH0sCiAgICBoaWRlOiAiYm9keSA+ICo6bm90KHNjcmlwdCkgKyBzY3JpcHQgfiAqW2lkXSwgZGl2Om5vdChbaWRdKSA+IGlmcmFtZSwgYSA+IGlmcmFtZSwgLmFkcyIKICB9LCB7CiAgICBuYW1lOiAi5ZOU5ru0IiwKICAgIG1hdGNoOiAiYmRlNC5jb20iLAogICAgZGlzYWJsZTogITAsCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC9cL3NlYXJjaC8sCiAgICAgIGp1bXA6ICIuc2VhcmNoLWxpc3QiLAogICAgICByZXN1bHQ6ICJhLmhlYWRlciIKICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvXC9wbGF5LywKICAgICAgdGl0bGU6ICIucGxheWVyLXdyYXBwZXIgKyAuY29udGFpbmVyIGEgKyBhIiwKICAgICAganVtcDogIi5wbGF5ZXItd3JhcHBlciArIC5jb250YWluZXIiCiAgICB9LAogICAgaGlkZTogImJvZHk6OmFmdGVyLCBib2R5ID4gKjpub3Qoc2NyaXB0KSArIHNjcmlwdCB+ICpbaWRdIgogIH0sIHsKICAgIG5hbWU6ICLnpZ7pqawiLAogICAgbWF0Y2g6ICJzaGVubWE0NDgwLmNvbSIsCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC9cL3NlYXJjaC8sCiAgICAgIGp1bXA6ICIuc3R1aS1wYWdlLCAuc3R1aS1wYW5uZWwiLAogICAgICBqdW1wVG86IFsgIi5zdHVpLXZvZGxpc3QgYSIsIC8uKmRldGFpbFwvKFxkKykuKi8sICIvcGxheS8kMS0xLTEvIiBdLAogICAgICByZXN1bHQ6ICIuc3R1aS12b2RsaXN0X190aXRsZSBhIgogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9cL3BsYXkvLAogICAgICB0aXRsZTogImgxIGEiLAogICAgICBqdW1wOiAiLS5zdHVpLXBhbm5lbCB8IGJlZm9yZSIKICAgIH0KICB9LCB7CiAgICBuYW1lOiAiVFZCIiwKICAgIG1hdGNoOiAiaGt0dnliLmNvbSIsCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC9cL3NlYXJjaC8sCiAgICAgIGp1bXA6ICIubXl1aS1wYWdlLCAubXl1aS1wYW5uZWxfYmQgfCBiZWZvcmUsIC5teXVpLXBhbmVsIHwgYXBwZW5kIiwKICAgICAganVtcFRvOiBbICIjc2VhcmNoTGlzdCBhIiwgLy4qZGV0YWlsXC9pZFwvKFxkKykuKi8sICIvdm9kL3BsYXkvaWQvJDEvc2lkLzEvbmlkLzEuaHRtbCIgXSwKICAgICAgcmVzdWx0OiAiLnNlYXJjaGtleSIKICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvXC92b2RcL3BsYXkvLAogICAgICB0aXRsZTogImgzIGEiLAogICAgICBqdW1wOiAiLm15dWktcGFuZWwtYm94IgogICAgfSwKICAgIGhpZGU6ICJib2R5ID4gaWZyYW1lLCBib2R5ID4gZGl2W3N0eWxlXTpub3QoW2NsYXNzXSksIGJvZHkgPiBkaXZbaWRdOm5vdChbY2xhc3NdKSwgLm15dWktcGFuZWwgfiBkaXZbaWRdLCAubmF2LW1lbnUgPiAuaGlkZGVuLW1kLCBzY3JpcHQgKyBhW2lkXSwgYVtpZF0gKyBkaXZbc3R5bGVdOm5vdChbY2xhc3NdKSIsCiAgICBjc3M6ICJcbmJvZHkge3BhZGRpbmctdG9wOiA2MHB4ICFpbXBvcnRhbnQ7fSIKICB9LCB7CiAgICBuYW1lOiAi6aOe5p6B6YCfIiwKICAgIG1hdGNoOiAiZmVpamlzdTguY29tIiwKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL1wvc2VhcmNoLywKICAgICAganVtcDogIiNyZXN1bHQiLAogICAgICBqdW1wVG86IFsgIiNyZXN1bHQgYSIsIC9cLyQvLCAiLzEuaHRtbCIgXSwKICAgICAgcmVzdWx0OiAiI3Jlc3VsdCBoMiBhIgogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9hY2dcL1xkK1wvXGQrLywKICAgICAgdGl0bGU6ICJoMSBhIiwKICAgICAganVtcDogIi5taWRiYXIsIC5mb290ZXIgfCBiZWZvcmUiCiAgICB9LAogICAgaGlkZTogIi5pbmRleC10b3AgfiBkaXYsIC52LXRvcCB+IGRpdiwgLmZvb3RlciB+IGRpdiwgLmZvb3RlciB+IGJyZGUsIGJvZHkgPiBkaXY6bm90KFtjbGFzc10pIgogIH0sIHsKICAgIG5hbWU6ICLnnJ/kuI3ljaEiLAogICAgbWF0Y2g6ICJ6aGVuYnVrYS5jb20iLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvXC9zZWFyY2gvLAogICAgICBqdW1wOiAiLnN0dWktcGFnZSwgLnN0dWktcGFubmVsIiwKICAgICAganVtcFRvOiBbICIuc3R1aS12b2RsaXN0X19tZWRpYSBhIiwgLy4qdm9kZGV0YWlsXC8oXGQrKS4qLywgIi92b2RwbGF5LyQxLTEtMS8iIF0sCiAgICAgIGtleXdvcmQoKSB7CiAgICAgICAgY29uc3QgbiA9IGxvY2F0aW9uLmhyZWYubWF0Y2goL3dkXC8oW15cL10rKS8pOwogICAgICAgIHJldHVybiBuID8gblsxXSA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImgzIikudGV4dENvbnRlbnQ7CiAgICAgIH0sCiAgICAgIHJlc3VsdDogIi5zdHVpLXZvZGxpc3RfX21lZGlhIGgzLnRpdGxlIGEiCiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL1wvdm9kcGxheS8sCiAgICAgIHRpdGxlOiAiLmRldGFpbCBoMSIsCiAgICAgIGp1bXA6ICItLnBsYXlsaXN0IgogICAgfSwKICAgIGhpZGU6ICJib2R5ID4gZGl2W2lkXTpub3QoW2NsYXNzXSksIC5zdHVpLXBsYXllcl9faXRlbSB+IGRpdltzdHlsZV0iCiAgfSwgewogICAgbmFtZTogIuein+W9sSIsCiAgICBtYXRjaDogL2R2ZGhkLm1lfDk1Mjc4MC5jb20vLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvXC9zZWFyY2gvLAogICAgICBqdW1wOiAiLmxpc3QtY29udGVudCIsCiAgICAgIGp1bXBUbzogWyAiLmxpc3QtY29udGVudCBhIiwgLy4qaW5kZXgoXGQrKVwuaHRtbC8sICIvdmlkZW8vJDEtMC0wLmh0bWwiIF0sCiAgICAgIHJlc3VsdDogewogICAgICAgIHRpdGxlOiAiLm0tbW92aWVzIC51LW1vdmllIGgyIiwKICAgICAgICB1cmw6ICIubS1tb3ZpZXMgLnUtbW92aWUgYSIKICAgICAgfQogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9cL3ZpZGVvLywKICAgICAgdGl0bGU6ICIudnRpdGxlIGEiLAogICAgICBqdW1wOiAiLnZpZGVvdGl0bGUiCiAgICB9LAogICAgaGlkZTogJ2JvZHkgPiBicmRlLCBib2R5ID4gZGl2W2lkXTpub3QoW2NsYXNzXSksIGJvZHkgPiBhLCAuaGVhZGVyIH4gZGl2W2NsYXNzKj0iYWQiXSwgLndpZGdldF9hZHMnCiAgfSwgewogICAgbmFtZTogIlp6ekZ1biIsCiAgICBtYXRjaDogL3d3dy56enpmdW4uY29tLywKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL1wvdm9kLXNlYXJjaC8sCiAgICAgIGp1bXA6ICIjbGlzdC1mb2N1cyB8IGFwcGVuZCwgLmxlby1mb290LXR4dCB8IGJlZm9yZSIsCiAgICAgIGp1bXBUbzogWyAiLnNob3ctbGlzdCBhLCAubGVvLWRldGFpbC13cmFwIGEiLCAvLipkZXRhaWwtaWQtKFxkKykuKi8sICIvdm9kLXBsYXktaWQtJDEtc2lkLTEtbmlkLTEuaHRtbCIgXSwKICAgICAgcmVzdWx0OiAiLnNob3ctbGlzdCBoMiBhIgogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9cL3ZvZC1wbGF5LywKICAgICAgdGl0bGUoKSB7CiAgICAgICAgY29uc3QgbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5icmVhZC1jcnVtYi1uYXYsIC5sZW8tYmctYSBoMSIpOwogICAgICAgIHJldHVybiBuID8gbi50ZXh0Q29udGVudC5yZXBsYWNlKC8uKuW9k+WJjeaSreaUvu+8miguKz8pIC0uKi8sICIkMSIpIDogIiI7CiAgICAgIH0sCiAgICAgIGp1bXA6ICIuZXBpc29kZS13cmFwLCAtLmxlby1tb2QubGVvLWxlZnQiCiAgICB9LAogICAgaGlkZTogIiNuYXZiYXIgKyBkaXZbc3R5bGVdIiwKICAgIGpzKCkgewogICAgICAkKCJpbnB1dFtvbmNsaWNrXSIpLmVhY2goKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICAkKGUpLnZhbCgpLmluY2x1ZGVzKCLnu6fnu63orr/pl64iKSAmJiBlLmNsaWNrKCk7CiAgICAgIH0pKTsKICAgIH0KICB9LCB7CiAgICBuYW1lOiAi6L+F5pKtIiwKICAgIG1hdGNoOiAieGJkbS5vcmciLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvXC9zZWFyY2gvLAogICAgICBqdW1wOiAiLm15dWktcGFnZSIKICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvXC92aWRlby8sCiAgICAgIHRpdGxlOiAiLm15dWktcGFuZWxfX2hlYWQgaDMgYSIsCiAgICAgIGp1bXA6ICIubXl1aS1wYW5lbC1iZyIKICAgIH0sCiAgICBoaWRlOiAiYm9keSA+IGRpdiIKICB9LCB7CiAgICBuYW1lOiAi5ZOU5ZKq5ZOU5ZKqIiwKICAgIG1hdGNoOiAiYmltaWJpbWkubWUiLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvXC9zZWFyY2gvLAogICAgICBqdW1wOiAiLnZfbW9kLCAubGVvLWZvb3QtdHh0IHwgYmVmb3JlIiwKICAgICAgcmVzdWx0OiB7CiAgICAgICAgdGl0bGU6ICIuaW5mbyBhLCAubGVvLWRldGFpbC1tZWRpYSBoMSIsCiAgICAgICAgdXJsOiAiLmluZm8gYSwgLmxlby1kZXRhaWwtbWVkaWEgLmxlby1wby1hYiBhIgogICAgICB9LAogICAgICBrZXl3b3JkKCkgewogICAgICAgIGNvbnN0IG4gPSBsb2NhdGlvbi5ocmVmLm1hdGNoKC93ZFwvKFteXC9dKykvKTsKICAgICAgICByZXR1cm4gbiA/IG5bMV0gOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIucF90YWIgc3Ryb25nLCAubGVvLXNlYXJjaC13ZCIpLnRleHRDb250ZW50OwogICAgICB9CiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL1wvcGxheVwvLywKICAgICAgdGl0bGU6ICIudl9wYXRoIC5jdXJyZW50LCBoZWFkZXIgYSArIGZvbnQsIGgxLmxlby1mcy1sIiwKICAgICAganVtcDogIi0ucGxheV9ib3gsIC0ubGVvLW1vZC5sZW8tbGVmdCB8IGJlZm9yZSIKICAgIH0sCiAgICBoaWRlOiAiYm9keSA+IGRpdltpZF06bm90KFtjbGFzc10pLCBib2R5ID4gZGl2W3N0eWxlXTpub3QoW2NsYXNzXSksIC50dWlndWFuZywgYm9keSA+IC5sZW8tY29udGFpbmVyIH4gW2lkXSwgLnNzcjEsIC5zc3IxICsgZGl2Om5vdChbY2xhc3NdKSwgaW5zW2lkXSwgc2VjdGlvbiArIGRpdltpZF0iLAogICAgY3NzOiAiLmxlby1kZXRhaWwtd3JhcCB7YmFja2dyb3VuZC1jb2xvcjogIzZlYTdiODttYXJnaW4tYm90dG9tOiAxMHB4O2JvcmRlci1yYWRpdXM6IDVweDtib3gtc2hhZG93OiAwIDJweCAycHggMCByZ2JhKDAsMCwwLDAuMik7fSIKICB9LCB7CiAgICBuYW1lOiAi5aau5Y+vIiwKICAgIG1hdGNoOiAvbmljb3R2XC4obWV8Y2x1YikvLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvXC9zZWFyY2gvLAogICAgICBqdW1wOiAiLnBhZ2VyLCAubmF2YmFyIH4gLmNvbnRhaW5lciIsCiAgICAgIGp1bXBUbzogWyAiLmZmLWJnIGEiLCAvLipcLyhcZCspLiovLCAiL3ZpZGVvL3BsYXkvJDEtMS0xLmh0bWwiIF0sCiAgICAgIHJlc3VsdDogImgyIGEiCiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL1wvcGxheVwvLywKICAgICAgdGl0bGU6ICJhLmZmLXRleHQiLAogICAgICBqdW1wOiAiLS50YWItY29udGVudC5mZi1wbGF5dXJsLWRyb3Bkb3duIgogICAgfSwKICAgIGhpZGU6ICJib2R5ID4gYnJkZSwgYm9keSA+IGRpdltpZF06bm90KFtjbGFzc10pLCBib2R5ID4gZGl2W3N0eWxlXTpub3QoW2NsYXNzXSksIGJvZHkgPiBhLCAuZmYtYWRzLCBib2R5ID4gZGl2W2NsYXNzbmFtZV0sICNmZi10b3RvcCB+IGRpdltpZF0iCiAgfSwgewogICAgbmFtZTogIkFHRSIsCiAgICBtYXRjaDogImFnZWZhbnMudHYiLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvXC9zZWFyY2gvLAogICAgICBqdW1wOiAiI2NvbnRhaW5lciIsCiAgICAgIHJlc3VsdDogIi5jZWxsX2ltZm9ybV9uYW1lIgogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9cL3BsYXlcLy4rcGxheWlkPS8sCiAgICAgIHRpdGxlOiAiI2RldGFpbG5hbWUgYSIsCiAgICAgIGp1bXA6ICIuYmFzZWJsb2NrICsgLnNwYWNlYmxvY2sxICsgLmJhc2VibG9jayB8IGJlZm9yZSIKICAgIH0sCiAgICBoaWRlOiAiZGl2W3N0eWxlXTpub3QoW2NsYXNzXSkgPiBhIgogIH0sIHsKICAgIG5hbWU6ICJRaW5tZWkiLAogICAgbWF0Y2g6ICJxaW5tZWkudmlkZW8iLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvXC9zZWFyY2gvLAogICAgICBqdW1wOiAiLmxheW91dCB8IGFwcGVuZCIKICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvXC92aWRlby8sCiAgICAgIHRpdGxlOiAiLmluZm8gLnRpdGxlIiwKICAgICAganVtcDogIi5wbGF5ZXIgfCBhcHBlbmQiCiAgICB9CiAgfSwgewogICAgbmFtZTogIuWThuWSqiIsCiAgICBtYXRjaDogImR1b21pbWguY29tIiwKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL3dkPS8sCiAgICAgIGp1bXA6ICIubXl1aS1wYWdlLCAubXl1aS1wYW5uZWxfYmQgfCBiZWZvcmUiLAogICAgICBqdW1wVG86IFsgIiNzZWFyY2hMaXN0IGEiLCAvLipkZXRhaWxcLyhcZCspLiovLCAiL2RvbmdtYW5wbGF5LyQxLTEtMS5odG1sIiBdLAogICAgICByZXN1bHQ6ICIuc2VhcmNoa2V5IgogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9cL2RvbmdtYW5wbGF5LywKICAgICAgdGl0bGU6ICIjcGxheWVyLXNpZGViYXIgLnRpdGxlIiwKICAgICAganVtcDogIiNwbGF5ZXItc2lkZWJhciAubXl1aS1wYW5lbF9iZCB8IGJlZm9yZSIKICAgIH0KICB9LCB7CiAgICBuYW1lOiAi5qyh5YWDIiwKICAgIG1hdGNoOiAiY3lsb2xpLmNvbSIsCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC9cL3ZvZHNlYXJjaC8sCiAgICAgIGp1bXA6ICIudHlwZWJveCB8IGFwcGVuZCwgI2NvbnRlbnQgfCBhcHBlbmQsIC5wYWdlYm94IiwKICAgICAganVtcFRvOiBbICIuc2VhcmNoIGEiLCAvLipcL2N5KFxkKykuKi8sICIveXYkMS0xLTEvIiBdLAogICAgICBrZXl3b3JkKCkgewogICAgICAgIGNvbnN0IG4gPSBsb2NhdGlvbi5ocmVmLm1hdGNoKC92b2RzZWFyY2hcLyhbXi1dKykvKTsKICAgICAgICByZXR1cm4gbiA/IG5bMV0gOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIubWFpbi1oZWFkIC50aXRsZSBiLCAucmUtaW5mbyBiIikudGV4dENvbnRlbnQ7CiAgICAgIH0sCiAgICAgIHJlc3VsdDogIi5zZWFyY2ggLnRpdGxlIgogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9cL2N5XGQrLywKICAgICAgdGl0bGU6ICIudS10aXRsZSBhLCAudGl0bGUgYSIsCiAgICAgIGp1bXA6ICIucGxheWxpc3RhbGwgLnBsYXlib3gsIC5wbGF5LWluZm8gKyAubWFpbiIKICAgIH0sCiAgICBoaWRlOiAiLmNvbHVtbi1yZ3QgI3BsYXkiCiAgfSwgewogICAgbmFtZTogIk1pa2FuIiwKICAgIG1hdGNoOiAibWlrYW5hbmkubWUiLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvXC9TZWFyY2gvLAogICAgICBqdW1wOiAiLmZvb3RlciB8IGJlZm9yZSIKICAgIH0KICB9IF0sIEljb24gPSB7CiAgICB2aXA6ICc8c3ZnIGZpbGw9ImN1cnJlbnRDb2xvciIgdmlld0JveD0iMCAwIDE4IDE4IiByb2xlPSJpbWciIGFyaWEtaGlkZGVuPSJ0cnVlIj48cGF0aCBkPSJNMTcuNzMxLDYuMjdsLTIuNzcxLTQuNDY0Yy0wLjMzMi0wLjUzNC0wLjkwNi0wLjg1Mi0xLjUzOC0wLjg1MmgtMi4zNjRjLTAuNTUzLDAtMSwwLjQ0OC0xLDFzMC40NDcsMSwxLDFoMi4yNjFsMi42MjgsNC4yMzJsLTYuOTU1LDcuNThMMi4wNTMsNy4xODdsMi42MjgtNC4yMzNoMi4zM2MwLjU1MiwwLDEtMC40NDgsMS0xcy0wLjQ0OC0xLTEtMUg0LjU3N2MtMC42MjMsMC0xLjIxMiwwLjMyNy0xLjUzNywwLjg1M0wwLjI2Nyw2LjI3MmMtMC40MTYsMC42NzEtMC4zNDYsMS41MjEsMC4xODksMi4xMzNsNy40NzUsOC4xNjdjMC4yNzUsMC4zMTMsMC42NjMsMC40NzUsMS4wNTYsMC40NzVjMC4zMjQsMCwwLjY1MS0wLjExLDAuOTItMC4zMzZsNy42NDgtOC4zMjFDMTguMDc3LDcuNzk0LDE4LjE0OCw2Ljk0MywxNy43MzEsNi4yN3oiPjwvcGF0aD48cGF0aCBkPSJNNC41MTcsNi4xNjdDNC4xMDgsNi41MzgsNC4wNzgsNy4xNzEsNC40NSw3LjU4bDMuODEsNC4xOWMwLjE4OSwwLjIwOCwwLjQ1OCwwLjMyNywwLjczOSwwLjMyN2MwLDAsMCwwLDAsMGMwLjI4MSwwLDAuNTUtMC4xMTgsMC43MzktMC4zMjdsMy44MS00LjE4NGMwLjM3Mi0wLjQwOSwwLjM0My0xLjA0MS0wLjA2Ni0xLjQxM2MtMC40MDctMC4zNzItMS4wMzktMC4zNDItMS40MTIsMC4wNjZMOSw5LjYxMkw1LjkyOSw2LjIzNEM1LjU1OCw1LjgyNiw0LjkyNiw1Ljc5Niw0LjUxNyw2LjE2N3oiPjwvcGF0aD48L3N2Zz4nLAogICAgbG9hZGVyOiAnPHN2Zz48ZGVmcz48ZmlsdGVyIGlkPSJvLS1sLWYiPjxmZUdhdXNzaWFuQmx1ciBpbj0iU291cmNlR3JhcGhpYyIgc3RkRGV2aWF0aW9uPSIyIiByZXN1bHQ9ImJsdXIiIC8+PGZlQ29sb3JNYXRyaXggaW49ImJsdXIiIG1vZGU9Im1hdHJpeCIgdmFsdWVzPSIxIDAgMCAwIDAgIDAgMSAwIDAgMCAgMCAwIDEgMCAwICAwIDAgMCA1IC0yIiByZXN1bHQ9Imdvb2V5IiAvPjxmZUNvbXBvc2l0ZSBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJnb29leSIgb3BlcmF0b3I9ImF0b3AiLz48L2ZpbHRlcj48L2RlZnM+PC9zdmc+JywKICAgIHFyY29kZTogJzxzdmcgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxwYXRoIGQ9Ik0xNjAgMEgwdjE2MGgxNjBWMHptLTMyIDEyOEgzMlYzMmg5NnY5NnoiLz48cGF0aCBkPSJNNjQgNjRoMzJ2MzJINjR6TTM1MiAwdjE2MGgxNjBWMEgzNTJ6bTEyOCAxMjhoLTk2VjMyaDk2djk2eiIvPjxwYXRoIGQ9Ik00MTYgNjRoMzJ2MzJoLTMyek0wIDUxMmgxNjBWMzUySDB2MTYwem0zMi0xMjhoOTZ2OTZIMzJ2LTk2eiIvPjxwYXRoIGQ9Ik02NCA0MTZoMzJ2MzJINjR6TTI1NiAwaDY0djMyaC02NHpNMjU2IDEyOGgzMlY5NmgzMlY2NGgtOTZWMzJoLTMydjY0aDY0ek0xOTIgMTI4aDMydjMyaC0zMnpNMzIwIDE2MGgtMzJ2MzJoLTk2djMyaDEyOHpNMzIgMjg4aDMydi0zMkgzMnYtNjRIMHYxMjhoMzJ6TTY0IDE5MmgzMnYzMkg2NHoiLz48cGF0aCBkPSJNMTkyIDMyMGg2NHYtMzJoLTMydi0zMmgtNjR2LTY0aC0zMnY2NEg5NnY2NGgzMnYtMzJoNjR6TTI4OCAyNTZoMzJ2NjRoLTMyek0yODggMzUyaC05NnYzMmg2NHY5NmgtNjR2MzJoOTZ2LTMyaDY0di0zMmgtNjR6Ii8+PHBhdGggZD0iTTE5MiA0MTZoMzJ2MzJoLTMyek0zMjAgMzUyaDMydjY0aC0zMnpNNDgwIDQxNmgtOTZ2OTZoMzJ2LTY0aDY0eiIvPjxwYXRoIGQ9Ik00NDggNDgwaDY0djMyaC02NHpNNDgwIDM1MmgzMnYzMmgtMzJ6TTM4NCAzODRoMzJ2LTk2aC02NHYzMmgzMnpNNDQ4IDIyNGgtMzJ2LTMyaC0zMnYzMmgtMzJ2MzJoMTI4di0zMmgzMnYtMzJoLTY0ek00NDggMjg4aDY0djMyaC02NHoiLz48L3N2Zz4nLAogICAgcGFuZGE6ICc8c3ZnIHZpZXdCb3g9IjAgMCA1OCA1OCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iPjxwYXRoIGQ9Im00NSA1M2MtLjA1NDY4ODEgMi43OTMxNTY0LTIuMzQ2Mzk4NCA1LjAyMjQ0NjYtNS4xNCA1aC0xMy4yN2MtLjUwODM3MTgtLjAwMTAwNzYtMS4wMDUzODMxLS4xNTA0NTg2LTEuNDMtLjQzLS4xNDIwNjc4LS4wOTg5NjI3LS4yNzU4NDMtLjIwOTMyNzItLjQtLjMzLS42OTk2Njk3LS43MDIyNzYyLS45MzcxMDIyLTEuNzQyMzE3Mi0uNjExNTEzNC0yLjY3ODY1MTIuMzI1NTg4OS0uOTM2MzM0IDEuMTU3MDc1Mi0xLjYwNDY4MjkgMi4xNDE1MTM0LTEuNzIxMzQ4OCAyLjMyMzkzNzItLjIzMzE3ODggNC41OTIxNzg3LS44NTUxNzA1IDYuNzEtMS44NCA0LTIgNC0zIDgtM2guMDljMS45NiAwIDMuOTEgMS4wNSAzLjkxIDV6IiBmaWxsPSIjNTY1OTVlIi8+PHBhdGggZD0ibTE2LjY0IDU3LjkzYy0uMjU3MDg0NS4wNDg3OTAzLS41MTgzMzYyLjA3MjIzNi0uNzguMDdoLTEzLjI3Yy0xLjM2NDA0MDU3LS4wMTA4NDUzLTIuNDg1ODY4MjEtMS4wNzc4MDY1LTIuNTY1MDQxNy0yLjQzOTU5MDZzLjkxMTQ0ODM3LTIuNTUxNTYyMiAyLjI2NTA0MTctMi43MjA0MDk0Yy4zOS0uMDUuODItLjEgMS4yNy0uMTggMS44NSAyLjQxIDUuNjcgNC44MyAxMy4wOCA1LjI3eiIgZmlsbD0iIzM5M2Y0YSIvPjxwYXRoIGQ9Im00MS41OCAzNy44MmMtLjIxMjAwNzMtMS4zNjg5NTAyLS41NzQxOTIyLTIuNzEwMzc1OS0xLjA4LTQtMS41MzIxMzAyLTMuNzk5ODAyMS00LjYzMDgxMzItNi43NTI2NjQ3LTguNS04LjEtMS43NzIzODExLS42NjA0NTg2LTMuNjE0MjY5OS0xLjExNjczNy01LjQ5LTEuMzYtMS40NTk0MTctMS42NDU3MS0zLjM3ODcwMzktMi44MTYwOTE4LTUuNTEtMy4zNnYycy0xLTEtNC0xYy41NTY0MTcxLjYzNzM2OTQuOTA1MjYyMiAxLjQyOTI0NzcgMSAyLjI3LS45ODgxMTAyLjE2MjY5NjItMS45NTQzODMuNDM3ODE1Ni0yLjg4LjgyLTMuMTQwNTIzNyAxLjMzOTg1MTctNS41NzcyNjA0OCAzLjkzMjUxMDYtNi43MiA3LjE1LS4zMDAyMDM2Ni43NDIyNDk2LS41NjA1NzQwNSAxLjQ5OTk5NDItLjc4IDIuMjcuNzQ5NjI0NDktLjMzMjQ2MTkgMS41NTk5Njc5Mi0uNTA2MTA2OSAyLjM4LS41MSAyLjk4NDA1NjUuMDAwNTMyOSA1LjUxNDIxMzcgMi4xOTM5MjI5IDUuOTM4MDg4NCA1LjE0NzcyMTFzLTEuMzg3MzcxNSA1Ljc3MDE4NjQtNC4yNTA4NTgzIDYuNjA5ODUxYy0yLjg2MzQ4Njc4LjgzOTY2NDYtNS45MDg4NDY1OS0uNTUyNjEzNi03LjE0NzIzMDEtMy4yNjc1NzIxLTEuMjYgMS4yNS0yLjU0IDIuMjMtMi41NCA2LjA3LjA2MjMxMjg1IDEuNDk5NTM0OC42MDk3NTA4MSAyLjkzODMxNDEgMS41NiA0LjEgMS44NSAyLjQxIDUuNjcgNC44MyAxMy4wOCA1LjI3Ljc5IDAgMS42Mi4wNyAyLjQ5LjA3IDIuMDA3ODcuMDA0OSA0LjAxMzM0ODctLjEzODgyNTkgNi0uNDMtLjE0MjA2NzgtLjA5ODk2MjctLjI3NTg0My0uMjA5MzI3Mi0uNC0uMzMtLjY5OTY2OTctLjcwMjI3NjItLjkzNzEwMjItMS43NDIzMTcyLS42MTE1MTM0LTIuNjc4NjUxMi4zMjU1ODg5LS45MzYzMzQgMS4xNTcwNzUyLTEuNjA0NjgyOSAyLjE0MTUxMzQtMS43MjEzNDg4IDIuMzM0MTY3My0uMjI5ODY5NCA0LjYxMjgxODEtLjg1MTkzNDMgNi43NC0xLjg0IDQtMiA0LTMgOC0zaC4wOWMuNTk3ODA2My0xLjMwOTAxMDcuOTA4MTA4Ni0yLjczMDk0NTUuOTEtNC4xNy4wMjg4NzgxLTIuMDExNTY5Mi0uMTExNjE3OS00LjAyMTk5OTctLjQyLTYuMDF6bS0xNC41OCAxMC4xOGMtMy4zMTM3MDg1IDAtNi0yLjY4NjI5MTUtNi02czIuNjg2MjkxNS02IDYtNiA2IDIuNjg2MjkxNSA2IDYtMi42ODYyOTE1IDYtNiA2eiIgZmlsbD0iI2VjZjBmMSIvPjxwYXRoIGQ9Im0xNiA0MGMuMDAxMTA2NyAyLjgyMzY3NzItMS45NjY3NjI5IDUuMjY2MDE1My00LjcyNjA1ODkgNS44NjU1NDgyLTIuNzU5Mjk1OTcuNTk5NTMyOS01LjU2MzIyMTY0LS44MDYwMDE2LTYuNzMzOTQxMS0zLjM3NTU0ODIgMS4yMzYxOTI3Mi0xLjEyNTU5MDcgMi4wMjQ1MDYwNC0yLjY1OTYwNTggMi4yMi00LjMyLjIwMDQzNDM4LTEuMjM0MzYxOS40NzA4NzA1Ny0yLjQ1NjMzMjkuODEtMy42Ni43NjUwMjg3Ny0uMzM5MjgzNiAxLjU5MzExNzE2LS41MTMwNzk5IDIuNDMtLjUxIDMuMzEzNzA4NSAwIDYgMi42ODYyOTE1IDYgNnoiIGZpbGw9IiMzOTNmNGEiLz48cGF0aCBjbGFzcz0iby0tc3ZnLXBhbmRhLWVhciIgZD0ibTE1LjA3IDI1LjA5Yy0zLjE0MDUyMzcgMS4zMzk4NTE3LTUuNTc3MjYwNDggMy45MzI1MTA2LTYuNzIgNy4xNS0xLjcxMDcwMDUtMS4wNzMzMzQzLTIuNjA3NzM5NTUtMy4wNzA0MTA0LTIuMjczNzk3MS01LjA2MjE0OTYuMzMzOTQyNDQtMS45OTE3MzkyIDEuODMzMjkwODItMy41ODcwMjgxIDMuODAwNTE5MDctNC4wNDM3MDcxIDEuOTY3MjI4MjMtLjQ1NjY3OSA0LjAxNjAzNjAzLjMxNDkyODkgNS4xOTMyNzgwMyAxLjk1NTg1Njd6IiBmaWxsPSJjdXJyZW50Q29sb3IiLz48cGF0aCBjbGFzcz0iby0tc3ZnLXBhbmRhLWVhciIgZD0ibTQzIDI5Yy0uMDAxMDkzNiAxLjkzMTA1MjMtLjkzMTUzNTQgMy43NDM1NTI5LTIuNSA0Ljg3LTEuNTIwMjU2NS0zLjgxODgyODktNC42MjA2NTgxLTYuNzkxNTY2OS04LjUtOC4xNSAxLjQ1OTE3MDEtMi4xOTk5NDEzIDQuMTg0ODA0NC0zLjE4NzcwOTcgNi43MTQ2MDQ2LTIuNDMzMzY5MiAyLjUyOTgwMDMuNzU0MzQwNCA0LjI2OTM1NDggMy4wNzM1NDY5IDQuMjg1Mzk1NCA1LjcxMzM2OTJ6IiBmaWxsPSJjdXJyZW50Q29sb3IiLz48cGF0aCBkPSJtNTcgNTEuMjZjLS4zMDQ4MDU4LS4xNzI3NjA5LS42NDk2NDcyLS4yNjI0MTk3LTEtLjI2aC0yYy0xLjcyIDAtMy40NSAxLTMuOTMgNC44LS4wNTU3NDU0LjU1MjE1OS4xMjA0NDE1IDEuMTAyNjU2LjQ4NjQyNTggMS41MTk4NDAxLjM2NTk4NDMuNDE3MTg0Mi44ODg4NTcxLjY2MzU0MyAxLjQ0MzU3NDIuNjgwMTU5OWwtMTIuMTQuMDAwMTY4YzIuNzkzNjAxNi4wMjIyNzg2IDUuMDg1MzExOS0yLjIwNzAxMTYgNS4xNC01LjAwMDE2OCAwLTMuOTEtMi00LjkzLTMuOTEtNSAuNTk3ODA2My0xLjMwOTAxMDcuOTA4MTA4Ni0yLjczMDk0NTUuOTEtNC4xNy4wMjgzMTY5LTIuMDA4MjM0LS4xMTIxNzc0LTQuMDE1Mjk1OC0uNDItNiAyLjE4NTg1MTMuMTM3NzYxOSA0LjM0NDIyNi41NjEzNjgyIDYuNDIgMS4yNiAyLjMwOTg0OTEuNzUxMzMzOSA0LjM3OTg1OSAyLjEwMDI5MDQgNiAzLjkxLjIxMDQ0NzkuMjM2MjgzOC40MDQyNDY3LjQ4Njg4NTcuNTguNzUgMS41NTM0ODA1IDIuMTk4MDU0MiAyLjM5Nzg4MDMgNC44MTg0ODQ3IDIuNDIgNy41MXoiIGZpbGw9IiNkMWQ0ZDEiLz48cGF0aCBkPSJtNTggMzljLjAwMjY3MzIgMi4xNTQ4NzcxLTEuMzc1NTM4NCA0LjA2OTA2LTMuNDIgNC43NS0uMTc1NzUzMy0uMjYzMTE0My0uMzY5NTUyMS0uNTEzNzE2Mi0uNTgtLjc1LTEuNjIwMTQxLTEuODA5NzA5Ni0zLjY5MDE1MDktMy4xNTg2NjYxLTYtMy45MS0uMDA0ODUzLS4wMjk4MDM3LS4wMDQ4NTMtLjA2MDE5NjMgMC0uMDkgMC0yLjc2MTQyMzcgMi4yMzg1NzYzLTUgNS01czUgMi4yMzg1NzYzIDUgNXoiIGZpbGw9IiM1NjU5NWUiLz48cGF0aCBkPSJtNTggNTN2M2MwIDEuMTA0NTY5NS0uODk1NDMwNSAyLTIgMmgtNGMtLjU2Njk3NTYuMDAyODQyOC0xLjEwODUxNC0uMjM1MDk2MS0xLjQ4OTkwNzgtLjY1NDYyOTNzLS41NjY3OTc2LS45ODEyMzA4LS41MTAwOTIyLTEuNTQ1MzcwN2MuNDktMy44IDIuMjItNC44IDMuOTQtNC44aDJjMS4xMDQ1Njk1IDAgMiAuODk1NDMwNSAyIDJ6IiBmaWxsPSIjNTY1OTVlIi8+PGNpcmNsZSBpZD0iT3ZhbCIgY3g9IjI3IiBjeT0iNDIiIGZpbGw9IiMzOTNmNGEiIHI9IjYiLz48ZyBmaWxsPSIjMmMyZjM4Ij48cGF0aCBkPSJtMTIgNDJoLTJjLS41NTIyODQ3NSAwLTEtLjQ0NzcxNTMtMS0xcy40NDc3MTUyNS0xIDEtMWgyYy41NTIyODQ3IDAgMSAuNDQ3NzE1MyAxIDFzLS40NDc3MTUzIDEtMSAxeiIvPjxwYXRoIGQ9Im0yNyA0M2gtMmMtLjU1MjI4NDcgMC0xLS40NDc3MTUzLTEtMXMuNDQ3NzE1My0xIDEtMWgyYy41NTIyODQ3IDAgMSAuNDQ3NzE1MyAxIDFzLS40NDc3MTUzIDEtMSAxeiIvPjxwYXRoIGQ9Im0xNiA0OWMtLjI2NTgwMy4wMDE1MzY4LS41MjEyODEyLS4xMDI4MTM1LS43MS0uMjlsLTEtMWMtLjM5MjEyMjItLjM5MjEyMjItLjM5MjEyMjItMS4wMjc4Nzc4IDAtMS40MnMxLjAyNzg3NzgtLjM5MjEyMjIgMS40MiAwbC40OS40OSAxLjM1LS42N2MuMzIxMTgwOC0uMTkzMjYwNy43MjM0NzA1LS4xOTA2NzI4IDEuMDQyMTM4My4wMDY3MDQxLjMxODY2NzguMTk3Mzc2OC41MDAxOTI4LjU1NjM5MjguNDcwMjQzNC45MzAwMzY4cy0uMjY2MzQzMS42OTkxNjE3LS42MTIzODE3Ljg0MzI1OTFsLTIgMWMtLjEzNzk5OTMuMDc0ODcxOS0uMjkzMDIyNC4xMTI3NjY0LS40NS4xMXoiLz48L2c+PHBhdGggY2xhc3M9Im8tLXN2Zy1wYW5kYS16IiBkPSJtMzggMThoLTEwYy0uODQ4NTgwNS0uMDAwNjYxMi0xLjYwNDM2NjEtLjUzNjc1MDktMS44ODU0OTY0LTEuMzM3NDFzLS4wMjYzOTY4LTEuNjkxNTY1OS42MzU0OTY0LTIuMjIyNTlsNS41NS00LjQ0aC00LjNjLTEuMTA0NTY5NSAwLTItLjg5NTQzMDUtMi0ycy44OTU0MzA1LTIgMi0yaDEwYy44NDg1ODA1LjAwMDY2MTE2IDEuNjA0MzY2MS41MzY3NTA4NSAxLjg4NTQ5NjQgMS4zMzc0MDk5OC4yODExMzAzLjgwMDY1OTEyLjAyNjM5NjggMS42OTE1NjU4OS0uNjM1NDk2NCAyLjIyMjU5MDAybC01LjU1IDQuNDRoNC4zYzEuMTA0NTY5NSAwIDIgLjg5NTQzMDUgMiAycy0uODk1NDMwNSAyLTIgMnoiIGZpbGw9IiMzYjk3ZDMiLz48cGF0aCBjbGFzcz0iby0tc3ZnLXBhbmRhLXoyIiBkPSJtNTYgMTJoLTEwYy0uODQ4NTgwNS0uMDAwNjYxMi0xLjYwNDM2NjEtLjUzNjc1MDktMS44ODU0OTY0LTEuMzM3NDFzLS4wMjYzOTY4LTEuNjkxNTY1ODcuNjM1NDk2NC0yLjIyMjU5bDUuNTUtNC40NGgtNC4zYy0xLjEwNDU2OTUgMC0yLS44OTU0MzA1LTItMnMuODk1NDMwNS0yIDItMmgxMGMuODQ4NTgwNS4wMDA2NjExNiAxLjYwNDM2NjEuNTM2NzUwODUgMS44ODU0OTY0IDEuMzM3NDA5OTguMjgxMTMwMy44MDA2NTkxMi4wMjYzOTY4IDEuNjkxNTY1ODktLjYzNTQ5NjQgMi4yMjI1OTAwMmwtNS41NSA0LjQ0aDQuM2MxLjEwNDU2OTUgMCAyIC44OTU0MzA1IDIgMnMtLjg5NTQzMDUgMi0yIDJ6IiBmaWxsPSIjM2I5N2QzIi8+PC9nPjwvZz48L3N2Zz4nCiAgfSwgU2tpcF9BZF9IdG1sID0gJzxkaXYgY2xhc3M9Im8tLXNraXAtYWQiPjxkaXYgY2xhc3M9Im8tLXNsb2dhbiI+PHN0cm9uZz7liqDpgJ/lkKc8L3N0cm9uZz48ZGl2IGNsYXNzPSJvLS1sb2FkZXIiPicgKyBJY29uLmxvYWRlciArICI8L2Rpdj48c3Ryb25nPuWFreelnlY1ODc8L3N0cm9uZz48L2Rpdj48L2Rpdj4iLCBpc1ZpcFNpdGVSZWdleCA9IC8odlwucXF8dHZcLnNvaHV8aXFpeWl8eW91a3V8bWd0dnwxOTA1fHBwdHZ8bGUpXC4oY29tfGNuKS8sIGlzQW5pbWVTaXRlUmVnZXggPSAvKGJpbGliaWxpfGN5bG9saXxuaWNvdHZ8ZHVvbWltaHx6enpmdW58bWlrYW5hbml8eGJkbXxhZ2VmYW5zfHFpbm1laXxiaW1pYmltaSlcLihjb218bWV8b3JnfHR2fHZpZGVvKS8sIEUgPSBlbWl0dGVyKCk7CiAgbGV0IHBhZ2VJbmZvID0ge307CiAgY29uc3QgQXJyID0gewogICAgc2h1ZmZsZShuKSB7CiAgICAgIGZvciAobGV0IGUgPSBuLmxlbmd0aDsgMCA8IGU7ICkgewogICAgICAgIGNvbnN0IHQgPSBfTWF0aGZsb29yKE1hdGgucmFuZG9tKCkgKiBlKTsKICAgICAgICBlLS07CiAgICAgICAgY29uc3QgaSA9IG5bZV07CiAgICAgICAgbltlXSA9IG5bdF0sIG5bdF0gPSBpOwogICAgICB9CiAgICAgIHJldHVybiBuOwogICAgfSwKICAgIHJhbmRvbTogbiA9PiBuW19NYXRoZmxvb3IoTWF0aC5yYW5kb20oKSAqIG4ubGVuZ3RoKV0KICB9OwogIGxldCBhbGxvd1NjYWxlID0gITA7CiAgRS5vbigibG9nIiwgKGZ1bmN0aW9uKCkge30pKSwgRS5vbigidXJsLmNoYW5nZSIsIChmdW5jdGlvbihuKSB7CiAgICBsZXQge29sZFVybDogZSwgbmV3VXJsOiB0LCBhdXRvUGxheTogaX0gPSBuOwogICAgdHJ5IHsKICAgICAgYWRkb25HbygpOwogICAgfSBjYXRjaCAobikge30KICAgIGNvbnN0IG8gPSBBRERPTlMuZmluZCgoZnVuY3Rpb24obikgewogICAgICByZXR1cm4gbi5wbGF5ICYmIG4ucGxheS52aXAgJiYgSXMobi5wbGF5Lm1hdGNoLCBlKTsKICAgIH0pKSwgYSA9IEFERE9OUy5maW5kKChmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBuLnBsYXkgJiYgbi5wbGF5LnZpcCAmJiBJcyhuLnBsYXkubWF0Y2gsIHQpOwogICAgfSkpOwogICAgbyAmJiBhICYmIEUuZW1pdCgicGxheXVybC5jaGFuZ2UiKTsKICB9KSksIFNFQVJDSF9VUkxTICYmIElzTm90KC9kb3ViYW5cLmNvbS8pICYmIChTRUFSQ0hfVVJMUyA9ICLosYbnk6MgIGh0dHBzOi8vbW92aWUuZG91YmFuLmNvbS90YWcvXG5cbiIgKyBTRUFSQ0hfVVJMUyksCiAgU0VBUkNIX1VSTFMgPSBlbnN1cmVBcnJheShTRUFSQ0hfVVJMUykubWFwKChmdW5jdGlvbihuKSB7CiAgICBjb25zdCB7dXJsOiBlLCBuYW1lOiB0fSA9IHBhcnNlVXJsKG4pLCBpID0gSXMoaXNBbmltZVNpdGVSZWdleCwgZSksIG8gPSBJcyhpc1ZpcFNpdGVSZWdleCwgZSk7CiAgICByZXR1cm4gewogICAgICB1cmw6IGUsCiAgICAgIG5hbWU6IHQsCiAgICAgIHdlaWdodDogL2RvdWJhbi5jb20vLnRlc3QoZSkgPyAxMCA6IChJcygvYmlsaWJpbGkuY29tLykgfHwgSXMoaXNBbmltZVNpdGVSZWdleCkpICYmIGkgPyA1IDogKElzKGlzVmlwU2l0ZVJlZ2V4KSB8fCBJcygvZG91YmFuLmNvbS8pKSAmJiBvID8gMyA6IGkgPyAxIDogbyA/IDAgOiAyCiAgICB9OwogIH0pKSwgU0VBUkNIX1VSTFMuc29ydCgoZnVuY3Rpb24obiwgZSkgewogICAgcmV0dXJuIGUud2VpZ2h0IC0gbi53ZWlnaHQ7CiAgfSkpLCAkKCJodG1sIikuYWRkQ2xhc3MoIm8tLW1peWluZyIgKyAoaXNNb2JpbGUgPyAiIG8tLW0iIDogIiBvLS1wYyIpKTsKICBsZXQgd2luVyA9IHdpbmRvdy5pbm5lcldpZHRoIHx8IDA7CiAgZm9yIChjb25zdCBuID0gRGF0ZS5ub3coKTsgM2UzID4gRGF0ZS5ub3coKSAtIG4gJiYgMCA9PT0gKHdpblcgPSB3aW5kb3cuaW5uZXJXaWR0aCB8fCAwKTsgKSBhd2FpdCBkZWxheSgxMDApOwogIGNvbnN0IGJ1dHRvbkJveFNoYWRvdyA9ICJib3gtc2hhZG93OiAwIDJweCAycHggMCByZ2JhKDAsMCwwLDAuMik7IiwgbWF4U25pZmZJZnJhbWVXaWR0aCA9IDEwNSwgaXNTbmlmZklmcmFtZSA9IDAgPCB3aW5XICYmIHdpblcgPD0gbWF4U25pZmZJZnJhbWVXaWR0aCArIDU7CiAgcGFnZUluZm8gPSB7CiAgICBpc1NuaWZmSWZyYW1lOiBpc1NuaWZmSWZyYW1lLAogICAgd2luVzogd2luVywKICAgIHNjcmVlbldpZHRoOiBzY3JlZW5XaWR0aAogIH07CiAgY29uc3QgaXNKaWV4aVJlZ2V4ID0gLyhqeHx1cmx8dik9aHR0cC9pOwogIGxldCBtM3U4VmlkZW87CiAgaWYgKCFpc1NuaWZmSWZyYW1lICYmIChJcyhpc0ppZXhpUmVnZXgpICYmIElzKGlzVmlwU2l0ZVJlZ2V4LCBIcmVmLnJlcGxhY2UoLy4rPWh0dHAvLCAiaHR0cCIpKSB8fCBpc05vdFRvcCAmJiAoSXMoLz1odHRwLitcLm0zdTgvKSB8fCAobTN1OFZpZGVvID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigidmlkZW9bc3JjXSIpKSAmJiAvXC5tM3U4Ly50ZXN0KG0zdThWaWRlby5zcmMpKSkgJiYgKGFkZENzcygiXG5ib2R5ID4gKjpub3Qoc2NyaXB0KSArIHNjcmlwdCB+ICpbaWRdOm5vdChbY2xhc3NdKSB7IiArIFB1cmlmeVN0eWxlICsgIn0iKSwKICBmaXhNM3U4UGxheWluZygpKSwgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCAoZnVuY3Rpb24obikgewogICAgY29uc3QgZSA9IG4uZGF0YTsKICAgIGUgJiYgZS5faWQgPT09IE1FU1NBR0VfSUQgJiYgKGlzTm90VG9wICYmIGUucGFyZW50ID8gKGUuZnJvbSA9IGxvY2F0aW9uLmhyZWYsIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoZSwgIioiKSkgOiBpc1RvcCAmJiBlLmFjdGlvbiAmJiBFLmVtaXQoZS5hY3Rpb24sIGUpKTsKICB9KSksIGlzTm90VG9wKSB7CiAgICBpZiAoSXMoL20xOTA3LmNuLykpIHsKICAgICAgYWRkQ3NzKCJcbiNzLXBsYXllciArIC5zaG93ID4gZGl2W3RpdGxlXSwjcy1jb250cm9scyArIGRpdiA+IGRpdjpudGgtY2hpbGQobis1KTpub3QoOmxhc3QtY2hpbGQpeyIgKyBQdXJpZnlTdHlsZSArICJ9Iik7CiAgICAgIGxldCBuID0gMDsKICAgICAgY29uc3QgZSA9IHNldEludGVydmFsKChmdW5jdGlvbigpIHsKICAgICAgICAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3MtcGxheWVyICsgLnNob3ciKSB8fCAzMCA8IG4rKykgJiYgKGNsZWFySW50ZXJ2YWwoZSksCiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3MtY29udHJvbHMgPiBkaXYgaW1nICsgc3BhbiIpLmNsaWNrKCkpOwogICAgICB9KSwgMTAwKTsKICAgICAgcmV0dXJuIHZvaWQgKHdpbmRvdy5hbGVydCA9IGZ1bmN0aW9uKCkge30pOwogICAgfQogICAgcmV0dXJuIElzKC9qeC5qaWFzaGVzaGFuZ21hby5jb20vKSA/IGFkZENzcygiXG4jbGluZXMgeyIgKyBQdXJpZnlTdHlsZSArICJ9IikgOiBJcygvb2tqeC5jYy8pICYmIGFkZENzcygiLldBTkctV0FORyB7dmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7fSIpLAogICAgdm9pZCAoaXNTbmlmZklmcmFtZSAmJiBzbmlmZkluSWZyYW1lKCkpOwogIH0KICBpZiAoSXMoL2JlaWppeHNcLmNuLip1cmw9aHR0cC8pKSBpZiAoYWRkQ3NzKCJcbmJvZHkgPiBmb3JtIHtwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDtsZWZ0OiAwICFpbXBvcnRhbnQ7cmlnaHQ6IDAgIWltcG9ydGFudDt0b3A6IDAgIWltcG9ydGFudDtib3R0b206IDAgIWltcG9ydGFudDtiYWNrZ3JvdW5kOiAjZWVlOGQzICFpbXBvcnRhbnQ7ei1pbmRleDogIiArIE1BWF9aX0lOREVYICsgJyAhaW1wb3J0YW50O31kaXYsaW5wdXQsZm9ybSB7bWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7fWZvcm0gI2RpdmNzczUge2hlaWdodDogYXV0bztwYWRkaW5nOiAwIDFlbTtib3JkZXI6IG5vbmU7d2lkdGg6IGF1dG87fS5vLS1wYyBmb3JtICNkaXZjc3M1IHttYXgtd2lkdGg6IDU3MHB4ICFpbXBvcnRhbnQ7fS5vLS1tIGg1IGlucHV0W3R5cGU9InRleHQiXSB7d2lkdGg6IDkwJSAhaW1wb3J0YW50O21hcmdpbjogLjVlbSAwICFpbXBvcnRhbnQ7cGFkZGluZzogMCAuNWVtICFpbXBvcnRhbnQ7fS5vLS1mYWlsIHtoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDt9Lm8tLWZhaWwgPiBkaXYge3RleHQtYWxpZ246IGNlbnRlcjtib3JkZXItdG9wOiAxcHggc29saWQgIzQ5NTA1Nztib3JkZXItYm90dG9tOiAxcHggc29saWQgIzQ5NTA1NztwYWRkaW5nOiAxZW07Y29sb3I6ICNkOTQ4MGY7Zm9udC13ZWlnaHQ6IGJvbGQ7Zm9udC1zaXplOiAxNnB4O2JhY2tncm91bmQtY29sb3I6ICNmZmY0ZTY7fS5vLS1mYWlsID4gZGl2ID4gZGl2ICsgZGl2IHttYXJnaW4tdG9wOiAxZW07fS5vLS1tIC52aWRlby1qcyB7d2lkdGg6IDEwMCUgIWltcG9ydGFudDtoZWlnaHQ6IDEwMHZoICFpbXBvcnRhbnQ7fScpLAogIGlzTW9iaWxlICYmIHRvZ2dsZVZpZXdwb3J0KCksIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNUZXh0Qm94MSIpLnZhbHVlKSB7CiAgICAkKCIjZm9ybTEiKS5wcmVwZW5kKCQoIi52aWRlby1qcyIpLnBhcmVudCgpKTsKICAgIGxldCBuID0gMDsKICAgIGNvbnN0IGUgPSBzZXRJbnRlcnZhbCgoZnVuY3Rpb24oKSB7CiAgICAgIGNvbnN0IHQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJ2aWRlbyIpOwogICAgICBpZiAodCAmJiAzOTAgPiB0LmR1cmF0aW9uKSB7CiAgICAgICAgdC5wYXVzZSgpOwogICAgICAgIGNvbnN0IG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjVGV4dEJveDIiKS52YWx1ZSB8fCAiIiwgaSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInZpZGVvIik7CiAgICAgICAgaS5jbGFzc0xpc3QuYWRkKCJvLS1mYWlsIiksIGkuaW5uZXJIVE1MID0gIjxkaXY+PGRpdj7op6PmnpDlpLHotKU8L2Rpdj4iICsgKG4gPyAiPGRpdj4iICsgbiArICI8L2Rpdj4iIDogIiIpICsgIjwvZGl2PiIsCiAgICAgICAgY2xlYXJJbnRlcnZhbChlKTsKICAgICAgfQogICAgICAxMDAgPCBuKysgJiYgY2xlYXJJbnRlcnZhbChlKTsKICAgIH0pLCAxMDApOwogIH0gZWxzZSB7CiAgICBsZXQgbiA9IEhyZWYuc3BsaXQoInVybD0iKVsxXTsKICAgIGlmIChuKSB7CiAgICAgIG4gPSBkZWNvZGVVUkkobiksIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNUZXh0Qm94MSIpLnZhbHVlID0gbjsKICAgICAgY29uc3QgZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNCdXR0b24xIik7CiAgICAgIGlmIChlKSB7CiAgICAgICAgY29uc3QgbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi52aWRlby1qcyIpOwogICAgICAgIG4uc3R5bGUuZGlzcGxheSA9ICJub25lICFpbXBvcnRhbnQiLCBlLmNsaWNrKCk7CiAgICAgIH0KICAgIH0KICAgIGxldCBlID0gMDsKICAgIGNvbnN0IHQgPSBzZXRJbnRlcnZhbCgoZnVuY3Rpb24oKSB7CiAgICAgIGNvbnN0IG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJ2aWRlbyIpOwogICAgICBuICYmIDM2MCA+IG4uZHVyYXRpb24gPyBuLnBhdXNlKCkgOiBuLnBsYXkoKSwgMTAwIDwgZSsrICYmIGNsZWFySW50ZXJ2YWwodCk7CiAgICB9KSwgMTAwKTsKICB9IGVsc2UgewogICAgaWYgKElzKC9tXC50dlwuc29odVwuY29tXC9waG9uZV9wbGF5X2ZpbG0uK3ZpZD0vKSkgcmV0dXJuIGxvY2F0aW9uLmhyZWYgPSBIcmVmLnJlcGxhY2UoInBob25lX3BsYXlfZmlsbSIsICJ2IiArIEhyZWYubWF0Y2goL3ZpZD0oXGQrKS8pWzFdICsgIi5zaHRtbCIpOwogICAgaWYgKElzKC9zZWFyY2hcLmRvdWJhblwuY29tXC9tb3ZpZVwvLykpIGFkZENzcygiXG4jZGFsZV9tb3ZpZV9zdWJqZWN0X3NlYXJjaF9ib3R0b20sI2RhbGVfbW92aWVfc3ViamVjdF9zZWFyY2hfdG9wX3JpZ2h0LCNkYWxlX21vdmllX3N1YmplY3RfdG9wX3JpZ2h0LCNkYWxlX21vdmllX3N1YmplY3RfYm90dG9tX3N1cGVyX2Jhbm5lciwjZGFsZV9tb3ZpZV9zdWJqZWN0X21pZGRsZV9yaWdodCB7IiArIFB1cmlmeVN0eWxlICsgIn0uby0tanVtcCB7cGFkZGluZy1sZWZ0OiAxZW07fS5vLS1qdW1wIGEge2Rpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7YWxpZ24taXRlbXM6IGNlbnRlcjtib3JkZXItcmFkaXVzOiA0cHg7Zm9udC1zaXplOiAwLjc1ZW07aGVpZ2h0OiAyZW07anVzdGlmeS1jb250ZW50OiBjZW50ZXI7bGluZS1oZWlnaHQ6IDEuNTtwYWRkaW5nLWxlZnQ6IDAuNzVlbTtwYWRkaW5nLXJpZ2h0OiAwLjc1ZW07d2hpdGUtc3BhY2U6IG5vd3JhcDtiYWNrZ3JvdW5kLWNvbG9yOiAjZWZmYWYzO2NvbG9yOiAjMjU3OTQyO21hcmdpbi10b3A6IDAuNWVtO21hcmdpbi1yaWdodDogMC41ZW07Y3Vyc29yOiBwb2ludGVyO30iKSwKICAgICQoKGZ1bmN0aW9uKCkgewogICAgICAkKCIjaWNwIikuaHRtbChPT19TSUdOKSwgJCgiLmdlbXpjcCIpLmVhY2goKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICBjb25zdCB0ID0gJCgiLnRpdGxlIiwgZSkudGV4dCgpOwogICAgICAgICQoZSkuYXBwZW5kKCc8cCBjbGFzcz0iby0tanVtcCI+JyArIGdldFNlYXJjaFNvdXJjZXNIdG1sKHQpICsgIjwvcD4iKTsKICAgICAgfSkpOwogICAgfSkpOyBlbHNlIGlmIChJcygvbVwuZG91YmFuXC5jb21cL3NlYXJjaFwvXD8uKnR5cGU9bW92aWUvKSkgYWRkQ3NzKCJcbiNUYWxpb25OYXYsLnNlYXJjaC1yZXN1bHRzLW1vZHVsZXMtbmFtZSB7IiArIFB1cmlmeVN0eWxlICsgIn0uc2VhcmNoLW1vZHVsZSB7bWFyZ2luLXRvcDogMDt9LnNlYXJjaC1yZXN1bHRzIGltZyB7d2lkdGg6IDgwcHg7fS5zZWFyY2gtcmVzdWx0cyB7cGFkZGluZy1ib3R0b206IDEwcHg7fS5zZWFyY2gtcmVzdWx0cyBsaSBhIHtkaXNwbGF5OiBmbGV4O2FsaWduLWl0ZW1zOiBjZW50ZXI7fS5zZWFyY2gtcmVzdWx0cyBpbWcge2hlaWdodDogMTAwJTtwYWRkaW5nOiAwO21hcmdpbjogNXB4IDA7Ym9yZGVyOiAycHggc29saWQ7Ym9yZGVyLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjMmI2OGM0IDAlLCNjZjJkNmUgMTAwJSkxO30iKSwKICAgICQoKGZ1bmN0aW9uKCkgewogICAgICAkKCIjbW9yZS1zZWFyY2giKS5hcHBlbmQoIiAgICAiICsgT09fU0lHTiksICQoIi5zdWJqZWN0LWluZm8iKS5lYWNoKChmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgaW5zZXJ0U2VhcmNoQWRkb24oJCgiLnN1YmplY3QtdGl0bGUiLCBlKS50ZXh0KCksIGUsICJhcHBlbmQiKTsKICAgICAgfSkpLCAkKCIuc2VhcmNoLWhkIGlucHV0Iikub24oImtleXVwIiwgKGZ1bmN0aW9uKG4pIHsKICAgICAgICAxMyA9PT0gbi5rZXlDb2RlICYmIChuLnByZXZlbnREZWZhdWx0KCksIGxvY2F0aW9uLmhyZWYgPSAiL3NlYXJjaC8/cXVlcnk9IiArIG4udGFyZ2V0LnZhbHVlICsgIiZ0eXBlPW1vdmllIik7CiAgICAgIH0pKSwgJCgiLnNlYXJjaC1oZCAuYnV0dG9uLXNlYXJjaCIpLmF0dHIoImlkIiwgT09fU0lHTiksICQoIi5zZWFyY2gtaGQgLmJ1dHRvbi1zZWFyY2giKS5vbigiY2xpY2siLCAoZnVuY3Rpb24obikgewogICAgICAgIG4ucHJldmVudERlZmF1bHQoKTsKICAgICAgICBjb25zdCBlID0gJCgiLnNlYXJjaC1oZCBpbnB1dCIpLnZhbCgpOwogICAgICAgIGxvY2F0aW9uLmhyZWYgPSAiL3NlYXJjaC8/cXVlcnk9IiArIGUgKyAiJnR5cGU9bW92aWUiOwogICAgICB9KSk7CiAgICB9KSk7IGVsc2UgaWYgKElzKC9tb3ZpZS5kb3ViYW4uY29tXC9zdWJqZWN0XC8vKSkgYWRkQ3NzKCJcbiNkYWxlX21vdmllX3N1YmplY3Rfc2VhcmNoX2JvdHRvbSwjZGFsZV9tb3ZpZV9zdWJqZWN0X3NlYXJjaF90b3BfcmlnaHQsI2RhbGVfbW92aWVfc3ViamVjdF90b3BfcmlnaHQsI2RhbGVfbW92aWVfc3ViamVjdF9ib3R0b21fc3VwZXJfYmFubmVyLCNkYWxlX21vdmllX3N1YmplY3RfbWlkZGxlX3JpZ2h0IHsiICsgUHVyaWZ5U3R5bGUgKyAifS5vLS1kb3ViYW4tc291cmNlIGEge2NvbG9yOiAjMjU3OTQyO30uby0tZG91YmFuLXNvdXJjZSBhOmhvdmVyIHtjb2xvcjogI0ZGRkZGRjtiYWNrZ3JvdW5kOiAjMjU3OTQyO30uby0tZG91YmFuLXNvdXJjZSBhLmlzLXZpcCB7Y29sb3I6ICNlODU5MGM7fS5vLS1kb3ViYW4tc291cmNlIGEuaXMtdmlwOmhvdmVyIHtjb2xvcjogI0ZGRkZGRjtiYWNrZ3JvdW5kOiAjZTg1OTBjO30uby0tZG91YmFuLXNvdXJjZSBhLmlzLWFuaW1lIHtjb2xvcjogI2U2NDk4MDt9Lm8tLWRvdWJhbi1zb3VyY2UgYS5pcy1hbmltZTpob3ZlciB7Y29sb3I6ICNGRkZGRkY7YmFja2dyb3VuZDogI2U2NDk4MDt9IiksCiAgICAkKChmdW5jdGlvbigpIHsKICAgICAgJCgiI2ljcCIpLmh0bWwoT09fU0lHTik7CiAgICAgIGNvbnN0IG4gPSBwdXJpZnlLZXl3b3JkKCQoInRpdGxlIikudGV4dCgpLnJlcGxhY2UoIijosYbnk6MpIiwgIiIpLnRyaW0oKSk7CiAgICAgICQoIiNpbmZvIikuYXBwZW5kKCc8ZGl2IGNsYXNzPSJvLS1kb3ViYW4tc291cmNlIj48c3BhbiBjbGFzcz0icGwiPuWcqOe6v+inguecizo8L3NwYW4+PHNwYW4+PHNwYW4+IDwvc3Bhbj4nICsgU0VBUkNIX1VSTFMuZmlsdGVyKChmdW5jdGlvbihuKSB7CiAgICAgICAgcmV0dXJuICEvZG91YmFuXC5jb20vLnRlc3Qobi51cmwpOwogICAgICB9KSkubWFwKChmdW5jdGlvbihlKSB7CiAgICAgICAgcmV0dXJuICc8c3Bhbj48YSBjbGFzcz0iJyArIChpc1ZpcFNpdGVSZWdleC50ZXN0KGUudXJsKSA/ICJpcy12aXAiIDogaXNBbmltZVNpdGVSZWdleC50ZXN0KGUudXJsKSA/ICJpcy1hbmltZSIgOiAiIikgKyAnIiAnICsgKGlzTW9iaWxlID8gIiIgOiAndGFyZ2V0PSJfYmxhbmsiICcpICsgKF9EID8gJ2RhdGEtd2VpZ2h0PSInICsgZS53ZWlnaHQgKyAnIiAnIDogIiIpICsgJ2hyZWY9IicgKyB0b1NlYXJjaFVybChlLnVybCwgbikgKyAnIj4nICsgZS5uYW1lICsgIjwvYT4iOwogICAgICB9KSkuam9pbigiIC8gPC9zcGFuPiIpICsgIjwvc3Bhbj48L3NwYW4+PC9kaXY+Iik7CiAgICB9KSk7IGVsc2UgaWYgKElzKC9tXC5kb3ViYW5cLmNvbVwvbW92aWVcL3N1YmplY3RcLy8pKSBhZGRDc3MoIi5zY29yZS13cml0ZSxhW2hyZWYqPSd0b19hcHAnXTpub3QoLnN1Yi1ob25vcik6bm90KC5zdWItY292ZXIpLGFbaHJlZio9J2RvdWJhbmFwcCddLGRpdltpZCo9J0JBSURVJ10sZGl2W2lkKj0nZ29vZ2xlJ10sc2VjdGlvbiArIC5jZW50ZXIsLmJvdHRvbV9hZF9kb3dubG9hZCwuc3ViLXZlbmRvciwudG9fcGMsLlRhbGlvbk5hdi1zdGF0aWMsLnN1Yi1kZXRhaWwgLm1hcmstbW92aWUsLnN1Yi1kZXRhaWwgLm1hcmstdHYsLnN1YmplY3QtYmFubmVyLC5ib3R0b21fYWRfZG93bmxvYWQsLmNvdmVyLWNvdW50LCNnb29nbGVfZXNmLC5hZHNieWdvb2dsZSwuQWR2ZXJ0aXNlbWVudCwuVGFsaW9uTmF2LXByaW1hcnkgLm5hdi1idG5zLmNhbmNlbCB7IiArIFB1cmlmeVN0eWxlICsgJ30uc3ViLWluZm8gLnN1Yi1jb3ZlciB7ZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDt9LlRhbGlvbk5hdi1wcmltYXJ5IHtwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDt9LnN1YmplY3QtaGVhZGVyLXdyYXAgLnN1Yi1ob25vciB7Zm9udC1zaXplOiAxMnB4O30uc3ViamVjdC1pbnRybyB7bWFyZ2luLXRvcDogLjVlbTt9LnN1YmplY3QtY29tbWVudHMsLnN1YmplY3QtcmV2aWV3cyB7bWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50O30uVGFsaW9uTmF2IC5UYWxpb25OYXYtcHJpbWFyeSAuc2VhcmNoLWJveCB7d2lkdGg6IDIwMHB4O2ZsZXg6IDIwMHB4IDAgMDthbmltYXRpb246IG5vbmU7fWEubmF2LWJ0bi1pdGVtW2hyZWYqPVwnbG9nb3V0XCddIHt3aWR0aDogNWVtO21hcmdpbi1sZWZ0OiAtLjVlbTtmb250LXNpemU6IC44ZW07fS5zdWItb3JpZ2luYWwtdGl0bGUge3BhZGRpbmc6IDAuMjVlbSAwO30uX1Zfc2lnbiB7Zm9udC1zaXplOiAwLjg1ZW07b3BhY2l0eTogMC4yNTt0ZXh0LWFsaWduOiBjZW50ZXI7cGFkZGluZy1ib3R0b206IDFlbTt9Ll9WX3NvdXJjZSwgLnN1Yi1zY29yZSArIC5zdWItc2NvcmUge21hcmdpbi10b3A6IDEuNWVtICFpbXBvcnRhbnQ7Y29sb3I6ICNmZmY7fS5fVl9zb3VyY2UgLnN1Yi1zY29yZSAuc3ViLWNvbnRlbnQge2Rpc3BsYXk6IGJsb2NrO30uX1Zfc291cmNlIC5zdWItc2NvcmUgYSB7cGFkZGluZzogMC4zZW0gMC41ZW0gMC4yZW07bGluZS1oZWlnaHQ6IDEuNDttYXJnaW46IDAgMC4xNWVtO2JvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yKTtmb250LXNpemU6IDEuMDVlbTtmb250LXdlaWdodDogYm9sZDtsZXR0ZXItc3BhY2luZzogMXB4O21hcmdpbi10b3A6IDAuNWVtO2Rpc3BsYXk6IGlubGluZS1ibG9jaztjb2xvcjogI2ZmZThjYztiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgMjM4LCAyMzgsIDAuMDUpO2JvcmRlci1yYWRpdXM6IDRweDtib3gtc2hhZG93OiAwIDJweCAycHggMCByZ2JhKDAsMCwwLDAuMik7fSNUYWxpb25OYXYge2Rpc3BsYXk6IG5vbmU7fSNUYWxpb25OYXYgLmxvZ28ge2JhY2tncm91bmQ6IG5vbmU7Zm9udC1zaXplOiAxZW07ZGlzcGxheTogaW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OiBjZW50ZXI7YWxpZ24taXRlbXM6IGNlbnRlcjtjb2xvcjogI2RlZTJlNjttYXJnaW4tcmlnaHQ6IDVweDt9LnNlYXJjaC1ib3g6bm90KC5vbi1zZWFyY2gpIHtvcGFjaXR5OiAwLjc7fSNjaGFubmVsX3RhZ3Mge21hcmdpbi1ib3R0b206IDEwcHg7fS5zdWJqZWN0LWhlYWRlci13cmFwIC5zdWItZGV0YWlsIHtkaXNwbGF5OiBmbGV4O2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47anVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7fSNjaGFubmVsX3RhZ3Mge21hcmdpbi10b3A6IDEwcHg7fWlucHV0W3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uLGlucHV0W3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLGlucHV0W3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWJ1dHRvbixpbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtcmVzdWx0cy1kZWNvcmF0aW9uIHstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTt9Lm8tLWRvdWJhbi1zb3VyY2UgYSB7Y29sb3I6ICNlOWZhYzggIWltcG9ydGFudDt9Lm8tLWRvdWJhbi1zb3VyY2UgYS5pcy12aXAge2NvbG9yOiAjZmZjMDc4ICFpbXBvcnRhbnQ7fS5vLS1kb3ViYW4tc291cmNlIGEuaXMtYW5pbWUge2NvbG9yOiAjZmZkZWViICFpbXBvcnRhbnQ7fScpLAogICAgJCgoZnVuY3Rpb24oKSB7CiAgICAgICQoIi5tb3ZpZS1yZXZpZXdzIC5zaG93LWFsbCIpLmFmdGVyKCc8ZGl2IGNsYXNzPSJfVl9zaWduIj48YSBocmVmPSJodHRwczovL2dpdGVlLmNvbS9lY3J1b3Mvb28iPuixhueTo8K35YeA5YyWICcgKyBPT19TSUdOICsgIjwvYT48L2Rpdj4iKSwKICAgICAgJCgic2VjdGlvbiArIC5jZW50ZXIiKS5lYWNoKChmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgJChlKS5yZW1vdmUoKTsKICAgICAgfSkpLCAkKCIuc3ViamVjdC1oZWFkZXItd3JhcCIpLmFmdGVyKCQoIiNUYWxpb25OYXYiKSksICQoIiNUYWxpb25OYXYiKS5jc3MoImRpc3BsYXkiLCAiYmxvY2siKSwKICAgICAgJCgiI1RhbGlvbk5hdiAubG9nbyIpLmh0bWwoT09fU0lHTikuYXR0cigiaHJlZiIsICJodHRwczovL21vdmllLmRvdWJhbi5jb20vdGFnLyMvIiksCiAgICAgICQoIi5zZWFyY2gtYm94IikucmVtb3ZlKCksICQoIi5UYWxpb25OYXYtcHJpbWFyeSAubG9nbyIpLmFmdGVyKCc8ZGl2IGNsYXNzPSJzZWFyY2gtYm94Ij48aW5wdXQgY2xhc3M9InNlYXJjaC1pbnB1dCIgdHlwZT0ic2VhcmNoIiBwbGFjZWhvbGRlcj0i5pCc57SiIj48L2Rpdj4nKSwKICAgICAgJCgiLnNlYXJjaC1pbnB1dCIpLm9uKCJmb2N1cyIsIChmdW5jdGlvbigpIHsKICAgICAgICAkKHRoaXMpLnBhcmVudCgpLmFkZENsYXNzKCJvbi1zZWFyY2giKTsKICAgICAgfSkpLm9uKCJibHVyIiwgKGZ1bmN0aW9uKCkgewogICAgICAgICQodGhpcykucGFyZW50KCkucmVtb3ZlQ2xhc3MoIm9uLXNlYXJjaCIpOwogICAgICB9KSksICQoIi5zZWFyY2gtaW5wdXQiKS5vbigia2V5dXAiLCAoZnVuY3Rpb24obikgewogICAgICAgIDEzID09PSBuLmtleUNvZGUgJiYgKG4ucHJldmVudERlZmF1bHQoKSwgbG9jYXRpb24uaHJlZiA9ICIvc2VhcmNoLz9xdWVyeT0iICsgbi50YXJnZXQudmFsdWUgKyAiJnR5cGU9bW92aWUiKTsKICAgICAgfSkpOwogICAgICBjb25zdCBuID0gcHVyaWZ5S2V5d29yZCgkKCIuc3ViLXRpdGxlIikudGV4dCgpLnRyaW0oKSk7CiAgICAgIDAgPT09ICQoIi5fVl9zb3VyY2UiKS5sZW5ndGggJiYgJCgiLnN1YmplY3QtaGVhZGVyLXdyYXAiKS5hcHBlbmQoJzxkaXYgY2xhc3M9Il9WX3NvdXJjZSBzdWJqZWN0LW1hcmsiPjxkaXYgY2xhc3M9InN1Yi1zY29yZSI+PGRpdiBjbGFzcz0ic3ViLXRyYWRlbWFyayI+5Zyo57q/6KeC55yLPC9kaXY+PGRpdiBjbGFzcz0ic3ViLWNvbnRlbnQgby0tZG91YmFuLXNvdXJjZSI+JyArIGdldFNlYXJjaFNvdXJjZXNIdG1sKG4sICExKSArICI8L2Rpdj48L2Rpdj48L2Rpdj4iKSwKICAgICAgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgJCgiLnN1YmplY3QtaW50cm8gLmJkIHAiKS5nZXQoMCkuY2xpY2soKSwgJCgiLnN1Yi1jb3ZlciIpLmF0dHIoImhyZWYiLCAiIyIpLCAkKCIjc3ViamVjdC1ob25vci1yb290IGEiKS5hdHRyKCJocmVmIiwgIiMiKTsKICAgICAgfSksIDFlMyk7CiAgICAgIGxldCBlID0gMDsKICAgICAgY29uc3QgdCA9IHNldEludGVydmFsKChmdW5jdGlvbigpIHsKICAgICAgICAkKCJib2R5ID4gaW5zLCBib2R5ID4gaWZyYW1lLCAuYWRzYnlnb29nbGUiKS5yZW1vdmUoKSwgNSA8IGUrKyAmJiBjbGVhckludGVydmFsKHQpOwogICAgICB9KSwgNTAwKTsKICAgICAgIWZ1bmN0aW9uIG4oKSB7CiAgICAgICAgY29uc3QgZSA9ICQoIiNzdWJqZWN0LWhlYWRlci1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIpOwogICAgICAgIGlmIChlKSB7CiAgICAgICAgICBjb25zdCBuID0gZS5tYXRjaCgvOlxzKihbXjtdKyk7Py8pWzFdLCB0ID0gbi5yZXBsYWNlKCIpIiwgIiwgMCkiKTsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGFkZENzcygiLnN1Yi1jb3Zlcjo6YmVmb3JlIHtiYWNrZ3JvdW5kOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudChib3R0b20sICIgKyBuICsgIiAwJSwgIiArIHQgKyAiIDUlKSwgLXdlYmtpdC1saW5lYXItZ3JhZGllbnQocmlnaHQsICIgKyBuICsgIiAwJSwgIiArIHQgKyAiIDUlKSwtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICIgKyBuICsgIiAwJSwgIiArIHQgKyAiIDUlKSwgLXdlYmtpdC1saW5lYXItZ3JhZGllbnQobGVmdCwgIiArIG4gKyAiIDAlLCAiICsgdCArICcgNSUpO2NvbnRlbnQ6ICIiO2JvdHRvbTogMDtwb3NpdGlvbjogYWJzb2x1dGU7bGVmdDogMDtyaWdodDogMDt0b3A6IDA7d2lkdGg6IDEwMnB4O2hlaWdodDogMTQycHg7Ym9yZGVyLXJhZGl1czogNHB4O30nKTsKICAgICAgICAgIH0gY2F0Y2ggKG4pIHt9CiAgICAgICAgfSBlbHNlIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgbigpOwogICAgICAgIH0pLCAxMDApOwogICAgICB9KCk7CiAgICB9KSk7IGVsc2UgaWYgKElzKC9tb3ZpZVwuZG91YmFuXC5jb21cL3RhZ1wvLykpIGFkZENzcygiLmFzaWRlLCAuZXh0cmEsLmRhbGVfbW92aWVfdGFnX2JvdHRvbV9iYW5uZXIgeyIgKyBQdXJpZnlTdHlsZSArICJ9IiArIHByZWZpeENzcygiLmdyaWQtMTYtOCAuYXJ0aWNsZSB7d2lkdGg6IGF1dG87ZmxvYXQ6IHVuc2V0O31oMSB7ZGlzcGxheTogbm9uZTt9I2RiLW5hdi1tb3ZpZSB7bWFyZ2luLWJvdHRvbTogMjBweDt9I2RiLW5hdi1tb3ZpZSAuby0tbmF2LWl0ZW0tYSB7YmFja2dyb3VuZC1jb2xvcjogIzI3YTtjb2xvcjogI2ZhZmFmYTtwYWRkaW5nOiAzcHggNXB4O2JvcmRlci1yYWRpdXM6IDNweDt9Lmxpc3Qtd3Age2Rpc3BsYXk6IGZsZXg7ZmxleC13cmFwOiB3cmFwO2p1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjttYXJnaW4tdG9wOiAyNXB4O31hLml0ZW0ge3dpZHRoOiAxMThweDttYXJnaW46IDAgOHB4O31kaXYuaXRlbSB7d2lkdGg6IDEwMCU7bWFyZ2luLWxlZnQ6IDhweDttYXJnaW4tcmlnaHQ6IDhweDttYXJnaW4tYm90dG9tOiAxNnB4O31hLml0ZW0gcCB7cGFkZGluZy1yaWdodDogMDt0ZXh0LWFsaWduOiBjZW50ZXI7fWEuaXRlbSAuY292ZXItd3AsIGRpdi5pdGVtIC5wb3N0ZXIge292ZXJmbG93OiBoaWRkZW47Ym9yZGVyLXJhZGl1czogM3B4O2JveC1zaGFkb3c6IDAgMXB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMzkpO2JvcmRlcjogM3B4IHNvbGlkICNmMWVkZWQ7aGVpZ2h0OiBhdXRvO31AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDMyMHB4KSB7YS5pdGVtIC5jb3Zlci13cCB7Ym9yZGVyLXdpZHRoOiAwO319YS5pdGVtIC5jb3Zlci13cDpob3ZlciwgZGl2Lml0ZW0gLnBvc3Rlcjpob3ZlciB7Ym94LXNoYWRvdzogMCA1cHggMTBweCByZ2JhKDAsIDAsIDAsIDAuNSk7fWEuaXRlbSAucGljIGltZyB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxNjNweDtvYmplY3QtZml0OiBjb3Zlcjt9YS5pdGVtIC5jb3Zlci13cDphZnRlciB7ZGlzcGxheTogbm9uZTt9LnRhZy1uYXYge21hcmdpbi1yaWdodDogMDt9Lm8tLWl0ZW0tZGl2aWRlciB7d2lkdGg6IDEwMCU7fS5vLS1pdGVtLWRpdmlkZXIgKyAuby0taXRlbS1kaXZpZGVyIHtkaXNwbGF5OiBub25lO30iLCAiLm8tLW1peWluZyIpICsgcHJlZml4Q3NzKCIuY2F0ZWdvcnkge3dpZHRoOiAxMDAlO3doaXRlLXNwYWNlOiBub3dyYXA7b3ZlcmZsb3cteDogYXV0bzt9LnRhZ3Mge21hcmdpbi1ib3R0b206IDFlbSAhaW1wb3J0YW50O30udGFncywgLm8tLWRvdWJhbi1zZWFyY2gge3BhZGRpbmctbGVmdDogNnB4O3BhZGRpbmctcmlnaHQ6IDZweDt9LmNoZWNrYm94X19pbnB1dCB7dmVydGljYWwtYWxpZ246IHRleHQtdG9wO30udGFnLW5hdiB7bWFyZ2luOiAwIGF1dG87Zm9udC1zaXplOiAxMnB4O3dpZHRoOiAxMDAlO30udGFnLW5hdiAudGFicywgLnRhZy1uYXYgLmNoZWNrIHtkaXNwbGF5OiBmbGV4O2p1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO3dpZHRoOiAxMDAlO30udGFnLW5hdiAudGFicyBhIHtwYWRkaW5nOiA3LjVweCA1cHggNXB4O30udGFicyBhOm5vdCgudGFiLWNoZWNrZWQpIHtib3JkZXI6IDFweCBzb2xpZCAjZGZkZmRmO30udGFicyAudGFiLWNoZWNrZWQge2JvcmRlcjogMXB4IHNvbGlkICMyNThkY2QhaW1wb3J0YW50O30udGFiLWNoZWNrZWQ6YWZ0ZXIge2Rpc3BsYXk6IG5vbmU7fS5jaGVja2JveCwgLnJhbmdlIHttYXJnaW4tcmlnaHQ6IDVweDt9LmNoZWNrIHtmbG9hdDogbm9uZTttYXJnaW4tdG9wOiA1cHg7fS5saXN0LXdwIHttYXJnaW4tdG9wOiA0MHB4O2p1c3RpZnktY29udGVudDogc3BhY2UtZXZlbmx5O30ubGlzdC13cCwgLml0ZW0gLmNvdmVyLXdwIHtvdmVyZmxvdzogdW5zZXQ7fWEuaXRlbSB7d2lkdGg6IGNhbGMoKDEwMCUgLSAxNXB4KSAvIDMpO3RleHQtYWxpZ246IGNlbnRlcjttYXJnaW46IDAgMnB4O31hLml0ZW0gcCB7cGFkZGluZy1yaWdodDogMDt9YS5pdGVtIC5jb3Zlci13cDphZnRlciwgLnBvc3RlcjphZnRlciB7ZGlzcGxheTogbm9uZTt9LnRhZy1uYXYgLnJhbmdlLWRyb3Bkb3duIHtsZWZ0OiAwICFpbXBvcnRhbnQ7d2lkdGg6IGF1dG8gIWltcG9ydGFudDtyaWdodDogMCAhaW1wb3J0YW50O3RvcDogLTRlbSAhaW1wb3J0YW50O30ubW9yZSB7bWFyZ2luOiAwIDFlbSAwLjVlbSAhaW1wb3J0YW50O30iLCAiLm9vIikgKyBwcmVmaXhDc3MoIlxuYm9keSA+ICo6bm90KC5vbykgeyIgKyBQdXJpZnlTdHlsZSArICJ9I2FwcCAuYXJ0aWNsZSwgLmFydGljbGUub28ge3Bvc2l0aW9uOiBhYnNvbHV0ZTt0b3A6IDA7bGVmdDogMDtyaWdodDogMDtwYWRkaW5nOiAxMHB4IDA7dHJhbnNpdGlvbjogYWxsIDAuOHM7fS5jYXRlZ29yeTo6LXdlYmtpdC1zY3JvbGxiYXIge3dpZHRoOiAxcHg7aGVpZ2h0OiAxcHg7YmFja2dyb3VuZC1jb2xvcjogcmdiYSgyMjMsIDIyMywgMjIzLCAwLjI1KTt9LmNhdGVnb3J5Ojotd2Via2l0LXNjcm9sbGJhci10cmFjayB7YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Ym9yZGVyOiAwcHggbm9uZSAjZmZmZmZmO2JvcmRlci1yYWRpdXM6IDUwcHg7fS5jYXRlZ29yeTo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgey13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAwIDIuNXB4IHJnYmEoMCwgMCwgMCwgMC4xKTtib3gtc2hhZG93OiBpbnNldCAwIDAgMi41cHggcmdiYSgwLCAwLCAwLCAwLjEpO2JvcmRlci1yYWRpdXM6IDIuNXB4O2JhY2tncm91bmQtY29sb3I6IHJnYmEoMjIzLCAyMjMsIDIyMywgMC4yNSk7b3BhY2l0eTogMC43O3RyYW5zaXRpb246IG9wYWNpdHkgZWFzZS1pbi1vdXQgMjAwbXM7fS5jYXRlZ29yeTo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge29wYWNpdHk6IDE7YmFja2dyb3VuZC1jb2xvcjogcmdiYSgyMjMsIDIyMywgMjIzLCAwLjI1KTt9Lm8tLWRvdWJhbi1zZWFyY2gge3Bvc2l0aW9uOiByZWxhdGl2ZTtkaXNwbGF5OiBmbGV4O21hcmdpbi1ib3R0b206IDVweDt9Lm8tLWRvdWJhbi1zZWFyY2ggLmlucCB7aGVpZ2h0OiAzNHB4O3RleHQtYWxpZ246IGNlbnRlcjtjdXJzb3I6IHRleHQ7d2lkdGg6IDkwJTtib3JkZXItdG9wOiAxcHggc29saWQgI2RlZGVkZTtib3JkZXItbGVmdDogMXB4IHNvbGlkICNkZWRlZGU7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czogM3B4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDVweDt9Lm8tLWRvdWJhbi1zZWFyY2ggLmlucCBpbnB1dCB7YmFja2dyb3VuZDogI2ZmZjt3aWR0aDogOTYlO21hcmdpbjogMDt0ZXh0LWFsaWduOiBsZWZ0O2hlaWdodDogMzBweDtwYWRkaW5nLWxlZnQ6IDEwcHg7b3V0bGluZTogbm9uZTt9Lm8tLWRvdWJhbi1zZWFyY2ggaW5wdXQgey13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtib3JkZXI6IG5vbmU7YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7fS5vLS1kb3ViYW4tc2VhcmNoIC5pbnAtYnRuIHtwb3NpdGlvbjogcmVsYXRpdmU7d2lkdGg6IDM3cHg7aGVpZ2h0OiAzNHB4O30uby0tZG91YmFuLXNlYXJjaCAuaW5wLWJ0biBpbnB1dCB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO2ZvbnQtc2l6ZTogMDtwYWRkaW5nOiAzNXB4IDAgMCAwO292ZXJmbG93OiBoaWRkZW47Y29sb3I6IHRyYW5zcGFyZW50O2N1cnNvcjogcG9pbnRlcjt9Lm8tLWRvdWJhbi1zZWFyY2ggLmlucC1idG4gaW5wdXQ6Zm9jdXMge291dGxpbmU6IG5vbmU7fS5vLS1kb3ViYW4tc2VhcmNoIC5pbnAge2JhY2tncm91bmQtaW1hZ2U6IHVybCgvL2ltZzMuZG91YmFuaW8uY29tL2RhZS9hY2NvdW50cy9yZXNvdXJjZXMvYTRhMzhhNS9tb3ZpZS9hc3NldHMvbmF2X212X2JnLnBuZz9zPTEpO30uby0tZG91YmFuLXNlYXJjaCAuaW5wLWJ0biBpbnB1dCB7YmFja2dyb3VuZDogdXJsKC8vaW1nMy5kb3ViYW5pby5jb20vZGFlL2FjY291bnRzL3Jlc291cmNlcy9hNGEzOGE1L21vdmllL2Fzc2V0cy9uYXZfbXZfYmcucG5nP3M9MSkgbm8tcmVwZWF0IDAgLTQwcHg7fS5vLS1pdGVtLWJhbGFuY2VyIHttYXJnaW4tbGVmdDogMTElO21hcmdpbi1yaWdodDogMTElO30iLCAiLm8tLW0iKSksCiAgICAkKChmdW5jdGlvbigpIHsKICAgICAgY29uc3QgbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5saXN0LXdwIik7CiAgICAgIGxldCBlID0gITEsIHQgPSAhMTsKICAgICAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKGZ1bmN0aW9uKG4pIHsKICAgICAgICBpZiAodCkgdCA9ICExOyBlbHNlIHsKICAgICAgICAgIGZvciAoY29uc3QgdCBvZiBuKSAiY2hpbGRMaXN0IiA9PSB0LnR5cGUgJiYgKGUgPSAhMCk7CiAgICAgICAgICBlICYmICh0ID0gITAsICQoIi5saXN0LXdwIikuYXBwZW5kKCc8ZGl2IGNsYXNzPSJvLS1pdGVtLWRpdmlkZXIiPjwvZGl2PicpKTsKICAgICAgICB9CiAgICAgIH0pKS5vYnNlcnZlKG4sIHsKICAgICAgICBhdHRyaWJ1dGVzOiAhMCwKICAgICAgICBjaGlsZExpc3Q6ICEwCiAgICAgIH0pLCAkKCIubmF2LWl0ZW1zIGxpIGEiKS5lcSg1KS5hZGRDbGFzcygiby0tbmF2LWl0ZW0tYSIpLmh0bWwoIuWFreWFrSIpLCAkKCJ0aXRsZSIpLmh0bWwoIuWFreWFrSIpLAogICAgICBpc01vYmlsZSAmJiAoJCgiI2FwcCAuYXJ0aWNsZSAudGFncyIpLmJlZm9yZSgnPGRpdiBjbGFzcz0iby0tZG91YmFuLXNlYXJjaCI+PGRpdiBjbGFzcz0iaW5wIj48aW5wdXQgbmFtZT0iJyArIE9PX1NJR04gKyAnIiBzaXplPSIyMiIgbWF4bGVuZ3RoPSI2MCIgcGxhY2Vob2xkZXI9IuaQnOe0oueUteW9seOAgeeUteinhuWJp+OAgee7vOiJuuOAgeW9seS6uiIgdmFsdWU9IiIgYXV0b2NvbXBsZXRlPSJvZmYiPjwvZGl2PjxkaXYgY2xhc3M9ImlucC1idG4iPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSLmkJzntKIiPjwvZGl2PjwvZGl2PicpLAogICAgICAkKCJib2R5IikucHJlcGVuZCgkKCIjYXBwIC5hcnRpY2xlIikuYWRkQ2xhc3MoIm9vIikpLCAkKCIuby0tZG91YmFuLXNlYXJjaCBpbnB1dCIpLm9uKCJrZXl1cCIsIChmdW5jdGlvbihuKSB7CiAgICAgICAgMTMgPT09IG4ua2V5Q29kZSAmJiAobi5wcmV2ZW50RGVmYXVsdCgpLCBsb2NhdGlvbi5ocmVmID0gImh0dHBzOi8vbS5kb3ViYW4uY29tL3NlYXJjaC8/cXVlcnk9IiArIG4udGFyZ2V0LnZhbHVlICsgIiZ0eXBlPW1vdmllIik7CiAgICAgIH0pKSwgJCgiLm8tLWRvdWJhbi1zZWFyY2ggLmlucC1idG4gaW5wdXQiKS5vbigiY2xpY2siLCAoZnVuY3Rpb24obikgewogICAgICAgIG4ucHJldmVudERlZmF1bHQoKTsKICAgICAgICBjb25zdCBlID0gJCgiLm8tLWRvdWJhbi1zZWFyY2ggaW5wdXQiKS52YWwoKTsKICAgICAgICBsb2NhdGlvbi5ocmVmID0gImh0dHBzOi8vbS5kb3ViYW4uY29tL3NlYXJjaC8/cXVlcnk9IiArIGUgKyAiJnR5cGU9bW92aWUiOwogICAgICB9KSksIHNldEludGVydmFsKChmdW5jdGlvbigpIHsKICAgICAgICAkKCIubGlzdC13cCBbaHJlZl0iKS5lYWNoKChmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgICBjb25zdCB0ID0gJChlKS5hdHRyKCJocmVmIik7CiAgICAgICAgICB0LmluY2x1ZGVzKCJtb3ZpZS5kb3ViYW4uY29tIikgJiYgJChlKS5hdHRyKCJocmVmIiwgdC5yZXBsYWNlKCJtb3ZpZS5kb3ViYW4uY29tIiwgIm0uZG91YmFuLmNvbS9tb3ZpZSIpKS5hdHRyKCJ0YXJnZXQiLCAiX2JsYW5rIik7CiAgICAgICAgfSkpOwogICAgICB9KSwgNTAwKSk7CiAgICB9KSk7IGVsc2UgewogICAgICBmdW5jdGlvbiBnZXRCYXNlU3R5bGUoKSB7CiAgICAgICAgcmV0dXJuICJcbkBrZXlmcmFtZXMgby0tYnJlYXRoIHswJSB7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOTY0NywgMC4yNDEzLCAtMC4wNzA1LCAwLjc5MTEpO3RyYW5zZm9ybTogc2NhbGUoMC45KTt9NTElIHthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC45MjI2LCAwLjI2MzEsIC0wLjAzMDgsIDAuNzYyOCk7dHJhbnNmb3JtOiBzY2FsZSgxLjAyKTt9MTAwJSB7dHJhbnNmb3JtOiBzY2FsZSgwLjkpO319QGtleWZyYW1lcyBvLS1ibGluayB7MjAlLDI0JSw1NSUge2NvbG9yOiAjRkZFMDgyXG50ZXh0LXNoYWRvdzogbm9uZTt9MCUsMTklLDIxJSwyMyUsMjUlLDU0JSw1NiUsMTAwJSB7Y29sb3I6ICNmZmY2YTk7dGV4dC1zaGFkb3c6IDAgMCA1cHggI2ZmYTUwMCwgMCAwIDVweCAjZmZhNTAwLCAwIDAgMTVweCAjZmZhNTAwLCAwIDAgMjBweCAjZmZhNTAwLCAwIDAgNnB4ICNmZjAwMDAsIDAgMCAxMHB4ICNmZjhkMDAsIDAgMCA5cHggI2ZmMDAwMDt9fUBrZXlmcmFtZXMgby0tYm9wQSB7MCUge3RyYW5zZm9ybTogc2NhbGUoMC45KTtvcGFjaXR5OiAuODt9NTAlLDEwMCUge3RyYW5zZm9ybTogc2NhbGUoMSk7b3BhY2l0eTogMTt9fUBrZXlmcmFtZXMgby0tYm9wQiB7MCUge3RyYW5zZm9ybTogc2NhbGUoMC45KTtvcGFjaXR5OiAuODt9ODAlLDEwMCUge3RyYW5zZm9ybTogc2NhbGUoMSkgcm90YXRlWigtM2RlZyk7b3BhY2l0eTogMTt9fUBrZXlmcmFtZXMgby0tYmVhdCB7dG8ge3RyYW5zZm9ybTogc2NhbGUoMS40KTt9fUBrZXlmcmFtZXMgby0tbG9hZGVyLXNwaW4gezAlIHt0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTt9MTAwJSB7dHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTt9fUBrZXlmcmFtZXMgby0tY29sb3ItY2hhbmdlLW9wYWNpdHkgezAlICAgeyBvcGFjaXR5OiAwLjk7IH01MCUgeyBvcGFjaXR5OiAxOyB9MTAwJSB7IG9wYWNpdHk6IDAuOTsgfX1Aa2V5ZnJhbWVzIG8tLXBhbmRhLWVhci1jb2xvci1jaGFuZ2UgezAlICAgeyBjb2xvcjogI2ZmOTgwMDsgfTI1JSB7IGNvbG9yOiAjZmI3Yjc2OyB9NTAlIHsgb3BhY2l0eTogIzlDMjdCMDsgfTc1JSB7IGNvbG9yOiAjZmI3Yjc2OyB9MTAwJSB7IG9wYWNpdHk6ICNmZjk4MDA7IH19QGtleWZyYW1lcyBvLS1jb21tZW50LWJ1YmJsZTEgezQwJSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoMnB4LDJweCkgc2NhbGUoLjc5KTtvcGFjaXR5OiAuODt9dG8ge3RyYW5zZm9ybTogdHJhbnNsYXRlKDZweCwtNHB4KSBzY2FsZSguNTcpO29wYWNpdHk6IDA7fX1Aa2V5ZnJhbWVzIG8tLWNvbW1lbnQtYnViYmxlMiB7MCUge3RyYW5zZm9ybTogdHJhbnNsYXRlKDRweCwzcHgpO30xNiUge3RyYW5zZm9ybTogdHJhbnNsYXRlKDRweCwzcHgpO29wYWNpdHk6IDA7fTI4JSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoN3B4KTtvcGFjaXR5OiAuODt9NjAlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMXB4LC0ycHgpO303MiUge3RyYW5zZm9ybTogdHJhbnNsYXRlKDE0cHgsLTNweCkgc2NhbGUoLjU3KTtvcGFjaXR5OiAwO319QGtleWZyYW1lcyBvLS1jb21tZW50LWJ1YmJsZTMgezAlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMHB4LC00cHgpIHNjYWxlKC43MSlcbn0xNiUge3RyYW5zZm9ybTogdHJhbnNsYXRlKDEwcHgsLTRweCkgc2NhbGUoLjcxKTtvcGFjaXR5OiAwO30yOCUge3RyYW5zZm9ybTogdHJhbnNsYXRlKDEwcHgsLTRweCkgc2NhbGUoLjcxKTtvcGFjaXR5OiAuNTt9NzIlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxNHB4LC05cHgpIHNjYWxlKC41Nyk7b3BhY2l0eTogMDt9fW9vLWxvZ3Mge3Bvc2l0aW9uOiBmaXhlZDtib3R0b206IDA7cmlnaHQ6IDA7bWF4LWhlaWdodDogMzAwcHg7b3ZlcmZsb3cteTogc2Nyb2xsO3RleHQtYWxpZ246IHJpZ2h0O3otaW5kZXg6ICIgKyAoTUFYX1pfSU5ERVggLSAxMCkgKyAiO2Rpc3BsYXk6IG5vbmU7fW9vLWxvZ3MuaXMtYWN0aXZlIHtkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O30uby0tbG9nLW1lc3NhZ2Uge2Rpc3BsYXk6IGlubGluZS1ibG9jaztiYWNrZ3JvdW5kLWNvbG9yOiAjNENBRjUwO2NvbG9yOiAjZmZmO3BhZGRpbmc6IC4yNWVtIC41ZW07bWFyZ2luLWJvdHRvbTogLjI1ZW07Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czogM3B4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDNweDttYXgtd2lkdGg6IDgwMHB4O3dvcmQtYnJlYWs6IGJyZWFrLWFsbDt9Lm8tLW0uby0tZGVidWcge21heC13aWR0aDogNDAwcHggIWltcG9ydGFudDttYXJnaW46IDAgYXV0byAhaW1wb3J0YW50O30uby0tbS5vLS1kZWJ1ZyAubW9kX3BsYXllciA+IC5wbGF5ZXJfY29udGFpbmVyIHttYXgtaGVpZ2h0OiAyMDNweDt9XG5vby1pZnJhbWVzIHt2aXNpYmlsaXR5OiBoaWRkZW47cG9pbnRlci1ldmVudHM6IG5vbmU7cG9zaXRpb246IGZpeGVkO2JvdHRvbTogMDtsZWZ0OiAwO21heC13aWR0aDogMzIwcHg7ZGlzcGxheTogYmxvY2s7fW9vLWlmcmFtZXMgPiBpZnJhbWUge21heC13aWR0aDogIiArIG1heFNuaWZmSWZyYW1lV2lkdGggKyAicHg7bWF4LWhlaWdodDogNjBweDtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7fS5vLS1oaWRlIHtkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7fS5vLS12aXAtcGxheSB7cG9zaXRpb246IGFic29sdXRlO3RvcDogMDtsZWZ0OiAwO3otaW5kZXg6IDE7bWFyZ2luOiAxZW07Zm9udC1zaXplOiAxNHB4O30uby0tdmlwIC5vLS12aXAtcGxheSB7cG9zaXRpb246IHJlbGF0aXZlO2ZvbnQtc2l6ZTogMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiAjMmQyZDJlO21hcmdpbjogLjVlbSAwIDA7cGFkZGluZzogLjhlbSAuNWVtIC41ZW07fS5pcy1wbGF5LWluLXBhZ2UgLm8tLXZpcC1wbGF5IHtkaXNwbGF5OiBub25lO30ucGx5ci0taGlkZS1jb250cm9scyB+IC5vLS12aXAtcGxheSB7ZGlzcGxheTogbm9uZTt9LnBseXItLXBhdXNlZCArIC5vLS12aXAtcGxheSwuby0tcGxheWVyOmhvdmVyIC5vLS12aXAtcGxheSB7ZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDt9Lm8tLXZpcC1wbGF5LmlzLWhpZGUge2Rpc3BsYXk6IG5vbmUgIWltcG9ydGFudDt9Lm8tLXZpcC1wbGF5IGEge3Bvc2l0aW9uOiByZWxhdGl2ZTttYXJnaW4tcmlnaHQ6IDhweDt9Lm8tLXZpcC1wbGF5IC5vLS1zb3VyY2VzIGEge2JhY2tncm91bmQtY29sb3I6ICMwZGIyZmI7cGFkZGluZzogLjNlbSAuNzVlbSAuMjVlbSAuNzVlbTtib3JkZXItcmFkaXVzOiAzcHg7Y29sb3I6ICNmZmZmZmY7Y3Vyc29yOiBwb2ludGVyO29wYWNpdHk6IC44NTtkaXNwbGF5OiBpbmxpbmUtZmxleDttYXJnaW46IC4yNWVtO30uby0tdmlwLXBsYXkgLm8tLXNvdXJjZXMgYS5pcy1hY3RpdmUge2JhY2tncm91bmQtY29sb3I6ICMxYzdlZDY7fS5vLS12aXAtcGxheSAuby0tc291cmNlcyBhLmlzLWFjdGl2ZSwuby0tdmlwLXBsYXkgLm8tLXNvdXJjZXMgYTpob3ZlciB7b3BhY2l0eTogMTtmb250LXdlaWdodDogYm9sZDt9Lm8tLXZpcC1wbGF5IC5vLS1zb3VyY2VzIGEuaXMtbXA0IHtib3JkZXItYm90dG9tOiAxLjVweCBzb2xpZCAjRkZFQjNCO30uby0tc25pZmYtZG9uZSB7Y29sb3I6ICM0Q0FGNTA7fS5vLS1wbGF5LXVybCB7Y29sb3I6ICNmZmZmZmY7cGFkZGluZzogMWVtIDFlbSAuNWVtO3RleHQtc2hhZG93OiAxcHggMXB4IDJweCAjMDAwMDAwO30uby0tcGxheS11cmwgYSB7Y29sb3I6ICMwZGIyZmIgIWltcG9ydGFudDt0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtjdXJzb3I6IHBvaW50ZXI7Zm9udC13ZWlnaHQ6IGJvbGQ7fS5vLS1wbGF5LXVybCAuby0tc3BhbiB7Zm9udC1zaXplOiAuOWVtO2NvbG9yOiAjRUVFRUVFO2Rpc3BsYXk6IGJsb2NrO29wYWNpdHk6IC45O21hcmdpbi10b3A6IC41ZW07fS5vLS1wbGF5LXVybCAuby0tc3Bhbi5pcy13YXJuaW5nIHNwYW4ge2ZvbnQtd2VpZ2h0OiBib2xkO2NvbG9yOiB3aGl0ZTtiYWNrZ3JvdW5kLWNvbG9yOiAjRkY1NzIyO3BhZGRpbmc6IC4yNWVtIC41ZW07Ym9yZGVyLXJhZGl1czogMnB4O30uby0tcGxheS11cmwgYSBzcGFuIHtjb2xvcjogI0ZGOTgwMDt9Lm8tLXBsYXktdXJsIGE6aG92ZXIge2NvbG9yOiAjZTY3NzAwICFpbXBvcnRhbnQ7fS5vLS1wbGF5ZXItYm94ID4gKjpub3QoLm8tLXBsYXllciksLm8tLXBsYXllci1ib3g6OmJlZm9yZSwuby0tcGxheWVyLWJveDo6YWZ0ZXIge2Rpc3BsYXk6IG5vbmUgIWltcG9ydGFudDt9Lm8tLXBsYXllciB7cG9zaXRpb246IHJlbGF0aXZlO2hlaWdodDogMTAwJTttYXgtaGVpZ2h0OiAxMDAlO2JhY2tncm91bmQtY29sb3I6ICMwMTA4MWE7b3ZlcmZsb3c6IGhpZGRlbjt6LWluZGV4OiAiICsgTUFYX1pfSU5ERVggKyAnO30uby0tcGxheWVyOm5vdCguaXMtbG9hZGVkKSAjby0tcGxheWVyLWlmcmFtZSB7ZGlzcGxheTogbm9uZTt9Lm8tLXBsYXllci1iZyB7cG9zaXRpb246IGFic29sdXRlO3RvcDogMDtib3R0b206IDA7bGVmdDogMDtyaWdodDogMDtkaXNwbGF5OiBmbGV4O2p1c3RpZnktY29udGVudDogY2VudGVyO2FsaWduLWl0ZW1zOiBjZW50ZXI7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtmb250LXNpemU6IDE2cHg7Y29sb3I6ICNmMWYzZjU7b3ZlcmZsb3c6IGhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOiAjMDEwODFhO2JhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO2JhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7dHJhbnNpdGlvbjogYWxsIDMuNXM7fS5vLS1wbGF5ZXIuaXMtbG9hZGVkIC5vLS1wbGF5ZXItYmcge3Zpc2liaWxpdHk6IGhpZGRlbjtvcGFjaXR5OiAwO30uby0tbSAuby0tcGxheWVyLWJnIHtmb250LXNpemU6IDEycHg7fS5vLS1wbGF5ZXItbWFzayB7YmFja2dyb3VuZC1jb2xvcjogIzI4MjgyODtwb3NpdGlvbjogYWJzb2x1dGU7dG9wOiAwO3JpZ2h0OiAwO2JvdHRvbTogMDtsZWZ0OiAwO29wYWNpdHk6IDAuMzU7dHJhbnNpdGlvbjogYWxsIDIuNXM7fS5vLS1wbGF5ZXItYmcuaXMtZmFpbCAuby0tcGxheWVyLW1hc2sge29wYWNpdHk6IDAuOTt9Lm8tLXNpZ24ge29wYWNpdHk6IC4yNTt0ZXh0LXNoYWRvdzogMXB4IDFweCAycHggIzAwMDAwMDt3aWR0aDogOTYlO2Rpc3BsYXk6IGZsZXg7anVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO3Bvc2l0aW9uOiBhYnNvbHV0ZTtib3R0b206IDFlbTtmb250LXNpemU6IC44ZW07fS5vLS12ZXJzaW9uIHttYXJnaW4tbGVmdDogMWVtO2ZvbnQtc2l6ZTogLjhlbTtvcGFjaXR5OiAuOTt9Lm8tLXNsb2dhbiB7bGV0dGVyLXNwYWNpbmc6IDJweDtjb2xvcjogI2Y4OTY0YztkaXNwbGF5OiBmbGV4O2p1c3RpZnktY29udGVudDogc3BhY2UtZXZlbmx5O2FsaWduLWl0ZW1zOiBjZW50ZXI7d2lkdGg6IDEwMCU7bWF4LXdpZHRoOiA0ODBweDt9Lm8tLXNsb2dhbiBzdHJvbmcge2ZvbnQtc2l6ZTogMi41ZW07dGV4dC1zaGFkb3c6IDAgMCA1cHggI2ZmYTUwMCwgMCAwIDVweCAjZmZhNTAwLCAwIDAgMTVweCAjZmZhNTAwLCAwIDAgMjBweCAjZmZhNTAwLCAwIDAgNnB4ICNmZjAwMDAsIDAgMCAxMHB4ICNmZjhkMDAsIDAgMCA5cHggI2ZmMDAwMDtjb2xvcjogI2ZmZjZhOTtvcGFjaXR5OiAuODt0cmFuc2Zvcm06IHNjYWxlKDAuOSk7ZGlzcGxheTogaW5saW5lLWJsb2NrO21hcmdpbjogMCA1cHg7fS5vLS1zbG9nYW4gc3Ryb25nOmZpcnN0LWNoaWxkIHthbmltYXRpb246IG8tLWJvcEEgMXMgY3ViaWMtYmV6aWVyKDAuMTc1LCAwLjg4NSwgMC4zMiwgMS4yNzUpIGZvcndhcmRzIGluZmluaXRlIGFsdGVybmF0ZSwgby0tYmxpbmsgMTJzIGluZmluaXRlO30uby0tc2xvZ2FuIHN0cm9uZzpsYXN0LWNoaWxkIHthbmltYXRpb246IG8tLWJvcEIgMXMgMC4ycyBjdWJpYy1iZXppZXIoMC4xNzUsIDAuODg1LCAwLjMyLCAxLjI3NSkgZm9yd2FyZHMgaW5maW5pdGUgYWx0ZXJuYXRlLCBvLS1ibGluayAxMnMgM3MgaW5maW5pdGU7fS5vLS1lcnJvci10ZXh0IHtkaXNwbGF5OiBub25lO3BhZGRpbmctdG9wOiAxZW07bGV0dGVyLXNwYWNpbmc6IDFweDtib3gtc2hhZG93OiAwIC0xMHB4IDhweCAwICNmZmY0ZTY7cGFkZGluZzogLjI1ZW0gLjVlbSAuNGVtO3Bvc2l0aW9uOiBhYnNvbHV0ZTtib3R0b206IDA7bGVmdDogLTUlO3JpZ2h0OiAtNSU7d2lkdGg6IDExMCU7dGV4dC1hbGlnbjogY2VudGVyO2JhY2tncm91bmQtY29sb3I6ICNmZmY0ZTY7Y29sb3I6ICNGRjU3MjI7fS5vLS1wbGF5ZXItYmcuaXMtZmFpbCAuby0tc2xvZ2FuIHtjb2xvcjogI2Y3NjcwNzt9Lm8tLXBsYXllci1iZy5pcy1mYWlsIC5vLS1zbG9nYW4gc3Ryb25nIHtjb2xvcjogI2Q5NDgwZjt9Lm8tLXBsYXllci1iZy5pcy1mYWlsIC5vLS1sb2FkZXIsLm8tLXBsYXllci1iZy5pcy1mYWlsICsgLm8tLXZpcC1wbGF5IHtkaXNwbGF5OiBub25lO30uby0tcGxheWVyLWJnLmlzLWZhaWwgLm8tLWVycm9yLXRleHQge2Rpc3BsYXk6IGJsb2NrO30uby0tc25pZmYtcHJvZ3Jlc3Mge2Rpc3BsYXk6IG5vbmU7cG9zaXRpb246IGFic29sdXRlO2xlZnQ6IDA7Ym90dG9tOiAwO2hlaWdodDogMXB4O3dpZHRoOiAwO2JhY2tncm91bmQtY29sb3I6ICMyYjhhM2U7Ym9yZGVyOiAxcHggc29saWQgIzJiOGEzZTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMnB4O3RyYW5zaXRpb246IGFsbCA1cyBlYXNlO21heC13aWR0aDogOTklICFpbXBvcnRhbnQ7fS5vLS1zbmlmZmluZyAuby0tc25pZmYtcHJvZ3Jlc3Mge2Rpc3BsYXk6IGJsb2NrO30uby0tcGxheWVyLmlzLWxvYWRlZCAuby0tc25pZmYtcHJvZ3Jlc3MsLm8tLXBsYXllci1iZy5pcy1mYWlsIC5vLS1zbmlmZi1wcm9ncmVzcyB7ZGlzcGxheTogbm9uZTt9Lm8tLWxvYWRlciB7Ym9yZGVyOiAzLjZweCBzb2xpZCAjZmY5NzRkO2JveC1zaXppbmc6IGJvcmRlci1ib3g7b3ZlcmZsb3c6IGhpZGRlbjt3aWR0aDogMmVtO2hlaWdodDogMmVtO2xlZnQ6IDUwJTt0b3A6IDUwJTthbmltYXRpb246IG8tLWxvYWRlci1zcGluIDJzIGxpbmVhciBpbmZpbml0ZSByZXZlcnNlOy13ZWJraXQtZmlsdGVyOiB1cmwoI28tLWwtZik7ZmlsdGVyOiB1cmwoI28tLWwtZik7Ym94LXNoYWRvdzogMCAwIDAgMXB4ICNmZjk3NGQgaW5zZXQ7fS5vLS1sb2FkZXI6YmVmb3JlIHtjb250ZW50OiAiIjtwb3NpdGlvbjogYWJzb2x1dGU7YW5pbWF0aW9uOiBvLS1sb2FkZXItc3BpbiAycyBjdWJpYy1iZXppZXIoMC41OSwgMC4yNSwgMC40LCAwLjY5KSBpbmZpbml0ZTtiYWNrZ3JvdW5kOiAjZmY5NzRkOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogdG9wIGNlbnRlcjt0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgY2VudGVyO2JvcmRlci1yYWRpdXM6IDUwJTt3aWR0aDogMTUwJTtoZWlnaHQ6IDE1MCU7dG9wOiA1MCU7bGVmdDogLTEyLjUlO30uby0tcGxheWVyIC5wbHlyX19wcm9ncmVzcyBpbnB1dFt0eXBlPXJhbmdlXSB7Y3Vyc29yOiBwb2ludGVyO30uby0tdmlkZW8ge2hlaWdodDogMTAwJTt3aWR0aDogMTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazt9Lm8tLWNvbGxhcHNlLWJveC5pcy1vcGVuIC5vLS1jb2xsYXBzZSB7dHJhbnNmb3JtOnNjYWxlWCgtMSk7fS5vLS1jb2xsYXBzZS1ib3g6bm90KC5pcy1vcGVuKSAuaXMtY29sbGFwc2Uge2Rpc3BsYXk6IG5vbmUgIWltcG9ydGFudDt9Lm8tLXNraXAtYWQge3Bvc2l0aW9uOiBhYnNvbHV0ZTtib3R0b206IDA7bGVmdDogMDtyaWdodDogMDtwYWRkaW5nOiAxLjVlbSAwO3RleHQtYWxpZ246IGNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmNGU2O2NvbG9yOiAjRkY1NzIyO3otaW5kZXg6ICcgKyBNQVhfWl9JTkRFWCArICI7ZGlzcGxheTogZmxleDtqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjthbGlnbi1pdGVtczogY2VudGVyO2JveC1zaGFkb3c6IDAgLTEwcHggOHB4IDAgI2ZmZjRlNjt9Lm8tLXNraXAtYWQgLm8tLXNsb2dhbiB7bGV0dGVyLXNwYWNpbmc6IDFlbTtqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjt9Lm8tLXNraXAtYWQgLm8tLWxvYWRlciB7d2lkdGg6IDEuNWVtO2hlaWdodDogMS41ZW07Ym9yZGVyLXdpZHRoOiAyLjZweDttYXJnaW46IDAgMi41ZW0gMCAyZW07fS5vLS1za2lwLWFkIC5vLS1zbG9nYW4gc3Ryb25nIHtmb250LXNpemU6IDJlbTt9Lm8tLXZpcCB7cG9zaXRpb246IHJlbGF0aXZlO3BhZGRpbmctYm90dG9tOiAwLjVlbTtiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpO21hcmdpbjogLjVlbSAuMjVlbTt3aWR0aDogY2FsYygxMDAlIC0gLjVlbSk7Ym9yZGVyLXJhZGl1czogNXB4O2JveC1zaGFkb3c6IDAgMXB4IDhweCAwIHJnYmEoMCwwLDAsMC4yKTtmb250LXNpemU6IDEycHg7bGluZS1oZWlnaHQ6IDEuNjt9Lm8tLXZpcCArIC5vLS12aXAgeyIgKyBQdXJpZnlTdHlsZSArICd9Lm8tLXZpcC1wYW5lbCB7ZGlzcGxheTogZmxleDtqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6IGNlbnRlcjtwYWRkaW5nOiAuNzVlbSAxZW0gLjI1ZW07Zm9udC1zaXplOiAxNXB4O30uby0tdmlwLXRpdGxlIHtmb250LXdlaWdodDogYm9sZDtjb2xvcjogIzI1Nzk0Mjt3aWR0aDogMTAwJTt9Lm8tLXZpcC1zbWFsbCB7Zm9udC1zaXplOiAwLjc1ZW07bWFyZ2luOiAwIDEwcHg7Y29sb3I6ICNjZWQ0ZGE7fS5vLS12aXAtcGFuZWwsIC5vLS12aXAtbGlzdCB7aGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7fS5vLS1tZW51cyB7ZGlzcGxheTogZmxleDtqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjthbGlnbi1pdGVtczogY2VudGVyO30uby0tbWVudXMgPiBkaXYge2Rpc3BsYXk6IGlubGluZS1mbGV4O21hcmdpbi1sZWZ0OiAxLjVlbTtjdXJzb3I6IHBvaW50ZXI7cG9zaXRpb246IHJlbGF0aXZlO30uby0tcXJjb2RlLWJveCB7YmFja2dyb3VuZC1jb2xvcjogd2hpdGU7cGFkZGluZzogMXB4IDJweCAxcHggMXB4O2JvcmRlci1yYWRpdXM6IDJweDtvcGFjaXR5OiAuNjU7fS5vLS1tIC5vLS1xcmNvZGUtYm94IHtkaXNwbGF5OiBub25lO30uby0tcXJjb2RlLWJveDpob3ZlciB7b3BhY2l0eTogMTt9Lm8tLXFyY29kZS1ib3ggc3ZnIHt3aWR0aDogMjBweDtoZWlnaHQ6IDIwcHg7fS5vLS1xcmNvZGUtYm94IC5vLS1xcmNvZGUge292ZXJmbG93OiBoaWRkZW47ZGlzcGxheTogbm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO3Bvc2l0aW9uOiBhYnNvbHV0ZTt0b3A6IC0zNXB4O2xlZnQ6IC0xMTBweDt6LWluZGV4OiAxO2JveC1zaGFkb3c6IDAgNHB4IDhweCAwIHJnYmEoMCwwLDAsMC4zNSk7Ym9yZGVyLXJhZGl1czogM3B4O30uby0tcXJjb2RlIGltZyB7d2lkdGg6IDEwMHB4O2hlaWdodDogMTAwcHg7fS5vLS1xcmNvZGUtdGV4dCB7cG9zaXRpb246IGFic29sdXRlO2JhY2tncm91bmQtY29sb3I6ICNmZmY7dGV4dC1hbGlnbjogY2VudGVyO3otaW5kZXg6IDI7dG9wOiAtNDlweDtsZWZ0OiAtMTEwcHg7d2lkdGg6IDEwMHB4O2JvcmRlci1yYWRpdXM6IDNweDtjb2xvcjogI0Y1N0MwMDtsZXR0ZXItc3BhY2luZzogMXB4O2ZvbnQtc2l6ZTogMTJweDtkaXNwbGF5OiBub25lO30uby0tcXJjb2RlLWJveDpob3ZlciAuby0tcXJjb2RlLC5vLS1xcmNvZGUtYm94OmhvdmVyIC5vLS1xcmNvZGUtdGV4dCB7ZGlzcGxheTogYmxvY2s7fS5vLS1zZXR0aW5nLWJ1dHRvbiB7dHJhbnNpdGlvbjogYWxsIC41czthbmltYXRpb246IG8tLWNvbG9yLWNoYW5nZS1vcGFjaXR5IDhzIG5vcm1hbCBpbmZpbml0ZSBlYXNlLWluLW91dCwgN3MgbGluZWFyIDBzIGluZmluaXRlIG5vcm1hbCBmb3J3YXJkcyBydW5uaW5nIG8tLWJyZWF0aDt9Lm8tLXNldHRpbmctYnV0dG9uOmhvdmVyIHtjdXJzb3I6IHBvaW50ZXI7fS5vLS1zZXR0aW5nLWJ1dHRvbiBzdmcge3dpZHRoOiAxLjc1ZW07aGVpZ2h0OiAxLjc1ZW07fS5vLS1zdmctcGFuZGEteiB7YW5pbWF0aW9uOiAzLjVzIGxpbmVhciAwcyBpbmZpbml0ZSBub3JtYWwgZm9yd2FyZHMgcnVubmluZyBvLS1icmVhdGg7fS5vLS1zdmctcGFuZGEtejIge2FuaW1hdGlvbjogNHMgbGluZWFyIDBzIGluZmluaXRlIG5vcm1hbCBmb3J3YXJkcyBydW5uaW5nIG8tLWJyZWF0aDt9Lm8tLXN2Zy1wYW5kYS1lYXIge2NvbG9yOiAjZmY5ODAwO2FuaW1hdGlvbjogby0tcGFuZGEtZWFyLWNvbG9yLWNoYW5nZSA5cyBub3JtYWwgaW5maW5pdGUgZWFzZS1pbi1vdXQ7fS5vLS12aXAtbGlzdCB7cGFkZGluZzogMC41ZW07bGV0dGVyLXNwYWNpbmc6IDFweDt9Lm8tLXZpcC1saXN0IC5vLS12aXAtaXRlbSB7Ym9yZGVyLXJhZGl1czogNHB4O2Rpc3BsYXk6IGlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTogbm93cmFwO2JhY2tncm91bmQtY29sb3I6ICNlZWY2ZmM7Y29sb3I6ICMxZDcyYWE7bWFyZ2luOiA0cHg7cGFkZGluZzogMC41ZW0gMC41ZW0gMC4zNWVtO2N1cnNvcjogcG9pbnRlcjtmb250LXNpemU6IDE0cHg7bGluZS1oZWlnaHQ6IDEuMjtmb250LXdlaWdodDogNjAwO3RleHQtZGVjb3JhdGlvbjogbm9uZTtwb3NpdGlvbjogcmVsYXRpdmU7b3ZlcmZsb3c6IGhpZGRlbjt0cmFuc2l0aW9uOiBhbGwgMC4yNXM7dGV4dC1hbGlnbjogY2VudGVyO3ZlcnRpY2FsLWFsaWduOiB0b3A7Ym94LXNoYWRvdzogMCAycHggMnB4IDAgcmdiYSgwLDAsMCwwLjIpO30uby0tdmlwLWxpc3QgfiAuby0tdGlwIHttYXJnaW46IC4yNWVtIDFlbTtmb250LXNpemU6IC45ZW07Ym9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMjI0LCAyMjQsIDIyNCwgMC4yNSk7cGFkZGluZy10b3A6IDFlbTtjb2xvcjogIzViNWI2NztsZXR0ZXItc3BhY2luZzogMXB4O30uby0tdGlwIHN0cm9uZyB7Y29sb3I6ICNGRjcwNDM7fS5vLS12aXAtaXRlbS5pcy1wbGF5LWluLXBhZ2U6OmFmdGVyIHtjb250ZW50OiAiIjtwb3NpdGlvbjogYWJzb2x1dGU7Ym90dG9tOiAwO2xlZnQ6IDA7d2lkdGg6IDEwMCU7aGVpZ2h0OiAycHg7YmFja2dyb3VuZC1jb2xvcjogIzJFN0QzMjt9Lm8tLXZpcC1pdGVtLmlzLWJsb2I6OmFmdGVyIHtiYWNrZ3JvdW5kLWNvbG9yOiAjMjE5NkYzO30uby0tdmlwLWl0ZW0uaXMtcmFuZG9tIHtwYWRkaW5nOiAwLjVlbSAxZW0gMC4zNWVtO30uby0tdmlwLWl0ZW0uaXMtcmFuZG9tOjphZnRlciB7YmFja2dyb3VuZC1jb2xvcjogIzE5NzFjMjt9Lm8tLXZpcC1saXN0IC5vLS12aXAtc25pZmYge3dpZHRoOiAxLjE1ZW07cG9zaXRpb246IHJlbGF0aXZlO30uby0tdmlwOm5vdCguaXMtYWxsb3ctc25pZmYpIC5vLS12aXAtc25pZmYge2Rpc3BsYXk6IG5vbmU7fS5vLS12aXAtc25pZmYgc3ZnIHtkaXNwbGF5OiBibG9jazt9Lm8tLXZpcC1zbmlmZiAuby0tYnViYmxlIHtwb3NpdGlvbjogYWJzb2x1dGU7dG9wOiA1JTtsZWZ0OiAyNSU7d2lkdGg6IDRweDtoZWlnaHQ6IDRweDtib3JkZXItcmFkaXVzOiA1MCU7YmFja2dyb3VuZC1jb2xvcjogI2VlZjZmYztvcGFjaXR5OiAwO3Zpc2liaWxpdHk6IGhpZGRlbjt9Lm8tLXZpcC1zbmlmZi5pcy1hY3RpdmUge292ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7fS5pcy1zbmlmZmluZyAuby0tdmlwLXNuaWZmLmlzLWFjdGl2ZSAuby0tYnViYmxlIHt2aXNpYmlsaXR5OiB2aXNpYmxlO30uby0tdmlwLXNuaWZmIC5vLS1idWJibGUuby0tYjEge2FuaW1hdGlvbjogby0tY29tbWVudC1idWJibGUxIDEuMnMgbGluZWFyIGluZmluaXRlO30uby0tdmlwLXNuaWZmIC5vLS1idWJibGUuby0tYjIge2FuaW1hdGlvbjogby0tY29tbWVudC1idWJibGUyIDEuMnMgbGluZWFyIGluZmluaXRlO30uby0tdmlwLXNuaWZmIC5vLS1idWJibGUuby0tYjMge2FuaW1hdGlvbjogby0tY29tbWVudC1idWJibGUzIDEuMnMgbGluZWFyIGluZmluaXRlO30uby0tdmlwLWxpc3QgLm8tLXZpcC1pdGVtOmhvdmVyLCAuby0tdmlwLWxpc3QgLm8tLXZpcC1pdGVtOmFjdGl2ZSwuby0tdmlwLWxpc3QgLm8tLXZpcC1pdGVtOmhvdmVyOjphZnRlciwgLm8tLXZpcC1saXN0IC5vLS12aXAtaXRlbTphY3RpdmU6OmFmdGVyIHtiYWNrZ3JvdW5kLWNvbG9yOiAjMWQ3MmFhO2NvbG9yOiAjZWVmNmZjICFpbXBvcnRhbnQ7fS5vLS12aXAtbGlzdCAuby0tdmlwLWl0ZW0uaXMtYWN0aXZlIHtiYWNrZ3JvdW5kLWNvbG9yOiAjMmI4YTNlO2NvbG9yOiAjZWVmNmZjO30uby0tdmlwLWxpc3QgLm8tLXZpcC1pdGVtLmlzLWFjdGl2ZTo6YWZ0ZXIge2Rpc3BsYXk6IG5vbmU7fS5vLS12aXAuaXMtc25pZmYtc3VjY2VzcyAuby0tdmlwLXNuaWZmLmlzLWFjdGl2ZSB7YmFja2dyb3VuZC1jb2xvcjogIzJmOWU0NDtjb2xvcjogI2VlZjZmYzt9Lm8tLXZpcC5pcy1zbmlmZmluZyAuby0tdmlwLXNuaWZmLmlzLWFjdGl2ZSwuby0tdmlwLmlzLXNuaWZmLXN1Y2Nlc3MgLm8tLXZpcC1zbmlmZi5pcy1hY3RpdmUsLm8tLXZpcC5pcy1zbmlmZmluZzpub3QoLmlzLXNuaWZmLXN1Y2Nlc3MpIC5vLS12aXAtaXRlbSwuby0tdmlwLWxpc3QgLm8tLXZpcC1pdGVtLmlzLWFjdGl2ZSB7Y3Vyc29yOiBub3QtYWxsb3dlZDtwb2ludGVyLWV2ZW50czogbm9uZTtvcGFjaXR5OiAwLjUgIWltcG9ydGFudDt9Lm8tLXZpcC5pcy1zbmlmZi1kb25lIC5vLS12aXAtc25pZmYge29wYWNpdHk6IC45NSAhaW1wb3J0YW50O30uby0tdmlwLmlzLXNuaWZmaW5nOm5vdCguaXMtc25pZmYtc3VjY2VzcykgLm8tLXZpcC1zbmlmZiB7YW5pbWF0aW9uOiBvLS1iZWF0IDAuMjVzIGluZmluaXRlIGFsdGVybmF0ZTt9Lm8tLXZpcCAuby0tc25pZmYtcHJvZ3Jlc3Mge2JvdHRvbTogYXV0bzt0b3A6IDA7fS5vLS1zZXR0aW5nLXBhbmVsIHtib3JkZXItdG9wOiAycHggc29saWQgcmdiYSgyMjQsIDIyNCwgMjI0LCAwLjI1KTtwYWRkaW5nOiAxZW0gLjVlbTtkaXNwbGF5OiBub25lO21hcmdpbi10b3A6IC41ZW07dHJhbnNpdGlvbjogYWxsIDAuNXM7fS5vLS12aXAuaXMtc2V0dGluZy1vbiAuby0tc2V0dGluZy1wYW5lbCB7ZGlzcGxheTogYmxvY2s7fS5vLS12aXAuaXMtc2V0dGluZy1vbiAuby0tdmlwLWxpc3Qge2Rpc3BsYXk6IG5vbmU7fS5vLS1lZGl0LXZpcC1zb3VyY2UtcGFuZWwge3RleHQtYWxpZ246IGNlbnRlcjttYXJnaW46IDFlbSAxZW0gLjVlbTt9Lm8tLWVkaXQtdmlwLXNvdXJjZS1wYW5lbCB0ZXh0YXJlYSB7cGFkZGluZzogLjc1ZW07Zm9udC1zaXplOiAxNHB4O2xldHRlci1zcGFjaW5nOiAxcHg7Ym9yZGVyLXJhZGl1czogNXB4O3dpZHRoOiBjYWxjKDEwMCUgLSAxLjVlbSk7bWluLWhlaWdodDogMThlbTtib3gtc2hhZG93OiAwIDRweCA4cHggMCByZ2JhKDAsMCwwLDAuMik7Ym9yZGVyOiAxcHggc29saWQgI2VlZTtvdmVyZmxvdy15OiBzY3JvbGw7fS5vLS1lZGl0LWhpbnQge3RleHQtYWxpZ246IGxlZnQ7bWFyZ2luOiAuNWVtO2NvbG9yOiAjNENBRjUwO3RleHQtc2hhZG93OiAwcHggMHB4IDFweCAjOEJDMzRBO30uby0tc2xvZ2FuLXRleHQge21hcmdpbi10b3A6IC41ZW07bGV0dGVyLXNwYWNpbmc6IDFweDtjb2xvcjogI2FkYjViZDtmb250LXNpemU6IDEycHg7fS5vLS1zbG9nYW4tdGV4dCBzdHJvbmcge2ZvbnQtc2l6ZTogMS4yNWVtO21hcmdpbjogMCAuMjVlbTt9Lm8tLWFjdGlvbnMge3RleHQtYWxpZ246IHJpZ2h0O30uby0tYWN0aW9uIHtjb2xvcjogd2hlYXQ7bGV0dGVyLXNwYWNpbmc6IDFweDtib3JkZXI6IDFweCBzb2xpZDtkaXNwbGF5OiBpbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjthbGlnbi1pdGVtczogY2VudGVyO3BhZGRpbmc6IC4xNWVtIC41ZW07Ym9yZGVyLXJhZGl1czogM3B4O21hcmdpbi1yaWdodDogMWVtO2N1cnNvcjogcG9pbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiAjMWIxYjI5O30uby0tYWN0aW9uIGEge2NvbG9yOiAjRkY5ODAwICFpbXBvcnRhbnQ7fS5vLS1tIC5vLS1hY3Rpb24ge2ZvbnQtc2l6ZTogMTJweDt9Lm8tLWFjdGlvbjpob3ZlciB7Y29sb3I6ICNGRkI3NEQ7fS5vLS10b2dnbGUgLm8tLXksIC5vLS10b2dnbGUgLm8tLW4ge2ZvbnQtd2VpZ2h0OiBib2xkO2ZvbnQtc2l6ZTogMS4yZW07bWFyZ2luLXJpZ2h0OiAuMTVlbTt9Lm8tLXRvZ2dsZS5pcy1uIC5vLS15IHtjb2xvcjogaW5oZXJpdDt9Lm8tLXRvZ2dsZTpub3QoLmlzLW4pIC5vLS15IHtjb2xvcjogZ3JlZW47Zm9udC1zaXplOiAxLjVlbTt9Lm8tLXRvZ2dsZS5pcy1uIC5vLS1uIHtjb2xvcjogcmVkO2ZvbnQtc2l6ZTogMS41ZW07fS5vLS1sb2ctYnV0dG9uIHtjdXJzb3I6IHBvaW50ZXI7cGFkZGluZzogMCAuMzVlbTtiYWNrZ3JvdW5kLWNvbG9yOiBoc2xhKDAsMCUsMTAwJSwuOSk7Ym94LXNoYWRvdzogMCAycHggMnB4IDAgcmdiYSgwLDAsMCwwLjIpO2NvbG9yOiAjOWU3NzRhO2JvcmRlci1yYWRpdXM6IDNweDtkaXNwbGF5OiBpbmxpbmUtZmxleDt9Lm8tLWxvZy1idXR0b246aG92ZXIge2JhY2tncm91bmQtY29sb3I6ICM5ZTc3NGE7Y29sb3I6IGhzbGEoMCwwJSwxMDAlLC45KTt9Lm8tLWp1bXAge21heC13aWR0aDogMTAwMHB4O2ZvbnQtc2l6ZTogMTJweDttYXJnaW46IDAgYXV0bztwYWRkaW5nOiAuNWVtIDFlbTt9Lm8tLXZpcCAuby0tanVtcCB7bWF4LXdpZHRoOiB1bnNldDttYXJnaW4tdG9wOiA1cHg7fS5vLS1qdW1wICsgLm8tLWp1bXAgeycgKyBQdXJpZnlTdHlsZSArICJ9Lm8tLWp1bXAgYSB7ZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7Ym9yZGVyLXJhZGl1czogNHB4O2ZvbnQtc2l6ZTogMTJweCAhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OiAxO3RleHQtYWxpZ246IGNlbnRlcjttYXJnaW4tdG9wOiAxMHB4O21hcmdpbi1yaWdodDogOHB4O3doaXRlLXNwYWNlOiBub3dyYXA7Y3Vyc29yOiBwb2ludGVyO3RleHQtZGVjb3JhdGlvbjogbm9uZTt0cmFuc2l0aW9uOiBhbGwgMC4yNXM7Y29sb3I6ICMyNTc5NDIgIWltcG9ydGFudDtiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhICFpbXBvcnRhbnQ7Ym9yZGVyOiAxcHggc29saWQgI2YxZjNmNTtwYWRkaW5nOiA2cHg7Ym94LXNoYWRvdzogMCAycHggMnB4IDAgcmdiYSgwLDAsMCwwLjIpO30uby0tcGMgLm8tLWp1bXAgYSB7XG5wYWRkaW5nOiA1cHggNnB4IDRweDt9Lm8tLWp1bXAgYTpob3Zlciwuby0tanVtcCBhLmlzLWFjdGl2ZSB7Ym9yZGVyOiAxcHggc29saWQgIzA5OTI2ODtiYWNrZ3JvdW5kLWNvbG9yOiAjMjU3OTQyICFpbXBvcnRhbnQ7Y29sb3I6ICNlZmZhZjMgIWltcG9ydGFudDt9Lm8tLWp1bXAgYS5pcy1hbmltZSB7Y29sb3I6ICNlNjQ5ODAgIWltcG9ydGFudDt9Lm8tLWp1bXAgYS5pcy1hbmltZTpob3Zlciwuby0tanVtcCBhLmlzLWFuaW1lLmlzLWFjdGl2ZSB7Ym9yZGVyOiAxcHggc29saWQgI2Y3ODNhYztiYWNrZ3JvdW5kLWNvbG9yOiAjZTY0OTgwICFpbXBvcnRhbnQ7Y29sb3I6ICNmZmRlZWIgIWltcG9ydGFudDt9Lm8tLWp1bXAgYS5pcy12aXAge2NvbG9yOiAjZTg1OTBjICFpbXBvcnRhbnQ7fS5vLS1qdW1wIGEuaXMtdmlwOmhvdmVyLC5vLS1qdW1wIGEuaXMtdmlwLmlzLWFjdGl2ZSB7Ym9yZGVyOiAxcHggc29saWQgI2U4NTkwYztiYWNrZ3JvdW5kLWNvbG9yOiAjZTg1OTBjICFpbXBvcnRhbnQ7Y29sb3I6ICNmZmY0ZTYgIWltcG9ydGFudDt9Lm8tLXZpcC1saXN0IH4gLm8tLWp1bXAge2JvcmRlci10b3A6IDJweCBzb2xpZCByZ2JhKDIyNCwgMjI0LCAyMjQsIDAuMjUpO30uby0tdmlwLWxpc3QgfiAuby0tanVtcCAuby0tY29sbGFwc2U6bm90KC5pcy1jb2xsYXBzZSkge2Rpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O30uby0tY29sbGFwc2Uge21pbi13aWR0aDogMmVtO30iOwogICAgICB9CiAgICAgIGFzeW5jIGZ1bmN0aW9uIGdldEtleXdvcmQobikgewogICAgICAgIHJldHVybiAic3RyaW5nIiA9PSB0eXBlb2YgbiA/IGF3YWl0ICQkKChmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiAkKG4pLmVxKDApLnRleHQoKTsKICAgICAgICB9KSkgOiAiZnVuY3Rpb24iID09IHR5cGVvZiBuID8gbigkKSA6IGdldEtleXdvcmRGcm9tVXJsKG4pOwogICAgICB9CiAgICAgIGFzeW5jIGZ1bmN0aW9uIGdvSnVtcChuLCBlKSB7CiAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiBGdW5jdGlvbikgbihlKTsgZWxzZSB7CiAgICAgICAgICBjb25zdCB0ID0gYXdhaXQgZ2V0S2V5d29yZChlKTsKICAgICAgICAgIGlmICghdCkgcmV0dXJuOwogICAgICAgICAgKEFycmF5LmlzQXJyYXkobikgPyBuIDogbi5zcGxpdCgvXHMqLFxzKi8pKS5mb3JFYWNoKChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgIG4gPSBuLnNwbGl0KC9ccypcfFxzKi8pLCBpbnNlcnRTZWFyY2hBZGRvbih0LCBuWzBdLCBuWzFdIHx8ICJhZnRlciIpOwogICAgICAgICAgfSkpOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBleGVjQWRkb25KcyhuKSB7CiAgICAgICAgbiAmJiBuLmpzIGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgbi5qcygpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGFkZG9uR28oKSB7CiAgICAgICAgY29uc3QgYWRkb24gPSBBRERPTlMuZmluZCgoZnVuY3Rpb24obikgewogICAgICAgICAgcmV0dXJuICFuLmRpc2FibGUgJiYgSXMobi5tYXRjaCk7CiAgICAgICAgfSkpOwogICAgICAgIGlmIChhZGRvbikgewogICAgICAgICAgaWYgKGlzRmlyc3RSdW5BZGRvbikgewogICAgICAgICAgICBsZXQgbiA9IGdldEJhc2VTdHlsZSgpOwogICAgICAgICAgICBhZGRvbi5oaWRlICYmIChuICs9ICJcbiIgKyBhZGRvbi5oaWRlICsgIiB7IiArIFB1cmlmeVN0eWxlICsgIn0iKSwgYWRkb24uY3NzICYmIChuICs9IGFkZG9uLmNzcyksCiAgICAgICAgICAgIGFkZENzcyhuKTsKICAgICAgICAgIH0KICAgICAgICAgIF9EICYmICQoIm9vLWxvZ3MiKS5sZW5ndGgsIF9EICYmICQoIm9vLWxvZ3MiKS5sZW5ndGgsICQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBsZXQgX01hdGhtaW4gPSBNYXRoLm1pbjsKICAgICAgICAgICAgY29uc3QgcGxheUFkZG9uID0gYWRkb24ucGxheTsKICAgICAgICAgICAgaWYgKHBsYXlBZGRvbiAmJiBJcyhwbGF5QWRkb24ubWF0Y2gpKSB7CiAgICAgICAgICAgICAgaWYgKHBsYXlBZGRvbi52aXAgJiYgIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5vLS12aXAiKSkgewogICAgICAgICAgICAgICAgZnVuY3Rpb24gZm9ybWF0UGFzc2VkVGltZShuKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiAoKERhdGUubm93KCkgLSBuKSAvIDFlMykudG9GaXhlZCgyKSArICJzIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVFyY29kZSgpIHsKICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IDAgPCBhcmd1bWVudHMubGVuZ3RoICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzBdID8gYXJndW1lbnRzWzBdIDogSHJlZjsKICAgICAgICAgICAgICAgICAgaXNNb2JpbGUgfHwgKCFxcmNvZGVDb2RlICYmIChxcmNvZGVDb2RlID0gYXdhaXQgZmV0Y2hDZG5VcmwoIi9xcmNvZGUtZ2VuZXJhdG9yLzEuNC40L3FyY29kZS5taW4uanMiKSksCiAgICAgICAgICAgICAgICAgIGV2YWwocXJjb2RlQ29kZSksIHFyY29kZSAmJiAoUVIgPSBxcmNvZGUoMCwgIkwiKSwgUVIuYWRkRGF0YSh1cmwpLCBRUi5tYWtlKCksICQoIi5vLS1xcmNvZGUtYm94IikucmVtb3ZlQ2xhc3MoIm8tLWhpZGUiKSwKICAgICAgICAgICAgICAgICAgJCgiLm8tLXFyY29kZSIpLmh0bWwoUVIuY3JlYXRlSW1nVGFnKCkpKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBmaXhVcmwobikgewogICAgICAgICAgICAgICAgICByZXR1cm4gbi5yZXBsYWNlKC9bXD8jXS4rL2csICIiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZpeFZpcFVybChuKSB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGUgPSBBRERPTlMuZmluZCgoZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBJcyhlLm1hdGNoLCBuKSAmJiBlLnBsYXkgJiYgZS5wbGF5LmZpeFVybDsKICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgICByZXR1cm4gZSA/ICEwID09PSBlLnBsYXkuZml4VXJsID8gZml4VXJsKG4pIDogZS5wbGF5LmZpeFVybChuKSA6IG47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRWaXBUYXJnZXRVcmwoKSB7CiAgICAgICAgICAgICAgICAgIGlmIChvb1BsYXlVcmwpIHJldHVybiBvb1BsYXlVcmw7CiAgICAgICAgICAgICAgICAgIGxldCBuID0gbG9jYXRpb24uaHJlZi5yZXBsYWNlKC8mP1x3Kz1odHRwW14mXSsvLCAiIikucmVwbGFjZSgvLitodHRwLywgImh0dHAiKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuIG4gPSBkZWNvZGVVUkkoZml4VmlwVXJsKG4pIHx8IG4pLCBuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gY2FuUGxheUluUGFnZShuKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiAhaXNPbmx5RG93bmxvYWRWaWRlb1VybFJlZ2V4LnRlc3QobikgJiYgKCEvXC9cL3Z3ZWNhbS50Yy5xcS5jb20vLnRlc3QobikgfHwgSXMoInYucXEuY29tIikpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gdG9TaG9ydFZpZGVvVXJsKG4pIHsKICAgICAgICAgICAgICAgICAgY29uc3QgZSA9IG4ubWF0Y2goc2hvcnRWaWRlb1VybFJlZ2V4KSB8fCBuLm1hdGNoKHNob3J0VmlkZW9VcmxMb3NlUmVnZXgpOwogICAgICAgICAgICAgICAgICByZXR1cm4gZSA/IGVbMV0uc3BsaXQoIi4iKS5zbGljZSgtMikuam9pbigiLiIpICsgIiAuLi4gIiArIGVbZS5sZW5ndGggLSAyXS5zbGljZSgtMTApICsgIjxzcGFuPiAuICIgKyBlW2UubGVuZ3RoIC0gMV0gKyAiPC9zcGFuPiIgOiBuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gZml4SWZyYW1lVXJsKG4pIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIG4ucmVwbGFjZSgvXC8/XD8uKy8sICIiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldElmcmFtZUlkKG4pIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIGlmcmFtZXNbZml4SWZyYW1lVXJsKG4pXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldElmcmFtZShuKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBmcmFtZXNbZ2V0SWZyYW1lSWQobildOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gc2V0SWZyYW1lKG4sIGUpIHsKICAgICAgICAgICAgICAgICAgaWZyYW1lc1tmaXhJZnJhbWVVcmwobildID0gZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFkZElmcmFtZShuKSB7CiAgICAgICAgICAgICAgICAgIGxldCBlID0gMSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0gPyBhcmd1bWVudHNbMV0gOiAib28taWZyYW1lcyI7CiAgICAgICAgICAgICAgICAgIGNvbnN0IHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuIHQuaWQgPSB1dWlkKCksIHQuZnJhbWVib3JkZXIgPSAiMCIsIHQuc2Nyb2xsaW5nID0gIm5vIiwgdC5zZWFtbGVzcyA9ICEwLAogICAgICAgICAgICAgICAgICB0LnNhbmRib3ggPSAiYWxsb3ctc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdpbiBhbGxvdy1mb3JtcyIsIG4gJiYgKHQuc3JjID0gbiwgc2V0SWZyYW1lKG4sIHQuaWQpKSwKICAgICAgICAgICAgICAgICAgJChlKS5hcHBlbmQodCksIHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiByZW1vdmVJZnJhbWUoKSB7CiAgICAgICAgICAgICAgICAgIGxldCBuID0gMCA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMF0gPyBhcmd1bWVudHNbMF0gOiAib28taWZyYW1lcyA+IGlmcmFtZSI7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGUgPSAkKCJzdHJpbmciID09IHR5cGVvZiBuID8gbi5zdGFydHNXaXRoKCJvby1pZnJhbWVzIikgPyBuIDogIiMiICsgbiA6IG4uaWQgPyAiIyIgKyBuLmlkIDogbikuZ2V0KDApOwogICAgICAgICAgICAgICAgICBlICYmIChlLnNyYyA9ICJhYm91dDpibGFuayIsICQoZSkucmVtb3ZlKCkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gZW1wdHlJZnJhbWVzKCkgewogICAgICAgICAgICAgICAgICAkKCJvby1pZnJhbWVzID4gaWZyYW1lIikuZWFjaCgoZnVuY3Rpb24obiwgZSkgewogICAgICAgICAgICAgICAgICAgIHJlbW92ZUlmcmFtZShlKTsKICAgICAgICAgICAgICAgICAgfSkpLCAkKCJvby1pZnJhbWVzIikuZW1wdHkoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFNuaWZmVGltZShuKSB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGUgPSBzbmlmZlRpbWVzW2ZpeElmcmFtZVVybChuKV07CiAgICAgICAgICAgICAgICAgIHJldHVybiBlID8gZm9ybWF0UGFzc2VkVGltZShlKSA6ICIwcyI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBzbmlmZlN0YXJ0KCkgewogICAgICAgICAgICAgICAgICBpc1NuaWZmaW5nID0gITAsIGlzRW5zdXJlUGxheWluZ0NoZWNrID0gITEsIHNuaWZmVGltZXN0YW1wID0gRGF0ZS5ub3coKSwgc25pZmZVcmxzID0gW10sCiAgICAgICAgICAgICAgICAgIHNuaWZmVXJsc0tleSA9IFtdLCAkKCIuby0tcGxheWVyIikuZW1wdHkoKSwgJCgiaHRtbCIpLmFkZENsYXNzKCJvLS1zbmlmZmluZyIpLCAkKCIuby0tdmlwIikucmVtb3ZlQ2xhc3MoImlzLXBsYXktaW4tcGFnZSIpLAogICAgICAgICAgICAgICAgICBibG9iQ291bnQgPSAwLCAkKCIuby0tdmlwLWl0ZW0uaXMtYmxvYiIpLnJlbW92ZSgpLCBwcm9ncmVzc0ludGVydmFsID0gc2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICQoIi5vLS1zbmlmZi1wcm9ncmVzcyIpLmNzcyh7CiAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogKyQoIi5vLS1zbmlmZi1wcm9ncmVzcyIpLmNzcygid2lkdGgiKS5yZXBsYWNlKCIlIiwgIiIpICsgLjEgKyAiJSIKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgfSksIDIwMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBzbmlmZkRvbmUoKSB7CiAgICAgICAgICAgICAgICAgIGZvcm1hdFBhc3NlZFRpbWUoc25pZmZTdGFydFRpbWUpLCBpc1NuaWZmaW5nID0gITEsIGVtcHR5SWZyYW1lcygpLCAkKCIuby0tc25pZmYtcHJvZ3Jlc3MiKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHdpZHRoOiAiMTAwJSIKICAgICAgICAgICAgICAgICAgfSksIGNsZWFySW50ZXJ2YWwocHJvZ3Jlc3NJbnRlcnZhbCksICQoIi5vLS12aXAiKS5yZW1vdmVDbGFzcygiaXMtc25pZmZpbmciKS5hZGRDbGFzcygiaXMtc25pZmYtZG9uZSIpLAogICAgICAgICAgICAgICAgICAkKCJodG1sIikucmVtb3ZlQ2xhc3MoIm8tLXNuaWZmaW5nIiksIDAgPCBzbmlmZlVybHMubGVuZ3RoICYmIDAgPT09ICQoIi5vLS1zbmlmZi1kb25lIikubGVuZ3RoICYmICQoIi5vLS12aXAtcGxheSAuby0tc291cmNlcyIpLmxlbmd0aCAmJiAkKCIuby0tdmlwLXBsYXkgLm8tLXNvdXJjZXMiKS5hcHBlbmQoJzxzcGFuIGNsYXNzPSJvLS1zbmlmZi1kb25lIj7inJQ8L3NwYW4+JyksCiAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICQoIi5vLS1zbmlmZi1wcm9ncmVzcyIpLmNzcyh7CiAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogIjAiCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgIH0pLCAxZTMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gc25pZmZTdWNjZXNzKG4sIGUpIHsKICAgICAgICAgICAgICAgICAgY29uc3QgdCA9IChuID0gZGVjb2RlVVJJQ29tcG9uZW50KG4udHJpbSgpKS5yZXBsYWNlKC9eKGh0dHA6KT9cL1wvLywgImh0dHBzOi8vIikpLnJlcGxhY2UoL1w/LisvLCAiIik7CiAgICAgICAgICAgICAgICAgIGlmIChzbmlmZlVybHNLZXkuaW5jbHVkZXModCkpIHJldHVybjsKICAgICAgICAgICAgICAgICAgc25pZmZVcmxzS2V5LnB1c2godCksIHNuaWZmVXJscy5wdXNoKG4pOwogICAgICAgICAgICAgICAgICBjb25zdCBpID0gc25pZmZVcmxzLmxlbmd0aCwgbyA9IG4ubWF0Y2godmlkZW9FeHRSZWdleCksIGEgPSBvID8gb1sxXSA6ICJ1bmtub3ciOwogICAgICAgICAgICAgICAgICBpZiAoJCgiLm8tLXZpcC1wbGF5IC5vLS1zb3VyY2VzIikuYXBwZW5kKCc8YSBfaHJlZj0iJyArICgiYmxvYiIgPT09IGEgPyBlIDogbikgKyAnIiBjbGFzcz0iaXMtJyArIGEgKyAnIj7nur/ot68nICsgaSArICI8L2E+IiksCiAgICAgICAgICAgICAgICAgICQoIi5vLS12aXAtcGxheSAuby0tc291cmNlcyBhIikub2ZmKCJjbGljayIpLm9uKCJjbGljayIsIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBuID0gJCh0aGlzKS5hdHRyKCJfaHJlZiIpOwogICAgICAgICAgICAgICAgICAgIHVwZGF0ZVFyY29kZShuKTsKICAgICAgICAgICAgICAgICAgICBsZXQgZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5vLS1wbGF5ZXIgdmlkZW8iKTsKICAgICAgICAgICAgICAgICAgICBlIHx8ICgkKCIuby0tcGxheWVyIikucHJlcGVuZCgnPHZpZGVvIGNsYXNzPSJvLS12aWRlbyIgcG9zdGVyPSInICsgUGxheWVyUGxheWluZ0NvdmVyICsgJyIgY29udHJvbHMgcGxheXNpbmxpbmU+PC92aWRlbz4nKSwKICAgICAgICAgICAgICAgICAgICBlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLm8tLXBsYXllciB2aWRlbyIpKTsKICAgICAgICAgICAgICAgICAgICBjb25zdCB0ID0gZ2V0R2xvYmFsKCJQbHlyIiksIGkgPSBnZXRHbG9iYWwoIkhscyIpIHx8IGdldEdsb2JhbCgiaGxzIik7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFwbGF5ZXIgJiYgdCAmJiAocGxheWVyID0gbmV3IHQoZSwgewogICAgICAgICAgICAgICAgICAgICAgZGVidWc6IF9ELAogICAgICAgICAgICAgICAgICAgICAgaW52ZXJ0VGltZTogITEsCiAgICAgICAgICAgICAgICAgICAgICBhdXRvcGxheTogITAsCiAgICAgICAgICAgICAgICAgICAgICB2b2x1bWU6IC43NSwKICAgICAgICAgICAgICAgICAgICAgIHNwZWVkOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiAxLAogICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBbIC41LCAuNzUsIDEsIDEuMjUsIDEuNSwgMiBdCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTogewogICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiAhMCwKICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBzdG9yZVByZWZpeCArICJwbHlyIgogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pLCBwbGF5ZXIub24oImVudGVyZnVsbHNjcmVlbiIsIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICQoImh0bWwiKS5hZGRDbGFzcygiby0tZnVsbHNjcmVlbiIpOwogICAgICAgICAgICAgICAgICAgIH0pKSwgcGxheWVyLm9uKCJleGl0ZnVsbHNjcmVlIiwgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgJCgiaHRtbCIpLnJlbW92ZUNsYXNzKCJvLS1mdWxsc2NyZWVuIik7CiAgICAgICAgICAgICAgICAgICAgfSkpKSwgJCgiLm8tLXBsYXllci1iZyIpLnJlbW92ZSgpLCAvXC5tM3U4Ly50ZXN0KG4pICYmIGkgJiYgaS5pc1N1cHBvcnRlZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ID0gbmV3IGk7CiAgICAgICAgICAgICAgICAgICAgICB0LmxvYWRTb3VyY2UobiksIHQuYXR0YWNoTWVkaWEoZSksIHQub24oaS5FdmVudHMuTUFOSUZFU1RfUEFSU0VELCAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGUucGxheSgpOwogICAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBlLnNyYyA9IG4sIGUuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVkbWV0YWRhdGEiLCAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICBlLnBsYXkoKTsKICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgICAgJCgiLm8tLXBsYXktdXJsIikuaHRtbCgn5p2l5rqQ77yaPGEgX2hyZWY9IicgKyBuICsgJyI+JyArIHRvU2hvcnRWaWRlb1VybChuKSArICI8L2E+IiArIChjYW5QbGF5SW5QYWdlKG4pID8gJzxzcGFuIGNsYXNzPSJvLS1zcGFuIj7lpoLmnpzlhajpg6jnur/ot6/pg73ml6Dms5Xmkq3mlL7vvIzlj6/ku6Xngrnlh7vmnaXmupDpk77mjqXkuIvovb3mnaXmkq3mlL7vvIzmiJbkvb/nlKjljZXkuKrop6PmnpDmkq3mlL7jgII8L3NwYW4+JyA6ICc8c3BhbiBjbGFzcz0iby0tc3BhbiBpcy13YXJuaW5nIj48c3Bhbj7or6Xpk77mjqXml6Dms5XlnKjlvZPliY3nq5nngrnmkq3mlL7vvIzor7fngrnlh7vmnaXmupDkuIvovb3mkq3mlL48L3NwYW4+PC9zcGFuPicpKSwKICAgICAgICAgICAgICAgICAgICAkKCIuby0tcGxheS11cmwgYSIpLm9mZigiY2xpY2siKS5vbigiY2xpY2siLCAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuID0gJCh0aGlzKS5hdHRyKCJfaHJlZiIpOwogICAgICAgICAgICAgICAgICAgICAgaXNIaWtlciAmJiB3aW5kb3cuZnlfYnJpZGdlX2FwcC5wbGF5VmlkZW8gPyB3aW5kb3cuZnlfYnJpZGdlX2FwcC5wbGF5VmlkZW8obikgOiBpc01peGlhICYmIHdpbmRvdy5teF9icm93c2VyX29iai5wbGF5dmlkZW8gPyB3aW5kb3cubXhfYnJvd3Nlcl9vYmoucGxheXZpZGVvKG4sIG4pIDogd2luZG93Lm9wZW4obiwgIl9ibGFuayIsICJub29wZW5lciIpOwogICAgICAgICAgICAgICAgICAgIH0pKSwgJCgiLm8tLXZpcC1wbGF5IC5vLS1zb3VyY2VzIGEiKS5yZW1vdmVDbGFzcygiaXMtYWN0aXZlIiksICQodGhpcykuYWRkQ2xhc3MoImlzLWFjdGl2ZSIpOwogICAgICAgICAgICAgICAgICB9KSksIDEgPT09IGkpIHsKICAgICAgICAgICAgICAgICAgICBsZXQgbjsKICAgICAgICAgICAgICAgICAgICAkKCIuby0tdmlwLXBsYXkgLm8tLXNvdXJjZXMgYSIpLmdldCgwKS5jbGljaygpLCAkKCIuby0tdmlwIikuYWRkQ2xhc3MoImlzLXNuaWZmLXN1Y2Nlc3MiKSwKICAgICAgICAgICAgICAgICAgICAkKCIuby0tdmlwLXBsYXkiKS5yZW1vdmVDbGFzcygiaXMtaGlkZSIpLCBpc0Vuc3VyZVBsYXlpbmdDaGVjayA9ICEwLCBzZXRUaW1lb3V0KChmdW5jdGlvbiBlKCkgewogICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRW5zdXJlUGxheWluZ0NoZWNrKSByZXR1cm4gcGxheWVyICYmIHBsYXllci5yZWFkeSAmJiAwIDwgcGxheWVyLmR1cmF0aW9uID8gdm9pZCAoaXNFbnN1cmVQbGF5aW5nQ2hlY2sgPSAhMSkgOiAoKG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuby0tdmlwLXBsYXkgLm8tLXNvdXJjZXMgYS5pcy1hY3RpdmUgKyBhIikpID8gbi5jbGljaygpIDogMSA8IGkgJiYgKG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuby0tdmlwLXBsYXkgLm8tLXNvdXJjZXMgYSIpLAogICAgICAgICAgICAgICAgICAgICAgbiAmJiBuLmNsaWNrKCkpLCB2b2lkIHNldFRpbWVvdXQoZSwgNDUwMCkpOwogICAgICAgICAgICAgICAgICAgIH0pLCA0ZTMpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBzbmlmZkZhaWwoKSB7CiAgICAgICAgICAgICAgICAgIHNuaWZmRG9uZSgpLCAkKCIuby0tcGxheWVyLWJnIikuYWRkQ2xhc3MoImlzLWZhaWwiKSwgJCgiLm8tLXZpcCIpLmFkZENsYXNzKCJpcy1zbmlmZi1mYWlsIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpU25pZmYoKSB7fQogICAgICAgICAgICAgICAgZnVuY3Rpb24gaGlrZXJTbmlmZihzbmlmZlRpY2tJZCkgewogICAgICAgICAgICAgICAgICBpZiAoc25pZmZUaWNrSWQgIT09IHNuaWZmVGljaykgcmV0dXJuOwogICAgICAgICAgICAgICAgICBsZXQgcmVzb3VyY2UgPSBldmFsKHdpbmRvdy5meV9icmlkZ2VfYXBwLmdldE5ldHdvcmtSZWNvcmRzKCkpOwogICAgICAgICAgICAgICAgICByZXNvdXJjZSA9IHJlc291cmNlLmZpbHRlcigoZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBuLnRpbWVzdGFtcCA+IHNuaWZmVGltZXN0YW1wICYmIGlzVmFsaWRWaWRlb1VybChuLnVybCk7CiAgICAgICAgICAgICAgICAgIH0pKSwgaXNTbmlmZmluZyAmJiAocmVzb3VyY2UuZm9yRWFjaCgoZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgICAgIHNuaWZmU3VjY2VzcyhuLnVybCk7CiAgICAgICAgICAgICAgICAgIH0pKSwgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgaGlrZXJTbmlmZihzbmlmZlRpY2tJZCk7CiAgICAgICAgICAgICAgICAgIH0pLCAxMDApKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG1peGlhU25pZmYobikgewogICAgICAgICAgICAgICAgICBpZiAobiAhPT0gc25pZmZUaWNrKSByZXR1cm47CiAgICAgICAgICAgICAgICAgIGxldCBlID0gW10sIHQgPSB3aW5kb3cubXhfYnJvd3Nlcl9vYmouZ2V0d2VibG9ncygiaHR0cCIpOwogICAgICAgICAgICAgICAgICAiZXJyb3IiICE9PSB0ICYmIChlID0gdC50cmltKCkuc3BsaXQoL1xzKlxuW1xuXHNdKi8pLCBlID0gZS5maWx0ZXIoKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNWYWxpZFZpZGVvVXJsKG4pOwogICAgICAgICAgICAgICAgICB9KSkpLCBpc1NuaWZmaW5nICYmIChlLmZvckVhY2goKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAgICAgICBzbmlmZlN1Y2Nlc3Mobik7CiAgICAgICAgICAgICAgICAgIH0pKSwgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgbWl4aWFTbmlmZihuKTsKICAgICAgICAgICAgICAgICAgfSksIDEwMCkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gaW5zZXJ0UGxheWVySHRtbCgpIHsKICAgICAgICAgICAgICAgICAgbGV0IG4gPSAwIDwgYXJndW1lbnRzLmxlbmd0aCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1swXSA/IGFyZ3VtZW50c1swXSA6ICIiOwogICAgICAgICAgICAgICAgICBjb25zdCBlID0gZ2V0VmlwUGxheWVyKCk7CiAgICAgICAgICAgICAgICAgIGlmIChlKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgdCA9ICc8ZGl2IGNsYXNzPSJvLS1wbGF5ZXItYmciIHN0eWxlPSJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJyArIGdldENkbkltYWdlVXJsKFBsYXllckxvYWRpbmdDb3ZlcnNbcGFyc2VJbnQoRGF0ZS5ub3coKSAvIDFlMykgJSBQbGF5ZXJMb2FkaW5nQ292ZXJzLmxlbmd0aF0pICsgJyk7Ij48ZGl2IGNsYXNzPSJvLS1wbGF5ZXItbWFzayI+PC9kaXY+PGRpdiBjbGFzcz0iby0tc25pZmYtcHJvZ3Jlc3MiPjwvZGl2PjxkaXYgY2xhc3M9Im8tLXNpZ24iPihvy5jil6HLmG8pPHNwYW4gY2xhc3M9Im8tLXZlcnNpb24iPnYgJyArIFZFUlNJT04gKyAnPC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9Im8tLXNsb2dhbiI+PHN0cm9uZz7gvLrgvILlha3npZ5WNTg34LyC4Ly7PC9zdHJvbmc+PGRpdiBjbGFzcz0iby0tbG9hZGVyIj4nICsgSWNvbi5sb2FkZXIgKyAnPC9kaXY+PHN0cm9uZz7lvbHop4Y8L3N0cm9uZz48L2Rpdj48ZGl2IGNsYXNzPSJvLS1lcnJvci10ZXh0Ij7op6PmnpDlpLHotKXvvIzlj6/ku6XlsJ3or5Xkvb/nlKjljZXkuKrop6PmnpDmkq3mlL7vvIzmiJbogIXliLDlhbblroPmraPniYjnvZHnq5nkuIrop6PmnpA8L2Rpdj48L2Rpdj4nOwogICAgICAgICAgICAgICAgICAgICQoZSkuZW1wdHkoKS5hcHBlbmQoJzxkaXYgY2xhc3M9Im8tLXBsYXllciI+JyArIHQgKyBuICsgIjwvZGl2PiIpLCAkKCIuby0tcGxheWVyIikucGFyZW50KCkuYWRkQ2xhc3MoIm8tLXBsYXllci1ib3giKTsKICAgICAgICAgICAgICAgICAgICBjb25zdCBpID0gRGF0ZS5ub3coKSwgbyA9IHNldEludGVydmFsKChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgIERhdGUubm93KCkgLSBpID4gOWU0ICYmIGNsZWFySW50ZXJ2YWwobyksICQoIi5vLS1wbGF5ZXItYm94ID4gKjpub3QoLm8tLXBsYXllcikiKS5yZW1vdmUoKTsKICAgICAgICAgICAgICAgICAgICB9KSwgMWUzKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gc25pZmYobikgewogICAgICAgICAgICAgICAgICBpZiAoaXNTbmlmZmluZyAmJiBzbmlmZkRvbmUoKSwgc25pZmZTdGFydCgpLCBpc0FsbG93SWZyYW1lU25pZmYpIGlTbmlmZigpOyBlbHNlIGlmIChpc0FsbG93SGlrZXJTbmlmZikgaGlrZXJTbmlmZihuKTsgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0FsbG93TWl4aWFTbmlmZikgcmV0dXJuIHZvaWQgc25pZmZEb25lKCk7CiAgICAgICAgICAgICAgICAgICAgbWl4aWFTbmlmZihuKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpbnNlcnRQbGF5ZXJIdG1sKGlzTW9iaWxlID8gIiIgOiAnPGRpdiBjbGFzcz0iby0tdmlwLXBsYXkgaXMtaGlkZSI+PGRpdiBjbGFzcz0iby0tc291cmNlcyI+PC9kaXY+PGRpdiBjbGFzcz0iby0tcGxheS11cmwiPjwvZGl2PjwvZGl2PicpLAogICAgICAgICAgICAgICAgICBpc01vYmlsZSAmJiAoJCgiLm8tLXZpcC1wbGF5IikucmVtb3ZlKCksICQoIi5vLS12aXAtcGFuZWwiKS5hZnRlcignPGRpdiBjbGFzcz0iby0tdmlwLXBsYXkgaXMtaGlkZSI+PGRpdiBjbGFzcz0iby0tc291cmNlcyI+PC9kaXY+PGRpdiBjbGFzcz0iby0tcGxheS11cmwiPjwvZGl2PjwvZGl2PicpKSwKICAgICAgICAgICAgICAgICAgcGF1c2VQbGF5KCksIHNuaWZmVXJscyA9IFtdLCBzbmlmZlRpbWVzID0ge30sIHNuaWZmSW5kZXggPSAtMSwgZ29TbmlmZigpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gZ29TbmlmZigpIHsKICAgICAgICAgICAgICAgICAgaWYgKCFpc1NuaWZmaW5nKSByZXR1cm47CiAgICAgICAgICAgICAgICAgIHNuaWZmSW5kZXggKz0gMTsKICAgICAgICAgICAgICAgICAgY29uc3QgbiA9IFZfVVtzbmlmZkluZGV4XSwgZSA9IChzbmlmZkluZGV4ICsgMSkgLyAoVl9VLmxlbmd0aCArIDEpLCB0ID0gKHNuaWZmVXJscy5sZW5ndGggKyAxKSAvIE1BWF9TTklGRl9QTEFZX0NPVU5ULCBpID0gX01hdGhtaW4oMTAgKiAoMi41ICogZSArIDIuNSAqIHQgKyA1ICogX01hdGhtYXgoZSwgdCkgKyAuNSksIDk5KS50b0ZpeGVkKDQpICsgIiUiOwogICAgICAgICAgICAgICAgICBpZiAoJCgiLm8tLXNuaWZmLXByb2dyZXNzIikuY3NzKHsKICAgICAgICAgICAgICAgICAgICB3aWR0aDogaQogICAgICAgICAgICAgICAgICB9KSwgIW4pIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBuID0gc2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09ICQoIm9vLWlmcmFtZXMgPiBpZnJhbWUiKS5sZW5ndGggJiYgKGNsZWFySW50ZXJ2YWwobiksIHNuaWZmRG9uZSgpLCAwID09PSBzbmlmZlVybHMubGVuZ3RoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLm8tLXZpcC1pdGVtLmlzLWJsb2IiKTsKICAgICAgICAgICAgICAgICAgICAgICAgbiA/IG4uY2xpY2soKSA6IHNuaWZmRmFpbCgpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pLCAxZTMpOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoc25pZmZVcmxzLmxlbmd0aCA+PSBNQVhfU05JRkZfUExBWV9DT1VOVCArIChwbGF5ZXIgJiYgcGxheWVyLnJlYWR5ICYmIDAgPCBwbGF5ZXIuZHVyYXRpb24gPyAtMSA6IDIpIHx8IHNuaWZmVXJscy5sZW5ndGggPj0gTUFYX1NOSUZGX1BMQVlfQ09VTlQgLyAyICYmIERhdGUubm93KCkgLSBzbmlmZlRpbWVzdGFtcCA+IDFlMyAqIF9NYXRobWF4KDI1MCAtIDEwICogc25pZmZVcmxzLmxlbmd0aCwgMTUwKSkgcmV0dXJuIHZvaWQgc25pZmZEb25lKCk7CiAgICAgICAgICAgICAgICAgIGNvbnN0IG8gPSBnZXRWaXBUYXJnZXRVcmwoKSwgYSA9IE1fVmlwVXJsKG4pICsgbzsKICAgICAgICAgICAgICAgICAgc25pZmZUaW1lc1tmaXhJZnJhbWVVcmwoYSldID0gRGF0ZS5ub3coKTsKICAgICAgICAgICAgICAgICAgY29uc3QgciA9IGFkZElmcmFtZShhKSwgcyA9IGlzTW9iaWxlID8gNyA6IDU7CiAgICAgICAgICAgICAgICAgIHIub25sb2FkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICByZW1vdmVJZnJhbWUociwgIlRJTUVPVVQiKTsKICAgICAgICAgICAgICAgICAgICB9KSwgMTJlMyk7CiAgICAgICAgICAgICAgICAgIH0sIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHJlbW92ZUlmcmFtZShyLCAiTUFYIFRJTUVPVVQiKSwgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICBpc1NuaWZmaW5nICYmIDAgPT09ICQoIm9vLWlmcmFtZXMgPiBpZnJhbWUiKS5sZW5ndGggJiYgc25pZmZJbmRleCA+PSBWX1UubGVuZ3RoIC0gMSAmJiBzbmlmZkRvbmUoKTsKICAgICAgICAgICAgICAgICAgICB9KSwgMTUwMCk7CiAgICAgICAgICAgICAgICAgIH0pLCAxNWUzKSwgZnVuY3Rpb24gbigpIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBlID0gJCgib28taWZyYW1lcyA+IGlmcmFtZSIpLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBpZiAoZSA+IHMgLSAxKSBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgIG4oKTsKICAgICAgICAgICAgICAgICAgICB9KSwgMTAwKTsgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuID0gcGxheWVyICYmIHBsYXllci5yZWFkeSAmJiAwIDwgcGxheWVyLmR1cmF0aW9uLCB0ID0gX01hdGhtaW4oc25pZmZVcmxzLmxlbmd0aCAqIChuID8gMjAwIDogMTUwKSArIDEwMCAqIChzIC0gZSkgKyBfTWF0aG1pbig1MCAqIHNuaWZmSW5kZXgsIDFlMyksIDNlMykgKiAoaXNNb2JpbGUgPyAuNyA6IDEpOwogICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGdvU25pZmYoKTsKICAgICAgICAgICAgICAgICAgICAgIH0pLCB0KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0oKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uIGF1dG9TbmlmZlBsYXkoKSB7CiAgICAgICAgICAgICAgICAgIGF3YWl0IHBsYXlCZWZvcmUoKSwgMCA8IHNuaWZmVGljayAmJiBzbmlmZkRvbmUoKSwgc25pZmZTdGFydFRpbWUgPSBEYXRlLm5vdygpLCBzbmlmZigrK3NuaWZmVGljayksCiAgICAgICAgICAgICAgICAgICQoIi5vLS12aXAiKS5yZW1vdmVDbGFzcygiaXMtc25pZmYtc3VjY2VzcyBpcy1zbmlmZi1kb25lIikuYWRkQ2xhc3MoImlzLXNuaWZmaW5nIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBwYXVzZVBsYXkoKSB7CiAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgJCgidmlkZW86bm90KC5vLS12aWRlbyksIGF1ZGlvIikuZWFjaCgoZnVuY3Rpb24obiwgZSkgewogICAgICAgICAgICAgICAgICAgICAgZS5wYXVzZSgpLCBlLnZvbHVtZSA9IDAsIGUubXV0ZWQgPSAhMCwgJCgidmlkZW86bm90KC5vLS12aWRlbyksIGF1ZGlvIikuZWFjaCgoZnVuY3Rpb24obiwgZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkKGUpLnJlbW92ZSgpOwogICAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgICBjb25zdCBuID0gRGF0ZS5ub3coKSwgZSA9IHNldEludGVydmFsKChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHQgPSBEYXRlLm5vdygpIC0gbiwgaSA9IGdldEdsb2JhbCgicGxheWVyT2JqZWN0IikgfHwgZ2V0R2xvYmFsKCJNR1RWUGxheWVyIikgJiYgZ2V0R2xvYmFsKCJNR1RWUGxheWVyIikucGxheWVyIHx8IGdldEdsb2JhbCgidmlkZW9QbGF5ZXIiKSB8fCBnZXRHbG9iYWwoIlBMQVlFUiIpOwogICAgICAgICAgICAgICAgICAgICAgaSAmJiAoaS5wYXVzZSBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIGkucGF1c2UoKSwgaS5tdXRlIGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgaS5tdXRlKCkpLAogICAgICAgICAgICAgICAgICAgICAgKCFpIHx8IHQgPiA5ZTQpICYmIGNsZWFySW50ZXJ2YWwoZSk7CiAgICAgICAgICAgICAgICAgICAgfSksIDYwKTsKICAgICAgICAgICAgICAgICAgfSBjYXRjaCAobikge30KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uIHBsYXlCZWZvcmUoKSB7CiAgICAgICAgICAgICAgICAgICQoIi5vLS12aXAtcGxheSIpLnJlbW92ZUNsYXNzKCJpcy1oaWRlIiksIGlzTG9hZFBsYXllciB8fCAoYWRkQ3NzKCIvcGx5ci8zLjYuMi9wbHlyLmNzcyIpLAogICAgICAgICAgICAgICAgICBhd2FpdCBhZGRKcygiL2hscy5qcy8wLjEzLjIvaGxzLm1pbi5qcyIpLCBhd2FpdCBhZGRKcygiL3BseXIvMy42LjIvcGx5ci5taW4uanMiKSwKICAgICAgICAgICAgICAgICAgaXNMb2FkUGxheWVyID0gITApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0VmlwUGxheWVyKCkgewogICAgICAgICAgICAgICAgICByZXR1cm4gJChQbGF5ZXJTZWxlY3RvcikuZ2V0KDApIHx8ICQoIiNwbGF5ZXIsIC5wbGF5ZXIiKS5nZXQoMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBwbGF5SW5QYWdlKG4pIHsKICAgICAgICAgICAgICAgICAgJCgiLm8tLXBsYXllciIpLnJlbW92ZUNsYXNzKCJpcy1sb2FkZWQiKTsKICAgICAgICAgICAgICAgICAgZ2V0VmlwUGxheWVyKCkgPyAocGF1c2VQbGF5KCksIGluc2VydFBsYXllckh0bWwoJzxpZnJhbWUgaWQ9Im8tLXBsYXllci1pZnJhbWUiIHN0eWxlPSJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyBib3JkZXI6IG5vbmU7IG91dGxpbmU6IG5vbmU7IiAgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgYWxsb3dmdWxsc2NyZWVuPSJ0cnVlIiBhbGxvd3RyYW5zcGFyZW5jeT0idHJ1ZSIgZnJhbWVib3JkZXI9IjAiIHNjcm9sbGluZz0ibm8iIHNhbmRib3g9ImFsbG93LXNjcmlwdHMgYWxsb3ctc2FtZS1vcmlnaW4gYWxsb3ctZm9ybXMiIHNyYz0iJyArIG4gKyAnIj48L2lmcmFtZT4nKSkgOiBsb2NhdGlvbi5ocmVmID0gbiwKICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgJCgiLm8tLXBsYXllciIpLmFkZENsYXNzKCJpcy1sb2FkZWQiKTsKICAgICAgICAgICAgICAgICAgfSksIDI1MDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gcGxheVZpcFVybChuKSB7CiAgICAgICAgICAgICAgICAgIGlmICghbikgcmV0dXJuOwogICAgICAgICAgICAgICAgICBjb25zdCBlID0gbiArIGdldFZpcFRhcmdldFVybCgpOwogICAgICAgICAgICAgICAgICAkKCIuby0tdmlwIikucmVtb3ZlQ2xhc3MoImlzLXNuaWZmLXN1Y2Nlc3MgaXMtc25pZmYtZG9uZSBpcy1zbmlmZmluZyIpLmFkZENsYXNzKCJpcy1wbGF5LWluLXBhZ2UiKSwKICAgICAgICAgICAgICAgICAgdXBkYXRlUXJjb2RlKGUpLCBpc1BsYXlpbmdJblBhZ2UgJiYgIS9odHRwOi8udGVzdChuKSA/IHBsYXlJblBhZ2UoZSkgOiAocGF1c2VQbGF5KCksCiAgICAgICAgICAgICAgICAgICQoIiNvLS1wbGF5ZXItaWZyYW1lIikucmVtb3ZlKCksICQoIi5vLS1wbGF5ZXIiKS5yZW1vdmVDbGFzcygiaXMtbG9hZGVkIiksIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKGUsICJfYmxhbmsiKTsKICAgICAgICAgICAgICAgICAgfSksIDEwMCkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gcGxheVZpcEl0ZW0obikgewogICAgICAgICAgICAgICAgICBjb25zdCBlID0gMCA8ICQobikubGVuZ3RoOwogICAgICAgICAgICAgICAgICBsZXQgdCA9IGUgPyAkKG4pLmhhc0NsYXNzKCJvLS12aXAtc25pZmYiKSA/ICJhdXRvIiA6ICQobikuYXR0cigiX2hyZWYiKSA6IFN0b3JlLmdldCgibGFzdFBsYXlDaG9pY2UiLCAiIik7CiAgICAgICAgICAgICAgICAgICQoIi5vLS12aXAtaXRlbSIpLnJlbW92ZUNsYXNzKCJpcy1hY3RpdmUiKSwgJCgiLm8tLXZpcC1saXN0IH4gLm8tLXRpcCIpLnJlbW92ZUNsYXNzKCJvLS1oaWRlIiksCiAgICAgICAgICAgICAgICAgIGUgPyAkKG4pLmFkZENsYXNzKCJpcy1hY3RpdmUiKSA6IHQuc3RhcnRzV2l0aCgiaHR0cCIpID8gKCQoIi5vLS12aXAtaXRlbTpub3QoLm8tLXZpcC1zbmlmZikiKS5lYWNoKChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoIl9ocmVmIikgPT09IHQgJiYgJCh0aGlzKS5hZGRDbGFzcygiaXMtYWN0aXZlIik7CiAgICAgICAgICAgICAgICAgIH0pKSwgcGxheVZpcFVybCh0KSkgOiAkKCIuby0tdmlwLWl0ZW0uby0tdmlwLXNuaWZmIikuYWRkQ2xhc3MoImlzLWFjdGl2ZSIpLCBpc1NuaWZmaW5nICYmIHNuaWZmRG9uZSgpLAogICAgICAgICAgICAgICAgICB0LnN0YXJ0c1dpdGgoImh0dHAiKSA/IHBsYXlWaXBVcmwodCkgOiBhdXRvU25pZmZQbGF5KCksIFN0b3JlLnNldCgibGFzdFBsYXlDaG9pY2UiLCB0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE1fU291cmNlKG4pIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIG4gPyBuLnJlcGxhY2UoLyhcdyspL2csIChmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1fU3RyaW5nKGUpOwogICAgICAgICAgICAgICAgICB9KSkgOiAiIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE1fVmlwVXJsKG4pIHsKICAgICAgICAgICAgICAgICAgaWYgKCFuKSByZXR1cm4gIiI7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGUgPSBNX1NvdXJjZShuKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuICJodHRwczovLyIgKyBlICsgKGUuaW5jbHVkZXMoIj8iKSA/ICIiIDogKGUuZW5kc1dpdGgoIi4iKSA/ICJwaHAiIDogL1wvJC8udGVzdChlKSA/ICIiIDogIi8iKSArICI/dXJsIikgKyAiPSI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpbnNlcnRWaXBTb3VyY2UobikgewogICAgICAgICAgICAgICAgICBmdW5jdGlvbiBlKCkgewogICAgICAgICAgICAgICAgICAgICQoIi5vLS1zZXR0aW5nLWJ1dHRvbiIpLm9mZigiY2xpY2siKS5vbigiY2xpY2siLCAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAkKCIuby0tdmlwIikudG9nZ2xlQ2xhc3MoImlzLXNldHRpbmctb24iKTsKICAgICAgICAgICAgICAgICAgICB9KSksICQoIi5vLS10b2dnbGUiKS5vZmYoImNsaWNrIikub24oImNsaWNrIiwgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS50b2dnbGVDbGFzcygiaXMtbiIpLCAkKHRoaXMpLmhhc0NsYXNzKCJvLS1hY3Rpb24tcGlwIikgPyAoaXNQbGF5aW5nSW5QYWdlID0gIWlzUGxheWluZ0luUGFnZSwKICAgICAgICAgICAgICAgICAgICAgIEdsb2JhbFN0b3JlLnNldCgiaXNQbGF5aW5nSW5QYWdlIiwgaXNQbGF5aW5nSW5QYWdlKSkgOiAkKHRoaXMpLmhhc0NsYXNzKCJvLS1hY3Rpb24tc2tpcC1hZCIpICYmIChpc1NraXBBZFZpZGVvID0gIWlzU2tpcEFkVmlkZW8sCiAgICAgICAgICAgICAgICAgICAgICBTdG9yZS5zZXQoImlzU2tpcEFkVmlkZW8iLCBpc1NraXBBZFZpZGVvKSk7CiAgICAgICAgICAgICAgICAgICAgfSkpLCAkKCIuby0tZWRpdC12aXAtc291cmNlLXBhbmVsIHRleHRhcmVhIikub2ZmKCJpbnB1dCIpLm9uKCJpbnB1dCIsIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgIEdsb2JhbFN0b3JlLnNldCgiVmlwVXJscyIsICQodGhpcykudmFsKCkpOwogICAgICAgICAgICAgICAgICAgIH0pKSwgJCgiLm8tLXZpcC1pdGVtOm5vdCguby0tbm9ybWFsKSIpLm9mZigiY2xpY2siKS5vbigiY2xpY2siLCAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICBwbGF5VmlwSXRlbSh0aGlzKTsKICAgICAgICAgICAgICAgICAgICB9KSksICQoIi5vLS1sb2ctYnV0dG9uIikub2ZmKCJjbGljayIpLm9uKCJjbGljayIsIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICQoIm9vLWxvZ3MiKS50b2dnbGVDbGFzcygiaXMtYWN0aXZlIik7CiAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGxldCB0ID0gMSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0gPyBhcmd1bWVudHNbMV0gOiAiYWZ0ZXIiLCBpID0gMiA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMl0gPyBhcmd1bWVudHNbMl0gOiAwOwogICAgICAgICAgICAgICAgICBpZiAoMCA8ICQoIi5vLS12aXAiKS5sZW5ndGggfHwgMjAgPCBpKSByZXR1cm47CiAgICAgICAgICAgICAgICAgIGNvbnN0IG8gPSAkKG4pOwogICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gby5sZW5ndGgpIHJldHVybiB2b2lkIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIGluc2VydFZpcFNvdXJjZShuLCB0LCBpICsgMSk7CiAgICAgICAgICAgICAgICAgIH0pLCAyNTApOwogICAgICAgICAgICAgICAgICBjb25zdCBhID0gdmlwVXJscy5sZW5ndGggPiBjb2xsYXBzZU51bTsKICAgICAgICAgICAgICAgICAgbGV0IHIgPSAoaXNNb2JpbGUgPyAiIiA6ICc8ZGl2IGNsYXNzPSJvLS1hY3Rpb24gby0tdG9nZ2xlIG8tLWFjdGlvbi1za2lwLWFkJyArIChpc1NraXBBZFZpZGVvID8gIiIgOiAiIGlzLW4iKSArICciPjxzcGFuIGNsYXNzPSJvLS15Ij7mmK88L3NwYW4+PHNwYW4gY2xhc3M9Im8tLW4iPuWQpjwvc3Bhbj7liqDpgJ/ot7Plub/lkYo8L2Rpdj4nKSArICc8ZGl2IGNsYXNzPSJvLS1hY3Rpb24gby0tdG9nZ2xlIG8tLWFjdGlvbi1waXAnICsgKGlzUGxheWluZ0luUGFnZSA/ICIiIDogIiBpcy1uIikgKyAnIj48c3BhbiBjbGFzcz0iby0teSI+5pivPC9zcGFuPjxzcGFuIGNsYXNzPSJvLS1uIj7lkKY8L3NwYW4+5byA5ZCv5Y6f572R6aG16Kej5p6Q5pKt5pS+PC9kaXY+PGRpdiBjbGFzcz0iby0tYWN0aW9uIj48YSBocmVmPSJodHRwczovL3dkcy5lY3N4cy5jb20vMjE4MTQ3LmpzIiB0YXJnZXQ9Il9ibGFuayI+55yL55yL5pu05paw5Zyw5Z2APC9hPjwvZGl2Pic7CiAgICAgICAgICAgICAgICAgIG8uZXEoMClbdF0oJzxkaXYgY2xhc3M9Im8tLXZpcCcgKyAoaXNBbGxvd1NuaWZmID8gIiBpcy1hbGxvdy1zbmlmZiIgOiAiIikgKyAnIj48ZGl2IGNsYXNzPSJvLS1zbmlmZi1wcm9ncmVzcyI+PC9kaXY+PGRpdiBjbGFzcz0iby0tdmlwLXBhbmVsIj48ZGl2IGNsYXNzPSJvLS12aXAtdGl0bGUiPjxzcGFuIGNsYXNzPSJvLS12aXAtdGl0bGUtdGV4dCI+JyArIFBMVUdJTl9OQU1FICsgJzxzcGFuIGNsYXNzPSJvLS12aXAtc21hbGwiPnYnICsgVkVSU0lPTiArICI8L3NwYW4+PC9zcGFuPiIgKyAoX0QgPyAnPHNwYW4gY2xhc3M9Im8tLWxvZy1idXR0b24iPkxPRzwvc3Bhbj4nIDogIiIpICsgJzwvZGl2PjxkaXYgY2xhc3M9Im8tLW1lbnVzIj48ZGl2IGNsYXNzPSJvLS1xcmNvZGUtYm94IG8tLWhpZGUiPicgKyBJY29uLnFyY29kZSArICc8ZGl2IGNsYXNzPSJvLS1xcmNvZGUtdGV4dCI+5omL5py65omr56CB55yLPC9kaXY+PGRpdiBjbGFzcz0iby0tcXJjb2RlIj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJvLS1zZXR0aW5nLWJ1dHRvbiI+JyArIEljb24ucGFuZGEgKyAnPC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iby0tc2V0dGluZy1wYW5lbCI+PGRpdiBjbGFzcz0iby0tYWN0aW9ucyI+JyArIHIgKyAnPC9kaXY+PGRpdiBjbGFzcz0iby0tZWRpdC12aXAtc291cmNlLXBhbmVsIj48ZGl2IGNsYXNzPSJvLS1lZGl0LWhpbnQiPuWIt+aWsOeUn+aViO+8jOa4heepuuaBouWkjem7mOiupO+8iOWFreelnlY1ODfvvIzlhajmlrDml6Dlub/lkYrop6PmnpDvvIk8L2Rpdj48dGV4dGFyZWEgcGxhY2Vob2xkZXI9Iua4heepuuS8muS9v+eUqOm7mOiupOWAvCI+JyArIGN1c3RvbVZpcFVybHMudHJpbSgpICsgJzwvdGV4dGFyZWE+PGRpdiBjbGFzcz0iby0tc2xvZ2FuLXRleHQiPjxzdHJvbmc+PC9zdHJvbmc+5YWt56WeVjU4N++8jOasoui/juS9v+eUqDxzdHJvbmc+PC9zdHJvbmc+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iby0tdmlwLWxpc3QiPjxzcGFuIGNsYXNzPSJvLS12aXAtaXRlbSBvLS12aXAtc25pZmYiPicgKyBJY29uLnZpcCArICc8aSBjbGFzcz0iby0tYnViYmxlIG8tLWIxIj48L2k+PGkgY2xhc3M9Im8tLWJ1YmJsZSBvLS1iMiI+PC9pPjxpIGNsYXNzPSJvLS1idWJibGUgby0tYjMiPjwvaT48L3NwYW4+JyArIHZpcFVybHMubWFwKChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSAiby0tdmlwLWl0ZW0iOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBuLnVybC5zdGFydHNXaXRoKCJodHRwcyIpICYmIChlICs9ICIgaXMtcGxheS1pbi1wYWdlIiksIG4uaXNSYW5kb20gJiYgKGUgKz0gIiBpcy1yYW5kb20iKSwKICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9IicgKyBlICsgJyIgX2hyZWY9IicgKyBuLnVybCArICciPicgKyBuLm5hbWUgKyAiPC9zcGFuPiI7CiAgICAgICAgICAgICAgICAgIH0pKS5qb2luKCJcbiIpICsgKGEgPyAnPHNwYW4gY2xhc3M9Im8tLXZpcC1pdGVtIG8tLW5vcm1hbCBvLS1jb2xsYXBzZSI+4p6iPC9zcGFuPicgOiAiIikgKyAiPC9kaXY+IiArIChpc01vYmlsZSA/ICc8ZGl2IGNsYXNzPSJvLS10aXAgby0taGlkZSI+5aSa5pWw6Kej5p6Q5Lya5Zyo56e75Yqo56uv5pi+56S6PHN0cm9uZz7lm77niYflub/lkYo8L3N0cm9uZz7vvIzpnIDmiYvliqjmi6bmiKrjgII8YnI+6YWN5ZCI5rWP6KeI5Zmo55qEPHN0cm9uZz7ll4XmjqLlip/og708L3N0cm9uZz7kvb/nlKjvvIzkvZPpqozmm7TkvbPjgII8L2Rpdj4nIDogIiIpICsgIjwvZGl2PiIpLAogICAgICAgICAgICAgICAgICBhICYmIHNtYXJ0Q29sbGFwc2UoIi5vLS12aXAtaXRlbSIpOwogICAgICAgICAgICAgICAgICBsZXQgcyA9IDAsIGwgPSBzZXRJbnRlcnZhbCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgZSgpLCAxMDAgPCBzKysgJiYgY2xlYXJJbnRlcnZhbChsKTsKICAgICAgICAgICAgICAgICAgfSksIF9NYXRobWluKDIwMCArIDUwICogcywgMWUzKSk7CiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgY29uc3QgVmlwVXJscyA9ICLlha3npZ7op6PmnpAgaHR0cHM6Ly93ZHMuZWNzeHMuY29tLzIxNzk3NC5odG1sP3VybD1cbjcyMOWFreWFrSBodHRwczovL2p4LnhtZmx2LmNvbS8/dXJsPVxu5bCK5LqrIGh0dHBzOi8vcGxheWVyLm1hcXEuY24vP3VybD1cbum6kum6nyBodHRwOi8vanguc3VqeC50b3AvamlleGkucGhwLz91cmw9XG7kurrkurrov7cgaHR0cDovLzQ3Ljk1LjI4LjI0Mi9qeC9yZW5yZW5taS9hbmFseXNpcy5waHA/dj1cblBhcndpeCBodHRwczovL3ZpcC5wYXJ3aXguY29tOjQ0MzMvcGxheWVyLz91cmw9XG7lj6/kuZAgaHR0cHM6Ly93d3cuY2ttb3YudmlwL2FwaS5waHA/dXJsPVxu5Lmd5YWrIGh0dHBzOi8vangueW91eWl0di5jb20vP3VybD1cbuaAneS6kSBodHRwczovL2p4LmFwMnAuY24vP3VybD1cbueBuOS6vyBodHRwczovL3d3dy45MWp4cy5jb20vamlleGkvP3VybD1cbk0zVTggaHR0cHM6Ly9qeC5tM3U4LnR2L2ppZXhpLz91cmw9XG7kupE3MjAgaHR0cHM6Ly9qeC55cGFyc2UuY29tL2luZGV4LnBocD91cmw9XG7njKvop6PmnpAgaHR0cHM6Ly93d3cuY3Vhbi5sYS9tM3U4LnBocD91cmw9XG5IOOino+aekCBodHRwczovL3d3dy5oOGp4LmNvbS9qaWV4aS5waHA/dXJsPSIsIFBsYXllclNlbGVjdG9yID0gIiNpZnJhbWFXcmFwcGVyLCAjbWd0di1wbGF5ZXItd3JhcCwgI3NvaHVwbGF5ZXIgLngtcGxheWVyLCAjd1BsYXllciwgI3ZpZGVvLWJveCwgI3BsYXllcmJveCwgLnRkLWg1X19wbGF5ZXIsIC50ZC1wbGF5Ym94LCAuaXFwLXBsYXllciwgLmctcGxheSAudmlkZW8tYXJlYSwgI21vZF9wbGF5ZXIsICNwbGF5Qm94LCAjai1wbGF5ZXIsICN2aWRlbywgLm0tdmlkZW8tcGxheWVyLCAuc2l0ZV9wbGF5ZXIiLCBEX1ZfVSA9ICJ3aS44MTF1c2cubnBkLG9qdS5qd2ZqaTM0Lm9wcyxqb2IuMTM4dXMubnBkwrd3aSxqd2ZqaS5oajduYS5tZCx3aS54eno4OC5ucGQsdS5jemQ2Lm5wZMK3b2p1LHdpbHAuZGQsYmJicmkubnBkwrd3aS4sandmamkubDE5Mi5ucGQsd2kudXNqenZwei5ucGQsdS5mamlwYmFubS5ucGTCt2pxaG1qbsK3anFobWpuLix4eHgudXBubGQueXp3wrd3acK3am9iLG1kLm1iZ3RtYmFpYS5tZMK3d2kuLHh4eC5qdHBiamN3Lm5wZMK3b2p1LHdpLmlsa3F2Lm5wZCx4eHgudWtld20ubnBkLHdpLmI5OC5sbWoseHh4LndpOWcubnBkwrdqd2ZqaS4semJrby42OHBlLm1kLHh4eC5qd2ZqaXZobWJvLmRkwrdqd2ZqaS4seHh4LmgxODE5Lm1kwrdqd2ZqaSx3aS5kc3hrZi5ucGTCt29qdSxqb2IuandmamkuYmsseHh4Ljl2Mm56YmtvLm1kwrdqd2ZqaS4sam9iLndpdmhqdC5ucGQseHh4Lm12ejYwNjAubnBkwrd3acK3enMuLGpvYi53aTYzOC5ucGTCt29qdSxmMTc3Lm5wZCx3aS5mZ2Riay5mbsK3ZGQsd2kuaDkwNy5ucGQsb2p1LnRwb24ubWZxwrd1LG1jZC52aWhtYnoub2p1wrdsLHdpLjE5MDExMS5vcHPCt3dpLGpvYi4xMzQyNDcub3BzwrdvanUsd2kuMjJhYi5vcHPCt29qdSx3aS45NG5sLm9wc8K3d2ksbzYxNy5ucGQiLCBWX04gPSAi5oiR5pivNjY25YWt56We5oiR5Li66Ieq5bex5bim55uQ44CCIiwgTUFYX1NOSUZGX1BMQVlfQ09VTlQgPSBpc01vYmlsZSA/IDE1IDogMTI7CiAgICAgICAgICAgICAgICBsZXQgaXNBbGxvd0lmcmFtZVNuaWZmID0gR2xvYmFsU3RvcmUuZ2V0KCJpc0FsbG93SWZyYW1lU25pZmYiKSB8fCAhMTsKICAgICAgICAgICAgICAgIGNvbnN0IGlzSGlrZXIgPSAhIXdpbmRvdy5meV9icmlkZ2VfYXBwLCBpc01peGlhID0gISF3aW5kb3cubXhfYnJvd3Nlcl9vYmosIGlzQWxsb3dIaWtlclNuaWZmID0gaXNIaWtlciAmJiAhIXdpbmRvdy5meV9icmlkZ2VfYXBwLmdldE5ldHdvcmtSZWNvcmRzLCBpc0FsbG93TWl4aWFTbmlmZiA9IGlzTWl4aWEgJiYgISF3aW5kb3cubXhfYnJvd3Nlcl9vYmouZ2V0d2VibG9nOwogICAgICAgICAgICAgICAgbGV0IHBsYXllciwgaXNBbGxvd1NuaWZmID0gaXNBbGxvd0hpa2VyU25pZmYgfHwgaXNBbGxvd01peGlhU25pZmYgfHwgaXNBbGxvd0lmcmFtZVNuaWZmLCBzbmlmZlRpbWVzdGFtcCA9IERhdGUubm93KCksIGlzU25pZmZpbmcgPSAhMSwgc25pZmZUaWNrID0gMCwgc25pZmZVcmxzID0gW10sIHNuaWZmVXJsc0tleSA9IFtdLCBpc1BsYXlpbmdJblBhZ2UgPSBHbG9iYWxTdG9yZS5nZXQoImlzUGxheWluZ0luUGFnZSIsICFpc01vYmlsZSksIGlzTG9hZFBsYXllciA9ICExLCBzbmlmZlRpbWVzID0ge30sIHNuaWZmU3RhcnRUaW1lID0gRGF0ZS5ub3coKSwgUVIgPSAiIiwgcXJjb2RlQ29kZSA9ICIiLCBibG9iQ291bnQgPSAwOwogICAgICAgICAgICAgICAgY29uc3QgYmxvYk5hbWVzID0gIuKRoOKRoeKRouKRo+KRpOKRpeKRpuKRp+KRqOKRqeKRquKRq+KRrOKRreKRruKRr+KRsOKRseKRsuKRsyIsIGlmcmFtZXMgPSB7fTsKICAgICAgICAgICAgICAgIGxldCBwcm9ncmVzc0ludGVydmFsID0gbnVsbCwgaXNFbnN1cmVQbGF5aW5nQ2hlY2sgPSAhMTsKICAgICAgICAgICAgICAgIEUub24oInBsYXl1cmwuY2hhbmdlIiwgKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAgICAgbiA/IHBsYXlWaXBJdGVtKCQoIi5vLS12aXAtaXRlbS5pcy1hY3RpdmUiKSkgOiAoc25pZmZEb25lKCksICQoIi5vLS12aXAtaXRlbSIpLnJlbW92ZUNsYXNzKCJpcy1hY3RpdmUiKSk7CiAgICAgICAgICAgICAgICB9KSksIEUub24oImVuYWJsZS5zbmlmZiIsIChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgIG4uZnJvbSA9PT0gU25pZmZDaGVja1VybCAmJiAkKCJvby1pZnJhbWVzID4gaWZyYW1lIikuZWFjaCgoZnVuY3Rpb24obiwgZSkgewogICAgICAgICAgICAgICAgICAgIGUuc3JjID09PSBTbmlmZkNoZWNrVXJsICYmIHJlbW92ZUlmcmFtZShlKTsKICAgICAgICAgICAgICAgICAgfSkpLCBpc0FsbG93SWZyYW1lU25pZmYgfHwgKGlzQWxsb3dJZnJhbWVTbmlmZiA9ICEwLCBpc0FsbG93U25pZmYgPSAhMCwgR2xvYmFsU3RvcmUuc2V0KCJpc0FsbG93SWZyYW1lU25pZmYiLCAhMCksCiAgICAgICAgICAgICAgICAgICQoIi5vLS12aXAiKS5hZGRDbGFzcygiaXMtYWxsb3ctc25pZmYiKSwgJCgiLm8tLXZpcC1pdGVtLmlzLXJhbmRvbSIpLnJlbW92ZSgpLCBzbWFydENvbGxhcHNlKCIuby0tdmlwLWl0ZW0iKSk7CiAgICAgICAgICAgICAgICB9KSksIEUub24oInNuaWZmLmZhaWwiLCAoZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgICBpZiAoaXNBbGxvd1NuaWZmKSB7CiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlSWZyYW1lKGdldElmcmFtZUlkKG4uZnJvbSkpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KSksIEUub24oInBsYXkudmlkZW8iLCAoZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgICByZW1vdmVJZnJhbWUoZ2V0SWZyYW1lSWQobi5mcm9tKSksIHNuaWZmU3VjY2VzcyhuLnVybCwgbi5mcm9tKTsKICAgICAgICAgICAgICAgIH0pKSwgRS5vbigic25pZmYuYmxvYiIsIChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgIHJlbW92ZUlmcmFtZShnZXRJZnJhbWVJZChuLmZyb20pKTsKICAgICAgICAgICAgICAgICAgY29uc3QgZSA9IG4uZnJvbS5yZXBsYWNlKC89aHR0cC4rLywgIj0iKTsKICAgICAgICAgICAgICAgICAgbGV0IHQgPSAhMTsKICAgICAgICAgICAgICAgICAgaWYgKCQoIi5vLS12aXAtaXRlbS5pcy1wbGF5LWluLXBhZ2UiKS5lYWNoKChmdW5jdGlvbihuLCBpKSB7CiAgICAgICAgICAgICAgICAgICAgJChpKS5hdHRyKCJfaHJlZiIpID09PSBlICYmICh0ID0gITApOwogICAgICAgICAgICAgICAgICB9KSksICF0KSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgbiA9IGJsb2JOYW1lc1tibG9iQ291bnQrK10gfHwgIuino+aekCIgKyBibG9iQ291bnQ7CiAgICAgICAgICAgICAgICAgICAgJCgiLm8tLXZpcC1pdGVtLmlzLXBsYXktaW4tcGFnZTpub3QoLmlzLWJsb2IpIikuZXEoMCkuYmVmb3JlKCc8c3BhbiBjbGFzcz0iby0tdmlwLWl0ZW0gaXMtcGxheS1pbi1wYWdlIGlzLWJsb2IiIF9ocmVmPSInICsgZSArICciPicgKyBuICsgIjwvc3Bhbj4iKSwKICAgICAgICAgICAgICAgICAgICAkKCIuby0tdmlwLWl0ZW06bm90KC5vLS1ub3JtYWwpIikub2ZmKCJjbGljayIpLm9uKCJjbGljayIsIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgIHBsYXlWaXBJdGVtKHRoaXMpOwogICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgY29uc3QgY2hhclRvTnVtID0gZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgICByZXR1cm4gbi5jaGFyQ29kZUF0KDApIC0gOTc7CiAgICAgICAgICAgICAgICB9LCBudW1Ub0NoYXIgPSBmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgU3RyaW5nLmZyb21DaGFyQ29kZSkoOTcgKyBuKTsKICAgICAgICAgICAgICAgIH0sIE1fTnVtYmVyID0gZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgICByZXR1cm4gK24gKyAoMSA9PSBuICUgMiA/IC0xIDogMSk7CiAgICAgICAgICAgICAgICB9LCBNX0xldHRlciA9IGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bVRvQ2hhcihNX051bWJlcihjaGFyVG9OdW0obikpKTsKICAgICAgICAgICAgICAgIH0sIE1fQ2hhciA9IGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIC9bYS16XS9pLnRlc3QobikgPyBNX0xldHRlcihuKSA6IC9cZC8udGVzdChuKSA/IE1fTnVtYmVyKG4pIDogIiI7CiAgICAgICAgICAgICAgICB9LCBNX1N0cmluZyA9IGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIG4uc3BsaXQoIiIpLnJldmVyc2UoKS5tYXAoKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gTV9DaGFyKG4pOwogICAgICAgICAgICAgICAgICB9KSkuam9pbigiIik7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgbGV0IFZfVSA9ICJ3aS44MTF1c2cubnBkLG9qdS5qd2ZqaTM0Lm9wcyxqb2IuMTM4dXMubnBkwrd3aSxqd2ZqaS5oajduYS5tZCx3aS54eno4OC5ucGQsdS5jemQ2Lm5wZMK3b2p1LHdpbHAuZGQsYmJicmkubnBkwrd3aS4sandmamkubDE5Mi5ucGQsd2kudXNqenZwei5ucGQsdS5mamlwYmFubS5ucGTCt2pxaG1qbsK3anFobWpuLix4eHgudXBubGQueXp3wrd3acK3am9iLG1kLm1iZ3RtYmFpYS5tZMK3d2kuLHh4eC5qdHBiamN3Lm5wZMK3b2p1LHdpLmlsa3F2Lm5wZCx4eHgudWtld20ubnBkLHdpLmI5OC5sbWoseHh4LndpOWcubnBkwrdqd2ZqaS4semJrby42OHBlLm1kLHh4eC5qd2ZqaXZobWJvLmRkwrdqd2ZqaS4seHh4LmgxODE5Lm1kwrdqd2ZqaSx3aS5kc3hrZi5ucGTCt29qdSxqb2IuandmamkuYmsseHh4Ljl2Mm56YmtvLm1kwrdqd2ZqaS4sam9iLndpdmhqdC5ucGQseHh4Lm12ejYwNjAubnBkwrd3acK3enMuLGpvYi53aTYzOC5ucGTCt29qdSxmMTc3Lm5wZCx3aS5mZ2Riay5mbsK3ZGQsd2kuaDkwNy5ucGQsb2p1LnRwb24ubWZxwrd1LG1jZC52aWhtYnoub2p1wrdsLHdpLjE5MDExMS5vcHPCt3dpLGpvYi4xMzQyNDcub3BzwrdvanUsd2kuMjJhYi5vcHPCt29qdSx3aS45NG5sLm9wc8K3d2ksbzYxNy5ucGQiOwogICAgICAgICAgICAgICAgY29uc3QgTm9Nb2JpbGVWaXBVcmxSZWdleCA9IC9qeFwud3NsbWZcLmNvbS8sIHN0b3JlVmlwVXJscyA9IChHbG9iYWxTdG9yZS5nZXQoIlZpcFVybHMiKSB8fCAiIikudHJpbSgpLCBjdXN0b21WaXBVcmxzID0gc3RvcmVWaXBVcmxzIHx8ICLlha3npZ7op6PmnpAgaHR0cHM6Ly93ZHMuZWNzeHMuY29tLzIxNzk3NC5odG1sP3VybD1cbjcyMOWFreWFrSBodHRwczovL2p4LnhtZmx2LmNvbS8/dXJsPVxu5bCK5LqrIGh0dHBzOi8vcGxheWVyLm1hcXEuY24vP3VybD1cbum6kum6nyBodHRwOi8vanguc3VqeC50b3AvamlleGkucGhwLz91cmw9XG7kurrkurrov7cgaHR0cDovLzQ3Ljk1LjI4LjI0Mi9qeC9yZW5yZW5taS9hbmFseXNpcy5waHA/dj1cblBhcndpeCBodHRwczovL3ZpcC5wYXJ3aXguY29tOjQ0MzMvcGxheWVyLz91cmw9XG7lj6/kuZAgaHR0cHM6Ly93d3cuY2ttb3YudmlwL2FwaS5waHA/dXJsPVxu5Lmd5YWrIGh0dHBzOi8vangueW91eWl0di5jb20vP3VybD1cbuaAneS6kSBodHRwczovL2p4LmFwMnAuY24vP3VybD1cbueBuOS6vyBodHRwczovL3d3dy45MWp4cy5jb20vamlleGkvP3VybD1cbk0zVTggaHR0cHM6Ly9qeC5tM3U4LnR2L2ppZXhpLz91cmw9XG7kupE3MjAgaHR0cHM6Ly9qeC55cGFyc2UuY29tL2luZGV4LnBocD91cmw9XG7njKvop6PmnpAgaHR0cHM6Ly93d3cuY3Vhbi5sYS9tM3U4LnBocD91cmw9XG5IOOino+aekCBodHRwczovL3d3dy5oOGp4LmNvbS9qaWV4aS5waHA/dXJsPSIsIHZpcFVybHMgPSBlbnN1cmVBcnJheShjdXN0b21WaXBVcmxzKS5tYXAoKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAgICAgbGV0IGUgPSBuLnNwbGl0KC9ccysvKTsKICAgICAgICAgICAgICAgICAgaWYgKG4gPSBlLnBvcCgpLCAhL15odHRwLis9Ly50ZXN0KG4pKSByZXR1cm4ge307CiAgICAgICAgICAgICAgICAgIGxldCB0ID0gMCA8IGUubGVuZ3RoID8gZS5qb2luKCIgIikgOiBuLm1hdGNoKC9cL1wvKC4rXC4pPyhbXlwvXSspXC5cdytcLy8pWzJdLnJlcGxhY2UoL14oXHcpLywgKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbi50b1VwcGVyQ2FzZSgpOwogICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdXJsOiBuLAogICAgICAgICAgICAgICAgICAgIG5hbWU6IHQKICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0pKS5maWx0ZXIoKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIG4udXJsICYmICghaXNNb2JpbGUgfHwgIU5vTW9iaWxlVmlwVXJsUmVnZXgudGVzdChuLnVybCkpOwogICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgaWYgKFZfVSA9IFZfVS5yZXBsYWNlKC/Cty9nLCAiLyIpLnNwbGl0KCIsIiksICFzdG9yZVZpcFVybHMgfHwgc3RvcmVWaXBVcmxzID09PSAi5YWt56We6Kej5p6QIGh0dHBzOi8vd2RzLmVjc3hzLmNvbS8yMTc5NzQuaHRtbD91cmw9XG43MjDlha3lha0gaHR0cHM6Ly9qeC54bWZsdi5jb20vP3VybD1cbuWwiuS6qyBodHRwczovL3BsYXllci5tYXFxLmNuLz91cmw9XG7pupLpup8gaHR0cDovL2p4LnN1angudG9wL2ppZXhpLnBocC8/dXJsPVxu5Lq65Lq66L+3IGh0dHA6Ly80Ny45NS4yOC4yNDIvangvcmVucmVubWkvYW5hbHlzaXMucGhwP3Y9XG5QYXJ3aXggaHR0cHM6Ly92aXAucGFyd2l4LmNvbTo0NDMzL3BsYXllci8/dXJsPVxu5Y+v5LmQIGh0dHBzOi8vd3d3LmNrbW92LnZpcC9hcGkucGhwP3VybD1cbuS5neWFqyBodHRwczovL2p4LnlvdXlpdHYuY29tLz91cmw9XG7mgJ3kupEgaHR0cHM6Ly9qeC5hcDJwLmNuLz91cmw9XG7ngbjkur8gaHR0cHM6Ly93d3cuOTFqeHMuY29tL2ppZXhpLz91cmw9XG5NM1U4IGh0dHBzOi8vangubTN1OC50di9qaWV4aS8/dXJsPVxu5LqRNzIwIGh0dHBzOi8vangueXBhcnNlLmNvbS9pbmRleC5waHA/dXJsPVxu54yr6Kej5p6QIGh0dHBzOi8vd3d3LmN1YW4ubGEvbTN1OC5waHA/dXJsPVxuSDjop6PmnpAgaHR0cHM6Ly93d3cuaDhqeC5jb20vamlleGkucGhwP3VybD0iLnRyaW0oKSkge2NvbnN0IG4gPSBWX04uc3BsaXQoL1vvvIzjgILvvJtdLykubWFwKChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4udHJpbSgpOwogICAgICAgICAgICAgICAgICB9KSkuZmlsdGVyKChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgICAgICAgICAgIH0pKSwgZSA9IG5bcGFyc2VJbnQoRGF0ZS5ub3coKSAvIDFlMyAvIDYwICUgbi5sZW5ndGgpXS5zcGxpdCgiIik7CiAgICAgICAgICAgICAgICAgIFZfVS5zbGljZSgwLCA3KS5tYXAoKGZ1bmN0aW9uKG4sIHQpIHsKICAgICAgICAgICAgICAgICAgICB2aXBVcmxzLnB1c2goewogICAgICAgICAgICAgICAgICAgICAgbmFtZTogZVt0XSwKICAgICAgICAgICAgICAgICAgICAgIHVybDogTV9WaXBVcmwobiksCiAgICAgICAgICAgICAgICAgICAgICBpc1JhbmRvbTogITAKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCFpc0NoZWNrSWZyYW1lU25pZmYpIHsKICAgICAgICAgICAgICAgICAgJCgiaHRtbCIpLmFwcGVuZCgnPG9vLWlmcmFtZXMgc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbjsgcG9zaXRpb246IGZpeGVkOyBib3R0b206IDA7IHBvaW50ZXItZXZlbnRzOiBub25lOyI+PC9vby1pZnJhbWVzPicpOwogICAgICAgICAgICAgICAgICBjb25zdCBuID0gYWRkSWZyYW1lKFNuaWZmQ2hlY2tVcmwpOwogICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZW1vdmVJZnJhbWUobik7CiAgICAgICAgICAgICAgICAgIH0pLCA1ZTMpLCBpc0NoZWNrSWZyYW1lU25pZmYgPSAhMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvbnN0IHZpcHMgPSBBcnJheS5pc0FycmF5KHBsYXlBZGRvbi52aXApID8gcGxheUFkZG9uLnZpcCA6IFsgcGxheUFkZG9uLnZpcCBdOwogICAgICAgICAgICAgICAgdmlwcy5mb3JFYWNoKChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgIGluc2VydFZpcFNvdXJjZSgobiA9IG4uc3BsaXQoL1xzKlx8XHMqLykpWzBdLCBuWzFdKTsKICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcGxheUFkZG9uLnRpdGxlICYmICFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuby0tanVtcCIpICYmIChwbGF5QWRkb24udmlwICYmICQkKChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkKHBsYXlBZGRvbi50aXRsZSkuZXEoMCkudGV4dCgpOwogICAgICAgICAgICAgIH0pLCAoZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgcGxheUFkZG9uLmZpeFRpdGxlICYmIChuID0gcGxheUFkZG9uLmZpeFRpdGxlKG4pKSwgaW5zZXJ0U2VhcmNoQWRkb24obiwgIi5vLS12aXAtbGlzdCIsICJhZnRlciIpOwogICAgICAgICAgICAgIH0pKSwgcGxheUFkZG9uLmp1bXAgJiYgZ29KdW1wKHBsYXlBZGRvbi5qdW1wLCBwbGF5QWRkb24udGl0bGUpKSwgZXhlY0FkZG9uSnMocGxheUFkZG9uKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBzZWFyY2hBZGRvbiA9IGFkZG9uLnNlYXJjaDsKICAgICAgICAgICAgaWYgKHNlYXJjaEFkZG9uICYmIElzKHNlYXJjaEFkZG9uLm1hdGNoKSkgewogICAgICAgICAgICAgIGlmIChzZWFyY2hBZGRvbi5qdW1wICYmIGdvSnVtcChzZWFyY2hBZGRvbi5qdW1wLCBzZWFyY2hBZGRvbi5rZXl3b3JkKSwgc2VhcmNoQWRkb24uanVtcFRvICYmICQkKHNlYXJjaEFkZG9uLmp1bXBUb1swXSwgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgJChzZWFyY2hBZGRvbi5qdW1wVG9bMF0pLmVhY2goKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICBsZXQgbiA9ICQodGhpcykuYXR0cigiaHJlZiIpOwogICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoImhyZWYiLCBuLnJlcGxhY2Uoc2VhcmNoQWRkb24uanVtcFRvWzFdLCBzZWFyY2hBZGRvbi5qdW1wVG9bMl0pKTsKICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICB9KSksIHNlYXJjaEFkZG9uLnJlc3VsdCkgewogICAgICAgICAgICAgICAgY29uc3QgbiA9ICJzdHJpbmciID09IHR5cGVvZiBzZWFyY2hBZGRvbi5yZXN1bHQgPyB7CiAgICAgICAgICAgICAgICAgIHRpdGxlOiBzZWFyY2hBZGRvbi5yZXN1bHQsCiAgICAgICAgICAgICAgICAgIHVybDogc2VhcmNoQWRkb24ucmVzdWx0CiAgICAgICAgICAgICAgICB9IDogc2VhcmNoQWRkb24ucmVzdWx0OwogICAgICAgICAgICAgICAgaWYgKDEgPT09ICQobi50aXRsZSkubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGUgPSAkKG4udGl0bGUpLnRleHQoKTsKICAgICAgICAgICAgICAgICAgaWYgKCEv56ysLnsxLDN9W+Wto+mbhuivnemDqF0uKiQvLnRlc3QoZSkpIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBlID0gJChuLnVybCkuZXEoMCkuYXR0cigiaHJlZiIpOwogICAgICAgICAgICAgICAgICAgIGUgJiYgKGxvY2F0aW9uLmhyZWYgPSBlKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBleGVjQWRkb25KcyhzZWFyY2hBZGRvbik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZXhlY0FkZG9uSnMoYWRkb24pOwogICAgICAgICAgfSkpLCBpc0ZpcnN0UnVuQWRkb24gPSAhMTsKICAgICAgICB9IGVsc2UgaXNGaXJzdFJ1bkFkZG9uICYmICgkKCJodG1sIikucmVtb3ZlQ2xhc3MoIm8tLW1peWluZyBvLS1tIG8tLXBjIG8tLWRlYnVnIiksCiAgICAgICAgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAkaHRtbC5yZW1vdmVBdHRyaWJ1dGUoUExVR0lOX0FUVFIpOwogICAgICAgIH0pLCAxZTMpKTsKICAgICAgfQogICAgICBmdW5jdGlvbiB1cmxEZXRlY3RvcigpIHsKICAgICAgICBzZXRJbnRlcnZhbCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAhZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmIChIcmVmICE9PSB3aW5kb3cubG9jYXRpb24uaHJlZikgewogICAgICAgICAgICAgIGNvbnN0IG4gPSBIcmVmOwogICAgICAgICAgICAgIEhyZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZiwgRS5lbWl0KCJ1cmwuY2hhbmdlIiwgewogICAgICAgICAgICAgICAgbmV3VXJsOiBIcmVmLAogICAgICAgICAgICAgICAgb2xkVXJsOiBuCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0oKTsKICAgICAgICB9KSwgMjUwKTsKICAgICAgfQogICAgICBsZXQgaXNGaXJzdFJ1bkFkZG9uID0gITAsIGlzQ2hlY2tJZnJhbWVTbmlmZiA9ICExOwogICAgICB0cnkgewogICAgICAgIGFkZG9uR28oKTsKICAgICAgfSBjYXRjaCAobikge30KICAgICAgdXJsRGV0ZWN0b3IoKTsKICAgIH0KICB9Cn0oKTsK
Add Comment
Please, Sign In to add comment