xiaomianao666

插件名:global_鸿蒙

Oct 26th, 2021
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:网页插件¥js_url¥global_鸿蒙@base64://IWFzeW5jIGZ1bmN0aW9uKCkgewogIGxldCBfTWF0aGZsb29yID0gTWF0aC5mbG9vciwgX01hdGhtYXggPSBNYXRoLm1heDsKICBmdW5jdGlvbiBJcyhuKSB7CiAgICBsZXQgZSA9IDEgPCBhcmd1bWVudHMubGVuZ3RoICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzFdID8gYXJndW1lbnRzWzFdIDogSHJlZjsKICAgIHJldHVybiBuIGluc3RhbmNlb2YgRnVuY3Rpb24gPyBuKGUpIDogKGUgPSAobi5zb3VyY2UgfHwgbikuaW5jbHVkZXMoIj1odHRwIikgPyBlIDogZS5yZXBsYWNlKC89aHR0cFteJl0rLywgIiIpLAogICAgInN0cmluZyIgPT0gdHlwZW9mIG4gPyBlLmluY2x1ZGVzKG4pIDogbi50ZXN0KGUpKTsKICB9CiAgZnVuY3Rpb24gSXNOb3QobiwgZSkgewogICAgcmV0dXJuICFJcyhuLCBlKTsKICB9CiAgZnVuY3Rpb24gQXJndW1lbnRzKG4pIHsKICAgIGNvbnN0IGUgPSBuLmxlbmd0aCwgdCA9IEFycmF5KGUpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlOyBpKyspIHRbaV0gPSBuW2ldOwogICAgcmV0dXJuIHQ7CiAgfQogIGZ1bmN0aW9uIGdldEdsb2JhbChuKSB7CiAgICByZXR1cm4gKGhhc1Vuc2FmZVdpbmRvdyA/IHVuc2FmZVdpbmRvdyA6IHdpbmRvdylbbl07CiAgfQogIGZ1bmN0aW9uIHNldEdsb2JhbChuLCBlKSB7CiAgICB3aW5kb3dbbl0gPSBlLCBoYXNVbnNhZmVXaW5kb3cgJiYgKHVuc2FmZVdpbmRvd1tuXSA9IGUpOwogIH0KICBmdW5jdGlvbiBwYXJzZVN0b3JlRGF0YShuKSB7CiAgICBsZXQgZSA9IDEgPCBhcmd1bWVudHMubGVuZ3RoICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzFdID8gYXJndW1lbnRzWzFdIDogbnVsbDsKICAgIGlmICgic3RyaW5nIiA9PSB0eXBlb2YgbikgdHJ5IHsKICAgICAgbiA9IEpTT04ucGFyc2Uobik7CiAgICB9IGNhdGNoIChuKSB7fQogICAgcmV0dXJuIG51bGwgPT09IG4gPyBlIDogbjsKICB9CiAgZnVuY3Rpb24gZ2V0Q2RuVXJsKG4pIHsKICAgIHJldHVybiAiaHR0cHM6Ly9jZG4uYm9vdGNkbi5uZXQvYWpheC9saWJzIiArIG47CiAgfQogIGFzeW5jIGZ1bmN0aW9uIGZldGNoQ2RuVXJsKG4sIGUpIHsKICAgIGxldCB0OwogICAgY29uc3QgaSA9IC9eXC9cdy8udGVzdChuKTsKICAgIGlmIChuID0gaSA/IGdldENkblVybChuKSA6IG4sICFlICYmIGkpIHsKICAgICAgY29uc3QgZSA9IG4ubWF0Y2goLy4qXC8oW15cL10rKVwvKFteXC9dKykkLyk7CiAgICAgIHQgPSBlWzJdOwogICAgfSBlbHNlIHQgPSBlICYmIGUubmFtZSB8fCBuOwogICAgY29uc3QgbyA9IEdsb2JhbFN0b3JlLmdldCh0KTsKICAgIGxldCBhOwogICAgcmV0dXJuIGEgPSBvICYmICIyMC42LjEzIiA9PT0gby52ZXJzaW9uID8gby5kYXRhIDogYXdhaXQgd2luZG93LmZldGNoKG4pLnRoZW4oKGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIG4udGV4dCgpOwogICAgfSkpLnRoZW4oKGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIEdsb2JhbFN0b3JlLnNldCh0LCB7CiAgICAgICAgZGF0YTogbiwKICAgICAgICB2ZXJzaW9uOiBWRVJTSU9OCiAgICAgIH0pLCBuOwogICAgfSkpLCBhOwogIH0KICBhc3luYyBmdW5jdGlvbiBhZGRKcyh1cmwsIG9wdHMpIHsKICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaENkblVybCh1cmwsIG9wdHMpOwogICAgcmV0dXJuIGV2YWwoZGF0YSk7CiAgfQogIGFzeW5jIGZ1bmN0aW9uIGFkZENzc1VybChuKSB7CiAgICBhZGRDc3MoYXdhaXQgZmV0Y2hDZG5VcmwobikpOwogIH0KICBmdW5jdGlvbiBhZGRDc3MobikgewogICAgbGV0IGU7CiAgICByZXR1cm4gL14oaHR0cHxcLykvLnRlc3QobikgPyBhZGRDc3NVcmwobikgOiAobiA9IG4ucmVwbGFjZSgvXG4rXHMqL2csICIgIiksIGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpLAogICAgZS5zdHlsZVNoZWV0ID8gZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBuIDogZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuKSksCiAgICBlLnR5cGUgPSAidGV4dC9jc3MiLCB2b2lkIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0uYXBwZW5kQ2hpbGQoZSkpOwogIH0KICBmdW5jdGlvbiBwcmVmaXhDc3MobiwgZSkgewogICAgbGV0IHQsIGksIG8sIGEsIHIgPSBlLmxlbmd0aDsKICAgIGUgKz0gIiAiLCBuID0gKG4gPSAobiA9IG4ucmVwbGFjZSgvXC9cKig/Oig/IVwqXC8pW1xzXFNdKSpcKlwvfFtcclxuXHRdKy9nLCAiIikpLnJlcGxhY2UoL30oXHMqKUAvZywgIn1AIikpLnJlcGxhY2UoL30oXHMqKX0vZywgIn19Iik7CiAgICBmb3IgKGxldCBzID0gMDsgcyA8IG4ubGVuZ3RoIC0gMjsgcysrKSB0ID0gbltzXSwgaSA9IG5bcyArIDFdLCAiQCIgPT09IHQgJiYgKG8gPSAhMCksCiAgICBvIHx8ICJ7IiAhPT0gdCB8fCAoYSA9ICEwKSwgYSAmJiAifSIgPT09IHQgJiYgKGEgPSAhMSksICFhICYmICJAIiAhPT0gaSAmJiAifSIgIT09IGkgJiYgKCJ9IiA9PT0gdCB8fCAiLCIgPT09IHQgfHwgKCJ7IiA9PT0gdCB8fCAiOyIgPT09IHQpICYmIG8pICYmIChuID0gbi5zbGljZSgwLCBzICsgMSkgKyBlICsgbi5zbGljZShzICsgMSksCiAgICBzICs9IHIsIG8gPSAhMSk7CiAgICByZXR1cm4gMCAhPT0gbi5pbmRleE9mKGUpICYmIDAgIT09IG4uaW5kZXhPZigiQCIpICYmIChuID0gZSArIG4pLCBuOwogIH0KICBmdW5jdGlvbiBnZXQkKCkgewogICAgZnVuY3Rpb24gbihuLCBlKSB7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIG4oZSk7CiAgICAgIH0gY2F0Y2ggKG4pIHsKICAgICAgICByZXR1cm4gZTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gZShuLCBlKSB7CiAgICAgIHJldHVybiBuICYmIChsKGUpIHx8IGMoZSkpID8gcm4udGVzdChuKSA/IGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShuLnNsaWNlKDEpKSA6IHNuLnRlc3QobikgPyBlLmdldEVsZW1lbnRzQnlUYWdOYW1lKG4pIDogZS5xdWVyeVNlbGVjdG9yQWxsKG4pIDogW107CiAgICB9CiAgICBmdW5jdGlvbiB0KG4pIHsKICAgICAgcmV0dXJuIG4ucmVwbGFjZShwbiwgKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICByZXR1cm4gZS50b1VwcGVyQ2FzZSgpOwogICAgICB9KSk7CiAgICB9CiAgICBmdW5jdGlvbiBpKG4sIGUsIHQpIHsKICAgICAgaWYgKHQpIHsKICAgICAgICBmb3IgKGxldCB0ID0gbi5sZW5ndGg7IHQtLTsgKSBpZiAoITEgPT09IGUuY2FsbChuW3RdLCB0LCBuW3RdKSkgcmV0dXJuIG47CiAgICAgIH0gZWxzZSBmb3IgKGxldCB0ID0gMCwgaSA9IG4ubGVuZ3RoOyB0IDwgaTsgdCsrKSBpZiAoITEgPT09IGUuY2FsbChuW3RdLCB0LCBuW3RdKSkgcmV0dXJuIG47CiAgICAgIHJldHVybiBuOwogICAgfQogICAgZnVuY3Rpb24gbyhuKSB7CiAgICAgIGxldCBlID0gW107CiAgICAgIGZvciAobGV0IG4gPSAxOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKSBlW24gLSAxXSA9IGFyZ3VtZW50c1tuXTsKICAgICAgbGV0IHQgPSBhcmd1bWVudHMubGVuZ3RoOwogICAgICBpZiAoIXQpIHJldHVybiB7fTsKICAgICAgaWYgKDEgPT09IHQpIHJldHVybiBvKGRuLCBuKTsKICAgICAgZm9yIChsZXQgZSA9IDE7IGUgPCB0OyBlKyspIGZvciAobGV0IHQgaW4gYXJndW1lbnRzW2VdKSBuW3RdID0gYXJndW1lbnRzW2VdW3RdOwogICAgICByZXR1cm4gbjsKICAgIH0KICAgIGZ1bmN0aW9uIGEobiwgZSkgewogICAgICBsZXQgdCA9IG4gJiYgKG4ubWF0Y2hlcyB8fCBuLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fCBuLm1zTWF0Y2hlc1NlbGVjdG9yKTsKICAgICAgcmV0dXJuICEhdCAmJiAhIWUgJiYgdC5jYWxsKG4sIGUpOwogICAgfQogICAgZnVuY3Rpb24gcihuKSB7CiAgICAgIHJldHVybiBuIGluc3RhbmNlb2YgbG47CiAgICB9CiAgICBmdW5jdGlvbiBzKG4pIHsKICAgICAgcmV0dXJuICEhbiAmJiBuID09PSBuLndpbmRvdzsKICAgIH0KICAgIGZ1bmN0aW9uIGwobikgewogICAgICByZXR1cm4gISFuICYmIDkgPT09IG4ubm9kZVR5cGU7CiAgICB9CiAgICBmdW5jdGlvbiBjKG4pIHsKICAgICAgcmV0dXJuICEhbiAmJiAxID09PSBuLm5vZGVUeXBlOwogICAgfQogICAgZnVuY3Rpb24gZChuKSB7CiAgICAgIHJldHVybiAiZnVuY3Rpb24iID09IHR5cGVvZiBuOwogICAgfQogICAgZnVuY3Rpb24gcChuKSB7CiAgICAgIHJldHVybiAic3RyaW5nIiA9PSB0eXBlb2YgbjsKICAgIH0KICAgIGZ1bmN0aW9uIGYobikgewogICAgICByZXR1cm4gdm9pZCAwID09PSBuOwogICAgfQogICAgZnVuY3Rpb24gdShuKSB7CiAgICAgIHJldHVybiBudWxsID09PSBuOwogICAgfQogICAgZnVuY3Rpb24gbShuKSB7CiAgICAgIHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdChuKSkgJiYgaXNGaW5pdGUobik7CiAgICB9CiAgICBmdW5jdGlvbiBoKG4pIHsKICAgICAgcmV0dXJuIHAobikgPyBmdW5jdGlvbihlLCB0KSB7CiAgICAgICAgcmV0dXJuIGEodCwgbik7CiAgICAgIH0gOiBkKG4pID8gbiA6IHIobikgPyBmdW5jdGlvbihlLCB0KSB7CiAgICAgICAgcmV0dXJuIG4uaXModCk7CiAgICAgIH0gOiBuID8gZnVuY3Rpb24oZSwgdCkgewogICAgICAgIHJldHVybiB0ID09PSBuOwogICAgICB9IDogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICExOwogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24gZyhuLCBlKSB7CiAgICAgIHJldHVybiBlID8gbi5maWx0ZXIoZSkgOiBuOwogICAgfQogICAgZnVuY3Rpb24gYihuKSB7CiAgICAgIHJldHVybiBwKG4pICYmIG4ubWF0Y2goZm4pIHx8IFtdOwogICAgfQogICAgZnVuY3Rpb24gdihuLCBlLCB0LCBpKSB7CiAgICAgIGxldCBvID0gW10sIGEgPSBkKGUpLCByID0gaSAmJiBoKGkpOwogICAgICBmb3IgKGxldCBzID0gMCwgbCA9IG4ubGVuZ3RoOyBzIDwgbDsgcysrKSBpZiAoYSkgewogICAgICAgIGxldCB0ID0gZShuW3NdKTsKICAgICAgICB0Lmxlbmd0aCAmJiBlbi5hcHBseShvLCB0KTsKICAgICAgfSBlbHNlIGZvciAobGV0IGEgPSBuW3NdW2VdOyAhKG51bGwgPT0gYSB8fCBpICYmIHIoLTEsIGEpKTsgKSBvLnB1c2goYSksIGEgPSB0ID8gYVtlXSA6IG51bGw7CiAgICAgIHJldHVybiBvOwogICAgfQogICAgZnVuY3Rpb24geShuKSB7CiAgICAgIHJldHVybiAxIDwgbi5sZW5ndGggPyBaLmNhbGwobiwgKGZ1bmN0aW9uKG4sIGUsIHQpIHsKICAgICAgICByZXR1cm4gWS5jYWxsKHQsIG4pID09PSBlOwogICAgICB9KSkgOiBuOwogICAgfQogICAgZnVuY3Rpb24geChuLCBlLCB0KSB7CiAgICAgIGlmIChjKG4pKSB7CiAgICAgICAgbGV0IGkgPSBMLmdldENvbXB1dGVkU3R5bGUobiwgbnVsbCk7CiAgICAgICAgcmV0dXJuIHQgPyBpLmdldFByb3BlcnR5VmFsdWUoZSkgfHwgdm9pZCAwIDogaVtlXTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gdyhuLCBlKSB7CiAgICAgIHJldHVybiBwYXJzZUludCh4KG4sIGUpLCAxMCkgfHwgMDsKICAgIH0KICAgIGZ1bmN0aW9uIF8obikgewogICAgICByZXR1cm4gdW4udGVzdChuKTsKICAgIH0KICAgIGZ1bmN0aW9uIGsobiwgZSkgewogICAgICBpZiAodm9pZCAwID09PSBlICYmIChlID0gXyhuKSksIGUpIHJldHVybiBuOwogICAgICBpZiAoIW1uW25dKSB7CiAgICAgICAgbGV0IGUgPSB0KG4pLCBvID0gIiIgKyBlWzBdLnRvVXBwZXJDYXNlKCkgKyBlLnNsaWNlKDEpOwogICAgICAgIGkoKGUgKyAiICIgKyBnbi5qb2luKG8gKyAiICIpICsgbykuc3BsaXQoIiAiKSwgKGZ1bmN0aW9uKGUsIHQpIHsKICAgICAgICAgIGlmICh0IGluIGhuKSByZXR1cm4gbW5bbl0gPSB0LCAhMTsKICAgICAgICB9KSk7CiAgICAgIH0KICAgICAgcmV0dXJuIG1uW25dOwogICAgfQogICAgZnVuY3Rpb24gUyhuLCBlLCB0KSB7CiAgICAgIHJldHVybiB2b2lkIDAgPT09IHQgJiYgKHQgPSBfKG4pKSwgdCB8fCBibltuXSB8fCAhbShlKSA/IGUgOiBlICsgInB4IjsKICAgIH0KICAgIGZ1bmN0aW9uIGooZSwgaSkgewogICAgICBsZXQgbyA9IGUuZGF0YXNldFtpXSB8fCBlLmRhdGFzZXRbdChpKV07CiAgICAgIHJldHVybiB2bi50ZXN0KG8pID8gbyA6IG4oSlNPTi5wYXJzZSwgbyk7CiAgICB9CiAgICBmdW5jdGlvbiBJKGUsIGksIG8pIHsKICAgICAgbyA9IG4oSlNPTi5zdHJpbmdpZnksIG8pLCBlLmRhdGFzZXRbdChpKV0gPSBvOwogICAgfQogICAgZnVuY3Rpb24gJChuLCBlKSB7CiAgICAgIGxldCB0ID0gbi5kb2N1bWVudEVsZW1lbnQ7CiAgICAgIHJldHVybiBfTWF0aG1heChuLmJvZHlbInNjcm9sbCIgKyBlXSwgdFsic2Nyb2xsIiArIGVdLCBuLmJvZHlbIm9mZnNldCIgKyBlXSwgdFsib2Zmc2V0IiArIGVdLCB0WyJjbGllbnQiICsgZV0pOwogICAgfQogICAgZnVuY3Rpb24gQyhuLCBlKSB7CiAgICAgIHJldHVybiB3KG4sICJib3JkZXIiICsgKGUgPyAiTGVmdCIgOiAiVG9wIikgKyAiV2lkdGgiKSArIHcobiwgInBhZGRpbmciICsgKGUgPyAiTGVmdCIgOiAiVG9wIikpICsgdyhuLCAicGFkZGluZyIgKyAoZSA/ICJSaWdodCIgOiAiQm90dG9tIikpICsgdyhuLCAiYm9yZGVyIiArIChlID8gIlJpZ2h0IiA6ICJCb3R0b20iKSArICJXaWR0aCIpOwogICAgfQogICAgZnVuY3Rpb24gQShuKSB7CiAgICAgIHJldHVybiAibm9uZSIgPT09IHgobiwgImRpc3BsYXkiKTsKICAgIH0KICAgIGZ1bmN0aW9uIFUobiwgZSkgewogICAgICByZXR1cm4gIWUgfHwgIW9uLmNhbGwoZSwgKGZ1bmN0aW9uKGUpIHsKICAgICAgICByZXR1cm4gMCA+IG4uaW5kZXhPZihlKTsKICAgICAgfSkpOwogICAgfQogICAgZnVuY3Rpb24gVChuKSB7CiAgICAgIHJldHVybiBrbltuXSB8fCBfbltuXSB8fCBuOwogICAgfQogICAgZnVuY3Rpb24gcShuKSB7CiAgICAgIHJldHVybiBuW3huXSA9IG5beG5dIHx8IHt9OwogICAgfQogICAgZnVuY3Rpb24geihuLCBlLCB0LCBpLCBvKSB7CiAgICAgIGxldCBhID0gcShuKTsKICAgICAgYVtlXSA9IGFbZV0gfHwgW10sIGFbZV0ucHVzaChbIHQsIGksIG8gXSksIG4uYWRkRXZlbnRMaXN0ZW5lcihlLCBvKTsKICAgIH0KICAgIGZ1bmN0aW9uIE0obikgewogICAgICBsZXQgZSA9IG4uc3BsaXQod24pOwogICAgICByZXR1cm4gWyBlWzBdLCBlLnNsaWNlKDEpLnNvcnQoKSBdOwogICAgfQogICAgZnVuY3Rpb24gUChuLCBlLCB0LCBpLCBvKSB7CiAgICAgIGxldCBhID0gcShuKTsKICAgICAgaWYgKGUpIGFbZV0gJiYgKGFbZV0gPSBhW2VdLmZpbHRlcigoZnVuY3Rpb24oYSkgewogICAgICAgIGxldCByID0gYVswXSwgcyA9IGFbMV0sIGwgPSBhWzJdOwogICAgICAgIHJldHVybiAhIShvICYmIGwuZ3VpZCAhPT0gby5ndWlkIHx8ICFVKHIsIHQpIHx8IGkgJiYgaSAhPT0gcykgfHwgdm9pZCBuLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSwgbCk7CiAgICAgIH0pKSk7IGVsc2UgZm9yIChlIGluIGEpIFAobiwgZSwgdCwgaSwgbyk7CiAgICB9CiAgICBmdW5jdGlvbiBFKG4pIHsKICAgICAgcmV0dXJuIG4ubXVsdGlwbGUgJiYgbi5vcHRpb25zID8gdihaLmNhbGwobi5vcHRpb25zLCAoZnVuY3Rpb24obikgewogICAgICAgIHJldHVybiBuLnNlbGVjdGVkICYmICFuLmRpc2FibGVkICYmICFuLnBhcmVudE5vZGUuZGlzYWJsZWQ7CiAgICAgIH0pKSwgInZhbHVlIikgOiBuLnZhbHVlIHx8ICIiOwogICAgfQogICAgZnVuY3Rpb24gVihuKSB7CiAgICAgIGlmICghcChuKSkgcmV0dXJuIFtdOwogICAgICBpZiAoQ24udGVzdChuKSkgcmV0dXJuIFsgSChSZWdFeHAuJDEpIF07CiAgICAgIGxldCBlID0gJG4udGVzdChuKSAmJiBSZWdFeHAuJDEsIHQgPSBBbltlXSB8fCBBblsiKiJdOwogICAgICByZXR1cm4gdC5pbm5lckhUTUwgPSBuLCBkbih0LmNoaWxkTm9kZXMpLmRldGFjaCgpLmdldCgpOwogICAgfQogICAgZnVuY3Rpb24gTihuLCBlLCB0LCBvLCBhKSB7CiAgICAgIG8gPyBuLmluc2VydEJlZm9yZShlLCB0ID8gbi5maXJzdENoaWxkIDogbnVsbCkgOiBuLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsIHQgPyBuIDogbi5uZXh0U2libGluZyksCiAgICAgIGEgJiYgZnVuY3Rpb24obiwgZSkgewogICAgICAgIGxldCB0ID0gZG4obik7CiAgICAgICAgdC5maWx0ZXIoInNjcmlwdCIpLmFkZCh0LmZpbmQoInNjcmlwdCIpKS5lYWNoKChmdW5jdGlvbihuLCB0KSB7CiAgICAgICAgICBpZiAoVG4udGVzdCh0LnR5cGUpICYmIEcuY29udGFpbnModCkpIHsKICAgICAgICAgICAgbGV0IG4gPSBIKCJzY3JpcHQiKTsKICAgICAgICAgICAgbi50ZXh0ID0gdC50ZXh0Q29udGVudC5yZXBsYWNlKFVuLCAiIiksIGkocW4sIChmdW5jdGlvbihlLCBpKSB7CiAgICAgICAgICAgICAgdFtpXSAmJiAobltpXSA9IHRbaV0pOwogICAgICAgICAgICB9KSksIGUuaGVhZC5pbnNlcnRCZWZvcmUobiwgbnVsbCksIGUuaGVhZC5yZW1vdmVDaGlsZChuKTsKICAgICAgICAgIH0KICAgICAgICB9KSk7CiAgICAgIH0oZSwgbi5vd25lckRvY3VtZW50KTsKICAgIH0KICAgIGZ1bmN0aW9uIFIobiwgZSwgdCwgbywgYSwgciwgcywgbCkgewogICAgICByZXR1cm4gaShuLCAoZnVuY3Rpb24obiwgcikgewogICAgICAgIGkoZG4ociksIChmdW5jdGlvbihuLCByKSB7CiAgICAgICAgICBpKGRuKGUpLCAoZnVuY3Rpb24oZSwgaSkgewogICAgICAgICAgICBsZXQgcyA9IHQgPyBpIDogciwgbCA9IHQgPyBuIDogZTsKICAgICAgICAgICAgTih0ID8gciA6IGksIGwgPyBzLmNsb25lTm9kZSghMCkgOiBzLCBvLCBhLCAhbCk7CiAgICAgICAgICB9KSwgbCk7CiAgICAgICAgfSksIHMpOwogICAgICB9KSwgciksIGU7CiAgICB9CiAgICBsZXQgRCA9IHsKICAgICAgY2xhc3M6ICJjbGFzc05hbWUiLAogICAgICBjb250ZW50ZWRpdGFibGU6ICJjb250ZW50RWRpdGFibGUiLAogICAgICBmb3I6ICJodG1sRm9yIiwKICAgICAgcmVhZG9ubHk6ICJyZWFkT25seSIsCiAgICAgIG1heGxlbmd0aDogIm1heExlbmd0aCIsCiAgICAgIHRhYmluZGV4OiAidGFiSW5kZXgiLAogICAgICBjb2xzcGFuOiAiY29sU3BhbiIsCiAgICAgIHJvd3NwYW46ICJyb3dTcGFuIiwKICAgICAgdXNlbWFwOiAidXNlTWFwIgogICAgfSwgRiA9IGRvY3VtZW50LCBMID0gd2luZG93LCBHID0gRi5kb2N1bWVudEVsZW1lbnQsIEggPSBGLmNyZWF0ZUVsZW1lbnQuYmluZChGKSwgTyA9IEgoImRpdiIpLCBCID0gSCgidGFibGUiKSwgVyA9IEgoInRib2R5IiksIFggPSBIKCJ0ciIpLCBKID0gQXJyYXkuaXNBcnJheSwgSyA9IEFycmF5LnByb3RvdHlwZSwgUSA9IEsuY29uY2F0LCBaID0gSy5maWx0ZXIsIFkgPSBLLmluZGV4T2YsIG5uID0gSy5tYXAsIGVuID0gSy5wdXNoLCB0biA9IEsuc2xpY2UsIG9uID0gSy5zb21lLCBhbiA9IEsuc3BsaWNlLCBybiA9IC9eXC5bXHctXSokLywgc24gPSAvXlx3KyQvLCBsbiA9IGZ1bmN0aW9uKCkgewogICAgICBmdW5jdGlvbiBuKG4sIHQpIHsKICAgICAgICBpZiAoIW4pIHJldHVybjsKICAgICAgICBpZiAocihuKSkgcmV0dXJuIG47CiAgICAgICAgbGV0IGkgPSBuOwogICAgICAgIGlmIChwKG4pKSB7CiAgICAgICAgICBsZXQgbyA9IChyKHQpID8gdFswXSA6IHQpIHx8IEY7CiAgICAgICAgICBpZiAoaSA9IC9eI1tcdy1dKiQvLnRlc3QobikgPyBvLmdldEVsZW1lbnRCeUlkKG4uc2xpY2UoMSkpIDogLzwuKz4vLnRlc3QobikgPyBWKG4pIDogZShuLCBvKSwKICAgICAgICAgICFpKSByZXR1cm47CiAgICAgICAgfSBlbHNlIGlmIChkKG4pKSByZXR1cm4gdGhpcy5yZWFkeShuKTsKICAgICAgICAoaS5ub2RlVHlwZSB8fCBpID09PSBMKSAmJiAoaSA9IFsgaSBdKSwgdGhpcy5sZW5ndGggPSBpLmxlbmd0aDsKICAgICAgICBmb3IgKGxldCBuID0gMCwgZSA9IHRoaXMubGVuZ3RoOyBuIDwgZTsgbisrKSB0aGlzW25dID0gaVtuXTsKICAgICAgfQogICAgICByZXR1cm4gbi5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKGUsIHQpIHsKICAgICAgICByZXR1cm4gbmV3IG4oZSwgdCk7CiAgICAgIH0sIG47CiAgICB9KCksIGNuID0gbG4ucHJvdG90eXBlLCBkbiA9IGNuLmluaXQ7CiAgICBkbi5mbiA9IGRuLnByb3RvdHlwZSA9IGNuLCBjbi5sZW5ndGggPSAwLCBjbi5zcGxpY2UgPSBhbiwgImZ1bmN0aW9uIiA9PSB0eXBlb2YgU3ltYm9sICYmIChjbltTeW1ib2wuaXRlcmF0b3JdID0gS1tTeW1ib2wuaXRlcmF0b3JdKSwKICAgIGNuLm1hcCA9IGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIGRuKFEuYXBwbHkoW10sIG5uLmNhbGwodGhpcywgKGZ1bmN0aW9uKGUsIHQpIHsKICAgICAgICByZXR1cm4gbi5jYWxsKGUsIHQsIGUpOwogICAgICB9KSkpKTsKICAgIH0sIGNuLnNsaWNlID0gZnVuY3Rpb24obiwgZSkgewogICAgICByZXR1cm4gZG4odG4uY2FsbCh0aGlzLCBuLCBlKSk7CiAgICB9OwogICAgbGV0IHBuID0gLy0oW2Etel0pL2c7CiAgICBkbi5lYWNoID0gaSwgY24uZWFjaCA9IGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIGkodGhpcywgbik7CiAgICB9LCBjbi5yZW1vdmVQcm9wID0gZnVuY3Rpb24obikgewogICAgICByZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbihlLCB0KSB7CiAgICAgICAgZGVsZXRlIHRbRFtuXSB8fCBuXTsKICAgICAgfSkpOwogICAgfSwgZG4uZXh0ZW5kID0gbywgY24uZXh0ZW5kID0gZnVuY3Rpb24obikgewogICAgICByZXR1cm4gbyhjbiwgbik7CiAgICB9LCBkbi5ndWlkID0gMSwgZG4uaXNXaW5kb3cgPSBzLCBkbi5pc0Z1bmN0aW9uID0gZCwgZG4uaXNOdW1lcmljID0gbSwgZG4uaXNBcnJheSA9IEosCiAgICBjbi5wcm9wID0gZnVuY3Rpb24obiwgZSkgewogICAgICBpZiAobikgewogICAgICAgIGlmIChwKG4pKSByZXR1cm4gbiA9IERbbl0gfHwgbiwgMiA+IGFyZ3VtZW50cy5sZW5ndGggPyB0aGlzWzBdICYmIHRoaXNbMF1bbl0gOiB0aGlzLmVhY2goKGZ1bmN0aW9uKHQsIGkpIHsKICAgICAgICAgIGlbbl0gPSBlOwogICAgICAgIH0pKTsKICAgICAgICBmb3IgKGxldCBlIGluIG4pIHRoaXMucHJvcChlLCBuW2VdKTsKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfQogICAgfSwgY24uZ2V0ID0gZnVuY3Rpb24obikgewogICAgICByZXR1cm4gZihuKSA/IHRuLmNhbGwodGhpcykgOiB0aGlzWzAgPiAobiA9ICtuKSA/IG4gKyB0aGlzLmxlbmd0aCA6IG5dOwogICAgfSwgY24uZXEgPSBmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBkbih0aGlzLmdldChuKSk7CiAgICB9LCBjbi5maXJzdCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy5lcSgwKTsKICAgIH0sIGNuLmxhc3QgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuZXEoLTEpOwogICAgfSwgY24uZmlsdGVyID0gZnVuY3Rpb24obikgewogICAgICBsZXQgZSA9IGgobik7CiAgICAgIHJldHVybiBkbihaLmNhbGwodGhpcywgKGZ1bmN0aW9uKG4sIHQpIHsKICAgICAgICByZXR1cm4gZS5jYWxsKG4sIHQsIG4pOwogICAgICB9KSkpOwogICAgfTsKICAgIGxldCBmbiA9IC9cUysvZzsKICAgIGNuLmhhc0NsYXNzID0gZnVuY3Rpb24obikgewogICAgICByZXR1cm4gISFuICYmIG9uLmNhbGwodGhpcywgKGZ1bmN0aW9uKGUpIHsKICAgICAgICByZXR1cm4gYyhlKSAmJiBlLmNsYXNzTGlzdC5jb250YWlucyhuKTsKICAgICAgfSkpOwogICAgfSwgY24ucmVtb3ZlQXR0ciA9IGZ1bmN0aW9uKG4pIHsKICAgICAgbGV0IGUgPSBiKG4pOwogICAgICByZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbihuLCB0KSB7CiAgICAgICAgYyh0KSAmJiBpKGUsIChmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgICB0LnJlbW92ZUF0dHJpYnV0ZShlKTsKICAgICAgICB9KSk7CiAgICAgIH0pKTsKICAgIH0sIGNuLmF0dHIgPSBmdW5jdGlvbihuLCBlKSB7CiAgICAgIGlmIChuKSB7CiAgICAgICAgaWYgKHAobikpIHsKICAgICAgICAgIGlmICgyID4gYXJndW1lbnRzLmxlbmd0aCkgewogICAgICAgICAgICBpZiAoIXRoaXNbMF0gfHwgIWModGhpc1swXSkpIHJldHVybjsKICAgICAgICAgICAgbGV0IGUgPSB0aGlzWzBdLmdldEF0dHJpYnV0ZShuKTsKICAgICAgICAgICAgcmV0dXJuIHUoZSkgPyB2b2lkIDAgOiBlOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGYoZSkgPyB0aGlzIDogdShlKSA/IHRoaXMucmVtb3ZlQXR0cihuKSA6IHRoaXMuZWFjaCgoZnVuY3Rpb24odCwgaSkgewogICAgICAgICAgICBjKGkpICYmIGkuc2V0QXR0cmlidXRlKG4sIGUpOwogICAgICAgICAgfSkpOwogICAgICAgIH0KICAgICAgICBmb3IgKGxldCBlIGluIG4pIHRoaXMuYXR0cihlLCBuW2VdKTsKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfQogICAgfSwgY24udG9nZ2xlQ2xhc3MgPSBmdW5jdGlvbihuLCBlKSB7CiAgICAgIGxldCB0ID0gYihuKSwgbyA9ICFmKGUpOwogICAgICByZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbihuLCBhKSB7CiAgICAgICAgYyhhKSAmJiBpKHQsIChmdW5jdGlvbihuLCB0KSB7CiAgICAgICAgICBvID8gZSA/IGEuY2xhc3NMaXN0LmFkZCh0KSA6IGEuY2xhc3NMaXN0LnJlbW92ZSh0KSA6IGEuY2xhc3NMaXN0LnRvZ2dsZSh0KTsKICAgICAgICB9KSk7CiAgICAgIH0pKTsKICAgIH0sIGNuLmFkZENsYXNzID0gZnVuY3Rpb24obikgewogICAgICByZXR1cm4gdGhpcy50b2dnbGVDbGFzcyhuLCAhMCk7CiAgICB9LCBjbi5yZW1vdmVDbGFzcyA9IGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyB0aGlzLnRvZ2dsZUNsYXNzKG4sICExKSA6IHRoaXMuYXR0cigiY2xhc3MiLCAiIik7CiAgICB9LCBkbi51bmlxdWUgPSB5LCBjbi5hZGQgPSBmdW5jdGlvbihuLCBlKSB7CiAgICAgIHJldHVybiBkbih5KHRoaXMuZ2V0KCkuY29uY2F0KGRuKG4sIGUpLmdldCgpKSkpOwogICAgfTsKICAgIGxldCB1biA9IC9eLS0vLCBtbiA9IHt9LCBobiA9IE8uc3R5bGUsIGduID0gWyAid2Via2l0IiwgIm1veiIsICJtcyIgXSwgYm4gPSB7CiAgICAgIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAhMCwKICAgICAgY29sdW1uQ291bnQ6ICEwLAogICAgICBmbGV4R3JvdzogITAsCiAgICAgIGZsZXhTaHJpbms6ICEwLAogICAgICBmb250V2VpZ2h0OiAhMCwKICAgICAgZ3JpZEFyZWE6ICEwLAogICAgICBncmlkQ29sdW1uOiAhMCwKICAgICAgZ3JpZENvbHVtbkVuZDogITAsCiAgICAgIGdyaWRDb2x1bW5TdGFydDogITAsCiAgICAgIGdyaWRSb3c6ICEwLAogICAgICBncmlkUm93RW5kOiAhMCwKICAgICAgZ3JpZFJvd1N0YXJ0OiAhMCwKICAgICAgbGluZUhlaWdodDogITAsCiAgICAgIG9wYWNpdHk6ICEwLAogICAgICBvcmRlcjogITAsCiAgICAgIG9ycGhhbnM6ICEwLAogICAgICB3aWRvd3M6ICEwLAogICAgICB6SW5kZXg6ICEwCiAgICB9OwogICAgY24uY3NzID0gZnVuY3Rpb24obiwgZSkgewogICAgICBpZiAocChuKSkgewogICAgICAgIGxldCB0ID0gXyhuKTsKICAgICAgICByZXR1cm4gbiA9IGsobiwgdCksIDIgPiBhcmd1bWVudHMubGVuZ3RoID8gdGhpc1swXSAmJiB4KHRoaXNbMF0sIG4sIHQpIDogbiA/IChlID0gUyhuLCBlLCB0KSwKICAgICAgICB0aGlzLmVhY2goKGZ1bmN0aW9uKGksIG8pIHsKICAgICAgICAgIGMobykgJiYgKHQgPyBvLnN0eWxlLnNldFByb3BlcnR5KG4sIGUpIDogby5zdHlsZVtuXSA9IGUpOwogICAgICAgIH0pKSkgOiB0aGlzOwogICAgICB9CiAgICAgIGZvciAobGV0IGUgaW4gbikgdGhpcy5jc3MoZSwgbltlXSk7CiAgICAgIHJldHVybiB0aGlzOwogICAgfTsKICAgIGxldCB2biA9IC9eXHMrfFxzKyQvOwogICAgY24uZGF0YSA9IGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgaWYgKCFuKSB7CiAgICAgICAgaWYgKCF0aGlzWzBdKSByZXR1cm47CiAgICAgICAgbGV0IG4gPSB7fTsKICAgICAgICBmb3IgKGxldCBlIGluIHRoaXNbMF0uZGF0YXNldCkgbltlXSA9IGoodGhpc1swXSwgZSk7CiAgICAgICAgcmV0dXJuIG47CiAgICAgIH0KICAgICAgaWYgKHAobikpIHJldHVybiAyID4gYXJndW1lbnRzLmxlbmd0aCA/IHRoaXNbMF0gJiYgaih0aGlzWzBdLCBuKSA6IGYoZSkgPyB0aGlzIDogdGhpcy5lYWNoKChmdW5jdGlvbih0LCBpKSB7CiAgICAgICAgSShpLCBuLCBlKTsKICAgICAgfSkpOwogICAgICBmb3IgKGxldCBlIGluIG4pIHRoaXMuZGF0YShlLCBuW2VdKTsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9LCBpKFsgITAsICExIF0sIChmdW5jdGlvbihuLCBlKSB7CiAgICAgIGkoWyAiV2lkdGgiLCAiSGVpZ2h0IiBdLCAoZnVuY3Rpb24obiwgdCkgewogICAgICAgIGNuWyhlID8gIm91dGVyIiA6ICJpbm5lciIpICsgdF0gPSBmdW5jdGlvbihpKSB7CiAgICAgICAgICByZXR1cm4gdGhpc1swXSA/IHModGhpc1swXSkgPyBlID8gdGhpc1swXVsiaW5uZXIiICsgdF0gOiB0aGlzWzBdLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IiArIHRdIDogbCh0aGlzWzBdKSA/ICQodGhpc1swXSwgdCkgOiB0aGlzWzBdWyhlID8gIm9mZnNldCIgOiAiY2xpZW50IikgKyB0XSArIChpICYmIGUgPyB3KHRoaXNbMF0sICJtYXJnaW4iICsgKG4gPyAiVG9wIiA6ICJMZWZ0IikpICsgdyh0aGlzWzBdLCAibWFyZ2luIiArIChuID8gIkJvdHRvbSIgOiAiUmlnaHQiKSkgOiAwKSA6IHZvaWQgMDsKICAgICAgICB9OwogICAgICB9KSk7CiAgICB9KSksIGkoWyAiV2lkdGgiLCAiSGVpZ2h0IiBdLCAoZnVuY3Rpb24obiwgZSkgewogICAgICBsZXQgdCA9IGUudG9Mb3dlckNhc2UoKTsKICAgICAgY25bdF0gPSBmdW5jdGlvbihpKSB7CiAgICAgICAgaWYgKCF0aGlzWzBdKSByZXR1cm4gZihpKSA/IHZvaWQgMCA6IHRoaXM7CiAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gcyh0aGlzWzBdKSA/IHRoaXNbMF0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiICsgZV0gOiBsKHRoaXNbMF0pID8gJCh0aGlzWzBdLCBlKSA6IHRoaXNbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbdF0gLSBDKHRoaXNbMF0sICFuKTsKICAgICAgICBsZXQgbyA9IHBhcnNlSW50KGksIDEwKTsKICAgICAgICByZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbihlLCBpKSB7CiAgICAgICAgICBpZiAoYyhpKSkgewogICAgICAgICAgICBsZXQgZSA9IHgoaSwgImJveFNpemluZyIpOwogICAgICAgICAgICBpLnN0eWxlW3RdID0gUyh0LCBvICsgKCJib3JkZXItYm94IiA9PT0gZSA/IEMoaSwgIW4pIDogMCkpOwogICAgICAgICAgfQogICAgICAgIH0pKTsKICAgICAgfTsKICAgIH0pKTsKICAgIGxldCB5biA9IHt9OwogICAgY24udG9nZ2xlID0gZnVuY3Rpb24obikgewogICAgICByZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbihlLCB0KSB7CiAgICAgICAgaWYgKGModCkpIHsKICAgICAgICAgIChmKG4pID8gQSh0KSA6IG4pID8gKHQuc3R5bGUuZGlzcGxheSA9IHQuX19fY2QgfHwgIiIsIEEodCkgJiYgKHQuc3R5bGUuZGlzcGxheSA9IGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgaWYgKHluW25dKSByZXR1cm4geW5bbl07CiAgICAgICAgICAgIGxldCBlID0gSChuKTsKICAgICAgICAgICAgRi5ib2R5Lmluc2VydEJlZm9yZShlLCBudWxsKTsKICAgICAgICAgICAgbGV0IHQgPSB4KGUsICJkaXNwbGF5Iik7CiAgICAgICAgICAgIHJldHVybiBGLmJvZHkucmVtb3ZlQ2hpbGQoZSksIHluW25dID0gIm5vbmUiID09PSB0ID8gImJsb2NrIiA6IHQ7CiAgICAgICAgICB9KHQudGFnTmFtZSkpKSA6ICh0Ll9fX2NkID0geCh0LCAiZGlzcGxheSIpLCB0LnN0eWxlLmRpc3BsYXkgPSAibm9uZSIpOwogICAgICAgIH0KICAgICAgfSkpOwogICAgfSwgY24uaGlkZSA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy50b2dnbGUoITEpOwogICAgfSwgY24uc2hvdyA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy50b2dnbGUoITApOwogICAgfTsKICAgIGxldCB4biA9ICJfX19jZSIsIHduID0gIi4iLCBfbiA9IHsKICAgICAgZm9jdXM6ICJmb2N1c2luIiwKICAgICAgYmx1cjogImZvY3Vzb3V0IgogICAgfSwga24gPSB7CiAgICAgIG1vdXNlZW50ZXI6ICJtb3VzZW92ZXIiLAogICAgICBtb3VzZWxlYXZlOiAibW91c2VvdXQiCiAgICB9OwogICAgY24ub2ZmID0gZnVuY3Rpb24obiwgZSwgdCkgewogICAgICBsZXQgbyA9IHRoaXM7CiAgICAgIGlmIChmKG4pKSB0aGlzLmVhY2goKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICAoYyhlKSB8fCBsKGUpIHx8IHMoZSkpICYmIFAoZSk7CiAgICAgIH0pKTsgZWxzZSBpZiAocChuKSkgZChlKSAmJiAodCA9IGUsIGUgPSAiIiksIGkoYihuKSwgKGZ1bmN0aW9uKG4sIGkpIHsKICAgICAgICBsZXQgYSA9IE0oaSksIHIgPSBhWzBdLCBkID0gYVsxXSwgcCA9IFQocik7CiAgICAgICAgby5lYWNoKChmdW5jdGlvbihuLCBpKSB7CiAgICAgICAgICAoYyhpKSB8fCBsKGkpIHx8IHMoaSkpICYmIChQKGksIHAsIGQsIGUsIHQpLCByICE9PSBwICYmIFAoaSwgciwgZCwgZSwgdCkpOwogICAgICAgIH0pKTsKICAgICAgfSkpOyBlbHNlIGZvciAobGV0IGUgaW4gbikgdGhpcy5vZmYoZSwgbltlXSk7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSwgY24ub24gPSBmdW5jdGlvbihuLCBlLCB0LCBvLCByKSB7CiAgICAgIGxldCBtID0gdGhpczsKICAgICAgaWYgKCFwKG4pKSB7CiAgICAgICAgZm9yIChsZXQgaSBpbiBuKSB0aGlzLm9uKGksIGUsIHQsIG5baV0sIHIpOwogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CiAgICAgIHJldHVybiBwKGUpIHx8IChmKGUpIHx8IHUoZSkgPyBlID0gIiIgOiBmKHQpID8gKHQgPSBlLCBlID0gIiIpIDogKG8gPSB0LCB0ID0gZSwKICAgICAgZSA9ICIiKSksIGQobykgfHwgKG8gPSB0LCB0ID0gdm9pZCAwKSwgbyA/IChpKGIobiksIChmdW5jdGlvbihuLCBpKSB7CiAgICAgICAgbGV0IGQgPSBNKGkpLCBwID0gZFswXSwgZiA9IGRbMV0sIHUgPSBUKHApLCBoID0gcCAhPT0gdSwgZyA9IHAgaW4gX247CiAgICAgICAgdSAmJiBtLmVhY2goKGZ1bmN0aW9uKG4sIGkpIHsKICAgICAgICAgIGlmIChjKGkpIHx8IGwoaSkgfHwgcyhpKSkgewogICAgICAgICAgICBsZXQgbiA9IGZ1bmN0aW9uIG4ocykgewogICAgICAgICAgICAgIGlmIChoICYmIChzLl9fX290ID8gcy5fX19vdCAhPT0gcCA6IHMudHlwZSAhPT0gcCB8fCBzLnRhcmdldFsiX19faSIgKyBwXSAmJiAoZGVsZXRlIHMudGFyZ2V0WyJfX19pIiArIHBdLAogICAgICAgICAgICAgIHMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksIDEpKSkgcmV0dXJuOwogICAgICAgICAgICAgIGlmIChzLm5hbWVzcGFjZSAmJiAhVShmLCBzLm5hbWVzcGFjZS5zcGxpdCh3bikpKSByZXR1cm47CiAgICAgICAgICAgICAgbGV0IGwgPSBpOwogICAgICAgICAgICAgIGlmIChlKSB7CiAgICAgICAgICAgICAgICBsZXQgbiA9IHMudGFyZ2V0OwogICAgICAgICAgICAgICAgZm9yICg7IWEobiwgZSk7ICkgewogICAgICAgICAgICAgICAgICBpZiAobiA9PT0gaSkgcmV0dXJuOwogICAgICAgICAgICAgICAgICBpZiAobiA9IG4ucGFyZW50Tm9kZSwgIW4pIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGwgPSBuLCBzLl9fX2NkID0gITA7CiAgICAgICAgICAgICAgfSBlbHNlIGlmIChnICYmIHMuX19fb3QgPT09IHAgJiYgaSAhPT0gcy50YXJnZXQgJiYgaS5jb250YWlucyhzLnRhcmdldCkpIHJldHVybjsKICAgICAgICAgICAgICBzLl9fX2NkICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCAiY3VycmVudFRhcmdldCIsIHsKICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITAsCiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICByZXR1cm4gbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsICJkYXRhIiwgewogICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiAhMCwKICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiB0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIGxldCBjID0gby5jYWxsKGwsIHMsIHMuX19fdGQpOwogICAgICAgICAgICAgIHIgJiYgUChpLCB1LCBmLCBlLCBuKSwgITEgPT09IGMgJiYgKHMucHJldmVudERlZmF1bHQoKSwgcy5zdG9wUHJvcGFnYXRpb24oKSk7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIG4uZ3VpZCA9IG8uZ3VpZCA9IG8uZ3VpZCB8fCBkbi5ndWlkKyssIHooaSwgdSwgZiwgZSwgbiksIGggJiYgeihpLCBwLCBmLCBlLCBuKTsKICAgICAgICAgIH0KICAgICAgICB9KSk7CiAgICAgIH0pKSwgdGhpcykgOiB0aGlzOwogICAgfSwgY24ub25lID0gZnVuY3Rpb24obiwgZSwgdCwgaSkgewogICAgICByZXR1cm4gdGhpcy5vbihuLCBlLCB0LCBpLCAhMCk7CiAgICB9LCBjbi5yZWFkeSA9IGZ1bmN0aW9uKG4pIHsKICAgICAgbGV0IGUgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gc2V0VGltZW91dChuLCAwLCBkbik7CiAgICAgIH07CiAgICAgIHJldHVybiAibG9hZGluZyIgPT09IEYucmVhZHlTdGF0ZSA/IEYuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGUpIDogZSgpLAogICAgICB0aGlzOwogICAgfSwgY24udHJpZ2dlciA9IGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgaWYgKHAobikpIHsKICAgICAgICBsZXQgZSA9IE0obiksIHQgPSBlWzBdLCBpID0gZVsxXSwgbyA9IFQodCk7CiAgICAgICAgaWYgKCFvKSByZXR1cm4gdGhpczsKICAgICAgICBsZXQgYSA9IC9eKG1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xkcm9wfGNsaWNrfGRibGNsaWNrKS9pLnRlc3QobykgPyAiTW91c2VFdmVudHMiIDogIkhUTUxFdmVudHMiOwogICAgICAgIChuID0gRi5jcmVhdGVFdmVudChhKSkuaW5pdEV2ZW50KG8sICEwLCAhMCksIG4ubmFtZXNwYWNlID0gaS5qb2luKHduKSwgbi5fX19vdCA9IHQ7CiAgICAgIH0KICAgICAgbi5fX190ZCA9IGU7CiAgICAgIGxldCB0ID0gbi5fX19vdCBpbiBfbjsKICAgICAgcmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oZSwgaSkgewogICAgICAgIHQgJiYgZChpW24uX19fb3RdKSAmJiAoaVsiX19faSIgKyBuLl9fX290XSA9ICEwLCBpW24uX19fb3RdKCkpLCBpLmRpc3BhdGNoRXZlbnQobik7CiAgICAgIH0pKTsKICAgIH07CiAgICBsZXQgU24gPSAvJTIwL2csIGpuID0gL1xyP1xuL2csIEluID0gL3JhZGlvfGNoZWNrYm94L2k7CiAgICBjbi5zZXJpYWxpemUgPSBmdW5jdGlvbigpIHsKICAgICAgbGV0IG4gPSAiIjsKICAgICAgcmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oZSwgdCkgewogICAgICAgIGkodC5lbGVtZW50cyB8fCBbIHQgXSwgKGZ1bmN0aW9uKGUsIHQpIHsKICAgICAgICAgIGlmICghKHQuZGlzYWJsZWQgfHwgIXQubmFtZSB8fCAiRklFTERTRVQiID09PSB0LnRhZ05hbWUgfHwgL2ZpbGV8cmVzZXR8c3VibWl0fGJ1dHRvbnxpbWFnZS9pLnRlc3QodC50eXBlKSB8fCBJbi50ZXN0KHQudHlwZSkgJiYgIXQuY2hlY2tlZCkpIHsKICAgICAgICAgICAgbGV0IGUgPSBFKHQpOwogICAgICAgICAgICBpZiAoIWYoZSkpIHsKICAgICAgICAgICAgICBpKEooZSkgPyBlIDogWyBlIF0sIChmdW5jdGlvbihlLCBpKSB7CiAgICAgICAgICAgICAgICBuICs9IGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuICImIiArIGVuY29kZVVSSUNvbXBvbmVudChuKSArICI9IiArIGVuY29kZVVSSUNvbXBvbmVudChlLnJlcGxhY2Uoam4sICJcclxuIikpLnJlcGxhY2UoU24sICIrIik7CiAgICAgICAgICAgICAgICB9KHQubmFtZSwgaSk7CiAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSkpOwogICAgICB9KSksIG4uc2xpY2UoMSk7CiAgICB9LCBjbi52YWwgPSBmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gdGhpcy5lYWNoKChmdW5jdGlvbihlLCB0KSB7CiAgICAgICAgbGV0IG8gPSB0Lm11bHRpcGxlICYmIHQub3B0aW9uczsKICAgICAgICBpZiAobyB8fCBJbi50ZXN0KHQudHlwZSkpIHsKICAgICAgICAgIGxldCBlID0gSihuKSA/IG5uLmNhbGwobiwgU3RyaW5nKSA6IHUobikgPyBbXSA6IFsgbiArICIiIF07CiAgICAgICAgICBvID8gaSh0Lm9wdGlvbnMsIChmdW5jdGlvbihuLCB0KSB7CiAgICAgICAgICAgIHQuc2VsZWN0ZWQgPSAwIDw9IGUuaW5kZXhPZih0LnZhbHVlKTsKICAgICAgICAgIH0pLCAhMCkgOiB0LmNoZWNrZWQgPSAwIDw9IGUuaW5kZXhPZih0LnZhbHVlKTsKICAgICAgICB9IGVsc2UgdC52YWx1ZSA9IGYobikgfHwgdShuKSA/ICIiIDogbjsKICAgICAgfSkpIDogdGhpc1swXSAmJiBFKHRoaXNbMF0pOwogICAgfSwgY24uY2xvbmUgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMubWFwKChmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgcmV0dXJuIGUuY2xvbmVOb2RlKCEwKTsKICAgICAgfSkpOwogICAgfSwgY24uZGV0YWNoID0gZnVuY3Rpb24obikgewogICAgICByZXR1cm4gZyh0aGlzLCBuKS5lYWNoKChmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgZS5wYXJlbnROb2RlICYmIGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKTsKICAgICAgfSkpLCB0aGlzOwogICAgfTsKICAgIGxldCAkbiA9IC9eXHMqPChcdyspW14+XSo+LywgQ24gPSAvXjwoXHcrKVxzKlwvPz4oPzo8XC9cMT4pPyQvLCBBbiA9IHsKICAgICAgIioiOiBPLAogICAgICB0cjogVywKICAgICAgdGQ6IFgsCiAgICAgIHRoOiBYLAogICAgICB0aGVhZDogQiwKICAgICAgdGJvZHk6IEIsCiAgICAgIHRmb290OiBCCiAgICB9OwogICAgZG4ucGFyc2VIVE1MID0gViwgY24uZW1wdHkgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24obiwgZSkgewogICAgICAgIGZvciAoO2UuZmlyc3RDaGlsZDsgKSBlLnJlbW92ZUNoaWxkKGUuZmlyc3RDaGlsZCk7CiAgICAgIH0pKTsKICAgIH0sIGNuLmh0bWwgPSBmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gZihuKSA/IHRoaXMgOiB0aGlzLmVhY2goKGZ1bmN0aW9uKGUsIHQpIHsKICAgICAgICBjKHQpICYmICh0LmlubmVySFRNTCA9IG4pOwogICAgICB9KSkgOiB0aGlzWzBdICYmIHRoaXNbMF0uaW5uZXJIVE1MOwogICAgfSwgY24ucmVtb3ZlID0gZnVuY3Rpb24obikgewogICAgICByZXR1cm4gZyh0aGlzLCBuKS5kZXRhY2goKS5vZmYoKSwgdGhpczsKICAgIH0sIGNuLnRleHQgPSBmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBmKG4pID8gdGhpc1swXSA/IHRoaXNbMF0udGV4dENvbnRlbnQgOiAiIiA6IHRoaXMuZWFjaCgoZnVuY3Rpb24oZSwgdCkgewogICAgICAgIGModCkgJiYgKHQudGV4dENvbnRlbnQgPSBuKTsKICAgICAgfSkpOwogICAgfSwgY24udW53cmFwID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLnBhcmVudCgpLmVhY2goKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICBpZiAoIkJPRFkiICE9PSBlLnRhZ05hbWUpIHsKICAgICAgICAgIGxldCBuID0gZG4oZSk7CiAgICAgICAgICBuLnJlcGxhY2VXaXRoKG4uY2hpbGRyZW4oKSk7CiAgICAgICAgfQogICAgICB9KSksIHRoaXM7CiAgICB9LCBjbi5vZmZzZXQgPSBmdW5jdGlvbigpIHsKICAgICAgbGV0IG4gPSB0aGlzWzBdOwogICAgICBpZiAobikgewogICAgICAgIGxldCBlID0gbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgdG9wOiBlLnRvcCArIEwucGFnZVlPZmZzZXQsCiAgICAgICAgICBsZWZ0OiBlLmxlZnQgKyBMLnBhZ2VYT2Zmc2V0CiAgICAgICAgfTsKICAgICAgfQogICAgfSwgY24ub2Zmc2V0UGFyZW50ID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLm1hcCgoZnVuY3Rpb24obiwgZSkgewogICAgICAgIGxldCB0ID0gZS5vZmZzZXRQYXJlbnQ7CiAgICAgICAgZm9yICg7dCAmJiAic3RhdGljIiA9PT0geCh0LCAicG9zaXRpb24iKTsgKSB0ID0gdC5vZmZzZXRQYXJlbnQ7CiAgICAgICAgcmV0dXJuIHQgfHwgRzsKICAgICAgfSkpOwogICAgfSwgY24ucG9zaXRpb24gPSBmdW5jdGlvbigpIHsKICAgICAgbGV0IG4gPSB0aGlzWzBdOwogICAgICBpZiAobikgewogICAgICAgIGxldCBlID0gImZpeGVkIiA9PT0geChuLCAicG9zaXRpb24iKSwgdCA9IGUgPyBuLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIDogdGhpcy5vZmZzZXQoKTsKICAgICAgICBpZiAoIWUpIHsKICAgICAgICAgIGxldCBlID0gbi5vd25lckRvY3VtZW50LCBpID0gbi5vZmZzZXRQYXJlbnQgfHwgZS5kb2N1bWVudEVsZW1lbnQ7CiAgICAgICAgICBmb3IgKDsoaSA9PT0gZS5ib2R5IHx8IGkgPT09IGUuZG9jdW1lbnRFbGVtZW50KSAmJiAic3RhdGljIiA9PT0geChpLCAicG9zaXRpb24iKTsgKSBpID0gaS5wYXJlbnROb2RlOwogICAgICAgICAgaWYgKGkgIT09IG4gJiYgYyhpKSkgewogICAgICAgICAgICBsZXQgbiA9IGRuKGkpLm9mZnNldCgpOwogICAgICAgICAgICB0LnRvcCAtPSBuLnRvcCArIHcoaSwgImJvcmRlclRvcFdpZHRoIiksIHQubGVmdCAtPSBuLmxlZnQgKyB3KGksICJib3JkZXJMZWZ0V2lkdGgiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHRvcDogdC50b3AgLSB3KG4sICJtYXJnaW5Ub3AiKSwKICAgICAgICAgIGxlZnQ6IHQubGVmdCAtIHcobiwgIm1hcmdpbkxlZnQiKQogICAgICAgIH07CiAgICAgIH0KICAgIH0sIGNuLmNoaWxkcmVuID0gZnVuY3Rpb24obikgewogICAgICByZXR1cm4gZyhkbih5KHYodGhpcywgKGZ1bmN0aW9uKG4pIHsKICAgICAgICByZXR1cm4gbi5jaGlsZHJlbjsKICAgICAgfSkpKSksIG4pOwogICAgfSwgY24uY29udGVudHMgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIGRuKHkodih0aGlzLCAoZnVuY3Rpb24obikgewogICAgICAgIHJldHVybiAiSUZSQU1FIiA9PT0gbi50YWdOYW1lID8gWyBuLmNvbnRlbnREb2N1bWVudCBdIDogIlRFTVBMQVRFIiA9PT0gbi50YWdOYW1lID8gbi5jb250ZW50LmNoaWxkTm9kZXMgOiBuLmNoaWxkTm9kZXM7CiAgICAgIH0pKSkpOwogICAgfSwgY24uZmluZCA9IGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIGRuKHkodih0aGlzLCAoZnVuY3Rpb24odCkgewogICAgICAgIHJldHVybiBlKG4sIHQpOwogICAgICB9KSkpKTsKICAgIH07CiAgICBsZXQgVW4gPSAvXlxzKjwhKD86XFtDREFUQVxbfC0tKXwoPzpcXVxdfC0tKT5ccyokL2csIFRuID0gL14kfF5tb2R1bGUkfFwvKGphdmF8ZWNtYSlzY3JpcHQvaSwgcW4gPSBbICJ0eXBlIiwgInNyYyIsICJub25jZSIsICJub01vZHVsZSIgXTsKICAgIHJldHVybiBjbi5hZnRlciA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gUihhcmd1bWVudHMsIHRoaXMsICExLCAhMSwgITEsICEwLCAhMCk7CiAgICB9LCBjbi5hcHBlbmQgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIFIoYXJndW1lbnRzLCB0aGlzLCAhMSwgITEsICEwKTsKICAgIH0sIGNuLmFwcGVuZFRvID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBSKGFyZ3VtZW50cywgdGhpcywgITAsICExLCAhMCk7CiAgICB9LCBjbi5iZWZvcmUgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIFIoYXJndW1lbnRzLCB0aGlzLCAhMSwgITApOwogICAgfSwgY24uaW5zZXJ0QWZ0ZXIgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIFIoYXJndW1lbnRzLCB0aGlzLCAhMCwgITEsICExLCAhMSwgITEsICEwKTsKICAgIH0sIGNuLmluc2VydEJlZm9yZSA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gUihhcmd1bWVudHMsIHRoaXMsICEwLCAhMCk7CiAgICB9LCBjbi5wcmVwZW5kID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBSKGFyZ3VtZW50cywgdGhpcywgITEsICEwLCAhMCwgITAsICEwKTsKICAgIH0sIGNuLnByZXBlbmRUbyA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gUihhcmd1bWVudHMsIHRoaXMsICEwLCAhMCwgITAsICExLCAhMSwgITApOwogICAgfSwgY24ucmVwbGFjZVdpdGggPSBmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiB0aGlzLmJlZm9yZShuKS5yZW1vdmUoKTsKICAgIH0sIGNuLnJlcGxhY2VBbGwgPSBmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBkbihuKS5yZXBsYWNlV2l0aCh0aGlzKSwgdGhpczsKICAgIH0sIGNuLndyYXBBbGwgPSBmdW5jdGlvbihuKSB7CiAgICAgIGxldCBlID0gZG4obiksIHQgPSBlWzBdOwogICAgICBmb3IgKDt0LmNoaWxkcmVuLmxlbmd0aDsgKSB0ID0gdC5maXJzdEVsZW1lbnRDaGlsZDsKICAgICAgcmV0dXJuIHRoaXMuZmlyc3QoKS5iZWZvcmUoZSksIHRoaXMuYXBwZW5kVG8odCk7CiAgICB9LCBjbi53cmFwID0gZnVuY3Rpb24obikgewogICAgICByZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbihlLCB0KSB7CiAgICAgICAgbGV0IGkgPSBkbihuKVswXTsKICAgICAgICBkbih0KS53cmFwQWxsKGUgPyBpLmNsb25lTm9kZSghMCkgOiBpKTsKICAgICAgfSkpOwogICAgfSwgY24ud3JhcElubmVyID0gZnVuY3Rpb24obikgewogICAgICByZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbihlLCB0KSB7CiAgICAgICAgbGV0IGkgPSBkbih0KSwgbyA9IGkuY29udGVudHMoKTsKICAgICAgICBvLmxlbmd0aCA/IG8ud3JhcEFsbChuKSA6IGkuYXBwZW5kKG4pOwogICAgICB9KSk7CiAgICB9LCBjbi5oYXMgPSBmdW5jdGlvbihuKSB7CiAgICAgIGxldCB0ID0gcChuKSA/IGZ1bmN0aW9uKHQsIGkpIHsKICAgICAgICByZXR1cm4gZShuLCBpKS5sZW5ndGg7CiAgICAgIH0gOiBmdW5jdGlvbihlLCB0KSB7CiAgICAgICAgcmV0dXJuIHQuY29udGFpbnMobik7CiAgICAgIH07CiAgICAgIHJldHVybiB0aGlzLmZpbHRlcih0KTsKICAgIH0sIGNuLmlzID0gZnVuY3Rpb24obikgewogICAgICBsZXQgZSA9IGgobik7CiAgICAgIHJldHVybiBvbi5jYWxsKHRoaXMsIChmdW5jdGlvbihuLCB0KSB7CiAgICAgICAgcmV0dXJuIGUuY2FsbChuLCB0LCBuKTsKICAgICAgfSkpOwogICAgfSwgY24ubmV4dCA9IGZ1bmN0aW9uKG4sIGUsIHQpIHsKICAgICAgcmV0dXJuIGcoZG4oeSh2KHRoaXMsICJuZXh0RWxlbWVudFNpYmxpbmciLCBlLCB0KSkpLCBuKTsKICAgIH0sIGNuLm5leHRBbGwgPSBmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiB0aGlzLm5leHQobiwgITApOwogICAgfSwgY24ubmV4dFVudGlsID0gZnVuY3Rpb24obiwgZSkgewogICAgICByZXR1cm4gdGhpcy5uZXh0KGUsICEwLCBuKTsKICAgIH0sIGNuLm5vdCA9IGZ1bmN0aW9uKG4pIHsKICAgICAgbGV0IGUgPSBoKG4pOwogICAgICByZXR1cm4gdGhpcy5maWx0ZXIoKGZ1bmN0aW9uKHQsIGkpIHsKICAgICAgICByZXR1cm4gKCFwKG4pIHx8IGMoaSkpICYmICFlLmNhbGwoaSwgdCwgaSk7CiAgICAgIH0pKTsKICAgIH0sIGNuLnBhcmVudCA9IGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIGcoZG4oeSh2KHRoaXMsICJwYXJlbnROb2RlIikpKSwgbik7CiAgICB9LCBjbi5pbmRleCA9IGZ1bmN0aW9uKG4pIHsKICAgICAgbGV0IGUgPSBuID8gZG4obilbMF0gOiB0aGlzWzBdLCB0ID0gbiA/IHRoaXMgOiBkbihlKS5wYXJlbnQoKS5jaGlsZHJlbigpOwogICAgICByZXR1cm4gWS5jYWxsKHQsIGUpOwogICAgfSwgY24uY2xvc2VzdCA9IGZ1bmN0aW9uKG4pIHsKICAgICAgbGV0IGUgPSB0aGlzLmZpbHRlcihuKTsKICAgICAgaWYgKGUubGVuZ3RoKSByZXR1cm4gZTsKICAgICAgbGV0IHQgPSB0aGlzLnBhcmVudCgpOwogICAgICByZXR1cm4gdC5sZW5ndGggPyB0LmNsb3Nlc3QobikgOiBlOwogICAgfSwgY24ucGFyZW50cyA9IGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgcmV0dXJuIGcoZG4oeSh2KHRoaXMsICJwYXJlbnRFbGVtZW50IiwgITAsIGUpKSksIG4pOwogICAgfSwgY24ucGFyZW50c1VudGlsID0gZnVuY3Rpb24obiwgZSkgewogICAgICByZXR1cm4gdGhpcy5wYXJlbnRzKGUsIG4pOwogICAgfSwgY24ucHJldiA9IGZ1bmN0aW9uKG4sIGUsIHQpIHsKICAgICAgcmV0dXJuIGcoZG4oeSh2KHRoaXMsICJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIiwgZSwgdCkpKSwgbik7CiAgICB9LCBjbi5wcmV2QWxsID0gZnVuY3Rpb24obikgewogICAgICByZXR1cm4gdGhpcy5wcmV2KG4sICEwKTsKICAgIH0sIGNuLnByZXZVbnRpbCA9IGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgcmV0dXJuIHRoaXMucHJldihlLCAhMCwgbik7CiAgICB9LCBjbi5zaWJsaW5ncyA9IGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIGcoZG4oeSh2KHRoaXMsIChmdW5jdGlvbihuKSB7CiAgICAgICAgcmV0dXJuIGRuKG4pLnBhcmVudCgpLmNoaWxkcmVuKCkubm90KG4pOwogICAgICB9KSkpKSwgbik7CiAgICB9LCBkbjsKICB9CiAgZnVuY3Rpb24gd2FpdFRvUnVuKG4sIGUpIHsKICAgIGxldCB0ID0gMiA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMl0gPyBhcmd1bWVudHNbMl0gOiAwOwogICAgY29uc3QgaSA9IG4gaW5zdGFuY2VvZiBGdW5jdGlvbiA/IG4oKSA6IDAgPCAkKG4pLmxlbmd0aDsKICAgIHJldHVybiBpID8gdm9pZCAoZSBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIGUoaSkpIDogdm9pZCAoMTAwIDwgdCB8fCBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgd2FpdFRvUnVuKG4sIGUsIHQgKyAxKTsKICAgIH0pLCAxMDApKTsKICB9CiAgZnVuY3Rpb24gJCQobiwgZSkgewogICAgcmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0KSB7CiAgICAgIHdhaXRUb1J1bihuLCAoZnVuY3Rpb24obikgewogICAgICAgIGUgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBlKG4pLCB0KG4pOwogICAgICB9KSk7CiAgICB9KSk7CiAgfQogIGZ1bmN0aW9uIGVtaXR0ZXIobikgewogICAgcmV0dXJuIG4gPSBuIHx8IE9iamVjdC5jcmVhdGUobnVsbCksIHsKICAgICAgb24oZSwgdCkgewogICAgICAgIChuW2VdIHx8IChuW2VdID0gW10pKS5wdXNoKHQpOwogICAgICB9LAogICAgICBvZmYoZSwgdCkgewogICAgICAgIG5bZV0gJiYgbltlXS5zcGxpY2UobltlXS5pbmRleE9mKHQpID4+PiAwLCAxKTsKICAgICAgfSwKICAgICAgZW1pdChlLCB0KSB7CiAgICAgICAgKG5bZV0gfHwgW10pLnNsaWNlKCkubWFwKChmdW5jdGlvbihuKSB7CiAgICAgICAgICBuKHQpOwogICAgICAgIH0pKSwgKG5bIioiXSB8fCBbXSkuc2xpY2UoKS5tYXAoKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgIG4oZSwgdCk7CiAgICAgICAgfSkpOwogICAgICB9CiAgICB9OwogIH0KICBmdW5jdGlvbiBnZXRDZG5JbWFnZVVybChuKSB7CiAgICByZXR1cm4gImh0dHBzOi8vcC5wc3RhdHAuY29tL29yaWdpbi8iICsgbjsKICB9CiAgZnVuY3Rpb24gdXVpZCgpIHsKICAgIGxldCBuID0gMCB8IDQ2NjU2ICogTWF0aC5yYW5kb20oKSwgZSA9IDAgfCA0NjY1NiAqIE1hdGgucmFuZG9tKCk7CiAgICByZXR1cm4gbiA9ICgiMDAwIiArIG4udG9TdHJpbmcoMzYpKS5zbGljZSgtMiksIGUgPSAoIjAwMCIgKyBlLnRvU3RyaW5nKDM2KSkuc2xpY2UoLTMpLAogICAgIm8iICsgbiArIGU7CiAgfQogIGZ1bmN0aW9uIGRlbGF5KG4pIHsKICAgIHJldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSkgewogICAgICBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgICBlKCk7CiAgICAgIH0pLCBuKTsKICAgIH0pKTsKICB9CiAgZnVuY3Rpb24gZ2V0S2V5d29yZEZyb21VcmwobiwgZSkgewogICAgY29uc3QgdCA9IChlIHx8IGxvY2F0aW9uLmhyZWYpLm1hdGNoKG4gfHwgQ29tbW9uU2VhcmNoS2V5d29yZFJlZ2V4KTsKICAgIHJldHVybiB0ID8gZGVjb2RlVVJJQ29tcG9uZW50KChuID8gdFsxXSB8fCB0WzJdIDogdFsyXSB8fCB0WzRdKSB8fCAiIikgOiAiIjsKICB9CiAgZnVuY3Rpb24gcHVyaWZ5S2V5d29yZChuKSB7CiAgICByZXR1cm4gKFB1cmlmeUtleXdvcmRSZWdleCA/IG4ucmVwbGFjZShQdXJpZnlLZXl3b3JkUmVnZXgsICIiKSB8fCAobi5zdGFydHNXaXRoKCLnrKwiKSA/ICIiIDogbikgOiBuKS5yZXBsYWNlKC9ccyo6XHMqJC8sICIiKS5yZXBsYWNlKC9ccyooW+eypOiLseaXpV3or618XFsu6K+tXF0pXHMqJC8sICIiKS5yZXBsYWNlKC8oLipcUy4qKVwoLipcKVxzKiQvLCAiJDEiKS5yZXBsYWNlKC8uKuOAiiguKynjgIsuKi8sICIkMSIpLnJlcGxhY2UoL1xzKyhiZHxoZHxcZCtwKVxzKiQvaSwgIiIpLnJlcGxhY2UoL1s677yaXVxzKiQvLCAiIikudHJpbSgpOwogIH0KICBmdW5jdGlvbiBnZXRWaWRlb0luZm8obikgewogICAgcmV0dXJuIHsKICAgICAgc3JjOiBuLnNyYywKICAgICAgZHVyYXRpb246IG4uZHVyYXRpb24sCiAgICAgIHBhdXNlZDogbi5wYXVzZWQsCiAgICAgIGN1cnJlbnRUaW1lOiBuLmN1cnJlbnRUaW1lLAogICAgICBwbGF5YmFja1JhdGU6IG4ucGxheWJhY2tSYXRlCiAgICB9OwogIH0KICBmdW5jdGlvbiBza2lwQWRWaWRlbyhuKSB7CiAgICBsZXQgZSA9ICEhKDEgPCBhcmd1bWVudHMubGVuZ3RoICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzFdKSAmJiBhcmd1bWVudHNbMV07CiAgICAic3RyaW5nIiA9PSB0eXBlb2YgbiAmJiAobiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobikpLCBuICYmIDAgIT09IG4uZHVyYXRpb24gJiYgKG4uY3VycmVudFRpbWUsCiAgICA5MSA+IG4uZHVyYXRpb24gPyAobi5wbGF5YmFja1JhdGUgPSAxNiwgbi5za2lwQWQgPSAhMCwgMCA8IG4uY3VycmVudFRpbWUgJiYgbi5jdXJyZW50VGltZSA8IG4uZHVyYXRpb24gLSAxICYmIChuLmN1cnJlbnRUaW1lID0gbi5kdXJhdGlvbikpIDogZSAmJiBuLnNraXBBZCAmJiAobi5tdXRlZCA9ICExLAogICAgbi5wbGF5YmFja1JhdGUgPSAxLCAuMDEgPj0gbi52b2x1bWUgJiYgKG4udm9sdW1lID0gLjQpKSk7CiAgfQogIGZ1bmN0aW9uIHNraXBBZFZpZGVvV3JhcHBlcihuKSB7CiAgICBpZiAoIWlzU2tpcEFkVmlkZW8pIHJldHVybjsKICAgIGxldCBlID0gITEsIHQgPSAwOwogICAgY29uc3QgaSA9IHNldEludGVydmFsKChmdW5jdGlvbigpIHsKICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5vLS1wbGF5ZXIiKSB8fCA2MDAgPCB0KSB7CiAgICAgICAgJCgiLm8tLXNraXAtYWQiKS5hZGRDbGFzcygiby0taGlkZSIpOwogICAgICAgIGNvbnN0IG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJ2aWRlbyIpOwogICAgICAgIHJldHVybiBuICYmIChuLm11dGVkID0gITEsIG4ucGxheWJhY2tSYXRlID0gMSwgLjAxID49IG4udm9sdW1lICYmIChuLnZvbHVtZSA9IC40KSksCiAgICAgICAgY2xlYXJJbnRlcnZhbChpKTsKICAgICAgfQogICAgICBlID0gITEsICQoInZpZGVvW3NyY10iKS5lYWNoKChmdW5jdGlvbihuLCB0KSB7CiAgICAgICAgMCA8IHQuZHVyYXRpb24gJiYgOTEgPiB0LmR1cmF0aW9uICYmICF0LnBhdXNlZCAmJiAoZSA9ICEwKTsKICAgICAgfSkpLCBlID8gKHQgPSAwLCBuKCkpIDogKHQgKz0gMSwgJCgiLm8tLXNraXAtYWQiKS5hZGRDbGFzcygiby0taGlkZSIpKTsKICAgIH0pLCAyMDApOwogIH0KICBmdW5jdGlvbiB0b2dnbGVTa2lwQWRUaXAobikgewogICAgbGV0IGUgPSAxIDwgYXJndW1lbnRzLmxlbmd0aCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1sxXSA/IGFyZ3VtZW50c1sxXSA6ICJhcHBlbmQiOwogICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLm8tLXNraXAtYWQiKSA/ICQoIi5vLS1za2lwLWFkIikucmVtb3ZlQ2xhc3MoIm8tLWhpZGUiKSA6ICQobilbZV0oU2tpcF9BZF9IdG1sKTsKICB9CiAgZnVuY3Rpb24gc21hcnRDb2xsYXBzZShuKSB7CiAgICBsZXQgZSA9IDAsIHQgPSAhMTsKICAgICQobikuZWFjaCgoZnVuY3Rpb24obiwgaSkgewogICAgICBuIDwgY29sbGFwc2VOdW0gPyBuID49IGNvbGxhcHNlTnVtIC0gMSAmJiAoZSA9ICQoaSkucG9zaXRpb24oKS50b3ApIDogdCB8fCBlICE9PSAkKGkpLnBvc2l0aW9uKCkudG9wID8gKHQgPSAhMCwKICAgICAgJChpKS5wcmV2KCIiKS5hZGRDbGFzcygiaXMtY29sbGFwc2UiKSkgOiAhdCAmJiAkKGkpLmhhc0NsYXNzKCJvLS1jb2xsYXBzZSIpICYmICQoaSkuYWRkQ2xhc3MoImlzLWNvbGxhcHNlIik7CiAgICB9KSksICQobikucGFyZW50KCkuYWRkQ2xhc3MoIm8tLWNvbGxhcHNlLWJveCIpLCAkKCIuby0tY29sbGFwc2UiKS5vZmYoImNsaWNrIikub24oImNsaWNrIiwgKGZ1bmN0aW9uKCkgewogICAgICAkKHRoaXMpLnBhcmVudCgpLnRvZ2dsZUNsYXNzKCJpcy1vcGVuIik7CiAgICB9KSk7CiAgfQogIGZ1bmN0aW9uIGZpeE0zdThQbGF5aW5nKCkgewogICAgZnVuY3Rpb24gbihuKSB7CiAgICAgIG4uZnJvbSA9IEhyZWYsIG4ub3JpZ2luID0gSHJlZiwgbi51cmwgPSBpLCBpc05vdFRvcCAmJiB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe30sIG4sIHsKICAgICAgICBfaWQ6IE1FU1NBR0VfSUQsCiAgICAgICAgYWN0aW9uOiAibG9nIiwKICAgICAgICBwYXJlbnQ6ICEwCiAgICAgIH0pLCAiKiIpOwogICAgfQogICAgY29uc3QgZSA9IERhdGUubm93KCk7CiAgICBsZXQgdCwgaTsKICAgIGNvbnN0IG8gPSBzZXRJbnRlcnZhbCgoZnVuY3Rpb24oKSB7CiAgICAgIGNvbnN0IGEgPSBEYXRlLm5vdygpIC0gZTsKICAgICAgaSA9ICIiLCB0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigidmlkZW9bc3JjXSIpLCB0ICYmIChpID0gdC5zcmMpLCAvKFwubTN1OHxcL20zdThwbGF5KVteXC9dKiQvLnRlc3QoaSkgPyAoY2xlYXJJbnRlcnZhbChvKSwKICAgICAgc2V0VGltZW91dCgoYXN5bmMgZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKDAgPT09IHQucmVhZHlTdGF0ZSkgewogICAgICAgICAgbGV0IGUgPSBnZXRHbG9iYWwoIkhscyIpOwogICAgICAgICAgaWYgKGUgfHwgKGF3YWl0IGFkZEpzKCIvaGxzLmpzLzAuMTMuMi9obHMubWluLmpzIiksIGUgPSBnZXRHbG9iYWwoIkhscyIpKSwgZS5pc1N1cHBvcnRlZCgpKSB7CiAgICAgICAgICAgIHQucGF1c2UoKTsKICAgICAgICAgICAgY29uc3QgbyA9IG5ldyBlOwogICAgICAgICAgICBvLmxvYWRTb3VyY2UoaSksIG8uYXR0YWNoTWVkaWEodCksIG8ub24oZS5FdmVudHMuTUFOSUZFU1RfUEFSU0VELCAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgdC5wbGF5KCk7CiAgICAgICAgICAgIH0pKSwgbih7CiAgICAgICAgICAgICAgdGV4dDogIuKclCBGaXggbTN1OCBwbGF5IgogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pLCAxZTMpKSA6IGEgPj0gMTVlMyAmJiAoY2xlYXJJbnRlcnZhbChvKSwgbih7CiAgICAgICAgdGV4dDogIsOXIEZpeCBtM3U4IHBsYXkgZmFpbGVkIgogICAgICB9KSk7CiAgICB9KSwgMTAwKTsKICB9CiAgZnVuY3Rpb24gaXNWYWxpZFZpZGVvVXJsKG4pIHsKICAgIHJldHVybiBpc1ZhbGlkVXJsUmVnZXgudGVzdChuKSAmJiBpc1ZpZGVvVXJsUmVnZXgudGVzdChuKSAmJiAhaXNJbnZhbGlkU25pZmZVcmxSZWdleC50ZXN0KG4pOwogIH0KICBmdW5jdGlvbiB0b1NlYXJjaFVybChuLCBlKSB7CiAgICByZXR1cm4gbi5pbmNsdWRlcygiKioiKSA/IG4ucmVwbGFjZSgiKioiLCBlKSA6IC9tb3ZpZVwuZG91YmFuXC5jb21cL3RhZy8udGVzdChuKSA/IG4gOiBuICsgZTsKICB9CiAgZnVuY3Rpb24gcGFyc2VVcmwobiwgZSkgewogICAgbGV0IHQsIGksIG8gPSBuLnRyaW0oKS5zcGxpdCgvW1xzQF0rLyk7CiAgICBjb25zdCBhID0gby5maWx0ZXIoKGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIC9odHRwcz86XC9cLy8udGVzdChuKTsKICAgIH0pKTsKICAgIG8gPSBvLmZpbHRlcigoZnVuY3Rpb24obikgewogICAgICByZXR1cm4gIS9odHRwcz86XC9cLy8udGVzdChuKTsKICAgIH0pKSwgYS5mb3JFYWNoKChmdW5jdGlvbihuKSB7CiAgICAgIC9cL1wvbVwufFwvbVwvfFwvXC9tc291Ly50ZXN0KG4pID8gdCA9IG4gOiBpID0gbjsKICAgIH0pKTsKICAgIGxldCByID0gKGlzTW9iaWxlID8gdCA6IGkpIHx8IGFbMF07CiAgICBlICYmIChyID0gdG9TZWFyY2hVcmwociwgZSkpOwogICAgY29uc3QgcyA9IDAgPCBvLmxlbmd0aCA/IG8uam9pbigiICIpIDogci5tYXRjaCgvXC9cLyguK1wuKT8oW15cL10rKVwuXHcrXC8vKVsyXS5yZXBsYWNlKC9eKFx3KS8sIChmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBuLnRvVXBwZXJDYXNlKCk7CiAgICB9KSk7CiAgICByZXR1cm4gewogICAgICB1cmw6IHIsCiAgICAgIG5hbWU6IHMKICAgIH07CiAgfQogIGZ1bmN0aW9uIGdldFNlYXJjaFNvdXJjZXNIdG1sKG4pIHsKICAgIGxldCBlID0gISgxIDwgYXJndW1lbnRzLmxlbmd0aCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1sxXSkgfHwgYXJndW1lbnRzWzFdOwogICAgY29uc3QgdCA9IEhyZWYubWF0Y2goL1wvXC8uKj8oXHcrKVwuXHcrXC8vKVsxXTsKICAgIHJldHVybiBTRUFSQ0hfVVJMUy5tYXAoKGZ1bmN0aW9uKGUpIHsKICAgICAgY29uc3QgaSA9IGlzVmlwU2l0ZVJlZ2V4LnRlc3QoZS51cmwpID8gImlzLXZpcCIgOiBpc0FuaW1lU2l0ZVJlZ2V4LnRlc3QoZS51cmwpID8gImlzLWFuaW1lIiA6ICIiLCBvID0gZS51cmwubWF0Y2goL1wvXC8uKj8oXHcrKVwuXHcrXC8vKVsxXTsKICAgICAgcmV0dXJuIGUudXJsLmluY2x1ZGVzKHQpIHx8IEhyZWYuaW5jbHVkZXMobykgPyAiIiA6ICc8YSB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9IicgKyBpICsgJyIgJyArIChfRCA/ICdkYXRhLXdlaWdodD0iJyArIGUud2VpZ2h0ICsgJyIgJyA6ICIiKSArICdocmVmPSInICsgdG9TZWFyY2hVcmwoZS51cmwsIG4pICsgJyI+JyArIGUubmFtZSArICI8L2E+IjsKICAgIH0pKS5qb2luKCJcbiIpICsgKGUgJiYgU0VBUkNIX1VSTFMubGVuZ3RoID4gY29sbGFwc2VOdW0gPyAnPGEgY2xhc3M9Im8tLWNvbGxhcHNlIj7inqI8L2E+JyA6ICIiKTsKICB9CiAgZnVuY3Rpb24gdG9nZ2xlVmlld3BvcnQoKSB7CiAgICBsZXQgbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbbmFtZT12aWV3cG9ydF0iKTsKICAgIG4gfHwgKG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJtZXRhIiksIG4ubmFtZSA9ICJ2aWV3cG9ydCIsIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0uYXBwZW5kQ2hpbGQobikpOwogICAgY29uc3QgZSA9IGFsbG93U2NhbGUgPyAid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8iIDogIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9eWVzIjsKICAgIG4uc2V0QXR0cmlidXRlKCJjb250ZW50IiwgZSksIGFsbG93U2NhbGUgPSAhYWxsb3dTY2FsZTsKICB9CiAgZnVuY3Rpb24gZW5zdXJlQXJyYXkobikgewogICAgcmV0dXJuIEFycmF5LmlzQXJyYXkobikgPyBuIDogbi50cmltKCkuc3BsaXQoL1tcblxzXSpcbitbXG5cc10qLyk7CiAgfQogIGZ1bmN0aW9uIHRvVXJsUmVnZXgobikgewogICAgcmV0dXJuIG5ldyBSZWdFeHAobi5tYXAoKGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIG4ucmVwbGFjZSgvLitcL1wvfFwvLisvZywgIiIpLnJlcGxhY2UoL1wuL2csICJcXC4iKTsKICAgIH0pKS5qb2luKCJ8IikpOwogIH0KICBmdW5jdGlvbiBpbnNlcnRTZWFyY2hBZGRvbihuLCBlKSB7CiAgICBsZXQgdCA9IDIgPCBhcmd1bWVudHMubGVuZ3RoICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzJdID8gYXJndW1lbnRzWzJdIDogImFmdGVyIiwgaSA9IDMgPCBhcmd1bWVudHMubGVuZ3RoICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzNdID8gYXJndW1lbnRzWzNdIDogMDsKICAgIGNvbnN0IG8gPSBIcmVmLmluY2x1ZGVzKCJtLmRvdWJhbi5jb20vc2VhcmNoIik7CiAgICBpZiAoIW4gfHwgIW8gJiYgMCA8ICQoIi5vLS1qdW1wIikubGVuZ3RoIHx8IDIwIDwgaSkgcmV0dXJuOwogICAgbGV0IGEsIHIgPSAhMTsKICAgIHJldHVybiAic3RyaW5nIiA9PSB0eXBlb2YgZSAmJiAociA9IGUuc3RhcnRzV2l0aCgiLSIpLCByICYmIChlID0gZS5zbGljZSgxKSkpLCBhID0gJChlKSwKICAgIDAgPT09IGEubGVuZ3RoID8gdm9pZCBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgaW5zZXJ0U2VhcmNoQWRkb24obiwgZSwgdCwgaSArIDEpOwogICAgfSksIDUwMCkgOiAocGxheWVyVGl0bGUgPSBwdXJpZnlLZXl3b3JkKG4pLCB2b2lkIChwbGF5ZXJUaXRsZSAmJiAoYVtyID8gImxhc3QiIDogImZpcnN0Il0oKVt0XSgnPGRpdiBjbGFzcz0iby0tanVtcCI+JyArIGdldFNlYXJjaFNvdXJjZXNIdG1sKHBsYXllclRpdGxlLCAhbykgKyAiPC9kaXY+IiksCiAgICAhbyAmJiBzbWFydENvbGxhcHNlKCIuby0tanVtcCBhIikpKSk7CiAgfQogIGZ1bmN0aW9uIHNuaWZmSW5JZnJhbWUoKSB7CiAgICBsb2NhdGlvbi5ocmVmID09PSBTbmlmZkNoZWNrVXJsICYmIHdpbmRvdy50b3AucG9zdE1lc3NhZ2UoewogICAgICBwYWdlSW5mbzogcGFnZUluZm8sCiAgICAgIF9pZDogTUVTU0FHRV9JRCwKICAgICAgYWN0aW9uOiAiZW5hYmxlLnNuaWZmIiwKICAgICAgZnJvbTogbG9jYXRpb24uaHJlZgogICAgfSwgIioiKTsKICAgIGNvbnN0IG4gPSBEYXRlLm5vdygpLCBlID0gc2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCkgewogICAgICBjb25zdCB0ID0gRGF0ZS5ub3coKSAtIG47CiAgICAgIGlmICgwIDwgJCgidmlkZW8gc291cmNlW3NyY10sIHZpZGVvW3NyY10iKS5sZW5ndGgpIHsKICAgICAgICBjbGVhckludGVydmFsKGUpLCAkKCJ2aWRlbywgYXVkaW8iKS5lYWNoKChmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgICBlLm11dGVkID0gITAsIGUudm9sdW1lID0gMCwgZS5wYXVzZSgpOwogICAgICAgICAgY29uc3QgdCA9IERhdGUubm93KCksIGkgPSBzZXRJbnRlcnZhbCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGNvbnN0IG4gPSBEYXRlLm5vdygpIC0gdDsKICAgICAgICAgICAgZS5tdXRlZCA9ICEwLCBlLnZvbHVtZSA9IDAsIGUucGF1c2UoKSwgbiA+IDRlMyAmJiBjbGVhckludGVydmFsKGkpOwogICAgICAgICAgfSksIDYwKTsKICAgICAgICB9KSk7CiAgICAgICAgY29uc3QgbiA9ICQoInZpZGVvIHNvdXJjZVtzcmNdIikuZXEoMCkuYXR0cigic3JjIikgfHwgJCgidmlkZW9bc3JjXSIpLmVxKDApLmF0dHIoInNyYyIpIHx8ICIiOwogICAgICAgIHJldHVybiBuICYmICQoInZpZGVvLCBhdWRpbyIpLnJlbW92ZSgpLCAvXlwvW15cL10vLnRlc3QobikgJiYgKG4gPSBsb2NhdGlvbi5vcmlnaW4gKyBuKSwKICAgICAgICB2b2lkIChpc1ZhbGlkVmlkZW9VcmwobikgPyB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKHsKICAgICAgICAgIHBhZ2VJbmZvOiBwYWdlSW5mbywKICAgICAgICAgIHVzZWRUaW1lOiB0LAogICAgICAgICAgX2lkOiBNRVNTQUdFX0lELAogICAgICAgICAgYWN0aW9uOiAicGxheS52aWRlbyIsCiAgICAgICAgICBmcm9tOiBsb2NhdGlvbi5ocmVmLAogICAgICAgICAgb3JpZ2luOiBsb2NhdGlvbi5ocmVmLAogICAgICAgICAgdXJsOiBuLnRyaW0oKSwKICAgICAgICAgIHBhcmVudDogITAKICAgICAgICB9LCAiKiIpIDogL15ibG9iOi8udGVzdChuKSA/IHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoewogICAgICAgICAgcGFnZUluZm86IHBhZ2VJbmZvLAogICAgICAgICAgdXNlZFRpbWU6IHQsCiAgICAgICAgICBfaWQ6IE1FU1NBR0VfSUQsCiAgICAgICAgICBhY3Rpb246ICJzbmlmZi5ibG9iIiwKICAgICAgICAgIGZyb206IGxvY2F0aW9uLmhyZWYsCiAgICAgICAgICBvcmlnaW46IGxvY2F0aW9uLmhyZWYsCiAgICAgICAgICB1cmw6IG4sCiAgICAgICAgICBwYXJlbnQ6ICEwCiAgICAgICAgfSwgIioiKSA6IHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoewogICAgICAgICAgcGFnZUluZm86IHBhZ2VJbmZvLAogICAgICAgICAgdXNlZFRpbWU6IHQsCiAgICAgICAgICB0ZXh0OiAiTk9UIE1BVENIIFZJREVPIFVSTCIsCiAgICAgICAgICBfaWQ6IE1FU1NBR0VfSUQsCiAgICAgICAgICBhY3Rpb246ICJsb2ciLAogICAgICAgICAgZnJvbTogbG9jYXRpb24uaHJlZiwKICAgICAgICAgIG9yaWdpbjogbG9jYXRpb24uaHJlZiwKICAgICAgICAgIHVybDogbiwKICAgICAgICAgIHBhcmVudDogITAKICAgICAgICB9LCAiKiIpKTsKICAgICAgfQogICAgICBjb25zdCBpID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiaWZyYW1lW3NyY10iKTsKICAgICAgaWYgKGkpIHsKICAgICAgICBjb25zdCBuID0gaS5zY3IsIGUgPSBkZWNvZGVVUklDb21wb25lbnQobikubWF0Y2goLz0oaHR0cFteJj1dK1wuKG0zdTh8bXA0KSkvKTsKICAgICAgICAoL2RwbGF5ZXIvLnRlc3QobikgfHwgaXNWaWRlb1VybFJlZ2V4LnRlc3QobikpICYmIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoewogICAgICAgICAgcGFnZUluZm86IHBhZ2VJbmZvLAogICAgICAgICAgdXNlZFRpbWU6IHQsCiAgICAgICAgICB0ZXh0OiAiaWZyYW1lIHBsYXllciB1cmwiLAogICAgICAgICAgX2lkOiBNRVNTQUdFX0lELAogICAgICAgICAgYWN0aW9uOiAibG9nIiwKICAgICAgICAgIGZyb206IGxvY2F0aW9uLmhyZWYsCiAgICAgICAgICBvcmlnaW46IGxvY2F0aW9uLmhyZWYsCiAgICAgICAgICB1cmw6IGUgPyBlWzFdIDogbiwKICAgICAgICAgIGlzTWF0Y2g6IGUgJiYgaXNWYWxpZFZpZGVvVXJsKGVbMV0pLAogICAgICAgICAgcGFyZW50OiAhMAogICAgICAgIH0sICIqIiksIGUgJiYgaXNWYWxpZFZpZGVvVXJsKGVbMV0pICYmICgkKCJpZnJhbWUiKS5yZW1vdmUoKSwgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7CiAgICAgICAgICBwYWdlSW5mbzogcGFnZUluZm8sCiAgICAgICAgICB1c2VkVGltZTogdCwKICAgICAgICAgIF9pZDogTUVTU0FHRV9JRCwKICAgICAgICAgIGFjdGlvbjogInBsYXkudmlkZW8iLAogICAgICAgICAgZnJvbTogbG9jYXRpb24uaHJlZiwKICAgICAgICAgIG9yaWdpbjogbG9jYXRpb24uaHJlZiwKICAgICAgICAgIHVybDogZVsxXS50cmltKCksCiAgICAgICAgICBwYXJlbnQ6ICEwCiAgICAgICAgfSwgIioiKSk7CiAgICAgIH0KICAgICAgaWYgKDRlMyA8PSB0ICYmIGkpIHJldHVybiB2b2lkIGNsZWFySW50ZXJ2YWwoZSk7CiAgICAgIGNvbnN0IG8gPSAwIDwgJCgidmlkZW8iKS5sZW5ndGg7CiAgICAgICh0ID49IDNlNCB8fCAyZTMgPD0gdCAmJiBvKSAmJiAoY2xlYXJJbnRlcnZhbChlKSwgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7CiAgICAgICAgcGFnZUluZm86IHBhZ2VJbmZvLAogICAgICAgIHVzZWRUaW1lOiB0LAogICAgICAgIGhhc1ZpZGVvOiBvLAogICAgICAgIGhhc0lmcmFtZTogISFpLAogICAgICAgIF9pZDogTUVTU0FHRV9JRCwKICAgICAgICBhY3Rpb246ICJzbmlmZi5mYWlsIiwKICAgICAgICBmcm9tOiBsb2NhdGlvbi5ocmVmLAogICAgICAgIG9yaWdpbjogbG9jYXRpb24uaHJlZiwKICAgICAgICBwYXJlbnQ6ICEwCiAgICAgIH0sICIqIikpOwogICAgfSksIDEwMCk7CiAgfQogIGxldCBIcmVmID0gbG9jYXRpb24uaHJlZjsKICBpZiAoSXMoL2Nvb2tpZS5odG1sLykgfHwgSXMoL21cLmxlXC5jb20vKSAmJiBJc05vdCgvbS5sZS5jb21cL3NlYXJjaHxzby5sZS5jb21cL3N8XC5sZVwuY29tXC8ocHR2XC92cGxheVwvfHZwbGF5XykvKSkgcmV0dXJuOwogIGNvbnN0IGlzVG9wID0gd2luZG93LnRvcCA9PT0gd2luZG93LnNlbGYsIGlzTm90VG9wID0gIWlzVG9wOwogIGlmIChpc1RvcCAmJiBJcygvdndlY2FtLnRjLnFxLmNvbXxcLnRpdGFuLm1ndHYuY29tLykgJiYgIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInZpZGVvIikpIHJldHVybiB2b2lkIChJc05vdCgvbWl5aW5nLykgJiYgKGxvY2F0aW9uLmhyZWYgPSBIcmVmICsgKEhyZWYuaW5jbHVkZXMoIj8iKSA/ICImIiA6ICI/IikgKyAibWl5aW5nPSIgKyAobmV3IERhdGUpLmdldEZ1bGxZZWFyKCkpKTsKICBjb25zdCBQTFVHSU5fQVRUUiA9ICJtaXlpbmciLCBQTFVHSU5fTkFNRSA9ICLgvLrgvILpuL/okpnop6PmnpDgvILgvLsiLCBPT19TSUdOID0gIihvy5jil6HLmG8pIiwgJGh0bWwgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaHRtbCIpWzBdOwogIGlmICgkaHRtbC5nZXRBdHRyaWJ1dGUoIm1peWluZyIpID09PSBQTFVHSU5fTkFNRSkgcmV0dXJuOwogICRodG1sLnNldEF0dHJpYnV0ZSgibWl5aW5nIiwgUExVR0lOX05BTUUpOwogIGNvbnN0IF9EID0gITEsIFZFUlNJT04gPSAi6bi/6JKZ6Kej5p6Q5byV5pOO8J+HqPCfh7Pwn4eo8J+Hs/Cfh6jwn4ezXl9e44GY5biFIiwgaGFzVW5zYWZlV2luZG93ID0gInVuZGVmaW5lZCIgIT0gdHlwZW9mIHVuc2FmZVdpbmRvdywgaXNHTSA9ICJ1bmRlZmluZWQiICE9IHR5cGVvZiBHTSAmJiBoYXNVbnNhZmVXaW5kb3c7CiAgbGV0IGxvZ3NEb207CiAgY29uc3Qgc2NyZWVuV2lkdGggPSB3aW5kb3cuc2NyZWVuLndpZHRoLCBpc01vYmlsZSA9IDYwMCA+PSBzY3JlZW5XaWR0aCB8fCAvQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgfHwgITEsIHN0b3JlUHJlZml4ID0gIum4v+iSmeino+aekOW8leaTjvCfh6jwn4ez8J+HqPCfh7Pwn4eo8J+Hs15fXuOBmOW4hSIsIFN0b3JlID0gewogICAgZ2V0KG4pIHsKICAgICAgbGV0IGUgPSAxIDwgYXJndW1lbnRzLmxlbmd0aCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1sxXSA/IGFyZ3VtZW50c1sxXSA6IG51bGw7CiAgICAgIHJldHVybiBwYXJzZVN0b3JlRGF0YSh3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oc3RvcmVQcmVmaXggKyBuKSwgZSk7CiAgICB9LAogICAgc2V0KG4pIHsKICAgICAgbGV0IGUgPSAxIDwgYXJndW1lbnRzLmxlbmd0aCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1sxXSA/IGFyZ3VtZW50c1sxXSA6IG51bGw7CiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShzdG9yZVByZWZpeCArIG4sIEpTT04uc3RyaW5naWZ5KGUpKTsKICAgIH0sCiAgICByZW1vdmUobikgewogICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oc3RvcmVQcmVmaXggKyBuKTsKICAgIH0KICB9LCBHbG9iYWxTdG9yZSA9IHsKICAgIGdldChuKSB7CiAgICAgIGxldCBlID0gMSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0gPyBhcmd1bWVudHNbMV0gOiBudWxsOwogICAgICByZXR1cm4gaXNHTSA/IHBhcnNlU3RvcmVEYXRhKEdNX2dldFZhbHVlKHN0b3JlUHJlZml4ICsgbiwgZSksIGUpIDogU3RvcmUuZ2V0KG4sIGUpOwogICAgfSwKICAgIHNldChuKSB7CiAgICAgIGxldCBlID0gMSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0gPyBhcmd1bWVudHNbMV0gOiBudWxsOwogICAgICBpc0dNID8gR01fc2V0VmFsdWUoc3RvcmVQcmVmaXggKyBuLCBKU09OLnN0cmluZ2lmeShlKSkgOiBTdG9yZS5zZXQobiwgZSk7CiAgICB9LAogICAgcmVtb3ZlKG4pIHsKICAgICAgaXNHTSA/IEdNX2RlbGV0ZVZhbHVlKG4pIDogU3RvcmUucmVtb3ZlKG4pOwogICAgfQogIH0sICQgPSBnZXQkKCksIE1BWF9aX0lOREVYID0gMjE0NzQ4MzY0NywgTUVTU0FHRV9JRCA9IFBMVUdJTl9OQU1FLCBQdXJpZnlTdHlsZSA9ICJcbmRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDt2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDt3aWR0aDogMCAhaW1wb3J0YW50O2hlaWdodDogMCAhaW1wb3J0YW50O21heC13aWR0aDogMCAhaW1wb3J0YW50O21heC1oZWlnaHQ6IDAgIWltcG9ydGFudDtvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7cG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7bGVmdDogLTk5OTk5cHggIWltcG9ydGFudDtvcGFjaXR5OiAwICFpbXBvcnRhbnQ7cG9pbnRlci1ldmVudHM6IG5vbmUgIWltcG9ydGFudDsiLCBkYXkgPSBuZXcgRGF0ZSwgU25pZmZDaGVja1VybCA9IGdldENkbkltYWdlVXJsKCJmZTIzMDAwMTM5YTAyM2NlZGM0YyIpLCBQbGF5ZXJQbGF5aW5nQ292ZXJzID0gImZlOGQwMDAxZTcxYjQyMWFmNDcwO2ZlOWQwMDAxYTIzZmE0YmExMmU2O2ZlYmMwMDAxZjdkY2E2MDFhY2FhO2ZlZDgwMDAxNDNjMWM5OTc3ZjBhO2ZlZGQwMDAxZjhkYmYxMTNhOWU0O2ZmMTUwMDAxNzNlN2E5MWIyYmRmO2ZmMTgwMDAxNTgyN2JkNWE3MGZjO2ZmMTkwMDAxNDkzMzZiMGVkYWRjO2ZmMzQwMDAyMWFkNWRjOTliY2JhO2ZmODEwMDAxMDE5ZDdiOTg2Y2QzO2ZmOTgwMDAwYTBiZGQwZmZhYzcxO2ZmYTAwMDAyYzdiMDg3MDNhNzljIi50cmltKCkuc3BsaXQoLzsvKSwgUGxheWVyUGxheWluZ0NvdmVyID0gZ2V0Q2RuSW1hZ2VVcmwoUGxheWVyUGxheWluZ0NvdmVyc1soZGF5LmdldERheSgpICsgZGF5LmdldEhvdXJzKCkpICUgUGxheWVyUGxheWluZ0NvdmVycy5sZW5ndGhdKSwgUGxheWVyTG9hZGluZ0NvdmVycyA9ICIxMDAwMDAwMDA4YzAwYzZmOTA5NmY7MTAwMDMwMDAwOTM5NDExMTZkODFhO2RjMGUwMDA2MmIyYzVlYjQ5M2JkO2RjMGYwMDA1NDA2NGY4YzM4MGY1O2RjMTAwMDA0NWMwNzVkZDMwNjU2O2RjMTEwMDA1ZThiNzJhMWNlNTgzO2ZlMjMwMDAxM2JhYTRjZGUyODkwO2ZlMmYwMDAxMjlkMDA2YzJhMTM5O2ZlMzQwMDAxMzVhNDIxMjU0NDg2O2ZlMzYwMDAxZWMzMzZhOTZkMGJjO2ZlM2IwMDAwZWI1M2Y4NDQ5MDM4O2ZlM2MwMDAxNTA0M2QzN2Q3YmU1O2ZlNDIwMDAyMThiOWY3ZjVhNTViO2ZlNDIwMDAyMThjNWYxMWMyZWQ5O2ZlNDMwMDAxMDQzNDQ4OTk0ODQ2O2ZlNDYwMDAwYjNmYWU2YWExYmIxO2ZlNGQwMDAxMGNmNWM0OGM5YjZiO2ZlNTEwMDAwZjFmYjE5ODAxZTM4O2ZlNWYwMDAxNTRhNzk0MjYxMTM4O2ZlNjMwMDAxYjIyMmQ4YTZlYjdlO2ZlNmQwMDAyMjY0NTJmYWFmNjQwO2ZlNzIwMDAxZjI0ZjllOTMwNDZmO2ZlN2EwMDAxNTcwNjkyOWUxZDM3O2ZlN2QwMDAyNTQ4Y2ZkMTE1MmJiO2ZlOGIwMDAxYzI3MDZiZmUzZTc3O2ZlOGYwMDAyN2ZkZDc5ZGRhN2ZkO2ZlOTYwMDAxYjFlYTBhYTdlNDYzO2ZlYTQwMDAyYmZhYTU3ZDBlZGU0O2ZlYTYwMDAxMjc0MjZiNGQzYmRhO2ZlYTcwMDAwODgxYzUzNjk0NzI0O2ZlYTgwMDAyYjBmZDE2MmU3OWZhO2ZlYTkwMDAxMmNhNmM0OWQ2NThlO2ZlYWEwMDAyYzU5ZWQ4YTlkZWRmO2ZlYWQwMDAxMTdjYTlmZDI1MDU0O2ZlYjAwMDAxNGI5OGZhZTc3N2FmO2ZlYjAwMDAxNGUyYzg0MjI4ZWY5O2ZlYjEwMDAxNDE5OGNhODA0Yzk2O2ZlYjMwMDAxNTUwMjg2MTlkYjkyO2ZlYjkwMDAwZmFiMGM5MzRjN2NjO2ZlYmMwMDAxNjQxNzRhNTc5YjEyO2ZlYzUwMDAxM2NiM2YyNDkyMDg3O2ZlYzYwMDAxNDY3OTlkYjgyZGRjO2ZlYzgwMDAxMDdmMDRkZDliZWExO2ZlY2UwMDAxNDVjN2U4YWIzOGFjO2ZlY2YwMDAxZjFjMzdiYTYyZTBhO2ZlZDIwMDAxZDc0YjdlNmVmMTdjO2ZlZGIwMDAwYjJmYjA2MzBkNmVjO2ZlZTEwMDAwZmNmOWUwZjhhMGVhO2ZlZTIwMDAwY2JmZTFkOTQwMzVhO2ZlZTIwMDAwY2JmZjE4YjBmYTc4O2ZlZTkwMDAxNjY0MTE3MDc4MDg0O2ZlZjUwMDAyMmZhOGI1ZTU0ODg0O2ZlZjkwMDAxMWVkNjVkZTFiZjcyO2ZlZmEwMDAwYzhmMjVmYmY4ODliO2ZlZmQwMDAyNTViNjkyOGY0YTMyO2ZmMDAwMDAxMDgwMzgwYzEyN2FiO2ZmMDAwMDAxNTc2ZDZkMTY0ZGQ1O2ZmMDgwMDAxNzE4ODRlMmU0NmMwO2ZmMDgwMDAxNzE4Y2ViYmU4NTAxO2ZmMDgwMDAxNzE4ZWI5NDhiMWI0O2ZmMTMwMDAxMGYzZGExNzI5MGQ1O2ZmMTYwMDAxY2IzZmNjOTUyZTY4O2ZmMTcwMDAwOWRiMTFlMmQzNTU1O2ZmMWMwMDAxMTY3NWE0NDRhOWFmO2ZmMjQwMDAxNzI0OWQxNWIxYjgzO2ZmMjUwMDAxYThkYzBjNGIxZTM3O2ZmMjYwMDAyMDg1NDA3OTAzOGVjO2ZmMjcwMDAxZWMyMDQ4ZTk1NjY5O2ZmMjgwMDAxYjQxZjM3YzRmNWFjO2ZmMmQwMDAwYzIxN2Y3NzZjZDBmO2ZmMmYwMDAzYTE3NjA1NzQxMjIyO2ZmMzIwMDAxMjBmZmJmYTM3OWQ3O2ZmMzMwMDAwOThiYzNlNWM3NjRlO2ZmMzYwMDAwYjIzMmM3Nzk0N2M1O2ZmNDQwMDAyOTJiYmY4MTY0YWYyO2ZmNTUwMDAxMDVjMmM1ZjAwYjZhO2ZmNWUwMDAxN2Y0OWEzNmIyNzM2O2ZmNWUwMDAxODMxMGViNTgyOWNhO2ZmNjQwMDAwZTJiZDU1YjI2ZTI3O2ZmNjUwMDAxMzQzMDY2YjdhNDA3O2ZmNmEwMDAxZjNiYjE4NGQ2YjAwO2ZmNzMwMDAwOWQ1ZGJlZjdmNWViO2ZmNzMwMDAwOWQ1ZmIxYzBhN2VhO2ZmNzcwMDAxODhjOGMxMjQyOTdkO2ZmOGQwMDAxOGU4N2Y1OGZjYmVjO2ZmOTQwMDAxYzc0NzYzNTIxZDVlO2ZmOTYwMDAwYzFlMTgxYTRkZTBlO2ZmOTgwMDAwYzBhMjAzZWIzNGJiO2ZmOWEwMDAxYzc5NDgwNDQzNzk4O2ZmYTAwMDAxYzUwYWRhNTY1MDViO2ZmYTQwMDAwZTc1NzQyZTcyZDdjO2ZmYTQwMDAwZTkzMTA2NmFmYzQ3O2ZmYTkwMDAwZTdkNmY5YzgzMTllO2ZmYWQwMDAxMjQ2ZWNjOGRjMWM2O2ZmYmEwMDAxN2JlZDkxNDhhNzQ0O2ZmY2EwMDAwYmI5ZmI1ZTU5ZjFmO2ZmY2MwMDAwZGUxYzE4ODg2MjIzO2ZmY2QwMDAxN2VkMGJkNDc2YWFmO2ZmZDEwMDAwODYwNTBjNDUyMDE1O2ZmZDIwMDAwOTBiMzk1NjdmZWQ1O2ZmZDQwMDAxMzNhOTkyZDZmZWFhO2ZmZDUwMDAwYTZhM2MwOGYyZjY1O2ZmZDcwMDAwZWYxOTljMzJkYzdiO2ZmZGIwMDAwODQ4YTZhYzExM2Y1O2ZmZTIwMDAxMjE4YjNjZTZjY2ZmO2ZmZTMwMDAwYTNmYzRlODQyMTBjO2ZmZTkwMDAwZGFmMWI3YmY3MjZkO2ZmZWMwMDAxNzAyMWMwMjhiM2ZkO2ZmZjQwMDAwZTRmOGYyNzdhNmJkO2ZmZjkwMDAxYTdkNzMzNzQ0N2NmIi50cmltKCkuc3BsaXQoLzsvKSwgaXNWYWxpZFVybFJlZ2V4ID0gL14oaHR0cHxcL1wvKS8sIGlzVmlkZW9VcmxSZWdleCA9IC9cLihtcDR8bTN1OHwzZ3B8d212fGZsdnxhdml8cm12YnxtNHYpfG0zdThwbGF5LnBocC8sIHZpZGVvRXh0UmVnZXggPSAvKG1wNHxtM3U4fDNncHx3bXZ8Zmx2fGF2aXxybXZifG00dikvLCBzaG9ydFZpZGVvVXJsUmVnZXggPSAvXC9cLyhbXlwvXSspXC8oLipcLyk/KFteXC9dKylcLihtcDR8bTN1OHwzZ3B8d212fGZsdnxhdml8cm12YnxtNHYpLywgc2hvcnRWaWRlb1VybExvc2VSZWdleCA9IC9cL1wvKFteXC9dKylcLyguKlteXC9dKVwvPyhtcDR8bTN1OHwzZ3B8d212fGZsdnxhdml8cm12YnxtNHYpLywgaXNPbmx5RG93bmxvYWRWaWRlb1VybFJlZ2V4ID0gLy50aXRhbi5tZ3R2LmNvbS8sIGlzSW52YWxpZFNuaWZmVXJsUmVnZXggPSAvYnRyYWNlLnZpZGVvLnFxLmNvbXxsbXNqeS5xcS5jb218dmxpdmUucXF2aWRlby50Yy5xcS5jb218cXpvbmVzdHlsZS5ndGltZy5jbnxpbWcuYmFpZHUuY29tfGRwbGF5ZXJcL1x3Ky5tcDR8dmlwLmZ3d215MS5jbnxjb20tdC1pcWl5aS5jb218aHoxODljbG91ZC5vb3MtaHouY3R5dW5hcGkuY258dmlkZW8uZGEubWd0di5jb218KHRpdGFuLm1ndHYuY29tfGNkbi5vc3MtY24uYWxpeXVuY3MuY29tLmdtcy1saWdodGluZy5jb20pLittM3U4fGppZXNodW8tb2t6eS5jb218bWFuaG9vLmNufFwvezN9fFwuKGpzfGNzcykvLCBQdXJpZnlLZXl3b3JkUmVnZXggPSAvLirjgIp844CLLip8Wy1cc10q56ysLnsxLDN9W+Wto+mbhuivnemDqF0uKnxccytcZHsyLDN9XHMqJC9nLCBDb21tb25TZWFyY2hLZXl3b3JkUmVnZXggPSAvKHdkfGtleXxrZXl3b3JkfHNlYXJjaHdvcmR8cXVlcnl8a3d8cXxzZWFyY2hzdHIpPShbXiZcP1wvXC4tXSspfChzZWFyY2hcL3xzZWFjaGVyLXxxXykoW14mXD9cL1wuLV0rKS9pLCBjb2xsYXBzZU51bSA9IGlzTW9iaWxlID8gOCA6IDEyOwogIGxldCBvb1BsYXlVcmwgPSAiIiwgaXNTa2lwQWRWaWRlbyA9IFN0b3JlLmdldCgiaXNTa2lwQWRWaWRlbyIsICEwKSwgU0VBUkNIX1VSTFMgPSAi8J+QtuixhueTo++8iOm4v+iSme+8iSAgaHR0cHM6Ly9zZWFyY2guZG91YmFuLmNvbS9tb3ZpZS9zdWJqZWN0X3NlYXJjaD9zZWFyY2hfdGV4dD0qKiAgaHR0cHM6Ly9tLmRvdWJhbi5jb20vc2VhcmNoLz90eXBlPW1vdmllJnF1ZXJ5PSoqXG5cbvCfkLFBUVnniLEgIGh0dHBzOi8vbS5pcWl5aS5jb20vc2VhcmNoLmh0bWw/c291cmNlPWRlZmF1bHQma2V5PSoqICBodHRwczovL3NvLmlxaXlpLmNvbS9zby9xXyoqXG5cbvCfkK1ZS+S8mCAgaHR0cHM6Ly9zZWFyY2gueW91a3UuY29tL3NlYXJjaF92aWRlbz9rZXl3b3JkPSoqICBodHRwczovL3NvLnlvdWt1LmNvbS9zZWFyY2hfdmlkZW8vcV8qKlxuXG7wn5C5VFjohb4gIGh0dHBzOi8vbS52LnFxLmNvbS9zZWFyY2guaHRtbD9hY3Q9MCZrZXlXb3JkPSoqICAgaHR0cHM6Ly92LnFxLmNvbS94L3NlYXJjaC8/cT0qKlxuXG7wn5CwTeiKkuaenCAgaHR0cHM6Ly9tLm1ndHYuY29tL3NvP2s9KiogIGh0dHBzOi8vc28ubWd0di5jb20vc28/az0qKlxuXG7wn5C7MTkwNSAgaHR0cHM6Ly92aXAuMTkwNS5jb20vU2VhcmNoP3E9Kipcblxu8J+milNP54uQICBodHRwczovL20udHYuc29odS5jb20vdXBsb2FkL2g1L20vbXNvLmh0bWw/a2V5PSoqICBodHRwczovL3NvLnR2LnNvaHUuY29tL210cz93ZD0qKlxuXG7wn5C855m+5bqm5pCcICBodHRwczovL3d3dy5iYWlkdS5jb20vcz93ZD0qKlxuXG7wn5CoQuermSAgaHR0cHM6Ly9zZWFyY2guYmlsaWJpbGkuY29tL2FsbD9rZXl3b3JkPSoqXG5cbvCfkK/ojLbmna/ni5AgIGh0dHBzOi8vd3d3LmN1cGZveC5jb20vc2VhcmNoP2tleT0qKlxuXG7wn6aB5ZOU5ZiAICBodHRwczovL3d3dy5tcDRlci5jb20vc2VhcmNoLyoqXG5cbvCfkK7nnJ/kuI3ljaEgaHR0cHM6Ly93d3cuemhlbmJ1a2EyLmNvbS92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS8/d2Q9Kipcblxu8J+Qt1ZJUOW9semZoiAgaHR0cHM6Ly9idWthaXZpcC5jb20vaW5kZXgucGhwL3ZvZC9zZWFyY2guaHRtbD93ZD0qKlxuXG7wn5C4QWsxMDgwICBodHRwczovL3d3dy5hazEwODAuY29tL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9Kipcblxu8J+OruWwj+mcuOeOiyBodHRwczovL3d3dy55aWttLm5ldC9zZWFyY2g/bmFtZT0qKlxuXG7wn5O655S16KeG55u05pKtIGh0dHA6Ly9tLmlwdHY4MDcuY29tLz90aWQ9Kipcblxu8J+Ul+ejgeWKm+WymyAgaHR0cHM6Ly9idDEwNS54eXovc2VhcmNoP2tleXdvcmQ9Kipcblxu8J+QgeaWsOeJh+WcuiBodHRwczovL3d3dy54aW5waWFuY2hhbmcuY29tL3NlYXJjaD9rdz0qKlxuXG7wn42XRjjnlLXlvbEgaHR0cHM6Ly93d3cuZjh5eS5jb20vdm9kc2VhcmNoL3NvLmh0bWw/d2Q9Kipcblxu8J+Qizg46Kej5p6QIGh0dHBzOi8vYXBpLjg4amlleGkuY29tL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9Kipcblxu8J+QtTEwOTAgIGh0dHA6Ly8xMDkweXMyLmNvbS9zZWFyY2guaHRtbD93ZD0qKiZzdWJtaXQ9XG5cbvCfkJTov73liafkurogICBodHRwOi8vdmlwbXYudHYvaW5kZXgucGhwL3ZvZC9zZWFyY2guaHRtbD93ZD0qKiZzdWJtaXQ9XG5cbvCfkKfov73liaflkKcgIGh0dHA6Ly93d3cuemp1OC5jYy92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS8/d2Q9Kipcblxu8J+Qpui/veWJp+eciyAgaHR0cHM6Ly93d3cuemh1aWp1a2FuLmNvbS92b2Qtc2VhcmNoLXdkLSoqLmh0bWxcblzwn5CkVklQ6L+95YmnICBodHRwOi8vemh1aWp1OC52aXAvaW5kZXgucGhwL3ZvZC9zZWFyY2guaHRtbD93ZD0qKiZzdWJtaXQ9XG5cbvCfkKPmnoHlk4EgaHR0cHM6Ly93d3cuanB5c3ZpcC5uZXQvdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKiZzdWJtaXQ9XG5cbvCfpobnpZ7pqawgIGh0dHBzOi8vd3d3LnNoZW5tYTQ0ODAuY29tL3NlYXJjaC8tLS0tLS0tLS0tLS0tLz93ZD0qKlxuXG7wn6aF6aOe5p6B6YCfICBodHRwOi8vbS5mZWlqaXN1OC5jb20vc2VhcmNoLyoqICBodHRwOi8vZmVpamlzdTguY29tL3NlYXJjaC8qKlxuXG7wn6aJ6L+q6L+qICBodHRwOi8vd3d3LnR2NTUyLmNvbS9pbmRleC5waHAvdm9kL3NlYXJjaC5odG1sP3dkPSoqJnN1Ym1pdD1cblxu8J+mh+aAneWPpCAgaHR0cHM6Ly93d3cuc2lndXl5LmNvbS9zZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqJnN1Ym1pdD1uXG7wn5C6OTHnvo7liacgIGh0dHBzOi8vOTFtancuY29tLz9zPSoqXG5cbvCfkJc5MeaXpeWJpyAgaHR0cDovL3d3dy53d211bHUuY29tL3NlYXJjaC8qKlxuXG5UVkIgIGh0dHBzOi8vd3d3LmhrdHZ5Yi5jb20vdm9kL3NlYXJjaC5odG1sP3dkPSoqXG5cbvCfkLRaWHpqICBodHRwczovL3d3dy56eHpqLm1lL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9Kipcblxu8J+mhERZc2YgIGh0dHBzOi8vd3d3LmJkZHlzZi5jb20vdm9kc2VhcmNoLmh0bWw/d2Q9Kiomc3VibWl0PVxuXG7wn5Cd6aWt5ZuiICBodHRwczovL2ZhbnR1YW4udHYvdm9kc2VhcmNoLmh0bWw/d2Q9Kiomc3VibWl0PVxuXG7wn5Cb5bmy6aWtICBodHRwczovL3d3dy5nYW5mYW50di5jb20vc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKiZzdWJtaXQ9XG5cbvCfpovok53lhYkgIGh0dHBzOi8vd3d3Ljg4OGtrdHYuY29tL3ZvZC9zZWFyY2guaHRtbD93ZD0qKiZzdWJtaXQ9blxu8J+QouS5jOm+nyAgaHR0cHM6Ly93d3cud3VndWl5eS5jb20vc2VhcmNoLy0tLS0tLS0tLS0tLS0vP3dkPSoqJnN1Ym1pdD1cblxu8J+QnkNvS2VtdiAgaHR0cHM6Ly9jb2tlbXYubWUvdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKiZzdWJtaXQ9XG5cbvCfkIxDaG9rOCAgaHR0cDovL3d3dy5jaG9rOC5jb20vdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKiZzdWJtaXQ9XG5cbvCfpoDlpKfluIjlhYQgIGh0dHBzOi8vdHYuY2kvc2Iva2U3bmhaZTNjLS5odG1sP3dkPSoqJnN1Ym1pdD1cblxu8J+mkeKRpOKRpOKRpCAgaHR0cHM6Ly93d3cuNTU1ZHkxLmNvbS92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqJnN1Ym1pdD1cblxu8J+mluWkquWInSAgaHR0cHM6Ly93d3cudGNtb3ZlLmNvbS9zZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqXG5cbvCfppXlsI/lsI8gIGh0dHBzOi8vd3NkeS50b3Avdm9kc2VhcmNoL3NvLmh0bWw/d2Q9Kipcblxu8J+mkOeLrOaSreW6kyAgaHR0cHM6Ly9kdWJva3Uuc3Uvdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKiZzdWJtaXQ9XG5cbvCfkKDlt6jlpb3nnIsgIGh0dHBzOi8vanVoYW9rYW4uY2Mvdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKiZzdWJtaXQ9XG5cbvCfkJ/mnqvmnpfnvZEgIGh0dHBzOi8vaW1hcGxlLmNvL3NlYXJjaC5odG1sP3dkPSoqJnN1Ym1pdD1cblzwn5Ch6Zi/5oi/ICBodHRwczovL2J3bDg3LmNvbS9zZWFyY2gvLS0tLS0tLS0tLS0tLS8/d2Q9Kiomc3VibWl0PVxuXPCfkKzntKDnmb3nmb0gIGh0dHBzOi8vd3d3LnN1YmFpYmFpLmNvbS8/cz0qKm5cbvCfkLNCROS4i+i9vSAgaHR0cHM6Ly93d3cuYmQtZmlsbS5jb20vc2VhcmNoLmpzcHg/cT0qKlxuXG7wn5CKTVA05LiL6L29ICBodHRwczovL3d3dy51dW1wNC5uZXQvc2VhcmNoLSoqLmh0bVxuXG7wn5CGQUdFICBodHRwczovL3d3dy5hZ2VmYW5zLmNjL3NlYXJjaD9xdWVyeT0ja2V5d29yZCMmcGFnZT0xXG5cbvCfkIXmqLHoirEgIGh0dHBzOi8vd3d3LnloZG16LmNvbS9zZWFyY2gucGhwP3NlYXJjaHdvcmQ9Kipcblxu8J+mk+i/heaSrSAgaHR0cHM6Ly93d3cueGJkbS5vcmcvc2VhcmNoLnBocD9zZWFyY2h3b3JkPSoqXG5cbvCfkINaenpGdW4gIGh0dHA6Ly93d3cuenp6ZnVuLmNvbS92b2Rfc2VhcmNoLmh0bWw/d2Q9Kipcblxu8J+QguWmruWPryAgaHR0cDovL3d3dy5uaWNvdHYubWUvdmlkZW8vc2VhcmNoLyoqLmh0bWxcblxu8J+QhOasoeWFgyAgaHR0cHM6Ly9jeWxvbGkuY29tL3ZvZHNlYXJjaC8qKi0tLS0tLS0tLS0xLS0tL1xuXG7wn6aMTWlrYW4gIGh0dHBzOi8vbWlrYW5hbmkubWUvSG9tZS9TZWFyY2g/c2VhcmNoc3RyPSoqIjsKICBjb25zdCBBRERPTlMgPSBbIHsKICAgIG5hbWU6ICLlk5Tlk6nlk5Tlk6kiLAogICAgbWF0Y2g6ICIuYmlsaWJpbGkuY29tIiwKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL1wvc2VhcmNofHNlYXJjaFwuLywKICAgICAganVtcDogIiNhbGwtbGlzdCB8IGFwcGVuZCwgLmluZGV4X19ib2FyZF9fc3JjLXNlYXJjaC1ib2FyZC0iCiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL1wvYmFuZ3VtaVwvcGxheVwvLywKICAgICAgdGl0bGU6ICIubWVkaWEtdGl0bGUsIC5lcC1pbmZvLXRpdGxlIiwKICAgICAganVtcCgpIHsKICAgICAgICAkJCgiLmVwLWluZm8taW1hZ2UgaW1nLCAubWVkaWEtY292ZXIgaW1nIiwgKGZ1bmN0aW9uKCkgewogICAgICAgICAgY29uc3QgbiA9ICQoIi5tZWRpYS10aXRsZSwgLmVwLWluZm8tdGl0bGUiKS5lcSgwKS50ZXh0KCk7CiAgICAgICAgICBuICYmIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpbnNlcnRTZWFyY2hBZGRvbihuLCAiLm1lZGlhLXdyYXBwZXIsIC5lcC1saXN0LXByZS13cmFwcGVyIik7CiAgICAgICAgICB9KSwgNTAwKTsKICAgICAgICB9KSk7CiAgICAgIH0KICAgIH0sCiAgICBoaWRlOiAiLmluZGV4X19vcGVuQXBwQnRuX19zcmMtY29tbW9uQ29tcG9uZW50LXRvcEFyZWEtLCAuaW5kZXhfX2NvbnRhaW5lcl9fc3JjLWNvbW1vbkNvbXBvbmVudC1ib3R0b21PcGVuQXBwLSwgLmJpbGktYXBwLCAucmVjb20td3JhcHBlciwgLmItZm9vdGVyLCAub3Blbi1hcHAtYmFyLCAub3Blbi1hcHAtZmxvYXQsIC5tb3JlLXJldmlldy13cmFwcGVyLCAjYmFubmVyQWQsIC5iYW5uZXItY2FyZCwgI3NsaWRlX2FkIgogIH0sIHsKICAgIG5hbWU6ICLohb7orq/op4bpopEiLAogICAgbWF0Y2g6ICJ2LnFxLmNvbSIsCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC9cL3NlYXJjaC8sCiAgICAgIGp1bXA6ICIjcmVzdWx0LCAud3JhcHBlcl9tYWluID4gLm1vZF9wYWdlcyIKICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvXC8oY292ZXJ8cGxheXx4XC9jb3Zlcnx4XC9wYWdlfHhcL3BsYXl8eFwvbVwvY292ZXJ8eFwvbVwvcGFnZXx4XC9tXC9wbGF5KS8sCiAgICAgIHZpcDogIiN2aXBfdGl0bGUsIC5VX2JveF9iZ19hLCAucGxheWVyX2hlYWRsaW5lLCAubW9kX3ZpZGVvX2luZm8iLAogICAgICB0aXRsZTogIi5tb2RfdmlkZW9faW5mbyAudmlkZW9fdGl0bGUsIC5fbWFpbl90aXRsZSwgLnBsYXllcl90aXRsZSIsCiAgICAgIGZpeFVybChuKSB7CiAgICAgICAgaWYgKG4uaW5jbHVkZXMoImNpZD0iKSkgewogICAgICAgICAgY29uc3QgZSA9IG4ubWF0Y2goL2NpZD0oXHcrKS8pWzFdOwogICAgICAgICAgbGV0IHQgPSBuLm1hdGNoKC92aWQ9KFx3KykvKTsKICAgICAgICAgIHJldHVybiB0ID0gdCA/ICIvIiArIHRbMV0gOiAiIiwgImh0dHBzOi8vdi5xcS5jb20veC9jb3Zlci8iICsgZSArIHQgKyAiLmh0bWwiOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbi5pbmNsdWRlcygiL3gvY292ZXIiKSA/IG4ucmVwbGFjZSgvXC5odG1sLiovLCAiLmh0bWwiKSA6IG47CiAgICAgIH0sCiAgICAgIGFzeW5jIGpzKCkgewogICAgICAgIGlmIChza2lwQWRWaWRlb1dyYXBwZXIoKGZ1bmN0aW9uKCkgewogICAgICAgICAgaXNNb2JpbGUgPyBza2lwQWRWaWRlbygiLnR4cF92aWRlb19jb250YWluZXIgdmlkZW9bc3JjXSIsICEvdmxpdmUucXF2aWRlby50Yy5xcS5jb20vLnRlc3QodmlkZW8uc3JjKSkgOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIudHhwX2FkIHZpZGVvW3NyY10iKSAmJiAoJCgiLnR4cF9hZCB2aWRlb1tzcmNdIikuZWFjaCgoZnVuY3Rpb24obiwgZSkgewogICAgICAgICAgICBza2lwQWRWaWRlbyhlKTsKICAgICAgICAgIH0pKSwgdG9nZ2xlU2tpcEFkVGlwKCIudHhwX2FkIikpOwogICAgICAgIH0pKSwgaXNNb2JpbGUpIHsKICAgICAgICAgIGxldCBuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3BsYXlfc3luYyIpLCBlID0gbiAmJiBuLnZhbHVlOwogICAgICAgICAgaWYgKCFlKSB7CiAgICAgICAgICAgIGNvbnN0IG4gPSAoYXdhaXQgZmV0Y2gobG9jYXRpb24uaHJlZikudGhlbigoZnVuY3Rpb24obikgewogICAgICAgICAgICAgIHJldHVybiBuLnRleHQoKTsKICAgICAgICAgICAgfSkpKS5tYXRjaCgvaWQ9WyciXXBsYXlfc3luYy4rP3ZhbHVlPVsnIl0oW14nIl0rKS8pOwogICAgICAgICAgICBuICYmIChlID0gblsxXSk7CiAgICAgICAgICB9CiAgICAgICAgICBlICYmIChlID0gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQoZSkpLCBjb25zb2xlLmNvbnNvbGUubG9nKGUpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBoaWRlOiAnLm1vZF9zb3VyY2UsIC52aWRlb19mdW5jdGlvbiwgLm1vZF9wcm9tb3Rpb24sICN2aXBfcHJpdmlsZWdlLCAjdmlwX2FjdGl2aXR5LCAuVV9iZ19iLCAuYnRuX29wZW5fdiwgLmJ0bl9vcGVuYXBwLCAjdmlwX2hlYWRlciwgLmJ0bl91c2VyX2hkLCAubW9kX3NpZGVzbGlwX3ByaXZpbGVnZXMsIC5tb2RfZ2FtZV9yZWMsIC5tb2Rfc291cmNlLCAubW9kX3Byb21vdGlvbiwgLm1vZF9zaWRlc2xpcF9oLCAuYnRuX29wZW4sIC5idG5fcGF5LCAubW9kX2JveF9sYXN0dmlldywgLm1vZF92aXBfcG9wdXAsIC5tb2RfdmlwX3BvcHVwICsgLm1hc2tfbGF5ZXIsIHR4cGRpdltkYXRhLXJvbGU9ImhkLWFkLWFkYXB0ZXItaW50ZXJhY3RpdmVsYXllciJdLCAubW9kX2FkLCAudHZwX2FwcF9iYXIsIC50eHAtd2F0ZXJtYXJrLCAubW9kX3JlY29tbWVuZCcsCiAgICBjc3M6ICJcbmJvZHksICN2aXBfdGl0bGUge3BhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7fS5tb2RfZXBpc29kZXNfbnVtYmVycy5pcy12aXAgLml0ZW0ge3dpZHRoOiBhdXRvO3BhZGRpbmc6IDAgMWVtO30uVV9odG1sX2JnIC5jb250YWluZXIge3BhZGRpbmctYm90dG9tOiAzMHB4O30ubW9kX3BsYXkgLm1vZF9wbGF5ZXJfdmlwdGlwcyAuYnRuX3RyeSB7bGVmdDogMzAlO30ubW9kX2JveCAubW9kX3ZpZGVvX2luZm8ge21hcmdpbi10b3A6IDFlbTt9IgogIH0sIHsKICAgIG5hbWU6ICLniLHlpYfoiboiLAogICAgbWF0Y2g6ICIuaXFpeWkuY29tIiwKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL1wvc2VhcmNofHNvXC5pcWl5aS8sCiAgICAgIGp1bXA6ICItLm0tYm94LCAubGF5b3V0LW1haW4sIC5zZWFyY2gtY29uLXBhZ2UiCiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL1wvdl8vLAogICAgICB2aXA6ICdkaXZbbmFtZT0ibS12aWRlb0luZm8iXSwgI2Jsb2NrLUMsIC5vLS1wYyAudHctcGxheS1pbmZvLXdyYXAgLnR3LXBsYXktaW5mbywgLm8tLW0gLnR3LW0tcGxheS1pbmZvIC5tLXBsYXktaW50cm8nLAogICAgICB0aXRsZTogIiN3aWRnZXQtdmlkZW90aXRsZSwgLnZpZGVvLXRpdGxlLCAuYy10aXRsZS1saW5rLCAucGxheWVyLXRpdGxlIGEsIC50dy1wbGF5LXRpdGxlIC5kcmFtYS1uYW1lLCAudHctcGxheS10aXRsZSIsCiAgICAgIGZpeFVybDogbiA9PiBuLnJlcGxhY2UoL1wuaHRtbC4qLywgIi5odG1sIikucmVwbGFjZSgidHcuIiwgInd3dy4iKSwKICAgICAganMoKSB7CiAgICAgICAgbGV0IG4gPSBbXSwgZSA9ICgkKCdbbmFtZT0iYXBwbGUtaXR1bmVzLWFwcCJdJykuYXR0cigiY29udGVudCIpIHx8ICIiKS5tYXRjaCgvYWlkPVxkezIsfS8pOwogICAgICAgIGlmIChlKSB7CiAgICAgICAgICBmZXRjaCgiaHR0cHM6Ly9wY3ctYXBpLmlxaXlpLmNvbS9hbGJ1bXMvYWxidW0vYXZsaXN0aW5mbz9wYWdlPTEmc2l6ZT05OTk5JiIgKyBlWzBdKS50aGVuKChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgIHJldHVybiBuLmpzb24oKTsKICAgICAgICAgIH0pKS50aGVuKChmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIG4gPSBlLmRhdGEuZXBzb2RlbGlzdDsKICAgICAgICAgIH0pKTsKICAgICAgICAgIGxldCB0ID0gMDsKICAgICAgICAgIHNldEludGVydmFsKChmdW5jdGlvbigpIHsKICAgICAgICAgICAgbGV0IGUgPSArKCQoIi5xeS1lcGlzb2RlLW51bSAuc2VsZWN0LWl0ZW0uc2VsZWN0ZWQgLnNlbGVjdC1saW5rIikudGV4dCgpIHx8IDApOwogICAgICAgICAgICBpZiAoZSAmJiBlICE9PSB0KSB7CiAgICAgICAgICAgICAgdCA9IGU7CiAgICAgICAgICAgICAgbGV0IGkgPSBuW3QgLSAxXTsKICAgICAgICAgICAgICBpZiAoaSkgewogICAgICAgICAgICAgICAgbGV0IG4gPSBpLnBsYXlVcmwucmVwbGFjZSgvaHR0cHM/Oi8sIGxvY2F0aW9uLnByb3RvY29sKTsKICAgICAgICAgICAgICAgIGlmIChuICE9PSBvb1BsYXlVcmwpIHsKICAgICAgICAgICAgICAgICAgY29uc3QgZSA9IG9vUGxheVVybCB8fCBsb2NhdGlvbi5ocmVmOwogICAgICAgICAgICAgICAgICBvb1BsYXlVcmwgPSBuOwogICAgICAgICAgICAgICAgICBjb25zdCB0ID0gKCQoIi5xeS1lcGlzb2RlLW51bSAuc2VsZWN0LWl0ZW0uc2VsZWN0ZWQgLmljb24tdHIgaW1nIikuYXR0cigic3JjIikgfHwgIiIpLmluY2x1ZGVzKCItcHJlLSIpOwogICAgICAgICAgICAgICAgICBFLmVtaXQoInVybC5jaGFuZ2UiLCB7CiAgICAgICAgICAgICAgICAgICAgb2xkVXJsOiBlLAogICAgICAgICAgICAgICAgICAgIG5ld1VybDogbiwKICAgICAgICAgICAgICAgICAgICBhdXRvUGxheTogIXQKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9KSwgMjAwKTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzTW9iaWxlKSByZXR1cm47CiAgICAgICAgbGV0IHQgPSAwOwogICAgICAgIHNraXBBZFZpZGVvV3JhcHBlcigoZnVuY3Rpb24oKSB7CiAgICAgICAgICBpZiAoMCA9PT0gdCAmJiAwIDwgJCgiLmN1cGlkLXB1YmxpYy10aW1lIikubGVuZ3RoICYmICJub25lIiAhPT0gJCgiLmN1cGlkLXB1YmxpYy10aW1lIikuY3NzKCJkaXNwbGF5IikpIHsKICAgICAgICAgICAgZ2V0R2xvYmFsKCJEYXRlIikubm93ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgcmV0dXJuIChuZXcgd2luZG93LkRhdGUpLmdldFRpbWUoKSArICh0ICs9IDFlNCk7CiAgICAgICAgICAgIH0sIHNldEludGVydmFsKChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICB0ID0gMDsKICAgICAgICAgICAgfSksIDZlNSk7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmlxcC1wbGF5ZXIgdmlkZW8iKTsKICAgICAgICAgIGlmIChuICYmICFuLmlzU2tpcCAmJiAxIDwgbi5yZWFkeVN0YXRlICYmIDAgPCAkKCIuYm90dG9tLXB1YmxpYyIpLmxlbmd0aCAmJiAibm9uZSIgIT09ICQoIi5ib3R0b20tcHVibGljIikuY3NzKCJkaXNwbGF5IikpIHsKICAgICAgICAgICAgY29uc3QgbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5za2lwcGFibGUtYWZ0ZXIiKTsKICAgICAgICAgICAgbiAmJiAhbi5pc1NraXBDbGljayAmJiAoaXNTa2lwQ2xpY2sgPSAhMCwgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgbi5jbGljaygpLCBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIG4uaXNTa2lwQ2xpY2sgPSAhMTsKICAgICAgICAgICAgICB9KSwgMWUzKTsKICAgICAgICAgICAgfSksIDFlMykpOwogICAgICAgICAgfQogICAgICAgIH0pKTsKICAgICAgfQogICAgfSwKICAgIGhpZGU6ICcubS1pcXlEb3duLCAuaGVhZGVyLWxvZ2luICsgZGl2LCAubS12aWRlby1hY3Rpb24sIGRpdltuYW1lPSJtLXZpcFJpZ2h0cyJdLCBkaXZbbmFtZT0ibS1leHRlbmRCYXIiXSwgLm0taXF5bGluay1kaXZlcnNpb24sIC5tLWlxeWxpbmstZ3VpZGUsIC5jLW9wZW5WaXAsIC5jLXNjb3JlLWJ0biwgLm0tdmlkZW9Vc2VyLXNwYWNpbmcsIC5tLXBwLWVudHJhbmNlLCAubS1ob3RXb3Jkcy1ib3R0b20sIGRpdlt0ZW1wbGF0ZS10eXBlPSJBTEJVTSJdIC5tLXBsYXllci10aXAsIC5pcXAtYm94LWludGVncmFsLCAuYnRuLXRpY2tldCwgLmJ0bi15dXl1ZSwgLmJ0bi1kb3dubG9hZCwgLm0taXF5RG93biwgLmlxcC1wbGF5ZXIgZGl2W2FkaWRdLCAuZGV0YWlsLXNkLCAuc2Nyb2xsLWFuY2hvciA+ICo6bm90KDpsYXN0LWNoaWxkKSwgI2lQcm9ncmVzcyB+IGRpdltzdHlsZV0nLAogICAgY3NzOiAnLnBhZ2VfcGxheSB7cGFkZGluZy1ib3R0b206IDA7fWRpdltuYW1lPSJtLXZpZGVvSW5mbyJdIHtwYWRkaW5nLXRvcDogMWVtO30ubS1ib3gtaXRlbXMgLm8tLWFsYnVtLWl0ZW0ge2JvcmRlci1yYWRpdXM6IDAuMDVlbTtiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO2NvbG9yOiAjNDk1MDU3O3BhZGRpbmc6IDAuNWVtIDFlbTtkaXNwbGF5OiBpbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjthbGlnbi1pdGVtczogY2VudGVyO21hcmdpbjogMC4yNWVtO2ZvbnQtd2VpZ2h0OiBib2xkO30ubS12aWRlby1wbGF5ZXIgI28tLXBsYXllci1pZnJhbWUge3BhZGRpbmctdG9wOiA1Ni4yNSU7dG9wOiA1MCU7dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO30ucXktaGVhZGVyIC5oZWFkZXItd3JhcCB7ei1pbmRleDogJyArIE1BWF9aX0lOREVYICsgIjt9IgogIH0sIHsKICAgIG5hbWU6ICLkvJjphbciLAogICAgbWF0Y2g6IC95b3VrdS5jb218c29rdS5jb20vLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvc29rdS5jb21cL20uK3E9fHlvdWt1LmNvbVwvc2VhcmNoX3ZpZGVvLywKICAgICAganVtcDogJyNicG1vZHVsZS1tYWluLCAueWtfcmVzdWx0LCBkaXZbY2xhc3NePSJwYWdpbmF0aW9uLWJveCJdLCAueWstZm9vdGVyIHwgYmVmb3JlJwogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC95b3VrdVwuY29tXC9bYXZdLywKICAgICAgdmlwOiAiLmg1LWRldGFpbC1pbmZvLCAucGxheWVyLXRpdGxlIiwKICAgICAgdGl0bGU6ICIucGxheWVyLXRpdGxlIC5zdWJ0aXRsZSBhLCAubW9kdWxlLW5hbWUgaDEsIC5hbnRob2xvZ3ktdGl0bGUtd3JhcCAudGl0bGUsIC50aXRsZS1saW5rIiwKICAgICAgZml4VXJsOiAhMCwKICAgICAganMoKSB7CiAgICAgICAgaXNNb2JpbGUgfHwgKHNraXBBZFZpZGVvV3JhcHBlcigoZnVuY3Rpb24oKSB7CiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuaDUtZXh0LWxheWVyIHZpZGVvW3NyY10iKSAmJiAoJCgiLmg1LWV4dC1sYXllciB2aWRlb1tzcmNdIikuZWFjaCgoZnVuY3Rpb24obiwgZSkgewogICAgICAgICAgICBlLm11dGVkID0gITAsIGUudm9sdW1lID0gMCwgc2tpcEFkVmlkZW8oZSk7CiAgICAgICAgICB9KSksIHRvZ2dsZVNraXBBZFRpcCgiLmg1LWV4dC1sYXllciIpKTsKICAgICAgICB9KSksICQkKCIuaDUtZXh0LWxheWVyIHZpZGVvW3NyY10iLCAoZnVuY3Rpb24oKSB7CiAgICAgICAgICBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgICAgICAgJCgiLmg1LWV4dC1sYXllciwgLnlrLXRyaWdnZXItbGF5ZXIiKS5hZGRDbGFzcygiby0taGlkZSIpOwogICAgICAgICAgICBsZXQgbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi55b3VrdS1wbGF5ZXIgdmlkZW8iKTsKICAgICAgICAgICAgaWYgKCFuKSByZXR1cm47CiAgICAgICAgICAgIG4ubXV0ZWQgPSAhMSwgLjAxID49IG4udm9sdW1lICYmIChuLnZvbHVtZSA9IC40KSwgbi5wYXVzZWQgJiYgbi5wbGF5KCk7CiAgICAgICAgICAgIGxldCBlID0gITE7CiAgICAgICAgICAgICQoIi5oNS1sYXllci1jb25hdGluZXIiKS5jc3MoImN1cnNvciIsICJwb2ludGVyIikub2ZmKCJjbGljayIpLm9uKCJjbGljayIsIChmdW5jdGlvbih0KSB7CiAgICAgICAgICAgICAgJCh0LnRhcmdldCkuaGFzQ2xhc3MoImg1LWxheWVyLWNvbmF0aW5lciIpICYmICh0LnByZXZlbnREZWZhdWx0KCksIHQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksCiAgICAgICAgICAgICAgZSA9ICFuLnBhdXNlZCwgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBuLnBhdXNlZCA9PT0gZSB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuaDVwbGF5ZXItZGFzaGJvYXJkIC5jb250cm9sLXBsYXktaWNvbiIpLmNsaWNrKCk7CiAgICAgICAgICAgICAgfSksIDEwMCkpOwogICAgICAgICAgICB9KSk7CiAgICAgICAgICB9KSwgMWUzKTsKICAgICAgICB9KSksICQkKCIucXVhbGl0eS1kYXNoYm9hcmQgLnlvdWt1X3ZpcF9wYXlfYnRuLCAucXVhbGl0eS1kYXNoYm9hcmQgLmxvZ2luLWNhbnVzZSIsIChmdW5jdGlvbigpIHsKICAgICAgICAgICQoIi5xdWFsaXR5LWRhc2hib2FyZCAueW91a3VfdmlwX3BheV9idG4sIC5xdWFsaXR5LWRhc2hib2FyZCAubG9naW4tY2FudXNlIikucmVtb3ZlQ2xhc3MoInlvdWt1X3ZpcF9wYXlfYnRuIGRpc2FibGUgbG9naW4tY2FudXNlIiksCiAgICAgICAgICAkKCIucXVhbGl0eS1pdGVtIikub24oImNsaWNrIiwgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAkKCIuaDVwbGF5ZXItZGFzaGJvYXJkIC5jb250cm9sLXBsYXktaWNvbiIpLmhhc0NsYXNzKCJjb250cm9sLXBhdXNlLWljb24iKSB8fCAkKCIuaDUtbGF5ZXItY29uYXRpbmVyIikuZ2V0KDApLmNsaWNrKCksCiAgICAgICAgICAgICAgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAkKCIuaDVwbGF5ZXItZGFzaGJvYXJkIC5jb250cm9sLXBsYXktaWNvbiIpLmhhc0NsYXNzKCJjb250cm9sLXBhdXNlLWljb24iKSB8fCAkKCIuaDUtbGF5ZXItY29uYXRpbmVyIikuZ2V0KDApLmNsaWNrKCk7CiAgICAgICAgICAgICAgfSksIDE1MDApOwogICAgICAgICAgICB9KSwgMTUwMCk7CiAgICAgICAgICB9KSk7CiAgICAgICAgfSkpKTsKICAgICAgfQogICAgfSwKICAgIGhpZGU6ICcuaDUtZGV0YWlsLWd1aWRlLCAuaDUtZGV0YWlsLWFkLCAuYnJpZWYtYnRtLCAuc21hcnRCYW5uZXJCdG4sIC5jbXQtdXNlci1hY3Rpb24sICNyaWdodC10aXRsZS1hZC1iYW5uZXIsIC5Db3JuZXItY29udGFpbmVyLCAueW91a3UtbGF5ZXItd3VsaWFvLCAucXItd3JhcCwgLnF1YWxpdHktaXRlbVtjbGFzcyo9InAiXSAudmlwLWxhYmVsLCAuYXdhcmQtcGFzcywgLmljb25zaG91Y2FuZyB+IGRpdiAubW9kYWwtcG9zaXRpb24tY29udGFpbmVyLCAuanMtdG9wLWljb24nLAogICAgY3NzOiAiXG4jYnBtb2R1bGUtcGxheXBhZ2UtbGVmdHRpdGxlIHtoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDt9LmxlZnQtdGl0bGUgLmxlZnQtdGl0bGUtY29udGVudC13cmFwIHt3aWR0aDogMTAwJTt9LnNlYXJjaC1idXR0b24tYm94IHtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7fSIKICB9LCB7CiAgICBuYW1lOiAi5Zyf6LGGIiwKICAgIG1hdGNoOiAiLnR1ZG91LmNvbSIsCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvXC92XC8vLAogICAgICB2aXA6ICIucGxheS12aWRlby1kZXNjLCAudGQtcGxheV9fYmFzZWluZm8iLAogICAgICB0aXRsZTogIi50ZC1saXN0Ym94X190aXRsZSwgLnZpZGVvLWRlc2MtdGl0bGUiLAogICAgICBmaXhVcmw6ICEwCiAgICB9LAogICAgaGlkZTogIi52aWRlby1wbGF5ZXItdG9wYmFyLCAudGQtaDVfX3BsYXllcl9fYXBwZ3VpZGUsICN0dWRvdS1mb290ZXIsIC5kcm9wZG93bl9fcGFuZWxfX2NvbiIKICB9LCB7CiAgICBuYW1lOiAi6IqS5p6cIiwKICAgIG1hdGNoOiAiLm1ndHYuY29tIiwKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL1wvc28vLAogICAgICBqdW1wOiAiI3BhZ2luYXRvciwgLmhpdHZfcGFnZSwgLS5yZXN1bHQtYm94IC5tZWRpYSIsCiAgICAgIGtleXdvcmQ6IC9rWy09XShbXiZcP1wvXC5dKykvCiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL1wvW2JsXVwvLywKICAgICAgdmlwOiBbICIueHVhbmppIHwgYmVmb3JlIiwgIi52LXBhbmVsLWJveCwgLmNvbnRyb2wtbGVmdCIgXSwKICAgICAgdGl0bGU6ICIudi1wYW5lbC10aXRsZSwgLnZ0LXR4dCwgLm0tcGxheWVyLW9wZW4gLmNvbnRyb2wtbGVmdCAudGl0bGUiLAogICAgICBmaXhVcmw6ICEwLAogICAgICBqcygpIHsKICAgICAgICBsZXQgbjsKICAgICAgICBza2lwQWRWaWRlb1dyYXBwZXIoKGZ1bmN0aW9uKCkgewogICAgICAgICAgaXNNb2JpbGUgfHwgKG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIudmlkZW8gdmlkZW9bc3JjXSIpKSAmJiAvdmlkZW8uZGEubWd0di5jb20vLnRlc3Qobi5zcmMpICYmIChza2lwQWRWaWRlbyhuKSwKICAgICAgICAgIHRvZ2dsZVNraXBBZFRpcCgiLnZpZGVvIGNvbnRhaW5lciIpKTsKICAgICAgICB9KSk7CiAgICAgIH0KICAgIH0sCiAgICBoaWRlOiAiLmFkLWJhbm5lciwgLnZpZGVvLWFyZWEtYmFyLCAudmlkZW8tZXJyb3IgLmJ0biwgLm0tdmlwLWxpc3QsIC5tLXZpcC1saXN0ICsgZGl2Om5vdChbY2xhc3NdKSwgLnRvYXBwLCAudmlkZW8tY29tbWVudCAuZnQsIC5tZy1hcHAtc3dpcCwgbWFuZ28tcGx1Z2luLWFkLCBtYW5nby1jb250cm9sLXRpcCIsCiAgICBjc3M6ICIubS1wbGF5ZXItb3BlbiAuY29udHJvbC1sZWZ0IHtmbG9hdDogdW5zZXQgIWltcG9ydGFudDt9IgogIH0sIHsKICAgIG5hbWU6ICLmkJzni5AiLAogICAgbWF0Y2g6IC8oZmlsbXx0dilcLnNvaHVcLmNvbS8sCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC8oa2V5fHdkKT0vLAogICAgICBqdW1wOiAiLnNzTW9yZSB8IGJlZm9yZSwgLnNlbGVjdC1jb250YWluZXIgfCBiZWZvcmUiCiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL1wvKHZ8YWxidW1cL3xwaG9uZV9wbGF5X2ZpbG18XGQrXC9uXGQrLnNodG1sKS8sCiAgICAgIHZpcDogIi50aXRsZS13cmFwLCAudmlkZW9JbmZvLCAudHctaW5mbywgLnBsYXllci1kZXRhaWwsIC5tb3ZpZS1pbmZvLWNvbnRlbnQiLAogICAgICB0aXRsZTogIiN2aW5mb2JveCBoMiwgLnQtaW5mbywgLm1vdmllLXQgaDMiLAogICAgICBmaXhVcmwobikgewogICAgICAgIGlmICgvcGhvbmVfcGxheV9maWxtLitjaGFubmVsZWQ9Ly50ZXN0KG4pKSB7CiAgICAgICAgICBjb25zdCBlID0gbi5tYXRjaCgvY2hhbm5lbGVkPShcdyspLylbMV07CiAgICAgICAgICByZXR1cm4gImh0dHBzOi8vZmlsbS5zb2h1LmNvbS9hbGJ1bS8iICsgbi5tYXRjaCgvYWlkPShcdyspLylbMV0gKyAiLmh0bWw/Y2hhbm5lbGVkPSIgKyBlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbjsKICAgICAgfSwKICAgICAganMoKSB7CiAgICAgICAgbGV0IG47CiAgICAgICAgc2tpcEFkVmlkZW9XcmFwcGVyKChmdW5jdGlvbigpIHsKICAgICAgICAgIGlzTW9iaWxlIHx8IChuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLngtdmlkZW8tYWR2IHZpZGVvW3NyY10iKSkgJiYgKHNraXBBZFZpZGVvKG4pLAogICAgICAgICAgdG9nZ2xlU2tpcEFkVGlwKCIueC12aWRlby1hZHYiKSk7CiAgICAgICAgfSkpOwogICAgICB9CiAgICB9LAogICAgaGlkZTogIi5hY3R2LWJhbm5lciwgLmJ0bi14ei1hcHAsIC50d2luZm9faWNvbndyYXAsIC5idG4tY29tbWVudC1hcHAsICNhZF9iYW5uZXIsIC5hZHZlcnRpc2UsIC5tYWluLWFkLXZpZXctYm94LCAuZm9vdC5zb2h1LXN3aXBlciwgLmFwcC1zdGFyLXZib3gsIC5hcHAtZ3Vlc3MtdmJveCwgLm1haW4tcmVjLXZpZXctYm94LCAuYXBwLXFpYW5mYW4tYm94LCAuY29tbWVudC1lbXB0eS1iZywgLmNvcHlpbmZvLCAucGgtdmJveCwgLmJ0bl9tX2FjdGlvbiwgLmJ0bi14ei1hcHAsICNmaWxtX3RvcF9iYW5uZXIsIC5idG4tY29tbWVudC1hcHAsIC5hZHYsIC54LWFkdi1wYXVzZS1ub25saW5lYXItcGFuZWwiLAogICAgY3NzOiAiLmNvbW1lbnQtZW1wdHktdHh0IHttYXJnaW4tYm90dG9tOiAwO30uYXBwLXZpZXctYm94ICsgZm9vdGVyIHtwYWRkaW5nOiAwO29wYWNpdHk6IDAuNTt9I3NvaHVwbGF5ZXIgI21lbnUge3otaW5kZXg6ICIgKyBNQVhfWl9JTkRFWCArICI7fSIKICB9LCB7CiAgICBuYW1lOiAi5LmQ6KeGIiwKICAgIG1hdGNoOiAiLmxlLmNvbSIsCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC9cL3NlYXJjaHxzby5sZS5jb21cL3MvLAogICAgICBqdW1wOiAiLmNvbHVtbl90aXQgfCBiZWZvcmUsIC5SZWxhdGUgfCBiZWZvcmUiCiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL1wvKHB0dlwvdnBsYXlcL3x2cGxheV8pLywKICAgICAgdmlwOiAiLmludHJvZHVjdGlvbl9ib3gsIC5icmllZkludHJvX2xlZnQgLmluZm9fbGlzdCIsCiAgICAgIHRpdGxlOiAiLmJyaWVmSW50cm9faW5mbyAuaW5mb190aXQsICNqLWludHJvZHVjdGlvbiBoMiIsCiAgICAgIGZpeFVybDogITAKICAgIH0sCiAgICBoaWRlOiAiLmdhbWVQcm9tb3Rpb24sIC5nYW1lUHJvbW90aW9uVHh0LCAjai1sZWFwcE1vcmUsIC5sYnpEYW9saXUsIC5hcmtCb3giCiAgfSwgewogICAgbmFtZTogIuWSquWSlSIsCiAgICBtYXRjaDogIm1pZ3V2aWRlby5jb20iLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvc2VhcmNoLmh0bWwvLAogICAgICBqdW1wOiAiLnNlYXJjaC1wYWdpbmF0aW9uLCAuc2VhcmNoLW1haW4iLAogICAgICBrZXl3b3JkOiAva2V5d29yZHM9KFteJlw/XC9cLl0rKXxcPy4qIyhbXiZcP1wvXC5dKykvCiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL2RldGFpbC5odG1sLywKICAgICAgdmlwOiAiLnBsYXllckZvb3RlciwgLnByb2dyYW1ncm91cCIsCiAgICAgIHRpdGxlOiAiLmxlZnQtYm94IC50aXRsZSwgLmVwaXNvZGVUaXRsZSwgLnZpZGVvX3RpdGxlIgogICAgfSwKICAgIGhpZGU6ICcuZ3JvdXAtaXRlbVtuYW1lKj0i5bm/5ZGKIl0sIC5vcGVuQ2xpZW50JwogIH0sIHsKICAgIG5hbWU6ICJQUFRWIiwKICAgIG1hdGNoOiAiLnBwdHYuY29tIiwKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL3NvdS4rKGt3fGtleXdvcmQpPS8sCiAgICAgIGp1bXA6ICIucGFnaW5hdGlvbiwgLnpoZW5ncGlhbi1ib3ggfCBhcHBlbmQiCiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL1wvc2hvd1wvLywKICAgICAgdmlwOiAiLm0gLmNmLCAudm9kLXRpdCwgLnZvZC1pbnRvciIsCiAgICAgIHRpdGxlOiAiI3ZpZGVvLWluZm8gaDEsIC52b2QtdGl0LWluIHNwYW4sIC50aXQiLAogICAgICBmaXhVcmw6ICEwCiAgICB9LAogICAgaGlkZTogJy53LXZpZGVvLXZhc3RhZCwgI3ZpZGVvLWRvd25sb2FkLWdhbWUsIGRpdltjbGFzcyo9Im9wZW5hcHAiXSwgZGl2W2NsYXNzKj0ic2lkZS1hZHYiXSwgZGl2W2lkKj0iYWZwXyJdLCBkaXZbaWQqPSItYWZwIl0sIGlmcmFtZVtzcmMqPSIvZ2FtZS8iXSwgLmFmcFBvc2l0aW9uLCAuZG93bmxvYWQtaWNvbmJhcicKICB9LCB7CiAgICBuYW1lOiAi5Y2O5pWwIiwKICAgIG1hdGNoOiAid2FzdS5jbiIsCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC9TZWFyY2hcLy4raz0vLAogICAgICBqdW1wOiAiI3RvcFZvZCIKICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvW3BQXWxheVwvc2hvd1wvLywKICAgICAgdmlwOiAiLm1vdmllX3RpdGxlIiwKICAgICAgdGl0bGU6ICIubW92aWVfdGl0bGUgaDIiLAogICAgICBmaXhVcmw6ICEwCiAgICB9LAogICAgaGlkZTogJ2RpdltpZCo9IkJBSURVIl0sIC5wbGF5ZXJfbWVudV9jb24sIGJvZHkgPiBkaXZbc3R5bGUqPSJmaXhlZCJdJwogIH0sIHsKICAgIG5hbWU6ICIxOTA1IiwKICAgIG1hdGNoOiAiMTkwNS5jb20iLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvXC9zZWFyY2gvaSwKICAgICAganVtcDogIi5wYWdpbmF0aW9uLCAjbmV3X3BhZ2UiCiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL1wvcGxheS8sCiAgICAgIHZpcDogIi5wbGF5ZXJCb3gtaW5mbywgI21vdmllX2luZm8sIC5wbGF5ZXItbmF2IiwKICAgICAgdGl0bGU6ICIjbW92aWVfaW5mbyAuaW5mb0lubmVyIC50aXRsZSwgLm1vdmllLXRpdGxlLCAudHZfdGl0bGUiLAogICAgICBmaXhVcmw6ICEwCiAgICB9LAogICAgaGlkZTogIiNhcHBfc3RvcmUsIC5vcGVuTWVtYmVyc2hpcEJ0biwgYm9keSA+IGRpdltpZF06bm90KFtjbGFzc10pID4gaWZyYW1lLCAucHYyLWFkdmVydGlzZW1lbnQsIC5vcGVuLWFwcCIsCiAgICBjc3M6ICJcbiNtb3ZpZV9pbmZvIHttYXJnaW4tdG9wOiAxZW07fSIKICB9LCB7CiAgICBuYW1lOiAiMTA4MOW9seinhiIsCiAgICBtYXRjaDogImsxMDgwLm5ldCIsCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC93ZD0vLAogICAgICBqdW1wOiAiLm15dWktcGFnZSwgLm15dWktcGFuZWwtYm94IHwgYXBwZW5kIiwKICAgICAgcmVzdWx0OiAiLnNlYXJjaGtleSIKICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvXC92b2RwbGF5LywKICAgICAgdGl0bGU6ICIubXl1aS1wbGF5ZXJfX2RhdGEgaDMgYSwgLmNvbC1wZCA+IC5teXVpLXBhbmVsX19oZWFkIGgzIiwKICAgICAganVtcDogIi5teXVpLXBsYXllcl9fZGF0YSIKICAgIH0sCiAgICBoaWRlOiAiYm9keSA+ICo6bm90KHNjcmlwdCkgKyBzY3JpcHQgfiAqW2lkXSIsCiAgICBjc3M6ICJcbiNwbGF5ZXItc2lkZWJhciB7aGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7fSIKICB9LCB7CiAgICBuYW1lOiAiMTA5MOW9seinhiIsCiAgICBtYXRjaDogLzEwOTB5c1xkPy5jb20vLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvYz1zZWFyY2gvLAogICAgICBqdW1wOiAiLnN0dWktcGFnZSwgLnN0dWktcGFubmVsIiwKICAgICAganVtcFRvOiBbICIuc3R1aS12b2RsaXN0X19tZWRpYSBhIiwgLy4qc2hvd1wvKFxkKykuKi8sICIvcGxheS8kMX4wfjAuaHRtbCIgXSwKICAgICAga2V5d29yZCgpIHsKICAgICAgICBjb25zdCBuID0gbG9jYXRpb24uaHJlZi5tYXRjaCgvd2Q9KFteLSZdKykvKTsKICAgICAgICByZXR1cm4gbiA/IG5bMV0gOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIubW9yZSArIC50aXRsZSIpLnRleHRDb250ZW50OwogICAgICB9LAogICAgICByZXN1bHQ6ICJoMy50aXRsZSBhIgogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9cL3BsYXkvLAogICAgICB0aXRsZTogImg0IGZvbnQiLAogICAgICBqdW1wOiAiLnRhYi1jb250ZW50LnN0dWktcGFubmVsX2JkIgogICAgfSwKICAgIGhpZGU6ICIuY29udGFpbmVyIH4gKltpZF0sIGJvZHkgPiAuY29udGFpbmVyID4gcFtzdHlsZV0iLAogICAgY3NzOiAiXG5ib2R5IHtwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50O30iCiAgfSwgewogICAgbmFtZTogIuWujOe+jueci+eciyIsCiAgICBtYXRjaDogIndhbm1laWtrLm1lIiwKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL1wvc29cLy8sCiAgICAgIGp1bXA6ICIuc3R1aS1wYWdlLCAuc3R1aS1wYW5uZWwiLAogICAgICBqdW1wVG86IFsgIi5zdHVpLXZvZGxpc3RfX21lZGlhIGEiLCAvLipwcm9qZWN0XC8oXGQrKS4qLywgIi9wbGF5LyQxLTEtMS5odG1sIiBdLAogICAgICByZXN1bHQ6ICJoMy50aXRsZSBhIgogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9cL3BsYXkvLAogICAgICB0aXRsZTogImgxIGEiLAogICAgICBqdW1wOiAiLS5wbGF5bGlzdCIKICAgIH0sCiAgICBoaWRlOiAiLmNvbnRhaW5lciB+ICpbaWRdIgogIH0sIHsKICAgIG5hbWU6ICLlnKjnur/kuYvlrrYiLAogICAgbWF0Y2g6ICJ6eHpqLm1lIiwKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL3dkPS8sCiAgICAgIGp1bXA6ICIuc3R1aS1wYW5uZWxfX2Z0IiwKICAgICAganVtcFRvOiBbICIuc3R1aS12b2RsaXN0IGEiLCAvLipkZXRhaWxcLyhcZCspLiovLCAiL3ZpZGVvLyQxLTEtMS5odG1sIiBdLAogICAgICByZXN1bHQ6ICIuc3R1aS12b2RsaXN0IC50aXRsZSBhIgogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9cL3ZpZGVvLywKICAgICAgdGl0bGU6ICJoMSIsCiAgICAgIGp1bXA6ICIuc3R1aS1wbGF5ZXIiCiAgICB9LAogICAgaGlkZTogJ2JvZHkgPiBkaXZbY2xhc3NePSJBRCJdLCBib2R5ID4gKjpub3Qoc2NyaXB0KSArIHNjcmlwdCB+ICpbaWRdJwogIH0sIHsKICAgIG5hbWU6ICI5Mee+juWJpyIsCiAgICBtYXRjaDogIjkxbWp3LmNvbSIsCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC9zPS8sCiAgICAgIGtleXdvcmQ6IC9zPSguKykvLAogICAgICBqdW1wOiAiLmxpc3QtY29udGVudCB8IGFwcGVuZCIsCiAgICAgIHJlc3VsdDogewogICAgICAgIHRpdGxlOiAiLm0tbW92aWVzIC51LW1vdmllIGgyIiwKICAgICAgICB1cmw6ICIubS1tb3ZpZXMgLnUtbW92aWUgYSIKICAgICAgfQogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9cL3ZwbGF5LywKICAgICAgdGl0bGU6ICIudnRpdGxlIGEiLAogICAgICBqdW1wOiAiLm1ncGxheWxpc3QiCiAgICB9LAogICAgaGlkZTogImJvZHkgPiAqOm5vdChzY3JpcHQpICsgc2NyaXB0IH4gKltpZF0sIGRpdjpub3QoW2lkXSkgPiBpZnJhbWUsIGEgPiBpZnJhbWUsIC5hZHMiCiAgfSwgewogICAgbmFtZTogIuWTlOa7tCIsCiAgICBtYXRjaDogImJkZTQuY29tIiwKICAgIGRpc2FibGU6ICEwLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvXC9zZWFyY2gvLAogICAgICBqdW1wOiAiLnNlYXJjaC1saXN0IiwKICAgICAgcmVzdWx0OiAiYS5oZWFkZXIiCiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL1wvcGxheS8sCiAgICAgIHRpdGxlOiAiLnBsYXllci13cmFwcGVyICsgLmNvbnRhaW5lciBhICsgYSIsCiAgICAgIGp1bXA6ICIucGxheWVyLXdyYXBwZXIgKyAuY29udGFpbmVyIgogICAgfSwKICAgIGhpZGU6ICJib2R5OjphZnRlciwgYm9keSA+ICo6bm90KHNjcmlwdCkgKyBzY3JpcHQgfiAqW2lkXSIKICB9LCB7CiAgICBuYW1lOiAi56We6amsIiwKICAgIG1hdGNoOiAic2hlbm1hNDQ4MC5jb20iLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvXC9zZWFyY2gvLAogICAgICBqdW1wOiAiLnN0dWktcGFnZSwgLnN0dWktcGFubmVsIiwKICAgICAganVtcFRvOiBbICIuc3R1aS12b2RsaXN0IGEiLCAvLipkZXRhaWxcLyhcZCspLiovLCAiL3BsYXkvJDEtMS0xLyIgXSwKICAgICAgcmVzdWx0OiAiLnN0dWktdm9kbGlzdF9fdGl0bGUgYSIKICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvXC9wbGF5LywKICAgICAgdGl0bGU6ICJoMSBhIiwKICAgICAganVtcDogIi0uc3R1aS1wYW5uZWwgfCBiZWZvcmUiCiAgICB9CiAgfSwgewogICAgbmFtZTogIlRWQiIsCiAgICBtYXRjaDogImhrdHZ5Yi5jb20iLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvXC9zZWFyY2gvLAogICAgICBqdW1wOiAiLm15dWktcGFnZSwgLm15dWktcGFubmVsX2JkIHwgYmVmb3JlLCAubXl1aS1wYW5lbCB8IGFwcGVuZCIsCiAgICAgIGp1bXBUbzogWyAiI3NlYXJjaExpc3QgYSIsIC8uKmRldGFpbFwvaWRcLyhcZCspLiovLCAiL3ZvZC9wbGF5L2lkLyQxL3NpZC8xL25pZC8xLmh0bWwiIF0sCiAgICAgIHJlc3VsdDogIi5zZWFyY2hrZXkiCiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL1wvdm9kXC9wbGF5LywKICAgICAgdGl0bGU6ICJoMyBhIiwKICAgICAganVtcDogIi5teXVpLXBhbmVsLWJveCIKICAgIH0sCiAgICBoaWRlOiAiYm9keSA+IGlmcmFtZSwgYm9keSA+IGRpdltzdHlsZV06bm90KFtjbGFzc10pLCBib2R5ID4gZGl2W2lkXTpub3QoW2NsYXNzXSksIC5teXVpLXBhbmVsIH4gZGl2W2lkXSwgLm5hdi1tZW51ID4gLmhpZGRlbi1tZCwgc2NyaXB0ICsgYVtpZF0sIGFbaWRdICsgZGl2W3N0eWxlXTpub3QoW2NsYXNzXSkiLAogICAgY3NzOiAiXG5ib2R5IHtwYWRkaW5nLXRvcDogNjBweCAhaW1wb3J0YW50O30iCiAgfSwgewogICAgbmFtZTogIumjnuaegemAnyIsCiAgICBtYXRjaDogImZlaWppc3U4LmNvbSIsCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC9cL3NlYXJjaC8sCiAgICAgIGp1bXA6ICIjcmVzdWx0IiwKICAgICAganVtcFRvOiBbICIjcmVzdWx0IGEiLCAvXC8kLywgIi8xLmh0bWwiIF0sCiAgICAgIHJlc3VsdDogIiNyZXN1bHQgaDIgYSIKICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvYWNnXC9cZCtcL1xkKy8sCiAgICAgIHRpdGxlOiAiaDEgYSIsCiAgICAgIGp1bXA6ICIubWlkYmFyLCAuZm9vdGVyIHwgYmVmb3JlIgogICAgfSwKICAgIGhpZGU6ICIuaW5kZXgtdG9wIH4gZGl2LCAudi10b3AgfiBkaXYsIC5mb290ZXIgfiBkaXYsIC5mb290ZXIgfiBicmRlLCBib2R5ID4gZGl2Om5vdChbY2xhc3NdKSIKICB9LCB7CiAgICBuYW1lOiAi55yf5LiN5Y2hIiwKICAgIG1hdGNoOiAiemhlbmJ1a2EuY29tIiwKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL1wvc2VhcmNoLywKICAgICAganVtcDogIi5zdHVpLXBhZ2UsIC5zdHVpLXBhbm5lbCIsCiAgICAgIGp1bXBUbzogWyAiLnN0dWktdm9kbGlzdF9fbWVkaWEgYSIsIC8uKnZvZGRldGFpbFwvKFxkKykuKi8sICIvdm9kcGxheS8kMS0xLTEvIiBdLAogICAgICBrZXl3b3JkKCkgewogICAgICAgIGNvbnN0IG4gPSBsb2NhdGlvbi5ocmVmLm1hdGNoKC93ZFwvKFteXC9dKykvKTsKICAgICAgICByZXR1cm4gbiA/IG5bMV0gOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJoMyIpLnRleHRDb250ZW50OwogICAgICB9LAogICAgICByZXN1bHQ6ICIuc3R1aS12b2RsaXN0X19tZWRpYSBoMy50aXRsZSBhIgogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9cL3ZvZHBsYXkvLAogICAgICB0aXRsZTogIi5kZXRhaWwgaDEiLAogICAgICBqdW1wOiAiLS5wbGF5bGlzdCIKICAgIH0sCiAgICBoaWRlOiAiYm9keSA+IGRpdltpZF06bm90KFtjbGFzc10pLCAuc3R1aS1wbGF5ZXJfX2l0ZW0gfiBkaXZbc3R5bGVdIgogIH0sIHsKICAgIG5hbWU6ICLnop/lvbEiLAogICAgbWF0Y2g6IC9kdmRoZC5tZXw5NTI3ODAuY29tLywKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL1wvc2VhcmNoLywKICAgICAganVtcDogIi5saXN0LWNvbnRlbnQiLAogICAgICBqdW1wVG86IFsgIi5saXN0LWNvbnRlbnQgYSIsIC8uKmluZGV4KFxkKylcLmh0bWwvLCAiL3ZpZGVvLyQxLTAtMC5odG1sIiBdLAogICAgICByZXN1bHQ6IHsKICAgICAgICB0aXRsZTogIi5tLW1vdmllcyAudS1tb3ZpZSBoMiIsCiAgICAgICAgdXJsOiAiLm0tbW92aWVzIC51LW1vdmllIGEiCiAgICAgIH0KICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvXC92aWRlby8sCiAgICAgIHRpdGxlOiAiLnZ0aXRsZSBhIiwKICAgICAganVtcDogIi52aWRlb3RpdGxlIgogICAgfSwKICAgIGhpZGU6ICdib2R5ID4gYnJkZSwgYm9keSA+IGRpdltpZF06bm90KFtjbGFzc10pLCBib2R5ID4gYSwgLmhlYWRlciB+IGRpdltjbGFzcyo9ImFkIl0sIC53aWRnZXRfYWRzJwogIH0sIHsKICAgIG5hbWU6ICJaenpGdW4iLAogICAgbWF0Y2g6IC93d3cuenp6ZnVuLmNvbS8sCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC9cL3ZvZC1zZWFyY2gvLAogICAgICBqdW1wOiAiI2xpc3QtZm9jdXMgfCBhcHBlbmQsIC5sZW8tZm9vdC10eHQgfCBiZWZvcmUiLAogICAgICBqdW1wVG86IFsgIi5zaG93LWxpc3QgYSwgLmxlby1kZXRhaWwtd3JhcCBhIiwgLy4qZGV0YWlsLWlkLShcZCspLiovLCAiL3ZvZC1wbGF5LWlkLSQxLXNpZC0xLW5pZC0xLmh0bWwiIF0sCiAgICAgIHJlc3VsdDogIi5zaG93LWxpc3QgaDIgYSIKICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvXC92b2QtcGxheS8sCiAgICAgIHRpdGxlKCkgewogICAgICAgIGNvbnN0IG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuYnJlYWQtY3J1bWItbmF2LCAubGVvLWJnLWEgaDEiKTsKICAgICAgICByZXR1cm4gbiA/IG4udGV4dENvbnRlbnQucmVwbGFjZSgvLirlvZPliY3mkq3mlL7vvJooLis/KSAtLiovLCAiJDEiKSA6ICIiOwogICAgICB9LAogICAgICBqdW1wOiAiLmVwaXNvZGUtd3JhcCwgLS5sZW8tbW9kLmxlby1sZWZ0IgogICAgfSwKICAgIGhpZGU6ICIjbmF2YmFyICsgZGl2W3N0eWxlXSIsCiAgICBqcygpIHsKICAgICAgJCgiaW5wdXRbb25jbGlja10iKS5lYWNoKChmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgJChlKS52YWwoKS5pbmNsdWRlcygi57un57ut6K6/6ZeuIikgJiYgZS5jbGljaygpOwogICAgICB9KSk7CiAgICB9CiAgfSwgewogICAgbmFtZTogIui/heaSrSIsCiAgICBtYXRjaDogInhiZG0ub3JnIiwKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL1wvc2VhcmNoLywKICAgICAganVtcDogIi5teXVpLXBhZ2UiCiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL1wvdmlkZW8vLAogICAgICB0aXRsZTogIi5teXVpLXBhbmVsX19oZWFkIGgzIGEiLAogICAgICBqdW1wOiAiLm15dWktcGFuZWwtYmciCiAgICB9LAogICAgaGlkZTogImJvZHkgPiBkaXYiCiAgfSwgewogICAgbmFtZTogIuWTlOWSquWTlOWSqiIsCiAgICBtYXRjaDogImJpbWliaW1pLm1lIiwKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL1wvc2VhcmNoLywKICAgICAganVtcDogIi52X21vZCwgLmxlby1mb290LXR4dCB8IGJlZm9yZSIsCiAgICAgIHJlc3VsdDogewogICAgICAgIHRpdGxlOiAiLmluZm8gYSwgLmxlby1kZXRhaWwtbWVkaWEgaDEiLAogICAgICAgIHVybDogIi5pbmZvIGEsIC5sZW8tZGV0YWlsLW1lZGlhIC5sZW8tcG8tYWIgYSIKICAgICAgfSwKICAgICAga2V5d29yZCgpIHsKICAgICAgICBjb25zdCBuID0gbG9jYXRpb24uaHJlZi5tYXRjaCgvd2RcLyhbXlwvXSspLyk7CiAgICAgICAgcmV0dXJuIG4gPyBuWzFdIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnBfdGFiIHN0cm9uZywgLmxlby1zZWFyY2gtd2QiKS50ZXh0Q29udGVudDsKICAgICAgfQogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9cL3BsYXlcLy8sCiAgICAgIHRpdGxlOiAiLnZfcGF0aCAuY3VycmVudCwgaGVhZGVyIGEgKyBmb250LCBoMS5sZW8tZnMtbCIsCiAgICAgIGp1bXA6ICItLnBsYXlfYm94LCAtLmxlby1tb2QubGVvLWxlZnQgfCBiZWZvcmUiCiAgICB9LAogICAgaGlkZTogImJvZHkgPiBkaXZbaWRdOm5vdChbY2xhc3NdKSwgYm9keSA+IGRpdltzdHlsZV06bm90KFtjbGFzc10pLCAudHVpZ3VhbmcsIGJvZHkgPiAubGVvLWNvbnRhaW5lciB+IFtpZF0sIC5zc3IxLCAuc3NyMSArIGRpdjpub3QoW2NsYXNzXSksIGluc1tpZF0sIHNlY3Rpb24gKyBkaXZbaWRdIiwKICAgIGNzczogIi5sZW8tZGV0YWlsLXdyYXAge2JhY2tncm91bmQtY29sb3I6ICM2ZWE3Yjg7bWFyZ2luLWJvdHRvbTogMTBweDtib3JkZXItcmFkaXVzOiA1cHg7Ym94LXNoYWRvdzogMCAycHggMnB4IDAgcmdiYSgwLDAsMCwwLjIpO30iCiAgfSwgewogICAgbmFtZTogIuWmruWPryIsCiAgICBtYXRjaDogL25pY290dlwuKG1lfGNsdWIpLywKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL1wvc2VhcmNoLywKICAgICAganVtcDogIi5wYWdlciwgLm5hdmJhciB+IC5jb250YWluZXIiLAogICAgICBqdW1wVG86IFsgIi5mZi1iZyBhIiwgLy4qXC8oXGQrKS4qLywgIi92aWRlby9wbGF5LyQxLTEtMS5odG1sIiBdLAogICAgICByZXN1bHQ6ICJoMiBhIgogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9cL3BsYXlcLy8sCiAgICAgIHRpdGxlOiAiYS5mZi10ZXh0IiwKICAgICAganVtcDogIi0udGFiLWNvbnRlbnQuZmYtcGxheXVybC1kcm9wZG93biIKICAgIH0sCiAgICBoaWRlOiAiYm9keSA+IGJyZGUsIGJvZHkgPiBkaXZbaWRdOm5vdChbY2xhc3NdKSwgYm9keSA+IGRpdltzdHlsZV06bm90KFtjbGFzc10pLCBib2R5ID4gYSwgLmZmLWFkcywgYm9keSA+IGRpdltjbGFzc25hbWVdLCAjZmYtdG90b3AgfiBkaXZbaWRdIgogIH0sIHsKICAgIG5hbWU6ICJBR0UiLAogICAgbWF0Y2g6ICJhZ2VmYW5zLnR2IiwKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL1wvc2VhcmNoLywKICAgICAganVtcDogIiNjb250YWluZXIiLAogICAgICByZXN1bHQ6ICIuY2VsbF9pbWZvcm1fbmFtZSIKICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvXC9wbGF5XC8uK3BsYXlpZD0vLAogICAgICB0aXRsZTogIiNkZXRhaWxuYW1lIGEiLAogICAgICBqdW1wOiAiLmJhc2VibG9jayArIC5zcGFjZWJsb2NrMSArIC5iYXNlYmxvY2sgfCBiZWZvcmUiCiAgICB9LAogICAgaGlkZTogImRpdltzdHlsZV06bm90KFtjbGFzc10pID4gYSIKICB9LCB7CiAgICBuYW1lOiAiUWlubWVpIiwKICAgIG1hdGNoOiAicWlubWVpLnZpZGVvIiwKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL1wvc2VhcmNoLywKICAgICAganVtcDogIi5sYXlvdXQgfCBhcHBlbmQiCiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL1wvdmlkZW8vLAogICAgICB0aXRsZTogIi5pbmZvIC50aXRsZSIsCiAgICAgIGp1bXA6ICIucGxheWVyIHwgYXBwZW5kIgogICAgfQogIH0sIHsKICAgIG5hbWU6ICLlk4blkqoiLAogICAgbWF0Y2g6ICJkdW9taW1oLmNvbSIsCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC93ZD0vLAogICAgICBqdW1wOiAiLm15dWktcGFnZSwgLm15dWktcGFubmVsX2JkIHwgYmVmb3JlIiwKICAgICAganVtcFRvOiBbICIjc2VhcmNoTGlzdCBhIiwgLy4qZGV0YWlsXC8oXGQrKS4qLywgIi9kb25nbWFucGxheS8kMS0xLTEuaHRtbCIgXSwKICAgICAgcmVzdWx0OiAiLnNlYXJjaGtleSIKICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvXC9kb25nbWFucGxheS8sCiAgICAgIHRpdGxlOiAiI3BsYXllci1zaWRlYmFyIC50aXRsZSIsCiAgICAgIGp1bXA6ICIjcGxheWVyLXNpZGViYXIgLm15dWktcGFuZWxfYmQgfCBiZWZvcmUiCiAgICB9CiAgfSwgewogICAgbmFtZTogIuasoeWFgyIsCiAgICBtYXRjaDogImN5bG9saS5jb20iLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvXC92b2RzZWFyY2gvLAogICAgICBqdW1wOiAiLnR5cGVib3ggfCBhcHBlbmQsICNjb250ZW50IHwgYXBwZW5kLCAucGFnZWJveCIsCiAgICAgIGp1bXBUbzogWyAiLnNlYXJjaCBhIiwgLy4qXC9jeShcZCspLiovLCAiL3l2JDEtMS0xLyIgXSwKICAgICAga2V5d29yZCgpIHsKICAgICAgICBjb25zdCBuID0gbG9jYXRpb24uaHJlZi5tYXRjaCgvdm9kc2VhcmNoXC8oW14tXSspLyk7CiAgICAgICAgcmV0dXJuIG4gPyBuWzFdIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLm1haW4taGVhZCAudGl0bGUgYiwgLnJlLWluZm8gYiIpLnRleHRDb250ZW50OwogICAgICB9LAogICAgICByZXN1bHQ6ICIuc2VhcmNoIC50aXRsZSIKICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvXC9jeVxkKy8sCiAgICAgIHRpdGxlOiAiLnUtdGl0bGUgYSwgLnRpdGxlIGEiLAogICAgICBqdW1wOiAiLnBsYXlsaXN0YWxsIC5wbGF5Ym94LCAucGxheS1pbmZvICsgLm1haW4iCiAgICB9LAogICAgaGlkZTogIi5jb2x1bW4tcmd0ICNwbGF5IgogIH0sIHsKICAgIG5hbWU6ICJNaWthbiIsCiAgICBtYXRjaDogIm1pa2FuYW5pLm1lIiwKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL1wvU2VhcmNoLywKICAgICAganVtcDogIi5mb290ZXIgfCBiZWZvcmUiCiAgICB9CiAgfSBdLCBJY29uID0gewogICAgdmlwOiAnPHN2ZyBmaWxsPSJjdXJyZW50Q29sb3IiIHZpZXdCb3g9IjAgMCAxOCAxOCIgcm9sZT0iaW1nIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTE3LjczMSw2LjI3bC0yLjc3MS00LjQ2NGMtMC4zMzItMC41MzQtMC45MDYtMC44NTItMS41MzgtMC44NTJoLTIuMzY0Yy0wLjU1MywwLTEsMC40NDgtMSwxczAuNDQ3LDEsMSwxaDIuMjYxbDIuNjI4LDQuMjMybC02Ljk1NSw3LjU4TDIuMDUzLDcuMTg3bDIuNjI4LTQuMjMzaDIuMzNjMC41NTIsMCwxLTAuNDQ4LDEtMXMtMC40NDgtMS0xLTFINC41NzdjLTAuNjIzLDAtMS4yMTIsMC4zMjctMS41MzcsMC44NTNMMC4yNjcsNi4yNzJjLTAuNDE2LDAuNjcxLTAuMzQ2LDEuNTIxLDAuMTg5LDIuMTMzbDcuNDc1LDguMTY3YzAuMjc1LDAuMzEzLDAuNjYzLDAuNDc1LDEuMDU2LDAuNDc1YzAuMzI0LDAsMC42NTEtMC4xMSwwLjkyLTAuMzM2bDcuNjQ4LTguMzIxQzE4LjA3Nyw3Ljc5NCwxOC4xNDgsNi45NDMsMTcuNzMxLDYuMjd6Ij48L3BhdGg+PHBhdGggZD0iTTQuNTE3LDYuMTY3QzQuMTA4LDYuNTM4LDQuMDc4LDcuMTcxLDQuNDUsNy41OGwzLjgxLDQuMTljMC4xODksMC4yMDgsMC40NTgsMC4zMjcsMC43MzksMC4zMjdjMCwwLDAsMCwwLDBjMC4yODEsMCwwLjU1LTAuMTE4LDAuNzM5LTAuMzI3bDMuODEtNC4xODRjMC4zNzItMC40MDksMC4zNDMtMS4wNDEtMC4wNjYtMS40MTNjLTAuNDA3LTAuMzcyLTEuMDM5LTAuMzQyLTEuNDEyLDAuMDY2TDksOS42MTJMNS45MjksNi4yMzRDNS41NTgsNS44MjYsNC45MjYsNS43OTYsNC41MTcsNi4xNjd6Ij48L3BhdGg+PC9zdmc+JywKICAgIGxvYWRlcjogJzxzdmc+PGRlZnM+PGZpbHRlciBpZD0iby0tbC1mIj48ZmVHYXVzc2lhbkJsdXIgaW49IlNvdXJjZUdyYXBoaWMiIHN0ZERldmlhdGlvbj0iMiIgcmVzdWx0PSJibHVyIiAvPjxmZUNvbG9yTWF0cml4IGluPSJibHVyIiBtb2RlPSJtYXRyaXgiIHZhbHVlcz0iMSAwIDAgMCAwICAwIDEgMCAwIDAgIDAgMCAxIDAgMCAgMCAwIDAgNSAtMiIgcmVzdWx0PSJnb29leSIgLz48ZmVDb21wb3NpdGUgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iZ29vZXkiIG9wZXJhdG9yPSJhdG9wIi8+PC9maWx0ZXI+PC9kZWZzPjwvc3ZnPicsCiAgICBxcmNvZGU6ICc8c3ZnIHZpZXdCb3g9IjAgMCA1MTIgNTEyIj48cGF0aCBkPSJNMTYwIDBIMHYxNjBoMTYwVjB6bS0zMiAxMjhIMzJWMzJoOTZ2OTZ6Ii8+PHBhdGggZD0iTTY0IDY0aDMydjMySDY0ek0zNTIgMHYxNjBoMTYwVjBIMzUyem0xMjggMTI4aC05NlYzMmg5NnY5NnoiLz48cGF0aCBkPSJNNDE2IDY0aDMydjMyaC0zMnpNMCA1MTJoMTYwVjM1MkgwdjE2MHptMzItMTI4aDk2djk2SDMydi05NnoiLz48cGF0aCBkPSJNNjQgNDE2aDMydjMySDY0ek0yNTYgMGg2NHYzMmgtNjR6TTI1NiAxMjhoMzJWOTZoMzJWNjRoLTk2VjMyaC0zMnY2NGg2NHpNMTkyIDEyOGgzMnYzMmgtMzJ6TTMyMCAxNjBoLTMydjMyaC05NnYzMmgxMjh6TTMyIDI4OGgzMnYtMzJIMzJ2LTY0SDB2MTI4aDMyek02NCAxOTJoMzJ2MzJINjR6Ii8+PHBhdGggZD0iTTE5MiAzMjBoNjR2LTMyaC0zMnYtMzJoLTY0di02NGgtMzJ2NjRIOTZ2NjRoMzJ2LTMyaDY0ek0yODggMjU2aDMydjY0aC0zMnpNMjg4IDM1MmgtOTZ2MzJoNjR2OTZoLTY0djMyaDk2di0zMmg2NHYtMzJoLTY0eiIvPjxwYXRoIGQ9Ik0xOTIgNDE2aDMydjMyaC0zMnpNMzIwIDM1MmgzMnY2NGgtMzJ6TTQ4MCA0MTZoLTk2djk2aDMydi02NGg2NHoiLz48cGF0aCBkPSJNNDQ4IDQ4MGg2NHYzMmgtNjR6TTQ4MCAzNTJoMzJ2MzJoLTMyek0zODQgMzg0aDMydi05NmgtNjR2MzJoMzJ6TTQ0OCAyMjRoLTMydi0zMmgtMzJ2MzJoLTMydjMyaDEyOHYtMzJoMzJ2LTMyaC02NHpNNDQ4IDI4OGg2NHYzMmgtNjR6Ii8+PC9zdmc+JywKICAgIHBhbmRhOiAnPHN2ZyB2aWV3Qm94PSIwIDAgNTggNTgiPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgZmlsbC1ydWxlPSJub256ZXJvIj48cGF0aCBkPSJtNDUgNTNjLS4wNTQ2ODgxIDIuNzkzMTU2NC0yLjM0NjM5ODQgNS4wMjI0NDY2LTUuMTQgNWgtMTMuMjdjLS41MDgzNzE4LS4wMDEwMDc2LTEuMDA1MzgzMS0uMTUwNDU4Ni0xLjQzLS40My0uMTQyMDY3OC0uMDk4OTYyNy0uMjc1ODQzLS4yMDkzMjcyLS40LS4zMy0uNjk5NjY5Ny0uNzAyMjc2Mi0uOTM3MTAyMi0xLjc0MjMxNzItLjYxMTUxMzQtMi42Nzg2NTEyLjMyNTU4ODktLjkzNjMzNCAxLjE1NzA3NTItMS42MDQ2ODI5IDIuMTQxNTEzNC0xLjcyMTM0ODggMi4zMjM5MzcyLS4yMzMxNzg4IDQuNTkyMTc4Ny0uODU1MTcwNSA2LjcxLTEuODQgNC0yIDQtMyA4LTNoLjA5YzEuOTYgMCAzLjkxIDEuMDUgMy45MSA1eiIgZmlsbD0iIzU2NTk1ZSIvPjxwYXRoIGQ9Im0xNi42NCA1Ny45M2MtLjI1NzA4NDUuMDQ4NzkwMy0uNTE4MzM2Mi4wNzIyMzYtLjc4LjA3aC0xMy4yN2MtMS4zNjQwNDA1Ny0uMDEwODQ1My0yLjQ4NTg2ODIxLTEuMDc3ODA2NS0yLjU2NTA0MTctMi40Mzk1OTA2cy45MTE0NDgzNy0yLjU1MTU2MjIgMi4yNjUwNDE3LTIuNzIwNDA5NGMuMzktLjA1LjgyLS4xIDEuMjctLjE4IDEuODUgMi40MSA1LjY3IDQuODMgMTMuMDggNS4yN3oiIGZpbGw9IiMzOTNmNGEiLz48cGF0aCBkPSJtNDEuNTggMzcuODJjLS4yMTIwMDczLTEuMzY4OTUwMi0uNTc0MTkyMi0yLjcxMDM3NTktMS4wOC00LTEuNTMyMTMwMi0zLjc5OTgwMjEtNC42MzA4MTMyLTYuNzUyNjY0Ny04LjUtOC4xLTEuNzcyMzgxMS0uNjYwNDU4Ni0zLjYxNDI2OTktMS4xMTY3MzctNS40OS0xLjM2LTEuNDU5NDE3LTEuNjQ1NzEtMy4zNzg3MDM5LTIuODE2MDkxOC01LjUxLTMuMzZ2MnMtMS0xLTQtMWMuNTU2NDE3MS42MzczNjk0LjkwNTI2MjIgMS40MjkyNDc3IDEgMi4yNy0uOTg4MTEwMi4xNjI2OTYyLTEuOTU0MzgzLjQzNzgxNTYtMi44OC44Mi0zLjE0MDUyMzcgMS4zMzk4NTE3LTUuNTc3MjYwNDggMy45MzI1MTA2LTYuNzIgNy4xNS0uMzAwMjAzNjYuNzQyMjQ5Ni0uNTYwNTc0MDUgMS40OTk5OTQyLS43OCAyLjI3Ljc0OTYyNDQ5LS4zMzI0NjE5IDEuNTU5OTY3OTItLjUwNjEwNjkgMi4zOC0uNTEgMi45ODQwNTY1LjAwMDUzMjkgNS41MTQyMTM3IDIuMTkzOTIyOSA1LjkzODA4ODQgNS4xNDc3MjExcy0xLjM4NzM3MTUgNS43NzAxODY0LTQuMjUwODU4MyA2LjYwOTg1MWMtMi44NjM0ODY3OC44Mzk2NjQ2LTUuOTA4ODQ2NTktLjU1MjYxMzYtNy4xNDcyMzAxLTMuMjY3NTcyMS0xLjI2IDEuMjUtMi41NCAyLjIzLTIuNTQgNi4wNy4wNjIzMTI4NSAxLjQ5OTUzNDguNjA5NzUwODEgMi45MzgzMTQxIDEuNTYgNC4xIDEuODUgMi40MSA1LjY3IDQuODMgMTMuMDggNS4yNy43OSAwIDEuNjIuMDcgMi40OS4wNyAyLjAwNzg3LjAwNDkgNC4wMTMzNDg3LS4xMzg4MjU5IDYtLjQzLS4xNDIwNjc4LS4wOTg5NjI3LS4yNzU4NDMtLjIwOTMyNzItLjQtLjMzLS42OTk2Njk3LS43MDIyNzYyLS45MzcxMDIyLTEuNzQyMzE3Mi0uNjExNTEzNC0yLjY3ODY1MTIuMzI1NTg4OS0uOTM2MzM0IDEuMTU3MDc1Mi0xLjYwNDY4MjkgMi4xNDE1MTM0LTEuNzIxMzQ4OCAyLjMzNDE2NzMtLjIyOTg2OTQgNC42MTI4MTgxLS44NTE5MzQzIDYuNzQtMS44NCA0LTIgNC0zIDgtM2guMDljLjU5NzgwNjMtMS4zMDkwMTA3LjkwODEwODYtMi43MzA5NDU1LjkxLTQuMTcuMDI4ODc4MS0yLjAxMTU2OTItLjExMTYxNzktNC4wMjE5OTk3LS40Mi02LjAxem0tMTQuNTggMTAuMThjLTMuMzEzNzA4NSAwLTYtMi42ODYyOTE1LTYtNnMyLjY4NjI5MTUtNiA2LTYgNiAyLjY4NjI5MTUgNiA2LTIuNjg2MjkxNSA2LTYgNnoiIGZpbGw9IiNlY2YwZjEiLz48cGF0aCBkPSJtMTYgNDBjLjAwMTEwNjcgMi44MjM2NzcyLTEuOTY2NzYyOSA1LjI2NjAxNTMtNC43MjYwNTg5IDUuODY1NTQ4Mi0yLjc1OTI5NTk3LjU5OTUzMjktNS41NjMyMjE2NC0uODA2MDAxNi02LjczMzk0MTEtMy4zNzU1NDgyIDEuMjM2MTkyNzItMS4xMjU1OTA3IDIuMDI0NTA2MDQtMi42NTk2MDU4IDIuMjItNC4zMi4yMDA0MzQzOC0xLjIzNDM2MTkuNDcwODcwNTctMi40NTYzMzI5LjgxLTMuNjYuNzY1MDI4NzctLjMzOTI4MzYgMS41OTMxMTcxNi0uNTEzMDc5OSAyLjQzLS41MSAzLjMxMzcwODUgMCA2IDIuNjg2MjkxNSA2IDZ6IiBmaWxsPSIjMzkzZjRhIi8+PHBhdGggY2xhc3M9Im8tLXN2Zy1wYW5kYS1lYXIiIGQ9Im0xNS4wNyAyNS4wOWMtMy4xNDA1MjM3IDEuMzM5ODUxNy01LjU3NzI2MDQ4IDMuOTMyNTEwNi02LjcyIDcuMTUtMS43MTA3MDA1LTEuMDczMzM0My0yLjYwNzczOTU1LTMuMDcwNDEwNC0yLjI3Mzc5NzEtNS4wNjIxNDk2LjMzMzk0MjQ0LTEuOTkxNzM5MiAxLjgzMzI5MDgyLTMuNTg3MDI4MSAzLjgwMDUxOTA3LTQuMDQzNzA3MSAxLjk2NzIyODIzLS40NTY2NzkgNC4wMTYwMzYwMy4zMTQ5Mjg5IDUuMTkzMjc4MDMgMS45NTU4NTY3eiIgZmlsbD0iY3VycmVudENvbG9yIi8+PHBhdGggY2xhc3M9Im8tLXN2Zy1wYW5kYS1lYXIiIGQ9Im00MyAyOWMtLjAwMTA5MzYgMS45MzEwNTIzLS45MzE1MzU0IDMuNzQzNTUyOS0yLjUgNC44Ny0xLjUyMDI1NjUtMy44MTg4Mjg5LTQuNjIwNjU4MS02Ljc5MTU2NjktOC41LTguMTUgMS40NTkxNzAxLTIuMTk5OTQxMyA0LjE4NDgwNDQtMy4xODc3MDk3IDYuNzE0NjA0Ni0yLjQzMzM2OTIgMi41Mjk4MDAzLjc1NDM0MDQgNC4yNjkzNTQ4IDMuMDczNTQ2OSA0LjI4NTM5NTQgNS43MTMzNjkyeiIgZmlsbD0iY3VycmVudENvbG9yIi8+PHBhdGggZD0ibTU3IDUxLjI2Yy0uMzA0ODA1OC0uMTcyNzYwOS0uNjQ5NjQ3Mi0uMjYyNDE5Ny0xLS4yNmgtMmMtMS43MiAwLTMuNDUgMS0zLjkzIDQuOC0uMDU1NzQ1NC41NTIxNTkuMTIwNDQxNSAxLjEwMjY1Ni40ODY0MjU4IDEuNTE5ODQwMS4zNjU5ODQzLjQxNzE4NDIuODg4ODU3MS42NjM1NDMgMS40NDM1NzQyLjY4MDE1OTlsLTEyLjE0LjAwMDE2OGMyLjc5MzYwMTYuMDIyMjc4NiA1LjA4NTMxMTktMi4yMDcwMTE2IDUuMTQtNS4wMDAxNjggMC0zLjkxLTItNC45My0zLjkxLTUgLjU5NzgwNjMtMS4zMDkwMTA3LjkwODEwODYtMi43MzA5NDU1LjkxLTQuMTcuMDI4MzE2OS0yLjAwODIzNC0uMTEyMTc3NC00LjAxNTI5NTgtLjQyLTYgMi4xODU4NTEzLjEzNzc2MTkgNC4zNDQyMjYuNTYxMzY4MiA2LjQyIDEuMjYgMi4zMDk4NDkxLjc1MTMzMzkgNC4zNzk4NTkgMi4xMDAyOTA0IDYgMy45MS4yMTA0NDc5LjIzNjI4MzguNDA0MjQ2Ny40ODY4ODU3LjU4Ljc1IDEuNTUzNDgwNSAyLjE5ODA1NDIgMi4zOTc4ODAzIDQuODE4NDg0NyAyLjQyIDcuNTF6IiBmaWxsPSIjZDFkNGQxIi8+PHBhdGggZD0ibTU4IDM5Yy4wMDI2NzMyIDIuMTU0ODc3MS0xLjM3NTUzODQgNC4wNjkwNi0zLjQyIDQuNzUtLjE3NTc1MzMtLjI2MzExNDMtLjM2OTU1MjEtLjUxMzcxNjItLjU4LS43NS0xLjYyMDE0MS0xLjgwOTcwOTYtMy42OTAxNTA5LTMuMTU4NjY2MS02LTMuOTEtLjAwNDg1My0uMDI5ODAzNy0uMDA0ODUzLS4wNjAxOTYzIDAtLjA5IDAtMi43NjE0MjM3IDIuMjM4NTc2My01IDUtNXM1IDIuMjM4NTc2MyA1IDV6IiBmaWxsPSIjNTY1OTVlIi8+PHBhdGggZD0ibTU4IDUzdjNjMCAxLjEwNDU2OTUtLjg5NTQzMDUgMi0yIDJoLTRjLS41NjY5NzU2LjAwMjg0MjgtMS4xMDg1MTQtLjIzNTA5NjEtMS40ODk5MDc4LS42NTQ2Mjkzcy0uNTY2Nzk3Ni0uOTgxMjMwOC0uNTEwMDkyMi0xLjU0NTM3MDdjLjQ5LTMuOCAyLjIyLTQuOCAzLjk0LTQuOGgyYzEuMTA0NTY5NSAwIDIgLjg5NTQzMDUgMiAyeiIgZmlsbD0iIzU2NTk1ZSIvPjxjaXJjbGUgaWQ9Ik92YWwiIGN4PSIyNyIgY3k9IjQyIiBmaWxsPSIjMzkzZjRhIiByPSI2Ii8+PGcgZmlsbD0iIzJjMmYzOCI+PHBhdGggZD0ibTEyIDQyaC0yYy0uNTUyMjg0NzUgMC0xLS40NDc3MTUzLTEtMXMuNDQ3NzE1MjUtMSAxLTFoMmMuNTUyMjg0NyAwIDEgLjQ0NzcxNTMgMSAxcy0uNDQ3NzE1MyAxLTEgMXoiLz48cGF0aCBkPSJtMjcgNDNoLTJjLS41NTIyODQ3IDAtMS0uNDQ3NzE1My0xLTFzLjQ0NzcxNTMtMSAxLTFoMmMuNTUyMjg0NyAwIDEgLjQ0NzcxNTMgMSAxcy0uNDQ3NzE1MyAxLTEgMXoiLz48cGF0aCBkPSJtMTYgNDljLS4yNjU4MDMuMDAxNTM2OC0uNTIxMjgxMi0uMTAyODEzNS0uNzEtLjI5bC0xLTFjLS4zOTIxMjIyLS4zOTIxMjIyLS4zOTIxMjIyLTEuMDI3ODc3OCAwLTEuNDJzMS4wMjc4Nzc4LS4zOTIxMjIyIDEuNDIgMGwuNDkuNDkgMS4zNS0uNjdjLjMyMTE4MDgtLjE5MzI2MDcuNzIzNDcwNS0uMTkwNjcyOCAxLjA0MjEzODMuMDA2NzA0MS4zMTg2Njc4LjE5NzM3NjguNTAwMTkyOC41NTYzOTI4LjQ3MDI0MzQuOTMwMDM2OHMtLjI2NjM0MzEuNjk5MTYxNy0uNjEyMzgxNy44NDMyNTkxbC0yIDFjLS4xMzc5OTkzLjA3NDg3MTktLjI5MzAyMjQuMTEyNzY2NC0uNDUuMTF6Ii8+PC9nPjxwYXRoIGNsYXNzPSJvLS1zdmctcGFuZGEteiIgZD0ibTM4IDE4aC0xMGMtLjg0ODU4MDUtLjAwMDY2MTItMS42MDQzNjYxLS41MzY3NTA5LTEuODg1NDk2NC0xLjMzNzQxcy0uMDI2Mzk2OC0xLjY5MTU2NTkuNjM1NDk2NC0yLjIyMjU5bDUuNTUtNC40NGgtNC4zYy0xLjEwNDU2OTUgMC0yLS44OTU0MzA1LTItMnMuODk1NDMwNS0yIDItMmgxMGMuODQ4NTgwNS4wMDA2NjExNiAxLjYwNDM2NjEuNTM2NzUwODUgMS44ODU0OTY0IDEuMzM3NDA5OTguMjgxMTMwMy44MDA2NTkxMi4wMjYzOTY4IDEuNjkxNTY1ODktLjYzNTQ5NjQgMi4yMjI1OTAwMmwtNS41NSA0LjQ0aDQuM2MxLjEwNDU2OTUgMCAyIC44OTU0MzA1IDIgMnMtLjg5NTQzMDUgMi0yIDJ6IiBmaWxsPSIjM2I5N2QzIi8+PHBhdGggY2xhc3M9Im8tLXN2Zy1wYW5kYS16MiIgZD0ibTU2IDEyaC0xMGMtLjg0ODU4MDUtLjAwMDY2MTItMS42MDQzNjYxLS41MzY3NTA5LTEuODg1NDk2NC0xLjMzNzQxcy0uMDI2Mzk2OC0xLjY5MTU2NTg3LjYzNTQ5NjQtMi4yMjI1OWw1LjU1LTQuNDRoLTQuM2MtMS4xMDQ1Njk1IDAtMi0uODk1NDMwNS0yLTJzLjg5NTQzMDUtMiAyLTJoMTBjLjg0ODU4MDUuMDAwNjYxMTYgMS42MDQzNjYxLjUzNjc1MDg1IDEuODg1NDk2NCAxLjMzNzQwOTk4LjI4MTEzMDMuODAwNjU5MTIuMDI2Mzk2OCAxLjY5MTU2NTg5LS42MzU0OTY0IDIuMjIyNTkwMDJsLTUuNTUgNC40NGg0LjNjMS4xMDQ1Njk1IDAgMiAuODk1NDMwNSAyIDJzLS44OTU0MzA1IDItMiAyeiIgZmlsbD0iIzNiOTdkMyIvPjwvZz48L2c+PC9zdmc+JwogIH0sIFNraXBfQWRfSHRtbCA9ICc8ZGl2IGNsYXNzPSJvLS1za2lwLWFkIj48ZGl2IGNsYXNzPSJvLS1zbG9nYW4iPjxzdHJvbmc+5Yqg6YCf5ZCnPC9zdHJvbmc+PGRpdiBjbGFzcz0iby0tbG9hZGVyIj4nICsgSWNvbi5sb2FkZXIgKyAiPC9kaXY+PHN0cm9uZz5TVklQLTY2Njwvc3Ryb25nPjwvZGl2PjwvZGl2PiIsIGlzVmlwU2l0ZVJlZ2V4ID0gLyh2XC5xcXx0dlwuc29odXxpcWl5aXx5b3VrdXxtZ3R2fDE5MDV8cHB0dnxsZSlcLihjb218Y24pLywgaXNBbmltZVNpdGVSZWdleCA9IC8oYmlsaWJpbGl8Y3lsb2xpfG5pY290dnxkdW9taW1ofHp6emZ1bnxtaWthbmFuaXx4YmRtfGFnZWZhbnN8cWlubWVpfGJpbWliaW1pKVwuKGNvbXxtZXxvcmd8dHZ8dmlkZW8pLywgRSA9IGVtaXR0ZXIoKTsKICBsZXQgcGFnZUluZm8gPSB7fTsKICBjb25zdCBBcnIgPSB7CiAgICBzaHVmZmxlKG4pIHsKICAgICAgZm9yIChsZXQgZSA9IG4ubGVuZ3RoOyAwIDwgZTsgKSB7CiAgICAgICAgY29uc3QgdCA9IF9NYXRoZmxvb3IoTWF0aC5yYW5kb20oKSAqIGUpOwogICAgICAgIGUtLTsKICAgICAgICBjb25zdCBpID0gbltlXTsKICAgICAgICBuW2VdID0gblt0XSwgblt0XSA9IGk7CiAgICAgIH0KICAgICAgcmV0dXJuIG47CiAgICB9LAogICAgcmFuZG9tOiBuID0+IG5bX01hdGhmbG9vcihNYXRoLnJhbmRvbSgpICogbi5sZW5ndGgpXQogIH07CiAgbGV0IGFsbG93U2NhbGUgPSAhMDsKICBFLm9uKCJsb2ciLCAoZnVuY3Rpb24oKSB7fSkpLCBFLm9uKCJ1cmwuY2hhbmdlIiwgKGZ1bmN0aW9uKG4pIHsKICAgIGxldCB7b2xkVXJsOiBlLCBuZXdVcmw6IHQsIGF1dG9QbGF5OiBpfSA9IG47CiAgICB0cnkgewogICAgICBhZGRvbkdvKCk7CiAgICB9IGNhdGNoIChuKSB7fQogICAgY29uc3QgbyA9IEFERE9OUy5maW5kKChmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBuLnBsYXkgJiYgbi5wbGF5LnZpcCAmJiBJcyhuLnBsYXkubWF0Y2gsIGUpOwogICAgfSkpLCBhID0gQURET05TLmZpbmQoKGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIG4ucGxheSAmJiBuLnBsYXkudmlwICYmIElzKG4ucGxheS5tYXRjaCwgdCk7CiAgICB9KSk7CiAgICBvICYmIGEgJiYgRS5lbWl0KCJwbGF5dXJsLmNoYW5nZSIpOwogIH0pKSwgU0VBUkNIX1VSTFMgJiYgSXNOb3QoL2RvdWJhblwuY29tLykgJiYgKFNFQVJDSF9VUkxTID0gIuixhueToyAgaHR0cHM6Ly9tb3ZpZS5kb3ViYW4uY29tL3RhZy9cblxuIiArIFNFQVJDSF9VUkxTKSwKICBTRUFSQ0hfVVJMUyA9IGVuc3VyZUFycmF5KFNFQVJDSF9VUkxTKS5tYXAoKGZ1bmN0aW9uKG4pIHsKICAgIGNvbnN0IHt1cmw6IGUsIG5hbWU6IHR9ID0gcGFyc2VVcmwobiksIGkgPSBJcyhpc0FuaW1lU2l0ZVJlZ2V4LCBlKSwgbyA9IElzKGlzVmlwU2l0ZVJlZ2V4LCBlKTsKICAgIHJldHVybiB7CiAgICAgIHVybDogZSwKICAgICAgbmFtZTogdCwKICAgICAgd2VpZ2h0OiAvZG91YmFuLmNvbS8udGVzdChlKSA/IDEwIDogKElzKC9iaWxpYmlsaS5jb20vKSB8fCBJcyhpc0FuaW1lU2l0ZVJlZ2V4KSkgJiYgaSA/IDUgOiAoSXMoaXNWaXBTaXRlUmVnZXgpIHx8IElzKC9kb3ViYW4uY29tLykpICYmIG8gPyAzIDogaSA/IDEgOiBvID8gMCA6IDIKICAgIH07CiAgfSkpLCBTRUFSQ0hfVVJMUy5zb3J0KChmdW5jdGlvbihuLCBlKSB7CiAgICByZXR1cm4gZS53ZWlnaHQgLSBuLndlaWdodDsKICB9KSksICQoImh0bWwiKS5hZGRDbGFzcygiby0tbWl5aW5nIiArIChpc01vYmlsZSA/ICIgby0tbSIgOiAiIG8tLXBjIikpOwogIGxldCB3aW5XID0gd2luZG93LmlubmVyV2lkdGggfHwgMDsKICBmb3IgKGNvbnN0IG4gPSBEYXRlLm5vdygpOyAzZTMgPiBEYXRlLm5vdygpIC0gbiAmJiAwID09PSAod2luVyA9IHdpbmRvdy5pbm5lcldpZHRoIHx8IDApOyApIGF3YWl0IGRlbGF5KDEwMCk7CiAgY29uc3QgYnV0dG9uQm94U2hhZG93ID0gImJveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwwLDAsMC4yKTsiLCBtYXhTbmlmZklmcmFtZVdpZHRoID0gMTA1LCBpc1NuaWZmSWZyYW1lID0gMCA8IHdpblcgJiYgd2luVyA8PSBtYXhTbmlmZklmcmFtZVdpZHRoICsgNTsKICBwYWdlSW5mbyA9IHsKICAgIGlzU25pZmZJZnJhbWU6IGlzU25pZmZJZnJhbWUsCiAgICB3aW5XOiB3aW5XLAogICAgc2NyZWVuV2lkdGg6IHNjcmVlbldpZHRoCiAgfTsKICBjb25zdCBpc0ppZXhpUmVnZXggPSAvKGp4fHVybHx2KT1odHRwL2k7CiAgbGV0IG0zdThWaWRlbzsKICBpZiAoIWlzU25pZmZJZnJhbWUgJiYgKElzKGlzSmlleGlSZWdleCkgJiYgSXMoaXNWaXBTaXRlUmVnZXgsIEhyZWYucmVwbGFjZSgvLis9aHR0cC8sICJodHRwIikpIHx8IGlzTm90VG9wICYmIChJcygvPWh0dHAuK1wubTN1OC8pIHx8IChtM3U4VmlkZW8gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJ2aWRlb1tzcmNdIikpICYmIC9cLm0zdTgvLnRlc3QobTN1OFZpZGVvLnNyYykpKSAmJiAoYWRkQ3NzKCJcbmJvZHkgPiAqOm5vdChzY3JpcHQpICsgc2NyaXB0IH4gKltpZF06bm90KFtjbGFzc10pIHsiICsgUHVyaWZ5U3R5bGUgKyAifSIpLAogIGZpeE0zdThQbGF5aW5nKCkpLCB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIChmdW5jdGlvbihuKSB7CiAgICBjb25zdCBlID0gbi5kYXRhOwogICAgZSAmJiBlLl9pZCA9PT0gTUVTU0FHRV9JRCAmJiAoaXNOb3RUb3AgJiYgZS5wYXJlbnQgPyAoZS5mcm9tID0gbG9jYXRpb24uaHJlZiwgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZShlLCAiKiIpKSA6IGlzVG9wICYmIGUuYWN0aW9uICYmIEUuZW1pdChlLmFjdGlvbiwgZSkpOwogIH0pKSwgaXNOb3RUb3ApIHsKICAgIGlmIChJcygvbTE5MDcuY24vKSkgewogICAgICBhZGRDc3MoIlxuI3MtcGxheWVyICsgLnNob3cgPiBkaXZbdGl0bGVdLCNzLWNvbnRyb2xzICsgZGl2ID4gZGl2Om50aC1jaGlsZChuKzUpOm5vdCg6bGFzdC1jaGlsZCl7IiArIFB1cmlmeVN0eWxlICsgIn0iKTsKICAgICAgbGV0IG4gPSAwOwogICAgICBjb25zdCBlID0gc2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCkgewogICAgICAgIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjcy1wbGF5ZXIgKyAuc2hvdyIpIHx8IDMwIDwgbisrKSAmJiAoY2xlYXJJbnRlcnZhbChlKSwKICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjcy1jb250cm9scyA+IGRpdiBpbWcgKyBzcGFuIikuY2xpY2soKSk7CiAgICAgIH0pLCAxMDApOwogICAgICByZXR1cm4gdm9pZCAod2luZG93LmFsZXJ0ID0gZnVuY3Rpb24oKSB7fSk7CiAgICB9CiAgICByZXR1cm4gSXMoL2p4LmppYXNoZXNoYW5nbWFvLmNvbS8pID8gYWRkQ3NzKCJcbiNsaW5lcyB7IiArIFB1cmlmeVN0eWxlICsgIn0iKSA6IElzKC9va2p4LmNjLykgJiYgYWRkQ3NzKCIuV0FORy1XQU5HIHt2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDt9IiksCiAgICB2b2lkIChpc1NuaWZmSWZyYW1lICYmIHNuaWZmSW5JZnJhbWUoKSk7CiAgfQogIGlmIChJcygvYmVpaml4c1wuY24uKnVybD1odHRwLykpIGlmIChhZGRDc3MoIlxuYm9keSA+IGZvcm0ge3Bvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O2xlZnQ6IDAgIWltcG9ydGFudDtyaWdodDogMCAhaW1wb3J0YW50O3RvcDogMCAhaW1wb3J0YW50O2JvdHRvbTogMCAhaW1wb3J0YW50O2JhY2tncm91bmQ6ICNlZWU4ZDMgIWltcG9ydGFudDt6LWluZGV4OiAiICsgTUFYX1pfSU5ERVggKyAnICFpbXBvcnRhbnQ7fWRpdixpbnB1dCxmb3JtIHttYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDt9Zm9ybSAjZGl2Y3NzNSB7aGVpZ2h0OiBhdXRvO3BhZGRpbmc6IDAgMWVtO2JvcmRlcjogbm9uZTt3aWR0aDogYXV0bzt9Lm8tLXBjIGZvcm0gI2RpdmNzczUge21heC13aWR0aDogNTcwcHggIWltcG9ydGFudDt9Lm8tLW0gaDUgaW5wdXRbdHlwZT0idGV4dCJdIHt3aWR0aDogOTAlICFpbXBvcnRhbnQ7bWFyZ2luOiAuNWVtIDAgIWltcG9ydGFudDtwYWRkaW5nOiAwIC41ZW0gIWltcG9ydGFudDt9Lm8tLWZhaWwge2hlaWdodDogYXV0byAhaW1wb3J0YW50O30uby0tZmFpbCA+IGRpdiB7dGV4dC1hbGlnbjogY2VudGVyO2JvcmRlci10b3A6IDFweCBzb2xpZCAjNDk1MDU3O2JvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNDk1MDU3O3BhZGRpbmc6IDFlbTtjb2xvcjogI2Q5NDgwZjtmb250LXdlaWdodDogYm9sZDtmb250LXNpemU6IDE2cHg7YmFja2dyb3VuZC1jb2xvcjogI2ZmZjRlNjt9Lm8tLWZhaWwgPiBkaXYgPiBkaXYgKyBkaXYge21hcmdpbi10b3A6IDFlbTt9Lm8tLW0gLnZpZGVvLWpzIHt3aWR0aDogMTAwJSAhaW1wb3J0YW50O2hlaWdodDogMTAwdmggIWltcG9ydGFudDt9JyksCiAgaXNNb2JpbGUgJiYgdG9nZ2xlVmlld3BvcnQoKSwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI1RleHRCb3gxIikudmFsdWUpIHsKICAgICQoIiNmb3JtMSIpLnByZXBlbmQoJCgiLnZpZGVvLWpzIikucGFyZW50KCkpOwogICAgbGV0IG4gPSAwOwogICAgY29uc3QgZSA9IHNldEludGVydmFsKChmdW5jdGlvbigpIHsKICAgICAgY29uc3QgdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInZpZGVvIik7CiAgICAgIGlmICh0ICYmIDM5MCA+IHQuZHVyYXRpb24pIHsKICAgICAgICB0LnBhdXNlKCk7CiAgICAgICAgY29uc3QgbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNUZXh0Qm94MiIpLnZhbHVlIHx8ICIiLCBpID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigidmlkZW8iKTsKICAgICAgICBpLmNsYXNzTGlzdC5hZGQoIm8tLWZhaWwiKSwgaS5pbm5lckhUTUwgPSAiPGRpdj48ZGl2Puino+aekOWksei0pTwvZGl2PiIgKyAobiA/ICI8ZGl2PiIgKyBuICsgIjwvZGl2PiIgOiAiIikgKyAiPC9kaXY+IiwKICAgICAgICBjbGVhckludGVydmFsKGUpOwogICAgICB9CiAgICAgIDEwMCA8IG4rKyAmJiBjbGVhckludGVydmFsKGUpOwogICAgfSksIDEwMCk7CiAgfSBlbHNlIHsKICAgIGxldCBuID0gSHJlZi5zcGxpdCgidXJsPSIpWzFdOwogICAgaWYgKG4pIHsKICAgICAgbiA9IGRlY29kZVVSSShuKSwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI1RleHRCb3gxIikudmFsdWUgPSBuOwogICAgICBjb25zdCBlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI0J1dHRvbjEiKTsKICAgICAgaWYgKGUpIHsKICAgICAgICBjb25zdCBuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnZpZGVvLWpzIik7CiAgICAgICAgbi5zdHlsZS5kaXNwbGF5ID0gIm5vbmUgIWltcG9ydGFudCIsIGUuY2xpY2soKTsKICAgICAgfQogICAgfQogICAgbGV0IGUgPSAwOwogICAgY29uc3QgdCA9IHNldEludGVydmFsKChmdW5jdGlvbigpIHsKICAgICAgY29uc3QgbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInZpZGVvIik7CiAgICAgIG4gJiYgMzYwID4gbi5kdXJhdGlvbiA/IG4ucGF1c2UoKSA6IG4ucGxheSgpLCAxMDAgPCBlKysgJiYgY2xlYXJJbnRlcnZhbCh0KTsKICAgIH0pLCAxMDApOwogIH0gZWxzZSB7CiAgICBpZiAoSXMoL21cLnR2XC5zb2h1XC5jb21cL3Bob25lX3BsYXlfZmlsbS4rdmlkPS8pKSByZXR1cm4gbG9jYXRpb24uaHJlZiA9IEhyZWYucmVwbGFjZSgicGhvbmVfcGxheV9maWxtIiwgInYiICsgSHJlZi5tYXRjaCgvdmlkPShcZCspLylbMV0gKyAiLnNodG1sIik7CiAgICBpZiAoSXMoL3NlYXJjaFwuZG91YmFuXC5jb21cL21vdmllXC8vKSkgYWRkQ3NzKCJcbiNkYWxlX21vdmllX3N1YmplY3Rfc2VhcmNoX2JvdHRvbSwjZGFsZV9tb3ZpZV9zdWJqZWN0X3NlYXJjaF90b3BfcmlnaHQsI2RhbGVfbW92aWVfc3ViamVjdF90b3BfcmlnaHQsI2RhbGVfbW92aWVfc3ViamVjdF9ib3R0b21fc3VwZXJfYmFubmVyLCNkYWxlX21vdmllX3N1YmplY3RfbWlkZGxlX3JpZ2h0IHsiICsgUHVyaWZ5U3R5bGUgKyAifS5vLS1qdW1wIHtwYWRkaW5nLWxlZnQ6IDFlbTt9Lm8tLWp1bXAgYSB7ZGlzcGxheTogaW5saW5lLWZsZXggIWltcG9ydGFudDthbGlnbi1pdGVtczogY2VudGVyO2JvcmRlci1yYWRpdXM6IDRweDtmb250LXNpemU6IDAuNzVlbTtoZWlnaHQ6IDJlbTtqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtsaW5lLWhlaWdodDogMS41O3BhZGRpbmctbGVmdDogMC43NWVtO3BhZGRpbmctcmlnaHQ6IDAuNzVlbTt3aGl0ZS1zcGFjZTogbm93cmFwO2JhY2tncm91bmQtY29sb3I6ICNlZmZhZjM7Y29sb3I6ICMyNTc5NDI7bWFyZ2luLXRvcDogMC41ZW07bWFyZ2luLXJpZ2h0OiAwLjVlbTtjdXJzb3I6IHBvaW50ZXI7fSIpLAogICAgJCgoZnVuY3Rpb24oKSB7CiAgICAgICQoIiNpY3AiKS5odG1sKE9PX1NJR04pLCAkKCIuZ2VtemNwIikuZWFjaCgoZnVuY3Rpb24obiwgZSkgewogICAgICAgIGNvbnN0IHQgPSAkKCIudGl0bGUiLCBlKS50ZXh0KCk7CiAgICAgICAgJChlKS5hcHBlbmQoJzxwIGNsYXNzPSJvLS1qdW1wIj4nICsgZ2V0U2VhcmNoU291cmNlc0h0bWwodCkgKyAiPC9wPiIpOwogICAgICB9KSk7CiAgICB9KSk7IGVsc2UgaWYgKElzKC9tXC5kb3ViYW5cLmNvbVwvc2VhcmNoXC9cPy4qdHlwZT1tb3ZpZS8pKSBhZGRDc3MoIlxuI1RhbGlvbk5hdiwuc2VhcmNoLXJlc3VsdHMtbW9kdWxlcy1uYW1lIHsiICsgUHVyaWZ5U3R5bGUgKyAifS5zZWFyY2gtbW9kdWxlIHttYXJnaW4tdG9wOiAwO30uc2VhcmNoLXJlc3VsdHMgaW1nIHt3aWR0aDogODBweDt9LnNlYXJjaC1yZXN1bHRzIHtwYWRkaW5nLWJvdHRvbTogMTBweDt9LnNlYXJjaC1yZXN1bHRzIGxpIGEge2Rpc3BsYXk6IGZsZXg7YWxpZ24taXRlbXM6IGNlbnRlcjt9LnNlYXJjaC1yZXN1bHRzIGltZyB7aGVpZ2h0OiAxMDAlO3BhZGRpbmc6IDA7bWFyZ2luOiA1cHggMDtib3JkZXI6IDJweCBzb2xpZDtib3JkZXItaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICMyYjY4YzQgMCUsI2NmMmQ2ZSAxMDAlKTE7fSIpLAogICAgJCgoZnVuY3Rpb24oKSB7CiAgICAgICQoIiNtb3JlLXNlYXJjaCIpLmFwcGVuZCgiICAgICIgKyBPT19TSUdOKSwgJCgiLnN1YmplY3QtaW5mbyIpLmVhY2goKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICBpbnNlcnRTZWFyY2hBZGRvbigkKCIuc3ViamVjdC10aXRsZSIsIGUpLnRleHQoKSwgZSwgImFwcGVuZCIpOwogICAgICB9KSksICQoIi5zZWFyY2gtaGQgaW5wdXQiKS5vbigia2V5dXAiLCAoZnVuY3Rpb24obikgewogICAgICAgIDEzID09PSBuLmtleUNvZGUgJiYgKG4ucHJldmVudERlZmF1bHQoKSwgbG9jYXRpb24uaHJlZiA9ICIvc2VhcmNoLz9xdWVyeT0iICsgbi50YXJnZXQudmFsdWUgKyAiJnR5cGU9bW92aWUiKTsKICAgICAgfSkpLCAkKCIuc2VhcmNoLWhkIC5idXR0b24tc2VhcmNoIikuYXR0cigiaWQiLCBPT19TSUdOKSwgJCgiLnNlYXJjaC1oZCAuYnV0dG9uLXNlYXJjaCIpLm9uKCJjbGljayIsIChmdW5jdGlvbihuKSB7CiAgICAgICAgbi5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGNvbnN0IGUgPSAkKCIuc2VhcmNoLWhkIGlucHV0IikudmFsKCk7CiAgICAgICAgbG9jYXRpb24uaHJlZiA9ICIvc2VhcmNoLz9xdWVyeT0iICsgZSArICImdHlwZT1tb3ZpZSI7CiAgICAgIH0pKTsKICAgIH0pKTsgZWxzZSBpZiAoSXMoL21vdmllLmRvdWJhbi5jb21cL3N1YmplY3RcLy8pKSBhZGRDc3MoIlxuI2RhbGVfbW92aWVfc3ViamVjdF9zZWFyY2hfYm90dG9tLCNkYWxlX21vdmllX3N1YmplY3Rfc2VhcmNoX3RvcF9yaWdodCwjZGFsZV9tb3ZpZV9zdWJqZWN0X3RvcF9yaWdodCwjZGFsZV9tb3ZpZV9zdWJqZWN0X2JvdHRvbV9zdXBlcl9iYW5uZXIsI2RhbGVfbW92aWVfc3ViamVjdF9taWRkbGVfcmlnaHQgeyIgKyBQdXJpZnlTdHlsZSArICJ9Lm8tLWRvdWJhbi1zb3VyY2UgYSB7Y29sb3I6ICMyNTc5NDI7fS5vLS1kb3ViYW4tc291cmNlIGE6aG92ZXIge2NvbG9yOiAjRkZGRkZGO2JhY2tncm91bmQ6ICMyNTc5NDI7fS5vLS1kb3ViYW4tc291cmNlIGEuaXMtdmlwIHtjb2xvcjogI2U4NTkwYzt9Lm8tLWRvdWJhbi1zb3VyY2UgYS5pcy12aXA6aG92ZXIge2NvbG9yOiAjRkZGRkZGO2JhY2tncm91bmQ6ICNlODU5MGM7fS5vLS1kb3ViYW4tc291cmNlIGEuaXMtYW5pbWUge2NvbG9yOiAjZTY0OTgwO30uby0tZG91YmFuLXNvdXJjZSBhLmlzLWFuaW1lOmhvdmVyIHtjb2xvcjogI0ZGRkZGRjtiYWNrZ3JvdW5kOiAjZTY0OTgwO30iKSwKICAgICQoKGZ1bmN0aW9uKCkgewogICAgICAkKCIjaWNwIikuaHRtbChPT19TSUdOKTsKICAgICAgY29uc3QgbiA9IHB1cmlmeUtleXdvcmQoJCgidGl0bGUiKS50ZXh0KCkucmVwbGFjZSgiKOixhueToykiLCAiIikudHJpbSgpKTsKICAgICAgJCgiI2luZm8iKS5hcHBlbmQoJzxkaXYgY2xhc3M9Im8tLWRvdWJhbi1zb3VyY2UiPjxzcGFuIGNsYXNzPSJwbCI+5Zyo57q/6KeC55yLOjwvc3Bhbj48c3Bhbj48c3Bhbj4gPC9zcGFuPicgKyBTRUFSQ0hfVVJMUy5maWx0ZXIoKGZ1bmN0aW9uKG4pIHsKICAgICAgICByZXR1cm4gIS9kb3ViYW5cLmNvbS8udGVzdChuLnVybCk7CiAgICAgIH0pKS5tYXAoKGZ1bmN0aW9uKGUpIHsKICAgICAgICByZXR1cm4gJzxzcGFuPjxhIGNsYXNzPSInICsgKGlzVmlwU2l0ZVJlZ2V4LnRlc3QoZS51cmwpID8gImlzLXZpcCIgOiBpc0FuaW1lU2l0ZVJlZ2V4LnRlc3QoZS51cmwpID8gImlzLWFuaW1lIiA6ICIiKSArICciICcgKyAoaXNNb2JpbGUgPyAiIiA6ICd0YXJnZXQ9Il9ibGFuayIgJykgKyAoX0QgPyAnZGF0YS13ZWlnaHQ9IicgKyBlLndlaWdodCArICciICcgOiAiIikgKyAnaHJlZj0iJyArIHRvU2VhcmNoVXJsKGUudXJsLCBuKSArICciPicgKyBlLm5hbWUgKyAiPC9hPiI7CiAgICAgIH0pKS5qb2luKCIgLyA8L3NwYW4+IikgKyAiPC9zcGFuPjwvc3Bhbj48L2Rpdj4iKTsKICAgIH0pKTsgZWxzZSBpZiAoSXMoL21cLmRvdWJhblwuY29tXC9tb3ZpZVwvc3ViamVjdFwvLykpIGFkZENzcygiLnNjb3JlLXdyaXRlLGFbaHJlZio9J3RvX2FwcCddOm5vdCguc3ViLWhvbm9yKTpub3QoLnN1Yi1jb3ZlciksYVtocmVmKj0nZG91YmFuYXBwJ10sZGl2W2lkKj0nQkFJRFUnXSxkaXZbaWQqPSdnb29nbGUnXSxzZWN0aW9uICsgLmNlbnRlciwuYm90dG9tX2FkX2Rvd25sb2FkLC5zdWItdmVuZG9yLC50b19wYywuVGFsaW9uTmF2LXN0YXRpYywuc3ViLWRldGFpbCAubWFyay1tb3ZpZSwuc3ViLWRldGFpbCAubWFyay10diwuc3ViamVjdC1iYW5uZXIsLmJvdHRvbV9hZF9kb3dubG9hZCwuY292ZXItY291bnQsI2dvb2dsZV9lc2YsLmFkc2J5Z29vZ2xlLC5BZHZlcnRpc2VtZW50LC5UYWxpb25OYXYtcHJpbWFyeSAubmF2LWJ0bnMuY2FuY2VsIHsiICsgUHVyaWZ5U3R5bGUgKyAnfS5zdWItaW5mbyAuc3ViLWNvdmVyIHtkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O30uVGFsaW9uTmF2LXByaW1hcnkge3Bvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50O2p1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO30uc3ViamVjdC1oZWFkZXItd3JhcCAuc3ViLWhvbm9yIHtmb250LXNpemU6IDEycHg7fS5zdWJqZWN0LWludHJvIHttYXJnaW4tdG9wOiAuNWVtO30uc3ViamVjdC1jb21tZW50cywuc3ViamVjdC1yZXZpZXdzIHttYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7fS5UYWxpb25OYXYgLlRhbGlvbk5hdi1wcmltYXJ5IC5zZWFyY2gtYm94IHt3aWR0aDogMjAwcHg7ZmxleDogMjAwcHggMCAwO2FuaW1hdGlvbjogbm9uZTt9YS5uYXYtYnRuLWl0ZW1baHJlZio9XCdsb2dvdXRcJ10ge3dpZHRoOiA1ZW07bWFyZ2luLWxlZnQ6IC0uNWVtO2ZvbnQtc2l6ZTogLjhlbTt9LnN1Yi1vcmlnaW5hbC10aXRsZSB7cGFkZGluZzogMC4yNWVtIDA7fS5fVl9zaWduIHtmb250LXNpemU6IDAuODVlbTtvcGFjaXR5OiAwLjI1O3RleHQtYWxpZ246IGNlbnRlcjtwYWRkaW5nLWJvdHRvbTogMWVtO30uX1Zfc291cmNlLCAuc3ViLXNjb3JlICsgLnN1Yi1zY29yZSB7bWFyZ2luLXRvcDogMS41ZW0gIWltcG9ydGFudDtjb2xvcjogI2ZmZjt9Ll9WX3NvdXJjZSAuc3ViLXNjb3JlIC5zdWItY29udGVudCB7ZGlzcGxheTogYmxvY2s7fS5fVl9zb3VyY2UgLnN1Yi1zY29yZSBhIHtwYWRkaW5nOiAwLjNlbSAwLjVlbSAwLjJlbTtsaW5lLWhlaWdodDogMS40O21hcmdpbjogMCAwLjE1ZW07Ym9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjIpO2ZvbnQtc2l6ZTogMS4wNWVtO2ZvbnQtd2VpZ2h0OiBib2xkO2xldHRlci1zcGFjaW5nOiAxcHg7bWFyZ2luLXRvcDogMC41ZW07ZGlzcGxheTogaW5saW5lLWJsb2NrO2NvbG9yOiAjZmZlOGNjO2JhY2tncm91bmQ6IHJnYmEoMjM5LCAyMzgsIDIzOCwgMC4wNSk7Ym9yZGVyLXJhZGl1czogNHB4O2JveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwwLDAsMC4yKTt9I1RhbGlvbk5hdiB7ZGlzcGxheTogbm9uZTt9I1RhbGlvbk5hdiAubG9nbyB7YmFja2dyb3VuZDogbm9uZTtmb250LXNpemU6IDFlbTtkaXNwbGF5OiBpbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjthbGlnbi1pdGVtczogY2VudGVyO2NvbG9yOiAjZGVlMmU2O21hcmdpbi1yaWdodDogNXB4O30uc2VhcmNoLWJveDpub3QoLm9uLXNlYXJjaCkge29wYWNpdHk6IDAuNzt9I2NoYW5uZWxfdGFncyB7bWFyZ2luLWJvdHRvbTogMTBweDt9LnN1YmplY3QtaGVhZGVyLXdyYXAgLnN1Yi1kZXRhaWwge2Rpc3BsYXk6IGZsZXg7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDt9I2NoYW5uZWxfdGFncyB7bWFyZ2luLXRvcDogMTBweDt9aW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24saW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24saW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLXJlc3VsdHMtYnV0dG9uLGlucHV0W3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWRlY29yYXRpb24gey13ZWJraXQtYXBwZWFyYW5jZTpub25lO30uby0tZG91YmFuLXNvdXJjZSBhIHtjb2xvcjogI2U5ZmFjOCAhaW1wb3J0YW50O30uby0tZG91YmFuLXNvdXJjZSBhLmlzLXZpcCB7Y29sb3I6ICNmZmMwNzggIWltcG9ydGFudDt9Lm8tLWRvdWJhbi1zb3VyY2UgYS5pcy1hbmltZSB7Y29sb3I6ICNmZmRlZWIgIWltcG9ydGFudDt9JyksCiAgICAkKChmdW5jdGlvbigpIHsKICAgICAgJCgiLm1vdmllLXJldmlld3MgLnNob3ctYWxsIikuYWZ0ZXIoJzxkaXYgY2xhc3M9Il9WX3NpZ24iPjxhIGhyZWY9Imh0dHBzOi8vZ2l0ZWUuY29tL2VjcnVvcy9vbyI+6LGG55Ojwrflh4DljJYgJyArIE9PX1NJR04gKyAiPC9hPjwvZGl2PiIpLAogICAgICAkKCJzZWN0aW9uICsgLmNlbnRlciIpLmVhY2goKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICAkKGUpLnJlbW92ZSgpOwogICAgICB9KSksICQoIi5zdWJqZWN0LWhlYWRlci13cmFwIikuYWZ0ZXIoJCgiI1RhbGlvbk5hdiIpKSwgJCgiI1RhbGlvbk5hdiIpLmNzcygiZGlzcGxheSIsICJibG9jayIpLAogICAgICAkKCIjVGFsaW9uTmF2IC5sb2dvIikuaHRtbChPT19TSUdOKS5hdHRyKCJocmVmIiwgImh0dHBzOi8vbW92aWUuZG91YmFuLmNvbS90YWcvIy8iKSwKICAgICAgJCgiLnNlYXJjaC1ib3giKS5yZW1vdmUoKSwgJCgiLlRhbGlvbk5hdi1wcmltYXJ5IC5sb2dvIikuYWZ0ZXIoJzxkaXYgY2xhc3M9InNlYXJjaC1ib3giPjxpbnB1dCBjbGFzcz0ic2VhcmNoLWlucHV0IiB0eXBlPSJzZWFyY2giIHBsYWNlaG9sZGVyPSLmkJzntKIiPjwvZGl2PicpLAogICAgICAkKCIuc2VhcmNoLWlucHV0Iikub24oImZvY3VzIiwgKGZ1bmN0aW9uKCkgewogICAgICAgICQodGhpcykucGFyZW50KCkuYWRkQ2xhc3MoIm9uLXNlYXJjaCIpOwogICAgICB9KSkub24oImJsdXIiLCAoZnVuY3Rpb24oKSB7CiAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygib24tc2VhcmNoIik7CiAgICAgIH0pKSwgJCgiLnNlYXJjaC1pbnB1dCIpLm9uKCJrZXl1cCIsIChmdW5jdGlvbihuKSB7CiAgICAgICAgMTMgPT09IG4ua2V5Q29kZSAmJiAobi5wcmV2ZW50RGVmYXVsdCgpLCBsb2NhdGlvbi5ocmVmID0gIi9zZWFyY2gvP3F1ZXJ5PSIgKyBuLnRhcmdldC52YWx1ZSArICImdHlwZT1tb3ZpZSIpOwogICAgICB9KSk7CiAgICAgIGNvbnN0IG4gPSBwdXJpZnlLZXl3b3JkKCQoIi5zdWItdGl0bGUiKS50ZXh0KCkudHJpbSgpKTsKICAgICAgMCA9PT0gJCgiLl9WX3NvdXJjZSIpLmxlbmd0aCAmJiAkKCIuc3ViamVjdC1oZWFkZXItd3JhcCIpLmFwcGVuZCgnPGRpdiBjbGFzcz0iX1Zfc291cmNlIHN1YmplY3QtbWFyayI+PGRpdiBjbGFzcz0ic3ViLXNjb3JlIj48ZGl2IGNsYXNzPSJzdWItdHJhZGVtYXJrIj7lnKjnur/op4LnnIs8L2Rpdj48ZGl2IGNsYXNzPSJzdWItY29udGVudCBvLS1kb3ViYW4tc291cmNlIj4nICsgZ2V0U2VhcmNoU291cmNlc0h0bWwobiwgITEpICsgIjwvZGl2PjwvZGl2PjwvZGl2PiIpLAogICAgICBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgICAkKCIuc3ViamVjdC1pbnRybyAuYmQgcCIpLmdldCgwKS5jbGljaygpLCAkKCIuc3ViLWNvdmVyIikuYXR0cigiaHJlZiIsICIjIiksICQoIiNzdWJqZWN0LWhvbm9yLXJvb3QgYSIpLmF0dHIoImhyZWYiLCAiIyIpOwogICAgICB9KSwgMWUzKTsKICAgICAgbGV0IGUgPSAwOwogICAgICBjb25zdCB0ID0gc2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCkgewogICAgICAgICQoImJvZHkgPiBpbnMsIGJvZHkgPiBpZnJhbWUsIC5hZHNieWdvb2dsZSIpLnJlbW92ZSgpLCA1IDwgZSsrICYmIGNsZWFySW50ZXJ2YWwodCk7CiAgICAgIH0pLCA1MDApOwogICAgICAhZnVuY3Rpb24gbigpIHsKICAgICAgICBjb25zdCBlID0gJCgiI3N1YmplY3QtaGVhZGVyLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIik7CiAgICAgICAgaWYgKGUpIHsKICAgICAgICAgIGNvbnN0IG4gPSBlLm1hdGNoKC86XHMqKFteO10rKTs/LylbMV0sIHQgPSBuLnJlcGxhY2UoIikiLCAiLCAwKSIpOwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgYWRkQ3NzKCIuc3ViLWNvdmVyOjpiZWZvcmUge2JhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KGJvdHRvbSwgIiArIG4gKyAiIDAlLCAiICsgdCArICIgNSUpLCAtd2Via2l0LWxpbmVhci1ncmFkaWVudChyaWdodCwgIiArIG4gKyAiIDAlLCAiICsgdCArICIgNSUpLC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgIiArIG4gKyAiIDAlLCAiICsgdCArICIgNSUpLCAtd2Via2l0LWxpbmVhci1ncmFkaWVudChsZWZ0LCAiICsgbiArICIgMCUsICIgKyB0ICsgJyA1JSk7Y29udGVudDogIiI7Ym90dG9tOiAwO3Bvc2l0aW9uOiBhYnNvbHV0ZTtsZWZ0OiAwO3JpZ2h0OiAwO3RvcDogMDt3aWR0aDogMTAycHg7aGVpZ2h0OiAxNDJweDtib3JkZXItcmFkaXVzOiA0cHg7fScpOwogICAgICAgICAgfSBjYXRjaCAobikge30KICAgICAgICB9IGVsc2Ugc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICBuKCk7CiAgICAgICAgfSksIDEwMCk7CiAgICAgIH0oKTsKICAgIH0pKTsgZWxzZSBpZiAoSXMoL21vdmllXC5kb3ViYW5cLmNvbVwvdGFnXC8vKSkgYWRkQ3NzKCIuYXNpZGUsIC5leHRyYSwuZGFsZV9tb3ZpZV90YWdfYm90dG9tX2Jhbm5lciB7IiArIFB1cmlmeVN0eWxlICsgIn0iICsgcHJlZml4Q3NzKCIuZ3JpZC0xNi04IC5hcnRpY2xlIHt3aWR0aDogYXV0bztmbG9hdDogdW5zZXQ7fWgxIHtkaXNwbGF5OiBub25lO30jZGItbmF2LW1vdmllIHttYXJnaW4tYm90dG9tOiAyMHB4O30jZGItbmF2LW1vdmllIC5vLS1uYXYtaXRlbS1hIHtiYWNrZ3JvdW5kLWNvbG9yOiAjMjdhO2NvbG9yOiAjZmFmYWZhO3BhZGRpbmc6IDNweCA1cHg7Ym9yZGVyLXJhZGl1czogM3B4O30ubGlzdC13cCB7ZGlzcGxheTogZmxleDtmbGV4LXdyYXA6IHdyYXA7anVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO21hcmdpbi10b3A6IDI1cHg7fWEuaXRlbSB7d2lkdGg6IDExOHB4O21hcmdpbjogMCA4cHg7fWRpdi5pdGVtIHt3aWR0aDogMTAwJTttYXJnaW4tbGVmdDogOHB4O21hcmdpbi1yaWdodDogOHB4O21hcmdpbi1ib3R0b206IDE2cHg7fWEuaXRlbSBwIHtwYWRkaW5nLXJpZ2h0OiAwO3RleHQtYWxpZ246IGNlbnRlcjt9YS5pdGVtIC5jb3Zlci13cCwgZGl2Lml0ZW0gLnBvc3RlciB7b3ZlcmZsb3c6IGhpZGRlbjtib3JkZXItcmFkaXVzOiAzcHg7Ym94LXNoYWRvdzogMCAxcHggNHB4IHJnYmEoMCwgMCwgMCwgMC4zOSk7Ym9yZGVyOiAzcHggc29saWQgI2YxZWRlZDtoZWlnaHQ6IGF1dG87fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMzIwcHgpIHthLml0ZW0gLmNvdmVyLXdwIHtib3JkZXItd2lkdGg6IDA7fX1hLml0ZW0gLmNvdmVyLXdwOmhvdmVyLCBkaXYuaXRlbSAucG9zdGVyOmhvdmVyIHtib3gtc2hhZG93OiAwIDVweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC41KTt9YS5pdGVtIC5waWMgaW1nIHt3aWR0aDogMTAwJTtoZWlnaHQ6IDE2M3B4O29iamVjdC1maXQ6IGNvdmVyO31hLml0ZW0gLmNvdmVyLXdwOmFmdGVyIHtkaXNwbGF5OiBub25lO30udGFnLW5hdiB7bWFyZ2luLXJpZ2h0OiAwO30uby0taXRlbS1kaXZpZGVyIHt3aWR0aDogMTAwJTt9Lm8tLWl0ZW0tZGl2aWRlciArIC5vLS1pdGVtLWRpdmlkZXIge2Rpc3BsYXk6IG5vbmU7fSIsICIuby0tbWl5aW5nIikgKyBwcmVmaXhDc3MoIi5jYXRlZ29yeSB7d2lkdGg6IDEwMCU7d2hpdGUtc3BhY2U6IG5vd3JhcDtvdmVyZmxvdy14OiBhdXRvO30udGFncyB7bWFyZ2luLWJvdHRvbTogMWVtICFpbXBvcnRhbnQ7fS50YWdzLCAuby0tZG91YmFuLXNlYXJjaCB7cGFkZGluZy1sZWZ0OiA2cHg7cGFkZGluZy1yaWdodDogNnB4O30uY2hlY2tib3hfX2lucHV0IHt2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7fS50YWctbmF2IHttYXJnaW46IDAgYXV0bztmb250LXNpemU6IDEycHg7d2lkdGg6IDEwMCU7fS50YWctbmF2IC50YWJzLCAudGFnLW5hdiAuY2hlY2sge2Rpc3BsYXk6IGZsZXg7anVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7d2lkdGg6IDEwMCU7fS50YWctbmF2IC50YWJzIGEge3BhZGRpbmc6IDcuNXB4IDVweCA1cHg7fS50YWJzIGE6bm90KC50YWItY2hlY2tlZCkge2JvcmRlcjogMXB4IHNvbGlkICNkZmRmZGY7fS50YWJzIC50YWItY2hlY2tlZCB7Ym9yZGVyOiAxcHggc29saWQgIzI1OGRjZCFpbXBvcnRhbnQ7fS50YWItY2hlY2tlZDphZnRlciB7ZGlzcGxheTogbm9uZTt9LmNoZWNrYm94LCAucmFuZ2Uge21hcmdpbi1yaWdodDogNXB4O30uY2hlY2sge2Zsb2F0OiBub25lO21hcmdpbi10b3A6IDVweDt9Lmxpc3Qtd3Age21hcmdpbi10b3A6IDQwcHg7anVzdGlmeS1jb250ZW50OiBzcGFjZS1ldmVubHk7fS5saXN0LXdwLCAuaXRlbSAuY292ZXItd3Age292ZXJmbG93OiB1bnNldDt9YS5pdGVtIHt3aWR0aDogY2FsYygoMTAwJSAtIDE1cHgpIC8gMyk7dGV4dC1hbGlnbjogY2VudGVyO21hcmdpbjogMCAycHg7fWEuaXRlbSBwIHtwYWRkaW5nLXJpZ2h0OiAwO31hLml0ZW0gLmNvdmVyLXdwOmFmdGVyLCAucG9zdGVyOmFmdGVyIHtkaXNwbGF5OiBub25lO30udGFnLW5hdiAucmFuZ2UtZHJvcGRvd24ge2xlZnQ6IDAgIWltcG9ydGFudDt3aWR0aDogYXV0byAhaW1wb3J0YW50O3JpZ2h0OiAwICFpbXBvcnRhbnQ7dG9wOiAtNGVtICFpbXBvcnRhbnQ7fS5tb3JlIHttYXJnaW46IDAgMWVtIDAuNWVtICFpbXBvcnRhbnQ7fSIsICIub28iKSArIHByZWZpeENzcygiXG5ib2R5ID4gKjpub3QoLm9vKSB7IiArIFB1cmlmeVN0eWxlICsgIn0jYXBwIC5hcnRpY2xlLCAuYXJ0aWNsZS5vbyB7cG9zaXRpb246IGFic29sdXRlO3RvcDogMDtsZWZ0OiAwO3JpZ2h0OiAwO3BhZGRpbmc6IDEwcHggMDt0cmFuc2l0aW9uOiBhbGwgMC44czt9LmNhdGVnb3J5Ojotd2Via2l0LXNjcm9sbGJhciB7d2lkdGg6IDFweDtoZWlnaHQ6IDFweDtiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDIyMywgMjIzLCAyMjMsIDAuMjUpO30uY2F0ZWdvcnk6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtib3JkZXI6IDBweCBub25lICNmZmZmZmY7Ym9yZGVyLXJhZGl1czogNTBweDt9LmNhdGVnb3J5Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7LXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDAgMi41cHggcmdiYSgwLCAwLCAwLCAwLjEpO2JveC1zaGFkb3c6IGluc2V0IDAgMCAyLjVweCByZ2JhKDAsIDAsIDAsIDAuMSk7Ym9yZGVyLXJhZGl1czogMi41cHg7YmFja2dyb3VuZC1jb2xvcjogcmdiYSgyMjMsIDIyMywgMjIzLCAwLjI1KTtvcGFjaXR5OiAwLjc7dHJhbnNpdGlvbjogb3BhY2l0eSBlYXNlLWluLW91dCAyMDBtczt9LmNhdGVnb3J5Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7b3BhY2l0eTogMTtiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDIyMywgMjIzLCAyMjMsIDAuMjUpO30uby0tZG91YmFuLXNlYXJjaCB7cG9zaXRpb246IHJlbGF0aXZlO2Rpc3BsYXk6IGZsZXg7bWFyZ2luLWJvdHRvbTogNXB4O30uby0tZG91YmFuLXNlYXJjaCAuaW5wIHtoZWlnaHQ6IDM0cHg7dGV4dC1hbGlnbjogY2VudGVyO2N1cnNvcjogdGV4dDt3aWR0aDogOTAlO2JvcmRlci10b3A6IDFweCBzb2xpZCAjZGVkZWRlO2JvcmRlci1sZWZ0OiAxcHggc29saWQgI2RlZGVkZTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNXB4O30uby0tZG91YmFuLXNlYXJjaCAuaW5wIGlucHV0IHtiYWNrZ3JvdW5kOiAjZmZmO3dpZHRoOiA5NiU7bWFyZ2luOiAwO3RleHQtYWxpZ246IGxlZnQ7aGVpZ2h0OiAzMHB4O3BhZGRpbmctbGVmdDogMTBweDtvdXRsaW5lOiBub25lO30uby0tZG91YmFuLXNlYXJjaCBpbnB1dCB7LXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO2JvcmRlcjogbm9uZTtiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDt9Lm8tLWRvdWJhbi1zZWFyY2ggLmlucC1idG4ge3Bvc2l0aW9uOiByZWxhdGl2ZTt3aWR0aDogMzdweDtoZWlnaHQ6IDM0cHg7fS5vLS1kb3ViYW4tc2VhcmNoIC5pbnAtYnRuIGlucHV0IHt3aWR0aDogMTAwJTtoZWlnaHQ6IDEwMCU7Zm9udC1zaXplOiAwO3BhZGRpbmc6IDM1cHggMCAwIDA7b3ZlcmZsb3c6IGhpZGRlbjtjb2xvcjogdHJhbnNwYXJlbnQ7Y3Vyc29yOiBwb2ludGVyO30uby0tZG91YmFuLXNlYXJjaCAuaW5wLWJ0biBpbnB1dDpmb2N1cyB7b3V0bGluZTogbm9uZTt9Lm8tLWRvdWJhbi1zZWFyY2ggLmlucCB7YmFja2dyb3VuZC1pbWFnZTogdXJsKC8vaW1nMy5kb3ViYW5pby5jb20vZGFlL2FjY291bnRzL3Jlc291cmNlcy9hNGEzOGE1L21vdmllL2Fzc2V0cy9uYXZfbXZfYmcucG5nP3M9MSk7fS5vLS1kb3ViYW4tc2VhcmNoIC5pbnAtYnRuIGlucHV0IHtiYWNrZ3JvdW5kOiB1cmwoLy9pbWczLmRvdWJhbmlvLmNvbS9kYWUvYWNjb3VudHMvcmVzb3VyY2VzL2E0YTM4YTUvbW92aWUvYXNzZXRzL25hdl9tdl9iZy5wbmc/cz0xKSBuby1yZXBlYXQgMCAtNDBweDt9Lm8tLWl0ZW0tYmFsYW5jZXIge21hcmdpbi1sZWZ0OiAxMSU7bWFyZ2luLXJpZ2h0OiAxMSU7fSIsICIuby0tbSIpKSwKICAgICQoKGZ1bmN0aW9uKCkgewogICAgICBjb25zdCBuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmxpc3Qtd3AiKTsKICAgICAgbGV0IGUgPSAhMSwgdCA9ICExOwogICAgICBuZXcgTXV0YXRpb25PYnNlcnZlcigoZnVuY3Rpb24obikgewogICAgICAgIGlmICh0KSB0ID0gITE7IGVsc2UgewogICAgICAgICAgZm9yIChjb25zdCB0IG9mIG4pICJjaGlsZExpc3QiID09IHQudHlwZSAmJiAoZSA9ICEwKTsKICAgICAgICAgIGUgJiYgKHQgPSAhMCwgJCgiLmxpc3Qtd3AiKS5hcHBlbmQoJzxkaXYgY2xhc3M9Im8tLWl0ZW0tZGl2aWRlciI+PC9kaXY+JykpOwogICAgICAgIH0KICAgICAgfSkpLm9ic2VydmUobiwgewogICAgICAgIGF0dHJpYnV0ZXM6ICEwLAogICAgICAgIGNoaWxkTGlzdDogITAKICAgICAgfSksICQoIi5uYXYtaXRlbXMgbGkgYSIpLmVxKDUpLmFkZENsYXNzKCJvLS1uYXYtaXRlbS1hIikuaHRtbCgi5YWt5YWtIiksICQoInRpdGxlIikuaHRtbCgi5YWt5YWtIiksCiAgICAgIGlzTW9iaWxlICYmICgkKCIjYXBwIC5hcnRpY2xlIC50YWdzIikuYmVmb3JlKCc8ZGl2IGNsYXNzPSJvLS1kb3ViYW4tc2VhcmNoIj48ZGl2IGNsYXNzPSJpbnAiPjxpbnB1dCBuYW1lPSInICsgT09fU0lHTiArICciIHNpemU9IjIyIiBtYXhsZW5ndGg9IjYwIiBwbGFjZWhvbGRlcj0i5pCc57Si55S15b2x44CB55S16KeG5Ymn44CB57u86Im644CB5b2x5Lq6IiB2YWx1ZT0iIiBhdXRvY29tcGxldGU9Im9mZiI+PC9kaXY+PGRpdiBjbGFzcz0iaW5wLWJ0biI+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IuaQnOe0oiI+PC9kaXY+PC9kaXY+JyksCiAgICAgICQoImJvZHkiKS5wcmVwZW5kKCQoIiNhcHAgLmFydGljbGUiKS5hZGRDbGFzcygib28iKSksICQoIi5vLS1kb3ViYW4tc2VhcmNoIGlucHV0Iikub24oImtleXVwIiwgKGZ1bmN0aW9uKG4pIHsKICAgICAgICAxMyA9PT0gbi5rZXlDb2RlICYmIChuLnByZXZlbnREZWZhdWx0KCksIGxvY2F0aW9uLmhyZWYgPSAiaHR0cHM6Ly9tLmRvdWJhbi5jb20vc2VhcmNoLz9xdWVyeT0iICsgbi50YXJnZXQudmFsdWUgKyAiJnR5cGU9bW92aWUiKTsKICAgICAgfSkpLCAkKCIuby0tZG91YmFuLXNlYXJjaCAuaW5wLWJ0biBpbnB1dCIpLm9uKCJjbGljayIsIChmdW5jdGlvbihuKSB7CiAgICAgICAgbi5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGNvbnN0IGUgPSAkKCIuby0tZG91YmFuLXNlYXJjaCBpbnB1dCIpLnZhbCgpOwogICAgICAgIGxvY2F0aW9uLmhyZWYgPSAiaHR0cHM6Ly9tLmRvdWJhbi5jb20vc2VhcmNoLz9xdWVyeT0iICsgZSArICImdHlwZT1tb3ZpZSI7CiAgICAgIH0pKSwgc2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCkgewogICAgICAgICQoIi5saXN0LXdwIFtocmVmXSIpLmVhY2goKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICAgIGNvbnN0IHQgPSAkKGUpLmF0dHIoImhyZWYiKTsKICAgICAgICAgIHQuaW5jbHVkZXMoIm1vdmllLmRvdWJhbi5jb20iKSAmJiAkKGUpLmF0dHIoImhyZWYiLCB0LnJlcGxhY2UoIm1vdmllLmRvdWJhbi5jb20iLCAibS5kb3ViYW4uY29tL21vdmllIikpLmF0dHIoInRhcmdldCIsICJfYmxhbmsiKTsKICAgICAgICB9KSk7CiAgICAgIH0pLCA1MDApKTsKICAgIH0pKTsgZWxzZSB7CiAgICAgIGZ1bmN0aW9uIGdldEJhc2VTdHlsZSgpIHsKICAgICAgICByZXR1cm4gIlxuQGtleWZyYW1lcyBvLS1icmVhdGggezAlIHthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC45NjQ3LCAwLjI0MTMsIC0wLjA3MDUsIDAuNzkxMSk7dHJhbnNmb3JtOiBzY2FsZSgwLjkpO301MSUge2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjkyMjYsIDAuMjYzMSwgLTAuMDMwOCwgMC43NjI4KTt0cmFuc2Zvcm06IHNjYWxlKDEuMDIpO30xMDAlIHt0cmFuc2Zvcm06IHNjYWxlKDAuOSk7fX1Aa2V5ZnJhbWVzIG8tLWJsaW5rIHsyMCUsMjQlLDU1JSB7Y29sb3I6ICNGRkUwODJcbnRleHQtc2hhZG93OiBub25lO30wJSwxOSUsMjElLDIzJSwyNSUsNTQlLDU2JSwxMDAlIHtjb2xvcjogI2ZmZjZhOTt0ZXh0LXNoYWRvdzogMCAwIDVweCAjZmZhNTAwLCAwIDAgNXB4ICNmZmE1MDAsIDAgMCAxNXB4ICNmZmE1MDAsIDAgMCAyMHB4ICNmZmE1MDAsIDAgMCA2cHggI2ZmMDAwMCwgMCAwIDEwcHggI2ZmOGQwMCwgMCAwIDlweCAjZmYwMDAwO319QGtleWZyYW1lcyBvLS1ib3BBIHswJSB7dHJhbnNmb3JtOiBzY2FsZSgwLjkpO29wYWNpdHk6IC44O301MCUsMTAwJSB7dHJhbnNmb3JtOiBzY2FsZSgxKTtvcGFjaXR5OiAxO319QGtleWZyYW1lcyBvLS1ib3BCIHswJSB7dHJhbnNmb3JtOiBzY2FsZSgwLjkpO29wYWNpdHk6IC44O304MCUsMTAwJSB7dHJhbnNmb3JtOiBzY2FsZSgxKSByb3RhdGVaKC0zZGVnKTtvcGFjaXR5OiAxO319QGtleWZyYW1lcyBvLS1iZWF0IHt0byB7dHJhbnNmb3JtOiBzY2FsZSgxLjQpO319QGtleWZyYW1lcyBvLS1sb2FkZXItc3BpbiB7MCUge3RyYW5zZm9ybTogcm90YXRlKDBkZWcpO30xMDAlIHt0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO319QGtleWZyYW1lcyBvLS1jb2xvci1jaGFuZ2Utb3BhY2l0eSB7MCUgICB7IG9wYWNpdHk6IDAuOTsgfTUwJSB7IG9wYWNpdHk6IDE7IH0xMDAlIHsgb3BhY2l0eTogMC45OyB9fUBrZXlmcmFtZXMgby0tcGFuZGEtZWFyLWNvbG9yLWNoYW5nZSB7MCUgICB7IGNvbG9yOiAjZmY5ODAwOyB9MjUlIHsgY29sb3I6ICNmYjdiNzY7IH01MCUgeyBvcGFjaXR5OiAjOUMyN0IwOyB9NzUlIHsgY29sb3I6ICNmYjdiNzY7IH0xMDAlIHsgb3BhY2l0eTogI2ZmOTgwMDsgfX1Aa2V5ZnJhbWVzIG8tLWNvbW1lbnQtYnViYmxlMSB7NDAlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgycHgsMnB4KSBzY2FsZSguNzkpO29wYWNpdHk6IC44O310byB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoNnB4LC00cHgpIHNjYWxlKC41Nyk7b3BhY2l0eTogMDt9fUBrZXlmcmFtZXMgby0tY29tbWVudC1idWJibGUyIHswJSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoNHB4LDNweCk7fTE2JSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoNHB4LDNweCk7b3BhY2l0eTogMDt9MjglIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSg3cHgpO29wYWNpdHk6IC44O302MCUge3RyYW5zZm9ybTogdHJhbnNsYXRlKDExcHgsLTJweCk7fTcyJSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoMTRweCwtM3B4KSBzY2FsZSguNTcpO29wYWNpdHk6IDA7fX1Aa2V5ZnJhbWVzIG8tLWNvbW1lbnQtYnViYmxlMyB7MCUge3RyYW5zZm9ybTogdHJhbnNsYXRlKDEwcHgsLTRweCkgc2NhbGUoLjcxKVxufTE2JSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoMTBweCwtNHB4KSBzY2FsZSguNzEpO29wYWNpdHk6IDA7fTI4JSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoMTBweCwtNHB4KSBzY2FsZSguNzEpO29wYWNpdHk6IC41O303MiUge3RyYW5zZm9ybTogdHJhbnNsYXRlKDE0cHgsLTlweCkgc2NhbGUoLjU3KTtvcGFjaXR5OiAwO319b28tbG9ncyB7cG9zaXRpb246IGZpeGVkO2JvdHRvbTogMDtyaWdodDogMDttYXgtaGVpZ2h0OiAzMDBweDtvdmVyZmxvdy15OiBzY3JvbGw7dGV4dC1hbGlnbjogcmlnaHQ7ei1pbmRleDogIiArIChNQVhfWl9JTkRFWCAtIDEwKSArICI7ZGlzcGxheTogbm9uZTt9b28tbG9ncy5pcy1hY3RpdmUge2Rpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7fS5vLS1sb2ctbWVzc2FnZSB7ZGlzcGxheTogaW5saW5lLWJsb2NrO2JhY2tncm91bmQtY29sb3I6ICM0Q0FGNTA7Y29sb3I6ICNmZmY7cGFkZGluZzogLjI1ZW0gLjVlbTttYXJnaW4tYm90dG9tOiAuMjVlbTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogM3B4O21heC13aWR0aDogODAwcHg7d29yZC1icmVhazogYnJlYWstYWxsO30uby0tbS5vLS1kZWJ1ZyB7bWF4LXdpZHRoOiA0MDBweCAhaW1wb3J0YW50O21hcmdpbjogMCBhdXRvICFpbXBvcnRhbnQ7fS5vLS1tLm8tLWRlYnVnIC5tb2RfcGxheWVyID4gLnBsYXllcl9jb250YWluZXIge21heC1oZWlnaHQ6IDIwM3B4O31cbm9vLWlmcmFtZXMge3Zpc2liaWxpdHk6IGhpZGRlbjtwb2ludGVyLWV2ZW50czogbm9uZTtwb3NpdGlvbjogZml4ZWQ7Ym90dG9tOiAwO2xlZnQ6IDA7bWF4LXdpZHRoOiAzMjBweDtkaXNwbGF5OiBibG9jazt9b28taWZyYW1lcyA+IGlmcmFtZSB7bWF4LXdpZHRoOiAiICsgbWF4U25pZmZJZnJhbWVXaWR0aCArICJweDttYXgtaGVpZ2h0OiA2MHB4O2Rpc3BsYXk6IGlubGluZS1ibG9jazt9Lm8tLWhpZGUge2Rpc3BsYXk6IG5vbmUgIWltcG9ydGFudDt9Lm8tLXZpcC1wbGF5IHtwb3NpdGlvbjogYWJzb2x1dGU7dG9wOiAwO2xlZnQ6IDA7ei1pbmRleDogMTttYXJnaW46IDFlbTtmb250LXNpemU6IDE0cHg7fS5vLS12aXAgLm8tLXZpcC1wbGF5IHtwb3NpdGlvbjogcmVsYXRpdmU7Zm9udC1zaXplOiAxMnB4O2JhY2tncm91bmQtY29sb3I6ICMyZDJkMmU7bWFyZ2luOiAuNWVtIDAgMDtwYWRkaW5nOiAuOGVtIC41ZW0gLjVlbTt9LmlzLXBsYXktaW4tcGFnZSAuby0tdmlwLXBsYXkge2Rpc3BsYXk6IG5vbmU7fS5wbHlyLS1oaWRlLWNvbnRyb2xzIH4gLm8tLXZpcC1wbGF5IHtkaXNwbGF5OiBub25lO30ucGx5ci0tcGF1c2VkICsgLm8tLXZpcC1wbGF5LC5vLS1wbGF5ZXI6aG92ZXIgLm8tLXZpcC1wbGF5IHtkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O30uby0tdmlwLXBsYXkuaXMtaGlkZSB7ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O30uby0tdmlwLXBsYXkgYSB7cG9zaXRpb246IHJlbGF0aXZlO21hcmdpbi1yaWdodDogOHB4O30uby0tdmlwLXBsYXkgLm8tLXNvdXJjZXMgYSB7YmFja2dyb3VuZC1jb2xvcjogIzBkYjJmYjtwYWRkaW5nOiAuM2VtIC43NWVtIC4yNWVtIC43NWVtO2JvcmRlci1yYWRpdXM6IDNweDtjb2xvcjogI2ZmZmZmZjtjdXJzb3I6IHBvaW50ZXI7b3BhY2l0eTogLjg1O2Rpc3BsYXk6IGlubGluZS1mbGV4O21hcmdpbjogLjI1ZW07fS5vLS12aXAtcGxheSAuby0tc291cmNlcyBhLmlzLWFjdGl2ZSB7YmFja2dyb3VuZC1jb2xvcjogIzFjN2VkNjt9Lm8tLXZpcC1wbGF5IC5vLS1zb3VyY2VzIGEuaXMtYWN0aXZlLC5vLS12aXAtcGxheSAuby0tc291cmNlcyBhOmhvdmVyIHtvcGFjaXR5OiAxO2ZvbnQtd2VpZ2h0OiBib2xkO30uby0tdmlwLXBsYXkgLm8tLXNvdXJjZXMgYS5pcy1tcDQge2JvcmRlci1ib3R0b206IDEuNXB4IHNvbGlkICNGRkVCM0I7fS5vLS1zbmlmZi1kb25lIHtjb2xvcjogIzRDQUY1MDt9Lm8tLXBsYXktdXJsIHtjb2xvcjogI2ZmZmZmZjtwYWRkaW5nOiAxZW0gMWVtIC41ZW07dGV4dC1zaGFkb3c6IDFweCAxcHggMnB4ICMwMDAwMDA7fS5vLS1wbGF5LXVybCBhIHtjb2xvcjogIzBkYjJmYiAhaW1wb3J0YW50O3RleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO2N1cnNvcjogcG9pbnRlcjtmb250LXdlaWdodDogYm9sZDt9Lm8tLXBsYXktdXJsIC5vLS1zcGFuIHtmb250LXNpemU6IC45ZW07Y29sb3I6ICNFRUVFRUU7ZGlzcGxheTogYmxvY2s7b3BhY2l0eTogLjk7bWFyZ2luLXRvcDogLjVlbTt9Lm8tLXBsYXktdXJsIC5vLS1zcGFuLmlzLXdhcm5pbmcgc3BhbiB7Zm9udC13ZWlnaHQ6IGJvbGQ7Y29sb3I6IHdoaXRlO2JhY2tncm91bmQtY29sb3I6ICNGRjU3MjI7cGFkZGluZzogLjI1ZW0gLjVlbTtib3JkZXItcmFkaXVzOiAycHg7fS5vLS1wbGF5LXVybCBhIHNwYW4ge2NvbG9yOiAjRkY5ODAwO30uby0tcGxheS11cmwgYTpob3ZlciB7Y29sb3I6ICNlNjc3MDAgIWltcG9ydGFudDt9Lm8tLXBsYXllci1ib3ggPiAqOm5vdCguby0tcGxheWVyKSwuby0tcGxheWVyLWJveDo6YmVmb3JlLC5vLS1wbGF5ZXItYm94OjphZnRlciB7ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O30uby0tcGxheWVyIHtwb3NpdGlvbjogcmVsYXRpdmU7aGVpZ2h0OiAxMDAlO21heC1oZWlnaHQ6IDEwMCU7YmFja2dyb3VuZC1jb2xvcjogIzAxMDgxYTtvdmVyZmxvdzogaGlkZGVuO3otaW5kZXg6ICIgKyBNQVhfWl9JTkRFWCArICc7fS5vLS1wbGF5ZXI6bm90KC5pcy1sb2FkZWQpICNvLS1wbGF5ZXItaWZyYW1lIHtkaXNwbGF5OiBub25lO30uby0tcGxheWVyLWJnIHtwb3NpdGlvbjogYWJzb2x1dGU7dG9wOiAwO2JvdHRvbTogMDtsZWZ0OiAwO3JpZ2h0OiAwO2Rpc3BsYXk6IGZsZXg7anVzdGlmeS1jb250ZW50OiBjZW50ZXI7YWxpZ24taXRlbXM6IGNlbnRlcjtmbGV4LWRpcmVjdGlvbjogY29sdW1uO2ZvbnQtc2l6ZTogMTZweDtjb2xvcjogI2YxZjNmNTtvdmVyZmxvdzogaGlkZGVuO2JhY2tncm91bmQtY29sb3I6ICMwMTA4MWE7YmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO2JhY2tncm91bmQtc2l6ZTogY292ZXI7YmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDt0cmFuc2l0aW9uOiBhbGwgMy41czt9Lm8tLXBsYXllci5pcy1sb2FkZWQgLm8tLXBsYXllci1iZyB7dmlzaWJpbGl0eTogaGlkZGVuO29wYWNpdHk6IDA7fS5vLS1tIC5vLS1wbGF5ZXItYmcge2ZvbnQtc2l6ZTogMTJweDt9Lm8tLXBsYXllci1tYXNrIHtiYWNrZ3JvdW5kLWNvbG9yOiAjMjgyODI4O3Bvc2l0aW9uOiBhYnNvbHV0ZTt0b3A6IDA7cmlnaHQ6IDA7Ym90dG9tOiAwO2xlZnQ6IDA7b3BhY2l0eTogMC4zNTt0cmFuc2l0aW9uOiBhbGwgMi41czt9Lm8tLXBsYXllci1iZy5pcy1mYWlsIC5vLS1wbGF5ZXItbWFzayB7b3BhY2l0eTogMC45O30uby0tc2lnbiB7b3BhY2l0eTogLjI1O3RleHQtc2hhZG93OiAxcHggMXB4IDJweCAjMDAwMDAwO3dpZHRoOiA5NiU7ZGlzcGxheTogZmxleDtqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47cG9zaXRpb246IGFic29sdXRlO2JvdHRvbTogMWVtO2ZvbnQtc2l6ZTogLjhlbTt9Lm8tLXZlcnNpb24ge21hcmdpbi1sZWZ0OiAxZW07Zm9udC1zaXplOiAuOGVtO29wYWNpdHk6IC45O30uby0tc2xvZ2FuIHtsZXR0ZXItc3BhY2luZzogMnB4O2NvbG9yOiAjZjg5NjRjO2Rpc3BsYXk6IGZsZXg7anVzdGlmeS1jb250ZW50OiBzcGFjZS1ldmVubHk7YWxpZ24taXRlbXM6IGNlbnRlcjt3aWR0aDogMTAwJTttYXgtd2lkdGg6IDQ4MHB4O30uby0tc2xvZ2FuIHN0cm9uZyB7Zm9udC1zaXplOiAyLjVlbTt0ZXh0LXNoYWRvdzogMCAwIDVweCAjZmZhNTAwLCAwIDAgNXB4ICNmZmE1MDAsIDAgMCAxNXB4ICNmZmE1MDAsIDAgMCAyMHB4ICNmZmE1MDAsIDAgMCA2cHggI2ZmMDAwMCwgMCAwIDEwcHggI2ZmOGQwMCwgMCAwIDlweCAjZmYwMDAwO2NvbG9yOiAjZmZmNmE5O29wYWNpdHk6IC44O3RyYW5zZm9ybTogc2NhbGUoMC45KTtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7bWFyZ2luOiAwIDVweDt9Lm8tLXNsb2dhbiBzdHJvbmc6Zmlyc3QtY2hpbGQge2FuaW1hdGlvbjogby0tYm9wQSAxcyBjdWJpYy1iZXppZXIoMC4xNzUsIDAuODg1LCAwLjMyLCAxLjI3NSkgZm9yd2FyZHMgaW5maW5pdGUgYWx0ZXJuYXRlLCBvLS1ibGluayAxMnMgaW5maW5pdGU7fS5vLS1zbG9nYW4gc3Ryb25nOmxhc3QtY2hpbGQge2FuaW1hdGlvbjogby0tYm9wQiAxcyAwLjJzIGN1YmljLWJlemllcigwLjE3NSwgMC44ODUsIDAuMzIsIDEuMjc1KSBmb3J3YXJkcyBpbmZpbml0ZSBhbHRlcm5hdGUsIG8tLWJsaW5rIDEycyAzcyBpbmZpbml0ZTt9Lm8tLWVycm9yLXRleHQge2Rpc3BsYXk6IG5vbmU7cGFkZGluZy10b3A6IDFlbTtsZXR0ZXItc3BhY2luZzogMXB4O2JveC1zaGFkb3c6IDAgLTEwcHggOHB4IDAgI2ZmZjRlNjtwYWRkaW5nOiAuMjVlbSAuNWVtIC40ZW07cG9zaXRpb246IGFic29sdXRlO2JvdHRvbTogMDtsZWZ0OiAtNSU7cmlnaHQ6IC01JTt3aWR0aDogMTEwJTt0ZXh0LWFsaWduOiBjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjogI2ZmZjRlNjtjb2xvcjogI0ZGNTcyMjt9Lm8tLXBsYXllci1iZy5pcy1mYWlsIC5vLS1zbG9nYW4ge2NvbG9yOiAjZjc2NzA3O30uby0tcGxheWVyLWJnLmlzLWZhaWwgLm8tLXNsb2dhbiBzdHJvbmcge2NvbG9yOiAjZDk0ODBmO30uby0tcGxheWVyLWJnLmlzLWZhaWwgLm8tLWxvYWRlciwuby0tcGxheWVyLWJnLmlzLWZhaWwgKyAuby0tdmlwLXBsYXkge2Rpc3BsYXk6IG5vbmU7fS5vLS1wbGF5ZXItYmcuaXMtZmFpbCAuby0tZXJyb3ItdGV4dCB7ZGlzcGxheTogYmxvY2s7fS5vLS1zbmlmZi1wcm9ncmVzcyB7ZGlzcGxheTogbm9uZTtwb3NpdGlvbjogYWJzb2x1dGU7bGVmdDogMDtib3R0b206IDA7aGVpZ2h0OiAxcHg7d2lkdGg6IDA7YmFja2dyb3VuZC1jb2xvcjogIzJiOGEzZTtib3JkZXI6IDFweCBzb2xpZCAjMmI4YTNlO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAycHg7dHJhbnNpdGlvbjogYWxsIDVzIGVhc2U7bWF4LXdpZHRoOiA5OSUgIWltcG9ydGFudDt9Lm8tLXNuaWZmaW5nIC5vLS1zbmlmZi1wcm9ncmVzcyB7ZGlzcGxheTogYmxvY2s7fS5vLS1wbGF5ZXIuaXMtbG9hZGVkIC5vLS1zbmlmZi1wcm9ncmVzcywuby0tcGxheWVyLWJnLmlzLWZhaWwgLm8tLXNuaWZmLXByb2dyZXNzIHtkaXNwbGF5OiBub25lO30uby0tbG9hZGVyIHtib3JkZXI6IDMuNnB4IHNvbGlkICNmZjk3NGQ7Ym94LXNpemluZzogYm9yZGVyLWJveDtvdmVyZmxvdzogaGlkZGVuO3dpZHRoOiAyZW07aGVpZ2h0OiAyZW07bGVmdDogNTAlO3RvcDogNTAlO2FuaW1hdGlvbjogby0tbG9hZGVyLXNwaW4gMnMgbGluZWFyIGluZmluaXRlIHJldmVyc2U7LXdlYmtpdC1maWx0ZXI6IHVybCgjby0tbC1mKTtmaWx0ZXI6IHVybCgjby0tbC1mKTtib3gtc2hhZG93OiAwIDAgMCAxcHggI2ZmOTc0ZCBpbnNldDt9Lm8tLWxvYWRlcjpiZWZvcmUge2NvbnRlbnQ6ICIiO3Bvc2l0aW9uOiBhYnNvbHV0ZTthbmltYXRpb246IG8tLWxvYWRlci1zcGluIDJzIGN1YmljLWJlemllcigwLjU5LCAwLjI1LCAwLjQsIDAuNjkpIGluZmluaXRlO2JhY2tncm91bmQ6ICNmZjk3NGQ7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiB0b3AgY2VudGVyO3RyYW5zZm9ybS1vcmlnaW46IHRvcCBjZW50ZXI7Ym9yZGVyLXJhZGl1czogNTAlO3dpZHRoOiAxNTAlO2hlaWdodDogMTUwJTt0b3A6IDUwJTtsZWZ0OiAtMTIuNSU7fS5vLS1wbGF5ZXIgLnBseXJfX3Byb2dyZXNzIGlucHV0W3R5cGU9cmFuZ2VdIHtjdXJzb3I6IHBvaW50ZXI7fS5vLS12aWRlbyB7aGVpZ2h0OiAxMDAlO3dpZHRoOiAxMDAlO2JhY2tncm91bmQtY29sb3I6IGJsYWNrO30uby0tY29sbGFwc2UtYm94LmlzLW9wZW4gLm8tLWNvbGxhcHNlIHt0cmFuc2Zvcm06c2NhbGVYKC0xKTt9Lm8tLWNvbGxhcHNlLWJveDpub3QoLmlzLW9wZW4pIC5pcy1jb2xsYXBzZSB7ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O30uby0tc2tpcC1hZCB7cG9zaXRpb246IGFic29sdXRlO2JvdHRvbTogMDtsZWZ0OiAwO3JpZ2h0OiAwO3BhZGRpbmc6IDEuNWVtIDA7dGV4dC1hbGlnbjogY2VudGVyO2JhY2tncm91bmQtY29sb3I6ICNmZmY0ZTY7Y29sb3I6ICNGRjU3MjI7ei1pbmRleDogJyArIE1BWF9aX0lOREVYICsgIjtkaXNwbGF5OiBmbGV4O2p1c3RpZnktY29udGVudDogY2VudGVyO2FsaWduLWl0ZW1zOiBjZW50ZXI7Ym94LXNoYWRvdzogMCAtMTBweCA4cHggMCAjZmZmNGU2O30uby0tc2tpcC1hZCAuby0tc2xvZ2FuIHtsZXR0ZXItc3BhY2luZzogMWVtO2p1c3RpZnktY29udGVudDogY2VudGVyO30uby0tc2tpcC1hZCAuby0tbG9hZGVyIHt3aWR0aDogMS41ZW07aGVpZ2h0OiAxLjVlbTtib3JkZXItd2lkdGg6IDIuNnB4O21hcmdpbjogMCAyLjVlbSAwIDJlbTt9Lm8tLXNraXAtYWQgLm8tLXNsb2dhbiBzdHJvbmcge2ZvbnQtc2l6ZTogMmVtO30uby0tdmlwIHtwb3NpdGlvbjogcmVsYXRpdmU7cGFkZGluZy1ib3R0b206IDAuNWVtO2JhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7bWFyZ2luOiAuNWVtIC4yNWVtO3dpZHRoOiBjYWxjKDEwMCUgLSAuNWVtKTtib3JkZXItcmFkaXVzOiA1cHg7Ym94LXNoYWRvdzogMCAxcHggOHB4IDAgcmdiYSgwLDAsMCwwLjIpO2ZvbnQtc2l6ZTogMTJweDtsaW5lLWhlaWdodDogMS42O30uby0tdmlwICsgLm8tLXZpcCB7IiArIFB1cmlmeVN0eWxlICsgJ30uby0tdmlwLXBhbmVsIHtkaXNwbGF5OiBmbGV4O2p1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczogY2VudGVyO3BhZGRpbmc6IC43NWVtIDFlbSAuMjVlbTtmb250LXNpemU6IDE1cHg7fS5vLS12aXAtdGl0bGUge2ZvbnQtd2VpZ2h0OiBib2xkO2NvbG9yOiAjMjU3OTQyO3dpZHRoOiAxMDAlO30uby0tdmlwLXNtYWxsIHtmb250LXNpemU6IDAuNzVlbTttYXJnaW46IDAgMTBweDtjb2xvcjogI2NlZDRkYTt9Lm8tLXZpcC1wYW5lbCwgLm8tLXZpcC1saXN0IHtoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDt9Lm8tLW1lbnVzIHtkaXNwbGF5OiBmbGV4O2p1c3RpZnktY29udGVudDogY2VudGVyO2FsaWduLWl0ZW1zOiBjZW50ZXI7fS5vLS1tZW51cyA+IGRpdiB7ZGlzcGxheTogaW5saW5lLWZsZXg7bWFyZ2luLWxlZnQ6IDEuNWVtO2N1cnNvcjogcG9pbnRlcjtwb3NpdGlvbjogcmVsYXRpdmU7fS5vLS1xcmNvZGUtYm94IHtiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtwYWRkaW5nOiAxcHggMnB4IDFweCAxcHg7Ym9yZGVyLXJhZGl1czogMnB4O29wYWNpdHk6IC42NTt9Lm8tLW0gLm8tLXFyY29kZS1ib3gge2Rpc3BsYXk6IG5vbmU7fS5vLS1xcmNvZGUtYm94OmhvdmVyIHtvcGFjaXR5OiAxO30uby0tcXJjb2RlLWJveCBzdmcge3dpZHRoOiAyMHB4O2hlaWdodDogMjBweDt9Lm8tLXFyY29kZS1ib3ggLm8tLXFyY29kZSB7b3ZlcmZsb3c6IGhpZGRlbjtkaXNwbGF5OiBub25lO2JhY2tncm91bmQtY29sb3I6ICNmZmY7cG9zaXRpb246IGFic29sdXRlO3RvcDogLTM1cHg7bGVmdDogLTExMHB4O3otaW5kZXg6IDE7Ym94LXNoYWRvdzogMCA0cHggOHB4IDAgcmdiYSgwLDAsMCwwLjM1KTtib3JkZXItcmFkaXVzOiAzcHg7fS5vLS1xcmNvZGUgaW1nIHt3aWR0aDogMTAwcHg7aGVpZ2h0OiAxMDBweDt9Lm8tLXFyY29kZS10ZXh0IHtwb3NpdGlvbjogYWJzb2x1dGU7YmFja2dyb3VuZC1jb2xvcjogI2ZmZjt0ZXh0LWFsaWduOiBjZW50ZXI7ei1pbmRleDogMjt0b3A6IC00OXB4O2xlZnQ6IC0xMTBweDt3aWR0aDogMTAwcHg7Ym9yZGVyLXJhZGl1czogM3B4O2NvbG9yOiAjRjU3QzAwO2xldHRlci1zcGFjaW5nOiAxcHg7Zm9udC1zaXplOiAxMnB4O2Rpc3BsYXk6IG5vbmU7fS5vLS1xcmNvZGUtYm94OmhvdmVyIC5vLS1xcmNvZGUsLm8tLXFyY29kZS1ib3g6aG92ZXIgLm8tLXFyY29kZS10ZXh0IHtkaXNwbGF5OiBibG9jazt9Lm8tLXNldHRpbmctYnV0dG9uIHt0cmFuc2l0aW9uOiBhbGwgLjVzO2FuaW1hdGlvbjogby0tY29sb3ItY2hhbmdlLW9wYWNpdHkgOHMgbm9ybWFsIGluZmluaXRlIGVhc2UtaW4tb3V0LCA3cyBsaW5lYXIgMHMgaW5maW5pdGUgbm9ybWFsIGZvcndhcmRzIHJ1bm5pbmcgby0tYnJlYXRoO30uby0tc2V0dGluZy1idXR0b246aG92ZXIge2N1cnNvcjogcG9pbnRlcjt9Lm8tLXNldHRpbmctYnV0dG9uIHN2ZyB7d2lkdGg6IDEuNzVlbTtoZWlnaHQ6IDEuNzVlbTt9Lm8tLXN2Zy1wYW5kYS16IHthbmltYXRpb246IDMuNXMgbGluZWFyIDBzIGluZmluaXRlIG5vcm1hbCBmb3J3YXJkcyBydW5uaW5nIG8tLWJyZWF0aDt9Lm8tLXN2Zy1wYW5kYS16MiB7YW5pbWF0aW9uOiA0cyBsaW5lYXIgMHMgaW5maW5pdGUgbm9ybWFsIGZvcndhcmRzIHJ1bm5pbmcgby0tYnJlYXRoO30uby0tc3ZnLXBhbmRhLWVhciB7Y29sb3I6ICNmZjk4MDA7YW5pbWF0aW9uOiBvLS1wYW5kYS1lYXItY29sb3ItY2hhbmdlIDlzIG5vcm1hbCBpbmZpbml0ZSBlYXNlLWluLW91dDt9Lm8tLXZpcC1saXN0IHtwYWRkaW5nOiAwLjVlbTtsZXR0ZXItc3BhY2luZzogMXB4O30uby0tdmlwLWxpc3QgLm8tLXZpcC1pdGVtIHtib3JkZXItcmFkaXVzOiA0cHg7ZGlzcGxheTogaW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOiBub3dyYXA7YmFja2dyb3VuZC1jb2xvcjogI2VlZjZmYztjb2xvcjogIzFkNzJhYTttYXJnaW46IDRweDtwYWRkaW5nOiAwLjVlbSAwLjVlbSAwLjM1ZW07Y3Vyc29yOiBwb2ludGVyO2ZvbnQtc2l6ZTogMTRweDtsaW5lLWhlaWdodDogMS4yO2ZvbnQtd2VpZ2h0OiA2MDA7dGV4dC1kZWNvcmF0aW9uOiBub25lO3Bvc2l0aW9uOiByZWxhdGl2ZTtvdmVyZmxvdzogaGlkZGVuO3RyYW5zaXRpb246IGFsbCAwLjI1czt0ZXh0LWFsaWduOiBjZW50ZXI7dmVydGljYWwtYWxpZ246IHRvcDtib3gtc2hhZG93OiAwIDJweCAycHggMCByZ2JhKDAsMCwwLDAuMik7fS5vLS12aXAtbGlzdCB+IC5vLS10aXAge21hcmdpbjogLjI1ZW0gMWVtO2ZvbnQtc2l6ZTogLjllbTtib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgyMjQsIDIyNCwgMjI0LCAwLjI1KTtwYWRkaW5nLXRvcDogMWVtO2NvbG9yOiAjNWI1YjY3O2xldHRlci1zcGFjaW5nOiAxcHg7fS5vLS10aXAgc3Ryb25nIHtjb2xvcjogI0ZGNzA0Mzt9Lm8tLXZpcC1pdGVtLmlzLXBsYXktaW4tcGFnZTo6YWZ0ZXIge2NvbnRlbnQ6ICIiO3Bvc2l0aW9uOiBhYnNvbHV0ZTtib3R0b206IDA7bGVmdDogMDt3aWR0aDogMTAwJTtoZWlnaHQ6IDJweDtiYWNrZ3JvdW5kLWNvbG9yOiAjMkU3RDMyO30uby0tdmlwLWl0ZW0uaXMtYmxvYjo6YWZ0ZXIge2JhY2tncm91bmQtY29sb3I6ICMyMTk2RjM7fS5vLS12aXAtaXRlbS5pcy1yYW5kb20ge3BhZGRpbmc6IDAuNWVtIDFlbSAwLjM1ZW07fS5vLS12aXAtaXRlbS5pcy1yYW5kb206OmFmdGVyIHtiYWNrZ3JvdW5kLWNvbG9yOiAjMTk3MWMyO30uby0tdmlwLWxpc3QgLm8tLXZpcC1zbmlmZiB7d2lkdGg6IDEuMTVlbTtwb3NpdGlvbjogcmVsYXRpdmU7fS5vLS12aXA6bm90KC5pcy1hbGxvdy1zbmlmZikgLm8tLXZpcC1zbmlmZiB7ZGlzcGxheTogbm9uZTt9Lm8tLXZpcC1zbmlmZiBzdmcge2Rpc3BsYXk6IGJsb2NrO30uby0tdmlwLXNuaWZmIC5vLS1idWJibGUge3Bvc2l0aW9uOiBhYnNvbHV0ZTt0b3A6IDUlO2xlZnQ6IDI1JTt3aWR0aDogNHB4O2hlaWdodDogNHB4O2JvcmRlci1yYWRpdXM6IDUwJTtiYWNrZ3JvdW5kLWNvbG9yOiAjZWVmNmZjO29wYWNpdHk6IDA7dmlzaWJpbGl0eTogaGlkZGVuO30uby0tdmlwLXNuaWZmLmlzLWFjdGl2ZSB7b3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDt9LmlzLXNuaWZmaW5nIC5vLS12aXAtc25pZmYuaXMtYWN0aXZlIC5vLS1idWJibGUge3Zpc2liaWxpdHk6IHZpc2libGU7fS5vLS12aXAtc25pZmYgLm8tLWJ1YmJsZS5vLS1iMSB7YW5pbWF0aW9uOiBvLS1jb21tZW50LWJ1YmJsZTEgMS4ycyBsaW5lYXIgaW5maW5pdGU7fS5vLS12aXAtc25pZmYgLm8tLWJ1YmJsZS5vLS1iMiB7YW5pbWF0aW9uOiBvLS1jb21tZW50LWJ1YmJsZTIgMS4ycyBsaW5lYXIgaW5maW5pdGU7fS5vLS12aXAtc25pZmYgLm8tLWJ1YmJsZS5vLS1iMyB7YW5pbWF0aW9uOiBvLS1jb21tZW50LWJ1YmJsZTMgMS4ycyBsaW5lYXIgaW5maW5pdGU7fS5vLS12aXAtbGlzdCAuby0tdmlwLWl0ZW06aG92ZXIsIC5vLS12aXAtbGlzdCAuby0tdmlwLWl0ZW06YWN0aXZlLC5vLS12aXAtbGlzdCAuby0tdmlwLWl0ZW06aG92ZXI6OmFmdGVyLCAuby0tdmlwLWxpc3QgLm8tLXZpcC1pdGVtOmFjdGl2ZTo6YWZ0ZXIge2JhY2tncm91bmQtY29sb3I6ICMxZDcyYWE7Y29sb3I6ICNlZWY2ZmMgIWltcG9ydGFudDt9Lm8tLXZpcC1saXN0IC5vLS12aXAtaXRlbS5pcy1hY3RpdmUge2JhY2tncm91bmQtY29sb3I6ICMyYjhhM2U7Y29sb3I6ICNlZWY2ZmM7fS5vLS12aXAtbGlzdCAuby0tdmlwLWl0ZW0uaXMtYWN0aXZlOjphZnRlciB7ZGlzcGxheTogbm9uZTt9Lm8tLXZpcC5pcy1zbmlmZi1zdWNjZXNzIC5vLS12aXAtc25pZmYuaXMtYWN0aXZlIHtiYWNrZ3JvdW5kLWNvbG9yOiAjMmY5ZTQ0O2NvbG9yOiAjZWVmNmZjO30uby0tdmlwLmlzLXNuaWZmaW5nIC5vLS12aXAtc25pZmYuaXMtYWN0aXZlLC5vLS12aXAuaXMtc25pZmYtc3VjY2VzcyAuby0tdmlwLXNuaWZmLmlzLWFjdGl2ZSwuby0tdmlwLmlzLXNuaWZmaW5nOm5vdCguaXMtc25pZmYtc3VjY2VzcykgLm8tLXZpcC1pdGVtLC5vLS12aXAtbGlzdCAuby0tdmlwLWl0ZW0uaXMtYWN0aXZlIHtjdXJzb3I6IG5vdC1hbGxvd2VkO3BvaW50ZXItZXZlbnRzOiBub25lO29wYWNpdHk6IDAuNSAhaW1wb3J0YW50O30uby0tdmlwLmlzLXNuaWZmLWRvbmUgLm8tLXZpcC1zbmlmZiB7b3BhY2l0eTogLjk1ICFpbXBvcnRhbnQ7fS5vLS12aXAuaXMtc25pZmZpbmc6bm90KC5pcy1zbmlmZi1zdWNjZXNzKSAuby0tdmlwLXNuaWZmIHthbmltYXRpb246IG8tLWJlYXQgMC4yNXMgaW5maW5pdGUgYWx0ZXJuYXRlO30uby0tdmlwIC5vLS1zbmlmZi1wcm9ncmVzcyB7Ym90dG9tOiBhdXRvO3RvcDogMDt9Lm8tLXNldHRpbmctcGFuZWwge2JvcmRlci10b3A6IDJweCBzb2xpZCByZ2JhKDIyNCwgMjI0LCAyMjQsIDAuMjUpO3BhZGRpbmc6IDFlbSAuNWVtO2Rpc3BsYXk6IG5vbmU7bWFyZ2luLXRvcDogLjVlbTt0cmFuc2l0aW9uOiBhbGwgMC41czt9Lm8tLXZpcC5pcy1zZXR0aW5nLW9uIC5vLS1zZXR0aW5nLXBhbmVsIHtkaXNwbGF5OiBibG9jazt9Lm8tLXZpcC5pcy1zZXR0aW5nLW9uIC5vLS12aXAtbGlzdCB7ZGlzcGxheTogbm9uZTt9Lm8tLWVkaXQtdmlwLXNvdXJjZS1wYW5lbCB7dGV4dC1hbGlnbjogY2VudGVyO21hcmdpbjogMWVtIDFlbSAuNWVtO30uby0tZWRpdC12aXAtc291cmNlLXBhbmVsIHRleHRhcmVhIHtwYWRkaW5nOiAuNzVlbTtmb250LXNpemU6IDE0cHg7bGV0dGVyLXNwYWNpbmc6IDFweDtib3JkZXItcmFkaXVzOiA1cHg7d2lkdGg6IGNhbGMoMTAwJSAtIDEuNWVtKTttaW4taGVpZ2h0OiAxOGVtO2JveC1zaGFkb3c6IDAgNHB4IDhweCAwIHJnYmEoMCwwLDAsMC4yKTtib3JkZXI6IDFweCBzb2xpZCAjZWVlO292ZXJmbG93LXk6IHNjcm9sbDt9Lm8tLWVkaXQtaGludCB7dGV4dC1hbGlnbjogbGVmdDttYXJnaW46IC41ZW07Y29sb3I6ICM0Q0FGNTA7dGV4dC1zaGFkb3c6IDBweCAwcHggMXB4ICM4QkMzNEE7fS5vLS1zbG9nYW4tdGV4dCB7bWFyZ2luLXRvcDogLjVlbTtsZXR0ZXItc3BhY2luZzogMXB4O2NvbG9yOiAjYWRiNWJkO2ZvbnQtc2l6ZTogMTJweDt9Lm8tLXNsb2dhbi10ZXh0IHN0cm9uZyB7Zm9udC1zaXplOiAxLjI1ZW07bWFyZ2luOiAwIC4yNWVtO30uby0tYWN0aW9ucyB7dGV4dC1hbGlnbjogcmlnaHQ7fS5vLS1hY3Rpb24ge2NvbG9yOiB3aGVhdDtsZXR0ZXItc3BhY2luZzogMXB4O2JvcmRlcjogMXB4IHNvbGlkO2Rpc3BsYXk6IGlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDogY2VudGVyO2FsaWduLWl0ZW1zOiBjZW50ZXI7cGFkZGluZzogLjE1ZW0gLjVlbTtib3JkZXItcmFkaXVzOiAzcHg7bWFyZ2luLXJpZ2h0OiAxZW07Y3Vyc29yOiBwb2ludGVyO2JhY2tncm91bmQtY29sb3I6ICMxYjFiMjk7fS5vLS1hY3Rpb24gYSB7Y29sb3I6ICNGRjk4MDAgIWltcG9ydGFudDt9Lm8tLW0gLm8tLWFjdGlvbiB7Zm9udC1zaXplOiAxMnB4O30uby0tYWN0aW9uOmhvdmVyIHtjb2xvcjogI0ZGQjc0RDt9Lm8tLXRvZ2dsZSAuby0teSwgLm8tLXRvZ2dsZSAuby0tbiB7Zm9udC13ZWlnaHQ6IGJvbGQ7Zm9udC1zaXplOiAxLjJlbTttYXJnaW4tcmlnaHQ6IC4xNWVtO30uby0tdG9nZ2xlLmlzLW4gLm8tLXkge2NvbG9yOiBpbmhlcml0O30uby0tdG9nZ2xlOm5vdCguaXMtbikgLm8tLXkge2NvbG9yOiBncmVlbjtmb250LXNpemU6IDEuNWVtO30uby0tdG9nZ2xlLmlzLW4gLm8tLW4ge2NvbG9yOiByZWQ7Zm9udC1zaXplOiAxLjVlbTt9Lm8tLWxvZy1idXR0b24ge2N1cnNvcjogcG9pbnRlcjtwYWRkaW5nOiAwIC4zNWVtO2JhY2tncm91bmQtY29sb3I6IGhzbGEoMCwwJSwxMDAlLC45KTtib3gtc2hhZG93OiAwIDJweCAycHggMCByZ2JhKDAsMCwwLDAuMik7Y29sb3I6ICM5ZTc3NGE7Ym9yZGVyLXJhZGl1czogM3B4O2Rpc3BsYXk6IGlubGluZS1mbGV4O30uby0tbG9nLWJ1dHRvbjpob3ZlciB7YmFja2dyb3VuZC1jb2xvcjogIzllNzc0YTtjb2xvcjogaHNsYSgwLDAlLDEwMCUsLjkpO30uby0tanVtcCB7bWF4LXdpZHRoOiAxMDAwcHg7Zm9udC1zaXplOiAxMnB4O21hcmdpbjogMCBhdXRvO3BhZGRpbmc6IC41ZW0gMWVtO30uby0tdmlwIC5vLS1qdW1wIHttYXgtd2lkdGg6IHVuc2V0O21hcmdpbi10b3A6IDVweDt9Lm8tLWp1bXAgKyAuby0tanVtcCB7JyArIFB1cmlmeVN0eWxlICsgIn0uby0tanVtcCBhIHtkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtib3JkZXItcmFkaXVzOiA0cHg7Zm9udC1zaXplOiAxMnB4ICFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6IDE7dGV4dC1hbGlnbjogY2VudGVyO21hcmdpbi10b3A6IDEwcHg7bWFyZ2luLXJpZ2h0OiA4cHg7d2hpdGUtc3BhY2U6IG5vd3JhcDtjdXJzb3I6IHBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOiBub25lO3RyYW5zaXRpb246IGFsbCAwLjI1cztjb2xvcjogIzI1Nzk0MiAhaW1wb3J0YW50O2JhY2tncm91bmQtY29sb3I6ICNmYWZhZmEgIWltcG9ydGFudDtib3JkZXI6IDFweCBzb2xpZCAjZjFmM2Y1O3BhZGRpbmc6IDZweDtib3gtc2hhZG93OiAwIDJweCAycHggMCByZ2JhKDAsMCwwLDAuMik7fS5vLS1wYyAuby0tanVtcCBhIHtcbnBhZGRpbmc6IDVweCA2cHggNHB4O30uby0tanVtcCBhOmhvdmVyLC5vLS1qdW1wIGEuaXMtYWN0aXZlIHtib3JkZXI6IDFweCBzb2xpZCAjMDk5MjY4O2JhY2tncm91bmQtY29sb3I6ICMyNTc5NDIgIWltcG9ydGFudDtjb2xvcjogI2VmZmFmMyAhaW1wb3J0YW50O30uby0tanVtcCBhLmlzLWFuaW1lIHtjb2xvcjogI2U2NDk4MCAhaW1wb3J0YW50O30uby0tanVtcCBhLmlzLWFuaW1lOmhvdmVyLC5vLS1qdW1wIGEuaXMtYW5pbWUuaXMtYWN0aXZlIHtib3JkZXI6IDFweCBzb2xpZCAjZjc4M2FjO2JhY2tncm91bmQtY29sb3I6ICNlNjQ5ODAgIWltcG9ydGFudDtjb2xvcjogI2ZmZGVlYiAhaW1wb3J0YW50O30uby0tanVtcCBhLmlzLXZpcCB7Y29sb3I6ICNlODU5MGMgIWltcG9ydGFudDt9Lm8tLWp1bXAgYS5pcy12aXA6aG92ZXIsLm8tLWp1bXAgYS5pcy12aXAuaXMtYWN0aXZlIHtib3JkZXI6IDFweCBzb2xpZCAjZTg1OTBjO2JhY2tncm91bmQtY29sb3I6ICNlODU5MGMgIWltcG9ydGFudDtjb2xvcjogI2ZmZjRlNiAhaW1wb3J0YW50O30uby0tdmlwLWxpc3QgfiAuby0tanVtcCB7Ym9yZGVyLXRvcDogMnB4IHNvbGlkIHJnYmEoMjI0LCAyMjQsIDIyNCwgMC4yNSk7fS5vLS12aXAtbGlzdCB+IC5vLS1qdW1wIC5vLS1jb2xsYXBzZTpub3QoLmlzLWNvbGxhcHNlKSB7ZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7fS5vLS1jb2xsYXBzZSB7bWluLXdpZHRoOiAyZW07fSI7CiAgICAgIH0KICAgICAgYXN5bmMgZnVuY3Rpb24gZ2V0S2V5d29yZChuKSB7CiAgICAgICAgcmV0dXJuICJzdHJpbmciID09IHR5cGVvZiBuID8gYXdhaXQgJCQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuICQobikuZXEoMCkudGV4dCgpOwogICAgICAgIH0pKSA6ICJmdW5jdGlvbiIgPT0gdHlwZW9mIG4gPyBuKCQpIDogZ2V0S2V5d29yZEZyb21Vcmwobik7CiAgICAgIH0KICAgICAgYXN5bmMgZnVuY3Rpb24gZ29KdW1wKG4sIGUpIHsKICAgICAgICBpZiAobiBpbnN0YW5jZW9mIEZ1bmN0aW9uKSBuKGUpOyBlbHNlIHsKICAgICAgICAgIGNvbnN0IHQgPSBhd2FpdCBnZXRLZXl3b3JkKGUpOwogICAgICAgICAgaWYgKCF0KSByZXR1cm47CiAgICAgICAgICAoQXJyYXkuaXNBcnJheShuKSA/IG4gOiBuLnNwbGl0KC9ccyosXHMqLykpLmZvckVhY2goKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgbiA9IG4uc3BsaXQoL1xzKlx8XHMqLyksIGluc2VydFNlYXJjaEFkZG9uKHQsIG5bMF0sIG5bMV0gfHwgImFmdGVyIik7CiAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGV4ZWNBZGRvbkpzKG4pIHsKICAgICAgICBuICYmIG4uanMgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBuLmpzKCk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYWRkb25HbygpIHsKICAgICAgICBjb25zdCBhZGRvbiA9IEFERE9OUy5maW5kKChmdW5jdGlvbihuKSB7CiAgICAgICAgICByZXR1cm4gIW4uZGlzYWJsZSAmJiBJcyhuLm1hdGNoKTsKICAgICAgICB9KSk7CiAgICAgICAgaWYgKGFkZG9uKSB7CiAgICAgICAgICBpZiAoaXNGaXJzdFJ1bkFkZG9uKSB7CiAgICAgICAgICAgIGxldCBuID0gZ2V0QmFzZVN0eWxlKCk7CiAgICAgICAgICAgIGFkZG9uLmhpZGUgJiYgKG4gKz0gIlxuIiArIGFkZG9uLmhpZGUgKyAiIHsiICsgUHVyaWZ5U3R5bGUgKyAifSIpLCBhZGRvbi5jc3MgJiYgKG4gKz0gYWRkb24uY3NzKSwKICAgICAgICAgICAgYWRkQ3NzKG4pOwogICAgICAgICAgfQogICAgICAgICAgX0QgJiYgJCgib28tbG9ncyIpLmxlbmd0aCwgX0QgJiYgJCgib28tbG9ncyIpLmxlbmd0aCwgJCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGxldCBfTWF0aG1pbiA9IE1hdGgubWluOwogICAgICAgICAgICBjb25zdCBwbGF5QWRkb24gPSBhZGRvbi5wbGF5OwogICAgICAgICAgICBpZiAocGxheUFkZG9uICYmIElzKHBsYXlBZGRvbi5tYXRjaCkpIHsKICAgICAgICAgICAgICBpZiAocGxheUFkZG9uLnZpcCAmJiAhZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLm8tLXZpcCIpKSB7CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBmb3JtYXRQYXNzZWRUaW1lKG4pIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuICgoRGF0ZS5ub3coKSAtIG4pIC8gMWUzKS50b0ZpeGVkKDIpICsgInMiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlUXJjb2RlKCkgewogICAgICAgICAgICAgICAgICBsZXQgdXJsID0gMCA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMF0gPyBhcmd1bWVudHNbMF0gOiBIcmVmOwogICAgICAgICAgICAgICAgICBpc01vYmlsZSB8fCAoIXFyY29kZUNvZGUgJiYgKHFyY29kZUNvZGUgPSBhd2FpdCBmZXRjaENkblVybCgiL3FyY29kZS1nZW5lcmF0b3IvMS40LjQvcXJjb2RlLm1pbi5qcyIpKSwKICAgICAgICAgICAgICAgICAgZXZhbChxcmNvZGVDb2RlKSwgcXJjb2RlICYmIChRUiA9IHFyY29kZSgwLCAiTCIpLCBRUi5hZGREYXRhKHVybCksIFFSLm1ha2UoKSwgJCgiLm8tLXFyY29kZS1ib3giKS5yZW1vdmVDbGFzcygiby0taGlkZSIpLAogICAgICAgICAgICAgICAgICAkKCIuby0tcXJjb2RlIikuaHRtbChRUi5jcmVhdGVJbWdUYWcoKSkpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZpeFVybChuKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBuLnJlcGxhY2UoL1tcPyNdLisvZywgIiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gZml4VmlwVXJsKG4pIHsKICAgICAgICAgICAgICAgICAgY29uc3QgZSA9IEFERE9OUy5maW5kKChmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElzKGUubWF0Y2gsIG4pICYmIGUucGxheSAmJiBlLnBsYXkuZml4VXJsOwogICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgIHJldHVybiBlID8gITAgPT09IGUucGxheS5maXhVcmwgPyBmaXhVcmwobikgOiBlLnBsYXkuZml4VXJsKG4pIDogbjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFZpcFRhcmdldFVybCgpIHsKICAgICAgICAgICAgICAgICAgaWYgKG9vUGxheVVybCkgcmV0dXJuIG9vUGxheVVybDsKICAgICAgICAgICAgICAgICAgbGV0IG4gPSBsb2NhdGlvbi5ocmVmLnJlcGxhY2UoLyY/XHcrPWh0dHBbXiZdKy8sICIiKS5yZXBsYWNlKC8uK2h0dHAvLCAiaHR0cCIpOwogICAgICAgICAgICAgICAgICByZXR1cm4gbiA9IGRlY29kZVVSSShmaXhWaXBVcmwobikgfHwgbiksIG47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBjYW5QbGF5SW5QYWdlKG4pIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuICFpc09ubHlEb3dubG9hZFZpZGVvVXJsUmVnZXgudGVzdChuKSAmJiAoIS9cL1wvdndlY2FtLnRjLnFxLmNvbS8udGVzdChuKSB8fCBJcygidi5xcS5jb20iKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiB0b1Nob3J0VmlkZW9VcmwobikgewogICAgICAgICAgICAgICAgICBjb25zdCBlID0gbi5tYXRjaChzaG9ydFZpZGVvVXJsUmVnZXgpIHx8IG4ubWF0Y2goc2hvcnRWaWRlb1VybExvc2VSZWdleCk7CiAgICAgICAgICAgICAgICAgIHJldHVybiBlID8gZVsxXS5zcGxpdCgiLiIpLnNsaWNlKC0yKS5qb2luKCIuIikgKyAiIC4uLiAiICsgZVtlLmxlbmd0aCAtIDJdLnNsaWNlKC0xMCkgKyAiPHNwYW4+IC4gIiArIGVbZS5sZW5ndGggLSAxXSArICI8L3NwYW4+IiA6IG47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBmaXhJZnJhbWVVcmwobikgewogICAgICAgICAgICAgICAgICByZXR1cm4gbi5yZXBsYWNlKC9cLz9cPy4rLywgIiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0SWZyYW1lSWQobikgewogICAgICAgICAgICAgICAgICByZXR1cm4gaWZyYW1lc1tmaXhJZnJhbWVVcmwobildOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0SWZyYW1lKG4pIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIGZyYW1lc1tnZXRJZnJhbWVJZChuKV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBzZXRJZnJhbWUobiwgZSkgewogICAgICAgICAgICAgICAgICBpZnJhbWVzW2ZpeElmcmFtZVVybChuKV0gPSBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gYWRkSWZyYW1lKG4pIHsKICAgICAgICAgICAgICAgICAgbGV0IGUgPSAxIDwgYXJndW1lbnRzLmxlbmd0aCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1sxXSA/IGFyZ3VtZW50c1sxXSA6ICJvby1pZnJhbWVzIjsKICAgICAgICAgICAgICAgICAgY29uc3QgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOwogICAgICAgICAgICAgICAgICByZXR1cm4gdC5pZCA9IHV1aWQoKSwgdC5mcmFtZWJvcmRlciA9ICIwIiwgdC5zY3JvbGxpbmcgPSAibm8iLCB0LnNlYW1sZXNzID0gITAsCiAgICAgICAgICAgICAgICAgIHQuc2FuZGJveCA9ICJhbGxvdy1zY3JpcHRzIGFsbG93LXNhbWUtb3JpZ2luIGFsbG93LWZvcm1zIiwgbiAmJiAodC5zcmMgPSBuLCBzZXRJZnJhbWUobiwgdC5pZCkpLAogICAgICAgICAgICAgICAgICAkKGUpLmFwcGVuZCh0KSwgdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlbW92ZUlmcmFtZSgpIHsKICAgICAgICAgICAgICAgICAgbGV0IG4gPSAwIDwgYXJndW1lbnRzLmxlbmd0aCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1swXSA/IGFyZ3VtZW50c1swXSA6ICJvby1pZnJhbWVzID4gaWZyYW1lIjsKICAgICAgICAgICAgICAgICAgY29uc3QgZSA9ICQoInN0cmluZyIgPT0gdHlwZW9mIG4gPyBuLnN0YXJ0c1dpdGgoIm9vLWlmcmFtZXMiKSA/IG4gOiAiIyIgKyBuIDogbi5pZCA/ICIjIiArIG4uaWQgOiBuKS5nZXQoMCk7CiAgICAgICAgICAgICAgICAgIGUgJiYgKGUuc3JjID0gImFib3V0OmJsYW5rIiwgJChlKS5yZW1vdmUoKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBlbXB0eUlmcmFtZXMoKSB7CiAgICAgICAgICAgICAgICAgICQoIm9vLWlmcmFtZXMgPiBpZnJhbWUiKS5lYWNoKChmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlSWZyYW1lKGUpOwogICAgICAgICAgICAgICAgICB9KSksICQoIm9vLWlmcmFtZXMiKS5lbXB0eSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0U25pZmZUaW1lKG4pIHsKICAgICAgICAgICAgICAgICAgY29uc3QgZSA9IHNuaWZmVGltZXNbZml4SWZyYW1lVXJsKG4pXTsKICAgICAgICAgICAgICAgICAgcmV0dXJuIGUgPyBmb3JtYXRQYXNzZWRUaW1lKGUpIDogIjBzIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNuaWZmU3RhcnQoKSB7CiAgICAgICAgICAgICAgICAgIGlzU25pZmZpbmcgPSAhMCwgaXNFbnN1cmVQbGF5aW5nQ2hlY2sgPSAhMSwgc25pZmZUaW1lc3RhbXAgPSBEYXRlLm5vdygpLCBzbmlmZlVybHMgPSBbXSwKICAgICAgICAgICAgICAgICAgc25pZmZVcmxzS2V5ID0gW10sICQoIi5vLS1wbGF5ZXIiKS5lbXB0eSgpLCAkKCJodG1sIikuYWRkQ2xhc3MoIm8tLXNuaWZmaW5nIiksICQoIi5vLS12aXAiKS5yZW1vdmVDbGFzcygiaXMtcGxheS1pbi1wYWdlIiksCiAgICAgICAgICAgICAgICAgIGJsb2JDb3VudCA9IDAsICQoIi5vLS12aXAtaXRlbS5pcy1ibG9iIikucmVtb3ZlKCksIHByb2dyZXNzSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgJCgiLm8tLXNuaWZmLXByb2dyZXNzIikuY3NzKHsKICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiArJCgiLm8tLXNuaWZmLXByb2dyZXNzIikuY3NzKCJ3aWR0aCIpLnJlcGxhY2UoIiUiLCAiIikgKyAuMSArICIlIgogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICB9KSwgMjAwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNuaWZmRG9uZSgpIHsKICAgICAgICAgICAgICAgICAgZm9ybWF0UGFzc2VkVGltZShzbmlmZlN0YXJ0VGltZSksIGlzU25pZmZpbmcgPSAhMSwgZW1wdHlJZnJhbWVzKCksICQoIi5vLS1zbmlmZi1wcm9ncmVzcyIpLmNzcyh7CiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICIxMDAlIgogICAgICAgICAgICAgICAgICB9KSwgY2xlYXJJbnRlcnZhbChwcm9ncmVzc0ludGVydmFsKSwgJCgiLm8tLXZpcCIpLnJlbW92ZUNsYXNzKCJpcy1zbmlmZmluZyIpLmFkZENsYXNzKCJpcy1zbmlmZi1kb25lIiksCiAgICAgICAgICAgICAgICAgICQoImh0bWwiKS5yZW1vdmVDbGFzcygiby0tc25pZmZpbmciKSwgMCA8IHNuaWZmVXJscy5sZW5ndGggJiYgMCA9PT0gJCgiLm8tLXNuaWZmLWRvbmUiKS5sZW5ndGggJiYgJCgiLm8tLXZpcC1wbGF5IC5vLS1zb3VyY2VzIikubGVuZ3RoICYmICQoIi5vLS12aXAtcGxheSAuby0tc291cmNlcyIpLmFwcGVuZCgnPHNwYW4gY2xhc3M9Im8tLXNuaWZmLWRvbmUiPuKclDwvc3Bhbj4nKSwKICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgJCgiLm8tLXNuaWZmLXByb2dyZXNzIikuY3NzKHsKICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAiMCIKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgfSksIDFlMyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBzbmlmZlN1Y2Nlc3MobiwgZSkgewogICAgICAgICAgICAgICAgICBjb25zdCB0ID0gKG4gPSBkZWNvZGVVUklDb21wb25lbnQobi50cmltKCkpLnJlcGxhY2UoL14oaHR0cDopP1wvXC8vLCAiaHR0cHM6Ly8iKSkucmVwbGFjZSgvXD8uKy8sICIiKTsKICAgICAgICAgICAgICAgICAgaWYgKHNuaWZmVXJsc0tleS5pbmNsdWRlcyh0KSkgcmV0dXJuOwogICAgICAgICAgICAgICAgICBzbmlmZlVybHNLZXkucHVzaCh0KSwgc25pZmZVcmxzLnB1c2gobik7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGkgPSBzbmlmZlVybHMubGVuZ3RoLCBvID0gbi5tYXRjaCh2aWRlb0V4dFJlZ2V4KSwgYSA9IG8gPyBvWzFdIDogInVua25vdyI7CiAgICAgICAgICAgICAgICAgIGlmICgkKCIuby0tdmlwLXBsYXkgLm8tLXNvdXJjZXMiKS5hcHBlbmQoJzxhIF9ocmVmPSInICsgKCJibG9iIiA9PT0gYSA/IGUgOiBuKSArICciIGNsYXNzPSJpcy0nICsgYSArICciPue6v+i3rycgKyBpICsgIjwvYT4iKSwKICAgICAgICAgICAgICAgICAgJCgiLm8tLXZpcC1wbGF5IC5vLS1zb3VyY2VzIGEiKS5vZmYoImNsaWNrIikub24oImNsaWNrIiwgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IG4gPSAkKHRoaXMpLmF0dHIoIl9ocmVmIik7CiAgICAgICAgICAgICAgICAgICAgdXBkYXRlUXJjb2RlKG4pOwogICAgICAgICAgICAgICAgICAgIGxldCBlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLm8tLXBsYXllciB2aWRlbyIpOwogICAgICAgICAgICAgICAgICAgIGUgfHwgKCQoIi5vLS1wbGF5ZXIiKS5wcmVwZW5kKCc8dmlkZW8gY2xhc3M9Im8tLXZpZGVvIiBwb3N0ZXI9IicgKyBQbGF5ZXJQbGF5aW5nQ292ZXIgKyAnIiBjb250cm9scyBwbGF5c2lubGluZT48L3ZpZGVvPicpLAogICAgICAgICAgICAgICAgICAgIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuby0tcGxheWVyIHZpZGVvIikpOwogICAgICAgICAgICAgICAgICAgIGNvbnN0IHQgPSBnZXRHbG9iYWwoIlBseXIiKSwgaSA9IGdldEdsb2JhbCgiSGxzIikgfHwgZ2V0R2xvYmFsKCJobHMiKTsKICAgICAgICAgICAgICAgICAgICBpZiAoIXBsYXllciAmJiB0ICYmIChwbGF5ZXIgPSBuZXcgdChlLCB7CiAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZzogX0QsCiAgICAgICAgICAgICAgICAgICAgICBpbnZlcnRUaW1lOiAhMSwKICAgICAgICAgICAgICAgICAgICAgIGF1dG9wbGF5OiAhMCwKICAgICAgICAgICAgICAgICAgICAgIHZvbHVtZTogLjc1LAogICAgICAgICAgICAgICAgICAgICAgc3BlZWQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IFsgLjUsIC43NSwgMSwgMS4yNSwgMS41LCAyIF0KICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6ICEwLAogICAgICAgICAgICAgICAgICAgICAgICBrZXk6IHN0b3JlUHJlZml4ICsgInBseXIiCiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSksIHBsYXllci5vbigiZW50ZXJmdWxsc2NyZWVuIiwgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgJCgiaHRtbCIpLmFkZENsYXNzKCJvLS1mdWxsc2NyZWVuIik7CiAgICAgICAgICAgICAgICAgICAgfSkpLCBwbGF5ZXIub24oImV4aXRmdWxsc2NyZWUiLCAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAkKCJodG1sIikucmVtb3ZlQ2xhc3MoIm8tLWZ1bGxzY3JlZW4iKTsKICAgICAgICAgICAgICAgICAgICB9KSkpLCAkKCIuby0tcGxheWVyLWJnIikucmVtb3ZlKCksIC9cLm0zdTgvLnRlc3QobikgJiYgaSAmJiBpLmlzU3VwcG9ydGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHQgPSBuZXcgaTsKICAgICAgICAgICAgICAgICAgICAgIHQubG9hZFNvdXJjZShuKSwgdC5hdHRhY2hNZWRpYShlKSwgdC5vbihpLkV2ZW50cy5NQU5JRkVTVF9QQVJTRUQsIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZS5wbGF5KCk7CiAgICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGUuc3JjID0gbiwgZS5hZGRFdmVudExpc3RlbmVyKCJsb2FkZWRtZXRhZGF0YSIsIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgIGUucGxheSgpOwogICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgICAkKCIuby0tcGxheS11cmwiKS5odG1sKCfmnaXmupDvvJo8YSBfaHJlZj0iJyArIG4gKyAnIj4nICsgdG9TaG9ydFZpZGVvVXJsKG4pICsgIjwvYT4iICsgKGNhblBsYXlJblBhZ2UobikgPyAnPHNwYW4gY2xhc3M9Im8tLXNwYW4iPuWmguaenOWFqOmDqOe6v+i3r+mDveaXoOazleaSreaUvu+8jOWPr+S7peeCueWHu+adpea6kOmTvuaOpeS4i+i9veadpeaSreaUvu+8jOaIluS9v+eUqOWNleS4quino+aekOaSreaUvuOAgjwvc3Bhbj4nIDogJzxzcGFuIGNsYXNzPSJvLS1zcGFuIGlzLXdhcm5pbmciPjxzcGFuPuivpemTvuaOpeaXoOazleWcqOW9k+WJjeermeeCueaSreaUvu+8jOivt+eCueWHu+adpea6kOS4i+i9veaSreaUvjwvc3Bhbj48L3NwYW4+JykpLAogICAgICAgICAgICAgICAgICAgICQoIi5vLS1wbGF5LXVybCBhIikub2ZmKCJjbGljayIpLm9uKCJjbGljayIsIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG4gPSAkKHRoaXMpLmF0dHIoIl9ocmVmIik7CiAgICAgICAgICAgICAgICAgICAgICBpc0hpa2VyICYmIHdpbmRvdy5meV9icmlkZ2VfYXBwLnBsYXlWaWRlbyA/IHdpbmRvdy5meV9icmlkZ2VfYXBwLnBsYXlWaWRlbyhuKSA6IGlzTWl4aWEgJiYgd2luZG93Lm14X2Jyb3dzZXJfb2JqLnBsYXl2aWRlbyA/IHdpbmRvdy5teF9icm93c2VyX29iai5wbGF5dmlkZW8obiwgbikgOiB3aW5kb3cub3BlbihuLCAiX2JsYW5rIiwgIm5vb3BlbmVyIik7CiAgICAgICAgICAgICAgICAgICAgfSkpLCAkKCIuby0tdmlwLXBsYXkgLm8tLXNvdXJjZXMgYSIpLnJlbW92ZUNsYXNzKCJpcy1hY3RpdmUiKSwgJCh0aGlzKS5hZGRDbGFzcygiaXMtYWN0aXZlIik7CiAgICAgICAgICAgICAgICAgIH0pKSwgMSA9PT0gaSkgewogICAgICAgICAgICAgICAgICAgIGxldCBuOwogICAgICAgICAgICAgICAgICAgICQoIi5vLS12aXAtcGxheSAuby0tc291cmNlcyBhIikuZ2V0KDApLmNsaWNrKCksICQoIi5vLS12aXAiKS5hZGRDbGFzcygiaXMtc25pZmYtc3VjY2VzcyIpLAogICAgICAgICAgICAgICAgICAgICQoIi5vLS12aXAtcGxheSIpLnJlbW92ZUNsYXNzKCJpcy1oaWRlIiksIGlzRW5zdXJlUGxheWluZ0NoZWNrID0gITAsIHNldFRpbWVvdXQoKGZ1bmN0aW9uIGUoKSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNFbnN1cmVQbGF5aW5nQ2hlY2spIHJldHVybiBwbGF5ZXIgJiYgcGxheWVyLnJlYWR5ICYmIDAgPCBwbGF5ZXIuZHVyYXRpb24gPyB2b2lkIChpc0Vuc3VyZVBsYXlpbmdDaGVjayA9ICExKSA6ICgobiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5vLS12aXAtcGxheSAuby0tc291cmNlcyBhLmlzLWFjdGl2ZSArIGEiKSkgPyBuLmNsaWNrKCkgOiAxIDwgaSAmJiAobiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5vLS12aXAtcGxheSAuby0tc291cmNlcyBhIiksCiAgICAgICAgICAgICAgICAgICAgICBuICYmIG4uY2xpY2soKSksIHZvaWQgc2V0VGltZW91dChlLCA0NTAwKSk7CiAgICAgICAgICAgICAgICAgICAgfSksIDRlMyk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNuaWZmRmFpbCgpIHsKICAgICAgICAgICAgICAgICAgc25pZmZEb25lKCksICQoIi5vLS1wbGF5ZXItYmciKS5hZGRDbGFzcygiaXMtZmFpbCIpLCAkKCIuby0tdmlwIikuYWRkQ2xhc3MoImlzLXNuaWZmLWZhaWwiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlTbmlmZigpIHt9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBoaWtlclNuaWZmKHNuaWZmVGlja0lkKSB7CiAgICAgICAgICAgICAgICAgIGlmIChzbmlmZlRpY2tJZCAhPT0gc25pZmZUaWNrKSByZXR1cm47CiAgICAgICAgICAgICAgICAgIGxldCByZXNvdXJjZSA9IGV2YWwod2luZG93LmZ5X2JyaWRnZV9hcHAuZ2V0TmV0d29ya1JlY29yZHMoKSk7CiAgICAgICAgICAgICAgICAgIHJlc291cmNlID0gcmVzb3VyY2UuZmlsdGVyKChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4udGltZXN0YW1wID4gc25pZmZUaW1lc3RhbXAgJiYgaXNWYWxpZFZpZGVvVXJsKG4udXJsKTsKICAgICAgICAgICAgICAgICAgfSkpLCBpc1NuaWZmaW5nICYmIChyZXNvdXJjZS5mb3JFYWNoKChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgICAgc25pZmZTdWNjZXNzKG4udXJsKTsKICAgICAgICAgICAgICAgICAgfSkpLCBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICBoaWtlclNuaWZmKHNuaWZmVGlja0lkKTsKICAgICAgICAgICAgICAgICAgfSksIDEwMCkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gbWl4aWFTbmlmZihuKSB7CiAgICAgICAgICAgICAgICAgIGlmIChuICE9PSBzbmlmZlRpY2spIHJldHVybjsKICAgICAgICAgICAgICAgICAgbGV0IGUgPSBbXSwgdCA9IHdpbmRvdy5teF9icm93c2VyX29iai5nZXR3ZWJsb2dzKCJodHRwIik7CiAgICAgICAgICAgICAgICAgICJlcnJvciIgIT09IHQgJiYgKGUgPSB0LnRyaW0oKS5zcGxpdCgvXHMqXG5bXG5cc10qLyksIGUgPSBlLmZpbHRlcigoZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkVmlkZW9Vcmwobik7CiAgICAgICAgICAgICAgICAgIH0pKSksIGlzU25pZmZpbmcgJiYgKGUuZm9yRWFjaCgoZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgICAgIHNuaWZmU3VjY2VzcyhuKTsKICAgICAgICAgICAgICAgICAgfSkpLCBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICBtaXhpYVNuaWZmKG4pOwogICAgICAgICAgICAgICAgICB9KSwgMTAwKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpbnNlcnRQbGF5ZXJIdG1sKCkgewogICAgICAgICAgICAgICAgICBsZXQgbiA9IDAgPCBhcmd1bWVudHMubGVuZ3RoICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzBdID8gYXJndW1lbnRzWzBdIDogIiI7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGUgPSBnZXRWaXBQbGF5ZXIoKTsKICAgICAgICAgICAgICAgICAgaWYgKGUpIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCB0ID0gJzxkaXYgY2xhc3M9Im8tLXBsYXllci1iZyIgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6IHVybCgnICsgZ2V0Q2RuSW1hZ2VVcmwoUGxheWVyTG9hZGluZ0NvdmVyc1twYXJzZUludChEYXRlLm5vdygpIC8gMWUzKSAlIFBsYXllckxvYWRpbmdDb3ZlcnMubGVuZ3RoXSkgKyAnKTsiPjxkaXYgY2xhc3M9Im8tLXBsYXllci1tYXNrIj48L2Rpdj48ZGl2IGNsYXNzPSJvLS1zbmlmZi1wcm9ncmVzcyI+PC9kaXY+PGRpdiBjbGFzcz0iby0tc2lnbiI+KG/LmOKXocuYbyk8c3BhbiBjbGFzcz0iby0tdmVyc2lvbiI+diAnICsgVkVSU0lPTiArICc8L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iby0tc2xvZ2FuIj48c3Ryb25nPuC8uuC8gum4v+iSmeino+aekOC8guC8uzwvc3Ryb25nPjxkaXYgY2xhc3M9Im8tLWxvYWRlciI+JyArIEljb24ubG9hZGVyICsgJzwvZGl2PjxzdHJvbmc+5b2x6KeGPC9zdHJvbmc+PC9kaXY+PGRpdiBjbGFzcz0iby0tZXJyb3ItdGV4dCI+6Kej5p6Q5aSx6LSl77yM5Y+v5Lul5bCd6K+V5L2/55So5Y2V5Liq6Kej5p6Q5pKt5pS+77yM5oiW6ICF5Yiw5YW25a6D5q2j54mI572R56uZ5LiK6Kej5p6QPC9kaXY+PC9kaXY+JzsKICAgICAgICAgICAgICAgICAgICAkKGUpLmVtcHR5KCkuYXBwZW5kKCc8ZGl2IGNsYXNzPSJvLS1wbGF5ZXIiPicgKyB0ICsgbiArICI8L2Rpdj4iKSwgJCgiLm8tLXBsYXllciIpLnBhcmVudCgpLmFkZENsYXNzKCJvLS1wbGF5ZXItYm94Iik7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgaSA9IERhdGUubm93KCksIG8gPSBzZXRJbnRlcnZhbCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICBEYXRlLm5vdygpIC0gaSA+IDllNCAmJiBjbGVhckludGVydmFsKG8pLCAkKCIuby0tcGxheWVyLWJveCA+ICo6bm90KC5vLS1wbGF5ZXIpIikucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgICAgfSksIDFlMyk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNuaWZmKG4pIHsKICAgICAgICAgICAgICAgICAgaWYgKGlzU25pZmZpbmcgJiYgc25pZmZEb25lKCksIHNuaWZmU3RhcnQoKSwgaXNBbGxvd0lmcmFtZVNuaWZmKSBpU25pZmYoKTsgZWxzZSBpZiAoaXNBbGxvd0hpa2VyU25pZmYpIGhpa2VyU25pZmYobik7IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmICghaXNBbGxvd01peGlhU25pZmYpIHJldHVybiB2b2lkIHNuaWZmRG9uZSgpOwogICAgICAgICAgICAgICAgICAgIG1peGlhU25pZmYobik7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaW5zZXJ0UGxheWVySHRtbChpc01vYmlsZSA/ICIiIDogJzxkaXYgY2xhc3M9Im8tLXZpcC1wbGF5IGlzLWhpZGUiPjxkaXYgY2xhc3M9Im8tLXNvdXJjZXMiPjwvZGl2PjxkaXYgY2xhc3M9Im8tLXBsYXktdXJsIj48L2Rpdj48L2Rpdj4nKSwKICAgICAgICAgICAgICAgICAgaXNNb2JpbGUgJiYgKCQoIi5vLS12aXAtcGxheSIpLnJlbW92ZSgpLCAkKCIuby0tdmlwLXBhbmVsIikuYWZ0ZXIoJzxkaXYgY2xhc3M9Im8tLXZpcC1wbGF5IGlzLWhpZGUiPjxkaXYgY2xhc3M9Im8tLXNvdXJjZXMiPjwvZGl2PjxkaXYgY2xhc3M9Im8tLXBsYXktdXJsIj48L2Rpdj48L2Rpdj4nKSksCiAgICAgICAgICAgICAgICAgIHBhdXNlUGxheSgpLCBzbmlmZlVybHMgPSBbXSwgc25pZmZUaW1lcyA9IHt9LCBzbmlmZkluZGV4ID0gLTEsIGdvU25pZmYoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdvU25pZmYoKSB7CiAgICAgICAgICAgICAgICAgIGlmICghaXNTbmlmZmluZykgcmV0dXJuOwogICAgICAgICAgICAgICAgICBzbmlmZkluZGV4ICs9IDE7CiAgICAgICAgICAgICAgICAgIGNvbnN0IG4gPSBWX1Vbc25pZmZJbmRleF0sIGUgPSAoc25pZmZJbmRleCArIDEpIC8gKFZfVS5sZW5ndGggKyAxKSwgdCA9IChzbmlmZlVybHMubGVuZ3RoICsgMSkgLyBNQVhfU05JRkZfUExBWV9DT1VOVCwgaSA9IF9NYXRobWluKDEwICogKDIuNSAqIGUgKyAyLjUgKiB0ICsgNSAqIF9NYXRobWF4KGUsIHQpICsgLjUpLCA5OSkudG9GaXhlZCg0KSArICIlIjsKICAgICAgICAgICAgICAgICAgaWYgKCQoIi5vLS1zbmlmZi1wcm9ncmVzcyIpLmNzcyh7CiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGkKICAgICAgICAgICAgICAgICAgfSksICFuKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgbiA9IHNldEludGVydmFsKChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09PSAkKCJvby1pZnJhbWVzID4gaWZyYW1lIikubGVuZ3RoICYmIChjbGVhckludGVydmFsKG4pLCBzbmlmZkRvbmUoKSwgMCA9PT0gc25pZmZVcmxzLmxlbmd0aCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5vLS12aXAtaXRlbS5pcy1ibG9iIik7CiAgICAgICAgICAgICAgICAgICAgICAgIG4gPyBuLmNsaWNrKCkgOiBzbmlmZkZhaWwoKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KSwgMWUzKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKHNuaWZmVXJscy5sZW5ndGggPj0gTUFYX1NOSUZGX1BMQVlfQ09VTlQgKyAocGxheWVyICYmIHBsYXllci5yZWFkeSAmJiAwIDwgcGxheWVyLmR1cmF0aW9uID8gLTEgOiAyKSB8fCBzbmlmZlVybHMubGVuZ3RoID49IE1BWF9TTklGRl9QTEFZX0NPVU5UIC8gMiAmJiBEYXRlLm5vdygpIC0gc25pZmZUaW1lc3RhbXAgPiAxZTMgKiBfTWF0aG1heCgyNTAgLSAxMCAqIHNuaWZmVXJscy5sZW5ndGgsIDE1MCkpIHJldHVybiB2b2lkIHNuaWZmRG9uZSgpOwogICAgICAgICAgICAgICAgICBjb25zdCBvID0gZ2V0VmlwVGFyZ2V0VXJsKCksIGEgPSBNX1ZpcFVybChuKSArIG87CiAgICAgICAgICAgICAgICAgIHNuaWZmVGltZXNbZml4SWZyYW1lVXJsKGEpXSA9IERhdGUubm93KCk7CiAgICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBhZGRJZnJhbWUoYSksIHMgPSBpc01vYmlsZSA/IDcgOiA1OwogICAgICAgICAgICAgICAgICByLm9ubG9hZCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlSWZyYW1lKHIsICJUSU1FT1VUIik7CiAgICAgICAgICAgICAgICAgICAgfSksIDEyZTMpOwogICAgICAgICAgICAgICAgICB9LCBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZW1vdmVJZnJhbWUociwgIk1BWCBUSU1FT1VUIiksIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgaXNTbmlmZmluZyAmJiAwID09PSAkKCJvby1pZnJhbWVzID4gaWZyYW1lIikubGVuZ3RoICYmIHNuaWZmSW5kZXggPj0gVl9VLmxlbmd0aCAtIDEgJiYgc25pZmZEb25lKCk7CiAgICAgICAgICAgICAgICAgICAgfSksIDE1MDApOwogICAgICAgICAgICAgICAgICB9KSwgMTVlMyksIGZ1bmN0aW9uIG4oKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgZSA9ICQoIm9vLWlmcmFtZXMgPiBpZnJhbWUiKS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgaWYgKGUgPiBzIC0gMSkgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICBuKCk7CiAgICAgICAgICAgICAgICAgICAgfSksIDEwMCk7IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbiA9IHBsYXllciAmJiBwbGF5ZXIucmVhZHkgJiYgMCA8IHBsYXllci5kdXJhdGlvbiwgdCA9IF9NYXRobWluKHNuaWZmVXJscy5sZW5ndGggKiAobiA/IDIwMCA6IDE1MCkgKyAxMDAgKiAocyAtIGUpICsgX01hdGhtaW4oNTAgKiBzbmlmZkluZGV4LCAxZTMpLCAzZTMpICogKGlzTW9iaWxlID8gLjcgOiAxKTsKICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICBnb1NuaWZmKCk7CiAgICAgICAgICAgICAgICAgICAgICB9KSwgdCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBhc3luYyBmdW5jdGlvbiBhdXRvU25pZmZQbGF5KCkgewogICAgICAgICAgICAgICAgICBhd2FpdCBwbGF5QmVmb3JlKCksIDAgPCBzbmlmZlRpY2sgJiYgc25pZmZEb25lKCksIHNuaWZmU3RhcnRUaW1lID0gRGF0ZS5ub3coKSwgc25pZmYoKytzbmlmZlRpY2spLAogICAgICAgICAgICAgICAgICAkKCIuby0tdmlwIikucmVtb3ZlQ2xhc3MoImlzLXNuaWZmLXN1Y2Nlc3MgaXMtc25pZmYtZG9uZSIpLmFkZENsYXNzKCJpcy1zbmlmZmluZyIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gcGF1c2VQbGF5KCkgewogICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICQoInZpZGVvOm5vdCguby0tdmlkZW8pLCBhdWRpbyIpLmVhY2goKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICAgICAgICAgICAgICAgIGUucGF1c2UoKSwgZS52b2x1bWUgPSAwLCBlLm11dGVkID0gITAsICQoInZpZGVvOm5vdCguby0tdmlkZW8pLCBhdWRpbyIpLmVhY2goKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJChlKS5yZW1vdmUoKTsKICAgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgbiA9IERhdGUubm93KCksIGUgPSBzZXRJbnRlcnZhbCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ID0gRGF0ZS5ub3coKSAtIG4sIGkgPSBnZXRHbG9iYWwoInBsYXllck9iamVjdCIpIHx8IGdldEdsb2JhbCgiTUdUVlBsYXllciIpICYmIGdldEdsb2JhbCgiTUdUVlBsYXllciIpLnBsYXllciB8fCBnZXRHbG9iYWwoInZpZGVvUGxheWVyIikgfHwgZ2V0R2xvYmFsKCJQTEFZRVIiKTsKICAgICAgICAgICAgICAgICAgICAgIGkgJiYgKGkucGF1c2UgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBpLnBhdXNlKCksIGkubXV0ZSBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIGkubXV0ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICghaSB8fCB0ID4gOWU0KSAmJiBjbGVhckludGVydmFsKGUpOwogICAgICAgICAgICAgICAgICAgIH0pLCA2MCk7CiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKG4pIHt9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBhc3luYyBmdW5jdGlvbiBwbGF5QmVmb3JlKCkgewogICAgICAgICAgICAgICAgICAkKCIuby0tdmlwLXBsYXkiKS5yZW1vdmVDbGFzcygiaXMtaGlkZSIpLCBpc0xvYWRQbGF5ZXIgfHwgKGFkZENzcygiL3BseXIvMy42LjIvcGx5ci5jc3MiKSwKICAgICAgICAgICAgICAgICAgYXdhaXQgYWRkSnMoIi9obHMuanMvMC4xMy4yL2hscy5taW4uanMiKSwgYXdhaXQgYWRkSnMoIi9wbHlyLzMuNi4yL3BseXIubWluLmpzIiksCiAgICAgICAgICAgICAgICAgIGlzTG9hZFBsYXllciA9ICEwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFZpcFBsYXllcigpIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuICQoUGxheWVyU2VsZWN0b3IpLmdldCgwKSB8fCAkKCIjcGxheWVyLCAucGxheWVyIikuZ2V0KDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gcGxheUluUGFnZShuKSB7CiAgICAgICAgICAgICAgICAgICQoIi5vLS1wbGF5ZXIiKS5yZW1vdmVDbGFzcygiaXMtbG9hZGVkIik7CiAgICAgICAgICAgICAgICAgIGdldFZpcFBsYXllcigpID8gKHBhdXNlUGxheSgpLCBpbnNlcnRQbGF5ZXJIdG1sKCc8aWZyYW1lIGlkPSJvLS1wbGF5ZXItaWZyYW1lIiBzdHlsZT0id2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgYm9yZGVyOiBub25lOyBvdXRsaW5lOiBub25lOyIgIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGFsbG93ZnVsbHNjcmVlbj0idHJ1ZSIgYWxsb3d0cmFuc3BhcmVuY3k9InRydWUiIGZyYW1lYm9yZGVyPSIwIiBzY3JvbGxpbmc9Im5vIiBzYW5kYm94PSJhbGxvdy1zY3JpcHRzIGFsbG93LXNhbWUtb3JpZ2luIGFsbG93LWZvcm1zIiBzcmM9IicgKyBuICsgJyI+PC9pZnJhbWU+JykpIDogbG9jYXRpb24uaHJlZiA9IG4sCiAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICQoIi5vLS1wbGF5ZXIiKS5hZGRDbGFzcygiaXMtbG9hZGVkIik7CiAgICAgICAgICAgICAgICAgIH0pLCAyNTAwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBsYXlWaXBVcmwobikgewogICAgICAgICAgICAgICAgICBpZiAoIW4pIHJldHVybjsKICAgICAgICAgICAgICAgICAgY29uc3QgZSA9IG4gKyBnZXRWaXBUYXJnZXRVcmwoKTsKICAgICAgICAgICAgICAgICAgJCgiLm8tLXZpcCIpLnJlbW92ZUNsYXNzKCJpcy1zbmlmZi1zdWNjZXNzIGlzLXNuaWZmLWRvbmUgaXMtc25pZmZpbmciKS5hZGRDbGFzcygiaXMtcGxheS1pbi1wYWdlIiksCiAgICAgICAgICAgICAgICAgIHVwZGF0ZVFyY29kZShlKSwgaXNQbGF5aW5nSW5QYWdlICYmICEvaHR0cDovLnRlc3QobikgPyBwbGF5SW5QYWdlKGUpIDogKHBhdXNlUGxheSgpLAogICAgICAgICAgICAgICAgICAkKCIjby0tcGxheWVyLWlmcmFtZSIpLnJlbW92ZSgpLCAkKCIuby0tcGxheWVyIikucmVtb3ZlQ2xhc3MoImlzLWxvYWRlZCIpLCBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cub3BlbihlLCAiX2JsYW5rIik7CiAgICAgICAgICAgICAgICAgIH0pLCAxMDApKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBsYXlWaXBJdGVtKG4pIHsKICAgICAgICAgICAgICAgICAgY29uc3QgZSA9IDAgPCAkKG4pLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgbGV0IHQgPSBlID8gJChuKS5oYXNDbGFzcygiby0tdmlwLXNuaWZmIikgPyAiYXV0byIgOiAkKG4pLmF0dHIoIl9ocmVmIikgOiBTdG9yZS5nZXQoImxhc3RQbGF5Q2hvaWNlIiwgIiIpOwogICAgICAgICAgICAgICAgICAkKCIuby0tdmlwLWl0ZW0iKS5yZW1vdmVDbGFzcygiaXMtYWN0aXZlIiksICQoIi5vLS12aXAtbGlzdCB+IC5vLS10aXAiKS5yZW1vdmVDbGFzcygiby0taGlkZSIpLAogICAgICAgICAgICAgICAgICBlID8gJChuKS5hZGRDbGFzcygiaXMtYWN0aXZlIikgOiB0LnN0YXJ0c1dpdGgoImh0dHAiKSA/ICgkKCIuby0tdmlwLWl0ZW06bm90KC5vLS12aXAtc25pZmYpIikuZWFjaCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCJfaHJlZiIpID09PSB0ICYmICQodGhpcykuYWRkQ2xhc3MoImlzLWFjdGl2ZSIpOwogICAgICAgICAgICAgICAgICB9KSksIHBsYXlWaXBVcmwodCkpIDogJCgiLm8tLXZpcC1pdGVtLm8tLXZpcC1zbmlmZiIpLmFkZENsYXNzKCJpcy1hY3RpdmUiKSwgaXNTbmlmZmluZyAmJiBzbmlmZkRvbmUoKSwKICAgICAgICAgICAgICAgICAgdC5zdGFydHNXaXRoKCJodHRwIikgPyBwbGF5VmlwVXJsKHQpIDogYXV0b1NuaWZmUGxheSgpLCBTdG9yZS5zZXQoImxhc3RQbGF5Q2hvaWNlIiwgdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBNX1NvdXJjZShuKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBuID8gbi5yZXBsYWNlKC8oXHcrKS9nLCAoZnVuY3Rpb24obiwgZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBNX1N0cmluZyhlKTsKICAgICAgICAgICAgICAgICAgfSkpIDogIiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBNX1ZpcFVybChuKSB7CiAgICAgICAgICAgICAgICAgIGlmICghbikgcmV0dXJuICIiOwogICAgICAgICAgICAgICAgICBjb25zdCBlID0gTV9Tb3VyY2Uobik7CiAgICAgICAgICAgICAgICAgIHJldHVybiAiaHR0cHM6Ly8iICsgZSArIChlLmluY2x1ZGVzKCI/IikgPyAiIiA6IChlLmVuZHNXaXRoKCIuIikgPyAicGhwIiA6IC9cLyQvLnRlc3QoZSkgPyAiIiA6ICIvIikgKyAiP3VybCIpICsgIj0iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gaW5zZXJ0VmlwU291cmNlKG4pIHsKICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZSgpIHsKICAgICAgICAgICAgICAgICAgICAkKCIuby0tc2V0dGluZy1idXR0b24iKS5vZmYoImNsaWNrIikub24oImNsaWNrIiwgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgJCgiLm8tLXZpcCIpLnRvZ2dsZUNsYXNzKCJpcy1zZXR0aW5nLW9uIik7CiAgICAgICAgICAgICAgICAgICAgfSkpLCAkKCIuby0tdG9nZ2xlIikub2ZmKCJjbGljayIpLm9uKCJjbGljayIsIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICQodGhpcykudG9nZ2xlQ2xhc3MoImlzLW4iKSwgJCh0aGlzKS5oYXNDbGFzcygiby0tYWN0aW9uLXBpcCIpID8gKGlzUGxheWluZ0luUGFnZSA9ICFpc1BsYXlpbmdJblBhZ2UsCiAgICAgICAgICAgICAgICAgICAgICBHbG9iYWxTdG9yZS5zZXQoImlzUGxheWluZ0luUGFnZSIsIGlzUGxheWluZ0luUGFnZSkpIDogJCh0aGlzKS5oYXNDbGFzcygiby0tYWN0aW9uLXNraXAtYWQiKSAmJiAoaXNTa2lwQWRWaWRlbyA9ICFpc1NraXBBZFZpZGVvLAogICAgICAgICAgICAgICAgICAgICAgU3RvcmUuc2V0KCJpc1NraXBBZFZpZGVvIiwgaXNTa2lwQWRWaWRlbykpOwogICAgICAgICAgICAgICAgICAgIH0pKSwgJCgiLm8tLWVkaXQtdmlwLXNvdXJjZS1wYW5lbCB0ZXh0YXJlYSIpLm9mZigiaW5wdXQiKS5vbigiaW5wdXQiLCAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICBHbG9iYWxTdG9yZS5zZXQoIlZpcFVybHMiLCAkKHRoaXMpLnZhbCgpKTsKICAgICAgICAgICAgICAgICAgICB9KSksICQoIi5vLS12aXAtaXRlbTpub3QoLm8tLW5vcm1hbCkiKS5vZmYoImNsaWNrIikub24oImNsaWNrIiwgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgcGxheVZpcEl0ZW0odGhpcyk7CiAgICAgICAgICAgICAgICAgICAgfSkpLCAkKCIuby0tbG9nLWJ1dHRvbiIpLm9mZigiY2xpY2siKS5vbigiY2xpY2siLCAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAkKCJvby1sb2dzIikudG9nZ2xlQ2xhc3MoImlzLWFjdGl2ZSIpOwogICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBsZXQgdCA9IDEgPCBhcmd1bWVudHMubGVuZ3RoICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzFdID8gYXJndW1lbnRzWzFdIDogImFmdGVyIiwgaSA9IDIgPCBhcmd1bWVudHMubGVuZ3RoICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzJdID8gYXJndW1lbnRzWzJdIDogMDsKICAgICAgICAgICAgICAgICAgaWYgKDAgPCAkKCIuby0tdmlwIikubGVuZ3RoIHx8IDIwIDwgaSkgcmV0dXJuOwogICAgICAgICAgICAgICAgICBjb25zdCBvID0gJChuKTsKICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IG8ubGVuZ3RoKSByZXR1cm4gdm9pZCBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICBpbnNlcnRWaXBTb3VyY2UobiwgdCwgaSArIDEpOwogICAgICAgICAgICAgICAgICB9KSwgMjUwKTsKICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IHZpcFVybHMubGVuZ3RoID4gY29sbGFwc2VOdW07CiAgICAgICAgICAgICAgICAgIGxldCByID0gKGlzTW9iaWxlID8gIiIgOiAnPGRpdiBjbGFzcz0iby0tYWN0aW9uIG8tLXRvZ2dsZSBvLS1hY3Rpb24tc2tpcC1hZCcgKyAoaXNTa2lwQWRWaWRlbyA/ICIiIDogIiBpcy1uIikgKyAnIj48c3BhbiBjbGFzcz0iby0teSI+5pivPC9zcGFuPjxzcGFuIGNsYXNzPSJvLS1uIj7lkKY8L3NwYW4+5Yqg6YCf6Lez5bm/5ZGKPC9kaXY+JykgKyAnPGRpdiBjbGFzcz0iby0tYWN0aW9uIG8tLXRvZ2dsZSBvLS1hY3Rpb24tcGlwJyArIChpc1BsYXlpbmdJblBhZ2UgPyAiIiA6ICIgaXMtbiIpICsgJyI+PHNwYW4gY2xhc3M9Im8tLXkiPuaYrzwvc3Bhbj48c3BhbiBjbGFzcz0iby0tbiI+5ZCmPC9zcGFuPuW8gOWQr+WOn+e9kemhteino+aekOaSreaUvjwvZGl2PjxkaXYgY2xhc3M9Im8tLWFjdGlvbiI+PGEgaHJlZj0iaHR0cDovL3NoaXNodWlsaXVuaWFuLnRvcC9NdXNpYy8iX2JsYW5rIj7wn462TXlmcmVl6bi/6JKZ6Z+z5LmQ5byV5pOOPC9hPjwvZGl2Pic7CiAgICAgICAgICAgICAgICAgIG8uZXEoMClbdF0oJzxkaXYgY2xhc3M9Im8tLXZpcCcgKyAoaXNBbGxvd1NuaWZmID8gIiBpcy1hbGxvdy1zbmlmZiIgOiAiIikgKyAnIj48ZGl2IGNsYXNzPSJvLS1zbmlmZi1wcm9ncmVzcyI+PC9kaXY+PGRpdiBjbGFzcz0iby0tdmlwLXBhbmVsIj48ZGl2IGNsYXNzPSJvLS12aXAtdGl0bGUiPjxzcGFuIGNsYXNzPSJvLS12aXAtdGl0bGUtdGV4dCI+JyArIFBMVUdJTl9OQU1FICsgJzxzcGFuIGNsYXNzPSJvLS12aXAtc21hbGwiPnYnICsgVkVSU0lPTiArICI8L3NwYW4+PC9zcGFuPiIgKyAoX0QgPyAnPHNwYW4gY2xhc3M9Im8tLWxvZy1idXR0b24iPkxPRzwvc3Bhbj4nIDogIiIpICsgJzwvZGl2PjxkaXYgY2xhc3M9Im8tLW1lbnVzIj48ZGl2IGNsYXNzPSJvLS1xcmNvZGUtYm94IG8tLWhpZGUiPicgKyBJY29uLnFyY29kZSArICc8ZGl2IGNsYXNzPSJvLS1xcmNvZGUtdGV4dCI+5omL5py65omr56CB55yLPC9kaXY+PGRpdiBjbGFzcz0iby0tcXJjb2RlIj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJvLS1zZXR0aW5nLWJ1dHRvbiI+JyArIEljb24ucGFuZGEgKyAnPC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iby0tc2V0dGluZy1wYW5lbCI+PGRpdiBjbGFzcz0iby0tYWN0aW9ucyI+JyArIHIgKyAnPC9kaXY+PGRpdiBjbGFzcz0iby0tZWRpdC12aXAtc291cmNlLXBhbmVsIj48ZGl2IGNsYXNzPSJvLS1lZGl0LWhpbnQiPuWIt+aWsOeUn+aViO+8jOa4heepuuaBouWkjem7mOiupO+8iOm4v+iSmeino+aekO+8jOWFqOaWsOaXoOW5v+WRiuino+aekO+8iTwvZGl2Pjx0ZXh0YXJlYSBwbGFjZWhvbGRlcj0i5riF56m65Lya5L2/55So6buY6K6k5YC8Ij4nICsgY3VzdG9tVmlwVXJscy50cmltKCkgKyAnPC90ZXh0YXJlYT48ZGl2IGNsYXNzPSJvLS1zbG9nYW4tdGV4dCI+PHN0cm9uZz48L3N0cm9uZz5TVklQLTY2Nu+8jOasoui/juS9v+eUqDxzdHJvbmc+PC9zdHJvbmc+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iby0tdmlwLWxpc3QiPjxzcGFuIGNsYXNzPSJvLS12aXAtaXRlbSBvLS12aXAtc25pZmYiPicgKyBJY29uLnZpcCArICc8aSBjbGFzcz0iby0tYnViYmxlIG8tLWIxIj48L2k+PGkgY2xhc3M9Im8tLWJ1YmJsZSBvLS1iMiI+PC9pPjxpIGNsYXNzPSJvLS1idWJibGUgby0tYjMiPjwvaT48L3NwYW4+JyArIHZpcFVybHMubWFwKChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSAiby0tdmlwLWl0ZW0iOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBuLnVybC5zdGFydHNXaXRoKCJodHRwcyIpICYmIChlICs9ICIgaXMtcGxheS1pbi1wYWdlIiksIG4uaXNSYW5kb20gJiYgKGUgKz0gIiBpcy1yYW5kb20iKSwKICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9IicgKyBlICsgJyIgX2hyZWY9IicgKyBuLnVybCArICciPicgKyBuLm5hbWUgKyAiPC9zcGFuPiI7CiAgICAgICAgICAgICAgICAgIH0pKS5qb2luKCJcbiIpICsgKGEgPyAnPHNwYW4gY2xhc3M9Im8tLXZpcC1pdGVtIG8tLW5vcm1hbCBvLS1jb2xsYXBzZSI+4p6iPC9zcGFuPicgOiAiIikgKyAiPC9kaXY+IiArIChpc01vYmlsZSA/ICc8ZGl2IGNsYXNzPSJvLS10aXAgby0taGlkZSI+5aSa5pWw6Kej5p6Q5Lya5Zyo56e75Yqo56uv5pi+56S6PHN0cm9uZz7lm77niYflub/lkYo8L3N0cm9uZz7vvIzpnIDmiYvliqjmi6bmiKrjgII8YnI+6YWN5ZCI5rWP6KeI5Zmo55qEPHN0cm9uZz7ll4XmjqLlip/og708L3N0cm9uZz7kvb/nlKjvvIzkvZPpqozmm7TkvbPjgII8L2Rpdj4nIDogIiIpICsgIjwvZGl2PiIpLAogICAgICAgICAgICAgICAgICBhICYmIHNtYXJ0Q29sbGFwc2UoIi5vLS12aXAtaXRlbSIpOwogICAgICAgICAgICAgICAgICBsZXQgcyA9IDAsIGwgPSBzZXRJbnRlcnZhbCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgZSgpLCAxMDAgPCBzKysgJiYgY2xlYXJJbnRlcnZhbChsKTsKICAgICAgICAgICAgICAgICAgfSksIF9NYXRobWluKDIwMCArIDUwICogcywgMWUzKSk7CiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgY29uc3QgVmlwVXJscyA9ICLwn46J5bqG56Wd8J+OiSBodHRwczovL2FwaS4xZGlvci5jbi9hbmFseXNpcy8xMjMvaW5kZXgucGhwP3VpZD0xNDI4Jm15PWFma3J1REZJWVomdXJsPVxu8J+OieW7uuWFmvCfjokgaHR0cHM6Ly9wbGF5ZXIubWFxcS5jbi8/dXJsPVxu8J+OieeZvuW5tPCfjokgaHR0cDovLzYwanguY29tLz91cmw9XG7wn5SlangxIGh0dHBzOi8vd3d3LnBsYXltM3U4LmNuL2ppZXhpLnBocD91cmw9XG7wn5SlangyIGh0dHA6Ly93d3cubWd0di5jb20ub2pia2p4LmNvbS8/dXJsPVxu8J+UpWp4MyBodHRwOi8vYXBpLnl1ZWxpYW5nanguY29tLz91cmw9XG7wn5Slang0IGh0dHBzOi8vYXBpLmxlZHVvdHYuY29tL3dwLWFwaS9pZnIucGhwP3ZpZD1cbvCflKVqeDUgaHR0cDovL2FwaS5teXpjaC5jbi8/dXJsPVxu8J+UpWp4NiBodHRwOi8vd3d3LmlrdWtrLmNvbS8/dXJsPVxuang3IGh0dHBzOi8vYXBpLnl1ZWxpYW5nanguY29tLz91cmw9XG5qeDggaHR0cHM6Ly9qeC53enNsdy5jbi8/dXJsPVxuang5IGh0dHBzOi8vejEubTE5MDcuY24vP2p4PVxuangxMCBodHRwczovL3d3dy45MWp4cy5jb20vamlleGkvP3VybD1cbmp4MTEgaHR0cHM6Ly9nby55aDA1MjMuY24veS5jeT91cmw9XG5qeDEyIGh0dHA6Ly9qeDUuMTc4ZHUuY29tL3AxLz91cmw9XG5qeDEzIGh0dHBzOi8vd3d3Lnh5bWF2LmNvbS8/dXJsPVxuang2NiBodHRwczovL2p4LnBvcG81MjAuY24vamlleGkvP3VybD1cbmp4NjYgaHR0cHM6Ly93d3cuZ2FpNC5jb20vP3VybD1cbmp4NjYgaHR0cDovL3d3dy5qeDRrLmNvbS9rLnBocD91cmw9XG5qeDY2IGh0dHBzOi8vanguNTJkYW11LmNvbS9kbWp4L2ppZXhpLnBocD91cmw9XG5qeDY2IGh0dHBzOi8vYXBpLmppZXhpLmxhLz91cmw9XG5qeDY2IGh0dHBzOi8vYXBpLjNqeC50b3AvdmlwLz91cmw9XG5qeDY2IGh0dHBzOi8vd3d3LjgwOTAubGEvYXBpLz91cmw9XG5qeDY2IGh0dHBzOi8vdmlwLnBhcndpeC5jb206NDQzMy9wbGF5ZXIvP3VybD1cbmp4NjYgaHR0cHM6Ly93d3cuY2ttb3YudmlwL2FwaS5waHA/dXJsPVxuang2NiBodHRwczovL3d3dy5ja3BsYXllci52aXAvamlleGkvP3VybD1cbmp4NjYgaHR0cHM6Ly9qeHguc215czguY24vaW5kZXgucGhwP3VybD1cbmp4NjYgaHR0cHM6Ly9qeC55YW9odWF4dWFuLmNvbS8/dXJsPVxuang2NiBodHRwczovL2p4LjExNmthbi5jb20vP3VybD1cbmp4NjYgaHR0cHM6Ly93d3cuODA5MGcuY24vamlleGkvP3VybD1cbmp4NjYgaHR0cHM6Ly9qeC5tM3U4LnR2L2ppZXhpLz91cmw9XG5qeDY2IGh0dHBzOi8vanh4LnNteXM4LmNuL2luZGV4LnBocD91cmw9XG5qeDY2IGh0dHBzOi8vd3d3LjE3MTd5dW4uY29tL2p4L3R5LnBocD91cmw9XG5qeDY2IGh0dHBzOi8vdmlwLmppdWJvanguY29tL3ZpcC8/dXJsPVxuang2NiBodHRwczovL3d3dy5hZG1pbmlzdHJhdG9ydy5jb20vaW5kZXgucGhwP3VybD1cbmp4NjYgaHR0cHM6Ly93d3cuc3NhbWFvLmNvbS9qeC8/dXJsPVxuang2NiBodHRwczovLzEyMy4xZGlvci5jbi8/dXJsPVxuang2NiBodHRwczovL3ZpcC5sYW9iYW5kcS5jb20vamlleGkucGhwP3VybD1cbmp4NjYgaHR0cHM6Ly93d3cuODA5MGcuY24vP3VybD1cbmp4NjYgaHR0cHM6Ly95LjlkYW4uY2MvP3Y9XG5qeDY2IGh0dHBzOi8vdGhpbmtpYm0ubm93LnNoLz91cmw9XG5qeDY2IGh0dHBzOi8vangucXVhbm1pbmdqaWV4aS5jb20vP3VybD1cbmp4NjYgaHR0cHM6Ly82NjBlLmNvbS8/dXJsPVxuang2NiBodHRwczovL3d3dy5oOGp4LmNvbS9qaWV4aS5waHA/dXJsPVxuang2NiBodHRwczovL29ranguY2MvP3VybD1cbmp4NjYgaHR0cHM6Ly9qc2FwLmFoZnVxaS5uZXQvP3VybD1cbmp4NjYgaHR0cHM6Ly9qeC5oYW8tenNqLmNuL3ZpcC8/dXJsPVxuang2NiBodHRwOi8vNDcwLndlYjN2LmNvbS8/MD1zJjE9XG5qeDY2IGh0dHBzOi8vcGxhbWd0dmNhY2hlLmNjeWpqZC5jb20vcGxheS5waHA/dXJsPVxuang2NiBodHRwczovL3d3dy5jdWFuLmxhL20zdTgucGhwP3VybD1cbmp4NjYgaHR0cDovL2FwaS5iYWl5dWcudmlwL2luZGV4LnBocD91cmw9XG5qeDY2IGh0dHA6Ly9wbGF5eC50b3AvP3VybD1cbmp4NjYgaHR0cDovL2JvZmFuZy5vbmxpbmUvP3VybD1cbmp4OTkgaHR0cDovL2p4Lm1hZ3VheXMuY2MvP3VybD1cbmp4OTkgaHR0cHM6Ly92aXAucGFyd2l4LmNvbTo0NDMzL3BsYXllci8/dXJsPVxuang5OSBodHRwOi8vYXBpLjEzdHYudG9wL2ppZXhpLz91cmw9XG5qeDk5IGh0dHBzOi8vd3d3Lmg4anguY29tL2ppZXhpLnBocD91cmw9XG5qeDk5IGh0dHBzOi8vejEubTE5MDcuY24vP2Vwcz0wJmp4PVxuang5OSBodHRwczovL3d3dy55YW9zb3UuY2MvamlleGkvP3Y9XG5qeDk5IGh0dHBzOi8vYXBpLnFpYW5xaS5uZXQvdmlwLz91cmw9XG5qeDk5IGh0dHBzOi8vcWltaWhlLmNvbS8/dXJsPVxuang5OSBodHRwczovL3d3dy5rcGV6cC5jbi9qbGV4aS5waHA/dXJsPVxuang5OSBodHRwczovL2p4LnJkaGsubmV0Lz92PVxuang5OSBodHRwOi8vangubXcwLmNjLz91cmw9XG5qeDk5IGh0dHBzOi8vanguZXJnYW4udG9wLz91cmw9XG5qeDk5IGh0dHA6Ly9qeC40MDgwanguY2MvP3VybD1cbmp4OTkgaHR0cHM6Ly9qeC55YW9odWF4dWFuLmNvbS8/dXJsPVxuang5OSBodHRwczovL2p4LnBwZmx2LmNvbS8/dXJsPVxuang5OSBodHRwOi8vdmlwMTIza2FuLnZpcDo1MjAvbTN1OC5waHA/dXJsPVxuang5OSBodHRwczovL2p4LnlwYXJzZS5jb20vaW5kZXgucGhwP3VybD1cbmp4OTE5aHR0cDovL2p4LnlwYXJzZS5jb20vaW5kZXgucGhwP3VybD1cbmp4OTkgaHR0cHM6Ly96eS5hb3h0di5jb20vP3VybD1odHRwczovL2p4Lnl1bmJveXMuY24vP3VybD1cbmp4NiBodHRwOi8vd3d3LnBhbmd1amlleGkuY2MvamlleGkucGhwP3VybD1cbmp4MTAgaHR0cDovL2p4Lm13MC5jYy8/dXJsPVxuangxNyBodHRwczovL2p4LjdjeWQuY29tLz91cmw9XG5qeDI3IGh0dHA6Ly8xN2t5dW4uY29tL2FwaS5waHA/dXJsPVxuangyOCBodHRwOi8vamlleGkua2luZ3NudWcuY24vdHgucGhwP3VybD1cbmp4MjkgaHR0cDovL3l1bi50dnpubi5jbi9saW5lcz91cmw9XG5qeDMwIGh0dHBzOi8vanguc21iay5jYy8/dj1cbmp4MzEgaHR0cDovLzUuNTI1MmUuY29tL2p4LnBocD91cmw9XG5qeDMyIGh0dHA6Ly94LmRsY2FpeGluLmNvbS8/dXJsPVxuangzMyBodHRwczovL2FwaS5zaWd1anguY29tL3YucGhwP3VybD1cbmp4MzQgaHR0cDovL3lzangudnhjYy50b3AvP3VybD1cbmp4MzUgaHR0cHM6Ly96MS5tMTkwNy5jbi8/ang9XG5qeDM2IGh0dHBzOi8vanguMWZmMS5jbi8/dXJsPVxuangzNyBodHRwczovL2FwaS52Ni5jaGF0Lz91cmw9XG5qeDM4IGh0dHBzOi8vYXBpLjNqeC50b3AvdmlwLz91cmw9XG5qeDU2IGh0dHA6Ly9ib2Zhbmcub25saW5lLz91cmw9XG5qeDU3IGh0dHA6Ly9wbGF5eC50b3AvP3VybD1cbmp4NTggaHR0cDovL25pdGlhbjkuY29tLz91cmw9XG5qeDU5IGh0dHA6Ly9taW1pamlleGkudG9wLz91cmw9XG5qeDYwIGh0dHA6Ly9ib2Zhbmcub25saW5lLz91cmw9XG5qeDYxIGh0dHA6Ly9wbGF5eC50b3AvP3VybD1cbmp4NjIgaHR0cDovL25pdGlhbjkuY29tLz91cmw9XG5qeDYzIGh0dHA6Ly9taW1pamlleGkudG9wLz91cmw9XG5qeDY0IGh0dHA6Ly9rOGFhLmNvbS9qeC9pbmRleC5waHA/dXJsPVxuang3NSBodHRwczovL3d3dy4xNzE3eXVuLmNvbS9iZWl5b25nLz91cmw9XG5qeDc2IGh0dHA6Ly9qeC4xNzhkdS5jb20vangyLnBocD91cmw9XG5qeDc3IGh0dHA6Ly9qeC42MThnLmNvbS8/dXJsPVxuang3OCBodHRwczovL2p4LjYxOGcuY29tLz91cmw9XG5qeDc5IGh0dHA6Ly9qeC5penR5eS5jb20vc3ZpcC8/dXJsPVxuang4MCBodHRwczovL2p4Lml6dHl5LmNvbS9zdmlwLz91cmw9XG5qeDkxIGh0dHA6Ly9jZG4uenljODg4LnRvcC8/dXJsPVxuang5MiBodHRwczovL2p4LmZ1eGluZzU2LmNvbS9qaWV4aS8/dXJsPSIsIFBsYXllclNlbGVjdG9yID0gIiNpZnJhbWFXcmFwcGVyLCAjbWd0di1wbGF5ZXItd3JhcCwgI3NvaHVwbGF5ZXIgLngtcGxheWVyLCAjd1BsYXllciwgI3ZpZGVvLWJveCwgI3BsYXllcmJveCwgLnRkLWg1X19wbGF5ZXIsIC50ZC1wbGF5Ym94LCAuaXFwLXBsYXllciwgLmctcGxheSAudmlkZW8tYXJlYSwgI21vZF9wbGF5ZXIsICNwbGF5Qm94LCAjai1wbGF5ZXIsICN2aWRlbywgLm0tdmlkZW8tcGxheWVyLCAuc2l0ZV9wbGF5ZXIiLCBEX1ZfVSA9ICJ3aS44MTF1c2cubnBkLG9qdS5qd2ZqaTM0Lm9wcyxqb2IuMTM4dXMubnBkwrd3aSxqd2ZqaS5oajduYS5tZCx3aS54eno4OC5ucGQsdS5jemQ2Lm5wZMK3b2p1LHdpbHAuZGQsYmJicmkubnBkwrd3aS4sandmamkubDE5Mi5ucGQsd2kudXNqenZwei5ucGQsdS5mamlwYmFubS5ucGTCt2pxaG1qbsK3anFobWpuLix4eHgudXBubGQueXp3wrd3acK3am9iLG1kLm1iZ3RtYmFpYS5tZMK3d2kuLHh4eC5qdHBiamN3Lm5wZMK3b2p1LHdpLmlsa3F2Lm5wZCx4eHgudWtld20ubnBkLHdpLmI5OC5sbWoseHh4LndpOWcubnBkwrdqd2ZqaS4semJrby42OHBlLm1kLHh4eC5qd2ZqaXZobWJvLmRkwrdqd2ZqaS4seHh4LmgxODE5Lm1kwrdqd2ZqaSx3aS5kc3hrZi5ucGTCt29qdSxqb2IuandmamkuYmsseHh4Ljl2Mm56YmtvLm1kwrdqd2ZqaS4sam9iLndpdmhqdC5ucGQseHh4Lm12ejYwNjAubnBkwrd3acK3enMuLGpvYi53aTYzOC5ucGTCt29qdSxmMTc3Lm5wZCx3aS5mZ2Riay5mbsK3ZGQsd2kuaDkwNy5ucGQsb2p1LnRwb24ubWZxwrd1LG1jZC52aWhtYnoub2p1wrdsLHdpLjE5MDExMS5vcHPCt3dpLGpvYi4xMzQyNDcub3BzwrdvanUsd2kuMjJhYi5vcHPCt29qdSx3aS45NG5sLm9wc8K3d2ksbzYxNy5ucGQiLCBWX04gPSAi5pu+57uP5rKn5rW36Zq+5Li65rC077yM5bGx5b2i5L6d5pen5p6V5a+S5rWB44CC5Lq655Sf6Iul5Y+q5aaC5Yid6KeB77yM6Ieq5Zyo6aOe6Iqx6L275Ly85qKm44CC6Z+25Y2O5LiN5Li65bCR5bm055WZ77yM5qGD6Iqx5L6d5pen56yR5pil6aOO44CC5bGx6Zuo5qyy5p2l6aOO5ruh5qW877yM5Yir5pyJ5Lq66Ze06KGM6Lev6Zq+44CC5ruh6Ii55riF5qKm5Y6L5pif5rKz77yM5LiA6JOR54Of6Zuo5Lu75bmz55Sf44CC5Lq66Ze05pyJ5ZGz5piv5riF5qyi77yM5q2k5b+D5a6J5aSE5piv5ZC+5Lmh44CCIiwgTUFYX1NOSUZGX1BMQVlfQ09VTlQgPSBpc01vYmlsZSA/IDE1IDogMTI7CiAgICAgICAgICAgICAgICBsZXQgaXNBbGxvd0lmcmFtZVNuaWZmID0gR2xvYmFsU3RvcmUuZ2V0KCJpc0FsbG93SWZyYW1lU25pZmYiKSB8fCAhMTsKICAgICAgICAgICAgICAgIGNvbnN0IGlzSGlrZXIgPSAhIXdpbmRvdy5meV9icmlkZ2VfYXBwLCBpc01peGlhID0gISF3aW5kb3cubXhfYnJvd3Nlcl9vYmosIGlzQWxsb3dIaWtlclNuaWZmID0gaXNIaWtlciAmJiAhIXdpbmRvdy5meV9icmlkZ2VfYXBwLmdldE5ldHdvcmtSZWNvcmRzLCBpc0FsbG93TWl4aWFTbmlmZiA9IGlzTWl4aWEgJiYgISF3aW5kb3cubXhfYnJvd3Nlcl9vYmouZ2V0d2VibG9nOwogICAgICAgICAgICAgICAgbGV0IHBsYXllciwgaXNBbGxvd1NuaWZmID0gaXNBbGxvd0hpa2VyU25pZmYgfHwgaXNBbGxvd01peGlhU25pZmYgfHwgaXNBbGxvd0lmcmFtZVNuaWZmLCBzbmlmZlRpbWVzdGFtcCA9IERhdGUubm93KCksIGlzU25pZmZpbmcgPSAhMSwgc25pZmZUaWNrID0gMCwgc25pZmZVcmxzID0gW10sIHNuaWZmVXJsc0tleSA9IFtdLCBpc1BsYXlpbmdJblBhZ2UgPSBHbG9iYWxTdG9yZS5nZXQoImlzUGxheWluZ0luUGFnZSIsICFpc01vYmlsZSksIGlzTG9hZFBsYXllciA9ICExLCBzbmlmZlRpbWVzID0ge30sIHNuaWZmU3RhcnRUaW1lID0gRGF0ZS5ub3coKSwgUVIgPSAiIiwgcXJjb2RlQ29kZSA9ICIiLCBibG9iQ291bnQgPSAwOwogICAgICAgICAgICAgICAgY29uc3QgYmxvYk5hbWVzID0gIuKRoOKRoeKRouKRo+KRpOKRpeKRpuKRp+KRqOKRqeKRquKRq+KRrOKRreKRruKRr+KRsOKRseKRsuKRsyIsIGlmcmFtZXMgPSB7fTsKICAgICAgICAgICAgICAgIGxldCBwcm9ncmVzc0ludGVydmFsID0gbnVsbCwgaXNFbnN1cmVQbGF5aW5nQ2hlY2sgPSAhMTsKICAgICAgICAgICAgICAgIEUub24oInBsYXl1cmwuY2hhbmdlIiwgKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAgICAgbiA/IHBsYXlWaXBJdGVtKCQoIi5vLS12aXAtaXRlbS5pcy1hY3RpdmUiKSkgOiAoc25pZmZEb25lKCksICQoIi5vLS12aXAtaXRlbSIpLnJlbW92ZUNsYXNzKCJpcy1hY3RpdmUiKSk7CiAgICAgICAgICAgICAgICB9KSksIEUub24oImVuYWJsZS5zbmlmZiIsIChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgIG4uZnJvbSA9PT0gU25pZmZDaGVja1VybCAmJiAkKCJvby1pZnJhbWVzID4gaWZyYW1lIikuZWFjaCgoZnVuY3Rpb24obiwgZSkgewogICAgICAgICAgICAgICAgICAgIGUuc3JjID09PSBTbmlmZkNoZWNrVXJsICYmIHJlbW92ZUlmcmFtZShlKTsKICAgICAgICAgICAgICAgICAgfSkpLCBpc0FsbG93SWZyYW1lU25pZmYgfHwgKGlzQWxsb3dJZnJhbWVTbmlmZiA9ICEwLCBpc0FsbG93U25pZmYgPSAhMCwgR2xvYmFsU3RvcmUuc2V0KCJpc0FsbG93SWZyYW1lU25pZmYiLCAhMCksCiAgICAgICAgICAgICAgICAgICQoIi5vLS12aXAiKS5hZGRDbGFzcygiaXMtYWxsb3ctc25pZmYiKSwgJCgiLm8tLXZpcC1pdGVtLmlzLXJhbmRvbSIpLnJlbW92ZSgpLCBzbWFydENvbGxhcHNlKCIuby0tdmlwLWl0ZW0iKSk7CiAgICAgICAgICAgICAgICB9KSksIEUub24oInNuaWZmLmZhaWwiLCAoZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgICBpZiAoaXNBbGxvd1NuaWZmKSB7CiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlSWZyYW1lKGdldElmcmFtZUlkKG4uZnJvbSkpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KSksIEUub24oInBsYXkudmlkZW8iLCAoZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgICByZW1vdmVJZnJhbWUoZ2V0SWZyYW1lSWQobi5mcm9tKSksIHNuaWZmU3VjY2VzcyhuLnVybCwgbi5mcm9tKTsKICAgICAgICAgICAgICAgIH0pKSwgRS5vbigic25pZmYuYmxvYiIsIChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgIHJlbW92ZUlmcmFtZShnZXRJZnJhbWVJZChuLmZyb20pKTsKICAgICAgICAgICAgICAgICAgY29uc3QgZSA9IG4uZnJvbS5yZXBsYWNlKC89aHR0cC4rLywgIj0iKTsKICAgICAgICAgICAgICAgICAgbGV0IHQgPSAhMTsKICAgICAgICAgICAgICAgICAgaWYgKCQoIi5vLS12aXAtaXRlbS5pcy1wbGF5LWluLXBhZ2UiKS5lYWNoKChmdW5jdGlvbihuLCBpKSB7CiAgICAgICAgICAgICAgICAgICAgJChpKS5hdHRyKCJfaHJlZiIpID09PSBlICYmICh0ID0gITApOwogICAgICAgICAgICAgICAgICB9KSksICF0KSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgbiA9IGJsb2JOYW1lc1tibG9iQ291bnQrK10gfHwgIuino+aekCIgKyBibG9iQ291bnQ7CiAgICAgICAgICAgICAgICAgICAgJCgiLm8tLXZpcC1pdGVtLmlzLXBsYXktaW4tcGFnZTpub3QoLmlzLWJsb2IpIikuZXEoMCkuYmVmb3JlKCc8c3BhbiBjbGFzcz0iby0tdmlwLWl0ZW0gaXMtcGxheS1pbi1wYWdlIGlzLWJsb2IiIF9ocmVmPSInICsgZSArICciPicgKyBuICsgIjwvc3Bhbj4iKSwKICAgICAgICAgICAgICAgICAgICAkKCIuby0tdmlwLWl0ZW06bm90KC5vLS1ub3JtYWwpIikub2ZmKCJjbGljayIpLm9uKCJjbGljayIsIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgIHBsYXlWaXBJdGVtKHRoaXMpOwogICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgY29uc3QgY2hhclRvTnVtID0gZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgICByZXR1cm4gbi5jaGFyQ29kZUF0KDApIC0gOTc7CiAgICAgICAgICAgICAgICB9LCBudW1Ub0NoYXIgPSBmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgU3RyaW5nLmZyb21DaGFyQ29kZSkoOTcgKyBuKTsKICAgICAgICAgICAgICAgIH0sIE1fTnVtYmVyID0gZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgICByZXR1cm4gK24gKyAoMSA9PSBuICUgMiA/IC0xIDogMSk7CiAgICAgICAgICAgICAgICB9LCBNX0xldHRlciA9IGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bVRvQ2hhcihNX051bWJlcihjaGFyVG9OdW0obikpKTsKICAgICAgICAgICAgICAgIH0sIE1fQ2hhciA9IGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIC9bYS16XS9pLnRlc3QobikgPyBNX0xldHRlcihuKSA6IC9cZC8udGVzdChuKSA/IE1fTnVtYmVyKG4pIDogIiI7CiAgICAgICAgICAgICAgICB9LCBNX1N0cmluZyA9IGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIG4uc3BsaXQoIiIpLnJldmVyc2UoKS5tYXAoKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gTV9DaGFyKG4pOwogICAgICAgICAgICAgICAgICB9KSkuam9pbigiIik7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgbGV0IFZfVSA9ICJ3aS44MTF1c2cubnBkLG9qdS5qd2ZqaTM0Lm9wcyxqb2IuMTM4dXMubnBkwrd3aSxqd2ZqaS5oajduYS5tZCx3aS54eno4OC5ucGQsdS5jemQ2Lm5wZMK3b2p1LHdpbHAuZGQsYmJicmkubnBkwrd3aS4sandmamkubDE5Mi5ucGQsd2kudXNqenZwei5ucGQsdS5mamlwYmFubS5ucGTCt2pxaG1qbsK3anFobWpuLix4eHgudXBubGQueXp3wrd3acK3am9iLG1kLm1iZ3RtYmFpYS5tZMK3d2kuLHh4eC5qdHBiamN3Lm5wZMK3b2p1LHdpLmlsa3F2Lm5wZCx4eHgudWtld20ubnBkLHdpLmI5OC5sbWoseHh4LndpOWcubnBkwrdqd2ZqaS4semJrby42OHBlLm1kLHh4eC5qd2ZqaXZobWJvLmRkwrdqd2ZqaS4seHh4LmgxODE5Lm1kwrdqd2ZqaSx3aS5kc3hrZi5ucGTCt29qdSxqb2IuandmamkuYmsseHh4Ljl2Mm56YmtvLm1kwrdqd2ZqaS4sam9iLndpdmhqdC5ucGQseHh4Lm12ejYwNjAubnBkwrd3acK3enMuLGpvYi53aTYzOC5ucGTCt29qdSxmMTc3Lm5wZCx3aS5mZ2Riay5mbsK3ZGQsd2kuaDkwNy5ucGQsb2p1LnRwb24ubWZxwrd1LG1jZC52aWhtYnoub2p1wrdsLHdpLjE5MDExMS5vcHPCt3dpLGpvYi4xMzQyNDcub3BzwrdvanUsd2kuMjJhYi5vcHPCt29qdSx3aS45NG5sLm9wc8K3d2ksbzYxNy5ucGQiOwogICAgICAgICAgICAgICAgY29uc3QgTm9Nb2JpbGVWaXBVcmxSZWdleCA9IC9qeFwud3NsbWZcLmNvbS8sIHN0b3JlVmlwVXJscyA9IChHbG9iYWxTdG9yZS5nZXQoIlZpcFVybHMiKSB8fCAiIikudHJpbSgpLCBjdXN0b21WaXBVcmxzID0gc3RvcmVWaXBVcmxzIHx8ICLwn46J5bqG56Wd8J+OiSBodHRwczovL2FwaS4xZGlvci5jbi9hbmFseXNpcy8xMjMvaW5kZXgucGhwP3VpZD0xNDI4Jm15PWFma3J1REZJWVomdXJsPVxu8J+OieW7uuWFmvCfjokgaHR0cHM6Ly9wbGF5ZXIubWFxcS5jbi8/dXJsPVxu8J+OieeZvuW5tPCfjokgaHR0cDovLzYwanguY29tLz91cmw9XG7wn5SlangxIGh0dHBzOi8vd3d3LnBsYXltM3U4LmNuL2ppZXhpLnBocD91cmw9XG7wn5SlangyIGh0dHA6Ly93d3cubWd0di5jb20ub2pia2p4LmNvbS8/dXJsPVxu8J+UpWp4MyBodHRwOi8vYXBpLnl1ZWxpYW5nanguY29tLz91cmw9XG7wn5Slang0IGh0dHBzOi8vYXBpLmxlZHVvdHYuY29tL3dwLWFwaS9pZnIucGhwP3ZpZD1cbvCflKVqeDUgaHR0cDovL2FwaS5teXpjaC5jbi8/dXJsPVxu8J+UpWp4NiBodHRwOi8vd3d3LmlrdWtrLmNvbS8/dXJsPVxuang3IGh0dHBzOi8vYXBpLnl1ZWxpYW5nanguY29tLz91cmw9XG5qeDggaHR0cHM6Ly9qeC53enNsdy5jbi8/dXJsPVxuang5IGh0dHBzOi8vejEubTE5MDcuY24vP2p4PVxuangxMCBodHRwczovL3d3dy45MWp4cy5jb20vamlleGkvP3VybD1cbmp4MTEgaHR0cHM6Ly9nby55aDA1MjMuY24veS5jeT91cmw9XG5qeDEyIGh0dHA6Ly9qeDUuMTc4ZHUuY29tL3AxLz91cmw9XG5qeDEzIGh0dHBzOi8vd3d3Lnh5bWF2LmNvbS8/dXJsPVxuang2NiBodHRwczovL2p4LnBvcG81MjAuY24vamlleGkvP3VybD1cbmp4NjYgaHR0cHM6Ly93d3cuZ2FpNC5jb20vP3VybD1cbmp4NjYgaHR0cDovL3d3dy5qeDRrLmNvbS9rLnBocD91cmw9XG5qeDY2IGh0dHBzOi8vanguNTJkYW11LmNvbS9kbWp4L2ppZXhpLnBocD91cmw9XG5qeDY2IGh0dHBzOi8vYXBpLmppZXhpLmxhLz91cmw9XG5qeDY2IGh0dHBzOi8vYXBpLjNqeC50b3AvdmlwLz91cmw9XG5qeDY2IGh0dHBzOi8vd3d3LjgwOTAubGEvYXBpLz91cmw9XG5qeDY2IGh0dHBzOi8vdmlwLnBhcndpeC5jb206NDQzMy9wbGF5ZXIvP3VybD1cbmp4NjYgaHR0cHM6Ly93d3cuY2ttb3YudmlwL2FwaS5waHA/dXJsPVxuang2NiBodHRwczovL3d3dy5ja3BsYXllci52aXAvamlleGkvP3VybD1cbmp4NjYgaHR0cHM6Ly9qeHguc215czguY24vaW5kZXgucGhwP3VybD1cbmp4NjYgaHR0cHM6Ly9qeC55YW9odWF4dWFuLmNvbS8/dXJsPVxuang2NiBodHRwczovL2p4LjExNmthbi5jb20vP3VybD1cbmp4NjYgaHR0cHM6Ly93d3cuODA5MGcuY24vamlleGkvP3VybD1cbmp4NjYgaHR0cHM6Ly9qeC5tM3U4LnR2L2ppZXhpLz91cmw9XG5qeDY2IGh0dHBzOi8vanh4LnNteXM4LmNuL2luZGV4LnBocD91cmw9XG5qeDY2IGh0dHBzOi8vd3d3LjE3MTd5dW4uY29tL2p4L3R5LnBocD91cmw9XG5qeDY2IGh0dHBzOi8vdmlwLmppdWJvanguY29tL3ZpcC8/dXJsPVxuang2NiBodHRwczovL3d3dy5hZG1pbmlzdHJhdG9ydy5jb20vaW5kZXgucGhwP3VybD1cbmp4NjYgaHR0cHM6Ly93d3cuc3NhbWFvLmNvbS9qeC8/dXJsPVxuang2NiBodHRwczovLzEyMy4xZGlvci5jbi8/dXJsPVxuang2NiBodHRwczovL3ZpcC5sYW9iYW5kcS5jb20vamlleGkucGhwP3VybD1cbmp4NjYgaHR0cHM6Ly93d3cuODA5MGcuY24vP3VybD1cbmp4NjYgaHR0cHM6Ly95LjlkYW4uY2MvP3Y9XG5qeDY2IGh0dHBzOi8vdGhpbmtpYm0ubm93LnNoLz91cmw9XG5qeDY2IGh0dHBzOi8vangucXVhbm1pbmdqaWV4aS5jb20vP3VybD1cbmp4NjYgaHR0cHM6Ly82NjBlLmNvbS8/dXJsPVxuang2NiBodHRwczovL3d3dy5oOGp4LmNvbS9qaWV4aS5waHA/dXJsPVxuang2NiBodHRwczovL29ranguY2MvP3VybD1cbmp4NjYgaHR0cHM6Ly9qc2FwLmFoZnVxaS5uZXQvP3VybD1cbmp4NjYgaHR0cHM6Ly9qeC5oYW8tenNqLmNuL3ZpcC8/dXJsPVxuang2NiBodHRwOi8vNDcwLndlYjN2LmNvbS8/MD1zJjE9XG5qeDY2IGh0dHBzOi8vcGxhbWd0dmNhY2hlLmNjeWpqZC5jb20vcGxheS5waHA/dXJsPVxuang2NiBodHRwczovL3d3dy5jdWFuLmxhL20zdTgucGhwP3VybD1cbmp4NjYgaHR0cDovL2FwaS5iYWl5dWcudmlwL2luZGV4LnBocD91cmw9XG5qeDY2IGh0dHA6Ly9wbGF5eC50b3AvP3VybD1cbmp4NjYgaHR0cDovL2JvZmFuZy5vbmxpbmUvP3VybD1cbmp4OTkgaHR0cDovL2p4Lm1hZ3VheXMuY2MvP3VybD1cbmp4OTkgaHR0cHM6Ly92aXAucGFyd2l4LmNvbTo0NDMzL3BsYXllci8/dXJsPVxuang5OSBodHRwOi8vYXBpLjEzdHYudG9wL2ppZXhpLz91cmw9XG5qeDk5IGh0dHBzOi8vd3d3Lmg4anguY29tL2ppZXhpLnBocD91cmw9XG5qeDk5IGh0dHBzOi8vejEubTE5MDcuY24vP2Vwcz0wJmp4PVxuang5OSBodHRwczovL3d3dy55YW9zb3UuY2MvamlleGkvP3Y9XG5qeDk5IGh0dHBzOi8vYXBpLnFpYW5xaS5uZXQvdmlwLz91cmw9XG5qeDk5IGh0dHBzOi8vcWltaWhlLmNvbS8/dXJsPVxuang5OSBodHRwczovL3d3dy5rcGV6cC5jbi9qbGV4aS5waHA/dXJsPVxuang5OSBodHRwczovL2p4LnJkaGsubmV0Lz92PVxuang5OSBodHRwOi8vangubXcwLmNjLz91cmw9XG5qeDk5IGh0dHBzOi8vanguZXJnYW4udG9wLz91cmw9XG5qeDk5IGh0dHA6Ly9qeC40MDgwanguY2MvP3VybD1cbmp4OTkgaHR0cHM6Ly9qeC55YW9odWF4dWFuLmNvbS8/dXJsPVxuang5OSBodHRwczovL2p4LnBwZmx2LmNvbS8/dXJsPVxuang5OSBodHRwOi8vdmlwMTIza2FuLnZpcDo1MjAvbTN1OC5waHA/dXJsPVxuang5OSBodHRwczovL2p4LnlwYXJzZS5jb20vaW5kZXgucGhwP3VybD1cbmp4OTE5aHR0cDovL2p4LnlwYXJzZS5jb20vaW5kZXgucGhwP3VybD1cbmp4OTkgaHR0cHM6Ly96eS5hb3h0di5jb20vP3VybD1odHRwczovL2p4Lnl1bmJveXMuY24vP3VybD1cbmp4NiBodHRwOi8vd3d3LnBhbmd1amlleGkuY2MvamlleGkucGhwP3VybD1cbmp4MTAgaHR0cDovL2p4Lm13MC5jYy8/dXJsPVxuangxNyBodHRwczovL2p4LjdjeWQuY29tLz91cmw9XG5qeDI3IGh0dHA6Ly8xN2t5dW4uY29tL2FwaS5waHA/dXJsPVxuangyOCBodHRwOi8vamlleGkua2luZ3NudWcuY24vdHgucGhwP3VybD1cbmp4MjkgaHR0cDovL3l1bi50dnpubi5jbi9saW5lcz91cmw9XG5qeDMwIGh0dHBzOi8vanguc21iay5jYy8/dj1cbmp4MzEgaHR0cDovLzUuNTI1MmUuY29tL2p4LnBocD91cmw9XG5qeDMyIGh0dHA6Ly94LmRsY2FpeGluLmNvbS8/dXJsPVxuangzMyBodHRwczovL2FwaS5zaWd1anguY29tL3YucGhwP3VybD1cbmp4MzQgaHR0cDovL3lzangudnhjYy50b3AvP3VybD1cbmp4MzUgaHR0cHM6Ly96MS5tMTkwNy5jbi8/ang9XG5qeDM2IGh0dHBzOi8vanguMWZmMS5jbi8/dXJsPVxuangzNyBodHRwczovL2FwaS52Ni5jaGF0Lz91cmw9XG5qeDM4IGh0dHBzOi8vYXBpLjNqeC50b3AvdmlwLz91cmw9XG5qeDU2IGh0dHA6Ly9ib2Zhbmcub25saW5lLz91cmw9XG5qeDU3IGh0dHA6Ly9wbGF5eC50b3AvP3VybD1cbmp4NTggaHR0cDovL25pdGlhbjkuY29tLz91cmw9XG5qeDU5IGh0dHA6Ly9taW1pamlleGkudG9wLz91cmw9XG5qeDYwIGh0dHA6Ly9ib2Zhbmcub25saW5lLz91cmw9XG5qeDYxIGh0dHA6Ly9wbGF5eC50b3AvP3VybD1cbmp4NjIgaHR0cDovL25pdGlhbjkuY29tLz91cmw9XG5qeDYzIGh0dHA6Ly9taW1pamlleGkudG9wLz91cmw9XG5qeDY0IGh0dHA6Ly9rOGFhLmNvbS9qeC9pbmRleC5waHA/dXJsPVxuang3NSBodHRwczovL3d3dy4xNzE3eXVuLmNvbS9iZWl5b25nLz91cmw9XG5qeDc2IGh0dHA6Ly9qeC4xNzhkdS5jb20vangyLnBocD91cmw9XG5qeDc3IGh0dHA6Ly9qeC42MThnLmNvbS8/dXJsPVxuang3OCBodHRwczovL2p4LjYxOGcuY29tLz91cmw9XG5qeDc5IGh0dHA6Ly9qeC5penR5eS5jb20vc3ZpcC8/dXJsPVxuang4MCBodHRwczovL2p4Lml6dHl5LmNvbS9zdmlwLz91cmw9XG5qeDkxIGh0dHA6Ly9jZG4uenljODg4LnRvcC8/dXJsPVxuang5MiBodHRwczovL2p4LmZ1eGluZzU2LmNvbS9qaWV4aS8/dXJsPSIsIHZpcFVybHMgPSBlbnN1cmVBcnJheShjdXN0b21WaXBVcmxzKS5tYXAoKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAgICAgbGV0IGUgPSBuLnNwbGl0KC9ccysvKTsKICAgICAgICAgICAgICAgICAgaWYgKG4gPSBlLnBvcCgpLCAhL15odHRwLis9Ly50ZXN0KG4pKSByZXR1cm4ge307CiAgICAgICAgICAgICAgICAgIGxldCB0ID0gMCA8IGUubGVuZ3RoID8gZS5qb2luKCIgIikgOiBuLm1hdGNoKC9cL1wvKC4rXC4pPyhbXlwvXSspXC5cdytcLy8pWzJdLnJlcGxhY2UoL14oXHcpLywgKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbi50b1VwcGVyQ2FzZSgpOwogICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdXJsOiBuLAogICAgICAgICAgICAgICAgICAgIG5hbWU6IHQKICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0pKS5maWx0ZXIoKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIG4udXJsICYmICghaXNNb2JpbGUgfHwgIU5vTW9iaWxlVmlwVXJsUmVnZXgudGVzdChuLnVybCkpOwogICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgaWYgKFZfVSA9IFZfVS5yZXBsYWNlKC/Cty9nLCAiLyIpLnNwbGl0KCIsIiksICFzdG9yZVZpcFVybHMgfHwgc3RvcmVWaXBVcmxzID09PSAi8J+OieW6huelnfCfjokgaHR0cHM6Ly9hcGkuMWRpb3IuY24vYW5hbHlzaXMvMTIzL2luZGV4LnBocD91aWQ9MTQyOCZteT1hZmtydURGSVlaJnVybD1cbvCfjonlu7rlhZrwn46JIGh0dHBzOi8vcGxheWVyLm1hcXEuY24vP3VybD1cbvCfjonnmb7lubTwn46JIGh0dHA6Ly82MGp4LmNvbS8/dXJsPVxu8J+UpWp4MSBodHRwczovL3d3dy5wbGF5bTN1OC5jbi9qaWV4aS5waHA/dXJsPVxu8J+UpWp4MiBodHRwOi8vd3d3Lm1ndHYuY29tLm9qYmtqeC5jb20vP3VybD1cbvCflKVqeDMgaHR0cDovL2FwaS55dWVsaWFuZ2p4LmNvbS8/dXJsPVxu8J+UpWp4NCBodHRwczovL2FwaS5sZWR1b3R2LmNvbS93cC1hcGkvaWZyLnBocD92aWQ9XG7wn5Slang1IGh0dHA6Ly9hcGkubXl6Y2guY24vP3VybD1cbvCflKVqeDYgaHR0cDovL3d3dy5pa3Vray5jb20vP3VybD1cbmp4NyBodHRwczovL2FwaS55dWVsaWFuZ2p4LmNvbS8/dXJsPVxuang4IGh0dHBzOi8vangud3pzbHcuY24vP3VybD1cbmp4OSBodHRwczovL3oxLm0xOTA3LmNuLz9qeD1cbmp4MTAgaHR0cHM6Ly93d3cuOTFqeHMuY29tL2ppZXhpLz91cmw9XG5qeDExIGh0dHBzOi8vZ28ueWgwNTIzLmNuL3kuY3k/dXJsPVxuangxMiBodHRwOi8vang1LjE3OGR1LmNvbS9wMS8/dXJsPVxuangxMyBodHRwczovL3d3dy54eW1hdi5jb20vP3VybD1cbmp4NjYgaHR0cHM6Ly9qeC5wb3BvNTIwLmNuL2ppZXhpLz91cmw9XG5qeDY2IGh0dHBzOi8vd3d3LmdhaTQuY29tLz91cmw9XG5qeDY2IGh0dHA6Ly93d3cuang0ay5jb20vay5waHA/dXJsPVxuang2NiBodHRwczovL2p4LjUyZGFtdS5jb20vZG1qeC9qaWV4aS5waHA/dXJsPVxuang2NiBodHRwczovL2FwaS5qaWV4aS5sYS8/dXJsPVxuang2NiBodHRwczovL2FwaS4zangudG9wL3ZpcC8/dXJsPVxuang2NiBodHRwczovL3d3dy44MDkwLmxhL2FwaS8/dXJsPVxuang2NiBodHRwczovL3ZpcC5wYXJ3aXguY29tOjQ0MzMvcGxheWVyLz91cmw9XG5qeDY2IGh0dHBzOi8vd3d3LmNrbW92LnZpcC9hcGkucGhwP3VybD1cbmp4NjYgaHR0cHM6Ly93d3cuY2twbGF5ZXIudmlwL2ppZXhpLz91cmw9XG5qeDY2IGh0dHBzOi8vanh4LnNteXM4LmNuL2luZGV4LnBocD91cmw9XG5qeDY2IGh0dHBzOi8vangueWFvaHVheHVhbi5jb20vP3VybD1cbmp4NjYgaHR0cHM6Ly9qeC4xMTZrYW4uY29tLz91cmw9XG5qeDY2IGh0dHBzOi8vd3d3LjgwOTBnLmNuL2ppZXhpLz91cmw9XG5qeDY2IGh0dHBzOi8vangubTN1OC50di9qaWV4aS8/dXJsPVxuang2NiBodHRwczovL2p4eC5zbXlzOC5jbi9pbmRleC5waHA/dXJsPVxuang2NiBodHRwczovL3d3dy4xNzE3eXVuLmNvbS9qeC90eS5waHA/dXJsPVxuang2NiBodHRwczovL3ZpcC5qaXVib2p4LmNvbS92aXAvP3VybD1cbmp4NjYgaHR0cHM6Ly93d3cuYWRtaW5pc3RyYXRvcncuY29tL2luZGV4LnBocD91cmw9XG5qeDY2IGh0dHBzOi8vd3d3LnNzYW1hby5jb20vangvP3VybD1cbmp4NjYgaHR0cHM6Ly8xMjMuMWRpb3IuY24vP3VybD1cbmp4NjYgaHR0cHM6Ly92aXAubGFvYmFuZHEuY29tL2ppZXhpLnBocD91cmw9XG5qeDY2IGh0dHBzOi8vd3d3LjgwOTBnLmNuLz91cmw9XG5qeDY2IGh0dHBzOi8veS45ZGFuLmNjLz92PVxuang2NiBodHRwczovL3RoaW5raWJtLm5vdy5zaC8/dXJsPVxuang2NiBodHRwczovL2p4LnF1YW5taW5namlleGkuY29tLz91cmw9XG5qeDY2IGh0dHBzOi8vNjYwZS5jb20vP3VybD1cbmp4NjYgaHR0cHM6Ly93d3cuaDhqeC5jb20vamlleGkucGhwP3VybD1cbmp4NjYgaHR0cHM6Ly9va2p4LmNjLz91cmw9XG5qeDY2IGh0dHBzOi8vanNhcC5haGZ1cWkubmV0Lz91cmw9XG5qeDY2IGh0dHBzOi8vanguaGFvLXpzai5jbi92aXAvP3VybD1cbmp4NjYgaHR0cDovLzQ3MC53ZWIzdi5jb20vPzA9cyYxPVxuang2NiBodHRwczovL3BsYW1ndHZjYWNoZS5jY3lqamQuY29tL3BsYXkucGhwP3VybD1cbmp4NjYgaHR0cHM6Ly93d3cuY3Vhbi5sYS9tM3U4LnBocD91cmw9XG5qeDY2IGh0dHA6Ly9hcGkuYmFpeXVnLnZpcC9pbmRleC5waHA/dXJsPVxuang2NiBodHRwOi8vcGxheXgudG9wLz91cmw9XG5qeDY2IGh0dHA6Ly9ib2Zhbmcub25saW5lLz91cmw9XG5qeDk5IGh0dHA6Ly9qeC5tYWd1YXlzLmNjLz91cmw9XG5qeDk5IGh0dHBzOi8vdmlwLnBhcndpeC5jb206NDQzMy9wbGF5ZXIvP3VybD1cbmp4OTkgaHR0cDovL2FwaS4xM3R2LnRvcC9qaWV4aS8/dXJsPVxuang5OSBodHRwczovL3d3dy5oOGp4LmNvbS9qaWV4aS5waHA/dXJsPVxuang5OSBodHRwczovL3oxLm0xOTA3LmNuLz9lcHM9MCZqeD1cbmp4OTkgaHR0cHM6Ly93d3cueWFvc291LmNjL2ppZXhpLz92PVxuang5OSBodHRwczovL2FwaS5xaWFucWkubmV0L3ZpcC8/dXJsPVxuang5OSBodHRwczovL3FpbWloZS5jb20vP3VybD1cbmp4OTkgaHR0cHM6Ly93d3cua3BlenAuY24vamxleGkucGhwP3VybD1cbmp4OTkgaHR0cHM6Ly9qeC5yZGhrLm5ldC8/dj1cbmp4OTkgaHR0cDovL2p4Lm13MC5jYy8/dXJsPVxuang5OSBodHRwczovL2p4LmVyZ2FuLnRvcC8/dXJsPVxuang5OSBodHRwOi8vanguNDA4MGp4LmNjLz91cmw9XG5qeDk5IGh0dHBzOi8vangueWFvaHVheHVhbi5jb20vP3VybD1cbmp4OTkgaHR0cHM6Ly9qeC5wcGZsdi5jb20vP3VybD1cbmp4OTkgaHR0cDovL3ZpcDEyM2thbi52aXA6NTIwL20zdTgucGhwP3VybD1cbmp4OTkgaHR0cHM6Ly9qeC55cGFyc2UuY29tL2luZGV4LnBocD91cmw9XG5qeDkxOWh0dHA6Ly9qeC55cGFyc2UuY29tL2luZGV4LnBocD91cmw9XG5qeDk5IGh0dHBzOi8venkuYW94dHYuY29tLz91cmw9aHR0cHM6Ly9qeC55dW5ib3lzLmNuLz91cmw9XG5qeDYgaHR0cDovL3d3dy5wYW5ndWppZXhpLmNjL2ppZXhpLnBocD91cmw9XG5qeDEwIGh0dHA6Ly9qeC5tdzAuY2MvP3VybD1cbmp4MTcgaHR0cHM6Ly9qeC43Y3lkLmNvbS8/dXJsPVxuangyNyBodHRwOi8vMTdreXVuLmNvbS9hcGkucGhwP3VybD1cbmp4MjggaHR0cDovL2ppZXhpLmtpbmdzbnVnLmNuL3R4LnBocD91cmw9XG5qeDI5IGh0dHA6Ly95dW4udHZ6bm4uY24vbGluZXM/dXJsPVxuangzMCBodHRwczovL2p4LnNtYmsuY2MvP3Y9XG5qeDMxIGh0dHA6Ly81LjUyNTJlLmNvbS9qeC5waHA/dXJsPVxuangzMiBodHRwOi8veC5kbGNhaXhpbi5jb20vP3VybD1cbmp4MzMgaHR0cHM6Ly9hcGkuc2lndWp4LmNvbS92LnBocD91cmw9XG5qeDM0IGh0dHA6Ly95c2p4LnZ4Y2MudG9wLz91cmw9XG5qeDM1IGh0dHBzOi8vejEubTE5MDcuY24vP2p4PVxuangzNiBodHRwczovL2p4LjFmZjEuY24vP3VybD1cbmp4MzcgaHR0cHM6Ly9hcGkudjYuY2hhdC8/dXJsPVxuangzOCBodHRwczovL2FwaS4zangudG9wL3ZpcC8/dXJsPVxuang1NiBodHRwOi8vYm9mYW5nLm9ubGluZS8/dXJsPVxuang1NyBodHRwOi8vcGxheXgudG9wLz91cmw9XG5qeDU4IGh0dHA6Ly9uaXRpYW45LmNvbS8/dXJsPVxuang1OSBodHRwOi8vbWltaWppZXhpLnRvcC8/dXJsPVxuang2MCBodHRwOi8vYm9mYW5nLm9ubGluZS8/dXJsPVxuang2MSBodHRwOi8vcGxheXgudG9wLz91cmw9XG5qeDYyIGh0dHA6Ly9uaXRpYW45LmNvbS8/dXJsPVxuang2MyBodHRwOi8vbWltaWppZXhpLnRvcC8/dXJsPVxuang2NCBodHRwOi8vazhhYS5jb20vangvaW5kZXgucGhwP3VybD1cbmp4NzUgaHR0cHM6Ly93d3cuMTcxN3l1bi5jb20vYmVpeW9uZy8/dXJsPVxuang3NiBodHRwOi8vanguMTc4ZHUuY29tL2p4Mi5waHA/dXJsPVxuang3NyBodHRwOi8vanguNjE4Zy5jb20vP3VybD1cbmp4NzggaHR0cHM6Ly9qeC42MThnLmNvbS8/dXJsPVxuang3OSBodHRwOi8vanguaXp0eXkuY29tL3N2aXAvP3VybD1cbmp4ODAgaHR0cHM6Ly9qeC5penR5eS5jb20vc3ZpcC8/dXJsPVxuang5MSBodHRwOi8vY2RuLnp5Yzg4OC50b3AvP3VybD1cbmp4OTIgaHR0cHM6Ly9qeC5mdXhpbmc1Ni5jb20vamlleGkvP3VybD0iLnRyaW0oKSkge2NvbnN0IG4gPSBWX04uc3BsaXQoL1vvvIzjgILvvJtdLykubWFwKChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4udHJpbSgpOwogICAgICAgICAgICAgICAgICB9KSkuZmlsdGVyKChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgICAgICAgICAgIH0pKSwgZSA9IG5bcGFyc2VJbnQoRGF0ZS5ub3coKSAvIDFlMyAvIDYwICUgbi5sZW5ndGgpXS5zcGxpdCgiIik7CiAgICAgICAgICAgICAgICAgIFZfVS5zbGljZSgwLCA3KS5tYXAoKGZ1bmN0aW9uKG4sIHQpIHsKICAgICAgICAgICAgICAgICAgICB2aXBVcmxzLnB1c2goewogICAgICAgICAgICAgICAgICAgICAgbmFtZTogZVt0XSwKICAgICAgICAgICAgICAgICAgICAgIHVybDogTV9WaXBVcmwobiksCiAgICAgICAgICAgICAgICAgICAgICBpc1JhbmRvbTogITAKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCFpc0NoZWNrSWZyYW1lU25pZmYpIHsKICAgICAgICAgICAgICAgICAgJCgiaHRtbCIpLmFwcGVuZCgnPG9vLWlmcmFtZXMgc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbjsgcG9zaXRpb246IGZpeGVkOyBib3R0b206IDA7IHBvaW50ZXItZXZlbnRzOiBub25lOyI+PC9vby1pZnJhbWVzPicpOwogICAgICAgICAgICAgICAgICBjb25zdCBuID0gYWRkSWZyYW1lKFNuaWZmQ2hlY2tVcmwpOwogICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZW1vdmVJZnJhbWUobik7CiAgICAgICAgICAgICAgICAgIH0pLCA1ZTMpLCBpc0NoZWNrSWZyYW1lU25pZmYgPSAhMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvbnN0IHZpcHMgPSBBcnJheS5pc0FycmF5KHBsYXlBZGRvbi52aXApID8gcGxheUFkZG9uLnZpcCA6IFsgcGxheUFkZG9uLnZpcCBdOwogICAgICAgICAgICAgICAgdmlwcy5mb3JFYWNoKChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgIGluc2VydFZpcFNvdXJjZSgobiA9IG4uc3BsaXQoL1xzKlx8XHMqLykpWzBdLCBuWzFdKTsKICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcGxheUFkZG9uLnRpdGxlICYmICFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuby0tanVtcCIpICYmIChwbGF5QWRkb24udmlwICYmICQkKChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkKHBsYXlBZGRvbi50aXRsZSkuZXEoMCkudGV4dCgpOwogICAgICAgICAgICAgIH0pLCAoZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgcGxheUFkZG9uLmZpeFRpdGxlICYmIChuID0gcGxheUFkZG9uLmZpeFRpdGxlKG4pKSwgaW5zZXJ0U2VhcmNoQWRkb24obiwgIi5vLS12aXAtbGlzdCIsICJhZnRlciIpOwogICAgICAgICAgICAgIH0pKSwgcGxheUFkZG9uLmp1bXAgJiYgZ29KdW1wKHBsYXlBZGRvbi5qdW1wLCBwbGF5QWRkb24udGl0bGUpKSwgZXhlY0FkZG9uSnMocGxheUFkZG9uKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBzZWFyY2hBZGRvbiA9IGFkZG9uLnNlYXJjaDsKICAgICAgICAgICAgaWYgKHNlYXJjaEFkZG9uICYmIElzKHNlYXJjaEFkZG9uLm1hdGNoKSkgewogICAgICAgICAgICAgIGlmIChzZWFyY2hBZGRvbi5qdW1wICYmIGdvSnVtcChzZWFyY2hBZGRvbi5qdW1wLCBzZWFyY2hBZGRvbi5rZXl3b3JkKSwgc2VhcmNoQWRkb24uanVtcFRvICYmICQkKHNlYXJjaEFkZG9uLmp1bXBUb1swXSwgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgJChzZWFyY2hBZGRvbi5qdW1wVG9bMF0pLmVhY2goKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICBsZXQgbiA9ICQodGhpcykuYXR0cigiaHJlZiIpOwogICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoImhyZWYiLCBuLnJlcGxhY2Uoc2VhcmNoQWRkb24uanVtcFRvWzFdLCBzZWFyY2hBZGRvbi5qdW1wVG9bMl0pKTsKICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICB9KSksIHNlYXJjaEFkZG9uLnJlc3VsdCkgewogICAgICAgICAgICAgICAgY29uc3QgbiA9ICJzdHJpbmciID09IHR5cGVvZiBzZWFyY2hBZGRvbi5yZXN1bHQgPyB7CiAgICAgICAgICAgICAgICAgIHRpdGxlOiBzZWFyY2hBZGRvbi5yZXN1bHQsCiAgICAgICAgICAgICAgICAgIHVybDogc2VhcmNoQWRkb24ucmVzdWx0CiAgICAgICAgICAgICAgICB9IDogc2VhcmNoQWRkb24ucmVzdWx0OwogICAgICAgICAgICAgICAgaWYgKDEgPT09ICQobi50aXRsZSkubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGUgPSAkKG4udGl0bGUpLnRleHQoKTsKICAgICAgICAgICAgICAgICAgaWYgKCEv56ysLnsxLDN9W+Wto+mbhuivnemDqF0uKiQvLnRlc3QoZSkpIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBlID0gJChuLnVybCkuZXEoMCkuYXR0cigiaHJlZiIpOwogICAgICAgICAgICAgICAgICAgIGUgJiYgKGxvY2F0aW9uLmhyZWYgPSBlKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBleGVjQWRkb25KcyhzZWFyY2hBZGRvbik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZXhlY0FkZG9uSnMoYWRkb24pOwogICAgICAgICAgfSkpLCBpc0ZpcnN0UnVuQWRkb24gPSAhMTsKICAgICAgICB9IGVsc2UgaXNGaXJzdFJ1bkFkZG9uICYmICgkKCJodG1sIikucmVtb3ZlQ2xhc3MoIm8tLW1peWluZyBvLS1tIG8tLXBjIG8tLWRlYnVnIiksCiAgICAgICAgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAkaHRtbC5yZW1vdmVBdHRyaWJ1dGUoUExVR0lOX0FUVFIpOwogICAgICAgIH0pLCAxZTMpKTsKICAgICAgfQogICAgICBmdW5jdGlvbiB1cmxEZXRlY3RvcigpIHsKICAgICAgICBzZXRJbnRlcnZhbCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAhZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmIChIcmVmICE9PSB3aW5kb3cubG9jYXRpb24uaHJlZikgewogICAgICAgICAgICAgIGNvbnN0IG4gPSBIcmVmOwogICAgICAgICAgICAgIEhyZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZiwgRS5lbWl0KCJ1cmwuY2hhbmdlIiwgewogICAgICAgICAgICAgICAgbmV3VXJsOiBIcmVmLAogICAgICAgICAgICAgICAgb2xkVXJsOiBuCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0oKTsKICAgICAgICB9KSwgMjUwKTsKICAgICAgfQogICAgICBsZXQgaXNGaXJzdFJ1bkFkZG9uID0gITAsIGlzQ2hlY2tJZnJhbWVTbmlmZiA9ICExOwogICAgICB0cnkgewogICAgICAgIGFkZG9uR28oKTsKICAgICAgfSBjYXRjaCAobikge30KICAgICAgdXJsRGV0ZWN0b3IoKTsKICAgIH0KICB9Cn0oKTs=
Add Comment
Please, Sign In to add comment